From 3b7c9dd6bd9a921b8104894d7bdbb55eca90e056 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 10 Apr 2021 11:00:12 +0200 Subject: [PATCH] zld: differentiate between static and global in stabs --- src/link/MachO/Object.zig | 9 +++++++-- src/link/MachO/Zld.zig | 11 ++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig index 456c71a22b..3c7950879d 100644 --- a/src/link/MachO/Object.zig +++ b/src/link/MachO/Object.zig @@ -399,8 +399,13 @@ pub fn parseDebugInfo(self: *Object) !void { } } else null; - // TODO How do we work out static, global, local? - const tag: Stab.Tag = if (size == null) .global else .function; + const tag: Stab.Tag = tag: { + if (size != null) break :tag .function; + switch (sym.tag) { + .weak, .strong => break :tag .global, + else => break :tag .static, + } + }; try self.stabs.append(self.allocator, .{ .tag = tag, .size = size, diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index cff93998a2..53f6f2dd11 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -2519,7 +2519,16 @@ fn writeDebugInfo(self: *Zld) !void { .n_value = stab.size.?, }); }, - else => { + .global => { + try stabs.append(.{ + .n_strx = sym.inner.n_strx, + .n_type = macho.N_GSYM, + .n_sect = 0, + .n_desc = 0, + .n_value = 0, + }); + }, + .static => { try stabs.append(.{ .n_strx = sym.inner.n_strx, .n_type = macho.N_STSYM,