Wed Dec 3 12:00:42 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
* tracepoint.c (finish_tfind_command): call do_display so that auto-displays are updated by tfind. Also, keep track of frame and current-function so that tfind behaves like stepping (only show the stack frame if we step into a new function or return).
This commit is contained in:
parent
0274a484ce
commit
c677110ca3
2 changed files with 62 additions and 21 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Wed Dec 3 12:00:42 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
|
||||||
|
|
||||||
|
* tracepoint.c (finish_tfind_command): call do_display so that
|
||||||
|
auto-displays are updated by tfind. Also, keep track of frame
|
||||||
|
and current-function so that tfind behaves like stepping (only
|
||||||
|
show the stack frame if we step into a new function or return).
|
||||||
|
|
||||||
Wed Dec 3 14:14:58 1997 David Taylor <taylor@texas.cygnus.com>
|
Wed Dec 3 14:14:58 1997 David Taylor <taylor@texas.cygnus.com>
|
||||||
|
|
||||||
* sol-thread.c: additional support for debugging threaded core
|
* sol-thread.c: additional support for debugging threaded core
|
||||||
|
|
|
@ -1611,11 +1611,20 @@ trace_status_command (args, from_tty)
|
||||||
|
|
||||||
/* Worker function for the various flavors of the tfind command */
|
/* Worker function for the various flavors of the tfind command */
|
||||||
static void
|
static void
|
||||||
finish_tfind_command (reply, from_tty)
|
finish_tfind_command (msg, from_tty)
|
||||||
char *reply;
|
char *msg;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
int target_frameno = -1, target_tracept = -1;
|
int target_frameno = -1, target_tracept = -1;
|
||||||
|
CORE_ADDR old_frame_addr;
|
||||||
|
struct symbol *old_func;
|
||||||
|
char *reply;
|
||||||
|
|
||||||
|
old_frame_addr = FRAME_FP (get_current_frame ());
|
||||||
|
old_func = find_pc_function (read_pc ());
|
||||||
|
|
||||||
|
putpkt (msg);
|
||||||
|
reply = remote_get_noisy_reply (msg);
|
||||||
|
|
||||||
while (reply && *reply)
|
while (reply && *reply)
|
||||||
switch (*reply) {
|
switch (*reply) {
|
||||||
|
@ -1651,6 +1660,8 @@ finish_tfind_command (reply, from_tty)
|
||||||
printf_filtered ("End of trace buffer.\n");
|
printf_filtered ("End of trace buffer.\n");
|
||||||
/* The following will not recurse, since it's special-cased */
|
/* The following will not recurse, since it's special-cased */
|
||||||
trace_find_command ("-1", from_tty);
|
trace_find_command ("-1", from_tty);
|
||||||
|
reply = NULL; /* break out of loop,
|
||||||
|
(avoid recursive nonsense) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1673,10 +1684,24 @@ finish_tfind_command (reply, from_tty)
|
||||||
select_frame (get_current_frame (), 0);
|
select_frame (get_current_frame (), 0);
|
||||||
set_traceframe_num (target_frameno);
|
set_traceframe_num (target_frameno);
|
||||||
set_tracepoint_num (target_tracept);
|
set_tracepoint_num (target_tracept);
|
||||||
set_traceframe_context ((get_current_frame ())->pc);
|
if (target_frameno == -1)
|
||||||
|
set_traceframe_context (-1);
|
||||||
|
else
|
||||||
|
set_traceframe_context (read_pc ());
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
print_stack_frame (selected_frame, selected_frame_level, 1);
|
{
|
||||||
|
int source_only;
|
||||||
|
|
||||||
|
if (old_frame_addr == FRAME_FP (get_current_frame ()) &&
|
||||||
|
old_func == find_pc_function (read_pc ()))
|
||||||
|
source_only = -1;
|
||||||
|
else
|
||||||
|
source_only = 1;
|
||||||
|
|
||||||
|
print_stack_frame (selected_frame, selected_frame_level, source_only);
|
||||||
|
do_displays ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trace_find_command takes a trace frame number n,
|
/* trace_find_command takes a trace frame number n,
|
||||||
|
@ -1722,37 +1747,26 @@ trace_find_command (args, from_tty)
|
||||||
|
|
||||||
frameno = traceframe_number - 1;
|
frameno = traceframe_number - 1;
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
else if (0 == strcasecmp (args, "start"))
|
|
||||||
frameno = 0;
|
|
||||||
else if (0 == strcasecmp (args, "none") ||
|
|
||||||
0 == strcasecmp (args, "end"))
|
|
||||||
frameno = -1;
|
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
frameno = parse_and_eval_address (args);
|
frameno = parse_and_eval_address (args);
|
||||||
|
|
||||||
sprintf (target_buf, "QTFrame:%x", frameno);
|
sprintf (target_buf, "QTFrame:%x", frameno);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
if (frameno == -1) /* end trace debugging */
|
if (frameno == -1) /* end trace debugging */
|
||||||
{ /* hopefully the stub has complied! */
|
{ /* hopefully the stub has complied! */
|
||||||
if (0 != strcmp (tmp, "F-1"))
|
if (0 != strcmp (tmp, "OK"))
|
||||||
error ("Bogus response from target: %s", tmp);
|
error ("Bogus response from target: %s", tmp);
|
||||||
|
|
||||||
flush_cached_frames ();
|
finish_tfind_command (NULL, from_tty);
|
||||||
registers_changed ();
|
|
||||||
select_frame (get_current_frame (), 0);
|
|
||||||
set_traceframe_num (-1);
|
|
||||||
set_tracepoint_num (-1);
|
|
||||||
set_traceframe_context (-1);
|
|
||||||
|
|
||||||
if (from_tty)
|
|
||||||
print_stack_frame (selected_frame, selected_frame_level, 1);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Trace can only be run on remote targets.");
|
error ("Trace can only be run on remote targets.");
|
||||||
|
@ -1803,10 +1817,14 @@ trace_find_pc_command (args, from_tty)
|
||||||
pc = parse_and_eval_address (args);
|
pc = parse_and_eval_address (args);
|
||||||
|
|
||||||
sprintf (target_buf, "QTFrame:pc:%x", pc);
|
sprintf (target_buf, "QTFrame:pc:%x", pc);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Trace can only be run on remote targets.");
|
error ("Trace can only be run on remote targets.");
|
||||||
|
@ -1832,10 +1850,14 @@ trace_find_tracepoint_command (args, from_tty)
|
||||||
tdp = parse_and_eval_address (args);
|
tdp = parse_and_eval_address (args);
|
||||||
|
|
||||||
sprintf (target_buf, "QTFrame:tdp:%x", tdp);
|
sprintf (target_buf, "QTFrame:tdp:%x", tdp);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Trace can only be run on remote targets.");
|
error ("Trace can only be run on remote targets.");
|
||||||
|
@ -1930,10 +1952,14 @@ trace_find_line_command (args, from_tty)
|
||||||
sprintf (target_buf, "QTFrame:range:%x:%x", start_pc, end_pc - 1);
|
sprintf (target_buf, "QTFrame:range:%x:%x", start_pc, end_pc - 1);
|
||||||
else /* find OUTSIDE OF range of CURRENT line */
|
else /* find OUTSIDE OF range of CURRENT line */
|
||||||
sprintf (target_buf, "QTFrame:outside:%x:%x", start_pc, end_pc - 1);
|
sprintf (target_buf, "QTFrame:outside:%x:%x", start_pc, end_pc - 1);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
do_cleanups (old_chain);
|
do_cleanups (old_chain);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1973,10 +1999,14 @@ trace_find_range_command (args, from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf (target_buf, "QTFrame:range:%x:%x", start, stop);
|
sprintf (target_buf, "QTFrame:range:%x:%x", start, stop);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Trace can only be run on remote targets.");
|
error ("Trace can only be run on remote targets.");
|
||||||
|
@ -2015,10 +2045,14 @@ trace_find_outside_command (args, from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf (target_buf, "QTFrame:outside:%x:%x", start, stop);
|
sprintf (target_buf, "QTFrame:outside:%x:%x", start, stop);
|
||||||
|
#if 0
|
||||||
putpkt (target_buf);
|
putpkt (target_buf);
|
||||||
tmp = remote_get_noisy_reply (target_buf);
|
tmp = remote_get_noisy_reply (target_buf);
|
||||||
|
|
||||||
finish_tfind_command (tmp, from_tty);
|
finish_tfind_command (tmp, from_tty);
|
||||||
|
#else
|
||||||
|
finish_tfind_command (target_buf, from_tty);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Trace can only be run on remote targets.");
|
error ("Trace can only be run on remote targets.");
|
||||||
|
|
Loading…
Reference in a new issue