[PATCH] D48112: Simplify PPC64::calcEFlags().
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 13 17:22:02 PDT 2018
ruiu updated this revision to Diff 151274.
ruiu added a comment.
- separated error message for v1 and unknown eflags
- added a test
https://reviews.llvm.org/D48112
Files:
lld/ELF/Arch/PPC64.cpp
lld/test/ELF/ppc64-abi-version.s
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
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<ObjFile<ELF64BE>>(File)->getObj().getHeader()->e_flags;
- break;
- case ELF64LEKind:
- EFlags = cast<ObjFile<ELF64LE>>(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<ObjFile<ELF64BE>>(File)->getObj().getHeader()->e_flags;
+ return cast<ObjFile<ELF64LE>>(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;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48112.151274.patch
Type: text/x-patch
Size: 2622 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180614/a9666819/attachment.bin>
More information about the llvm-commits
mailing list