* buildsym.c (subfile_stack): Move here from buildsym.h.
(pending_macros): Ditto. (get_macro_table): New function. (buildsym_init): Initialize subfile_stack. * coffread.c (type_vector,type_vector_length): Moved here from buildsym.h. (INITIAL_TYPE_VECTOR_LENGTH): Ditto. (coff_symtab_read): Use it. * dbxread.c (read_ofile_symtab): Delete init of subfile_stack. * dwarf2read.c (macro_start_file): Replace uses of pending_macros with call to get_macro_table. * stabsread.c (type_vector,type_vector_length): Moved here from buildsym.h. (INITIAL_TYPE_VECTOR_LENGTH): Ditto. * buildsym.h (get_macro_table): Declare.
This commit is contained in:
parent
bec71544ee
commit
fc474241b7
7 changed files with 86 additions and 42 deletions
|
@ -1,3 +1,21 @@
|
||||||
|
2013-08-20 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* buildsym.c (subfile_stack): Move here from buildsym.h.
|
||||||
|
(pending_macros): Ditto.
|
||||||
|
(get_macro_table): New function.
|
||||||
|
(buildsym_init): Initialize subfile_stack.
|
||||||
|
* coffread.c (type_vector,type_vector_length): Moved here from
|
||||||
|
buildsym.h.
|
||||||
|
(INITIAL_TYPE_VECTOR_LENGTH): Ditto.
|
||||||
|
(coff_symtab_read): Use it.
|
||||||
|
* dbxread.c (read_ofile_symtab): Delete init of subfile_stack.
|
||||||
|
* dwarf2read.c (macro_start_file): Replace uses of pending_macros
|
||||||
|
with call to get_macro_table.
|
||||||
|
* stabsread.c (type_vector,type_vector_length): Moved here from
|
||||||
|
buildsym.h.
|
||||||
|
(INITIAL_TYPE_VECTOR_LENGTH): Ditto.
|
||||||
|
* buildsym.h (get_macro_table): Declare.
|
||||||
|
|
||||||
2013-08-20 Tom Tromey <tromey@redhat.com>
|
2013-08-20 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* dbxread.c (record_minimal_symbol): Make 'name' argument const.
|
* dbxread.c (record_minimal_symbol): Make 'name' argument const.
|
||||||
|
|
|
@ -102,13 +102,24 @@ struct pending_block
|
||||||
associated symtab. */
|
associated symtab. */
|
||||||
|
|
||||||
static struct pending_block *pending_blocks;
|
static struct pending_block *pending_blocks;
|
||||||
|
|
||||||
|
struct subfile_stack
|
||||||
|
{
|
||||||
|
struct subfile_stack *next;
|
||||||
|
char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct subfile_stack *subfile_stack;
|
||||||
|
|
||||||
|
/* The macro table for the compilation unit whose symbols we're
|
||||||
|
currently reading. All the symtabs for the CU will point to this. */
|
||||||
|
static struct macro_table *pending_macros;
|
||||||
|
|
||||||
static int compare_line_numbers (const void *ln1p, const void *ln2p);
|
static int compare_line_numbers (const void *ln1p, const void *ln2p);
|
||||||
|
|
||||||
static void record_pending_block (struct objfile *objfile,
|
static void record_pending_block (struct objfile *objfile,
|
||||||
struct block *block,
|
struct block *block,
|
||||||
struct pending_block *opblock);
|
struct pending_block *opblock);
|
||||||
|
|
||||||
|
|
||||||
/* Initial sizes of data structures. These are realloc'd larger if
|
/* Initial sizes of data structures. These are realloc'd larger if
|
||||||
needed, and realloc'd down to the size actually used, when
|
needed, and realloc'd down to the size actually used, when
|
||||||
|
@ -825,6 +836,19 @@ compare_line_numbers (const void *ln1p, const void *ln2p)
|
||||||
return ln1->line - ln2->line;
|
return ln1->line - ln2->line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the macro table.
|
||||||
|
Initialize it if this is the first use. */
|
||||||
|
|
||||||
|
struct macro_table *
|
||||||
|
get_macro_table (struct objfile *objfile, const char *comp_dir)
|
||||||
|
{
|
||||||
|
if (! pending_macros)
|
||||||
|
pending_macros = new_macro_table (&objfile->per_bfd->storage_obstack,
|
||||||
|
objfile->per_bfd->macro_cache,
|
||||||
|
comp_dir);
|
||||||
|
return pending_macros;
|
||||||
|
}
|
||||||
|
|
||||||
/* Start a new symtab for a new source file. Called, for example,
|
/* Start a new symtab for a new source file. Called, for example,
|
||||||
when a stabs symbol of type N_SO is seen, or when a DWARF
|
when a stabs symbol of type N_SO is seen, or when a DWARF
|
||||||
TAG_compile_unit DIE is seen. It indicates the start of data for
|
TAG_compile_unit DIE is seen. It indicates the start of data for
|
||||||
|
@ -1538,6 +1562,7 @@ buildsym_init (void)
|
||||||
pending_blocks = NULL;
|
pending_blocks = NULL;
|
||||||
pending_macros = NULL;
|
pending_macros = NULL;
|
||||||
using_directives = NULL;
|
using_directives = NULL;
|
||||||
|
subfile_stack = NULL;
|
||||||
|
|
||||||
/* We shouldn't have any address map at this point. */
|
/* We shouldn't have any address map at this point. */
|
||||||
gdb_assert (! pending_addrmap);
|
gdb_assert (! pending_addrmap);
|
||||||
|
|
|
@ -173,37 +173,12 @@ EXTERN int within_function;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct subfile_stack
|
|
||||||
{
|
|
||||||
struct subfile_stack *next;
|
|
||||||
char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
EXTERN struct subfile_stack *subfile_stack;
|
|
||||||
|
|
||||||
#define next_symbol_text(objfile) (*next_symbol_text_func)(objfile)
|
#define next_symbol_text(objfile) (*next_symbol_text_func)(objfile)
|
||||||
|
|
||||||
/* Function to invoke get the next symbol. Return the symbol name. */
|
/* Function to invoke get the next symbol. Return the symbol name. */
|
||||||
|
|
||||||
EXTERN char *(*next_symbol_text_func) (struct objfile *);
|
EXTERN char *(*next_symbol_text_func) (struct objfile *);
|
||||||
|
|
||||||
/* Vector of types defined so far, indexed by their type numbers.
|
|
||||||
Used for both stabs and coff. (In newer sun systems, dbx uses a
|
|
||||||
pair of numbers in parens, as in "(SUBFILENUM,NUMWITHINSUBFILE)".
|
|
||||||
Then these numbers must be translated through the type_translations
|
|
||||||
hash table to get the index into the type vector.) */
|
|
||||||
|
|
||||||
EXTERN struct type **type_vector;
|
|
||||||
|
|
||||||
/* Number of elements allocated for type_vector currently. */
|
|
||||||
|
|
||||||
EXTERN int type_vector_length;
|
|
||||||
|
|
||||||
/* Initial size of type vector. Is realloc'd larger if needed, and
|
|
||||||
realloc'd down to the size actually used, when completed. */
|
|
||||||
|
|
||||||
#define INITIAL_TYPE_VECTOR_LENGTH 160
|
|
||||||
|
|
||||||
extern void add_symbol_to_list (struct symbol *symbol,
|
extern void add_symbol_to_list (struct symbol *symbol,
|
||||||
struct pending **listhead);
|
struct pending **listhead);
|
||||||
|
|
||||||
|
@ -296,10 +271,10 @@ extern void set_last_source_file (const char *name);
|
||||||
|
|
||||||
extern const char *get_last_source_file (void);
|
extern const char *get_last_source_file (void);
|
||||||
|
|
||||||
/* The macro table for the compilation unit whose symbols we're
|
/* Return the macro table. */
|
||||||
currently reading. All the symtabs for this CU will point to
|
|
||||||
this. */
|
extern struct macro_table *get_macro_table (struct objfile *objfile,
|
||||||
EXTERN struct macro_table *pending_macros;
|
const char *comp_dir);
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
|
|
||||||
|
|
|
@ -146,6 +146,19 @@ struct coff_symbol
|
||||||
unsigned int c_type;
|
unsigned int c_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Vector of types defined so far, indexed by their type numbers. */
|
||||||
|
|
||||||
|
static struct type **type_vector;
|
||||||
|
|
||||||
|
/* Number of elements allocated for type_vector currently. */
|
||||||
|
|
||||||
|
static int type_vector_length;
|
||||||
|
|
||||||
|
/* Initial size of type vector. Is realloc'd larger if needed, and
|
||||||
|
realloc'd down to the size actually used, when completed. */
|
||||||
|
|
||||||
|
#define INITIAL_TYPE_VECTOR_LENGTH 160
|
||||||
|
|
||||||
extern void stabsread_clear_cache (void);
|
extern void stabsread_clear_cache (void);
|
||||||
|
|
||||||
static struct type *coff_read_struct_type (int, int, int,
|
static struct type *coff_read_struct_type (int, int, int,
|
||||||
|
@ -816,7 +829,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
|
||||||
|
|
||||||
if (type_vector) /* Get rid of previous one. */
|
if (type_vector) /* Get rid of previous one. */
|
||||||
xfree (type_vector);
|
xfree (type_vector);
|
||||||
type_vector_length = 160;
|
type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
|
||||||
type_vector = (struct type **)
|
type_vector = (struct type **)
|
||||||
xmalloc (type_vector_length * sizeof (struct type *));
|
xmalloc (type_vector_length * sizeof (struct type *));
|
||||||
memset (type_vector, 0, type_vector_length * sizeof (struct type *));
|
memset (type_vector, 0, type_vector_length * sizeof (struct type *));
|
||||||
|
|
|
@ -2530,7 +2530,6 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
|
||||||
section_offsets = pst->section_offsets;
|
section_offsets = pst->section_offsets;
|
||||||
|
|
||||||
dbxread_objfile = objfile;
|
dbxread_objfile = objfile;
|
||||||
subfile_stack = NULL;
|
|
||||||
|
|
||||||
stringtab_global = DBX_STRINGTAB (objfile);
|
stringtab_global = DBX_STRINGTAB (objfile);
|
||||||
set_last_source_file (NULL);
|
set_last_source_file (NULL);
|
||||||
|
|
|
@ -18943,19 +18943,16 @@ macro_start_file (int file, int line,
|
||||||
/* File name relative to the compilation directory of this source file. */
|
/* File name relative to the compilation directory of this source file. */
|
||||||
char *file_name = file_file_name (file, lh);
|
char *file_name = file_file_name (file, lh);
|
||||||
|
|
||||||
/* We don't create a macro table for this compilation unit
|
|
||||||
at all until we actually get a filename. */
|
|
||||||
if (! pending_macros)
|
|
||||||
pending_macros = new_macro_table (&objfile->per_bfd->storage_obstack,
|
|
||||||
objfile->per_bfd->macro_cache,
|
|
||||||
comp_dir);
|
|
||||||
|
|
||||||
if (! current_file)
|
if (! current_file)
|
||||||
{
|
{
|
||||||
|
/* Note: We don't create a macro table for this compilation unit
|
||||||
|
at all until we actually get a filename. */
|
||||||
|
struct macro_table *macro_table = get_macro_table (objfile, comp_dir);
|
||||||
|
|
||||||
/* If we have no current file, then this must be the start_file
|
/* If we have no current file, then this must be the start_file
|
||||||
directive for the compilation unit's main source file. */
|
directive for the compilation unit's main source file. */
|
||||||
current_file = macro_set_main (pending_macros, file_name);
|
current_file = macro_set_main (macro_table, file_name);
|
||||||
macro_define_special (pending_macros);
|
macro_define_special (macro_table);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
current_file = macro_include (current_file, line, file_name);
|
current_file = macro_include (current_file, line, file_name);
|
||||||
|
|
|
@ -207,6 +207,23 @@ static int noname_undefs_length;
|
||||||
if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \
|
if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \
|
||||||
*(pp) = next_symbol_text (objfile); \
|
*(pp) = next_symbol_text (objfile); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* Vector of types defined so far, indexed by their type numbers.
|
||||||
|
(In newer sun systems, dbx uses a pair of numbers in parens,
|
||||||
|
as in "(SUBFILENUM,NUMWITHINSUBFILE)".
|
||||||
|
Then these numbers must be translated through the type_translations
|
||||||
|
hash table to get the index into the type vector.) */
|
||||||
|
|
||||||
|
static struct type **type_vector;
|
||||||
|
|
||||||
|
/* Number of elements allocated for type_vector currently. */
|
||||||
|
|
||||||
|
static int type_vector_length;
|
||||||
|
|
||||||
|
/* Initial size of type vector. Is realloc'd larger if needed, and
|
||||||
|
realloc'd down to the size actually used, when completed. */
|
||||||
|
|
||||||
|
#define INITIAL_TYPE_VECTOR_LENGTH 160
|
||||||
|
|
||||||
|
|
||||||
/* Look up a dbx type-number pair. Return the address of the slot
|
/* Look up a dbx type-number pair. Return the address of the slot
|
||||||
|
|
Loading…
Reference in a new issue