Do not unwind past a zero PC frame.

This improves GDB usability when debugging code compiled with
optimization.

Upstream GDB revision f0031b6d3ae9b164b3747986ab898190bd4dcf8c (prior
to GDB's switch to GPLv3), with frame_debug_got_null_frame expanded
inline.

| 2004-12-12  Andrew Cagney  <cagney@gnu.org>
|
| * frame.c (get_prev_frame): When unwinding normal frames, check
| that the PC isn't zero.

Sponsored by:	ADARA Networks
MFC After:	1 month
This commit is contained in:
Ed Maste 2012-11-13 03:05:28 +00:00
parent 8d22020384
commit c73d086b04
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=242943

View File

@ -1846,6 +1846,23 @@ get_prev_frame (struct frame_info *this_frame)
return NULL;
}
/* Assume that the only way to get a zero PC is through something
like a SIGSEGV or a dummy frame, and hence that NORMAL frames
will never unwind a zero PC. */
if (this_frame->level > 0
&& get_frame_type (this_frame) == NORMAL_FRAME
&& get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
&& get_frame_pc (this_frame) == 0)
{
if (frame_debug)
{
fprintf_unfiltered (gdb_stdlog, "-> ");
fprint_frame (gdb_stdlog, this_frame->prev);
fprintf_unfiltered (gdb_stdlog, " // zero PC \n");
}
return NULL;
}
/* Only try to do the unwind once. */
if (this_frame->prev_p)
{