From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id CkyuHdzzkmrKshAAWB0awg (envelope-from ) for ; Sat, 29 Aug 2026 10:59:40 -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=Nzk7dzU3; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 630011E166; Sat, 29 Aug 2026 10:59:40 -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 488601E033 for ; Sat, 29 Aug 2026 10:59:38 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8AB734BA903C for ; Sat, 29 Aug 2026 14:59:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8AB734BA903C 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 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 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 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]; -- 2.54.0