Index: lld/trunk/ELF/Error.h =================================================================== --- lld/trunk/ELF/Error.h +++ lld/trunk/ELF/Error.h @@ -45,6 +45,7 @@ } LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg); +LLVM_ATTRIBUTE_NORETURN void fatal(std::error_code EC, const Twine &Prefix); template T check(ErrorOr E) { if (auto EC = E.getError()) Index: lld/trunk/ELF/Error.cpp =================================================================== --- lld/trunk/ELF/Error.cpp +++ lld/trunk/ELF/Error.cpp @@ -47,4 +47,8 @@ exit(1); } +void elf::fatal(std::error_code EC, const Twine &Prefix) { + fatal(Prefix + ": " + EC.message()); +} + } // namespace lld Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -57,7 +57,7 @@ std::error_code EC; ELFFile F(MB.getBuffer(), EC); if (EC) - error(EC, "failed to read " + MB.getBufferIdentifier()); + fatal(EC, "failed to read " + MB.getBufferIdentifier()); return F; } Index: lld/trunk/test/ELF/invalid/too-short.s =================================================================== --- lld/trunk/test/ELF/invalid/too-short.s +++ lld/trunk/test/ELF/invalid/too-short.s @@ -0,0 +1,5 @@ +# REQUIRES: x86 + +## too-short.elf file is a truncated ELF. +# RUN: not ld.lld %S/Inputs/too-short.elf -o %t 2>&1 | FileCheck %s +# CHECK: failed to read