aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-12-15 23:08:04 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-12-16 18:05:58 +0100
commit1928ed7dab3949db964d96dad82beb776e69554f (patch)
tree96026fe17b1f67513327428be4a5a7bc90e4c072 /src
parent79b92f9eb850a1b4da08990d7b58f52391a802fb (diff)
downloadzig-1928ed7dab3949db964d96dad82beb776e69554f.tar.gz
zig-1928ed7dab3949db964d96dad82beb776e69554f.zip
macho: RingBuffer experiment to crack down the bug
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO/zld.zig56
1 files changed, 1 insertions, 55 deletions
diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig
index f86ded39e8..23a7963cc0 100644
--- a/src/link/MachO/zld.zig
+++ b/src/link/MachO/zld.zig
@@ -2780,10 +2780,8 @@ pub const Zld = struct {
const chunk_size = 0x4000;
- var rb = RingBuffer{};
var hasher = Md5.init(.{});
var buffer: [chunk_size]u8 = undefined;
- var hashed: usize = 0;
for (subsections[0..count]) |cut| {
const size = cut.end - cut.start;
@@ -2799,24 +2797,10 @@ pub const Zld = struct {
const amt = try self.file.preadAll(buffer[0..fsize], fstart);
if (amt != fsize) return error.InputOutput;
- var leftover = rb.append(buffer[0..fsize]);
- while (leftover > 0) {
- if (rb.full()) {
- hasher.update(rb.getBuffer());
- hashed += rb.getBuffer().len;
- rb.clear();
- }
- leftover = rb.append(buffer[fsize - leftover ..]);
- }
+ hasher.update(buffer[0..fsize]);
}
}
- if (!rb.empty()) {
- hasher.update(rb.getBuffer());
- hashed += rb.getBuffer().len;
- rb.clear();
- }
-
hasher.final(&self.uuid_cmd.uuid);
conformUuid(&self.uuid_cmd.uuid);
},
@@ -2826,44 +2810,6 @@ pub const Zld = struct {
try self.file.pwriteAll(&self.uuid_cmd.uuid, in_file);
}
- const RingBuffer = struct {
- buffer: [chunk_size]u8 = undefined,
- pos: usize = 0,
-
- const chunk_size = 0x4000;
-
- fn append(rb: *RingBuffer, data: []u8) usize {
- const cpy_size = if (data.len > rb.available())
- data.len - rb.available()
- else
- data.len;
- mem.copy(u8, rb.buffer[rb.pos..], data[0..cpy_size]);
- rb.pos += cpy_size;
- const leftover = data.len - cpy_size;
- return leftover;
- }
-
- fn available(rb: RingBuffer) usize {
- return rb.buffer.len - rb.pos;
- }
-
- fn clear(rb: *RingBuffer) void {
- rb.pos = 0;
- }
-
- fn full(rb: RingBuffer) bool {
- return rb.buffer.len == rb.pos;
- }
-
- fn empty(rb: RingBuffer) bool {
- return rb.pos == 0;
- }
-
- fn getBuffer(rb: *const RingBuffer) []const u8 {
- return rb.buffer[0..rb.pos];
- }
- };
-
inline fn conformUuid(out: *[Md5.digest_length]u8) void {
// LC_UUID uuids should conform to RFC 4122 UUID version 4 & UUID version 5 formats
out[6] = (out[6] & 0x0F) | (3 << 4);