diff options
| author | quininer <quininer@live.com> | 2023-11-13 20:48:23 +0800 |
|---|---|---|
| committer | quininer <quininer@live.com> | 2023-12-07 00:21:32 +0800 |
| commit | e5b76892cc5e6fbfb495bf6a7339962a287849a7 (patch) | |
| tree | 81bfe340a76ab385e4631c2ef51e5c5db55385a0 /compiler/rustc_codegen_gcc/src | |
| parent | 8a7b2035f816f6d27003a9326d6bd3a3d739fcc3 (diff) | |
| download | rust-e5b76892cc5e6fbfb495bf6a7339962a287849a7.tar.gz rust-e5b76892cc5e6fbfb495bf6a7339962a287849a7.zip | |
Add emulated TLS support
Currently LLVM uses emutls by default
for some targets (such as android, openbsd),
but rust does not use it, because `has_thread_local` is false.
This commit has some changes to allow users to enable emutls:
1. add `-Zhas-thread-local` flag to specify
that std uses `#[thread_local]` instead of pthread key.
2. when using emutls, decorate symbol names
to find thread local symbol correctly.
3. change `-Zforce-emulated-tls` to `-Ztls-model=emulated`
to explicitly specify whether to generate emutls.
Diffstat (limited to 'compiler/rustc_codegen_gcc/src')
| -rw-r--r-- | compiler/rustc_codegen_gcc/src/context.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_gcc/src/context.rs b/compiler/rustc_codegen_gcc/src/context.rs index a043660ea63..893cad05161 100644 --- a/compiler/rustc_codegen_gcc/src/context.rs +++ b/compiler/rustc_codegen_gcc/src/context.rs @@ -569,5 +569,6 @@ fn to_gcc_tls_mode(tls_model: TlsModel) -> gccjit::TlsModel { TlsModel::LocalDynamic => gccjit::TlsModel::LocalDynamic, TlsModel::InitialExec => gccjit::TlsModel::InitialExec, TlsModel::LocalExec => gccjit::TlsModel::LocalExec, + TlsModel::Emulated => gccjit::TlsModel::GlobalDynamic, } } |
