diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/mdebugread.c | 186 |
2 files changed, 98 insertions, 94 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 31a3d90..ffe2968 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Thu Jul 2 10:22:00 1998 Dawn Perchik <dawn@cygnus.com> + + * mdebugread.c (parse_partial_symbols): Go ahead and read the .mdebug + section, but just don't add a 2nd minimal symbol if this is an .mdebug + section in an ELF file. + 1998-07-01 Jim Blandy <jimb@zwingli.cygnus.com> * Makefile.in (ax-general.o): Depend on $(defs_h) too. diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 489c20f..c3fae0a 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2431,111 +2431,109 @@ parse_partial_symbols (objfile, section_offsets) Skip the creation of the minimal symbols based on the ECOFF symbol table. */ - if (ECOFF_IN_ELF(cur_bfd)) - { - /* Pass 2 over external syms: fill in external symbols */ - ext_in = ext_block; - ext_in_end = ext_in + hdr->iextMax; - for (; ext_in < ext_in_end; ext_in++) - { - enum minimal_symbol_type ms_type = mst_text; - CORE_ADDR svalue = ext_in->asym.value; + /* Pass 2 over external syms: fill in external symbols */ + ext_in = ext_block; + ext_in_end = ext_in + hdr->iextMax; + for (; ext_in < ext_in_end; ext_in++) + { + enum minimal_symbol_type ms_type = mst_text; + CORE_ADDR svalue = ext_in->asym.value; - /* The Irix 5 native tools seem to sometimes generate bogus - external symbols. */ - if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax) - { - complain (&bad_ext_ifd_complaint, ext_in->ifd, hdr->ifdMax); - continue; - } - if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax) - { - complain (&bad_ext_iss_complaint, ext_in->asym.iss, + /* The Irix 5 native tools seem to sometimes generate bogus + external symbols. */ + if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax) + { + complain (&bad_ext_ifd_complaint, ext_in->ifd, hdr->ifdMax); + continue; + } + if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax) + { + complain (&bad_ext_iss_complaint, ext_in->asym.iss, hdr->issExtMax); - continue; - } + continue; + } - extern_tab[fdr_to_pst[ext_in->ifd].globals_offset - + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in; + extern_tab[fdr_to_pst[ext_in->ifd].globals_offset + + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in; - if (SC_IS_UNDEF(ext_in->asym.sc) || ext_in->asym.sc == scNil) - continue; + if (SC_IS_UNDEF(ext_in->asym.sc) || ext_in->asym.sc == scNil) + continue; - - /* Pass 3 over files, over local syms: fill in static symbols */ - name = debug_info->ssext + ext_in->asym.iss; + + /* Pass 3 over files, over local syms: fill in static symbols */ + name = debug_info->ssext + ext_in->asym.iss; - /* Process ECOFF Symbol Types and Storage Classes */ - switch (ext_in->asym.st) - { - case stProc: - /* Beginnning of Procedure */ - svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); - break; - case stStaticProc: - /* Load time only static procs */ - ms_type = mst_file_text; - svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); - break; - case stGlobal: - /* External symbol */ - if (SC_IS_COMMON (ext_in->asym.sc)) - { - /* The value of a common symbol is its size, not its address. - Ignore it. */ - continue; - } - else if (SC_IS_DATA (ext_in->asym.sc)) - { - ms_type = mst_data; - svalue += ANOFFSET (section_offsets, SECT_OFF_DATA); - } - else if (SC_IS_BSS (ext_in->asym.sc)) - { - ms_type = mst_bss; - svalue += ANOFFSET (section_offsets, SECT_OFF_BSS); - } - else - ms_type = mst_abs; - break; - case stLabel: - /* Label */ - if (SC_IS_TEXT (ext_in->asym.sc)) - { - ms_type = mst_file_text; - svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); - } - else if (SC_IS_DATA (ext_in->asym.sc)) - { - ms_type = mst_file_data; - svalue += ANOFFSET (section_offsets, SECT_OFF_DATA); - } - else if (SC_IS_BSS (ext_in->asym.sc)) - { - ms_type = mst_file_bss; - svalue += ANOFFSET (section_offsets, SECT_OFF_BSS); - } - else - ms_type = mst_abs; - break; - case stLocal: - case stNil: - /* The alpha has the section start addresses in stLocal symbols + /* Process ECOFF Symbol Types and Storage Classes */ + switch (ext_in->asym.st) + { + case stProc: + /* Beginnning of Procedure */ + svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); + break; + case stStaticProc: + /* Load time only static procs */ + ms_type = mst_file_text; + svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); + break; + case stGlobal: + /* External symbol */ + if (SC_IS_COMMON (ext_in->asym.sc)) + { + /* The value of a common symbol is its size, not its address. + Ignore it. */ + continue; + } + else if (SC_IS_DATA (ext_in->asym.sc)) + { + ms_type = mst_data; + svalue += ANOFFSET (section_offsets, SECT_OFF_DATA); + } + else if (SC_IS_BSS (ext_in->asym.sc)) + { + ms_type = mst_bss; + svalue += ANOFFSET (section_offsets, SECT_OFF_BSS); + } + else + ms_type = mst_abs; + break; + case stLabel: + /* Label */ + if (SC_IS_TEXT (ext_in->asym.sc)) + { + ms_type = mst_file_text; + svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT); + } + else if (SC_IS_DATA (ext_in->asym.sc)) + { + ms_type = mst_file_data; + svalue += ANOFFSET (section_offsets, SECT_OFF_DATA); + } + else if (SC_IS_BSS (ext_in->asym.sc)) + { + ms_type = mst_file_bss; + svalue += ANOFFSET (section_offsets, SECT_OFF_BSS); + } + else + ms_type = mst_abs; + break; + case stLocal: + case stNil: + /* The alpha has the section start addresses in stLocal symbols whose name starts with a `.'. Skip those but complain for all other stLocal symbols. Irix6 puts the section start addresses in stNil symbols, skip - those too. */ - if (name[0] == '.') - continue; - /* Fall through. */ - default: - ms_type = mst_unknown; - complain (&unknown_ext_complaint, name); - } + those too.*/ + if (name[0] == '.') + continue; + /* Fall through. */ + default: + ms_type = mst_unknown; + complain (&unknown_ext_complaint, name); + } + if (!ECOFF_IN_ELF(cur_bfd)) prim_record_minimal_symbol (name, svalue, ms_type, objfile); - } - } + } /* Pass 3 over files, over local syms: fill in static symbols */ for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++) |