This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [patch/rfa] allow unwinding "past main" for dummy frames
> Patch is OK, but definitely needs a comment. And the comment should
> mention HP/UX specifically.
i've checked this in:
2004-12-07 Randolph Chung <tausq@debian.org>
* frame.c (get_prev_frame): Don't terminate unwinding at main if we
are unwinding through a dummy frame.
Index: frame.c
===================================================================
RCS file: /cvs/src/src/gdb/frame.c,v
retrieving revision 1.195
diff -u -p -r1.195 frame.c
--- frame.c 10 Nov 2004 23:26:33 -0000 1.195
+++ frame.c 8 Dec 2004 01:54:47 -0000
@@ -1199,7 +1199,18 @@ get_prev_frame (struct frame_info *this_
get_current_frame(). */
gdb_assert (this_frame != NULL);
+ /* tausq/2004-12-07: Dummy frames are skipped because it doesn't make much
+ sense to stop unwinding at a dummy frame. One place where a dummy
+ frame may have an address "inside_main_func" is on HPUX. On HPUX, the
+ pcsqh register (space register for the instruction at the head of the
+ instruction queue) cannot be written directly; the only way to set it
+ is to branch to code that is in the target space. In order to implement
+ frame dummies on HPUX, the called function is made to jump back to where
+ the inferior was when the user function was called. If gdb was inside
+ the main function when we created the dummy frame, the dummy frame will
+ point inside the main function. */
if (this_frame->level >= 0
+ && get_frame_type (this_frame) != DUMMY_FRAME
&& !backtrace_past_main
&& inside_main_func (this_frame))
/* Don't unwind past main(). Note, this is done _before_ the
--
Randolph Chung
Debian GNU/Linux Developer, hppa/ia64 ports
http://www.tausq.org/