Skip to content

Adjust TLS in wasip3 with threads - #867

Open
alexcrichton wants to merge 1 commit into
WebAssembly:mainfrom
alexcrichton:adjust-tls-again
Open

Adjust TLS in wasip3 with threads#867
alexcrichton wants to merge 1 commit into
WebAssembly:mainfrom
alexcrichton:adjust-tls-again

Conversation

@alexcrichton

Copy link
Copy Markdown
Collaborator

This is a refinement of the previous implementation in #858 and is intended to be the dual of bytecodealliance/wasm-tools#2596 for wasi-libc. Notably the details of what exactly is exported from each shared object is now encapsulated and local to wasi-libc as opposed to needing toolchain integration which removes the need for changes to Clang or LLD. The main change here is that the previous inline array of __wasilibc_library_tls_info, which was constructed by wasm-tools component link, is now defined by wasi-libc itself. The representation here has changed slightly since TLS size/align isn't const-knowable at this time (now it's a function pointer to learn that), and the dynamic linker will now arrange for an array of these structures to be visible to libc and use. This extra level of indirection means that each shared object exports its own information and those are all woven into a single list for wasi-libc to read.

This is a refinement of the previous implementation in WebAssembly#858 and is
intended to be the dual of bytecodealliance/wasm-tools#2596 for
wasi-libc. Notably the details of what exactly is exported from each
shared object is now encapsulated and local to wasi-libc as opposed to
needing toolchain integration which removes the need for changes to
Clang or LLD. The main change here is that the previous inline array of
`__wasilibc_library_tls_info`, which was constructed by `wasm-tools
component link`, is now defined by wasi-libc itself. The representation
here has changed slightly since TLS size/align isn't `const`-knowable at
this time (now it's a function pointer to learn that), and the dynamic
linker will now arrange for an array of these structures to be visible
to libc and use. This extra level of indirection means that each shared
object exports its own information and those are all woven into a single
list for wasi-libc to read.
@alexcrichton
alexcrichton requested a review from dicej August 11, 2026 23:10
@alexcrichton

Copy link
Copy Markdown
Collaborator Author

This'll fail until bytecodealliance/wasm-tools#2596 is landed/published as a heads up

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants