aboutsummaryrefslogtreecommitdiff
path: root/gdb/tracepoint.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2017-10-14 08:47:44 -0400
committerSimon Marchi <simon.marchi@ericsson.com>2017-10-14 08:47:44 -0400
commit2098b39391a5ade9ed308d76f2dfc7ceedd2d9a3 (patch)
treea6be020ecea33167c825e9898e81d2f32b8066c6 /gdb/tracepoint.c
parent4cdd21a8d3fd943d6993e9d053edf09583802744 (diff)
downloadbinutils-2098b39391a5ade9ed308d76f2dfc7ceedd2d9a3.zip
binutils-2098b39391a5ade9ed308d76f2dfc7ceedd2d9a3.tar.gz
binutils-2098b39391a5ade9ed308d76f2dfc7ceedd2d9a3.tar.bz2
Make to_traceframe_info return a unique_ptr
Since this target method returns an allocated object, return a unique_ptr. It allows getting rid a some cleanups here and there. I had to shuffle the includes around. First, target.h now needs to include tracepoint.h, to get the definition of traceframe_info_up. However, the definition of enum trace_find_type was later in target, so I had to move it to tracepoint.h, so that the declaration of tfind_1 could know about it. I then had to remove the include of target.h from tracepoint.h, which caused a circular dependency (it was probably included to get enum trace_find_type in the first place anyway). Regression tested on the buildbot. gdb/ChangeLog: * target.h: Include tracepoint.h. (enum trace_find_type): Move to tracepoint.h. (struct target_ops) <to_traceframe_info>: Return a unique ptr. * tracepoint.h: Don't include target.h (enum trace_find_type): Move from target.h. (parse_traceframe_info): Return a unique ptr. * tracepoint.c (current_traceframe_info): Change type to unique ptr. (free_traceframe_info): Remove. (clear_traceframe_info): Don't manually free current_traceframe_info. (free_result): Remove. (parse_traceframe_info): Return a unique ptr. (get_traceframe_info): Adjust to unique ptr. * ctf.c (ctf_traceframe_info): Return a unique ptr. * remote.c (remote_traceframe_info): Return a unique ptr. * tracefile-tfile.c (tfile_traceframe_info): Return a unique ptr. * target-debug.h (target_debug_print_traceframe_info_up): New macro. * target-delegates.c: Regenerate.
Diffstat (limited to 'gdb/tracepoint.c')
-rw-r--r--gdb/tracepoint.c40
1 files changed, 6 insertions, 34 deletions
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index a4a6584..9dd8d87 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -133,7 +133,7 @@ static int tracepoint_number;
yet attempted to fetch it, or if the target does not support
fetching this object, or if we're not inspecting a traceframe
presently. */
-static struct traceframe_info *current_traceframe_info;
+static traceframe_info_up current_traceframe_info;
/* Tracing command lists. */
static struct cmd_list_element *tfindlist;
@@ -191,21 +191,12 @@ current_trace_status (void)
return &trace_status;
}
-/* Destroy INFO. */
-
-static void
-free_traceframe_info (struct traceframe_info *info)
-{
- delete info;
-}
-
/* Free and clear the traceframe info cache of the current
traceframe. */
static void
clear_traceframe_info (void)
{
- free_traceframe_info (current_traceframe_info);
current_traceframe_info = NULL;
}
@@ -4020,16 +4011,6 @@ traceframe_info_start_tvar (struct gdb_xml_parser *parser,
info->tvars.push_back (id);
}
-/* Discard the constructed trace frame info (if an error occurs). */
-
-static void
-free_result (void *p)
-{
- struct traceframe_info *result = (struct traceframe_info *) p;
-
- free_traceframe_info (result);
-}
-
/* The allowed elements and attributes for an XML memory map. */
static const struct gdb_xml_attribute memory_attributes[] = {
@@ -4061,25 +4042,16 @@ static const struct gdb_xml_element traceframe_info_elements[] = {
/* Parse a traceframe-info XML document. */
-struct traceframe_info *
+traceframe_info_up
parse_traceframe_info (const char *tframe_info)
{
- traceframe_info *result = new traceframe_info;
- struct cleanup *back_to;
-
- back_to = make_cleanup (free_result, result);
+ traceframe_info_up result (new traceframe_info);
if (gdb_xml_parse_quick (_("trace frame info"),
"traceframe-info.dtd", traceframe_info_elements,
- tframe_info, result) == 0)
- {
- /* Parsed successfully, keep the result. */
- discard_cleanups (back_to);
-
- return result;
- }
+ tframe_info, result.get ()) == 0)
+ return result;
- do_cleanups (back_to);
return NULL;
}
@@ -4095,7 +4067,7 @@ get_traceframe_info (void)
if (current_traceframe_info == NULL)
current_traceframe_info = target_traceframe_info ();
- return current_traceframe_info;
+ return current_traceframe_info.get ();
}
/* If the target supports the query, return in RESULT the set of