From 3c924abb69db4d508165857ca1c54696a77645ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 4 Mar 2025 00:02:09 +0100 Subject: [PATCH] std.zig.llvm.bitcode_writer: Fix word byte order on big endian systems. The bitcode format always uses little endian words. Prior to this commit, a bitcode file produced on e.g. aarch64_be or s390x would fail to be loaded by LLVM. --- lib/std/zig/llvm/bitcode_writer.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/std/zig/llvm/bitcode_writer.zig b/lib/std/zig/llvm/bitcode_writer.zig index 73d4f1aed9f83367e2ad7144368f805b89ec407d..0b8c12858bfd127617d4ea09b3561f458b55ac44 100644 --- a/lib/std/zig/llvm/bitcode_writer.zig +++ b/lib/std/zig/llvm/bitcode_writer.zig @@ -68,13 +68,13 @@ pub fn BitcodeWriter(comptime types: []const type) type { in_bits -= n; if (self.bit_count != 0) return; - try self.buffer.append(self.bit_buffer); + try self.buffer.append(std.mem.nativeToLittle(u32, self.bit_buffer)); self.bit_buffer = 0; } // Write 32-bit chunks of input bits while (in_bits >= 32) { - try self.buffer.append(@truncate(in_buffer)); + try self.buffer.append(std.mem.nativeToLittle(u32, @truncate(in_buffer))); in_buffer >>= 31; in_buffer >>= 1; @@ -153,7 +153,7 @@ pub fn BitcodeWriter(comptime types: []const type) type { pub fn alignTo32(self: *BcWriter) Error!void { if (self.bit_count == 0) return; - try self.buffer.append(self.bit_buffer); + try self.buffer.append(std.mem.nativeToLittle(u32, self.bit_buffer)); self.bit_buffer = 0; self.bit_count = 0; } @@ -209,7 +209,7 @@ pub fn BitcodeWriter(comptime types: []const type) type { try self.bitcode.alignTo32(); // Set the number of words in the block at the start of the block - self.bitcode.buffer.items[self.start] = @truncate(self.bitcode.length() - self.start - 1); + self.bitcode.buffer.items[self.start] = std.mem.nativeToLittle(u32, @truncate(self.bitcode.length() - self.start - 1)); } pub fn writeUnabbrev(self: *Self, code: u32, values: []const u64) Error!void { -- 2.54.0