authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-10-20 19:42:16+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-10-22 07:59:24+02:00
log5823f19c5e86e42b82240756ee9ffad536359c4b
tree87705ac2fddf8e3f4463cebbf26ea4b482758a78
parent2c2ff4558f83cdf1aacb0a4865389e93af60d2d5

macho: gracefully handle uninitialized symtabs in objects


2 files changed, 5 insertions(+), 3 deletions(-)

src/link/MachO/Object.zig+3-2
......@@ -515,8 +515,9 @@ pub fn getSourceSymbol(self: Object, index: u32) ?macho.nlist_64 {
515515}
516516
517517/// Caller owns memory.
518pub fn createReverseSymbolLookup(self: Object, gpa: Allocator) ![]u32 {
519 const lookup = try gpa.alloc(u32, self.in_symtab.?.len);
518pub fn createReverseSymbolLookup(self: Object, arena: Allocator) ![]u32 {
519 const symtab = self.in_symtab orelse return &[0]u32{};
520 const lookup = try arena.alloc(u32, symtab.len);
520521 for (self.source_symtab_lookup) |source_id, id| {
521522 lookup[source_id] = @intCast(u32, id);
522523 }
src/link/MachO/zld.zig+2-1
......@@ -3486,6 +3486,7 @@ pub const Zld = struct {
34863486 scoped_log.debug("locals:", .{});
34873487 for (self.objects.items) |object, id| {
34883488 scoped_log.debug(" object({d}): {s}", .{ id, object.name });
3489 if (object.in_symtab == null) continue;
34893490 for (object.symtab) |sym, sym_id| {
34903491 mem.set(u8, &buf, '_');
34913492 scoped_log.debug(" %{d}: {s} @{x} in sect({d}), {s}", .{
......@@ -3641,7 +3642,7 @@ pub const Zld = struct {
36413642 sym.n_sect,
36423643 });
36433644
3644 if (atom.getFile() != null) {
3645 if (atom.getFile() != null) {
36453646 var it = Atom.getInnerSymbolsIterator(self, atom_index);
36463647 while (it.next()) |sym_loc| {
36473648 const inner = self.getSymbol(sym_loc);