diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-07 14:42:27 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-07 14:42:27 +0100 |
| commit | 0211d6bf4f0da9ebea91fe8378181f354b89f073 (patch) | |
| tree | 382c8780f350eb8cbb0fdb8ad6dae6d7d82c4ee9 /src | |
| parent | e22b3595c1af232372ebf3c70922e86e6f9e9076 (diff) | |
| download | zig-0211d6bf4f0da9ebea91fe8378181f354b89f073.tar.gz zig-0211d6bf4f0da9ebea91fe8378181f354b89f073.zip | |
elf: create link between .rela and output section
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/Elf.zig | 14 | ||||
| -rw-r--r-- | src/link/Elf/Object.zig | 1 |
2 files changed, 6 insertions, 9 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index f38152fa27..0f03e91668 100644 --- 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 index a2a551ed6a..fa9aac3c43 100644 --- 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; } } |
