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:
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| {