[lld] r294977 - ELF: Read all dynamic lists specified on the command line.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 13 10:31:13 PST 2017


Author: pcc
Date: Mon Feb 13 12:31:12 2017
New Revision: 294977

URL: http://llvm.org/viewvc/llvm-project?rev=294977&view=rev
Log:
ELF: Read all dynamic lists specified on the command line.

We were previously only reading the last one.

Fixes PR31939 (which was likely the issue underlying
https://github.com/google/oss-fuzz/issues/295).

Differential Revision: https://reviews.llvm.org/D29861

Modified:
    lld/trunk/ELF/Driver.cpp
    lld/trunk/ELF/LinkerScript.cpp
    lld/trunk/test/ELF/dynamic-list.s

Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=294977&r1=294976&r2=294977&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Mon Feb 13 12:31:12 2017
@@ -643,7 +643,7 @@ void LinkerDriver::readConfigs(opt::Inpu
   for (auto *Arg : Args.filtered(OPT_undefined))
     Config->Undefined.push_back(Arg->getValue());
 
-  if (auto *Arg = Args.getLastArg(OPT_dynamic_list))
+  for (auto *Arg : Args.filtered(OPT_dynamic_list))
     if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
       readDynamicList(*Buffer);
 

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=294977&r1=294976&r2=294977&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Mon Feb 13 12:31:12 2017
@@ -1942,7 +1942,8 @@ void ScriptParser::readAnonymousDeclarat
   if (peek() != "local") {
     if (consume("global"))
       expect(":");
-    Config->VersionScriptGlobals = readSymbols();
+    for (SymbolVersion V : readSymbols())
+      Config->VersionScriptGlobals.push_back(V);
   }
   readLocals();
   expect("}");

Modified: lld/trunk/test/ELF/dynamic-list.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/dynamic-list.s?rev=294977&r1=294976&r2=294977&view=diff
==============================================================================
--- lld/trunk/test/ELF/dynamic-list.s (original)
+++ lld/trunk/test/ELF/dynamic-list.s Mon Feb 13 12:31:12 2017
@@ -51,6 +51,10 @@
 # RUN: echo "{ foo1; foo2; foo31; };" > %t.list
 # RUN: ld.lld --dynamic-list %t.list %t %t2.so -o %t.exe
 # RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: echo "{ foo1; foo2; };" > %t1.list
+# RUN: echo "{ foo31; };" > %t2.list
+# RUN: ld.lld --dynamic-list %t1.list --dynamic-list %t2.list %t %t2.so -o %t.exe
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK2 %s
 
 # CHECK2:      DynamicSymbols [
 # CHECK2-NEXT:   Symbol {




More information about the llvm-commits mailing list