forked from Imagelibrary/binutils-gdb
Add macro structures to GDB's symbol tables. Nobody puts anything
in them yet. * symtab.h (struct symtab): New member: `macro_table'. * buildsym.h (pending_macros): New global variable. * buildsym.c: #include "macrotab.h". (buildsym_init): Initialize `pending_macros'. (end_symtab): If we found macro information while reading a CU's debugging info, do build a symtab structure for it. Make the symtab point to the macro information, and clear the `pending_macros' pointer which held it while we were reading the debug info. (really_free_pendings): Free any pending macro table. * objfiles.h (struct objfile): New member: `macro_cache'. * objfiles.c (allocate_objfile): Set allocate and free functions for the macro cache's objstack. (free_objfile): Empty the macro cache's obstack. * symfile.c (reread_symbols): Empty the macro cache's obstack, and set new allocate and free functions for it. * solib-sunos.c (allocate_rt_common_objfile): Set allocate and free functions for the macro cache's objstack. (Why is this function building its own objfile?) * symmisc.c (print_objfile_statistics): Print statistics on the macro bcache. * Makefile.in: Note that buildsym.o depends on macrotab.h.
This commit is contained in:
@@ -190,6 +190,8 @@ allocate_objfile (bfd *abfd, int flags)
|
||||
/* Update pointers to functions to *our* copies */
|
||||
obstack_chunkfun (&objfile->psymbol_cache.cache, xmmalloc);
|
||||
obstack_freefun (&objfile->psymbol_cache.cache, xmfree);
|
||||
obstack_chunkfun (&objfile->macro_cache.cache, xmmalloc);
|
||||
obstack_freefun (&objfile->macro_cache.cache, xmfree);
|
||||
obstack_chunkfun (&objfile->psymbol_obstack, xmmalloc);
|
||||
obstack_freefun (&objfile->psymbol_obstack, xmfree);
|
||||
obstack_chunkfun (&objfile->symbol_obstack, xmmalloc);
|
||||
@@ -220,6 +222,9 @@ allocate_objfile (bfd *abfd, int flags)
|
||||
obstack_specify_allocation_with_arg (&objfile->psymbol_cache.cache,
|
||||
0, 0, xmmalloc, xmfree,
|
||||
objfile->md);
|
||||
obstack_specify_allocation_with_arg (&objfile->macro_cache.cache,
|
||||
0, 0, xmmalloc, xmfree,
|
||||
objfile->md);
|
||||
obstack_specify_allocation_with_arg (&objfile->psymbol_obstack,
|
||||
0, 0, xmmalloc, xmfree,
|
||||
objfile->md);
|
||||
@@ -266,6 +271,8 @@ allocate_objfile (bfd *abfd, int flags)
|
||||
objfile->md = NULL;
|
||||
obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
|
||||
xmalloc, xfree);
|
||||
obstack_specify_allocation (&objfile->macro_cache.cache, 0, 0,
|
||||
xmalloc, xfree);
|
||||
obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0, xmalloc,
|
||||
xfree);
|
||||
obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
|
||||
@@ -477,6 +484,7 @@ free_objfile (struct objfile *objfile)
|
||||
xmfree (objfile->md, objfile->static_psymbols.list);
|
||||
/* Free the obstacks for non-reusable objfiles */
|
||||
free_bcache (&objfile->psymbol_cache);
|
||||
free_bcache (&objfile->macro_cache);
|
||||
obstack_free (&objfile->psymbol_obstack, 0);
|
||||
obstack_free (&objfile->symbol_obstack, 0);
|
||||
obstack_free (&objfile->type_obstack, 0);
|
||||
|
||||
Reference in New Issue
Block a user