authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-07-31 16:06:50+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-08-01 09:06:56+02:00
log2e30bf23aa4515682038bc69ffc0b7d06b734be9
tree398094ba11df0ba0b771b705195766b541090619
parent0b15ba8334bc03b59a975e579aac01a6b3fc2109

macho: cleanup extracting objects from archives


2 files changed, 8 insertions(+), 4 deletions(-)

src/link/MachO.zig+5-2
...@@ -2231,8 +2231,11 @@ fn resolveSymbols(self: *MachO) !void {...@@ -2231,8 +2231,11 @@ fn resolveSymbols(self: *MachO) !void {
22312231
2232 const object_id = @intCast(u16, self.objects.items.len);2232 const object_id = @intCast(u16, self.objects.items.len);
2233 const object = try self.objects.addOne(self.base.allocator);2233 const object = try self.objects.addOne(self.base.allocator);
2234 object.* = try archive.extractObject(self.base.allocator, offsets.items[0]);2234 object.* = try archive.parseObject(
2235 try object.parse(self.base.allocator, self.base.options.target.cpu.arch);2235 self.base.allocator,
2236 self.base.options.target.cpu.arch,
2237 offsets.items[0],
2238 );
2236 try self.resolveSymbolsInObject(object_id);2239 try self.resolveSymbolsInObject(object_id);
22372240
2238 continue :loop;2241 continue :loop;
src/link/MachO/Archive.zig+3-2
...@@ -215,8 +215,8 @@ fn parseTableOfContents(self: *Archive, allocator: *Allocator, reader: anytype)...@@ -215,8 +215,8 @@ fn parseTableOfContents(self: *Archive, allocator: *Allocator, reader: anytype)
215 }215 }
216}216}
217217
218pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object {218pub fn parseObject(self: Archive, allocator: *Allocator, arch: Arch, offset: u32) !Object {
219 var reader = self.file.reader();219 const reader = self.file.reader();
220 try reader.context.seekTo(offset + self.library_offset);220 try reader.context.seekTo(offset + self.library_offset);
221221
222 const object_header = try reader.readStruct(ar_hdr);222 const object_header = try reader.readStruct(ar_hdr);
...@@ -244,6 +244,7 @@ pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object...@@ -244,6 +244,7 @@ pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object
244 .mtime = try self.header.?.date(),244 .mtime = try self.header.?.date(),
245 };245 };
246246
247 try object.parse(allocator, arch);
247 try reader.context.seekTo(0);248 try reader.context.seekTo(0);
248249
249 return object;250 return object;