zig

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

commit eb70c8801e62a7f81ffcea735cb628995ca35d42 (tree)
parent 36981d46a3551ef1b6d673e620c4cffb1d9eea5e
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Fri,  8 Dec 2023 21:55:30 +0100

lib/std/Build/CheckObject: dump Mach-O symbol attributes

Diffstat:
Mlib/std/Build/Step/CheckObject.zig | 21+++++++++++++--------
Mtest/link/macho/unwind_info/build.zig | 2+-
Mtest/link/macho/weak_library/build.zig | 4++--
3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/lib/std/Build/Step/CheckObject.zig b/lib/std/Build/Step/CheckObject.zig @@ -923,9 +923,18 @@ const MachODumper = struct { sect.segName(), sect.sectName(), }); + if (sym.n_desc & macho.REFERENCED_DYNAMICALLY != 0) try writer.writeAll(" [referenced dynamically]"); + if (sym.weakDef()) try writer.writeAll(" weak"); + if (sym.weakRef()) try writer.writeAll(" weakref"); if (sym.ext()) { + if (sym.pext()) try writer.writeAll(" private"); try writer.writeAll(" external"); - } + } else if (sym.pext()) try writer.writeAll(" (was private external)"); + try writer.print(" {s}\n", .{sym_name}); + } else if (sym.tentative()) { + const alignment = (sym.n_desc >> 8) & 0x0F; + try writer.print(" 0x{x:0>16} (common) (alignment 2^{d})", .{ sym.n_value, alignment }); + if (sym.ext()) try writer.writeAll(" external"); try writer.print(" {s}\n", .{sym_name}); } else if (sym.undf()) { const ordinal = @divTrunc(@as(i16, @bitCast(sym.n_desc)), macho.N_SYMBOL_RESOLVER); @@ -946,17 +955,13 @@ const MachODumper = struct { break :blk basename[0..ext]; }; try writer.writeAll("(undefined)"); - if (sym.weakRef()) { - try writer.writeAll(" weak"); - } - if (sym.ext()) { - try writer.writeAll(" external"); - } + if (sym.weakRef()) try writer.writeAll(" weakref"); + if (sym.ext()) try writer.writeAll(" external"); try writer.print(" {s} (from {s})\n", .{ sym_name, import_name, }); - } else unreachable; + } } } }; diff --git a/test/link/macho/unwind_info/build.zig b/test/link/macho/unwind_info/build.zig @@ -46,7 +46,7 @@ fn testUnwindInfo( } check.checkInSymtab(); - check.checkContains("(__TEXT,__text) external ___gxx_personality_v0"); + check.checkContains("(__TEXT,__text) private external ___gxx_personality_v0"); test_step.dependOn(&check.step); const run = b.addRunArtifact(exe); diff --git a/test/link/macho/weak_library/build.zig b/test/link/macho/weak_library/build.zig @@ -42,10 +42,10 @@ fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.Optimize check.checkExact("name @rpath/liba.dylib"); check.checkInSymtab(); - check.checkExact("(undefined) weak external _a (from liba)"); + check.checkExact("(undefined) weakref external _a (from liba)"); check.checkInSymtab(); - check.checkExact("(undefined) weak external _asStr (from liba)"); + check.checkExact("(undefined) weakref external _asStr (from liba)"); test_step.dependOn(&check.step); const run = b.addRunArtifact(exe);