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 @@ -31,6 +31,8 @@ ELFLdSt64Abs12, ELFLdSt128Abs12, ELFAbs64, + ELFPrel32, + ELFPrel64, ELFAdrGOTPage21, ELFLd64GOTLo12, }; Index: llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp =================================================================== --- llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp +++ llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp @@ -70,6 +70,10 @@ return ELFLdSt128Abs12; case ELF::R_AARCH64_ABS64: return ELFAbs64; + case ELF::R_AARCH64_PREL32: + return ELFPrel32; + case ELF::R_AARCH64_PREL64: + return ELFPrel64; case ELF::R_AARCH64_ADR_GOT_PAGE: return ELFAdrGOTPage21; case ELF::R_AARCH64_LD64_GOT_LO12_NC: @@ -202,6 +206,14 @@ Kind = aarch64::Pointer64; break; } + case ELFPrel32: { + Kind = aarch64::Delta32; + break; + } + case ELFPrel64: { + Kind = aarch64::Delta64; + break; + } case ELFAdrGOTPage21: { Kind = aarch64::GOTPage21; break; @@ -346,6 +358,10 @@ return "ELFLdSt128Abs12"; case ELFAbs64: return "ELFAbs64"; + case ELFPrel32: + return "ELFPrel32"; + case ELFPrel64: + return "ELFPrel64"; case ELFAdrGOTPage21: return "ELFAdrGOTPage21"; case ELFLd64GOTLo12: Index: llvm/test/ExecutionEngine/JITLink/AArch64/ELF_aarch64_ehframe.test =================================================================== --- /dev/null +++ llvm/test/ExecutionEngine/JITLink/AArch64/ELF_aarch64_ehframe.test @@ -0,0 +1,61 @@ +# RUN: rm -rf %t && mkdir -p %t +# RUN: yaml2obj -o %t/eh_frame.o %s +# RUN: llvm-jitlink -noexec -check %s %t/eh_frame.o + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_AARCH64 + SectionHeaderStringTable: .strtab +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x4 + Content: E0031F2AC0035FD6 + - Name: .eh_frame + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + AddressAlign: 0x8 + Content: 1000000000000000017A5200017C1E011B0C1F001000000018000000000000000800000000000000 + - Name: .rela.eh_frame + Type: SHT_RELA + Flags: [ SHF_INFO_LINK ] + Link: .symtab + AddressAlign: 0x8 + Info: .eh_frame + Relocations: + - Offset: 0x1C + Symbol: text + Type: R_AARCH64_PREL32 + - Offset: 0x20 + Symbol: text + Type: R_AARCH64_PREL64 + - Type: SectionHeaderTable + Sections: + - Name: .strtab + - Name: .text + - Name: .eh_frame + - Name: .rela.eh_frame + - Name: .symtab +Symbols: + - Name: text + Type: STT_SECTION + Binding: STB_GLOBAL + Section: .text + Size: 0x8 + - Name: eh_frame + Type: STT_SECTION + Binding: STB_GLOBAL + Section: .eh_frame + Size: 0x28 + - Name: main + Type: STT_FUNC + Section: .text + Binding: STB_GLOBAL + Size: 0x8 + +# jitlink-check: *{4}(eh_frame + 28) = text - eh_frame - 28 +# jitlink-check: *{8}(eh_frame + 32) = text - eh_frame - 32 \ No newline at end of file