aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2011-03-18 18:47:56 +0000
committerPedro Alves <palves@redhat.com>2011-03-18 18:47:56 +0000
commitdba09041c7c7ac429ebc414c10a9d8ce8472f265 (patch)
tree4ba09319df5a6d6c2694903305c7586d181c08aa /gdb
parent9a26e44c7c1a09ebde0a3f5486246f9dabe3d64f (diff)
downloadgdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.zip
gdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.tar.gz
gdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.tar.bz2
gdb/
* tracepoint.c (set_traceframe_context): Handle unavailable PC gracefully.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/tracepoint.c32
2 files changed, 20 insertions, 17 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 285af63..388e5d6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
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.
* frame.c (frame_unwind_caller_pc_if_available): New.
* stack.c (frame_info): Handle unavailable PC.
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index c9997c6..3ae35d0 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -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