From patchwork Tue Jul 23 01:46:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Terekhov, Mikhail via Gdb-patches" X-Patchwork-Id: 33775 Received: (qmail 51742 invoked by alias); 23 Jul 2019 01:46:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 51730 invoked by uid 89); 23 Jul 2019 01:46:49 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-yb1-f202.google.com Received: from mail-yb1-f202.google.com (HELO mail-yb1-f202.google.com) (209.85.219.202) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Jul 2019 01:46:48 +0000 Received: by mail-yb1-f202.google.com with SMTP id x203so4393878ybg.9 for ; Mon, 22 Jul 2019 18:46:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=3KHRZto0ANcerpwmx7cX0oYiDYuo4RKVjKHTvYv8uDo=; b=GJSSv5KYDsvUAV5yWrAoBBmr6V4H1MEi6RrljQqJOCzHjsD19m35GNWKVOB93ZpK9+ XEJs4oICQcqT80TfsW779aVG8mK2tKukkd380YjVW6Yjq0IXGiw1Zfrzwo0/ZaNFs2Bl EzHuWUD7aRYNBdxvyXVRVLOBXZEObOEga+4HxxVhgaJ9uY8S0jZaTppnNbHocOV5DWQX S7wwfCjmDSbt8DzVe58a/okk1QqvIqSPrjvAwR+R4YBO2pnZXoP1GGzLEaN0nPsRRZb0 Tldh9suT9JNtbOhfXFHCn2OxLqHToCeKZQUZG3ov5GauPJDrJywwGM2JcpOjiTalp9LZ mmLg== Date: Mon, 22 Jul 2019 20:46:32 -0500 In-Reply-To: Message-Id: <20190723014632.147552-1-cbiesinger@google.com> Mime-Version: 1.0 References: Subject: [PATCH v2] Allow passing a block to lookup_global_symbol_from_objfile X-Patchwork-Original-From: "Christian Biesinger via gdb-patches" From: "Terekhov, Mikhail via Gdb-patches" Reply-To: Christian Biesinger To: gdb-patches@sourceware.org Cc: Christian Biesinger 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 * 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(-) 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);