[v2] Allow passing a block to lookup_global_symbol_from_objfile

Message ID 20190723014632.147552-1-cbiesinger@google.com
State New, archived
Headers

Commit Message

Terekhov, Mikhail via Gdb-patches July 23, 2019, 1:46 a.m. UTC
  This has no behavior change in itself, but allows a future patch
to add a function to the Python API to look up symbols in the
static block.

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 (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                      | 5 ++++-
 5 files changed, 14 insertions(+), 5 deletions(-)
  

Comments

Tom Tromey July 24, 2019, 1:59 p.m. UTC | #1
>>>>> "Christian" == Christian Biesinger via gdb-patches <gdb-patches@sourceware.org> writes:

Christian> This has no behavior change in itself, but allows a future patch
Christian> to add a function to the Python API to look up symbols in the
Christian> static block.

Thanks.  This looks good to me, and I think you've addressed all the
earlier comments.  So, this is ok.

Tom
  
Terekhov, Mikhail via Gdb-patches July 25, 2019, 12:04 a.m. UTC | #2
Thanks, pushed.

Christian

On Wed, Jul 24, 2019 at 6:59 AM Tom Tromey <tom@tromey.com> wrote:
>
> >>>>> "Christian" == Christian Biesinger via gdb-patches <gdb-patches@sourceware.org> writes:
>
> Christian> This has no behavior change in itself, but allows a future patch
> Christian> to add a function to the Python API to look up symbols in the
> Christian> static block.
>
> Thanks.  This looks good to me, and I think you've addressed all the
> earlier comments.  So, this is ok.
>
> Tom
  

Patch

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..9880ecc4c5 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -2045,13 +2045,16 @@  extern bool treg_matches_sym_type_name (const compiled_regex &treg,
 extern const char *main_name ();
 extern enum language main_language (void);
 
-/* Lookup symbol NAME from DOMAIN in MAIN_OBJFILE's global blocks.
+/* Lookup symbol NAME from DOMAIN in MAIN_OBJFILE's global or static blocks,
+   as specified by BLOCK_INDEX.
    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.  */
 
 extern struct block_symbol
   lookup_global_symbol_from_objfile (struct objfile *main_objfile,
+				     enum block_enum block_index,
 				     const char *name,
 				     const domain_enum domain);