Index: lld/ELF/Arch/PPC64.cpp =================================================================== --- lld/ELF/Arch/PPC64.cpp +++ lld/ELF/Arch/PPC64.cpp @@ -107,52 +107,21 @@ } static uint32_t getEFlags(InputFile *File) { - // Get the e_flag from the input file and issue an error if incompatible - // e_flag encountered. - uint32_t EFlags; - switch (Config->EKind) { - case ELF64BEKind: - EFlags = cast>(File)->getObj().getHeader()->e_flags; - break; - case ELF64LEKind: - EFlags = cast>(File)->getObj().getHeader()->e_flags; - break; - default: - llvm_unreachable("unknown Config->EKind"); - } - if (EFlags > 2) { - error("incompatible e_flags: " + toString(File)); - return 0; - } - return EFlags; + if (Config->EKind == ELF64BEKind) + return cast>(File)->getObj().getHeader()->e_flags; + return cast>(File)->getObj().getHeader()->e_flags; } +// This file implements v2 ABI. This function makes sure that all +// object files have v2 or unspecified as an ABI version. uint32_t PPC64::calcEFlags() const { - assert(!ObjectFiles.empty()); - - uint32_t NonZeroFlag; - for (InputFile *F : makeArrayRef(ObjectFiles)) { - NonZeroFlag = getEFlags(F); - if (NonZeroFlag) - break; - } - - // Verify that all input files have either the same e_flags, or zero. for (InputFile *F : makeArrayRef(ObjectFiles)) { uint32_t Flag = getEFlags(F); - if (Flag == 0 || Flag == NonZeroFlag) - continue; - error(toString(F) + ": ABI version " + Twine(Flag) + - " is not compatible with ABI version " + Twine(NonZeroFlag) + - " output"); - return 0; + if (Flag == 1) + error(toString(F) + ": ABI version 1 is not supported"); + else if (Flag > 2) + error(toString(F) + ": unrecognized feature flags: " + Twine(Flag)); } - - if (NonZeroFlag == 1) { - error("PPC64 V1 ABI not supported"); - return 0; - } - return 2; } Index: lld/test/ELF/ppc64-abi-version.s =================================================================== --- /dev/null +++ lld/test/ELF/ppc64-abi-version.s @@ -0,0 +1,11 @@ +# REQUIRES: ppc + +# RUN: echo '.abiversion 1' | llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux - -o %t1.o +# RUN: not ld.lld -o %t.exe %t1.o 2>&1 | FileCheck -check-prefix=ERR1 %s + +# ERR1: ABI version 1 is not supported + +# RUN: echo '.abiversion 3' | llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux - -o %t1.o +# RUN: not ld.lld -o %t.exe %t1.o 2>&1 | FileCheck -check-prefix=ERR2 %s + +# ERR2: unrecognized feature flags: 3