ltrace/ltrace-0.6.0-ppc-args.patch
2011-11-25 15:16:39 +01:00

31 lines
906 B
Diff

diff --git a/sysdeps/linux-gnu/ppc/trace.c b/sysdeps/linux-gnu/ppc/trace.c
index 20b3f5d..321e6ec 100644
--- a/sysdeps/linux-gnu/ppc/trace.c
+++ b/sysdeps/linux-gnu/ppc/trace.c
@@ -87,10 +87,22 @@ gimme_arg_regset(enum tof type, Process *proc, int arg_num, arg_type_info *info,
}
else if (greg <= 10)
return (*regs)[greg++];
- else
+ else {
+#ifdef __powerpc64__
+ if (proc->mask_32bit)
+ return ptrace (PTRACE_PEEKDATA, proc->pid,
+ proc->stack_pointer + 8 +
+ sizeof (int) * (arg_num - 8), 0) >> 32;
+ else
+ return ptrace (PTRACE_PEEKDATA, proc->pid,
+ proc->stack_pointer + 112 +
+ sizeof (long) * (arg_num - 8), 0);
+#else
return ptrace (PTRACE_PEEKDATA, proc->pid,
- proc->stack_pointer + sizeof (long) *
- (arg_num - 8), 0);
+ proc->stack_pointer + 8 +
+ sizeof (long) * (arg_num - 8), 0);
+#endif
+ }
return 0;
}