diff --git a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp index 9e2d6220985..7e434175ec5 100644 --- a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp +++ b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp @@ -399,6 +399,7 @@ void X86MCCodeEmitter::emitMemModRMByte(const MCInst &MI, unsigned Op, return X86::reloc_riprel_4byte_movq_load; case X86::CALL64m: case X86::JMP64m: + case X86::TAILJMPm64: case X86::TEST64mr: case X86::ADC64rm: case X86::ADD64rm: diff --git a/test/CodeGen/X86/tailjmp_gotpcrel_relax_relocation.ll b/test/CodeGen/X86/tailjmp_gotpcrel_relax_relocation.ll new file mode 100644 index 00000000000..3fb161cc2cb --- /dev/null +++ b/test/CodeGen/X86/tailjmp_gotpcrel_relax_relocation.ll @@ -0,0 +1,15 @@ +; RUN: llc -filetype=obj -relax-elf-relocations=true -mtriple=x86_64-linux-gnu -o - %s | llvm-objdump - -d -r | FileCheck %s + +; CHECK: jmpq *(%rip) +; CHECK-NEXT: R_X86_64_GOTPCRELX + +define i32 @main() { +entry: + %call = tail call i32 @foo() + ret i32 %call +} + +; Function Attrs: nonlazybind +declare i32 @foo() #1 + +attributes #1 = { nonlazybind }