* 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

@ -37,10 +37,13 @@ struct program_space *current_program_space;
/* The last address space number assigned. */
static int highest_address_space_num;
/* Prototypes for local functions */
/* Keep a registry of per-program_space data-pointers required by other GDB
modules. */
DEFINE_REGISTRY (program_space)
static void program_space_alloc_data (struct program_space *);
static void program_space_free_data (struct program_space *);
/* An address space. Currently this is not used for much other than
@ -517,108 +520,6 @@ clear_program_space_solib_cache (struct program_space *pspace)
/* Keep a registry of per-program_space data-pointers required by other GDB
modules. */
struct program_space_data
{
unsigned index;
void (*cleanup) (struct program_space *, void *);
};
struct program_space_data_registration
{
struct program_space_data *data;
struct program_space_data_registration *next;
};
struct program_space_data_registry
{
struct program_space_data_registration *registrations;
unsigned num_registrations;
};
static struct program_space_data_registry program_space_data_registry
= { NULL, 0 };
const struct program_space_data *
register_program_space_data_with_cleanup
(void (*cleanup) (struct program_space *, void *))
{
struct program_space_data_registration **curr;
/* Append new registration. */
for (curr = &program_space_data_registry.registrations;
*curr != NULL; curr = &(*curr)->next);
*curr = XMALLOC (struct program_space_data_registration);
(*curr)->next = NULL;
(*curr)->data = XMALLOC (struct program_space_data);
(*curr)->data->index = program_space_data_registry.num_registrations++;
(*curr)->data->cleanup = cleanup;
return (*curr)->data;
}
const struct program_space_data *
register_program_space_data (void)
{
return register_program_space_data_with_cleanup (NULL);
}
static void
program_space_alloc_data (struct program_space *pspace)
{
gdb_assert (pspace->data == NULL);
pspace->num_data = program_space_data_registry.num_registrations;
pspace->data = XCALLOC (pspace->num_data, void *);
}
static void
program_space_free_data (struct program_space *pspace)
{
gdb_assert (pspace->data != NULL);
clear_program_space_data (pspace);
xfree (pspace->data);
pspace->data = NULL;
}
void
clear_program_space_data (struct program_space *pspace)
{
struct program_space_data_registration *registration;
int i;
gdb_assert (pspace->data != NULL);
for (registration = program_space_data_registry.registrations, i = 0;
i < pspace->num_data;
registration = registration->next, i++)
if (pspace->data[i] != NULL && registration->data->cleanup)
registration->data->cleanup (pspace, pspace->data[i]);
memset (pspace->data, 0, pspace->num_data * sizeof (void *));
}
void
set_program_space_data (struct program_space *pspace,
const struct program_space_data *data,
void *value)
{
gdb_assert (data->index < pspace->num_data);
pspace->data[data->index] = value;
}
void *
program_space_data (struct program_space *pspace,
const struct program_space_data *data)
{
gdb_assert (data->index < pspace->num_data);
return pspace->data[data->index];
}
void
initialize_progspace (void)
{