Page MenuHomeFreeBSD

D11393.id30206.diff
No OneTemporary

D11393.id30206.diff

Index: head/lib/libc/arm/gen/_setjmp.S
===================================================================
--- head/lib/libc/arm/gen/_setjmp.S
+++ head/lib/libc/arm/gen/_setjmp.S
@@ -61,25 +61,12 @@
ENTRY(_setjmp)
ldr r1, .L_setjmp_magic
-#if !defined(_STANDALONE)
- ldr r2, .Lfpu_present
-#ifdef PIC
- GOT_INIT(r3, .L_setjmp_got, .L_setjmp_gotinit)
- ldr r2, [r2, r3]
-#else
- ldr r2, [r2]
-#endif
- teq r2, #0 /* do we have a FPU? */
- beq 1f /* no, don't save VFP registers */
-
- orr r1, r1, #(_JB_MAGIC__SETJMP ^ _JB_MAGIC__SETJMP_VFP)
- /* change magic to VFP magic */
+#if !defined(_STANDALONE) && __ARM_ARCH >= 6
add r2, r0, #(_JB_REG_D8 * 4)
vstmia r2, {d8-d15}
vmrs r2, fpscr
str r2, [r0, #(_JB_REG_FPSCR * 4)]
-1:
-#endif /* !_STANDALONE */
+#endif /* !_STANDALONE && __ARM_ARCH >= 6 */
str r1, [r0]
@@ -99,30 +86,20 @@
.L_setjmp_magic:
.word _JB_MAGIC__SETJMP
-#if !defined(_STANDALONE)
- GOT_INITSYM(.L_setjmp_got, .L_setjmp_gotinit)
-.Lfpu_present:
- .word PIC_SYM(_libc_arm_fpu_present, GOTOFF)
-#endif /* !_STANDALONE */
WEAK_ALIAS(___longjmp, _longjmp)
ENTRY(_longjmp)
ldr r2, [r0] /* get magic from jmp_buf */
- bic r3, r2, #(_JB_MAGIC__SETJMP ^ _JB_MAGIC__SETJMP_VFP)
- /* ignore VFP-ness of magic */
ldr ip, .L_setjmp_magic /* load magic */
- teq ip, r3 /* magic correct? */
+ teq ip, r2 /* magic correct? */
bne botch /* no, botch */
-#if !defined(_STANDALONE)
- teq r3, r2 /* did magic change? */
- beq 1f /* no, don't restore VFP */
+#if !defined(_STANDALONE) && __ARM_ARCH >= 6
add ip, r0, #(_JB_REG_D8 * 4)
vldmia ip, {d8-d15}
ldr ip, [r0, #(_JB_REG_FPSCR * 4)]
vmsr fpscr, ip
-1:
-#endif /* !_STANDALONE */
+#endif /* !_STANDALONE && __ARM_ARCH >= 6 */
add r0, r0, #(_JB_REG_R4 * 4)
/* Restore integer registers */
Index: head/lib/libc/arm/gen/setjmp.S
===================================================================
--- head/lib/libc/arm/gen/setjmp.S
+++ head/lib/libc/arm/gen/setjmp.S
@@ -64,23 +64,12 @@
ldr r1, .Lsetjmp_magic
- ldr r2, .Lfpu_present
-#ifdef PIC
- GOT_INIT(r3, .Lsetjmp_got, .Lsetjmp_gotinit)
- ldr r2, [r2, r3]
-#else
- ldr r2, [r2]
-#endif
- teq r2, #0 /* do we have a FPU? */
- beq 1f /* no, don't save VFP registers */
-
- orr r1, r1, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP)
- /* change magic to VFP magic */
+#if __ARM_ARCH >= 6
add r2, r0, #(_JB_REG_D8 * 4)
vstmia r2, {d8-d15}
vmrs r2, fpscr
str r2, [r0, #(_JB_REG_FPSCR * 4)]
-1:
+#endif
str r1, [r0] /* store magic */
@@ -98,9 +87,6 @@
.Lsetjmp_magic:
.word _JB_MAGIC_SETJMP
- GOT_INITSYM(.Lsetjmp_got, .Lsetjmp_gotinit)
-.Lfpu_present:
- .word PIC_SYM(_libc_arm_fpu_present, GOTOFF)
END(setjmp)
.weak _C_LABEL(longjmp)
@@ -108,8 +94,7 @@
ENTRY(__longjmp)
ldr r2, [r0]
ldr ip, .Lsetjmp_magic
- bic r3, r2, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP)
- teq r3, ip
+ teq r2, ip
bne .Lbotch
/* Restore the signal mask. */
@@ -120,14 +105,12 @@
bl PIC_SYM(_C_LABEL(sigprocmask), PLT)
ldmfd sp!, {r0-r2, r14}
- tst r2, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP)
- /* is this a VFP magic? */
- beq 1f /* no, don't restore VFP */
+#if __ARM_ARCH >= 6
add ip, r0, #(_JB_REG_D8 * 4)
vldmia ip, {d8-d15}
ldr ip, [r0, #(_JB_REG_FPSCR * 4)]
vmsr fpscr, ip
-1:
+#endif
add r0, r0, #(_JB_REG_R4 * 4)
/* Restore integer registers */

File Metadata

Mime Type
text/plain
Expires
Mon, Jul 6, 9:09 AM (12 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34705731
Default Alt Text
D11393.id30206.diff (3 KB)

Event Timeline