From: Paul Hilfinger <hilfingr@gnat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] Introduce notion of "search name"
Date: Fri, 19 Mar 2004 00:09:00 -0000 [thread overview]
Message-ID: <20040303191550.7307DF2DB8@nile.gnat.com> (raw)
Message-ID: <20040319000900.00p1Io976R_gz3qFhHYJ3svcGFfznqneZZ_ruvJlOR0@z> (raw)
The following patch does nothing except to prepare the way for some later
Ada modifications by providing a few "hooks". I've discussed this
modification earlier on this newsgroup. At the moment, I've given
the definitions placeholder definitions that simply result in the
current semantics. I propose to change them when Ada support is turned on.
The idea is to define "search name" as "the name that a language
module uses when searching for this symbol". As discussed earlier,
the search name would be normally be the natural name, but in the case
of Ada, would just be the linkage name.
The modification to the signature of symbol_natural_name is to allow the
option of delayed (lazy) evaluation of the demangled name, which is
actually the point of introducing search names.
Paul Hilfinger
2004-03-03 Paul N. Hilfinger <hilfinger@gnat.com>
* symtab.h (symbol_natural_name): Remove const qualification
from argument.
(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 (symbol_natural_name): Remove const qualification from
argument to allow lazy evaluation of demangled name.
(lookup_partial_symbol): Assume symbols ordered by search name, using
SYMBOL_SEARCH_NAME and SYMBOL_MATCHES_SEARCH_NAME.
* 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.49/gdb/minsyms.c
--- current-public.49/gdb/minsyms.c Mon, 09 Feb 2004 23:40:20 -0800 hilfingr (GdbPub/j/4_minsyms.c 1.1.1.3.1.1.1.1.1.1.1.1.1.1.3.2 644)
+++ submit.31(w)/gdb/minsyms.c Wed, 03 Mar 2004 00:34:32 -0800 hilfingr (GdbPub/j/4_minsyms.c 1.1.1.3.1.1.1.1.1.1.1.1.1.1.3.2.1.1 644)
@@ -794,7 +794,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.49/gdb/symfile.c
--- current-public.49/gdb/symfile.c Tue, 02 Mar 2004 23:57:04 -0800 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 644)
+++ submit.31(w)/gdb/symfile.c Wed, 03 Mar 2004 00:34:32 -0800 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.1.1 644)
@@ -208,8 +208,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.49/gdb/symtab.c
--- current-public.49/gdb/symtab.c Mon, 23 Feb 2004 00:44:25 -0800 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 644)
+++ submit.31(w)/gdb/symtab.c Wed, 03 Mar 2004 01:55:44 -0800 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.1.1 644)
@@ -630,7 +630,7 @@ symbol_init_demangled_name (struct gener
demangling is necessary, this is the demangled name. */
char *
-symbol_natural_name (const struct general_symbol_info *gsymbol)
+symbol_natural_name (struct general_symbol_info *gsymbol)
{
if ((gsymbol->language == language_cplus
|| gsymbol->language == language_java
@@ -1467,7 +1467,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 +1482,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 +1503,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.49/gdb/symtab.h
--- current-public.49/gdb/symtab.h Wed, 18 Feb 2004 01:34:45 -0800 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 644)
+++ submit.31(w)/gdb/symtab.h Wed, 03 Mar 2004 01:55:59 -0800 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.1.1 644)
@@ -213,7 +213,7 @@ extern void symbol_set_names (struct gen
#define SYMBOL_NATURAL_NAME(symbol) \
(symbol_natural_name (&(symbol)->ginfo))
-extern char *symbol_natural_name (const struct general_symbol_info *symbol);
+extern char *symbol_natural_name (struct general_symbol_info *symbol);
/* Return SYMBOL's name from the point of view of the linker. In
languages like C++ where symbols may be mangled for ease of
@@ -257,6 +257,22 @@ 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 most languages, we search for the demangled form of a name,
+ and so sort symbols accordingly. */
+#define SYMBOL_SEARCH_NAME(symbol) \
+ SYMBOL_NATURAL_NAME (symbol)
+
+/* 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_NAME (symbol)
/* Classification types for a minimal symbol. These should be taken as
"advisory only", since if gdb can't easily figure out a
Index: current-public.49/gdb/dictionary.c
--- current-public.49/gdb/dictionary.c Tue, 17 Jun 2003 02:41:56 -0700 hilfingr (GdbPub/L/b/35_dictionary 1.1 644)
+++ submit.31(w)/gdb/dictionary.c Wed, 03 Mar 2004 00:34:33 -0800 hilfingr (GdbPub/L/b/35_dictionary 1.1.4.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;
next reply other threads:[~2004-03-03 19:15 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-03 19:15 Paul Hilfinger [this message]
2004-03-19 0:09 ` Daniel Jacobowitz
2004-03-05 3:59 ` Daniel Jacobowitz
2004-03-05 10:39 ` Paul Hilfinger
2004-03-19 0:09 ` Paul Hilfinger
2004-03-31 22:12 ` Daniel Jacobowitz
2004-04-01 14:53 ` Jim Blandy
2004-04-01 15:00 ` Daniel Jacobowitz
2004-04-01 15:21 ` Jim Blandy
2004-04-02 9:30 ` Paul Hilfinger
2004-04-02 22:27 ` Jim Blandy
2004-04-03 12:04 ` Paul Hilfinger
2004-04-06 14:37 ` Jim Blandy
2004-04-02 9:33 ` Paul Hilfinger
2004-04-02 8:29 ` Paul Hilfinger
2004-04-09 22:40 ` Daniel Jacobowitz
2004-04-12 8:22 ` Paul Hilfinger
2004-04-16 4:11 ` Jim Blandy
2004-04-29 10:37 ` Paul Hilfinger
[not found] ` <20040429211458.GB27523@nevyn.them.org>
[not found] ` <vt2n04umj8b.fsf@zenia.home>
[not found] ` <20040430084538.ECDE1F2E1C@nile.gnat.com>
[not found] ` <20040430134955.GA15786@nevyn.them.org>
2004-05-03 8:49 ` Paul Hilfinger
2004-05-11 19:48 ` Daniel Jacobowitz
2004-05-12 11:00 ` Paul Hilfinger
2004-05-12 13:27 ` Daniel Jacobowitz
2004-05-12 14:14 ` Andrew Cagney
2004-05-12 14:23 ` Daniel Jacobowitz
2004-05-12 15:11 ` Andrew Cagney
2004-05-12 16:59 ` Joel Brobecker
2004-05-13 14:29 ` Andrew Cagney
2004-05-13 9:30 ` Paul Hilfinger
2004-05-13 13:49 ` Daniel Jacobowitz
2004-05-18 21:59 ` Jim Blandy
2004-05-19 9:55 ` Paul Hilfinger
2004-05-19 13:00 ` Daniel Jacobowitz
2004-05-19 15:21 ` Andrew Cagney
2004-05-20 10:18 ` Abstracting "name" Paul Hilfinger
2004-05-21 19:10 ` Andrew Cagney
2004-05-21 20:01 ` Jim Blandy
2004-03-19 0:09 ` [RFA] Introduce notion of "search name" Paul Hilfinger
2004-03-19 0:09 ` David Carlton
2004-03-03 19:26 ` David Carlton
2004-03-19 0:09 ` Paul Hilfinger
2004-03-04 8:45 ` Paul Hilfinger
2004-03-30 9:37 Paul Hilfinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040303191550.7307DF2DB8@nile.gnat.com \
--to=hilfingr@gnat.com \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox