Add ____longjmp_chk support for IA-64.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 22 May 2009 01:43:45 +0000 (18:43 -0700)
committerUlrich Drepper <drepper@redhat.com>
Fri, 22 May 2009 01:43:45 +0000 (18:43 -0700)
ChangeLog
sysdeps/unix/sysv/linux/ia64/__longjmp.S

index bbd282c..5746ede 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
 
+       * sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S: New file.
+       * sysdeps/unix/sysv/linux/ia64/__longjmp.S: If CHECK_RSP is defined,
+       use it.
+
        * sysdeps/i386/__longjmp.S: Add .text.
        * sysdeps/x86_64/__longjmp.S: Likewise.
 
index aa18fad..2e74904 100644 (file)
        /* __longjmp(__jmp_buf buf, int val) */
 
 LEAF(__longjmp)
+#ifdef CHECK_RSP
+       alloc r8=ar.pfs,2,1,1,0
+#else
        alloc r8=ar.pfs,2,1,0,0
+#endif
        mov r27=ar.rsc
        add r2=0x98,in0         // r2 <- &jmpbuf.orig_jmp_buf_addr
        ;;
@@ -70,14 +74,18 @@ LEAF(__longjmp)
        add r3=8,in0            // r3 <- &jmpbuf.r1
        shl r9=r25,r17
        ;;
+       ld8.fill.nta r28=[r2],16        // r28 <- jmpbuf.sp
        or r25=r8,r9
        ;;
        mov r26=ar.rnat
        mov ar.unat=r25         // setup ar.unat (NaT bits for r1, r4-r7, and r12)
        ;;
-       ld8.fill.nta sp=[r2],16 // r12 (sp)
+#ifdef CHECK_RSP
+       CHECK_RSP (r28)
+#endif
        ld8.fill.nta gp=[r3],16         // 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