From 700b1e38ceeb66416a327e4f31969b1e52ba55ef Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sun, 27 Aug 2023 23:04:27 +0200 Subject: [PATCH] macho: fix overalignment of stubs on aarch64 --- src/link/MachO.zig | 6 +----- src/link/MachO/stubs.zig | 2 +- src/link/MachO/zld.zig | 4 ++-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index a49999d210..623c8d36f7 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2912,11 +2912,7 @@ fn populateMissingMetadata(self: *MachO) !void { if (self.stub_helper_section_index == null) { self.stub_helper_section_index = try self.allocateSection("__TEXT3", "__stub_helper", .{ .size = @sizeOf(u32), - .alignment = switch (cpu_arch) { - .x86_64 => 1, - .aarch64 => @sizeOf(u32), - else => unreachable, // unhandled architecture type - }, + .alignment = stubs.stubAlignment(cpu_arch), .flags = macho.S_REGULAR | macho.S_ATTR_PURE_INSTRUCTIONS | macho.S_ATTR_SOME_INSTRUCTIONS, .prot = macho.PROT.READ | macho.PROT.EXEC, }); diff --git a/src/link/MachO/stubs.zig b/src/link/MachO/stubs.zig index 48878a41ab..54502d1a20 100644 --- a/src/link/MachO/stubs.zig +++ b/src/link/MachO/stubs.zig @@ -25,7 +25,7 @@ pub inline fn stubSize(cpu_arch: std.Target.Cpu.Arch) u8 { pub inline fn stubAlignment(cpu_arch: std.Target.Cpu.Arch) u8 { return switch (cpu_arch) { .x86_64 => 1, - .aarch64 => 2, + .aarch64 => 4, else => unreachable, // unhandled architecture type }; } diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig index a28df3c4e7..eb788f0fc2 100644 --- a/src/link/MachO/zld.zig +++ b/src/link/MachO/zld.zig @@ -1032,14 +1032,14 @@ fn calcSectionSizes(macho_file: *MachO) !void { if (macho_file.stubs_section_index) |sect_id| { const header = &macho_file.sections.items(.header)[sect_id]; header.size = macho_file.stub_table.count() * stubs.stubSize(cpu_arch); - header.@"align" = stubs.stubAlignment(cpu_arch); + header.@"align" = math.log2(stubs.stubAlignment(cpu_arch)); } if (macho_file.stub_helper_section_index) |sect_id| { const header = &macho_file.sections.items(.header)[sect_id]; header.size = macho_file.stub_table.count() * stubs.stubHelperSize(cpu_arch) + stubs.stubHelperPreambleSize(cpu_arch); - header.@"align" = stubs.stubAlignment(cpu_arch); + header.@"align" = math.log2(stubs.stubAlignment(cpu_arch)); } if (macho_file.la_symbol_ptr_section_index) |sect_id| {