Skip to content

Commit

Permalink
Add EmulatedTls to TlsModel
Browse files Browse the repository at this point in the history
  • Loading branch information
quininer committed Nov 29, 2023
1 parent 09a1b70 commit 5079b3b
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 14 deletions.
1 change: 1 addition & 0 deletions compiler/rustc_codegen_gcc/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::EmulatedTls => gccjit::TlsModel::GlobalDynamic,
}
}
4 changes: 2 additions & 2 deletions compiler/rustc_codegen_llvm/src/back/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use rustc_session::config::{self, Lto, OutputType, Passes, SplitDwarfKind, Switc
use rustc_session::Session;
use rustc_span::symbol::sym;
use rustc_span::InnerSpan;
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo};
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo, TlsModel};

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

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

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

// copy the exe path, followed by path all into one buffer
// null terminating them so we can use them as null terminated strings
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_llvm/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ fn to_llvm_tls_model(tls_model: TlsModel) -> llvm::ThreadLocalMode {
TlsModel::LocalDynamic => llvm::ThreadLocalMode::LocalDynamic,
TlsModel::InitialExec => llvm::ThreadLocalMode::InitialExec,
TlsModel::LocalExec => llvm::ThreadLocalMode::LocalExec,
TlsModel::EmulatedTls => llvm::ThreadLocalMode::GeneralDynamic,
}
}

Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_codegen_ssa/src/back/symbol_export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use rustc_middle::ty::{self, SymbolName, TyCtxt};
use rustc_middle::ty::{GenericArgKind, GenericArgsRef};
use rustc_middle::util::Providers;
use rustc_session::config::{CrateType, OomStrategy};
use rustc_target::spec::SanitizerSet;
use rustc_target::spec::{SanitizerSet, TlsModel};

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

if tcx.sess.target.use_emulated_tls
if matches!(tcx.sess.target.tls_model, TlsModel::EmulatedTls)
&& let ExportedSymbol::NonGeneric(def_id) = symbol
&& tcx.is_thread_local_static(def_id)
{
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_target/src/spec/base/android.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::spec::{base, SanitizerSet, TargetOptions};
use crate::spec::{base, SanitizerSet, TargetOptions, TlsModel};

pub fn opts() -> TargetOptions {
let mut base = base::linux::opts();
base.os = "android".into();
base.is_like_android = true;
base.default_dwarf_version = 2;
base.use_emulated_tls = true;
base.tls_model = TlsModel::EmulatedTls;
base.has_thread_local = true;
base.supported_sanitizers = SanitizerSet::ADDRESS;
// This is for backward compatibility, see https://github.com/rust-lang/rust/issues/49867
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_target/src/spec/base/linux_ohos.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::spec::{base, TargetOptions};
use crate::spec::{base, TargetOptions, TlsModel};

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

base.env = "ohos".into();
base.crt_static_default = false;
base.use_emulated_tls = true;
base.tls_model = TlsModel::EmulatedTls;
base.has_thread_local = false;

base
Expand Down
9 changes: 3 additions & 6 deletions compiler/rustc_target/src/spec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,7 @@ pub enum TlsModel {
LocalDynamic,
InitialExec,
LocalExec,
EmulatedTls,
}

impl FromStr for TlsModel {
Expand All @@ -942,6 +943,7 @@ impl FromStr for TlsModel {
"local-dynamic" => TlsModel::LocalDynamic,
"initial-exec" => TlsModel::InitialExec,
"local-exec" => TlsModel::LocalExec,
"emulated-tls" => TlsModel::EmulatedTls,
_ => return Err(()),
})
}
Expand All @@ -954,6 +956,7 @@ impl ToJson for TlsModel {
TlsModel::LocalDynamic => "local-dynamic",
TlsModel::InitialExec => "initial-exec",
TlsModel::LocalExec => "local-exec",
TlsModel::EmulatedTls => "emulated-tls",
}
.to_json()
}
Expand Down Expand Up @@ -2194,9 +2197,6 @@ pub struct TargetOptions {

/// Whether the target supports XRay instrumentation.
pub supports_xray: bool,

/// Use emulated TLS (__emutls_get_address)
pub use_emulated_tls: bool,
}

/// Add arguments for the given flavor and also for its "twin" flavors
Expand Down Expand Up @@ -2416,7 +2416,6 @@ impl Default for TargetOptions {
entry_name: "main".into(),
entry_abi: Conv::C,
supports_xray: false,
use_emulated_tls: false,
}
}
}
Expand Down Expand Up @@ -3120,7 +3119,6 @@ impl Target {
key!(entry_name);
key!(entry_abi, Conv)?;
key!(supports_xray, bool);
key!(use_emulated_tls, bool);

if base.is_builtin {
// This can cause unfortunate ICEs later down the line.
Expand Down Expand Up @@ -3376,7 +3374,6 @@ impl ToJson for Target {
target_option_val!(entry_name);
target_option_val!(entry_abi);
target_option_val!(supports_xray);
target_option_val!(use_emulated_tls);

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

0 comments on commit 5079b3b

Please sign in to comment.