aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-03-07 22:55:15 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-03-08 22:46:17 +0100
commit69f9f359dd5107cd071f3801a6824336b5d2bce6 (patch)
treeb3ec4b09df5aba595a7a840db4ce82a4df163638 /src/link
parent0af5d2e9b6393de460106f9f53a68374e636087a (diff)
downloadzig-69f9f359dd5107cd071f3801a6824336b5d2bce6.tar.gz
zig-69f9f359dd5107cd071f3801a6824336b5d2bce6.zip
elf+aarch64: use correctly offset tp address
Diffstat (limited to 'src/link')
-rw-r--r--src/link/Elf.zig10
1 files 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 {