From patchwork Sat Aug 29 14:48:58 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142418 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 82FB34BA79B1 for ; Sat, 29 Aug 2026 14:59:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 82FB34BA79B1 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=J6So2Eal X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id E9E904BA2E37 for ; Sat, 29 Aug 2026 14:59:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E9E904BA2E37 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 E9E904BA2E37 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015541; cv=none; b=XK3+aUUIJRpouJWa4lJqt3pynjkXQC+ofhhTmKH3CP/owl6XEhE1HYpHA24E8BWA+S2WazN+65GoIWG+n1raji1bo7V3K9RpFPHvoOjDotN+7/c+iRCbwo/UailJrZQyLs5HEaUIyZLzupWwI7faaJBvJbccTANVtofF5W32/68= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015541; c=relaxed/simple; bh=CCFVU7ZzvHGp6cmceGhYIHYhiDLTz1/TGBt7i31PZyw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=j1SXn+fFOf4ahqzbhKtwS+w+smxIsJ7EIIb1zkWLiOtkqjuGL3nUX/jVrXaXlAppUIHObOqDhopRCnwj1ZLHprTgNtvZfIetJJfaBL3J9HlLcU82/UVo2GygCda2AvGba16niyjhR4qciqZzoqj4EUTXwyXrJpBC3C1KOjT1fo4= 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=J6So2Eal DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E9E904BA2E37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015535; bh=WEBbIQyY5bsc6JS5jriMH9C9bmZkT0sMrW3X9aEfHxk=; h=From:To:Cc:Subject:Date:References:From:Subject:Reply-To; b=J6So2EalUgkTKD5zbtzeQodMUegYZn7Jz9JOK4IhDRCzvNZyG+bDw17l+xsXernTwwphP7GZIDTtOwq7y2ziiDqOp6I7ZIQ5+NjzTcBE6XLNsJ/k/3XKrWrplM/seCbIg5n9mUS9L521nSGE043amlQw9kLSoZWGUNgix0Iw5CS+nBeimlGl4jxsxAk+nU05Aa/7FS9+1qDSmi6XtN+mSiVelbsCeR6/oEYHTT99EOV1fgNANlgdS324jH1r08pQElx5ZBqkLInlKfQItuyCeqPgTYTdjqGI9HdMluyp5xxk40nyDp/d4l8VH4c9ioPp5n3UHn5dQHl0oV2ck0p4Mg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015535; bh=l7LLya1N/EQ+X7h8O/J+3QAOXqXoEUEgihij9DonQix=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=NVWlpbKEbEQY7mITWEUdRu/2mRJmCHul0dGjkCF7jF4n45o8uZj5rgBdRat/AF/uAjJyoOdnQLsU201SXCQhOFfIyHAbUqyPpMesEo7axqowFSyIWoy8RBJaTYvWCKjEIyyk0GCxzhLB98iGJtxhwBUcGXfxSYJY5E1yMdjmuCX7bKAy/JnCKWoqQgoZOUAv+uAoSFI0AHi0HeaH+rpsu6gFuchTuMRsPp8gMNYM+uv5OCbiTetN3AJNbkb8jXHhsup8tHICsbo2EXj8NdqJxs13K85oe5sJDulgBI0jrBmqFZBYAeH7330eP8R57p/b8glsKsek89IPA4/CQsA9HQ== X-YMail-OSG: KKuk77sVM1kXVw9WdRELR4u.Bywrp6mbb8Y5mto7stGY35k9Z6mYrH50mwxtvl5 ZN2aTln88HrumZdc73W3UxVbtVIZk4xZ.ACXRfErHN.q_Z3JGo6.6Zt1PAKlZkB3Qd_aBw4W2JHs vDSQx4vUeG23f8AgC9ZFQFDRnamiAQmDKpfWe52UN38NnWFG.ewt.k9_8dBjWgEQZCdHAFn1cN.5 aD9EjJp3usIh0BQVhzr8glBE5YngDemWEbtqCQXzMJbgqGJkVr3j235j_2oPYq3_.M1mCl_LSp8S 04F6ifpM3TYW1IpIITfXzWQWgxSZtJ02Va7XgoNPZs_vzUydco2tTeHud.uQnXXcxv.vEEkHW0yH .KXgmc5X_vyTQ5Euy8wv572saOtDY__tkZWP0V4I0cywYEyX596eJZpu0wZaz15L00OCIYg1SNYG mtMUa6U2VPyU.bv50m9t.sDKPTpyqVdKstApbUbdcOm_XDkaxXKp2YaIjWgpxgkVOXkOQkEtkLsx WbSe_3C1jZnWWwtV4czdVRFd4DnQCcAQe_izlbZDo4a94voXYtClta01l2.N_khvIxTu7wK97A0t OeGYOGu4_yz27KKQWRwCCSl_IxHOuk3LARReSXbFJ2TDIVeENufH6pHAihT6ZJg992XVjRlTDJI3 Hvi8C.lT7RO1239cRnhsIS_iBZyRaDEdsDrwJ8KVvs8OCC6Sf6_Nhkc9vJ.6MzYRf4tyUwB6r1_Z UojgNrUrTPmBsGnazhply3q.9gFj9GT1ZJn1gJGLqlootktUmDd.c6dPGFnib5ILpWPzpolrO0e3 uNwhqdN3an3XLPkzs4F1pRXq3Cq00GLzmn7d8AJL1QxGEWx0OBS_B5KLOMdCtNOP19wJxZFqrIvS EgAVcoHDVkdxd7olNVJcMiZekAyup7dgjYsiLLvfFlyu2cdDDFArCQ2U_8gGpzWZ.0AXJEyTQKJd kyq5WnWCU7Q_muZL6UelgqzFa7JoPRbEFvzbtN9yU5xmHYCyoGbFZzFUueZEJq6RfQFgciAiV6JE loerT14sO3SHWAsGUmT20aRG6GL.m7oybQ2b77z.3Imw9uKqjlzWgO26WKw162OJ6ukpcwc8IdaE 4fnm63jq2vempzLVfQHLeNH6.3PLmZnfKb5zWDefOkfm3o0FHrIerzM.Gaqb1_uYYDaQzr1Pa76N rtsG5dAJgm4ZCTH6ZaB_h0oBWUSA4Z8C7rvUJy2nwtIH0XMSriTUZDL1DtXJX_gbqMmSOFnvp5S3 cHAbJMRMTclfQukzXXNz4Z7SFrhbfds.y3PGMfcVi4lczsY0pIb1TE9eSE0DKIm0q7jAri5C2zmW V2wtxW8l0XOZZ65j4TC5y7XScwr4oboB0t0dshAWuip.xMsGVh7AHg4dK2BVa96CTGe8xdoIlCMq v5Ar5MiL.v7jRkMZIMxgzY9MrwwhiXGFJB_TKUCHQ9Osi0j..B2E2XRssAU92IQSR8qrEEOYsoBr fsQMZtSV6AO02SifG_U6PZYlYnmVPQidx4q9iTTrlXTzMEMstHWUSzOCXSF7d2byciVBT6gJyKS9 YPAqHvL5AFxFMvfEcCi.rrtUss_v5igJP7UEoF8t0OhTsp5hDu1BEi2Ev_pWhA_fZ9V.B4gzzZju 9HmzREkly1_i5yXyBQowL5RZBI_7N3QNKHkhApfrCRTY.cWjeiH5VzUejjuiHU4YkJWsuKc4DrOQ tY98fY7KfX8a3uaL41Gq.9iTHETUvL0HCgb_Wvcue7CaxdJfQZwQXXsxVIZ7dM3Vz607I5u6QLbW slrdrcwhye6yV3AB4JuJH1rVv1uf86rOPJOQG6d.ASL43wno2iHVgQWtb7FXngkGAweY9PewF_gk bAPHUGmDi9sGmd_8C3R7UkKhUw2Tq6mhz.UUxQY6g1_7q7MheqA1S1ulo5BJIF3fxtJMpqYtd0CT 78ibgz.zRX4tSOBmnnzMoiWeRg.Yqlr_bABcZoqeIesu2yorL.KZDE9uaI7mpdw5tJEKVTeKQew0 - X-Sonic-MF: X-Sonic-ID: 3c181ddb-0948-47ca-83ea-446648c18e03 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-102 with HTTP; Sat, 29 Aug 2026 14:58:55 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b; Sat, 29 Aug 2026 14:58:53 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v3 1/8] gdb/testsuite: Add Windows replacement for aligned_alloc Date: Sat, 29 Aug 2026 16:48:58 +0200 Message-ID: <20260829145823.1034821-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 References: <20260829145823.1034821-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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. Approved-By: Tom Tromey --- v2: - Mention which test pass after the change in the commit message v3: no changes --- 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 Sat Aug 29 14:48:59 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142416 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 6B0354BA23F9 for ; Sat, 29 Aug 2026 14:59:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B0354BA23F9 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=Nzk7dzU3 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id F3AAA4BA2E2B for ; Sat, 29 Aug 2026 14:58:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F3AAA4BA2E2B 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 F3AAA4BA2E2B Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015540; cv=none; b=w9eBSRNk2U5nXxRZeJ0ai/fS+tQFEDJLgA2IKNnf6RjBKIzRV/oiODe665HvJgME5IO5zEq2x46krJ5uXhNrkOmbjowv3BqYf7FHv5k6SEhHKuR8UHGcGIxCV1Tyt7wj3WyiVBwIIpQBamS203wpESMA4FHxBoree7oq/AhWtT8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015540; c=relaxed/simple; bh=P1dhc23tXfOUhlJ6yi4rVORDUzX7J+Qg1ogF7uvpT/Y=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=G8C2ZRUnoGqnkp815ZpczXvwcJzKZFVzGTJVN7b/FrKp7Fubm7PXkTYIFVqld8ZdB4gQTUV3FtJUY6H0m6HRXqlWz34gln384j9vDwbhSJEFjAr5DZzlTo+sm9vI51Ky6Cshr1efhnIoA3Ep8tG1haPXc5gpAR5LNX3wRt+UDsY= 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=Nzk7dzU3 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F3AAA4BA2E2B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015538; bh=dw66aYIaksaSj+ESSd7CmUrKHHfyeIFs2NgxfCaeulw=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=Nzk7dzU3RO8cRZ0wn+IXEiPC7bMEl2qyFKX3n5SjhJJ5zgP5vg3QmRMEsfC/1kEyufXM+i4NeCAfrmp8blK2SWN6fqggcrjQjepZIIwxa7gBgEi3Mw5xEl1r0vsEJz3t95HHyuLnwfkQCrc+EGP33SvMpc387ngAztJSCnI0bqI4gVs3NokUwjR8y1EnK1eiCF3eJH49hJg1weyY1eV2jM9HgRr2UIg+sGcjAl+0ZYecnosjguf2CFl4RFVpgJthBHVUx54A+/A80pWNoyswMzSr4R9trcAHib5sfaXL7iNU7lxQrRFzOmnAKk3uahA60ogOn+JWuCq/iMnmRPaQoA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015538; bh=VFE5lYxJlaWxEzp5G+RfxXMy74y5QV5+02zvCLArRnD=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=OrPIhUUH29OJraKnwlWtg2+cLWKBIfoFfUFCs3cIaqZ5ZtEkroK3y0Ig+IHa7KZrYAlmGLFk7TvdqvbClS3Kb8bZSt+A/lX8Y8AiQwCW/+NL0N0DqE+7F37640v7T9ZYxXaGCOE+Tjk+kasfe6Miv/xOJ5aEgsEU1ZBYvxN8WNG1YxujgzqgSU6AoMNjNhVzsWL4Slxqr2Cqtq+QP4GvkdJ3ogzYeP/Su3TF7UqV5DgxNftbYXuqbKdf09f711D7Cz7yXXkWEqOgshzssLV5oZaMy7ieylQ80YBuvF7g3ro5ZTMxMQ5xoTl6ZHC8dvfE5XL4knMQGbJ2ETWhhfc3tg== X-YMail-OSG: NJqFc4UVM1mvC2kJIvUlyPQh0dg1f6tmX1MaAQiuvmhX_1UsYD13nCxaAu8RGnL iiOG3EN0zar7zCIy24EHg5r.cOiBe9JlAGMPH52pV6URlbOLzdSdQa1WGcOIGNiPrDZZ8ER_zJAo ezIRtXf8USQNu20U3ZhntLxN1scInbD4WgbVXKaJO2V2beuQF6b5xbUXY9LMDzRiMAOv1p8jRGPH 9WDicdVJgvBpo1rHL8_sHASNMyX0AKamKKDmsiD5wxAnGnzaSFnDBj1UJAwOu.4BC9Q3EE3YRDzg 2kcaPa2jgW6YxlqY5BaCsDNLSzGLJqWgKXnVtdPAhluRKbPvGW3ldWHtPEVoyG.GqTfx9Tg2PvRh 6K8JDsChGV0DQRRmsMvZEkrXdhTl.4Jra7kKmzzc9AcHJ192IbMNaVkd_sziI_jT1v0juV6WX8Oa YHFQ_zW9G4WDADKBMe.jgX8zNlt3XQeA.sfOULjedcJBR2KPa36v0wf6XL5lGuZ5AbPUX1hLnFzP BBQmK.e9nFdqifGksLor1MNv5bKu1mT5W2s7RXgukyRQ85XcIhW32FCx1Mwoe_DzBvo.5PtlHGXB VXLplpeQEpz7j.osVBTkjXuwasn4PVvZ.771JV7mVDD9evBk4vnO3K9b57O9iWuWa8OsfRNpb4vL BCcMzp3Rp_qOPoh5Va4LtNhn4UtRDS9sN8FBJplU8AZj.OokjaSeyC0M4b.qFVwJGEJo8JxwnPq_ cWRSZGOk5xhT40SW5.CNgcQCoYe27b5e9RM1YWmGVKAm8u5Mxf1x5fQzxhbbCZcHnR.gkNdOS78n l4JLMDLvTLoa4jUJgW0JUmvm6rH7e68q25259l6nAobzyD9Y.hmnMUeMB7ibllXNlDWlgp4vb8s6 C6tdXyMY1EfCNfQ2uWEcSOjOulrmqcIVI4hmsISHHtG7tuWa9VSf1vg4GWEqqRJtqhyK2RrdI.lb pJQAQ5czL5AeZHImSd1jJrAXq1p3c6K4GLzFKXb411yG0fU7I1VUhiFnJhCl_oCvF4i_xvoVYzwE Su3a02cIvNBDrR6J_BcTwbTC_QYioMV6e7RrepRr6rEFGD.ZJ_sPEDKV7bM6kRXZITb3ne8dqoCj moz2n7iqXzwr4AQv2xCsnuOZlUbAYiIB_4GRp_ZSOG2.zQIYvfPMPXQVbog2cmXQBcIiapI0PZEQ eKss_mHDgfTCH4SDe.Zu33XeQQ5LOwEpQko5ejMh_uzafVGo5YVM9zr2yqpn1m3_Tnv2zpQ2zKaP QX0RynN7_RyfOIUV1RzMZgbKfnaQx2.BKT_hoiHwthrxexhNx2yKjhHRtzyK7prTncPC8TrCORQq 43FgLTt9oa2WglzrlwK2bj.gvLgHGQtA3wBZcIy31u3d5EXNMG8baZDMu_PHJ8R2jElwVVn9lDxh oPF3Nfnqrd5VwgX.TnMTAkTRl9Lhce6zqW6TgHzlpzy4ewPYXPyTbdUqRuEMluQ_P6E_OKnt6RAG jg_Ghd1itiTPefutl_R4G3aaeZsQ1qC4BJAQOxG08dMRnHGv_v9qxZ8mwSapOb1HJmbzkcAeeQr0 fHXuELis_zrvcBwbmz7SAZGoUUnRung1U4zFfKf0Acn3GAYpMGfFapCWQUpJHQ23BDdgRtMSymqX LKYnmiCGlJgtXJUXS54hvgMdGNmcNXcKboFzRIQsO9.PV77q_9tHK15F1zNwOPhx0iTIbDpZoM9r LgdUGj6YlZvKPCnyH0FUGGlFc9uXmfniC4odtHPvsit7l6cXjQ52gixbMhGxpnuydq05rybfKyso 6XLbLZKNV1b7zNYjyBFa2EMZCcdsra59MOfyILAlwdku4Dwl.zJFBX1qOcW_28RO4rIggwzCgRTX 7RHgIO.Of.bwEuvhFufDsyEd8glNTaOispWN76ZgRNv7p6xunp3CohEMDio_ILcGPHU9O_RO9_yi bHDCRyvcgPCMFb0bjxdiacY_KzAL7UL1GPP0wJF7X7OC1DKMVySOcLwfs44.wQFK.Ez.PQ1RSEiB cDxzEetOEhcaOIjoeHsYG X-Sonic-MF: X-Sonic-ID: c233d244-fff1-4b9a-8ce2-bc589a4b95ec Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:58:58 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b for ; Sat, 29 Aug 2026 14:58:55 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v3 2/8] Windows gdb: Use allocated buffer for CONTEXT Date: Sat, 29 Aug 2026 16:48:59 +0200 Message-ID: <20260829145823.1034821-2-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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. --- v3: - fixed missing newline - merged initialize_context into the windows_process_info constructor --- gdb/aarch64-windows-nat.c | 16 ++++++++-------- gdb/nat/windows-nat.c | 22 ++++++++++++++++++++++ gdb/nat/windows-nat.h | 20 +++++++++----------- gdbserver/win32-aarch64-low.cc | 10 +++++----- 4 files changed, 44 insertions(+), 24 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..974b1d3535b 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -79,6 +79,28 @@ DeleteProcThreadAttributeList_ftype *DeleteProcThreadAttributeList; debug_prefixed_printf_cond (debug_events, "windows events", fmt, \ ## __VA_ARGS__) +windows_thread_info::windows_thread_info (windows_process_info *proc_, + DWORD tid_, HANDLE h_, CORE_ADDR tlb) + : proc (proc_), + tid (tid_), + h (h_), + thread_local_base (tlb) +{ +#ifdef __x86_64__ + if (proc->wow64_process) + { + context_buffer.reset (xmalloc (sizeof (WOW64_CONTEXT))); + wow64_context = (WOW64_CONTEXT *) context_buffer.get (); + } + else +#endif + { + context_buffer.reset (xmalloc (sizeof (CONTEXT))); + context = (CONTEXT *) context_buffer.get (); + } + *proc->context_flags_ptr (this) = 0; +} + void windows_thread_info::suspend () { diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 44b628c9bd1..ee85cca2984 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -63,13 +63,7 @@ enum stopping_kind struct windows_thread_info { windows_thread_info (windows_process_info *proc_, - DWORD tid_, HANDLE h_, CORE_ADDR tlb) - : proc (proc_), - tid (tid_), - h (h_), - thread_local_base (tlb) - { - } + DWORD tid_, HANDLE h_, CORE_ADDR tlb); DISABLE_COPY_AND_ASSIGN (windows_thread_info); @@ -183,9 +177,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 +198,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 @@ -318,10 +316,10 @@ struct windows_process_info { #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/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]; From patchwork Sat Aug 29 14:49:00 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142417 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 DF0534B9DB4F for ; Sat, 29 Aug 2026 14:59:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DF0534B9DB4F 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=ZDV31/Q8 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 47A724BA23EA for ; Sat, 29 Aug 2026 14:59:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 47A724BA23EA 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 47A724BA23EA Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015544; cv=none; b=MaAltqSlx6CtTRYoIJuhA64ieuUtagV7Sch0NrrbaVPotapmbXmf7uTKqbk1iLGgkLzm6atgXaTrxaORLwxAW/eAHUWGMTsmQIDqmQyhw9gR18ln4ZnW5VDJ0nVcxemrtYhgf8XZlyCycfEFVqQsjMA0qewjWkfXQWdck2bDfM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015544; c=relaxed/simple; bh=vKlP/3UkpQ9YlzkKZGMN/lBYoXYRDP//pauU5qmZkMI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hliH/qAofApBi1Yz0S/x72Se8nQi5arQPkjKvVaIkUzo9fFSl1C2ocWRe2/XJ8U75Pxhivh5KP6gCEEKf+lhaMetxu9WLPMc9QOxpmyBVhL1iSU8u/x5OwQnqX3x/9JG290zXiHLlz0UgHZqebS2Zz/ymTUgO9CUm+chi4wxSfY= 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=ZDV31/Q8 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 47A724BA23EA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015543; bh=c7FgZIU75WTpmBIGVgAIe+iK5JtAMDobzAXRo0sZOmc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=ZDV31/Q8LOSdbzhrrl96PuIj3e9pk/t1gxswb28Bdm4yQgUvEa7a9OjbPyNrWDytrMyr/j/FazppjVwynmZ6RsAoMF3+Sfv493CWYaZUo5Yy5acF34srwObMWyBb2ADsxC7IDsW6QCqEG70OEufMPUJzR/R04x4QP3Bt3ZnkRIIwAOQv1AQ/K0Nc3W4FtH/3mi3sNzTfMPnzoAerZthFmpznxIAQC4ZP82q3AoJvjVYtz5WeMs7jda3XgNzLzl7o6Oaj3ZN2ifhEo+KICUOWp5pYVBin1ytZyWOz8iGNLBq+6EN9Z4dif1BPJ6iZfNjbTqZHVtTZJxs2VkkE0JboPQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015543; bh=8SnmHawShr08WdAxwwF79o3anYKGElTHvRzfdP3ZklR=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=fK9rOVWZxp0lBFMjB3J69NhNVaFqVlprs+idwljisVtGBPlX6mUQn74jHbWKzGmF9pypvxfHQ+DOflIuXxqF+07/KkpeF/1Q3BvhiHFDY4Arz+ou84LTiNJBvQCPebTcULK3vWS3hvm+kts+KBB0wf3dLrOWSBj6V5CrOLXL2i7fw2+RiIXKw/vUIJa6dPctpY6GZsaBHpeJUqakX9H3VgvBzTpF+z+aC74UWR8gH8kbdcqE3dR7Fe/JjnoKxRcs9uI4h0hiAR9qx8eV1ujhPO6GUbMD3zc/GxG/VuxmDR0gz3YIACIJxkuliIb2RU0CXTe/qfukSrWRyW4zTTU91A== X-YMail-OSG: rBzGQj0VM1ktSujD1jEvWQLSP3lkBHPwd0NfmJRnczuuc9vOiQzD6ref5yiqQy9 eRxw30GwX4Nr1OmZagtwT76vdkKPd2Zau6fvzhcgeCgTCZ0_MeHfI0czdS8ALWR_9B3iptr.hDIa cDKnSbQcSfq269JuSVjcmtk9sIctiX7JzvDCR6rJtJ_qRdbMKuLBS8aBkj8GkN.j2M2Pq0_2qxUZ alFGKtdcRe2uIhgzFIgQjSKSGViUsicaz8u.eprVaZpRNwCUhxmX8FoP.baMhdT2h9cizmm9PNbt c46tAA3FW0cHw2LZQqHHIcoiUFwCQM43Q9TV0_JJq2F4E7.ebT4nBoJNaHB8SRFvMn9kw6BHc8Em w57fZew1R6Xkxr_xbA59Xpj9HgrZjiWD9HYOljSIdNzsTrcH9FMO4wmXG7J1fFFYFZ92trrvujae b6uIN21CNya5pUCo5V87gmKOGiX6.p2rKdJIhnjq15vgJGKst_3L6RhyVOPJlW2K4f29Kx8O5TFu 2CguiMSN8M650BKhr6OlhLI3hV5Ie37cwfeWIfbUn.BTtYJlQ18YPRJglkHv9Qk4Pk.pzMwtI9YY JM4OO0rISngL2eeBYBqFzN9h5tagSjNGwIE8ZpbmYopzI0nzcne4E0j2hcDze02RAMp09aW4NwPk C1yp8IKgUBae5QcaVGXSP9bnFraErN2m_O2FYrZKVtXDogaVravIeN7p81AO8GCWy585.SvCKbbN V3bQMccHa5_hshLBqovaYlxwPY_cjepNCRfUZuvlFiDvbaAzNzmkkvPlT1xFKdkPjDQglslgg9d2 LZRISvg_UFy5keRSODACZhcYqCJkGbsJgQe1SJ18s46iZCpxqzPZty9Qm7zAkGKnSfVY9JCoRQFA rYFC_khTuOvSm9.E3WiOVpaeVvFjsq268Eh8kcPq_mdseKLXbMcdiP1KaNC45mJszmVURjyv3jJb guA6ot5sdwmCPRnYqASW_Qs1E1vhZyYAbtzYO2KimEvr48Uqzbi_zIVfgP0x4k8zzdH.M9QYwb4K 5h4VLLtnIkRi4nXfnEyWQhAiEqNCWIfalD0uaIZO9_19MGaQWE9nPI_o6MRZ.tRm_bn6fWwl6TAd hfazsE2yglkjZu.a3I.GjwsVmRwaHzMfNIfnjIrC648aEKpLlzGz.sK1aOVK9j9sxVwLnEOf6qr9 95mvTzN7MSSGg_B.otw3ZSO8QD2Fs8ELfwReJPUy.4j.Klawol_sj0UZp7Bh.C3rHyP9qpbVxASm CFN6XFv0AqHeql7Q.XSGLfnxnxqbOWiiyEQKwO2JrM_JRVYOsGMXSHWGlB67iHKLLzMTJW5pmQ52 gkEdmIY9lYBj40oQMI8qk38T.81C0x_nHQauM1z7UV3V05o8yax3i_7YzgVP5oh7NFedH_qH1LON oXToGNEdEPsaSphvNEq99PPgTu8yO0Au1JK3pHrCuAmcUb679raRdbU7.tVjgxFNqil25FJO9qZB _OLnkjaZwi6O0Icp5xlY0kqg0ID9NGMr75XBCI2r.tvntd6T0ipxR4TfMggCV6akMM.NZrkfLzQD _vPHgNb_UlbTgjfIf4k5exJju5WjgeyJJh6AzeS3SvJ2kgE9qty0aF_.LbZgxDjv0cJUCach15O4 lNQS9k1oQreQ9Mwogncrdzd6qoukdB0CI1V6SOHwLhgNTcgLzi0f5xC37ElcStcECpZoMSh8VOdk H2U0YX2oF1PJsfJnOLiLOTuqwBVtVECynTdKKTIjviN7IApecCN6vQyWYeIQz5Ysu69tyjoLtM7J iKuI6B8fuZOmuDU1JaAZa1W.WO1f..RswWzJPcVRvZ5QoOvMMGCQ_a2aUDroaB88zx2mO08pm_YF y0XEPp9VKw4ebIzSh90A8Ucx.vq5r1nsXYwrUI79v98499IYiIjsHIA7yUdNe7UJiEk9buNMgPZ5 UmIhzuD6ifCklNb_4o8glFeJtz7BVxnhwbePOi.Wf8d.rauoTyhedbmofA8kWQeTqSTLx0EQcL6Z VxV63bbarsXyc7PcB X-Sonic-MF: X-Sonic-ID: 4a0ccc37-d4ea-4662-82ff-7597c02c421c Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:03 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b; Sat, 29 Aug 2026 14:58:58 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v3 3/8] Windows gdb: Remove mappings member from windows_per_inferior Date: Sat, 29 Aug 2026 16:49:00 +0200 Message-ID: <20260829145823.1034821-3-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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. Approved-By: Tom Tromey --- v3: no 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 Sat Aug 29 14:49:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142420 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 C86C14BA798E for ; Sat, 29 Aug 2026 15:00:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C86C14BA798E 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=IGSbEMFa X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 45A384BA2E37 for ; Sat, 29 Aug 2026 14:59:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 45A384BA2E37 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 45A384BA2E37 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015544; cv=none; b=Uv92CaOTX/Ty4VO11HsSdsJxTRePOKgFqdgm/gqyf9oHTvy3bT6SiierBFcnp+Y1PEFzXiVltWkK+axIU9mPk/2PqnlZUUV4MrCtuekso3fEo2ed+w0ptYTxBSV2WIkhU239nLS9bu0ZHO7QPxzPTCQRO1HdsWmvZsA/wGjIAgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015544; c=relaxed/simple; bh=KzSFIzDMiBZu1U2ZsuJA1amaOBWCVndSElaOp+nzxeg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=J86aFU5rR9UMfP+1hqj6KvDGikwzK2hxO08ZDrX30MwoxjUpm22y1RD/3LfFC2CyjkLjtcYyZdJ0PJNgQQPxSeoKqWytOCT8J2oryakLp0nOhNMPkxhXvzgWIJGgMjOkt1bPQ3FrLHoMz46qf88w3YXWThePpGOSq1kXSVxUOmw= 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=IGSbEMFa DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 45A384BA2E37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015543; bh=L7IF5p/MD3R10w5Uj8Te4W2LgWeyLTjgz/OBHbWg7ro=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=IGSbEMFaW885lOXKOf9bDNGvsbUe9vlZF2RJM014N5BzhZLru7aV3kbK4OvcnKTFVpwXCVj5elQ6nvZnBBlenqGWkmrF5/PVzwg1NoASMbwt2ktVyiNzmfkLTBN5nw7mOObR4Q/PisxYq5TSrVcwW9umwswnKU4HGDyn/2JGoYVWB/oNwQPev7JfOd7uSqSKWDspB9vfSWJQnmfSeRtWGr/qCJNY5qQTatdV8cPSb2KdsnjCv/xctGR5y49C/hO2e5gwBY+O1T8JoBk8w7AuwyCYBGgWgXkYLLwIrbIlAv0Yl6zTzdYXsk1WeU8Tv7BVR4iEOQrZlAkauGU/Hh/NlQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015543; bh=rd4sbo3yauXFMDE7uJCpc/85VygChZV49PCo6NHbFN3=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=FS0p/R9s0m+YH5rGCwEUfqZzcHcf7ZFqy402uJ90DsI0vQozAIeXm8oQF332GnG1fxILKqYV21YnDjaEWdCVI5e266R450UmJL81mAjsZa44hVVc6r4l2VWXL3LbzxtcQyrGDr1Qwsqh9ogQVnHKhczHw/mEb0D6omuS4C49/El9mH70uOTuEN1qZlgJnBYh/VOZE4sdGZPwEcN9H+rbU3z1KhRuQWIJeUb0Ep9ZrTGHrl7AFN/7o6j99M2B2iAj2fzniIsCAAs3LnJTu5ETjch5Uf33C6dNsi0GnkgDbJotyuts7yyK3eu2oLePfUQT0BSoqRsuXen0K4IuUqfpgQ== X-YMail-OSG: xE3QJGgVM1l.mROiS0QqVcyuDIppecOJgdnJjZ2gnDJrAlB5TSR6pkUPTVlyp66 lcQfmpJ8s2B5RjOQ1kUe5UoUHqjzSrdrtfJJt3zdJrQns.j0rgblnL0XzMh7zYbSjqApUMOiNQEv lvdJvYvi2XiCYAjYaVE_vFCJfp3u7tNxfMt7yZLMkHtzhzxK8HSVHAp.2AubnMxRqnFVDVj3ZwqO qHzdp7omjk4s8O3jX_dVCGaj9U_Dt00VFMR6HtoFZFb29y4zOUyjeF0s9dwge.vgoZkEePNpumDt inh96iazLguQLRqnAq3iNWmaop35blN4ookN9diIqH1wephbFLPEY7rdrDy_8_Ba4Uwm2iT58a5w pUqvst5ibZR9phpeYL4fqwdzvmXoivvLJdyjj5iEOGvaVAant_TE.cY7zm5CQ.lN8OqxH5XLdBzC 5LreS0UEPBvrsPt1B5nYUEZ1YqOMbXVf4kdPA5JOoA4JpUc5Sot.CDjDOw93GH5TQMU0_SUUVBw4 Dd97e7LWyXBdQsFxFLMWADb4ssO5_hUkiO3oBRYZMX09wzzgmVxeZyCg.BCAJw3nHdhJ6JHhtV_D gmBHU3G1IGBVCyMX_HJJks_RyQESF0PEHHiGRDiZYSnh3iwyTMtlCNqkaDOl1S72gz4Nm.nxXJ8J Msnfpm7Cd_t84.Q18Xj2jwm9r2WbuWV2Jm82YFMWxRx7Pg_6nbZaetQvwBFhjBQOCZVP5LAsBxbp zFCMuGgouS65j9zPzfEkb0Y7sjuPqiBQVe1AlOKbKSjhD5.aXel7W_mFZ5j22tInrzDehRqwBqxn NPH__N1d8jTaOLRdrZ_XR9hzcfQaAMsVFppx6GoHlmQbJMtrU7gvONqsIZrlFGgB_1fIxS.a_4uD 8DDl0Xj7_l0XhppV1ciZPTg737olx.jGXqbHSGFa26mzkiIvQS6nzPBUXQFM0Rz3SKc1XkakDYOc OnUU3mASeWlq64xg03gHnR9mx.XBlkXZcY2EgNkdR_57Qrk_T3hJWNTJRMw1mZEHqDDYXuTbAqES 7Wzt.MdhX59Ml6_6hJ1zVj14WIPd9hHMDQD0OS.pV2P5R6LlShuNgaZkiCyNX0wyl39ZBN7dYJzC KXe_dC_DYz2GYvfKbBZ.KYda.UusxUaWkSN7ww_dMnbHOfMVENM3GdLhduhyv3wCd0u1ykkgE9p8 2w.8iWrEqUfWHE1p0C.3mcMtjzn310Z5fs_mc6M0DbgWryZ3Tajsh_nHsFGfk8QMurf.a.sRYWcN z5XvjdsQh.GJE0heCqg5RJ22qKghDlCOjVcLWF9VMv5_...9jJ0o9HrFx6fWGNWwKAKvrErkNWM3 vNgdrukfXJLSHZTktbkAPiaiXXWeOf_Sc.VRsM9QLxFii2E7.FiRKME5COOY9IL2p7UfHnKISqie UfG3SflTFXYFu8FixMj8rpx1z8DtvaiEcRWTu3fdbrG9Z6qMfP7ScwyRdLGpj0Lj1iyRTrARCcyc sY67B_MPjnMPFf_8wHLAuwWyRTc0peOPjTse7zALgJrbGYg6_GVAmkaTsDP1G6ZEEPxwPlYjF7IB p6qD_0WaZpI.2fxNB.4bhPNjRXSpKoVGxRlye099GLvfZSBe.e07VBLVvfkIqJlyBpN0mJ3uj.ZP 8z_20_bO88mmBsCpJKWD83UYrKCM45vcnFtdF0jE6lTFZRtJu6nOojjP7tmiJd1ZGpOKAXXhZQHG eSGltfk6VBmjZihsqkEFVyeeBYWHPdKbDIx_qQpJXwu0k1lTzA0TyDf5vb4F7tvSimMAXo2fd2.L aMzgFixf8vG.g0xiyyDHwjckFNTYCdGJsS1nH37NgWuxi9d3DzGiKy04HralAvCutzOBty_OLh3G CuuhwB6OCx0tf_pqRT9.QK0dYhA1j8r76TlON2hNAJHLKOlpFVhyDm.sAo1pxpZMK_nxMBcfndKz oywbUqZKOrSxnVOGKW74UTaqXPmetk5BaUKja4kM_cnLiG8a7n.3_ox2T3IbvwOuUGOhxEcd9CEJ YOn3Uf41SXt2M4Yxxbz1e X-Sonic-MF: X-Sonic-ID: 827bde4a-9943-4333-b0af-9b5560c0871d Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:03 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b; Sat, 29 Aug 2026 14:59:00 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v3 4/8] Windows gdb: Refactor getting pointer to register inside context Date: Sat, 29 Aug 2026 16:49:01 +0200 Message-ID: <20260829145823.1034821-4-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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. Approved-By: Tom Tromey --- v3: no changes --- 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 Sat Aug 29 14:49:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142419 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 8A69B4BA2E2B for ; Sat, 29 Aug 2026 15:00:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8A69B4BA2E2B 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=R+hLMOV6 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id CCC084BA9020 for ; Sat, 29 Aug 2026 14:59:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CCC084BA9020 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 CCC084BA9020 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015547; cv=none; b=qZwV3zyG6B9R+Hcfi8tuaiNH/3zRJ/0s/9vw6lHS2poZawkelRbfO+EZPlYsDQPF2WGoYj9OCO2QsC3KcN382lc0hwJJyiQhLaiec0A/noQCZayOxOH4iZT8afGSqFG1ztAMOHioOEg7cJlTN+Pf1J6qgM9ZvV0wZUHieRtEeKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015547; c=relaxed/simple; bh=z8N4BnrlGT0z6T/6FtU6w5VuVXpIU3/9q+X6GwQJjpM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=V48EzCE04f2iIlRuIjr3tKD6EtFLqECyQ3c+UIJCPNXuc8jIJis4GXf9MdZPyPAWrxUpouS0/OrmXuVMqsaeKSuT5qu+iNwpS0jvlAoQNJ68fqIfSD8nmdfOomoJcM5ue/pogJIRbmTOvrPFVddjozldp7DJQE5Q+rAVkEMXu3c= 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=R+hLMOV6 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CCC084BA9020 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015545; bh=p5SLPyMyQTPH1Zu3AhpdDU7adGnzGZgh0LZoYo+sAGE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=R+hLMOV6zzgFMm76jPviqnZlkYDLX6iav2wKkXGjyrNjYQ3ftk9YV410GydAtyeh7FtXlVkl4jXYVni8AH1r+w9hYk/23PFxGpKmHivFgEGbWFoL3GPFsawkueQh5fW8wHxOzBJ9jsL7XlcUikt401Si1VgxIbyCmdA+ZX7F5NTc2Kghcc07D8U67dY22P3Ap02pP4YFhrVoNFtATeG48C5o47SXgnH+U1jGub7QcfUN4fWnD9wfhtcogB8b0jSNKAp3Gt12fGcxtR0erYZpQUbWeYhKcJmTZ3rOjwMlcu0rbdtzX1xtT/q2+4hdpblxm6jSeEYaBtcqfE8hLzo+Zw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015545; bh=6ZT9MJZ8uz4YJ5RpgPGV1Eu/HOVeN009ODdpoYL+SpP=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=t1MxCeHTUbswTtDVJMXF45zEmtq8n4ska8sGbCklW/xkuxSn96Qvtxr5i2gwpEBgJL1w/3LPXREbrrO+A+Wi358WxAw1ZeQgwV5VKUW4NVXYAspHWc8aJFN8iWFMVhQYKpF6ab8MyexGmkyIVYyJbELhH+iVJ4KjJdREc2PyoY4grZ8FYnWnIfejCKHzBrJdxtwUQffY+kDSMD+Rh9Iol40VicKnDMS1HPhH7wiwLlpzNZcgnNNFMvy2ooPWXFTk03psUoXIBO0Yz1p7+fJg6NNSTghIdKk+oDOiTDYN17jSA0La0Qkl/zJeqVZJxRcyUgSXKPuAkcXzrpCObfEzXA== X-YMail-OSG: Bxk8FisVM1nPcU.kHnyuaaSg9AiHStaiTItZ7i1u6TV205f1EKs4HKUeR5sUJdJ W_8FK0wbKI6sQDjAqgPWQHOZgQlYQPFkr5u7tlrR_iBeRnidTPe5zbuB9FPkIsfj5NQmFUimrYPE XcyRQqPjL5Hcv_fnE0qKgBaAun1D.1gOK9tXxLSQN3tCBDQQV3gvfzFfzMa_UNEMZJY1BCdmSJFg qYUp4zPL0f1Y_xUyPWQOCovrkuDIurnZM1O87LTSEoYnklCRx_nsBe86lFnieEbrfacEfEETX50q scZ8BHsho.Cdw4iW.aEuQ9XUR3etUOSaH9EdTkmgmunqgXgBXxkPD3IYRoZLT3.4DzYaRPT6HBFP hH4p_By8Vl3oa36HYU7ZOo.ZBMBfG.BQBVaf7zCLJAtgWC.SX_xhZGh2MK0Rqhz0vLm2_a644vUD vC.3tJfg7S7LPjdljKZicE8nLq53yOVU2.lhli261LcymTOJ6xsUlcDcmZJmbkpz15sl.8yoczwG lkSshmQfayqx0va5etv9JJF7OMqPafv21fY5mpVNFeDQUTA4ccPuzh.vTalOaJNcd0YPScVE7w35 4jMNNOPN72Ci5qiijb6N2aHQDkBLiSAH61JN7QFr6OLgD9GKP7AezE3n_P9Td8I1U34Wx0dpwAO6 WWDoLdKU.1b_t55t2WiMnvZy__HuqFsDXwz2DukMP77xmcyGi9D.92AnIsYUdb1YfyaMzSRkvwFS YnGjo2m.pdPB9IL0o2O7DVRWXNnC19PfzxMp58P5ChhAkia.lacaCw_zfg93qdkaJKeBxOo5ADw3 D1OQVVNIFVoN8mYp00FQLKnCaAPtgWyJGuSSJTgOqLw8iY_tI69NgKEVJhoZonICo24tMQ5.xOda igEUmh6zJCu_RyBsfhKa7pqCc2EtPe_ZiAquB3fZH90ogJV8tlwhXMi8oY6UEPjz96mD9PDdh_tc KrOAUYMBaJVE6DhTdrdFp1iXB0JDVlgWhvSm7zFfEAWxgW1daB6s5JHtAO0Y4uM_QLJ9iXY.R8Mr WmKyCyEibFop9lpziOsD_EWVLoB8okI8yuw6eYuldBNJfRzivWs9hUzu0CL5fqnrkQQUEccUH3sU sgiQ3MGYXEjVhI5X42C2eHpU_.9hGTsYykgedkbZ5zFmjxJA.f_AJsM4L7IL_dmYTuPXfwcAO__7 9zg5IUw8xC_x_JxTDLdC7oNtCvqzogvpzzImbW.5cSA5ErdTaRFnKFv8RGnDocKOh56A.sOkZ2bf VarITaVv_1aR6WYs1UovoKZuUC9B55Eiuwi.ObkBnsfcL132HKKj0IDzE1YYUGSL_bJEGSDLYUH5 vI0uQDbjZJaK4IwigwChFePZYHGGYLbBOoTp7uLzWGejXfUtzwBYsCsLmK1ZC7VllZJjrGH.2nPS bLN4BmN6KphPxCl1P68ASCAuRv7oDaayCM_sbtG4mNbQrMos3SI41pvbGQ1n.7dda7uqttvMqKiQ x0s2bM2JZ95f5XOUyAMhvoSVagLB.mkOYwtqiNE9jAS39KG0GfmAR19OSKf9Ed1luLvwMzD9EBIm RtbqCOLOTYI4AxM.32vbbHgt2rnx0xewtn4MSOkuarlaDNugljIx2qMNNphs9Cy7htpdyobyOizo xwCVWVqj99seFovDgngE4qMoL.LM_CqPXJ4ZRVth1Myia4mkg6PMOnAOn1fBiqni.UmMYn1YXdnG Ckc20rzrSpSz9_4e8U.4wYqkhP4ICHQk9IofaR8bRnn9.RAK5ZDcidQgO6pMZAFyowRm4hFXdnWR UAUaDqNsLGc5DYYImXx0dbaAsyI_a046IIzS3pO0iGIJeqzSt028FfdO8I6XFc5ACIj_UcU.L384 DriijTsqssoPX6dLJsb0aK30rzt6ZIDJrEQqRYf9rPjLFXOc5evwd2o58J.o5TF1LJzkxYKW9vz8 7rtA67XbwbdTGW6U2tUpBSnE6J4i9vzzvP4Cen2qfwcXXJ9RowjweySUGe58eFIvJ5yqeKrjBdhA _mYrlMemoRgQ2zJ2i0Hk- X-Sonic-MF: X-Sonic-ID: 87ac7ff3-74cb-42b1-a124-8ce2e8523c22 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-102 with HTTP; Sat, 29 Aug 2026 14:59:05 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b; Sat, 29 Aug 2026 14:59:01 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v3 5/8] Windows gdb: Prepare XState functions Date: Sat, 29 Aug 2026 16:49:02 +0200 Message-ID: <20260829145823.1034821-5-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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. Approved-By: Tom Tromey --- v3: no changes --- 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 974b1d3535b..8f91e755334 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, ...) \ @@ -1194,6 +1207,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 @@ -1259,6 +1280,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 ee85cca2984..53023859b9a 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 { @@ -446,6 +449,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, @@ -540,6 +551,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). */ @@ -605,16 +645,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); } @@ -632,6 +725,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 Sat Aug 29 14:49:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142421 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 2A9C74BA9019 for ; Sat, 29 Aug 2026 15:00:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2A9C74BA9019 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=XYA/zi29 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 508174BA2E37 for ; Sat, 29 Aug 2026 14:59:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 508174BA2E37 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 508174BA2E37 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; cv=none; b=vM9ukj9y+k1GYdlNzpie0eZBU8lWuYW6rQ6Q5QcX8lBfFKtWyqSyHX5AILdM8cr5wij4u2GliI0ACt0NzFCnbSquFCYU/7u7gh75iH+1KeS7zYtk0zJ219/0eIQKyUoDe5XVzsIU5jq18PnpPuaMFq6BCtpuXmHggPS701p87SE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; c=relaxed/simple; bh=rdwchNA1yCaUcDlwJ4vYyCH6eiEUNIo75R8QUDclatc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=bW2LECdyXNV8paMvrPTg/xvpHsAlDqzVSq6IMz3Zd82tT1KdTuL5CEdmvu0FQfdkn+/5iD5+0409CJovJUAA5ClL7rSlRjASNQaPPtIUNj3jK3NSW3Te8/nOs8GCuviZXem1+dWBcyM8uHS7+zX7WTwvuxM0Ie1rWTJ242nt4Sw= 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=XYA/zi29 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 508174BA2E37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015548; bh=J/FKR4ZA27eoJI0+1d/N+Um0Gg71RJR7ibvC6hVWHaA=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=XYA/zi29BQQUDkGcvE7YXGv+/Sp2GDVl99DgsNL1WfbLZsbtX9UYtI+HAq0/Xq7+Kk3hnVpdBptovHeJz8Aa7dK16cqLFHsLNa+3NzvC6YiWCgAPZxOgzNYbp8iBNkDqXoe/65kk5uZHPL9PNkk1ZpaOqc5p7RCBgA8dZ+83orv0S5ChBe7RIVO6D9yNs0t39Zlpno19fHM0X7/AxsoNFc/BgZ82HE8LQkr15YyhjOfv+HclEPEOPoZR6N9oet+92tWrwph04PK7ftDdD8hg7w8hVOLNFBmaV4Aw2CpqaH+8Vzj8qiA5gt0pZ6nTzDxgtG+BrBUEi0/Kd3i8ENPmHA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015548; bh=7anj2MJwVYISyX1r+WUDtnCpVdBNatCML5ybMjzJaeQ=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=bKyaLk2VHQ2mBH57wfOjkq4iGnJ76zh7F53BrKfm/oZzbel3ywJFhcJyr/0gHIpWPYlvsR1WOoNKd1fOh5Qb2dnrkoXDyfPAZaouw+sdkGDobNOlkgmkJFfZGJn6u8y2SsXIiPqFS5JIwTYzfvgPNEhYy2ounVP5Yc45PGbwJC2R0yFzOrr5WFUXcCuq89VUnO+XsB3FD7EhBN0bW3x3N/K0UbgIFCNkIf4+zgSDDNj2/Sap9hzUvaR2kQ6g04OMUW7eV03+KJ9yrnN64Vigpkop4yXlwzCGtmi0yb/LdGF4bFiK11Z7253OiyEZqkwexAN9LVD33TIGuRPcmtTmZA== X-YMail-OSG: VlpObIYVM1n8UwMZfie_JKZ5LVI0cJohNGm.6mpbUF0Xaz_7DPUaWwN1tnjMkB2 W6fSgMyRHYqGyQCLSnnZgIAwEhE6CV83UjJTsyBgB_9ZDvK3qFQZgkEKeTQyhScbqisJHCRvqSrt 56rrBiMGRp71WZyClrn.V.RC7wlhSxCENco2LcO52a1nxx26ptgqYRMlR5Adc8tkH6eJ0dXQ1XM0 DS0uUZXNyDiF0M30nYQO8ghizYgOISHGH7f7mwAz43ux.QDhnQUkx9EtC6YL_YGJNS4PBI1hdfWj A4Qsz8cup.bBLYP8AiSEXGPqeYjgwI4UcaE62c8PvwWU82zbcvoOzyFO8uzenNH0cRpuu6Bh3YXK cGv23FVBIwwe0nQ84JydXG29ojFrJ0Yg9FrNsKAQZaOcORNZY32uvZI.4D8TcC.WLpECv.Brazie UvAKCHcinOUdXErcTkJStJIXJOuNbMFa2JNgYqe7FnBSK6VKLfWWR9uMWTEnkTyGNJTHLoQ_NpvP QIc3VCRJaASK3_qOzAPGRt5VmbhC12VmifcOnzqP98jABdt_174mjF6gw4DX342azPOHcaQyb_8w tV4D5AMWLGScw01neBOUnH4PSm9F2iC2HeoBqIJmTRPdnnQi8gFw4y1Njue1lIap9pvLDSsLh_tf EEIep4VYZ2OPjq.QEWPm0xObCdAFJVzn4aQFjU4d8gNnVfBCcB0O51n5XV7vpuhtTAe7SriSrT_e E2NVdydJjqEe__Uf7KcKTHAhLltN4FCdWnZO5pOW7YoBWwayc8D6eSfQ4nolEcyLct5P1OP1pbNU _Z0x3OXmWzUVEGcbWmeIyGb6LaGF53CRbyW0XQkKSCGj2lJWptSGIr50Nv3pz2aDRWoYAlVLFdqT YcFOT0g245sI0wPdvKo3vkRXZd3XmiDzMAMQdAfgTCTKpYlBIFuNXdjDQh6pZ.9Q83xpysSApjY5 9n4D.vQi6bUq4z87ZPxAnkGSrgRz018ld6qsTMaGbUcr1lYzMGNg2Ys1uSgViEGgSSelUajKiFk9 WrA2Qh5ilXE2T6KfWWrcyTeJcM7VMS9knPpET43clQpovd3YbZrP6pz94zbJbmWV1K42D1.LVT4a ayeb0WwxgW8PIdNjwZtDTMZUSrvYH6Mgh67clEykeHYMC2Rj_wL3xiCMB._7ajlDGxCmLPOLTqUN T5upfsJRC7kM_mm4Mc5hZ7msLHURgDDa5o3O.TAtJmpkiw.M5LuuY2127cn6pgQd_V2XFuzSRSEq FRFtkxz8VVD4xu670YEa4kHST7qnkCQUzNAGtfHqH.wmiBFwskK4a5dRNZSa.18wnxwWy40KtLZL KxjRKyjldgpzCexb8nfmO7vmRNw8v2aq1HTz9sMYi__7d_pOCsD3GYibjtzGeU_.2OZSYgzWFXGp ryXiSZfkSIGs4diAtRsdTRzPmICXNO0ziL0.tJlun6jFhoe0Xz1QHWd1kTJmPC4PKdPxAAn4_j_8 JAiTVfWTjAmhA54an1I7ZG30GzetkmuCyWTB77jJQ0zlnlc_.7kdZRdChCbIDjLOHQ3KKg3Nkgf4 XhYQamWI.FQoL0D.3wUDnP60yTtzAPMsD5Q3fCVsLb684VUzto8DGmrX7Z5MC_hAVQzCSaoICfqe vCJdUl0rltGzOIY3Pd8XUx2vb9tLBqBBj.ZWhMDJWge8TZolOhCAC.67orG4LtjsnVtYo1eT5IB2 tuDh7MizEU6nK77KxEhR87l5LOcD1NuxhfBASxA0BMC4pwaIzzt6EcCf6fNNpQZ3Au1yzefjQ8kL 2_HMa2YT5Q3ARKs0uLQy7goxN2Rg9TvU0b.MLLsRVwdSx859YmndM.rdPlR577MZ6Eu4oiNFJ17s U5Gj7F1Ft9h2bA8CVpuNYlBESouGeQMm_KYG_53kMF.A7GSLVMRajlLPRvZE_mYsx5dLcMYJxRPK Pm60caSKNXXaSuh5gD6ZZTf4X7HHVTYBnR.mnV5ZRzDFnOY1cmW940oM7Af.cANS9t.jmUY0aJx3 3MLUq4ENyDMXpgMFvsQu6 X-Sonic-MF: X-Sonic-ID: f3a550c7-127e-4235-86bb-07d4f54cf0de Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:08 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b for ; Sat, 29 Aug 2026 14:59:02 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v3 6/8] Windows gdb: Get available XState features Date: Sat, 29 Aug 2026 16:49:03 +0200 Message-ID: <20260829145823.1034821-6-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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 v3: - use throw_winerror_with_name instead of error - fix formatting and value of xstate_features --- gdb/nat/windows-nat.c | 57 ++++++++++++++++++++++++++++++++++++++++++- gdb/nat/windows-nat.h | 5 ++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 8f91e755334..8930536f3ba 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 @@ -99,12 +102,41 @@ windows_thread_info::windows_thread_info (windows_process_info *proc_, h (h_), thread_local_base (tlb) { +#if defined __i386__ || defined __x86_64__ + if (xstate_features != 0) + { + DWORD context_flags = proc->with_context (nullptr, [] (auto *context) + { + return WindowsContext::all; + }); + context_flags |= CONTEXT_XSTATE_FLAG; + DWORD xstate_size = 0; + InitializeContext (NULL, context_flags, NULL, &xstate_size); + context_buffer.reset (xmalloc (xstate_size)); + CONTEXT *c = nullptr; + if (!InitializeContext (context_buffer.get (), + context_flags, &c, &xstate_size)) + { + unsigned err = (unsigned) GetLastError (); + throw_winerror_with_name (_("InitializeContext failed"), err); + } #ifdef __x86_64__ - if (proc->wow64_process) + /* InitializeContext actually initializes a WOW64_CONTEXT when + context_flags contains a WOW64_CONTEXT_* value, so a cast is needed. + */ + if (proc->wow64_process) + wow64_context = (WOW64_CONTEXT *) c; + else +#endif + context = c; + } +#ifdef __x86_64__ + else if (proc->wow64_process) { context_buffer.reset (xmalloc (sizeof (WOW64_CONTEXT))); wow64_context = (WOW64_CONTEXT *) context_buffer.get (); } +#endif else #endif { @@ -1292,6 +1324,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_SSE_MASK); + /* 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 53023859b9a..f0a55d40f05 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -750,6 +750,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 Sat Aug 29 14:49:04 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142425 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 109754B9DB4F for ; Sat, 29 Aug 2026 15:02:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 109754B9DB4F 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=EBaOUlXf X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 657894B9DB54 for ; Sat, 29 Aug 2026 14:59:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 657894B9DB54 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 657894B9DB54 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; cv=none; b=br8MklSyZQSTBk+cWK5gPebdqaC5QlOUzesSq/OKaZSgc5mfo+g9qB/X4MTBFiOc93RCc632nSALrA/Q8rycwft8VPEILJezvCu60h6RjAFIESnpQEXsz5ySGwOSgL0UNqYsUV3ew89eg9FdeCaKp+AidxvXYqL4I2NeN4iBY60= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; c=relaxed/simple; bh=TO6XroLTI7RbCmR6QMFg2e8dpkX0Ka3xYL+Wr4+yOPI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=RVkjQEYMwOnujWt4/d/EZkZtNIxG/X9OUBNR6cW9yuyShYdhabDvJIgzPoaU8eY3Zb7V8z1CXoFn1tpkBVme3R1/DxVM2k0ddWA5AIAD0PG85fP6O3j4KsorxhQmefErDV58qt6n6kq9haVjH81SrGxqnGsudwu5cHiHEyDrNEg= 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=EBaOUlXf DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 657894B9DB54 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015548; bh=Yf9xXaKc7M0981VIiBvzsTIQmZYN080FLMlGXWFe2og=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=EBaOUlXfe326kJzsknDTgjw7GxCyODnGLwFv/YbHfQXjzTA0GrCYJc71rtL3ZwGDophlXZKlAsZOOsUDdS9+sn44r7YCTC1ljNNFDaCnWEY7/MdZm8yKWg4OEd34U4CuhmQ6fDxbncvWvYx9QuKUGZffmziFe6hoDe+gTHZdvNeW3NfU3UeYrYhoX69KtJ2BqNdqtPcjOq5rOYkERU5xkCa94o3wrPAagTEb/nt2YPEo9knmXUeop0MrCx1zWJaUHuECWIcrsaa67uj6O6ich7mno9lUhPJMf0VWU9eqaCnZG5zHGUTLhK51xVxjnNjoMkpenwV/pFbI2Ql8+TqQCA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015548; bh=8Rb00wMblOy64CqiX67Ft/GuQERlkHfZBi2WI8Oh7Vv=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=jqAXNhao4/l5ju6UwcN9MsROSx18JhOWR8CbWE5m4W+TXTm3krHt9nR1FuNZGTd1e7Sw1o/IFqYOwSDD/TUpehd796Q8yoGRv4scgsk+/+S1SWv4diQa9JxlEIQbOrX73Ax4BwLZwDHTGE9QrEqTtTIV8NMV6Lpar5+uMMocWCP2cuLOBBxCaPN+TmSFjVSCte+xMdGQ6BuULxc1Sn/AcWYIeQ4JPKTR8OC5LOA4zeSjnf9AWCq6LYgVP5TeL3AwhqMgsaWSux0XTw/5wiy+UepSXmyLaEjUxAdYuXnSsalIM13TwG2ExT2GBWsm1uOyeQXF4cthFTwVvLm7z/guHw== X-YMail-OSG: I5UWP4sVM1lp1LuGqq20_HQ5g4aoug6hATajcfmS5VSRiCIFcHhk6hYnnFL8hVd SKqJFmzTsz3GfXMgLkt2mOpek0xM0i1Y0yTfSyAz4bC.9NO4zJlWCISGJ9KabwSjAeoCYwVh0yen NPKJNlPvpoyFUWWDGXIOrZ8T93MdqNS1Tps4f2f2jolDMeQlxgGgWUDe2vFMn3FWKINvWTsVVayp sVaBwnqVF33ceXq_1BQX1AjG5DGoP7UiKTsT8dsEeQ9V8eNyWpgT6Z6Znyp6Rschdn.QRjwPRkPA m6voJ7HmTqGBUtPIW4eBP267fHNJwxmYzq2STNOIA7zor9NATFwi2Ujm1sRew1PkEddXuaxnbchL GAiGaoxxd8GPE9_ogQs_Wf_3PZIlWLznf5T5SG8D9xjr95Gxaxu8ZwGvnkkla0sf8Yr2vxq3qnIP _evs32qZ.U4dvMTfHcyMU89E.4JM92Jcq7cgmiZ.HBDcNmX6U.MZD4ehypsJXPuFtK3NIldOyaT9 wNHJkBHUJMWSkg50gy8qBMXnTwytuq2FM4Wv.iPlSaxtDX2o_rNdZom3MorSERxQa8kBOh99aelV v6Gd6BVeUhV7KsaQ8euPggYPs2RgYqL9UHF48qTdhwr5nJXt0lgcerAh2fLI14rhKYjfqdutmJ.d nOU5enWnZr622AAM0X9iOJBrTgFdlGuQjEeMlPjEAjAQij2d9WKrkxt3JCq5p8SbAfOxkHxC9nVh .KyMQwtMty77YZ_vzdhUkRq7Pla7gXztdSURf5EWLENEm9s0uLgO2vsGElqRKbj6caaKBP7gsmhd 9eU5M7k6bbs7yvM_7Jv5Y7jiexGiDtSOrUmgju3RkSj4HHNgmVUW9nrU4RmSdabTCiwcu.jD4zCL 9Q8qd7zms67yXeywxM8cZsJfZYFRcvyARjIWxD1ebHPjQYMPv1A9wOjdG9cgdZZynAgcQNd45uuS aL3p.dTOIYRFhae0YeYh8GajTHRzlQe88srLQeRud0e5BtgQIO8cv54z.PllKhIDWjpzUGiwEzfR G6WKkFfOlPijR0.Z.umg1.Oz0vLnlR1zdZWzoBZFg2s6aAZTda3sueg15QI6xDWzNp3zfpQV.RNN iGj.vJShoxd___010LINxxwqfkzdXq7_wXevNFs7JsxtkjkjvsxComwRl1vzBcmF2A_lYxbRSg8Y uvjy.6EaU9H8s3EJbZTCWQj4A7eHle3DssTk7j4UAW58ug7f72z.n6VdJ94iWAwlDwe4qbheKKsZ fVPMufSlmWyibC8PucI6WU3HRR3wSATsgEzo9NO3B9c3.UWlanq_Oq2.oerokvPZQrt5hCEqc.Xa GMRaUTvC1ZspMa_JAMqB3v31vfARYdvG5eWOCCF.fTJIKqJNyas0yNFoX9g7RiG2Oo4ycZLf43RB A8kigFzwwUEVDSkzN5GVhg3EsaqkD6Nwn9l5WCkJ7Tc_mnASIIaweHzsEWJNAxwfY0JXM1MEvFyH bhxTCvQo267eXJjBhBMMi98DSyyIxYudFhVG0643kQqpbvegjXejd7BxUgSrT6YmS6TVlUnBrGb0 RgPTINXKRlkcCAoE23Au0qsXCvm2Hn0WwnO573Pi00Q.jioNyVtVdKGjWlVoiFQ1bO_CyzWSw.rW D_cmFRDPoLMqx6VGw71Or2kUG0AE3tV0QZ9kBkPBjMeFoZuvCu4LzFMq.lt0eNDSjsNPytFcR.R. YV6gPscmU36d4p2Pb4cNGnyAuo9N26KY7ln3cAGTbdo6MHNn_oldXF1vdtbm8WelPDV6oReRtWH3 u3gpFX3.zRRMHP9Xzvq34LDnzrNtMaPWBGHuHf1oyxoeoLzuaeZnGB.mxe7cU_KUCjNItKZKfKU. PKkj185WcZMlpDCVIrHHjLe23Q5m.2Cx5.xdK41IqzATOR1fCm0_2trR5GCmZmsunuox54NQenHP OKuEfKb2JnMx7hz2Fs2gEd8DTQWT2own8_qonUfNAAy7MKbUYB7kk_LvU2hYeuajAAAIypDhyBfg 6DgBvi.OMrlMUkU_YW_cjktw- X-Sonic-MF: X-Sonic-ID: 9d15226a-02f5-4d4d-b67e-d08e0ea90404 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:08 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b for ; Sat, 29 Aug 2026 14:59:03 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v3 7/8] Windows gdb: Implement AVX register support Date: Sat, 29 Aug 2026 16:49:04 +0200 Message-ID: <20260829145823.1034821-7-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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 registers on Windows. It enables accessing registers $ymm0 - $ymm15 where they are available. After this patch gdb.arch/i386-avx.exp passes on windows. --- v3: - merged gdb+gdbserver parts, and split again AVX/AVX-512 parts --- gdb/NEWS | 3 ++ gdb/nat/windows-nat.c | 2 +- gdb/x86-windows-nat.c | 67 +++++++++++++++++++++++++++++++++++-- gdbserver/win32-i386-low.cc | 61 +++++++++++++++++++++++++++++---- gdbserver/win32-low.cc | 15 ++++++--- 5 files changed, 133 insertions(+), 15 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 10c182067f9..f7effc822e9 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -118,6 +118,9 @@ 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. + * Configure changes ** --with-babeltrace has been removed. The babeltrace library was diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 8930536f3ba..c9a21d7c41f 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -1339,7 +1339,7 @@ initialize_loadable () { /* Available XState features masked with implemented features. */ xstate_features = (GetEnabledXStateFeatures () - & X86_XSTATE_SSE_MASK); + & X86_XSTATE_AVX_MASK); /* The extended XState functions are only needed if the available features exceed SSE. */ if ((xstate_features & ~X86_XSTATE_SSE_MASK) == 0) diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 3af5ef4dae0..1cefe6171be 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,13 @@ get_context_reg_ptr (Context *context, int r) char *context_offset; if (r < mappings_count) context_offset = (char *) context + mappings[r]; + 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 gdb_assert_not_reached ("invalid register number %d", r); @@ -267,7 +311,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 +377,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 +412,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. diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc index b77f6adc6ed..a7e83c0239c 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,21 @@ 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; + const int num_xmm_registers = amd64 ? 16 : 8; + char *context_offset; if (r < mappings_count) context_offset = (char *) context + mappings[r]; + 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 gdb_assert_not_reached ("invalid register number %d", r); @@ -510,7 +556,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 +584,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 +617,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 7629beca213..5ccdc89a7ef 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; @@ -426,8 +427,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); @@ -441,8 +443,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); @@ -1349,7 +1352,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 (); } From patchwork Sat Aug 29 14:49:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 142423 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 BE32F4BA901F for ; Sat, 29 Aug 2026 15:01:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BE32F4BA901F 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=l4xZeNX1 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 54E334B9DB49 for ; Sat, 29 Aug 2026 14:59:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 54E334B9DB49 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 54E334B9DB49 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; cv=none; b=TK6pdXNGKQP2EB8RXYQUfRLYIgAq6BaaFqxD+xY/WYbhTlTe6VqN7j35GnbtzhV1ZkvBCkX6DZk0M+EV8tfekQnxEIChzpy5zLwe+LU7pfBkyjy8Bx2j2KrZ65Fg3KMGZHJKtgEXlXASVIKWWs2J8IuhIkcL8cBUDgA7GA+JNs8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; c=relaxed/simple; bh=LtDQxV+m2ZHvQ9pSTlNkivGMVFGNcGVx80upmlgLtJ8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=j5WEQfiDfQ0dtaQ94WqHtF5ZhT0tTlRju0dH0RtgYAFaIjevGar8s1nId2FLbtaA+rgzvcoL8O4OEFxBdstntoFAkx5LnYSuniRf7g6qB3RgXG4ZiC5kQjj57wmcbRGddld3takGrmFZ6apedXFxAYq75GpbVbmSiMiEK863k3Q= 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=l4xZeNX1 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 54E334B9DB49 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015548; bh=aW/bPOLbWBntKY++f2MRUtW4HfA9Pw6+sPshoMDKECw=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=l4xZeNX11dFC4rEwNkIaCBrAP7RSsVns0/oNWOoxLsDJYZEt5nKEWiXbS34O7v2HtI2on8RXgGm4q6UkbjneqUPrQ6kuaFSANxyy5x8ig98nZ7aZnCkGzTGEkZ//OflFeJjN3swua34WGN0foXLLxLxpqXa3oTMCWPCQJESRDIrbEwRbDIh2JTSukz2r6/7FnSJ5HikhBPlFTMp2iJLjfL7sdV8GgMelhOIgx4PPHcS6obI69rr5j4u8t/t02WLpgZFMjQQ3wKnPeqv16Kc4AHkwP1RJjFfypb3TpHBwutnGGGJGUGo0G5A2OfqxquWWnx8dwthFc7ElsmKZ0NUklg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015548; bh=amb/SkF3gNEyS2RlEooey02ULWKuSmH1XUHLSFsa0id=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=X5SmCcc/s6pWDGNA8WIkY5lOU63oATQDt7V/FEG6VdqsQt6zDstH5XxLOSuXk5Y63+0NNBFMnF2TryVtIniyWsmm8iQRIsnL2uT0MwrZUokyhVqkSN13E4kiymWMs5l4ESwQwsTmLV4mXtIHCywl6QX52HVBacnU4Rsl8t3adtEmsxxUBGpUWM/VB4M4EZv4ZT1YzSlTUOrCPPFMCy5nJ67BJYhiyYNxB8ulnffQ6wbPe00HFHbo8CZ1vLA0X8CDNiXpO++6a7la/3mmc35S9tCkL4+e+nd/fceBO6LHEsN23A4og/pqJYP4EQuFmBCljxOmzwD2+QNrR9tDGU+K9Q== X-YMail-OSG: 5xlPbk0VM1k_HwuwH6m4lhntDMRlyNlJq8Wa79vOwcLck2muC0imALvrsEC.FtR KbTxeJPimR3o60QbV9zRtvIyMyhrQyJ3RwAmo10f5991F5aSjG_MXYQDhFuoku7yCN2Z68wNvqlN x.j81spdUwjmiZfcUW357xsvm4Ka3Qy1Rq5LDf4ZDiJdFtXibXZ4wKPv4C5W0S629DgKELYpyRX7 mSccWbGb9B89x90ModsIkuy9eFRB3UJKq86mNVSmafa7W1K0a8Hhz2VIN9oOaZ.96yx95kro9ctP Y9bKoiHSC6doDxomGboahQ4Dl.DVBqcRUI0O7vC03S.oIuXRsq1kHgavSy1ggEPTFiEBlHVSO8d1 tbIwHtxbNhagcnV4UXWZgc0cPJXoYmET0i.nHVec.Sqyb2dB.hJUNwwhIa91yOUDvasNjBImA6Fj MIjKmiKp3rGL1LYsqcaMWy7M.mbaZLlpS07qvvXPp38da5ZdZIvi_lhJ1VH15ZGHAYuC0Rnq2o1k EzC6fkG9wgNB56f_ufRKzTi1P2mRkQtLkS1kvWTriuvm7bVkh.l_mw8l4tM707GbDRrg7zwbDO4u 7EDinW5jH5COAPBbtuD6xNBDadPIdMy8mYImdxjsU0bH2a8Qzmc_ljCPR1SQ_3RYW8nJ.dytcQtN teK7F33zzhBfKKpV5cMjKcZhoSrfiRHhwdRQtrSwrHNdE0_sUkqP9UJ.RuHXQoxgOgoIQJkjQUl0 0JHtBrMJBLjhOnoxjxZL0UaAcv_WDKXBAZMBKE4cKueE7gAM1sLCpWpTAbHSHw5B0riiBAqiquTd HPA0P__aUb2TjPsBjz90f3.Ek1mG8oCO0Aln9mThFpKTzbei82gk2HYHNCGCCtAr7fCjd3GXkUsv CnK97crl1G69Zufp_yZ66dzYfQHv.6vsGX4l53OadtjuVn7yksVRNyoIqno4GZlwPb4Md9x_ChqX xg.EjY.fiT9l6htUjJnnjC8xuIvmjeE7rhGm0Fl084n22eqE8zTWpbz7So2U9F.UDeHGCQKxlFs8 kMC1.x4bUoSxciavR4kgIXQIadMQ7eAwCClpXttceGFlzH6.ZSbnZerpWJyZuWtpcUW7HzouyhOk eC2nh4Tsaj0aE1vS7NLXqYr.3eDjtcCuVFov9aZveag3.ZQjf8e6oPqP162Svdmq9cFdRepRJgC4 a4OcgzuyFjvqZhHIiwycN86aNQXZq_k2CsE4EuTqoMo6pjyIoeXd39Q2GN5La0_kC4QG0D0dX7AG XPIXWG3qRPECcpetU2JlJBcGcrx4ETD9J3TyAh8Gk4vOwbZBxHgstyVgfBvWjGqRsKaellEFmEAv 574Z2Y5WU6DFMPA5RE7C2uuZT.pl53yRP3SnrCye2yP5fP13Xwpa82IlJkslX5oAZ2R1Fm5yKyU4 QvtYceou5dFVOXImoh2AnIXa1SZrNL6eVmiIBPJCJIA.MtMFit.aA52aWMtjJh37YoSSModt6DF1 PyGGpuvjrxhIkWeDDuwpFaiUJkyxk1X6T0A44IBz07PkIrqRrG54ELQw4jCBZW4R897a.Ou0.tL3 MW.W_yIqMkQHcmpIlUYuhNiKhYzhmkA1MZEqkuM5Vq2LH5bSVcQwsB0o1zVJzAN4jU0iCJuUFtyQ uYkX9Raj2b.6Xw5YJK4VE3JyARVJTmueWhgTw0Bj6Kc1CCT3A9HUfp_ZtPKiieh6D_AWCoho79gN TKjhaZv7AphWLaRMeAitXiAv5SHxO5sjR4AObZuP8yvAiwk43DJIw2HFj6_HA2Y5tCGmThXH0m5d hiufoxUSI5KyMoiqXvsCwrUvbk7YjY9zfGL06CkSmGmwYIBNlvqcd5uGB4MC6_766NIxhw_SSF_a bJGQDUclZT0RgfAKsU0iOHNvB.nkFefykgIsYJStGG8MQ.K817RgQ4YAdJjBZjtFtPnT4f9ypFb1 GL5AwvYpYd6oWNV82w8E9qPMsH6RPEVIbdOCaF.VLPw3PKoBK.LrZEP9v8rqjAD5VGJRWcxhBm4h XhS6YiaeoIvlYWs5XJBmtf3kQ X-Sonic-MF: X-Sonic-ID: 26030776-2c17-43a8-b1db-b167e2a03ce5 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:08 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b for ; Sat, 29 Aug 2026 14:59:04 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v3 8/8] Windows gdb: Implement AVX-512 register support Date: Sat, 29 Aug 2026 16:49:05 +0200 Message-ID: <20260829145823.1034821-8-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 X-Spam-Status: No, score=-12.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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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-512 registers on Windows. It enables accessing registers $ymm0 - $ymm31, $zmm0 - $zmm31, and $k0 - $k7 where they are available. After this patch gdb.arch/i386-avx512.exp passes on windows. --- v3: - merged gdb+gdbserver parts, and split again AVX/AVX-512 parts --- gdb/NEWS | 2 ++ gdb/nat/windows-nat.c | 2 +- gdb/x86-windows-nat.c | 35 +++++++++++++++++++++++++++ gdbserver/win32-i386-low.cc | 48 ++++++++++++++++++++++++++++++++++++- 4 files changed, 85 insertions(+), 2 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index f7effc822e9..d3db6dd167e 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -120,6 +120,8 @@ * 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. * Configure changes diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index c9a21d7c41f..30d49c07332 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -1339,7 +1339,7 @@ initialize_loadable () { /* Available XState features masked with implemented features. */ xstate_features = (GetEnabledXStateFeatures () - & X86_XSTATE_AVX_MASK); + & X86_XSTATE_AVX_AVX512_MASK); /* The extended XState functions are only needed if the available features exceed SSE. */ if ((xstate_features & ~X86_XSTATE_SSE_MASK) == 0) diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 1cefe6171be..425e343deca 100644 --- a/gdb/x86-windows-nat.c +++ b/gdb/x86-windows-nat.c @@ -291,6 +291,41 @@ get_context_reg_ptr (Context *context, int r, i386_gdbarch_tdep *tdep) (context, X86_XSTATE_AVX_ID, NULL); context_offset += 16 * (r - I387_YMM0H_REGNUM (tdep)); } + 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 gdb_assert_not_reached ("invalid register number %d", r); diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc index a7e83c0239c..6911587f977 100644 --- a/gdbserver/win32-i386-low.cc +++ b/gdbserver/win32-i386-low.cc @@ -529,8 +529,11 @@ get_context_reg_ptr (Context *context, int r, const target_desc *tdesc) } bool amd64 = register_size (tdesc, 0) == 8; - int ymm0h_regnum; + 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) @@ -543,6 +546,49 @@ get_context_reg_ptr (Context *context, int r, const target_desc *tdesc) (context, X86_XSTATE_AVX_ID, NULL); context_offset += 16 * (r - ymm0h_regnum); } + 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 gdb_assert_not_reached ("invalid register number %d", r);