Index: llvm/include/llvm/ExecutionEngine/JITLink/ELF_aarch64.h =================================================================== --- llvm/include/llvm/ExecutionEngine/JITLink/ELF_aarch64.h +++ llvm/include/llvm/ExecutionEngine/JITLink/ELF_aarch64.h @@ -23,6 +23,8 @@ namespace ELF_aarch64_Edges { enum ELFAArch64RelocationKind : Edge::Kind { ELFBranch26 = Edge::FirstRelocation, + ELFPage21, + ELFPageOffset12, }; } // namespace ELF_aarch64_Edges Index: llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp =================================================================== --- llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp +++ llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp @@ -51,6 +51,10 @@ switch (Type) { case ELF::R_AARCH64_CALL26: return ELF_aarch64_Edges::ELFBranch26; + case ELF::R_AARCH64_ADR_PREL_PG_HI21: + return ELF_aarch64_Edges::ELFPage21; + case ELF::R_AARCH64_ADD_ABS_LO12_NC: + return ELF_aarch64_Edges::ELFPageOffset12; } return make_error("Unsupported aarch64 relocation:" + @@ -107,6 +111,14 @@ Kind = aarch64::Branch26; break; } + case ELFPage21: { + Kind = aarch64::Page21; + break; + } + case ELFPageOffset12: { + Kind = aarch64::PageOffset12; + break; + } }; Edge GE(Kind, Offset, *GraphSymbol, Addend); @@ -168,6 +180,10 @@ switch (R) { case ELF_aarch64_Edges::ELFBranch26: return "ELFBranch26"; + case ELF_aarch64_Edges::ELFPage21: + return "ELFPage21"; + case ELF_aarch64_Edges::ELFPageOffset12: + return "ELFPageOffset12"; default: return getGenericEdgeKindName(static_cast(R)); }