mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-05 06:23:58 +08:00
* tracepoint.h (set_traceframe_number)
(cleanup_restore_current_traceframe): Declare. * tracepoint.c (set_traceframe_number): New. (struct current_traceframe_cleanup): New. (do_restore_current_traceframe_cleanup) (restore_current_traceframe_cleanup_dtor) (make_cleanup_restore_current_traceframe): New. * infrun.c: Include tracepoint.h. (fetch_inferior_event): Switch out and in of tfind mode.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
2010-02-24 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
Stan Shebs <stan@codesourcery.com>
|
||||||
|
|
||||||
|
* tracepoint.h (set_traceframe_number)
|
||||||
|
(cleanup_restore_current_traceframe): Declare.
|
||||||
|
* tracepoint.c (set_traceframe_number): New.
|
||||||
|
(struct current_traceframe_cleanup): New.
|
||||||
|
(do_restore_current_traceframe_cleanup)
|
||||||
|
(restore_current_traceframe_cleanup_dtor)
|
||||||
|
(make_cleanup_restore_current_traceframe): New.
|
||||||
|
* infrun.c: Include tracepoint.h.
|
||||||
|
(fetch_inferior_event): Switch out and in of tfind mode.
|
||||||
|
|
||||||
2010-02-24 Pedro Alves <pedro@codesourcery.com>
|
2010-02-24 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* breakpoint.c (breakpoint_init_inferior): Also delete
|
* breakpoint.c (breakpoint_init_inferior): Also delete
|
||||||
|
11
gdb/infrun.c
11
gdb/infrun.c
@ -51,6 +51,7 @@
|
|||||||
#include "record.h"
|
#include "record.h"
|
||||||
#include "inline-frame.h"
|
#include "inline-frame.h"
|
||||||
#include "jit.h"
|
#include "jit.h"
|
||||||
|
#include "tracepoint.h"
|
||||||
|
|
||||||
/* Prototypes for local functions */
|
/* Prototypes for local functions */
|
||||||
|
|
||||||
@ -1761,6 +1762,16 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
|
|||||||
"infrun: proceed (addr=%s, signal=%d, step=%d)\n",
|
"infrun: proceed (addr=%s, signal=%d, step=%d)\n",
|
||||||
paddress (gdbarch, addr), siggnal, step);
|
paddress (gdbarch, addr), siggnal, step);
|
||||||
|
|
||||||
|
/* We're handling a live event, so make sure we're doing live
|
||||||
|
debugging. If we're looking at traceframes while the target is
|
||||||
|
running, we're going to need to get back to that mode after
|
||||||
|
handling the event. */
|
||||||
|
if (non_stop)
|
||||||
|
{
|
||||||
|
make_cleanup_restore_current_traceframe ();
|
||||||
|
set_traceframe_number (-1);
|
||||||
|
}
|
||||||
|
|
||||||
if (non_stop)
|
if (non_stop)
|
||||||
/* In non-stop, each thread is handled individually. The context
|
/* In non-stop, each thread is handled individually. The context
|
||||||
must already be set to the right thread here. */
|
must already be set to the right thread here. */
|
||||||
|
@ -2538,6 +2538,67 @@ get_traceframe_number (void)
|
|||||||
return traceframe_number;
|
return traceframe_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make the traceframe NUM be the current trace frame. Does nothing
|
||||||
|
if NUM is already current. */
|
||||||
|
|
||||||
|
void
|
||||||
|
set_traceframe_number (int num)
|
||||||
|
{
|
||||||
|
int newnum;
|
||||||
|
|
||||||
|
if (traceframe_number == num)
|
||||||
|
{
|
||||||
|
/* Nothing to do. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
newnum = target_trace_find (tfind_number, num, 0, 0, NULL);
|
||||||
|
|
||||||
|
if (newnum != num)
|
||||||
|
warning (_("could not change traceframe"));
|
||||||
|
|
||||||
|
traceframe_number = newnum;
|
||||||
|
|
||||||
|
/* Changing the traceframe changes our view of registers and of the
|
||||||
|
frame chain. */
|
||||||
|
registers_changed ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A cleanup used when switching away and back from tfind mode. */
|
||||||
|
|
||||||
|
struct current_traceframe_cleanup
|
||||||
|
{
|
||||||
|
/* The traceframe we were inspecting. */
|
||||||
|
int traceframe_number;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_restore_current_traceframe_cleanup (void *arg)
|
||||||
|
{
|
||||||
|
struct current_traceframe_cleanup *old = arg;
|
||||||
|
|
||||||
|
set_traceframe_number (old->traceframe_number);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
restore_current_traceframe_cleanup_dtor (void *arg)
|
||||||
|
{
|
||||||
|
struct current_traceframe_cleanup *old = arg;
|
||||||
|
|
||||||
|
xfree (old);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct cleanup *
|
||||||
|
make_cleanup_restore_current_traceframe (void)
|
||||||
|
{
|
||||||
|
struct current_traceframe_cleanup *old;
|
||||||
|
|
||||||
|
old = xmalloc (sizeof (struct current_traceframe_cleanup));
|
||||||
|
old->traceframe_number = traceframe_number;
|
||||||
|
|
||||||
|
return make_cleanup_dtor (do_restore_current_traceframe_cleanup, old,
|
||||||
|
restore_current_traceframe_cleanup_dtor);
|
||||||
|
}
|
||||||
|
|
||||||
/* Given a number and address, return an uploaded tracepoint with that
|
/* Given a number and address, return an uploaded tracepoint with that
|
||||||
number, creating if necessary. */
|
number, creating if necessary. */
|
||||||
|
@ -140,6 +140,9 @@ extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
|
|||||||
extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
|
extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
|
||||||
|
|
||||||
int get_traceframe_number (void);
|
int get_traceframe_number (void);
|
||||||
|
void set_traceframe_number (int);
|
||||||
|
struct cleanup *make_cleanup_restore_current_traceframe (void);
|
||||||
|
|
||||||
void free_actions (struct breakpoint *);
|
void free_actions (struct breakpoint *);
|
||||||
enum actionline_type validate_actionline (char **, struct breakpoint *);
|
enum actionline_type validate_actionline (char **, struct breakpoint *);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user