diff options
author | Pedro Alves <palves@redhat.com> | 2011-03-18 18:47:56 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-03-18 18:47:56 +0000 |
commit | dba09041c7c7ac429ebc414c10a9d8ce8472f265 (patch) | |
tree | 4ba09319df5a6d6c2694903305c7586d181c08aa | |
parent | 9a26e44c7c1a09ebde0a3f5486246f9dabe3d64f (diff) | |
download | gdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.zip gdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.tar.gz gdb-dba09041c7c7ac429ebc414c10a9d8ce8472f265.tar.bz2 |
gdb/
* tracepoint.c (set_traceframe_context): Handle unavailable PC
gracefully.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/tracepoint.c | 32 |
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 |