mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-24 02:14:28 +00:00
o Fix code deleting psymtab entry from objfile's list.
Only worked if the first element in the list was being deleted. o When MAINLINE (reading main objectfile and need to clear out old data), change elfread.c so that the psymbol table is emptied once (in elf_symfile_read) instead of multiple times in each *_read_psymtab function. o For elf_symfile_read, load dwarf2 symbols last (so that they are searched for first). o In mdebug_psymtab_read, delete check to see if symbols for current source file already loaded. Test doesn't work for .h files. Above change works better
This commit is contained in:
parent
6124cd1e59
commit
4dbdbfc4d3
@ -1,3 +1,30 @@
|
||||
Thu Dec 18 00:26:46 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* mdebugread.c (parse_partial_symbols): Delete check that symbols
|
||||
for file not already loaded. Did not work when an include file
|
||||
was involved.
|
||||
|
||||
Wed Dec 17 10:43:04 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* elfread.c (elf_symfile_read): Since the partial symbol table is
|
||||
searched last in first, insert mdebug or XCOFF info into the
|
||||
partial symbol table before any DWARF2 info.
|
||||
|
||||
Thu Dec 18 00:00:48 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* symfile.c (init_psymbol_list): Handle init with zero elements.
|
||||
|
||||
* elfread.c (elf_symfile_read): If `mainline', clear psymbol table
|
||||
using init_psymbol_list 0. For build_psymtabs functions, pass
|
||||
mainline==0 so that psymbol_list isn't re-initialized.
|
||||
|
||||
* symfile.c (discard_psymtab): New function, correctly unlink an
|
||||
empty psymtab from an object file.
|
||||
* dbxread.c (end_psymtab): Call discard_psymtab.
|
||||
* xcoffread.c (xcoff_end_psymtab): Ditto.
|
||||
* hpread.c (hpread_end_psymtab): Ditto.
|
||||
* os9kread.c (os9k_end_psymtab): Ditto.
|
||||
|
||||
Wed Dec 17 10:47:05 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
|
||||
|
||||
* tracepoint.c (set_raw_tracepoint): initialize addr_string
|
||||
|
@ -615,21 +615,42 @@ elf_symfile_read (objfile, section_offsets, mainline)
|
||||
elf_symtab_read (abfd, offset, objfile, 1);
|
||||
|
||||
/* Now process debugging information, which is contained in
|
||||
special ELF sections. We first have to find them... */
|
||||
special ELF sections. */
|
||||
|
||||
bfd_map_over_sections (abfd, elf_locate_sections, (PTR) &ei);
|
||||
if (dwarf2_has_info (abfd))
|
||||
/* If we are reinitializing, or if we have never loaded syms yet,
|
||||
set table to empty. MAINLINE is cleared so that *_read_psymtab
|
||||
functions do not all also re-initialize the psymbol table. */
|
||||
if (mainline)
|
||||
{
|
||||
/* DWARF 2 sections */
|
||||
dwarf2_build_psymtabs (objfile, section_offsets, mainline);
|
||||
init_psymbol_list (objfile, 0);
|
||||
mainline = 0;
|
||||
}
|
||||
else if (ei.dboffset && ei.lnoffset)
|
||||
|
||||
/* We first have to find them... */
|
||||
bfd_map_over_sections (abfd, elf_locate_sections, (PTR) &ei);
|
||||
|
||||
/* ELF debugging information is inserted into the psymtab in the
|
||||
order of least informative first - most informative last. Since
|
||||
the psymtab table is searched `most recent insertion first' this
|
||||
increases the probability that more detailed debug information
|
||||
for a section is found.
|
||||
|
||||
For instance, an object file might contain both .mdebug (XCOFF)
|
||||
and .debug_info (DWARF2) sections then .mdebug is inserted first
|
||||
(searched last) and DWARF2 is inserted last (searched first). If
|
||||
we don't do this then the XCOFF info is found first - for code in
|
||||
an included file XCOFF info is useless. */
|
||||
|
||||
if (ei.mdebugsect)
|
||||
{
|
||||
/* DWARF sections */
|
||||
dwarf_build_psymtabs (objfile,
|
||||
section_offsets, mainline,
|
||||
ei.dboffset, ei.dbsize,
|
||||
ei.lnoffset, ei.lnsize);
|
||||
const struct ecoff_debug_swap *swap;
|
||||
|
||||
/* .mdebug section, presumably holding ECOFF debugging
|
||||
information. */
|
||||
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
|
||||
if (swap)
|
||||
elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect,
|
||||
section_offsets);
|
||||
}
|
||||
if (ei.stabsect)
|
||||
{
|
||||
@ -649,16 +670,18 @@ elf_symfile_read (objfile, section_offsets, mainline)
|
||||
str_sect->filepos,
|
||||
bfd_section_size (abfd, str_sect));
|
||||
}
|
||||
if (ei.mdebugsect)
|
||||
if (dwarf2_has_info (abfd))
|
||||
{
|
||||
const struct ecoff_debug_swap *swap;
|
||||
|
||||
/* .mdebug section, presumably holding ECOFF debugging
|
||||
information. */
|
||||
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
|
||||
if (swap)
|
||||
elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect,
|
||||
section_offsets);
|
||||
/* DWARF 2 sections */
|
||||
dwarf2_build_psymtabs (objfile, section_offsets, mainline);
|
||||
}
|
||||
else if (ei.dboffset && ei.lnoffset)
|
||||
{
|
||||
/* DWARF sections */
|
||||
dwarf_build_psymtabs (objfile,
|
||||
section_offsets, mainline,
|
||||
ei.dboffset, ei.dbsize,
|
||||
ei.lnoffset, ei.lnsize);
|
||||
}
|
||||
|
||||
/* Install any minimal symbols that have been collected as the current
|
||||
|
15
gdb/hpread.c
15
gdb/hpread.c
@ -938,21 +938,8 @@ hpread_end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
|
||||
is wrong, in that a psymtab with N_SLINE entries but nothing else
|
||||
is not empty, but we don't realize that. Fixing that without slowing
|
||||
things down might be tricky. */
|
||||
struct partial_symtab *prev_pst;
|
||||
|
||||
/* First, snip it out of the psymtab chain */
|
||||
|
||||
if (pst->objfile->psymtabs == pst)
|
||||
pst->objfile->psymtabs = pst->next;
|
||||
else
|
||||
for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
|
||||
if (prev_pst->next == pst)
|
||||
prev_pst->next = pst->next;
|
||||
|
||||
/* Next, put it on a free list for recycling */
|
||||
|
||||
pst->next = pst->objfile->free_psymtabs;
|
||||
pst->objfile->free_psymtabs = pst;
|
||||
discard_psymtab (pst);
|
||||
|
||||
/* Indicate that psymtab was thrown away. */
|
||||
pst = (struct partial_symtab *)NULL;
|
||||
|
@ -2490,13 +2490,6 @@ parse_partial_symbols (objfile, section_offsets)
|
||||
|
||||
cur_fdr = fh = debug_info->fdr + f_idx;
|
||||
|
||||
/* If a partial symbol table has already been read for this file,
|
||||
don't make another one. This works around a problem with some
|
||||
compilers that emit both DWARF and mdebug sections for a single
|
||||
module. */
|
||||
if (lookup_partial_symtab (fdr_name (fh)))
|
||||
continue;
|
||||
|
||||
if (fh->csym == 0)
|
||||
{
|
||||
fdr_to_pst[f_idx].pst = NULL;
|
||||
|
@ -1003,7 +1003,7 @@ os9k_end_psymtab (pst, include_list, num_includes, capping_symbol_cnt,
|
||||
CORE_ADDR capping_text;
|
||||
struct partial_symtab **dependency_list;
|
||||
int number_dependencies;
|
||||
/* struct partial_symbol *capping_global, *capping_static;*/
|
||||
/* struct partial_symbol *capping_global, *capping_static; */
|
||||
{
|
||||
int i;
|
||||
struct partial_symtab *p1;
|
||||
@ -1160,22 +1160,10 @@ os9k_end_psymtab (pst, include_list, num_includes, capping_symbol_cnt,
|
||||
&& pst->n_static_syms == 0) {
|
||||
/* Throw away this psymtab, it's empty. We can't deallocate it, since
|
||||
it is on the obstack, but we can forget to chain it on the list. */
|
||||
struct partial_symtab *prev_pst;
|
||||
|
||||
/* First, snip it out of the psymtab chain */
|
||||
|
||||
if (pst->objfile->psymtabs == pst)
|
||||
pst->objfile->psymtabs = pst->next;
|
||||
else
|
||||
for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
|
||||
if (prev_pst->next == pst)
|
||||
prev_pst->next = pst->next;
|
||||
|
||||
/* Next, put it on a free list for recycling */
|
||||
pst->next = pst->objfile->free_psymtabs;
|
||||
pst->objfile->free_psymtabs = pst;
|
||||
|
||||
/* Indicate that psymtab was thrown away. */
|
||||
|
||||
discard_psymtab (pst);
|
||||
|
||||
pst = (struct partial_symtab *)NULL;
|
||||
}
|
||||
return pst;
|
||||
|
@ -2115,21 +2115,8 @@ xcoff_end_psymtab (pst, include_list, num_includes, capping_symbol_number,
|
||||
it is on the obstack, but we can forget to chain it on the list. */
|
||||
/* Empty psymtabs happen as a result of header files which don't have
|
||||
any symbols in them. There can be a lot of them. */
|
||||
struct partial_symtab *prev_pst;
|
||||
|
||||
/* First, snip it out of the psymtab chain */
|
||||
|
||||
if (pst->objfile->psymtabs == pst)
|
||||
pst->objfile->psymtabs = pst->next;
|
||||
else
|
||||
for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
|
||||
if (prev_pst->next == pst)
|
||||
prev_pst->next = pst->next;
|
||||
|
||||
/* Next, put it on a free list for recycling */
|
||||
|
||||
pst->next = pst->objfile->free_psymtabs;
|
||||
pst->objfile->free_psymtabs = pst;
|
||||
discard_psymtab (pst);
|
||||
|
||||
/* Indicate that psymtab was thrown away. */
|
||||
pst = (struct partial_symtab *)NULL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user