[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