https://github.com/nikic updated https://github.com/llvm/llvm-project/pull/205822
>From d6c1160e06708ce5b915e5e4b0d5695e0467d929 Mon Sep 17 00:00:00 2001 From: Nikita Popov <[email protected]> Date: Thu, 25 Jun 2026 16:12:05 +0200 Subject: [PATCH 1/2] [Object] Fix offload bundle decompression on big endian tools/llvm-objdump/Offloading/fatbin-coff-compress.test was crashing on s390x because the header fields read from the object were misinterpreted as big-endian. Fix this by using ulittleN_t types. --- llvm/lib/Object/OffloadBundle.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/llvm/lib/Object/OffloadBundle.cpp b/llvm/lib/Object/OffloadBundle.cpp index 93fb2ab1affc7..edd017b99331a 100644 --- a/llvm/lib/Object/OffloadBundle.cpp +++ b/llvm/lib/Object/OffloadBundle.cpp @@ -432,29 +432,29 @@ CompressedOffloadBundle::compress(compression::Params P, LLVM_PACKED_START union RawCompressedBundleHeader { struct CommonFields { - uint32_t Magic; - uint16_t Version; - uint16_t Method; + support::ulittle32_t Magic; + support::ulittle16_t Version; + support::ulittle16_t Method; }; struct V1Header { CommonFields Common; - uint32_t UncompressedFileSize; - uint64_t Hash; + support::ulittle32_t UncompressedFileSize; + support::ulittle64_t Hash; }; struct V2Header { CommonFields Common; - uint32_t FileSize; - uint32_t UncompressedFileSize; - uint64_t Hash; + support::ulittle32_t FileSize; + support::ulittle32_t UncompressedFileSize; + support::ulittle64_t Hash; }; struct V3Header { CommonFields Common; - uint64_t FileSize; - uint64_t UncompressedFileSize; - uint64_t Hash; + support::ulittle64_t FileSize; + support::ulittle64_t UncompressedFileSize; + support::ulittle64_t Hash; }; CommonFields Common; @@ -518,7 +518,7 @@ CompressedOffloadBundle::CompressedBundleHeader::tryParse(StringRef Blob) { case static_cast<uint16_t>(compression::Format::Zlib): case static_cast<uint16_t>(compression::Format::Zstd): Normalized.CompressionFormat = - static_cast<compression::Format>(Header.Common.Method); + static_cast<compression::Format>(Header.Common.Method.value()); break; default: return createStringError("unknown compressing method"); >From dc6626d09a444aa951243f791f6d68d4be5e3202 Mon Sep 17 00:00:00 2001 From: Nikita Popov <[email protected]> Date: Thu, 25 Jun 2026 16:51:40 +0200 Subject: [PATCH 2/2] Also fix clang-offload-bundler --- clang/lib/Driver/OffloadBundler.cpp | 45 +++++++++++++---------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/clang/lib/Driver/OffloadBundler.cpp b/clang/lib/Driver/OffloadBundler.cpp index 9d6f32c4a4e8f..a186005baa9aa 100644 --- a/clang/lib/Driver/OffloadBundler.cpp +++ b/clang/lib/Driver/OffloadBundler.cpp @@ -1085,28 +1085,23 @@ CompressedOffloadBundle::compress(llvm::compression::Params P, SmallVector<char, 0> FinalBuffer; llvm::raw_svector_ostream OS(FinalBuffer); + support::endian::Writer Writer(OS, endianness::little); OS << MagicNumber; - OS.write(reinterpret_cast<const char *>(&Version), sizeof(Version)); - OS.write(reinterpret_cast<const char *>(&CompressionMethod), - sizeof(CompressionMethod)); + Writer.write(Version); + Writer.write(CompressionMethod); // Write size fields according to version if (Version == 2) { uint32_t TotalFileSize32 = static_cast<uint32_t>(TotalFileSize64); uint32_t UncompressedSize32 = static_cast<uint32_t>(UncompressedSize64); - OS.write(reinterpret_cast<const char *>(&TotalFileSize32), - sizeof(TotalFileSize32)); - OS.write(reinterpret_cast<const char *>(&UncompressedSize32), - sizeof(UncompressedSize32)); + Writer.write(TotalFileSize32); + Writer.write(UncompressedSize32); } else { // Version 3 - OS.write(reinterpret_cast<const char *>(&TotalFileSize64), - sizeof(TotalFileSize64)); - OS.write(reinterpret_cast<const char *>(&UncompressedSize64), - sizeof(UncompressedSize64)); + Writer.write(TotalFileSize64); + Writer.write(UncompressedSize64); } - OS.write(reinterpret_cast<const char *>(&TruncatedHash), - sizeof(TruncatedHash)); + Writer.write(TruncatedHash); OS.write(reinterpret_cast<const char *>(CompressedBuffer.data()), CompressedBuffer.size()); @@ -1146,29 +1141,29 @@ CompressedOffloadBundle::compress(llvm::compression::Params P, LLVM_PACKED_START union RawCompressedBundleHeader { struct CommonFields { - uint32_t Magic; - uint16_t Version; - uint16_t Method; + support::ulittle32_t Magic; + support::ulittle16_t Version; + support::ulittle16_t Method; }; struct V1Header { CommonFields Common; - uint32_t UncompressedFileSize; - uint64_t Hash; + support::ulittle32_t UncompressedFileSize; + support::ulittle64_t Hash; }; struct V2Header { CommonFields Common; - uint32_t FileSize; - uint32_t UncompressedFileSize; - uint64_t Hash; + support::ulittle32_t FileSize; + support::ulittle32_t UncompressedFileSize; + support::ulittle64_t Hash; }; struct V3Header { CommonFields Common; - uint64_t FileSize; - uint64_t UncompressedFileSize; - uint64_t Hash; + support::ulittle64_t FileSize; + support::ulittle64_t UncompressedFileSize; + support::ulittle64_t Hash; }; CommonFields Common; @@ -1234,7 +1229,7 @@ CompressedOffloadBundle::CompressedBundleHeader::tryParse(StringRef Blob) { case static_cast<uint16_t>(compression::Format::Zlib): case static_cast<uint16_t>(compression::Format::Zstd): Normalized.CompressionFormat = - static_cast<compression::Format>(Header.Common.Method); + static_cast<compression::Format>(Header.Common.Method.value()); break; default: return createStringError(inconvertibleErrorCode(), _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
