authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-21 16:12:25+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-21 16:12:25+01:00
logdc98009e36a344f8d0330af6b9e9226a2ba6a474
treeebb3a22b96a6cc9bafba13ca73fe83dce023da6b
parentcb34d6f4362c8f5d806c0d0b328ea29e877d5c5f

macho+zld: save all defined globals in the export trie


1 files changed, 11 insertions(+), 28 deletions(-)

src/link/MachO/zld.zig+11-28
...@@ -2141,35 +2141,18 @@ pub const Zld = struct {...@@ -2141,35 +2141,18 @@ pub const Zld = struct {
2141 const exec_segment = self.segments.items[segment_index];2141 const exec_segment = self.segments.items[segment_index];
2142 const base_address = exec_segment.vmaddr;2142 const base_address = exec_segment.vmaddr;
21432143
2144 if (self.options.output_mode == .Exe) {2144 for (self.globals.items) |global| {
2145 for (&[_]SymbolWithLoc{2145 const sym = self.getSymbol(global);
2146 self.getEntryPoint(),2146 if (sym.undf()) continue;
2147 self.globals.items[self.mh_execute_header_index.?],2147 if (sym.n_desc == N_DEAD) continue;
2148 }) |global| {
2149 const sym = self.getSymbol(global);
2150 const sym_name = self.getSymbolName(global);
2151 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
2152 try trie.put(gpa, .{
2153 .name = sym_name,
2154 .vmaddr_offset = sym.n_value - base_address,
2155 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
2156 });
2157 }
2158 } else {
2159 assert(self.options.output_mode == .Lib);
2160 for (self.globals.items) |global| {
2161 const sym = self.getSymbol(global);
2162 if (sym.undf()) continue;
2163 if (sym.n_desc == N_DEAD) continue;
21642148
2165 const sym_name = self.getSymbolName(global);2149 const sym_name = self.getSymbolName(global);
2166 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });2150 log.debug(" (putting '{s}' defined at 0x{x})", .{ sym_name, sym.n_value });
2167 try trie.put(gpa, .{2151 try trie.put(gpa, .{
2168 .name = sym_name,2152 .name = sym_name,
2169 .vmaddr_offset = sym.n_value - base_address,2153 .vmaddr_offset = sym.n_value - base_address,
2170 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,2154 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
2171 });2155 });
2172 }
2173 }2156 }
21742157
2175 try trie.finalize(gpa);2158 try trie.finalize(gpa);