[ELF] Fix the bug -- LLD crashes if the --whole-archive option

is around non-archive.

llvm-svn: 210530
This commit is contained in:
Simon Atanasyan 2014-06-10 13:43:13 +00:00
parent ecaba17996
commit 6790b14ebb
2 changed files with 64 additions and 1 deletions

View File

@ -32,7 +32,7 @@ error_code ELFFileNode::parse(const LinkingContext &ctx,
return ec;
assert(parsedFiles.size() == 1);
std::unique_ptr<File> f(parsedFiles[0].release());
if (auto archive = reinterpret_cast<const ArchiveLibraryFile *>(f.get())) {
if (const auto *archive = dyn_cast<ArchiveLibraryFile>(f.get())) {
// Have this node own the FileArchive object.
_archiveFile.reset(archive);
f.release();

View File

@ -0,0 +1,63 @@
# Check that LLD does not show any error if the --whole-archive
# is around non-archive.
# RUN: yaml2obj -format=elf -docnum=1 %s > %t-so.o
# RUN: yaml2obj -format=elf -docnum=2 %s > %t-exe.o
# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
# RUN: lld -flavor gnu -target mipsel -o %t.exe %t-exe.o --whole-archive %t.so
# so.o
---
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_MIPS
Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x10
Size: 0x04
Symbols:
Global:
- Name: foo
Type: STT_FUNC
Section: .text
Size: 0x04
# exe.o
---
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_MIPS
Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x10
Size: 0x04
- Name: .rel.text
Type: SHT_REL
Link: .symtab
AddressAlign: 0x04
Info: .text
Relocations:
- Offset: 0x00
Symbol: foo
Type: R_MIPS_26
Symbols:
Global:
- Name: __start
Type: STT_FUNC
Section: .text
Size: 0x04
- Name: foo
...