2003-03-03 David Carlton <carlton@math.stanford.edu>

* symtab.h (DEPRECATED_SYMBOL_MATCHES_NAME): Rename from
	SYMBOL_MATCHES_NAME, add comment.
	(SYMBOL_MATCHES_NATURAL_NAME): New.
	* minsyms.c (lookup_minimal_symbol_solib_trampoline): Replace
	SYMBOL_MATCHES_NAME with DEPRECATED_SYMBOL_MATCHES_NAME.
	(lookup_minimal_symbol, lookup_minimal_symbol_text): Ditto.
	* symtab.c (lookup_partial_symbol): Use
	SYMBOL_MATCHES_NATURAL_NAME, not SYMBOL_MATCHES_NAME.  Delete
	unhelpful comment.
	(lookup_block_symbol): Use SYMBOL_MATCHES_NATURAL_NAME, not
	SYMBOL_MATCHES_NAME.
	Fix for PR c++/33.
This commit is contained in:
David Carlton 2003-03-03 18:34:12 +00:00
parent 25120b0d7a
commit 8e43749752
4 changed files with 37 additions and 12 deletions

View file

@ -1,3 +1,18 @@
2003-03-03 David Carlton <carlton@math.stanford.edu>
* symtab.h (DEPRECATED_SYMBOL_MATCHES_NAME): Rename from
SYMBOL_MATCHES_NAME, add comment.
(SYMBOL_MATCHES_NATURAL_NAME): New.
* minsyms.c (lookup_minimal_symbol_solib_trampoline): Replace
SYMBOL_MATCHES_NAME with DEPRECATED_SYMBOL_MATCHES_NAME.
(lookup_minimal_symbol, lookup_minimal_symbol_text): Ditto.
* symtab.c (lookup_partial_symbol): Use
SYMBOL_MATCHES_NATURAL_NAME, not SYMBOL_MATCHES_NAME. Delete
unhelpful comment.
(lookup_block_symbol): Use SYMBOL_MATCHES_NATURAL_NAME, not
SYMBOL_MATCHES_NAME.
Fix for PR c++/33.
2003-03-03 David Carlton <carlton@math.stanford.edu> 2003-03-03 David Carlton <carlton@math.stanford.edu>
* symtab.h (SYMBOL_MATCHES_REGEXP): Delete. * symtab.h (SYMBOL_MATCHES_REGEXP): Delete.

View file

