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 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(Sym)->fetch(); if (Sym && Sym->isDefined()) Sym->ForceExport = true; else if (!Config->AllowUndefined)