[PATCH] D50287: [WebAssembly] --export should fetch lazy symbols

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 6 12:45:38 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL339047: [WebAssembly] --export should fetch lazy symbols (authored by sbc, committed by ).

Repository:
  rL LLVM

https://reviews.llvm.org/D50287

Files:
  lld/trunk/test/wasm/archive-export.ll
  lld/trunk/wasm/Driver.cpp


Index: lld/trunk/test/wasm/archive-export.ll
===================================================================
--- lld/trunk/test/wasm/archive-export.ll
+++ lld/trunk/test/wasm/archive-export.ll
@@ -0,0 +1,50 @@
+Test that --export will also fetch lazy symbols from archives
+
+RUN: llc -filetype=obj %S/Inputs/start.ll -o %t.o
+RUN: llc -filetype=obj %S/Inputs/archive1.ll -o %t.a1.o
+RUN: llc -filetype=obj %S/Inputs/archive2.ll -o %t.a2.o
+RUN: rm -f %t.a
+RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o
+RUN: wasm-ld --export=archive2_symbol -o %t.wasm %t.a %t.o
+RUN: obj2yaml %t.wasm | FileCheck %s
+RUN: wasm-ld -o %t.wasm %t.a %t.o
+RUN: obj2yaml %t.wasm | FileCheck %s -check-prefix=NOEXPORT
+
+CHECK:         Exports:
+CHECK-NEXT:       - Name:            memory
+CHECK-NEXT:         Kind:            MEMORY
+CHECK-NEXT:         Index:           0
+CHECK-NEXT:       - Name:            __heap_base
+CHECK-NEXT:         Kind:            GLOBAL
+CHECK-NEXT:         Index:           1
+CHECK-NEXT:       - Name:            __data_end
+CHECK-NEXT:         Kind:            GLOBAL
+CHECK-NEXT:         Index:           2
+CHECK-NEXT:       - Name:            foo
+CHECK-NEXT:         Kind:            FUNCTION
+CHECK-NEXT:         Index:           2
+CHECK-NEXT:       - Name:            bar
+CHECK-NEXT:         Kind:            FUNCTION
+CHECK-NEXT:         Index:           3
+CHECK-NEXT:       - Name:            archive2_symbol
+CHECK-NEXT:         Kind:            FUNCTION
+CHECK-NEXT:         Index:           4
+CHECK-NEXT:       - Name:            _start
+CHECK-NEXT:         Kind:            FUNCTION
+CHECK-NEXT:         Index:           1
+CHECK-NEXT:   - Type:            CODE
+
+NOEXPORT:         Exports:
+NOEXPORT-NEXT:       - Name:            memory
+NOEXPORT-NEXT:         Kind:            MEMORY
+NOEXPORT-NEXT:         Index:           0
+NOEXPORT-NEXT:       - Name:            __heap_base
+NOEXPORT-NEXT:         Kind:            GLOBAL
+NOEXPORT-NEXT:         Index:           1
+NOEXPORT-NEXT:       - Name:            __data_end
+NOEXPORT-NEXT:         Kind:            GLOBAL
+NOEXPORT-NEXT:         Index:           2
+NOEXPORT-NEXT:       - Name:            _start
+NOEXPORT-NEXT:         Kind:            FUNCTION
+NOEXPORT-NEXT:         Index:           1
+NOEXPORT-NEXT:   - Type:            CODE
Index: lld/trunk/wasm/Driver.cpp
===================================================================
--- lld/trunk/wasm/Driver.cpp
+++ lld/trunk/wasm/Driver.cpp
@@ -484,6 +484,17 @@
   for (auto *Arg : Args.filtered(OPT_undefined))
     handleUndefined(Arg->getValue());
 
+  // Handle the `--export <sym>` options
+  // This works like --undefined but also exports the symbol if its found
+  for (auto *Arg : Args.filtered(OPT_export)) {
+    Symbol *Sym = handleUndefined(Arg->getValue());
+    if (Sym && Sym->isDefined())
+      Sym->ForceExport = true;
+    else if (!Config->AllowUndefined)
+      error(Twine("symbol exported via --export not found: ") +
+            Arg->getValue());
+  }
+
   if (!Config->Relocatable) {
     // Add synthetic dummies for weak undefined functions.
     handleWeakUndefines();
@@ -503,16 +514,6 @@
   if (errorCount())
     return;
 
-  // Handle --export.
-  for (auto *Arg : Args.filtered(OPT_export)) {
-    StringRef Name = Arg->getValue();
-    Symbol *Sym = Symtab->find(Name);
-    if (Sym && Sym->isDefined())
-      Sym->ForceExport = true;
-    else if (!Config->AllowUndefined)
-      error("symbol exported via --export not found: " + Name);
-  }
-
   // Do link-time optimization if given files are LLVM bitcode files.
   // This compiles bitcode files into real object files.
   Symtab->addCombinedLTOObject();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50287.159364.patch
Type: text/x-patch
Size: 3696 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180806/0a5aaeed/attachment.bin>


More information about the llvm-commits mailing list