Index: mdebugread.c =================================================================== RCS file: /nile.c/cvs/Dev/gdb/gdb-5/gdb/mdebugread.c,v retrieving revision 1.1.1.1 diff -c -3 -p -r1.1.1.1 mdebugread.c *** mdebugread.c 2 Sep 2000 21:56:11 -0000 1.1.1.1 --- mdebugread.c 21 Mar 2002 18:29:44 -0000 *************** parse_partial_symbols (struct objfile *o *** 2438,2455 **** --- 2453,2500 ---- break; case stLabel: /* Label */ + + /* On certain plateforms, some extra label symbols can be + generated by the linker. One possible usage for this kind + of symbols is to represent the address of the begining of a + given section. For instance, on Tru64 5.1, the address of + the _ftext label is the start address of the .text section. + + The storage class of these symbols is usually directly + related to the section to which the symbol refers. For + instance, on Tru64 5.1, the storage class for the _fdata + label is scData, refering to the .data section. + + It is actually possible that the section associated to the + storage class of the label does not exist. On True64 5.1 + for instance, the libm.so shared library does not contain + any .data section, although it contains a _fpdata label + which storage class is scData... Since these symbols are + usually useless for the debugger user anyway, we just + discard these symbols. + */ + if (SC_IS_TEXT (ext_in->asym.sc)) { + if (objfile->sect_index_text == -1) + continue; + ms_type = mst_file_text; svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); } else if (SC_IS_DATA (ext_in->asym.sc)) { + if (objfile->sect_index_data == -1) + continue; + ms_type = mst_file_data; svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile)); } else if (SC_IS_BSS (ext_in->asym.sc)) { + if (objfile->sect_index_bss == -1) + continue; + ms_type = mst_file_bss; svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile)); }