From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id MRH8OpDfYWodlSgAWB0awg (envelope-from ) for ; Thu, 23 Jul 2026 05:32:00 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id EB9D81E099; Thu, 23 Jul 2026 05:32:00 -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,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable 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 3188D1E099 for ; Thu, 23 Jul 2026 05:31:58 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CFF104BA23D9 for ; Thu, 23 Jul 2026 09:31:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CFF104BA23D9 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013049.outbound.protection.outlook.com [40.107.162.49]) by sourceware.org (Postfix) with ESMTPS id 4CA764BA23D9 for ; Thu, 23 Jul 2026 09:31:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4CA764BA23D9 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 4CA764BA23D9 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=40.107.162.49 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1784799074; cv=pass; b=iYVaythEPtV1OvQlM1krskGH0i7ANjx0LbDADZnnw/s3SlXEX/AvCfh8cg2J8I29pRLl2eb5WMMfLoivgT9OwgjyU2BGHCM7ktS2quwDtRbahuSYTBfjNa1zN/2PcDsCRSuNkO57hOmzNlyg4k00AXTarbZtqr6zGp/IOZE+C90= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1784799074; c=relaxed/simple; bh=oiHJRtLTxWvZEDNfBNTeV1oC9BtYePEZ6OCWhZwYq/M=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=UdocAcMcWWxWguoKjG5NeIsbcswFZ9XO2rZFrEIkekU0IZzmgybgJqKDmsG5G/2ellB2uLG2luY3KSIfOY7IQ7OY9UJgrskhvS0EztMF6GkeSI9ZIaT1jQLMLE98IAVOrXnirzjf2sPpFLaUwx30fPQMTylmlbW1kcB5N07UzTw= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=d7xHyMQN DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4CA764BA23D9 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=gIfdRjYaYWaBEcNQf2ipl4Iuwz2Fgmoxwn6fb3iUUSxeU0101KYdvzOtPhvdmNVZYTDp3mLIGcRRi3i8P3BgbogXJcLdkVyFbaczQNhbCECyWMMcNPCvpOwpvE8mntpOeo6dlCOu+tqp4OFx6tMnRgzO4jioJGHeq7EoAj9nnjU6IndPCpDVKrlti4i5114VVYavadmLcXGBfI5kvlTGYriXq37utJMNYGnt8Vzjsu3FSmZKN2dYUxsgIT8PLuLFM7kimWAjhPjKXovUDj1g358EpNrZIDM1GwruCyQsZHjevibqEnc2uEtOSSkeBrrmfCEbbjvTtJVhjZxcFFlbDQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zxkwl3v6+6TgV5qUYwvrUenY6Idwp5NRd5ooYzCXgRY=; b=gaaZu0JxNSuG5YywcECjZdV8nAcntXq9hKMhlPHA3Ek1nSYs00SBUSOTptOvtePuVc+oIKtibqZXagcQ9Nly4chskdPBTAx9rYy4KZ7cRkuT/pJ7dAKCA7vE08zfJdrbJMpvdL0vkuTUm7qEZ5Rsl0LLXe8Q0EgOBBomC9jH8HmFwGxgUNNHv0ewoy2/WmcoDA1Yare1CJ3cvby1q+EmkGhmg5hxqNzwMImKagKVTao4aAfXdkAyDNh7+ypwi409WiqTJ0rpshMZwbruo80cOkDBlIETt0eN/tut3cp52kFdL/lH7zH/jgNvkpdl1qvgYJ9A+axbwDWwWyYSwLR3zg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=redhat.com 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=arm.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=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zxkwl3v6+6TgV5qUYwvrUenY6Idwp5NRd5ooYzCXgRY=; b=d7xHyMQNTUVbHElsXmBF/NQndUieDAYRX6eJBmxv/2EHFy4cYWy+NljwOP8etPvUmn2lQJ2p9ied+jEEtQNYahHsBrI+2vjJw6hEzPxIhukshCC7fkfQLumFgq5coy2L9pYws/Ly7+dN/DYcfkTtB0C8fL553XKTTvpK8SP/LKE= Received: from AS8P189CA0019.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:31f::32) by DB9PR08MB6652.eurprd08.prod.outlook.com (2603:10a6:10:2ab::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:31:06 +0000 Received: from AM3PEPF0000A797.eurprd04.prod.outlook.com (2603:10a6:20b:31f:cafe::9e) by AS8P189CA0019.outlook.office365.com (2603:10a6:20b:31f::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Thu, 23 Jul 2026 09:31:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM3PEPF0000A797.mail.protection.outlook.com (10.167.16.102) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Thu, 23 Jul 2026 09:31:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OeUgM0zv1Hz0zqMxmr9L+zqWrU2ELOn8XoU5gpLhMftZKwJfIacb8FFd8i4/R3FNiiU/D5A5smwbYO1MbU1AwmWX104BqVVnOp/IUcDquLi7Vh3HGop8jz/DGQEvhJi/+0YkiJxP0FR5GCpLMZdMw7+xFhm6R+pjUnAWySyz4lJDNES8mF+trkEvu/GEFt0Q3AEPVRPWe0wBpZTbBS3aIPxhzmoh+QtqOUVbntufn80b38sL4vvFs9guT58mxHLQJtoaV2u0OZGSzzJNQW8aPgdtW/iwU2vpUw4jdj0x7MZ1dw6KKhZX68KSzhfI2qElwrVh4E/gmH7blK+KuWJcYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zxkwl3v6+6TgV5qUYwvrUenY6Idwp5NRd5ooYzCXgRY=; b=hH1hPt+zSUtLEzgGOnGVWLoq0/R0sIFh2btU54ydRZCZcdziIo8N49GCRJpqfRb/g2BxKQLo+H+hATlL9mDjjFUAgMakhr334f/K8Hj2BmwWJ63DCnqQSBMMnsXTajFQKD71egqZopoRTAC/e5V96YLWhaw8OPB9/ttV7Xub5N4CMMLyR9nsP5fAgWp7iYaI8sWxHz45F9huAOoLeVAcjf0tFdHaQgprjvsNy5WdXJTuEbtblgqH3G9dMShLy6B6vxCplByLFVXI0CjwpADFYuESRdUR1LzDuwXcu2FFd/FDU99Clp9M/szyDKNHww/O+JTAk0Zom/GXzSx8S9OOlQ== 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=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zxkwl3v6+6TgV5qUYwvrUenY6Idwp5NRd5ooYzCXgRY=; b=d7xHyMQNTUVbHElsXmBF/NQndUieDAYRX6eJBmxv/2EHFy4cYWy+NljwOP8etPvUmn2lQJ2p9ied+jEEtQNYahHsBrI+2vjJw6hEzPxIhukshCC7fkfQLumFgq5coy2L9pYws/Ly7+dN/DYcfkTtB0C8fL553XKTTvpK8SP/LKE= Received: from AS8PR08MB10099.eurprd08.prod.outlook.com (2603:10a6:20b:628::5) by VI1PR08MB10299.eurprd08.prod.outlook.com (2603:10a6:800:1bf::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.18; Thu, 23 Jul 2026 09:29:59 +0000 Received: from AS8PR08MB10099.eurprd08.prod.outlook.com ([fe80::21b3:9dda:5250:40c1]) by AS8PR08MB10099.eurprd08.prod.outlook.com ([fe80::21b3:9dda:5250:40c1%4]) with mapi id 15.21.0245.010; Thu, 23 Jul 2026 09:29:59 +0000 From: Srinath Parvathaneni To: Luis , "gdb-patches@sourceware.org" CC: "guinevere@redhat.com" , "thiago.bauermann@linaro.org" , Ezra Sitorus , Matthieu Longo , "simark@simark.ca" , Yury Khrustalev Subject: Re: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 register support for FEAT_S1POE Thread-Topic: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 register support for FEAT_S1POE Thread-Index: AQHdE82L6ddhVTfTAkqTW3RqVYZxp7Z4dogAgAJsiAM= Date: Thu, 23 Jul 2026 09:29:59 +0000 Message-ID: References: <20260714201530.78374-1-srinath.parvathaneni@arm.com> <20260714201530.78374-2-srinath.parvathaneni@arm.com> <29190e6c-7d33-4967-a21c-ed53cb1f43e2@gmail.com> In-Reply-To: <29190e6c-7d33-4967-a21c-ed53cb1f43e2@gmail.com> Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS8PR08MB10099:EE_|VI1PR08MB10299:EE_|AM3PEPF0000A797:EE_|DB9PR08MB6652:EE_ X-MS-Office365-Filtering-Correlation-Id: 8930d2fa-c0cf-43b3-4295-08dee89d1ee3 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|376014|1800799024|23010399003|366016|5023799004|10067099003|56012099006|11063799006|4143699003|3023799007|18002099003|22082099003|8096899003|13003099007|38070700021; X-Microsoft-Antispam-Message-Info-Original: 0E+QNabeeVs+SuB0h+0j/FKwNb1R9etNJiMZl++gIA8zP0Fo7Bue6qlClGwAjc6MH43egr5xa5q1TR2boHdH4Lc7o4fnlLb/T7b6RsnMZGXc2GcMH5yhdbmpsOM5RsFeskiK4YcsiLSRXbPFaa3R36MJRYYLSBAEBE24hF4Do7T3fbhgWAgoR0C1n9/9PkPfRuNpht/f0Z2knd/+WF1vJ/pVaCJUmkET9UDX0gVrDaL4Ltc9i71DAS7msC/8RjHf6tB2eNp36oZcEbiPjKFZRA+ZuISlYqraLlT4gSFV0u4J2SxcfQVejsc222cAW7ozLDeAtDtWT7MGBiabqGl6DXdFAIoH1aluPYG/DAEFAXdjpc5PfI8KQfv/379BXnkBm+IQWdAx8VFuChoVgF3nFTKVQD0nkjdvJo7S2towuYAhiCHVj+02FyEO5UM02LhBOGTvywp0GM9ruMSMkR6CxsF55EZV28ebe896oYT0c7UB31KgsiywQkaJzjJXxHddZbGP7V0vxu6j1Qj4xx5aLs5KgnUu+xamTS9uOD8mz++I562v5glLnoyJootQEJnCaxRdr056ZwyWHy6v9eXsrcMAgWduh7SsTItGuH0m0W9U9nJtRxG//XXlky5OORbn92vZcSE0+C/Kbm+kGankGkQ+3YATgT8IPpujlT60kEAPQcAGbpw+FFv6QiOjXzprPt+FuDiYZ1nAy38k30vbUAPSf9rH3hiirBUy5V5jv0k= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB10099.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(5023799004)(10067099003)(56012099006)(11063799006)(4143699003)(3023799007)(18002099003)(22082099003)(8096899003)(13003099007)(38070700021); DIR:OUT; SFP:1101; Content-Type: multipart/alternative; boundary="_000_AS8PR08MB10099E7285C79E152E1D56E8D9BC02AS8PR08MB10099eu_" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: ptPGZztP6onzPyJT4hCUav6u/k/Y2AalE08WEnP3L7qboW7j3AMFPDwq1RYPGAe+WUxwkWwfCetNT+Cadq0FACBCx+wd+MRS/kqlCz1zhRtasJLbc8yma8u2fGzy8nuER/hIxCtCmDrGVjIaXx/+DTDwzJ8KIAKkdwr7vvBl+vcED8LPQZvHyNr7W1248f4ujWqGPPG6JiL1JrbqEZp6QXSAXD6Pv38pHntF4jlFBYe2lMnt8evVfnbT/R8a2Qr1iyceKxfhyXULU/gRDWVq2pqEcDqsezpVHj7bRoTQVnQLEpJEQ9NLOc2XqpU8BOXrnI8e3Yj4sek69TAFJT0XcA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB10299 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A797.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 182037e0-cb98-4d8a-9d5f-08dee89cf71b X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|1800799024|23010399003|14060799003|376014|82310400026|35042699022|4143699003|8096899003|56012099006|10067099003|3023799007|11063799006|5023799004|13003099007|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: bhZgskKxAoGHs1npg8ChvI0qTcHG2kPpRieKxURex3j5O8ygDV/Zx9VjFpCkHsrh57Z9ECB70swCO/7ZgbvxAmAkHFG7vrCLur3OOHvRuBpBYr6i7MmuKz49dSJJ7VGj6yiOZ+12wel6ICgLKG5i8DLB+SHJ25fej3x5zLsuRI5v93JpGUMKFeo2sGEAplzz8UcndT4jZpnBy1kiP0JqcnWlnLR2dkC8JhogoJQ0BAaQmEcG7P+NuaAjS+2BkNJaUMtO4OwgOZlpipVooYdhfLpdwYOeO9AS4PpwiYwdziqu2rD3A2gq6LrunNPajFJJIxeIGnuJ+hzng3O4XNHlIMCiMzzc/MM/SBpUF+e6w6i4QqPxOQmF8YNEVMiwNVRdoEdShjV9lu1oTq5aztjafWqtxbTlRyFpeCpm0EgzFYv3w4UAiGtm8nnHAvDiPsxXDrFNRLxhf7KqeBsI118dfhYOx/XKYbrXHHX8Yfp6VUCOQBFu+5AuVtk2mSEq9AJbJHO/lt+wN2+0+e7RNzjLzPY9PIQTb8B1Sv1DHK+8ku+0kBrLHxMipLF6kBoqAgkxnoSf2k0mZYFwZTM+dm6+YFHTglaBuIKpm4o0vEnlt90ys/tXw5XpJzQkFa5WXvUJ+1kFcTyTLVn7bCCNRrCIl6aSnmd1yYL5YVWhSjS0Ch2s7I7XbrRvP4urTVh16QijsJ16VHFGSsJ+Hfx1Buywzw== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(1800799024)(23010399003)(14060799003)(376014)(82310400026)(35042699022)(4143699003)(8096899003)(56012099006)(10067099003)(3023799007)(11063799006)(5023799004)(13003099007)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kpCG3omsMzpqe5yMpsm1H7pNtycITNZgbLyBZz7xrpubmRF7XTQSxWwl8/O3lHUU+TjQYyg5vjxM0UEBY2lvNn8Kq1LmHl8EtGOtcfXkvyVmh8zznY+WywxdLywonpPZpYNL8uBPxxuFQqKRKf6KOkbT78mvWHMT/VgGOaJhKFFXon3RsdDS8y6F/rAHAU/VHD5pBNNP21YoIas3+ofbkKatlcLIThb/+GLL3mNKF4YLSoUga7MP3YvSsZtPQbH3+OBnRJ9w7Sy2F0nMqXbso6ZbZrQ+Hg6O52tnUOcc0z/lJgJGpWXVvpfgwfp7OlpCOsYa9I1zAMg5IQca+qQrfu6L+YA/6NLumm2TTDbaum6JCteUO9IEq0pYroONt6hEWN73xhvalzqOQtiNzZ8V/pGCPDEXp0C8z++sqDa2fMNVaz7hBUonV0K7AztcPOnB X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:31:05.7682 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8930d2fa-c0cf-43b3-4295-08dee89d1ee3 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF0000A797.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6652 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 --_000_AS8PR08MB10099E7285C79E152E1D56E8D9BC02AS8PR08MB10099eu_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >> * p/x $por_el0 >> * set $por_el0 =3D >> >> Example: >> (gdb) info register por_el0 >> por_el0 0x7 [ P15=3D--- P14=3D--- P13=3D--- P12= =3D--- P11=3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4= =3D--- P3=3D--- P2=3D--- P1=3D--- P0=3Drwx ] >> (gdb) set $por_el0=3D0xffffffff77777777 >> (gdb) info register por_el0 >> por_el0 0xffffffff77777777 [ P15=3D??? P14=3D??? P13=3D??? P12= =3D??? P11=3D??? P10=3D??? P9=3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4= =3Drwx P3=3Drwx P2=3Drwx P1=3Drwx P0=3Drwx ] >> (gdb) p $por_el0 >> $1 =3D [ P15=3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D??? P9= =3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx P1=3D= rwx P0=3Drwx ] >> (gdb) p/x $por_el0 >> $2 =3D 0xffffffff77777777 >> (gdb) set $por_el0=3D0x57 >> (gdb) info register por_el0 >> por_el0 0x57 [ P15=3D--- P14=3D--- P13=3D--- P12= =3D--- P11=3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4= =3D--- P3=3D--- P2=3D--- P1=3Drw- P0=3Drwx ] >> (gdb) set $por_el0=3D0xf7f7f7f7f7f7f7f7 >> (gdb) info register por_el0 >> por_el0 0xf7f7f7f7f7f7f7f7 [ P15=3D??? P14=3Drwx P13=3D??? P12= =3Drwx P11=3D??? P10=3Drwx P9=3D??? P8=3Drwx P7=3D??? P6=3Drwx P5=3D??? P4= =3Drwx P3=3D??? P2=3Drwx P1=3D??? P0=3Drwx ] >> (gdb) > >Looking at the output above I think it is a bit hard to read. > >Have you considered keeping the original register as it is and having >pseudo-registers that print appropriately? > >If a user wants to see, say, P15, it doesn=B4t help we print everything >else along with it. > >The other alternative is having a python pretty printer that goes >alongside the feature. > Hi Luis, Thanks for the suggestions. The reason I chose to decode the register inline is that the raw 64 bit reg= ister value by itself is not particularly useful. For example, if we kept the ori= ginal formatting, the user would see something like: (gdb) set $por_el0 =3D 0xf7f7f7f7f7f7f7f7 (gdb) info register por_el0 por_el0 0xf7f7f7f7f7f7f7f7 17868022691004925943 Neither of hexadecimal nor the decimal value tells the user which protectio= n key has which permissions without manually decoding each 4-bit nibble. Although the architecture defines POR_EL0 as a single 64 bit register, it doesn't define separate P0-P15 fields. I introduced the P0-P15 labels to identify each 4-bit nibble, since each nibble corresponds to one protect= ion key's permission encoding. We also considered only displaying nibbles that have at least one permissio= n enabled, while displaying "???" when the reserved fourth bit of a nibble is= set. For example: (gdb) set $por_el0 =3D 0x57 (gdb) info register por_el0 por_el0 0x57 [ P1=3Drw- P0=3Drwx ] (gdb) set $por_el0 =3D 0xf7 (gdb) info register por_el0 por_el0 0xf7 [ P1=3D??? P0=3Drwx ] However, we thought that approach could be misleading because it hides the remaining protection keys rather than explicitly showing that they are all "---", please let me know if you feel this approach is better? Regarding the Python pretty-printer suggestion, could you elaborate a bit o= n what you have in mind? Would you prefer the Python pretty printer to displa= y the same string format, or a shorter form that still allows accessing each nibb= le individually (e.g., P0, P5, etc.)? Also, could you provide a simple example= of the expected output? Thanks, Sri. ________________________________ From: Luis Sent: 21 July 2026 21:25 To: Srinath Parvathaneni ; gdb-patches@source= ware.org Cc: guinevere@redhat.com ; thiago.bauermann@linaro.or= g ; Ezra Sitorus ; Matth= ieu Longo ; simark@simark.ca Subject: Re: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 register s= upport for FEAT_S1POE Sorry, missed some... On 14/07/2026 21:15, srinath.parvathaneni@arm.com wrote: > From: Srinath Parvathaneni > > Add support for the FEAT_S1POE POR_EL0 register on AArch64. > > This patch adds POR_EL0 to the AArch64 register set and reads/writes it > using the NT_ARM_POE ptrace regset. > > With this change, POR_EL0 is available through: > * info registers > * info registers por_el0 > * p $por_el0 > * p/x $por_el0 > * set $por_el0 =3D > > Example: > (gdb) info register por_el0 > por_el0 0x7 [ P15=3D--- P14=3D--- P13=3D--- P12=3D= --- P11=3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D-= -- P3=3D--- P2=3D--- P1=3D--- P0=3Drwx ] > (gdb) set $por_el0=3D0xffffffff77777777 > (gdb) info register por_el0 > por_el0 0xffffffff77777777 [ P15=3D??? P14=3D??? P13=3D??? P12=3D= ??? P11=3D??? P10=3D??? P9=3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Dr= wx P3=3Drwx P2=3Drwx P1=3Drwx P0=3Drwx ] > (gdb) p $por_el0 > $1 =3D [ P15=3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D??? P9= =3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx P1=3D= rwx P0=3Drwx ] > (gdb) p/x $por_el0 > $2 =3D 0xffffffff77777777 > (gdb) set $por_el0=3D0x57 > (gdb) info register por_el0 > por_el0 0x57 [ P15=3D--- P14=3D--- P13=3D--- P12=3D= --- P11=3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D-= -- P3=3D--- P2=3D--- P1=3Drw- P0=3Drwx ] > (gdb) set $por_el0=3D0xf7f7f7f7f7f7f7f7 > (gdb) info register por_el0 > por_el0 0xf7f7f7f7f7f7f7f7 [ P15=3D??? P14=3Drwx P13=3D??? P12=3D= rwx P11=3D??? P10=3Drwx P9=3D??? P8=3Drwx P7=3D??? P6=3Drwx P5=3D??? P4=3Dr= wx P3=3D??? P2=3Drwx P1=3D??? P0=3Drwx ] > (gdb) > --- > gdb/Makefile.in | 2 ++ > gdb/aarch64-linux-nat.c | 64 +++++++++++++++++++++++++++++++++ > gdb/aarch64-tdep.c | 23 ++++++++++++ > gdb/aarch64-tdep.h | 10 ++++++ > gdb/arch/aarch64-poe-linux.h | 29 +++++++++++++++ > gdb/arch/aarch64.c | 4 +++ > gdb/arch/aarch64.h | 8 ++++- > gdb/features/Makefile | 1 + > gdb/features/aarch64-poe.c | 68 ++++++++++++++++++++++++++++++++++++ > gdb/features/aarch64-poe.xml | 47 +++++++++++++++++++++++++ > gdb/nat/aarch64-poe-linux.h | 29 +++++++++++++++ > 11 files changed, 284 insertions(+), 1 deletion(-) > create mode 100644 gdb/arch/aarch64-poe-linux.h > create mode 100644 gdb/features/aarch64-poe.c > create mode 100644 gdb/features/aarch64-poe.xml > create mode 100644 gdb/nat/aarch64-poe-linux.h > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index 57f384170ab..3dc9cd07dcb 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -1292,6 +1292,7 @@ HFILES_NO_SRCDIR =3D \ > arch/aarch32.h \ > arch/aarch64-fpmr-linux.h \ > arch/aarch64-gcs-linux.h \ > + arch/aarch64-poe-linux.h \ > arch/aarch64.h \ > arch/aarch64-insn.h \ > arch/aarch64-mte.h \ > @@ -1540,6 +1541,7 @@ HFILES_NO_SRCDIR =3D \ > namespace.h \ > nat/aarch64-fpmr-linux.h \ > nat/aarch64-gcs-linux.h \ > + nat/aarch64-poe-linux.h \ > nat/aarch64-hw-point.h \ > nat/aarch64-linux.h \ > nat/aarch64-linux-hw-point.h \ Let's keep these entries sorted alphabetically. > diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c > index 52ace4aab41..8e29c42908c 100644 > --- a/gdb/aarch64-linux-nat.c > +++ b/gdb/aarch64-linux-nat.c > @@ -34,6 +34,7 @@ > #include "arch/arm.h" > #include "nat/aarch64-fpmr-linux.h" > #include "nat/aarch64-gcs-linux.h" > +#include "nat/aarch64-poe-linux.h" > #include "nat/aarch64-linux.h" > #include "nat/aarch64-linux-hw-point.h" > #include "nat/aarch64-mte-linux-ptrace.h" > @@ -602,6 +603,54 @@ store_gcsregs_to_thread (regcache *regcache) > perror_with_name (_("Unable to store GCS registers")); > } > > +/* Fill GDB's register array with the POE register value from the curren= t > + thread. */ > + > +static void > +fetch_poeregs_from_thread (regcache *regcache) > +{ > + aarch64_gdbarch_tdep *tdep > + =3D gdbarch_tdep (regcache->arch ()); > + > + gdb_assert (tdep->has_poe ()); > + > + uint64_t user_poe; > + iovec iovec; > + > + iovec.iov_base =3D &user_poe; > + iovec.iov_len =3D sizeof (user_poe); > + > + int tid =3D get_ptrace_pid (regcache->ptid ()); > + if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_POE, &iovec) !=3D 0) > + perror_with_name (_("Unable to fetch POE register")); > + > + regcache->raw_supply (tdep->poe_regnum, &user_poe); > +} > + > +/* Store the NT_ARM_POE register contents from GDB's REGCACHE to the > + thread associated with REGCACHE. */ wront identation above. > + > +static void > +store_poeregs_to_thread (struct regcache *regcache) > +{ > + aarch64_gdbarch_tdep *tdep > + =3D gdbarch_tdep (regcache->arch ()); > + > + gdb_assert (tdep->has_poe ()); > + > + int tid =3D regcache->ptid ().lwp (); > + > + iovec iovec; > + uint64_t user_poe; > + iovec.iov_base =3D &user_poe; > + iovec.iov_len =3D sizeof (user_poe); > + > + regcache->raw_collect (tdep->poe_regnum, &user_poe); > + > + if (ptrace (PTRACE_SETREGSET, tid, NT_ARM_POE, &iovec) !=3D 0) > + perror_with_name (_("Unable to store POE register")); > +} > + > /* Fill GDB's REGCACHE with the FPMR register set content from the > thread associated with REGCACHE. */ > > @@ -683,6 +732,9 @@ aarch64_fetch_registers (struct regcache *regcache, i= nt regno) > if (tdep->has_gcs_linux ()) > fetch_gcsregs_from_thread (regcache); > > + if (tdep->has_poe ()) > + fetch_poeregs_from_thread (regcache); > + > if (tdep->has_fpmr ()) > fetch_fpmr_from_thread (regcache); > } > @@ -722,6 +774,9 @@ aarch64_fetch_registers (struct regcache *regcache, i= nt regno) > && (regno =3D=3D tdep->gcs_reg_base || regno =3D=3D tdep->gcs_l= inux_reg_base > || regno =3D=3D tdep->gcs_linux_reg_base + 1)) > fetch_gcsregs_from_thread (regcache); > + /* POE register? */ > + else if (tdep->has_poe () && (regno =3D=3D tdep->poe_regnum)) > + fetch_poeregs_from_thread (regcache); > /* FPMR? */ > else if (tdep->has_fpmr () && (regno =3D=3D tdep->fpmr_regnum)) > fetch_fpmr_from_thread (regcache); > @@ -802,6 +857,9 @@ aarch64_store_registers (struct regcache *regcache, i= nt regno) > > if (tdep->has_fpmr ()) > store_fpmr_to_thread (regcache); > + > + if (tdep->has_poe ()) > + store_poeregs_to_thread (regcache); > } > /* General purpose register? */ > else if (regno < AARCH64_V0_REGNUM) > @@ -836,6 +894,9 @@ aarch64_store_registers (struct regcache *regcache, i= nt regno) > /* FPMR? */ > else if (tdep->has_fpmr () && regno =3D=3D tdep->fpmr_regnum) > store_fpmr_to_thread (regcache); > + /* POE register? */ > + else if (tdep->has_poe () && regno =3D=3D tdep->poe_regnum) > + store_poeregs_to_thread (regcache); > > /* PAuth registers are read-only. */ > } > @@ -1024,6 +1085,9 @@ aarch64_linux_nat_target::read_description () > /* Check for FPMR. */ > features.fpmr =3D hwcap2 & HWCAP2_FPMR; > > + /* Check for POE support. */ > + features.poe =3D hwcap2 & HWCAP2_POE; > + > return aarch64_read_description (features); > } > > diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c > index a84da1fd59e..2e86d6e0452 100644 > --- a/gdb/aarch64-tdep.c > +++ b/gdb/aarch64-tdep.c > @@ -164,6 +164,11 @@ static const char *const aarch64_gcs_register_names[= ] =3D { > "gcspr" > }; > > +static const char *const aarch64_poe_register_names[] =3D { > + /* Permission Overlay Extension Register. */ > + "por_el0" > +}; > + > static const char *const aarch64_gcs_linux_register_names[] =3D { > /* Field in struct user_gcs. */ > "gcs_features_enabled", > @@ -4136,6 +4141,10 @@ aarch64_features_from_target_desc (const struct ta= rget_desc *tdesc) > features.fpmr =3D (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.fp= mr") > !=3D nullptr); > > + /* Check for POE feature. */ > + features.poe =3D (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.poe"= ) > + !=3D nullptr); > + > return features; > } > > @@ -4556,6 +4565,19 @@ aarch64_gdbarch_init (struct gdbarch_info info, st= ruct gdbarch_list *arches) > fpmr_regnum, "fpmr"); > } > > + int poe_regnum =3D -1; > + const struct tdesc_feature *feature_poe > + =3D tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.poe"); > + if (feature_poe !=3D nullptr) > + { > + poe_regnum =3D num_regs; > + for (i =3D 0; i < ARRAY_SIZE (aarch64_poe_register_names); i++) > + valid_p &=3D tdesc_numbered_register (feature_poe, tdesc_data.get (= ), > + poe_regnum + i, > + aarch64_poe_register_names[i]); > + num_regs++; > + } > + > int first_sme_regnum =3D -1; > int first_sme2_regnum =3D -1; > int first_sme_pseudo_regnum =3D -1; > @@ -4756,6 +4778,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, str= uct gdbarch_list *arches) > tdep->gcs_reg_base =3D first_gcs_regnum; > tdep->gcs_linux_reg_base =3D first_gcs_linux_regnum; > tdep->fpmr_regnum =3D fpmr_regnum; > + tdep->poe_regnum =3D poe_regnum; > > /* Set the SME register set details. The pseudo-registers will be ad= justed > later. */ > diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h > index dff05a08f84..3c5d10beee5 100644 > --- a/gdb/aarch64-tdep.h > +++ b/gdb/aarch64-tdep.h > @@ -208,6 +208,16 @@ struct aarch64_gdbarch_tdep : gdbarch_tdep_base > return gcs_linux_reg_base !=3D -1; > } > > + /* POE register. This is -1 if no POE feature is available. */ > + int poe_regnum =3D -1; > + > + /* Returns true if the target supports the POE feature. */ > + bool > + has_poe () const > + { > + return poe_regnum !=3D -1; > + } > + > /* First FPMR register. This is -1 if FPMR is not supported. */ > int fpmr_regnum =3D -1; > > diff --git a/gdb/arch/aarch64-poe-linux.h b/gdb/arch/aarch64-poe-linux.h > new file mode 100644 > index 00000000000..8623fa43b54 > --- /dev/null > +++ b/gdb/arch/aarch64-poe-linux.h > @@ -0,0 +1,29 @@ > +/* Common Linux target-dependent definitions for AArch64 POE > + > + Copyright (C) 2026 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see .= */ > + > +#ifndef GDB_ARCH_AARCH64_POE_LINUX_H > +#define GDB_ARCH_AARCH64_POE_LINUX_H > + > +/* Feature check for Permission Overlay Extension. */ > +#define AARCH64_HWCAP2_POE (1ULL << 63) > + > +/* Data or instruction abort caused by Protection Key Violation. */ > +#define AARCH64_SEGV_PKUERR 4 > + > +#endif /* GDB_ARCH_AARCH64_POE_LINUX_H. */ > diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c > index 2401a325b7b..a567938d06d 100644 > --- a/gdb/arch/aarch64.c > +++ b/gdb/arch/aarch64.c > @@ -28,6 +28,7 @@ > #include "../features/aarch64-sme2.c" > #include "../features/aarch64-tls.c" > #include "../features/aarch64-gcs.c" > +#include "../features/aarch64-poe.c" > #include "../features/aarch64-gcs-linux.c" > > /* See arch/aarch64.h. */ > @@ -77,6 +78,9 @@ aarch64_create_target_description (const aarch64_featur= es &features) > if (features.fpmr) > regnum =3D create_feature_aarch64_fpmr (tdesc.get (), regnum); > > + if (features.poe) > + regnum =3D create_feature_aarch64_poe (tdesc.get (), regnum); > + > return tdesc; > } > > diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h > index cf7318cbe74..ba90d55c3bb 100644 > --- a/gdb/arch/aarch64.h > +++ b/gdb/arch/aarch64.h > @@ -35,6 +35,8 @@ struct aarch64_features > bool pauth =3D false; > bool mte =3D false; > bool fpmr =3D false; > + /* Whether the Permission Overlay Extension (FEAT_S1POE) is supported.= */ > + bool poe =3D false; > > /* A positive TLS value indicates the number of TLS registers availab= le. */ > uint8_t tls =3D 0; > @@ -70,7 +72,8 @@ inline bool operator=3D=3D(const aarch64_features &lhs,= const aarch64_features &rhs) > && lhs.sme2 =3D=3D rhs.sme2 > && lhs.gcs =3D=3D rhs.gcs > && lhs.gcs_linux =3D=3D rhs.gcs_linux > - && lhs.fpmr =3D=3D rhs.fpmr; > + && lhs.fpmr =3D=3D rhs.fpmr > + && lhs.poe =3D=3D rhs.poe; > } > > namespace std > @@ -103,6 +106,9 @@ namespace std > > /* FPMR feature. */ > h =3D h << 1 | features.fpmr; > + > + /* POE feature. */ > + h =3D h << 1 | features.poe; > return h; > } > }; > diff --git a/gdb/features/Makefile b/gdb/features/Makefile > index 161a7453d66..cc77e5bb652 100644 > --- a/gdb/features/Makefile > +++ b/gdb/features/Makefile > @@ -207,6 +207,7 @@ FEATURE_XMLFILES =3D aarch64-core.xml \ > aarch64-pauth.xml \ > aarch64-mte.xml \ > aarch64-gcs.xml \ > + aarch64-poe.xml \ > aarch64-gcs-linux.xml \ > arc/v1-core.xml \ > arc/v1-aux.xml \ > diff --git a/gdb/features/aarch64-poe.c b/gdb/features/aarch64-poe.c > new file mode 100644 > index 00000000000..4bd795e9fe6 > --- /dev/null > +++ b/gdb/features/aarch64-poe.c > @@ -0,0 +1,68 @@ > +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: > + Original: aarch64-poe.xml */ > + > +#include "gdbsupport/tdesc.h" > + > +static int > +create_feature_aarch64_poe (struct target_desc *result, long regnum) > +{ > + struct tdesc_feature *feature; > + > + feature =3D tdesc_create_feature (result, "org.gnu.gdb.aarch64.poe"); > + tdesc_type_with_fields *type_with_fields; > + type_with_fields =3D tdesc_create_enum (feature, "por_el0_fmt", 4); > + tdesc_add_enum_value (type_with_fields, 0, "---"); > + tdesc_add_enum_value (type_with_fields, 1, "r--"); > + tdesc_add_enum_value (type_with_fields, 2, "--x"); > + tdesc_add_enum_value (type_with_fields, 3, "r-x"); > + tdesc_add_enum_value (type_with_fields, 4, "-w-"); > + tdesc_add_enum_value (type_with_fields, 5, "rw-"); > + tdesc_add_enum_value (type_with_fields, 6, "-wx"); > + tdesc_add_enum_value (type_with_fields, 7, "rwx"); > + tdesc_add_enum_value (type_with_fields, 8, "???"); > + tdesc_add_enum_value (type_with_fields, 9, "???"); > + tdesc_add_enum_value (type_with_fields, 10, "???"); > + tdesc_add_enum_value (type_with_fields, 11, "???"); > + tdesc_add_enum_value (type_with_fields, 12, "???"); > + tdesc_add_enum_value (type_with_fields, 13, "???"); > + tdesc_add_enum_value (type_with_fields, 14, "???"); > + tdesc_add_enum_value (type_with_fields, 15, "???"); > + > + type_with_fields =3D tdesc_create_flags (feature, "por_el0_flags", 8); > + tdesc_type *field_type; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P15", 60, 63, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P14", 56, 59, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P13", 52, 55, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P12", 48, 51, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P11", 44, 47, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P10", 40, 43, field_type)= ; > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P9", 36, 39, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P8", 32, 35, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P7", 28, 31, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P6", 24, 27, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P5", 20, 23, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P4", 16, 19, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P3", 12, 15, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P2", 8, 11, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P1", 4, 7, field_type); > + field_type =3D tdesc_named_type (feature, "por_el0_fmt"); > + tdesc_add_typed_bitfield (type_with_fields, "P0", 0, 3, field_type); > + > + tdesc_create_reg (feature, "por_el0", regnum++, 1, "system", 64, "por_= el0_flags"); > + return regnum; > +} > diff --git a/gdb/features/aarch64-poe.xml b/gdb/features/aarch64-poe.xml > new file mode 100644 > index 00000000000..58fc4f80d5c > --- /dev/null > +++ b/gdb/features/aarch64-poe.xml > @@ -0,0 +1,47 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/gdb/nat/aarch64-poe-linux.h b/gdb/nat/aarch64-poe-linux.h > new file mode 100644 > index 00000000000..f3d0256da3f > --- /dev/null > +++ b/gdb/nat/aarch64-poe-linux.h > @@ -0,0 +1,29 @@ > +/* Common native Linux definitions for AArch64 Permission Overlay Extens= ion. > + > + Copyright (C) 2026 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see .= */ > + > +#include Shouldn=B4t the above be inside the include guard? > +#ifndef GDB_NAT_AARCH64_POE_LINUX_H > +#define GDB_NAT_AARCH64_POE_LINUX_H > + > +/* Feature check for Permission Overlay Extension. */ > +#ifndef HWCAP2_POE > +#define HWCAP2_POE (1ULL << 63) > +#endif /* HWCAP2_POE. */ > + > +#endif /* GDB_NAT_AARCH64_POE_LINUX_H. */ --_000_AS8PR08MB10099E7285C79E152E1D56E8D9BC02AS8PR08MB10099eu_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
>> *  p/x $por_el0
>> *  set $por_el0 =3D <value>
>> 
>> Example:
>> (gdb) info register por_el0
>> por_el0        0x7        =         [ P15=3D--- P14=3D--- P13=3D--- P12=3D--- P11= =3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D--- P3= =3D--- P2=3D--- P1=3D--- P0=3Drwx ]
>> (gdb) set $por_el0=3D0xffffffff77777777
>> (gdb) info register por_el0
>> por_el0        0xffffffff77777777  [ P15= =3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D??? P9=3D??? P8=3D??? = P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx P1=3Drwx P0=3Drwx ]
>> (gdb) p $por_el0
>> $1 =3D [ P15=3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D?= ?? P9=3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx = P1=3Drwx P0=3Drwx ]
>> (gdb) p/x $por_el0
>> $2 =3D 0xffffffff77777777
>> (gdb) set $por_el0=3D0x57
>> (gdb) info register por_el0
>> por_el0        0x57        = ;        [ P15=3D--- P14=3D--- P13=3D--- P12=3D--- P11= =3D--- P10=3D--- P9=3D--- P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D--- P3= =3D--- P2=3D--- P1=3Drw- P0=3Drwx ]
>> (gdb) set $por_el0=3D0xf7f7f7f7f7f7f7f7
>> (gdb) info register por_el0
>> por_el0        0xf7f7f7f7f7f7f7f7  [ P15= =3D??? P14=3Drwx P13=3D??? P12=3Drwx P11=3D??? P10=3Drwx P9=3D??? P8=3Drwx = P7=3D??? P6=3Drwx P5=3D??? P4=3Drwx P3=3D??? P2=3Drwx P1=3D??? P0=3Drwx ]
>> (gdb)
>
>Looking at the output above I think it is a bit hard to read.
>
>Have you considered keeping the original register as it is and having&n= bsp;
>pseudo-registers that print appropriately?
>
>If a user wants to see, say, P15, it doesn=B4t help we print everything=  
>else along with it.
>
>The other alternative is having a python pretty printer that goes =
>alongside the feature.
>

Hi Luis,

Thanks for the suggestions.

The reason I chose to decode the register inline is that the raw 64 bit reg= ister
value by itself is not particularly useful. For example, if we kept the ori= ginal
formatting, the user would see something like:

(gdb) set $por_el0 =3D 0xf7f7f7f7f7f7f7f7
(gdb) info register por_el0
por_el0         0xf7f7f7f7f7f7f7f7      = 17868022691004925943

Neither of hexadecimal nor the decimal value tells the user which protectio= n key
has which permissions without manually decoding each 4-bit nibble.

Although the architecture defines POR_EL0 as a single 64 bit register, it
doesn't define separate P0-P15 fields. I introduced the P0-P15 labels
to identify each 4-bit nibble, since each nibble corresponds to one protect= ion
key's permission encoding.

We also considered only displaying nibbles that have at least one permissio= n
enabled, while displaying "???" when the reserved fourth bit of a= nibble is set.
For example:

(gdb) set $por_el0 =3D 0x57
(gdb) info register por_el0
por_el0        0x57  [ P1=3Drw- P0=3Drwx ]

(gdb) set $por_el0 =3D 0xf7
(gdb) info register por_el0
por_el0        0xf7  [ P1=3D??? P0=3Drwx ]

However, we thought that approach could be misleading because it hides the<= /div>
remaining protection keys rather than explicitly showing that they are all<= /div>
"---", please let me know if you feel this approach is better?

Regarding the Python pretty-printer suggestion, could you elaborate a bit o= n
what you have in mind? Would you prefer the Python pretty printer to displa= y the
same string format, or a shorter form that still allows accessing each nibb= le
individually (e.g., P0, P5, etc.)? Also, could you provide a simple example= of
the expected output?

Thanks,
Sri.

From: Luis <luis.machado= .foss@gmail.com>
Sent: 21 July 2026 21:25
To: Srinath Parvathaneni <Srinath.Parvathaneni@arm.com>; gdb-p= atches@sourceware.org <gdb-patches@sourceware.org>
Cc: guinevere@redhat.com <guinevere@redhat.com>; thiago.bauerm= ann@linaro.org <thiago.bauermann@linaro.org>; Ezra Sitorus <Ezra.S= itorus@arm.com>; Matthieu Longo <Matthieu.Longo@arm.com>; simark@s= imark.ca <simark@simark.ca>
Subject: Re: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 reg= ister support for FEAT_S1POE
 
Sorry, missed some...

On 14/07/2026 21:15, srinath.parvathaneni@arm.com wrote:
> From: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
>
> Add support for the FEAT_S1POE POR_EL0 register on AArch64.
>
> This patch adds POR_EL0 to the AArch64 register set and reads/writes i= t
> using the NT_ARM_POE ptrace regset.
>
> With this change, POR_EL0 is available through:
> *  info registers
> *  info registers por_el0
> *  p $por_el0
> *  p/x $por_el0
> *  set $por_el0 =3D <value>
>
> Example:
> (gdb) info register por_el0
> por_el0        0x7   = ;            &n= bsp; [ P15=3D--- P14=3D--- P13=3D--- P12=3D--- P11=3D--- P10=3D--- P9=3D---= P8=3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D--- P3=3D--- P2=3D--- P1=3D--- P0= =3Drwx ]
> (gdb) set $por_el0=3D0xffffffff77777777
> (gdb) info register por_el0
> por_el0        0xffffffff77777777&n= bsp; [ P15=3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D??? P9=3D???= P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx P1=3Drwx P0= =3Drwx ]
> (gdb) p $por_el0
> $1 =3D [ P15=3D??? P14=3D??? P13=3D??? P12=3D??? P11=3D??? P10=3D??? P= 9=3D??? P8=3D??? P7=3Drwx P6=3Drwx P5=3Drwx P4=3Drwx P3=3Drwx P2=3Drwx P1= =3Drwx P0=3Drwx ]
> (gdb) p/x $por_el0
> $2 =3D 0xffffffff77777777
> (gdb) set $por_el0=3D0x57
> (gdb) info register por_el0
> por_el0        0x57  &nbs= p;             = [ P15=3D--- P14=3D--- P13=3D--- P12=3D--- P11=3D--- P10=3D--- P9=3D--- P8= =3D--- P7=3D--- P6=3D--- P5=3D--- P4=3D--- P3=3D--- P2=3D--- P1=3Drw- P0=3D= rwx ]
> (gdb) set $por_el0=3D0xf7f7f7f7f7f7f7f7
> (gdb) info register por_el0
> por_el0        0xf7f7f7f7f7f7f7f7&n= bsp; [ P15=3D??? P14=3Drwx P13=3D??? P12=3Drwx P11=3D??? P10=3Drwx P9=3D???= P8=3Drwx P7=3D??? P6=3Drwx P5=3D??? P4=3Drwx P3=3D??? P2=3Drwx P1=3D??? P0= =3Drwx ]
> (gdb)
> ---
>   gdb/Makefile.in       &= nbsp;      |  2 ++
>   gdb/aarch64-linux-nat.c      | 64= +++++++++++++++++++++++++++++++++
>   gdb/aarch64-tdep.c      &nbs= p;    | 23 ++++++++++++
>   gdb/aarch64-tdep.h      &nbs= p;    | 10 ++++++
>   gdb/arch/aarch64-poe-linux.h | 29 +++++++++++++++
>   gdb/arch/aarch64.c      &nbs= p;    |  4 +++
>   gdb/arch/aarch64.h      &nbs= p;    |  8 ++++-
>   gdb/features/Makefile      &= nbsp; |  1 +
>   gdb/features/aarch64-poe.c   | 68 ++++++++++++++= ++++++++++++++++++++++
>   gdb/features/aarch64-poe.xml | 47 ++++++++++++++++++++++++= +
>   gdb/nat/aarch64-poe-linux.h  | 29 +++++++++++++++
>   11 files changed, 284 insertions(+), 1 deletion(-)
>   create mode 100644 gdb/arch/aarch64-poe-linux.h
>   create mode 100644 gdb/features/aarch64-poe.c
>   create mode 100644 gdb/features/aarch64-poe.xml
>   create mode 100644 gdb/nat/aarch64-poe-linux.h
>
> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
> index 57f384170ab..3dc9cd07dcb 100644
> --- a/gdb/Makefile.in
> +++ b/gdb/Makefile.in
> @@ -1292,6 +1292,7 @@ HFILES_NO_SRCDIR =3D \
>        arch/aarch32.h \
>        arch/aarch64-fpmr-linux.h \<= br> >        arch/aarch64-gcs-linux.h \ > +     arch/aarch64-poe-linux.h \
>        arch/aarch64.h \
>        arch/aarch64-insn.h \
>        arch/aarch64-mte.h \
> @@ -1540,6 +1541,7 @@ HFILES_NO_SRCDIR =3D \
>        namespace.h \
>        nat/aarch64-fpmr-linux.h \ >        nat/aarch64-gcs-linux.h \ > +     nat/aarch64-poe-linux.h \
>        nat/aarch64-hw-point.h \
>        nat/aarch64-linux.h \
>        nat/aarch64-linux-hw-point.h= \

Let's keep these entries sorted alphabetically.

> diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
> index 52ace4aab41..8e29c42908c 100644
> --- a/gdb/aarch64-linux-nat.c
> +++ b/gdb/aarch64-linux-nat.c
> @@ -34,6 +34,7 @@
>   #include "arch/arm.h"
>   #include "nat/aarch64-fpmr-linux.h"
>   #include "nat/aarch64-gcs-linux.h"
> +#include "nat/aarch64-poe-linux.h"
>   #include "nat/aarch64-linux.h"
>   #include "nat/aarch64-linux-hw-point.h"
>   #include "nat/aarch64-mte-linux-ptrace.h"
> @@ -602,6 +603,54 @@ store_gcsregs_to_thread (regcache *regcache)
>       perror_with_name (_("Unable t= o store GCS registers"));
>   }
>  
> +/* Fill GDB's register array with the POE register value from the cur= rent
> +   thread.  */
> +
> +static void
> +fetch_poeregs_from_thread (regcache *regcache)
> +{
> +  aarch64_gdbarch_tdep *tdep
> +    =3D gdbarch_tdep<aarch64_gdbarch_tdep> (regc= ache->arch ());
> +
> +  gdb_assert (tdep->has_poe ());
> +
> +  uint64_t user_poe;
> +  iovec iovec;
> +
> +  iovec.iov_base =3D &user_poe;
> +  iovec.iov_len =3D sizeof (user_poe);
> +
> +  int tid =3D get_ptrace_pid (regcache->ptid ());
> +  if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_POE, &iovec) != =3D 0)
> +    perror_with_name (_("Unable to fetch POE regi= ster"));
> +
> +  regcache->raw_supply (tdep->poe_regnum, &user_poe);<= br> > +}
> +
> +/* Store the NT_ARM_POE register contents from GDB's REGCACHE to the<= br> > +    thread associated with REGCACHE.  */

