Make probe_ops::get_probes fill an std::vector

This patch changes one usage of VEC to std::vector.  It is a relatively
straightforward 1:1 change.  The implementations of
sym_probe_fns::sym_get_probes return a borrowed reference to their probe
vectors, meaning that the caller should not free it.  In the new code, I
made them return a const reference to the vector.

This patch and the following one were tested by the buildbot.  I didn't
see any failures that looked related to this one.

gdb/ChangeLog:

	* probe.h (struct probe_ops) <get_probes>: Change parameter from
	vec to std::vector.
	* probe.c (parse_probes_in_pspace): Update.
	(find_probes_in_objfile): Update.
	(find_probe_by_pc): Update.
	(collect_probes): Update.
	(probe_any_get_probes): Update.
	* symfile.h (struct sym_probe_fns) <sym_get_probes> Change
	return type to reference to std::vector.
	* dtrace-probe.c (dtrace_process_dof_probe): Change parameter to
	std::vector and update.
	(dtrace_process_dof): Likewise.
	(dtrace_get_probes): Likewise.
	* elfread.c (elf_get_probes): Change return type to std::vector,
	store an std::vector in bfd_data.
	(probe_key_free): Update to std::vector.
	* stap-probe.c (handle_stap_probe): Change parameter to
	std::vector and update.
	(stap_get_probes): Likewise.
	* symfile-debug.c (debug_sym_get_probes): Change return type to
	std::vector and update.
This commit is contained in:
Simon Marchi
2017-09-12 13:37:00 +02:00
parent 331f81b22c
commit aaa63a3190
8 changed files with 65 additions and 60 deletions

View File

@@ -1309,35 +1309,30 @@ elf_symfile_init (struct objfile *objfile)
/* Implementation of `sym_get_probes', as documented in symfile.h. */
static VEC (probe_p) *
static const std::vector<probe *> &
elf_get_probes (struct objfile *objfile)
{
VEC (probe_p) *probes_per_bfd;
std::vector<probe *> *probes_per_bfd;
/* Have we parsed this objfile's probes already? */
probes_per_bfd = (VEC (probe_p) *) bfd_data (objfile->obfd, probe_key);
probes_per_bfd = (std::vector<probe *> *) bfd_data (objfile->obfd, probe_key);
if (!probes_per_bfd)
if (probes_per_bfd == NULL)
{
int ix;
const struct probe_ops *probe_ops;
probes_per_bfd = new std::vector<probe *>;
/* Here we try to gather information about all types of probes from the
objfile. */
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops);
ix++)
probe_ops->get_probes (&probes_per_bfd, objfile);
if (probes_per_bfd == NULL)
{
VEC_reserve (probe_p, probes_per_bfd, 1);
gdb_assert (probes_per_bfd != NULL);
}
probe_ops->get_probes (probes_per_bfd, objfile);
set_bfd_data (objfile->obfd, probe_key, probes_per_bfd);
}
return probes_per_bfd;
return *probes_per_bfd;
}
/* Helper function used to free the space allocated for storing SystemTap
@@ -1346,14 +1341,12 @@ elf_get_probes (struct objfile *objfile)
static void
probe_key_free (bfd *abfd, void *d)
{
int ix;
VEC (probe_p) *probes = (VEC (probe_p) *) d;
struct probe *probe;
std::vector<probe *> *probes = (std::vector<probe *> *) d;
for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
for (struct probe *probe : *probes)
probe->pops->destroy (probe);
VEC_free (probe_p, probes);
delete probes;
}