* 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:
parent
3241278ac7
commit
1f9872deff
2 changed files with 97 additions and 22 deletions
|
@ -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.
|
||||
|
|
112
gdb/mdebugread.c
112
gdb/mdebugread.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue