forked from Imagelibrary/binutils-gdb
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user