probe: Replace VEC(probe_ops_cp) with std::vector

This patch replaces the usage of VEC to store pointers to probe_ops with
an std::vector.  The sole usage of that vector type is one global
variable that holds the ops for the various kinds of probes, so this is
pretty straightforward (no allocation/deallocation issues).

gdb/ChangeLog:

	* probe.h (probe_ops_cp): Remove typedef.
	(DEF_VEC_P (probe_ops_cp)): Remove.
	(all_probe_ops): Change type to std::vector.
	* probe.c (info_probes_for_ops): Adjust to vector change.
	(probe_linespec_to_ops): Likewise.
	(all_probe_ops): Change type to std::vector.
	(_initialize_probe): Adjust to vector change.
	* dtrace-probe.c (_initialize_dtrace_probe): Likewise.
	* elfread.c (elf_get_probes): Likewise.
	* stap-probe.c (_initialize_stap_probe): Likewise.
This commit is contained in:
Simon Marchi 2017-09-12 14:15:23 +02:00
parent 1eac6bea98
commit 0782db848b
6 changed files with 26 additions and 31 deletions

View File

@ -1,3 +1,16 @@
2017-09-12 Simon Marchi <simon.marchi@ericsson.com>
* probe.h (probe_ops_cp): Remove typedef.
(DEF_VEC_P (probe_ops_cp)): Remove.
(all_probe_ops): Change type to std::vector.
* probe.c (info_probes_for_ops): Adjust to vector change.
(probe_linespec_to_ops): Likewise.
(all_probe_ops): Change type to std::vector.
(_initialize_probe): Adjust to vector change.
* dtrace-probe.c (_initialize_dtrace_probe): Likewise.
* elfread.c (elf_get_probes): Likewise.
* stap-probe.c (_initialize_stap_probe): Likewise.
2017-09-12 Simon Marchi <simon.marchi@ericsson.com>
* probe.h (struct bound_probe): Define constructors.

View File

@ -912,7 +912,7 @@ info_probes_dtrace_command (char *arg, int from_tty)
void
_initialize_dtrace_probe (void)
{
VEC_safe_push (probe_ops_cp, all_probe_ops, &dtrace_probe_ops);
all_probe_ops.push_back (&dtrace_probe_ops);
add_cmd ("dtrace", class_info, info_probes_dtrace_command,
_("\

View File

@ -1319,15 +1319,12 @@ elf_get_probes (struct objfile *objfile)
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);
for (const probe_ops *ops : all_probe_ops)
ops->get_probes (probes_per_bfd, objfile);
set_bfd_data (objfile->obfd, probe_key, probes_per_bfd);
}

View File

@ -565,9 +565,6 @@ info_probes_for_ops (const char *arg, int from_tty,
if (pops == NULL)
{
const struct probe_ops *po;
int ix;
/* If the probe_ops is NULL, it means the user has requested a "simple"
`info probes', i.e., she wants to print all information about all
probes. For that, we have to identify how many extra fields we will
@ -578,7 +575,7 @@ info_probes_for_ops (const char *arg, int from_tty,
that number. But note that we ignore the probe_ops for which no probes
are defined with the given search criteria. */
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
for (const probe_ops *po : all_probe_ops)
if (exists_probe_with_pops (probes, po))
ui_out_extra_fields += get_number_extra_fields (po);
}
@ -616,13 +613,10 @@ info_probes_for_ops (const char *arg, int from_tty,
if (pops == NULL)
{
const struct probe_ops *po;
int ix;
/* We have to generate the table header for each new probe type
that we will print. Note that this excludes probe types not
having any defined probe with the search criteria. */
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
for (const probe_ops *po : all_probe_ops)
if (exists_probe_with_pops (probes, po))
gen_ui_out_table_header_info (probes, po);
}
@ -647,11 +641,7 @@ info_probes_for_ops (const char *arg, int from_tty,
if (pops == NULL)
{
const struct probe_ops *po;
int ix;
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po);
++ix)
for (const probe_ops *po : all_probe_ops)
if (probe.probe->pops == po)
print_ui_out_info (probe.probe);
else if (exists_probe_with_pops (probes, po))
@ -816,12 +806,9 @@ probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n)
const struct probe_ops *
probe_linespec_to_ops (const char **linespecp)
{
int ix;
const struct probe_ops *probe_ops;
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); ix++)
if (probe_ops->is_linespec (linespecp))
return probe_ops;
for (const probe_ops *ops : all_probe_ops)
if (ops->is_linespec (linespecp))
return ops;
return NULL;
}
@ -980,12 +967,12 @@ static const struct internalvar_funcs probe_funcs =
};
VEC (probe_ops_cp) *all_probe_ops;
std::vector<const probe_ops *> all_probe_ops;
void
_initialize_probe (void)
{
VEC_safe_push (probe_ops_cp, all_probe_ops, &probe_ops_any);
all_probe_ops.push_back (&probe_ops_any);
create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
(void *) (uintptr_t) -1);

View File

@ -160,9 +160,7 @@ struct probe_ops
/* Definition of a vector of probe_ops. */
typedef const struct probe_ops *probe_ops_cp;
DEF_VEC_P (probe_ops_cp);
extern VEC (probe_ops_cp) *all_probe_ops;
extern std::vector<const probe_ops *> all_probe_ops;
/* The probe_ops associated with the generic probe. */

View File

@ -1716,7 +1716,7 @@ info_probes_stap_command (char *arg, int from_tty)
void
_initialize_stap_probe (void)
{
VEC_safe_push (probe_ops_cp, all_probe_ops, &stap_probe_ops);
all_probe_ops.push_back (&stap_probe_ops);
add_setshow_zuinteger_cmd ("stap-expression", class_maintenance,
&stap_expression_debug,