Skip to content

Commit 5079b3b

Browse files
committed
Add EmulatedTls to TlsModel
1 parent 09a1b70 commit 5079b3b

File tree

7 files changed

+13
-14
lines changed

7 files changed

+13
-14
lines changed

compiler/rustc_codegen_gcc/src/context.rs

+1
Original file line numberDiff line numberDiff line change
@@ -569,5 +569,6 @@ fn to_gcc_tls_mode(tls_model: TlsModel) -> gccjit::TlsModel {
569569
TlsModel::LocalDynamic => gccjit::TlsModel::LocalDynamic,
570570
TlsModel::InitialExec => gccjit::TlsModel::InitialExec,
571571
TlsModel::LocalExec => gccjit::TlsModel::LocalExec,
572+
TlsModel::EmulatedTls => gccjit::TlsModel::GlobalDynamic,
572573
}
573574
}

compiler/rustc_codegen_llvm/src/back/write.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use rustc_session::config::{self, Lto, OutputType, Passes, SplitDwarfKind, Switc
3333
use rustc_session::Session;
3434
use rustc_span::symbol::sym;
3535
use rustc_span::InnerSpan;
36-
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo};
36+
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo, TlsModel};
3737

3838
use crate::llvm::diagnostic::OptimizationDiagnosticKind;
3939
use libc::{c_char, c_int, c_uint, c_void, size_t};
@@ -223,7 +223,7 @@ pub fn target_machine_factory(
223223

224224
let path_mapping = sess.source_map().path_mapping().clone();
225225

226-
let use_emulated_tls = sess.target.use_emulated_tls;
226+
let use_emulated_tls = matches!(sess.target.tls_model, TlsModel::EmulatedTls);
227227

228228
// copy the exe path, followed by path all into one buffer
229229
// null terminating them so we can use them as null terminated strings

compiler/rustc_codegen_llvm/src/context.rs

+1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ fn to_llvm_tls_model(tls_model: TlsModel) -> llvm::ThreadLocalMode {
120120
TlsModel::LocalDynamic => llvm::ThreadLocalMode::LocalDynamic,
121121
TlsModel::InitialExec => llvm::ThreadLocalMode::InitialExec,
122122
TlsModel::LocalExec => llvm::ThreadLocalMode::LocalExec,
123+
TlsModel::EmulatedTls => llvm::ThreadLocalMode::GeneralDynamic,
123124
}
124125
}
125126

compiler/rustc_codegen_ssa/src/back/symbol_export.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rustc_middle::ty::{self, SymbolName, TyCtxt};
1616
use rustc_middle::ty::{GenericArgKind, GenericArgsRef};
1717
use rustc_middle::util::Providers;
1818
use rustc_session::config::{CrateType, OomStrategy};
19-
use rustc_target::spec::SanitizerSet;
19+
use rustc_target::spec::{SanitizerSet, TlsModel};
2020

2121
pub fn threshold(tcx: TyCtxt<'_>) -> SymbolExportLevel {
2222
crates_export_threshold(tcx.crate_types())
@@ -615,7 +615,7 @@ pub fn exporting_symbol_name_for_instance_in_crate<'tcx>(
615615
) -> String {
616616
let undecorated = symbol_name_for_instance_in_crate(tcx, symbol, cnum);
617617

618-
if tcx.sess.target.use_emulated_tls
618+
if matches!(tcx.sess.target.tls_model, TlsModel::EmulatedTls)
619619
&& let ExportedSymbol::NonGeneric(def_id) = symbol
620620
&& tcx.is_thread_local_static(def_id)
621621
{

compiler/rustc_target/src/spec/base/android.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use crate::spec::{base, SanitizerSet, TargetOptions};
1+
use crate::spec::{base, SanitizerSet, TargetOptions, TlsModel};
22

33
pub fn opts() -> TargetOptions {
44
let mut base = base::linux::opts();
55
base.os = "android".into();
66
base.is_like_android = true;
77
base.default_dwarf_version = 2;
8-
base.use_emulated_tls = true;
8+
base.tls_model = TlsModel::EmulatedTls;
99
base.has_thread_local = true;
1010
base.supported_sanitizers = SanitizerSet::ADDRESS;
1111
// This is for backward compatibility, see https://github.com/rust-lang/rust/issues/49867

compiler/rustc_target/src/spec/base/linux_ohos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use crate::spec::{base, TargetOptions};
1+
use crate::spec::{base, TargetOptions, TlsModel};
22

33
pub fn opts() -> TargetOptions {
44
let mut base = base::linux::opts();
55

66
base.env = "ohos".into();
77
base.crt_static_default = false;
8-
base.use_emulated_tls = true;
8+
base.tls_model = TlsModel::EmulatedTls;
99
base.has_thread_local = false;
1010

1111
base

compiler/rustc_target/src/spec/mod.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,7 @@ pub enum TlsModel {
929929
LocalDynamic,
930930
InitialExec,
931931
LocalExec,
932+
EmulatedTls,
932933
}
933934

934935
impl FromStr for TlsModel {
@@ -942,6 +943,7 @@ impl FromStr for TlsModel {
942943
"local-dynamic" => TlsModel::LocalDynamic,
943944
"initial-exec" => TlsModel::InitialExec,
944945
"local-exec" => TlsModel::LocalExec,
946+
"emulated-tls" => TlsModel::EmulatedTls,
945947
_ => return Err(()),
946948
})
947949
}
@@ -954,6 +956,7 @@ impl ToJson for TlsModel {
954956
TlsModel::LocalDynamic => "local-dynamic",
955957
TlsModel::InitialExec => "initial-exec",
956958
TlsModel::LocalExec => "local-exec",
959+
TlsModel::EmulatedTls => "emulated-tls",
957960
}
958961
.to_json()
959962
}
@@ -2194,9 +2197,6 @@ pub struct TargetOptions {
21942197

21952198
/// Whether the target supports XRay instrumentation.
21962199
pub supports_xray: bool,
2197-
2198-
/// Use emulated TLS (__emutls_get_address)
2199-
pub use_emulated_tls: bool,
22002200
}
22012201

22022202
/// Add arguments for the given flavor and also for its "twin" flavors
@@ -2416,7 +2416,6 @@ impl Default for TargetOptions {
24162416
entry_name: "main".into(),
24172417
entry_abi: Conv::C,
24182418
supports_xray: false,
2419-
use_emulated_tls: false,
24202419
}
24212420
}
24222421
}
@@ -3120,7 +3119,6 @@ impl Target {
31203119
key!(entry_name);
31213120
key!(entry_abi, Conv)?;
31223121
key!(supports_xray, bool);
3123-
key!(use_emulated_tls, bool);
31243122

31253123
if base.is_builtin {
31263124
// This can cause unfortunate ICEs later down the line.
@@ -3376,7 +3374,6 @@ impl ToJson for Target {
33763374
target_option_val!(entry_name);
33773375
target_option_val!(entry_abi);
33783376
target_option_val!(supports_xray);
3379-
target_option_val!(use_emulated_tls);
33803377

33813378
if let Some(abi) = self.default_adjusted_cabi {
33823379
d.insert("default-adjusted-cabi".into(), Abi::name(abi).to_json());

0 commit comments

Comments
 (0)