aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-10-25 11:10:28 +0200
committerGitHub <noreply@github.com>2024-10-25 11:10:28 +0200
commit03d0e296cb8a8afb2bd81c030b31e96e6e2940c7 (patch)
treef340a6c090dd562ec0d710573d66e1651ced5bd5 /src/link
parent5769592cdda3c14a37b8c381219343052609cbbc (diff)
parent6c1e306484530bfeaf26450fb83a70ff1c323bcd (diff)
downloadzig-03d0e296cb8a8afb2bd81c030b31e96e6e2940c7.tar.gz
zig-03d0e296cb8a8afb2bd81c030b31e96e6e2940c7.zip
Merge pull request #21710 from alexrp/function-alignment
Some improvements to the compiler's handling of function alignment
Diffstat (limited to 'src/link')
-rw-r--r--src/link/Coff.zig8
-rw-r--r--src/link/Dwarf.zig7
-rw-r--r--src/link/Elf/ZigObject.zig8
-rw-r--r--src/link/MachO/ZigObject.zig8
4 files changed, 20 insertions, 11 deletions
diff --git a/src/link/Coff.zig b/src/link/Coff.zig
index f687c7393b..bc88f5fc4c 100644
--- a/src/link/Coff.zig
+++ b/src/link/Coff.zig
@@ -1388,9 +1388,11 @@ fn updateNavCode(
log.debug("updateNavCode {} 0x{x}", .{ nav.fqn.fmt(ip), nav_index });
- const required_alignment = pt.navAlignment(nav_index).max(
- target_util.minFunctionAlignment(zcu.navFileScope(nav_index).mod.resolved_target.result),
- );
+ const target = zcu.navFileScope(nav_index).mod.resolved_target.result;
+ const required_alignment = switch (pt.navAlignment(nav_index)) {
+ .none => target_util.defaultFunctionAlignment(target),
+ else => |a| a.maxStrict(target_util.minFunctionAlignment(target)),
+ };
const nav_metadata = coff.navs.get(nav_index).?;
const atom_index = nav_metadata.atom;
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index da92f5a03d..d428377c3b 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -2372,8 +2372,11 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In
try wip_nav.infoAddrSym(sym_index, 0);
wip_nav.func_high_pc = @intCast(wip_nav.debug_info.items.len);
try diw.writeInt(u32, 0, dwarf.endian);
- try uleb128(diw, nav.status.resolved.alignment.toByteUnits() orelse
- target_info.defaultFunctionAlignment(file.mod.resolved_target.result).toByteUnits().?);
+ const target = file.mod.resolved_target.result;
+ try uleb128(diw, switch (nav.status.resolved.alignment) {
+ .none => target_info.defaultFunctionAlignment(target),
+ else => |a| a.maxStrict(target_info.minFunctionAlignment(target)),
+ }.toByteUnits().?);
try diw.writeByte(@intFromBool(false));
try diw.writeByte(@intFromBool(func_type.return_type == .noreturn_type));
diff --git a/src/link/Elf/ZigObject.zig b/src/link/Elf/ZigObject.zig
index 114a862fb6..84b54aabcd 100644
--- a/src/link/Elf/ZigObject.zig
+++ b/src/link/Elf/ZigObject.zig
@@ -1271,9 +1271,11 @@ fn updateNavCode(
log.debug("updateNavCode {}({d})", .{ nav.fqn.fmt(ip), nav_index });
- const required_alignment = pt.navAlignment(nav_index).max(
- target_util.minFunctionAlignment(zcu.navFileScope(nav_index).mod.resolved_target.result),
- );
+ const target = zcu.navFileScope(nav_index).mod.resolved_target.result;
+ const required_alignment = switch (pt.navAlignment(nav_index)) {
+ .none => target_util.defaultFunctionAlignment(target),
+ else => |a| a.maxStrict(target_util.minFunctionAlignment(target)),
+ };
const sym = self.symbol(sym_index);
const esym = &self.symtab.items(.elf_sym)[sym.esym_index];
diff --git a/src/link/MachO/ZigObject.zig b/src/link/MachO/ZigObject.zig
index 666a73f600..097be1bc70 100644
--- a/src/link/MachO/ZigObject.zig
+++ b/src/link/MachO/ZigObject.zig
@@ -962,9 +962,11 @@ fn updateNavCode(
log.debug("updateNavCode {} 0x{x}", .{ nav.fqn.fmt(ip), nav_index });
- const required_alignment = pt.navAlignment(nav_index).max(
- target_util.minFunctionAlignment(zcu.navFileScope(nav_index).mod.resolved_target.result),
- );
+ const target = zcu.navFileScope(nav_index).mod.resolved_target.result;
+ const required_alignment = switch (pt.navAlignment(nav_index)) {
+ .none => target_util.defaultFunctionAlignment(target),
+ else => |a| a.maxStrict(target_util.minFunctionAlignment(target)),
+ };
const sect = &macho_file.sections.items(.header)[sect_index];
const sym = &self.symbols.items[sym_index];