zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0211d6bf4f0da9ebea91fe8378181f354b89f073 (tree)
parent e22b3595c1af232372ebf3c70922e86e6f9e9076
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Tue,  7 Nov 2023 14:42:27 +0100

elf: create link between .rela and output section

Diffstat:
Msrc/link/Elf.zig | 14+++++---------
Msrc/link/Elf/Object.zig | 1+
2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/link/Elf.zig b/src/link/Elf.zig @@ -3904,15 +3904,11 @@ fn sortShdrs(self: *Elf) !void { shdr.sh_info = self.plt_section_index.?; } - for (&[_]?u16{ - self.zig_text_rela_section_index, - self.zig_data_rel_ro_rela_section_index, - self.zig_data_rela_section_index, - }) |maybe_index| { - const index = maybe_index orelse continue; - const shdr = &self.shdrs.items[index]; - shdr.sh_link = self.symtab_section_index.?; - shdr.sh_info = backlinks[shdr.sh_info]; + for (self.shdrs.items) |*shdr| { + if (shdr.sh_type == elf.SHT_RELA and shdr.sh_flags & elf.SHF_INFO_LINK != 0) { + shdr.sh_link = self.symtab_section_index.?; + shdr.sh_info = backlinks[shdr.sh_info]; + } } { diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig @@ -668,6 +668,7 @@ pub fn initRelaSections(self: Object, elf_file: *Elf) !void { const out_shdr = &elf_file.shdrs.items[out_shndx]; out_shdr.sh_addralign = @alignOf(elf.Elf64_Rela); out_shdr.sh_entsize = @sizeOf(elf.Elf64_Rela); + out_shdr.sh_info = self.initOutputSection(elf_file, atom.inputShdr(elf_file)) catch unreachable; } }