authorgravatar for loic@gregoire.devLoïc Grégoire <loic@gregoire.dev> 2026-10-11 17:50:49-04:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-10-16 12:41:30+01:00
log626381706712eb593bcf0c843dd2275d71cf41da
treef01ced8ce7b6e1e255c2ae5ba14f6c105380b154
parentad039bd70c55b85122343ac41cfd104b32e2d211
signature Commit is signed but in an unrecognized format.

Elf2: align TLS section memsz

This was crashing on SPARC because it would do unaligned reads on the TLS section. Now align the memsz properly.

1 files changed, 6 insertions(+), 1 deletions(-)

src/link/Elf2.zig+6-1
...@@ -11906,7 +11906,12 @@ fn flushResized(elf: *Elf, ni: MappedFile.Node.Index) std.mem.Allocator.Error!vo...@@ -11906,7 +11906,12 @@ fn flushResized(elf: *Elf, ni: MappedFile.Node.Index) std.mem.Allocator.Error!vo
11906 const tls_vaddr = elf.targetLoad(&ph.vaddr);11906 const tls_vaddr = elf.targetLoad(&ph.vaddr);
11907 const tls_offset = elf.targetLoad(&ph.offset);11907 const tls_offset = elf.targetLoad(&ph.offset);
1190811908
11909 elf.targetStore(&ph.memsz, @intCast(tls_filesz + tbss_size));11909 const tls_memsz = std.mem.alignForward(
11910 u64,
11911 tls_filesz + tbss_size,
11912 elf.targetLoad(&ph.@"align"),
11913 );
11914 elf.targetStore(&ph.memsz, @intCast(tls_memsz));
1191011915
11911 elf.updateNobitsAddress(11916 elf.updateNobitsAddress(
11912 elf.shndx.tbss,11917 elf.shndx.tbss,