From 8e260fc026e568894546d065e63ecec2c346f6a4 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 22 Aug 2012 15:17:21 +0000 Subject: * 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) : 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) : 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. --- gdb/objfiles.c | 118 +++------------------------------------------------------ 1 file changed, 5 insertions(+), 113 deletions(-) (limited to 'gdb/objfiles.c') diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 411618f..b33a0cf 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -55,10 +55,10 @@ #include "solist.h" #include "gdb_bfd.h" -/* Prototypes for local functions */ +/* Keep a registry of per-objfile data-pointers required by other GDB + modules. */ -static void objfile_alloc_data (struct objfile *objfile); -static void objfile_free_data (struct objfile *objfile); +DEFINE_REGISTRY (objfile) /* Externally visible variables that are owned by this module. See declarations in objfile.h for more info. */ @@ -1339,115 +1339,6 @@ in_plt_section (CORE_ADDR pc, char *name) } -/* Keep a registry of per-objfile data-pointers required by other GDB - modules. */ - -struct objfile_data -{ - unsigned index; - void (*save) (struct objfile *, void *); - void (*free) (struct objfile *, void *); -}; - -struct objfile_data_registration -{ - struct objfile_data *data; - struct objfile_data_registration *next; -}; - -struct objfile_data_registry -{ - struct objfile_data_registration *registrations; - unsigned num_registrations; -}; - -static struct objfile_data_registry objfile_data_registry = { NULL, 0 }; - -const struct objfile_data * -register_objfile_data_with_cleanup (void (*save) (struct objfile *, void *), - void (*free) (struct objfile *, void *)) -{ - struct objfile_data_registration **curr; - - /* Append new registration. */ - for (curr = &objfile_data_registry.registrations; - *curr != NULL; curr = &(*curr)->next); - - *curr = XMALLOC (struct objfile_data_registration); - (*curr)->next = NULL; - (*curr)->data = XMALLOC (struct objfile_data); - (*curr)->data->index = objfile_data_registry.num_registrations++; - (*curr)->data->save = save; - (*curr)->data->free = free; - - return (*curr)->data; -} - -const struct objfile_data * -register_objfile_data (void) -{ - return register_objfile_data_with_cleanup (NULL, NULL); -} - -static void -objfile_alloc_data (struct objfile *objfile) -{ - gdb_assert (objfile->data == NULL); - objfile->num_data = objfile_data_registry.num_registrations; - objfile->data = XCALLOC (objfile->num_data, void *); -} - -static void -objfile_free_data (struct objfile *objfile) -{ - gdb_assert (objfile->data != NULL); - clear_objfile_data (objfile); - xfree (objfile->data); - objfile->data = NULL; -} - -void -clear_objfile_data (struct objfile *objfile) -{ - struct objfile_data_registration *registration; - int i; - - gdb_assert (objfile->data != NULL); - - /* Process all the save handlers. */ - - for (registration = objfile_data_registry.registrations, i = 0; - i < objfile->num_data; - registration = registration->next, i++) - if (objfile->data[i] != NULL && registration->data->save != NULL) - registration->data->save (objfile, objfile->data[i]); - - /* Now process all the free handlers. */ - - for (registration = objfile_data_registry.registrations, i = 0; - i < objfile->num_data; - registration = registration->next, i++) - if (objfile->data[i] != NULL && registration->data->free != NULL) - registration->data->free (objfile, objfile->data[i]); - - memset (objfile->data, 0, objfile->num_data * sizeof (void *)); -} - -void -set_objfile_data (struct objfile *objfile, const struct objfile_data *data, - void *value) -{ - gdb_assert (data->index < objfile->num_data); - objfile->data[data->index] = value; -} - -void * -objfile_data (struct objfile *objfile, const struct objfile_data *data) -{ - gdb_assert (data->index < objfile->num_data); - return objfile->data[data->index]; -} - /* Set objfiles_changed_p so section map will be rebuilt next time it is used. Called by reread_symbols. */ @@ -1490,5 +1381,6 @@ void _initialize_objfiles (void) { objfiles_pspace_data - = register_program_space_data_with_cleanup (objfiles_pspace_data_cleanup); + = register_program_space_data_with_cleanup (NULL, + objfiles_pspace_data_cleanup); } -- cgit v1.1