From 69f9f359dd5107cd071f3801a6824336b5d2bce6 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Thu, 7 Mar 2024 22:55:15 +0100 Subject: [PATCH] elf+aarch64: use correctly offset tp address --- src/link/Elf.zig | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index ce4075a0ea..12f02f9761 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -5572,11 +5572,17 @@ pub fn gotAddress(self: *Elf) u64 { pub fn tpAddress(self: *Elf) u64 { const index = self.phdr_tls_index orelse return 0; const phdr = self.phdrs.items[index]; - return mem.alignForward(u64, phdr.p_vaddr + phdr.p_memsz, phdr.p_align); + return switch (self.getTarget().cpu.arch) { + .x86_64 => mem.alignForward(u64, phdr.p_vaddr + phdr.p_memsz, phdr.p_align), + .aarch64 => mem.alignBackward(u64, phdr.p_vaddr - 16, phdr.p_align), + else => @panic("TODO implement getTpAddress for this arch"), + }; } pub fn dtpAddress(self: *Elf) u64 { - return self.tlsAddress(); + const index = self.phdr_tls_index orelse return 0; + const phdr = self.phdrs.items[index]; + return phdr.p_vaddr; } pub fn tlsAddress(self: *Elf) u64 {