From 2b3b4a11dd75ff43e0f1f12de395d0ce29f8555f Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Sat, 3 Jul 2021 21:02:03 +0200 Subject: [PATCH 15/15] initial ppcle port --- compiler/rustc_middle/src/ty/layout.rs | 5 ++++- compiler/rustc_target/src/spec/mod.rs | 2 ++ .../src/spec/powerpcle_unknown_linux_gnu.rs | 15 +++++++++++++++ .../src/spec/powerpcle_unknown_linux_musl.rs | 15 +++++++++++++++ src/bootstrap/bootstrap.py | 2 ++ .../codegen/abi-main-signature-16bit-c-int.rs | 1 + src/test/codegen/global_asm.rs | 1 + src/test/codegen/global_asm_include.rs | 1 + src/test/codegen/global_asm_x2.rs | 1 + src/test/codegen/repr-transparent-aggregates-1.rs | 1 + src/test/codegen/repr-transparent-aggregates-2.rs | 1 + src/test/codegen/stack-probes.rs | 1 + .../run-make-fulldeps/atomic-lock-free/Makefile | 2 ++ src/test/ui/abi/stack-probes-lto.rs | 1 + src/test/ui/abi/stack-probes.rs | 1 + src/test/ui/target-feature/gate.rs | 1 + src/test/ui/target-feature/invalid-attribute.rs | 1 + src/tools/compiletest/src/util.rs | 1 + vendor/cc/src/lib.rs | 1 + vendor/target-lexicon/src/targets.rs | 7 +++++++ vendor/tikv-jemallocator/benches/roundtrip.rs | 3 ++- vendor/tikv-jemallocator/src/lib.rs | 3 ++- 22 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 compiler/rustc_target/src/spec/powerpcle_unknown_linux_gnu.rs create mode 100644 compiler/rustc_target/src/spec/powerpcle_unknown_linux_musl.rs diff --git a/compiler/rustc_middle/src/ty/layout.rs b/compiler/rustc_middle/src/ty/layout.rs index 3b05e42a5..66420f507 100644 --- a/compiler/rustc_middle/src/ty/layout.rs +++ b/compiler/rustc_middle/src/ty/layout.rs @@ -3205,6 +3205,8 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> { target.os == "linux" && target.arch == "sparc64" && target_env_gnu_like; let linux_powerpc_gnu_like = target.os == "linux" && target.arch == "powerpc" && target_env_gnu_like; + let linux_powerpcle_gnu_like = + target.os == "linux" && target.arch == "powerpcle" && target_env_gnu_like; use SpecAbi::*; let rust_abi = matches!(sig.abi, RustIntrinsic | PlatformIntrinsic | Rust | RustCall); @@ -3311,7 +3313,8 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> { || (!win_x64_gnu && !linux_s390x_gnu_like && !linux_sparc64_gnu_like - && !linux_powerpc_gnu_like) + && !linux_powerpc_gnu_like + && !linux_powerpcle_gnu_like) { arg.mode = PassMode::Ignore; } diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index da0589cdd..2db403913 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -831,6 +831,8 @@ supported_targets! { ("powerpc-unknown-linux-gnu", powerpc_unknown_linux_gnu), ("powerpc-unknown-linux-gnuspe", powerpc_unknown_linux_gnuspe), ("powerpc-unknown-linux-musl", powerpc_unknown_linux_musl), + ("powerpcle-unknown-linux-gnu", powerpcle_unknown_linux_gnu), + ("powerpcle-unknown-linux-musl", powerpcle_unknown_linux_musl), ("powerpc64-unknown-linux-gnu", powerpc64_unknown_linux_gnu), ("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl), ("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu), diff --git a/compiler/rustc_target/src/spec/powerpcle_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/powerpcle_unknown_linux_gnu.rs new file mode 100644 index 000000000..b7148a2fc --- /dev/null +++ b/compiler/rustc_target/src/spec/powerpcle_unknown_linux_gnu.rs @@ -0,0 +1,15 @@ +use crate::spec::{LinkerFlavor, Target, TargetOptions}; + +pub fn target() -> Target { + let mut base = super::linux_gnu_base::opts(); + base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-m32".into()); + base.max_atomic_width = Some(32); + + Target { + llvm_target: "powerpcle-unknown-linux-gnu".into(), + pointer_width: 32, + data_layout: "e-m:e-p:32:32-i64:64-n32".into(), + arch: "powerpc".into(), + options: TargetOptions { mcount: "_mcount".into(), ..base }, + } +} diff --git a/compiler/rustc_target/src/spec/powerpcle_unknown_linux_musl.rs b/compiler/rustc_target/src/spec/powerpcle_unknown_linux_musl.rs new file mode 100644 index 000000000..a826b6e47 --- /dev/null +++ b/compiler/rustc_target/src/spec/powerpcle_unknown_linux_musl.rs @@ -0,0 +1,15 @@ +use crate::spec::{LinkerFlavor, Target, TargetOptions}; + +pub fn target() -> Target { + let mut base = super::linux_musl_base::opts(); + base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-m32".into()); + base.max_atomic_width = Some(32); + + Target { + llvm_target: "powerpcle-unknown-linux-musl".into(), + pointer_width: 32, + data_layout: "e-m:e-p:32:32-i64:64-n32".into(), + arch: "powerpc".into(), + options: TargetOptions { mcount: "_mcount".into(), ..base }, + } +} diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 3501fd901..a28f456d3 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -339,9 +339,11 @@ def default_build_triple(verbose): 'i786': 'i686', 'm68k': 'm68k', 'powerpc': 'powerpc', + 'powerpcle': 'powerpcle', 'powerpc64': 'powerpc64', 'powerpc64le': 'powerpc64le', 'ppc': 'powerpc', + 'ppcle': 'powerpcle', 'ppc64': 'powerpc64', 'ppc64le': 'powerpc64le', 'riscv64': 'riscv64gc', diff --git a/src/test/codegen/abi-main-signature-16bit-c-int.rs b/src/test/codegen/abi-main-signature-16bit-c-int.rs index 4ed491dfb..82ec7755d 100644 --- a/src/test/codegen/abi-main-signature-16bit-c-int.rs +++ b/src/test/codegen/abi-main-signature-16bit-c-int.rs @@ -9,6 +9,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-riscv64 // ignore-s390x diff --git a/src/test/codegen/global_asm.rs b/src/test/codegen/global_asm.rs index fab84868f..104d93d01 100644 --- a/src/test/codegen/global_asm.rs +++ b/src/test/codegen/global_asm.rs @@ -12,6 +12,7 @@ // ignore-powerpc64 // ignore-powerpc64le // ignore-powerpc +// ignore-powerpcle // ignore-r600 // ignore-amdgcn // ignore-sparc diff --git a/src/test/codegen/global_asm_include.rs b/src/test/codegen/global_asm_include.rs index 02ee91645..13f303332 100644 --- a/src/test/codegen/global_asm_include.rs +++ b/src/test/codegen/global_asm_include.rs @@ -12,6 +12,7 @@ // ignore-powerpc64 // ignore-powerpc64le // ignore-powerpc +// ignore-powerpcle // ignore-r600 // ignore-amdgcn // ignore-sparc diff --git a/src/test/codegen/global_asm_x2.rs b/src/test/codegen/global_asm_x2.rs index bdcf0ea84..1e2ff8b8d 100644 --- a/src/test/codegen/global_asm_x2.rs +++ b/src/test/codegen/global_asm_x2.rs @@ -12,6 +12,7 @@ // ignore-powerpc64 // ignore-powerpc64le // ignore-powerpc +// ignore-powerpcle // ignore-r600 // ignore-amdgcn // ignore-sparc diff --git a/src/test/codegen/repr-transparent-aggregates-1.rs b/src/test/codegen/repr-transparent-aggregates-1.rs index 9d18c5f03..8e69d2afd 100644 --- a/src/test/codegen/repr-transparent-aggregates-1.rs +++ b/src/test/codegen/repr-transparent-aggregates-1.rs @@ -6,6 +6,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-riscv64 see codegen/riscv-abi // ignore-windows diff --git a/src/test/codegen/repr-transparent-aggregates-2.rs b/src/test/codegen/repr-transparent-aggregates-2.rs index b68e8e9eb..97c509b1b 100644 --- a/src/test/codegen/repr-transparent-aggregates-2.rs +++ b/src/test/codegen/repr-transparent-aggregates-2.rs @@ -5,6 +5,7 @@ // ignore-emscripten // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-powerpc64le // ignore-riscv64 see codegen/riscv-abi diff --git a/src/test/codegen/stack-probes.rs b/src/test/codegen/stack-probes.rs index 9bd351df3..29073eb56 100644 --- a/src/test/codegen/stack-probes.rs +++ b/src/test/codegen/stack-probes.rs @@ -3,6 +3,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-powerpc64le // ignore-riscv64 diff --git a/src/test/run-make-fulldeps/atomic-lock-free/Makefile b/src/test/run-make-fulldeps/atomic-lock-free/Makefile index 9e8b4fabf..402d37a45 100644 --- a/src/test/run-make-fulldeps/atomic-lock-free/Makefile +++ b/src/test/run-make-fulldeps/atomic-lock-free/Makefile @@ -36,6 +36,8 @@ ifeq ($(filter powerpc,$(LLVM_COMPONENTS)),powerpc) nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add $(RUSTC) --target=powerpc-unknown-linux-gnuspe atomic_lock_free.rs nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=powerpcle-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add $(RUSTC) --target=powerpc64-unknown-linux-gnu atomic_lock_free.rs nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add $(RUSTC) --target=powerpc64le-unknown-linux-gnu atomic_lock_free.rs diff --git a/src/test/ui/abi/stack-probes-lto.rs b/src/test/ui/abi/stack-probes-lto.rs index 90df1f3f5..8c6dda8b8 100644 --- a/src/test/ui/abi/stack-probes-lto.rs +++ b/src/test/ui/abi/stack-probes-lto.rs @@ -4,6 +4,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-s390x // ignore-sparc // ignore-sparc64 diff --git a/src/test/ui/abi/stack-probes.rs b/src/test/ui/abi/stack-probes.rs index e998dd0f8..9472e5387 100644 --- a/src/test/ui/abi/stack-probes.rs +++ b/src/test/ui/abi/stack-probes.rs @@ -4,6 +4,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-s390x // ignore-sparc // ignore-sparc64 diff --git a/src/test/ui/target-feature/gate.rs b/src/test/ui/target-feature/gate.rs index 2382c98f8..e6fe855d7 100644 --- a/src/test/ui/target-feature/gate.rs +++ b/src/test/ui/target-feature/gate.rs @@ -5,6 +5,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-powerpc64le // ignore-riscv64 diff --git a/src/test/ui/target-feature/invalid-attribute.rs b/src/test/ui/target-feature/invalid-attribute.rs index ad1b6e96b..122d59a57 100644 --- a/src/test/ui/target-feature/invalid-attribute.rs +++ b/src/test/ui/target-feature/invalid-attribute.rs @@ -5,6 +5,7 @@ // ignore-mips // ignore-mips64 // ignore-powerpc +// ignore-powerpcle // ignore-powerpc64 // ignore-powerpc64le // ignore-riscv64 diff --git a/src/tools/compiletest/src/util.rs b/src/tools/compiletest/src/util.rs index 215af347f..a1c7e4c6a 100644 --- a/src/tools/compiletest/src/util.rs +++ b/src/tools/compiletest/src/util.rs @@ -71,6 +71,7 @@ const ARCH_TABLE: &[(&str, &str)] = &[ ("msp430", "msp430"), ("nvptx64", "nvptx64"), ("powerpc", "powerpc"), + ("powerpcle", "powerpc"), ("powerpc64", "powerpc64"), ("powerpc64le", "powerpc64"), ("riscv64gc", "riscv64"), diff --git a/vendor/cc/src/lib.rs b/vendor/cc/src/lib.rs index e3a2b98b0..0236729fd 100644 --- a/vendor/cc/src/lib.rs +++ b/vendor/cc/src/lib.rs @@ -2594,6 +2594,7 @@ impl Build { "powerpc-unknown-linux-gnu" => Some("powerpc-linux-gnu"), "powerpc-unknown-linux-gnuspe" => Some("powerpc-linux-gnuspe"), "powerpc-unknown-netbsd" => Some("powerpc--netbsd"), + "powerpcle-unknown-linux-gnu" => Some("powerpcle-linux-gnu"), "powerpc64-unknown-linux-gnu" => Some("powerpc-linux-gnu"), "powerpc64le-unknown-linux-gnu" => Some("powerpc64le-linux-gnu"), "riscv32i-unknown-none-elf" => self.find_working_gnu_prefix(&[ diff --git a/vendor/target-lexicon/src/targets.rs b/vendor/target-lexicon/src/targets.rs index 22cc95cc3..46167e34e 100644 --- a/vendor/target-lexicon/src/targets.rs +++ b/vendor/target-lexicon/src/targets.rs @@ -29,6 +29,7 @@ pub enum Architecture { Msp430, Nvptx64, Powerpc, + Powerpcle, Powerpc64, Powerpc64le, Riscv32(Riscv32Architecture), @@ -533,6 +534,7 @@ impl Architecture { | Mips64(Mips64Architecture::Mipsisa64r6el) | Msp430 | Nvptx64 + | Powerpcle | Powerpc64le | Riscv32(_) | Riscv64(_) @@ -574,6 +576,7 @@ impl Architecture { | M68k | Mips32(_) | Powerpc + | Powerpcle | XTensa => Ok(PointerWidth::U32), AmdGcn | Bpfeb @@ -763,6 +766,7 @@ impl fmt::Display for Architecture { Msp430 => f.write_str("msp430"), Nvptx64 => f.write_str("nvptx64"), Powerpc => f.write_str("powerpc"), + Powerpcle => f.write_str("powerpcle"), Powerpc64 => f.write_str("powerpc64"), Powerpc64le => f.write_str("powerpc64le"), Riscv32(riscv32) => riscv32.fmt(f), @@ -943,6 +947,7 @@ impl FromStr for Architecture { "msp430" => Msp430, "nvptx64" => Nvptx64, "powerpc" => Powerpc, + "powerpcle" => Powerpcle, "powerpc64" => Powerpc64, "powerpc64le" => Powerpc64le, "s390x" => S390x, @@ -1445,6 +1450,8 @@ mod tests { "powerpc-unknown-openbsd", "powerpc-wrs-vxworks", "powerpc-wrs-vxworks-spe", + "powerpcle-unknown-linux-gnu", + "powerpcle-unknown-linux-musl", "powerpc64-unknown-freebsd", "powerpc64-unknown-linux-gnu", "powerpc64-unknown-linux-musl", diff --git a/vendor/tikv-jemallocator/benches/roundtrip.rs b/vendor/tikv-jemallocator/benches/roundtrip.rs index 767abe8d4..704bf955a 100644 --- a/vendor/tikv-jemallocator/benches/roundtrip.rs +++ b/vendor/tikv-jemallocator/benches/roundtrip.rs @@ -22,7 +22,8 @@ static A: Jemalloc = Jemalloc; target_arch = "arm", target_arch = "mips", target_arch = "mipsel", - target_arch = "powerpc" + target_arch = "powerpc", + target_arch = "powerpcle", )))] const MIN_ALIGN: usize = 8; #[cfg(all(any( diff --git a/vendor/tikv-jemallocator/src/lib.rs b/vendor/tikv-jemallocator/src/lib.rs index 4a9397331..4cf47c05d 100644 --- a/vendor/tikv-jemallocator/src/lib.rs +++ b/vendor/tikv-jemallocator/src/lib.rs @@ -46,7 +46,8 @@ use libc::{c_int, c_void}; target_arch = "arm", target_arch = "mips", target_arch = "mipsel", - target_arch = "powerpc" + target_arch = "powerpc", + target_arch = "powerpcle", )))] const ALIGNOF_MAX_ALIGN_T: usize = 8; #[cfg(all(any( -- 2.37.2