aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-07-20 02:50:15 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-07-20 02:50:15 +0000
commit164207cae3b34afb49310d07201dbf608523627a (patch)
treee390273855ca9d0ee9758d1cfb135d1d110a07c0
parent675d65db004aa4c66d7864d07c469a303eda4c12 (diff)
downloadgdb-164207cae3b34afb49310d07201dbf608523627a.zip
gdb-164207cae3b34afb49310d07201dbf608523627a.tar.gz
gdb-164207cae3b34afb49310d07201dbf608523627a.tar.bz2
* 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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/minsyms.c77
-rw-r--r--gdb/partial-stab.h24
3 files changed, 62 insertions, 44 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ee7e542..a654c97 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 4b48e2e..d8488f2 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -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))
{
+ 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;
+
+ 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 (MSYMBOL_TYPE (msymbol) != mst_unknown)
- found_symbol = msymbol;
- else if (MSYMBOL_TYPE (msymbol) == mst_unknown &&
- !trampoline_symbol)
- trampoline_symbol = msymbol;
-
+ /* 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;
}
diff --git a/gdb/partial-stab.h b/gdb/partial-stab.h
index 1eea3cc..35d0193 100644
--- a/gdb/partial-stab.h
+++ b/gdb/partial-stab.h
@@ -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;