diff options
Diffstat (limited to 'lld')
| -rw-r--r-- | lld/ELF/Writer.cpp | 14 | ||||
| -rw-r--r-- | lld/test/ELF/driver.test | 11 |
2 files changed, 20 insertions, 5 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 3a317b33620..1e94b03b69d 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -56,7 +56,7 @@ private: void assignAddresses(); void buildSectionMap(); void fixAbsoluteSymbols(); - void openFile(StringRef OutputPath); + bool openFile(); void writeHeader(); void writeSections(); bool isDiscarded(InputSectionBase<ELFT> *IS) const; @@ -172,7 +172,8 @@ template <class ELFT> void Writer<ELFT>::run() { return; assignAddresses(); fixAbsoluteSymbols(); - openFile(Config->OutputFile); + if (!openFile()) + return; writeHeader(); writeSections(); if (HasError) @@ -1384,11 +1385,14 @@ template <class ELFT> void Writer<ELFT>::writeHeader() { Sec->writeHeaderTo(++SHdrs); } -template <class ELFT> void Writer<ELFT>::openFile(StringRef Path) { +template <class ELFT> bool Writer<ELFT>::openFile() { ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = - FileOutputBuffer::create(Path, FileSize, FileOutputBuffer::F_executable); - fatal(BufferOrErr, "failed to open " + Path); + FileOutputBuffer::create(Config->OutputFile, FileSize, + FileOutputBuffer::F_executable); + if (error(BufferOrErr, "failed to open " + Config->OutputFile)) + return false; Buffer = std::move(*BufferOrErr); + return true; } // Write section contents to a mmap'ed file. diff --git a/lld/test/ELF/driver.test b/lld/test/ELF/driver.test index 13f040e4f9c..70fe7baf2a5 100644 --- a/lld/test/ELF/driver.test +++ b/lld/test/ELF/driver.test @@ -1,3 +1,5 @@ +# REQUIRES: x86 + # RUN: not ld.lld -unknown1 -unknown2 -m foo /no/such/file -lnosuchlib \ # RUN: 2>&1 | FileCheck %s @@ -7,3 +9,12 @@ # CHECK: Unknown emulation: foo # CHECK: cannot open /no/such/file # CHECK: Unable to find library -lnosuchlib + +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t +# RUN: not ld.lld %t -o /dev/null 2>&1 | FileCheck -check-prefix=CHECK2 %s + +# CHECK2: failed to open + +.globl _start +_start: + nop |

