rust/library/std/src
roblabla 58537fb869 Fix broken TLS destructors on 32-bit win7
On the 32-bit win7 target, we use OS TLS instead of native TLS, due to
issues with how the OS handles alignment. Unfortunately, this caused
issues due to the TLS destructors not running, causing memory leaks
among other problems.

On Windows, to support OS TLS, the TlsAlloc family of function is used
by Rust. This function does not support TLS destructors at all. However,
rust has some code to emulate those destructors, by leveraging the TLS
support functionality found in the MSVC CRT (specifically, in tlssup.c
of the CRT). Specifically, the CRT provides the ability to register
callbacks that are called (among other things) on thread destruction. By
registering our own callback, we can run through a list of registered
destructors functions to execute.

To use this functionality, the user must do two things:

1. They must put the address to their callback in a section between
   `.CRT$XLB` and `.CRT$XLY`.
2. They must add a reference to `_tls_used` (or `__tls_used` on x86) to
   make sure the TLS support code in tlssup.c isn't garbage collected by
   the linker.

Prior to this commit, this second bit wasn't being done properly by the
Rust TLS support code. Instead of adding a reference to _tls_used, it
instead had a reference to its own callback to prevent it from getting
GC'd by the linker. While this is _also_ necessary, not having a
reference on _tls_used made the entire support non-functional.

This commit reworks the code to:

1. Add an unconditional `#[used]` attribute on the CALLBACK, which
   should be enough to prevent it from getting GC'd by the linker.
2. Add a reference to `_tls_used`, which should pull the TLS support
   code into the Rust programs and not let it be GC'd by the linker.
2025-07-21 13:11:47 +02:00
..
backtrace remove redundant imports 2023-12-10 10:56:22 +08:00
collections Docs(lib/coll/hm): Add kv pair to extract_if's first sentence 2025-05-17 02:49:57 +02:00
ffi Update version placeholders 2025-07-01 10:54:33 -07:00
fs Test(fs): Fix test_eq_windows_file_type for Windows 7 2025-05-28 12:06:25 +02:00
hash remove const_hash feature leftovers 2024-11-02 11:27:14 +01:00
io core: Remove BorrowedCursor::init_ref method 2025-07-09 18:11:26 +02:00
net Set MSG_NOSIGNAL for UnixSteam 2025-06-16 09:15:17 +02:00
num Stabilize const_float_round_methods 2025-07-20 00:08:58 +04:00
os Rollup merge of #142391 - LevitatingBusinessMan:setsid, r=workingjubilee 2025-07-11 07:35:17 +02:00
prelude Make derive_const usable within libcore again 2025-07-17 15:42:54 +00:00
process std: Apply deprecated_safe_2024 2025-02-13 13:10:28 -08:00
sync Update poison.rs 2025-07-15 20:07:03 -07:00
sys Fix broken TLS destructors on 32-bit win7 2025-07-21 13:11:47 +02:00
sys_common docs: clarify “dag” in std::sys_common doc comment 2025-07-11 11:53:47 +08:00
thread Add LocalKey<Cell>::update 2025-07-15 16:17:57 -05:00
alloc.rs Make __rust_alloc_error_handler_should_panic a function 2025-07-03 10:52:21 -07:00
ascii.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
backtrace.rs use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
bstr.rs Implement ByteStr and ByteString types 2025-01-11 06:35:21 +02:00
env.rs Add new Tier-3 targets: loongarch32-unknown-none* 2025-06-06 08:19:38 +08:00
error.rs Move std::error unit tests to integration tests 2025-01-26 10:28:04 +00:00
fs.rs Rollup merge of #134006 - klensy:typos, r=nnethercote 2025-07-03 13:29:35 +02:00
keyword_docs.rs unsafe keyword docs: emphasize that an unsafe fn in a trait does not get to choose its safety contract 2025-06-06 22:34:10 +02:00
lib.miri.rs add 'x.py miri', and make it work for 'library/{core,alloc,std}' 2024-04-03 20:27:20 +02:00
lib.rs Stabilize const_float_round_methods 2025-07-20 00:08:58 +04:00
macros.rs Stop dbg! macro yapping about format modifiers 2025-06-22 10:58:27 +02:00
panic.rs rename internal panicking::try to catch_unwind 2025-05-24 16:32:00 +02:00
panicking.rs rename internal panicking::try to catch_unwind 2025-05-24 16:32:00 +02:00
pat.rs Add pattern types to parser 2024-04-08 11:57:17 +00:00
path.rs std: fix typo in std::path 2025-07-07 15:20:22 +08:00
process.rs Rollup merge of #141019 - ehuss:android-doctest-xcompile, r=Mark-Simulacrum 2025-05-23 13:34:18 +02:00
random.rs random: Provide a Distribution<T> trait 2025-07-11 10:21:34 -07:00
rt.rs deduplicate abort implementations 2025-05-15 11:20:13 +02:00
test_helpers.rs std: get rid of sys_common::io 2025-02-07 16:54:07 +01:00
time.rs Auto merge of #141829 - dvdsk:sleep_until_linux, r=cuviper,RalfJung 2025-07-06 23:00:51 +00:00