OSDN Git Service

[DebugInfo][test] Attempt to fix big endian build bots
authorJames Henderson <james.henderson@sony.com>
Tue, 23 Jun 2020 11:33:19 +0000 (12:33 +0100)
committerJames Henderson <james.henderson@sony.com>
Tue, 23 Jun 2020 11:34:27 +0000 (12:34 +0100)
Commit 9782c922c broke them since it prints raw bytes, whose order will
be different dependent on the endianness of the host.

llvm/unittests/DebugInfo/DWARF/DWARFDebugLineTest.cpp

index c8b7535..ad59098 100644 (file)
@@ -1443,6 +1443,21 @@ struct TruncatedExtendedOpcodeFixture
   void SetUp() {
     std::tie(BodyLength, OpcodeLength, Opcode, Operands, ExpectedOutput,
              ExpectedErr) = GetParam();
+    // Swap the byte order of the operands on big endian hosts, so that the raw
+    // bytes are always in the same order. ValLen.Value is a uint64_t, so make
+    // sure to shift the value back to the actually used bits for the
+    // appropriate type.
+    if (sys::IsBigEndianHost)
+      for (LineTable::ValueAndLength &ValLen : Operands)
+        if (ValLen.Length != LineTable::SLEB &&
+            ValLen.Length != LineTable::ULEB &&
+            ValLen.Length != LineTable::Byte) {
+          sys::swapByteOrder(ValLen.Value);
+          if (ValLen.Length == LineTable::Long)
+              ValLen.Value >>= 32;
+          if (ValLen.Length == LineTable::Half)
+              ValLen.Value >>= 48;
+        }
   }
 
   uint64_t OpcodeLength;