From 6784adc63d76e9ac231e1f3f0cdf05c8b5f6c0e9 Mon Sep 17 00:00:00 2001 From: Chris Bieneman Date: Wed, 1 Jun 2022 20:18:41 -0500 Subject: [PATCH] Fix DXContainer test on ppcbe 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 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 5400f07..4729085 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -96,11 +96,13 @@ void DXContainerWriter::writeHeader(raw_ostream &OS) { if (sys::IsBigEndianHost) Header.swapBytes(); OS.write(reinterpret_cast(&Header), sizeof(Header)); - for (auto &O : *ObjectFile.Header.PartOffsets) - if (sys::IsBigEndianHost) + SmallVector Offsets(ObjectFile.Header.PartOffsets->begin(), + ObjectFile.Header.PartOffsets->end()); + if (sys::IsBigEndianHost) + for (auto &O : Offsets) sys::swapByteOrder(O); - OS.write(reinterpret_cast(ObjectFile.Header.PartOffsets->data()), - ObjectFile.Header.PartOffsets->size() * sizeof(uint32_t)); + OS.write(reinterpret_cast(Offsets.data()), + Offsets.size() * sizeof(uint32_t)); } void DXContainerWriter::writeParts(raw_ostream &OS) { uint32_t RollingOffset = -- 2.7.4