diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig index 9925611243cbb64b17f2c6efab036ca503fd3fe0..5c10c6bd337ae9d05c419d72ba48f1ddb133655b 100644 --- a/src/link/MachO/Object.zig +++ b/src/link/MachO/Object.zig @@ -512,10 +512,10 @@ pub fn parseTextBlocks(self: *Object, zld: *Zld) !void { const relocs = mem.bytesAsSlice(macho.relocation_info, raw_relocs); // Is there any padding between symbols within the section? - const is_padded = self.header.?.flags & macho.MH_SUBSECTIONS_VIA_SYMBOLS != 0; + const is_splittable = self.header.?.flags & macho.MH_SUBSECTIONS_VIA_SYMBOLS != 0; next: { - if (is_padded) blocks: { + if (is_splittable) blocks: { const filtered_nlists = NlistWithIndex.filterInSection( sorted_nlists.items, sect_id + 1, @@ -540,6 +540,8 @@ pub fn parseTextBlocks(self: *Object, zld: *Zld) !void { if (reg.file) |file| { if (file != self) { log.warn("deduping definition of {s} in {s}", .{ sym.name, self.name.? }); + block.deinit(self.allocator); + self.allocator.destroy(block); continue; } } diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index 2f28f202536f9171ec389360fce0337309aaffc5..5e6d2c17ce6b1080ea59adfc9c9298e3466e4b1f 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -147,7 +147,7 @@ pub const TextBlock = struct { } block.relocs.deinit(); block.references.deinit(); - allocator.free(code); + allocator.free(block.code); } pub fn print_this(self: *const TextBlock, zld: *Zld) void {