Signed-off-by: Jacek Caban <ja...@codeweavers.com>
---
 mingw-w64-crt/Makefile.am        |   1 +
 mingw-w64-crt/misc/longjmp.S     | 128 +++++++++++++++++++++++++++++++
 mingw-w64-crt/misc/mingw_getsp.S | 122 -----------------------------
 3 files changed, 129 insertions(+), 122 deletions(-)
 create mode 100644 mingw-w64-crt/misc/longjmp.S


diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index e7de216d..bd0a29f9 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -313,6 +313,7 @@ src_libmingwex=\
   math/cephes_emath.h   math/cephes_mconf.h math/fp_consts.h     math/abs64.c \
   \
   misc/mb_wc_common.h \
+  misc/longjmp.S \
   misc/mingw_getsp.S \
   misc/alarm.c \
   misc/basename.c        misc/btowc.c               misc/delay-f.c          misc/delay-n.c         \
diff --git a/mingw-w64-crt/misc/longjmp.S b/mingw-w64-crt/misc/longjmp.S
new file mode 100644
index 00000000..e3a13453
--- /dev/null
+++ b/mingw-w64-crt/misc/longjmp.S
@@ -0,0 +1,128 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <_mingw_mac.h>
+
+/* On ARM:
+ * Error: cannot represent BFD_RELOC_32_PCREL relocation in this object file format
+ * But anyway, nothing is needed here as libarm32/libmsvcrt.a is exporting longjmp
+  ldr ip, 1f
+  ldr pc, [pc, ip]
+  1: .long __imp_longjmp - (1b + 4)
+*/
+#if !(defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__))
+	.globl __MINGW_USYMBOL(longjmp)
+	.def	__MINGW_USYMBOL(longjmp);	.scl	2;	.type	32;	.endef
+__MINGW_USYMBOL(longjmp):
+#if defined(_AMD64_) || defined(__x86_64__)
+#ifndef __SEH__
+  xorq %rax,%rax
+  movq %rax, (%rcx)
+#endif
+  leaq __MINGW_IMP_LSYMBOL(longjmp)(%rip), %rax
+  jmpq *(%rax)
+#elif defined(_X86_) || defined(__i386__)
+  jmp *__imp__longjmp
+#endif
+#endif /* !(defined(_ARM_) || defined(__arm__)) */
+
+#if defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__)
+	.globl __MINGW_USYMBOL(__mingw_setjmp)
+	.def	__MINGW_USYMBOL(__mingw_setjmp);	.scl	2;	.type	32;	.endef
+__MINGW_USYMBOL(__mingw_setjmp):
+#if defined(_ARM_) || defined(__arm__)
+	mov     r1,  #0
+	str     r1,  [r0]            /* jmp_buf->Frame */
+	str     r4,  [r0, #0x4]      /* jmp_buf->R4 */
+	str     r5,  [r0, #0x8]      /* jmp_buf->R5 */
+	str     r6,  [r0, #0xc]      /* jmp_buf->R6 */
+	str     r7,  [r0, #0x10]     /* jmp_buf->R7 */
+	str     r8,  [r0, #0x14]     /* jmp_buf->R8 */
+	str     r9,  [r0, #0x18]     /* jmp_buf->R9 */
+	str     r10, [r0, #0x1c]     /* jmp_buf->R10 */
+	str     r11, [r0, #0x20]     /* jmp_buf->R11 */
+	str     sp,  [r0, #0x24]     /* jmp_buf->Sp */
+	str     lr,  [r0, #0x28]     /* jmp_buf->Pc */
+	vmrs    r2,  fpscr
+	str     r2,  [r0, #0x2c]     /* jmp_buf->Fpscr */
+	vstr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
+	vstr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
+	vstr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
+	vstr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
+	vstr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
+	vstr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
+	vstr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
+	vstr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
+	mov     r0,  #0
+	bx      lr
+#elif defined(_ARM64_) || defined(__aarch64__)
+	str     xzr, [x0]             /* jmp_buf->Frame */
+	stp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
+	stp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
+	stp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
+	stp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
+	stp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
+	stp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
+	mov     x2,  sp
+	str     x2,       [x0, #0x70] /* jmp_buf->Sp */
+	mrs     x2,  fpcr
+	str     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
+	mrs     x2,  fpsr
+	str     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
+	stp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
+	stp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
+	stp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
+	stp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
+	mov     x0,  #0
+	ret
+#endif
+
+	.globl __MINGW_USYMBOL(__mingw_longjmp)
+	.def	__MINGW_USYMBOL(__mingw_longjmp);	.scl	2;	.type	32;	.endef
+__MINGW_USYMBOL(__mingw_longjmp):
+#if defined(_ARM_) || defined(__arm__)
+	ldr     r4,  [r0, #0x4]      /* jmp_buf->R4 */
+	ldr     r5,  [r0, #0x8]      /* jmp_buf->R5 */
+	ldr     r6,  [r0, #0xc]      /* jmp_buf->R6 */
+	ldr     r7,  [r0, #0x10]     /* jmp_buf->R7 */
+	ldr     r8,  [r0, #0x14]     /* jmp_buf->R8 */
+	ldr     r9,  [r0, #0x18]     /* jmp_buf->R9 */
+	ldr     r10, [r0, #0x1c]     /* jmp_buf->R10 */
+	ldr     r11, [r0, #0x20]     /* jmp_buf->R11 */
+	ldr     sp,  [r0, #0x24]     /* jmp_buf->Sp */
+	ldr     r2,  [r0, #0x28]     /* jmp_buf->Pc */
+	ldr     r3,  [r0, #0x2c]     /* jmp_buf->Fpscr */
+	vmsr    fpscr, r3
+	vldr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
+	vldr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
+	vldr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
+	vldr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
+	vldr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
+	vldr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
+	vldr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
+	vldr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
+	mov     r0,  r1              /* retval */
+	bx      r2
+#elif defined(_ARM64_) || defined(__aarch64__)
+	ldp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
+	ldp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
+	ldp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
+	ldp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
+	ldp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
+	ldp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
+	ldr     x2,       [x0, #0x70] /* jmp_buf->Sp */
+	mov     sp,  x2
+	ldr     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
+	msr     fpcr, x2
+	ldr     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
+	msr     fpsr, x2
+	ldp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
+	ldp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
+	ldp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
+	ldp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
+	mov     x0,  x1               /* retval */
+	ret
+#endif
+#endif
diff --git a/mingw-w64-crt/misc/mingw_getsp.S b/mingw-w64-crt/misc/mingw_getsp.S
index 5d224d14..1e83b738 100644
--- a/mingw-w64-crt/misc/mingw_getsp.S
+++ b/mingw-w64-crt/misc/mingw_getsp.S
@@ -28,125 +28,3 @@ __MINGW_USYMBOL(mingw_getsp):
 	mov	x0, sp
 	ret
 #endif
-
-/* On ARM:
- * Error: cannot represent BFD_RELOC_32_PCREL relocation in this object file format
- * But anyway, nothing is needed here as libarm32/libmsvcrt.a is exporting longjmp
-  ldr ip, 1f
-  ldr pc, [pc, ip]
-  1: .long __imp_longjmp - (1b + 4)
-*/
-#if !(defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__))
-	.globl __MINGW_USYMBOL(longjmp)
-	.def	__MINGW_USYMBOL(longjmp);	.scl	2;	.type	32;	.endef
-__MINGW_USYMBOL(longjmp):
-#if defined(_AMD64_) || defined(__x86_64__)
-#ifndef __SEH__
-  xorq %rax,%rax
-  movq %rax, (%rcx)
-#endif
-  leaq __MINGW_IMP_LSYMBOL(longjmp)(%rip), %rax
-  jmpq *(%rax)
-#elif defined(_X86_) || defined(__i386__)
-  jmp *__imp__longjmp
-#endif
-#endif /* !(defined(_ARM_) || defined(__arm__)) */
-
-#if defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__)
-	.globl __MINGW_USYMBOL(__mingw_setjmp)
-	.def	__MINGW_USYMBOL(__mingw_setjmp);	.scl	2;	.type	32;	.endef
-__MINGW_USYMBOL(__mingw_setjmp):
-#if defined(_ARM_) || defined(__arm__)
-	mov     r1,  #0
-	str     r1,  [r0]            /* jmp_buf->Frame */
-	str     r4,  [r0, #0x4]      /* jmp_buf->R4 */
-	str     r5,  [r0, #0x8]      /* jmp_buf->R5 */
-	str     r6,  [r0, #0xc]      /* jmp_buf->R6 */
-	str     r7,  [r0, #0x10]     /* jmp_buf->R7 */
-	str     r8,  [r0, #0x14]     /* jmp_buf->R8 */
-	str     r9,  [r0, #0x18]     /* jmp_buf->R9 */
-	str     r10, [r0, #0x1c]     /* jmp_buf->R10 */
-	str     r11, [r0, #0x20]     /* jmp_buf->R11 */
-	str     sp,  [r0, #0x24]     /* jmp_buf->Sp */
-	str     lr,  [r0, #0x28]     /* jmp_buf->Pc */
-	vmrs    r2,  fpscr
-	str     r2,  [r0, #0x2c]     /* jmp_buf->Fpscr */
-	vstr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
-	vstr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
-	vstr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
-	vstr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
-	vstr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
-	vstr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
-	vstr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
-	vstr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
-	mov     r0,  #0
-	bx      lr
-#elif defined(_ARM64_) || defined(__aarch64__)
-	str     xzr, [x0]             /* jmp_buf->Frame */
-	stp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
-	stp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
-	stp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
-	stp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
-	stp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
-	stp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
-	mov     x2,  sp
-	str     x2,       [x0, #0x70] /* jmp_buf->Sp */
-	mrs     x2,  fpcr
-	str     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
-	mrs     x2,  fpsr
-	str     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
-	stp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
-	stp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
-	stp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
-	stp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
-	mov     x0,  #0
-	ret
-#endif
-
-	.globl __MINGW_USYMBOL(__mingw_longjmp)
-	.def	__MINGW_USYMBOL(__mingw_longjmp);	.scl	2;	.type	32;	.endef
-__MINGW_USYMBOL(__mingw_longjmp):
-#if defined(_ARM_) || defined(__arm__)
-	ldr     r4,  [r0, #0x4]      /* jmp_buf->R4 */
-	ldr     r5,  [r0, #0x8]      /* jmp_buf->R5 */
-	ldr     r6,  [r0, #0xc]      /* jmp_buf->R6 */
-	ldr     r7,  [r0, #0x10]     /* jmp_buf->R7 */
-	ldr     r8,  [r0, #0x14]     /* jmp_buf->R8 */
-	ldr     r9,  [r0, #0x18]     /* jmp_buf->R9 */
-	ldr     r10, [r0, #0x1c]     /* jmp_buf->R10 */
-	ldr     r11, [r0, #0x20]     /* jmp_buf->R11 */
-	ldr     sp,  [r0, #0x24]     /* jmp_buf->Sp */
-	ldr     r2,  [r0, #0x28]     /* jmp_buf->Pc */
-	ldr     r3,  [r0, #0x2c]     /* jmp_buf->Fpscr */
-	vmsr    fpscr, r3
-	vldr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
-	vldr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
-	vldr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
-	vldr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
-	vldr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
-	vldr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
-	vldr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
-	vldr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
-	mov     r0,  r1              /* retval */
-	bx      r2
-#elif defined(_ARM64_) || defined(__aarch64__)
-	ldp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
-	ldp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
-	ldp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
-	ldp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
-	ldp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
-	ldp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
-	ldr     x2,       [x0, #0x70] /* jmp_buf->Sp */
-	mov     sp,  x2
-	ldr     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
-	msr     fpcr, x2
-	ldr     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
-	msr     fpsr, x2
-	ldp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
-	ldp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
-	ldp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
-	ldp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
-	mov     x0,  x1               /* retval */
-	ret
-#endif
-#endif

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

Reply via email to