aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-11-07 14:42:27 +0100
committerJakub Konka <kubkon@jakubkonka.com>2023-11-07 14:42:27 +0100
commit0211d6bf4f0da9ebea91fe8378181f354b89f073 (patch)
tree382c8780f350eb8cbb0fdb8ad6dae6d7d82c4ee9 /src
parente22b3595c1af232372ebf3c70922e86e6f9e9076 (diff)
downloadzig-0211d6bf4f0da9ebea91fe8378181f354b89f073.tar.gz
zig-0211d6bf4f0da9ebea91fe8378181f354b89f073.zip
elf: create link between .rela and output section
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig14
-rw-r--r--src/link/Elf/Object.zig1
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;
}
}