mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
ia64: setjmp/longjmp: stop saving/restoring fpsr [BZ #16379]
The new tst-setjmp-fp test has been failing on IA64 because the setjmp and longjmp helpers take care of saving/restoring the fpsr register. Per the C standards, this is incorrect, so disable that logic. URL: https://sourceware.org/bugzilla/show_bug.cgi?id=16379 Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
030a4976b8
commit
e646a161ce
@ -1,3 +1,12 @@
|
||||
2013-12-30 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
[BZ #16379]
|
||||
* sysdeps/unix/sysv/linux/ia64/__longjmp.S: Comment out loading of
|
||||
fpsr. Update offsets accordingly.
|
||||
* sysdeps/unix/sysv/linux/ia64/nptl/__ia64_longjmp.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/ia64/setjmp.S: Comment out saving of
|
||||
fpsr. Update offsets accordingly.
|
||||
|
||||
2013-12-30 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* sysdeps/unix/sysv/linux/ia64/setjmp.S (setjmp): Call __sigsetjmp
|
||||
@ -304,9 +313,9 @@
|
||||
|
||||
2012-09-24 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* ports/sysdeps/ia64/fpu/fegetround.c (fegetround): Move contents
|
||||
* sysdeps/ia64/fpu/fegetround.c (fegetround): Move contents
|
||||
of function to ...
|
||||
* ports/sysdeps/ia64/fpu/get-rounding-mode.h: ... here.
|
||||
* sysdeps/ia64/fpu/get-rounding-mode.h: ... here.
|
||||
|
||||
2012-09-24 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
|
@ -82,12 +82,12 @@ LEAF(__longjmp)
|
||||
#ifdef CHECK_RSP
|
||||
CHECK_RSP (r28)
|
||||
#endif
|
||||
ld8.fill.nta gp=[r3],16 // r1 (gp)
|
||||
ld8.fill.nta gp=[r3],32 // r1 (gp)
|
||||
dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp)
|
||||
mov sp=r28 // r12 (sp)
|
||||
;;
|
||||
ld8.nta r16=[r2],16 // caller's unat
|
||||
ld8.nta r17=[r3],16 // fpsr
|
||||
// ld8.nta r17=[r3],16 // fpsr
|
||||
;;
|
||||
ld8.fill.nta r4=[r2],16 // r4
|
||||
ld8.fill.nta r5=[r3],16 // r5 (gp)
|
||||
@ -97,7 +97,7 @@ LEAF(__longjmp)
|
||||
ld8.fill.nta r7=[r3],16 // r7
|
||||
;;
|
||||
mov ar.unat=r16 // restore caller's unat
|
||||
mov ar.fpsr=r17 // restore fpsr
|
||||
// mov ar.fpsr=r17 // restore fpsr
|
||||
;;
|
||||
ld8.nta r16=[r2],16 // b0
|
||||
ld8.nta r17=[r3],16 // b1
|
||||
|
@ -75,11 +75,11 @@ LEAF(__ia64_longjmp)
|
||||
mov ar.unat=r25 // setup ar.unat (NaT bits for r1, r4-r7, and r12)
|
||||
;;
|
||||
ld8.fill.nta sp=[r2],16 // r12 (sp)
|
||||
ld8.fill.nta gp=[r3],16 // r1 (gp)
|
||||
ld8.fill.nta gp=[r3],32 // r1 (gp)
|
||||
dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp)
|
||||
;;
|
||||
ld8.nta r16=[r2],16 // caller's unat
|
||||
ld8.nta r17=[r3],16 // fpsr
|
||||
// ld8.nta r17=[r3],16 // fpsr
|
||||
;;
|
||||
ld8.fill.nta r4=[r2],16 // r4
|
||||
ld8.fill.nta r5=[r3],16 // r5 (gp)
|
||||
@ -88,7 +88,7 @@ LEAF(__ia64_longjmp)
|
||||
ld8.fill.nta r7=[r3],16 // r7
|
||||
;;
|
||||
mov ar.unat=r16 // restore caller's unat
|
||||
mov ar.fpsr=r17 // restore fpsr
|
||||
// mov ar.fpsr=r17 // restore fpsr
|
||||
;;
|
||||
ld8.nta r16=[r2],16 // b0
|
||||
ld8.nta r17=[r3],16 // b1
|
||||
|
@ -25,7 +25,7 @@
|
||||
0x000 stack pointer (r12) ; unchangeable (see _JMPBUF_UNWINDS)
|
||||
0x008 r1 (gp)
|
||||
0x010 caller's unat
|
||||
0x018 fpsr
|
||||
0x018 fpsr ; disabled per the C standard; BZ 16379
|
||||
0x020 r4
|
||||
0x028 r5
|
||||
0x030 r6
|
||||
@ -89,15 +89,15 @@ ENTRY(__sigsetjmp)
|
||||
.save ar.unat, loc2
|
||||
mov loc2=ar.unat
|
||||
;;
|
||||
mov r17=ar.fpsr
|
||||
// mov r17=ar.fpsr
|
||||
mov r2=in0
|
||||
add r3=8,in0
|
||||
;;
|
||||
.mem.offset 8,0; st8.spill.nta [r2]=sp,16 // r12 (sp)
|
||||
.mem.offset 0,0; st8.spill.nta [r3]=gp,16 // r1 (gp)
|
||||
.mem.offset 0,0; st8.spill.nta [r3]=gp,32 // r1 (gp)
|
||||
;;
|
||||
st8.nta [r2]=loc2,16 // save caller's unat
|
||||
st8.nta [r3]=r17,16 // save fpsr
|
||||
// st8.nta [r3]=r17,16 // save fpsr
|
||||
add r8=0xa0,in0
|
||||
;;
|
||||
.mem.offset 8,0; st8.spill.nta [r2]=r4,16 // r4
|
||||
|
Loading…
Reference in New Issue
Block a user