From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id IYTXLqOPNmmcByMAWB0awg (envelope-from ) for ; Mon, 08 Dec 2025 03:43:15 -0500 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=G7u0asjW; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id BAFA81E0B3; Mon, 08 Dec 2025 03:43:15 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_SBL_CSS,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=no autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 041751E048 for ; Mon, 08 Dec 2025 03:43:15 -0500 (EST) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8F84A4CF32B9 for ; Mon, 8 Dec 2025 08:43:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8F84A4CF32B9 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=G7u0asjW Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011034.outbound.protection.outlook.com [52.101.52.34]) by sourceware.org (Postfix) with ESMTPS id 15AAB4CF31EA for ; Mon, 8 Dec 2025 08:42:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 15AAB4CF31EA Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=amd.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 15AAB4CF31EA Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=52.101.52.34 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1765183366; cv=pass; b=C7EuYEwTP0WDblUWW+7NZaRTYlRWpzvH2MhjKgpmKYjpMowgQkNn+7B2F18O/XGkOgV79iDYyoJabUb8P+NDRDNr/Yy2MYt25yBo5oNXDqdBHjiVbX5yHjA8HbuqsquFmPvKvgkByBAr5kIRv8xWPGRsD2yEtyvZ2oAgUozPnQk= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1765183366; c=relaxed/simple; bh=6Wb8PQmoPKACvGrQiSdp8DDtIUlSenYLTwQtnWLSA0A=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=GPt5ec2xYMgQjByNf5WNCoDysR+f0BANovhJj3pUkGnfV+48WFAqhG2glOnMu6gefOAGz99l5YSpcR3ecpSgOQ5AAN9/J+T07kjWKetvih6Jv6bs5FL9sOJw9r7uVmdkgqVjrEOrU6QGn+WmVjfl7MFTu100NvqoG5xc23iUrH4= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 15AAB4CF31EA ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G6ABsxRDHsJjXn0yEncBiP7b+OTYpmaXWuG2vAfmDZXVtky0n0sDv2Jr+0sAqzOcBGDZBSk0/HK01yTJ222K5ULy2y/fdE5ow52xFiz8QpPm+NC825LYfgH9YHr/kfEvZ+Qd38M/Ajb+t5N5iIhDWLCn3nCQIFCkPsIhV8PGGeiiwekUx+ZKGuhjDRAMUSBiqvJMl+tE6m7StOldOtBw9q2HJeL47+nk9X+qVwKH7ujpWTDuHYAVRWmPrXuLbGXhG2xKwPJefsRbuTeFeZKXe16BlT0rMOOPkdkgs2ygkTrjSje4z7yGtI3vAcu4zSkv4C/PUs8s4cw7/KWtRwQhQA== 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=4PtC7fNje8yO29dSHfjNmXFY/vPrp95QcW94PBgGwRI=; b=X5HiDpKYMX4AlAOaFIdbsTrgZOiQmN9wlkyNZ57gx30clBdysFEAnnOgF7tJenkX6ttYeHtFg74Ir/YYFL3nsHZkCJAEUAmYZtk61e8PR5ulqZQeFMJaOaK4uaiXqwsisdsVXayIIYNdWja6O/a02ZxG5UAmmjyZunnR9052jHiPifphmsiOQq58TNUnvAAfB2uMMJGrqn9MdDnOc91xpKLqVzXr3OPF7tdNsRpX6nLVOivNwdolrzTU/zFQgs1U4G74Xz5vqP2b8NeqHN5txqhCHJFZXc5V/NxiEWGampeDXFyzY1EP8zp8BXKV6zWEhxSGsalLTtlg3w9ByLK7EQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=sourceware.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4PtC7fNje8yO29dSHfjNmXFY/vPrp95QcW94PBgGwRI=; b=G7u0asjWcHzOXMVQN5ZoVbmDsvirgdvigeBgZ/XdnVXf/LxkDqZRpzAEgxbCHe1rAS6/PnPGucn+1YV9D1TzwvJqC44v55LDUf9pxP23o+SVilwwmmaNmMphDcmAe5SPwN917Ehy5xCM/BKDcW6Tj+aMtUUxyBlyCBVT37fusKU= Received: from PH5P222CA0009.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::14) by DS7PR12MB8252.namprd12.prod.outlook.com (2603:10b6:8:ee::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9388.14; Mon, 8 Dec 2025 08:42:42 +0000 Received: from CY4PEPF0000EE34.namprd05.prod.outlook.com (2603:10b6:510:34b:cafe::ca) by PH5P222CA0009.outlook.office365.com (2603:10b6:510:34b::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9388.14 via Frontend Transport; Mon, 8 Dec 2025 08:42:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CY4PEPF0000EE34.mail.protection.outlook.com (10.167.242.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.4 via Frontend Transport; Mon, 8 Dec 2025 08:42:42 +0000 Received: from amd-System-Product-Name.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Mon, 8 Dec 2025 02:42:39 -0600 From: Vignesh Balasubramanian To: , , , , , CC: Vignesh Balasubramanian Subject: [PATCH 32 2/2] gcore: Create a new .note section for x86 Date: Mon, 8 Dec 2025 14:08:21 +0530 Message-ID: <20251208083819.2560894-3-vigbalas@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251208083819.2560894-1-vigbalas@amd.com> References: <20251208083819.2560894-1-vigbalas@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE34:EE_|DS7PR12MB8252:EE_ X-MS-Office365-Filtering-Correlation-Id: a5779243-2729-4942-d958-08de3635c05f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|82310400026|376014|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LrPbs0Bi8+PdtyTiU7H8Zt/ReUnVGE5gbiyVYNXhqaU3V0dQ3Dxr+THAulw7?= =?us-ascii?Q?miaeZsBXiL1GjEv/CSsAdNw+7KNij04Ct42qEJa03tIDF63ZvEC+UGDxaolS?= =?us-ascii?Q?kGwSbrIr5L4FU9vKyT4zh4bbX2R4NztS6MZR4Lt6miRDs43BIa9iL0BKvhlx?= =?us-ascii?Q?UeM2mxG5FFKl5NYeP5cum6UaPMG8NWZANHwRzrGMj8DNcxnTujCn3bemXJA0?= =?us-ascii?Q?5IbR4yqDbehPjimjys1WFvofbXueSetetMnn/n6xjwWrDUmUP5J32adktYnF?= =?us-ascii?Q?fqqTzTuhUuZ5qjcbemynQ/nMQ+5hU4NND4yQlxtFtiEcBoOkARAsmlVCeILH?= =?us-ascii?Q?h/FIqJfn7nIf+qDJRi2j+hPGWwIj8BqccTK9m5buBCJ0/Vz4bF2tPmQHE8Dg?= =?us-ascii?Q?c4we+d2e5V1n3mNc1DhtbuU68sdMzQ2QdNZ9nFgAXVFtBsWnUk/ps6CVAJtY?= =?us-ascii?Q?qGk2LYHV7xiwOnnywo58oBR3yPGbNaPvWxRtZTX4jpH8T/vPLqPxDkiVGalR?= =?us-ascii?Q?rmxQ81HdIjwIW2nRknbBRFDrjoNL4xfX1MNBJXn0RCWFadHDK+Yp8znO6RJ3?= =?us-ascii?Q?rQcm5vKoMC1FL01dns6Jpug1PM0D32nbhnkqQbbOxWXlQLCzpnqo7w0/j8bb?= =?us-ascii?Q?VP4VdDmj3Pekjqrh9TbUXYs0Xyg6Cr3x8b9Hqd6BJGHLc+ZY3QS23mxfa23D?= =?us-ascii?Q?5/Ddf9iRQFC/hRvjshxCKTwnf1UfzCTCfdohQxi4lU8ZnAycocSNEJVl6bfS?= =?us-ascii?Q?SZedWr8n+AQ0RNIwUkrNvOdFGgUhvhYahFUH1XUDcqi6QHDzksPO7P+tfJJT?= =?us-ascii?Q?pMD1i2wd30mXaOIko2bEqI0g2Q1sxU8jaesONy5l7v7lyHCp5t16kr6oBBAB?= =?us-ascii?Q?7/Brj8jl/7J12YVkesGEF/z3dfwcfNsqepnBTd/9i+LY4lQGsElaLG4xev37?= =?us-ascii?Q?MaF3AfWHC8wRPbAH2AMAeULMaEevFMXQc1zgjXGowgf7lEGlsdHyBBm6YTiq?= =?us-ascii?Q?934aOkiscqBnc1IEvIavMDuy8G2dOBKnKC5k+wLQuEq4n11w0Sn1/SZLuli9?= =?us-ascii?Q?8JDr0gO7rdiKLYvm3yMV2sWCygO20at+vK/+r10FZtCAxmv4e/kF1ZC3taFb?= =?us-ascii?Q?xkbNa2EUkPBuXjCYikkQB/eTzeA+ZOeoc9X1b1X37XGK2Ii8HYu/4k3avM3W?= =?us-ascii?Q?r5Eei6dAa3ZJVzAhzoZYMHfu1rM5KzxUJJ79w0dxufG7sO/0eojcIOGQkbeX?= =?us-ascii?Q?6XiWVSEHUxm84MFkY8SxIY0rNP9vkjMelhmlab5KEMgmXqSnzD8oRGXfcMo2?= =?us-ascii?Q?T+amb0sYw5Egh9JB5j72MnfL2urTM0nTyBcbwkvRGiPZqLsnMm1G8QVL+K9l?= =?us-ascii?Q?WTFTVpF0uXzUeQWFB+yfmfUaTw0OOBTmH4ty67AcY7+6n58vmNc+D2nvTtys?= =?us-ascii?Q?X8nHxuxBdRJxFPyTTSSK1bm4Vqb5VrRZX5vzm83mrzGqJp3VizokwYwmyFrS?= =?us-ascii?Q?JD7LJYPPjDF62TwfMrUyw47EDzpTa+9aLSA82XVpXZtUgnptS+UivNQPl6bm?= =?us-ascii?Q?zg8Fru9kujuhJllXNkA=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:satlexmb07.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014)(13003099007); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2025 08:42:42.0990 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a5779243-2729-4942-d958-08de3635c05f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE34.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8252 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 This new .note section contains the offset and size information of the xsave features present in the machine where the core file is dumped. It helps to avoid reliance on predetermined and possibly incorrect offsets of the xsave features. Please refer the linux commit below for further details. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/x86/kernel/fpu/xstate.c?id=ba386777a30b38dabcc7fb8a89ec2869a09915f7 Co-Authored-By: Jini Susan George V2 -> V3: Removed malloc in "form_x86_xsave_cpuid_records" and used the vector instead. Some NITs --- gdb/gcore-elf.c | 18 ++++++++++++++++++ gdb/gcore-elf.h | 8 ++++++++ gdb/linux-tdep.c | 1 + gdb/nat/x86-xstate.c | 31 +++++++++++++++++++++++++++++++ gdb/nat/x86-xstate.h | 6 ++++++ gdb/target-debug.h | 6 ++++++ gdb/target-delegates-gen.c | 26 ++++++++++++++++++++++++++ gdb/target.c | 5 +++++ gdb/target.h | 10 ++++++++++ gdb/x86-linux-nat.c | 6 ++++++ gdb/x86-linux-nat.h | 1 + gdbsupport/x86-xstate.h | 2 ++ 12 files changed, 120 insertions(+) diff --git a/gdb/gcore-elf.c b/gdb/gcore-elf.c index 1e4376dab5e..33ee306ca6a 100644 --- a/gdb/gcore-elf.c +++ b/gdb/gcore-elf.c @@ -162,3 +162,21 @@ gcore_elf_make_tdesc_note (struct gdbarch *gdbarch, bfd *obfd, tdesc_len)); } } + +/* See gcore-elf.h. */ + +void +gcore_elf_make_target_specific_note (struct gdbarch *gdbarch, bfd *obfd, + gdb::unique_xmalloc_ptr *note_data, + int *note_size) +{ + std::vector data = target_specific_core_note (); + + if (!data.empty ()) + note_data->reset (elfcore_write_register_note (obfd, + note_data->release (), + note_size, + ".reg-xsave-layout", + data.data(), + data.size() * sizeof (data[0]))); +} diff --git a/gdb/gcore-elf.h b/gdb/gcore-elf.h index c43d0df741e..394e9195141 100644 --- a/gdb/gcore-elf.h +++ b/gdb/gcore-elf.h @@ -45,4 +45,12 @@ extern void gcore_elf_make_tdesc_note (struct gdbarch *gdbarch, bfd *obfd, gdb::unique_xmalloc_ptr *note_data, int *note_size); +/* Add content to *NOTE_DATA (and update *NOTE_SIZE) to include a note + containing the description of XSAVE Layout. */ + +extern void gcore_elf_make_target_specific_note + (struct gdbarch *gdbarch, bfd *obfd, + gdb::unique_xmalloc_ptr *note_data, + int *note_size); + #endif /* GDB_GCORE_ELF_H */ diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 10843613c5d..cfebffc1206 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -2447,6 +2447,7 @@ linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size) per-thread tdesc, so just emit the tdesc for the signalled thread. */ gdbarch = target_thread_architecture (signalled_thr->ptid); gcore_elf_make_tdesc_note (gdbarch, obfd, ¬e_data, note_size); + gcore_elf_make_target_specific_note (gdbarch, obfd, ¬e_data, note_size); return note_data; } diff --git a/gdb/nat/x86-xstate.c b/gdb/nat/x86-xstate.c index 6f2dfde9448..e7a42952ee5 100644 --- a/gdb/nat/x86-xstate.c +++ b/gdb/nat/x86-xstate.c @@ -62,3 +62,34 @@ x86_fetch_xsave_layout (uint64_t xcr0, int len) layout.pkru_offset = xsave_feature_offset (xcr0, X86_XSTATE_PKRU_ID); return layout; } + +/* See x86-xstate.h. */ + +std::vector +form_x86_xsave_cpuid_records () +{ + uint32_t ax = 0, bx = 0, cx = 0, dx = 0; + int features_present = 0; + std::vector data; + + if (x86_cpuid_count (0xd, 0, &ax, &bx, &cx, &dx)) + features_present = ax; + + for (int i = 2; i < MAX_XSAVE_CPUID_RECORDS; i++) + if (features_present & (1U << i)) + { + if (x86_cpuid_count (0xd, i, &ax, &bx, &cx, &dx)) + { + data.push_back (i); + data.push_back (ax); + data.push_back (bx); + data.push_back (cx); + } + ax = 0; + bx = 0; + cx = 0; + dx = 0; + } + + return data; +} diff --git a/gdb/nat/x86-xstate.h b/gdb/nat/x86-xstate.h index 0046ab8dc78..25dc686d472 100644 --- a/gdb/nat/x86-xstate.h +++ b/gdb/nat/x86-xstate.h @@ -32,4 +32,10 @@ int x86_xsave_length (); x86_xsave_layout x86_fetch_xsave_layout (uint64_t xcr0, int len); +/* Form a array of records for each XSAVE feature present containing + its type, size, offset and flags via CPUID. These will make a .note + section in core file. */ + +std::vector form_x86_xsave_cpuid_records (); + #endif /* GDB_NAT_X86_XSTATE_H */ diff --git a/gdb/target-debug.h b/gdb/target-debug.h index 3e41e986b6c..a2e04a7b218 100644 --- a/gdb/target-debug.h +++ b/gdb/target-debug.h @@ -195,6 +195,12 @@ target_debug_print_std_vector_static_tracepoint_marker (const std::vector &vec) { return host_address_to_string (vec.data ()); } + +static std::string +target_debug_print_std_vector_uint32_t + (const std::vector &vec) +{ return host_address_to_string (vec.data ()); } + static std::string target_debug_print_const_target_desc_p (const target_desc *tdesc) { return host_address_to_string (tdesc); } diff --git a/gdb/target-delegates-gen.c b/gdb/target-delegates-gen.c index 33124864b6d..ddd3185612f 100644 --- a/gdb/target-delegates-gen.c +++ b/gdb/target-delegates-gen.c @@ -132,6 +132,7 @@ struct dummy_target : public target_ops bool supports_evaluation_of_breakpoint_conditions () override; bool supports_dumpcore () override; void dumpcore (const char *arg0) override; + std::vector specific_core_note () override; bool can_run_breakpoint_commands () override; struct gdbarch *thread_architecture (ptid_t arg0) override; bool filesystem_is_local () override; @@ -313,6 +314,7 @@ struct debug_target : public target_ops bool supports_evaluation_of_breakpoint_conditions () override; bool supports_dumpcore () override; void dumpcore (const char *arg0) override; + std::vector specific_core_note () override; bool can_run_breakpoint_commands () override; struct gdbarch *thread_architecture (ptid_t arg0) override; bool filesystem_is_local () override; @@ -2836,6 +2838,30 @@ debug_target::dumpcore (const char *arg0) target_debug_print_const_char_p (arg0).c_str ()); } +std::vector +target_ops::specific_core_note () +{ + return this->beneath ()->specific_core_note (); +} + +std::vector +dummy_target::specific_core_note () +{ + return std::vector (); +} + +std::vector +debug_target::specific_core_note () +{ + target_debug_printf_nofunc ("-> %s->specific_core_note (...)", this->beneath ()->shortname ()); + std::vector result + = this->beneath ()->specific_core_note (); + target_debug_printf_nofunc ("<- %s->specific_core_note () = %s", + this->beneath ()->shortname (), + target_debug_print_std_vector_uint32_t (result).c_str ()); + return result; +} + bool target_ops::can_run_breakpoint_commands () { diff --git a/gdb/target.c b/gdb/target.c index 05944319e26..86cb6280c11 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -261,6 +261,11 @@ target_dumpcore (const char *filename) return current_inferior ()->top_target ()->dumpcore (filename); } +std::vector +target_specific_core_note () +{ + return current_inferior ()->top_target ()->specific_core_note (); +} /* See target.h. */ bool diff --git a/gdb/target.h b/gdb/target.h index bf35227b658..133bb94b4ec 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -961,6 +961,11 @@ struct target_ops virtual void dumpcore (const char *filename) TARGET_DEFAULT_IGNORE (); + /* Generate target specific .note section. + For X86, contains description of XSAVE layout. */ + virtual std::vector specific_core_note () + TARGET_DEFAULT_RETURN (std::vector ()); + /* Does this target support evaluation of breakpoint commands on its end? */ virtual bool can_run_breakpoint_commands () @@ -1650,6 +1655,11 @@ extern bool target_supports_dumpcore (); extern void target_dumpcore (const char *filename); +/* Generate target specific .note section. + For X86, contains description of XSAVE layout. */ + +extern std::vector target_specific_core_note (); + /* Returns true if this target can handle breakpoint commands on its end. */ diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c index 0b84f4c0ada..626bd1192b2 100644 --- a/gdb/x86-linux-nat.c +++ b/gdb/x86-linux-nat.c @@ -44,6 +44,12 @@ #include "x86-tdep.h" #include "nat/x86-linux-tdesc.h" + +std::vector +x86_linux_nat_target::specific_core_note () +{ + return form_x86_xsave_cpuid_records(); +} /* linux_nat_target::low_new_fork implementation. */ void diff --git a/gdb/x86-linux-nat.h b/gdb/x86-linux-nat.h index 37e6da5d122..3c395035c9b 100644 --- a/gdb/x86-linux-nat.h +++ b/gdb/x86-linux-nat.h @@ -63,6 +63,7 @@ struct x86_linux_nat_target : public x86_nat_target { return x86_stopped_data_address (addr_p); } void low_new_fork (struct lwp_info *parent, pid_t child_pid) override; + std::vector specific_core_note () override; void low_forget_process (pid_t pid) override { x86_forget_process (pid); } diff --git a/gdbsupport/x86-xstate.h b/gdbsupport/x86-xstate.h index a9ab39152ad..130a7f24a88 100644 --- a/gdbsupport/x86-xstate.h +++ b/gdbsupport/x86-xstate.h @@ -49,6 +49,8 @@ #define X86_XSTATE_PKRU (1ULL << X86_XSTATE_PKRU_ID) #define X86_XSTATE_CET_U (1ULL << X86_XSTATE_CET_U_ID) +#define MAX_XSAVE_CPUID_RECORDS 32 + /* Total size of the XSAVE area extended region and offsets of register states within the region. Offsets are set to 0 to indicate the absence of the associated registers. */ -- 2.34.1