aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2021-09-09 16:55:56 +0200
committerJakub Konka <kubkon@jakubkonka.com>2021-09-09 16:55:56 +0200
commit56fdada577d5d7f871bed8e5ae74e395291d4140 (patch)
treef4ae4765f01c45ade33315811ec1133b517ce7a7 /src
parent1efdb137d14058f3c428a001838b963de16694ea (diff)
downloadzig-56fdada577d5d7f871bed8e5ae74e395291d4140.tar.gz
zig-56fdada577d5d7f871bed8e5ae74e395291d4140.zip
macho: properly adjust section sizes
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO.zig10
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];