void assignAddresses();
void buildSectionMap();
void fixAbsoluteSymbols();
- void openFile(StringRef OutputPath);
+ bool openFile();
void writeHeader();
void writeSections();
bool isDiscarded(InputSectionBase<ELFT> *IS) const;
return;
assignAddresses();
fixAbsoluteSymbols();
- openFile(Config->OutputFile);
+ if (!openFile())
+ return;
writeHeader();
writeSections();
if (HasError)
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.
+# REQUIRES: x86
+
# RUN: not ld.lld -unknown1 -unknown2 -m foo /no/such/file -lnosuchlib \
# RUN: 2>&1 | FileCheck %s
# 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