]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Allow backtracing through ____longjmp_chk.
authorAndreas Schwab <aschwab@redhat.com>
Fri, 26 Jun 2009 15:10:59 +0000 (17:10 +0200)
committerAndreas Schwab <aschwab@redhat.com>
Fri, 26 Jun 2009 15:10:59 +0000 (17:10 +0200)
ChangeLog
sysdeps/powerpc/powerpc32/____longjmp_chk.S
sysdeps/powerpc/powerpc64/____longjmp_chk.S

index 00c46a1038d372dec5fb7e0ff6b6efb9c96c3ea8..dd08e60249f7885786a998848ce450101a5f9edd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 510ce5250dfdd1d3e1745be72256122396958ca1..128899a5325f383e281e5ea65df7d06ad76654f1 100644 (file)
 #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>
index 56549021aab6845399c4f6219735d36369c08f05..f1b7d85e4692f1da5f25444100eb5520c948aadb 100644 (file)
 #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>