about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2018-08-08 22:06:18 -0500
committerSamuel Holland <samuel@sholland.org>2018-11-15 13:43:01 +0000
commit2bb5029d748ceee2f0501fbba786944a3ead6019 (patch)
treee86887197c2507e89b21f0d791e286a1a6522dbf /src
parent346e97600bafd916c41c24d01ef8671511d691c2 (diff)
downloadrust-2bb5029d748ceee2f0501fbba786944a3ead6019.tar.gz
rust-2bb5029d748ceee2f0501fbba786944a3ead6019.zip
Use the ELFv2 ABI on powerpc64 musl
Diffstat (limited to 'src')
-rw-r--r--src/librustc_target/abi/call/powerpc64.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/librustc_target/abi/call/powerpc64.rs b/src/librustc_target/abi/call/powerpc64.rs
index 56d09c07292..f7ef1390f14 100644
--- a/src/librustc_target/abi/call/powerpc64.rs
+++ b/src/librustc_target/abi/call/powerpc64.rs
@@ -14,11 +14,12 @@
 
 use abi::call::{FnType, ArgType, Reg, RegKind, Uniform};
 use abi::{Align, Endian, HasDataLayout, LayoutOf, TyLayout, TyLayoutMethods};
+use spec::HasTargetSpec;
 
 #[derive(Debug, Clone, Copy, PartialEq)]
 enum ABI {
     ELFv1, // original ABI used for powerpc64 (big-endian)
-    ELFv2, // newer ABI used for powerpc64le
+    ELFv2, // newer ABI used for powerpc64le and musl (both endians)
 }
 use self::ABI::*;
 
@@ -131,11 +132,15 @@ fn classify_arg_ty<'a, Ty, C>(cx: &C, arg: &mut ArgType<'a, Ty>, abi: ABI)
 
 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
+          C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout + HasTargetSpec
 {
-    let abi = match cx.data_layout().endian {
-        Endian::Big => ELFv1,
-        Endian::Little => ELFv2,
+    let abi = if cx.target_spec().target_env == "musl" {
+        ELFv2
+    } else {
+        match cx.data_layout().endian {
+            Endian::Big => ELFv1,
+            Endian::Little => ELFv2
+        }
     };
 
     if !fty.ret.is_ignore() {