set has_thread_local=true for android#96145
set has_thread_local=true for android#96145name1e5s wants to merge 1 commit intorust-lang:masterfrom
Conversation
|
Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
|
|
(rust-highfive has picked a reviewer for you, use r? to override) |
|
|
Found that NDK actually links to |
set has_thread_local=true for android It seems that llvm uses emulated tls on android by default since [this commit](https://reviews.llvm.org/D42999). Which uses a `pthread_key` to emulate various tls objects at runtime([code](https://github.com/llvm-mirror/compiler-rt/blob/master/lib/builtins/emutls.c)). I've built a demo with a custom android target setting `has_thread_local=true` and a slightly modified `std` as what this PR does, and it works fine. The generated function symbol `__emutls_get_address` would link to an implementation in `libgcc.a` , which is also [required by std](https://github.com/rust-lang/rust/blob/master/library/unwind/build.rs#L18) for now. By enable `has_thread_local`, we can reduce the number of `pthread_key`s used by rust libraries on android, which are quite limited resources(128 per process). I've been investgating some crashes caused by unable to create more pthread_key in our project with about 80 `pthread_key`s used by rust part. cc rust-lang#96145 [rust-lang/compiler-builtins#458](rust-lang/compiler-builtins#458)
set has_thread_local=true for android It seems that llvm uses emulated tls on android by default since [this commit](https://reviews.llvm.org/D42999). Which uses a `pthread_key` to emulate various tls objects at runtime([code](https://github.com/llvm-mirror/compiler-rt/blob/master/lib/builtins/emutls.c)). I've built a demo with a custom android target setting `has_thread_local=true` and a slightly modified `std` as what this PR does, and it works fine. The generated function symbol `__emutls_get_address` would link to an implementation in `libgcc.a` , which is also [required by std](https://github.com/rust-lang/rust/blob/master/library/unwind/build.rs#L18) for now. By enable `has_thread_local`, we can reduce the number of `pthread_key`s used by rust libraries on android, which are quite limited resources(128 per process). I've been investgating some crashes caused by unable to create more pthread_key in our project with about 80 `pthread_key`s used by rust part. cc rust-lang#96145 [rust-lang/compiler-builtins#458](rust-lang/compiler-builtins#458)
It seems that llvm uses emulated tls on android by default since this commit. Which uses a
pthread_keyto emulate various tls objects at runtime(code).I've built a demo with a custom android target setting
has_thread_local=trueand a slightly modifiedstdas what this PR does, and it works fine.By enable
has_thread_local, we can reduce the number ofpthread_keys used by rust libraries on android, which are quite limited resources(128 per process).