diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-07-10 14:35:20 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-07-15 18:49:47 +0200 |
| commit | 7aefea614f570f489366a7fbde1a98eaf2551fc6 (patch) | |
| tree | c68e1ee6152eb11401a2da915090f7eee44563ae | |
| parent | 3bdb3b574e36962528d203a69ee1de4b39e17830 (diff) | |
| download | zig-7aefea614f570f489366a7fbde1a98eaf2551fc6.tar.gz zig-7aefea614f570f489366a7fbde1a98eaf2551fc6.zip | |
zld: fix allocating tentative defs
| -rw-r--r-- | src/link/MachO/Zld.zig | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index 171a9625f1..4f423e5787 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -1603,6 +1603,17 @@ fn resolveSymbols(self: *Zld) !void { block.size = size; block.alignment = alignment; + // Update target section's metadata + // TODO should we update segment's size here too? + // How does it tie with incremental space allocs? + const tseg = &self.load_commands.items[match.seg].Segment; + const tsect = &tseg.sections.items[match.sect]; + const new_alignment = math.max(tsect.@"align", block.alignment); + const new_alignment_pow_2 = try math.powi(u32, 2, new_alignment); + const new_size = mem.alignForwardGeneric(u64, tsect.size + block.size, new_alignment_pow_2); + tsect.size = new_size; + tsect.@"align" = new_alignment; + if (self.blocks.getPtr(match)) |last| { last.*.next = block; block.prev = last.*; |
