* mdebugread.c (record_minimal_symbol): New procedure.

(parse_partial_symbols): Use record_minimal_symbol to record
        the new minimal symbols instead of prim_record_minimal_symbol
        and prim_record_minimal_symbol_and_info.
This commit is contained in:
Joel Brobecker 2005-05-23 03:28:38 +00:00
parent 3241278ac7
commit 1f9872deff
2 changed files with 97 additions and 22 deletions

View file

@ -1,3 +1,10 @@
2004-05-23 Joel Brobecker <brobecker@adacore.com>
* mdebugread.c (record_minimal_symbol): New procedure.
(parse_partial_symbols): Use record_minimal_symbol to record
the new minimal symbols instead of prim_record_minimal_symbol
and prim_record_minimal_symbol_and_info.
2005-05-22 Mark Kettenis <kettenis@gnu.org>
* NEWS: Mention OpenBSD/arm as a new native configuration.

View file

@ -2162,6 +2162,85 @@ function_outside_compilation_unit_complaint (const char *arg1)
arg1);
}
/* Use the STORAGE_CLASS to compute which section the given symbol
belongs to, and then records this new minimal symbol. */
static void
record_minimal_symbol (const char *name, const CORE_ADDR address,
enum minimal_symbol_type ms_type, int storage_class,
struct objfile *objfile)
{
int section;
asection *bfd_section;
switch (storage_class)
{
case scText:
section = SECT_OFF_TEXT (objfile);
bfd_section = bfd_get_section_by_name (cur_bfd, ".text");
break;
case scData:
section = SECT_OFF_DATA (objfile);
bfd_section = bfd_get_section_by_name (cur_bfd, ".data");
break;
case scBss:
section = SECT_OFF_BSS (objfile);
bfd_section = bfd_get_section_by_name (cur_bfd, ".bss");
break;
case scSData:
section = get_section_index (objfile, ".sdata");
bfd_section = bfd_get_section_by_name (cur_bfd, ".sdata");
break;
case scSBss:
section = get_section_index (objfile, ".sbss");
bfd_section = bfd_get_section_by_name (cur_bfd, ".sbss");
break;
case scRData:
section = get_section_index (objfile, ".rdata");
bfd_section = bfd_get_section_by_name (cur_bfd, ".rdata");
break;
case scInit:
section = get_section_index (objfile, ".init");
bfd_section = bfd_get_section_by_name (cur_bfd, ".init");
break;
case scXData:
section = get_section_index (objfile, ".xdata");
bfd_section = bfd_get_section_by_name (cur_bfd, ".xdata");
break;
case scPData:
section = get_section_index (objfile, ".pdata");
bfd_section = bfd_get_section_by_name (cur_bfd, ".pdata");
break;
case scFini:
section = get_section_index (objfile, ".fini");
bfd_section = bfd_get_section_by_name (cur_bfd, ".fini");
break;
case scRConst:
section = get_section_index (objfile, ".rconst");
bfd_section = bfd_get_section_by_name (cur_bfd, ".rconst");
break;
#ifdef scTlsData
case scTlsData:
section = get_section_index (objfile, ".tlsdata");
bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsdata");
break;
#endif
#ifdef scTlsBss
case scTlsBss:
section = get_section_index (objfile, ".tlsbss");
bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsbss");
break;
#endif
default:
/* This kind of symbol is not associated to a section. */
section = -1;
bfd_section = NULL;
}
prim_record_minimal_symbol_and_info (name, address, ms_type, NULL,
section, bfd_section, objfile);
}
/* Master parsing procedure for first-pass reading of file symbols
into a partial_symtab. */
@ -2476,7 +2555,8 @@ parse_partial_symbols (struct objfile *objfile)
unknown_ext_complaint (name);
}
if (!ECOFF_IN_ELF (cur_bfd))
prim_record_minimal_symbol (name, svalue, ms_type, objfile);
record_minimal_symbol (name, svalue, ms_type, ext_in->asym.sc,
objfile);
}
/* Pass 3 over files, over local syms: fill in static symbols */
@ -2593,13 +2673,9 @@ parse_partial_symbols (struct objfile *objfile)
if (sh.st == stStaticProc)
{
namestring = debug_info->ss + fh->issBase + sh.iss;
prim_record_minimal_symbol_and_info (namestring,
sh.value,
mst_file_text,
NULL,
SECT_OFF_TEXT (objfile),
NULL,
objfile);
record_minimal_symbol (namestring, sh.value,
mst_file_text, sh.sc,
objfile);
}
procaddr = sh.value;
@ -2641,13 +2717,9 @@ parse_partial_symbols (struct objfile *objfile)
case scXData:
namestring = debug_info->ss + fh->issBase + sh.iss;
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
prim_record_minimal_symbol_and_info (namestring,
sh.value,
mst_file_data,
NULL,
SECT_OFF_DATA (objfile),
NULL,
objfile);
record_minimal_symbol (namestring, sh.value,
mst_file_data, sh.sc,
objfile);
break;
default:
@ -2655,13 +2727,9 @@ parse_partial_symbols (struct objfile *objfile)
then have the default be abs? */
namestring = debug_info->ss + fh->issBase + sh.iss;
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
prim_record_minimal_symbol_and_info (namestring,
sh.value,
mst_file_bss,
NULL,
SECT_OFF_BSS (objfile),
NULL,
objfile);
record_minimal_symbol (namestring, sh.value,
mst_file_bss, sh.sc,
objfile);
break;
}
}