From c4e0f5e5eed248fc06aabd8531b13f0440c8c9e0 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Thu, 20 Apr 2023 18:04:58 +0200 Subject: [PATCH] LibC+LibELF: Handle the R_AARCH64_IRELATIVE relocation type This is the AArch64 equivalent of `R_X86_64_IRELATIVE`, which specifies a symbol whose address is determined by calling a local IFUNC resolver function. --- Userland/Libraries/LibC/elf.h | 1 + Userland/Libraries/LibELF/DynamicLoader.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/Userland/Libraries/LibC/elf.h b/Userland/Libraries/LibC/elf.h index b5baecd142..bc5f9c5f6d 100644 --- a/Userland/Libraries/LibC/elf.h +++ b/Userland/Libraries/LibC/elf.h @@ -827,3 +827,4 @@ struct elf_args { #define R_AARCH64_JUMP_SLOT 1026 #define R_AARCH64_RELATIVE 1027 #define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_IRELATIVE 1032 diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp index b62c54f253..98711e9ef0 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.cpp +++ b/Userland/Libraries/LibELF/DynamicLoader.cpp @@ -581,6 +581,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO } break; } + case R_AARCH64_IRELATIVE: case R_X86_64_IRELATIVE: { VirtualAddress resolver; if (relocation.addend_used())