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 {...@@ -3340,36 +3340,19 @@ fn collectExportData(self: *MachO, trie: *Trie) !void {
3340 const exec_segment = self.segments.items[self.header_segment_cmd_index.?];3340 const exec_segment = self.segments.items[self.header_segment_cmd_index.?];
3341 const base_address = exec_segment.vmaddr;3341 const base_address = exec_segment.vmaddr;
33423342
3343 if (self.base.options.output_mode == .Exe) {3343 for (self.globals.items) |global| {
3344 for (&[_]SymbolWithLoc{3344 const sym = self.getSymbol(global);
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);
33613345
3362 if (sym.undf()) continue;3346 if (sym.undf()) continue;
3363 if (!sym.ext()) continue;3347 if (!sym.ext()) continue;
33643348
3365 const sym_name = self.getSymbolName(global);3349 const sym_name = self.getSymbolName(global);
3366 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });3350 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
3367 try trie.put(gpa, .{3351 try trie.put(gpa, .{
3368 .name = sym_name,3352 .name = sym_name,
3369 .vmaddr_offset = sym.n_value - base_address,3353 .vmaddr_offset = sym.n_value - base_address,
3370 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,3354 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
3371 });3355 });
3372 }
3373 }3356 }
33743357
3375 try trie.finalize(gpa);3358 try trie.finalize(gpa);
src/link/MachO/zld.zig+1-3
...@@ -2158,9 +2158,7 @@ pub const Zld = struct {...@@ -2158,9 +2158,7 @@ pub const Zld = struct {
2158 try trie.finalize(gpa);2158 try trie.finalize(gpa);
2159 }2159 }
21602160
2161 fn writeDyldInfoData(2161 fn writeDyldInfoData(self: *Zld) !void {
2162 self: *Zld,
2163 ) !void {
2164 const gpa = self.gpa;2162 const gpa = self.gpa;
21652163
2166 var rebase = Rebase{};2164 var rebase = Rebase{};