[lld] r210530 - [ELF] Fix the bug -- LLD crashes if the --whole-archive option
Simon Atanasyan
simon at atanasyan.com
Tue Jun 10 06:43:13 PDT 2014
Author: atanasyan
Date: Tue Jun 10 08:43:13 2014
New Revision: 210530
URL: http://llvm.org/viewvc/llvm-project?rev=210530&view=rev
Log:
[ELF] Fix the bug -- LLD crashes if the --whole-archive option
is around non-archive.
Added:
lld/trunk/test/Driver/so-whole-archive.test
Modified:
lld/trunk/lib/Driver/GnuLdInputGraph.cpp
Modified: lld/trunk/lib/Driver/GnuLdInputGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdInputGraph.cpp?rev=210530&r1=210529&r2=210530&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdInputGraph.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdInputGraph.cpp Tue Jun 10 08:43:13 2014
@@ -32,7 +32,7 @@ error_code ELFFileNode::parse(const Link
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();
Added: lld/trunk/test/Driver/so-whole-archive.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/Driver/so-whole-archive.test?rev=210530&view=auto
==============================================================================
--- lld/trunk/test/Driver/so-whole-archive.test (added)
+++ lld/trunk/test/Driver/so-whole-archive.test Tue Jun 10 08:43:13 2014
@@ -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
+...
More information about the llvm-commits
mailing list