From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id Oi1KGjI2/2mYMSgAWB0awg (envelope-from ) for ; Sat, 09 May 2026 09:27:14 -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=AvK7lVAx; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 563941E0BA; Sat, 09 May 2026 09:27:14 -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 5BB251E067 for ; Sat, 09 May 2026 09:27:12 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 006104BA2E12 for ; Sat, 9 May 2026 13:27:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 006104BA2E12 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=AvK7lVAx Received: from sonic303-20.consmr.mail.ir2.yahoo.com (sonic303-20.consmr.mail.ir2.yahoo.com [77.238.178.201]) by sourceware.org (Postfix) with ESMTPS id F0CC24BA543C for ; Sat, 9 May 2026 13:26:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F0CC24BA543C 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 F0CC24BA543C Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.178.201 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778333205; cv=none; b=vKDKGFdHgNA8ieUIIi4N6JoFBt76MxmsYuM8pU5Erd/j9tAfQbrh5oRVuMgcodBoH+ga1vooMNzxrVuAJD9c/xcCNF9IY/vElOwXuTq7blRtSksqd15RrsTxzPI1KrsRfp8/W+y5H1ZRoQVVNB2u2IsxSws/U85lz9T8pAiVkeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778333205; c=relaxed/simple; bh=VmYTUn41rX4zKGe34toNgqaH4KabNhhGG4uqF+yYSGo=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Hk/cjL2ZSVkWg+PbcsR6eZXErcRv9/BSZOSTqoOTPv535py9U6YNzr+LsltVCZS15qMdWLBiwrQS6rZbFDYIKFp8jKkvCwICsNDBsCk0XZJzKM+CxesAroXwyXbC3N5IXNlKDh4NOx8L0mDm2rEEPCwz/N6cOLHiQdqFB8Xlv8U= 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=AvK7lVAx DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F0CC24BA543C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1778333203; bh=2Ly8gytcvVvs9QPZbJbwRp/rMjhSfYJavpbCfAvBNVU=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=AvK7lVAx7xh7RxhCQDXmGTX7hTaChMjTKWii7VNalj+eYKZZ1J+W08hDXXKMHdjuttpuXylRRbZL3gR4TDzlZOuFJ/3exrIvW3ySsUlzatAWX3Pea7oKXZi5TVl9PpLhmcfIa8SMALMW/oII2yRla8mLpXoWfBM4X5ALVNHO5GqiWhgkv37+5RwxrIkO7lXMiY6dld5Imjfd+ANmRl/Ng7rDDgn6O8NV0rpIgPwQPjFMFst0m1Iu5Wg2I6yupefC/Rb4J++p4Ath2v2ATYjjGElZElPkTXnR0TkFQkqW+maGC08mZZfiIqQQ5lOUiEEWAlalCatVbOTlBMNCOqLFoQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1778333203; bh=F5NLtpEgn75ENlhvmY3oAAnhT6zIBA7ZceK1IXNw2ZX=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=Y2u8RmGpUZRkXeYkFJHd/f0N1KFqTDDL4f2uQurLTfSL1mRj/gluwVbTz3YcTqRQVcwcuvcrUTYg2j26vhzPYg9UvhhWGFwolp3Pv+S2fNrnO6vEbWkgNS8VSLVzI86rUHmvAhIbip+Mnuuz4XIFk+0AbFvaVkMnmsxTuY5MQLEuV2QDleC1BfpyDaHtLKKK3lNvmYuSSp3Oq/4uAQIfK6efg2lsJ5cz/ZYVSdxDeInbQf4efx8Zy1dIlnjaKyj/+nGQG2c/kEWgzMDNKamTLgawYhgwrAjtwtkKTCdrAkRBChMkwW4iG8wIwwK1Eaf6f+SX2k4/tPJtMcFARbByLw== X-YMail-OSG: gNyng2IVM1nZsrcob.lNB827.ksbV6WvzwuRMSt4n_7xFosGZMHNy5M2RXkTfa3 6E5CldLkoHOmooavQlMmVzVN5UdIi81ikWKODsSoZ07LRJM5ypcJiIzo9JKWDKVxyLgl.fTUzd7L WINwmSUmAsIvYAXQk9OwDV4hJmQDrLChZUtXNBgONKi1nyhz2XndnhhjxB1BdmdkBNzi2iTrgBTj 4xvACPblhO6vRWV9jfqUdhSJPZ1R.l81hOWg1aQ.Yi45kMo_i4os2QrU5fqHokAhOUcfVzn7YWLt 3iQvq2JL_t9WgPwXXpHPSs0Q9TH4EDk9sdfsWBYFLcxOxDalFVHB4hiZqhU2gk4llGtPuDOpa46q FZPySEQH0PIefRq2Kk2UvHftijZDg6UpQSCftMHj7rfoKRJC3qhwiHzG3JdT5fnVp_ITzVaD3MRc uTBCYUkeObZ_DJGGxm.9s5FO_RMqI_11zaxxIHhRcZ6fkBrpCyGTDmmJvLga8UoPXN4YuZ0w7KNz o0koItADYRgqpahqGYtLsXTfnU2mQGnv7HY5jMMbQw98cfk1PVhOxJu1nxHgvKGnhKJW9bI4lmMb 6YmwgM8QpPdSRApONWh4JHEQQj0J_LyyhkT0mkc2iltXjt.dJbeSZNLEIQTqLZy5VfKKpFWBo4LK C6j.gxGiopZ1Vq02Xgtl2_dRXKb8YjiRUE64kj736hvYOqCP_WONOTZKNPfhCS0oRXACxO_ELzMm CPwnd5OvLS_uArH05xOgcksFDLkJYdrmQ6Gjs.cD2J0L63u29V0Cups4G7UHKPYzKhuwlwlwWs1R W8yzqg.ABNarmyan1vnJDkpfgN696s_bPzRQLG8mfBY61GDxCasrZyo46BwkmKJ896Tdl9_SDCgE 8Pepk6UlSPUja_RNt5glKR7H1XhcdgJQOEv.eIyUQQ4CGJl3nyqFh7UldYq6cnAcUlZL4_SgQJE9 MyGui_rbsByjnh9ko3TrGRgRCInwbjKUuelaThENfsnbRN1wGaYQNHtsoZpc8J6lRcxCB9SLw8MU r.XkJKAQpQ8QlL.n3lGXILYcSOtmGmdR3HvpnJM.g3oGnDgPJULLWJm0XGbyo1c8IzF5dUu8bcgo X3IO9XMu1mpTKlsQH1yfgLowcSAKFr5ugDvrQKJVRC6nKpApb1Rk8PsB5USzvjsOq1A3IS8CXmAn tbhOPAUf_S07s9rZVn7p_Jp5ktQRG5nwJjeN1NCtAe8P06vd22nVD8b_ZJpyqxr1hATvMnrtopSd j55S2u2QEC96l4JfEO2pOY8B_hepZoJo5odQEw8FwRR.1Rox8ZfvpZ7gZyEpmETiZbuRV1Hu1bYF YFvlx80S8B98lO.iFGS3YoGI08kVvN26A8QOJAzP4fLBLrcFyVaUwqnaxUfMQwnALARqAmIX6bcj ziwpbAEmCgf7G3crXpCGO_HCFu9_U52.0A35tY5RLl0KWQ4U5jc0BGIG.1VDwLhtWR3LtnQ9f6.i lLN68bALhC99wl5zp_rVpXsRr0a4zynfwEwiMo7kqnN4B6Oqyhs6S.XAhtqu1SX_NjdM_dQ2tWUW cbXjiIKZxpLWeCTJ2Z3yXYNrKpFQqob1UzUoclzWhxnIn2dh7DYb0wQwWk8opsrcaZ7wkMwI49_Q udYekBOFdxgTG7hdpWgiwPw9TXtstClem3ukzjo8sV9Z1vo42xzC1CNGEKE.d01Ye.vZuF7MAKi_ qpdEZaUyQvOFdFPV1mWQgzfOWRMmaqgxQtAP0yGa5sz0umtZW55xWozwgGy9b9BzpUs0WX0Uw3lP kURmDHRp4TInhHuF_q8XDp8p8ekxwHWofMD5IvgznNJh0i3dlOaPFGl8hJ8jVZOvTGOlglMz0tQf 8h.TcuZBGPeOBUEvICXHer6d9bvRPB.9c3Y3JZvzDitoto9NTZb.HwD86dXnyBOHbGANJpo8bdus _bZdIcdwOeLcpuqxFYfKCD_WI1qD_Mh5usG8X9yQS1wQrwtoiAtZUSW7vm1PUPEH3JaMmZrvBK7W UHrS3dzAVfhtbI.oN27UohzhFsCkP8r92u4Qj5YuumaCf2pqAsmOQZIDdOx7PASeddfnoS0E9kXr ngZrDPtviYUQhl.rnkrTrP8UJn9ljI_jaPlOWoRs8ggps5AqySXH45PS8kPzZAL.bpiBfcURVb9N 2aJWRkFtbyjrd0SCSIyfe0AVG8Urup971PxoKyVQHzeNkXDZtiL2YX99iJpAA88XMAIvdOmmZENI wSpEJDlllmAZqC_QBy1vPrg-- X-Sonic-MF: X-Sonic-ID: 5dfa18fe-5dfa-4423-baf5-25feb31ddf9c Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ir2.yahoo.com with HTTP; Sat, 9 May 2026 13:26:43 +0000 Received: by hermes--production-ir2-89844b765-5fnlv (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 27bd5564b159f666d49e421aa7d3b538; Sat, 09 May 2026 13:26:39 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2] Implement native TLS support on Windows Date: Sat, 9 May 2026 15:24:29 +0200 Message-ID: <20260509132633.1089523-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit References: <20260509132633.1089523-1-ssbssa.ref@yahoo.de> 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 GCC 16 introduced native TLS variables on Windows, so this adds debugger support for them. The fetch_tls_load_module_address gdbarch method is used to get the address of _tls_index of the OBJFILE, which is then forwarded as LM_ADDR to windows_get_thread_local_address. The TLS slot for a module can be found in TIB->thread_local_storage[_tls_index]. --- Changes in v2: - added NEWS entry - more comments - split up if()-conditions in windows_get_thread_local_address --- gdb/NEWS | 2 ++ gdb/windows-tdep.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/gdb/NEWS b/gdb/NEWS index 480e1854002..ee1a21179b5 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -78,6 +78,8 @@ * The Windows native target now supports non-stop mode. This feature requires Windows 10 or later. +* Support for native Thread Local Storage (TLS) variables on Windows. + * New targets GNU/Linux/MicroBlaze (gdbserver) microblazeel-*linux* diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index 38ee1d7275e..78bf49b9c81 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -954,6 +954,73 @@ windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_get_siginfo_type (gdbarch, windows_get_siginfo_type); } +/* Implement the fetch_tls_load_module_address gdbarch method. + Usually this method returns an address representing a load module, but this + doesn't exist on Windows. Instead it returns the address of the + "_tls_index" variable of OBJFILE, which is then forwarded as LM_ADDR + in windows_get_thread_local_address below. */ + +static CORE_ADDR +windows_tls_index_address (struct objfile *objfile) +{ + bound_minimal_symbol minsym + = lookup_minimal_symbol_linkage ("_tls_index", objfile, false); + if (minsym.minsym == nullptr) + throw_error (TLS_GENERIC_ERROR, _("Cannot find address of _tls_index")); + + return minsym.value_address (); +} + +/* Implement the get_thread_local_address gdbarch method. + Each module (with TLS variables) gets its own TLS slot represented by + _tls_index, which can be found in TIB->thread_local_storage[_tls_index]. + The address of _tls_index is provided by the LM_ADDR argument. */ + +static CORE_ADDR +windows_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, + CORE_ADDR lm_addr, CORE_ADDR offset) +{ + int ptr_bytes; + int tls_offset; /* Offset of thread_local_storage in TIB. */ + if (gdbarch_ptr_bit (gdbarch) == 32) + { + ptr_bytes = 4; + tls_offset = 44; + } + else + { + ptr_bytes = 8; + tls_offset = 88; + } + + gdb_byte buf[8]; + if (target_read_memory (lm_addr, buf, 4)) + throw_error (TLS_GENERIC_ERROR, _("Cannot read _tls_index")); + + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + uint32_t tls_index = extract_unsigned_integer (buf, 4, byte_order); + + CORE_ADDR tlb; + if (!target_get_tib_address (ptid, &tlb)) + throw_error (TLS_GENERIC_ERROR, _("Cannot get tib address")); + + if (target_read_memory (tlb + tls_offset, buf, ptr_bytes)) + throw_error (TLS_GENERIC_ERROR, _("Cannot read thread_local_storage")); + + CORE_ADDR tls_ptr = extract_unsigned_integer (buf, ptr_bytes, byte_order); + if (tls_ptr == 0) + throw_error (TLS_NOT_ALLOCATED_YET_ERROR, _("TLS not allocated yet")); + + if (target_read_memory (tls_ptr + tls_index * ptr_bytes, buf, ptr_bytes)) + throw_error (TLS_GENERIC_ERROR, _("Cannot read TLS slot")); + + CORE_ADDR slot_ptr = extract_unsigned_integer (buf, ptr_bytes, byte_order); + if (slot_ptr == 0) + throw_error (TLS_NOT_ALLOCATED_YET_ERROR, _("TLS slot not allocated yet")); + + return slot_ptr + offset; +} + /* See windows-tdep.h. */ void windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -963,6 +1030,12 @@ windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* On Windows, "long"s are only 32bit. */ set_gdbarch_long_bit (gdbarch, 32); + + /* Enable TLS support. */ + set_gdbarch_fetch_tls_load_module_address (gdbarch, + windows_tls_index_address); + set_gdbarch_get_thread_local_address (gdbarch, + windows_get_thread_local_address); } /* See windows-tdep.h. */ -- 2.54.0