b2652078b5
This involves a few things. One is updating the internal-llvm patch to match what we have elsewhere, the other is updating librustc_target code to emit ELFv2 on glibc in our case. This is not handled perfectly (see comment) but it's best we can do for now. Also bump, so that it gets rebuilt and cross-compiling works. [ci skip] Closes: #11394 [via git-merge-pr]
35 lines
1.7 KiB
Diff
35 lines
1.7 KiB
Diff
This patches librustc_target so that ELFv2 is used everywhere, matching our
|
|
LLVM. While this is not perfect (it does not allow rustc to compile legacy
|
|
binaries), rustc never requests specific ABI from llvm in the first place,
|
|
so at least match the environment we have.
|
|
|
|
--- a/src/librustc_target/abi/call/powerpc64.rs
|
|
+++ b/src/librustc_target/abi/call/powerpc64.rs
|
|
@@ -124,7 +124,7 @@ pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>)
|
|
where Ty: TyLayoutMethods<'a, C> + Copy,
|
|
C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout + HasTargetSpec
|
|
{
|
|
- let abi = if cx.target_spec().target_env == "musl" {
|
|
+ let abi = if cx.target_spec().target_env == "musl" || cx.target_spec().target_env == "gnu" {
|
|
ELFv2
|
|
} else {
|
|
match cx.data_layout().endian {
|
|
--- a/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
|
|
+++ b/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
|
|
@@ -1,4 +1,4 @@
|
|
-use crate::spec::{LinkerFlavor, Target, TargetResult, RelroLevel};
|
|
+use crate::spec::{LinkerFlavor, Target, TargetResult};
|
|
|
|
pub fn target() -> TargetResult {
|
|
let mut base = super::linux_base::opts();
|
|
@@ -6,10 +6,6 @@ pub fn target() -> TargetResult {
|
|
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
|
|
base.max_atomic_width = Some(64);
|
|
|
|
- // ld.so in at least RHEL6 on ppc64 has a bug related to BIND_NOW, so only enable partial RELRO
|
|
- // for now. https://github.com/rust-lang/rust/pull/43170#issuecomment-315411474
|
|
- base.relro_level = RelroLevel::Partial;
|
|
-
|
|
Ok(Target {
|
|
llvm_target: "powerpc64-unknown-linux-gnu".to_string(),
|
|
target_endian: "big".to_string(),
|