diff options
| author | bors <bors@rust-lang.org> | 2024-02-07 19:40:25 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-02-07 19:40:25 +0000 |
| commit | 8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6 (patch) | |
| tree | 166df9c239ad5725751614bbb9773b53f23ab01d /compiler/rustc_codegen_llvm/src | |
| parent | cfb42e5d7f6d5fc39f532ec251e1cea4bbafc746 (diff) | |
| parent | b715d9303e77dfae291c7d651c8e65f8eec94b93 (diff) | |
| download | rust-8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6.tar.gz rust-8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6.zip | |
Auto merge of #120748 - Nadrieril:rollup-dj0qwv5, r=Nadrieril
Rollup of 13 pull requests Successful merges: - #110482 (Add armv8r-none-eabihf target for the Cortex-R52.) - #119162 (Add unstable `-Z direct-access-external-data` cmdline flag for `rustc`) - #120302 (various const interning cleanups) - #120455 ( Add FileCheck annotations to MIR-opt SROA tests) - #120470 (Mark "unused binding" suggestion as maybe incorrect) - #120479 (Suggest turning `if let` into irrefutable `let` if appropriate) - #120564 (coverage: Split out counter increment sites from BCB node/edge counters) - #120633 (pattern_analysis: gather up place-relevant info) - #120664 (Add parallel rustc ui tests) - #120726 (Don't use bashism in checktools.sh) - #120733 (MirPass: make name more const) - #120735 (Remove some `unchecked_claim_error_was_emitted` calls) - #120746 (Record coroutine kind in coroutine generics) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/mono_item.rs | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/compiler/rustc_codegen_llvm/src/mono_item.rs b/compiler/rustc_codegen_llvm/src/mono_item.rs index f796ce0990f..f7630719368 100644 --- a/compiler/rustc_codegen_llvm/src/mono_item.rs +++ b/compiler/rustc_codegen_llvm/src/mono_item.rs @@ -123,6 +123,17 @@ impl CodegenCx<'_, '_> { return false; } + // Match clang by only supporting COFF and ELF for now. + if self.tcx.sess.target.is_like_osx { + return false; + } + + // With pie relocation model calls of functions defined in the translation + // unit can use copy relocations. + if self.tcx.sess.relocation_model() == RelocModel::Pie && !is_declaration { + return true; + } + // Thread-local variables generally don't support copy relocations. let is_thread_local_var = llvm::LLVMIsAGlobalVariable(llval) .is_some_and(|v| llvm::LLVMIsThreadLocal(v) == llvm::True); @@ -130,18 +141,12 @@ impl CodegenCx<'_, '_> { return false; } - // Match clang by only supporting COFF and ELF for now. - if self.tcx.sess.target.is_like_osx { - return false; + // Respect the direct-access-external-data to override default behavior if present. + if let Some(direct) = self.tcx.sess.direct_access_external_data() { + return direct; } // Static relocation model should force copy relocations everywhere. - if self.tcx.sess.relocation_model() == RelocModel::Static { - return true; - } - - // With pie relocation model calls of functions defined in the translation - // unit can use copy relocations. - self.tcx.sess.relocation_model() == RelocModel::Pie && !is_declaration + self.tcx.sess.relocation_model() == RelocModel::Static } } |
