From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id DkMfD372/WlQ+CMAWB0awg (envelope-from ) for ; Fri, 08 May 2026 10:43:10 -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=MIzhV/cD; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 1A7D01E067; Fri, 08 May 2026 10:43:10 -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 D050D1E067 for ; Fri, 08 May 2026 10:43:07 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 72F154BA2E27 for ; Fri, 8 May 2026 14:43:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 72F154BA2E27 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=MIzhV/cD Received: from sonic305-20.consmr.mail.ir2.yahoo.com (sonic305-20.consmr.mail.ir2.yahoo.com [77.238.177.82]) by sourceware.org (Postfix) with ESMTPS id B40144BA2E07 for ; Fri, 8 May 2026 14:42:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B40144BA2E07 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 B40144BA2E07 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=77.238.177.82 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778251359; cv=none; b=ZQybKeKc0MbTwberFqRwt/6nccqqwmGcM0g1/Up2B/01OVAv9Ldqcqb9uy2EyGBhTXVd5YJwSgSRV3FD02A2BejFO8EhgotluL/ujxrjyQ6+h+T4eZRunLdmHFrRc+Gvm8t1T7IpJwqPVWOH6S3Rwn4pnd3KSaz4BGd8v0KS+v4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778251359; c=relaxed/simple; bh=JRBXld0lWJ+GavSfb8QOKaa6hBIjYcizEDHiWk5miTw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=JfijdDlTFOnTLExKz/O4ZSaFZAi/lsa1eY2rEkZvAJR9A7KqVmS5NFIlLKEvu1vJOXn+1wAQ1DCYkbCFnNHT8O2sGna6k3Kv2d8fbvhyeTMX05XYC74bjz3qG3MrnpuH2mcjd9VscOF/eYmXQByXdKO5OOWaIULSabTqdDADcJA= 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=MIzhV/cD DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B40144BA2E07 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1778251358; bh=ucN6I8JkpXFDIz1MyV62ziRZboyNquu52OeEl4vqcvI=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=MIzhV/cD/qIKGo+tO0quCf7GCR+gGCo9U4qMdfur0Nkxduaho4gHsX76ogweydhv9j/eZqgSRlJOtDV/UAYh3YKYC70E5Yd8613vxDoG7doT2Ev2AxSynzEpJi3EdPgMUv4W3gmlS5fOnD6MCTe5eOHhI5V0hcYc5iRID12aVlXWfsgh+IoLhqLAwKx9bP8QEKSRJHSbEVpxi4WfCVmcf5surzmhUBvy8ia5HeWOnnblkhOTDXCiKJf/oTEqw1JMrFsh6C27z6opO/UDZq81FFtVZWGBGvNFo2Mnj/Jrms8d6l2ll16rRavSYDCjpeZTFleY+UT+JN2u0Mw3fQh35A== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1778251358; bh=H0MrWNHV+kdz4WJTf2+c97ybA5uaeKuJFSN5Bl/+r6J=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=hJSTUcAWxBobTfnolKq+kqE0YwvaMk0oRqX/5miysEOapuukwkI0he+z0B4szHZCO/osZqX+x4ZvklL/DIG5xz/bmtJ6QzUBKnIb3JYUEMjo2pHbTWsFCM+RE5pFKB+bLtj9CtJkt+rDPDpEsAr+btpS6WHskSPa1SBodnzf4wAV4TGMG2hXFcoMVxTxzccf1ykBDDuyPM7O8J4utNSTULB1Blp9PowT5tCqwAZY0+YfcjCCL/y1rEOAIGMgBsxzXQOyw2mryb0icwYuRlnznuAaSKnn6xFFhR/R5ZKfrlitYvFrAK9pKvQIIDhcYOZrZgQJxQvF0Vjt+mo7l1gb9Q== X-YMail-OSG: HlH2pe0VM1lg.X7Q3SD2Iz_HbrWW20t_6_mbQXfK_McMnwa.tdBpw6Jf7rn2n4h 0eZCBZhhTlokf1obWB_7_MNujs9wiQjsNxVJv4ZOMGPvbziSGQ26iQCel0rl7vcfVI08lqDl64e. 1rXlLRxCr5QUXuPtRK6dnECXQO71obWAqc0eDTmLbGqNry.hvTtOAz6Ru_2y8dgDyVVqSC2AOttR R0SnWqVshp4GQ7PCygShS2S03dhbxqF1yisDQcB6puXeb8xTAw2d_IirAIvgJlUye4_UedU4PEgr Kg6KIg5Vk2vCTO1Plr3L9mjOL74tAo_NIEHPBiGWB5MlLD2pAmrDO.jHGi9z0xmGLA6..gRPtOqZ ME0XPRv3YXYMM9q5bnmnk6Gh75dxQAmhtG0TtSlH7NDkq9DTbjemUqImPU8WxepxOkBjKKWrzsOo SydQ.FYkijg9Xj3aQ4zQlQqXPML8qE_9FVXw3CLqYpNV6z4z2bBKyM6hTTrb5ZsGQhAI0nZuuvP3 FmsG3X7wpO6FH_Ag7qS3kIZzjxwU.51hkyGrYNQ.Qhdh.k5qvoih3H4ZTjd6qeIV3DdVsq4co4hK A4NCpI_0FucfuTmSCsjhPNdNwFxRW1NY9ni4WN_O.Qx7WIJPpw71_UHt92m3XG9cEOhfFu0aTb7W maIpjX1kmWIK5nix.OtPbNyv7zLLs9X_7Us93lcqldJFqlfIv3nQ0YBo7dRVtBUgtd_ZQnSDf7Th R.W6k_t4CMBYFd3ojCaG5alGmSeI4G1JkvJd5qRsbu0cj89f5XBWcNS4LMF4RqzdZbIKZxq7VVrJ eIJT2T6gcS0orEOeQBIF7UOSNGhbPFQsesQQvvixlBXio.YqDehKfOeQS7n14N.9f87eQEIKASS_ sPsaokGNtzbcr5GhB9dG01aZfTV7XyuCx_H4jPZzGdgC_ZxsoVCJgEJvLIJOu83Jf68pU5yQBFu5 bsF5mX0iPrHV1rzOsg3qWZ4d2_XJRwiDm0tpP0wk4mCod16uAWx9u80MdvsgvecmFANpzEZ7NrV0 ei5UhyOy4_PCOWQ9PSjPlWmjRQLOakRHk50CbGVsoTrULytXMTLxHG6R2BBFqY2AKxvfNSUjEwWJ jzppSOrP6vFpulXHdIBtS3ZITYc0kgrtAXKPhkqBA2NIViPJS83oMjQfSpBUtuHNXdulKTJFcHU4 6e5u2fFIpgzE2R0iSy5_VnLJMTaXGcezCcK9NPKQBx.CGG22X0R6KPu4EhGVzOEs2j7I_ojbdfsa 3FnTZUm6UO57y7CAybuiTSp8EA6KfPEVmWSafyXFF1Rxc3HkIYxywPSIOxT1z6IM.XSr5lqZoe15 hLrsf6t1BrA0e1VFPwS1T9g.zL1p6QhkMYNrNL6TTqhGkNhIe1bxavX1zqStipzyuI7w4KoOcEtr NXaaOwLVN7p_IibyzbzBQFPdj0XtAy0dWqzW1rXCtjG3oUndKj_JVFxNEsbtMTFHKCtM5B_G1IMC c6pqhZt8.c2zso6slCm2JfMeEInWoANg6E4L.zQ4_0lVLbo7lG8jlH7iiUBbWRhn.rL6SrXyVmho YoOiRTb8H.6R1_jmUrGClyNimzszoTB0MQrAC9DA_7nqWaATk7UUVn6j9GF64d1YosJLzAe9ZnqZ lr_8.bzJwHcgxb_ESJ2AMZfvBG.5lXUC.XLPAyusZvuZAXI4nG.hCOSAaKLer.LSNGQSxi5qLk7T pNc.KEFmk0w6yrc9vm6o2G3Ux4OlIVW.L.oU0l9GLW7ZBZ2Ddfl3OY2e2fGj7tn91j_geg2VTO5y FFicLCQhNhSb4OrY3AP.QtddFk3X1RFkAaHxTc5DOPGtzVIVdxRuIzQFcoo9dCxyweB8Toubx6hW KlovpBEqWODhpl0ayL4fRjHDsWe9iyO_rVa0pL8in1QwdwlGDGeei7v87wVsBhSntcdMHLI3EaSa Hx4jbPvJ4dNrQHRiPD4rimXqne8YYDIgoTLbPh0RgtswDLDgFAQxdM76U8MC54RNWwuUf7IjUINt Bad3dV2An39jHZY6xP3CY_8DFHkE3wlKDipkJLO1krJuikbXp2cKZsq1XxBq4SJPoQ91eZLh.RcB Zqp5enITomN5gFPtHPsUfNMiGipZykaU1mfJZiorHxLkKX9M9aGoydRSm.LWwRWmNYfPaZmaLx.6 .gB__obN3W8dLLDvBKw2k9Hi3HArAUYi4qUCBqYQkpnaNPfvtgMrEu8GUwrCST_D0HiAXGaGoIQk _ZY1wU9IAz7aYYA-- X-Sonic-MF: X-Sonic-ID: 326cafc7-b734-4ad2-86e0-6c12ae6960ce Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ir2.yahoo.com with HTTP; Fri, 8 May 2026 14:42:38 +0000 Received: by hermes--production-ir2-89844b765-p4qxl (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID b186ca6860ad2b9a3721f1b558603b31; Fri, 08 May 2026 14:42:36 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [RFC PATCH] Implement native TLS support on Windows Date: Fri, 8 May 2026 16:42:28 +0200 Message-ID: <20260508144232.940078-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit References: <20260508144232.940078-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. I've used the fetch_tls_load_module_address gdbarch method to get the address of _tls_index of the OBJFILE, which is then forwarded as LM_ADDR to windows_get_thread_local_address, but I'm not really sure if this is allowed. --- gdb/windows-tdep.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index 38ee1d7275e..0ff8c5f580a 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -954,6 +954,58 @@ windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_get_siginfo_type (gdbarch, windows_get_siginfo_type); } +/* Get the address of variable "_tls_index" of OBJFILE. */ + +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. */ + +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; + 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, tls_ptr, slot_ptr; + if (target_get_tib_address (ptid, &tlb) + && !target_read_memory (tlb + tls_offset, buf, ptr_bytes) + && (tls_ptr = extract_unsigned_integer (buf, ptr_bytes, + byte_order)) != 0 + && !target_read_memory (tls_ptr + tls_index * ptr_bytes, + buf, ptr_bytes) + && (slot_ptr = extract_unsigned_integer (buf, ptr_bytes, + byte_order)) != 0) + return slot_ptr + offset; + + throw_error (TLS_NOT_ALLOCATED_YET_ERROR, _("TLS not allocated yet")); +} + /* See windows-tdep.h. */ void windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -963,6 +1015,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