From 2e30bf23aa4515682038bc69ffc0b7d06b734be9 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 31 Jul 2021 16:06:50 +0200 Subject: [PATCH] macho: cleanup extracting objects from archives --- src/link/MachO.zig | 7 +++++-- src/link/MachO/Archive.zig | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 3eb34cf415..d4a30040fc 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2231,8 +2231,11 @@ fn resolveSymbols(self: *MachO) !void { const object_id = @intCast(u16, self.objects.items.len); const object = try self.objects.addOne(self.base.allocator); - object.* = try archive.extractObject(self.base.allocator, offsets.items[0]); - try object.parse(self.base.allocator, self.base.options.target.cpu.arch); + object.* = try archive.parseObject( + self.base.allocator, + self.base.options.target.cpu.arch, + offsets.items[0], + ); try self.resolveSymbolsInObject(object_id); continue :loop; diff --git a/src/link/MachO/Archive.zig b/src/link/MachO/Archive.zig index f02ad0cfa9..6959dbac89 100644 --- a/src/link/MachO/Archive.zig +++ b/src/link/MachO/Archive.zig @@ -215,8 +215,8 @@ fn parseTableOfContents(self: *Archive, allocator: *Allocator, reader: anytype) } } -pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object { - var reader = self.file.reader(); +pub fn parseObject(self: Archive, allocator: *Allocator, arch: Arch, offset: u32) !Object { + const reader = self.file.reader(); try reader.context.seekTo(offset + self.library_offset); const object_header = try reader.readStruct(ar_hdr); @@ -244,6 +244,7 @@ pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object .mtime = try self.header.?.date(), }; + try object.parse(allocator, arch); try reader.context.seekTo(0); return object;