From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id eV9OFqbZfWrEYyMAWB0awg (envelope-from ) for ; Thu, 13 Aug 2026 10:50:14 -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=G8elAIHR; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=G8elAIHR; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 556881E166; Thu, 13 Aug 2026 10:50:14 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=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 761991E09B for ; Thu, 13 Aug 2026 10:50:12 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F397F4B9DB58 for ; Thu, 13 Aug 2026 14:50:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F397F4B9DB58 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=G8elAIHR; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=G8elAIHR Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazlp170100001.outbound.protection.outlook.com [IPv6:2a01:111:f403:c200::1]) by sourceware.org (Postfix) with ESMTPS id CD0004BA9025 for ; Thu, 13 Aug 2026 14:49:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CD0004BA9025 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 CD0004BA9025 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c200::1 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1786632580; cv=pass; b=RhHxfmHCB8nAHiieHTdA0yvTc+ZlcLyedQjBb3gztWvYCwChTTzEkXj48+MeHOFoVygZfMU/pCuwQRG0SnY6wwxB1ykSsel+eqqTRflMlH7CMIqCsSL50KIrfSBVvnKEQD2BrMis8wOYgJ1nHVbi3jCk6AohG9+IToKjylhoIuY= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1786632580; c=relaxed/simple; bh=hJXJnq7K9Isp2EguZuNOVg5glbAoaX6IpG/+TOeWnos=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:Subject:To:From: MIME-Version; b=GiGid0ZvItxUA9tYFS8L78SxmRX1d6JhRyOrXzBnuEDxSmYb/PNGdHiCcGyjWmrTR6YyZIc5TwzV20g3+HkSIU0aEwBwiQUegjqfU2432yhZA29/y0Cp3LhnxnDRvqR+PhQ79E0cHuYeqWqE6To9mlJwgn0GYL2mjaCXgCKuDBc= 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=G8elAIHR; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=G8elAIHR DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CD0004BA9025 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=DoNRHWH+QEpUVR/XoQrsHN703AfjZrhNjlEeYwZAlaR3RSPnWzcUP0aWktK7DhDTrKkbN9/CECd6BNsRd2K6ni0u4svij1lmy59V1LyiwYjQ3weG/HGAzVZQ/K1WTJ9ck/41dSvhYdG3MgDdYGVuMvuoKCAyaomZ0SrzQLngkgj3prof68WRy/29rgm1T8Ddb0r7B6qLC3qkBmMjqeMYhhyTHHLBFYdsM28RJH7R0CJ3iHJLGKlt2oxa0re5ai7m83NAmb/pd28vAScQYPTueTznZOP/xQBAuOE8KnyB9R+TNJwIHPOI0RXZXOBcDvSoeWlueQdnHnxKVqVfKuY5Bg== 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=NFkxpcEFejFw2PRUxMjZTBG43NWnTBU0KvWrZKRnLug=; b=jUw8xohoPBLSvTxR78tjEhwGCM4Lgb6PXqkNDoK1JoxGSoYx12AbkIO72mdGaAMOIAsa2ScTM904hx0pqtJ7JwRzykdG2QC5ZwUglHNyA3N1PuyQyPfMoZ/T5b++yf0lCBkM16EmrRgMZUAKCoq3QcHJRydlcL1gVVoh/G8eZSOh4Xy6FOQehg50Q6b4V05pAFuBAkcSlYbLGnDVO1sy2HN2SgJH7UVBe729hu3xeR/O2zGAEPXit399eKrTyP+4+OtwClWIYT9utHz0qAVvtbryeo/VxaBU9KUmcpxOmEDzUwudixiEcpmcX62261i6oY44WhGfZWK4NKGfaYUXuQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=simark.ca 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=NFkxpcEFejFw2PRUxMjZTBG43NWnTBU0KvWrZKRnLug=; b=G8elAIHRA5GjCZ/qjGesLAgq5Jgto8toh0qmmDCx5GUvk+fat1DnDdcHJyImdzpn1KxXLMin9mMos9zLb6IpxbD8VKIyH9Q912g8TBM3AV2n/UlsLMah2+uMAN6q4328onDBOvmLFAWgmWO3dNtWNOVwvlIr5DWuXaiqHJ7v3lo= Received: from DUZPR01CA0118.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bc::29) by DB3PR08MB9058.eurprd08.prod.outlook.com (2603:10a6:10:430::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.13; Thu, 13 Aug 2026 14:49:30 +0000 Received: from DB1PEPF00039231.eurprd03.prod.outlook.com (2603:10a6:10:4bc:cafe::a7) by DUZPR01CA0118.outlook.office365.com (2603:10a6:10:4bc::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.315.14 via Frontend Transport; Thu, 13 Aug 2026 14:49:30 +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 DB1PEPF00039231.mail.protection.outlook.com (10.167.8.104) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.339.3 via Frontend Transport; Thu, 13 Aug 2026 14:49:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ai7H24a8PfUDwaf7I6oclKfuUNwViuQkTZwGGUECHeZOrXhejMu4ZYPbLdAFOsWiOiTvnK5GTdaEhI40UgDj9vSemXSPvPiPn6kagB9EtODXMvKV8VQ9orf9pGyBv+542ic6NEuCLNB1P2XjB+XkFZsZULV9w97rWSS7Qc76vuR2q0UxzS/1VAIYc2Lvvb+vBZc2POg+oIdsRcdVY2oZzOOPuEoxG3rPgEB+EXe0pTKr2qgJxp6ZqJtAy3dY7X1xqFIGDAO3mVb0ycNcnmnk+BhdFai6PICERfYqkbk1VXQm3HeLl3QtnYOTORh0oL1YtSiV1gw244W3l/5qdADRpQ== 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=NFkxpcEFejFw2PRUxMjZTBG43NWnTBU0KvWrZKRnLug=; b=x0HgthxgiuXy2B2GCLrS1Oy+8Re1egl8l1lTtOa2TCzdu5mRjKjNrf2o4chTFcO+7zOeFpmN6Nt7slE3wgUPzJA2MDiHQR1PYYM5oiMnTm8gSDF9n21HU7QHixEXbuorgJEO5pxE1R46hNTXrzK3U7gqsHZ2az4w2aYZ7SdSw/jbIxJB7DzOBaFcdnQL7SLSWZX6Jjc0egsnhv++xgQ9OvdapVYmlsb708iaqcPZ0l+q9d6S/G3+oJGaVKFjjmAW8xZwQZWRptrS31ElZg03z4ShiXzfpkAPjdG2nFwC4C+CYmKIWkS/7/irGMuPSdF+6uXh8C2BRaCHtkhZjfFfiw== 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=NFkxpcEFejFw2PRUxMjZTBG43NWnTBU0KvWrZKRnLug=; b=G8elAIHRA5GjCZ/qjGesLAgq5Jgto8toh0qmmDCx5GUvk+fat1DnDdcHJyImdzpn1KxXLMin9mMos9zLb6IpxbD8VKIyH9Q912g8TBM3AV2n/UlsLMah2+uMAN6q4328onDBOvmLFAWgmWO3dNtWNOVwvlIr5DWuXaiqHJ7v3lo= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from GV1PR08MB8667.eurprd08.prod.outlook.com (2603:10a6:150:85::13) by PAWPR08MB9784.eurprd08.prod.outlook.com (2603:10a6:102:2ea::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.14; Thu, 13 Aug 2026 14:48:57 +0000 Received: from GV1PR08MB8667.eurprd08.prod.outlook.com ([fe80::ae9c:f011:dbb4:c095]) by GV1PR08MB8667.eurprd08.prod.outlook.com ([fe80::ae9c:f011:dbb4:c095%2]) with mapi id 15.21.0315.014; Thu, 13 Aug 2026 14:48:56 +0000 Message-ID: <10ce3491-6802-480d-b2c7-fc3bf0efb60c@arm.com> Date: Thu, 13 Aug 2026 15:48:54 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5] gdb: align siginfo_t with the Linux kernel definition To: Simon Marchi , gdb-patches@sourceware.org Cc: Luis Machado , Luis Machado , Thiago Jung Bauermann , Srinath Parvathaneni , "Maciej W . Rozycki" , Andreas Schwab References: <20260728123239.211813-1-matthieu.longo@arm.com> <50ac0d4d-7039-4ec0-837c-2b2bee7add3c@simark.ca> Content-Language: en-US From: Matthieu Longo In-Reply-To: <50ac0d4d-7039-4ec0-837c-2b2bee7add3c@simark.ca> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P265CA0138.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c4::9) To GV1PR08MB8667.eurprd08.prod.outlook.com (2603:10a6:150:85::13) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: GV1PR08MB8667:EE_|PAWPR08MB9784:EE_|DB1PEPF00039231:EE_|DB3PR08MB9058:EE_ X-MS-Office365-Filtering-Correlation-Id: 122a6332-c10a-4d26-9f1a-08def94a147c x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|23010399003|376014|1800799024|366016|11063799006|10067099003|56012099006|6133799003|18002099003|22082099003|4143699003; X-Microsoft-Antispam-Message-Info-Original: wc5BOu+6660BBDs+IvDbboEqZpWQ+Wzc+mMWWQ5OD18DnM9OFQ18M8fteMMJFvmpLLpnRIhweJGAmt8WR4SaRtPvXyCQ3sFyd4oB5OP/oPWY7++FO/ffMRSVfwZvU8dqETdHts4UvyUI0m3nbwg4Fb+S6ZneOn2P1bJXo/ZjAi2RVOHDz1oahlgjXw8y3GCMB7LbXFbu12J8Bn9eDdQBzpIny6SKq6EFDdoNCyRV8VJ7EQKue89/NT7987/7c/dCO8fLwx0x2uKKoi9iNQ4JFmaRYS+ha4+f+iTMIdgUip+rQq3pm0oPZ1c3MFWoYokHyBP2NLQe4p/1TfBpNWNw/J6SbUOWfd4l1+v5V4OVnLqglKTwk1++2HOlpnE7vvmbgeGl8uNr7W6K57HCHf2Wsv/LD/JqOkvWLrOMVZkUW27OVbhre4lb5EcV6s1IUB606xYU+Z76/NMIFfn3jbcijwvm90od2D0QdpQKV7oL0psZLjpIP2zbpVmHatuFGnozoK0m0pnEU77b8afLreI8rmaHSqiv5ucnDQx6X3RYAkya2bAb17sggEBij47tfYo+jW3n/ZeYfxnSVGc+Z1UZ1rxahc557nGev+g5jCB2oQAf5IV0xQvUnAQhRKq3RHSw/dTirACV0iSsPWQAvv32b5VZzoJIlGPoYAHS+KpcOSE= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV1PR08MB8667.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(11063799006)(10067099003)(56012099006)(6133799003)(18002099003)(22082099003)(4143699003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: SKsyi5IdhK6YWwVXxUT9drg+5zX6Xehgs8kuTTQknGe1hRiYs4k4t4nDJh+3vLk67dQbt5urP9cEHZhB23TyJ9wZiJDfImhaYFsefQkQVtVuoy5ucPdrKZ9Do2NPlkpe9L6xyfQM4zu+BG3kICl2yF8DWbYirWixT52FViysCLRMyyo4wQNCqrtcTHKVyNZgiaVe5DKxKYUltzwMi3jcS+8c/Wf7uLkBcU2R8DBvHy7U8BXk4AVBkmU3rN4HYQnxgpFsVqyfpLQfbJiXuLssSmwdBlaK0ljD7t5Q+798JNTGhqTUlmwE5Cqbimm/YGTYB5pA/2QgLzgaPplYjyNwqg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9784 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF00039231.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4a9b446a-9215-40d9-4b39-08def94a0077 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700016|35042699022|14060799003|1800799024|23010399003|82310400026|13003099007|6133799003|10067099003|4143699003|56012099006|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: WuseDMSBud0OUFKV7YrnlZyOYsSYKX+Srjd4QdCY5vAJUqc+P35O7mOlIAGzNYxlz46ItLnRDSBmfn8Ly55xbpGyC0hWYwcjJCADWFHtQnVXDliFOLoz8ZiAtsX9GqnZFxNurpy1EtOEJTgixqAqRPIbfQXuUGJQEPCbuobS/f7vPGpa1W/bTSjPf5nbHHHNy9ZNtC4pORiCponF7Oj5nScu1Z5OezBySXAJ4QkMl3oiCB0UuI2XR9ZLgaHkREE9zM/vJb9HUtAGvyEDkUbSlrtU5B3NjH9XOClRBhrXirtvNAcelRJvmS189Em/3rIOIMudhMynn+vmnwOBavQ70G9DHkJCOPcsZEHuJBHQZPX7eEcNy34KaMEQCcaczV8ZIla3NKI2H6rOCicoC8irFOCEQWkhaiszE2i+2Wpqr/Ngtj6L6Ae+BMmozbRfxvLoEirJ5+EKANha3YOov0d5XZSx+hIlRZH8FjQTElo7oEMIuABC3Oo4yywjM+j+JS2G2Y3xPqtcL2E3pR6Ke4M9HDnzo0Am1YDWXvj71l4IecpU0ALd0HT5+VKiKMxRFqQGgxP0l4wnr88PSjHUth5hpj322qokuUJqzkJ/Lp7YhPnnexlcdgYn1NdElznTwLW+JXcFWu7M3nUK1LWt8NF8INVy0QUIXNihQUXCYOYJdztWi2cevR3LUZFUTedbG/9r/7w3j4/f6QeJQZOECJm45w== 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)(376014)(36860700016)(35042699022)(14060799003)(1800799024)(23010399003)(82310400026)(13003099007)(6133799003)(10067099003)(4143699003)(56012099006)(11063799006)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: w2KSBdv4S3FfS+qEooWVWY8KMSFwwDj9KDWzBvduLiYonG9A45XqxTYk8WUS90T4flHCy2w3rmxkn0HbjnY3la9YUAIMcdeV3X9aG+7IIzK0I+pj9ba1eSdm98nt37aR1Z2cfmVehpBEvum0s5hVe4TqcnEXV8Sh4VUsw+2GDrZWvLKuVDi58x2heP5hhlL5r7DUI99eOtJm27BBQCdVD3yZLM8RZfMZYHWAy6HB80zdbybDCy5KJwTV/sQK+rCOVjlNwdJEPTuGe2e5KcKHd8sKWeDvZrAPSx8YeDBbuFQLob25zK5uVEFKwl6GJcw6OOt3psQ9HXuTvsUt/3UOAubapIEs7tKXU1i2KoeHpLzSNISvKPfve02gb+k0MR/z9UDZc988U6+EtLa6uQMj+GbxyrinzaYgb1vcvuJPLf7537QwTaLFFO8flLUHJK5V X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Aug 2026 14:49:29.8671 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 122a6332-c10a-4d26-9f1a-08def94a147c 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: DB1PEPF00039231.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB9058 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 On 12/08/2026 20:08, Simon Marchi wrote: > On 7/28/26 8:32 AM, Matthieu Longo wrote: >> GDB's current definition of siginfo_t is missing many fields present in >> the Linux kernel definition [1]. >> >> These fields are useful for providing detailed, user-friendly diagnostics >> when a fault occurs. Some new AArch64 extensions, such as Permission >> Overlay Enhancement used to implement Protection Keys [2], require the >> debugger to inspect 'si_pkey' alongside 'si_addr' to help the user identify >> the problematic key. >> >> This patch aligns GDB's definition of the __sifields._sigfault member of >> siginfo_t with the definition from the Linux kernel master branch. >> >> To avoid hardcoding the field access paths throughout the codebase, this >> patch also introduces compile-time accessors for the siginfo_t attributes, >> centralizing their definitions in a single location and making future >> updates easier. >> >> Finally, extend the testsuite to verify access to the new si_pkey field >> and its preservation when modifying $_siginfo and when reading core files. >> The tests in siginfo-obj.exp rely on the siginfo_t definition provided by >> glibc's , which does not yet expose all of the fields present in >> the kernel definition. As a result, the tests cannot exercise every newly >> added field and therefore focus on si_pkey, the field motivating this change. >> The test validates that GDB can read and modify the field correctly; it does >> not attempt to generate a real protection-key fault. >> >> [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ >> tree/include/uapi/asm-generic/siginfo.h#n69 >> [2]: https://lore.kernel.org/all/20160212210213.ABC488FA@viggo.jf.intel.com/ >> >> Reviewed-by: Thiago Jung Bauermann >> --- >> gdb/aarch64-linux-tdep.c | 8 ++-- >> gdb/linux-tdep.c | 52 +++++++++++++++++++--- >> gdb/linux-tdep.h | 60 ++++++++++++++++++++++++++ >> gdb/sparc64-linux-tdep.c | 6 ++- >> gdb/testsuite/gdb.base/siginfo-obj.c | 1 + >> gdb/testsuite/gdb.base/siginfo-obj.exp | 14 ++++++ >> 6 files changed, 131 insertions(+), 10 deletions(-) >> >> diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c >> index f11eccc1bc1..235b35bcfb4 100644 >> --- a/gdb/aarch64-linux-tdep.c >> +++ b/gdb/aarch64-linux-tdep.c >> @@ -2683,13 +2683,15 @@ aarch64_linux_report_signal_info (struct gdbarch *gdbarch, >> >> try >> { >> + using gdb_si = gdb::siginfo_type; >> + using si_key = gdb::siginfo_type::key; >> /* Sigcode tells us if the segfault is actually a memory tag >> violation. */ >> - si_code = parse_and_eval_long ("$_siginfo.si_code"); >> - si_errno = parse_and_eval_long ("$_siginfo.si_errno"); >> + si_code = parse_and_eval_long (gdb_si::get (si_key::siginfo_code)); >> + si_errno = parse_and_eval_long (gdb_si::get (si_key::siginfo_errno)); >> >> fault_addr >> - = parse_and_eval_long ("$_siginfo._sifields._sigfault.si_addr"); >> + = parse_and_eval_long (gdb_si::get (si_key::siginfo_addr)); >> } >> catch (const gdb_exception_error &exception) >> { >> diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c >> index 25d625db595..740043a9292 100644 >> --- a/gdb/linux-tdep.c >> +++ b/gdb/linux-tdep.c >> @@ -272,10 +272,9 @@ static struct type * >> linux_get_siginfo_type (struct gdbarch *gdbarch) >> { >> struct linux_gdbarch_data *linux_gdbarch_data; >> - struct type *void_ptr_type; >> struct type *uid_type, *pid_type; >> struct type *sigval_type, *clock_type; >> - struct type *siginfo_type, *sifields_type; >> + struct type *siginfo_type, *sifields_type, *sigfault_union_type; >> struct type *type; >> >> linux_gdbarch_data = get_linux_gdbarch_data (gdbarch); >> @@ -285,11 +284,22 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) >> type_allocator alloc (gdbarch); >> >> const struct builtin_type *builtin_types = builtin_type (gdbarch); >> + struct type *short_type = builtin_types->builtin_short; >> struct type *int_type = builtin_types->builtin_int; >> struct type *uint_type = builtin_types->builtin_unsigned_int; >> struct type *long_type = builtin_types->builtin_long; >> - >> - void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void); >> + struct type *unsigned_long_type = builtin_types->builtin_unsigned_long; >> + struct type *uint32_type = builtin_types->builtin_uint32; >> + struct type *void_ptr_type >> + = lookup_pointer_type (builtin_type (gdbarch)->builtin_void); >> + >> + /* Compute padding length, i.e. __ADDR_BND_PKEY_PAD. */ >> + unsigned alignof_void_ptr = type_align (void_ptr_type); >> + unsigned padding_size = (alignof_void_ptr < short_type->length () >> + ? short_type->length () >> + : alignof_void_ptr); >> + struct type *addr_bnd_pkey_padding_type >> + = init_vector_type (builtin_types->builtin_uint8, padding_size); >> >> /* sival_t */ >> sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); >> @@ -364,9 +374,41 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) >> append_composite_type_field (type, "si_stime", clock_type); >> append_composite_type_field (sifields_type, "_sigchld", type); >> >> - /* _sigfault */ >> + /* Begin _sigfault's anonymous union. */ >> + sigfault_union_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); >> + /* used on alpha and sparc */ >> + append_composite_type_field (sigfault_union_type, "si_trapno", int_type); >> + /* used when si_code is BUS_MCEERR_AR or BUS_MCEERR_AO. */ >> + append_composite_type_field (sigfault_union_type, "si_addr_lsb", short_type); >> + >> + /* used when si_code=SEGV_BNDERR */ >> + type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); >> + append_composite_type_field (type, "_dummy_bnd", addr_bnd_pkey_padding_type); >> + append_composite_type_field (type, "si_lower", void_ptr_type); >> + append_composite_type_field (type, "si_upper", void_ptr_type); >> + append_composite_type_field (sigfault_union_type, "_addr_bnd", type); >> + >> + /* used when si_code=SEGV_PKUERR */ >> + type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); >> + append_composite_type_field (type, "_dummy_pkey", addr_bnd_pkey_padding_type); >> + append_composite_type_field (type, "si_pkey", uint32_type); >> + append_composite_type_field (sigfault_union_type, "_addr_pkey", type); >> + >> + /* used when si_code=TRAP_PERF */ >> + type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); >> + append_composite_type_field (type, "si_perf_data", unsigned_long_type); >> + append_composite_type_field (type, "si_perf_type", uint32_type); >> + append_composite_type_field (type, "si_perf_flags", uint32_type); >> + append_composite_type_field (sigfault_union_type, "_perf", type); >> + >> + /* End _sigfault's anonymous union. */ >> + >> + /* _sigfault is set by SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */ >> type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); >> append_composite_type_field (type, "si_addr", void_ptr_type); >> + /* Since there is no possibility to declare an anonymous union, >> + using '_anon_union' instead. */ >> + append_composite_type_field (type, "_anon_union", sigfault_union_type); I set the name to "", and it works as you mentioned below. I also fixed the usages in gdb/testsuite/gdb.base/siginfo-obj.exp diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 4660772752d..bbc4009d43c 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -406,9 +406,8 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) /* _sigfault is set by SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_addr", void_ptr_type); - /* Since there is no possibility to declare an anonymous union, - using '_anon_union' instead. */ - append_composite_type_field (type, "_anon_union", sigfault_union_type); + /* Note: this is an anonymous union. */ + append_composite_type_field (type, "", sigfault_union_type); append_composite_type_field (sifields_type, "_sigfault", type); /* _sigpoll */ diff --git a/gdb/linux-tdep.h b/gdb/linux-tdep.h index 43ed38c6633..1f40756eb2f 100644 --- a/gdb/linux-tdep.h +++ b/gdb/linux-tdep.h @@ -143,14 +143,14 @@ struct siginfo_type /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */ "$_siginfo._sifields._sigfault.si_addr", - "$_siginfo._sifields._sigfault._anon_union.si_trapno", - "$_siginfo._sifields._sigfault._anon_union.si_addr_lsb", - "$_siginfo._sifields._sigfault._anon_union._addr_bnd.si_lower", - "$_siginfo._sifields._sigfault._anon_union._addr_bnd.si_upper", - "$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey", - "$_siginfo._sifields._sigfault._anon_union._perf.si_perf_data", - "$_siginfo._sifields._sigfault._anon_union._perf.si_perf_type", - "$_siginfo._sifields._sigfault._anon_union._perf.si_perf_flags", + "$_siginfo._sifields._sigfault.si_trapno", + "$_siginfo._sifields._sigfault.si_addr_lsb", + "$_siginfo._sifields._sigfault._addr_bnd.si_lower", + "$_siginfo._sifields._sigfault._addr_bnd.si_upper", + "$_siginfo._sifields._sigfault._addr_pkey.si_pkey", + "$_siginfo._sifields._sigfault._perf.si_perf_data", + "$_siginfo._sifields._sigfault._perf.si_perf_type", + "$_siginfo._sifields._sigfault._perf.si_perf_flags", }; return paths[static_cast (attr_)]; } diff --git a/gdb/testsuite/gdb.base/siginfo-obj.exp b/gdb/testsuite/gdb.base/siginfo-obj.exp index 5e36b334068..a724a634dc0 100644 --- a/gdb/testsuite/gdb.base/siginfo-obj.exp +++ b/gdb/testsuite/gdb.base/siginfo-obj.exp @@ -115,7 +115,7 @@ gdb_test "p \$_siginfo._sifields._sigfault.si_addr = 0x666" " = \\(void \\*\\) 0 gdb_test "p \$_siginfo.si_errno = 666" " = 666" gdb_test "p \$_siginfo.si_code = 999" " = 999" gdb_test "p \$_siginfo.si_signo = 11" " = 11" -gdb_test "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey = 123" " = 123" +gdb_test "p \$_siginfo._sifields._sigfault._addr_pkey.si_pkey = 123" " = 123" with_test_prefix "validate modified siginfo fields" { gdb_test "break $bp_location" @@ -143,7 +143,7 @@ if {$gcore_created} { gdb_test "p \$_siginfo._sifields._sigfault.si_addr" \ " = \\(void \\*\\) $ssi_addr" \ "p \$_siginfo._sifields._sigfault.si_addr from core file" - gdb_test "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey" \ + gdb_test "p \$_siginfo._sifields._sigfault._addr_pkey.si_pkey" \ " = $ssi_pkey" \ - "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey from core file" + "p \$_siginfo._sifields._sigfault._addr_pkey.si_pkey from core file" } > > Can you expand on why it's not possible to have an anonymous union? It > is certainly possible to have anonymous unions described in DWARF, which > are then translated to struct types. > I simply could not find how to implement it. It might be useful to add to the documentation of append_composite_type_field_aligned() or maybe better, to the comment in gdb/gdbtypes.h above the declaration of append_composite_type_field(), a sentence explaining what is the effect of providing an empty name. diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index dd2d24fa8e2..e4fedd886c4 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -2431,11 +2431,12 @@ extern struct type *init_pointer_type (type_allocator &alloc, int bit, extern struct type *init_fixed_point_type (type_allocator &, int, int, const char *); -/* Helper functions to construct a struct or record type. An - initially empty type is created using arch_composite_type(). - Fields are then added using append_composite_type_field*(). A union - type has its size set to the largest field. A struct type has each - field packed against the previous. */ +/* Helper functions to construct a struct or record type. An initially empty + type is created using arch_composite_type(). Fields are then added using + append_composite_type_field*(). + A union type has its size set to the largest field. A struct type has each + field packed against the previous. + If no name is specified, the type is anonymous. */ extern struct type *arch_composite_type (struct gdbarch *gdbarch, const char *name, enum type_code code); > I think that the ideal user experience would be for users to be able to > access fields the same way that they do in the code, that is > `si.si_pkey`. All the _sigfault/_addr_pkey/etc parts are implementation > details that could change. > > On top of your patch, if I just delete all the internal field names, it > seems to work just fine, see patch below. In the end it models > something like this in C: > I am not against it. However, could this suggestion be addressed in a different patch ? Simplifying the existing pathes to si_* values with anonymous structs would increase the impact of the original patch, with potentially additional testing and carefulness required for others architectures (for example, see gdb/nat/amd64-linux-siginfo.c L269). Matthieu > struct siginto_t > { > union > { > // kill > struct > { > int si_pid; > int si_uid; > }; > > // timer > struct > { > int si_tid; > int si_overrun; > int si_sys_private; > }; > > ... > }; > }; > > > diff --git i/gdb/linux-tdep.c w/gdb/linux-tdep.c > index 4660772752d6..f21fa1e18578 100644 > --- i/gdb/linux-tdep.c > +++ w/gdb/linux-tdep.c > @@ -349,21 +349,21 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "si_pid", pid_type); > append_composite_type_field (type, "si_uid", uid_type); > - append_composite_type_field (sifields_type, "_kill", type); > + append_composite_type_field (sifields_type, "", type); > > /* _timer */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "si_tid", int_type); > append_composite_type_field (type, "si_overrun", int_type); > append_composite_type_field (type, "si_sigval", sigval_type); > - append_composite_type_field (sifields_type, "_timer", type); > + append_composite_type_field (sifields_type, "", type); > > /* _rt */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "si_pid", pid_type); > append_composite_type_field (type, "si_uid", uid_type); > append_composite_type_field (type, "si_sigval", sigval_type); > - append_composite_type_field (sifields_type, "_rt", type); > + append_composite_type_field (sifields_type, "", type); > > /* _sigchld */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > @@ -372,7 +372,7 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) > append_composite_type_field (type, "si_status", int_type); > append_composite_type_field (type, "si_utime", clock_type); > append_composite_type_field (type, "si_stime", clock_type); > - append_composite_type_field (sifields_type, "_sigchld", type); > + append_composite_type_field (sifields_type, "", type); > > /* Begin _sigfault's anonymous union. */ > sigfault_union_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); > @@ -386,20 +386,20 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) > append_composite_type_field (type, "_dummy_bnd", addr_bnd_pkey_padding_type); > append_composite_type_field (type, "si_lower", void_ptr_type); > append_composite_type_field (type, "si_upper", void_ptr_type); > - append_composite_type_field (sigfault_union_type, "_addr_bnd", type); > + append_composite_type_field (sigfault_union_type, "", type); > > /* used when si_code=SEGV_PKUERR */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "_dummy_pkey", addr_bnd_pkey_padding_type); > append_composite_type_field (type, "si_pkey", uint32_type); > - append_composite_type_field (sigfault_union_type, "_addr_pkey", type); > + append_composite_type_field (sigfault_union_type, "", type); > > /* used when si_code=TRAP_PERF */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "si_perf_data", unsigned_long_type); > append_composite_type_field (type, "si_perf_type", uint32_type); > append_composite_type_field (type, "si_perf_flags", uint32_type); > - append_composite_type_field (sigfault_union_type, "_perf", type); > + append_composite_type_field (sigfault_union_type, "", type); > > /* End _sigfault's anonymous union. */ > > @@ -408,21 +408,21 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) > append_composite_type_field (type, "si_addr", void_ptr_type); > /* Since there is no possibility to declare an anonymous union, > using '_anon_union' instead. */ > - append_composite_type_field (type, "_anon_union", sigfault_union_type); > - append_composite_type_field (sifields_type, "_sigfault", type); > + append_composite_type_field (type, "", sigfault_union_type); > + append_composite_type_field (sifields_type, "", type); > > /* _sigpoll */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "si_band", long_type); > append_composite_type_field (type, "si_fd", int_type); > - append_composite_type_field (sifields_type, "_sigpoll", type); > + append_composite_type_field (sifields_type, "", type); > > /* _sigsys */ > type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > append_composite_type_field (type, "_call_addr", void_ptr_type); > append_composite_type_field (type, "_syscall", int_type); > append_composite_type_field (type, "_arch", uint_type); > - append_composite_type_field (sifields_type, "_sigsys", type); > + append_composite_type_field (sifields_type, "", type); > > /* struct siginfo */ > siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); > @@ -431,7 +431,7 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) > append_composite_type_field (siginfo_type, "si_errno", int_type); > append_composite_type_field (siginfo_type, "si_code", int_type); > append_composite_type_field_aligned (siginfo_type, > - "_sifields", sifields_type, > + "", sifields_type, > long_type->length ()); > > linux_gdbarch_data->siginfo_type = siginfo_type; > diff --git i/gdb/testsuite/gdb.base/siginfo-obj.exp w/gdb/testsuite/gdb.base/siginfo-obj.exp > index 5e36b3340680..272d74ac2805 100644 > --- i/gdb/testsuite/gdb.base/siginfo-obj.exp > +++ w/gdb/testsuite/gdb.base/siginfo-obj.exp > @@ -111,11 +111,11 @@ gdb_test "continue" ".*Program received signal SIGSEGV.*" \ > "continue to signal, 2nd" > > set test "set si_addr" > -gdb_test "p \$_siginfo._sifields._sigfault.si_addr = 0x666" " = \\(void \\*\\) 0x666" > +gdb_test "p \$_siginfo.si_addr = 0x666" " = \\(void \\*\\) 0x666" > gdb_test "p \$_siginfo.si_errno = 666" " = 666" > gdb_test "p \$_siginfo.si_code = 999" " = 999" > gdb_test "p \$_siginfo.si_signo = 11" " = 11" > -gdb_test "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey = 123" " = 123" > +gdb_test "p \$_siginfo.si_pkey = 123" " = 123" > > with_test_prefix "validate modified siginfo fields" { > gdb_test "break $bp_location" > @@ -140,10 +140,10 @@ if {$gcore_created} { > "p \$_siginfo.si_errno from core file" > gdb_test "p \$_siginfo.si_code" " = $ssi_code" \ > "p \$_siginfo.si_code from core file" > - gdb_test "p \$_siginfo._sifields._sigfault.si_addr" \ > + gdb_test "p \$_siginfo.si_addr" \ > " = \\(void \\*\\) $ssi_addr" \ > - "p \$_siginfo._sifields._sigfault.si_addr from core file" > - gdb_test "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey" \ > + "p \$_siginfo.si_addr from core file" > + gdb_test "p \$_siginfo.si_pkey" \ > " = $ssi_pkey" \ > - "p \$_siginfo._sifields._sigfault._anon_union._addr_pkey.si_pkey from core file" > + "p \$_siginfo.si_pkey from core file" > } > > Simon