* 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.
This commit is contained in:
parent
f5a9b87dbe
commit
80f9e3aafe
3 changed files with 15 additions and 5 deletions
|
@ -3,6 +3,9 @@
|
||||||
* sparc-tdep.c (sparc32_dwarf2_frame_init_reg): New.
|
* sparc-tdep.c (sparc32_dwarf2_frame_init_reg): New.
|
||||||
(sparc32_gdbarch_init): Pass it to dwarf2_frame_set_init_reg.
|
(sparc32_gdbarch_init): Pass it to dwarf2_frame_set_init_reg.
|
||||||
* Makefile.in (sparc-tdep.o): Update dependencies.
|
* Makefile.in (sparc-tdep.o): Update dependencies.
|
||||||
|
* 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.
|
||||||
|
|
||||||
2006-04-04 David S. Miller <davem@davemloft.net>
|
2006-04-04 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ sparc32_linux_sigframe_init (const struct tramp_frame *self,
|
||||||
struct trad_frame_cache *this_cache,
|
struct trad_frame_cache *this_cache,
|
||||||
CORE_ADDR func)
|
CORE_ADDR func)
|
||||||
{
|
{
|
||||||
CORE_ADDR base, addr;
|
CORE_ADDR base, addr, sp_addr;
|
||||||
int regnum;
|
int regnum;
|
||||||
|
|
||||||
base = frame_unwind_register_unsigned (next_frame, SPARC_O1_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. */
|
/* Since %g0 is always zero, keep the identity encoding. */
|
||||||
addr = base + 20;
|
addr = base + 20;
|
||||||
|
sp_addr = base + 16 + ((SPARC_SP_REGNUM - SPARC_G0_REGNUM) * 4);
|
||||||
for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++)
|
for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++)
|
||||||
{
|
{
|
||||||
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
||||||
addr += 4;
|
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++)
|
for (regnum = SPARC_L0_REGNUM; regnum <= SPARC_I7_REGNUM; regnum++)
|
||||||
{
|
{
|
||||||
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
||||||
|
|
|
@ -59,7 +59,7 @@ sparc64_linux_sigframe_init (const struct tramp_frame *self,
|
||||||
struct trad_frame_cache *this_cache,
|
struct trad_frame_cache *this_cache,
|
||||||
CORE_ADDR func)
|
CORE_ADDR func)
|
||||||
{
|
{
|
||||||
CORE_ADDR base, addr;
|
CORE_ADDR base, addr, sp_addr;
|
||||||
int regnum;
|
int regnum;
|
||||||
|
|
||||||
base = frame_unwind_register_unsigned (next_frame, SPARC_O1_REGNUM);
|
base = frame_unwind_register_unsigned (next_frame, SPARC_O1_REGNUM);
|
||||||
|
@ -69,6 +69,7 @@ sparc64_linux_sigframe_init (const struct tramp_frame *self,
|
||||||
|
|
||||||
/* Since %g0 is always zero, keep the identity encoding. */
|
/* Since %g0 is always zero, keep the identity encoding. */
|
||||||
addr = base + 8;
|
addr = base + 8;
|
||||||
|
sp_addr = base + ((SPARC_SP_REGNUM - SPARC_G0_REGNUM) * 8);
|
||||||
for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++)
|
for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++)
|
||||||
{
|
{
|
||||||
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
||||||
|
@ -81,11 +82,14 @@ sparc64_linux_sigframe_init (const struct tramp_frame *self,
|
||||||
trad_frame_set_reg_addr (this_cache, SPARC64_Y_REGNUM, addr + 24);
|
trad_frame_set_reg_addr (this_cache, SPARC64_Y_REGNUM, addr + 24);
|
||||||
trad_frame_set_reg_addr (this_cache, SPARC64_FPRS_REGNUM, addr + 28);
|
trad_frame_set_reg_addr (this_cache, SPARC64_FPRS_REGNUM, addr + 28);
|
||||||
|
|
||||||
addr = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM);
|
base = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM);
|
||||||
|
if (base & 1)
|
||||||
|
base += BIAS;
|
||||||
|
|
||||||
|
addr = get_frame_memory_unsigned (next_frame, sp_addr, 8);
|
||||||
if (addr & 1)
|
if (addr & 1)
|
||||||
addr += BIAS;
|
addr += BIAS;
|
||||||
|
|
||||||
base = addr;
|
|
||||||
for (regnum = SPARC_L0_REGNUM; regnum <= SPARC_I7_REGNUM; regnum++)
|
for (regnum = SPARC_L0_REGNUM; regnum <= SPARC_I7_REGNUM; regnum++)
|
||||||
{
|
{
|
||||||
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue