diff options
| author | bors <bors@rust-lang.org> | 2024-11-01 05:25:27 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-11-01 05:25:27 +0000 |
| commit | 9fa9ef385c0aad8f5d4c8f7d92dca474367943a3 (patch) | |
| tree | efc5f6110447cbe584f543a705ff5092c7dc8980 | |
| parent | a8e1186e3c14a54f7a38cc1183117dc7e77f4f82 (diff) | |
| parent | 00da974c5c66113c3649e4076da4d74cada8604b (diff) | |
| download | rust-9fa9ef385c0aad8f5d4c8f7d92dca474367943a3.tar.gz rust-9fa9ef385c0aad8f5d4c8f7d92dca474367943a3.zip | |
Auto merge of #131634 - davidlattimore:lld-protected, r=Kobzol
Use protected visibility when building rustc with LLD https://github.com/rust-lang/compiler-team/issues/782 I wasn't sure about having two commits in a PR, but I figured, at least initially it might make sense to discuss these commits together. Happy to squash, or move the second commit to a separate PR. I contemplated trying to enable protected visibility for more cases when LLD will be used other than just `-Zlinker-features=+lld`, but that would be more a complex change that probably still wouldn't cover all cases when LLD is used, so went with the simplest option of just checking if the linker-feature is enabled. r? lqd
| -rw-r--r-- | src/bootstrap/src/core/build_steps/compile.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index 99ddf58104c..4ab4e60773f 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -1056,6 +1056,14 @@ pub fn rustc_cargo( cargo.rustflag("-l").rustflag("Enzyme-19"); } + // Building with protected visibility reduces the number of dynamic relocations needed, giving + // us a faster startup time. However GNU ld < 2.40 will error if we try to link a shared object + // with direct references to protected symbols, so for now we only use protected symbols if + // linking with LLD is enabled. + if builder.build.config.lld_mode.is_used() { + cargo.rustflag("-Zdefault-visibility=protected"); + } + // We currently don't support cross-crate LTO in stage0. This also isn't hugely necessary // and may just be a time sink. if compiler.stage != 0 { |
