diff options
author | Pedro Alves <palves@redhat.com> | 2017-09-04 17:10:13 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-09-04 17:11:15 +0100 |
commit | 6c5b2ebeacc2538cf342cfd13c4c98ff018e6c9a (patch) | |
tree | baf0e08108974014d60f12733b3349e803dabe70 /gdb/probe.c | |
parent | 7c44b49cb63662b76c6301fdc8e022d7aca655bf (diff) | |
download | fsf-binutils-gdb-6c5b2ebeacc2538cf342cfd13c4c98ff018e6c9a.zip fsf-binutils-gdb-6c5b2ebeacc2538cf342cfd13c4c98ff018e6c9a.tar.gz fsf-binutils-gdb-6c5b2ebeacc2538cf342cfd13c4c98ff018e6c9a.tar.bz2 |
struct symtabs_and_lines -> std::vector<symtab_and_line>
This replaces "struct symtabs_and_lines" with
std::vector<symtab_and_line> in most cases. This removes a number of
cleanups.
In some cases, the sals objects do not own the sals they point at.
Instead they point at some sal that lives on the stack. Typically
something like this:
struct symtab_and_line sal;
struct symtabs_and_lines sals;
// fill in sal
sals.nelts = 1;
sals.sals = &sal;
// use sals
Instead of switching those cases to std::vector too, such usages are
replaced by gdb::array_view<symtab_and_line> instead. This avoids
introducing heap allocations.
gdb/ChangeLog:
2017-09-04 Pedro Alves <palves@redhat.com>
* ax-gdb.c (agent_command_1): Use range-for.
* break-catch-throw.c (re_set_exception_catchpoint): Update.
* breakpoint.c: Include "common/array-view.h".
(init_breakpoint_sal, create_breakpoint_sal): Change sals
parameter from struct symtabs_and_lines to
array_view<symtab_and_line>. Adjust. Use range-for. Update.
(breakpoint_sals_to_pc): Change sals parameter from struct
symtabs_and_lines to std::vector reference.
(check_fast_tracepoint_sals): Change sals parameter from struct
symtabs_and_lines to std::array_view. Use range-for.
(decode_static_tracepoint_spec): Return a std::vector instead of
symtabs_and_lines. Update.
(create_breakpoint): Update.
(break_range_command, until_break_command, clear_command): Update.
(base_breakpoint_decode_location, bkpt_decode_location)
(bkpt_probe_create_sals_from_location)
(bkpt_probe_decode_location, tracepoint_decode_location)
(tracepoint_probe_decode_location)
(strace_marker_create_sals_from_location): Return a std::vector
instead of symtabs_and_lines.
(strace_marker_create_breakpoints_sal): Update.
(strace_marker_decode_location): Return a std::vector instead of
symtabs_and_lines. Update.
(update_breakpoint_locations): Change struct symtabs_and_lines
parameters to gdb::array_view. Adjust.
(location_to_sals): Return a std::vector instead of
symtabs_and_lines. Update.
(breakpoint_re_set_default): Use std::vector instead of struct
symtabs_and_lines.
(decode_location_default): Return a std::vector instead of
symtabs_and_lines. Update.
* breakpoint.h: Include "common/array-view.h".
(struct breakpoint_ops) <decode_location>: Now returns a
std::vector instead of returning a symtabs_and_lines via output
parameter.
(update_breakpoint_locations): Change sals parameters to use
gdb::array_view.
* cli/cli-cmds.c (edit_command, list_command): Update to use
std::vector and gdb::array_view.
(ambiguous_line_spec): Adjust to use gdb::array_view and
range-for.
(compare_symtabs): Rename to ...
(cmp_symtabs): ... this. Change parameters to symtab_and_line
const reference and adjust.
(filter_sals): Rewrite using std::vector and standard algorithms.
* elfread.c (elf_gnu_ifunc_resolver_return_stop): Simplify.
(jump_command): Update to use std::vector.
* linespec.c (struct linespec_state) <canonical_names>: Update
comment.
(add_sal_to_sals_basic): Delete.
(add_sal_to_sals, filter_results, convert_results_to_lsals)
(decode_line_2, create_sals_line_offset)
(convert_address_location_to_sals, convert_linespec_to_sals)
(convert_explicit_location_to_sals, parse_linespec)
(event_location_to_sals, decode_line_full, decode_line_1)
(decode_line_with_current_source)
(decode_line_with_last_displayed, decode_objc)
(decode_digits_list_mode, decode_digits_ordinary, minsym_found)
(linespec_result::~linespec_result): Adjust to use std::vector
instead of symtabs_and_lines.
* linespec.h (linespec_sals::sals): Now a std::vector.
(struct linespec_result): Use std::vector, bool, and in-class
initialization.
(decode_line_1, decode_line_with_current_source)
(decode_line_with_last_displayed): Return std::vector.
* macrocmd.c (info_macros_command): Use std::vector.
* mi/mi-main.c (mi_cmd_trace_find): Use std::vector.
* probe.c (parse_probes_in_pspace, parse_probes): Adjust to use
std::vector.
* probe.h (parse_probes): Return a std::vector.
* python/python.c (gdbpy_decode_line): Use std::vector and
gdb::array_view.
* source.c (select_source_symtab, line_info): Use std::vector.
* stack.c (func_command): Use std::vector.
* symtab.h (struct symtabs_and_lines): Delete.
* tracepoint.c (tfind_line_command, scope_info): Use std::vector.
Diffstat (limited to 'gdb/probe.c')
-rw-r--r-- | gdb/probe.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/gdb/probe.c b/gdb/probe.c index cb2dcdb..5b5e6f0 100644 --- a/gdb/probe.c +++ b/gdb/probe.c @@ -52,7 +52,7 @@ parse_probes_in_pspace (const struct probe_ops *probe_ops, const char *objfile_namestr, const char *provider, const char *name, - struct symtabs_and_lines *result) + std::vector<symtab_and_line> *result) { struct objfile *objfile; @@ -75,8 +75,6 @@ parse_probes_in_pspace (const struct probe_ops *probe_ops, for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) { - struct symtab_and_line *sal; - if (probe_ops != &probe_ops_any && probe->pops != probe_ops) continue; @@ -86,26 +84,25 @@ parse_probes_in_pspace (const struct probe_ops *probe_ops, if (strcmp (probe->name, name) != 0) continue; - ++result->nelts; - result->sals = XRESIZEVEC (struct symtab_and_line, result->sals, - result->nelts); - sal = &result->sals[result->nelts - 1]; + symtab_and_line sal; + + init_sal (&sal); - init_sal (sal); + sal.pc = get_probe_address (probe, objfile); + sal.explicit_pc = 1; + sal.section = find_pc_overlay (sal.pc); + sal.pspace = search_pspace; + sal.probe = probe; + sal.objfile = objfile; - sal->pc = get_probe_address (probe, objfile); - sal->explicit_pc = 1; - sal->section = find_pc_overlay (sal->pc); - sal->pspace = search_pspace; - sal->probe = probe; - sal->objfile = objfile; + result->push_back (std::move (sal)); } } } /* See definition in probe.h. */ -struct symtabs_and_lines +std::vector<symtab_and_line> parse_probes (const struct event_location *location, struct program_space *search_pspace, struct linespec_result *canonical) @@ -113,13 +110,9 @@ parse_probes (const struct event_location *location, char *arg_end, *arg; char *objfile_namestr = NULL, *provider = NULL, *name, *p; struct cleanup *cleanup; - struct symtabs_and_lines result; const struct probe_ops *probe_ops; const char *arg_start, *cs; - result.sals = NULL; - result.nelts = 0; - gdb_assert (event_location_type (location) == PROBE_LOCATION); arg_start = get_probe_location (location); @@ -175,6 +168,7 @@ parse_probes (const struct event_location *location, if (objfile_namestr && *objfile_namestr == '\0') error (_("invalid objfile name")); + std::vector<symtab_and_line> result; if (search_pspace != NULL) { parse_probes_in_pspace (probe_ops, search_pspace, objfile_namestr, @@ -189,7 +183,7 @@ parse_probes (const struct event_location *location, provider, name, &result); } - if (result.nelts == 0) + if (result.empty ()) { throw_error (NOT_FOUND_ERROR, _("No probe matching objfile=`%s', provider=`%s', name=`%s'"), |