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