]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
ia64: setjmp/longjmp: stop saving/restoring fpsr [BZ #16379]
authorMike Frysinger <vapier@gentoo.org>
Mon, 30 Dec 2013 09:40:38 +0000 (09:40 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 30 Dec 2013 15:02:49 +0000 (10:02 -0500)
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>
ports/ChangeLog.ia64
ports/sysdeps/unix/sysv/linux/ia64/__longjmp.S
ports/sysdeps/unix/sysv/linux/ia64/nptl/__ia64_longjmp.S
ports/sysdeps/unix/sysv/linux/ia64/setjmp.S

index b5c426ecb379bd3c7b8e8e9e519525efed079c39..d5e19243588e91b3ef80a7ff5a461f478ee7c450 100644 (file)
@@ -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
 
 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>
 
index 8a70ae2c2a5764f2d220e592e9a0f166779abc89..4860a8caef7231da326da14f53c2011fe23454cf 100644 (file)
@@ -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
index 41cc303c29fe08c75a59f190bcee8cb0bfec7a2e..db61a2c58d721646bfca2a5a3a34d232c96c59b4 100644 (file)
@@ -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
index bf1b980f4eaf9a5f2a156a98ebb2256d78cfa87e..1be53cca4d997e091fbdc7ad9afc681f68a65ae7 100644 (file)
@@ -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