[llvm] Draft: [bolt][aarch64] Add P32_ABS16/32 relocations (PR #143773)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 11 12:42:59 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Alexey Moksyakov (yavtuk)
<details>
<summary>Changes</summary>
Added few relocations for quick checking
---
Full diff: https://github.com/llvm/llvm-project/pull/143773.diff
2 Files Affected:
- (modified) bolt/lib/Core/Relocation.cpp (+10)
- (modified) bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp (+2)
``````````diff
diff --git a/bolt/lib/Core/Relocation.cpp b/bolt/lib/Core/Relocation.cpp
index f099dfa46f3d4..c189dbe8f49fd 100644
--- a/bolt/lib/Core/Relocation.cpp
+++ b/bolt/lib/Core/Relocation.cpp
@@ -87,7 +87,9 @@ static bool isSupportedAArch64(uint32_t Type) {
case ELF::R_AARCH64_PREL32:
case ELF::R_AARCH64_PREL64:
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_ABS64:
case ELF::R_AARCH64_MOVW_UABS_G0:
case ELF::R_AARCH64_MOVW_UABS_G0_NC:
@@ -167,6 +169,7 @@ static size_t getSizeForTypeAArch64(uint32_t Type) {
errs() << object::getELFRelocationTypeName(ELF::EM_AARCH64, Type) << '\n';
llvm_unreachable("unsupported relocation type");
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_PREL16:
return 2;
case ELF::R_AARCH64_CALL26:
@@ -204,6 +207,7 @@ static size_t getSizeForTypeAArch64(uint32_t Type) {
case ELF::R_AARCH64_MOVW_UABS_G2_NC:
case ELF::R_AARCH64_MOVW_UABS_G3:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_PLT32:
return 4;
case ELF::R_AARCH64_ABS64:
@@ -290,7 +294,9 @@ static uint64_t encodeValueAArch64(uint32_t Type, uint64_t Value, uint64_t PC) {
default:
llvm_unreachable("unsupported relocation");
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_ABS64:
break;
case ELF::R_AARCH64_PREL16:
@@ -352,7 +358,9 @@ static uint64_t extractValueAArch64(uint32_t Type, uint64_t Contents,
errs() << object::getELFRelocationTypeName(ELF::EM_AARCH64, Type) << '\n';
llvm_unreachable("unsupported relocation type");
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_ABS64:
return Contents;
case ELF::R_AARCH64_PREL16:
@@ -643,7 +651,9 @@ static bool isPCRelativeAArch64(uint32_t Type) {
default:
llvm_unreachable("Unknown relocation type");
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_ABS64:
case ELF::R_AARCH64_LDST64_ABS_LO12_NC:
case ELF::R_AARCH64_ADD_ABS_LO12_NC:
diff --git a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
index eb1d9d8a19514..f12ff033ca3ff 100644
--- a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
+++ b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
@@ -2244,7 +2244,9 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
switch (RelType) {
case ELF::R_AARCH64_ABS64:
case ELF::R_AARCH64_ABS32:
+ case ELF::R_AARCH64_P32_ABS32:
case ELF::R_AARCH64_ABS16:
+ case ELF::R_AARCH64_P32_ABS16:
case ELF::R_AARCH64_ADD_ABS_LO12_NC:
case ELF::R_AARCH64_ADR_GOT_PAGE:
case ELF::R_AARCH64_ADR_PREL_LO21:
``````````
</details>
https://github.com/llvm/llvm-project/pull/143773
More information about the llvm-commits
mailing list