From baea106b713a49b38f0b568c2cbbf02f3c48537b Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 2 Sep 2023 23:00:39 +0200 Subject: [PATCH] elf: mark dirty .symtab shdr after updating sh_info field --- src/link/Elf.zig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 1f3fbd4320..b039b8d761 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -3100,7 +3100,6 @@ fn elf32SymFromSym(sym: elf.Elf64_Sym, out: *elf.Elf32_Sym) void { fn writeSymbols(self: *Elf) !void { const gpa = self.base.allocator; - const shdr = &self.sections.items(.shdr)[self.symtab_section_index.?]; const sym_size: u64 = switch (self.ptr_width) { .p32 => @sizeOf(elf.Elf32_Sym), .p64 => @sizeOf(elf.Elf64_Sym), @@ -3109,7 +3108,11 @@ fn writeSymbols(self: *Elf) !void { .p32 => @alignOf(elf.Elf32_Sym), .p64 => @alignOf(elf.Elf64_Sym), }; + + const shdr = &self.sections.items(.shdr)[self.symtab_section_index.?]; shdr.sh_info = @intCast(self.local_symbols.items.len); + self.markDirty(self.symtab_section_index.?, null); + const nsyms = self.local_symbols.items.len + self.global_symbols.items.len; const needed_size = nsyms * sym_size; try self.growNonAllocSection(self.symtab_section_index.?, needed_size, sym_align, true);