Index: ELF/Arch/X86_64.cpp =================================================================== --- ELF/Arch/X86_64.cpp +++ ELF/Arch/X86_64.cpp @@ -156,8 +156,9 @@ } template bool X86_64::isPicRel(RelType Type) const { - return Type != R_X86_64_PC32 && Type != R_X86_64_32 && - Type != R_X86_64_TPOFF32; + return Type != R_X86_64_8 && Type != R_X86_64_PC8 && Type != R_X86_64_16 && + Type != R_X86_64_PC16 && Type != R_X86_64_32 && + Type != R_X86_64_PC32 && Type != R_X86_64_TPOFF32; } template Index: test/ELF/x86-64-dyn-rel-error3.s =================================================================== --- test/ELF/x86-64-dyn-rel-error3.s +++ test/ELF/x86-64-dyn-rel-error3.s @@ -0,0 +1,16 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: not ld.lld %t.o -shared -o %t.so 2>&1 | FileCheck %s + +# CHECK: relocation R_X86_64_8 cannot be used against symbol foo; recompile with -fPIC +# CHECK: relocation R_X86_64_16 cannot be used against symbol foo; recompile with -fPIC +# CHECK: relocation R_X86_64_PC8 cannot be used against symbol foo; recompile with -fPIC +# CHECK: relocation R_X86_64_PC16 cannot be used against symbol foo; recompile with -fPIC + +.global foo + +.data +.byte foo # R_X86_64_8 +.short foo # R_X86_64_16 +.byte foo - . # R_X86_64_PC8 +.short foo - . # R_X86_64_PC16