From e2fceec2fd15b7b74617816ddd87f456c42bbc45 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 22 Oct 2020 22:42:03 -0700 Subject: [PATCH] [JITLink][ELF] Add support for ELF::R_X86_64_REX_GOTPCRELX relocation. No support for relaxation yet -- this will always use the GOT entry. --- .../ExecutionEngine/JITLink/ELF_x86_64.cpp | 1 + .../JITLink/X86/ELF_x86-64_relocations.s | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp index 40c7d04378e5..c3498935bd2d 100644 --- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp @@ -232,6 +232,7 @@ private: case ELF::R_X86_64_64: return ELF_x86_64_Edges::ELFX86RelocationKind::Pointer64; case ELF::R_X86_64_GOTPCREL: + case ELF::R_X86_64_REX_GOTPCRELX: return ELF_x86_64_Edges::ELFX86RelocationKind::PCRel32GOTLoad; } return make_error("Unsupported x86-64 relocation:" + diff --git a/llvm/test/ExecutionEngine/JITLink/X86/ELF_x86-64_relocations.s b/llvm/test/ExecutionEngine/JITLink/X86/ELF_x86-64_relocations.s index 0eef11110264..056bc3d0ad1c 100644 --- a/llvm/test/ExecutionEngine/JITLink/X86/ELF_x86-64_relocations.s +++ b/llvm/test/ExecutionEngine/JITLink/X86/ELF_x86-64_relocations.s @@ -39,12 +39,25 @@ test_gotpcrel: .Lend_test_gotpcrel: .size test_gotpcrel, .Lend_test_gotpcrel-test_gotpcrel +# Test REX_GOTPCRELX handling. We want to check both the offset to the GOT entry and its +# contents. +# jitlink-check: decode_operand(test_rex_gotpcrelx, 4) = \ +# jitlink-check: got_addr(elf_reloc.o, named_data) - next_pc(test_rex_gotpcrelx) + + .globl test_rex_gotpcrelx + .p2align 4, 0x90 + .type test_rex_gotpcrelx,@function +test_rex_gotpcrelx: + movq named_data@GOTPCREL(%rip), %rax +.Lend_test_rex_gotpcrelx: + .size test_rex_gotpcrelx, .Lend_test_gotpcrel-test_rex_gotpcrelx + .type named_data,@object .data - .p2align 2 + .p2align 3 named_data: - .long 42 - .size named_data, 4 + .quad 42 + .size named_data, 8 # Test BSS / zero-fill section handling. # llvm-jitlink: *{4}bss_variable = 0