From: Daniel Jacobowitz <drow@false.org>
To: Randolph Chung <randolph@tausq.org>
Cc: gdb@sources.redhat.com
Subject: Re: dwarf2 and frame bases
Date: Thu, 11 Nov 2004 19:42:00 -0000 [thread overview]
Message-ID: <20041111171232.GA10326@nevyn.them.org> (raw)
In-Reply-To: <20041111164852.GS15714@tausq.org>
On Thu, Nov 11, 2004 at 08:48:52AM -0800, Randolph Chung wrote:
> so, if you are at the first insn of the prologue, and you unwind r3, you
> would get the *previous frame*'s frame base. if you used this value to
> calculate the address of your locals, you will get the value they have
> in the previous frame.
Correct. A watchpoint on "b" is associate with a particular frame,
because it's a local. You want the previous frame's copy. You get the
previous frame's copy. Everyone wins.
> sounds like it should still work (i.e it should still be a valid
> address), except the hppa targer has an explicit check for when we
> expect r3 to be modified but we may be in the process of changing it
> (since it's a 3 insn sequence). In that case, we zero the register to
> tell the unwinder not to use the value in the r3 to calculate the frame
> base (it uses the stack pointer and other unwind information in that
> case)
>
> See http://sources.redhat.com/ml/gdb-patches/2004-06/msg00108.html for
> more details.
This sounds totally messed up.
Suppose we're in frame A, called from frame B. We're at the first
instruction. If we ask the sentinel frame to unwind the value of r3,
we'll get its real register value - regardless of where we are in the
sequence. If we ask frame A to unwind r3, we want to get frame B's r3.
Where frame A is in its prologue has no effect on what frame B's r3 was
at the time of calling A.
There's no more details in that message, just a patch :-) I can't
trace exactly what it's doing.
> i know it is kind of hacky, but the frame unwinding code is explicitly
> asking "what is the frame base of this frame", and the target code is
> especially tuned for that.....
>
> i see two possible solutions:
> 1) perhaps the hppa target should use some other mechanism (instead of
> mucking with r3) to tell the next frame that the frame pointer is
> not available.....
The next frame's frame pointer _is_ available. This is what I don't
understand. You were asked, "unwind r3 for frame B" and instead you're
zeroing it based on where frame A is?
> 2) in the dwarf code, when trying to get the frame base, should we
> explicitly ask for the frame base instead of using the dwarf
> expression? perhaps this could be something that can be overridden
> by the target, so that the default still uses the dwarf information.
No. The "frame base" as a GDB concept is completely separate from
DW_AT_frame_base used for local variables; let's not confuse them
further.
--
Daniel Jacobowitz
next prev parent reply other threads:[~2004-11-11 17:12 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-10 23:57 Randolph Chung
2004-11-10 23:58 ` Daniel Jacobowitz
2004-11-11 3:09 ` Randolph Chung
2004-11-11 9:57 ` Daniel Jacobowitz
2004-11-11 17:12 ` Randolph Chung
2004-11-11 19:42 ` Daniel Jacobowitz [this message]
2004-11-11 22:58 ` Randolph Chung
2004-11-11 19:47 ` Mark Kettenis
2004-11-11 21:18 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041111171232.GA10326@nevyn.them.org \
--to=drow@false.org \
--cc=gdb@sources.redhat.com \
--cc=randolph@tausq.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox