| ... | @@ -5572,11 +5572,17 @@ pub fn gotAddress(self: *Elf) u64 { | ... | @@ -5572,11 +5572,17 @@ pub fn gotAddress(self: *Elf) u64 { |
| 5572 | pub fn tpAddress(self: *Elf) u64 { | 5572 | pub fn tpAddress(self: *Elf) u64 { |
| 5573 | const index = self.phdr_tls_index orelse return 0; | 5573 | const index = self.phdr_tls_index orelse return 0; |
| 5574 | const phdr = self.phdrs.items[index]; | 5574 | const phdr = self.phdrs.items[index]; |
| 5575 | return mem.alignForward(u64, phdr.p_vaddr + phdr.p_memsz, phdr.p_align); | 5575 | return switch (self.getTarget().cpu.arch) { |
| | 5576 | .x86_64 => mem.alignForward(u64, phdr.p_vaddr + phdr.p_memsz, phdr.p_align), |
| | 5577 | .aarch64 => mem.alignBackward(u64, phdr.p_vaddr - 16, phdr.p_align), |
| | 5578 | else => @panic("TODO implement getTpAddress for this arch"), |
| | 5579 | }; |
| 5576 | } | 5580 | } |
| 5577 | | 5581 | |
| 5578 | pub fn dtpAddress(self: *Elf) u64 { | 5582 | pub fn dtpAddress(self: *Elf) u64 { |
| 5579 | return self.tlsAddress(); | 5583 | const index = self.phdr_tls_index orelse return 0; |
| | 5584 | const phdr = self.phdrs.items[index]; |
| | 5585 | return phdr.p_vaddr; |
| 5580 | } | 5586 | } |
| 5581 | | 5587 | |
| 5582 | pub fn tlsAddress(self: *Elf) u64 { | 5588 | pub fn tlsAddress(self: *Elf) u64 { |