Skip to content

Commit 763bc13

Browse files
committed
Add support for powerpc-unknown-freebsd
1 parent f913a4f commit 763bc13

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

Diff for: compiler/rustc_target/src/spec/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,7 @@ supported_targets! {
802802
("armv6-unknown-freebsd", armv6_unknown_freebsd),
803803
("armv7-unknown-freebsd", armv7_unknown_freebsd),
804804
("i686-unknown-freebsd", i686_unknown_freebsd),
805+
("powerpc-unknown-freebsd", powerpc_unknown_freebsd),
805806
("powerpc64-unknown-freebsd", powerpc64_unknown_freebsd),
806807
("powerpc64le-unknown-freebsd", powerpc64le_unknown_freebsd),
807808
("x86_64-unknown-freebsd", x86_64_unknown_freebsd),
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use crate::abi::Endian;
2+
use crate::spec::{LinkerFlavor, RelocModel, Target, TargetOptions};
3+
4+
pub fn target() -> Target {
5+
let mut base = super::freebsd_base::opts();
6+
base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-m32".to_string());
7+
// Extra hint to linker that we are generating secure-PLT code.
8+
base.pre_link_args
9+
.entry(LinkerFlavor::Gcc)
10+
.or_default()
11+
.push("--target=powerpc-unknown-freebsd13.0".to_string());
12+
base.max_atomic_width = Some(32);
13+
14+
Target {
15+
llvm_target: "powerpc-unknown-freebsd13.0".to_string(),
16+
pointer_width: 32,
17+
data_layout: "E-m:e-p:32:32-i64:64-n32".to_string(),
18+
arch: "powerpc".to_string(),
19+
options: TargetOptions {
20+
endian: Endian::Big,
21+
features: "+secure-plt".to_string(),
22+
relocation_model: RelocModel::Pic,
23+
mcount: "_mcount".to_string(),
24+
..base
25+
},
26+
}
27+
}

Diff for: src/bootstrap/native.rs

+9
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ impl Step for Llvm {
118118
let idx = target.triple.find('-').unwrap();
119119

120120
format!("riscv{}{}", &target.triple[5..7], &target.triple[idx..])
121+
} else if self.target.starts_with("powerpc") && self.target.ends_with("freebsd") {
122+
// FreeBSD 13 had incompatible ABI changes on all PowerPC platforms.
123+
// Set the version suffix to 13.0 so the correct target details are used.
124+
format!("{}{}", self.target, "13.0")
121125
} else {
122126
target.to_string()
123127
};
@@ -277,6 +281,11 @@ impl Step for Llvm {
277281
}
278282
}
279283

284+
// Workaround for ppc32 lld limitation
285+
if target == "powerpc-unknown-freebsd" {
286+
cfg.define("CMAKE_EXE_LINKER_FLAGS", "-fuse-ld=bfd");
287+
}
288+
280289
// https://llvm.org/docs/HowToCrossCompileLLVM.html
281290
if target != builder.config.build {
282291
builder.ensure(Llvm { target: builder.config.build });

Diff for: src/doc/rustc/src/platform-support.md

+1
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ target | std | host | notes
249249
`powerpc-wrs-vxworks` | ? | |
250250
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
251251
`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
252+
`powerpc-unknown-freebsd` | | | PowerPC FreeBSD
252253
`powerpc64-unknown-linux-musl` | ? | |
253254
`powerpc64-wrs-vxworks` | ? | |
254255
`powerpc64le-unknown-linux-musl` | ? | |

0 commit comments

Comments
 (0)