Skip to content

Commit ace8aab

Browse files
authored
Fix build on recent FreeBSD/powerpc64le (#5255)
FreeBSD on powerpc64le has recently switched to IEEE 128b long double. Use proper mangling for that. Since we don't support IBM long double - we switched from 64-bit long double - don't use glibc's double ABI mechanism.
1 parent 9d85b9e commit ace8aab

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

gen/target.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,8 @@ const char *TargetCPP::typeMangle(Type *t) {
315315
if (triple.getArch() == llvm::Triple::ppc64 ||
316316
triple.getArch() == llvm::Triple::ppc64le) {
317317
if (target.RealProperties.mant_dig == 113 &&
318-
triple.getEnvironment() == llvm::Triple::GNU) {
318+
(triple.getEnvironment() == llvm::Triple::GNU ||
319+
triple.isOSFreeBSD())) {
319320
return "u9__ieee128";
320321
}
321322
if (target.RealProperties.mant_dig == 106) {

runtime/druntime/src/core/stdc/config.d

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,11 @@ package(core) template muslRedirTime64Mangle(string name, string redirectedName)
658658
}
659659

660660
version (PPC64)
661-
enum PPCUseIEEE128 = real.mant_dig == 113;
661+
{
662+
version (CRuntime_Glibc)
663+
enum PPCUseIEEE128 = real.mant_dig == 113;
664+
else
665+
enum PPCUseIEEE128 = false; // no dual-ABI mangling for e.g. FreeBSD
666+
}
662667
else
663668
enum PPCUseIEEE128 = false;

0 commit comments

Comments
 (0)