forked from OSchip/llvm-project
ELF: Do not exit if it cannot open an output file.
It can fail to open an output file for various reasons, including lack of permission, too long filename, or the output file is not a mmap'able file. llvm-svn: 259596
This commit is contained in:
parent
e1100f533f
commit
cbe392629b
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue