From: David Carlton <carlton@math.stanford.edu>
To: gdb-patches@sources.redhat.com
Cc: Elena Zannoni <ezannoni@redhat.com>, Jim Blandy <jimb@redhat.com>
Subject: [rfa] delete 'force_return' from lookup_symbol_aux_minsyms
Date: Thu, 05 Dec 2002 15:44:00 -0000 [thread overview]
Message-ID: <ro13cpc2fsf.fsf@jackfruit.Stanford.EDU> (raw)
This patch is a short one: it deletes the 'force_return' argument of
lookup_symbol_aux_minsyms. That argument was there because, when the
code in lookup_symbol_aux_minsyms was part of lookup_symbol_aux, the
return statements would sometimes cause lookup_symbol_aux to return a
NULL value without checking the psymtabs first.
I don't think that behavior was either intentional or desirable.
There's not much rhyme or reason to when this happens: in particular,
it doesn't happen every time lookup_symbol_aux_minsyms finds a minsym.
Instead, it is necessary, in addition, either for there to be a symtab at
the appropriate address or for the symtab to be NULL but for the
following test to hold:
else if (MSYMBOL_TYPE (msymbol) != mst_text
&& MSYMBOL_TYPE (msymbol) != mst_file_text
&& !STREQ (name, SYMBOL_NAME (msymbol)))
(I actually experimented with trying to have lookup_symbol _always_
return NULL if a minsym was found without a corresponding symbol, and
that breaks GDB.) I can't imagine that there are callers of
lookup_symbol that depend on having it return NULL in these particular
circumstances; it's certainly not documented anywhere. And I suspect
that this issue is what caused the #ifdef HPUXHPPA to be added to
lookup_symbol_aux: as a relevant comment says,
For HP-generated symbol tables, this check was causing a premature
exit from lookup_symbol with NULL return, and thus messing up symbol
lookups of things like "c::f".
When I asked about this issue earlier, Jim Blandy came to more or less
the same conclusion, I think: see
<http://sources.redhat.com/ml/gdb/2002-11/msg00045.html>.
David Carlton
carlton@math.stanford.edu
2002-12-05 David Carlton <carlton@math.stanford.edu>
* symtab.c (lookup_symbol_aux): Delete 'force_return' variable.
(lookup_symbol_aux_minsyms): Delete 'force_return' argument.
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.81
diff -u -p -r1.81 symtab.c
--- symtab.c 5 Dec 2002 21:26:57 -0000 1.81
+++ symtab.c 5 Dec 2002 22:23:55 -0000
@@ -117,8 +117,7 @@ struct symbol *lookup_symbol_aux_minsyms
const char *mangled_name,
const namespace_enum namespace,
int *is_a_field_of_this,
- struct symtab **symtab,
- int *force_return);
+ struct symtab **symtab);
static struct symbol *find_active_alias (struct symbol *sym, CORE_ADDR addr);
@@ -805,14 +804,6 @@ lookup_symbol_aux (const char *name, con
struct symbol *sym;
const struct block *static_block;
- /* FIXME: carlton/2002-11-05: This variable is here so that
- lookup_symbol_aux will sometimes return NULL after receiving a
- NULL return value from lookup_symbol_aux_minsyms, without
- proceeding on to the partial symtab and static variable tests. I
- suspect that that's a bad idea. */
-
- int force_return;
-
/* Search specified block and its superiors. Don't search
STATIC_BLOCK or GLOBAL_BLOCK. */
@@ -931,13 +922,11 @@ lookup_symbol_aux (const char *name, con
a mangled variable that is stored in one of the minimal symbol tables.
Eventually, all global symbols might be resolved in this way. */
- force_return = 0;
-
sym = lookup_symbol_aux_minsyms (name, mangled_name,
namespace, is_a_field_of_this,
- symtab, &force_return);
+ symtab);
- if (sym != NULL || force_return == 1)
+ if (sym != NULL)
return sym;
#endif
@@ -981,13 +970,11 @@ lookup_symbol_aux (const char *name, con
*/
- force_return = 0;
-
sym = lookup_symbol_aux_minsyms (name, mangled_name,
namespace, is_a_field_of_this,
- symtab, &force_return);
+ symtab);
- if (sym != NULL || force_return == 1)
+ if (sym != NULL)
return sym;
#endif
@@ -1172,13 +1159,20 @@ lookup_symbol_aux_psymtabs (int block_in
tables. Eventually, all global symbols might be resolved in this
way. */
+/* NOTE: carlton/2002-12-05: At one point, this function was part of
+ lookup_symbol_aux, and what are now 'return' statements within
+ lookup_symbol_aux_minsyms returned from lookup_symbol_aux, even if
+ sym was NULL. As far as I can tell, this was basically accidental;
+ it didn't happen every time that msymbol was non-NULL, but only if
+ some additional conditions held as well, and it caused problems
+ with HP-generated symbol tables. */
+
static struct symbol *
lookup_symbol_aux_minsyms (const char *name,
const char *mangled_name,
const namespace_enum namespace,
int *is_a_field_of_this,
- struct symtab **symtab,
- int *force_return)
+ struct symtab **symtab)
{
struct symbol *sym;
struct blockvector *bv;
@@ -1271,7 +1265,6 @@ lookup_symbol_aux_minsyms (const char *n
if (symtab != NULL && sym != NULL)
*symtab = s;
- *force_return = 1;
return fixup_symbol_section (sym, s->objfile);
}
else if (MSYMBOL_TYPE (msymbol) != mst_text
@@ -1280,7 +1273,6 @@ lookup_symbol_aux_minsyms (const char *n
{
/* This is a mangled variable, look it up by its
mangled name. */
- *force_return = 1;
return lookup_symbol_aux (SYMBOL_NAME (msymbol), mangled_name,
NULL, namespace, is_a_field_of_this,
symtab);
next reply other threads:[~2002-12-05 23:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-12-05 15:44 David Carlton [this message]
2002-12-09 13:35 ` Elena Zannoni
2002-12-10 11:28 ` David Carlton
2002-12-10 11:37 ` Daniel Jacobowitz
2002-12-10 11:56 ` Elena Zannoni
2002-12-19 8:54 ` Elena Zannoni
2002-12-19 11:47 ` David Carlton
2002-12-19 15:39 ` Elena Zannoni
2002-12-19 15:41 ` David Carlton
2002-12-19 16:06 ` Elena Zannoni
2002-12-20 13:02 ` David Carlton
2002-12-21 10:54 Michael Elizabeth Chastain
2002-12-21 11:59 ` Elena Zannoni
2002-12-21 20:20 ` David Carlton
2002-12-23 8:55 ` David Carlton
2002-12-21 22:16 Michael Elizabeth Chastain
2002-12-22 16:01 Michael Elizabeth Chastain
2002-12-23 0:46 Michael Elizabeth Chastain
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=ro13cpc2fsf.fsf@jackfruit.Stanford.EDU \
--to=carlton@math.stanford.edu \
--cc=ezannoni@redhat.com \
--cc=gdb-patches@sources.redhat.com \
--cc=jimb@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