Closed
Description
Bugzilla Link | 51585 |
Version | unspecified |
OS | FreeBSD |
CC | @zygoloid |
Extended Description
When passed --target=powerpc64-unknown-freebsd, clang creates ELFv1 binaries, even on a ELFv2 system. ELFv2 binaries are created only when the version is appended, like --target=powerpc64-unknown-freebsd13.0.
Since ELFv1 is generally considered legacy on FreeBSD and on life support, it's fine to just default to ELFv2. Clang never worked properly on FreeBSD on ELFv1 anyway.
The following patch fixes this issue.
--- clang/lib/Driver/ToolChains/Clang.cpp.orig 2021-08-11 19:51:00.122735000 +0200
+++ clang/lib/Driver/ToolChains/Clang.cpp 2021-08-11 19:51:24.346107000 +0200
@@ -1921,8 +1921,7 @@
if (T.isOSBinFormatELF()) {
switch (getToolChain().getArch()) {
case llvm::Triple::ppc64: {
-
if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
-
T.isOSOpenBSD() || T.isMusl())
-
if (T.isOSFreeBSD() || T.isOSOpenBSD() || T.isMusl()) ABIName = "elfv2"; else ABIName = "elfv1";