diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-07-21 15:46:55 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-07-21 15:46:57 +0200 |
| commit | 3bfde76cff60a0d9c70d8e660dd633bed17a314f (patch) | |
| tree | 43445d49bcc77b3259e734cbd85f6a266e6c317d /src/link/MachO/Object.zig | |
| parent | 5276ce8e638d3d295c443d8bc33e5c51538ae540 (diff) | |
| download | zig-3bfde76cff60a0d9c70d8e660dd633bed17a314f.tar.gz zig-3bfde76cff60a0d9c70d8e660dd633bed17a314f.zip | |
macho: fix text block management
For the time being, until we rewrite how atoms are handled across
linkers, store two tables in the MachO linker: one for TextBlocks
directly created and managed by the linker, and one for TextBlocks
that were spawned by Module.Decl. This allows for correct memory
clean up after linking is done.
Diffstat (limited to 'src/link/MachO/Object.zig')
| -rw-r--r-- | src/link/MachO/Object.zig | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig index 407918456b..7291e0929c 100644 --- a/src/link/MachO/Object.zig +++ b/src/link/MachO/Object.zig @@ -723,12 +723,13 @@ pub fn parseTextBlocks(self: *Object, macho_file: *MachO) !void { break :blk block_local_sym_index; }; - const block = try macho_file.managed_blocks.addOne(macho_file.base.allocator); + const block = try macho_file.base.allocator.create(TextBlock); block.* = TextBlock.empty; block.local_sym_index = block_local_sym_index; block.code = try self.allocator.dupe(u8, code); block.size = sect.size; block.alignment = sect.@"align"; + try macho_file.managed_blocks.append(macho_file.base.allocator, block); try block.parseRelocsFromObject(self.allocator, relocs, self, .{ .base_addr = 0, |
