Skip to content

Clang by default creates ELFv1 binaries for powerpc64-unknown-freebsd target #50927

Closed
@pkubaj

Description

@pkubaj
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";
    

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions