From patchwork Mon Jul 27 17:42:25 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140034 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B15F84BAE7F3 for ; Mon, 27 Jul 2026 17:47:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B15F84BAE7F3 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=psP7kghD X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic309-25.consmr.mail.ir2.yahoo.com (sonic309-25.consmr.mail.ir2.yahoo.com [77.238.179.83]) by sourceware.org (Postfix) with ESMTPS id 0C4034B9DB66 for ; Mon, 27 Jul 2026 17:46:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0C4034B9DB66 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0C4034B9DB66 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.179.83 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174387; cv=none; b=NQM1Voe9kpFoiBVEoaJG9n0gvOiLFCQiMtuFHBf/wGhK7ZDAwapargJMTKEdBjAKizj0Et7I4JdlMMps29X4SJH51EmCE+U/H23wnWkDL2XdxeKBxv7Bhn568XEl/Ax5bipz0MHaw00+lpPEbuX35x55uGE6Xm4DLEQs7SBI8ms= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174387; c=relaxed/simple; bh=roYy/72VdDmHjZP2BHiDbr5ZTpYgEsQp8/Sl57UN4rs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=CPxXB11+MbkMLJfwK/rRl01KeLk6OYlsM+1NypvwJOmgUs1UyRpFS8zirPEJhcj2z2b4cipOr9B7dNYnRAwrb4heY328+nd5N3+rCsg0I1o8czcx9ZZcJ80DChYKGXIXm7QD367HVDJpFDjNrbn544dYLemh1GKI+w4rn8+e1m0= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=psP7kghD DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0C4034B9DB66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174384; bh=N71IpYyfny2ft0Ell7Ij1rxzQJ6GMYvNK0ipwcf8c04=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=psP7kghDPRXJWVtbUCefyN9CTFU4NT4aywR/xFi8virjYp3NEgbhr9gRHIkopLLNPFUontZkVbab+QOt8si2sCsfSPVWa+W0Xf39mCYhg4oVKD1GJT/M1mVLM/XFtqIkbQAjlyUC5o+rYKaH9f9jBZQCQtQGZsVy3kJqKXYHbKbQ33g8QhPcsAeOqknjVvsa9S5zw+nd3OFcoxi69JYYpfEVHxnSRL9hzlSfs8DP6zH3G58lhQKGSZSrKHISgf+H4104PpTO0ApjYcHw7l2SYh+4vyiTZxf6yCvkvKw5SQF7YJF88gD0Unu8Vt+X7zgN3LUkg5KaqWfmRsxms+kYEQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174384; bh=tLMbg0P8JagZvqf0eF0yGqC1ukU+jObnRJZSDPeiEuq=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=cMGz3qgUyGFHWLyw4YIlbwrmC2SeXBbukIlgmASaEm2s3DA4rovcsMVtu1ps3VYIAn/FMfs5btRiuncvjfatOSO9AGHjYW1UNIn+wIfnI5/FQurttlqdKf8JNlFoEQbvtM5B2opVxU+Lm9D0g2LhdmZoAsJWFOKX92s2HlVvcvDxElN42IytqEKbTTP5g+Rq5LgAwaAhlGDnmER9MbWxgk3XLTOlRn1WyiaPkEwpjHq1+2fqTIlJL6sil6UqUWZwh08GL+t+oYa6qj+jQOfbPuraPthr98OzYJKt0nrAQVcOr0pg5nJBRjJaxCxk87q+hAqV1EwNkirth1PoGo+NIQ== X-YMail-OSG: ysIHbNMVM1m7iR3dLo5cl1dQEf_arwADKLepdRy0CFbGSQi9Eu_qSXMxYUU8PoY wG7AKA1kuAV9BYav23kQEIAjGCg4jCfIgDUjnzhvnSaC.D.TUEVjXOvzTW12S2elqt_No5_TAV_i 0CbPkKjeNVNEE7kEoErFcYZ7l33Xlq_RdCR9dfrNUbeJYVl.SPnUH3aMPgdtsKf6oYVSSVfZjrIg 2zrJpAisTZuy9Hc6J9gJ74SvEdiGpAy17dOoJtVPjXgn4viuuISVXaK56PN0_ntuEmv1qIr9gAWp M7190MTnQflwJIFDWowqXYwoNATs0kWQ8cnMowV5vdBb_VgtIiwP9XalizNljNa2VzMktXqvRmh5 2VhJX959CBeyVgyvl4TU1sdemTIpMWtVLSugVoQDWnd_672xY_1Y6fXd_Ai9gGFEEEIDtEufQ5JZ S1BPy4P6Hzow1aS9u0Y0mn12acRnHvjkDHuSKgAVr2ltqAnAGHm6ZFhR_MFY8g0Ha7WkQW3ZqJ4O xGrG0NhPIBJwai4w_qv7L82MqoT.lkdSI8pvmTdqFOisuMHgu2wzqM17OWfZI8nhhvoo_3kMEolB 3gJuJKzHVUwqBKcSjoGo9uuvlMUxFTthdIA0ceYYgEXVNaEIHCPaMRTQ2o4OW1UlASVOP1rvCZNT MCjm0kE0COQs8uYhpQhZgdvk_TrZk7..OncaGB4VWL20TIFi9N.Wu9bZ8F6wyhYId5fhLF.YW6QZ Ut7HwqA1Xy_8DVUisrzk61PUGkptzdopTU5FC0rrXbE.gj6_5Kfs6YPv4XYiTRxvykLIOQpcTkhH RI8bPLKZGJAsa81qqgfRGwXjvPNC2W4iao.yyJEeEQ.b_QvH2HL3NGaEK3gsefNNbo3jJOT2tMNq rHkHpE3Irlx4a2Xl6P9Gn0nh2NGTn.h3drhQ3oDU2dVdmtwmaU0B1QMzmEuqY7RRWu6gvoyL0AL8 Go.IT.mpHEZn6iBDv5zRNlxIPv_cR0a1TXxvD3HWk8ItjnZ_3xacSkZgYXvbYTEtoCg.VRa4uG26 GMovRxb3_rohUnkzFrCEyH2YGbbVjm343ny_tZhuhyQCJTQ8V6lAlVv06vYZc3qpWnskevDx3ZsH aEactaFULkKn4FOTN4JW4HsLv5pXPSunfzatJwgh79q2DX6tWrToCkHl_.cuZxns01NwVkyhrMcL UetNTaz620f3CpBOMfT6Q8_xTGhKStQdcAEZI7eMhO7MIyJXRV5WHuEJ7hYXkLOJsKzcvuq01mC3 FIQrFeAgqmVq0WGqFzXvSPj41Z1..cGqyWTnn5Sqv6RLbItZgLcJhE_B_wDesqQjPU6eIoR7pL2I _u3JwSMG8G9WFyUqB9r_Fj3cKUx4jNxFRQOU1TpFJev0zrqmVUxU9YvSXu9atj1QHYMZ8l_2XUbS SaqyyYHVSZy22Qlm58vXQMqcWzfurgWqeHggy_Bj7oNSO67gRqoKI0OR7I4ASkhG8ejqSpMlWYpE w24O2YEwLboaDb2w5awr8igTQcGNgfQh2TJm3O4Nb0yAaVvpxksrPZesSE3THVi7gYLhgNpWRLYp UKIbMZh99VAYjf0lxEO3A8aYw8HAVo2fxi9HkOsPOj3I6VY1dL8reMuuKfhms.3N2LWZf22LL33w YiSdgRb4cdvDN9Vo5_Gj3YKJYJx7XcTy6RP5AZSVWAeVfFxWahxZklLq7UYH7peFIektKAm0t8hn p2emKeTuDhZoZVfI6NyIXZfw95ayQCb5oUqUKAgdHQrLfp.rIbzAtfgmM8VCXcSWwnNq0U98f9MV kmABNZVERL0Ag.GLpvSzFlbKsmPvJ378KgmYvI9QolRVX_iBVfIDC2Wo_sHSzmn5qZNR6cn3Eb_L LWfKfDug4w4DkLXCN8zW2CNHMhlVI5pzEgzR5HU3p4GrETlJI._uhPWZoIGGsUXbglEGsDwxQG5Z 2ZxUZYgXf6xKNomAxaxMISKzlkKYmBjcRYzy1pPf9TvykRWZHcf1iCNUwoFUAr_NKpgFOGCPxrry JSm1a9WtnQtcHOFriDWP0d9Z2ETdJCeYwSkE4cc7zVZZKUZSyuyte7g8PUPlznVJzCwx1MC2Vv6K Xz5WNdwahKyNRlLK3XIOZrsljOX__.SFDD2tVEXx8xn4ffrb5ukrRYiO1zrSYayewYLymC_fiek1 bodKqG36r3re5z8CMyA3YfEMWcCKLvxKWM_wQoJ9gwGUvh0GD50uQQFuJsast_AKE_Ypvxa5mO3f zD_josixWhb0cQ9485LY- X-Sonic-MF: X-Sonic-ID: eddb9389-de08-41ff-99af-dede1d076221 Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:24 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:23 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 1/8] gdb/testsuite: Add Windows replacement for aligned_alloc Date: Mon, 27 Jul 2026 19:42:25 +0200 Message-ID: <20260727174619.1089041-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 References: <20260727174619.1089041-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org _aligned_malloc has swapped arguments, and you have to use _aligned_free to free the memory afterwards. This is enough to make i386-sse.exp pass, and i386-avx.exp will pass at the end of this series. --- v2: - Mention which test pass after the change in the commit message --- gdb/testsuite/gdb.arch/i386-avx.c | 2 +- gdb/testsuite/gdb.arch/i386-sse.c | 2 +- gdb/testsuite/lib/precise-aligned-alloc.c | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/gdb.arch/i386-avx.c b/gdb/testsuite/gdb.arch/i386-avx.c index b6cd89e5bea..229093e5164 100644 --- a/gdb/testsuite/gdb.arch/i386-avx.c +++ b/gdb/testsuite/gdb.arch/i386-avx.c @@ -116,7 +116,7 @@ main (int argc, char **argv) puts ("Bye!"); /* second breakpoint here */ - free (allocated_ptr); + aligned_free (allocated_ptr); return 0; } diff --git a/gdb/testsuite/gdb.arch/i386-sse.c b/gdb/testsuite/gdb.arch/i386-sse.c index 21264ed74e7..5210aee12c3 100644 --- a/gdb/testsuite/gdb.arch/i386-sse.c +++ b/gdb/testsuite/gdb.arch/i386-sse.c @@ -134,7 +134,7 @@ main (int argc, char **argv) puts ("Bye!"); /* second breakpoint here */ } - free (allocated_ptr); + aligned_free (allocated_ptr); return 0; } diff --git a/gdb/testsuite/lib/precise-aligned-alloc.c b/gdb/testsuite/lib/precise-aligned-alloc.c index 888814f12ef..1db35528bc8 100644 --- a/gdb/testsuite/lib/precise-aligned-alloc.c +++ b/gdb/testsuite/lib/precise-aligned-alloc.c @@ -21,6 +21,26 @@ #include #include +#ifdef _WIN32 +static void * +aligned_alloc (size_t alignment, size_t size) +{ + return _aligned_malloc (size, alignment); +} + +static void +aligned_free (void *ptr) +{ + _aligned_free (ptr); +} +#else +static void +aligned_free (void *ptr) +{ + free (ptr); +} +#endif + /* Return true if address P is ALIGNMENT-byte aligned. */ static int From patchwork Mon Jul 27 17:42:26 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140033 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 22D4B4B9DB6B for ; Mon, 27 Jul 2026 17:47:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 22D4B4B9DB6B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=DhxLh1Yg X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic305-20.consmr.mail.ir2.yahoo.com (sonic305-20.consmr.mail.ir2.yahoo.com [77.238.177.82]) by sourceware.org (Postfix) with ESMTPS id 875494BAE7DB for ; Mon, 27 Jul 2026 17:46:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 875494BAE7DB Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 875494BAE7DB Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.177.82 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174388; cv=none; b=C7eigNZxv7Vo5oOiHsYNpKZR0Yry72Dbse3SOf0OOfpwKcL/X7TjrJRcn58C3lVltTvULLTfEz1SRMSbt0ZHaC6mL4OBR/XJqUlM4XiF9+bA1CbFeBvWpzKa0kPsWy1haNQze22gtXTNeulwbx9EXn4wzbFOHBsFia4DZqisFqY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174388; c=relaxed/simple; bh=YqR7Yi7BKb6p+2oRWkoSWVtFm5UQg6iC3FZval1rBKc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=BlVvVGIwvRK723O/UqsUkhgYC8+s+ihb7MZy3bg++gwBLVHIeylUgPiSS28Sa6955X3CQQetRxEuBobsrEYPmjE6WRZNkgtT14Y6ougwBYFM3lxkCFLRe/78qGYZIbLCgIDTX0TpVGg7qjOOpwpdnODgSUM5XQ581UpkC6ibQYI= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=DhxLh1Yg DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 875494BAE7DB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174387; bh=m3mnSKnXIp7uCHZDJhB1BWM07kRhuTcrT8WrJ895j+0=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=DhxLh1YgDimkcLZDkxkOHFic0lFppA6tNhJvN9F2vGGD6SXc5nQrSlOrK1lLio3iaAMzWoUiEP0Nw2eKMfV/1OrKU/dTLtqAmTy7Xw6qVA+jXF4uSlDnqBZ/A83ApspGnfc8UUjVYLwHR+wguF04oI/P8O3LJDrfwPYV9E2BNPT25G41V7+8OnQOBRukO/gMTxrap9cNJC1qL2dPAkQTuNHEzGY4v4YysjmaF4dbtZ5JwEJ3JhOMizDU5DPo3GNE+/BqahNTSs5gJWaQ9EW3hk0ezYJs2Q36qEOwl51KIrjamTbb2zVEUGQQnxrLmiVsRpr4rUZlCxtOUX139smIGA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174387; bh=GAqUc8NAT9oTWlpeQsh8J9Yq8des+LmxACcQhKvZYOU=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=k90PIhFWNG7nYUBEVBYz9vxf+KxUQ2XiI8100Tx0At0/gSIPJgWPjaqV5xPgCg8slf0MpQRNQvmkd1CBRi532R5xjed6bl0003H7hi33cdXzR0yq2/x0OQvOLkeNxzcTRg/xbbqbD3dHl2TYJ9E9so+RTIvB63KWriPrD8FAJLiDHRt1qCDzQ+KqLROnDLHQLXKRcXThJVrdHRnq7i/jkAQMgIYNBlb7Swct8C7jEvpE9QaQmnKlOlYMojT4+HzHKpt6tuMP/CDdvvKhQlj/N0zZDn6sUngEQeBzNF7g5VtsZS0KOQH1mTnQfyHVwXP/LaMdIHD+n2CMOYEN+BSzxA== X-YMail-OSG: 4UCyJAEVM1nBKYb_yv.lMJYxosruTFuWHbGEjDSjqFqubSCfars7SdGC93cR4nc aeOHGh2CuP_BuxhDdu_fao10CAo1BUGX72vBE2diQxUx9L5Uods6KIZ4UMpSMEFKH081ceWbbtv7 2IcCX2CJfkzo_EMPuWsX.7F5Xp94dTLDQhvJWAd9qZ24TaguiJJvcU5_2O7N.qcOoaRG2qU.87._ 8sh5GSVsYE0p1wX1h3ZWNt_eWuSOh0xQWioFbVZjzT_kISoxTRhlLpztYUaJZ7k37LE822o7VRdV vhIEJ_4WyoCIRT0v1CLqTk_3BEOLymMdtRMSeCieIcjrciL0xa0tw39wRFFrlkLs8eyL0c3hl9Ue TZs59wKmhWasThmsJfsgUU1ooN0M642L29ZNw0iY21xiWRtLziHXnJfC9eTRmrropVQTFZRHGMoe lGhXLSJAxl879qXR4EpNa3psK6CQXnhhQTHWDyOpfZL71C5zt61kzGrywB6n2XrTjffcifvPUEIQ CfXLVDfNZuzwQwQt4tqh.cwL1hyiDTvv.PUoYyzldEbdvkGygv0dpbclMEY7kTXq1ZdP0Ajao.TD qhxHsEelD4XspbKLVVREnyltpkv1edRBIakJMgCfvrGD6wr1.zSahMJ8Mwad7UxBF6JIiMmYYhPa Tkm.Wgwgn_WV4dGWcxPL2CeV5gTWKRvaWUg54IbB81oWGDYHS56zpNZjXMAe39m5W18BR2pXausy XASnbYuMxINy_NfgVnpy.jGHRv5AMnBawiowB5g0Be4oSBoDRc9mtgbWTDP88tA3UkWwDo40mwdJ 2VRqop8bxSSYiOybYnqDefodTgBvUHeKtwrM6vO63qUV3xhHq9bpXcJKmXEooWLhQKdruNuXFcqT l0AGzx5HRpARuyah_U2FGtEVIwIDmpED_FLn3MI1hkomgwSh9p82zuO0DO9FEen_espozvB2T1jo PeVlcNSSr7ykjim4y1VHk_7Lc8NZkg_7egxdHg_No8T0aNnLC_rSkV13CFHtD72.tg._FAgBZW11 EipNf1FtslZMD8QMMJKtGcExC9NRE2VTJsRgPXv78S10pWg0vpmSNtjpEe8vpEoKavgdM7l0QBcS JqgDzuW9fjudXyp6EpqfkGmIpBw5qDIIWSSTSJIU6q88RgkHanYDGP7bwnCWMhW2l2cCVcs2bUlt F0Fnl5g44OdAQtuYME1qT5IY2zoKgVLWjSi7MxGDPHGWM9agfpB.iUNcL6y5h1PE1mdw7JEUBuED GQMkgCbyUDDv2GGv.Ofxf6lJKnevKSh3Y5ICx_aHZIm9NPJ2bFXSm9Izrc6KgypZWs1VYP.9d5NA HThfZViFmIqDt72uZW30Gg3imydbqcXlwoGKQ5ydX4Wy9FZPv4jVClOmVWQbrNdFec88AGb7636. VF.4TJjoe3rHhtZgWBKcm3l637Gk15K.l5yf2aipEgWWBoxCvPfQPaWxnoTc6OK.Eq.sMYO13mtJ RbYuS8ZnUTDB6kvFURLhs5Jl2mZzsET2L3wAuuand4pRO5aH4EuH3MdvHwQ2Q1vW0A2hbWBpZcf. 81YoJZy0t_TbCto1lB1k2zSYG7LUfunPQxHV2ZsqlUVNPbtSbsQ0HKl53hJzQdHuWqoEvKEpUoaH BnxlXFnDgL5ckbwUM_.32XqTFDz9cUuTaD4oXGT9HimiFLApimCR7VjMe4KK2w0fXlzffkqoamuq g4Hny7XeXaiJxHKoB4cWxDk33DjVgma2.1zv89ndQeK0qcvEhSXNfGf4dieD4LY1XMSxGHa6zc_o p92ngmZI0.v81XOJgybg7m48r1B.vr5Wwm9eQ_V3RRi5Mv_9EHG9Qx8MezikAxfdBJWWdvvWoySk F9MEapHr0DC9WYltn5ZKk3iBoYTx8q2B8O42Ebg136N8hfI6NrNmgeHL2XUQNwlvSxY0kL91WEnH XZ9etB0mwrOR3UCXsYWTIzdllGXBWy8trEhjAkW1JOoaEhg6TTNcYnei5xaBP_HoDk5tHMVqL9UO 7BFEEVn4kErXlmPyK0uj98Nxqu_qtv6fthM8iUwtyhppu9O7j8tiagNsYBIeHSyXEdyhp2TqzuzK 6oJgwuysAl69oJDylxb4l0IUZB5zMX.gqJAt9jqAnvyAKTRouQKaq6HXVsmIcaQzj4K2i3KaoBYw 1KBifQoi._0ZP5yPTMu0bHrX7uyGInxyCij5IF7a0_5tPloTzgZrGyLlxTX.PmtOu7Oj8WPAGfpa HrmzRNmKHBwSAMe2lJ1GU X-Sonic-MF: X-Sonic-ID: e0b3511e-cc8d-4806-8121-baa886938d6a Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:27 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:24 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 2/8] Windows gdb: Use allocated buffer for CONTEXT Date: Mon, 27 Jul 2026 19:42:26 +0200 Message-ID: <20260727174619.1089041-2-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org This is done in preparation for the XState functions, because the extended registers are stored directly after the CONTEXT, and its actual size depends on the available XState features. --- gdb/aarch64-windows-nat.c | 16 ++++++++-------- gdb/nat/windows-nat.c | 19 +++++++++++++++++++ gdb/nat/windows-nat.h | 16 ++++++++++++---- gdb/windows-nat.c | 1 + gdbserver/win32-aarch64-low.cc | 10 +++++----- gdbserver/win32-low.cc | 1 + 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/gdb/aarch64-windows-nat.c b/gdb/aarch64-windows-nat.c index ff2c9762467..630704a8caf 100644 --- a/gdb/aarch64-windows-nat.c +++ b/gdb/aarch64-windows-nat.c @@ -185,7 +185,7 @@ aarch64_windows_nat_target::cleanup_windows_arch () void aarch64_windows_per_inferior::fill_thread_context (windows_thread_info *th) { - CONTEXT *context = &th->context; + CONTEXT *context = th->context; if (context->ContextFlags == 0) { @@ -199,7 +199,7 @@ aarch64_windows_per_inferior::fill_thread_context (windows_thread_info *th) void aarch64_windows_per_inferior::invalidate_thread_context (windows_thread_info *th) { - CONTEXT *context = &th->context; + CONTEXT *context = th->context; context->ContextFlags = 0; } @@ -209,7 +209,7 @@ void aarch64_windows_nat_target::thread_context_continue (windows_thread_info *th, int killed) { - CONTEXT *context = &th->context; + CONTEXT *context = th->context; if (th->debug_registers_changed) { @@ -250,9 +250,9 @@ aarch64_windows_nat_target::thread_context_step (windows_thread_info *th, bool enable) { if (enable) - th->context.Cpsr |= 0x200000; + th->context->Cpsr |= 0x200000; else - th->context.Cpsr &= ~0x200000; + th->context->Cpsr &= ~0x200000; } /* See windows-nat.h. */ @@ -263,7 +263,7 @@ aarch64_windows_nat_target::fetch_one_register (struct regcache *regcache, { gdb_assert (r >= 0); - char *context_ptr = (char *) &th->context; + char *context_ptr = (char *) th->context; char *context_offset = context_ptr + aarch64_windows_process.mappings[r]; struct gdbarch *gdbarch = regcache->arch (); @@ -292,9 +292,9 @@ aarch64_windows_nat_target::store_one_register (const struct regcache *regcache, windows_thread_info *th, int r) { gdb_assert (r >= 0); - gdb_assert (th->context.ContextFlags != 0); + gdb_assert (th->context->ContextFlags != 0); - char *context_ptr = (char *) &th->context; + char *context_ptr = (char *) th->context; regcache->raw_collect (r, context_ptr + aarch64_windows_process.mappings[r]); } diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index e975892f487..689601f3a82 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -291,6 +291,25 @@ windows_process_info::pid_to_exec_file (int pid) return path; } +/* See windows-nat.h. */ + +void windows_process_info::initialize_context (windows_thread_info *th) +{ +#ifdef __x86_64__ + if (wow64_process) + { + th->context_buffer.reset (xmalloc (sizeof (WOW64_CONTEXT))); + th->wow64_context = (WOW64_CONTEXT *) th->context_buffer.get (); + } + else +#endif + { + th->context_buffer.reset (xmalloc (sizeof (CONTEXT))); + th->context = (CONTEXT *) th->context_buffer.get (); + } + *context_flags_ptr (th) = 0; +} + /* Return the name of the DLL referenced by H at ADDRESS. UNICODE determines what sort of string is read from the inferior. Returns the name of the DLL, or NULL on error. If a name is returned, it diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 44b628c9bd1..76688fa90da 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -183,9 +183,9 @@ struct windows_thread_info /* The context of the thread, including any manipulations. */ union { - CONTEXT context {}; + CONTEXT *context = nullptr; #ifdef __x86_64__ - WOW64_CONTEXT wow64_context; + WOW64_CONTEXT *wow64_context; #endif }; @@ -204,6 +204,10 @@ struct windows_thread_info /* The name of the thread. */ gdb::unique_xmalloc_ptr name; + + /* The buffer for the thread context, including any XState registers if + available. */ + gdb::unique_xmalloc_ptr context_buffer; }; enum handle_exception_result @@ -313,15 +317,19 @@ struct windows_process_info const char *pid_to_exec_file (int); + /* Allocate the context buffer for this thread. */ + + void initialize_context (windows_thread_info *th); + template auto with_context (windows_thread_info *th, Function function) { #ifdef __x86_64__ if (wow64_process) - return function (th != nullptr ? &th->wow64_context : nullptr); + return function (th != nullptr ? th->wow64_context : nullptr); else #endif - return function (th != nullptr ? &th->context : nullptr); + return function (th != nullptr ? th->context : nullptr); } DWORD *context_flags_ptr (windows_thread_info *th) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index def8fa606f4..4cd301d4959 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -515,6 +515,7 @@ windows_nat_target::add_thread (ptid_t ptid, HANDLE h, void *tlb, #endif windows_private_thread_info *th = new windows_private_thread_info (windows_process, ptid.lwp (), h, base); + windows_process->initialize_context (th); /* Add this new thread to the list of threads. diff --git a/gdbserver/win32-aarch64-low.cc b/gdbserver/win32-aarch64-low.cc index 5a7b72155db..e94548b6fef 100644 --- a/gdbserver/win32-aarch64-low.cc +++ b/gdbserver/win32-aarch64-low.cc @@ -169,7 +169,7 @@ aarch64_initial_stuff (process_info *proc) static void aarch64_get_thread_context (windows_thread_info *th) { - CONTEXT *context = &th->context; + CONTEXT *context = th->context; context->ContextFlags = (WindowsContext::full | WindowsContext::floating @@ -193,7 +193,7 @@ aarch64_prepare_to_resume (windows_thread_info *th) { win32_require_context (th); - CONTEXT *context = &th->context; + CONTEXT *context = th->context; for (int i = 0; i < aarch64_num_bp_regs; i++) { @@ -223,7 +223,7 @@ aarch64_thread_added (windows_thread_info *th) static void aarch64_single_step (windows_thread_info *th) { - th->context.Cpsr |= 0x200000; + th->context->Cpsr |= 0x200000; } /* An array of offset mappings into a Win32 Context structure. @@ -322,7 +322,7 @@ aarch64_fetch_inferior_register (struct regcache *regcache, int mappings_count; get_mappings (mappings, mappings_count); - char *context_ptr = (char *) &th->context; + char *context_ptr = (char *) th->context; char *context_offset; if (r < mappings_count) context_offset = context_ptr + mappings[r]; @@ -341,7 +341,7 @@ aarch64_store_inferior_register (struct regcache *regcache, int mappings_count; get_mappings (mappings, mappings_count); - char *context_ptr = (char *) &th->context; + char *context_ptr = (char *) th->context; char *context_offset; if (r < mappings_count) context_offset = context_ptr + mappings[r]; diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 7629beca213..3d85faf0785 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -152,6 +152,7 @@ child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb) base += 2 * 4096; /* page size = 4096 */ #endif th = new windows_thread_info (&windows_process, tid, h, base); + windows_process.initialize_context (th); find_process_pid (pid)->add_thread (ptid, th); From patchwork Mon Jul 27 17:42:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140036 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 336814BAE7C2 for ; Mon, 27 Jul 2026 17:48:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 336814BAE7C2 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=r2+1jtJv X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic309-25.consmr.mail.ir2.yahoo.com (sonic309-25.consmr.mail.ir2.yahoo.com [77.238.179.83]) by sourceware.org (Postfix) with ESMTPS id A96BA4B99F60 for ; Mon, 27 Jul 2026 17:46:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A96BA4B99F60 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A96BA4B99F60 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.179.83 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174390; cv=none; b=ReWsZcL1NhKreRCQUSYyWGzPig9vRR+HfwrsZpKiLGQ2FofdJ9ZD2v5SSGha1jj7EzR4jwjqPoMoOCjpe91f8pnQQ/lMkM0tjEPfiqF+KelAtohrchnZSG1JJPDS4Az65QXY8aJLMn85Oc4ztfMjFcQgCi/ltzDDsl1laCNw484= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174390; c=relaxed/simple; bh=48vXdMrmY1aI0oBdF2Z/6RmF6F17hoKBq4civrJipj8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xr+1lZYZEfKi1H0bX5ce+ZlGlFf854GhaoWNgjAQkNFY15gUUMNQ/VbHTWVEY8WQ1e26NibtvE0HvNMzSdXSRCk3sdtBopzmNF2/uGkqWX01exKbljocQjg3p6GRZxA9l3YsBo7jO9n4rmkxGmbZGxR83C0HYDedfh9lgi2ALmM= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=r2+1jtJv DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A96BA4B99F60 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174389; bh=1kJldi5EGnZi3m60eLdytwSpJjWFF0rh05rB9vrYTAE=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=r2+1jtJvjC2weP6cT+hF0oCVnrkS7zO6m5CDomahVFkZ1JxKtAAuBNpQelS8XNVaasgoE9CyqoA23rOhSKKJK/LEb17gTQw02Le6pt/bKwhKp3zHu8gNrHnsXxVc3OCNiXAZTFjHtkm66XLQersaTV0gl7CYBUANL71FTUINnGZc6D6vUsLoepzJdQsd6ipTKrTSJ+56nxqb7Qxnny1sTogPwpn5yo9h6GojvI2kFvz5Vx5TXU/TMxBGpeLJAPjXCNtzkcVucia4Lxc6i1wwenycoEachF3ZSDW+KkBUXd0pmfZ/mD3sE8cAHfxFiztHcTQEOUlR+/xQlTDrSwitWQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174389; bh=1weO0dNumQ01PfPxAjDhly2jKKn5a4+oAKv0p6gDnFS=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=DMWYORt3CrEZDtqKRSRhiL34ePHq6iPoaEd6pNeeOGSksW6rq6kV4i9O9mR1LMqSxryplJ16B60xsNe0i2eyULk91ybFD1i7H6fRMz/+Pbiub/lYih/ndX+610IB1c4C13YFNIbrctmc0Sh1ULfaRZTMNKCiEtmlGyCTNCexWeDDS+D8h2ruu6mAdj9HjKzKgQ38lQM4eZpBvDMTmANyisGcOCshxUXfBU+FItU5IxBYov4O3FDbjdqVGt3mrAmLcqInwRMgCsc7mY5z5gHzCvSVIn0MbfQRZYgx79W07M1MbaGeYS97jEDrtyJI28GlKQtwsXHXER0O0vFi1VXZcg== X-YMail-OSG: VRwZrCMVM1kU8xrBJH48bcevf6ibIxU7WiskKeb.AzNqcccK96z2peh5UvIgPrn W0Uj7_aTZVeOEd_SPMP2EEAEAk4XDqAHtiHbfxBIjI7VfGKrGb6xMdwtSEG1LKcYNFE5uKhqb60k jb_WA0XX_VViJClZ_DOAPNY07yhfzClmOtExuq.Cp.GFg8Ak1SdsZ1erdvli5Bhwe7XlAVw3kHVH IIyg.h4EjLoxOmiph_eoAEXLdrPsVyinhkHUe3mmNFLLaYaUrjQQ6BhXFatOW542rzXYBDUzS_7G mzM4RiX08vV.as8WFOJvj10jNxd2mKjR1ogW5tSildos5pGS3jpOowg.YUEO31GVYyhFsjN3GvGK YSiRAgQdBTvy3dUnrZp4zIMOHf6HbbG6Jaoj2kkl0AgdgMbnqUWwN0eisdL1T0mNaeTFFJYJnvgW LJ1PXxfnBy5wsNdOsAvJ0AVW5NV181aVoElMHOhdyxMWL5Hp062kXyX7vdrEc5jNou1PI86rCA.b uzhqGh8p13WEcpHavLM0yTxfQApM8t90a4cczyrfomxG0u1.K93lgnda9uhLn0.BY2WOUFNRx5Va AoxsA9KKMQegRHC347d5kRqqtzShzHE_I11RbpjelMxffEIb1yfcRS0P1QJotAQ36QGV9MM.GqVr kilaxCwIS_6CcSG7A0dEZXKH4yCSvaGBilBrxlShmi1ovAaW77CiNpcji_vuy82yW7diHNyUA99L D_HGjgYnQUyzQQ7TnNFeSCdf2cB9ZZK9OoQj5sePu1gtqUgL3DxbxIQsDr3hHLNrLXLtkTlJGGFU S3Adrrl0.PBtG_IQuWPpdMD2h2bt5QLPo79gnhGy3LAJhYe3ra.i_r_cOapEhftiywOviYg.VyaY 4CevJoiXFv7l.rKhY29RWzkmxS2S97S.SokJ83.CNBiy2N8KqrDZP3XhwF4QIkLWP1rDvDqWdFWs IDgaRHj5FP0nUrUpxlw8YvroWk_BJDFfUzNt_aVNLGXZD9W3W8btbKqc4LjS52gaEQ.8UBt6Ibkp eIhgFdAR_H1hmcsduNGEfhpQ7UyHPUlx5vSUgt3DL7Dn7G5La2axElL.Geec5UYno9Ijui5yLWD4 2NLqMERCMH_la508m8WGGEL21dgnuR3Vegx2Z5HenWRpD5gbEkGwwMwFccoIW78LfwmNS9lgGKPG QY5dP6pPD7uk0YbsC3jpsgak_GzFFqguZMNoWIQStSWrVGv7m_SrdK8D6D6usZdxYkWUnb6WDpdz FezriJ3jhvVzOA74MsPk_EWG1FJqoC9FdlFcTbmvMISfpIue3t8WdxWA21jWUdAlOqDjp20apaDJ AHGQB109xk0Fl.4QtcbXk7.hImU_QHM7RFVruZoDMsig6uMwcEHSWPTxKPmBrqirhqkcZ_2wxAEc Km0NUGk0Na8LLXXWk6POd.VdnmlceZdICklnDqAPH1fSOprqyXoyNZi20cOG92lmQIGJL26bsO79 iSLkwzzQhhUjPKvmcCdlRJbMNTFe4xEBC6Y87HemRsXw0JKe1JoQKfpO.56IgnaFlh5lb82Zou5W Q3bylCNOtPLZlH3xDdztA2hCRZlLTm9syOmUicq_lTtaUPqoPPjlyCoxD2eyUz8HXKYEPWAIaB_G mEQj.ILuxR_d1IKYwosO0m9DA24A.BfVr1LWjUna0axPerP3c9jUl48YTHNhFMPYwfAxxqsNCszm PnXRgwi75YC9lR0.22Vo7h2PRN38ItjhK4WjZvvkUXUEUppSC6drhuvIQLgXlC3sQUcyd5lX6nCV qFVPNZDzMwzfaYuAdpJ31Gurdq5R7Zf9_FAuv93bEJ1nuSSGtdHmUmmnhTJlkqJGuAkni.8QvKDr WZ8P2LuBCnvdVMwgpa00.PpXly6MzF5NcTJYdu4FtA7ektU2Q8kOx2_InNQgF1WzBFCjg24XTZBP C0EVlqTiLrfmpVVW.spgZA4.zuU8zRUlWbKplhDte2lnxMg2_nKyVWpWLkIDw8lr7yxAxKwDGkw3 haLuAILZvCfgZh.a.UW7RUn6zzEuVgKhfPCSfruMFWDqbwuHvwElqR3T_S.ly0Kp8J4lIVyHzQZB hC6UZUDYOPo2ZXeVLHuw0A5vnbXcvD3qqdExrp5OWkFObsHe_JvFb6.e6Xz77_bmMMCaI8jcuUWH miplZUp4uvNU25NqYFcbJjhAfT85z.Ugv6r1VJqicw81EcmwmB6.ngV6b366Icv56_92y3coNJsy yoSm3jAmCQkD0djhnPfzv X-Sonic-MF: X-Sonic-ID: d2c37049-6d20-487f-a450-aabf73337f4a Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:29 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:24 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 3/8] Windows gdb: Remove mappings member from windows_per_inferior Date: Mon, 27 Jul 2026 19:42:27 +0200 Message-ID: <20260727174619.1089041-3-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org It's not really that useful, and simplifies later XState changes. --- gdb/aarch64-windows-nat.c | 6 ++---- gdb/windows-nat.h | 18 ------------------ gdb/x86-windows-nat.c | 34 ++++++++++++++++++++++------------ 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/gdb/aarch64-windows-nat.c b/gdb/aarch64-windows-nat.c index 630704a8caf..be900439047 100644 --- a/gdb/aarch64-windows-nat.c +++ b/gdb/aarch64-windows-nat.c @@ -168,8 +168,6 @@ aarch64_windows_nat_target::initialize_windows_arch (bool attaching) { memset (&aarch64_windows_process.dr_state, 0, sizeof (aarch64_windows_process.dr_state)); - - aarch64_windows_process.mappings = aarch64_mappings; } /* See windows-nat.h. */ @@ -264,7 +262,7 @@ aarch64_windows_nat_target::fetch_one_register (struct regcache *regcache, gdb_assert (r >= 0); char *context_ptr = (char *) th->context; - char *context_offset = context_ptr + aarch64_windows_process.mappings[r]; + char *context_offset = context_ptr + aarch64_mappings[r]; struct gdbarch *gdbarch = regcache->arch (); gdb_assert (!gdbarch_read_pc_p (gdbarch)); @@ -296,7 +294,7 @@ aarch64_windows_nat_target::store_one_register (const struct regcache *regcache, char *context_ptr = (char *) th->context; - regcache->raw_collect (r, context_ptr + aarch64_windows_process.mappings[r]); + regcache->raw_collect (r, context_ptr + aarch64_mappings[r]); } /* See windows-nat.h. */ diff --git a/gdb/windows-nat.h b/gdb/windows-nat.h index 3349755022b..d6977ff4c85 100644 --- a/gdb/windows-nat.h +++ b/gdb/windows-nat.h @@ -139,24 +139,6 @@ struct windows_per_inferior : public windows_nat::windows_process_info void *wow64_dbgbreak = nullptr; #endif - /* This vector maps GDB's idea of a register's number into an offset - in the windows exception context vector. - - It also contains the bit mask needed to load the register in question. - - The contents of this table can only be computed by the units - that provide CPU-specific support for Windows native debugging. - - One day we could read a reg, we could inspect the context we - already have loaded, if it doesn't have the bit set that we need, - we read that set of registers in using GetThreadContext. If the - context already contains what we need, we just unpack it. Then to - write a register, first we have to ensure that the context contains - the other regs of the group, and then we copy the info in and set - out bit. */ - - const int *mappings = nullptr; - std::vector solibs; #ifdef __CYGWIN__ diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 2f556e47b39..b3ad8594020 100644 --- a/gdb/x86-windows-nat.c +++ b/gdb/x86-windows-nat.c @@ -85,16 +85,10 @@ x86_windows_nat_target::initialize_windows_arch (bool attaching) = !attaching && x86_windows_process.wow64_process; if (!x86_windows_process.wow64_process) - { - x86_windows_process.mappings = amd64_mappings; - x86_windows_process.segment_register_p = amd64_windows_segment_register_p; - } + x86_windows_process.segment_register_p = amd64_windows_segment_register_p; else #endif - { - x86_windows_process.mappings = i386_mappings; - x86_windows_process.segment_register_p = i386_windows_segment_register_p; - } + x86_windows_process.segment_register_p = i386_windows_segment_register_p; } /* See windows-nat.h. */ @@ -242,7 +236,15 @@ x86_windows_nat_target::fetch_one_register (struct regcache *regcache, return (char *) context; }); - char *context_offset = context_ptr + x86_windows_process.mappings[r]; + const int *mappings; +#ifdef __x86_64__ + if (!x86_windows_process.wow64_process) + mappings = amd64_mappings; + else +#endif + mappings = i386_mappings; + + char *context_offset = context_ptr + mappings[r]; struct gdbarch *gdbarch = regcache->arch (); i386_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); @@ -308,6 +310,14 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, return (char *) context; }); + const int *mappings; +#ifdef __x86_64__ + if (!x86_windows_process.wow64_process) + mappings = amd64_mappings; + else +#endif + mappings = i386_mappings; + struct gdbarch *gdbarch = regcache->arch (); i386_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); @@ -319,7 +329,7 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, { gdb_byte bytes[4]; regcache->raw_collect (r, bytes); - memcpy (context_ptr + x86_windows_process.mappings[r], bytes, 2); + memcpy (context_ptr + mappings[r], bytes, 2); } else if (r == I387_FOP_REGNUM (tdep)) { @@ -328,10 +338,10 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, /* The value of FOP occupies the top two bytes in the context, so write the two low-order bytes from the cache into the appropriate spot. */ - memcpy (context_ptr + x86_windows_process.mappings[r] + 2, bytes, 2); + memcpy (context_ptr + mappings[r] + 2, bytes, 2); } else - regcache->raw_collect (r, context_ptr + x86_windows_process.mappings[r]); + regcache->raw_collect (r, context_ptr + mappings[r]); } /* See windows-nat.h. */ From patchwork Mon Jul 27 17:42:28 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140039 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6CA114BA79B3 for ; Mon, 27 Jul 2026 17:49:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6CA114BA79B3 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=U1vvFS1f X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic312-26.consmr.mail.ir2.yahoo.com (sonic312-26.consmr.mail.ir2.yahoo.com [77.238.178.97]) by sourceware.org (Postfix) with ESMTPS id 0069F4B99F64 for ; Mon, 27 Jul 2026 17:46:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0069F4B99F64 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0069F4B99F64 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.178.97 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174391; cv=none; b=MaMjFGCaywRnCTYN00trjhNHnIAP6wNQzqIHCgi0qHD65l/86FYpfRBq5KuFazDioG5/1fOoDc0kdBzR58SeIEIxZQ+uK1KY+wjmGSXa7iKcaVePndtkWX+vd2Try/+4KF24GE4mKGQaVh8ldtPA++qn1oKSpEBxkPre2yJ8Lxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174391; c=relaxed/simple; bh=RjlMZWoj+NXZbuzGxJ9hIEyocFAlMU1f90opMVZ4cwk=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=qhtLq6eyUOMHCVeqq2AbEaiVMm+aqRlqFW1T8+xVGC9+wrirkzc3gByBojxym0//bk6g01OY73SC4Shg8sZuNhOWT/Z+lcOeMOh/NW2M8BDwOVnky98dgjsnOq+uGJVjteEotB/K6A+5Hcxo0xGdqRpkKDW5O6zAN6LGnKRHWrc= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=U1vvFS1f DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0069F4B99F64 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174389; bh=ybsyvR0Vdp+TZU1IIqm4dNQbHL9Q9UYoMDfDX/2cc5k=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=U1vvFS1f5RGCxDq1DJYcavO+BmAY89vfUVVGlq3NZ17GDy0cABTZA4uKNQV77mDTSR+rY7jWzxDAUbKXptS3ZuRkl2yIxboToZy8778yE0z+1K/mLImszc8FjA2iIw1iwbN0paxScx7adhGR7WsuEvj4YJoVLAKQHJSbFKeBs+0cRkFyEXOpbAxGbp0tLWFPZcU/SJMYt5PBuzE7djt27o4T+UndCKdK0YIMC/i090Ui6xW0mFEh9TTf3FzHuIq5UpnN7jLa/xWnJUI7ysTPmn2tRCk1+wkgTuAhtlKPbcZdj9XgjwZkPGLXr88RbfuGORM6Y0HdPfYo+2JIcppl9g== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174389; bh=zXpeTASQ3N831gwrB1Z/5MIz/c46o83GWFaCDxlTNSN=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=hi3K4qT11uw8iHA42UKav6RsNqFmnGOosv5A6N0dFhvloGBpMU4Axq5p4EiFtQfkXt8x7nqQnSIyMm5RD1gEGFEwpIKXtNHZhOWxtghMovUbVaqBGh3NAAWBp+MLhzBsQwQgLWEqW/zZTUzaupkIV9xl1NYMjM3TqibRxK8Z1vCxocOwKw0Iazm/AnuIuQlyHd33SoAtLiHnANzOhOlet1ymjJT+NwkvQQtr6dUm+k3N+obHc+1Q4xxUFH5fKA1GBKxyQ65Dm4HOYxDBDLSgH7Fe+catCEv1zeDnwqPHxiUNI2dYTl65B72xygFwMfmHyK78b0T8e9xyetSFu06vPw== X-YMail-OSG: 9xmXsJMVM1kYo3V64NgAjW8dTPTNURL5RF8xtitJWBEcojHzuj573SsFzVxxRM4 BNEu_XxdKLZcDVfKujpV9wTw4kOY8Xdn_tj6Hwv51jVLkIkQct2.GuIRMOpdRIjeoh3BfmvSC4S7 AsS4csq5oUm.F7ax8N0sf4ReKqtD36QUbW_geiDHjMlJT2sfwKzdzMZ4uNMYUum6hzf1jxssx2ZK 65D3gPHQSl6.cNBKqBDenngSFTpJoefQisyUA42oS.PQXGXX9hHgYGX89JdYxeIC_rxFDxpfnO_O RQKHCv_bjPkDruErUN_fw1er22ud3nQj.GO.mUYII92memxYcv9C_xI6VLZhuwXgZPJ8UeAEeZFt 7TkzMwBiLkg0uGEv6MyX4opKJZWCauycgNi61EG8stzk6Mw92G0PLpn0khCBKq1EHCx0paBTqQt. M7OsZ3cQ0_ONafnmVe78QrOK_FAr9CtQIzeqUvNDoLJXWFp5Laz1lwh1wfO_t7xWrjRfA1C6Gcn7 e8ivL1uBQjKgApnDrF3vrqwHfpOn5Ty3tmAOPEJAMvlUr2UEwnEk06xgTkhRK5JaiMhfc0mtTfAc CCjPRgVPk8ZBu45_dLQB7Cm_o.sYMcgGV6pTuAYZ0dvipYVY.EC_kp46da5L0ZFVD0_eCZdW7gAv tgGkc3gzPVs9IerQuB.rhyk_g0Y6pL77OYJSehxiGjKQeLxXQpwU7qJuKV8I5LcwZxY16voyFt.F Oi9DPULS4WebvTYk_V7ZMVbh555aaKPyKwkO10DzhwnlP6zhUxjtLQUVyZ2Jfnl.Jm7YiqTwTGWJ 0gSiFW0ZlSjCmjbvjMys4azinOkr5l4ebL4qYcIX7doxTENuKO5du0Fd2Wkxur5MtEHHWwX8qcva 9bTZ6a64rPXEVCCPTlGLQ2TrUfBha_IJm6Quu.3Yc8PNBYVQMmKilgA3r3FgXpDbGH_Iq2DbL6FU Mnq2JJpWvHkd8TF9pGdc3Geg3rfRb.Q7FCDIzNeeYwrweNxcWLzJo0zuT1hI5Xk2lsHsXwSTw0Zb CatXc01WvDuKpMmLON49F6RAouLeinS7ENjDqThYrdbnfFxyVEZjMrWMKyci4_jOTE96aMN4tJjR lV32NgIyrDv42dLJU59iDSbWnZqiI1GP7dntDg.JMWlG0V16p6eD9cUyOvPq7zA2LlweRQPu8RNU R4ABlEKMIzUERWdHU2DdnIY4iEtaRJWaC_KxOk2slheGkj2stbD4G8_bbhVL9OanzmVKxZsXpNwv bI2lquDFM0I5jlex8ZtViw6fzMCNBiXY2eooF_STz_qh_eUI.rSVD7y2ga.DMeARax2KAA2Qu37h sWUUGTWBu4JYxHNwLBCWTNlk2D1Lhn4hWW7wma5fIT9y7gWbBnhMrDDRip.ugiGjTmvjJpBTjl1A 5N1BkrVFA1UZdV2Qhs.FTrTMNMzfpj5dhbwpZTnkkfbe.N_okIfdpj2pbKv.JR9f9IERLkvsaK_I uqKa999UD0kXh7sOfbiq1eQlw526kHtqE4nbrZkvbxNm5KyBrPkvHJWfgKJ0uoo09uhu3aH3g5j7 IHmNC91rUsickj1ShfKJZ5f_SyxiWR4SxpdHQATXm6votOvIMbLv9cGYZ9iyHyt.zTkUfsvAfZcL kM7Oq9OJfIhEoQ72BNlgKNIUcgffhUoBYyWAR543LlA00iwUkQVn5CachhoXxNfo5axl9fJrh23t w2ZxIL88BqopRnIMqwOW1qBLaEwwhoSixPtBye2_fk1NgPbMPn6R5egg6TRdlrL7g1aZ69Y967mP _.lMIwlxDFDfkrXPQCEZbqTenTHZkE9Ov9zlykH4CVQX9jOsrUjirL_LLxhHEzIck7X1DGERMus5 LFraMmhQzVWFtoqNIRA2GXXncgi.UR88Eawy4v9LOVR0yQXnxCOddJn9lhvTFpT5NxnJrsel7wwP nn2uwxY3lRFyy1XehVUNEafnR6cS78KECEMKP.IicBPaWB4l_OFeGL_Cf.RgWSKGt0sLqVcZT_M6 HDPPh2Qb4GrKpo.j5KeY9FNjWSl6odqYpGcMnb5X9G881__T8orjY4UwNMg_EnJsSG9dJvBE.1fk TP3ZHAwhJJl3zuINr3v45mPh7_Bos1Y4xXaT_Tu.YsY92NONomUUhI1UIvilEkKeZVNKJAjpsPgX 4IJ5IOQLTIGlmX.Hoh2Y9zkFaE0F4aIQ3pDnTU7ttLhbtQ36yzv6yP65szp8QZXOfg1D7yTZ7b15 H5STsv0v9SsFTr6oLPV_sQV8- X-Sonic-MF: X-Sonic-ID: 17328ad9-6b67-431b-bd39-93d48e3c5d57 Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:29 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:25 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 4/8] Windows gdb: Refactor getting pointer to register inside context Date: Mon, 27 Jul 2026 19:42:28 +0200 Message-ID: <20260727174619.1089041-4-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org These get_context_reg_ptr helper functions will be extended for XState registers later. --- gdb/amd64-windows-nat.c | 3 ++ gdb/i386-windows-nat.c | 3 ++ gdb/windows-nat.h | 6 +++ gdb/x86-windows-nat.c | 75 ++++++++++++++++++++++--------------- gdbserver/win32-i386-low.cc | 46 +++++++++++++++-------- 5 files changed, 87 insertions(+), 46 deletions(-) diff --git a/gdb/amd64-windows-nat.c b/gdb/amd64-windows-nat.c index cca606b5200..9d83a5f8334 100644 --- a/gdb/amd64-windows-nat.c +++ b/gdb/amd64-windows-nat.c @@ -86,6 +86,9 @@ const int amd64_mappings[] = }; #undef context_offset +const int amd64_mappings_count + = sizeof (amd64_mappings) / sizeof (amd64_mappings[0]); + /* segment_register_p_ftype implementation for amd64. */ int diff --git a/gdb/i386-windows-nat.c b/gdb/i386-windows-nat.c index 991f301cad1..151b778036c 100644 --- a/gdb/i386-windows-nat.c +++ b/gdb/i386-windows-nat.c @@ -74,6 +74,9 @@ const int i386_mappings[] = #undef context_offset #undef CONTEXT +const int i386_mappings_count + = sizeof (i386_mappings) / sizeof (i386_mappings[0]); + /* segment_register_p_ftype implementation for x86. */ int diff --git a/gdb/windows-nat.h b/gdb/windows-nat.h index d6977ff4c85..69be069e419 100644 --- a/gdb/windows-nat.h +++ b/gdb/windows-nat.h @@ -392,12 +392,18 @@ int i386_windows_segment_register_p (int regnum); /* context register offsets for x86. */ extern const int i386_mappings[]; +/* number of context register offests for x86. */ +extern const int i386_mappings_count; + #ifdef __x86_64__ /* segment_register_p_ftype implementation for amd64. */ int amd64_windows_segment_register_p (int regnum); /* context register offsets for amd64. */ extern const int amd64_mappings[]; + +/* number of context register offests for amd64. */ +extern const int amd64_mappings_count; #endif /* Creates an iterator that works like all_matching_threads_iterator, diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index b3ad8594020..3af5ef4dae0 100644 --- a/gdb/x86-windows-nat.c +++ b/gdb/x86-windows-nat.c @@ -223,31 +223,53 @@ x86_windows_nat_target::thread_context_step (windows_thread_info *th, }); } -/* See windows-nat.h. */ +/* Get pointer to register R inside CONTEXT. */ -void -x86_windows_nat_target::fetch_one_register (struct regcache *regcache, - windows_thread_info *th, int r) +template +static char * +get_context_reg_ptr (Context *context, int r) { - gdb_assert (r >= 0); - - char *context_ptr = x86_windows_process.with_context (th, [] (auto *context) - { - return (char *) context; - }); - const int *mappings; + int mappings_count; #ifdef __x86_64__ if (!x86_windows_process.wow64_process) - mappings = amd64_mappings; + { + mappings = amd64_mappings; + mappings_count = amd64_mappings_count; + } else #endif - mappings = i386_mappings; + { + mappings = i386_mappings; + mappings_count = i386_mappings_count; + } + + char *context_offset; + if (r < mappings_count) + context_offset = (char *) context + mappings[r]; + else + gdb_assert_not_reached ("invalid register number %d", r); + + return context_offset; +} + +/* See windows-nat.h. */ + +void +x86_windows_nat_target::fetch_one_register (struct regcache *regcache, + windows_thread_info *th, int r) +{ + gdb_assert (r >= 0); - char *context_offset = context_ptr + mappings[r]; struct gdbarch *gdbarch = regcache->arch (); i386_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + char *context_offset + = x86_windows_process.with_context (th, [&] (auto *context) + { + return get_context_reg_ptr (context, r); + }); + gdb_assert (!gdbarch_read_pc_p (gdbarch)); gdb_assert (gdbarch_pc_regnum (gdbarch) >= 0); gdb_assert (!gdbarch_write_pc_p (gdbarch)); @@ -304,23 +326,16 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, { gdb_assert (r >= 0); - char *context_ptr = x86_windows_process.with_context (th, [] (auto *context) + struct gdbarch *gdbarch = regcache->arch (); + i386_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + char *context_offset + = x86_windows_process.with_context (th, [&] (auto *context) { gdb_assert (context->ContextFlags != 0); - return (char *) context; + return get_context_reg_ptr (context, r); }); - const int *mappings; -#ifdef __x86_64__ - if (!x86_windows_process.wow64_process) - mappings = amd64_mappings; - else -#endif - mappings = i386_mappings; - - struct gdbarch *gdbarch = regcache->arch (); - i386_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - /* GDB treats some registers as 32-bit, where they are in fact only 16 bits long. These cases must be handled specially to avoid overwriting other registers in the context. */ @@ -329,7 +344,7 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, { gdb_byte bytes[4]; regcache->raw_collect (r, bytes); - memcpy (context_ptr + mappings[r], bytes, 2); + memcpy (context_offset, bytes, 2); } else if (r == I387_FOP_REGNUM (tdep)) { @@ -338,10 +353,10 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, /* The value of FOP occupies the top two bytes in the context, so write the two low-order bytes from the cache into the appropriate spot. */ - memcpy (context_ptr + mappings[r] + 2, bytes, 2); + memcpy (context_offset + 2, bytes, 2); } else - regcache->raw_collect (r, context_ptr + mappings[r]); + regcache->raw_collect (r, context_offset); } /* See windows-nat.h. */ diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc index 1aacd302074..b77f6adc6ed 100644 --- a/gdbserver/win32-i386-low.cc +++ b/gdbserver/win32-i386-low.cc @@ -473,22 +473,44 @@ is_segment_register (int r) return r >= I386_CS_REGNUM && r <= I386_GS_REGNUM; } -/* Fetch register from gdbserver regcache data. */ -static void -i386_fetch_inferior_register (struct regcache *regcache, - windows_thread_info *th, int r) +/* Get pointer to register R inside CONTEXT. */ + +template +static char * +get_context_reg_ptr (Context *context, int r) { const int *mappings; + int mappings_count; #ifdef __x86_64__ if (!windows_process.wow64_process) - mappings = amd64_mappings; + { + mappings = amd64_mappings; + mappings_count = sizeof (amd64_mappings) / sizeof (amd64_mappings[0]); + } else #endif - mappings = i386_mappings; + { + mappings = i386_mappings; + mappings_count = sizeof (i386_mappings) / sizeof (i386_mappings[0]); + } + + char *context_offset; + if (r < mappings_count) + context_offset = (char *) context + mappings[r]; + else + gdb_assert_not_reached ("invalid register number %d", r); + + return context_offset; +} +/* Fetch register from gdbserver regcache data. */ +static void +i386_fetch_inferior_register (struct regcache *regcache, + windows_thread_info *th, int r) +{ char *context_offset = windows_process.with_context (th, [&] (auto *context) { - return (char *) context + mappings[r]; + return get_context_reg_ptr (context, r); }); /* GDB treats some registers as 32-bit, where they are in fact only @@ -514,17 +536,9 @@ static void i386_store_inferior_register (struct regcache *regcache, windows_thread_info *th, int r) { - const int *mappings; -#ifdef __x86_64__ - if (!windows_process.wow64_process) - mappings = amd64_mappings; - else -#endif - mappings = i386_mappings; - char *context_offset = windows_process.with_context (th, [&] (auto *context) { - return (char *) context + mappings[r]; + return get_context_reg_ptr (context, r); }); /* GDB treats some registers as 32-bit, where they are in fact only From patchwork Mon Jul 27 17:42:29 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140037 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4BB044BB1C02 for ; Mon, 27 Jul 2026 17:48:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4BB044BB1C02 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=cioJnoWw X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic306-20.consmr.mail.ir2.yahoo.com (sonic306-20.consmr.mail.ir2.yahoo.com [77.238.176.206]) by sourceware.org (Postfix) with ESMTPS id DAE4D4BA79B3 for ; Mon, 27 Jul 2026 17:46:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DAE4D4BA79B3 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DAE4D4BA79B3 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.176.206 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; cv=none; b=vb1h/+D1nFvM8TFMPy0yzTVjR5rFGkAZp3SQ0jeHuYEkQkbqOKJGNcpfjkUXGA+YWMoIsEOPYiPQ6RZEPpfasCCt5u9qs2Tj+dd+fUaIVo4zcnMRuBGdHRuDfbx4Ccu5KBAkayvqJVrGWxT6TvOVCiVfwTJyvNKfnlbLfnSz6vQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; c=relaxed/simple; bh=HFT6Q4W0ecO3i4cupmmOKeRh5gtOjmeGAn9aDBccgXc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Xri4noDKusFTLGK0CZFwA57L8s2J1jWhFKV5pAI0yVFSWg3q//9mvuHLv5+CEAe640etJ7jttl+O578Spjc5Ml+zj0pq7fypxD+GqU2pWhaDAumy0O6Cfdk5Lqom+uPzjXhD+gngjHWCR5RR+S98FjbbUD6W3tYyaSGTPmKnVvo= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=cioJnoWw DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DAE4D4BA79B3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174387; bh=snTZrXj++5JmIDFIAyiy69dGv9O1pfvTv8FNQKjfNtQ=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=cioJnoWwbqouccl+m9vPmoPbtFleGeNKYAYZ5Q0g0ygPhgBJ6Q02dV38dCt03rDMu4s6EAkMs9X+D51QbMqXV49cvjUCHhVYPqU5n3esQr70rgkG+nLlDIsRVEyGXhJdDEZ6Y5G9O/j3PU8dxoaB5qtXHsHw5IlEr2C1QSnArIKVlx5nwQGz3ZDJRkOQDuebIQ9o8WB/TyNHtkmkMGH2XEbjVyrNIu98qiWyzYXc9pjVT8Oy6VG/nuOnopebtAB995QcyFBhqHAa9MHCFPjC4As7bM3TJnQF5EX6YLb0nfsXd3Aa/4uy+TO1U+QBCGfP11Zm6XDebQyyC/Jdp3XwTA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174387; bh=RpAB118hmAERcPRnDNQO3GRzxMh1T0Ae5vMA0+AdxcG=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=nEiL99RhtB8CZNtFtyBMPzs8jCMSKCBKnbdpMlEXLI4dq/jj4vo7tV3HaHGVni3q60AoKD7IIBfEDqolLIxS/NxA8S7wK8UNLjpiuwhlLoGlfl1bR3EPl/YK0bXDfHu0E/oeTXr3z5xYFA3YsJZyhl+0xZmv/lfbTpSlW2N/iTiXJBWP9dXHxpPZDa9bEpaW6LDHwtaKMTRebtDCYm1AwDpA2RIYT9XnNLRkZm2dsX+4GDBxrXA3Ns6U11grYubECve/4NXaRiq4oS6PL6TN6iN3EIvwUlHeEn53z5qnpw8MMSv8cXq4LLOzy0VT3SKccQwJnXwhgggpncAuNaHKvA== X-YMail-OSG: tascUbAVM1nLawcxjc0B5E22gVVog3dGRTJ4wv8MC_L3xfvrOilxOO8S55la56. pMI3O1T9nB5RD.jpzaKBQyI3BRKUfWz4keAFFlFLIuu8mpM2m9l9xkxNxYIXMF7ENe35R0C3c1ux XA5jprvE5tRFlihjfDbTyPUo91UdmUo5006at4_0bhdPRU6.GrtyGY15meZ7yopUMNheea6sz6UO pC.K7F9cfwpKn3R73LsIrwsZjhOhGLnTspw0z.7c4bCq8hP7ggTGTNpKtmEyqZrWas4ee93Kmz9q kjhDvQXNQ6IpZpVWPKaCn3aE9Fhg1vy_JWU3tNDuWHCmN3IhakQC6ozulQt7KyNBxcL10MGnvIer qdZj57FtwaFQNJlmmTNw4G8QgEqoBgS2cESQIYDvOLtogHz_8xNtwyNcy1bTLsuW5Dx23gF7MKCx dDHWxlF1pRoCAU2b5g.XQJtoY34FyoL5m7m4vi6hSkdttf9VUlvtlLADFRfB36.oi_zYDnUU4ZNT ALENoDcGjIAjZchJReDX0YQdoeNzXWOaQLHA5CA6.E1q3Ds6nFlhwRGqTjkkvooZHc8LBM_onP4V 24iDFfiqsTVal15qUfHEJ9SFwbytfKi3azqi.MRG2twn965VNbtn2SyVW0QxTQr9ZroB_wKC8_MG WTDAPP_1L1RN8_zKRyM1JNPJkr.3ozQxSV.Gf4KZYberDo927_BiPwgCjbStoOm44tuybsBVzHly eWukEWu5HoQ1qjWAgWPekGB89irRlijmNrtemFzyVeYhEMq9byErO6fsUbpgjUZ4NHbc41lBuxyY Pq_EJXITOnNsAktSaTsbji0GamvqLOPO3_ds9_A4H.XAGcCALuV1c03llXZGEVeQswt4PmGVY_T7 gS3XOvbMrWDpru9BYivZPt0jAFsNUPn2jjmEUcspBqDSXtCl2SoDt7Zdbr2gIEM1pjAtE9r74Zl7 lR12bkYODBNI6xPJ87e2umt7MdeHzeDXyRx.8rSDlWvo8Jjd4VxXduqRfXC3kDG15XqeuHPQA6VI GmdiErsK4ox1LGAY7C2pqKoTzw0PH_LiYKbQY8Byr4zFsDc97qUDjb5TFSb9pA_NbWGrTewjce90 EFhD3qAcpJVVEkQBDMbIqrKvuEwTP3plOFz6Jpm5SvD_m_St8JmklBbIlXkQfs6.xrgl1ZHUQ4qS O27wiwznYDhOKcM.QDSNGhd2Voy9Wrwx6oHobog9sUojysn3X8Yc9gkojEJyp_rKy7Af2vXRwqRv M5EkC8aLlMu00hyByBA5JNMPwmOv6yzp7TlFeej8zG.x4Rp8sfKXQupu.B0tOy97vm9IQ5O5cpvl ARMWFCLa74J_Fivf4..BEjE5AaC7f5RdvSw_Q2qSR5w4lG8J.S.o09OCnB.XGvil8CTSKAGCi1RG zYMtwLLlY3BL8RCwBGvNS3nwJ2F6ega_E4mqT3lnrb7Ij3P1zRDJWtBzsEZ9AzaFjk3UK3vDNM0H gNvXJcfmkxNlOSW9es.rufcfj.KrlEkqXHOnaG53DL5NOgP97D748cuaCXKUvclDEmiW0b1yoSP3 OIMZSbn8e584kxNs0LTUsH13tjrNoZfkCBLzpQovwt204d9N__Yx.qo8ItbT_EcKvTBerBdUg4cu 0T_QKLv1aLAiz0glJuvWmOWHUdGOLIPHgevSPF0J7YcU81.NwtAZO3BB6CA.rtQAIADzb6t0Y5Dw 2jl.Z4QF9Sbj4Nd_NZsbMPRj8st3BL96KE8oQqvxPNt9o37ksKxXPSrfH81P4u7fJhqsq9wTjkkW THQQtNHg42Dgm937wujLI5JslLnBo7MNGCvdSzMBZZdaGpRH_CF_qyKofPRkLXPIanb1QUTy7njc etWo6J5fISOIEPs.S9Kmz55we9cIWlsF5MwZIhUeSdtxE9QnLg2b3beX0MiqKi2ekjaFGjKYL8au 37kwGIv_va40eY16x1yZXwR8T6yC4BU1mT2GenjfDfkOYchmtT5mmczTb92O7eZocpeuG0LompCc uS_o2lTKPQ4mMaT7fODbaCRNomKhRGCyKeKlLc1h2pIO6a00GAMm2muJmn93D6y1mAFHggnFRLTJ hzatti32YI7s_T78bafcCd.hiWIPUqXMrvUw7q2jMD_Z9u7OZ.RzMeSluDS.hynG_4r0l8LlvRYz kSAsKkFkk852Y8W8mHPBKFwX04faEuIs3oyz0cpgLWgMCUUMs0GUmczKiHE8ZVP.qpAmBYlZ_U7_ GJkK_vXe9SZx5Wl63XexWyQ-- X-Sonic-MF: X-Sonic-ID: b885e7c4-e7ae-46c2-88ef-35ef6e3e930a Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:27 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:26 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 5/8] Windows gdb: Prepare XState functions Date: Mon, 27 Jul 2026 19:42:29 +0200 Message-ID: <20260727174619.1089041-5-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org These functions will then be used to access the XState registers. --- gdb/nat/windows-nat.c | 31 +++++++++++ gdb/nat/windows-nat.h | 116 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 689601f3a82..cd1f9e7bc64 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -73,6 +73,19 @@ InitializeProcThreadAttributeList_ftype *InitializeProcThreadAttributeList; UpdateProcThreadAttribute_ftype *UpdateProcThreadAttribute; DeleteProcThreadAttributeList_ftype *DeleteProcThreadAttributeList; +#if defined __i386__ || defined __x86_64__ +GetEnabledXStateFeatures_ftype *GetEnabledXStateFeatures; +InitializeContext_ftype *InitializeContext; +GetXStateFeaturesMask_ftype *GetXStateFeaturesMask; +SetXStateFeaturesMask_ftype *SetXStateFeaturesMask; +LocateXStateFeature_ftype *LocateXStateFeature; +#ifdef __x86_64__ +RtlGetExtendedFeaturesMask_ftype *RtlGetExtendedFeaturesMask; +RtlSetExtendedFeaturesMask_ftype *RtlSetExtendedFeaturesMask; +RtlLocateExtendedFeature_ftype *RtlLocateExtendedFeature; +#endif +#endif + /* Note that 'debug_events' must be locally defined in the relevant functions. */ #define DEBUG_EVENTS(fmt, ...) \ @@ -1191,6 +1204,14 @@ initialize_loadable () GPA (hm, InitializeProcThreadAttributeList); GPA (hm, UpdateProcThreadAttribute); GPA (hm, DeleteProcThreadAttributeList); + +#if defined __i386__ || defined __x86_64__ + GPA (hm, GetEnabledXStateFeatures); + GPA (hm, InitializeContext); + GPA (hm, GetXStateFeaturesMask); + GPA (hm, SetXStateFeaturesMask); + GPA (hm, LocateXStateFeature); +#endif } /* Set variables to dummy versions of these processes if the function @@ -1256,6 +1277,16 @@ initialize_loadable () GPA (hm, GetThreadDescription); } +#ifdef __x86_64__ + hm = LoadLibrary (TEXT ("ntdll.dll")); + if (hm) + { + GPA (hm, RtlGetExtendedFeaturesMask); + GPA (hm, RtlSetExtendedFeaturesMask); + GPA (hm, RtlLocateExtendedFeature); + } +#endif + #undef GPA return result; diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 76688fa90da..a344b0a966f 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -35,6 +35,9 @@ #define CONTEXT_EXTENDED_REGISTERS 0 #endif +#define CONTEXT_EXTENDED_REGISTERS_FLAG 0x20 +#define CONTEXT_XSTATE_FLAG 0x40 + namespace windows_nat { @@ -456,6 +459,14 @@ extern BOOL create_process (const wchar_t *image, wchar_t *command_line, #define InitializeProcThreadAttributeList dyn_InitializeProcThreadAttributeList #define UpdateProcThreadAttribute dyn_UpdateProcThreadAttribute #define DeleteProcThreadAttributeList dyn_DeleteProcThreadAttributeList +#define GetEnabledXStateFeatures dyn_GetEnabledXStateFeatures +#define InitializeContext dyn_InitializeContext +#define GetXStateFeaturesMask dyn_GetXStateFeaturesMask +#define SetXStateFeaturesMask dyn_SetXStateFeaturesMask +#define LocateXStateFeature dyn_LocateXStateFeature +#define RtlGetExtendedFeaturesMask dyn_RtlGetExtendedFeaturesMask +#define RtlSetExtendedFeaturesMask dyn_RtlSetExtendedFeaturesMask +#define RtlLocateExtendedFeature dyn_RtlLocateExtendedFeature typedef BOOL WINAPI (AdjustTokenPrivileges_ftype) (HANDLE, BOOL, PTOKEN_PRIVILEGES, @@ -550,6 +561,35 @@ extern DeleteProcThreadAttributeList_ftype *DeleteProcThreadAttributeList; extern bool disable_randomization_available (); +#if defined __i386__ || defined __x86_64__ +typedef DWORD64 (WINAPI GetEnabledXStateFeatures_ftype) (); +extern GetEnabledXStateFeatures_ftype *GetEnabledXStateFeatures; + +typedef BOOL (WINAPI InitializeContext_ftype) (PVOID, DWORD, + PCONTEXT*, PDWORD); +extern InitializeContext_ftype *InitializeContext; + +typedef BOOL (WINAPI GetXStateFeaturesMask_ftype) (PCONTEXT, PDWORD64); +extern GetXStateFeaturesMask_ftype *GetXStateFeaturesMask; + +typedef BOOL (WINAPI SetXStateFeaturesMask_ftype) (PCONTEXT, DWORD64); +extern SetXStateFeaturesMask_ftype *SetXStateFeaturesMask; + +typedef PVOID (WINAPI LocateXStateFeature_ftype) (PCONTEXT, DWORD, PDWORD); +extern LocateXStateFeature_ftype *LocateXStateFeature; + +#ifdef __x86_64__ +typedef DWORD64 (WINAPI RtlGetExtendedFeaturesMask_ftype) (PVOID); +extern RtlGetExtendedFeaturesMask_ftype *RtlGetExtendedFeaturesMask; + +typedef VOID (WINAPI RtlSetExtendedFeaturesMask_ftype) (PVOID, DWORD64); +extern RtlSetExtendedFeaturesMask_ftype *RtlSetExtendedFeaturesMask; + +typedef PVOID (WINAPI RtlLocateExtendedFeature_ftype) (PVOID, DWORD, PDWORD); +extern RtlLocateExtendedFeature_ftype *RtlLocateExtendedFeature; +#endif +#endif + /* Helper classes to get the correct ContextFlags values based on the used type (CONTEXT or WOW64_CONTEXT). */ @@ -615,16 +655,69 @@ enum_process_modules (CONTEXT *, HANDLE process, return EnumProcessModules (process, modules, size, needed); } +#if defined __i386__ || defined __x86_64__ +static inline BOOL +get_xstate_features_mask (CONTEXT *context, DWORD64 *mask) +{ + return GetXStateFeaturesMask (context, mask); +} + +static inline BOOL +set_xstate_features_mask (CONTEXT *context, DWORD64 mask) +{ + return SetXStateFeaturesMask (context, mask); +} + +static inline PVOID +locate_xstate_feature (CONTEXT *context, DWORD feature, DWORD *length) +{ + return LocateXStateFeature (context, feature, length); +} +#endif + #ifdef __x86_64__ static inline BOOL get_thread_context (HANDLE h, WOW64_CONTEXT *context) { + if ((context->ContextFlags & CONTEXT_XSTATE_FLAG) != 0) + { + /* Wow64GetThreadContext doesn't handle CONTEXT_EXTENDED_REGISTERS and + CONTEXT_XSTATE combined correctly, but separate they work fine. */ + DWORD flags = context->ContextFlags; + context->ContextFlags &= ~CONTEXT_EXTENDED_REGISTERS_FLAG; + BOOL ret = Wow64GetThreadContext (h, context); + context->ContextFlags = flags; + if (!ret) + return FALSE; + + context->ContextFlags &= ~CONTEXT_XSTATE_FLAG; + ret = Wow64GetThreadContext (h, context); + context->ContextFlags = flags; + return ret; + } + return Wow64GetThreadContext (h, context); } static inline BOOL set_thread_context (HANDLE h, WOW64_CONTEXT *context) { + if ((context->ContextFlags & CONTEXT_XSTATE_FLAG) != 0) + { + /* Same limitation as Wow64GetThreadContext above. */ + DWORD flags = context->ContextFlags; + context->ContextFlags &= ~CONTEXT_EXTENDED_REGISTERS_FLAG; + BOOL ret = Wow64SetThreadContext (h, context); + context->ContextFlags = flags; + if (!ret) + return FALSE; + + context->ContextFlags &= ~CONTEXT_XSTATE_FLAG; + ret = Wow64SetThreadContext (h, context); + context->ContextFlags = flags; + return ret; + } + return Wow64SetThreadContext (h, context); } @@ -642,6 +735,29 @@ enum_process_modules (WOW64_CONTEXT *, HANDLE process, return EnumProcessModulesEx (process, modules, size, needed, LIST_MODULES_32BIT); } + +static inline BOOL +get_xstate_features_mask (WOW64_CONTEXT *context, DWORD64 *mask) +{ + /* Use lower level function, since there is no Wow64GetXStateFeaturesMask. */ + *mask = RtlGetExtendedFeaturesMask (context + 1); + return TRUE; +} + +static inline BOOL +set_xstate_features_mask (WOW64_CONTEXT *context, DWORD64 mask) +{ + /* Use lower level function, since there is no Wow64SetXStateFeaturesMask. */ + RtlSetExtendedFeaturesMask (context + 1, mask); + return TRUE; +} + +static inline PVOID +locate_xstate_feature (WOW64_CONTEXT *context, DWORD feature, DWORD *length) +{ + /* Use lower level function, since there is no Wow64LocateXStateFeature. */ + return RtlLocateExtendedFeature (context + 1, feature, length); +} #endif /* This is available starting with Windows 10. */ From patchwork Mon Jul 27 17:42:30 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140032 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8B8044B99F57 for ; Mon, 27 Jul 2026 17:47:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8B8044B99F57 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=PmUqBJeD X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic313-21.consmr.mail.ir2.yahoo.com (sonic313-21.consmr.mail.ir2.yahoo.com [77.238.179.188]) by sourceware.org (Postfix) with ESMTPS id 2F67F4B99F57 for ; Mon, 27 Jul 2026 17:46:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2F67F4B99F57 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2F67F4B99F57 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.179.188 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; cv=none; b=JApAuvppXAUpM0TiQe5NHHkU9U6IG9j4n+iDFrAZ5kNskW5p7IlS5zj3x+BMZPXgS0hdeeTfPwo7HmJ0ang24k864o1RSU6j4TztHN83CfYSRPQ77vINsZbVXqPv2u2eYKfv+nqRHCwtxvpd7LiIpJHbTJ39/BnaqSuZ6q3Q92k= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; c=relaxed/simple; bh=1U30lUHnqcmuSOVxxWlfOAVyoCKBzw8Z7QBldoDZUx8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=OTArUpm1gk/s2061SXuN0EIvdGisOEUfAU3sclG51puketZMcoh6+qTqux4tPSJO7jli3UAzK438VryazEXD7LGZbCB/31Y8ScgET+vzPqm5u3vhOcFNiJRU8WHqeLdZ+VBRZ0tuBST68jXKAIJxwbCJzdiX9pDbG+RWQfXwhwU= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=PmUqBJeD DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2F67F4B99F57 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174388; bh=QHrmtPn7SY9N8WoSelTjBHElcXfKPUgzWFvuOCiUhZQ=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=PmUqBJeDqAvFB12XdKkUEH8UFX9SDvpKB51EBol17vRaMcDHoOvjqoCm/npAgeEjwbRe+GCNrAiW5nYIZomx9RqW+qe/tr8IY5qmXNba8SX1LCXeuKBYn7k4zuGP2Lp23EB2bCkHUFboOEAznADjL/XDBc5YAd9cusbbXO+KUkdiltrKui4RRNDoY+m8yFeKYwjZGyWTBQbLHjIlhLao10QVzhFPzmYKxP3a7NBNDgJfoCN60Fa/vV+zBaUP8GiPoAKxht9Sh8E6TKrsAcSPsO9knu7ye+JzI7+ruyQkne/eXfPHEJo74hS2EslhMSGTKlEvjJtY9bHbNM89dANZoA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174388; bh=rlulet1Mroj1t3aqxDoVXwuwo/jYVkbdaeru7uNdEgt=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=PjA6rnCIIaJKPImwoHvTiisnZVvSrZC6wUDA6EO5/YUTQNCVgYA7cx9Y3RTzsL01a7yDIJ9PQTWPctvqAlqvavCbi+JljrCfi+oPmbQJXU16Af4vw9NrBLPZxUSHRIl1VX4aMSs/NQvCK1ilmY9FH71Vq23pTSjWwn0hTtQnXfDDB+drYVCjpKQQOjimGO3mFkY3ODcN5v9Teh+Y8Pga3eZKCQld9hUkIcswaAPHjieWCr+6ruXtN3Tjx5glbjpbgtXvFU45T1AUtOQJ+D/5S1fOIa0BPQ6QL/u58lKKvm+rj3dDsQwp75MoQKx+OKCSEXJS1goFxyaMI7/0cgzqhw== X-YMail-OSG: xC3.vDkVM1nk7cWxG8htjeYOOhPoz77zIkt0KjS3f6TEtX5UVQ65Vnbe_XjQpPI oH60mIH_LlGy4L1hK1dexc3Sb.J3aH2nZq62AJh7UiuS150c56k2pS2gfBOy0_3HCLvrWrxk1HuL DbbLc5he7fSzYDactjroI3sHtcII79qPS5kQ.o_ExFOKFtW0KWp2x5qNCjMyKvxjC087vrLQ_U8W TFs13Sp0GotJ8.EN961m2qkJrQ6yXZ7bucQwBtv6SC9VuhUUKmdv9EsI4kU08vgyRk9NoEXLXNqU kmJWD._frFXnunqx9vjTumPMW1HM9yCYZmUn9ZAaYqsnbo3cCNZ_LAmyntwbeeDdd_91Odk99ixv wTakF4hoPzaN4FKjgQcJsAhi0fEEXfjbFVuEyWr96T1ddCCcsvkdrlTJZWzfx1xVWeiuvzpZ5Ifo u9s3.jfOQf..694BDsgjUfVzWoW5NvnyxShRWamFk4yIPms7ROD5CdXAlMXnEnbepcpsIxWaG8yv 9H63SSwqp72HhqXq3ypug3dlIEr.XLFAjBNyrSwqbD6aK4Fft41v6CL87bkOHrEGwiJLSDJmxRGb R8W08essmkt1VAxfJ3jdeLBMWVNHnck4vLGGpHlXfhPLAyiofEf0DnOG01fOqPZi9uu9a5_X6HZw HhWVaXSjzIIkGjVuWBWG8q..useS7PXFMoa5s70bUeIrpnnefgIiNcv_IhWLFW3GZd6UfAoux1of llyjjmvqxB2lCMMnhZ_i24b.TcFcrgX2a03FIFMW60EOCmlRXyNOoXXbCrRHf0VBGty_rDygxbty Lk6L1sMeItQ6fPGpsZ1bZ6ivCr7VWrqUIHGkp_NlvDlNkGTJErsKUWVkPm.vCqsL6TTxF4Gzq.y4 WIzvrsjETC3qxVrTvbOInjpiQVG.RyzAmJcwSYla6Ius6o0rN4gl307lSNQ3tTOI8BQ6ZhmpdyZj rX3gFKSiU5Wx1VS93yxm0xvzp3OG03jgq4ukdrAHM4Jubcc6rpT8Gi7QH0q3SAWfVC77KW0GncKJ QcvQQvl7gLad4U6XwP46nvPh2gOhv_AEgKocBcspoVnUA6YC3BSiz0DepIqAPhRNl0A3eY.W2TyE 4koiTpgZdSZzQlLD0zmAxRIX3TKXNsldDL6HYYDW.QQKBzxcKdbVEhynpjmbTjICaYUBZBabxhyk VU0s6Jg69Ghjqqae9x3RoEzGOdDlIITMlz5nAe_ylJUsF0a3l9mFpu2tSkm5oPpHqctYpD.myJpj YHLDfMrreJ0y9S5HXbpsc3ZPf2qx77K7H8Ly2q_m7fboECOHvuWGMIvcfLrZL4JxPuDPh7NGApdM S2QpKO9DBehjcYKOR_5oepAZEKe8gCvHHgXQgliWD0UEOBAQ_auwBYCrBdHFhLyaW7vrDzFTaiws qUEVaRX8u_8M4tUGnuUfSi5.R95ykHq34AgboAY7JNLQRzTp0J8I2YkSSXLzuy6T7LBQm7dm5yCC ik4wuZj4kRtVeR4xB9idkjjO1LZZnBnaasNPtorVwHdCBF6xPkZZlJQ14ZZLSMv.slS4z4t5_IVJ K4fJ_bCYPkgegYERzVv5NUEXurk3cBXhu2WuUkGCJSObLgXmmZSJ7JO70pp5bG7e9BxVM4UsOBDn 6a8N.oTyS6kOlV0F3riKbtB8cv.G9r1Bb2AKc3HWwRMmK2NefzzsVdbkCOzKhg3W6sZZk.OcZlbG aaCyVPpilsEy8KOCyCPmab5jodlITVs_44Trzc8DtZvsozjUJAA.duqYuBNEVAyZHo2wfRKeTtKW U_3g7G_m71WDyJAoduJcdGkG5ITX.yPq4CYjxYzFQ.IGcV2WnuA9F91q2OnYT_nym2K_Jc_niPTR CXhI2XqE7HdTCzekX4gqF1W_l2yx1kTFRaMcjcwcrn5dZ.51FkF1tTDwQ5yhixNobvfpwDbFprrn u29hyurS3CQpVRBSZzGvXKiM4weGTQ0mwJyx0A3YgvOa.NqS3pkuXmS3_SfG3AqdFLTAyptMYe6n 45FICZOGyJEfnKaRQmKWttYVqPWx5J77E.Gi_nIuOXQjP9m_DLWeZkPf41r9Kuvzjwz8SxI2RDJn lZA3VS11rGeCdV8GApIPiUnJ9OV1HVVEV5S4vB79QgGWzzTcA46zPnIP_wCup7UajnYqmqh_8tLH 7rDaN469QEJWMaOBIFQTMdVejTAS2WOoVEChoFZzWhjb964BdTYtT21am0PdkICh4bltAmpEUf2D PS28YvJppbRiPWMqw8w-- X-Sonic-MF: X-Sonic-ID: 4688822e-80aa-4526-b971-5368dcdc986f Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:28 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:26 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 6/8] Windows gdb: Get available XState features Date: Mon, 27 Jul 2026 19:42:30 +0200 Message-ID: <20260727174619.1089041-6-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Also prepares the thread context for the additional registers. --- v2: - Remove PKRU from the implemented features mask --- gdb/nat/windows-nat.c | 54 ++++++++++++++++++++++++++++++++++++++++++- gdb/nat/windows-nat.h | 5 ++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index cd1f9e7bc64..28678b9f1a7 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -20,6 +20,7 @@ #include "gdbsupport/common-debug.h" #include "gdbsupport/gdb_signals.h" #include "gdbsupport/gdb_wait.h" +#include "gdbsupport/x86-xstate.h" #include "target/target.h" #undef GetModuleFileNameEx @@ -84,6 +85,8 @@ RtlGetExtendedFeaturesMask_ftype *RtlGetExtendedFeaturesMask; RtlSetExtendedFeaturesMask_ftype *RtlSetExtendedFeaturesMask; RtlLocateExtendedFeature_ftype *RtlLocateExtendedFeature; #endif + +DWORD64 xstate_features; #endif /* Note that 'debug_events' must be locally defined in the relevant @@ -308,12 +311,38 @@ windows_process_info::pid_to_exec_file (int pid) void windows_process_info::initialize_context (windows_thread_info *th) { +#if defined __i386__ || defined __x86_64__ + if (xstate_features != 0) + { + DWORD context_flags = with_context (nullptr, [] (auto *context) + { + return WindowsContext::all; + }); + context_flags |= CONTEXT_XSTATE_FLAG; + DWORD xstate_size = 0; + InitializeContext (NULL, context_flags, NULL, &xstate_size); + th->context_buffer.reset (xmalloc (xstate_size)); + CONTEXT *context = nullptr; + if (!InitializeContext (th->context_buffer.get (), + context_flags, &context, &xstate_size)) + error ("InitializeContext failure %lu\n", GetLastError ()); #ifdef __x86_64__ - if (wow64_process) + /* InitializeContext actually initializes a WOW64_CONTEXT when + context_flags contains a WOW64_CONTEXT_* value, so a cast is needed. + */ + if (wow64_process) + th->wow64_context = (WOW64_CONTEXT *) context; + else +#endif + th->context = context; + } +#ifdef __x86_64__ + else if (wow64_process) { th->context_buffer.reset (xmalloc (sizeof (WOW64_CONTEXT))); th->wow64_context = (WOW64_CONTEXT *) th->context_buffer.get (); } +#endif else #endif { @@ -1289,6 +1318,29 @@ initialize_loadable () #undef GPA +#if defined __i386__ || defined __x86_64__ + if (GetEnabledXStateFeatures != nullptr + && InitializeContext != nullptr + && GetXStateFeaturesMask != nullptr + && SetXStateFeaturesMask != nullptr + && LocateXStateFeature != nullptr +#ifdef __x86_64__ + && RtlGetExtendedFeaturesMask != nullptr + && RtlSetExtendedFeaturesMask != nullptr + && RtlLocateExtendedFeature != nullptr +#endif + ) + { + /* Available XState features masked with implemented features. */ + xstate_features = GetEnabledXStateFeatures () + & (X86_XSTATE_AVX_AVX512_MASK | X86_XSTATE_CET_U); + /* The extended XState functions are only needed if the available + features exceed SSE. */ + if ((xstate_features & ~X86_XSTATE_SSE_MASK) == 0) + xstate_features = 0; + } +#endif + return result; } diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index a344b0a966f..8fcf5e339cb 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -760,6 +760,11 @@ locate_xstate_feature (WOW64_CONTEXT *context, DWORD feature, DWORD *length) } #endif +#if defined __i386__ || defined __x86_64__ +/* Available XState features. */ +extern DWORD64 xstate_features; +#endif + /* This is available starting with Windows 10. */ #ifndef DBG_REPLY_LATER # define DBG_REPLY_LATER 0x40010001L From patchwork Mon Jul 27 17:42:31 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140035 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1A1144BB1C26 for ; Mon, 27 Jul 2026 17:47:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1A1144BB1C26 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=FRl+xOoZ X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic313-21.consmr.mail.ir2.yahoo.com (sonic313-21.consmr.mail.ir2.yahoo.com [77.238.179.188]) by sourceware.org (Postfix) with ESMTPS id 16B1C4BAE7FC for ; Mon, 27 Jul 2026 17:46:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 16B1C4BAE7FC Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 16B1C4BAE7FC Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.179.188 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; cv=none; b=lHsMv307Io4q7cZ8Riwixc7Yd1KOEJBVJcPZzs1yc1S/5cEVPOiKLCcR94OV3MLVb1QTF9ioGHSOy8fBlwHO1PRWx8hcDzp50iow5/PA8VweUsZY0GIpLIcZJGDjCbqntQhqJCYYlFDZy03OwvKex9WvhDlDG3sgK/MQ5+cK5qA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174389; c=relaxed/simple; bh=oG/RiLHRe2J+Xzx9iNG+etzs8nBzWarKAFbrQzKUI3Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=I/RsUOCOrBi7Mk4RA0yki+9gW5RYvR7XNFT6T96gjqN7pRrh6cwdIcDIgBzn/Xnq9VJUwxFsJ/E9TgDina9Bs3DGGLBBQ3TCa8CeUVejQJ2SCOjBv/j8y30y7CL26tr+UgcdOrBxp289FJ4m2kYXDzFCOOFWq9aFkhpPgBL1ZXk= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=FRl+xOoZ DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 16B1C4BAE7FC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174388; bh=djuMJHb4+xvIDnKW19bZOuWhDBFWgOBD6BtBe9LFK/k=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=FRl+xOoZwOIr4Szj5XTa7q1S+WbL2o40wjovMQwlo1Myoz9CyX/a7GQgaY2MwK5TsrGS9P3Q6P7khyDMdB9PCtfGpXeQZE7Zj8SWZQC2+MtsotdT9iaObdyG8WmkB9TP9SN89hcfVYo2g7rAnLS9iMmpbOj+1618SDp8rC2aT04Ws44gxMr+toZq/YT8lcUcAPgmaPPNkez16RYwOLBFdt7JypaE2uYs/EKFUlgzDW02YLEpVf1BRYOPwwM7RCfvEqEdM4MoBudROv1xMWgJrsSHIUPlF1b4RWzdd0ek2zAr2bECzJJRb300Uk7aQGvKLIW/ymG+cYIyEhJkhBKuuw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174388; bh=38KRSvASZ2FT/araXdVxcXKjIMZqPvYqytKT+HtmDP4=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=qKmJuouN4Stas2WjtmZFL7VZUGlDPShgIulL+EcP+w/1KvagU6xhzLObdRL0Q1TTKwqn8OxJDrcrDCBQZkEzTnnB9l4ZHObutmja3BEKNTFqvbRsVgRbq9RByxFekVsPs1/YCx9XseYHzlLXLN/eR6ehYsDG/0pjUKb4OVXxe2EUOqD+VyjlMzNYeItYv2uOdGZ5Ypx9dqUepifKl0sOYxKExmDxiMENvcbg6zVkDBKC0AGkYU9CGL6K/laSPqS+hgW6XT3bHGNHAiPizmoSPURER3HvFBq+yLr2gURGH5hIHO1WcOz1zguVNe2P91zfNGk1IyCITSObnXYQvGhOKA== X-YMail-OSG: wPDG8n8VM1ma.l_4Bx_aS7AC5pdnT3PbWdo_JJzYSiP62NJ4wPmzhskp8UTHc9J p17aNcKHA3lR0w3XEyoOMQ2Tm_wV94pEjbl3h57UiXJ5Uby5BWNUqO13CxnQ2bKwoeWs4JaOOgTZ P0MYyGwtV8Exz0hQm.V5Ui.trhBTdk3aDmrplhPn5aAoErON5SmUD.20IYK6bXgLQG84Lxgg0Hap eb.ai5JHBX9sxeOvYx3GJrbSSFcACL__DSrssOFyDczhnyW7wU0QN.9tQTWKbOKmMk1BbpbpC0B5 N3jH9MQGKo6_ZbWhVkqSqqIkHThUujUAXbZ9ShM2HEjV3NAac4VlbCtRw9MAJprGOLOIKXk1iize GDaj.CvcTwqJgvCMHf.FunIqQWYbgwLslY21LQzLVjBu5FGlclRBVFJHxYO8RRXO0DE4vif_Qi14 SsMznswPRNKgDPOJMzssYJRmZvNM.6uxMe9Vcfs6PG7HpO6vtauVjTP6BgWhHuqVk_CcldE3xy8X 1GErO_Dt5iozpyuM..c1EYU9FzCk._rDhFfkE4G2awGaTpKyKfrWa8TzPWmLUVolcWGwVf0sSA7u DSbI8t3DfmCALzy8GZSdCcySCOfV1qauH6uADUO.jTvMidzI06fKtAhyyNTKQCAzhxGzYruLPvaP j89LrsEyfndvzl909gsuj7AKTIScAXY_3aSfvawrbx8KOjIfEQQunofTEZEarWaYSITAm99gxpKJ 29shBv.Dld_h67FitSe3SMvWAQzPxn7.Fz2lodXwzrOmVhF5Z3hzeoMxzUKgACq2Nds.L5Gzq7rB caMpF6zNsJVogHTwvx8UFiBAHP7wFJCbBCOVLxS4wi6esGhGqiP7uim6qTmL8aC2GqWTSZbG_ZwK TzQHB9bHbIjXDoQFLNnSMQS0trEIAGQ6OuGMtEcuM7.15DzWOTCCuwwRjzVfaLzfF9Ni1P_yvu8j wuQ02bvWpC.5NyPvGdBqDZSUUo7q8wAFE.2PCxT8eNwMQz_JZorXECnqXloVfzAM.G2d2zU_Uhma JivpVSgm_8eqEIT1aqryXhw1jbNS2yUdeTL6wK8Sny5vAnlvkfIk5b4jROeIFImFc9dIEWkBrCWd UtaSZsM.XSXBxX5kEBtUzj0mWhpmre3lQNASnKWJLXqE1fRqzBn6aKRiXk4MO7z_oJN1esILGik7 8StjCUQ8KLzEnHpmqtSv.unFeMSWz4x3ttiLntJkQG7B20ozGIuQkR4TPNkuu4cIreFALn7E3Ky5 5tNPR2oX0Zli5WCbzO5SRRnFRnRLkzIxVlkO2Xn2VZw_T9kHuyJHC6T5E4MCcNoKD7s2m6YjEnLm zrPoij3laNwcGN_Cii1SJQ.7SraAjvH2kIHpnkbFNgkKi0V8H7YLyH1oOeZC2R_UNNoL3TkNYWEB KSMwBJOdbJAPlRzqQGxWifveJmbk7mRnjSCgPeazHzLkXP.GgGXQIE5.NEy175q5_wn88kVlbmij rstq_BSy7xoVkkOFyLMFILSCR3uFm78q84s8ELuXGWIQPweSqkP.iUnESfSZMgHolXDfGxMPMBsA wWQ5l_oMcUsiA.J5odvnCAGg0TDwaV9fyRyvvP1D6OBbjs2X1gOgwU2Zg53yltOmupqCIbWyN9GA YEo2IZUuH1K9C3gPhEmrCgx_h62uPSBMooUPDqn9cpOd.0yDoIQFSR0rUcomS8eDVbr1yLbmKGCd sh3mhx_CUDWh5mNNXccBUHitvUV33oRyXj4.uBupLF8u9aEob26xUfwLLZ38L7MC5WNHwk1VGj9M l4x5_jLr0xzWBjFkif8JsbDcrwYZf40lBAmbCVJAt7TPBZ8yyBPIP6kJAULlqU_hWGyy8m6Mhj_U FDmp.hI1L3dfkt73FwU19mFx6M4C3buRedIVNhs.erwnlZGgp4XUitt8miabKjcPsvSP2T_Y.48S AipMwGXsYKx5YcglwoUXvhMDPh7CXxSLuWUUjKIlgiC.scMsdylnMBXoY2iCq31wBUJewc3uYSws 6y4EfwrXkv1ALyhUVB.P1EQLx74FlLDlk6sh.vJI7PAR20mFKFj8WJvSK19QG7dUAlHgiibhSrj3 e.6DSSPvR9hvJkxPnlR2aW5bseDo7YFzA0fT0bnAoqOVN2vRdTLS2W3T5nAGwuMYlNaTdx_eYj9o sTLPPi8tShkd1MTq0vCJYPNxOyrt86hHRh93sZJmStN1YxEPF816.q6R5CjakIRtdZ8XIIElzn.6 nVrWKEyuAUaOrmBWuDLljjQ-- X-Sonic-MF: X-Sonic-ID: e4b86870-daf5-472e-bd1b-ac0bb143341a Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:28 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:27 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 7/8] Windows gdb: Implement XState (Intel AVX) support Date: Mon, 27 Jul 2026 19:42:31 +0200 Message-ID: <20260727174619.1089041-7-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org This adds support for the Intel AVX and AVX-512 registers on Windows. It enables accessing registers $ymm0 - $ymm31, $zmm0 - $zmm31, and $k0 - $k7 where they are available. It also enables reading the shadow stack pointer register $pl3_ssp (for executables marked compatible with CET shadow stack [1]), but modifying it seems to be restricted restricted by windows. After this patch the tests gdb.arch/i386-avx.exp and gdb.arch/i386-avx512.exp pass on windows. [1] https://learn.microsoft.com/en-us/cpp/build/reference/cetcompat --- v2: - Extended commit message and NEWS entry - Remove PKRU support - Fixed context offset of $pl3_ssp --- gdb/NEWS | 6 +++ gdb/x86-windows-nat.c | 108 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 111 insertions(+), 3 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 8f40ca5cb11..71ff5508d6d 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -116,6 +116,12 @@ intent to remove it in a future release. The s390 64-bit target (s390x-*) remains supported. +* Support for Intel AVX registers on Windows. + Support displaying and modifying Intel AVX registers $ymm0 - $ymm31. + Support displaying and modifying Intel AVX-512 registers $zmm0 - $zmm31 + and $k0 - $k7. + Support displaying the shadow stack pointer register $pl3_ssp. + * Configure changes ** --with-babeltrace has been removed. The babeltrace library was diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 3af5ef4dae0..270f9eae8e7 100644 --- a/gdb/x86-windows-nat.c +++ b/gdb/x86-windows-nat.c @@ -27,6 +27,9 @@ #include "i386-tdep.h" #include "i387-tdep.h" +#ifdef __x86_64__ +#include "amd64-tdep.h" +#endif using namespace windows_nat; @@ -70,6 +73,8 @@ struct x86_windows_nat_target final : public x86_nat_target windows_thread_info *th, int r) override; bool is_sw_breakpoint (const EXCEPTION_RECORD *er) const override; + + const struct target_desc *read_description () override; }; /* The current process. */ @@ -109,7 +114,31 @@ x86_windows_per_inferior::fill_thread_context (windows_thread_info *th) if (context->ContextFlags == 0) { context->ContextFlags = WindowsContext::all; + if (xstate_features != 0) + { + context->ContextFlags |= CONTEXT_XSTATE_FLAG; + set_xstate_features_mask (context, xstate_features); + } CHECK (get_thread_context (th->h, context)); + + if (xstate_features != 0) + { + DWORD64 features = 0; + CHECK (get_xstate_features_mask (context, &features)); + DWORD64 zeroed_features = xstate_features & ~features; + + for (int f = X86_XSTATE_AVX_ID; f <= X86_XSTATE_CET_U_ID; f++) + { + DWORD64 flag = 1ULL << f; + if ((zeroed_features & flag) != 0) + { + DWORD size = 0; + void *loc = locate_xstate_feature (context, f, &size); + if (loc != nullptr && size > 0) + memset (loc, 0, size); + } + } + } } }); } @@ -198,6 +227,14 @@ x86_windows_nat_target::thread_context_continue (windows_thread_info *th, if (GetExitCodeThread (th->h, &ec) && ec == STILL_ACTIVE) { + DWORD debug_registers = WindowsContext::debug; + if (xstate_features != 0 + && (context->ContextFlags & ~debug_registers) != 0) + { + context->ContextFlags |= CONTEXT_XSTATE_FLAG; + set_xstate_features_mask (context, xstate_features); + } + BOOL status = set_thread_context (th->h, context); if (!killed) @@ -227,7 +264,7 @@ x86_windows_nat_target::thread_context_step (windows_thread_info *th, template static char * -get_context_reg_ptr (Context *context, int r) +get_context_reg_ptr (Context *context, int r, i386_gdbarch_tdep *tdep) { const int *mappings; int mappings_count; @@ -247,6 +284,54 @@ get_context_reg_ptr (Context *context, int r) char *context_offset; if (r < mappings_count) context_offset = (char *) context + mappings[r]; + else if (I387_ZMM0H_REGNUM (tdep) > 0 && r >= I387_ZMM0H_REGNUM (tdep) + && r < I387_ZMM16H_REGNUM (tdep) && r < I387_ZMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_H_ID, NULL); + context_offset += 32 * (r - I387_ZMM0H_REGNUM (tdep)); + } + else if (I387_ZMM0H_REGNUM (tdep) > 0 && r >= I387_ZMM16H_REGNUM (tdep) + && r < I387_ZMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 32 + 64 * (r - I387_ZMM16H_REGNUM (tdep)); + } + else if (I387_K0_REGNUM (tdep) > 0 && r >= I387_K0_REGNUM (tdep) + && r < I387_KEND_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_K_ID, NULL); + context_offset += 8 * (r - I387_K0_REGNUM (tdep)); + } + else if (I387_YMM16H_REGNUM (tdep) > 0 && r >= I387_YMM16H_REGNUM (tdep) + && r < I387_YMMH_AVX512_END_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 16 + 64 * (r - I387_YMM16H_REGNUM (tdep)); + } + else if (I387_XMM16_REGNUM (tdep) > 0 && r >= I387_XMM16_REGNUM (tdep) + && r < I387_XMM_AVX512_END_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 64 * (r - I387_XMM16_REGNUM (tdep)); + } + else if (I387_YMM0H_REGNUM (tdep) > 0 && r >= I387_YMM0H_REGNUM (tdep) + && r < I387_YMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_AVX_ID, NULL); + context_offset += 16 * (r - I387_YMM0H_REGNUM (tdep)); + } + else if (tdep->ssp_regnum > 0 && r == tdep->ssp_regnum) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_CET_U_ID, NULL); + context_offset += 8; + } else gdb_assert_not_reached ("invalid register number %d", r); @@ -267,7 +352,7 @@ x86_windows_nat_target::fetch_one_register (struct regcache *regcache, char *context_offset = x86_windows_process.with_context (th, [&] (auto *context) { - return get_context_reg_ptr (context, r); + return get_context_reg_ptr (context, r, tdep); }); gdb_assert (!gdbarch_read_pc_p (gdbarch)); @@ -333,7 +418,7 @@ x86_windows_nat_target::store_one_register (const struct regcache *regcache, = x86_windows_process.with_context (th, [&] (auto *context) { gdb_assert (context->ContextFlags != 0); - return get_context_reg_ptr (context, r); + return get_context_reg_ptr (context, r, tdep); }); /* GDB treats some registers as 32-bit, where they are in fact only @@ -368,6 +453,23 @@ x86_windows_nat_target::is_sw_breakpoint (const EXCEPTION_RECORD *er) const || er->ExceptionCode == STATUS_WX86_BREAKPOINT); } +const struct target_desc * +x86_windows_nat_target::read_description () +{ + if (inferior_ptid == null_ptid) + return this->beneath ()->read_description (); + + if (xstate_features == 0) + return nullptr; + +#ifdef __x86_64__ + if (!x86_windows_process.wow64_process) + return amd64_target_description (xstate_features, false); + else +#endif + return i386_target_description (xstate_features, false); +} + /* Hardware watchpoint support, adapted from go32-nat.c code. */ /* Pass the address ADDR to the inferior in the I'th debug register. From patchwork Mon Jul 27 17:42:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 140038 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7C55B4B9DB6C for ; Mon, 27 Jul 2026 17:49:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7C55B4B9DB6C Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=CU4e07cT X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic302-21.consmr.mail.ir2.yahoo.com (sonic302-21.consmr.mail.ir2.yahoo.com [87.248.110.84]) by sourceware.org (Postfix) with ESMTPS id 720E54BA901F for ; Mon, 27 Jul 2026 17:46:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 720E54BA901F Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 720E54BA901F Authentication-Results: sourceware.org; arc=none smtp.remote-ip=87.248.110.84 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174391; cv=none; b=iNc7qhwyklM+MTujrAJ357jBTh7LpgVRGC6G1uzXQ+iSQF4JztIm67ZMup4pRExR4qCrRSDux6os5enz2u/aJynIU6IeoifN++0ys+FN5S/6FQ0VDvOtGaOtBZ8Ad8Nf20/Qpep+fMeI3+6HvqzIAugFlEN/qWs+XwREl5Cc+ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785174391; c=relaxed/simple; bh=YX5/3zgp8jLEdmQHTBw3vXTFIxGKwP0wJY9Eq/eEQrw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=b7Qn1Ln0IduC3HstuP6b78rh8CIAhu9wmMry6Psdqvc8Z7pZi60lE6lE4L1F5WMPaWL4RV6zL36JbodrwqZdqxawc5rXgCWVyWWWI5/HjFJGrCECalNeKNVjBoxq5UY4kLxTx9uPQpjvR8CViAe3WZZWk8SmLEcPth5TOEkLsoc= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=CU4e07cT DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 720E54BA901F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1785174390; bh=PfPrTbMbRG7H1XzmUD5wnPj4rgmB3mDhaD8igPOnF4E=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=CU4e07cTo/e7WXGyxKnLWh0NqENU62OjOmD5WQ1Cc6qfDZNYbulDcHcr1nZIBjbjFKGGhamF/ZAFeR9VFieu8gcfdckBJMaeqCGvwUvAQUbzxBGxSyfrX7LHcLwfHhFTCVxj9GOhzzWSx5D3253vBU/YBdoqlIwTdt3xsOx+Yag0cregQAfhk+gBSbgSg8pLK0JgjctnMIJtDHplNptvj681TW9p0sgyE2WmQ6YRLvs4HPGjGQKtT/D56L7XQ2vGbaXWVcvzc5IuFgwVa2JDe1MnN+IU96RugBPE/Bs5xT+oPMmldBra5aofWlWCAd1pi27HywyQ1m+P6o1LhAxwXA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1785174390; bh=IFW+vngDIBtaWsAAHPRthkqI63sNWmPdjMhSlePIaUO=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=tulUgF7rS2J85i9OhALzJZnAqBofY0VIsHlP+meOfz1jaV/sfh4VGva2gV/dGWqEOET8aDoVmDFs0x4KF7GfOVMUpVX8nLHiB6DendpQ9p8rey5Y76c3bEIcmbdxpUFbUnxFH2/FZVHYkBEe2v+0W0uGykRdDx8Hch8s1LN9HasDpqthDFKkpviNKUMuqYjYqj6QlGNqG7QaMXtKTRPPdVhT1Pz7aLV9dpNITJd5dHKYCBsAq5bUVMT2ztM2hY2HY3g8TxkD5ecSA4NmGejOLFG+H5rp2IeogHBLZ4nSWfkf4gSHU3LLTkX5HsxGRFGxlBqR32KQp/LFoNhWpDOKnw== X-YMail-OSG: ynX5VoUVM1kwU8AiiJjtD8eIGWl5tpkEQRG.eqGocvY_vluerVFv57c.G2yrGtp rQ5zOXDtlpjgmHuHnFlO5U9ccfQLBxdiwO3p6m4ZOypdV5Annrx7lQpf69J8LTRVrTfQVVdeTnJI TjnaUAFGfrQgvWjBobsKWOQ7dEUlPEld.yviigtdQnydnjrGriHZpJ2E7S_f1b7chrCNaiL9gOaB KsDzq1YftUxg6uqgU.stPpDRBLCjRt0tdr51hPm3Q191.pXRPB9ANhfUifkyGSQizskArWuVQecT ojfnd_4seBmzxK4lUhWYG1ozPbKokiBI6f2kJvEYZ7g5SK.ZJvsc.ORga_YsI.bXowD30CKlzLRX TBzD8aY3Sa6ErqFqVodzC0fl.FISWbkYBf2JK2Tt9Vo7VyeGM4U9Txhdv4_XmKgYuW8fQIEBnZv2 w0Z2DitltR3Wl2BI1WN_qfB4EjaFIfZc.7O7w5m97Jbic3C8Sir5PR1mUbefRaw6M6yi2Abo8wZN FmQHoVwUPY_zgM7KHLMMmelOMtD8TIrKXUVIAnmdoAgwqUxi5d3bO6u6k_DP.f0c3dKQENGyUh_g qMbB12VuvAXWKaN9Cwo7.rt1iUswPKt4FR0e9zGa7YIh3goU3kuepH_eMVn1VhMZlmXJsKCwnSQ2 Q2YqRaacZXZAn2U1Qv.GaigAreulgmfYAQFGsVokKdHO3pT.0Z6P9A7fXpMesjJPLCNiAhO2bJM_ XsHIXPHP1T7mSJq2R3EKVycSTnoIetv.Nqxo5rtkCZkkSVEfREt4pCbPjA3FMz6fyxtp2V.8kEky CMt_nU0C6NjvtvQYFi53HCbFn.gaeHnoicjlweRIodVZ_no_4yRTbJqcuWt7SeIzEK7QMUG26rvk PROeO5dRpqF8iBDv5j7WR8tn.UUuvoCzNCRw0oyEpplYU.jAdXh22V2j1fRA3El8Y6pgYRyvQ.9J zukP1ZUKz04v_rbz4V0LM1D7mKjCLK8vUmJt4oEfagCcZYQyFDj7_zP7XZp.U06O1Q_0LpDxyeYy Pl6xYnGOQkYYiAdX_vyAqFirGd82Kl1GZrYhRz2O6EQcVHhC6QcpeBhMijhWHDD167vaQSrRER2H dMhcaM.F01bPzcGISuWrSFhad6yC3LvS4w7dRUdd2J28.SLfRyRZGh6bPn2y_ZAc9z.lAy7NyoOU vdvQKlFXQxxYvzvemQNGarq62lieHNVEKEvuJTWWRrhSySWpfpyJGZ4c_IqaTgLqoQkbmF_L61vD N_393m4TOJaMzCk_uSJYuHWrtwPk1CcIzL5Plnkhr9QCla5fSs_YOaGLdpbrNoffnbjHidHnk9J7 w7uQyFyehtBWhAf08R2I.XBvVPisxwZTZ1BjMLu7lQMKXAbSt6jUSP5KDYlKxDeSFau9cVt2gJcC oEJuQU_o2dXMrMawqabFRQJwRokud3Re7qSIug8kCl0FkkJ3SChBp1hPqkTsGB_cw.6lgWibsGFm mjfrpGFW89kcH8VOinmNHavIinm4mTS3SdnUOj.588W47HRaHx5EdTaTzpb7fXiWjwijoNYnoRMR mK0qxC7yncC5VVsX4ryvxOI5o7a_wTpI9R_kbW3dEuYBj2k3Y6t5O0K1tLyWoNxM1FhpdI.oMi_2 B2HDnu7.pfriRub.ZQZkBCe8r3VesbRXVCxSNvEyXJOWxAi.0lMFNmVh2Ui_nN1y9Lfm0h0y.B8I ste2hZU4cZ.wgQSziUGlwwVY8jx6R98gOzSQKvnhclpSv9G5mz4xza49wT96yIrhTiD_rx1aWTbO BMANkd21S3pr3GZ.jtnwiHM50fRrKkxH.MkLTniJNaKvR.UuuK_paYicC_HuhposQk9nGZjfqU1V vb.OrDshdflnpBT9XgLG_E0QCzCS4sthUnmMxAgsVrtERaqL1rmJmavCQGO7h0ziiBL42dvRs3BB 2uORcsA.P6uCnQSUkb7dgXFXjdMIiHJDIQIj_JsfIegsOYQOJT8paHSu97E5HVCC5LIZoQRhaGQu OA9IUdqxeVNLzsQ.vfjdC3zVeL93ZyzjtfTIkbko_W9ikOJJqnpt53b0LrIH.8Pn8X6MF9B4DV.I m2LGKsIHLa4Yr_L3087D_ynLUgI5ptDzvKIuQYW2A7z0e_sFPugvqFH70pmX4vkNNy0SzqoEryLE uMXcQTmAlJMABBPQ5bMhw1s93ziQvvvCUDgVPNjrk2GRUOuocUqvCEDxAEJ20Olp9FRFxZc80bLy coDNvMduG5qsaHzAO6zTwz6VUzQ-- X-Sonic-MF: X-Sonic-ID: fc0cb90c-9f21-4033-8cba-13c36cc07c11 Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Jul 2026 17:46:30 +0000 Received: by hermes--production-ir2-676cb4d88b-rslc6 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0669d8fa15a3c4ff66838ce4fae4c373; Mon, 27 Jul 2026 17:46:28 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2 8/8] Windows gdbserver: Implement XState (Intel AVX) support Date: Mon, 27 Jul 2026 19:42:32 +0200 Message-ID: <20260727174619.1089041-8-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260727174619.1089041-1-ssbssa@yahoo.de> References: <20260727174619.1089041-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Equivalent support as previous patch for Intel AVX registers. --- v2: - Remove PKRU support - Fixed context offset of $pl3_ssp --- gdbserver/win32-i386-low.cc | 114 ++++++++++++++++++++++++++++++++++-- gdbserver/win32-low.cc | 15 +++-- 2 files changed, 118 insertions(+), 11 deletions(-) diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc index b77f6adc6ed..da1aa6fed5d 100644 --- a/gdbserver/win32-i386-low.cc +++ b/gdbserver/win32-i386-low.cc @@ -253,6 +253,11 @@ i386_get_thread_context (windows_thread_info *th) | WindowsContext::floating | WindowsContext::debug | extended_registers); + if (xstate_features != 0) + { + context->ContextFlags |= CONTEXT_XSTATE_FLAG; + set_xstate_features_mask (context, xstate_features); + } BOOL ret = get_thread_context (th->h, context); if (!ret) @@ -267,6 +272,24 @@ i386_get_thread_context (windows_thread_info *th) error (_("GetThreadContext failure %ld\n"), (long) e); } + + DWORD64 features = 0; + if (xstate_features != 0 + && get_xstate_features_mask (context, &features)) + { + DWORD64 zeroed_features = xstate_features & ~features; + for (int f = X86_XSTATE_AVX_ID; f <= X86_XSTATE_CET_U_ID; f++) + { + DWORD64 flag = 1ULL << f; + if ((zeroed_features & flag) != 0) + { + DWORD size = 0; + void *loc = locate_xstate_feature (context, f, &size); + if (loc != nullptr && size > 0) + memset (loc, 0, size); + } + } + } }); } @@ -292,6 +315,17 @@ i386_prepare_to_resume (windows_thread_info *th) th->debug_registers_changed = false; } + + windows_process.with_context (th, [&] (auto *context) + { + DWORD debug_registers = WindowsContext::debug; + if (xstate_features != 0 + && (context->ContextFlags & ~debug_registers) != 0) + { + context->ContextFlags |= CONTEXT_XSTATE_FLAG; + set_xstate_features_mask (context, xstate_features); + } + }); } static void @@ -477,7 +511,7 @@ is_segment_register (int r) template static char * -get_context_reg_ptr (Context *context, int r) +get_context_reg_ptr (Context *context, int r, const target_desc *tdesc) { const int *mappings; int mappings_count; @@ -494,9 +528,74 @@ get_context_reg_ptr (Context *context, int r) mappings_count = sizeof (i386_mappings) / sizeof (i386_mappings[0]); } + bool amd64 = register_size (tdesc, 0) == 8; + int ymm0h_regnum, zmm0h_regnum, k0_regnum; + int xmm16_regnum, ymm16h_regnum, zmm16h_regnum; + const int num_xmm_registers = amd64 ? 16 : 8; + const int num_zmm_high_registers = amd64 ? 16 : 0; + const int num_avx512_k_registers = 8; + char *context_offset; if (r < mappings_count) context_offset = (char *) context + mappings[r]; + else if ((xstate_features & X86_XSTATE_ZMM_H) != 0 + && r >= (zmm0h_regnum = find_regno (tdesc, "zmm0h")) + && r < zmm0h_regnum + num_xmm_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_H_ID, NULL); + context_offset += 32 * (r - zmm0h_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (zmm16h_regnum = find_regno (tdesc, "zmm16h")) + && r < zmm16h_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 32 + 64 * (r - zmm16h_regnum); + } + else if ((xstate_features & X86_XSTATE_K) != 0 + && r >= (k0_regnum = find_regno (tdesc, "k0")) + && r < k0_regnum + num_avx512_k_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_K_ID, NULL); + context_offset += 8 * (r - k0_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (ymm16h_regnum = find_regno (tdesc, "ymm16h")) + && r < ymm16h_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 16 + 64 * (r - ymm16h_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (xmm16_regnum = find_regno (tdesc, "xmm16")) + && r < xmm16_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 64 * (r - xmm16_regnum); + } + else if ((xstate_features & X86_XSTATE_AVX) != 0 + && r >= (ymm0h_regnum = find_regno (tdesc, "ymm0h")) + && r < ymm0h_regnum + num_xmm_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_AVX_ID, NULL); + context_offset += 16 * (r - ymm0h_regnum); + } + else if ((xstate_features & X86_XSTATE_CET_U) != 0 + && r == find_regno (tdesc, "pl3_ssp")) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_CET_U_ID, NULL); + context_offset += 8; + } else gdb_assert_not_reached ("invalid register number %d", r); @@ -510,7 +609,7 @@ i386_fetch_inferior_register (struct regcache *regcache, { char *context_offset = windows_process.with_context (th, [&] (auto *context) { - return get_context_reg_ptr (context, r); + return get_context_reg_ptr (context, r, regcache->tdesc); }); /* GDB treats some registers as 32-bit, where they are in fact only @@ -538,7 +637,7 @@ i386_store_inferior_register (struct regcache *regcache, { char *context_offset = windows_process.with_context (th, [&] (auto *context) { - return get_context_reg_ptr (context, r); + return get_context_reg_ptr (context, r, regcache->tdesc); }); /* GDB treats some registers as 32-bit, where they are in fact only @@ -571,14 +670,17 @@ i386_arch_setup (void) { target_desc_up tdesc; + DWORD64 xcr0 = xstate_features; + if (xcr0 == 0) + xcr0 = X86_XSTATE_SSE_MASK; + #ifdef __x86_64__ - tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, - false, false); + tdesc = amd64_create_target_description (xcr0, false, false, false); init_target_desc (tdesc.get (), amd64_expedite_regs, WINDOWS_OSABI); win32_tdesc = std::move (tdesc); #endif - tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); + tdesc = i386_create_target_description (xcr0, false, false); init_target_desc (tdesc.get (), i386_expedite_regs, WINDOWS_OSABI); #ifdef __x86_64__ wow64_win32_tdesc = std::move (tdesc); diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 3d85faf0785..ea5b6f8900e 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -33,6 +33,7 @@ #include #include "gdbsupport/gdb_tilde_expand.h" #include "gdbsupport/common-inferior.h" +#include "tdesc.h" using namespace windows_nat; @@ -427,8 +428,9 @@ child_fetch_inferior_registers (struct regcache *regcache, int r) int regno; windows_thread_info *th = windows_process.find_thread (current_thread->id); win32_require_context (th); - if (r == -1 || r > NUM_REGS) - child_fetch_inferior_registers (regcache, NUM_REGS); + if (r == -1) + child_fetch_inferior_registers (regcache, + regcache->tdesc->reg_defs.size ()); else for (regno = 0; regno < r; regno++) (*the_low_target.fetch_inferior_register) (regcache, th, regno); @@ -442,8 +444,9 @@ child_store_inferior_registers (struct regcache *regcache, int r) int regno; windows_thread_info *th = windows_process.find_thread (current_thread->id); win32_require_context (th); - if (r == -1 || r == 0 || r > NUM_REGS) - child_store_inferior_registers (regcache, NUM_REGS); + if (r == -1) + child_store_inferior_registers (regcache, + regcache->tdesc->reg_defs.size ()); else for (regno = 0; regno < r; regno++) (*the_low_target.store_inferior_register) (regcache, th, regno); @@ -1350,7 +1353,9 @@ void initialize_low (void) { set_target_ops (&the_win32_target); - the_low_target.arch_setup (); initialize_loadable (); + /* Has to be done after initialize_loadable, because it uses the xstate + functions if available. */ + the_low_target.arch_setup (); }