X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fhpread.c;h=9aa1fb10af21e1f51be9a14139c29f675f6e185b;hb=20d430180173f00e57c7a920d41d08e6d9227fce;hp=c8fbec072caaf36b18aaf8b87be32d1e738343bf;hpb=c37c7c6ca3fa434247cdc43c212c83ad4be2741f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/hpread.c b/gdb/hpread.c index c8fbec072c..9aa1fb10af 100644 --- a/gdb/hpread.c +++ b/gdb/hpread.c @@ -32,6 +32,7 @@ #include "complaints.h" #include "gdb-stabs.h" #include "gdbtypes.h" +#include "demangle.h" /* Private information attached to an objfile which we use to find and internalize the HP C debug symbols within that objfile. */ @@ -135,6 +136,9 @@ extern struct complaint lbrac_mismatch_complaint; void hpread_symfile_init PARAMS ((struct objfile *)); +static struct type * +hpread_read_array_type PARAMS ((dnttpointer, union dnttentry *, struct objfile *)); + static struct type *hpread_alloc_type PARAMS ((dnttpointer, struct objfile *)); @@ -160,7 +164,7 @@ void hpread_symfile_finish PARAMS ((struct objfile *)); static struct partial_symtab *hpread_start_psymtab PARAMS ((struct objfile *, struct section_offsets *, char *, CORE_ADDR, int, - struct partial_symbol *, struct partial_symbol *)); + struct partial_symbol **, struct partial_symbol **)); static struct partial_symtab *hpread_end_psymtab PARAMS ((struct partial_symtab *, char **, int, int, CORE_ADDR, @@ -336,7 +340,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline) int dependencies_used, dependencies_allocated; /* Just in case the stabs reader left turds lying around. */ - pending_blocks = 0; + free_pending_blocks (); make_cleanup (really_free_pendings, 0); pst = (struct partial_symtab *) 0; @@ -506,10 +510,10 @@ hpread_build_psymtabs (objfile, section_offsets, mainline) valu = dn_bufp->dfunc.lowaddr + ANOFFSET (section_offsets, SECT_OFF_TEXT); SET_NAMESTRING (dn_bufp, &namestring, objfile); - ADD_PSYMBOL_TO_LIST (namestring, strlen (namestring), + add_psymbol_to_list (namestring, strlen (namestring), VAR_NAMESPACE, LOC_BLOCK, - objfile->static_psymbols, valu, - language_unknown, objfile); + &objfile->static_psymbols, valu, + 0, language_unknown, objfile); within_function = 1; continue; case DNTT_TYPE_BEGIN: @@ -575,19 +579,19 @@ hpread_build_psymtabs (objfile, section_offsets, mainline) } if (dn_bufp->dsvar.global) { - ADD_PSYMBOL_TO_LIST (namestring, strlen (namestring), + add_psymbol_to_list (namestring, strlen (namestring), namespace, storage, - objfile->global_psymbols, + &objfile->global_psymbols, dn_bufp->dsvar.location, - language_unknown, objfile); + 0, language_unknown, objfile); } else { - ADD_PSYMBOL_TO_LIST (namestring, strlen (namestring), + add_psymbol_to_list (namestring, strlen (namestring), namespace, storage, - objfile->static_psymbols, + &objfile->static_psymbols, dn_bufp->dsvar.location, - language_unknown, objfile); + 0, language_unknown, objfile); } continue; } @@ -604,10 +608,10 @@ hpread_build_psymtabs (objfile, section_offsets, mainline) objfile->global_psymbols.next, objfile->static_psymbols.next); } - ADD_PSYMBOL_TO_LIST (namestring, strlen (namestring), + add_psymbol_to_list (namestring, strlen (namestring), VAR_NAMESPACE, LOC_CONST, - objfile->static_psymbols, 0, - language_unknown, objfile); + &objfile->static_psymbols, 0, + 0, language_unknown, objfile); continue; default: continue; @@ -827,8 +831,8 @@ hpread_start_psymtab (objfile, section_offsets, char *filename; CORE_ADDR textlow; int ldsymoff; - struct partial_symbol *global_syms; - struct partial_symbol *static_syms; + struct partial_symbol **global_syms; + struct partial_symbol **static_syms; { struct partial_symtab *result = start_psymtab_common (objfile, section_offsets, @@ -1215,12 +1219,14 @@ hpread_lookup_type (hp_type, objfile) { TYPE_VECTOR_LENGTH (objfile) = 100; TYPE_VECTOR (objfile) = (struct type **) - xmalloc (TYPE_VECTOR_LENGTH (objfile) * sizeof (struct type *)); + xmmalloc (objfile -> md, + TYPE_VECTOR_LENGTH (objfile) * sizeof (struct type *)); } while (index >= TYPE_VECTOR_LENGTH (objfile)) TYPE_VECTOR_LENGTH (objfile) *= 2; TYPE_VECTOR (objfile) = (struct type **) - xrealloc ((char *) TYPE_VECTOR (objfile), + xmrealloc (objfile -> md, + (char *) TYPE_VECTOR (objfile), (TYPE_VECTOR_LENGTH (objfile) * sizeof (struct type *))); memset (&TYPE_VECTOR (objfile)[old_len], 0, (TYPE_VECTOR_LENGTH (objfile) - old_len) * @@ -1286,7 +1292,8 @@ hpread_read_enum_type (hp_type, dn_bufp, objfile) sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); - SYMBOL_NAME (sym) = name; + SYMBOL_NAME (sym) = obsavestring (name, strlen (name), + &objfile->symbol_obstack); SYMBOL_CLASS (sym) = LOC_CONST; SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE; SYMBOL_VALUE (sym) = memp->dmember.value; @@ -1377,7 +1384,8 @@ hpread_read_function_type (hp_type, dn_bufp, objfile) sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol)); (void) memset (sym, 0, sizeof (struct symbol)); - SYMBOL_NAME (sym) = name; + SYMBOL_NAME (sym) = obsavestring (name, strlen (name), + &objfile->symbol_obstack); /* Figure out where it lives. */ if (paramp->dfparam.regparam) @@ -1789,7 +1797,7 @@ hpread_process_one_debug_symbol (dn_bufp, name, section_offsets, objfile, sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); - SYMBOL_NAME (sym) = name; + SYMBOL_NAME (sym) = obsavestring (name, strlen (name), &objfile->symbol_obstack); SYMBOL_LANGUAGE (sym) = language_auto; SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack); SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;