This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[rfa] try to remove uses of DEPRECATED_SYMBOL_NAME in symtab.h


This gets rid of the uses of DEPRECATED_SYMBOL_NAME in symtab.h.  It
is used in two macros: SYMBOL_MATCHES_NAME and SYMBOL_MATCHES_REGEXP.

For SYMBOL_MATCHES_REGEXP, the situation is relatively
straightforward: have the regexp always try to match against
SYMBOL_NATURAL_NAME.  This macro is only used in search_symbols; this
redefinition of SYMBOL_MATCHES_REGEXP is, in my opinion, correct
behavior for search_symbols.

SYMBOL_MATCHES_NAME is a bit more complicated.  Right now
SYMBOL_MATCHES_NAME either compares against DEPRECATED_SYMBOL_NAME
using strcmp or against SYMBOL_DEMANGLED_NAME (if it's non-NULL) using
strcmp_iw.  As Michael Chastain noted in PR gdb/33, for the uses of
SYMBOL_MATCHES_NAME in symtab.c, you really always want to use
strcmp_iw.  Unfortunately (as the test suite kindly let me know;
always nice when a test I wrote later catches me in a bit of
foolishness), SYMBOL_MATCHES_NAME is used in minsyms.c in situations
where sometimes you want to match against the linkage name and
sometimes you want to match agaist the natural name.  (It's that
stupid loop over two hash tables.)

So what I've done is renamed the current SYMBOL_MATCHES_NAME to
DEPRECATED_SYMBOL_MATCHES_NAME and used that in minsyms.c.  (At some
point, I'll fix lookup_minimal_symbol to do the right thing, but not
today.)  And I added a new macro SYMBOL_MATCHES_NATURAL_NAME that
compares 'name' to SYMBOL_NATURAL_NAME(symbol) using strcmp_iw.  I
used that in symtab.c; this fixes PR gdb/33.

One note if you test this patch against the current test suite: there
are a pair of tests in gdb.c++/templates.exp, both named 'print
Foo:<something>::foo', that together test for PR gdb/33.  Right now,
one of them KFAILs and the other either PASSes or FAILs, depending on
what compiler you use.  After this patch, they'll both do the same
thing, namely both PASS or both FAIL.  That's a good thing: it means
that the KFAIL corresponding to gdb/33 has gone away.  (In fact, the
FAIL is a testsuite bug; I have a separate patch for that that will go
in tomorrow.)

Tested on i686-pc-linux-gnu/GCC3.1/DWARF-2; OK to commit?

David Carlton
carlton at math dot stanford dot edu

2003-02-27  David Carlton  <carlton at math dot stanford dot edu>

	* symtab.h (DEPRECATED_SYMBOL_MATCHES_NAME): Rename from
	SYMBOL_MATCHES_NAME, add comment.
	(SYMBOL_MATCHES_NATURAL_NAME): New.
	(SYMBOL_MATCHES_REGEXP): Use SYMBOL_NATURAL_NAME.
	* 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.

Index: symtab.h
===================================================================
RCS file: /cvs/src/src/gdb/symtab.h,v
retrieving revision 1.63
diff -u -p -r1.63 symtab.h
--- symtab.h	25 Feb 2003 21:36:20 -0000	1.63
+++ symtab.h	27 Feb 2003 22:18:00 -0000
@@ -217,20 +217,30 @@ extern char *symbol_demangled_name (stru
    "foo :: bar (int, long)".
    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))			\
    || (SYMBOL_DEMANGLED_NAME (symbol) != NULL				\
        && strcmp_iw (SYMBOL_DEMANGLED_NAME (symbol), (name)) == 0))
 
-/* Macro that tests a symbol for an re-match against the last compiled regular
-   expression.  First test the unencoded name, then look for and test a C++
-   encoded name if it exists.
-   Evaluates to zero if the match fails, or nonzero if it succeeds. */
+/* 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)
+
+/* Macro that tests SYMBOL_NATURAL_NAME(symbol) for an re-match
+   against the last compiled regular expression.  Evaluates to zero if
+   the match fails, or nonzero if it succeeds. */
 
 #define SYMBOL_MATCHES_REGEXP(symbol)					\
