UCRT has _setjmp and _setjmpex function symbols in DLL libs prefixed by the
__intrinsic keyword. Add symbol aliases without this prefix which allows to
call _setjmp and _setjmpex without the prefix also for UCRT builds and so
allows to unify header files for msvcrt vs UCRT builds.

Aliases in crt-aliases.def.in are used for libucrtbase.a and libucrtbased.a
import libraries. Aliases in api-ms-win-crt-private-l1-1-0.def.in are used
for libucrt.a import library. And aliases in setjmp.S are used for
libucrtapp.a import library.
---
 mingw-w64-crt/def-include/crt-aliases.def.in           |  5 +++++
 .../lib-common/api-ms-win-crt-private-l1-1-0.def.in    |  2 ++
 mingw-w64-crt/misc/setjmp.S                            | 10 ++++++++++
 3 files changed, 17 insertions(+)

diff --git a/mingw-w64-crt/def-include/crt-aliases.def.in 
b/mingw-w64-crt/def-include/crt-aliases.def.in
index 3027580ee28d..99512a4fdbfe 100644
--- a/mingw-w64-crt/def-include/crt-aliases.def.in
+++ b/mingw-w64-crt/def-include/crt-aliases.def.in
@@ -339,6 +339,11 @@ strncasecmp == _strnicmp
 ; Some symbols in some version of CRT library were added and some other 
symbols were removed or renamed
 ; This list provides some level of backward and forward compatibility
 
+#ifdef UCRTBASE
+F_NON_ARM64(_setjmp == __intrinsic_setjmp)
+F64(_setjmpex == __intrinsic_setjmpex)
+#endif
+
 #ifndef NO_STRCMPI_ALIAS
 _strcmpi == _stricmp
 #endif
diff --git a/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in 
b/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
index 8aaebcc3d874..a2bce9fcafb7 100644
--- a/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
+++ b/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
@@ -46,7 +46,9 @@ __dcrt_get_wide_environment_from_os
 __dcrt_initial_narrow_environment DATA
 F_I386(__intrinsic_abnormal_termination)
 F_NON_ARM64(__intrinsic_setjmp)
+F_NON_ARM64(_setjmp == __intrinsic_setjmp)
 F64(__intrinsic_setjmpex)
+F64(_setjmpex == __intrinsic_setjmpex)
 __processing_throw
 __report_gsfailure
 __std_exception_copy
diff --git a/mingw-w64-crt/misc/setjmp.S b/mingw-w64-crt/misc/setjmp.S
index 1c73355fbbfb..a2f1dc0bb61d 100644
--- a/mingw-w64-crt/misc/setjmp.S
+++ b/mingw-w64-crt/misc/setjmp.S
@@ -11,6 +11,8 @@
 #ifndef __aarch64__
         .globl  __MINGW_USYMBOL(__intrinsic_setjmp)
         .def    __MINGW_USYMBOL(__intrinsic_setjmp); .scl 2; .type 32; .endef
+        .globl  __MINGW_USYMBOL(_setjmp)
+        .def    __MINGW_USYMBOL(_setjmp); .scl 2; .type 32; .endef
 #endif
 
 #ifdef __x86_64__
@@ -21,6 +23,8 @@
 #ifndef __i386__
         .globl  __MINGW_USYMBOL(__intrinsic_setjmpex)
         .def    __MINGW_USYMBOL(__intrinsic_setjmpex); .scl 2; .type 32; .endef
+        .globl  __MINGW_USYMBOL(_setjmpex)
+        .def    __MINGW_USYMBOL(_setjmpex); .scl 2; .type 32; .endef
 #endif
 
 #ifdef __i386__
@@ -32,6 +36,7 @@
 #if defined(__i386__)
 __MINGW_USYMBOL(_setjmp3):
 __MINGW_USYMBOL(__intrinsic_setjmp):
+__MINGW_USYMBOL(_setjmp):
         movl    4(%esp),%ecx         /* jmp_buf */
         movl    %ebp,0(%ecx)         /* jmp_buf.Ebp */
         movl    %ebx,4(%ecx)         /* jmp_buf.Ebx */
@@ -46,8 +51,10 @@ __MINGW_USYMBOL(__intrinsic_setjmp):
 #elif defined(__x86_64__)
 __MINGW_USYMBOL(setjmp):
 __MINGW_USYMBOL(__intrinsic_setjmp):
+__MINGW_USYMBOL(_setjmp):
         xorq    %rdx,%rdx
 __MINGW_USYMBOL(__intrinsic_setjmpex):
+__MINGW_USYMBOL(_setjmpex):
         movq    %rdx,(%rcx)          /* jmp_buf->Frame */
         movq    %rbx,0x8(%rcx)       /* jmp_buf->Rbx */
         leaq    0x8(%rsp),%rax
@@ -78,8 +85,10 @@ __MINGW_USYMBOL(__intrinsic_setjmpex):
 
 #elif defined(__arm__)
 __MINGW_USYMBOL(__intrinsic_setjmp):
+__MINGW_USYMBOL(_setjmp):
         mov     r1,  #0
 __MINGW_USYMBOL(__intrinsic_setjmpex):
+__MINGW_USYMBOL(_setjmpex):
         str     r1,  [r0]            /* jmp_buf->Frame */
         str     r4,  [r0, #0x4]      /* jmp_buf->R4 */
         str     r5,  [r0, #0x8]      /* jmp_buf->R5 */
@@ -105,6 +114,7 @@ __MINGW_USYMBOL(__intrinsic_setjmpex):
         bx      lr
 #elif defined(__aarch64__)
 __MINGW_USYMBOL(__intrinsic_setjmpex):
+__MINGW_USYMBOL(_setjmpex):
         str     x1,  [x0]             /* jmp_buf->Frame */
         stp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
         stp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
-- 
2.20.1



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to