From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id /dVeGR6ksmo0UzMAWB0awg (envelope-from ) for ; Tue, 22 Sep 2026 11:51:58 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=iJADRw0l; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 53D251E06B; Tue, 22 Sep 2026 11:51:58 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id A8A791E01F for ; Tue, 22 Sep 2026 11:51:56 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B4FC74B99F59 for ; Tue, 22 Sep 2026 15:51:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B4FC74B99F59 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=iJADRw0l Received: from mail-pj2-x0e.google.com (mail-pj2-x0e.google.com [IPv6:2607:f8b0:4864:39::e]) by sourceware.org (Postfix) with ESMTPS id 7B2854BAE7C4 for ; Tue, 22 Sep 2026 15:51:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7B2854BAE7C4 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7B2854BAE7C4 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:39::e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1790092291; cv=none; b=mRCDorZyTUfQDJB+S9xn2gbyWEjdS+HC6GfgoPA8Leotzai5/+qUattkKix7ux+zttgOKIeJIwAOQSi7ETFoLfXtGS0gajpAOUa7KOSonUys0mEOcCKMsvgAZMPUhpSKaBi8+qah+e3gtk3RnyMIcv+ArbW77UrXOFS8rUNhvu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1790092291; c=relaxed/simple; bh=JcfjCiGUsr4XHR229f8rP/pWfAqhiDWxytDwpjoLXDM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=X1RSJcTcNgRrbRRF+1mUksXn5ic7exKJbK+7XXuwWBHTBGVZgvpFzTtmBLfsiom7H/o73qgXD1YQvEM91hjR0GllxRIZzwFfj70DJDfiYVWD4WOWa1gbQtECrfTlR+5JIK1F+YQM5HbJHDDLRhstMh/r53JAYtB0B3RyfmjyIus= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=iJADRw0l DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7B2854BAE7C4 Received: by mail-pj2-x0e.google.com with SMTP id d9443c01a7336-2df4aa80a73so22585855ad.3 for ; Tue, 22 Sep 2026 08:51:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1790092290; x=1790697090; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=QtBAviZJyM6VKxafOg3ujGM81EmyPJPrQNlTQX0lnNI=; b=iJADRw0lPhB5ltT3+UTA0YK6xz3t+XPew4eovmsdxUQBcFSbqHp80HlLLzDqcE08WV 3qzflkizdNicqAcId0TI/mfVZSNC53vBwqxoOBkmdwNYdfNMtvMCmwOAb4WvjIo9lEfj KGwPCkGLYgH/738f7+0+Ae/s+4Ep+rgYNLdIxAaX4keqvEV2FXPOTSruVPRy7XH9e3w3 Vw21YTIzg15Iqas/BfVIQD1HtEoy59v/5Isj0AeLOForGva7ROxAHxuz6OEV7nszN9ji bLd9jWrmJvQNxeeVf3f6w4dxsa89wSPdQeS85ypvQk3LWILeXea9q7T6mJ2DPHgk2LRf M2sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790092290; x=1790697090; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QtBAviZJyM6VKxafOg3ujGM81EmyPJPrQNlTQX0lnNI=; b=F/wyM9pbY2dUo+nNDXFqOKH9YO28KyHPRjn4gkww+caDtOxwcs3kpoPCGsf00Fp2fL sjxhxg7d8JvqivYC4Ye941f1az6E4xeUiX9COn30wK2EhuEBO+CUmGZ3CIT+eZACw0yd Ov68GTQ0JpL9ZjSzVBP3VlID1An5f732hSWnLcBESuHgfjiKd84yqRH+Eduhl5AX03vY GGgm0uLEy5gqp0xFbUO0f9DSZwpE/wC1ow4AHj/Pm13LNjoNKm7eHsCgWRnGBQNaBawt ciqcfArptjYcXb6omtmsb8NgkcjBLqLWhIhYcxINGzgZOcjRBspoiUdAoIHOZaDG6fCV +5TQ== X-Gm-Message-State: AFuF++nMPn945Qi8lgFr9jjBVrHZZVcEekr3PLh6Vh9w1MXsRQrxoKBq 7Yuj/5a3dwXTjOB5vsC4a3gQ4hl4cA2RyAbomAcBxEmt7EjDoFvN+9t3Hfrq5ITmlU24+Z95vn/ vJ7nn X-Gm-Gg: AYBFou09xiupWYOlad/9fS2cOSMjI4w1QiOKsxA9ZV6Y2c0PGm9KIs0ecXPbdjlrtzI /qPjaF1+XOUqlD6uUcFV7J9U/j7nB4b6I2AhZowE5zqz8K/lJGOQD5Rn+e9YmPrqO6XTduHJBdl eEgWCY3d7Mo4AP1uSZqLm3rZ5WBCFA3fc26eCDarNZCDrgK7umQqqRreTKJgINjtnvzSrACX+aU CzBqAb6cUZte28Ad0dRLiVZr3owXc0a79r8wlO+WRhnJc+eVOxRd+96mR4dD8xOsIt0oS+XezXW lGOQHlSM8OjmX7ky2U6OQUGJxA1+fkFHf2wmyJCPlIWu1U59CtlVqf/6Xw23LhmLnWVOqggKELg EcUxLAZ0cZXLdiqakoRzf0iBua+uZf+y2TVCkxmPs0J65VCDS4z8vuCpoVcfL88wwP0S420gguL T3XWPGz/+9epbYz1CkL+mJpEil+YxGeCKJUs9WDZdy1Qwgt6YsB8FbGjcXeeA3q2bFUCfzzEilO n+KhTEiOllpsWApwH57lS+XgVq2Tr3+Iy5omLhj X-Received: by 2002:a17:903:2c0c:b0:2dd:c0ff:e72e with SMTP id d9443c01a7336-2df60b8ed29mr17439035ad.64.1790092290070; Tue, 22 Sep 2026 08:51:30 -0700 (PDT) Received: from mandiga ([2804:1b3:a7c0:321:19b5:1ce7:ad44:9587]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33e612c9ca7sm7146790eec.17.2026.09.22.08.51.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Sep 2026 08:51:29 -0700 (PDT) From: Adhemerval Zanella To: gdb-patches@sourceware.org Cc: Thiago Jung Bauermann Subject: [PATCH] gdb: Skip useless minsym scan in variable-only symbol searches Date: Tue, 22 Sep 2026 12:51:17 -0300 Message-ID: <20260922155125.3710118-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org The symbol-listing command -symbol-info-* family goes through global_symbol_searcher::search, which has 3 steps: 1. expand_symtabs (objfile, preg): make sure every compunit that could contain a match is expanded. Returns found_msymbol = true if it saw a matching msymbol that has no debug info. 2. add_matching_symbols (...): walk the compunits and collect the real matches. 3. After the loop, a minsym fallback: if found_msymbol was set, or unconditionally for any variable search with no file filter, re-scan msymbols and append the ones without debug info (unless the searcher set exclude_minsyms). Step 1 had two phases, first objfile::search, which uses the quick-symbol index to expand candidate compunits; then the pre-pass for every msymbol in the objfile whose name matches the regexp: 1.1. function search: call find_compunit_symtab_for_pc (address). This consults the quick functions and can expand the compunit containing that address. 1.2. variable search: call lookup_symbol_in_objfile_from_linkage_name, which does a linear scan of objfile->compunits () per lookup. It can not expand anything; its only output is setting found_msymbol when the lookup fails. So for variables the pre-pass costs 'msymbols * expanded-compunits' block lookups and produces exactly one bit of information (found_msymbol) and this dominates the command execution time. And in step 3. these MI3 commands (search_module_symbols) calls spec2.set_exclude_minsyms (true), which sets !m_exclude_minsyms to false. The fallback never runs (found_msymbol is ignored), making the pre-pass calculation not required. The fix is make SEARCH_VAR_DOMAIN skip the pre-pass. For variable searches with no filenames the fallback condition already contains '(m_kind & SEARCH_VAR_DOMAIN) != 0' as an unconditional alternative. Since the pre-pass now only runs for searches that include SEARCH_FUNCTION_DOMAIN, the lookup_symbol_in_objfile_from_linkage_name branch of the conditional inside the loop is unreachable. Also update the comments, which still described the variable lookup and claimed it forces symtabs to be read. That was true when lookup_symbol_in_objfile_from_linkage_name was added in commit 422d65e705c7, but it no longer expands any symtab. -symbol-info-module-variables --module on the 2000-module benchmark drops from 90 s to 0.56 s cold. Change-Id: I6019bcf80629f21cf6dee74d0e96fa788a70e220 --- gdb/symtab.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index 93684c14777..13824587e75 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -4750,22 +4750,20 @@ global_symbol_searcher::expand_symtabs SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK, kind); - /* Here, we search through the minimal symbol tables for functions and - variables that match, and force their symbols to be read. This is in - particular necessary for demangled variable names, which are no longer - put into the partial symbol tables. The symbol will then be found + /* Here, we search through the minimal symbol tables for functions that + match, and force their symbols to be read. The symbol will then be found during the scan of symtabs later. - For functions, find_pc_symtab should succeed if we have debug info for - the function, for variables we have to call - lookup_symbol_in_objfile_from_linkage_name to determine if the - variable has debug info. If the lookup fails, set found_msymbol so - that we will rescan to print any matching symbols without debug info. - We only search the objfile the msymbol came from, we no longer search - all objfiles. In large programs (1000s of shared libs) searching all - objfiles is not worth the pain. */ + The find_compunit_symtab_for_pc should succeed if we have debug info for + the function. If it fails, set found_msymbol so that we will rescan to + print any matching symbols without debug info. We only search the + objfile the msymbol came from, we no longer search all objfiles. + + Variables are not handled here, and looking them up does not expand any + symtab. When no file names were given the caller unconditionally rescans + the minimal symbols for SEARCH_VAR_DOMAIN. */ if (m_filenames.empty () - && (kind & (SEARCH_VAR_DOMAIN | SEARCH_FUNCTION_DOMAIN)) != 0) + && (kind & SEARCH_FUNCTION_DOMAIN) != 0) { for (minimal_symbol *msymbol : objfile->msymbols ()) { @@ -4780,18 +4778,13 @@ global_symbol_searcher::expand_symtabs || preg->exec (msymbol->natural_name (), 0, NULL, 0) == 0) { - /* An important side-effect of these lookup functions is + /* An important side-effect of this lookup function is to expand the symbol table if msymbol is found, later in the process we will add matching symbols or msymbols to the results list, and that requires that the symbols tables are expanded. */ - if ((kind & SEARCH_FUNCTION_DOMAIN) != 0 - ? (find_compunit_symtab_for_pc - (msymbol->value_address (objfile)) == NULL) - : (lookup_symbol_in_objfile_from_linkage_name - (objfile, msymbol->linkage_name (), - SEARCH_VFT) - .symbol == NULL)) + if (find_compunit_symtab_for_pc + (msymbol->value_address (objfile)) == nullptr) found_msymbol = true; } } -- 2.53.0