From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x134.google.com (mail-il1-x134.google.com [IPv6:2607:f8b0:4864:20::134]) by sourceware.org (Postfix) with ESMTPS id BF8F63858D33 for ; Fri, 7 Apr 2023 16:39:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BF8F63858D33 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-il1-x134.google.com with SMTP id h14so21054512ilj.0 for ; Fri, 07 Apr 2023 09:39:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1680885596; x=1683477596; 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=1TOq/2DEuK1VgZgjB/lLT+gFTjHyFw74Qg3ipNoV2dY=; b=O9DGzBXifWr+4m3kw0acj7rfKpv2ylI+wyQuwELjRyYCqITUIR1DQE3eLZXcYLJoaH OR311FksD6BUF3CSUKhK2lK75U5e4PoyD54aaEQ2IOmH+ea8bO4iNxo5O76unmrpVlKY d2ykl0sQUoBRq4EvTVGXTjScM2hKPfoI2Nwxkzpo7acA5/+oXOVB8vdtgwJ9HO+4Sy7I w63LK9VJt0DwS0alWuB7fZTc5MbnYAF/GYMN33NxQSBizSlL6L76950mPdw6pj2ArYlM Eq00DsGwsV60zjVaoePLYXmzdWZZsw+7+eyPdyOiaaueVEuYTwBAxOU3RYIlcrfNQTKx cypA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680885596; x=1683477596; 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=1TOq/2DEuK1VgZgjB/lLT+gFTjHyFw74Qg3ipNoV2dY=; b=0XU0zUHC1YyKz4MBrUUX3a16icGgsshHvkBt0cfBCXCT07GoXexx/xpSa/6LrALH1h MhA2xwF0HnFKQfMverlVs31EzXAcYU829JXrVrXfbKVPCkxhfZeRhgeBAQt4g1nnV0hY bKRlsmW0wdrdMlgCAIO7PrT12d8QEulvEG2VFcLlHTPBjO2rda70STADWsRYzsAKN4MU FQ+wGSPlaGQs6DYfDfWNnPxypYDiyWywB5NMI9fkp9tOYGLMO0cExXk/Zrr5B4+8Nc78 EYpW4SbsSRnCZBrT1RFE0V1GCP4pbuuvZmzp48M7+AYOSzU43cpmUnWSDJ05E35WoY1D 1Qdg== X-Gm-Message-State: AAQBX9c/0jUGzawH5OYf97OYBgkVhb4SGHTN7I1FRSvCcGqvzx5S08an M11Dn+FWjXwoFhFa2AwzQRyJvXKRfHhRLicL8mdjFw== X-Google-Smtp-Source: AKy350YA8rkbdcAWSEpy6hLKlDk5+ilujt6IXNoCJwqflq7uVq4XhhbjEWYuumUQITyfpA1xI0DVOA== X-Received: by 2002:a92:c9cd:0:b0:316:b0b2:beff with SMTP id k13-20020a92c9cd000000b00316b0b2beffmr1832021ilq.4.1680885596017; Fri, 07 Apr 2023 09:39:56 -0700 (PDT) Received: from localhost.localdomain (75-166-159-36.hlrn.qwest.net. [75.166.159.36]) by smtp.gmail.com with ESMTPSA id c62-20020a029644000000b00406431d0fb5sm1171452jai.72.2023.04.07.09.39.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Apr 2023 09:39:55 -0700 (PDT) From: Tom Tromey Date: Fri, 07 Apr 2023 10:39:54 -0600 Subject: [PATCH v2 1/8] 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-v2-1-dcff927191fb@adacore.com> References: <20230314-submit-pragma-import-export-v2-0-dcff927191fb@adacore.com> In-Reply-To: <20230314-submit-pragma-import-export-v2-0-dcff927191fb@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.2 X-Spam-Status: No, score=-11.9 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 3fa07f47b9f..8185e9cd727 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 59c276f01f3..f3a2474c796 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 9e9798676cb..9b0887c8d65 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -6488,17 +6488,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; } @@ -6511,18 +6504,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