diff options
-rw-r--r-- | ELF/Target.cpp | 12 | ||||
-rw-r--r-- | test/ELF/invalid/invalid-relocation-x64.s | 4 |
2 files changed, 12 insertions, 4 deletions
diff --git a/ELF/Target.cpp b/ELF/Target.cpp index 749795f19..019bdf0b1 100644 --- a/ELF/Target.cpp +++ b/ELF/Target.cpp @@ -631,7 +631,11 @@ template <class ELFT> RelExpr X86_64TargetInfo<ELFT>::getRelExpr(uint32_t Type, const SymbolBody &S) const { switch (Type) { - default: + case R_X86_64_32: + case R_X86_64_32S: + case R_X86_64_64: + case R_X86_64_DTPOFF32: + case R_X86_64_DTPOFF64: return R_ABS; case R_X86_64_TPOFF32: return R_TLS; @@ -657,6 +661,10 @@ RelExpr X86_64TargetInfo<ELFT>::getRelExpr(uint32_t Type, return R_GOT_PC; case R_X86_64_NONE: return R_HINT; + default: + error("do not know how to handle relocation '" + toString(Type) + "' (" + + Twine(Type) + ")"); + return R_HINT; } } @@ -878,7 +886,7 @@ void X86_64TargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint32_t Type, write64le(Loc, Val); break; default: - error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type)); + llvm_unreachable("unexpected relocation"); } } diff --git a/test/ELF/invalid/invalid-relocation-x64.s b/test/ELF/invalid/invalid-relocation-x64.s index 1ad9afa4c..4934874bf 100644 --- a/test/ELF/invalid/invalid-relocation-x64.s +++ b/test/ELF/invalid/invalid-relocation-x64.s @@ -26,5 +26,5 @@ Sections: Type: R_X86_64_NONE # RUN: not ld.lld %p/Inputs/invalid-relocation-x64.elf -o %t2 2>&1 | FileCheck %s -# CHECK: unrecognized reloc 152 -# CHECK: unrecognized reloc 153 +# CHECK: do not know how to handle relocation 'Unknown' (152) +# CHECK: do not know how to handle relocation 'Unknown' (153) |