From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id SRmbNYpFEGrpCw8AWB0awg (envelope-from ) for ; Fri, 22 May 2026 08:01:14 -0400 Authentication-Results: simark.ca; dkim=fail reason="key not found in DNS" header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=GrGf1d9M; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id D83D71E091; Fri, 22 May 2026 08:01: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 8F1FB1E062 for ; Fri, 22 May 2026 08:01:13 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0F58348FED9B for ; Fri, 22 May 2026 12:01:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0F58348FED9B 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=GrGf1d9M Received: from sonic307-53.consmr.mail.ir2.yahoo.com (sonic307-53.consmr.mail.ir2.yahoo.com [87.248.110.30]) by sourceware.org (Postfix) with ESMTPS id 74B7548F5373 for ; Fri, 22 May 2026 12:00:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 74B7548F5373 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 74B7548F5373 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=87.248.110.30 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1779451247; cv=none; b=WTcXrd3kPVIl2Cu5HO3qHYIaqmlm2toUIQnZQpA1Pb4pTvgmnppYoYB9V5biIUulByjfgJNwQetFyCwP1zImkFPDGCsLBAsRo1EHOE23xbSBqeG6m87/K+zQ83HNgI7nOGxwTcDCmQSNu/rqp2O9H1x4FHL0PkjvsNISw73Lto8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1779451247; c=relaxed/simple; bh=4xuUIVOjzQe+MXJWigDRJnnG7tWlNiEOC++EbhUYMg0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=Tr2TI/e9U5TgI4XeVJOT/O+1sZTCn9suGXK3duWm99U4mcQ1j0AdX9cCpd6n2v/Vhqe4ZJDs/F7/B3b8NEf4/VoYJnYK5bapuPF+ioREGgCFho+gXEQm4pFp8tYxRNBNcSEfLX3wnswYKJY+e+XkbWrgzx/feTAoCetX2MTS69Q= 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=GrGf1d9M DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 74B7548F5373 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1779451243; bh=VByJbd2ZXLBD8d4vUhdEzuv1i9Ext4J22pzfVtS2U0Q=; h=Date:Subject:To:References:From:In-Reply-To:From:Subject:Reply-To; b=GrGf1d9MEPvlDmLsXIAMRDeanidTA+3qpOGrBNraSwuSZestw3N/M7rN0jATAPkinUWzbHVUXCP0XQ81WYdOoVDo9S+fNIXsB7S28n11BCcAb1vtN6kzzhPXH4kbBXWiFiJ7JYEe51Iy5/b13mPZLZzqiV9Qc1yp3JlKFuWoTQnCYTQs/lKgtriBoO0CfO4HIswLnMkywonIBXfc8YW0vZe464jW0YpoVr1q9tDJ2Hu0UGfKZz8HbvQ6X1IIQjcevUWpHaJ7CRZkrzpbGMS2XMzKLz5/SOYFUS/H6rPhY51r+CH25UQjHqtx7IXlQLFtbI7lQrq6Hs+tbqqcDg9zsw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1779451243; bh=U5kH48DF11sSiMis2/rmYnah24fYSaIONaDq8eKaDwQ=; h=X-Sonic-MF:Date:Subject:To:From:From:Subject; b=LOl/FnUslD83z5z2Wh8ctEH0pPk8rIc2y72PE1ClGHs9kKzUcQjC/ArtHoD+I8ghTZfbioGAcvN87lFKkhSG0jtvnrZmUmnTZMueYCLSBzE2RNmr1FDHdfZPrfwsHYi2nJPwLqUrGyZx5HPKw14vG+czzwH50DijLOx0IjM0M5PP8g2mxvjCrUOpmjMoPPF818VqFjAB9gjCJfNTOwNeFuFwGCsy/LDAfx6FezeI1I4C4xbwqZ3ZugoqglwvJ9JvgoJ2FG4fDYJJSrfNI2gNemb6bbwAr+NWnbLAWLHeLAO3u4wpXZ0AqZlvT/DAr4uB8jmicZGlAbtroOwm0bowHw== X-YMail-OSG: ILjgmpwVM1ku_iyjo8ey5.rdWCC5MPzM.KUwIuxRPjTmC22gU0AtCMD.eDxgSTd uwZxMbDI6H3KIo0UYAzo.n2HqM1Zs7IB07_8oB1Kma5V6FVfPonFmqrMtwBldhDWgsZpFEezUW_2 dBJNyxIVnWAi3wGCZEUwbtkKFCOzjVNNoJLZAQAVCo0RIeiHcNnmnDQcbFamAeVgICilP4Ohi.62 A8uPLZ1XAg7ZBqvDea4reowALeAp9fDTB5XjWvMsYmFCeatgd9i5UHowKBYf5Mv7jn8DXOJQy_Ga 0cP6jJTd4E5ecUUwn8ulInLfnFTSglHWQA8gmSTfmQn4ehqIOqZr_kdgb_QowtgmxJlLiFAZEJGM e6v5epN4_iCl6TGYmEhRGFjhSeJWqsOBpe4MB_zIJFri7Dou2ZrBdH5g8ggHDrwsiqvvflQ4qjGx 3CRMEkGgsUKT9I_Tlx7ikNeOe1yszDzAur4JxclCBYNnuUBkFKusl9OZ._FE9L9e3SDDnthpSvmt q12yf8oihqD01tCm38LpO7opoQPcHiB6UrMDYgezXVMHUDj788zATtP0DIL6jTp0tMWIjZOEBA7n o_nIaVf4NHfZtFboae_11Gh13Mhr9wj7UBX_IX3yQPqQ6eiRM.ehEKHmKwpTZKhUDHj485obGmF9 0LPGMnvEq6V5AL6JyuZsjdMaOTXMEbWZ1mNCWszZIbi8Eypydfd6y_yEyNS6_tzAQtYPMeY27Y0C dOF0Zq2tpzSTEsXnsb0JEdBM7lDS1zZEFAPA7ZQBRjw_jUR37th1E4p1OuIERmqBlBcPVeQbAqTS qpFruuHemwqyA7uvTEUq6sWK8tovWlrekFhwB3_60YQM8JZIKCCjuQHqsW7evHAeA1Bvqr6HsZLB U_vtjpzg3dDttvLJR0MtXMNj_frLLpMhforui.9mKCGAihtVNhWAkqW8xov7fJQBHztSSBIKnCp8 _6YQBK2RHGiqMNcrl5qRYA7a.PYmk34VKJBSSdLZwMt506G2MyXMhdynjs3XfInUZQ2YhmBz9qSE uSpwNRBSIyX0dRfWR1jcILNHALDlojSG.6wE_lKxc6.XlxW167D8RADqtu835j_tj4FG5A760sQw r3517Y5Cik1LLZoThIbSc9EWvOj5eDmjoeteLjP8VD2sGoRjEbKtUy9ziv44eAvxbXlYyk1ezMzA k5bixCR3GM.S_EAWXZnpDEYSYqnkOyOEKs6wxhFupWVN6gkAEuE6d0mZK6hjhABiajLN5f9Vh4pN yH9kza310iZjiUddi48yyoaASSyQ1aaCmiq2cNNSh715eXdIOPAaw3Y3Mb26Ctv7z10vBcY0Ghei .5aR8ouYGQY0VMVEwi94EsQFfhJS1HXddeL93NC2D2u.CRhPqPioi3G1tpsOBlCqu96aTp6aMxR4 19Jc7LB4FbKpLtxQrOCHqH9yLd5uV1tSBRL.7czeMaaDbiXnRpyNa2k8mYVIBm9VBjeglskUvOf7 qiA3t8T7POctMnwO2fcI8xV3I84oncRfr4cIcLegEJINCqA6RFIlIAiB4XbQDN47JhsjEn6Rq5w1 k7LaGtYuxXbn93QQZrxaP4CF.QjPczJFV.vFZqvr8fsOTkcnqcyVCggl8gm.acPYw9DI6SeXg6XF m1M1vuYEMV5o3LWPLmFIaFDM7Qv75TgkNQ_ndL4EYU41EVhlddQQLeNvWWGYTT3HMzGfeFMC4fak aoDHXb1YYnkZqAdRjFg4H.Y5vTK3JkbumhaSXoaWx5XqVn9V414.eAN.NrMvOSvaDkaMB9CMzlH_ igXp9tx53LSrwfmZ.p6d0yfmnbLCzhfmIRk52sAsNvSfCxaDdDDGNFNnru71ry.zH88zOHkI6c98 MhWc3Xud2nw4OrfDKhFGOYuHT5M70bmg3zykaQlfegZlStNwWKJPEU8Tn5BeehejlforMKNK01ai l5F1hErrpZvCsRGkyyxf7irKZMaVrlWrEGo3XGYHkETQqyHmCGoCzmIQ.BX06dkn2scFaUwfIaoK ID7MIGrnrxNB8AqhoRSck0ft73oAgrNLeT1AehmwfJoPtVpPIudVq80BWN4P36GmZWxeg9U1p_Xn R9P.1mXvtgQVzhTguvgjPQDf6sohIPUj4r9dW3xQFKmwRST8aNd7VYeRrZx3xg5Qpgn3yKqjRG3E .3ORXqiSPVn5iMx5SMFw2KTSzfzMdQmfZWKIao4YVQChvoj09W9REwhyx06_EHg61TZwyDS7F.FV a1qgM X-Sonic-MF: X-Sonic-ID: 7cd3ee82-673b-4acb-bec2-9a384f180efc Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.ir2.yahoo.com with HTTP; Fri, 22 May 2026 12:00:43 +0000 Received: by hermes--production-ir2-89844b765-pm5kn (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID d56cae1f822e2d7ca9e1b12021ff2086; Fri, 22 May 2026 12:00:40 +0000 (UTC) Message-ID: <013b908c-f11f-43d0-b9e3-5f336c8845ea@yahoo.de> Date: Fri, 22 May 2026 14:00:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PING] [PATCH v2] Implement native TLS support on Windows To: gdb-patches@sourceware.org References: <20260509132633.1089523-1-ssbssa.ref@yahoo.de> <20260509132633.1089523-1-ssbssa@yahoo.de> Content-Language: en-US From: Hannes Domani In-Reply-To: <20260509132633.1089523-1-ssbssa@yahoo.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Mailer: WebService/1.1.25725 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo 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 Ping. On 5/9/26 15:24, Hannes Domani wrote: > 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. */