aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO/Symbol.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-07-11 14:49:16 +0200
committerJakub Konka <kubkon@jakubkonka.com>2024-07-18 09:13:08 +0200
commit90c54f1eb6d34fb703b6c4e093580a0f2f70d559 (patch)
tree7e0a3416b09d81f61ac95c539b6fa22165a53822 /src/link/MachO/Symbol.zig
parent3d58faed12d018d70a4cd28aff89b733621a0259 (diff)
downloadzig-90c54f1eb6d34fb703b6c4e093580a0f2f70d559.tar.gz
zig-90c54f1eb6d34fb703b6c4e093580a0f2f70d559.zip
macho: fix symbol visibility merging logic
Diffstat (limited to 'src/link/MachO/Symbol.zig')
-rw-r--r--src/link/MachO/Symbol.zig15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/link/MachO/Symbol.zig b/src/link/MachO/Symbol.zig
index 8cb198e7d7..72cd55bf5a 100644
--- a/src/link/MachO/Symbol.zig
+++ b/src/link/MachO/Symbol.zig
@@ -331,9 +331,14 @@ fn format2(
if (symbol.getAtom(ctx.macho_file)) |atom| {
try writer.print(" : atom({d})", .{atom.atom_index});
}
- var buf: [2]u8 = .{'_'} ** 2;
+ var buf: [3]u8 = .{'_'} ** 3;
if (symbol.flags.@"export") buf[0] = 'E';
if (symbol.flags.import) buf[1] = 'I';
+ switch (symbol.visibility) {
+ .local => buf[2] = 'L',
+ .hidden => buf[2] = 'H',
+ .global => buf[2] = 'G',
+ }
try writer.print(" : {s}", .{&buf});
if (symbol.flags.weak) try writer.writeAll(" : weak");
if (symbol.isSymbolStab(ctx.macho_file)) try writer.writeAll(" : stab");
@@ -402,6 +407,14 @@ pub const Visibility = enum {
global,
hidden,
local,
+
+ pub fn rank(vis: Visibility) u2 {
+ return switch (vis) {
+ .local => 2,
+ .hidden => 1,
+ .global => 0,
+ };
+ }
};
pub const Extra = struct {