diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-09-09 16:55:56 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-09-09 16:55:56 +0200 |
| commit | 56fdada577d5d7f871bed8e5ae74e395291d4140 (patch) | |
| tree | f4ae4765f01c45ade33315811ec1133b517ce7a7 /src | |
| parent | 1efdb137d14058f3c428a001838b963de16694ea (diff) | |
| download | zig-56fdada577d5d7f871bed8e5ae74e395291d4140.tar.gz zig-56fdada577d5d7f871bed8e5ae74e395291d4140.zip | |
macho: properly adjust section sizes
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/MachO.zig | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 4a8df9ae6c..2ccedd70ea 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2667,8 +2667,16 @@ fn parseTextBlocks(self: *MachO) !void { metadata.size, metadata.alignment, }); + + const sect_size = if (self.blocks.get(match)) |last| blk: { + const last_atom_sym = self.locals.items[last.local_sym_index]; + break :blk last_atom_sym.n_value + last.size - sect.addr; + } else 0; + sect.@"align" = math.max(sect.@"align", metadata.alignment); - try self.growSection(match, @intCast(u32, metadata.size)); + const needed_size = @intCast(u32, metadata.size + sect_size); + try self.growSection(match, needed_size); + sect.size = needed_size; var base_vaddr = if (self.blocks.get(match)) |last| blk: { const last_atom_sym = self.locals.items[last.local_sym_index]; |
