From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id qRyEIJV7U2pdNQQAWB0awg (envelope-from ) for ; Sun, 12 Jul 2026 07:33:41 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=Y1PY2Xxi; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 7EBF21E098; Sun, 12 Jul 2026 07:33:41 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id CB4FB1E070 for ; Sun, 12 Jul 2026 07:33:40 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3BD6E4BA2E20 for ; Sun, 12 Jul 2026 11:33:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3BD6E4BA2E20 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=Y1PY2Xxi Received: from sonic305-19.consmr.mail.ir2.yahoo.com (sonic305-19.consmr.mail.ir2.yahoo.com [77.238.177.81]) by sourceware.org (Postfix) with ESMTPS id CAB1C4BA2E05 for ; Sun, 12 Jul 2026 11:32:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CAB1C4BA2E05 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 CAB1C4BA2E05 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.177.81 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783855965; cv=none; b=ggwT+KNtbcjdvRcg2gVrPTHN0Ar9vUY7LhTzjwEHzatLFx5b8j3DEKYmAwJoU3gZLQehGqPV6ssQNVw4vVewuYDjYTg1Wc9+7dHAzO6YBIeUfEpZc7nK9GmVCjFDnLvpmRbhGoSVR8xDowO/MaF35cDuEbvmqM0P1KirnBFVwIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783855965; c=relaxed/simple; bh=hIgtggv98fK4qCNQINWn4yvH2gqIQx4Wft9FpTb5Y14=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=m3nBrGAfar3xexO0w3av41P8Rh+ekx4uc3P7+1hTd6dCXSWWcmBFjtzxBVYSZq8CfkzkKGsT8V/DARYcphTnXdLcdrrkeoXpOo45mu2YUIT0ZIiD26DWPuBGJNGZSef2BZPlH8kKuvAcy9GLKhBQRLfAiRHYmTCju5pt++3S+FM= ARC-Authentication-Results: i=1; sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1783855962; bh=LUPFVCUXYPt0WFDH9VrV6XrFTB3m+Sirys1q0k3QILg=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=Y1PY2XxiTjDU619sDpNdMjEmbe3aKnsJ6SE57+x7qXcAJHj7RJkYG3U9ScH24AmPGFYJfbV7G4lxpQvFry4ISg8f2G8Ng5sQehTD2EQeEKSQ3oGv03jnNfcBk8mxaCJ8chnw4hs5+ATQBVBlbtRwa8ItxjmQpW+0A9Qwn4rHGJeAFcjprKNKOPRT52InwaCC3QwGZAOkW3xAg8Cq+esZpqhNsJ+WnvWVi/j3Z9tFdb8+n/f6OgdA9mPG8ZtcP7bWWBSVGFqLf5pPbEVW5wTX5h0e7whi9sk7Fd2GM04XCbpJq8cY52jXgsdvx+q8/Q8/fUq5ga/XUT35CML7eCyMPg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1783855962; bh=/AmYXp386vP9RYYfLh583S6FfqJFdkCO/QOO36Ysnw8=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=EMNSiADv+k0Y8KSVp/l+zt3HcyNKprmQp+BcjgsZ2fd6yHikoHEg/ZfZ6xbsVEuGNgo2Z8DJVRKUVpCKdkwWM/ZNqceb0HwK7NJiKg8FwfHDmJpArbnijG/9x7CG/wKogqu7TnNiReuvZywPoCIZ0kolaRPpm2aX1hrrVGj+6tw8escdyrpkgV26qqHpDQ2GOAljlSqOO6n8TmajYDdul3OZi4/sBLYa8uOdFeq90wsDE1ovUcCSsZvZdZH81F/hM51PvKsHga90se1lHgjyxRRUxOpYzGNTEJlciw445lwdLhryqwTqqPwORzUgHEyYeYUxwwfNRJdfcARPMWruQw== X-YMail-OSG: mkYWcksVM1kNxFS0xghZ0OVM1S0FM7wY5dlJfBMfeMZrKzXva5hBXnH7SSC_Yr. cuu22vWVIaZNahlDK0MakXvIJJEU4qm.xC3JWuRbLMHiAaqtKY7yUBM1eQfLebnYIm6kRBZyYf_t NOoOtlNouTQnR02Zhs5H.8nhLHGHkZzw16fbtfkalO0NadwWRFHXf8VIxpnKnNVuUVEIUc8uIu1J y.YdPNlG2MmLfmA9xMH.tYxSpTqvmBDhjN60epZQiRmmgkhi1ajJ_fHJ8Jp4yb5c.buXu.IH0TwB MX3zUZKbwkwnvPdC3M4G0wUfRCRlp0q1U_GNpUNDjdBm1Neoal9YFFnYVPgyGm05Ru8HiQaAUjtC vUIPhAZKFlSu.czcE7fAXIczuX.N4qrI8o2q6XhtpzqKd5YLE7GhVZSAvhMD19_FZQC1Pzi9ykiy q6vXo6f3g0UB6AS8Zfu.nui6_JCZ5oRvyCIASgTqZpqsqek3fMV.38ooSM5GCtFys3tqLWFv1yVI hDyRHFHloZo.iNX5RBvBTyND0VugaylSMQ8pf4ohdPKsnhl_cfuCr1vUdzCzn6ZILSOdb.WpXOaz abzMw2E2HwQdE0JXWTxhXLH4ioGnGiMw3mTFrSMZnCm0z2VaU4SH7ZUFgDH1ffqFRc73DDoGbN6Q oN.PgS0n3f5r8hzc_AW5B6MBizcqsGDtBwSNJiKdvMw34AK6AtXC2rkZlSD.dxgobMxj8XFyNl.N AtOAA8bYCdh7R7i7GO9_5df5crhXZysVh3Tx.xca.reG7WiDGsua3VZrjrLtLF7zODJzsxUPgaIa h9V.JY9mGmfyy53zUBd6ter57vzmBovPB.syG.Gsv1r45ctxEbQG1.edkX0.gxiQLeYw6g2pXh3u bqiPJvHZVfrQ8u3nPIoyUvh1e01xfyF27uMOGSMGfCV6tXHKe6YgQabpUJOSEFy0DjotdN9eqnik 7o0a5Y6j1rtjwPQRYVQagEk51Tqfo.SUUki3ef7nW_uW8CmssP6JqBih0.P.onrYq3aK2WEFdOWv MopT6kN891Yd4jxJwSaOQaBIL1wT8HSXrt.labQ7KQb_m9g_4VcAt0yGqamsqRY_IbJMFviBELj9 rQjx6oJnCxKdqIXrhLFSqIxGX1IyvWv9XGVq4CYHEXNLXK1iW8PV.wu72HX5P6znjsXp1yOlYRNo wIKHO.bHiSfqtgQM0uL24KpEvqPI9suw0enEjedK3n6PfdH.XbAwy2c0YcEf5sy6jM2GU5wIH1SJ FNuvRdbkiFEJeYnHTojEvKYbg3.6b53RBqQ3mVf4HiI0AtzO0i3eiqls4ZBpwp_G.OhK2PcKw5mF VppqN027bf9Tg7vsmAINLdqlAg4eJ5KJ6SkkAjexqtlccTwgRxT0NdOMgyKHJeymoKZpU6Z.koDQ ZeDUf17wsdG3L6A_XOvn_iml0p8GPxUo20HUMbR.kXRnN3I0o6L4Co2DrOtmofJrLAo3BzwZsSMC Oa7tML.L_uIcsMZiNlHg2rNLPxq8SWlwRHz2Fwne27ZGwAqcSb4OkC9abM5.KsK9EWrpEXQGMvjg 2xyjw9So1Sol.wjnFs5HQ1e_VcMtlr.TAAYoNVua3EI1eERwfPIDXQu48qpGBmCKHCWyzykW.ZqK BFODDKgiYMUE32LabM8WX2.T0.ALeGeJHGFWXxUyHMWsOGFMTLi3Mt7jAY5JAyPkCAR468AC0iFY F3e.jh5KrWc.gmv4Gb7Fb.qz.adkO23.ZPQJ.kVApK5yGYVbcaxoLxBKeWtniJWNjVbfUALeOz3d EUZu8ri9mbccgndfd.VINSXgtAZ2eEpEoLzT6Ihp1rLLxZdNVSNG_VtqI.K2.i7LtzjV7KRBIZTX jKsVI5ooGdb.W7iW02KTD3LvVZkvdBu6e_TYVfoGOWrQF6Qr68RenEKUf.i5S6iD7QvkR4hltk4j dj63gy7stbRy9RfuoTIjHimd2_NV5qiV.5MFnyoJgie1V5trKOC.R6wANrQ.sGNnvRZoB1_CW31N v9Ov7azb00erJHv_ls1FOzZeuUH7hpGAj9lw5VIrsepM1teXCH1srWZG4kQAI6K_m4Yj54Cge77g iHVBmrbTQtHQP3zb8U1zz1Lmxj.1RXs_KqKhByExaWGsTXNg6EJOEnrOKfWbrZ4vorigQZ4D_SYt XhF6ZAo0NgMV6NIj7jaRlekx6U4cWfI.trc6Br4JNm1GPmfrh2S6hYHg2ccNv5.glug9oUhcESJr 02rUeu0U3YBnBL3QJw7Pv1BU- X-Sonic-MF: X-Sonic-ID: f6432d0e-5077-41e7-9291-8570a045fc25 Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ir2.yahoo.com with HTTP; Sun, 12 Jul 2026 11:32:42 +0000 Received: by hermes--production-ir2-7b48fcd765-7kk6w (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8f842386f7843a8cccfcf644a1266621; Sun, 12 Jul 2026 11:32:41 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH 7/8] Windows gdb: Implement XState (Intel AVX) support Date: Sun, 12 Jul 2026 13:32:28 +0200 Message-ID: <20260712113229.3695246-7-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260712113229.3695246-1-ssbssa@yahoo.de> References: <20260712113229.3695246-1-ssbssa@yahoo.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org --- gdb/NEWS | 2 + gdb/x86-windows-nat.c | 112 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 111 insertions(+), 3 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index ec9b5a33787..759c544d3b6 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -116,6 +116,8 @@ intent to remove it in a future release. The s390 64-bit target (s390x-*) remains supported. +* Support for Intel AVX variables on Windows. + * Configure changes ** --with-babeltrace has been removed. The babeltrace library was diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 065c551298e..d69081cd912 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,58 @@ get_context_reg_ptr (Context *context, int r) char *context_offset; if (r < mappings_count) context_offset = (char *) context + mappings[r]; + else if (I387_PKRU_REGNUM (tdep) > 0 && r >= I387_PKRU_REGNUM (tdep) + && r < I387_PKEYSEND_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_PKRU_ID, NULL); + context_offset += 8 * (r - I387_PKRU_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 if (I387_YMM0H_REGNUM (tdep) > 0 && r >= I387_YMM0H_REGNUM (tdep) + && r < I387_YMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_AVX_ID, NULL); + context_offset += 16 * (r - I387_YMM0H_REGNUM (tdep)); + } + else if (tdep->ssp_regnum > 0 && r == tdep->ssp_regnum) + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_CET_U_ID, NULL); else gdb_assert_not_reached ("invalid register number %d", r); @@ -267,7 +356,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 +422,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 +457,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. -- 2.54.0