From c018115480e6b360b0ddab8698a0efad49567d73 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Fri, 15 Dec 2017 22:17:15 +0000 Subject: [PATCH] [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 --- lld/test/wasm/archive.ll | 31 +++++++++++++++++++------------ 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 2bc79467f024a..18f35330d1e9e 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 8219754752368..17f0bc46014ca 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()) {