diff --git a/src/MachO.zig b/src/MachO.zig index 9300093c..f8c6f1e1 100644 --- a/src/MachO.zig +++ b/src/MachO.zig @@ -1240,18 +1240,17 @@ fn createObjcSections(self: *MachO) !void { } for (objc_msgsend_syms.keys()) |sym_index| { + const internal = self.getInternalObject().?; const sym = self.getSymbol(sym_index); + _ = try internal.addSymbol(sym.getName(self), self); sym.value = 0; sym.atom = 0; sym.nlist_idx = 0; - sym.file = self.internal_object_index.?; - sym.flags = .{}; + sym.flags = .{ .global = true }; sym.visibility = .hidden; - const object = self.getInternalObject().?; const name = eatPrefix(sym.getName(self), "_objc_msgSend$").?; - const selrefs_index = try object.addObjcMsgsendSections(name, self); + const selrefs_index = try internal.addObjcMsgsendSections(name, self); try sym.addExtra(.{ .objc_selrefs = selrefs_index }, self); - try object.symbols.append(gpa, sym_index); } } diff --git a/src/MachO/InternalObject.zig b/src/MachO/InternalObject.zig index faa64285..c7e799ce 100644 --- a/src/MachO/InternalObject.zig +++ b/src/MachO/InternalObject.zig @@ -28,8 +28,7 @@ pub fn addSymbol(self: *InternalObject, name: [:0]const u8, macho_file: *MachO) const gop = try macho_file.getOrCreateGlobal(off); self.symbols.addOneAssumeCapacity().* = gop.index; const sym = macho_file.getSymbol(gop.index); - sym.* = .{ .name = off, .file = self.index }; - sym.flags.global = true; + sym.file = self.index; return gop.index; } diff --git a/src/MachO/Symbol.zig b/src/MachO/Symbol.zig index 3c6d0b3c..50657ed8 100644 --- a/src/MachO/Symbol.zig +++ b/src/MachO/Symbol.zig @@ -57,8 +57,8 @@ pub fn weakRef(symbol: Symbol, macho_file: *MachO) bool { pub fn getName(symbol: Symbol, macho_file: *MachO) [:0]const u8 { if (symbol.flags.global) return macho_file.string_intern.getAssumeExists(symbol.name); return switch (symbol.getFile(macho_file).?) { - .object => |x| x.getString(symbol.name), - else => macho_file.string_intern.getAssumeExists(symbol.name), + .dylib => unreachable, // There are no local symbols for dylibs + inline else => |x| x.getString(symbol.name), }; }