diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-09-23 07:01:30 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-09-23 07:06:41 +0200 |
| commit | 7c2abff1e13f6172771c3fe36aa580cdaa56b11e (patch) | |
| tree | b6d6f74e28cc40b077fbd8831326c1bb46eb7709 | |
| parent | 6929a5f44026cec8162fe713668b02e0e02bdfcc (diff) | |
| download | zig-7c2abff1e13f6172771c3fe36aa580cdaa56b11e.tar.gz zig-7c2abff1e13f6172771c3fe36aa580cdaa56b11e.zip | |
elf: only allocate __dso_handle symbol if not found in any object
| -rw-r--r-- | src/link/Elf/LinkerDefined.zig | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/link/Elf/LinkerDefined.zig b/src/link/Elf/LinkerDefined.zig index 59aea19efa..c01dff49b8 100644 --- a/src/link/Elf/LinkerDefined.zig +++ b/src/link/Elf/LinkerDefined.zig @@ -47,7 +47,7 @@ fn newSymbolAssumeCapacity(self: *LinkerDefined, name_off: u32, elf_file: *Elf) const esym = self.symtab.addOneAssumeCapacity(); esym.* = .{ .st_name = name_off, - .st_info = elf.STB_GLOBAL << 4, + .st_info = elf.STB_WEAK << 4, .st_other = @intFromEnum(elf.STV.HIDDEN), .st_shndx = elf.SHN_ABS, .st_value = 0, @@ -255,8 +255,10 @@ pub fn allocateSymbols(self: *LinkerDefined, elf_file: *Elf) void { // __dso_handle if (self.dso_handle_index) |index| { - const shdr = shdrs[1]; - allocSymbol(self, index, shdr.sh_addr, 0, elf_file); + if (self.resolveSymbol(index, elf_file).file == self.index) { + const shdr = shdrs[1]; + allocSymbol(self, index, shdr.sh_addr, 0, elf_file); + } } // __GNU_EH_FRAME_HDR |
