Compile tools and internal libraries with the initial-exec TLS model
This should produce more efficient code, with fewer calls to __tls_get_addr. The tradeoff is that libraries using it won't work with dlopen, but that shouldn't be a problem for tools or for our own internal libraries. Co-authored-by: Mark Rousskov <mark.simulacrum@gmail.com>
This commit is contained in:
parent
9d78d1d027
commit
0328e69287
@ -1140,6 +1140,14 @@ impl<'a> Builder<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
// Compile everything except libraries and proc macros with the more
|
||||
// efficient initial-exec TLS model. This doesn't work with `dlopen`,
|
||||
// so we can't use it by default in general, but we can use it for tools
|
||||
// and our own internal libraries.
|
||||
if !mode.must_support_dlopen() {
|
||||
rustflags.arg("-Ztls-model=initial-exec");
|
||||
}
|
||||
|
||||
if self.config.incremental {
|
||||
cargo.env("CARGO_INCREMENTAL", "1");
|
||||
} else {
|
||||
|
@ -332,6 +332,10 @@ impl Mode {
|
||||
pub fn is_tool(&self) -> bool {
|
||||
matches!(self, Mode::ToolBootstrap | Mode::ToolRustc | Mode::ToolStd)
|
||||
}
|
||||
|
||||
pub fn must_support_dlopen(&self) -> bool {
|
||||
matches!(self, Mode::Std | Mode::Codegen)
|
||||
}
|
||||
}
|
||||
|
||||
impl Build {
|
||||
|
Loading…
x
Reference in New Issue
Block a user