aboutsummaryrefslogtreecommitdiff
path: root/gdb/ppc-linux-tdep.c
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2000-02-22 18:47:41 +0000
committerKevin Buettner <kevinb@redhat.com>2000-02-22 18:47:41 +0000
commit50c9bd316dea4c2a2103d5856a9a942c999e16ae (patch)
tree79e6371c6bad015c5ff46697f9baadb44c581065 /gdb/ppc-linux-tdep.c
parent9a1e79ca636303362b6e05ad5bbbd8580c4bd982 (diff)
downloadgdb-50c9bd316dea4c2a2103d5856a9a942c999e16ae.zip
gdb-50c9bd316dea4c2a2103d5856a9a942c999e16ae.tar.gz
gdb-50c9bd316dea4c2a2103d5856a9a942c999e16ae.tar.bz2
Cleanups and signal handler backtrace fix for GNU/Linux PPC port.
Diffstat (limited to 'gdb/ppc-linux-tdep.c')
-rw-r--r--gdb/ppc-linux-tdep.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index c9a6812..b7182f9 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -95,6 +95,8 @@
#define PPC_LINUX_PT_FPR31 (PPC_LINUX_PT_FPR0 + 2*31)
#define PPC_LINUX_PT_FPSCR (PPC_LINUX_PT_FPR0 + 2*32 + 1)
+int ppc_linux_at_sigtramp_return_path (CORE_ADDR pc);
+
/* Determine if pc is in a signal trampoline...
Ha! That's not what this does at all. wait_for_inferior in infrun.c
@@ -312,12 +314,19 @@ ppc_linux_frame_saved_pc (struct frame_info *fi)
if (fi->signal_handler_caller)
{
CORE_ADDR regs_addr =
- read_memory_integer (fi->frame + PPC_LINUX_REGS_PTR_OFFSET, 4);
+ read_memory_integer (fi->frame + PPC_LINUX_REGS_PTR_OFFSET, 4);
/* return the NIP in the regs array */
return read_memory_integer (regs_addr + 4 * PPC_LINUX_PT_NIP, 4);
}
-
- return rs6000_frame_saved_pc (fi);
+ else if (fi->next && fi->next->signal_handler_caller)
+ {
+ CORE_ADDR regs_addr =
+ read_memory_integer (fi->next->frame + PPC_LINUX_REGS_PTR_OFFSET, 4);
+ /* return LNK in the regs array */
+ return read_memory_integer (regs_addr + 4 * PPC_LINUX_PT_LNK, 4);
+ }
+ else
+ return rs6000_frame_saved_pc (fi);
}
void