zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 700b1e38ceeb66416a327e4f31969b1e52ba55ef (tree)
parent 0353bfd55ed67fa5c1c1d0e3004fcbae7f139b92
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Sun, 27 Aug 2023 23:04:27 +0200

macho: fix overalignment of stubs on aarch64

Diffstat:
Msrc/link/MachO.zig | 6+-----
Msrc/link/MachO/stubs.zig | 2+-
Msrc/link/MachO/zld.zig | 4++--
3 files changed, 4 insertions(+), 8 deletions(-)

diff --git 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 @@ -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 @@ -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| {