aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-03-08 14:32:47 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-03-08 22:46:17 +0100
commitb5642b4f85e7962ee7eb3d137e47fadf392a865b (patch)
tree73bfdff3bd2df798efd6f0f307279ba8a12c90ef /src/link/Elf.zig
parentd9069cbe2cf88634eb556b3063ede5af4a5cced4 (diff)
downloadzig-b5642b4f85e7962ee7eb3d137e47fadf392a865b.tar.gz
zig-b5642b4f85e7962ee7eb3d137e47fadf392a865b.zip
elf+aarch64: set _GLOBAL_OFFSET_TABLE_ to .got section
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 78cc434b2f..b18e97a556 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -3170,11 +3170,20 @@ fn allocateLinkerDefinedSymbols(self: *Elf) void {
}
// _GLOBAL_OFFSET_TABLE_
- if (self.got_plt_section_index) |shndx| {
- const shdr = &self.shdrs.items[shndx];
- const symbol_ptr = self.symbol(self.got_index.?);
- symbol_ptr.value = shdr.sh_addr;
- symbol_ptr.output_section_index = shndx;
+ if (self.getTarget().cpu.arch == .x86_64) {
+ if (self.got_plt_section_index) |shndx| {
+ const shdr = self.shdrs.items[shndx];
+ const sym = self.symbol(self.got_index.?);
+ sym.value = shdr.sh_addr;
+ sym.output_section_index = shndx;
+ }
+ } else {
+ if (self.got_section_index) |shndx| {
+ const shdr = self.shdrs.items[shndx];
+ const sym = self.symbol(self.got_index.?);
+ sym.value = shdr.sh_addr;
+ sym.output_section_index = shndx;
+ }
}
// _PROCEDURE_LINKAGE_TABLE_