summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/stack-ppc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/runtime/stack-ppc.c b/runtime/stack-ppc.c
index 9670d06f..a9ff26ac 100644
--- a/runtime/stack-ppc.c
+++ b/runtime/stack-ppc.c
@@ -21,6 +21,24 @@ static void __stp_stack_print (struct pt_regs *regs, int verbose, int levels,
return;
_sp = (unsigned long *) sp;
newsp = _sp[0];
+#ifndef STACK_FRAME_LR_SAVE /* from arch/powerpc/include/asm/ptrace.h */
+#ifdef __powerpc64__
+#define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */
+#define STACK_FRAME_LR_SAVE 2 /* Location of LR in stack frame */
+#define STACK_FRAME_REGS_MARKER ASM_CONST(0x7265677368657265)
+#define STACK_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
+#define STACK_FRAME_MARKER 12
+#define __SIGNAL_FRAMESIZE 128
+#define __SIGNAL_FRAMESIZE32 64
+#else /* __powerpc64__ */
+#define STACK_FRAME_OVERHEAD 16 /* size of minimum stack frame */
+#define STACK_FRAME_LR_SAVE 1 /* Location of LR in stack frame */
+#define STACK_FRAME_REGS_MARKER ASM_CONST(0x72656773)
+#define STACK_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
+#define STACK_FRAME_MARKER 2
+#define __SIGNAL_FRAMESIZE 64
+#endif
+#endif
ip = _sp[STACK_FRAME_LR_SAVE];
if (!firstframe || ip != lr) {
if (verbose) {