summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc
diff options
context:
space:
mode:
authorAndreas Schwab <aschwab@redhat.com>2009-06-26 17:10:59 +0200
committerAndreas Schwab <aschwab@redhat.com>2009-06-26 17:10:59 +0200
commitbb8723997676e11a0f7f2b3bf61fedf761da9a2a (patch)
tree8bef03cd9cbe74b11e08b604c32f01777e39cb0c /sysdeps/powerpc
parenta879c2cb1753c3aa868aa1e9d2107e9f0deb0dc2 (diff)
Allow backtracing through ____longjmp_chk.
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r--sysdeps/powerpc/powerpc32/____longjmp_chk.S8
-rw-r--r--sysdeps/powerpc/powerpc64/____longjmp_chk.S8
2 files changed, 16 insertions, 0 deletions
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>