Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thread local storage support for dynamic libraries #13447

Open
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

jprendes
Copy link
Contributor

@jprendes jprendes commented Feb 8, 2021

Fixes #13398

Currently TLS in side modules is left uninitialized. TLS is required (among other things) to correctly handle exception in side modules.

To initialize TLS the side module needs to link against emscripten_tls_init.c
In the main thread, this will be called by __post_instantiate. This is the same behavior as for the main module.
In secondary threads TLS should be manually initialized by explicitly calling emscripten_tls_init. This is the same behavior as for the main module.
In optimized builds, symbols required by emscripten_tls_init (those are emscripten_builtin_memalign and pthread_cleanup_push) might be eliminated by DCE if the main module doesn't need them, so they need to be explicitly kept alive.

Currently __post_instantiate is incorrectly being called in secondary threads. This should be fixed by PR #13395. Without that PR, TLS would be initialized twice (harmless but incorrect).

For exceptions to work it should also link against emscripten_exception_builtins.c. Exceptions handling generate code that assume the library is linked agains it.

@jprendes
Copy link
Contributor Author

jprendes commented Feb 8, 2021

I'm not sure why the circleci checks haven't run. They seem to have run fine on my fork.

Base automatically changed from master to main March 8, 2021 23:49
@sbc100 sbc100 self-requested a review February 11, 2022 23:21
sbc100 added a commit that referenced this pull request Feb 16, 2022
The remaining issue with exception with this combination of features
was fixed by this upstream llvm change: https://reviews.llvm.org/D119630

Fixes: #13398, #13447
sbc100 added a commit that referenced this pull request Feb 16, 2022
The remaining issue with exception with this combination of features
was fixed by this upstream llvm change: https://reviews.llvm.org/D119630

Fixes: #13398, #13447
sbc100 added a commit that referenced this pull request Feb 16, 2022
The remaining issue with exception with this combination of features
was fixed by this upstream llvm change: https://reviews.llvm.org/D119630

Fixes: #13398, #13447
sbc100 added a commit that referenced this pull request Feb 17, 2022
The remaining issue with exceptions and this combination of features
were fixed by https://reviews.llvm.org/D119630 and
https://reviews.llvm.org/D119666.

Fixes: #13398, #13447
sbc100 added a commit that referenced this pull request Feb 17, 2022
The remaining issue with exceptions and this combination of features
were fixed by https://reviews.llvm.org/D119630 and
https://reviews.llvm.org/D119666.

Fixes: #13398, #13447
@sbc100
Copy link
Collaborator

sbc100 commented Feb 17, 2022

These issues that this PR was trying to address should all not be fixed. I finally landed and end-to-end test here: #16314. So I think this PR can be closed?

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.

Memory corruption when compiling dylink + pthreads + exceptions
2 participants