This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 7/9] Rewrite lookup_static_symbol to use gdbarch routine
- From: Yao Qi <yao at codesourcery dot com>
- To: Doug Evans <xdje42 at gmail dot com>
- Cc: <gdb-patches at sourceware dot org>
- Date: Tue, 28 Oct 2014 11:11:33 +0800
- Subject: Re: [PATCH 7/9] Rewrite lookup_static_symbol to use gdbarch routine
- Authentication-results: sourceware.org; auth=none
- References: <m3tx2qjee1 dot fsf at sspiff dot org>
Doug Evans <xdje42@gmail.com> writes:
> struct symbol *
> lookup_static_symbol_aux (const char *name, const domain_enum domain)
> {
> struct objfile *objfile;
> struct symbol *sym;
>
> sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, domain);
> if (sym != NULL)
> return sym;
>
> ALL_OBJFILES (objfile)
> {
> sym = lookup_symbol_aux_quick (objfile, STATIC_BLOCK, name, domain);
> if (sym != NULL)
> return sym;
> }
>
> return NULL;
> }
>
> Note what we're doing here.
> First we're searching over all expanded symtabs in all objfiles,
> and then we search partial/gdb_index tables in all objfiles. Eh?
>
> Normally when looking up a symbol in a particular objfile
> we first list in expanded symtabs and then look in partial/gdb_index
> tables. And *then* we try the next objfile.
>
> I can't think of any justification for the current behaviour.
>
> This patch changes things to be consistent,
> but it is a behavioural change.
Yes, it changes the behavior. Here is an example in my mind, but not
sure it is correct or not, say, we have a static int foo defined in two
objfiles respectively (1.c and 2.c), foo is in the partial table of two
objfiles, but is only expanded to the full symtab of *one* objfile (2.c).
1.c 2.c
partial foo foo
full foo
before your patch, GDB gets foo from 2.c full table, and after it, GDB
gets foo from 1.c partial table. Is it possible?
Regarding the change, we also need to update the comments to
iterate_over_objfiles_in_search_order in gdbarch.sh,
# Iterate over all objfiles in the order that makes the most sense
# for the architecture to make global symbol searches.
^^^^^^^^^^^^^
> The testsuite passes, and any noticeable difference
> by this change would be dependent on the order in which
> symtabs got expanded. Thus I can't think of a reason to not
> apply this change.
If read this
<https://www.sourceware.org/ml/gdb-patches/2012-05/msg00204.html>
correctly, Joel expressed the same intention there.
Since gdbarch method iterate_over_objfiles_in_search_order was added for
windows target and this patch uses it, we need to test it on windows target.
If you don't have mingw testing env, let me know, I'll see if I can do
the test.
--
Yao (éå)