From 442853af244e0352956a5d91ad5e169a85b58710 Mon Sep 17 00:00:00 2001 From: Christian Biesinger Date: Tue, 25 Jun 2019 15:45:41 -0500 Subject: [PATCH] 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 * 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/ChangeLog | 9 +++++++++ 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 ++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2ed8f65..e249888 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2019-07-22 Christian Biesinger + + * 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 * 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 4e70205..3a765a3 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 448e1a6..5b97b9b 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 8cd5b7d..c0c505a 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 5b8bfc1..87a0c8e 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 b91454c..9880ecc 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); -- 2.7.4