2010-04-15 Stan Shebs <stan@codesourcery.com>

* frame.c: Include tracepoint.h.
	(get_current_frame): Allow a trace frame to be an alternate source
	of stack frame data.
	* tracepoint.c (tfind_1): Don't try to get current stack frame if
	it won't succeed.
This commit is contained in:
Stan Shebs 2010-04-16 01:12:07 +00:00
parent 47edb3fead
commit 2ce6d6bf7c
3 changed files with 31 additions and 10 deletions

View file

@ -1,3 +1,11 @@
2010-04-15 Stan Shebs <stan@codesourcery.com>
* frame.c: Include tracepoint.h.
(get_current_frame): Allow a trace frame to be an alternate source
of stack frame data.
* tracepoint.c (tfind_1): Don't try to get current stack frame if
it won't succeed.
2010-04-15 Pedro Alves <pedro@codesourcery.com> 2010-04-15 Pedro Alves <pedro@codesourcery.com>
* ppc-linux-tdep.c (bsd_uthread_solib_loaded): Always pass 0 for * ppc-linux-tdep.c (bsd_uthread_solib_loaded): Always pass 0 for

View file

@ -43,6 +43,7 @@
#include "gdbthread.h" #include "gdbthread.h"
#include "block.h" #include "block.h"
#include "inline-frame.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_1 (struct frame_info *this_frame);
static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame); static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame);
@ -1144,12 +1145,16 @@ get_current_frame (void)
error (_("No stack.")); error (_("No stack."));
if (!target_has_memory) if (!target_has_memory)
error (_("No memory.")); error (_("No memory."));
if (ptid_equal (inferior_ptid, null_ptid)) /* Traceframes are effectively a substitute for the live inferior. */
error (_("No selected thread.")); if (get_traceframe_number () < 0)
if (is_exited (inferior_ptid)) {
error (_("Invalid selected thread.")); if (ptid_equal (inferior_ptid, null_ptid))
if (is_executing (inferior_ptid)) error (_("No selected thread."));
error (_("Target is executing.")); if (is_exited (inferior_ptid))
error (_("Invalid selected thread."));
if (is_executing (inferior_ptid))
error (_("Target is executing."));
}
if (current_frame == NULL) if (current_frame == NULL)
{ {

View file

@ -1856,11 +1856,19 @@ tfind_1 (enum trace_find_type type, int num,
int from_tty) int from_tty)
{ {
int target_frameno = -1, target_tracept = -1; int target_frameno = -1, target_tracept = -1;
struct frame_id old_frame_id; struct frame_id old_frame_id = null_frame_id;
char *reply; char *reply;
struct breakpoint *tp; struct breakpoint *tp;
old_frame_id = get_frame_id (get_current_frame ()); /* 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_frameno = target_trace_find (type, num, addr1, addr2,
&target_tracept); &target_tracept);
@ -1873,7 +1881,7 @@ tfind_1 (enum trace_find_type type, int num,
} }
else if (target_frameno == -1) else if (target_frameno == -1)
{ {
/* A request for a non-existant trace frame has failed. /* A request for a non-existent trace frame has failed.
Our response will be different, depending on FROM_TTY: Our response will be different, depending on FROM_TTY:
If FROM_TTY is true, meaning that this command was If FROM_TTY is true, meaning that this command was
@ -1952,7 +1960,7 @@ tfind_1 (enum trace_find_type type, int num,
{ {
enum print_what print_what; enum print_what print_what;
/* NOTE: in immitation of the step command, try to determine /* NOTE: in imitation of the step command, try to determine
whether we have made a transition from one function to whether we have made a transition from one function to
another. If so, we'll print the "stack frame" (ie. the new another. If so, we'll print the "stack frame" (ie. the new
function and it's arguments) -- otherwise we'll just show the function and it's arguments) -- otherwise we'll just show the