| ... | @@ -1268,6 +1268,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod | ... | @@ -1268,6 +1268,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod |
| 1268 | self.linker_defined_index = index; | 1268 | self.linker_defined_index = index; |
| 1269 | const object = self.linkerDefinedPtr().?; | 1269 | const object = self.linkerDefinedPtr().?; |
| 1270 | try object.init(gpa); | 1270 | try object.init(gpa); |
| | 1271 | try object.initSymbols(self); |
| 1271 | } | 1272 | } |
| 1272 | | 1273 | |
| 1273 | // Now, we are ready to resolve the symbols across all input files. | 1274 | // Now, we are ready to resolve the symbols across all input files. |
| ... | @@ -1276,9 +1277,6 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod | ... | @@ -1276,9 +1277,6 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod |
| 1276 | // Any qualifing unresolved symbol will be upgraded to an absolute, weak | 1277 | // Any qualifing unresolved symbol will be upgraded to an absolute, weak |
| 1277 | // symbol for potential resolution at load-time. | 1278 | // symbol for potential resolution at load-time. |
| 1278 | try self.resolveSymbols(); | 1279 | try self.resolveSymbols(); |
| 1279 | if (self.linkerDefinedPtr()) |obj| { | | |
| 1280 | try obj.initSymbols(self); | | |
| 1281 | } | | |
| 1282 | self.markEhFrameAtomsDead(); | 1280 | self.markEhFrameAtomsDead(); |
| 1283 | try self.resolveMergeSections(); | 1281 | try self.resolveMergeSections(); |
| 1284 | | 1282 | |
| ... | @@ -1928,6 +1926,7 @@ pub fn resolveSymbols(self: *Elf) !void { | ... | @@ -1928,6 +1926,7 @@ pub fn resolveSymbols(self: *Elf) !void { |
| 1928 | // Resolve symbols on the set of all objects and shared objects (even if some are unneeded). | 1926 | // Resolve symbols on the set of all objects and shared objects (even if some are unneeded). |
| 1929 | for (self.objects.items) |index| self.file(index).?.resolveSymbols(self); | 1927 | for (self.objects.items) |index| self.file(index).?.resolveSymbols(self); |
| 1930 | for (self.shared_objects.items) |index| self.file(index).?.resolveSymbols(self); | 1928 | for (self.shared_objects.items) |index| self.file(index).?.resolveSymbols(self); |
| | 1929 | if (self.linkerDefinedPtr()) |obj| obj.asFile().resolveSymbols(self); |
| 1931 | | 1930 | |
| 1932 | // Mark live objects. | 1931 | // Mark live objects. |
| 1933 | self.markLive(); | 1932 | self.markLive(); |
| ... | @@ -1936,6 +1935,7 @@ pub fn resolveSymbols(self: *Elf) !void { | ... | @@ -1936,6 +1935,7 @@ pub fn resolveSymbols(self: *Elf) !void { |
| 1936 | if (self.zigObjectPtr()) |zig_object| zig_object.asFile().resetGlobals(self); | 1935 | if (self.zigObjectPtr()) |zig_object| zig_object.asFile().resetGlobals(self); |
| 1937 | for (self.objects.items) |index| self.file(index).?.resetGlobals(self); | 1936 | for (self.objects.items) |index| self.file(index).?.resetGlobals(self); |
| 1938 | for (self.shared_objects.items) |index| self.file(index).?.resetGlobals(self); | 1937 | for (self.shared_objects.items) |index| self.file(index).?.resetGlobals(self); |
| | 1938 | if (self.linkerDefinedPtr()) |obj| obj.asFile().resetGlobals(self); |
| 1939 | | 1939 | |
| 1940 | // Prune dead objects and shared objects. | 1940 | // Prune dead objects and shared objects. |
| 1941 | var i: usize = 0; | 1941 | var i: usize = 0; |
| ... | @@ -1968,9 +1968,10 @@ pub fn resolveSymbols(self: *Elf) !void { | ... | @@ -1968,9 +1968,10 @@ pub fn resolveSymbols(self: *Elf) !void { |
| 1968 | } | 1968 | } |
| 1969 | | 1969 | |
| 1970 | // Re-resolve the symbols. | 1970 | // Re-resolve the symbols. |
| 1971 | if (self.zigObjectPtr()) |zig_object| zig_object.resolveSymbols(self); | 1971 | if (self.zigObjectPtr()) |zig_object| zig_object.asFile().resolveSymbols(self); |
| 1972 | for (self.objects.items) |index| self.file(index).?.resolveSymbols(self); | 1972 | for (self.objects.items) |index| self.file(index).?.resolveSymbols(self); |
| 1973 | for (self.shared_objects.items) |index| self.file(index).?.resolveSymbols(self); | 1973 | for (self.shared_objects.items) |index| self.file(index).?.resolveSymbols(self); |
| | 1974 | if (self.linkerDefinedPtr()) |obj| obj.asFile().resolveSymbols(self); |
| 1974 | } | 1975 | } |
| 1975 | | 1976 | |
| 1976 | /// Traverses all objects and shared objects marking any object referenced by | 1977 | /// Traverses all objects and shared objects marking any object referenced by |