summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Bertalan <dani@danielbertalan.dev>2023-04-20 18:04:58 +0200
committerAndreas Kling <kling@serenityos.org>2023-05-14 13:47:53 +0200
commitc4e0f5e5eed248fc06aabd8531b13f0440c8c9e0 (patch)
treef06f4e987bab8a9f98bf1f1b5ac19de915183381
parentb23a0b409d911a51c87dfc810e9e96555f4ccc0d (diff)
downloadserenity-c4e0f5e5eed248fc06aabd8531b13f0440c8c9e0.zip
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.
-rw-r--r--Userland/Libraries/LibC/elf.h1
-rw-r--r--Userland/Libraries/LibELF/DynamicLoader.cpp1
2 files changed, 2 insertions, 0 deletions
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())