[llvm] r316375 - Made llvm-cfi-verify not execute unit tests on non-x86 builds.

Mitch Phillips via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 23 13:54:01 PDT 2017


Author: hctim
Date: Mon Oct 23 13:54:01 2017
New Revision: 316375

URL: http://llvm.org/viewvc/llvm-project?rev=316375&view=rev
Log:
Made llvm-cfi-verify not execute unit tests on non-x86 builds.

Patched out from D38427.

Reviewers: vlad.tsyrklevich

Reviewed By: vlad.tsyrklevich

Subscribers: llvm-commits, kcc, pcc, mgorny

Differential Revision: https://reviews.llvm.org/D39197

Modified:
    llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp
    llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.h
    llvm/trunk/unittests/tools/llvm-cfi-verify/CMakeLists.txt
    llvm/trunk/unittests/tools/llvm-cfi-verify/FileAnalysis.cpp
    llvm/trunk/unittests/tools/llvm-cfi-verify/GraphBuilder.cpp

Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=316375&r1=316374&r2=316375&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp (original)
+++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp Mon Oct 23 13:54:01 2017
@@ -54,7 +54,7 @@ Expected<FileAnalysis> FileAnalysis::Cre
 
   Analysis.Object = dyn_cast<object::ObjectFile>(Analysis.Binary.getBinary());
   if (!Analysis.Object)
-    return make_error<UnsupportedDisassembly>();
+    return make_error<UnsupportedDisassembly>("Failed to cast object");
 
   Analysis.ObjectTriple = Analysis.Object->makeTriple();
   Analysis.Features = Analysis.Object->getFeatures();
@@ -224,31 +224,28 @@ Error FileAnalysis::initialiseDisassembl
   ObjectTarget =
       TargetRegistry::lookupTarget(ArchName, ObjectTriple, ErrorString);
   if (!ObjectTarget)