wront identation above.

> +
> +static void
> +store_poeregs_to_thread (struct regcache *regcache)
> +{
> +  aarch64_gdbarch_tdep *tdep
> +    =3D gdbarch_tdep<aarch64_gdbarch_tdep> (regc= ache->arch ());
> +
> +  gdb_assert (tdep->has_poe ());
> +
> +  int tid =3D regcache->ptid ().lwp ();
> +
> +  iovec iovec;
> +  uint64_t user_poe;
> +  iovec.iov_base =3D &user_poe;
> +  iovec.iov_len =3D sizeof (user_poe);
> +
> +  regcache->raw_collect (tdep->poe_regnum, &user_poe);=
> +
> +  if (ptrace (PTRACE_SETREGSET, tid, NT_ARM_POE, &iovec) != =3D 0)
> +    perror_with_name (_("Unable to store POE regi= ster"));
> +}
> +
>   /* Fill GDB's REGCACHE with the FPMR register set content = from the
>      thread associated with REGCACHE.  *= /
>  
> @@ -683,6 +732,9 @@ aarch64_fetch_registers (struct regcache *regcache= , int regno)
>         if (tdep->has_gcs_l= inux ())
>        fetch_gcsregs_from_thread (r= egcache);
>  
> +      if (tdep->has_poe ())
> +     fetch_poeregs_from_thread (regcache);
> +
>         if (tdep->has_fpmr = ())
>        fetch_fpmr_from_thread (regc= ache);
>       }
> @@ -722,6 +774,9 @@ aarch64_fetch_registers (struct regcache *regcache= , int regno)
>           &&= (regno =3D=3D tdep->gcs_reg_base || regno =3D=3D tdep->gcs_linux_reg= _base
>            = ;   || regno =3D=3D tdep->gcs_linux_reg_base + 1))
>       fetch_gcsregs_from_thread (regcach= e);
> +  /* POE register?  */
> +  else if (tdep->has_poe () && (regno =3D=3D tdep->= ;poe_regnum))
> +    fetch_poeregs_from_thread (regcache);
>     /* FPMR?  */
>     else if (tdep->has_fpmr () && (regn= o =3D=3D tdep->fpmr_regnum))
>       fetch_fpmr_from_thread (regcache);=
> @@ -802,6 +857,9 @@ aarch64_store_registers (struct regcache *regcache= , int regno)
>  
>         if (tdep->has_fpmr = ())
>        store_fpmr_to_thread (regcac= he);
> +
> +      if (tdep->has_poe ())
> +     store_poeregs_to_thread (regcache);
>       }
>     /* General purpose register?  */
>     else if (regno < AARCH64_V0_REGNUM)
> @@ -836,6 +894,9 @@ aarch64_store_registers (struct regcache *regcache= , int regno)
>     /* FPMR?  */
>     else if (tdep->has_fpmr () && regno= =3D=3D tdep->fpmr_regnum)
>       store_fpmr_to_thread (regcache); > +  /* POE register?  */
> +  else if (tdep->has_poe () && regno =3D=3D tdep->= poe_regnum)
> +    store_poeregs_to_thread (regcache);
>  
>     /* PAuth registers are read-only.  */
>   }
> @@ -1024,6 +1085,9 @@ aarch64_linux_nat_target::read_description () >     /* Check for FPMR.  */
>     features.fpmr =3D hwcap2 & HWCAP2_FPMR; >  
> +  /* Check for POE support.  */
> +  features.poe =3D hwcap2 & HWCAP2_POE;
> +
>     return aarch64_read_description (features); >   }
>  
> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> index a84da1fd59e..2e86d6e0452 100644
> --- a/gdb/aarch64-tdep.c
> +++ b/gdb/aarch64-tdep.c
> @@ -164,6 +164,11 @@ static const char *const aarch64_gcs_register_nam= es[] =3D {
>     "gcspr"
>   };
>  
> +static const char *const aarch64_poe_register_names[] =3D {
> +  /* Permission Overlay Extension Register.  */
> +  "por_el0"
> +};
> +
>   static const char *const aarch64_gcs_linux_register_names[= ] =3D {
>     /* Field in struct user_gcs.  */
>     "gcs_features_enabled",
> @@ -4136,6 +4141,10 @@ aarch64_features_from_target_desc (const struct= target_desc *tdesc)
>     features.fpmr =3D (tdesc_find_feature (tdesc, = "org.gnu.gdb.aarch64.fpmr")
>            = ;       !=3D nullptr);
>  
> +  /* Check for POE feature.  */
> +  features.poe =3D (tdesc_find_feature (tdesc, "org.gnu.gdb= .aarch64.poe")
> +           &nb= sp;   !=3D nullptr);
> +
>     return features;
>   }
>  
> @@ -4556,6 +4565,19 @@ aarch64_gdbarch_init (struct gdbarch_info info,= struct gdbarch_list *arches)
>            = ;            &n= bsp;            = ;     fpmr_regnum, "fpmr");
>       }
>  
> +  int poe_regnum =3D -1;
> +  const struct tdesc_feature *feature_poe
> +      =3D tdesc_find_feature (tdesc, "o= rg.gnu.gdb.aarch64.poe");
> +  if (feature_poe !=3D nullptr)
> +    {
> +      poe_regnum =3D num_regs;
> +      for (i =3D 0; i < ARRAY_SIZE (aarch= 64_poe_register_names); i++)
> +     valid_p &=3D tdesc_numbered_register (fe= ature_poe, tdesc_data.get (),
> +           &nb= sp;            =             &nb= sp;    poe_regnum + i,
> +           &nb= sp;            =             &nb= sp;    aarch64_poe_register_names[i]);
> +      num_regs++;
> +    }
> +
>     int first_sme_regnum =3D -1;
>     int first_sme2_regnum =3D -1;
>     int first_sme_pseudo_regnum =3D -1;
> @@ -4756,6 +4778,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, = struct gdbarch_list *arches)
>     tdep->gcs_reg_base =3D first_gcs_regnum; >     tdep->gcs_linux_reg_base =3D first_gcs_linu= x_regnum;
>     tdep->fpmr_regnum =3D fpmr_regnum;
> +  tdep->poe_regnum =3D poe_regnum;
>  
>     /* Set the SME register set details.  The= pseudo-registers will be adjusted
>        later.  */
> diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h
> index dff05a08f84..3c5d10beee5 100644
> --- a/gdb/aarch64-tdep.h
> +++ b/gdb/aarch64-tdep.h
> @@ -208,6 +208,16 @@ struct aarch64_gdbarch_tdep : gdbarch_tdep_base >       return gcs_linux_reg_base !=3D -1;=
>     }
>  
> +  /* POE register.  This is -1 if no POE feature is availab= le.  */
> +  int poe_regnum =3D -1;
> +
> +  /* Returns true if the target supports the POE feature.  = */
> +  bool
> +  has_poe () const
> +  {
> +    return poe_regnum !=3D -1;
> +  }
> +
>     /* First FPMR register.  This is -1 if FP= MR is not supported.  */
>     int fpmr_regnum =3D -1;
>  
> diff --git a/gdb/arch/aarch64-poe-linux.h b/gdb/arch/aarch64-poe-linux= .h
> new file mode 100644
> index 00000000000..8623fa43b54
> --- /dev/null
> +++ b/gdb/arch/aarch64-poe-linux.h
> @@ -0,0 +1,29 @@
> +/* Common Linux target-dependent definitions for AArch64 POE
> +
> +   Copyright (C) 2026 Free Software Foundation, Inc.
> +
> +   This file is part of GDB.
> +
> +   This program is free software; you can redistribute it a= nd/or modify
> +   it under the terms of the GNU General Public License as = published by
> +   the Free Software Foundation; either version 3 of the Li= cense, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be = useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warra= nty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbs= p; See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Publi= c License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.&nbs= p; */
> +
> +#ifndef GDB_ARCH_AARCH64_POE_LINUX_H
> +#define GDB_ARCH_AARCH64_POE_LINUX_H
> +
> +/* Feature check for Permission Overlay Extension.  */
> +#define AARCH64_HWCAP2_POE (1ULL << 63)
> +
> +/* Data or instruction abort caused by Protection Key Violation. = ; */
> +#define AARCH64_SEGV_PKUERR 4
> +
> +#endif /* GDB_ARCH_AARCH64_POE_LINUX_H.  */
> diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c
> index 2401a325b7b..a567938d06d 100644
> --- a/gdb/arch/aarch64.c
> +++ b/gdb/arch/aarch64.c
> @@ -28,6 +28,7 @@
>   #include "../features/aarch64-sme2.c"
>   #include "../features/aarch64-tls.c"
>   #include "../features/aarch64-gcs.c"
> +#include "../features/aarch64-poe.c"
>   #include "../features/aarch64-gcs-linux.c"
>  
>   /* See arch/aarch64.h.  */
> @@ -77,6 +78,9 @@ aarch64_create_target_description (const aarch64_fea= tures &features)
>     if (features.fpmr)
>       regnum =3D create_feature_aarch64_= fpmr (tdesc.get (), regnum);
>  
> +  if (features.poe)
> +    regnum =3D create_feature_aarch64_poe (tdesc.get (= ), regnum);
> +
>     return tdesc;
>   }
>  
> diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h
> index cf7318cbe74..ba90d55c3bb 100644
> --- a/gdb/arch/aarch64.h
> +++ b/gdb/arch/aarch64.h
> @@ -35,6 +35,8 @@ struct aarch64_features
>     bool pauth =3D false;
>     bool mte =3D false;
>     bool fpmr =3D false;
> +  /* Whether the Permission Overlay Extension (FEAT_S1POE) is su= pported.  */
> +  bool poe =3D false;
>  
>     /* A positive TLS value indicates the number o= f TLS registers available.  */
>     uint8_t tls =3D 0;
> @@ -70,7 +72,8 @@ inline bool operator=3D=3D(const aarch64_features &a= mp;lhs, const aarch64_features &rhs)
>       && lhs.sme2 =3D=3D rhs.sme= 2
>       && lhs.gcs =3D=3D rhs.gcs<= br> >       && lhs.gcs_linux =3D=3D rh= s.gcs_linux
> -    && lhs.fpmr =3D=3D rhs.fpmr;
> +    && lhs.fpmr =3D=3D rhs.fpmr
> +    && lhs.poe =3D=3D rhs.poe;
>   }
>  
>   namespace std
> @@ -103,6 +106,9 @@ namespace std
>  
>         /* FPMR feature. = */
>         h =3D h << 1 | f= eatures.fpmr;
> +
> +      /* POE feature.  */
> +      h =3D h << 1 | features.poe;
>         return h;
>       }
>     };
> diff --git a/gdb/features/Makefile b/gdb/features/Makefile
> index 161a7453d66..cc77e5bb652 100644
> --- a/gdb/features/Makefile
> +++ b/gdb/features/Makefile
> @@ -207,6 +207,7 @@ FEATURE_XMLFILES =3D aarch64-core.xml \
>        aarch64-pauth.xml \
>        aarch64-mte.xml \
>        aarch64-gcs.xml \
> +     aarch64-poe.xml \
>        aarch64-gcs-linux.xml \
>        arc/v1-core.xml \
>        arc/v1-aux.xml \
> diff --git a/gdb/features/aarch64-poe.c b/gdb/features/aarch64-poe.c > new file mode 100644
> index 00000000000..4bd795e9fe6
> --- /dev/null
> +++ b/gdb/features/aarch64-poe.c
> @@ -0,0 +1,68 @@
> +/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set r= o:
> +  Original: aarch64-poe.xml */
> +
> +#include "gdbsupport/tdesc.h"
> +
> +static int
> +create_feature_aarch64_poe (struct target_desc *result, long regnum)<= br> > +{
> +  struct tdesc_feature *feature;
> +
> +  feature =3D tdesc_create_feature (result, "org.gnu.gdb.aa= rch64.poe");
> +  tdesc_type_with_fields *type_with_fields;
> +  type_with_fields =3D tdesc_create_enum (feature, "por_el0= _fmt", 4);
> +  tdesc_add_enum_value (type_with_fields, 0, "---"); > +  tdesc_add_enum_value (type_with_fields, 1, "r--"); > +  tdesc_add_enum_value (type_with_fields, 2, "--x"); > +  tdesc_add_enum_value (type_with_fields, 3, "r-x"); > +  tdesc_add_enum_value (type_with_fields, 4, "-w-"); > +  tdesc_add_enum_value (type_with_fields, 5, "rw-"); > +  tdesc_add_enum_value (type_with_fields, 6, "-wx"); > +  tdesc_add_enum_value (type_with_fields, 7, "rwx"); > +  tdesc_add_enum_value (type_with_fields, 8, "???"); > +  tdesc_add_enum_value (type_with_fields, 9, "???"); > +  tdesc_add_enum_value (type_with_fields, 10, "???");<= br> > +  tdesc_add_enum_value (type_with_fields, 11, "???");<= br> > +  tdesc_add_enum_value (type_with_fields, 12, "???");<= br> > +  tdesc_add_enum_value (type_with_fields, 13, "???");<= br> > +  tdesc_add_enum_value (type_with_fields, 14, "???");<= br> > +  tdesc_add_enum_value (type_with_fields, 15, "???");<= br> > +
> +  type_with_fields =3D tdesc_create_flags (feature, "por_el= 0_flags", 8);
> +  tdesc_type *field_type;
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P15", 6= 0, 63, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P14", 5= 6, 59, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P13", 5= 2, 55, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P12", 4= 8, 51, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P11", 4= 4, 47, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P10", 4= 0, 43, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P9", 36= , 39, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P8", 32= , 35, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P7", 28= , 31, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P6", 24= , 27, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P5", 20= , 23, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P4", 16= , 19, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P3", 12= , 15, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P2", 8,= 11, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P1", 4,= 7, field_type);
> +  field_type =3D tdesc_named_type (feature, "por_el0_fmt&qu= ot;);
> +  tdesc_add_typed_bitfield (type_with_fields, "P0", 0,= 3, field_type);
> +
> +  tdesc_create_reg (feature, "por_el0", regnum++, 1, &= quot;system", 64, "por_el0_flags");
> +  return regnum;
> +}
> diff --git a/gdb/features/aarch64-poe.xml b/gdb/features/aarch64-poe.x= ml
> new file mode 100644
> index 00000000000..58fc4f80d5c
> --- /dev/null
> +++ b/gdb/features/aarch64-poe.xml
> @@ -0,0 +1,47 @@
> +<?xml version=3D"1.0"?>
> +<!-- Copyright (C) 2026 Free Software Foundation, Inc.
> +
> +     Copying and distribution of this file, with = or without modification,
> +     are permitted in any medium without royalty = provided the copyright
> +     notice and this notice are preserved.  = -->
> +
> +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
> +<feature name=3D"org.gnu.gdb.aarch64.poe">
> +  <enum id=3D"por_el0_fmt" size=3D"4">=
> +    <evalue name=3D"---" value=3D"0&= quot;/>
> +    <evalue name=3D"r--" value=3D"1&= quot;/>
> +    <evalue name=3D"--x" value=3D"2&= quot;/>
> +    <evalue name=3D"r-x" value=3D"3&= quot;/>
> +    <evalue name=3D"-w-" value=3D"4&= quot;/>
> +    <evalue name=3D"rw-" value=3D"5&= quot;/>
> +    <evalue name=3D"-wx" value=3D"6&= quot;/>
> +    <evalue name=3D"rwx" value=3D"7&= quot;/>
> +    <evalue name=3D"???" value=3D"8&= quot;/>
> +    <evalue name=3D"???" value=3D"9&= quot;/>
> +    <evalue name=3D"???" value=3D"10= "/>
> +    <evalue name=3D"???" value=3D"11= "/>
> +    <evalue name=3D"???" value=3D"12= "/>
> +    <evalue name=3D"???" value=3D"13= "/>
> +    <evalue name=3D"???" value=3D"14= "/>
> +    <evalue name=3D"???" value=3D"15= "/>
> +  </enum>
> +  <flags id=3D"por_el0_flags" size=3D"8"&= gt;
> +    <field name=3D"P15" start=3D"60&= quot; end=3D"63" type=3D"por_el0_fmt"/>
> +    <field name=3D"P14" start=3D"56&= quot; end=3D"59" type=3D"por_el0_fmt"/>
> +    <field name=3D"P13" start=3D"52&= quot; end=3D"55" type=3D"por_el0_fmt"/>
> +    <field name=3D"P12" start=3D"48&= quot; end=3D"51" type=3D"por_el0_fmt"/>
> +    <field name=3D"P11" start=3D"44&= quot; end=3D"47" type=3D"por_el0_fmt"/>
> +    <field name=3D"P10" start=3D"40&= quot; end=3D"43" type=3D"por_el0_fmt"/>
> +    <field name=3D"P9" start=3D"36&q= uot; end=3D"39" type=3D"por_el0_fmt"/>
> +    <field name=3D"P8" start=3D"32&q= uot; end=3D"35" type=3D"por_el0_fmt"/>
> +    <field name=3D"P7" start=3D"28&q= uot; end=3D"31" type=3D"por_el0_fmt"/>
> +    <field name=3D"P6" start=3D"24&q= uot; end=3D"27" type=3D"por_el0_fmt"/>
> +    <field name=3D"P5" start=3D"20&q= uot; end=3D"23" type=3D"por_el0_fmt"/>
> +    <field name=3D"P4" start=3D"16&q= uot; end=3D"19" type=3D"por_el0_fmt"/>
> +    <field name=3D"P3" start=3D"12&q= uot; end=3D"15" type=3D"por_el0_fmt"/>
> +    <field name=3D"P2" start=3D"8&qu= ot; end=3D"11" type=3D"por_el0_fmt"/>
> +    <field name=3D"P1" start=3D"4&qu= ot; end=3D"7" type=3D"por_el0_fmt"/>
> +    <field name=3D"P0" start=3D"0&qu= ot; end=3D"3" type=3D"por_el0_fmt"/>
> +  </flags>
> +  <reg name=3D"por_el0" bitsize=3D"64" ty= pe=3D"por_el0_flags" group=3D"system"/>
> +</feature>
> diff --git a/gdb/nat/aarch64-poe-linux.h b/gdb/nat/aarch64-poe-linux.h=
> new file mode 100644
> index 00000000000..f3d0256da3f
> --- /dev/null
> +++ b/gdb/nat/aarch64-poe-linux.h
> @@ -0,0 +1,29 @@
> +/* Common native Linux definitions for AArch64 Permission Overlay Ext= ension.
> +
> +   Copyright (C) 2026 Free Software Foundation, Inc.
> +
> +   This file is part of GDB.
> +
> +   This program is free software; you can redistribute it a= nd/or modify
> +   it under the terms of the GNU General Public License as = published by
> +   the Free Software Foundation; either version 3 of the Li= cense, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be = useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warra= nty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbs= p; See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Publi= c License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.&nbs= p; */
> +
> +#include <asm/hwcap.h>

Shouldn=B4t the above be inside the include guard?

> +#ifndef GDB_NAT_AARCH64_POE_LINUX_H
> +#define GDB_NAT_AARCH64_POE_LINUX_H
> +
> +/* Feature check for Permission Overlay Extension.  */
> +#ifndef HWCAP2_POE
> +#define HWCAP2_POE (1ULL << 63)
> +#endif /* HWCAP2_POE.  */
> +
> +#endif /* GDB_NAT_AARCH64_POE_LINUX_H.  */

--_000_AS8PR08MB10099E7285C79E152E1D56E8D9BC02AS8PR08MB10099eu_--