From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from omta036.useast.a.cloudfilter.net (omta036.useast.a.cloudfilter.net [44.202.169.35]) by sourceware.org (Postfix) with ESMTPS id F179C385840A for ; Thu, 18 Jan 2024 20:32:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F179C385840A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F179C385840A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=44.202.169.35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705609938; cv=none; b=mILVkIIFJHypaQfC1aPthJ+oBxqMk+1Lr79MTOu6i6xfJlqYFV3GdsUsnDBwUkJPavco6WDGWK7s5GPK7FrqID7T3SJZP6qwGWF0Q1Lwuh8FXlHl7gBenoNRPEKtyKpOT+i4/wqJu4oEPcVqLpFbnMk7MAqK3+MXTW0p9NOGNwI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705609938; c=relaxed/simple; bh=9E8UCZikUeWZl1/ZsnY+rtCYBe0Xs1B5zQZtQ70Ouwc=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=X24sG/S/oDbb9A2P61hjgIQPE+Q596TC+WDNntkKBtvhrbqy4pEcQfxVRIIedgEzNEg6boCJ5o8cxRYBioCEi/kizFEkIip0Cou4k9ADju8CurrPxg1FVHrzqVzYr82v9XsXe6F1Sq15QRqsYIbj1smE5bWGRt+3cJzjE+DNV+4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-5004a.ext.cloudfilter.net ([10.0.29.221]) by cmsmtp with ESMTPS id QXcSrIb0D8uLRQZ3brw3Bz; Thu, 18 Jan 2024 20:32:11 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id QZ3arzsGlKleDQZ3arNM1w; Thu, 18 Jan 2024 20:32:11 +0000 X-Authority-Analysis: v=2.4 cv=KcbBDCUD c=1 sm=1 tr=0 ts=65a98acb a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=OWjo9vPv0XrRhIrVQ50Ab3nP57M=:19 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=IkcTkHD0fZMA:10 a=dEuoMetlWLkA:10 a=Qbun_eYptAEA:10 a=INT8-sjlIe3v6QsWUHQA:9 a=QEXdDO2ut3YA:10 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=To:In-Reply-To:References:Message-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Subject:Date:From:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=VGRFr1bN/0PA6vb2PC8ANUVGbJsemINTjJUTA+1LBV4=; b=eAjEqxqcrDHMJZBzofVvO1j2Cb 46vx9kO/oe0emCm5k7HmSo9GgljweFauAHo5jviqwhEfZzNlQmC4lFJNgjPHLZOuA5qlkKVk2gWZD mkp/cSZp+b8B6ISo5eCm0tV5p; Received: from 97-122-68-157.hlrn.qwest.net ([97.122.68.157]:50746 helo=[192.168.0.21]) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rQZ3a-002DCj-0d for gdb-patches@sourceware.org; Thu, 18 Jan 2024 13:32:10 -0700 From: Tom Tromey Date: Thu, 18 Jan 2024 13:32:10 -0700 Subject: [PATCH v2 12/30] Add domain_search_flags MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240118-submit-domain-hacks-2-v2-12-aecab29fa104@tromey.com> References: <20240118-submit-domain-hacks-2-v2-0-aecab29fa104@tromey.com> In-Reply-To: <20240118-submit-domain-hacks-2-v2-0-aecab29fa104@tromey.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.4 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.68.157 X-Source-L: No X-Exim-ID: 1rQZ3a-002DCj-0d X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-68-157.hlrn.qwest.net ([192.168.0.21]) [97.122.68.157]:50746 X-Source-Auth: tom+tromey.com X-Email-Count: 14 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfHl3oLZCqYrWhHnynsYEF4Q3W291hJ8+iCWb2t5p73uFYh9eEIF7qUBiMXvqQTXuzuRrfd237fKDuKDNhEnxZOtRfMht5MmOsOqEhOIQESPGXpjFbtpK uznXttzTmFMtSEur6djeNE/8XF4Q8bBSWfMQd6Pss6s42prLcL7vY/EWgtRJfRFZytnJW0pixmJ3S28cpnz90cc6MuWJpSZatuM= X-Spam-Status: No, score=-3022.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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 adds a new flag enum type, domain_search_flags, which is the flag version of domain_enum. Nothing uses this yet, but the goal here is to have all symbol searches and lookups use these flags. The new names are chosen to exactly parallel domain_enum. --- gdb/symtab.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ gdb/symtab.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/gdb/symtab.c b/gdb/symtab.c index b1deb9d6767..779e1ff82fe 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -331,6 +331,21 @@ search_domain_name (enum search_domain e) /* See symtab.h. */ +std::string +domain_name (domain_search_flags flags) +{ + static constexpr domain_search_flags::string_mapping mapping[] = { +#define DOMAIN(X) \ + MAP_ENUM_FLAG (SEARCH_ ## X ## _DOMAIN), +#include "sym-domains.def" +#undef DOMAIN + }; + + return flags.to_string (mapping); +} + +/* See symtab.h. */ + CORE_ADDR linetable_entry::pc (const struct objfile *objfile) const { @@ -2666,6 +2681,41 @@ symbol_matches_domain (enum language symbol_language, /* See symtab.h. */ +bool +symbol::matches (domain_search_flags flags) const +{ + if (language () != language_c + && language () != language_objc + && language () != language_opencl) + { + /* Only C languages distinguish tag and type namespaces. */ + if ((flags & SEARCH_TYPE_DOMAIN) != 0) + flags |= SEARCH_STRUCT_DOMAIN; + } + + if ((flags & SEARCH_FUNCTION_DOMAIN) != 0 + && domain () == VAR_DOMAIN + && aclass () == LOC_BLOCK) + return true; + + if ((flags & SEARCH_VAR_DOMAIN) != 0 + && domain () == VAR_DOMAIN) + return true; + + if ((flags & SEARCH_TYPE_DOMAIN) != 0 + && domain () == VAR_DOMAIN + && aclass () == LOC_TYPEDEF) + return true; + + if ((flags & SEARCH_STRUCT_DOMAIN) != 0 + && domain () == STRUCT_DOMAIN) + return true; + + return search_flags_matches (flags, m_domain); +} + +/* See symtab.h. */ + struct type * lookup_transparent_type (const char *name) { diff --git a/gdb/symtab.h b/gdb/symtab.h index 7e841c4033f..c02a58367c6 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -905,6 +905,48 @@ enum domain_enum extern const char *domain_name (domain_enum); +/* Flags used for searching symbol tables. These can be combined to + let the search match multiple kinds of symbol. */ +enum domain_search_flag +{ +#define DOMAIN(X) \ + SEARCH_ ## X ## _DOMAIN = (1 << X ## _DOMAIN), +#include "sym-domains.def" +#undef DOMAIN +}; +DEF_ENUM_FLAGS_TYPE (enum domain_search_flag, domain_search_flags); + +/* A convenience constant to search for any symbol. */ +constexpr domain_search_flags SEARCH_ALL + = ((domain_search_flags) 0 +#define DOMAIN(X) | SEARCH_ ## X ## _DOMAIN +#include "sym-domains.def" +#undef DOMAIN + ); + +/* A convenience define for "C-like" name lookups, matching variables, + types, and functions. */ +#define SEARCH_VFT \ + (SEARCH_VAR_DOMAIN | SEARCH_FUNCTION_DOMAIN | SEARCH_TYPE_DOMAIN) + +/* Return a string representing the given flags. */ +extern std::string domain_name (domain_search_flags); + +/* Convert a symbol domain to search flags. */ +static inline domain_search_flags +to_search_flags (domain_enum domain) +{ + return domain_search_flags (domain_search_flag (1 << domain)); +} + +/* Return true if the given domain matches the given flags, false + otherwise. */ +static inline bool +search_flags_matches (domain_search_flags flags, domain_enum domain) +{ + return (flags & to_search_flags (domain)) != 0; +} + /* Searching domains, used when searching for symbols. Element numbers are hardcoded in GDB, check all enum uses before changing it. */ @@ -1250,6 +1292,9 @@ struct symbol : public general_symbol_info, public allocate_on_obstack return symbol_matches_domain (language (), domain (), d); } + /* Return true if this symbol's domain matches FLAGS. */ + bool matches (domain_search_flags flags) const; + domain_enum domain () const { return m_domain; -- 2.43.0