authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-09-26 21:22:53+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-10-09 12:27:30-07:00
logbae3dbffdf7a0b00f7e6c9100a8fedf62ced4701
tree2ef5b29016db668cc3986a77eb4e72a604c3a555
parentbc7e0342b52a24a1052721396dfa88cd86e1304b

elf: clear dynamic relocs before repopulating


1 files changed, 4 insertions(+), 0 deletions(-)

src/link/Elf.zig+4
...@@ -4269,6 +4269,8 @@ fn writeSyntheticSections(self: *Elf) !void {...@@ -4269,6 +4269,8 @@ fn writeSyntheticSections(self: *Elf) !void {
4269 }4269 }
42704270
4271 if (self.rela_dyn_section_index) |shndx| {4271 if (self.rela_dyn_section_index) |shndx| {
4272 // TODO: would state tracking be more appropriate here? perhaps even custom relocation type?
4273 self.rela_dyn.clearRetainingCapacity();
4272 const shdr = slice.items(.shdr)[shndx];4274 const shdr = slice.items(.shdr)[shndx];
4273 try self.got.addRela(self);4275 try self.got.addRela(self);
4274 try self.copy_rel.addRela(self);4276 try self.copy_rel.addRela(self);
...@@ -4301,6 +4303,8 @@ fn writeSyntheticSections(self: *Elf) !void {...@@ -4301,6 +4303,8 @@ fn writeSyntheticSections(self: *Elf) !void {
4301 }4303 }
43024304
4303 if (self.rela_plt_section_index) |shndx| {4305 if (self.rela_plt_section_index) |shndx| {
4306 // TODO: would state tracking be more appropriate here? perhaps even custom relocation type?
4307 self.rela_plt.clearRetainingCapacity();
4304 const shdr = slice.items(.shdr)[shndx];4308 const shdr = slice.items(.shdr)[shndx];
4305 try self.plt.addRela(self);4309 try self.plt.addRela(self);
4306 try self.base.file.?.pwriteAll(mem.sliceAsBytes(self.rela_plt.items), shdr.sh_offset);4310 try self.base.file.?.pwriteAll(mem.sliceAsBytes(self.rela_plt.items), shdr.sh_offset);