aboutsummaryrefslogtreecommitdiff
path: root/gdb/tracepoint.c
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2013-05-31 10:06:02 +0000
committerYao Qi <yao@codesourcery.com>2013-05-31 10:06:02 +0000
commit3ca73e0c7da927485513b59c88dbc1b37502c1bd (patch)
tree9468cd02af5bed175cd506cdccc70ee2cbcb6f56 /gdb/tracepoint.c
parente8de40a833f6a9e26d8307cdc95fef429bb73880 (diff)
downloadgdb-3ca73e0c7da927485513b59c88dbc1b37502c1bd.zip
gdb-3ca73e0c7da927485513b59c88dbc1b37502c1bd.tar.gz
gdb-3ca73e0c7da927485513b59c88dbc1b37502c1bd.tar.bz2
gdb/
* tracepoint.c (all_tracepoint_actions_and_cleanup): Declare. (encode_actions): Move code to ... (all_tracepoint_actions_and_cleanup): ... here. New. (trace_dump_command): Likewise.
Diffstat (limited to 'gdb/tracepoint.c')
-rw-r--r--gdb/tracepoint.c75
1 files changed, 39 insertions, 36 deletions
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 614f6b7..d6ff051 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -204,6 +204,8 @@ static void add_register (struct collection_list *collection,
static void free_uploaded_tps (struct uploaded_tp **utpp);
static void free_uploaded_tsvs (struct uploaded_tsv **utsvp);
+static struct command_line *
+ all_tracepoint_actions_and_cleanup (struct breakpoint *t);
extern void _initialize_tracepoint (void);
@@ -1628,26 +1630,8 @@ encode_actions (struct bp_location *tloc, char ***tdp_actions,
gdbarch_virtual_frame_pointer (tloc->gdbarch,
tloc->address, &frame_reg, &frame_offset);
- actions = breakpoint_commands (tloc->owner);
+ actions = all_tracepoint_actions_and_cleanup (tloc->owner);
- /* If there are default expressions to collect, make up a collect
- action and prepend to the action list to encode. Note that since
- validation is per-tracepoint (local var "xyz" might be valid for
- one tracepoint and not another, etc), we make up the action on
- the fly, and don't cache it. */
- if (*default_collect)
- {
- default_collect_line = xstrprintf ("collect %s", default_collect);
- make_cleanup (xfree, default_collect_line);
-
- validate_actionline (default_collect_line, tloc->owner);
-
- default_collect_action = xmalloc (sizeof (struct command_line));
- make_cleanup (xfree, default_collect_action);
- default_collect_action->next = actions;
- default_collect_action->line = default_collect_line;
- actions = default_collect_action;
- }
encode_actions_1 (actions, tloc, frame_reg, frame_offset,
&tracepoint_list, &stepping_list);
@@ -2912,6 +2896,41 @@ trace_dump_actions (struct command_line *action,
}
}
+/* Return all the actions, including default collect, of a tracepoint
+ T. It constructs cleanups into the chain, and leaves the caller to
+ handle them (call do_cleanups). */
+
+static struct command_line *
+all_tracepoint_actions_and_cleanup (struct breakpoint *t)
+{
+ struct command_line *actions;
+
+ actions = breakpoint_commands (t);
+
+ /* If there are default expressions to collect, make up a collect
+ action and prepend to the action list to encode. Note that since
+ validation is per-tracepoint (local var "xyz" might be valid for
+ one tracepoint and not another, etc), we make up the action on
+ the fly, and don't cache it. */
+ if (*default_collect)
+ {
+ struct command_line *default_collect_action;
+ char *default_collect_line;
+
+ default_collect_line = xstrprintf ("collect %s", default_collect);
+ make_cleanup (xfree, default_collect_line);
+
+ validate_actionline (default_collect_line, t);
+ default_collect_action = xmalloc (sizeof (struct command_line));
+ make_cleanup (xfree, default_collect_action);
+ default_collect_action->next = actions;
+ default_collect_action->line = default_collect_line;
+ actions = default_collect_action;
+ }
+
+ return actions;
+}
+
/* The tdump command. */
static void
@@ -2956,23 +2975,7 @@ trace_dump_command (char *args, int from_tty)
if (loc->address == regcache_read_pc (regcache))
stepping_frame = 0;
- actions = breakpoint_commands (&t->base);
-
- /* If there is a default-collect list, make up a collect command,
- prepend to the tracepoint's commands, and pass the whole mess to
- the trace dump scanner. We need to validate because
- default-collect might have been junked since the trace run. */
- if (*default_collect)
- {
- default_collect_line = xstrprintf ("collect %s", default_collect);
- make_cleanup (xfree, default_collect_line);
- validate_actionline (default_collect_line, &t->base);
- default_collect_action = xmalloc (sizeof (struct command_line));
- make_cleanup (xfree, default_collect_action);
- default_collect_action->next = actions;
- default_collect_action->line = default_collect_line;
- actions = default_collect_action;
- }
+ actions = all_tracepoint_actions_and_cleanup (&t->base);
trace_dump_actions (actions, 0, stepping_frame, from_tty);