authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-11-28 20:48:54+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-11-28 20:48:54+01:00
log58a552aaf99f518d3f347c074d20a25c5223404b
treee7de892dbf3fa76d0e7f4461b9e26ccfe5012285
parent7e27ab09476870e4b37a04172043c66b4bd77c20

macho: save all undef symbols even if null


1 files changed, 2 insertions(+), 10 deletions(-)

src/link/MachO.zig+2-10
......@@ -4996,17 +4996,9 @@ fn writeSymbolTable(self: *MachO) !void {
49964996 }
49974997 }
49984998
4999 var undefs = std.ArrayList(macho.nlist_64).init(self.base.allocator);
5000 defer undefs.deinit();
5001
5002 for (self.undefs.items) |sym| {
5003 if (sym.n_strx == 0) continue;
5004 try undefs.append(sym);
5005 }
5006
50074999 const nlocals = locals.items.len;
50085000 const nexports = self.globals.items.len;
5009 const nundefs = undefs.items.len;
5001 const nundefs = self.undefs.items.len;
50105002
50115003 const locals_off = symtab.symoff;
50125004 const locals_size = nlocals * @sizeOf(macho.nlist_64);
......@@ -5021,7 +5013,7 @@ fn writeSymbolTable(self: *MachO) !void {
50215013 const undefs_off = exports_off + exports_size;
50225014 const undefs_size = nundefs * @sizeOf(macho.nlist_64);
50235015 log.debug("writing undefined symbols from 0x{x} to 0x{x}", .{ undefs_off, undefs_size + undefs_off });
5024 try self.base.file.?.pwriteAll(mem.sliceAsBytes(undefs.items), undefs_off);
5016 try self.base.file.?.pwriteAll(mem.sliceAsBytes(self.undefs.items), undefs_off);
50255017
50265018 symtab.nsyms = @intCast(u32, nlocals + nexports + nundefs);
50275019 seg.inner.filesize += locals_size + exports_size + undefs_size;