diff options
author | Randolph Chung <tausq@debian.org> | 2004-12-08 01:56:16 +0000 |
---|---|---|
committer | Randolph Chung <tausq@debian.org> | 2004-12-08 01:56:16 +0000 |
commit | cc9bed83962b8ed4b30323cb86f52073b5efbf74 (patch) | |
tree | bed40b2af3da142cc57168c043ca10e8af1e0a95 | |
parent | f77a2124d69481a53bfc5ddc7945de81f1dec428 (diff) | |
download | gdb-cc9bed83962b8ed4b30323cb86f52073b5efbf74.zip gdb-cc9bed83962b8ed4b30323cb86f52073b5efbf74.tar.gz gdb-cc9bed83962b8ed4b30323cb86f52073b5efbf74.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/frame.c | 11 |
2 files changed, 16 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 248197e..d422af4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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. + +2004-12-07 Randolph Chung <tausq@debian.org> + * hppa-tdep.h (gdbarch_tdep): Add unwind_adjust_stub method. * hppa-hpux-tdep.c (hppa_hpux_unwind_adjust_stub): New function. (hppa_hpux_init_abi) Set unwind_adjust_stub method. diff --git a/gdb/frame.c b/gdb/frame.c index 25b32f4..b229730 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1199,7 +1199,18 @@ get_prev_frame (struct frame_info *this_frame) 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 |