* symtab.h (enum minimal_symbol_type): Add mst_file_*.
* partial-stab.h [DBXREAD_ONLY]: Record statics in miminal symbols. * dbxread.c (record_minimal_symbol): Deal with statics. * minsyms.c (lookup_minimal_symbol): Prefer externals to statics.
This commit is contained in:
parent
675d65db00
commit
164207cae3
@ -1,5 +1,10 @@
|
||||
Mon Jul 19 11:48:57 1993 Jim Kingdon (kingdon@deneb.cygnus.com)
|
||||
|
||||
* symtab.h (enum minimal_symbol_type): Add mst_file_*.
|
||||
* partial-stab.h [DBXREAD_ONLY]: Record statics in miminal symbols.
|
||||
* dbxread.c (record_minimal_symbol): Deal with statics.
|
||||
* minsyms.c (lookup_minimal_symbol): Prefer externals to statics.
|
||||
|
||||
* config/i386/xm-i386sco.h: Define HAVE_TERMIOS.
|
||||
|
||||
* printcmd.c, config/pa/xm-pa.h, config/alpha/xm-alpha.h: Make it so
|
||||
|
@ -95,6 +95,7 @@ lookup_minimal_symbol (name, objf)
|
||||
struct objfile *objfile;
|
||||
struct minimal_symbol *msymbol;
|
||||
struct minimal_symbol *found_symbol = NULL;
|
||||
struct minimal_symbol *found_file_symbol = NULL;
|
||||
#ifdef IBM6000_TARGET
|
||||
struct minimal_symbol *trampoline_symbol = NULL;
|
||||
#endif
|
||||
@ -112,40 +113,68 @@ lookup_minimal_symbol (name, objf)
|
||||
{
|
||||
if (SYMBOL_MATCHES_NAME (msymbol, name))
|
||||
{
|
||||
#ifdef IBM6000_TARGET
|
||||
/* I *think* all platforms using shared libraries (and
|
||||
trampoline code) will suffer this problem. Consider a
|
||||
case where there are 5 shared libraries, each referencing
|
||||
`foo' with a trampoline entry. When someone wants to put
|
||||
a breakpoint on `foo' and the only info we have is minimal
|
||||
symbol vector, we want to use the real `foo', rather than
|
||||
one of those trampoline entries. MGO */
|
||||
/* If a trampoline symbol is found, we prefer to keep looking
|
||||
for the *real* symbol. If the actual symbol not found,
|
||||
then we'll use the trampoline entry. Sorry for the machine
|
||||
dependent code here, but I hope this will benefit other
|
||||
platforms as well. For trampoline entries, we used
|
||||
mst_unknown earlier. Perhaps we should define a
|
||||
`mst_trampoline' type?? */
|
||||
switch (MSYMBOL_TYPE (msymbol))
|
||||
{
|
||||
case mst_file_text:
|
||||
case mst_file_data:
|
||||
case mst_file_bss:
|
||||
/* It is file-local. If we find more than one, just
|
||||
return the latest one (the user can't expect
|
||||
useful behavior in that case). */
|
||||
found_file_symbol = msymbol;
|
||||
break;
|
||||
|
||||
if (MSYMBOL_TYPE (msymbol) != mst_unknown)
|
||||
found_symbol = msymbol;
|
||||
else if (MSYMBOL_TYPE (msymbol) == mst_unknown &&
|
||||
!trampoline_symbol)
|
||||
trampoline_symbol = msymbol;
|
||||
|
||||
case mst_unknown:
|
||||
#ifdef IBM6000_TARGET
|
||||
/* I *think* all platforms using shared
|
||||
libraries (and trampoline code) will suffer
|
||||
this problem. Consider a case where there are
|
||||
5 shared libraries, each referencing `foo'
|
||||
with a trampoline entry. When someone wants
|
||||
to put a breakpoint on `foo' and the only
|
||||
info we have is minimal symbol vector, we
|
||||
want to use the real `foo', rather than one
|
||||
of those trampoline entries. MGO */
|
||||
|
||||
/* If a trampoline symbol is found, we prefer to
|
||||
keep looking for the *real* symbol. If the
|
||||
actual symbol not found, then we'll use the
|
||||
trampoline entry. Sorry for the machine
|
||||
dependent code here, but I hope this will
|
||||
benefit other platforms as well. For
|
||||
trampoline entries, we used mst_unknown
|
||||
earlier. Perhaps we should define a
|
||||
`mst_trampoline' type?? */
|
||||
|
||||
if (trampoline_symbol == NULL)
|
||||
trampoline_symbol = msymbol;
|
||||
break;
|
||||
#else
|
||||
found_symbol = msymbol;
|
||||
/* FALLTHROUGH */
|
||||
#endif
|
||||
default:
|
||||
found_symbol = msymbol;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* External symbols are best. */
|
||||
if (found_symbol)
|
||||
return found_symbol;
|
||||
|
||||
/* File-local symbols are next best. */
|
||||
if (found_file_symbol)
|
||||
return found_file_symbol;
|
||||
|
||||
/* Symbols for IBM shared library trampolines are next best. */
|
||||
#ifdef IBM6000_TARGET
|
||||
return found_symbol ? found_symbol : trampoline_symbol;
|
||||
if (trampoline_symbol)
|
||||
return trampoline_symbol;
|
||||
#endif
|
||||
|
||||
return (found_symbol);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -43,6 +43,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
||||
goto record_it;
|
||||
|
||||
case N_BSS:
|
||||
case N_BSS | N_EXT:
|
||||
case N_NBBSS | N_EXT:
|
||||
case N_SETV | N_EXT: /* FIXME, is this in BSS? */
|
||||
@ -108,30 +109,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
past_first_source_file = 1;
|
||||
last_o_file_start = CUR_SYMBOL_VALUE;
|
||||
}
|
||||
else
|
||||
goto record_it;
|
||||
#endif /* DBXREAD_ONLY */
|
||||
continue;
|
||||
|
||||
case N_DATA:
|
||||
#ifdef DBXREAD_ONLY
|
||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
||||
SET_NAMESTRING ();
|
||||
/* Check for __DYNAMIC, which is used by Sun shared libraries.
|
||||
Record it even if it's local, not global, so we can find it.
|
||||
FIXME: this might want to check for _DYNAMIC and the current
|
||||
symbol_leading_char. */
|
||||
if (namestring[8] == 'C' && STREQ ("__DYNAMIC", namestring))
|
||||
goto record_it;
|
||||
|
||||
/* Same with virtual function tables, both global and static. */
|
||||
{
|
||||
char *tempstring = namestring;
|
||||
if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
|
||||
tempstring++;
|
||||
if (VTBL_PREFIX_P ((tempstring)))
|
||||
goto record_it;
|
||||
}
|
||||
#endif /* DBXREAD_ONLY */
|
||||
continue;
|
||||
goto record_it;
|
||||
|
||||
case N_UNDF | N_EXT:
|
||||
#ifdef DBXREAD_ONLY
|
||||
@ -175,7 +160,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
/* Lots of symbol types we can just ignore. */
|
||||
|
||||
case N_ABS:
|
||||
case N_BSS:
|
||||
case N_NBDATA:
|
||||
case N_NBBSS:
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user