[PATCH] D38658: [cfi-verify] Add an interesting unit test where undef search length changes result.

Mitch Phillips via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 3 12:58:38 PDT 2017


hctim updated this revision to Diff 121531.
hctim added a comment.

Merge in HEAD for submission.


https://reviews.llvm.org/D38658

Files:
  unittests/tools/llvm-cfi-verify/FileAnalysis.cpp


Index: unittests/tools/llvm-cfi-verify/FileAnalysis.cpp
===================================================================
--- unittests/tools/llvm-cfi-verify/FileAnalysis.cpp
+++ unittests/tools/llvm-cfi-verify/FileAnalysis.cpp
@@ -650,7 +650,60 @@
           0x0f, 0x0b,                   // 22: ud2
       },
       0xDEADBEEF);
+  uint64_t PrevSearchLengthForUndef = SearchLengthForUndef;
+  SearchLengthForUndef = 5;
   EXPECT_FALSE(Analysis.isIndirectInstructionCFIProtected(0xDEADBEEF + 9));
+  SearchLengthForUndef = PrevSearchLengthForUndef;
+}
+
+TEST_F(BasicFileAnalysisTest, UndefSearchLengthOneTest) {
+  Analysis.parseSectionContents(
+      {
+          0x77, 0x0d,                   // 0x688118: ja 0x688127 [+12]
+          0x48, 0x89, 0xdf,             // 0x68811a: mov %rbx, %rdi
+          0xff, 0xd0,                   // 0x68811d: callq *%rax
+          0x48, 0x89, 0xdf,             // 0x68811f: mov %rbx, %rdi
+          0xe8, 0x09, 0x00, 0x00, 0x00, // 0x688122: callq 0x688130
+          0x0f, 0x0b,                   // 0x688127: ud2
+      },
+      0x688118);
+  uint64_t PrevSearchLengthForUndef = SearchLengthForUndef;
+  SearchLengthForUndef = 1;
+  EXPECT_TRUE(Analysis.isIndirectInstructionCFIProtected(0x68811d));
+  SearchLengthForUndef = PrevSearchLengthForUndef;
+}
+
+TEST_F(BasicFileAnalysisTest, UndefSearchLengthOneTestFarAway) {
+  Analysis.parseSectionContents(
+      {
+          0x74, 0x73,                         // 0x7759eb: je 0x775a60
+          0xe9, 0x1c, 0x04, 0x00, 0x00, 0x00, // 0x7759ed: jmpq 0x775e0e
+      },
+      0x7759eb);
+
+  Analysis.parseSectionContents(
+      {
+          0x0f, 0x85, 0xb2, 0x03, 0x00, 0x00, // 0x775a56: jne    0x775e0e
+          0x48, 0x83, 0xc3, 0xf4, // 0x775a5c: add    $0xfffffffffffffff4,%rbx
+          0x48, 0x8b, 0x7c, 0x24, 0x10, // 0x775a60: mov    0x10(%rsp),%rdi
+          0x48, 0x89, 0xde,             // 0x775a65: mov    %rbx,%rsi
+          0xff, 0xd1,                   // 0x775a68: callq  *%rcx
+      },
+      0x775a56);
+
+  Analysis.parseSectionContents(
+      {
+          0x0f, 0x0b, // 0x775e0e: ud2
+      },
+      0x775e0e);
+  uint64_t PrevSearchLengthForUndef = SearchLengthForUndef;
+  SearchLengthForUndef = 1;
+  EXPECT_FALSE(Analysis.isIndirectInstructionCFIProtected(0x775a68));
+  SearchLengthForUndef = 2;
+  EXPECT_TRUE(Analysis.isIndirectInstructionCFIProtected(0x775a68));
+  SearchLengthForUndef = 3;
+  EXPECT_TRUE(Analysis.isIndirectInstructionCFIProtected(0x775a68));
+  SearchLengthForUndef = PrevSearchLengthForUndef;
 }
 
 } // anonymous namespace


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38658.121531.patch
Type: text/x-patch
Size: 2589 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171103/ff913645/attachment.bin>


More information about the llvm-commits mailing list