[llvm] 0fea00d - [JITLink][AArch32] Split invalid edge kind test out into readAddendDataErrors

Stefan Gränitz via llvm-commits llvm-commits at lists.llvm.org
Sat Nov 25 05:09:03 PST 2023


Author: Stefan Gränitz
Date: 2023-11-25T14:08:17+01:00
New Revision: 0fea00d48bcd2368f21ecbca80833093f3a96e64

URL: https://github.com/llvm/llvm-project/commit/0fea00d48bcd2368f21ecbca80833093f3a96e64
DIFF: https://github.com/llvm/llvm-project/commit/0fea00d48bcd2368f21ecbca80833093f3a96e64.diff

LOG: [JITLink][AArch32] Split invalid edge kind test out into readAddendDataErrors

This test actually exercises the readAddendData() function.

Added: 
    

Modified: 
    llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
index f46389136607ae0..0f7c611787aab18 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
@@ -26,6 +26,7 @@ auto &Sec =
 
 auto ArmCfg = getArmConfigForCPUArch(ARMBuildAttrs::v7);
 
+constexpr uint64_t DataAlignment = 4;
 constexpr uint64_t ArmAlignment = 4;
 constexpr uint64_t ThumbAlignment = 2;
 constexpr uint64_t AlignmentOffset = 0;
@@ -33,6 +34,27 @@ constexpr uint64_t AlignmentOffset = 0;
 constexpr orc::ExecutorAddrDiff SymbolOffset = 0;
 constexpr orc::ExecutorAddrDiff SymbolSize = 4;
 
+template <size_t sizeOfArray>
+ArrayRef<char> toArrayRefChar(const uint8_t (&Zeros)[sizeOfArray]) {
+  return ArrayRef<char>(reinterpret_cast<const char *>(&Zeros), sizeof(Zeros));
+}
+
+TEST(AArch32_ELF, readAddendDataErrors) {
+  constexpr uint64_t ZerosOffset = 0;
+  const uint8_t Zeros[] = {0x00, 0x00, 0x00, 0x00};
+  constexpr orc::ExecutorAddr ZerosBlockAddr(0x0000);
+  auto &ZerosBlock =
+      G->createContentBlock(Sec, toArrayRefChar(Zeros), ZerosBlockAddr,
+                            DataAlignment, AlignmentOffset);
+
+  // Invalid edge kind is the only error we can raise here right now.
+  Edge::Kind Invalid = Edge::GenericEdgeKind::Invalid;
+  EXPECT_THAT_EXPECTED(readAddend(*G, ZerosBlock, ZerosOffset, Invalid, ArmCfg),
+                       FailedWithMessage(testing::HasSubstr(
+                           "can not read implicit addend for aarch32 edge kind "
+                           "INVALID RELOCATION")));
+}
+
 TEST(AArch32_ELF, readAddendArmErrors) {
 
   constexpr orc::ExecutorAddr B1DummyAddr(0x1000);
@@ -44,12 +66,6 @@ TEST(AArch32_ELF, readAddendArmErrors) {
                             sizeof(ArmWord));
   auto &BArm = G->createContentBlock(Sec, ArmContent, B1DummyAddr, ArmAlignment,
                                      AlignmentOffset);
-  Edge::Kind Invalid = Edge::GenericEdgeKind::Invalid;
-
-  EXPECT_THAT_EXPECTED(readAddend(*G, BArm, SymbolOffset, Invalid, ArmCfg),
-                       FailedWithMessage(testing::HasSubstr(
-                           "can not read implicit addend for aarch32 edge kind "
-                           "INVALID RELOCATION")));
 
   for (Edge::Kind K = FirstArmRelocation; K < LastArmRelocation; K += 1) {
     EXPECT_THAT_EXPECTED(readAddend(*G, BArm, SymbolOffset, K, ArmCfg),


        


More information about the llvm-commits mailing list