From: Simon Marchi <simark@simark.ca>
To: Christian Biesinger <cbiesinger@google.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] Allow passing a block to lookup_global_symbol_from_objfile
Date: Tue, 23 Jul 2019 00:54:00 -0000 [thread overview]
Message-ID: <ec9f6fdb-c7da-da84-8734-52be0ebe8606@simark.ca> (raw)
In-Reply-To: <20190722210025.92079-1-cbiesinger@google.com>
Hi Christian,
Code-wise, this LGTM, but I think it would need a bit of justification. On its own
it doesn't change the behavior of GDB and does not appear to be a cleanup, so why is
this change useful? I suppose it will be necessary for a further patch. If so,
it's common to post it as a preparatory patch, in the same series as that other patch.
Then in the commit message you can say that "a further patch will need to call
lookup_global_symbol_from_objfile with STATIC_BLOCK", for example, that this
preparatory patch is just to isolate that change, and that on its own does not bring
any intended functional changes.
On 2019-07-22 5:00 p.m., Christian Biesinger via gdb-patches wrote:
> gdb/ChangeLog:
>
> 2019-07-22 Christian Biesinger <cbiesinger@google.com>
>
> * compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE.
> * solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE.
> * solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE.
> * symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter.
> * symtab.h: Add a scope parameter to lookup_global_symbol_from_objfile.
The last line should also be
* symtab.h (lookup_global_symbol_from_objfile): Add a scope parameter.
or
* symtab.c (lookup_global_symbol_from_objfile): Likewise.
> ---
> gdb/compile/compile-object-load.c | 1 +
> gdb/solib-spu.c | 3 ++-
> gdb/solib-svr4.c | 3 ++-
> gdb/symtab.c | 7 +++++--
> gdb/symtab.h | 2 ++
> 5 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c
> index 4e70205195..3a765a345b 100644
> --- a/gdb/compile/compile-object-load.c
> +++ b/gdb/compile/compile-object-load.c
> @@ -639,6 +639,7 @@ compile_object_load (const compile_file_names &file_names,
> objfile = objfile_holder.get ();
>
> func_sym = lookup_global_symbol_from_objfile (objfile,
> + GLOBAL_BLOCK,
> GCC_FE_WRAPPER_FUNCTION,
> VAR_DOMAIN).symbol;
> if (func_sym == NULL)
> diff --git a/gdb/solib-spu.c b/gdb/solib-spu.c
> index 448e1a64f4..5b97b9bcf6 100644
> --- a/gdb/solib-spu.c
> +++ b/gdb/solib-spu.c
> @@ -392,7 +392,8 @@ spu_lookup_lib_symbol (struct objfile *objfile,
> const domain_enum domain)
> {
> if (bfd_get_arch (objfile->obfd) == bfd_arch_spu)
> - return lookup_global_symbol_from_objfile (objfile, name, domain);
> + return lookup_global_symbol_from_objfile (objfile, GLOBAL_BLOCK, name,
> + domain);
>
> if (svr4_so_ops.lookup_lib_global_symbol != NULL)
> return svr4_so_ops.lookup_lib_global_symbol (objfile, name, domain);
> diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
> index 8cd5b7d8e7..c0c505acaa 100644
> --- a/gdb/solib-svr4.c
> +++ b/gdb/solib-svr4.c
> @@ -3226,7 +3226,8 @@ elf_lookup_lib_symbol (struct objfile *objfile,
> if (abfd == NULL || scan_dyntag (DT_SYMBOLIC, abfd, NULL, NULL) != 1)
> return {};
>
> - return lookup_global_symbol_from_objfile (objfile, name, domain);
> + return lookup_global_symbol_from_objfile (objfile, GLOBAL_BLOCK, name,
> + domain);
> }
>
> void
> diff --git a/gdb/symtab.c b/gdb/symtab.c
> index 5b8bfc1df7..87a0c8e4da 100644
> --- a/gdb/symtab.c
> +++ b/gdb/symtab.c
> @@ -2224,15 +2224,18 @@ lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
>
> struct block_symbol
> lookup_global_symbol_from_objfile (struct objfile *main_objfile,
> + enum block_enum block_index,
> const char *name,
> const domain_enum domain)
> {
> + gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
> +
> for (objfile *objfile : main_objfile->separate_debug_objfiles ())
> {
> struct block_symbol result
> - = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK, name, domain);
> + = lookup_symbol_in_objfile (objfile, block_index, name, domain);
>
> - if (result.symbol != NULL)
> + if (result.symbol != nullptr)
> return result;
> }
>
> diff --git a/gdb/symtab.h b/gdb/symtab.h
> index b91454c85c..35f3c6be71 100644
> --- a/gdb/symtab.h
> +++ b/gdb/symtab.h
> @@ -2048,10 +2048,12 @@ extern enum language main_language (void);
> /* Lookup symbol NAME from DOMAIN in MAIN_OBJFILE's global blocks.
> This searches MAIN_OBJFILE as well as any associated separate debug info
> objfiles of MAIN_OBJFILE.
> + BLOCK_INDEX can be GLOBAL_BLOCK or STATIC_BLOCK.
> Upon success fixes up the symbol's section if necessary. */
On top of saying which values it can take, it would be useful to say
(very brefly) how it affects the behavior of the function.
Simon
next prev parent reply other threads:[~2019-07-23 0:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-22 19:07 Christian Biesinger via gdb-patches
2019-07-22 20:59 ` Andrew Burgess
2019-07-22 21:00 ` Christian Biesinger via gdb-patches
2019-07-23 0:54 ` Simon Marchi [this message]
2019-07-23 1:46 ` [PATCH v2] " Christian Biesinger via gdb-patches
2019-07-24 13:59 ` Tom Tromey
2019-07-25 0:05 ` Christian Biesinger via gdb-patches
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=ec9f6fdb-c7da-da84-8734-52be0ebe8606@simark.ca \
--to=simark@simark.ca \
--cc=cbiesinger@google.com \
--cc=gdb-patches@sourceware.org \
/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