Date: Tue, 13 Nov 2012 03:05:28 +0000 (UTC) From: Ed Maste <emaste@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r242943 - head/contrib/gdb/gdb Message-ID: <201211130305.qAD35ScC067901@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: emaste Date: Tue Nov 13 03:05:28 2012 New Revision: 242943 URL: http://svnweb.freebsd.org/changeset/base/242943 Log: 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 Modified: head/contrib/gdb/gdb/frame.c Modified: head/contrib/gdb/gdb/frame.c ============================================================================== --- head/contrib/gdb/gdb/frame.c Tue Nov 13 03:00:01 2012 (r242942) +++ head/contrib/gdb/gdb/frame.c Tue Nov 13 03:05:28 2012 (r242943) @@ -1846,6 +1846,23 @@ get_prev_frame (struct frame_info *this_ 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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211130305.qAD35ScC067901>