aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-02-21 20:58:43 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-02-21 20:58:43 +0100
commit60a8f9b989d64bb6dfbb9e85cd0dd4e1b41750e1 (patch)
tree5e62c44c20dc747fcbe2b798de5c965150fff8e5 /src/link/Elf.zig
parent775a161794c9486b7866b27d364acea1cb78b6cd (diff)
downloadzig-60a8f9b989d64bb6dfbb9e85cd0dd4e1b41750e1.tar.gz
zig-60a8f9b989d64bb6dfbb9e85cd0dd4e1b41750e1.zip
elf: make GOT arch aware when resolving relocs
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 7356429312..cd795eb345 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -5550,6 +5550,15 @@ pub fn comdatGroupOwner(self: *Elf, index: ComdatGroupOwner.Index) *ComdatGroupO
return &self.comdat_groups_owners.items[index];
}
+pub fn gotAddress(self: *Elf) u64 {
+ const shndx = blk: {
+ if (self.getTarget().cpu.arch == .x86_64 and self.got_plt_section_index != null)
+ break :blk self.got_plt_section_index.?;
+ break :blk if (self.got_section_index) |shndx| shndx else null;
+ };
+ return if (shndx) |index| self.shdrs.items[index].sh_addr else 0;
+}
+
pub fn tpAddress(self: *Elf) u64 {
const index = self.phdr_tls_index orelse return 0;
const phdr = self.phdrs.items[index];