From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2054.outbound.protection.outlook.com [40.107.22.54]) by sourceware.org (Postfix) with ESMTPS id DC5C73858D20 for ; Wed, 17 Apr 2024 09:22:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DC5C73858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DC5C73858D20 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.22.54 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1713345748; cv=pass; b=s9YlvEqZO/t+pbHdwpEMgJ1ZWy21dIzGXVBL/dCi67PWTaXp7i6A39rshrT2A5Qw9zZGP31lQ3pQnh8Nl0AlCZ2Ac0GyenZ1yfUfMNrQuvAHH3sLtHEf/wFmUd2GiSy5IcUXpoEISEX0QxainUXgNeL51bw2IVWMlHFn7Lc1Kg0= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1713345748; c=relaxed/simple; bh=46364Kh4Kvid8qAIG8lq6VgFgr5sXzbHYf4Y61w2UCU=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:Subject:To:From: MIME-Version; b=oKAbLAt0/6jwycekaaeAPylSQgxDBaFV3dkB/q7h4HZgWvuKKVGc9IhKr5h0C/mWVhXKHqwL7w13BV4GC4EU3AElrOgLMCSwbuoKrPNDUmerT3x5Mvlyw5PCPbuo9mQYM/sNKgZFjMAikGJzOnNjLkSKwz3NZg2rJDE6s//iFsE= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=Ncbkc6QjH5hg/ObDy4nSTaRpLm8Kwgg+9unIKW/QD8tnPI+2Fu8FKy0J0j5qGLZo8RH1TO5aGxt8QnWFxnYwYzPI0R59+OGGss5EbpRTkqux8B8SzmEHwKBwUo4PRdyIBcjTh3qavTRUO/p3ghIQ36hyAdGS0KLSJaaUQR/GQO6vtgEfIDWcVKQ7+A9hsm0AV/sc9oHFFzeO1muLV78VjlFIyJaN68ntxmKy46gPjf7kakYu/Gr7Bygixg374lcKCkX/SmH5MBiGzCLxyW03e8Sdn9HzgFGET3JZ2UsOYICnPoCjB8Rgd7LtL9RSHLqB0gij7nfhv4xoTq2rmG/Oaw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YA199HK/z2gshSFhAw4YjllbKtLrJQIx/lxxdOVUC3g=; b=B9LjqNnbNgqGSOcfTsJVFMG6lYIT7g1J6aIbPT7CO2BYybqMxvA4e3YQIaS+/7xuFdyeOjJ/MB8vJ8YnoH30kBYbtypp+wbqhPe0Wp4vTpuoR3FtCUYZAEuIC7xoC4ZYm63kHS4WVMJcqbdNuwy3GRXF9Y9B2LAEVGhzAMn0+GHAIClkhWICO4FS3IDLFqKFyt0ErHLzPNs7fmDwEXpztcJeVQXIC9h4A1NCz0nzJuCWzumh/vvoLsm8TaFJrEfRLuc7RSVu4uQvJid5HOzTrMTOr9AuAPaBEAvoVwN9E52rUlYHfjadaHz1kGlEEeyeo+jaYbx2t4vdUkhyK2UxQQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YA199HK/z2gshSFhAw4YjllbKtLrJQIx/lxxdOVUC3g=; b=sYt6lgnthieZfPzEPLVjNDlK3IC4SR4j+YkcKJjfNlkK/x2pUX+p9iA2r414g/boQc9a6EpqaTjKvJKsjfSKu0S4eLX/NKtTfEVHmHQXcaTh1YirCNZwPNXuFacTwV6VsvoeqWq6Jh3C9RpWRCxD///bNdT8TNLPYSrIyuZulu0= Received: from AS9PR05CA0347.eurprd05.prod.outlook.com (2603:10a6:20b:490::35) by DBBPR08MB6202.eurprd08.prod.outlook.com (2603:10a6:10:209::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.37; Wed, 17 Apr 2024 09:22:18 +0000 Received: from AM3PEPF0000A793.eurprd04.prod.outlook.com (2603:10a6:20b:490:cafe::31) by AS9PR05CA0347.outlook.office365.com (2603:10a6:20b:490::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7495.23 via Frontend Transport; Wed, 17 Apr 2024 09:22:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM3PEPF0000A793.mail.protection.outlook.com (10.167.16.122) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7452.22 via Frontend Transport; Wed, 17 Apr 2024 09:22:17 +0000 Received: ("Tessian outbound caed45120527:v313"); Wed, 17 Apr 2024 09:22:17 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 4ebb74fd57258f4a X-CR-MTA-TID: 64aa7808 Received: from c175bddb7346.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id A8032CA3-AB60-485A-A9EC-D725FFEF4E9F.1; Wed, 17 Apr 2024 09:22:11 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c175bddb7346.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 17 Apr 2024 09:22:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DV+1mjMzywiLu5YzQCppA4lbS8f0vCnZ1jfx5KS6wUt/yTc65v8LPUbsA4LC05R7bXN5Yb6TA8KRAqYE5wWuYxesPnDQn2aRw53Oq1rwvbf8gpUpN1YSHklzE8+bhIJxm6zUk+LvAhqtBJCf/dvsl7TydDx+WmdDIW7xealLZZYyciwhZEszNASmabwt6/TPmmMHCAgDQGdQoFmKZoC7A+d3pZqvbNY3cKBgQpDJdUg2kNrrTqjmOQgdtNUXCtb/MsIMCFj+yvTStjOSv5IR0jbJO3LWfSI1Pk3cxQnnYMnK+wKFBjH0LWPtXcDVA5oK88Oyl9pho+5QGOGvFYCVaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YA199HK/z2gshSFhAw4YjllbKtLrJQIx/lxxdOVUC3g=; b=ZwRfTAczDwpJD5/SMvTC4nqm8vEpUFFABO7wMieH/vYwgMTnShpFDEi5qUx+syoiodyzXN1A7TnQfWVlU3BJhFhkNL24TBit4ls/XPp7KC3NrhtPWN/OSDHfOh3GwEn/GLy9+phZzpc/8l4IUNvCENq6VNcU8g7jM39gXZy4uqx/7etyinBkgc0WqCnOvRinwNw4QVZI1rgXzxqJD35pIRMzjFhqgFBeVPRvctA+olnD+cawutRrWF7hScKpmdQqaxoDUFLjThyZr5gd7RO4Xd/41UHZb5pyxk19KE5nSgmiFalIJCu3MYwK3cPZ4194mVMUteDqiqylWLKLSRkSRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YA199HK/z2gshSFhAw4YjllbKtLrJQIx/lxxdOVUC3g=; b=sYt6lgnthieZfPzEPLVjNDlK3IC4SR4j+YkcKJjfNlkK/x2pUX+p9iA2r414g/boQc9a6EpqaTjKvJKsjfSKu0S4eLX/NKtTfEVHmHQXcaTh1YirCNZwPNXuFacTwV6VsvoeqWq6Jh3C9RpWRCxD///bNdT8TNLPYSrIyuZulu0= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) by PAXPR08MB6543.eurprd08.prod.outlook.com (2603:10a6:102:12f::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7452.50; Wed, 17 Apr 2024 09:22:06 +0000 Received: from VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::77d4:d040:b19d:6472]) by VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::77d4:d040:b19d:6472%4]) with mapi id 15.20.7452.049; Wed, 17 Apr 2024 09:22:06 +0000 Message-ID: Date: Wed, 17 Apr 2024 10:22:01 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 5/8] gdb: Introduce is_address_tagged target hook To: Gustavo Romero , gdb-patches@sourceware.org Cc: thiago.bauermann@linaro.org, eliz@gnu.org, tom@tromey.com References: <20240416140728.198163-1-gustavo.romero@linaro.org> <20240416140728.198163-6-gustavo.romero@linaro.org> Content-Language: en-US From: Luis Machado In-Reply-To: <20240416140728.198163-6-gustavo.romero@linaro.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO2P123CA0085.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:138::18) To VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB3919:EE_|PAXPR08MB6543:EE_|AM3PEPF0000A793:EE_|DBBPR08MB6202:EE_ X-MS-Office365-Filtering-Correlation-Id: 72db04f1-ab00-4792-394b-08dc5ebfe09a x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: oHpYXuY3BoAwA1f9qsat5xE7pU7+fyxjY8OQ2r/2BrpYLfA+yYhLvOabX7+lvS3mPkz3HYN/ctlp2c3znHjP7N6FI8LmeoZ7Ay/60HTTxC7Ly+6yr6zz+s9cPdKHXBE9QsjqfroN0NGBZIm51vA62TWgC6caG9jslfmV4lYF98BeqtuACifsPV7TYuS60EzfO33g0uXB62vbWERgIeOkOb1ZaOy3xfsGW9omkanK2yIKCpQZnnFi9whm+2qZ0D0272ltqxGPIIO2KICUCvEhZIZ8AWPdNNDz5nnMfemugSDd4wdQAJNergj9dhp+upM3qxa0io7Rdno2dZX+qsdN0yAlJP3VvMt5oIF6YA0o+oDIZu/BJBjzmNhzoOjsn17puYOywjjB8Jm8TcyENkEunxaWWSYBKJaxa0PVQRIUiil2ZhALvZr8HlLM3+ALC29mS3PsQW3BxOKxsJHbQ+Z1iMk7pJw9Ud4wtvvz7fTPrduq8qD45/Y0yCQJmHFId8H9zaYef7l3ZyIwZtvCO7YuABA5Fp6soubZnVxoxOxWGuLyaB38DwrLZ5vFTeXYKt7a3HRqyA6yRjP1+hWQWcKvYKYmMvnAnGRig1adrLJAOUKxyFyjQ7YVdb1saFumGCf98CvD32yoUrdiDajAIruErX51fFCA1OevZ9ZZHH0gsjI= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB3919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376005)(1800799015)(366007);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6543 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A793.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 6a6e2a1c-cd75-454c-f805-08dc5ebfd94e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QymQA/YE/CMRH+oLbQZcIKz5BUiPGR4TjRSzdqq/1TpUZbKSdmpl184zWlnuiFY8AAG77mI575D5MutDeCRaFdBXnQ9AP7kt7VZtpmFBlQVI/803a82ngi52YDhadaVyDmON535YTOt7ELdq/6XGC8r5vBNE7QmCYItGC1UhmD9wBsqntFS5vOLnRfuPdgc3rT0tjIo8O8r/hKCI3x/GvW3OaY4WWs7HsLFAzNn0Kqx6HXNnwZeYx8s52xcSmOtwpXdRL2xPV3SvoH1s8Yb6vV10UeZywWsfFqUHywqkjz/QVw+73JL104OUFnrxVL+KVsp5j3ufQBS9OYfIb5ztaVTUgVvaSNCg8VxbObK6SVA1crjIWI+QdtbWCFvbsXMr5ZyLdXZ2Msgdio8hvOsxGeCUo9l2t4p22cQIm24Cc0WPkfZgxySKnTtgOl8vi9DQfDFhUuPDHA/6HZGzmJyD/pkZpKr1iDXIUWAMC2EKRyRgdD0dPVpymNBgn39mb7t8yDy7zK+1t5j6xWiMrZyx4uAMsKNEiP3bnQHUfBcMKKLd9MQNLH/YATyLStiHJDYiqktZnV+qkYFTWfyJod8ZZPAveNr+Lt6TlV95UjS206ZGgPg1ROV4/G7WVPvOgBHW1V8Qp8YDvCeLxYVdIG9v2B9759F5BltTJh58l0Wpzzt2h1dtDb0dBay5A4seXnu8eOu8guZYUvuVU8UxUIul9SoVZrOwgCI0VKXJIEIJ78HHDif0UfXZl9RC409Hg+++ X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(36860700004)(82310400014)(1800799015)(376005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Apr 2024 09:22:17.9110 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 72db04f1-ab00-4792-394b-08dc5ebfe09a X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF0000A793.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6202 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY 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: On 4/16/24 15:07, Gustavo Romero wrote: > This commit introduces a new target hook, target_is_address_tagged, > which is used instead of the gdbarch_tagged_address_p gdbarch hook in > the upper layer (printcmd.c). > > This change enables easy specialization of memory tagging address > check per target in the future. As target_is_address_tagged continues > to utilize the gdbarch_tagged_address_p hook, there is no change in > behavior for all the targets that use the new target hook (i.e., the > remote.c, aarch64-linux-nat.c, and corelow.c targets). > > Just the gdbarch_tagged_address_p signature is changed for convenience, > since target_is_address_tagged takes the address to be checked as a > CORE_ADDR type. > > Signed-off-by: Gustavo Romero > --- > gdb/aarch64-linux-nat.c | 15 +++++++++++++++ > gdb/aarch64-linux-tdep.c | 10 +++------- > gdb/arch-utils.c | 2 +- > gdb/arch-utils.h | 2 +- > gdb/corelow.c | 10 ++++++++++ > gdb/gdbarch-gen.h | 4 ++-- > gdb/gdbarch.c | 2 +- > gdb/gdbarch_components.py | 2 +- > gdb/printcmd.c | 26 ++++++++++++++------------ > gdb/remote.c | 10 ++++++++++ > gdb/target-delegates.c | 30 ++++++++++++++++++++++++++++++ > gdb/target.c | 6 ++++++ > gdb/target.h | 6 ++++++ > 13 files changed, 100 insertions(+), 25 deletions(-) > > diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c > index 3face34ce79..297f56cdbf1 100644 > --- a/gdb/aarch64-linux-nat.c > +++ b/gdb/aarch64-linux-nat.c > @@ -110,6 +110,8 @@ class aarch64_linux_nat_target final > /* Write allocation tags to memory via PTRACE. */ > bool store_memtags (CORE_ADDR address, size_t len, > const gdb::byte_vector &tags, int type) override; > + /* Check if an address is tagged. */ > + bool is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) override; > }; > > static aarch64_linux_nat_target the_aarch64_linux_nat_target; > @@ -1071,6 +1073,19 @@ aarch64_linux_nat_target::store_memtags (CORE_ADDR address, size_t len, > return false; > } > > +bool > +aarch64_linux_nat_target::is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) > +{ > + /* Here we take a detour going to linux-tdep layer to read the smaps file, > + because currently there isn't a better way to get that information to > + check if a given address is tagged or not. > + > + In the future, if this check is made, for instance, available via PTRACE, > + it will be possible to drop the smaps path in favor of a PTRACE one for > + this check. */ > + return gdbarch_tagged_address_p (gdbarch, address); > +} > + > void _initialize_aarch64_linux_nat (); > void > _initialize_aarch64_linux_nat () > diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c > index fc60e602748..35979875907 100644 > --- a/gdb/aarch64-linux-tdep.c > +++ b/gdb/aarch64-linux-tdep.c > @@ -2451,17 +2451,13 @@ aarch64_mte_get_atag (CORE_ADDR address) > /* Implement the tagged_address_p gdbarch method. */ > > static bool > -aarch64_linux_tagged_address_p (struct gdbarch *gdbarch, struct value *address) > +aarch64_linux_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address) > { > - gdb_assert (address != nullptr); > - > - CORE_ADDR addr = value_as_address (address); > - > /* Remove the top byte for the memory range check. */ > - addr = gdbarch_remove_non_address_bits (gdbarch, addr); > + address = gdbarch_remove_non_address_bits (gdbarch, address); > > /* Check if the page that contains ADDRESS is mapped with PROT_MTE. */ > - if (!linux_address_in_memtag_page (addr)) > + if (!linux_address_in_memtag_page (address)) > return false; > > /* We have a valid tag in the top byte of the 64-bit address. */ > diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c > index 456bfe971ff..cb149c36bc9 100644 > --- a/gdb/arch-utils.c > +++ b/gdb/arch-utils.c > @@ -102,7 +102,7 @@ default_memtag_to_string (struct gdbarch *gdbarch, struct value *tag) > /* See arch-utils.h */ > > bool > -default_tagged_address_p (struct gdbarch *gdbarch, struct value *address) > +default_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address) > { > /* By default, assume the address is untagged. */ > return false; > diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h > index 2dcd8f6dc53..467be40c688 100644 > --- a/gdb/arch-utils.h > +++ b/gdb/arch-utils.h > @@ -141,7 +141,7 @@ extern std::string default_memtag_to_string (struct gdbarch *gdbarch, > struct value *tag); > > /* Default implementation of gdbarch_tagged_address_p. */ > -bool default_tagged_address_p (struct gdbarch *gdbarch, struct value *address); > +bool default_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address); > > /* Default implementation of gdbarch_memtag_matches_p. */ > extern bool default_memtag_matches_p (struct gdbarch *gdbarch, > diff --git a/gdb/corelow.c b/gdb/corelow.c > index f4e8273d962..bdda742ef59 100644 > --- a/gdb/corelow.c > +++ b/gdb/corelow.c > @@ -109,6 +109,10 @@ class core_target final : public process_stratum_target > bool fetch_memtags (CORE_ADDR address, size_t len, > gdb::byte_vector &tags, int type) override; > > + /* If the architecture supports it, check if ADDRESS is within a memory range > + mapped with tags. For example, MTE tags for AArch64. */ > + bool is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) override; > + > x86_xsave_layout fetch_x86_xsave_layout () override; > > /* A few helpers. */ > @@ -1410,6 +1414,12 @@ core_target::fetch_memtags (CORE_ADDR address, size_t len, > return false; > } > > +bool > +core_target::is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) > +{ > + return gdbarch_tagged_address_p (gdbarch, address); > +} > + > /* Implementation of the "fetch_x86_xsave_layout" target_ops method. */ > > x86_xsave_layout > diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h > index ebcff80bb9e..63fab26987f 100644 > --- a/gdb/gdbarch-gen.h > +++ b/gdb/gdbarch-gen.h > @@ -707,8 +707,8 @@ extern void set_gdbarch_memtag_to_string (struct gdbarch *gdbarch, gdbarch_memta > /* Return true if ADDRESS contains a tag and false otherwise. ADDRESS > must be either a pointer or a reference type. */ > > -typedef bool (gdbarch_tagged_address_p_ftype) (struct gdbarch *gdbarch, struct value *address); > -extern bool gdbarch_tagged_address_p (struct gdbarch *gdbarch, struct value *address); > +typedef bool (gdbarch_tagged_address_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR address); > +extern bool gdbarch_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address); > extern void set_gdbarch_tagged_address_p (struct gdbarch *gdbarch, gdbarch_tagged_address_p_ftype *tagged_address_p); > > /* Return true if the tag from ADDRESS matches the memory tag for that > diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c > index 9319571deba..2d92f604c49 100644 > --- a/gdb/gdbarch.c > +++ b/gdb/gdbarch.c > @@ -3232,7 +3232,7 @@ set_gdbarch_memtag_to_string (struct gdbarch *gdbarch, > } > > bool > -gdbarch_tagged_address_p (struct gdbarch *gdbarch, struct value *address) > +gdbarch_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address) > { > gdb_assert (gdbarch != NULL); > gdb_assert (gdbarch->tagged_address_p != NULL); > diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py > index 7d913ade621..24e979431b6 100644 > --- a/gdb/gdbarch_components.py > +++ b/gdb/gdbarch_components.py > @@ -1267,7 +1267,7 @@ must be either a pointer or a reference type. > """, > type="bool", > name="tagged_address_p", > - params=[("struct value *", "address")], > + params=[("CORE_ADDR", "address")], > predefault="default_tagged_address_p", > invalid=False, > ) > diff --git a/gdb/printcmd.c b/gdb/printcmd.c > index 4edbd458e4d..c9689a29f74 100644 > --- a/gdb/printcmd.c > +++ b/gdb/printcmd.c > @@ -1132,7 +1132,7 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr) > = value_from_ulongest (builtin_type (gdbarch)->builtin_data_ptr, > tag_laddr); > > - if (gdbarch_tagged_address_p (gdbarch, v_addr)) > + if (target_is_address_tagged (gdbarch, value_as_address (v_addr))) > { > /* Fetch the allocation tag. */ > struct value *tag > @@ -1268,7 +1268,7 @@ print_value (value *val, const value_print_options &opts) > /* Returns true if memory tags should be validated. False otherwise. */ > > static bool > -should_validate_memtags (struct value *value) > +should_validate_memtags (gdbarch *gdbarch, struct value *value) > { > gdb_assert (value != nullptr && value->type () != nullptr); > > @@ -1289,7 +1289,7 @@ should_validate_memtags (struct value *value) > return false; > > /* We do. Check whether it includes any tags. */ > - return gdbarch_tagged_address_p (current_inferior ()->arch (), value); > + return target_is_address_tagged (gdbarch, value_as_address (value)); > } > > /* Helper for parsing arguments for print_command_1. */ > @@ -1346,7 +1346,7 @@ print_command_1 (const char *args, int voidprint) > { > gdbarch *arch = current_inferior ()->arch (); > > - if (should_validate_memtags (val) > + if (should_validate_memtags (arch, val) > && !gdbarch_memtag_matches_p (arch, val)) > { > /* Fetch the logical tag. */ > @@ -2946,9 +2946,10 @@ memory_tag_print_tag_command (const char *args, enum memtag_type tag_type) > flag, it is no use trying to access/manipulate its allocation tag. > > It is OK to manipulate the logical tag though. */ > + CORE_ADDR addr = value_as_address (val); > if (tag_type == memtag_type::allocation > - && !gdbarch_tagged_address_p (arch, val)) > - show_addr_not_tagged (value_as_address (val)); > + && !target_is_address_tagged (arch, addr)) > + show_addr_not_tagged (addr); > > value *tag_value = gdbarch_get_memtag (arch, val, tag_type); > std::string tag = gdbarch_memtag_to_string (arch, tag_value); > @@ -3124,8 +3125,9 @@ memory_tag_set_allocation_tag_command (const char *args, int from_tty) > > /* If the address is not in a region memory-mapped with a memory tagging > flag, it is no use trying to manipulate its allocation tag. */ > - if (!gdbarch_tagged_address_p (current_inferior ()->arch (), val)) > - show_addr_not_tagged (value_as_address (val)); > + CORE_ADDR addr = value_as_address (val); > + if (!target_is_address_tagged (current_inferior ()-> arch(), addr)) > + show_addr_not_tagged (addr); > > if (!gdbarch_set_memtags (current_inferior ()->arch (), val, length, tags, > memtag_type::allocation)) > @@ -3152,12 +3154,12 @@ memory_tag_check_command (const char *args, int from_tty) > struct value *val = process_print_command_args (args, &print_opts, true); > gdbarch *arch = current_inferior ()->arch (); > > + CORE_ADDR addr = value_as_address (val); > + > /* If the address is not in a region memory mapped with a memory tagging > flag, it is no use trying to access/manipulate its allocation tag. */ > - if (!gdbarch_tagged_address_p (arch, val)) > - show_addr_not_tagged (value_as_address (val)); > - > - CORE_ADDR addr = value_as_address (val); > + if (!target_is_address_tagged (current_inferior ()->arch (), addr)) You can use arch instead of current_inferior ()->arch () since we already have a local variable that saved this information. > + show_addr_not_tagged (addr); > > /* Check if the tag is valid. */ > if (!gdbarch_memtag_matches_p (arch, val)) > diff --git a/gdb/remote.c b/gdb/remote.c > index e278711df7b..9717db55e27 100644 > --- a/gdb/remote.c > +++ b/gdb/remote.c > @@ -1084,6 +1084,8 @@ class remote_target : public process_stratum_target > bool store_memtags (CORE_ADDR address, size_t len, > const gdb::byte_vector &tags, int type) override; > > + bool is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) override; > + > public: /* Remote specific methods. */ > > void remote_download_command_source (int num, ULONGEST addr, > @@ -15573,6 +15575,14 @@ remote_target::store_memtags (CORE_ADDR address, size_t len, > return packet_check_result (rs->buf).status () == PACKET_OK; > } > > +/* Implement the "is_address_tagged" target_ops method. */ > + > +bool > +remote_target::is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) > +{ > + return gdbarch_tagged_address_p (gdbarch, address); > +} > + > /* Return true if remote target T is non-stop. */ > > bool > diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c > index 59ea70458ad..e322bbbe481 100644 > --- a/gdb/target-delegates.c > +++ b/gdb/target-delegates.c > @@ -197,6 +197,7 @@ struct dummy_target : public target_ops > bool supports_memory_tagging () override; > bool fetch_memtags (CORE_ADDR arg0, size_t arg1, gdb::byte_vector &arg2, int arg3) override; > bool store_memtags (CORE_ADDR arg0, size_t arg1, const gdb::byte_vector &arg2, int arg3) override; > + bool is_address_tagged (gdbarch *arg0, CORE_ADDR arg1) override; > x86_xsave_layout fetch_x86_xsave_layout () override; > }; > > @@ -373,6 +374,7 @@ struct debug_target : public target_ops > bool supports_memory_tagging () override; > bool fetch_memtags (CORE_ADDR arg0, size_t arg1, gdb::byte_vector &arg2, int arg3) override; > bool store_memtags (CORE_ADDR arg0, size_t arg1, const gdb::byte_vector &arg2, int arg3) override; > + bool is_address_tagged (gdbarch *arg0, CORE_ADDR arg1) override; > x86_xsave_layout fetch_x86_xsave_layout () override; > }; > > @@ -4562,6 +4564,34 @@ debug_target::store_memtags (CORE_ADDR arg0, size_t arg1, const gdb::byte_vector > return result; > } > > +bool > +target_ops::is_address_tagged (gdbarch *arg0, CORE_ADDR arg1) > +{ > + return this->beneath ()->is_address_tagged (arg0, arg1); > +} > + > +bool > +dummy_target::is_address_tagged (gdbarch *arg0, CORE_ADDR arg1) > +{ > + tcomplain (); > +} > + > +bool > +debug_target::is_address_tagged (gdbarch *arg0, CORE_ADDR arg1) > +{ > + gdb_printf (gdb_stdlog, "-> %s->is_address_tagged (...)\n", this->beneath ()->shortname ()); > + bool result > + = this->beneath ()->is_address_tagged (arg0, arg1); > + gdb_printf (gdb_stdlog, "<- %s->is_address_tagged (", this->beneath ()->shortname ()); > + target_debug_print_gdbarch_p (arg0); > + gdb_puts (", ", gdb_stdlog); > + target_debug_print_CORE_ADDR (arg1); > + gdb_puts (") = ", gdb_stdlog); > + target_debug_print_bool (result); > + gdb_puts ("\n", gdb_stdlog); > + return result; > +} > + > x86_xsave_layout > target_ops::fetch_x86_xsave_layout () > { > diff --git a/gdb/target.c b/gdb/target.c > index 107a84b3ca1..5c3c1a57dbd 100644 > --- a/gdb/target.c > +++ b/gdb/target.c > @@ -796,6 +796,12 @@ target_store_memtags (CORE_ADDR address, size_t len, > return current_inferior ()->top_target ()->store_memtags (address, len, tags, type); > } > > +bool > +target_is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) > +{ > + return current_inferior ()->top_target ()->is_address_tagged (gdbarch, address); > +} > + > x86_xsave_layout > target_fetch_x86_xsave_layout () > { > diff --git a/gdb/target.h b/gdb/target.h > index c9eaff16346..486a0a687b0 100644 > --- a/gdb/target.h > +++ b/gdb/target.h > @@ -1334,6 +1334,10 @@ struct target_ops > const gdb::byte_vector &tags, int type) > TARGET_DEFAULT_NORETURN (tcomplain ()); > > + /* Returns true if ADDRESS is tagged, otherwise returns false. */ > + virtual bool is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) > + TARGET_DEFAULT_NORETURN (tcomplain ()); > + > /* Return the x86 XSAVE extended state area layout. */ > virtual x86_xsave_layout fetch_x86_xsave_layout () > TARGET_DEFAULT_RETURN (x86_xsave_layout ()); > @@ -2317,6 +2321,8 @@ extern bool target_fetch_memtags (CORE_ADDR address, size_t len, > extern bool target_store_memtags (CORE_ADDR address, size_t len, > const gdb::byte_vector &tags, int type); > > +extern bool target_is_address_tagged (gdbarch *gdbarch, CORE_ADDR address); > + > extern x86_xsave_layout target_fetch_x86_xsave_layout (); > > /* Command logging facility. */ Otherwise LGTM. Approved-By: Luis Machado Tested-By: Luis Machado