mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-17 12:53:17 +08:00
* 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:
111
gdb/progspace.c
111
gdb/progspace.c
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user