diff options
author | David S. Miller <davem@davemloft.net> | 2011-08-22 16:53:57 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-08-22 16:53:57 -0700 |
commit | 25ad0df13b48d9b7cf4db7190cec09d0393bd6d0 (patch) | |
tree | 86630b546bf8f3d1f8a23d9ddc3997ca6c559152 /sysdeps | |
parent | 304c6e0b2c4d10a6cc2afdb42152aad1cf432c3a (diff) | |
download | glibc-25ad0df13b48d9b7cf4db7190cec09d0393bd6d0.tar.gz glibc-25ad0df13b48d9b7cf4db7190cec09d0393bd6d0.tar.xz glibc-25ad0df13b48d9b7cf4db7190cec09d0393bd6d0.zip |
Bug fixes for ____longjmp_chk on sparc.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S | 26 |
2 files changed, 32 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S index 0ecd7ddf83..bbb9eaa737 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S @@ -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. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S index 9a4c8fe3b9..836e62efe7 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S @@ -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. */ |