diff options
author | Andreas Schwab <aschwab@redhat.com> | 2009-06-26 17:10:59 +0200 |
---|---|---|
committer | Andreas Schwab <aschwab@redhat.com> | 2009-06-26 17:10:59 +0200 |
commit | bb8723997676e11a0f7f2b3bf61fedf761da9a2a (patch) | |
tree | 8bef03cd9cbe74b11e08b604c32f01777e39cb0c | |
parent | a879c2cb1753c3aa868aa1e9d2107e9f0deb0dc2 (diff) |
Allow backtracing through ____longjmp_chk.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/____longjmp_chk.S | 8 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/____longjmp_chk.S | 8 |
3 files changed, 23 insertions, 0 deletions
@@ -1,3 +1,10 @@ +2009-06-26 Andreas Schwab <aschwab@redhat.com> + + * sysdeps/powerpc/powerpc32/____longjmp_chk.S (CHECK_SP): Save lr + before call. + * sysdeps/powerpc/powerpc64/____longjmp_chk.S (CHECK_SP): + Likewise. + 2009-06-26 Ulrich Drepper <drepper@redhat.com> * resolv/resolv.h: Define RES_SNGLKUPREOP. diff --git a/sysdeps/powerpc/powerpc32/____longjmp_chk.S b/sysdeps/powerpc/powerpc32/____longjmp_chk.S index 510ce5250d..128899a532 100644 --- a/sysdeps/powerpc/powerpc32/____longjmp_chk.S +++ b/sysdeps/powerpc/powerpc32/____longjmp_chk.S @@ -49,8 +49,16 @@ #define CHECK_SP(reg) \ cmplw reg, r1; \ bge+ .Lok; \ + cfi_remember_state; \ + mflr r0; \ + stwu r1,-16(r1); \ + cfi_adjust_cfa_offset (16); \ + stw r0,20(r1); \ + cfi_offset (lr, 4); \ LOAD_ARG; \ bl HIDDEN_JUMPTARGET (__fortify_fail); \ + nop; \ + cfi_restore_state; \ .Lok: #include <__longjmp-common.S> diff --git a/sysdeps/powerpc/powerpc64/____longjmp_chk.S b/sysdeps/powerpc/powerpc64/____longjmp_chk.S index 56549021aa..f1b7d85e46 100644 --- a/sysdeps/powerpc/powerpc64/____longjmp_chk.S +++ b/sysdeps/powerpc/powerpc64/____longjmp_chk.S @@ -32,8 +32,16 @@ #define CHECK_SP(reg) \ cmpld reg, r1; \ bge+ .Lok; \ + cfi_remember_state; \ + mflr r0; \ + std r0,16(r1); \ + stdu r1,-112(r1); \ + cfi_adjust_cfa_offset (112); \ + cfi_offset (lr, 16); \ ld r3,.LC1@toc(2); \ bl HIDDEN_JUMPTARGET (__fortify_fail); \ + nop; \ + cfi_restore_state; \ .Lok: #include <__longjmp-common.S> |