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
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public