aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-04-16 20:40:55 +0200
committerJakub Konka <kubkon@jakubkonka.com>2024-04-20 23:36:41 +0200
commitb5a781d19d3de1a50cbefe0df6f42a6ac8a05299 (patch)
tree524d95190b9417131b8a8132ce03e92f725d12db /src
parent65492b3d5276d7a57f696fdc4da4d47f36909715 (diff)
downloadzig-b5a781d19d3de1a50cbefe0df6f42a6ac8a05299.tar.gz
zig-b5a781d19d3de1a50cbefe0df6f42a6ac8a05299.zip
link/elf: fix generating invalid section symbol index for merged sections
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 73082ab5f3..dd42de37df 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -5104,8 +5104,9 @@ pub fn sectionSymbolOutputSymtabIndex(self: Elf, shndx: u32) u32 {
if (self.eh_frame_section_index) |index| {
if (index == shndx) return @intCast(self.output_sections.keys().len + 1);
}
- for (self.merge_sections.items, 1..) |msec, index| {
- if (msec.output_section_index == shndx) return @intCast(self.output_sections.keys().len + 1 + index);
+ const base: usize = if (self.eh_frame_section_index == null) 0 else 1;
+ for (self.merge_sections.items, 0..) |msec, index| {
+ if (msec.output_section_index == shndx) return @intCast(self.output_sections.keys().len + 1 + index + base);
}
return @intCast(self.output_sections.getIndex(shndx).? + 1);
}