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> 2017-09-12 Simon Marchi <simon.marchi@ericsson.com>
* probe.h (struct bound_probe): Define constructors. * probe.h (struct bound_probe): Define constructors.

View file

@ -912,7 +912,7 @@ info_probes_dtrace_command (char *arg, int from_tty)
void void
_initialize_dtrace_probe (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, 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) if (probes_per_bfd == NULL)
{ {
int ix;
const struct probe_ops *probe_ops;
probes_per_bfd = new std::vector<probe *>; probes_per_bfd = new std::vector<probe *>;
/* Here we try to gather information about all types of probes from the /* Here we try to gather information about all types of probes from the
objfile. */ objfile. */
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); for (const probe_ops *ops : all_probe_ops)
ix++) ops->get_probes (probes_per_bfd, objfile);
probe_ops->get_probes (probes_per_bfd, objfile);
set_bfd_data (objfile->obfd, probe_key, probes_per_bfd); 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) if (pops == NULL)
{ {
const struct probe_ops *po;
int ix;
/* If the probe_ops is NULL, it means the user has requested a "simple" /* 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 `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 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 that number. But note that we ignore the probe_ops for which no probes
are defined with the given search criteria. */ 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)) if (exists_probe_with_pops (probes, po))
ui_out_extra_fields += get_number_extra_fields (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) if (pops == NULL)
{ {
const struct probe_ops *po;
int ix;
/* We have to generate the table header for each new probe type /* We have to generate the table header for each new probe type
that we will print. Note that this excludes probe types not that we will print. Note that this excludes probe types not
having any defined probe with the search criteria. */ 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)) if (exists_probe_with_pops (probes, po))
gen_ui_out_table_header_info (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) if (pops == NULL)
{ {
const struct probe_ops *po; for (const probe_ops *po : all_probe_ops)
int ix;
for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po);
++ix)
if (probe.probe->pops == po) if (probe.probe->pops == po)
print_ui_out_info (probe.probe); print_ui_out_info (probe.probe);
else if (exists_probe_with_pops (probes, po)) 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 * const struct probe_ops *
probe_linespec_to_ops (const char **linespecp) probe_linespec_to_ops (const char **linespecp)
{ {
int ix; for (const probe_ops *ops : all_probe_ops)
const struct probe_ops *probe_ops; if (ops->is_linespec (linespecp))
return 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;
return NULL; 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 void
_initialize_probe (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, create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
(void *) (uintptr_t) -1); (void *) (uintptr_t) -1);

View file

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

View file

@ -1716,7 +1716,7 @@ info_probes_stap_command (char *arg, int from_tty)
void void
_initialize_stap_probe (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, add_setshow_zuinteger_cmd ("stap-expression", class_maintenance,
&stap_expression_debug, &stap_expression_debug,