2006-01-24 Jim Blandy <jimb@redhat.com>
* gdbint.texinfo (Frames): Document the basics of GDB's register unwinding model, and explain the existence of the "sentinel" frame.
This commit is contained in:
parent
e8a15d32f6
commit
410dd08eb5
@ -1,3 +1,8 @@
|
||||
2006-01-24 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* gdbint.texinfo (Frames): Document the basics of GDB's register
|
||||
unwinding model, and explain the existence of the "sentinel" frame.
|
||||
|
||||
2006-01-23 Andrew Stubbs <andrew.stubbs@st.com>
|
||||
|
||||
* gdb.texinfo (Choosing files): Mention that -directory is used
|
||||
|
@ -231,6 +231,36 @@ they use.
|
||||
A frame is a construct that @value{GDBN} uses to keep track of calling
|
||||
and called functions.
|
||||
|
||||
@cindex frame, unwind
|
||||
@value{GDBN}'s current frame model is the result of an incremental
|
||||
cleanup of working code, not a fresh design, so it's a little weird.
|
||||
|
||||
The natural model would have a frame object, with methods that read
|
||||
and write that frame's registers. Reading or writing the youngest
|
||||
frame's registers would simply read or write the processor's current
|
||||
registers, since the youngest frame is running directly on the
|
||||
processor. Older frames might have some registers saved on the stack
|
||||
by younger frames, so accessing the older frames' registers would do a
|
||||
mix of memory accesses and register accesses, as appropriate.
|
||||
|
||||
@findex frame_register_unwind
|
||||
Instead, @value{GDBN}'s model is that you find a frame's registers by
|
||||
``unwinding'' them from the next younger frame. That is, to access
|
||||
the registers of frame #1 (the next-to-youngest frame), you actually
|
||||
apply @code{frame_register_unwind} to frame #0 (the youngest frame).
|
||||
But then the obvious question is: how do you access the registers of
|
||||
the youngest frame itself? How do you ``unwind'' them when they're
|
||||
not wound up?
|
||||
|
||||
@cindex sentinel frame
|
||||
@findex get_frame_type
|
||||
@vindex SENTINEL_FRAME
|
||||
To answer this question, GDB has the @dfn{sentinel} frame, the
|
||||
``-1st'' frame. Unwinding registers from the sentinel frame gives you
|
||||
the current values of the youngest real frame's registers. If @var{f}
|
||||
is a sentinel frame, then @code{get_frame_type (@var{f}) ==
|
||||
SENTINEL_FRAME}.
|
||||
|
||||
@findex create_new_frame
|
||||
@vindex FRAME_FP
|
||||
@code{FRAME_FP} in the machine description has no meaning to the
|
||||
|
Loading…
Reference in New Issue
Block a user