]> granicus.if.org Git - llvm/commitdiff
[WebAssembly] Weak symbols should be defined in SF_Global
authorSam Clegg <sbc@chromium.org>
Wed, 20 Sep 2017 23:39:44 +0000 (23:39 +0000)
committerSam Clegg <sbc@chromium.org>
Wed, 20 Sep 2017 23:39:44 +0000 (23:39 +0000)
Summary:
This manifested itself in lld since it meant that weak
symbols were not appearing in archive symbol tables.

Subscribers: jfb, dschuff, jgravelle-google, aheejin

Differential Revision: https://reviews.llvm.org/D38111

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313838 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/WasmObjectFile.cpp
test/MC/WebAssembly/weak-alias.ll

index 3b62ccf2315227fea5decd43a6e4d5b15e54190b..77fcac5578b104b985dae6664a978722ed6b8e52 100644 (file)
@@ -769,7 +769,7 @@ uint32_t WasmObjectFile::getSymbolFlags(DataRefImpl Symb) const {
   DEBUG(dbgs() << "getSymbolFlags: ptr=" << &Sym << " " << Sym << "\n");
   if (Sym.isWeak())
     Result |= SymbolRef::SF_Weak;
-  else if (Sym.isGlobal())
+  if (!Sym.isLocal())
     Result |= SymbolRef::SF_Global;
 
   switch (Sym.Type) {
index 2beef846def87b02880fdba66980b5f3dee331b0..8db83e4c5e142455c87936d2ebaf10cb78949480 100644 (file)
@@ -1,4 +1,6 @@
-; RUN: llc -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - | obj2yaml | FileCheck %s
+; RUN: llc -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o %t.o
+; RUN: obj2yaml %t.o | FileCheck %s
+; RUN: llvm-objdump -t %t.o | FileCheck --check-prefix=CHECK-SYMS %s
 
 ; 'foo_alias()' is weak alias of function 'foo()'
 ; 'bar_alias' is weak alias of global variable 'bar'
@@ -107,3 +109,14 @@ entry:
 ; CHECK-NEXT:       - Index:           1
 ; CHECK-NEXT:         Name:            .data.bar_alias_address
 ; CHECK-NEXT: ...
+
+; CHECK-SYMS: SYMBOL TABLE:
+; CHECK-SYMS-NEXT: 00000000 g     F name       foo_alias
+; CHECK-SYMS-NEXT: 00000001 g     F name       call_alias
+; CHECK-SYMS-NEXT: 00000002 g     F name       foo
+; CHECK-SYMS-NEXT: 00000002 gw    F EXPORT     foo_alias
+; CHECK-SYMS-NEXT: 00000000 gw      EXPORT     bar_alias
+; CHECK-SYMS-NEXT: 00000001 g     F EXPORT     call_alias
+; CHECK-SYMS-NEXT: 00000002 g     F EXPORT     foo
+; CHECK-SYMS-NEXT: 00000000 g       EXPORT     bar
+; CHECK-SYMS-NEXT: 00000008 g       EXPORT     bar_alias_address