summaryrefslogtreecommitdiffstats
path: root/lld
diff options
context:
space:
mode:
Diffstat (limited to 'lld')
-rw-r--r--lld/ELF/Writer.cpp14
-rw-r--r--lld/test/ELF/driver.test11
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
OpenPOWER on IntegriCloud