Index: ELF/Target.cpp =================================================================== --- ELF/Target.cpp +++ ELF/Target.cpp @@ -356,6 +356,7 @@ RelExpr X86TargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const { switch (Type) { + case R_386_8: case R_386_16: case R_386_32: case R_386_TLS_LDO_32: @@ -366,6 +367,7 @@ return R_TLSLD; case R_386_PLT32: return R_PLT_PC; + case R_386_PC8: case R_386_PC16: case R_386_PC32: return R_PC; @@ -486,6 +488,9 @@ switch (Type) { default: return 0; + case R_386_8: + case R_386_PC8: + return read(Buf); case R_386_16: case R_386_PC16: return read16le(Buf); Index: test/ELF/Inputs/i386-pc8.s =================================================================== --- test/ELF/Inputs/i386-pc8.s +++ test/ELF/Inputs/i386-pc8.s @@ -0,0 +1,2 @@ +.global und +und: Index: test/ELF/i386-pc8.s =================================================================== --- test/ELF/i386-pc8.s +++ test/ELF/i386-pc8.s @@ -0,0 +1,17 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o +# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %S/Inputs/i386-pc8.s -o %t2.o +# RUN: ld.lld %t1.o %t2.o -o %t.out +# RUN: llvm-objdump -s -section=.text %t.out | FileCheck %s + +# CHECK: Contents of section .text: +# CHECK-NEXT: 11000 15263344 + +.text +.global foo +foo: + +.byte und-foo+0x11 +.byte und-foo+0x22 +.byte foo+0x33 +.byte foo+0x44 Index: test/ELF/unknown-reloc.s =================================================================== --- test/ELF/unknown-reloc.s +++ test/ELF/unknown-reloc.s @@ -1,14 +0,0 @@ -# REQUIRES: x86 -# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o -# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %S/Inputs/unknown-reloc.s -o %t2.o -# RUN: not ld.lld %t1.o %t2.o -o %t.out 2>&1 | FileCheck %s - -# CHECK: do not know how to handle relocation 'R_386_PC8' (23) -# CHECK: do not know how to handle relocation 'R_386_8' (22) - -.text -.global foo -foo: - -.byte und-foo -.byte foo