Bug fixes for ____longjmp_chk on sparc.
authorDavid S. Miller <davem@davemloft.net>
Mon, 22 Aug 2011 23:53:57 +0000 (16:53 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 22 Aug 2011 23:53:57 +0000 (16:53 -0700)
ChangeLog
sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S
sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S

index 60814a8..e83e46b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-08-22  David S. Miller  <davem@davemloft.net>
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S: Fix
+       sigaltstack check, add missing cfi directives.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S: Add
+       missing cfi directives, and sigaltstack handling.
+
 2011-08-16  Andreas Schwab  <schwab@redhat.com>
 
        [BZ #11724]
index 0ecd7dd..bbb9eaa 100644 (file)
@@ -41,10 +41,14 @@ ENTRY (____longjmp_chk)
         nop
 
        save    %sp, -80, %sp
+       cfi_remember_state
+       cfi_def_cfa_register(%fp)
+       cfi_window_save
+       cfi_register(%o7, %i7)
 
        clr     %o0
        add     %sp, 64, %o1
-       set     __NR_sigaltstack, %g1
+       LOADSYSCALL(sigaltstack)
        ta      0x10
        bcs     .Lok
         ld     [%sp + 64 + 4], %o2
@@ -54,8 +58,8 @@ ENTRY (____longjmp_chk)
 
        ld      [%sp + 64 + 8], %o1
        add     %o0, %o1, %o0
-       sub     %o0, %g3, %o0
-       cmp     %o1, %o0
+       sub     %o0, %g5, %o0
+       cmp     %o0, %o1
        bgeu    .Lok
         nop
 
@@ -76,6 +80,7 @@ ENTRY (____longjmp_chk)
 
 .Lok:
        restore
+       cfi_restore_state
 
 .Lok_norestore:
        ld      ENV(o0,JB_FP), %g3      /* Cache target FP in register %g3.  */
index 9a4c8fe..836e62e 100644 (file)
@@ -40,8 +40,29 @@ ENTRY (____longjmp_chk)
        bleu,pt %xcc, .Lok
         nop
 
-       save    %sp, -128, %sp
+       save    %sp, -208, %sp
+       cfi_remember_state
+       cfi_def_cfa_register(%fp)
+       cfi_window_save
+       cfi_register(%o7, %i7)
+       add     %fp, 2023, %o1
+       clr     %o0
+       LOADSYSCALL(sigaltstack)
+       ta      0x6d
+       bcs,pn  %xcc, .Lok2
+        lduw   [%fp + 2031], %l2
+       andcc   %l2, 0x1, %g0
+       be,pn   %xcc, .Lfail
+        ldx    [%fp + 2023], %l0
+       ldx     [%fp + 2039], %l1
+       sub     %l0, STACK_BIAS, %l0
+       add     %l0, %l1, %l0
+       sub     %l0, %i2, %l0
+       cmp     %l0, %l1
+       bgeu,pt %xcc, .Lok2
+        nop
 
+.Lfail:
 #ifdef PIC
 1:     call    2f
        sethi   %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
@@ -56,7 +77,8 @@ ENTRY (____longjmp_chk)
        call    HIDDEN_JUMPTARGET(__fortify_fail)
         nop
 
-       restore
+.Lok2: restore
+       cfi_restore_state
 
 .Lok:
        /* Modify the context with the value we want to return.  */