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:
@@ -39,6 +39,7 @@
|
||||
#include "language.h" /* For "local_hex_string" */
|
||||
#include "bcache.h"
|
||||
#include "filenames.h" /* For DOSish file names */
|
||||
#include "macrotab.h"
|
||||
/* Ask buildsym.h to define the vars it normally declares `extern'. */
|
||||
#define EXTERN
|
||||
/**/
|
||||
@@ -192,6 +193,9 @@ really_free_pendings (PTR dummy)
|
||||
xfree ((void *) next);
|
||||
}
|
||||
global_symbols = NULL;
|
||||
|
||||
if (pending_macros)
|
||||
free_macro_table (pending_macros);
|
||||
}
|
||||
|
||||
/* This function is called to discard any pending blocks. */
|
||||
@@ -883,7 +887,8 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
|
||||
if (pending_blocks == NULL
|
||||
&& file_symbols == NULL
|
||||
&& global_symbols == NULL
|
||||
&& have_line_numbers == 0)
|
||||
&& have_line_numbers == 0
|
||||
&& pending_macros == NULL)
|
||||
{
|
||||
/* Ignore symtabs that have no functions with real debugging
|
||||
info. */
|
||||
@@ -944,6 +949,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
|
||||
|
||||
/* Fill in its components. */
|
||||
symtab->blockvector = blockvector;
|
||||
symtab->macro_table = pending_macros;
|
||||
if (subfile->line_vector)
|
||||
{
|
||||
/* Reallocate the line table on the symbol obstack */
|
||||
@@ -1022,6 +1028,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
|
||||
|
||||
last_source_file = NULL;
|
||||
current_subfile = NULL;
|
||||
pending_macros = NULL;
|
||||
|
||||
return symtab;
|
||||
}
|
||||
@@ -1112,6 +1119,7 @@ buildsym_init (void)
|
||||
file_symbols = NULL;
|
||||
global_symbols = NULL;
|
||||
pending_blocks = NULL;
|
||||
pending_macros = NULL;
|
||||
}
|
||||
|
||||
/* Initialize anything that needs initializing when a completely new
|
||||
|
||||
Reference in New Issue
Block a user