From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 3FzjJGwnvWpG7h4AWB0awg (envelope-from ) for ; Wed, 30 Sep 2026 11:14:52 -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=KyS1Ao0W; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 7812C1E051; Wed, 30 Sep 2026 11:14:52 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.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,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 2B29C1E01F for ; Wed, 30 Sep 2026 11:14:50 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 499D34BB58F4 for ; Wed, 30 Sep 2026 15:14:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 499D34BB58F4 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=KyS1Ao0W 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 6F0A44BB3BF2 for ; Wed, 30 Sep 2026 15:14:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6F0A44BB3BF2 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 6F0A44BB3BF2 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=1790781264; cv=none; b=Mb/nGCGSMdi4IVank3sWf7v3zfqTXSSxLyBHhLcRJ8/wpKt7F4nQBjqzDgvinFs44Ygim9CKGLz62gIgGW5vGdZAdt8JJBIRMAXcc3DJ/gdjMx2Syxnf6FYYXP8bBCGWeYrUAOtIgre1lHsE4wKMmEls1EfzFsenUpyE+IlYQRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1790781264; c=relaxed/simple; bh=WneQceRQUUTP7DAqJofx4BbvMy8531kTB45cSiSc6+A=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=f4tIReIAlxoIW7w3wzmdIdrYeoVRGul0qPJWPjEeDuXK6VsVJfT6AkAtHDlxoeJ8E27kGADu3QjI8zGZj/6pOq1Df48/7ebNp1QjerkGMxdhy5+JFKEs72whvgnezwsoZdTsOn7dtxUN+BOnsYMK5H54tjddC5coNYrCj+dnPCg= 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=KyS1Ao0W DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6F0A44BB3BF2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1790781259; bh=JkR4o3lWGQrorOkKaGMLcEotPpdY2GprIzsP4aLwliA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=KyS1Ao0WUtSCM/6i2tPJhj//UCMOV5y8Y4+OclRds7upKzghb76UWrINCStfA9fCh2l42uAl9QpKsix+PBn85YKEjFHt9VSwG81QmPo7yj6/ah4+/p7FSqOv2fvdKLkgbIb++CBRbsDuGcXpSHWRVrC4C++zIoKH31c1gDbpJRDfLdC4HIPDCKc0tCbUQmiFaVQveHFqM2sbRBL1n9sNShbczXrGkeGUT3stb0w/8S0YxiV4Xp37TpdQPOKFs7u14k0kyFH95LiMHqdRSs6ZUS6PlKAsCTMD2rwpM6EQ+VQvvg0Rgzzld8MAxpcV9Z326CCwld0+AJhAT99aeqnWFQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1790781259; bh=kLV8GXGJFMuy4hNf7UXj3xWKoZN7+39sVWj+EWIkU8B=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=A5h8R9bRdw++FPaICcCI5yFykSuC/XVqHQmk7TfcjbmQUU11luUbSBfRC1vbYHrE3SIi1dKjSFsbHQn8e2+TnfemQQhfei3xN8TzxilQOlePixbqY+0lwbwboS5YuUbuJ5oLAV/Iim5bd1JjZ8t65YYlRnOjLMSwjPLWhH29io4gWSoAxVAg364XY0Ffm6FzEoPV26rcTIyDjF8DnurBADIo/V0hFy/kEci05OlgMrjPMwHTSdrId441VC6Rz7ZnGxfZZIIQ2Q0QLGtudpS0v1kEc2SFUbyEzFEuHZCHy1jD2+EI7beKJjeGoEz4IV+i+aVG48BV5BpPw1875guzug== X-YMail-OSG: xov4y7cVM1lfA955ocMAxOjyAxEg1bKOprh0w0XCyzQ1yUdlOwE0KINWaaVNVpY JTPKx8DFwuAl4Nmq860pVlHmM2ar4IW0AIl4jrb.8hVrejfCtxMLLZaedy16GG8v384kpq.vwjqj L0QFFt0.yxfVtlzE7t7jFjBDlbF.uUxUMaME.ElCqxaYP7xTEs3edh66al5VR4vZVkSO1Ort_BW_ jy5Wqgn6trY4L_MgSzv6GpyEgTl7WHhBIRQ4QcFnK_0UJNXkmIrRwxbNrOft62ACtzKKvgOL942v o5idE1B.b_WaFUXm3L.1iCw8t9_sipW1JYe4MxAXIB7QjCjVyJs8ppF2JBAnxQTkONadb_c79uv9 ShRhV4Kqv4CuEiSUbCfkW4YETlfAhb1HalX6NBUkoeDZX1YAAcDA.ebIB6bBhsZDD9mCHnUgZCh2 q69Jnr0GgmUtTUQxOfjz9jSxEqaOJ0tVbWPMqScLfZyVLFjSer4l26Nf4yIQah0Jgdc6wzKzOuyU et5ovTKoBWuNNJITmF2hiNDoOCpp_OQStH1CuY8UvNWYjvJUr8PZr5GMZrAXTTzjiBV23K6Q6Nwj jBMaEMAkWxaRBB_Yee_pNLOMOWmzDTgtMMDrB2rmTWCxc.y6eSulcqPvHfBU_QbP1OIGLOO6_Xqp NBFPi.Bjw71T2mBnrEABaflmEJvaebQxsBIERWa3XD75JyoIqpFOvsuz9_CwwlAulD5GKd5e9aF0 Xx553rGoUF8Hcp2L65vPeTsFteq_.djBDvxCueQBwm7hvCvxyaAGltBpSGxfmy1oFjxe.BycjKnB FaSmi6hhWIkHO3KCafbSoryRih4fNdXCSDcpN9pV_1AojdCgT1GpFmV_U_H2DL1mtr8aAbkyJgZe 81CEKenelaUXTM9wZBzXlWFPVCWioU0tth6remKCHz6.vTurqbdryQuIdeGEdZwJAkMeK2ZREorO k5O3hurdWKlUTv1.RrCHDCPbay2AiZC0_DSb0qaiZGmj8oxB2E3Pgfp6rYhJ.hSjvEFbg7ThhAxK BOkp66SIaIwGZePrLYW0vSWtqCTnwmmmrVIipS_9JBF_RcI907CQ1uNnxQP3n_NWV_FQJ8ZbxTpX LBY67HkjOMrY3HEmqcvhs.vQCYUgSm_s.OHZ26ggF5NNkTsojfY.mLcgGrrg63Lx7nQf8lyY6dfs Y6O8XHTknhkwW3afE9jwAf4SiO1rW7yPxe37CHxpNG8H6wJgwNiNFeAMty5BlR4FGFzAy_lU3oRz k8b08ZUZzheewgU3NwHBgmICmcVeiFJj7GWLzYQOZPcBJI8zggUP7viPG6CwalS7ZHhkwtWoacMM PjRARqNVW8zBGlTaC5tpw79rM3eyIXAY9NNNkHTLRZ6bYq73tNhcxSj7MaK0bHie_OoN4sMganwX r55tb5Ajl1tU4uUTzq8kbJgHMzO4H9E9ldxUf_fAkuDf2.WYzuCw92qDoe.A.8nqi9oBh2r8tbVZ LdSf2pTE48roLdXwl6yPHpNiWa34Wug.J49E5VIoZNhKLVjhZY2Q7b5koIIdY1T8XoBfkGXyGzQj LMLBbZIWGVKyFW3bhYOymPuM866ahbYvE_aVnRW0xS6xhO5KsI.5fu9PcP4i2SkApm24AmaT7Zli NgwQq6MMvOlUsGBTJaizvRBbFlB2Z0iXOHsEszPEgTORxXJMKQsvdFkpbmus2LhnjPql3fi1Y9vL OOmdZs23DPOZN1FcqAFv2MMUnICR1dAc.Fwl9P_cF1.RJZiNQT2y0oQPNpRsy6wwy0h1llWSNZSt NFMXL.uxMFtr0uDrtSDJqM92RkoFHPbpSFypVEtmvSA_CnpY6Ky0S7NF9LqDwbQaU64NEBQJbOmf Yq87qNUsowunOR4Nh.KvRihFCUkZEobYGwSMmBiwoHUgDtsRzjzW8YDB_5oeQ2RhyfcgehFLuMD_ GJKVhWC6DzpS.hxBp6RzkDJ11DSWptabB9.BHT4d_O39GWi7vN1eOHblDr8jfsj..74MzLBiVOp7 siHApNDwG2dWVMJuWIkukRw-- X-Sonic-MF: X-Sonic-ID: 4f1a8f47-4b6b-401d-b762-a5c3de955902 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Wed, 30 Sep 2026 15:14:19 +0000 Received: from dip115.lsn.ir2.yahoo.com ([87.248.99.124]) by hello (SMTP) with SMTP ID 15744020acab95e3749a115a097d285b; Wed, 30 Sep 2026 15:14:13 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v4 2/9] Windows gdb: Use allocated buffer for CONTEXT Date: Wed, 30 Sep 2026 17:11:36 +0200 Message-ID: <20260930151403.774660-2-ssbssa@yahoo.de> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260930151403.774660-1-ssbssa@yahoo.de> References: <20260930151403.774660-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. Approved-By: Tom Tromey --- v3: - fixed missing newline - merged initialize_context into the windows_process_info constructor v4: no changes --- 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 fcdf43e270e..c153ad2c82c 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); @@ -182,9 +176,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 }; @@ -203,6 +197,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 @@ -317,10 +315,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.55.0