authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-21 21:31:24+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-21 21:31:24+01:00
log8bffe87e9eeaf602d06eec60dffc955a86228fbd
tree29c19709eaf820c53ea7b1481f430157bd2897e3
parent1be86218153ae77109d785aafb29430f787adefd

macho: collect all exports into the export trie


2 files changed, 12 insertions(+), 31 deletions(-)

src/link/MachO.zig+11-28
......@@ -3340,36 +3340,19 @@ fn collectExportData(self: *MachO, trie: *Trie) !void {
33403340 const exec_segment = self.segments.items[self.header_segment_cmd_index.?];
33413341 const base_address = exec_segment.vmaddr;
33423342
3343 if (self.base.options.output_mode == .Exe) {
3344 for (&[_]SymbolWithLoc{
3345 try self.getEntryPoint(),
3346 self.getGlobal("__mh_execute_header").?,
3347 }) |global| {
3348 const sym = self.getSymbol(global);
3349 const sym_name = self.getSymbolName(global);
3350 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
3351 try trie.put(gpa, .{
3352 .name = sym_name,
3353 .vmaddr_offset = sym.n_value - base_address,
3354 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
3355 });
3356 }
3357 } else {
3358 assert(self.base.options.output_mode == .Lib);
3359 for (self.globals.items) |global| {
3360 const sym = self.getSymbol(global);
3343 for (self.globals.items) |global| {
3344 const sym = self.getSymbol(global);
33613345
3362 if (sym.undf()) continue;
3363 if (!sym.ext()) continue;
3346 if (sym.undf()) continue;
3347 if (!sym.ext()) continue;
33643348
3365 const sym_name = self.getSymbolName(global);
3366 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
3367 try trie.put(gpa, .{
3368 .name = sym_name,
3369 .vmaddr_offset = sym.n_value - base_address,
3370 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
3371 });
3372 }
3349 const sym_name = self.getSymbolName(global);
3350 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
3351 try trie.put(gpa, .{
3352 .name = sym_name,
3353 .vmaddr_offset = sym.n_value - base_address,
3354 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
3355 });
33733356 }
33743357
33753358 try trie.finalize(gpa);
src/link/MachO/zld.zig+1-3
......@@ -2158,9 +2158,7 @@ pub const Zld = struct {
21582158 try trie.finalize(gpa);
21592159 }
21602160
2161 fn writeDyldInfoData(
2162 self: *Zld,
2163 ) !void {
2161 fn writeDyldInfoData(self: *Zld) !void {
21642162 const gpa = self.gpa;
21652163
21662164 var rebase = Rebase{};