From f3d49b30b5abd0569420f5847bda2343c55a9186 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sat, 6 Jun 2015 02:29:56 +0000 Subject: [PATCH] Handle 16 bit PC relative relocations. Fixes pr23771. llvm-svn: 239214 --- llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp | 1 + llvm/test/MC/ELF/relocation.s | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp index 4508883..a33468d 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp @@ -66,6 +66,7 @@ static X86_64RelType getType64(unsigned Kind, case X86::reloc_riprel_4byte: case X86::reloc_riprel_4byte_movq_load: return RT64_32; + case FK_PCRel_2: case FK_Data_2: return RT64_16; case FK_PCRel_1: diff --git a/llvm/test/MC/ELF/relocation.s b/llvm/test/MC/ELF/relocation.s index 7697eb0..34f1a40 100644 --- a/llvm/test/MC/ELF/relocation.s +++ b/llvm/test/MC/ELF/relocation.s @@ -54,6 +54,10 @@ bar: .quad pr23272_2 - pr23272 .quad pr23272_3 - pr23272 + + .code16 + call pr23771 + // CHECK: Section { // CHECK: Name: .rela.text // CHECK: Relocations [ @@ -90,5 +94,6 @@ bar: // CHECK-NEXT: 0xD4 R_X86_64_SIZE32 blah 0xFFFFFFFFFFFFFFE0 // CHECK-NEXT: 0xD8 R_X86_64_GOTPCREL foo 0x0 // CHECK-NEXT: 0xDC R_X86_64_PLT32 foo 0x0 +// CHECK-NEXT: 0xF1 R_X86_64_PC16 pr23771 0xFFFFFFFFFFFFFFFE // CHECK-NEXT: ] // CHECK-NEXT: } -- 2.7.4