From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OSs9Dxck4mkKbx4AWB0awg (envelope-from ) for ; Fri, 17 Apr 2026 08:14:15 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ZoqkxvhJ; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 3A6C51E0B1; Fri, 17 Apr 2026 08:14:15 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=unavailable autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 9685B1E0B1 for ; Fri, 17 Apr 2026 08:14:14 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 5A3094BA23C2 for ; Fri, 17 Apr 2026 12:14:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5A3094BA23C2 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ZoqkxvhJ Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTP id CF39F4BAD142 for ; Fri, 17 Apr 2026 12:13:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CF39F4BAD142 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CF39F4BAD142 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776428021; cv=none; b=dyX2F0NLFPtkJfBUgzyVUkPAx8tcfzEDrWRFNKKU8CPRcTwD2PxaLVE3xsJuQreelOSEUtWLpU3Ee3iW7z+Fya0Lfw+J0QtJngo7cMcoXqZ3cS7V5otfedkKRKX+DSXilRfE6zb7Q3zI+OcNMv2pxnBgKvOkyp2I2VX9BFpKiWA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776428021; c=relaxed/simple; bh=eGM6In3ZK+Qe12YZjogzWor1lZziOTSED+14P92EAsU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=eEBmSQEmCXQwMrd3aE7LLOPPuTmbfv+oIDp6nO98pbp6S4dR++TsDVVbbydqQpOvd65zSw9PcsPZu/b0fKrR3Mt1d0XIDRUZAAQL7OWZDYmI9Az42I/871XQKZeTB1x4PYvFudDIySO+P+4wH4n4v0i6N2rrFubrs11Em71bjyc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CF39F4BAD142 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776428021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=c/zQjh38hMuW4hYfXUv1oCU3a8YsDJ19GRB//xbNffM=; b=ZoqkxvhJY60A/rSsUVCUGr5M5SWHOQPUjF7wN8SeGJeTlAVsPV5lFwscNaLvVfHPdBiRKY G4L799j7Us9UvTh7DhEcK8Z9iX3cMGe0XuN4wmT73zrMFw5P2OrMGrDL560Jkuaf8WRrEs 4zKnhWp7Hsro1jL0AvaUnBduwiHY2tA= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-35-vkXQgPmePYa4VwTAGqmCZA-1; Fri, 17 Apr 2026 08:13:40 -0400 X-MC-Unique: vkXQgPmePYa4VwTAGqmCZA-1 X-Mimecast-MFC-AGG-ID: vkXQgPmePYa4VwTAGqmCZA_1776428019 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43d7e5b98ebso540869f8f.0 for ; Fri, 17 Apr 2026 05:13:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776428019; x=1777032819; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=c/zQjh38hMuW4hYfXUv1oCU3a8YsDJ19GRB//xbNffM=; b=mwHgLbUeB4mcBOIurKXHyzDpV62R5tXx9MtQKIencbKs7fu7482K6+DDRF58oO09T3 V+0bM6ZTwxfJuL2ajfxfNuxP5PkvfNREKFuX8Tkbjcvy7GBfvyvDiLK5C0JCPSjQSR4Q 85o6aMGPBoJ2fyf8Hu7Cj3A3Kg+qmyL2ujIoP6wboAQbpcdyDuclAN9le4VyctKS7qVs KEnzGU3gUeMqP2r/B6Wn3wIiMprl0pZ8dQD102OSkiNmhmKq3fP4M8zXPANQmBIuJl+H 0iOdAMH4X7cxRLf0MivgLRiVRI0UZF9W3Zx9/dN3MdtR7DM2UEXWo2oqDJFqGNQYdChz cnOA== X-Forwarded-Encrypted: i=1; AFNElJ/vqGnQOoLsFNVoGX8yAIwyshN4N+2oo96BLQgmnXUopbSxa5RmjcRUh8/iqCHJIIT2ebKZjiZiLN10zA==@sourceware.org X-Gm-Message-State: AOJu0YwshBK+Vmki50ocjgw1pMMlO23gRQ7pIjif6lfTIiY/G2eGrIb9 7TjvzQYVdDoqCKGoRq/WiSw4/JRo0D9IW3PiYbv1LEOlF2/B5G5iA3V1L7VtAQujWmuyyRpk8yK HmtIoF7S11KfJgCfmy0lpxyNHTNgK1t2cz7WM+d1KRNg/gFXd9Spk3DMFbEurmtc= X-Gm-Gg: AeBDiese3+9CwKr4TdblR8YYux2hs/zSTNDiQKgDPJTeXvndASWnMYuv2r5s88v8ZKK xjL1wFPQo77TdNuN1y6zNcReDkhdHpgdc0vaWLc6YRh1sUPKvhGpb6kBIYRRFC7PNb7SzOcTx4Z 6cMbkWPDCW+GAlCIiQQhVe3HoK8jT7DM50aGAcou+zZC/8bCgNB3XwibHzmliyLVTHLRfZma1Pi r9AGsBS7CQjTpwFqQ2B1NU86QvKW/9PHukdegvSU9XpzB9uQV89q2j0ndATP36sqLJ1iHfOlmhq sC0TgAvHX/PNTGgAykP3/7/65sXO7xqevPKlKr3xe/M4nV3fu4A0+35zh8Ol2tza+Y1wABR0WFk ft9lQYqpu6zVVLtNU+KHDWShsF2w= X-Received: by 2002:a05:6000:220f:b0:43b:7ff5:fdf7 with SMTP id ffacd0b85a97d-43fe3e0c6c5mr3712864f8f.29.1776428018925; Fri, 17 Apr 2026 05:13:38 -0700 (PDT) X-Received: by 2002:a05:6000:220f:b0:43b:7ff5:fdf7 with SMTP id ffacd0b85a97d-43fe3e0c6c5mr3712798f8f.29.1776428018329; Fri, 17 Apr 2026 05:13:38 -0700 (PDT) Received: from localhost ([31.111.84.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e3a381sm4579124f8f.21.2026.04.17.05.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Apr 2026 05:13:37 -0700 (PDT) From: Andrew Burgess To: Simon Marchi , gdb-patches@sourceware.org Cc: Simon Marchi Subject: Re: [PATCH 07/11] gdb: split iterate_over_minimal_symbols in for_each_minimal_symbol and find_minimal_symbol In-Reply-To: <20260416202408.422441-8-simon.marchi@efficios.com> References: <20260416202408.422441-1-simon.marchi@efficios.com> <20260416202408.422441-8-simon.marchi@efficios.com> Date: Fri, 17 Apr 2026 13:13:36 +0100 Message-ID: <87h5p9eqdr.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Ek9LfaFAoByOCHCeusbeycuXyzdyl9StRvTfkBeRuzA_1776428019 X-Mimecast-Originator: redhat.com Content-Type: text/plain 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 Simon Marchi writes: > From: Simon Marchi Just 'in' -> 'into' in the subject line again. Otherwise: Approved-By: Andrew Burgess Thanks, Andrew > > Based on the same rationale as the previous patches, split > iterate_over_minimal_symbols in two. > > Implement for_each_minimal_symbol using find_minimal_symbol, since that > one is really not trivial. > > Change-Id: Ie02e67278359454f7aa583200ec68d2f429f7ebe > --- > gdb/linespec.c | 35 ++++++++++++++++------------------- > gdb/minsyms.c | 25 ++++++++++++++++++++----- > gdb/minsyms.h | 37 +++++++++++++++++++++++++++++-------- > gdb/symtab.c | 18 +++++++++--------- > 4 files changed, 74 insertions(+), 41 deletions(-) > > diff --git a/gdb/linespec.c b/gdb/linespec.c > index 4ea6d597a093..4170d4ecf2c4 100644 > --- a/gdb/linespec.c > +++ b/gdb/linespec.c > @@ -4150,33 +4150,30 @@ search_minsyms_for_name (struct collect_info *info, > set_current_program_space (pspace); > > for (objfile &objfile : pspace->objfiles ()) > - { > - iterate_over_minimal_symbols (&objfile, name, > - [&] (struct minimal_symbol *msym) > - { > - add_minsym (msym, &objfile, nullptr, > - info->state->list_mode, > - &minsyms); > - return false; > - }); > - } > + for_each_minimal_symbol (&objfile, name, > + [&] (minimal_symbol *msym) > + { > + add_minsym (msym, &objfile, nullptr, > + info->state->list_mode, > + &minsyms); > + }); > } > } > else > { > - program_space *pspace = symtab->compunit ()->objfile ()->pspace (); > + objfile &objfile = *symtab->compunit ()->objfile (); > + program_space *pspace = objfile.pspace (); > > if (search_pspace == NULL || pspace == search_pspace) > { > set_current_program_space (pspace); > - iterate_over_minimal_symbols > - (symtab->compunit ()->objfile (), name, > - [&] (struct minimal_symbol *msym) > - { > - add_minsym (msym, symtab->compunit ()->objfile (), symtab, > - info->state->list_mode, &minsyms); > - return false; > - }); > + for_each_minimal_symbol (&objfile, name, > + [&] (minimal_symbol *msym) > + { > + add_minsym (msym, &objfile, symtab, > + info->state->list_mode, > + &minsyms); > + }); > } > } > > diff --git a/gdb/minsyms.c b/gdb/minsyms.c > index 0d6ea53aecf6..4eafc7890478 100644 > --- a/gdb/minsyms.c > +++ b/gdb/minsyms.c > @@ -496,9 +496,22 @@ linkage_name_str (const lookup_name_info &lookup_name) > /* See minsyms.h. */ > > void > -iterate_over_minimal_symbols > - (struct objfile *objf, const lookup_name_info &lookup_name, > - gdb::function_view callback) > +for_each_minimal_symbol (struct objfile *objf, const lookup_name_info &name, > + for_each_minimal_symbol_callback_ftype callback) > +{ > + find_minimal_symbol (objf, name, > + [&] (struct minimal_symbol *msym) > + { > + callback (msym); > + return false; > + }); > +} > + > +/* See minsyms.h. */ > + > +minimal_symbol * > +find_minimal_symbol (struct objfile *objf, const lookup_name_info &lookup_name, > + find_minimal_symbol_callback_ftype callback) > { > /* The first pass is over the ordinary hash table. */ > { > @@ -515,7 +528,7 @@ iterate_over_minimal_symbols > { > if (mangled_cmp (iter->linkage_name (), name) == 0) > if (callback (iter)) > - return; > + return iter; > } > } > > @@ -539,8 +552,10 @@ iterate_over_minimal_symbols > iter = iter->demangled_hash_next) > if (name_match (iter->search_name (), lookup_name, NULL)) > if (callback (iter)) > - return; > + return iter; > } > + > + return nullptr; > } > > /* See minsyms.h. */ > diff --git a/gdb/minsyms.h b/gdb/minsyms.h > index 8f38cc7137fc..c44d5b20aec8 100644 > --- a/gdb/minsyms.h > +++ b/gdb/minsyms.h > @@ -20,6 +20,7 @@ > #ifndef GDB_MINSYMS_H > #define GDB_MINSYMS_H > > +#include "gdbsupport/function-view.h" > #include > > struct program_space; > @@ -279,16 +280,36 @@ bound_minimal_symbol lookup_minimal_symbol_by_pc_section > > bound_minimal_symbol lookup_minimal_symbol_by_pc (CORE_ADDR); > > -/* Iterate over all the minimal symbols in the objfile OBJF which > - match NAME. Both the ordinary and demangled names of each symbol > - are considered. The caller is responsible for canonicalizing NAME, > - should that need to be done. > +/* Callback type for function for_each_minimal_symbol. */ > > - For each matching symbol, CALLBACK is called with the symbol. */ > +using for_each_minimal_symbol_callback_ftype > + = gdb::function_view; > > -void iterate_over_minimal_symbols > - (struct objfile *objf, const lookup_name_info &name, > - gdb::function_view callback); > +/* Call CALLBACK for all minimal symbols in objfile OBJF which match NAME. > + > + Both the ordinary and demangled names of each symbol are considered. The > + caller is responsible for canonicalizing NAME, should that need to be > + done. */ > + > +void for_each_minimal_symbol (struct objfile *objf, > + const lookup_name_info &name, > + for_each_minimal_symbol_callback_ftype callback); > + > +/* Callback type for function find_minimal_symbol. */ > + > +using find_minimal_symbol_callback_ftype > + = gdb::function_view; > + > +/* Find the first minimal symbol for objfile OBJF which matches NAME and for > + which CALLBACK returns true. > + > + Both the ordinary and demangled names of each symbol are considered. The > + caller is responsible for canonicalizing NAME, should that need to be > + done. */ > + > +minimal_symbol *find_minimal_symbol > + (struct objfile *objf, const lookup_name_info &name, > + find_minimal_symbol_callback_ftype callback); > > /* Compute the upper bound of MINSYM. The upper bound is the last > address thought to be part of the symbol. If the symbol has a > diff --git a/gdb/symtab.c b/gdb/symtab.c > index d22dd81a246a..5a39081dfc54 100644 > --- a/gdb/symtab.c > +++ b/gdb/symtab.c > @@ -5782,32 +5782,32 @@ find_gnu_ifunc (const symbol *sym) > struct objfile *objfile = sym->objfile (); > > CORE_ADDR address = sym->value_block ()->entry_pc (); > - minimal_symbol *ifunc = NULL; > - > - iterate_over_minimal_symbols (objfile, lookup_name, > - [&] (minimal_symbol *minsym) > + minimal_symbol *ifunc > + = find_minimal_symbol (objfile, lookup_name, > + [&] (minimal_symbol *minsym) > { > if (minsym->type () == mst_text_gnu_ifunc > || minsym->type () == mst_data_gnu_ifunc) > { > CORE_ADDR msym_addr = minsym->value_address (objfile); > + > if (minsym->type () == mst_data_gnu_ifunc) > { > struct gdbarch *gdbarch = objfile->arch (); > msym_addr = gdbarch_convert_from_func_ptr_addr > (gdbarch, msym_addr, current_inferior ()->top_target ()); > } > + > if (msym_addr == address) > - { > - ifunc = minsym; > - return true; > - } > + return true; > } > + > return false; > }); > > - if (ifunc != NULL) > + if (ifunc != nullptr) > return {ifunc, objfile}; > + > return {}; > } > > -- > 2.53.0