diff options
| author | Samuel Holland <samuel@sholland.org> | 2018-08-08 22:06:18 -0500 |
|---|---|---|
| committer | Samuel Holland <samuel@sholland.org> | 2018-11-15 13:43:01 +0000 |
| commit | 2bb5029d748ceee2f0501fbba786944a3ead6019 (patch) | |
| tree | e86887197c2507e89b21f0d791e286a1a6522dbf /src | |
| parent | 346e97600bafd916c41c24d01ef8671511d691c2 (diff) | |
| download | rust-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.rs | 15 |
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() { |
