* [PATCH]: Fix signal frames on sparc*-*-linux*
@ 2006-04-04 23:44 David S. Miller
2006-04-05 18:37 ` Mark Kettenis
0 siblings, 1 reply; 3+ messages in thread
From: David S. Miller @ 2006-04-04 23:44 UTC (permalink / raw)
To: gdb-patches
The current code is pulling the register window out of the
trampoline's stack frame, not the signal stack frame.
The other targets were getting this right.
This fixes that.
Any objections?
2006-04-04 David S. Miller <davem@sunset.davemloft.net>
* 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.
--- sparc-linux-tdep.c.~1~ 2005-04-22 12:52:21.000000000 -0700
+++ sparc-linux-tdep.c 2006-04-04 15:19:24.000000000 -0700
@@ -91,7 +91,7 @@
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 @@
/* 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);
--- sparc64-linux-tdep.c.~1~ 2005-04-22 16:08:06.000000000 -0700
+++ sparc64-linux-tdep.c 2006-04-04 16:06:41.000000000 -0700
@@ -59,7 +59,7 @@
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);
@@ -69,6 +69,7 @@
/* Since %g0 is always zero, keep the identity encoding. */
addr = base + 8;
+ sp_addr = base + ((SPARC_SP_REGNUM - SPARC_G0_REGNUM) * 8);
for (regnum = SPARC_G1_REGNUM; regnum <= SPARC_O7_REGNUM; regnum++)
{
trad_frame_set_reg_addr (this_cache, regnum, addr);
@@ -81,11 +82,14 @@
trad_frame_set_reg_addr (this_cache, SPARC64_Y_REGNUM, addr + 24);
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)
addr += BIAS;
- base = addr;
for (regnum = SPARC_L0_REGNUM; regnum <= SPARC_I7_REGNUM; regnum++)
{
trad_frame_set_reg_addr (this_cache, regnum, addr);
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH]: Fix signal frames on sparc*-*-linux*
2006-04-04 23:44 [PATCH]: Fix signal frames on sparc*-*-linux* David S. Miller
@ 2006-04-05 18:37 ` Mark Kettenis
2006-04-05 19:21 ` David S. Miller
0 siblings, 1 reply; 3+ messages in thread
From: Mark Kettenis @ 2006-04-05 18:37 UTC (permalink / raw)
To: davem; +Cc: gdb-patches
> Date: Tue, 04 Apr 2006 16:44:37 -0700 (PDT)
> From: "David S. Miller" <davem@davemloft.net>
>
> The current code is pulling the register window out of the
> trampoline's stack frame, not the signal stack frame.
>
> The other targets were getting this right.
>
> This fixes that.
>
> Any objections?
By all means, go ahead and commit.
> 2006-04-04 David S. Miller <davem@sunset.davemloft.net>
>
> * 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.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH]: Fix signal frames on sparc*-*-linux*
2006-04-05 18:37 ` Mark Kettenis
@ 2006-04-05 19:21 ` David S. Miller
0 siblings, 0 replies; 3+ messages in thread
From: David S. Miller @ 2006-04-05 19:21 UTC (permalink / raw)
To: mark.kettenis; +Cc: gdb-patches
From: Mark Kettenis <mark.kettenis@xs4all.nl>
Date: Wed, 5 Apr 2006 20:36:00 +0200 (CEST)
> > Date: Tue, 04 Apr 2006 16:44:37 -0700 (PDT)
> > From: "David S. Miller" <davem@davemloft.net>
> >
> > The current code is pulling the register window out of the
> > trampoline's stack frame, not the signal stack frame.
> >
> > The other targets were getting this right.
> >
> > This fixes that.
> >
> > Any objections?
>
> By all means, go ahead and commit.
Done, thanks for reviewing.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-04-05 19:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-04-04 23:44 [PATCH]: Fix signal frames on sparc*-*-linux* David S. Miller
2006-04-05 18:37 ` Mark Kettenis
2006-04-05 19:21 ` David S. Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox