diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-04-13 17:12:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-13 17:12:26 +0200 |
| commit | 36a33c99e3bc0825ada2ce1b374c32b4d6dee6b0 (patch) | |
| tree | d94b91c8915261eb8bb239a9b7d2b846fc1bcd27 /src | |
| parent | a5bbc66f10339cb2e17ef996ef097b696980595a (diff) | |
| parent | 461543a5fd27415710f027d034b83ef196bc8a44 (diff) | |
| download | zig-36a33c99e3bc0825ada2ce1b374c32b4d6dee6b0.tar.gz zig-36a33c99e3bc0825ada2ce1b374c32b4d6dee6b0.zip | |
Merge pull request #8517 from ziglang/zld-archive-fix
zld: fix symbol resolution from interdependent static archives
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/MachO/Zld.zig | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index 56a35a3bca..ae475ab30d 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -1284,17 +1284,14 @@ fn resolveSymbols(self: *Zld) !void { } // Second pass, resolve symbols in static libraries. - var next: usize = 0; - var hit: bool = undefined; - while (true) { - var archive = &self.archives.items[next]; - hit = false; - - for (self.symtab.items()) |entry| { - if (entry.value.tag != .undef) continue; - - const sym_name = entry.value.name; - + var next_sym: usize = 0; + var nsyms: usize = self.symtab.items().len; + while (next_sym < nsyms) : (next_sym += 1) { + const sym = self.symtab.items()[next_sym]; + if (sym.value.tag != .undef) continue; + + const sym_name = sym.value.name; + for (self.archives.items) |archive| { // Check if the entry exists in a static archive. const offsets = archive.toc.get(sym_name) orelse { // No hit. @@ -1307,18 +1304,9 @@ fn resolveSymbols(self: *Zld) !void { try self.objects.append(self.allocator, object); try self.resolveSymbolsInObject(object_id); - hit = true; + nsyms = self.symtab.items().len; break; } - - if (!hit) { - // Next archive. - next += 1; - if (next == self.archives.items.len) { - break; - } - archive = &self.archives.items[next]; - } } // Third pass, resolve symbols in dynamic libraries. |