@ -188,7 +188,7 @@ lookup_minimal_symbol (register const char *name, const char *sfile,
while (msymbol != NULL && found_symbol == NULL) while (msymbol != NULL && found_symbol == NULL)
{ {
if (SYMBOL_MATCHES_NAME (msymbol, name)) if (DEPRECATED_SYMBOL_MATCHES_NAME (msymbol, name))
{ {
switch (MSYMBOL_TYPE (msymbol)) switch (MSYMBOL_TYPE (msymbol))
{ {
@ -288,7 +288,7 @@ lookup_minimal_symbol_text (register const char *name, const char *sfile,
msymbol != NULL && found_symbol == NULL; msymbol != NULL && found_symbol == NULL;
msymbol = msymbol->hash_next) msymbol = msymbol->hash_next)
{ {
if (SYMBOL_MATCHES_NAME (msymbol, name) && if (DEPRECATED_SYMBOL_MATCHES_NAME (msymbol, name) &&
(MSYMBOL_TYPE (msymbol) == mst_text || (MSYMBOL_TYPE (msymbol) == mst_text ||
MSYMBOL_TYPE (msymbol) == mst_file_text)) MSYMBOL_TYPE (msymbol) == mst_file_text))
{ {
@ -364,7 +364,7 @@ lookup_minimal_symbol_solib_trampoline (register const char *name,
msymbol != NULL && found_symbol == NULL; msymbol != NULL && found_symbol == NULL;
msymbol = msymbol->hash_next) msymbol = msymbol->hash_next)
{ {
if (SYMBOL_MATCHES_NAME (msymbol, name) && if (DEPRECATED_SYMBOL_MATCHES_NAME (msymbol, name) &&
MSYMBOL_TYPE (msymbol) == mst_solib_trampoline) MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
return msymbol; return msymbol;
} }

View file

@ -1423,10 +1423,7 @@ lookup_partial_symbol (struct partial_symtab *pst, const char *name, int global,
if (!(top == bottom)) if (!(top == bottom))
internal_error (__FILE__, __LINE__, "failed internal consistency check"); internal_error (__FILE__, __LINE__, "failed internal consistency check");
/* djb - 2000-06-03 - Use SYMBOL_MATCHES_NAME, not a strcmp, so while (top <= real_top && SYMBOL_MATCHES_NATURAL_NAME (*top,name))
we don't have to force a linear search on C++. Probably holds true
for JAVA as well, no way to check.*/
while (top <= real_top && SYMBOL_MATCHES_NAME (*top,name))
{ {
if (SYMBOL_NAMESPACE (*top) == namespace) if (SYMBOL_NAMESPACE (*top) == namespace)
{ {
@ -1445,7 +1442,7 @@ lookup_partial_symbol (struct partial_symtab *pst, const char *name, int global,
{ {
if (namespace == SYMBOL_NAMESPACE (*psym)) if (namespace == SYMBOL_NAMESPACE (*psym))
{ {
if (SYMBOL_MATCHES_NAME (*psym, name)) if (SYMBOL_MATCHES_NATURAL_NAME (*psym, name))
{ {
return (*psym); return (*psym);
} }
@ -1623,7 +1620,7 @@ lookup_block_symbol (register const struct block *block, const char *name,
if (SYMBOL_NAMESPACE (sym) == namespace if (SYMBOL_NAMESPACE (sym) == namespace
&& (mangled_name && (mangled_name
? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0 ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
: SYMBOL_MATCHES_NAME (sym, name))) : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
return sym; return sym;
} }
return NULL; return NULL;
@ -1693,7 +1690,7 @@ lookup_block_symbol (register const struct block *block, const char *name,
if (SYMBOL_NAMESPACE (sym) == namespace if (SYMBOL_NAMESPACE (sym) == namespace
&& (mangled_name && (mangled_name
? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0 ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
: SYMBOL_MATCHES_NAME (sym, name))) : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
{ {
return sym; return sym;
} }
@ -1728,7 +1725,7 @@ lookup_block_symbol (register const struct block *block, const char *name,
if (SYMBOL_NAMESPACE (sym) == namespace if (SYMBOL_NAMESPACE (sym) == namespace
&& (mangled_name && (mangled_name
? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0 ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
: SYMBOL_MATCHES_NAME (sym, name))) : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
{ {
/* If SYM has aliases, then use any alias that is active /* If SYM has aliases, then use any alias that is active
at the current PC. If no alias is active at the current at the current PC. If no alias is active at the current

View file

@ -217,11 +217,24 @@ extern char *symbol_demangled_name (struct general_symbol_info *symbol);
"foo :: bar (int, long)". "foo :: bar (int, long)".
Evaluates to zero if the match fails, or nonzero if it succeeds. */ Evaluates to zero if the match fails, or nonzero if it succeeds. */
#define SYMBOL_MATCHES_NAME(symbol, name) \ /* FIXME: carlton/2003-02-27: This is an unholy mixture of linkage
names and natural names. If you want to test the linkage names
with strcmp, do that. If you want to test the natural names with
strcmp_iw, use SYMBOL_MATCHES_NATURAL_NAME. */
#define DEPRECATED_SYMBOL_MATCHES_NAME(symbol, name) \
(STREQ (DEPRECATED_SYMBOL_NAME (symbol), (name)) \ (STREQ (DEPRECATED_SYMBOL_NAME (symbol), (name)) \
|| (SYMBOL_DEMANGLED_NAME (symbol) != NULL \ || (SYMBOL_DEMANGLED_NAME (symbol) != NULL \
&& strcmp_iw (SYMBOL_DEMANGLED_NAME (symbol), (name)) == 0)) && strcmp_iw (SYMBOL_DEMANGLED_NAME (symbol), (name)) == 0))
/* Macro that tests a symbol for a match against a specified name
string. It tests against SYMBOL_NATURAL_NAME, and it ignores
whitespace and trailing parentheses. (See strcmp_iw for details
about its behavior.) */
#define SYMBOL_MATCHES_NATURAL_NAME(symbol, name) \
(strcmp_iw (SYMBOL_NATURAL_NAME (symbol), (name)) == 0)
/* Define a simple structure used to hold some very basic information about /* Define a simple structure used to hold some very basic information about
all defined global symbols (text, data, bss, abs, etc). The only required all defined global symbols (text, data, bss, abs, etc). The only required
information is the general_symbol_info. information is the general_symbol_info.