From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22149 invoked by alias); 3 May 2004 08:49:40 -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 22125 invoked from network); 3 May 2004 08:49:37 -0000 Received: from unknown (HELO nile.gnat.com) (205.232.38.5) by sources.redhat.com with SMTP; 3 May 2004 08:49:37 -0000 Received: from localhost (localhost [127.0.0.1]) by nile.gnat.com (Postfix) with ESMTP id 8FA9BF2A01; Mon, 3 May 2004 04:49:37 -0400 (EDT) Received: from nile.gnat.com ([127.0.0.1]) by localhost (nile.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 23971-01-5; Mon, 3 May 2004 04:49:37 -0400 (EDT) Received: by nile.gnat.com (Postfix, from userid 1345) id 439F4F2C0A; Mon, 3 May 2004 04:49:37 -0400 (EDT) From: Paul Hilfinger To: drow@false.org, jimb@redhat.com Cc: gdb-patches@sources.redhat.com In-reply-to: <20040430134955.GA15786@nevyn.them.org> (message from Daniel Jacobowitz on Fri, 30 Apr 2004 09:49:55 -0400) Subject: Re: [RFA] Introduce notion of "search name" References: <20040305103925.A4815F2EE4@nile.gnat.com> <20040331221249.GA6811@nevyn.them.org> <20040402082955.CCEF3F2F2A@nile.gnat.com> <20040409215112.GB851@nevyn.them.org> <20040412082254.97735F2E7C@nile.gnat.com> <20040429103706.4793BF2BFF@nile.gnat.com> <20040429211458.GB27523@nevyn.them.org> <20040430084538.ECDE1F2E1C@nile.gnat.com> <20040430134955.GA15786@nevyn.them.org> Message-Id: <20040503084937.439F4F2C0A@nile.gnat.com> Date: Mon, 03 May 2004 08:49:00 -0000 X-Virus-Scanned: by amavisd-new at nile.gnat.com X-SW-Source: 2004-05/txt/msg00057.txt.bz2 Dan & Jim, > This is not what I was talking about - I was suggesting > SYMBOL_DEMANGLED_NAME (symbol, objfile). That's more mechanical work > but less confusing. Ah. Well, a quick scan of the sources indicates that there are a few places that ask for SYMBOL_PRINT_NAME in cases where it is not apparent where to find an objfile. On the other hand, there are many other cases where there IS an objfile immediately to hand, so I suspect your design can be made to work. It won't, of course, be a purely mechanical replacement. > I don't care. Go ahead without doing this if Jim's OK with the patch > otherwise. I'll come back and fix it in a year or two if I ever run > out of memory leaks. At the moment, I'd really like to concentrate on getting Ada support turned on, and any leakage problems arising from these changes will affect only Ada users (who haven't complained about them in the last 7 years). If you can accept the patch largely as it is for now, I will undertake to return to the objfile-finding problem after clearing my more immediate hurdles. As an update, here is the most recent version of my "search-name" patch. Thanks for your attention. Paul Hilfinger ACT, Inc. 2004-05-03 Paul N. Hilfinger * symtab.h (SYMBOL_SEARCH_NAME): New definition. (SYMBOL_MATCHES_SEARCH_NAME): New definition. (SYMBOL_DEMANGLED_SEARCH_NAME): New definition. * dictionary.c (iter_name_first_hashed): Match on SYMBOL_SEARCH_NAME. (iter_name_next_hashed): Ditto. (iter_name_next_linear): Ditto. (insert_symbol_hashed): Hash on SYMBOL_SEARCH_NAME. * symtab.c (lookup_partial_symbol): Assume symbols ordered by search name, using SYMBOL_SEARCH_NAME and SYMBOL_MATCHES_SEARCH_NAME. (symbol_search_name): New function. (symbol_demangled_search_name): New function. * symfile.c (compare_psymbols): Order by SYMBOL_SEARCH_NAME. * minsyms.c (build_minimal_symbol_hash_tables): Use SYMBOL_DEMANGLED_SEARCH_NAME to test for adding to demangled hash table. Index: current-public.61/gdb/minsyms.c --- current-public.61/gdb/minsyms.c Wed, 31 Mar 2004 23:53:02 -0800 hilfingr (GdbPub/j/4_minsyms.c 1.1.1.3.1.1.1.1.1.1.1.1.1.1.3.2.2.1 644) +++ current-public.61(w)/gdb/minsyms.c Sat, 01 May 2004 15:52:19 -0700 hilfingr (GdbPub/j/4_minsyms.c 1.1.1.3.1.1.1.1.1.1.1.1.1.1.3.2.2.1 644) @@ -791,7 +791,7 @@ build_minimal_symbol_hash_tables (struct add_minsym_to_hash_table (msym, objfile->msymbol_hash); msym->demangled_hash_next = 0; - if (SYMBOL_DEMANGLED_NAME (msym) != NULL) + if (SYMBOL_DEMANGLED_SEARCH_NAME (msym) != NULL) add_minsym_to_demangled_hash_table (msym, objfile->msymbol_demangled_hash); } Index: current-public.61/gdb/symfile.c --- current-public.61/gdb/symfile.c Sat, 01 May 2004 02:27:55 -0700 hilfingr (GdbPub/k/48_symfile.c 1.1.1.7.1.1.1.2.1.1.1.1.1.1.1.1.1.1.3.1.1.2.1.1.1.1.2.1.2.1.2.1 644) +++ current-public.61(w)/gdb/symfile.c Mon, 03 May 2004 01:05:30 -0700 hilfingr (GdbPub/k/48_symfile.c 1.1.1.7.1.1.1.2.1.1.1.1.1.1.1.1.1.1.3.1.1.2.1.1.1.1.2.1.2.1.2.1 644) @@ -207,8 +207,8 @@ compare_psymbols (const void *s1p, const struct partial_symbol *const *s1 = s1p; struct partial_symbol *const *s2 = s2p; - return strcmp_iw_ordered (SYMBOL_NATURAL_NAME (*s1), - SYMBOL_NATURAL_NAME (*s2)); + return strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*s1), + SYMBOL_SEARCH_NAME (*s2)); } void Index: current-public.61/gdb/symtab.c --- current-public.61/gdb/symtab.c Sat, 10 Apr 2004 00:36:50 -0700 hilfingr (GdbPub/k/50_symtab.c 1.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.2.1.1.1.1.1.1.1.2.1 644) +++ current-public.61(w)/gdb/symtab.c Mon, 03 May 2004 01:41:17 -0700 hilfingr (GdbPub/k/50_symtab.c 1.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.2.1.1.1.1.1.1.1.2.1 644) @@ -659,6 +659,18 @@ symbol_demangled_name (struct general_sy return NULL; } +/* Return the search name of a symbol---i.e., the natural or linkage name + of the symbol, depending on how it will be searched for. */ +char *symbol_search_name (const struct general_symbol_info *gsymbol) { + return symbol_natural_name (gsymbol); +} + +/* For languages that do not demangle or that do not do searches by + demangled name, return NULL. Otherwise, return the demangled name. */ +char *symbol_demangled_search_name (struct general_symbol_info *gsymbol) { + return symbol_demangled_name (gsymbol); +} + /* Initialize the structure fields to zero values. */ void init_sal (struct symtab_and_line *sal) @@ -1467,7 +1479,7 @@ lookup_partial_symbol (struct partial_sy { do_linear_search = 1; } - if (strcmp_iw_ordered (SYMBOL_NATURAL_NAME (*center), name) >= 0) + if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center), name) >= 0) { top = center; } @@ -1482,7 +1494,7 @@ lookup_partial_symbol (struct partial_sy while (top <= real_top && (linkage_name != NULL ? strcmp (SYMBOL_LINKAGE_NAME (*top), linkage_name) == 0 - : SYMBOL_MATCHES_NATURAL_NAME (*top,name))) + : SYMBOL_MATCHES_SEARCH_NAME (*top,name))) { if (SYMBOL_DOMAIN (*top) == domain) { @@ -1503,7 +1515,7 @@ lookup_partial_symbol (struct partial_sy { if (linkage_name != NULL ? strcmp (SYMBOL_LINKAGE_NAME (*psym), linkage_name) == 0 - : SYMBOL_MATCHES_NATURAL_NAME (*psym, name)) + : SYMBOL_MATCHES_SEARCH_NAME (*psym, name)) { return (*psym); } Index: current-public.61/gdb/symtab.h --- current-public.61/gdb/symtab.h Sat, 10 Apr 2004 00:36:50 -0700 hilfingr (GdbPub/l/2_symtab.h 1.1.1.5.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.2.1.2.1 644) +++ current-public.61(w)/gdb/symtab.h Mon, 03 May 2004 01:42:37 -0700 hilfingr (GdbPub/l/2_symtab.h 1.1.1.5.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.2.1.2.1 644) @@ -258,6 +258,25 @@ extern char *symbol_demangled_name (stru #define SYMBOL_MATCHES_NATURAL_NAME(symbol, name) \ (strcmp_iw (SYMBOL_NATURAL_NAME (symbol), (name)) == 0) +/* Macro that returns the name to be used when sorting and searching symbols. + In C++, Chill, and Java, we search for the demangled form of a name, + and so sort symbols accordingly. In Ada, however, we search by mangled + name. */ +#define SYMBOL_SEARCH_NAME(symbol) \ + (symbol_search_name (&(symbol)->ginfo)) +extern char *symbol_search_name (const struct general_symbol_info *); + +/* Analogous to SYMBOL_MATCHES_NATURAL_NAME, but uses the search + name. */ +#define SYMBOL_MATCHES_SEARCH_NAME(symbol, name) \ + (strcmp_iw (SYMBOL_SEARCH_NAME (symbol), (name)) == 0) + +/* For languages that do not demangle or that do not do searches by + demangled name, NULL. Otherwise, the demangled name. */ +#define SYMBOL_DEMANGLED_SEARCH_NAME(symbol) \ + (symbol_demangled_search_name (&(symbol)->ginfo)) +extern char *symbol_demangled_search_name (struct general_symbol_info *); + /* Classification types for a minimal symbol. These should be taken as "advisory only", since if gdb can't easily figure out a classification it simply selects mst_unknown. It may also have to Index: current-public.61/gdb/dictionary.c --- current-public.61/gdb/dictionary.c Tue, 17 Jun 2003 02:41:56 -0700 hilfingr (GdbPub/L/b/35_dictionary 1.1 644) +++ current-public.61(w)/gdb/dictionary.c Sat, 01 May 2004 15:52:19 -0700 hilfingr (GdbPub/L/b/35_dictionary 1.1 644) @@ -636,7 +636,7 @@ iter_name_first_hashed (const struct dic sym = sym->hash_next) { /* Warning: the order of arguments to strcmp_iw matters! */ - if (strcmp_iw (SYMBOL_NATURAL_NAME (sym), name) == 0) + if (strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0) { break; } @@ -656,7 +656,7 @@ iter_name_next_hashed (const char *name, next != NULL; next = next->hash_next) { - if (strcmp_iw (SYMBOL_NATURAL_NAME (next), name) == 0) + if (strcmp_iw (SYMBOL_SEARCH_NAME (next), name) == 0) break; } @@ -674,7 +674,7 @@ insert_symbol_hashed (struct dictionary unsigned int hash_index; struct symbol **buckets = DICT_HASHED_BUCKETS (dict); - hash_index = (msymbol_hash_iw (SYMBOL_NATURAL_NAME (sym)) + hash_index = (msymbol_hash_iw (SYMBOL_SEARCH_NAME (sym)) % DICT_HASHED_NBUCKETS (dict)); sym->hash_next = buckets[hash_index]; buckets[hash_index] = sym; @@ -789,7 +789,7 @@ iter_name_next_linear (const char *name, for (i = DICT_ITERATOR_INDEX (iterator) + 1; i < nsyms; ++i) { sym = DICT_LINEAR_SYM (dict, i); - if (strcmp_iw (SYMBOL_NATURAL_NAME (sym), name) == 0) + if (strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0) { retval = sym; break;