-  (re_exec (DEPRECATED_SYMBOL_NAME (symbol)) != 0			\
-   || (SYMBOL_DEMANGLED_NAME (symbol) != NULL				\
-       && re_exec (SYMBOL_DEMANGLED_NAME (symbol)) != 0))
+  (re_exec (SYMBOL_NATURAL_NAME (symbol)) != 0)
 
 /* Define a simple structure used to hold some very basic information about
    all defined global symbols (text, data, bss, abs, etc).  The only required
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.96
diff -u -p -r1.96 symtab.c
--- symtab.c	27 Feb 2003 20:48:03 -0000	1.96
+++ symtab.c	27 Feb 2003 22:18:07 -0000
@@ -1423,10 +1423,7 @@ lookup_partial_symbol (struct partial_sy
       if (!(top == bottom))
 	internal_error (__FILE__, __LINE__, "failed internal consistency check");
 
-      /* djb - 2000-06-03 - Use SYMBOL_MATCHES_NAME, not a strcmp, so
-	 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))
+      while (top <= real_top && SYMBOL_MATCHES_NATURAL_NAME (*top,name))
 	{
 	  if (SYMBOL_NAMESPACE (*top) == namespace)
 	    {
@@ -1445,7 +1442,7 @@ lookup_partial_symbol (struct partial_sy
 	{
 	  if (namespace == SYMBOL_NAMESPACE (*psym))
 	    {
-	      if (SYMBOL_MATCHES_NAME (*psym, name))
+	      if (SYMBOL_MATCHES_NATURAL_NAME (*psym, name))
 		{
 		  return (*psym);
 		}
@@ -1623,7 +1620,7 @@ lookup_block_symbol (register const stru
 	  if (SYMBOL_NAMESPACE (sym) == namespace 
 	      && (mangled_name
 		  ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
-		  : SYMBOL_MATCHES_NAME (sym, name)))
+		  : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
 	    return sym;
 	}
       return NULL;
@@ -1693,7 +1690,7 @@ lookup_block_symbol (register const stru
 	  if (SYMBOL_NAMESPACE (sym) == namespace
 	      && (mangled_name
 		  ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
-		  : SYMBOL_MATCHES_NAME (sym, name)))
+		  : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
 	    {
 	      return sym;
 	    }
@@ -1728,7 +1725,7 @@ lookup_block_symbol (register const stru
 	  if (SYMBOL_NAMESPACE (sym) == namespace
 	      && (mangled_name
 		  ? 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
 	         at the current PC.  If no alias is active at the current
Index: minsyms.c
===================================================================
RCS file: /cvs/src/src/gdb/minsyms.c,v
retrieving revision 1.26
diff -u -p -r1.26 minsyms.c
--- minsyms.c	25 Feb 2003 21:36:18 -0000	1.26
+++ minsyms.c	27 Feb 2003 22:18:12 -0000
@@ -188,7 +188,7 @@ lookup_minimal_symbol (register const ch
 
             while (msymbol != NULL && found_symbol == NULL)
 		{
-                if (SYMBOL_MATCHES_NAME (msymbol, name))
+                if (DEPRECATED_SYMBOL_MATCHES_NAME (msymbol, name))
 		    {
                     switch (MSYMBOL_TYPE (msymbol))
                       {
@@ -288,7 +288,7 @@ lookup_minimal_symbol_text (register con
 	       msymbol != NULL && found_symbol == NULL;
 	       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_file_text))
 		{
@@ -364,7 +364,7 @@ lookup_minimal_symbol_solib_trampoline (
 	       msymbol != NULL && found_symbol == NULL;
 	       msymbol = msymbol->hash_next)
 	    {
-	      if (SYMBOL_MATCHES_NAME (msymbol, name) &&
+	      if (DEPRECATED_SYMBOL_MATCHES_NAME (msymbol, name) &&
 		  MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
 		return msymbol;
 	    }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]