Index: frame.c =================================================================== RCS file: /cvs/src/src/gdb/frame.c,v retrieving revision 1.279 diff -p -r1.279 frame.c *** frame.c 28 Jan 2010 22:07:58 -0000 1.279 --- frame.c 12 Apr 2010 21:11:25 -0000 *************** *** 43,48 **** --- 43,49 ---- #include "gdbthread.h" #include "block.h" #include "inline-frame.h" + #include "tracepoint.h" static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame); static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame); *************** get_current_frame (void) *** 1144,1155 **** error (_("No stack.")); if (!target_has_memory) error (_("No memory.")); ! if (ptid_equal (inferior_ptid, null_ptid)) ! error (_("No selected thread.")); ! if (is_exited (inferior_ptid)) ! error (_("Invalid selected thread.")); ! if (is_executing (inferior_ptid)) ! error (_("Target is executing.")); if (current_frame == NULL) { --- 1145,1160 ---- error (_("No stack.")); if (!target_has_memory) error (_("No memory.")); ! /* Traceframes are effectively a substitute for the live inferior. */ ! if (get_traceframe_number () < 0) ! { ! if (ptid_equal (inferior_ptid, null_ptid)) ! error (_("No selected thread.")); ! if (is_exited (inferior_ptid)) ! error (_("Invalid selected thread.")); ! if (is_executing (inferior_ptid)) ! error (_("Target is executing.")); ! } if (current_frame == NULL) { Index: tracepoint.c =================================================================== RCS file: /cvs/src/src/gdb/tracepoint.c,v retrieving revision 1.177 diff -p -r1.177 tracepoint.c *** tracepoint.c 9 Apr 2010 20:46:40 -0000 1.177 --- tracepoint.c 12 Apr 2010 21:11:25 -0000 *************** tfind_1 (enum trace_find_type type, int *** 1856,1866 **** int from_tty) { int target_frameno = -1, target_tracept = -1; ! struct frame_id old_frame_id; char *reply; struct breakpoint *tp; ! old_frame_id = get_frame_id (get_current_frame ()); target_frameno = target_trace_find (type, num, addr1, addr2, &target_tracept); --- 1856,1874 ---- int from_tty) { int target_frameno = -1, target_tracept = -1; ! struct frame_id old_frame_id = null_frame_id; char *reply; struct breakpoint *tp; ! /* Only try to get the current stack frame if we have a chance of ! succeeding. In particular, if we're trying to get a first trace ! frame while all threads are running, it's not going to succeed, ! so leave it with a default value and let the frame comparison ! below (correctly) decide to print out the source location of the ! trace frame. */ ! if (!(type == tfind_number && num == -1) ! && (has_stack_frames () || traceframe_number >= 0)) ! old_frame_id = get_frame_id (get_current_frame ()); target_frameno = target_trace_find (type, num, addr1, addr2, &target_tracept); *************** tfind_1 (enum trace_find_type type, int *** 1873,1879 **** } else if (target_frameno == -1) { ! /* A request for a non-existant trace frame has failed. Our response will be different, depending on FROM_TTY: If FROM_TTY is true, meaning that this command was --- 1881,1887 ---- } else if (target_frameno == -1) { ! /* A request for a non-existent trace frame has failed. Our response will be different, depending on FROM_TTY: If FROM_TTY is true, meaning that this command was *************** tfind_1 (enum trace_find_type type, int *** 1952,1958 **** { enum print_what print_what; ! /* NOTE: in immitation of the step command, try to determine whether we have made a transition from one function to another. If so, we'll print the "stack frame" (ie. the new function and it's arguments) -- otherwise we'll just show the --- 1960,1966 ---- { enum print_what print_what; ! /* NOTE: in imitation of the step command, try to determine whether we have made a transition from one function to another. If so, we'll print the "stack frame" (ie. the new function and it's arguments) -- otherwise we'll just show the