From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15285 invoked by alias); 27 Feb 2003 23:01:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 15273 invoked from network); 27 Feb 2003 23:01:40 -0000 Received: from unknown (HELO jackfruit.Stanford.EDU) (171.64.38.136) by 172.16.49.205 with SMTP; 27 Feb 2003 23:01:40 -0000 Received: (from carlton@localhost) by jackfruit.Stanford.EDU (8.11.6/8.11.6) id h1RN1cu31162; Thu, 27 Feb 2003 15:01:38 -0800 X-Authentication-Warning: jackfruit.Stanford.EDU: carlton set sender to carlton@math.stanford.edu using -f To: gdb-patches@sources.redhat.com Cc: Elena Zannoni , Jim Blandy Subject: [rfa] try to remove uses of DEPRECATED_SYMBOL_NAME in symtab.h From: David Carlton Date: Thu, 27 Feb 2003 23:01:00 -0000 Message-ID: User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-02/txt/msg00791.txt.bz2 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:::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@math.stanford.edu 2003-02-27 David Carlton * 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; }