* auto-load.c (_initialize_auto_load): Update.

* solib-svr4.c (_initialize_svr4_solib): Update
	* solib-dsbt.c (_initialize_dsbt_solib): Update.
	* solib-darwin.c (_initialize_darwin_solib): Update.
	* registry.h: New file.
	* python/py-progspace.c (gdbpy_initialize_pspace): Update.
	* python/py-inferior.c (gdbpy_initialize_inferior): Update.
	* progspace.h: Include registry.h.  Use DECLARE_REGISTRY.
	(register_program_space_data_with_cleanup)
	(register_program_space_data, program_space_alloc_data)
	(clear_program_space_data, set_program_space_data)
	(program_space_data): Don't declare.
	* progspace.c: Use DEFINE_REGISTRY.
	(struct program_space_data, struct
	program_space_data_registration, struct
	program_space_data_registry, program_space_data_registry)
	(register_program_space_data_with_cleanup)
	(register_program_space_data, program_space_alloc_data)
	(program_space_free_data, clear_program_space_data)
	(set_program_space_data, program_space_data): Remove.
	* objfiles.h: Include registry.h.  Use DECLARE_REGISTRY.
	(struct objfile) <data, num_data>: Replace with REGISTRY_FIELDS.
	(register_objfile_data_with_cleanup, register_objfile_data)
	(clear_objfile_data, set_objfile_data, objfile_data): Don't
	declare.
	* objfiles.c: Use DEFINE_REGISTRY.
	(struct objfile_data, struct objfile_data_registration, struct
	objfile_data_registry, objfile_data_registry)
	(register_objfile_data_with_cleanup, register_objfile_data)
	(objfile_alloc_data, objfile_free_data, clear_objfile_data)
	(set_objfile_data, objfile_data): Remove.
	(_initialize_objfiles): Update.
	* jit.c (_initialize_jit): Update.
	* inflow.c (_initialize_inflow): Update.
	* inferior.h: Include registry.h.  Use DECLARE_REGISTRY.
	(struct inferior) <data, num_data>: Replace with REGISTRY_FIELDS.
	(register_inferior_data_with_cleanup, register_inferior_data)
	(clear_inferior_data, set_inferior_data, inferior_data): Don't
	declare.
	* inferior.c: Use DEFINE_REGISTRY.
	(struct inferior_data, struct inferior_data_registration, struct
	inferior_data_registry, inferior_data_registry)
	(register_inferior_data_with_cleanup, register_inferior_data)
	(inferior_alloc_data, inferior_free_data  clear_inferior_data)
	(set_inferior_data, inferior_data): Remove.
	* auxv.c (_initialize_auxv): Update.
	* ada-lang.c (_initialize_ada_language): Update.
	* breakpoint.c (_initialize_breakpoint): Update.
	* i386-nat.c (i386_use_watchpoints): Update.
This commit is contained in:
Tom Tromey
2012-08-22 15:17:21 +00:00
parent ed9eebafbc
commit 8e260fc026
20 changed files with 278 additions and 372 deletions

View File

@ -36,8 +36,10 @@
void _initialize_inferiors (void);
static void inferior_alloc_data (struct inferior *inf);
static void inferior_free_data (struct inferior *inf);
/* Keep a registry of per-inferior data-pointers required by other GDB
modules. */
DEFINE_REGISTRY (inferior)
struct inferior *inferior_list = NULL;
static int highest_inferior_num;
@ -955,105 +957,6 @@ show_print_inferior_events (struct ui_file *file, int from_tty,
/* Keep a registry of per-inferior data-pointers required by other GDB
modules. */
struct inferior_data
{
unsigned index;
void (*cleanup) (struct inferior *, void *);
};
struct inferior_data_registration
{
struct inferior_data *data;
struct inferior_data_registration *next;
};
struct inferior_data_registry
{
struct inferior_data_registration *registrations;
unsigned num_registrations;
};
static struct inferior_data_registry inferior_data_registry
= { NULL, 0 };
const struct inferior_data *
register_inferior_data_with_cleanup
(void (*cleanup) (struct inferior *, void *))
{
struct inferior_data_registration **curr;
/* Append new registration. */
for (curr = &inferior_data_registry.registrations;
*curr != NULL; curr = &(*curr)->next);
*curr = XMALLOC (struct inferior_data_registration);
(*curr)->next = NULL;
(*curr)->data = XMALLOC (struct inferior_data);
(*curr)->data->index = inferior_data_registry.num_registrations++;
(*curr)->data->cleanup = cleanup;
return (*curr)->data;
}
const struct inferior_data *
register_inferior_data (void)
{
return register_inferior_data_with_cleanup (NULL);
}
static void
inferior_alloc_data (struct inferior *inf)
{
gdb_assert (inf->data == NULL);
inf->num_data = inferior_data_registry.num_registrations;
inf->data = XCALLOC (inf->num_data, void *);
}
static void
inferior_free_data (struct inferior *inf)
{
gdb_assert (inf->data != NULL);
clear_inferior_data (inf);
xfree (inf->data);
inf->data = NULL;
}
void
clear_inferior_data (struct inferior *inf)
{
struct inferior_data_registration *registration;
int i;
gdb_assert (inf->data != NULL);
for (registration = inferior_data_registry.registrations, i = 0;
i < inf->num_data;
registration = registration->next, i++)
if (inf->data[i] != NULL && registration->data->cleanup)
registration->data->cleanup (inf, inf->data[i]);
memset (inf->data, 0, inf->num_data * sizeof (void *));
}
void
set_inferior_data (struct inferior *inf,
const struct inferior_data *data,
void *value)
{
gdb_assert (data->index < inf->num_data);
inf->data[data->index] = value;
}
void *
inferior_data (struct inferior *inf, const struct inferior_data *data)
{
gdb_assert (data->index < inf->num_data);
return inf->data[data->index];
}
void
initialize_inferiors (void)
{