forked from OSchip/llvm-project
[ELF] Better error reporting for broken archives
Differential revision: https://reviews.llvm.org/D26852 llvm-svn: 287527
This commit is contained in:
parent
a113a4194c
commit
7d7ff80f4b
|
@ -99,21 +99,24 @@ static std::tuple<ELFKind, uint16_t, uint8_t> parseEmulation(StringRef Emul) {
|
|||
std::vector<MemoryBufferRef>
|
||||
LinkerDriver::getArchiveMembers(MemoryBufferRef MB) {
|
||||
std::unique_ptr<Archive> File =
|
||||
check(Archive::create(MB), "failed to parse archive");
|
||||
check(Archive::create(MB),
|
||||
MB.getBufferIdentifier() + ": failed to parse archive");
|
||||
|
||||
std::vector<MemoryBufferRef> V;
|
||||
Error Err = Error::success();
|
||||
for (const ErrorOr<Archive::Child> &COrErr : File->children(Err)) {
|
||||
Archive::Child C = check(COrErr, "could not get the child of the archive " +
|
||||
File->getFileName());
|
||||
Archive::Child C =
|
||||
check(COrErr, MB.getBufferIdentifier() +
|
||||
": could not get the child of the archive");
|
||||
MemoryBufferRef MBRef =
|
||||
check(C.getMemoryBufferRef(),
|
||||
"could not get the buffer for a child of the archive " +
|
||||
File->getFileName());
|
||||
MB.getBufferIdentifier() +
|
||||
": could not get the buffer for a child of the archive");
|
||||
V.push_back(MBRef);
|
||||
}
|
||||
if (Err)
|
||||
fatal("Archive::children failed: " + toString(std::move(Err)));
|
||||
fatal(MB.getBufferIdentifier() + ": Archive::children failed: " +
|
||||
toString(std::move(Err)));
|
||||
|
||||
// Take ownership of memory buffers created for members of thin archives.
|
||||
for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers())
|
||||
|
|
|
@ -482,7 +482,8 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
|
|||
}
|
||||
|
||||
template <class ELFT> void ArchiveFile::parse() {
|
||||
File = check(Archive::create(MB), "failed to parse archive");
|
||||
File = check(Archive::create(MB),
|
||||
MB.getBufferIdentifier() + ": failed to parse archive");
|
||||
|
||||
// Read the symbol table to construct Lazy objects.
|
||||
for (const Archive::Symbol &Sym : File->symbols())
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// REQUIRES: x86
|
||||
|
||||
// Check bad archive error reporting with --whole-archive
|
||||
// and without it.
|
||||
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
||||
// RUN: echo "!<arch>" > %t.bad.a
|
||||
// RUN: echo "bad archive" >> %t.bad.a
|
||||
// RUN: not ld.lld %t.o %t.bad.a -o %t 2>&1 | FileCheck %s
|
||||
// RUN: not ld.lld %t.o --whole-archive %t.bad.a -o %t 2>&1 | FileCheck %s
|
||||
// CHECK: {{.*}}.bad.a: failed to parse archive
|
||||
|
||||
.globl _start
|
||||
_start:
|
Loading…
Reference in New Issue