diff options
| -rw-r--r-- | src/link/Elf.zig | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 41fe3de0e9..2d6bade67d 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -3367,6 +3367,28 @@ fn resetShdrIndexes(self: *Elf, backlinks: []const u32) void { } } + for (self.merge_sections.items) |*msec| { + msec.output_section_index = backlinks[msec.output_section_index]; + } + + for (self.sections.items(.shdr)) |*shdr| { + if (shdr.sh_type != elf.SHT_RELA) continue; + shdr.sh_link = backlinks[shdr.sh_link]; + shdr.sh_info = backlinks[shdr.sh_info]; + } + + if (self.zigObjectPtr()) |zo| { + for (zo.atoms_indexes.items) |atom_index| { + const atom_ptr = zo.atom(atom_index) orelse continue; + atom_ptr.output_section_index = backlinks[atom_ptr.output_section_index]; + } + if (zo.dwarf) |*dwarf| dwarf.reloadSectionMetadata(); + } + + for (self.comdat_group_sections.items) |*cg| { + cg.shndx = backlinks[cg.shndx]; + } + if (self.symtab_section_index) |index| { const shdr = &self.sections.items(.shdr)[index]; shdr.sh_link = self.strtab_section_index.?; @@ -3418,28 +3440,6 @@ fn resetShdrIndexes(self: *Elf, backlinks: []const u32) void { shdr.sh_link = self.symtab_section_index.?; shdr.sh_info = self.eh_frame_section_index.?; } - - for (self.merge_sections.items) |*msec| { - msec.output_section_index = backlinks[msec.output_section_index]; - } - - for (self.sections.items(.shdr)) |*shdr| { - if (shdr.sh_type != elf.SHT_RELA) continue; - shdr.sh_link = backlinks[shdr.sh_link]; - shdr.sh_info = backlinks[shdr.sh_info]; - } - - if (self.zigObjectPtr()) |zo| { - for (zo.atoms_indexes.items) |atom_index| { - const atom_ptr = zo.atom(atom_index) orelse continue; - atom_ptr.output_section_index = backlinks[atom_ptr.output_section_index]; - } - if (zo.dwarf) |*dwarf| dwarf.reloadSectionMetadata(); - } - - for (self.comdat_group_sections.items) |*cg| { - cg.shndx = backlinks[cg.shndx]; - } } fn updateSectionSizes(self: *Elf) !void { |
