diff options
author | John Gilmore <gnu@cygnus> | 1991-09-19 02:32:35 +0000 |
---|---|---|
committer | John Gilmore <gnu@cygnus> | 1991-09-19 02:32:35 +0000 |
commit | 0c4d2cc2b3a353604c3320b867ce5d471fee1ecb (patch) | |
tree | b4285f18987cb8dbaad3a36da33ddf59be8eed0f /gdb/mipsread.c | |
parent | 6a3871df09221eac8f64e3137ba53d3190c3d311 (diff) | |
download | gdb-0c4d2cc2b3a353604c3320b867ce5d471fee1ecb.zip gdb-0c4d2cc2b3a353604c3320b867ce5d471fee1ecb.tar.gz gdb-0c4d2cc2b3a353604c3320b867ce5d471fee1ecb.tar.bz2 |
* symfile.c (allocate_symtab): New fn, consolidates the work
of allocating and initializing a new struct symtab. Set the
language of the symtab based on its filename extension.
* symfile.h: Declare it.
* mipsread.c (new_symtab): Use it. Minor formatting changes.
* dbxread.c (end_symtab): Use it.
* mipsread.c (parse_symbol, case stParam and stProc): Add #if 0'd
code for saving types of parameters with each function definition.
* dbxread.c (define_symbol, function and parameter cases): Ditto.
(read_dbx_symtab, case N_DEFD): Ignore.
(read_enum_type): Recognize FALSE/TRUE enum as Modula-2 BOOLEAN
type.
(read_range_type): Rename MAX_OF_TYPE to MAX_OF_C_TYPE, etc.
#if 0 out its uses, though, since they set a dead value.
* coffread.c (end_symtab): Use allocate_symtab.
(process_coff_symbol): #if 0'd for functions and params as above.
(read_enum_type): Recognize Modula-2 BOOLEAN.
Diffstat (limited to 'gdb/mipsread.c')
-rw-r--r-- | gdb/mipsread.c | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/gdb/mipsread.c b/gdb/mipsread.c index c966d19..371c924 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -273,7 +273,8 @@ mipscoff_symfile_read(sf, addr, mainline) /* Exported procedure: Allocate zeroed memory */ -char *xzalloc(size) +char * +xzalloc(size) { char *p = xmalloc(size); @@ -841,6 +842,12 @@ data: /* Common code for symbols describing data */ SYMBOL_VALUE(s) = sh->value; SYMBOL_TYPE(s) = parse_type(ax + sh->index, sh, 0); add_symbol(s, top_stack->cur_block); +#if 0 + /* FIXME: This has not been tested. See dbxread.c */ + /* Add the type of this parameter to the function/procedure + type of this block. */ + add_param_to_type(&top_stack->cur_block->function->type,s); +#endif break; case stLabel: /* label, goes into current block */ @@ -852,7 +859,7 @@ data: /* Common code for symbols describing data */ add_symbol(s, top_stack->cur_block); break; - case stProc: /* Procedure, goes into current block? FIXME */ + case stProc: /* Procedure, usually goes into global block */ case stStaticProc: /* Static procedure, goes into current block */ s = new_symbol(sh->iss); SYMBOL_NAMESPACE(s) = VAR_NAMESPACE; @@ -862,10 +869,27 @@ data: /* Common code for symbols describing data */ t = builtin_type_int; else t = parse_type(ax + sh->index, sh, 0); - add_symbol(s, top_stack->cur_block); + b = top_stack->cur_block; + if (sh->st == stProc) { + struct blockvector *bv = BLOCKVECTOR(top_stack->cur_st); + /* The next test should normally be true, + but provides a hook for nested functions + (which we don't want to make global). */ + if (b == BLOCKVECTOR_BLOCK(bv, STATIC_BLOCK)) + b = BLOCKVECTOR_BLOCK(bv, GLOBAL_BLOCK); + } + add_symbol(s, b); /* Make a type for the procedure itself */ +#if 0 + /* FIXME: This has not been tested yet! See dbxread.c */ + /* Generate a template for the type of this function. The + types of the arguments will be added as we read the symbol + table. */ + bcopy(SYMBOL_TYPE(s),lookup_function_type(t),sizeof(struct type)); +#else SYMBOL_TYPE(s) = lookup_function_type (t); +#endif /* Create and enter a new lexical context */ b = new_block(top_stack->maxsyms); @@ -1543,7 +1567,7 @@ parse_partial_symbols(end_of_text_seg) * * Only parse the Local and External symbols, and the Relative FDR. * Fixup enough of the loader symtab to be able to use it. - * Allocate space only for the file`s portions we need to + * Allocate space only for the file's portions we need to * look at. (XXX) */ @@ -2337,13 +2361,10 @@ struct symtab * new_symtab(name, maxsyms, maxlines) char *name; { - struct symtab *s = (struct symtab *) xzalloc(sizeof(struct symtab)); - int i; + struct symtab *s = allocate_symtab (name); LINETABLE(s) = new_linetable(maxlines); - s->filename = name; - /* All symtabs must have at least two blocks */ BLOCKVECTOR(s) = new_bvect(2); BLOCKVECTOR_BLOCK(BLOCKVECTOR(s), GLOBAL_BLOCK) = new_block(maxsyms); @@ -2380,7 +2401,7 @@ new_psymtab(name) pst->next = partial_symtab_list; partial_symtab_list = pst; - /* Keep a backpointer to the file`s symbols */ + /* Keep a backpointer to the file's symbols */ /* FIXME, we should use private data that is a proper pointer. */ pst->ldsymlen = (int)cur_hdr; |