This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[unavailable regs/locals, 08/11] unavailable PC, "tfind"


This makes "tfind" behave gracefully for traceframes which
haven't collected the PC (or the target couldn't infer it).
Without this, tfind would throw a "PC not available" instead
of succeeding.

-- 
Pedro Alves

2011-02-22  Pedro Alves  <pedro@codesourcery.com>

	gdb/
	* tracepoint.c (set_traceframe_context): Handle unavailable PC
	gracefully.

---
 gdb/tracepoint.c |   32 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 17 deletions(-)

Index: src/gdb/tracepoint.c
===================================================================
--- src.orig/gdb/tracepoint.c	2011-02-01 19:34:08.000000000 +0000
+++ src/gdb/tracepoint.c	2011-02-02 11:04:34.887898991 +0000
@@ -270,27 +270,25 @@ set_traceframe_context (struct frame_inf
 {
   CORE_ADDR trace_pc;
 
-  if (trace_frame == NULL)	/* Cease debugging any trace buffers.  */
+  /* Save as globals for internal use.  */
+  if (trace_frame != NULL
+      && get_frame_pc_if_available (trace_frame, &trace_pc))
+    {
+      traceframe_sal = find_pc_line (trace_pc, 0);
+      traceframe_fun = find_pc_function (trace_pc);
+
+      /* Save linenumber as "$trace_line", a debugger variable visible to
+	 users.  */
+      set_internalvar_integer (lookup_internalvar ("trace_line"),
+			       traceframe_sal.line);
+    }
+  else
     {
-      traceframe_fun = 0;
-      traceframe_sal.pc = traceframe_sal.line = 0;
-      traceframe_sal.symtab = NULL;
-      clear_internalvar (lookup_internalvar ("trace_func"));
-      clear_internalvar (lookup_internalvar ("trace_file"));
+      init_sal (&traceframe_sal);
+      traceframe_fun = NULL;
       set_internalvar_integer (lookup_internalvar ("trace_line"), -1);
-      return;
     }
 
-  /* Save as globals for internal use.  */
-  trace_pc = get_frame_pc (trace_frame);
-  traceframe_sal = find_pc_line (trace_pc, 0);
-  traceframe_fun = find_pc_function (trace_pc);
-
-  /* Save linenumber as "$trace_line", a debugger variable visible to
-     users.  */
-  set_internalvar_integer (lookup_internalvar ("trace_line"),
-			   traceframe_sal.line);
-
   /* Save func name as "$trace_func", a debugger variable visible to
      users.  */
   if (traceframe_fun == NULL


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]