gdb/
authorPedro Alves <palves@redhat.com>
Fri, 18 Mar 2011 18:47:56 +0000 (18:47 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 18 Mar 2011 18:47:56 +0000 (18:47 +0000)
* tracepoint.c (set_traceframe_context): Handle unavailable PC
gracefully.

gdb/ChangeLog
gdb/tracepoint.c

index 285af638060fdf256fb5573fa1c46b12967445c1..388e5d6b5a59fb89357e995227b6589db76c3ebb 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-18  Pedro Alves  <pedro@codesourcery.com>
+
+       * tracepoint.c (set_traceframe_context): Handle unavailable PC
+       gracefully.
+
 2011-03-18  Pedro Alves  <pedro@codesourcery.com>
 
        * frame.h (frame_unwind_caller_pc_if_available): Declare.
index c9997c60ebf4286088e1fcb2fb3b4eee3daee852..3ae35d0769257912cceb00b27bd44a7014582a45 100644 (file)
@@ -268,27 +268,25 @@ set_traceframe_context (struct frame_info *trace_frame)
 {
   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