[PATCH] D50273: All lazy symbols to be exported with --export

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 3 15:10:24 PDT 2018


sbc100 created this revision.
Herald added subscribers: llvm-commits, aheejin.

This is really a requirement from emscripten but I think it
makes sense in general too.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D50273

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


Index: wasm/Driver.cpp
===================================================================
--- wasm/Driver.cpp
+++ wasm/Driver.cpp
@@ -492,6 +492,8 @@
   for (auto *Arg : Args.filtered(OPT_export)) {
     StringRef Name = Arg->getValue();
     Symbol *Sym = Symtab->find(Name);
+    if (Sym && Sym->isLazy())
+      cast<LazySymbol>(Sym)->fetch();
     if (Sym && Sym->isDefined())
       Sym->ForceExport = true;
     else if (!Config->AllowUndefined)
Index: test/wasm/archive-export.ll
===================================================================
--- /dev/null
+++ test/wasm/archive-export.ll
@@ -0,0 +1,30 @@
+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:       - Type:            EXPORT
+CHECK:           - Name:            _start
+CHECK-NEXT:         Kind:            FUNCTION
+CHECK-NEXT:         Index:           1
+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:   - Type:            CODE
+
+NOEXPORT:       - Type:            EXPORT
+NOEXPORT:            - Name:            _start
+NOEXPORT-NEXT:         Kind:            FUNCTION
+NOEXPORT-NEXT:         Index:           1
+NOEXPORT-NEXT:   - Type:            CODE


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50273.159104.patch
Type: text/x-patch
Size: 1873 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180803/f76d3e02/attachment.bin>


More information about the llvm-commits mailing list