-    return make_error<StringError>(Twine("Couldn't find target \"") +
-                                       ObjectTriple.getTriple() +
-                                       "\", failed with error: " + ErrorString,
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>(
+        (Twine("Couldn't find target \"") + ObjectTriple.getTriple() +
+        "\", failed with error: " + ErrorString).str());
 
   RegisterInfo.reset(ObjectTarget->createMCRegInfo(TripleName));
   if (!RegisterInfo)
-    return make_error<StringError>("Failed to initialise RegisterInfo.",
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>(
+        "Failed to initialise RegisterInfo.");
 
   AsmInfo.reset(ObjectTarget->createMCAsmInfo(*RegisterInfo, TripleName));
   if (!AsmInfo)
-    return make_error<StringError>("Failed to initialise AsmInfo.",
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>("Failed to initialise AsmInfo.");
 
   SubtargetInfo.reset(ObjectTarget->createMCSubtargetInfo(
       TripleName, MCPU, Features.getString()));
   if (!SubtargetInfo)
-    return make_error<StringError>("Failed to initialise SubtargetInfo.",
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>(
+        "Failed to initialise SubtargetInfo.");
 
   MII.reset(ObjectTarget->createMCInstrInfo());
   if (!MII)
-    return make_error<StringError>("Failed to initialise MII.",
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>("Failed to initialise MII.");
 
   Context.reset(new MCContext(AsmInfo.get(), RegisterInfo.get(), &MOFI));
 
@@ -256,8 +253,8 @@ Error FileAnalysis::initialiseDisassembl
       ObjectTarget->createMCDisassembler(*SubtargetInfo, *Context));
 
   if (!Disassembler)
-    return make_error<StringError>("No disassembler available for target",
-                                   inconvertibleErrorCode());
+    return make_error<UnsupportedDisassembly>(
+        "No disassembler available for target");
 
   MIA.reset(ObjectTarget->createMCInstrAnalysis(MII.get()));
 
@@ -341,9 +338,11 @@ void FileAnalysis::addInstruction(const
   }
 }
 
+UnsupportedDisassembly::UnsupportedDisassembly(StringRef Text) : Text(Text) {}
+
 char UnsupportedDisassembly::ID;
 void UnsupportedDisassembly::log(raw_ostream &OS) const {
-  OS << "Dissassembling of non-objects not currently supported.\n";
+  OS << "Could not initialise disassembler: " << Text;
 }
 
 std::error_code UnsupportedDisassembly::convertToErrorCode() const {

Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.h?rev=316375&r1=316374&r2=316375&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.h (original)
+++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.h Mon Oct 23 13:54:01 2017
@@ -171,6 +171,9 @@ private:
 class UnsupportedDisassembly : public ErrorInfo<UnsupportedDisassembly> {
 public:
   static char ID;
+  std::string Text;
+
+  UnsupportedDisassembly(StringRef Text);
 
   void log(raw_ostream &OS) const override;
   std::error_code convertToErrorCode() const override;

Modified: llvm/trunk/unittests/tools/llvm-cfi-verify/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-cfi-verify/CMakeLists.txt?rev=316375&r1=316374&r2=316375&view=diff
==============================================================================
--- llvm/trunk/unittests/tools/llvm-cfi-verify/CMakeLists.txt (original)
+++ llvm/trunk/unittests/tools/llvm-cfi-verify/CMakeLists.txt Mon Oct 23 13:54:01 2017
@@ -11,9 +11,6 @@ set(LLVM_LINK_COMPONENTS
   Support
   )
 
-list(FIND LLVM_TARGETS_TO_BUILD "X86" x86_idx)
-if (NOT x86_idx LESS 0)
-  add_llvm_unittest(CFIVerifyTests
-    FileAnalysis.cpp
-    GraphBuilder.cpp)
-endif()
+add_llvm_unittest(CFIVerifyTests
+  FileAnalysis.cpp
+  GraphBuilder.cpp)

Modified: llvm/trunk/unittests/tools/llvm-cfi-verify/FileAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-cfi-verify/FileAnalysis.cpp?rev=316375&r1=316374&r2=316375&view=diff
==============================================================================
--- llvm/trunk/unittests/tools/llvm-cfi-verify/FileAnalysis.cpp (original)
+++ llvm/trunk/unittests/tools/llvm-cfi-verify/FileAnalysis.cpp Mon Oct 23 13:54:01 2017
@@ -63,15 +63,24 @@ public:
 class BasicFileAnalysisTest : public ::testing::Test {
 protected:
   virtual void SetUp() {
-    if (Analysis.initialiseDisassemblyMembers()) {
-      FAIL() << "Failed to initialise FileAnalysis.";
+    SuccessfullyInitialised = true;
+    if (auto Err = Analysis.initialiseDisassemblyMembers()) {
+      handleAllErrors(std::move(Err), [&](const UnsupportedDisassembly &E) {
+        SuccessfullyInitialised = false;
+        outs()
+            << "Note: CFIVerifyTests are disabled due to lack of x86 support "
+               "on this build.\n";
+      });
     }
   }
 
+  bool SuccessfullyInitialised;
   ELFx86TestFileAnalysis Analysis;
 };
 
 TEST_F(BasicFileAnalysisTest, BasicDisassemblyTraversalTest) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,                   // 0: nop
@@ -180,6 +189,8 @@ TEST_F(BasicFileAnalysisTest, BasicDisas
 }
 
 TEST_F(BasicFileAnalysisTest, PrevAndNextFromBadInst) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90, // 0: nop
@@ -201,6 +212,8 @@ TEST_F(BasicFileAnalysisTest, PrevAndNex
 }
 
 TEST_F(BasicFileAnalysisTest, CFITrapTest) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,                   // 0: nop
@@ -234,6 +247,8 @@ TEST_F(BasicFileAnalysisTest, CFITrapTes
 }
 
 TEST_F(BasicFileAnalysisTest, FallThroughTest) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,                         // 0: nop
@@ -272,6 +287,8 @@ TEST_F(BasicFileAnalysisTest, FallThroug
 }
 
 TEST_F(BasicFileAnalysisTest, DefiniteNextInstructionTest) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,                         // 0: nop
@@ -360,6 +377,8 @@ TEST_F(BasicFileAnalysisTest, DefiniteNe
 }
 
 TEST_F(BasicFileAnalysisTest, ControlFlowXRefsTest) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,                         // 0: nop

Modified: llvm/trunk/unittests/tools/llvm-cfi-verify/GraphBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-cfi-verify/GraphBuilder.cpp?rev=316375&r1=316374&r2=316375&view=diff
==============================================================================
--- llvm/trunk/unittests/tools/llvm-cfi-verify/GraphBuilder.cpp (original)
+++ llvm/trunk/unittests/tools/llvm-cfi-verify/GraphBuilder.cpp Mon Oct 23 13:54:01 2017
@@ -126,11 +126,18 @@ public:
 class BasicGraphBuilderTest : public ::testing::Test {
 protected:
   virtual void SetUp() {
-    if (Analysis.initialiseDisassemblyMembers()) {
-      FAIL() << "Failed to initialise FileAnalysis.";
+    SuccessfullyInitialised = true;
+    if (auto Err = Analysis.initialiseDisassemblyMembers()) {
+      handleAllErrors(std::move(Err), [&](const UnsupportedDisassembly &E) {
+        SuccessfullyInitialised = false;
+        outs()
+            << "Note: CFIVerifyTests are disabled due to lack of x86 support "
+               "on this build.\n";
+      });
     }
   }
 
+  bool SuccessfullyInitialised;
   ELFx86TestFileAnalysis Analysis;
 };
 
@@ -141,6 +148,8 @@ MATCHER_P2(HasPath, Result, Matcher, "ha
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphTestSinglePathFallthroughUd2) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x02, // 0: jne 4 [+2]
@@ -165,6 +174,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphTestSinglePathJumpUd2) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x02, // 0: jne 4 [+2]
@@ -189,6 +200,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphTestDualPathDualUd2) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x03, // 0: jne 5 [+3]
@@ -226,6 +239,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphTestDualPathSingleUd2) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x05, // 0: jne 7 [+5]
@@ -262,6 +277,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphFailures) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x90,       // 0: nop
@@ -282,6 +299,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphNoXrefs) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0xeb, 0xfe, // 0: jmp 0 [-2]
@@ -295,6 +314,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphConditionalInfiniteLoop) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0xfe, // 0: jne 0 [-2]
@@ -315,6 +336,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphUnconditionalInfiniteLoop) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x02, // 0: jne 4 [+2]
@@ -337,6 +360,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphNoFlowsToIndirection) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x00, // 0: jne 2 [+0]
@@ -350,6 +375,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphLengthExceededUpwards) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x06, // 0: jne 8 [+6]
@@ -377,6 +404,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphLengthExceededDownwards) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x02, // 0: jne 4 [+2]
@@ -411,6 +440,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 // paths correctly. We don't need to recalculate the flow from 0x2 -> 0x3 as it
 // should only need to be generated once.
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphWithRepeatedWork) {
+  if (!SuccessfullyInitialised)
+    return;
   Analysis.parseSectionContents(
       {
           0x75, 0x05, // 0: jne 7 [+5]
@@ -449,6 +480,8 @@ TEST_F(BasicGraphBuilderTest, BuildFlowG
 }
 
 TEST_F(BasicGraphBuilderTest, BuildFlowGraphComplexExample) {
+  if (!SuccessfullyInitialised)
+    return;
   // The following code has this graph:
   //  +----------+      +--------------+
   //  |    20    | <--- |      0       |




More information about the llvm-commits mailing list