aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2021-07-10 14:35:20 +0200
committerJakub Konka <kubkon@jakubkonka.com>2021-07-15 18:49:47 +0200
commit7aefea614f570f489366a7fbde1a98eaf2551fc6 (patch)
treec68e1ee6152eb11401a2da915090f7eee44563ae /src
parent3bdb3b574e36962528d203a69ee1de4b39e17830 (diff)
downloadzig-7aefea614f570f489366a7fbde1a98eaf2551fc6.tar.gz
zig-7aefea614f570f489366a7fbde1a98eaf2551fc6.zip
zld: fix allocating tentative defs
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO/Zld.zig11
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.*;