Permit symbols to be superseded when new symbol files have

been read in, particularly for VxWorks.

        * dbxread.c (read_dbx_symtab): Allow N_SOL to cleanly take us back
        to the main file, as well as to include files.  Also, put global
        functions into the global psymtab, to make "i fun" work.
        (end_psymtab):  Free named symtabs and psymtabs for a file, once a
        new psymtab for it has been read.
This commit is contained in:
John Gilmore 1991-04-13 21:51:28 +00:00
parent bb335cf4aa
commit f96238813e

View File

@ -1167,10 +1167,10 @@ end_symtab (end_addr)
symtab->language = language_unknown;
symtab->fullname = NULL;
/* If there is already a symtab for a file of this name, remove it,
and clear out other dependent data structures such as
breakpoints. This happens in VxWorks maybe? -gnu@cygnus */
free_named_symtab (symtab->filename);
/* There should never already be a symtab for this name, since
any prev dups have been removed when the psymtab was read in.
FIXME, there ought to be a way to check this here. */
/* FIXME blewit |= free_named_symtabs (symtab->filename); */
/* Link the new symtab into the list of such. */
symtab->next = symtab_list;
@ -2010,12 +2010,15 @@ read_dbx_symtab (symfile_name, addr,
/* In C++, one may expect the same filename to come round many
times, when code is coming alternately from the main file
and from inline functions in other files. So I check to see
if this is a file we've seen before.
if this is a file we've seen before -- either the main
source file, or a previously included file.
This seems to be a lot of time to be spending on N_SOL, but
things like "break expread.y:435" need to work (I
suppose the psymtab_include_list could be hashed or put
in a binary tree, if profiling shows this is a major hog). */
if (!strcmp (namestring, pst->filename))
continue;
{
register int i;
for (i = 0; i < includes_used; i++)
@ -2204,6 +2207,17 @@ read_dbx_symtab (symfile_name, addr,
static_psymbols, bufp->n_value);
continue;
/* Global functions were ignored here, but now they
are put into the global psymtab like one would expect.
They're also in the misc fn vector...
FIXME, why did it used to ignore these? That broke
"i fun" on these functions. */
case 'F':
ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
VAR_NAMESPACE, LOC_BLOCK,
global_psymbols, bufp->n_value);
continue;
/* Two things show up here (hopefully); static symbols of
local scope (static used inside braces) or extensions
of structure symbols. We can ignore both. */
@ -2219,10 +2233,6 @@ read_dbx_symtab (symfile_name, addr,
case '7':
case '8':
case '9':
/* Global functions are ignored here. I'm not
sure what psymtab they go into (or just the misc
function vector). */
case 'F':
continue;
default:
@ -2495,6 +2505,11 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
qsort (global_psymbols.list + pst->globals_offset, pst->n_global_syms,
sizeof (struct partial_symbol), compare_psymbols);
/* If there is already a psymtab or symtab for a file of this name, remove it.
(If there is a symtab, more drastic things also happen.)
This happens in VxWorks. */
free_named_symtabs (pst->filename);
/* Put the psymtab on the psymtab list */
pst->next = partial_symtab_list;
partial_symtab_list = pst;