Allocate breakpoint_objfile_data with new

Allocate with new and free with delete.  This allows using an
std::vector in the following patch.

I renamed free_breakpoint_probes to free_breakpoint_objfile_data,
because it now doesn't only free the probes vector, but also the
breakpoint_objfile_data structure itself.

gdb/ChangeLog:

	* breakpoint.c (breakpoint_objfile_data): Initialize fields.
	(get_breakpoint_objfile_data): Allocate breakpoint_objfile_data
	with new.
	(free_breakpoint_probes): Rename to ...
	(free_breakpoint_objfile_data): ... this, and call delete on
	bp_objfile_data..
This commit is contained in:
Simon Marchi 2017-10-27 22:01:21 -04:00
parent 6a1b9516d8
commit 43dce43945
2 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,12 @@
2017-10-27 Simon Marchi <simon.marchi@ericsson.com>
* breakpoint.c (breakpoint_objfile_data): Initialize fields.
(get_breakpoint_objfile_data): Allocate breakpoint_objfile_data
with new.
(free_breakpoint_probes): Rename to ...
(free_breakpoint_objfile_data): ... this, and call delete on
bp_objfile_data..
2017-10-27 Simon Marchi <simon.marchi@polymtl.ca>
* auto-load.c: Don't include gdb_vecs.h, include algorithm.

View File

@ -3183,28 +3183,28 @@ static const char *const longjmp_names[] =
struct breakpoint_objfile_data
{
/* Minimal symbol for "_ovly_debug_event" (if any). */
struct bound_minimal_symbol overlay_msym;
struct bound_minimal_symbol overlay_msym {};
/* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES];
struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES] {};
/* True if we have looked for longjmp probes. */
int longjmp_searched;
int longjmp_searched = 0;
/* SystemTap probe points for longjmp (if any). */
VEC (probe_p) *longjmp_probes;
VEC (probe_p) *longjmp_probes = NULL;
/* Minimal symbol for "std::terminate()" (if any). */
struct bound_minimal_symbol terminate_msym;
struct bound_minimal_symbol terminate_msym {};
/* Minimal symbol for "_Unwind_DebugHook" (if any). */
struct bound_minimal_symbol exception_msym;
struct bound_minimal_symbol exception_msym {};
/* True if we have looked for exception probes. */
int exception_searched;
int exception_searched = 0;
/* SystemTap probe points for unwinding (if any). */
VEC (probe_p) *exception_probes;
VEC (probe_p) *exception_probes = NULL;
};
static const struct objfile_data *breakpoint_objfile_key;
@ -3232,23 +3232,22 @@ get_breakpoint_objfile_data (struct objfile *objfile)
objfile_data (objfile, breakpoint_objfile_key));
if (bp_objfile_data == NULL)
{
bp_objfile_data =
XOBNEW (&objfile->objfile_obstack, struct breakpoint_objfile_data);
memset (bp_objfile_data, 0, sizeof (*bp_objfile_data));
bp_objfile_data = new breakpoint_objfile_data ();
set_objfile_data (objfile, breakpoint_objfile_key, bp_objfile_data);
}
return bp_objfile_data;
}
static void
free_breakpoint_probes (struct objfile *obj, void *data)
free_breakpoint_objfile_data (struct objfile *obj, void *data)
{
struct breakpoint_objfile_data *bp_objfile_data
= (struct breakpoint_objfile_data *) data;
VEC_free (probe_p, bp_objfile_data->longjmp_probes);
VEC_free (probe_p, bp_objfile_data->exception_probes);
delete bp_objfile_data;
}
static void
@ -15544,7 +15543,7 @@ _initialize_breakpoint (void)
observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
breakpoint_objfile_key
= register_objfile_data_with_cleanup (NULL, free_breakpoint_probes);
= register_objfile_data_with_cleanup (NULL, free_breakpoint_objfile_data);
breakpoint_chain = 0;
/* Don't bother to call set_breakpoint_count. $bpnum isn't useful