[PATCH] D42054: [ELF] - Stop mixing order of -defsym/-script commands.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 17 02:26:15 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL322625: [ELF] - Stop mixing order of -defsym/-script commands. (authored by grimar, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D42054?vs=129820&id=130114#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D42054

Files:
  lld/trunk/ELF/Driver.cpp
  lld/trunk/test/ELF/linkerscript/defsym.s


Index: lld/trunk/test/ELF/linkerscript/defsym.s
===================================================================
--- lld/trunk/test/ELF/linkerscript/defsym.s
+++ lld/trunk/test/ELF/linkerscript/defsym.s
@@ -0,0 +1,19 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: echo "foo = 0x22;" > %t.script
+
+## This testcase checks that we apply -defsym and linker script
+## in the same order are they specified in a command line. 
+
+## Check that linker script can override -defsym assignments.
+# RUN: ld.lld %t.o -defsym=foo=0x11 -script %t.script -o %t
+# RUN: llvm-readobj -t %t | FileCheck %s
+# CHECK:      Name: foo
+# CHECK-NEXT:   Value: 0x22
+
+## Check that -defsym can override linker script. Check that multiple
+## -defsym commands for the same symbol are allowed.
+# RUN: ld.lld %t.o -script %t.script -defsym=foo=0x11 -defsym=foo=0x33 -o %t
+# RUN: llvm-readobj -t %t | FileCheck %s --check-prefix=REORDER
+# REORDER:      Name: foo
+# REORDER-NEXT:   Value: 0x33
Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -830,6 +830,13 @@
     case OPT_INPUT:
       addFile(Arg->getValue(), /*WithLOption=*/false);
       break;
+    case OPT_defsym: {
+      StringRef From;
+      StringRef To;
+      std::tie(From, To) = StringRef(Arg->getValue()).split('=');
+      readDefsym(From, MemoryBufferRef(To, "-defsym"));
+      break;
+    }
     case OPT_script:
       if (Optional<std::string> Path = searchLinkerScript(Arg->getValue())) {
         if (Optional<MemoryBufferRef> MB = readFile(*Path))
@@ -1011,14 +1018,6 @@
   for (InputFile *F : Files)
     Symtab->addFile<ELFT>(F);
 
-  // Process -defsym option.
-  for (auto *Arg : Args.filtered(OPT_defsym)) {
-    StringRef From;
-    StringRef To;
-    std::tie(From, To) = StringRef(Arg->getValue()).split('=');
-    readDefsym(From, MemoryBufferRef(To, "-defsym"));
-  }
-
   // Now that we have every file, we can decide if we will need a
   // dynamic symbol table.
   // We need one if we were asked to export dynamic symbols or if we are


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42054.130114.patch
Type: text/x-patch
Size: 2173 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180117/9b3cfb3d/attachment.bin>


More information about the llvm-commits mailing list