diff options
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/NEWS | 2 | ||||
-rw-r--r-- | gdb/dbxread.c | 35 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/stabs.texinfo | 7 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 4 | ||||
-rw-r--r-- | gdb/elfread.c | 184 | ||||
-rw-r--r-- | gdb/gdb-stabs.h | 17 | ||||
-rw-r--r-- | gdb/mdebugread.c | 16 | ||||
-rw-r--r-- | gdb/psympriv.h | 7 | ||||
-rw-r--r-- | gdb/psymtab.c | 14 | ||||
-rw-r--r-- | gdb/stabsread.h | 2 | ||||
-rw-r--r-- | gdb/xcoffread.c | 3 |
13 files changed, 43 insertions, 264 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ccbbe62..fd611ad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2015-06-19 Doug Evans <dje@google.com> + + * NEWS: Mention Sun's version of stabs is no longer supported. + * elfread.c (free_elfinfo): Delete. All uses updated. + (elfstab_offset_sections): Delete. All uses updated. + * gdb-stabs.h (stab_section_info): Delete. All uses updated. + * psympriv.h (partial_symtab) <section_offsets>: Delete. + All uses updated. + * psymtab.c (start_psymtab_common): Delete arg section_offsets. + All callers updated. + 2015-06-18 Simon Marchi <simon.marchi@ericsson.com> * common/rsp-low.c (needs_escaping): New. @@ -7,6 +7,8 @@ targets has been added. GDB now supports recording of A64 instruction set including advance SIMD instructions. +* Support for Sun's version of the "stabs" debug file format has been removed. + * GDB now honors the content of the file /proc/PID/coredump_filter (PID is the process ID) on GNU/Linux systems. This file can be used to specify the types of memory mappings that will be included in a diff --git a/gdb/dbxread.c b/gdb/dbxread.c index c8f974f..6098b35 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -631,8 +631,6 @@ dbx_symfile_init (struct objfile *objfile) /* FIXME POKING INSIDE BFD DATA STRUCTURES. */ - DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL; - text_sect = bfd_get_section_by_name (sym_bfd, ".text"); if (!text_sect) error (_("Can't find .text section in symbol file")); @@ -2174,8 +2172,8 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow, struct partial_symbol **static_syms) { struct partial_symtab *result = - start_psymtab_common (objfile, objfile->section_offsets, - filename, textlow, global_syms, static_syms); + start_psymtab_common (objfile, filename, textlow, + global_syms, static_syms); result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc)); @@ -2186,14 +2184,6 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow, STRING_OFFSET (result) = string_table_offset; FILE_STRING_OFFSET (result) = file_string_table_offset; -#ifdef HAVE_ELF - /* If we're handling an ELF file, drag some section-relocation info - for this source file out of the ELF symbol table, to compensate for - Sun brain death. This replaces the section_offsets in this psymtab, - if successful. */ - elfstab_offset_sections (objfile, result); -#endif - /* Deduce the source language from the filename for this psymtab. */ psymtab_language = deduce_language_from_filename (filename); @@ -2321,8 +2311,6 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst, struct partial_symtab *subpst = allocate_psymtab (include_list[i], objfile); - /* Copy the sesction_offsets array from the main psymtab. */ - subpst->section_offsets = pst->section_offsets; subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc)); LDSYMOFF (subpst) = @@ -2503,11 +2491,7 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst) sym_size = LDSYMLEN (pst); text_offset = pst->textlow; text_size = pst->texthigh - pst->textlow; - /* This cannot be simply objfile->section_offsets because of - elfstab_offset_sections() which initializes the psymtab section - offsets information in a special way, and that is different from - objfile->section_offsets. */ - section_offsets = pst->section_offsets; + section_offsets = objfile->section_offsets; dbxread_objfile = objfile; @@ -3042,17 +3026,12 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, p = strchr (name, ':'); if (p != 0 && p[1] == 'S') { - /* The linker relocated it. We don't want to add an - elfstab_offset_sections-type offset, but we *do* + /* The linker relocated it. We don't want to add a + Sun-stabs Tfoo.foo-like offset, but we *do* want to add whatever solib.c passed to symbol_file_add as addr (this is known to affect - SunOS 4, and I suspect ELF too). Since - elfstab_offset_sections currently does not muck - with the text offset (there is no Ttext.text - symbol), we can get addr from the text offset. If - elfstab_offset_sections ever starts dealing with - the text offset, and we still need to do this, we - need to invent a SECT_OFF_ADDR_KLUDGE or something. */ + SunOS 4, and I suspect ELF too). Since there is no + Ttext.text symbol, we can get addr from the text offset. */ valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); goto define_a_symbol; } diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 7d8002e..6d86750 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2015-06-19 Doug Evans <dje@google.com> + + * stabs.texinfo (ELF Linker Relocation): Mention Sun stabs is no + longer supported. + 2015-06-17 Patrick Palka <patrick@parcs.ath.cx> * gdb.texinfo (Command History): Mention that setting diff --git a/gdb/doc/stabs.texinfo b/gdb/doc/stabs.texinfo index 181e171..15c4152 100644 --- a/gdb/doc/stabs.texinfo +++ b/gdb/doc/stabs.texinfo @@ -4062,7 +4062,8 @@ the @code{.stabstr} section. @appendixsec Having the Linker Relocate Stabs in ELF This section describes some Sun hacks for Stabs in ELF; it does not -apply to COFF or SOM. +apply to COFF or SOM. While @value{GDBN} no longer supports this hack +for Sun Stabs in ELF, this section is kept to document the issue. To keep linking fast, you don't want the linker to have to relocate very many stabs. Making sure this is done for @code{N_SLINE}, @@ -4100,8 +4101,8 @@ the address from the ELF symbols. Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because the linker simply concatenates the @code{.stab} sections from each @file{.o} file without including any information about which part of a -@code{.stab} section comes from which @file{.o} file. The way GDB does -this is to look for an ELF @code{STT_FILE} symbol which has the same +@code{.stab} section comes from which @file{.o} file. The way GDB use to +do this is to look for an ELF @code{STT_FILE} symbol which has the same name as the last component of the file name from the @code{N_SO} symbol in the stabs (for example, if the file name is @file{../../gdb/main.c}, it looks for an ELF @code{STT_FILE} symbol named @code{main.c}). This diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index d79b2e3..496b74f 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -4489,7 +4489,6 @@ dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst, subpst->dirname = pst->dirname; } - subpst->section_offsets = pst->section_offsets; subpst->textlow = 0; subpst->texthigh = 0; @@ -5890,8 +5889,7 @@ create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name) struct objfile *objfile = per_cu->objfile; struct partial_symtab *pst; - pst = start_psymtab_common (objfile, objfile->section_offsets, - name, 0, + pst = start_psymtab_common (objfile, name, 0, objfile->global_psymbols.next, objfile->static_psymbols.next); diff --git a/gdb/elfread.c b/gdb/elfread.c index 4b97b04..0e169c7 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -66,8 +66,6 @@ struct elfinfo static const struct bfd_data *probe_key = NULL; -static void free_elfinfo (void *); - /* Minimal symbols located at the GOT entries for .plt - that is the real pointer where the given entry will jump to. It gets updated by the real function address during lazy ld.so resolving in the inferior. These @@ -236,14 +234,8 @@ elf_symtab_read (struct objfile *objfile, int type, CORE_ADDR symaddr; CORE_ADDR offset; enum minimal_symbol_type ms_type; - /* If sectinfo is nonNULL, it contains section info that should end up - filed in the objfile. */ - struct stab_section_info *sectinfo = NULL; - /* If filesym is nonzero, it points to a file symbol, but we haven't - seen any section info for it yet. */ - asymbol *filesym = 0; - /* Name of filesym. This is either a constant string or is saved on - the objfile's filename cache. */ + /* Name of the last file symbol. This is either a constant string or is + saved on the objfile's filename cache. */ const char *filesymname = ""; struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile); int stripped = (bfd_get_symcount (objfile->obfd) == 0); @@ -345,16 +337,7 @@ elf_symtab_read (struct objfile *objfile, int type, continue; if (sym->flags & BSF_FILE) { - /* STT_FILE debugging symbol that helps stabs-in-elf debugging. - Chain any old one onto the objfile; remember new sym. */ - if (sectinfo != NULL) - { - sectinfo->next = dbx->stab_section_info; - dbx->stab_section_info = sectinfo; - sectinfo = NULL; - } - filesym = sym; - filesymname = bcache (filesym->name, strlen (filesym->name) + 1, + filesymname = bcache (sym->name, strlen (sym->name) + 1, objfile->per_bfd->filename_cache); } else if (sym->flags & BSF_SECTION_SYM) @@ -451,77 +434,6 @@ elf_symtab_read (struct objfile *objfile, int type, } else if (sym->flags & BSF_LOCAL) { - /* Named Local variable in a Data section. - Check its name for stabs-in-elf. */ - int special_local_sect; - - if (strcmp ("Bbss.bss", sym->name) == 0) - special_local_sect = SECT_OFF_BSS (objfile); - else if (strcmp ("Ddata.data", sym->name) == 0) - special_local_sect = SECT_OFF_DATA (objfile); - else if (strcmp ("Drodata.rodata", sym->name) == 0) - special_local_sect = SECT_OFF_RODATA (objfile); - else - special_local_sect = -1; - if (special_local_sect >= 0) - { - /* Found a special local symbol. Allocate a - sectinfo, if needed, and fill it in. */ - if (sectinfo == NULL) - { - int max_index; - size_t size; - - max_index = SECT_OFF_BSS (objfile); - if (objfile->sect_index_data > max_index) - max_index = objfile->sect_index_data; - if (objfile->sect_index_rodata > max_index) - max_index = objfile->sect_index_rodata; - - /* max_index is the largest index we'll - use into this array, so we must - allocate max_index+1 elements for it. - However, 'struct stab_section_info' - already includes one element, so we - need to allocate max_index aadditional - elements. */ - size = (sizeof (struct stab_section_info) - + (sizeof (CORE_ADDR) * max_index)); - sectinfo = (struct stab_section_info *) - xmalloc (size); - memset (sectinfo, 0, size); - sectinfo->num_sections = max_index; - if (filesym == NULL) - { - complaint (&symfile_complaints, - _("elf/stab section information %s " - "without a preceding file symbol"), - sym->name); - } - else - { - sectinfo->filename = - (char *) filesym->name; - } - } - if (sectinfo->sections[special_local_sect] != 0) - complaint (&symfile_complaints, - _("duplicated elf/stab section " - "information for %s"), - sectinfo->filename); - /* BFD symbols are section relative. */ - symaddr = sym->value + sym->section->vma; - /* Relocate non-absolute symbols by the - section offset. */ - if (sym->section != bfd_abs_section_ptr) - symaddr += offset; - sectinfo->sections[special_local_sect] = symaddr; - /* The special local symbols don't go in the - minimal symbol table, so ignore this one. */ - continue; - } - /* Not a special stabs-in-elf symbol, do regular - symbol processing. */ if (sym->section->flags & SEC_LOAD) { ms_type = mst_file_data; @@ -1130,11 +1042,8 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags, /* Allocate struct to keep track of the symfile. */ dbx = XCNEW (struct dbx_symfile_info); set_objfile_data (objfile, dbx_objfile_data_key, dbx); - make_cleanup (free_elfinfo, (void *) objfile); - /* Process the normal ELF symbol table first. This may write some - chain of info into the dbx_symfile_info of the objfile, which can - later be used by elfstab_offset_sections. */ + /* Process the normal ELF symbol table first. */ storage_needed = bfd_get_symtab_upper_bound (objfile->obfd); if (storage_needed < 0) @@ -1369,28 +1278,6 @@ read_psyms (struct objfile *objfile) dwarf2_build_psymtabs (objfile); } -/* This cleans up the objfile's dbx symfile info, and the chain of - stab_section_info's, that might be dangling from it. */ - -static void -free_elfinfo (void *objp) -{ - struct objfile *objfile = (struct objfile *) objp; - struct dbx_symfile_info *dbxinfo = DBX_SYMFILE_INFO (objfile); - struct stab_section_info *ssi, *nssi; - - ssi = dbxinfo->stab_section_info; - while (ssi) - { - nssi = ssi->next; - xfree (ssi); - ssi = nssi; - } - - dbxinfo->stab_section_info = 0; /* Just say No mo info about this. */ -} - - /* Initialize anything that needs initializing when a completely new symbol file is specified (not just adding some symbols from another file, e.g. a shared library). @@ -1427,69 +1314,6 @@ elf_symfile_init (struct objfile *objfile) objfile->flags |= OBJF_REORDERED; } -/* When handling an ELF file that contains Sun STABS debug info, - some of the debug info is relative to the particular chunk of the - section that was generated in its individual .o file. E.g. - offsets to static variables are relative to the start of the data - segment *for that module before linking*. This information is - painfully squirreled away in the ELF symbol table as local symbols - with wierd names. Go get 'em when needed. */ - -void -elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst) -{ - const char *filename = pst->filename; - struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile); - struct stab_section_info *maybe = dbx->stab_section_info; - struct stab_section_info *questionable = 0; - int i; - - /* The ELF symbol info doesn't include path names, so strip the path - (if any) from the psymtab filename. */ - filename = lbasename (filename); - - /* FIXME: This linear search could speed up significantly - if it was chained in the right order to match how we search it, - and if we unchained when we found a match. */ - for (; maybe; maybe = maybe->next) - { - if (filename[0] == maybe->filename[0] - && filename_cmp (filename, maybe->filename) == 0) - { - /* We found a match. But there might be several source files - (from different directories) with the same name. */ - if (0 == maybe->found) - break; - questionable = maybe; /* Might use it later. */ - } - } - - if (maybe == 0 && questionable != 0) - { - complaint (&symfile_complaints, - _("elf/stab section information questionable for %s"), - filename); - maybe = questionable; - } - - if (maybe) - { - /* Found it! Allocate a new psymtab struct, and fill it in. */ - maybe->found++; - pst->section_offsets = (struct section_offsets *) - obstack_alloc (&objfile->objfile_obstack, - SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); - for (i = 0; i < maybe->num_sections; i++) - (pst->section_offsets)->offsets[i] = maybe->sections[i]; - return; - } - - /* We were unable to find any offsets for this file. Complain. */ - if (dbx->stab_section_info) /* If there *is* any info, */ - complaint (&symfile_complaints, - _("elf/stab section information missing for %s"), filename); -} - /* Implementation of `sym_get_probes', as documented in symfile.h. */ static VEC (probe_p) * diff --git a/gdb/gdb-stabs.h b/gdb/gdb-stabs.h index aca3479..fa78ba2 100644 --- a/gdb/gdb-stabs.h +++ b/gdb/gdb-stabs.h @@ -30,20 +30,6 @@ global because it is referenced by several modules. */ extern const struct objfile_data *dbx_objfile_data_key; -/* The stab_section_info chain remembers info from the ELF symbol table, - while psymtabs are being built for the other symbol tables in the - objfile. It is destroyed at the complation of psymtab-reading. - Any info that was used from it has been copied into psymtabs. */ - -struct stab_section_info - { - char *filename; - struct stab_section_info *next; - int found; /* Count of times it's found in searching. */ - size_t num_sections; - CORE_ADDR sections[1]; - }; - /* Information is passed among various dbxread routines for accessing symbol files. A pointer to this structure is kept in the objfile, using the dbx_objfile_data_key. */ @@ -57,9 +43,6 @@ struct dbx_symfile_info int stringtab_size; /* Its size */ file_ptr symtab_offset; /* Offset in file to symbol table */ int symbol_size; /* Bytes in a single symbol */ - struct stab_section_info *stab_section_info; /* Section starting points - of the original .o files - before linking. */ /* See stabsread.h for the use of the following. */ struct header_file *header_files; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 058bb7c..3a81615 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2646,7 +2646,7 @@ parse_partial_symbols (struct objfile *objfile) } else textlow = 0; - pst = start_psymtab_common (objfile, objfile->section_offsets, + pst = start_psymtab_common (objfile, fdr_name (fh), textlow, objfile->global_psymbols.next, @@ -3935,6 +3935,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, struct linetable *lines; CORE_ADDR lowest_pdr_addr = 0; int last_symtab_ended = 0; + struct section_offsets *section_offsets = objfile->section_offsets; if (pst->readin) return; @@ -4051,7 +4052,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, && previous_stab_code != (unsigned char) N_SO && *name == '\000') { - valu += ANOFFSET (pst->section_offsets, + valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); previous_stab_code = N_SO; cust = end_symtab (valu, SECT_OFF_TEXT (objfile)); @@ -4062,14 +4063,14 @@ psymtab_to_symtab_1 (struct objfile *objfile, { last_symtab_ended = 0; process_one_symbol (type_code, 0, valu, name, - pst->section_offsets, objfile); + section_offsets, objfile); } } /* Similarly a hack. */ else if (name[0] == '#') { process_one_symbol (N_SLINE, 0, valu, name, - pst->section_offsets, objfile); + section_offsets, objfile); } if (type_code == N_FUN) { @@ -4101,7 +4102,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, else { /* Handle encoded stab line number. */ - valu += ANOFFSET (pst->section_offsets, + valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); record_line (current_subfile, sh.index, gdbarch_addr_bits_remove (gdbarch, valu)); @@ -4225,7 +4226,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, c = parse_symbol (&sh, debug_info->external_aux + fh->iauxBase, sym_ptr, fh->fBigendian, - pst->section_offsets, objfile); + section_offsets, objfile); sym_ptr += c * external_sym_size; } @@ -4300,7 +4301,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, ext_ptr = PST_PRIVATE (pst)->extern_tab; for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++) parse_external (ext_ptr, fh->fBigendian, - pst->section_offsets, objfile); + section_offsets, objfile); /* If there are undefined symbols, tell the user. The alpha has an undefined symbol for every symbol that is @@ -4758,7 +4759,6 @@ new_psymtab (char *name, struct objfile *objfile) struct partial_symtab *psymtab; psymtab = allocate_psymtab (name, objfile); - psymtab->section_offsets = objfile->section_offsets; /* Keep a backpointer to the file's symbols. */ diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 9daddea..ea2454c 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -98,12 +98,6 @@ struct partial_symtab const char *dirname; - /* Set of relocation offsets to apply to each section. - This is typically objfile->section_offsets, but in some cases - it's different. See, e.g., elfstab_offset_sections. */ - - struct section_offsets *section_offsets; - /* Range of text addresses covered by this file; texthigh is the beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED is set. */ @@ -224,7 +218,6 @@ extern void add_psymbol_to_list (const char *, int, extern void init_psymbol_list (struct objfile *, int); extern struct partial_symtab *start_psymtab_common (struct objfile *, - struct section_offsets *, const char *, CORE_ADDR, struct partial_symbol **, struct partial_symbol **); diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 9ee6ed1..ba677bc 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1014,18 +1014,6 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, fprintf_filtered (outfile, ")\n"); } - fprintf_filtered (outfile, " Relocate symbols by "); - for (i = 0; i < objfile->num_sections; ++i) - { - if (i != 0) - fprintf_filtered (outfile, ", "); - wrap_here (" "); - fputs_filtered (paddress (gdbarch, - ANOFFSET (psymtab->section_offsets, i)), - outfile); - } - fprintf_filtered (outfile, "\n"); - fprintf_filtered (outfile, " Symbols cover text addresses "); fputs_filtered (paddress (gdbarch, psymtab->textlow), outfile); fprintf_filtered (outfile, "-"); @@ -1526,7 +1514,6 @@ sort_pst_symbols (struct objfile *objfile, struct partial_symtab *pst) struct partial_symtab * start_psymtab_common (struct objfile *objfile, - struct section_offsets *section_offsets, const char *filename, CORE_ADDR textlow, struct partial_symbol **global_syms, struct partial_symbol **static_syms) @@ -1534,7 +1521,6 @@ start_psymtab_common (struct objfile *objfile, struct partial_symtab *psymtab; psymtab = allocate_psymtab (filename, objfile); - psymtab->section_offsets = section_offsets; psymtab->textlow = textlow; psymtab->texthigh = psymtab->textlow; /* default */ psymtab->globals_offset = global_syms - objfile->global_psymbols.list; diff --git a/gdb/stabsread.h b/gdb/stabsread.h index 07e7a6e..dbf5e1d 100644 --- a/gdb/stabsread.h +++ b/gdb/stabsread.h @@ -189,8 +189,6 @@ extern void coffstab_build_psymtabs extern void stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, char *stabstr_name, char *text_name); -extern void elfstab_offset_sections (struct objfile *, - struct partial_symtab *); extern int symbol_reference_defined (char **); extern void ref_add (int, struct symbol *, char *, CORE_ADDR); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 9571ac8..b5b2a1d 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -2016,7 +2016,7 @@ xcoff_start_psymtab (struct objfile *objfile, struct partial_symbol **static_syms) { struct partial_symtab *result = - start_psymtab_common (objfile, objfile->section_offsets, + start_psymtab_common (objfile, filename, /* We fill in textlow later. */ 0, @@ -2079,7 +2079,6 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, struct partial_symtab *subpst = allocate_psymtab (include_list[i], objfile); - subpst->section_offsets = pst->section_offsets; subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc)); ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0; |