From 3def0b36605f46dde107a69d5f7f846a7f95322c Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 20 Jul 2012 17:54:06 +0000 Subject: [PATCH] 2012-07-20 Jeff Kenton * tilegx-linux-tdep.c (tilegx_linux_sigframe_init): Fix SIGTRAMP_FRAME unwinding. --- gdb/ChangeLog | 5 +++++ gdb/tilegx-linux-tdep.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4bb108b..4be51eb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-07-20 Jeff Kenton + + * tilegx-linux-tdep.c (tilegx_linux_sigframe_init): Fix + SIGTRAMP_FRAME unwinding. + 2012-07-20 Doug Evans * NEWS: Document new options "set/show use-deprecated-index-sections", diff --git a/gdb/tilegx-linux-tdep.c b/gdb/tilegx-linux-tdep.c index 2b7677d..c5e0e80 100644 --- a/gdb/tilegx-linux-tdep.c +++ b/gdb/tilegx-linux-tdep.c @@ -39,13 +39,23 @@ tilegx_linux_sigframe_init (const struct tramp_frame *self, { CORE_ADDR pc = get_frame_register_unsigned (this_frame, 64); CORE_ADDR sp = get_frame_register_unsigned (this_frame, 54); - CORE_ADDR base = sp + 16; + + /* Base address of register save area. */ + CORE_ADDR base = sp + + 16 /* Skip ABI_SAVE_AREA. */ + + 128 /* Skip SIGINFO. */ + + 40; /* Skip UCONTEXT. */ + + /* Address of saved LR register (R56) which holds previous PC. */ + CORE_ADDR prev_pc = base + 56 * 8; + int i; for (i = 0; i < 56; i++) trad_frame_set_reg_addr (this_cache, i, base + i * 8); - trad_frame_set_reg_value (this_cache, 64, pc); + trad_frame_set_reg_value (this_cache, 64, + get_frame_memory_unsigned (this_frame, prev_pc, 8)); /* Save a frame ID. */ trad_frame_set_id (this_cache, frame_id_build (base, func)); -- 2.7.4