Index: ELF/Error.h =================================================================== --- ELF/Error.h +++ ELF/Error.h @@ -46,6 +46,7 @@ LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg); LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg, const Twine &Prefix); +LLVM_ATTRIBUTE_NORETURN void fatal(std::error_code EC, const Twine &Prefix); template T check(ErrorOr E) { if (auto EC = E.getError()) Index: ELF/Error.cpp =================================================================== --- ELF/Error.cpp +++ ELF/Error.cpp @@ -51,4 +51,8 @@ fatal(Prefix + ": " + Msg); } +void elf::fatal(std::error_code EC, const Twine &Prefix) { + fatal(Prefix + ": " + EC.message()); +} + } // namespace lld Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ 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: test/ELF/invalid/too-short.s =================================================================== --- test/ELF/invalid/too-short.s +++ 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