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;