diff options
author | David S. Miller <davem@redhat.com> | 2006-04-05 19:19:12 +0000 |
---|---|---|
committer | David S. Miller <davem@redhat.com> | 2006-04-05 19:19:12 +0000 |
commit | 74bc645f697ce5313604c1c41bc57be9d23be034 (patch) | |
tree | d57bd1323b656380e636f27e48ee7f7aed332f7c /gdb/sparc-linux-tdep.c | |
parent | bac12ca498451fdd4b47a214acaa9d81bcac77f8 (diff) | |
download | gdb-74bc645f697ce5313604c1c41bc57be9d23be034.tar.gz |
* sparc-linux-tdep.c (sparc32_linux_sigframe_init): Pull register
window out of the correct stack frame.
* sparc64-linux-tdep.c (sparc64_linux_sigframe_init): Likewise.
Diffstat (limited to 'gdb/sparc-linux-tdep.c')
-rw-r--r-- | gdb/sparc-linux-tdep.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gdb/sparc-linux-tdep.c b/gdb/sparc-linux-tdep.c index 300db9aa7dd..328889b4c8e 100644 --- a/gdb/sparc-linux-tdep.c +++ b/gdb/sparc-linux-tdep.c @@ -91,7 +91,7 @@ sparc32_linux_sigframe_init (const struct tramp_frame *self, struct trad_frame_cache *this_cache, CORE_ADDR func) { - CORE_ADDR base, addr; + CORE_ADDR base, addr, sp_addr; int regnum; base = frame_unwind_register_unsigned (next_frame, SPARC_O1_REGNUM); @@ -107,13 +107,16 @@ sparc32_linux_sigframe_init (const struct tramp_frame *self, /* Since %g0 is always zero, keep the identity encoding. */ addr = base + 20; + sp_addr = base + 16 + ((SPARC_SP_REGNUM - SPARC_G0_REGNUM) * 4); for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++) { trad_frame_set_reg_addr (this_cache, regnum, addr); addr += 4; } - base = addr = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM); + base = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM); + addr = get_frame_memory_unsigned (next_frame, sp_addr, 4); + for (regnum = SPARC_L0_REGNUM; regnum <= SPARC_I7_REGNUM; regnum++) { trad_frame_set_reg_addr (this_cache, regnum, addr); |