Skip site navigation (1)Skip section navigation (2)
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>