summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Biesinger <cbiesinger@google.com>2019-06-25 15:45:41 -0500
committerChristian Biesinger <cbiesinger@google.com>2019-07-24 19:02:50 -0500
commit442853af244e0352956a5d91ad5e169a85b58710 (patch)
tree96e61428ae50146e38826671e4c25becf679c298
parent75b493d0f95c6037753e0d250e1ecc6fe8d46c38 (diff)
downloadbinutils-442853af244e0352956a5d91ad5e169a85b58710.tar.gz
binutils-442853af244e0352956a5d91ad5e169a85b58710.tar.xz
binutils-442853af244e0352956a5d91ad5e169a85b58710.zip
Allow passing a block to lookup_global_symbol_from_objfile
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-24 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.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/compile/compile-object-load.c1
-rw-r--r--gdb/solib-spu.c3
-rw-r--r--gdb/solib-svr4.c3
-rw-r--r--gdb/symtab.c7
-rw-r--r--gdb/symtab.h5
6 files changed, 23 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2ed8f65ba3..e24988858b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
+
2019-07-24 Yoshinori Sato <ysato@users.sourceforge.jp>
* h8300-tdep.c (h8300_register_name_common): New.
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);