From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd35.google.com (mail-io1-xd35.google.com [IPv6:2607:f8b0:4864:20::d35]) by sourceware.org (Postfix) with ESMTPS id 67E323858D39 for ; Tue, 14 Mar 2023 20:04:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 67E323858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-io1-xd35.google.com with SMTP id v10so6916703iox.8 for ; Tue, 14 Mar 2023 13:04:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1678824287; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=s521qLDBAWU5AXb3A9jj0wTMwOWk3irppgcSF2KlU/A=; b=TYWOAMYnD1pe4p+3/zY/XaIl1R/tYdMiNZRNCaEc4wQx239nhYA6YF9scU1aynBKVV qQiHgEsYKN8xUEndWmp16kPuO4mJSD9YL2AxVMmuCWqwTtqxhezj69di7XIjfXmcOfvO v1K3A9eJ/2KBF9wmFwxGjqwDp5LdwF8R8JPU06b1Gjju5Lp8SO4wXNDcvGIC1Bb/TMsl KY9Vut2EQgNNuFKxOrpGKgwsRojck13RKElQHC0wo4DZw+Woy1swAHD+yf7JJSVygHc6 rvZwqj07gqNw5qAi2lTTgzeWRExKEcnI44bGOaAe+Rv3M2yLY+Exz33uEvgenQaJqzbd rHLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678824287; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s521qLDBAWU5AXb3A9jj0wTMwOWk3irppgcSF2KlU/A=; b=LJCwP9ZsdEtIh4p1Em2ucTNDZDAQi/ZYssfrNEe6GCNRkEOtyLR0EZPvYXTDUxX1jW qjeqO4UigTi/wFwG5/J0qsMMoD+IVygUXxQeeOio0VuHam4pUJ5vqP/ixYSve7XgO/v8 I/p5IQIJJSkop10++vpIpTiJCHPpTj2t3iKjXk3sFYaZ5vb5AURUkrEFcbGXuTC1KiKU 6rIvxqF4lRRDKDXCc6nPRn8u7hzvK/v4VEJdLKjNq/rJ9NahQzMHU/ifTWqNF9ByTj1D ouMnkzY+WmVaUUgeiAZxbZnkXNWufjNMlBNUzRjxBWuh5Rt3Zc2HH6GcxjfaRjLHoi56 Q8lg== X-Gm-Message-State: AO0yUKUgEbly+GP7hkXwJWdDAOFddIuzkC+iRinsIUcJzCCy2YrgDy1c 3814PQdFGqkDDbGDBCZXEpayaChKxok5UyqY3ew= X-Google-Smtp-Source: AK7set9UVl2QqLgmjGyAdntO6uhIZ0KoKl2S2aG1YbC9OTAuWs1lzLgM6qdLnnto86t8zlK1CTs8vg== X-Received: by 2002:a6b:e80d:0:b0:752:de20:b984 with SMTP id f13-20020a6be80d000000b00752de20b984mr918356ioh.8.1678824287598; Tue, 14 Mar 2023 13:04:47 -0700 (PDT) Received: from localhost.localdomain (71-211-185-113.hlrn.qwest.net. [71.211.185.113]) by smtp.gmail.com with ESMTPSA id m13-20020a056638224d00b003ee9720740esm1030257jas.153.2023.03.14.13.04.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Mar 2023 13:04:47 -0700 (PDT) From: Tom Tromey Date: Tue, 14 Mar 2023 14:04:45 -0600 Subject: [PATCH 1/5] Introduce lookup_minimal_symbol_linkage MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20230314-submit-pragma-import-export-v1-1-a235709f7e96@adacore.com> References: <20230314-submit-pragma-import-export-v1-0-a235709f7e96@adacore.com> In-Reply-To: <20230314-submit-pragma-import-export-v1-0-a235709f7e96@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.1 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This introduces a new function, lookup_minimal_symbol_linkage, and refactors a couple other existing functions to call it. This function will be used in a subsequent patch. --- gdb/minsyms.c | 22 ++++++++++++++++++++++ gdb/minsyms.h | 8 ++++++++ gdb/symtab.c | 31 ++++++++----------------------- 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 02e36cc6dd2..aed37978bb9 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -592,6 +592,28 @@ lookup_minimal_symbol_linkage (const char *name, struct objfile *objf) /* See minsyms.h. */ +struct bound_minimal_symbol +lookup_minimal_symbol_linkage (const char *name, bool only_main) +{ + for (objfile *objfile : current_program_space->objfiles ()) + { + if (objfile->separate_debug_objfile_backlink != nullptr) + continue; + + if (only_main && (objfile->flags & OBJF_MAINLINE) == 0) + continue; + + bound_minimal_symbol minsym = lookup_minimal_symbol_linkage (name, + objfile); + if (minsym.minsym != nullptr) + return minsym; + } + + return {}; +} + +/* See minsyms.h. */ + struct bound_minimal_symbol lookup_minimal_symbol_text (const char *name, struct objfile *objf) { diff --git a/gdb/minsyms.h b/gdb/minsyms.h index e9081495eb1..40513b148ff 100644 --- a/gdb/minsyms.h +++ b/gdb/minsyms.h @@ -236,6 +236,14 @@ extern struct bound_minimal_symbol lookup_minimal_symbol_linkage (const char *name, struct objfile *objf) ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2); +/* A variant of lookup_minimal_symbol_linkage that iterates over all + objfiles. If ONLY_MAIN is true, then only an objfile with + OBJF_MAINLINE will be considered. */ + +extern struct bound_minimal_symbol lookup_minimal_symbol_linkage + (const char *name, bool only_main) + ATTRIBUTE_NONNULL (1); + /* Look through all the current minimal symbol tables and find the first minimal symbol that matches NAME and PC. If OBJF is non-NULL, limit the search to that objfile. Returns a pointer to the minimal diff --git a/gdb/symtab.c b/gdb/symtab.c index e11f9262a22..80395f99f24 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -6475,17 +6475,10 @@ get_symbol_address (const struct symbol *sym) gdb_assert (sym->aclass () == LOC_STATIC); const char *linkage_name = sym->linkage_name (); - - for (objfile *objfile : current_program_space->objfiles ()) - { - if (objfile->separate_debug_objfile_backlink != nullptr) - continue; - - bound_minimal_symbol minsym - = lookup_minimal_symbol_linkage (linkage_name, objfile); - if (minsym.minsym != nullptr) - return minsym.value_address (); - } + bound_minimal_symbol minsym = lookup_minimal_symbol_linkage (linkage_name, + false); + if (minsym.minsym != nullptr) + return minsym.value_address (); return sym->m_value.address; } @@ -6498,18 +6491,10 @@ get_msymbol_address (struct objfile *objf, const struct minimal_symbol *minsym) gdb_assert ((objf->flags & OBJF_MAINLINE) == 0); const char *linkage_name = minsym->linkage_name (); - - for (objfile *objfile : current_program_space->objfiles ()) - { - if (objfile->separate_debug_objfile_backlink == nullptr - && (objfile->flags & OBJF_MAINLINE) != 0) - { - bound_minimal_symbol found - = lookup_minimal_symbol_linkage (linkage_name, objfile); - if (found.minsym != nullptr) - return found.value_address (); - } - } + bound_minimal_symbol found = lookup_minimal_symbol_linkage (linkage_name, + true); + if (found.minsym != nullptr) + return found.value_address (); return (minsym->m_value.address + objf->section_offsets[minsym->section_index ()]); } -- 2.39.1