Fix DXContainer test on ppcbe
authorChris Bieneman <chris.bieneman@me.com>
Thu, 2 Jun 2022 01:18:41 +0000 (20:18 -0500)
committerChris Bieneman <chris.bieneman@me.com>
Thu, 2 Jun 2022 01:19:59 +0000 (20:19 -0500)
Silly mistake, the code here was byteswapping in-place which corrupts
the data structure that is used later to write the correct file.

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

index 5400f07..4729085 100644 (file)
@@ -96,11 +96,13 @@ void DXContainerWriter::writeHeader(raw_ostream &OS) {
   if (sys::IsBigEndianHost)
     Header.swapBytes();
   OS.write(reinterpret_cast<char *>(&Header), sizeof(Header));
-  for (auto &O : *ObjectFile.Header.PartOffsets)
-    if (sys::IsBigEndianHost)
+  SmallVector<uint32_t> Offsets(ObjectFile.Header.PartOffsets->begin(),
+                                ObjectFile.Header.PartOffsets->end());
+  if (sys::IsBigEndianHost)
+    for (auto &O : Offsets)
       sys::swapByteOrder(O);
-  OS.write(reinterpret_cast<char *>(ObjectFile.Header.PartOffsets->data()),
-           ObjectFile.Header.PartOffsets->size() * sizeof(uint32_t));
+  OS.write(reinterpret_cast<char *>(Offsets.data()),
+           Offsets.size() * sizeof(uint32_t));
 }
 void DXContainerWriter::writeParts(raw_ostream &OS) {
   uint32_t RollingOffset =