diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-10-25 11:10:28 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-25 11:10:28 +0200 |
| commit | 03d0e296cb8a8afb2bd81c030b31e96e6e2940c7 (patch) | |
| tree | f340a6c090dd562ec0d710573d66e1651ced5bd5 /src/link | |
| parent | 5769592cdda3c14a37b8c381219343052609cbbc (diff) | |
| parent | 6c1e306484530bfeaf26450fb83a70ff1c323bcd (diff) | |
| download | zig-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.zig | 8 | ||||
| -rw-r--r-- | src/link/Dwarf.zig | 7 | ||||
| -rw-r--r-- | src/link/Elf/ZigObject.zig | 8 | ||||
| -rw-r--r-- | src/link/MachO/ZigObject.zig | 8 |
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]; |
