diff options
author | Sam Clegg <sbc@chromium.org> | 2017-12-15 22:17:15 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2017-12-15 22:17:15 +0000 |
commit | c018115480e6b360b0ddab8698a0efad49567d73 (patch) | |
tree | 922b5487797d9ec2e40b97c24526ac8ff82b1ab3 | |
parent | 6532b3b9d2f9d47ebf48b0675c87c92c5ad4dee8 (diff) | |
download | bcm5719-llvm-c018115480e6b360b0ddab8698a0efad49567d73.tar.gz bcm5719-llvm-c018115480e6b360b0ddab8698a0efad49567d73.zip |
[WebAssembly] Don't include lazy symbols in import table
This bug was introduced in: https://reviews.llvm.org/D41304.
Add a test for this case.
Differential Revision: https://reviews.llvm.org/D41309
llvm-svn: 320872
-rw-r--r-- | lld/test/wasm/archive.ll | 31 | ||||
-rw-r--r-- | lld/wasm/Writer.cpp | 2 |
2 files changed, 20 insertions, 13 deletions
diff --git a/lld/test/wasm/archive.ll b/lld/test/wasm/archive.ll index 2bc79467f02..18f35330d1e 100644 --- a/lld/test/wasm/archive.ll +++ b/lld/test/wasm/archive.ll @@ -1,16 +1,11 @@ -; Verify that multually dependant object files in an archive is handled -; correctly. -; ; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %s -o %t.o -; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %S/Inputs/archive1.ll -o %t2.o -; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %S/Inputs/archive2.ll -o %t3.o -; RUN: llvm-ar rcs %t.a %t2.o %t3.o +; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %S/Inputs/archive1.ll -o %t.a1.o +; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %S/Inputs/archive2.ll -o %t.a2.o +; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %S/Inputs/hello.ll -o %t.a3.o +; RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o %t.a3.o ; RUN: lld -flavor wasm %t.a %t.o -o %t.wasm ; RUN: llvm-nm -a %t.wasm | FileCheck %s -; Specifying the same archive twice is allowed. -; RUN: lld -flavor wasm %t.a %t.a %t.o -o %t.wasm - declare i32 @foo() local_unnamed_addr #1 define i32 @_start() local_unnamed_addr #0 { @@ -19,6 +14,18 @@ entry: ret i32 %call } -; CHECK: T _start -; CHECK: T bar -; CHECK: T foo +; Verify that multually dependant object files in an archive is handled +; correctly. + +; CHECK: 00000002 T _start +; CHECK-NEXT: 00000002 T _start +; CHECK-NEXT: 00000000 T bar +; CHECK-NEXT: 00000000 T bar +; CHECK-NEXT: 00000001 T foo +; CHECK-NEXT: 00000001 T foo + +; Verify that symbols from unused objects don't appear in the symbol table +; CHECK-NOT: hello + +; Specifying the same archive twice is allowed. +; RUN: lld -flavor wasm %t.a %t.a %t.o -o %t.wasm diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 82197547523..17f0bc46014 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -551,7 +551,7 @@ void Writer::calculateOffsets() { void Writer::calculateImports() { for (Symbol *Sym : Symtab->getSymbols()) { - if (Sym->isDefined() || Sym->isWeak()) + if (!Sym->isUndefined() || Sym->isWeak()) continue; if (Sym->isFunction()) { |