From bf03fc384e14e557fd91eb77b4fbbb365d420d5b Mon Sep 17 00:00:00 2001 From: Piotr Kubaj Date: Wed, 1 Jul 2026 08:27:35 +0000 Subject: [PATCH] powerpc64le_unknown_freebsd.rs: link with -lgcc Starting with FreeBSD 16.0, powerpc64le switches to IEEE long double. 128 bit arithmetics are implemented in LLVM's compiler_rt, which is FreeBSD's libgcc. Link with it so that building on FreeBSD 16.0 succeeds - noop for earlier releases. --- .../src/spec/targets/powerpc64le_unknown_freebsd.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_freebsd.rs b/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_freebsd.rs index 35c477d2bdaf8..1e6b9a7bdc267 100644 --- a/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_freebsd.rs +++ b/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_freebsd.rs @@ -1,12 +1,15 @@ use crate::spec::{ Arch, Cc, CfgAbi, LinkerFlavor, Lld, LlvmAbi, StackProbeType, Target, TargetMetadata, - TargetOptions, base, + TargetOptions, add_link_args, base, }; pub(crate) fn target() -> Target { let mut base = base::freebsd::opts(); base.cpu = "ppc64le".into(); base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); + // long double is IEEE-128; f128 soft-float ops emit the PPC __*kf* helpers, + // which compiler_builtins lacks. Resolve them from base libgcc. + add_link_args(&mut base.late_link_args, LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-lgcc"]); base.max_atomic_width = Some(64); base.stack_probes = StackProbeType::Inline; base.cfg_abi = CfgAbi::ElfV2;