<div dir="ltr">Hello Sam,<br><br>This commit broke one of our bots:<br><br><a href="http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/3369">http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/3369</a><br><br>Could you take care of this, please?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 30, 2017 at 2:34 PM, Sam Clegg via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: sbc<br>
Date: Thu Nov 30 14:34:58 2017<br>
New Revision: 319488<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=319488&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=319488&view=rev</a><br>
Log:<br>
Add visibility flag to Wasm symbol flags<br>
<br>
The LLVM "hidden" flag needs to be passed through the Wasm<br>
intermediate objects in order for the linker to apply<br>
it to the final Wasm object.<br>
<br>
The corresponding change in LLD is here: <a href="https://github.com/WebAssembly/lld/pull/14" rel="noreferrer" target="_blank">https://github.com/<wbr>WebAssembly/lld/pull/14</a><br>
<br>
Patch by Nicholas Wilson<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D40442" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D40442</a><br>
<br>
Added:<br>
    llvm/trunk/test/MC/<wbr>WebAssembly/visibility.ll<br>
Modified:<br>
    llvm/trunk/include/llvm/<wbr>BinaryFormat/Wasm.h<br>
    llvm/trunk/include/llvm/MC/<wbr>MCSymbolWasm.h<br>
    llvm/trunk/include/llvm/<wbr>Object/Wasm.h<br>
    llvm/trunk/lib/MC/<wbr>MCWasmStreamer.cpp<br>
    llvm/trunk/lib/MC/<wbr>WasmObjectWriter.cpp<br>
    llvm/trunk/lib/Object/<wbr>WasmObjectFile.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>BinaryFormat/Wasm.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/Wasm.h?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/BinaryFormat/Wasm.h?rev=<wbr>319488&r1=319487&r2=319488&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>BinaryFormat/Wasm.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>BinaryFormat/Wasm.h Thu Nov 30 14:34:58 2017<br>
@@ -190,11 +190,15 @@ enum : unsigned {<br>
 };<br>
<br>
 const unsigned WASM_SYMBOL_BINDING_MASK = 0x3;<br>
+const unsigned WASM_SYMBOL_VISIBILITY_MASK = 0x4;<br>
<br>
 enum : unsigned {<br>
   WASM_SYMBOL_BINDING_GLOBAL = 0x0,<br>
   WASM_SYMBOL_BINDING_WEAK   = 0x1,<br>
   WASM_SYMBOL_BINDING_LOCAL  = 0x2,<br>
+<br>
+  WASM_SYMBOL_VISIBILITY_DEFAULT = 0x0,<br>
+  WASM_SYMBOL_VISIBILITY_HIDDEN = 0x4,<br>
 };<br>
<br>
 #define WASM_RELOC(name, value) name = value,<br>
<br>
Modified: llvm/trunk/include/llvm/MC/<wbr>MCSymbolWasm.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSymbolWasm.h?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/MC/MCSymbolWasm.h?rev=<wbr>319488&r1=319487&r2=319488&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/MC/<wbr>MCSymbolWasm.h (original)<br>
+++ llvm/trunk/include/llvm/MC/<wbr>MCSymbolWasm.h Thu Nov 30 14:34:58 2017<br>
@@ -18,6 +18,7 @@ class MCSymbolWasm : public MCSymbol {<br>
 private:<br>
   bool IsFunction = false;<br>
   bool IsWeak = false;<br>
+  bool IsHidden = false;<br>
   std::string ModuleName;<br>
   SmallVector<wasm::ValType, 1> Returns;<br>
   SmallVector<wasm::ValType, 4> Params;<br>
@@ -45,6 +46,9 @@ public:<br>
   bool isWeak() const { return IsWeak; }<br>
   void setWeak(bool isWeak) { IsWeak = isWeak; }<br>
<br>
+  bool isHidden() const { return IsHidden; }<br>
+  void setHidden(bool isHidden) { IsHidden = isHidden; }<br>
+<br>
   const StringRef getModuleName() const { return ModuleName; }<br>
<br>
   const SmallVector<wasm::ValType, 1> &getReturns() const {<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>Object/Wasm.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Wasm.h?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Object/Wasm.h?rev=319488&<wbr>r1=319487&r2=319488&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>Object/Wasm.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>Object/Wasm.h Thu Nov 30 14:34:58 2017<br>
@@ -81,6 +81,14 @@ public:<br>
     return Flags & wasm::WASM_SYMBOL_BINDING_<wbr>MASK;<br>
   }<br>
<br>
+  bool isHidden() const {<br>
+    return getVisibility() == wasm::WASM_SYMBOL_VISIBILITY_<wbr>HIDDEN;<br>
+  }<br>
+<br>
+  unsigned getVisibility() const {<br>
+    return Flags & wasm::WASM_SYMBOL_VISIBILITY_<wbr>MASK;<br>
+  }<br>
+<br>
   void print(raw_ostream &Out) const {<br>
     Out << "Name=" << Name << ", Type=" << static_cast<int>(Type)<br>
         << ", Flags=" << Flags << " ElemIndex=" << ElementIndex<br>
<br>
Modified: llvm/trunk/lib/MC/<wbr>MCWasmStreamer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCWasmStreamer.cpp?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/MC/<wbr>MCWasmStreamer.cpp?rev=319488&<wbr>r1=319487&r2=319488&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/MC/<wbr>MCWasmStreamer.cpp (original)<br>
+++ llvm/trunk/lib/MC/<wbr>MCWasmStreamer.cpp Thu Nov 30 14:34:58 2017<br>
@@ -98,10 +98,13 @@ bool MCWasmStreamer::<wbr>EmitSymbolAttribute<br>
   case MCSA_WeakDefAutoPrivate:<br>
   case MCSA_Invalid:<br>
   case MCSA_IndirectSymbol:<br>
-  case MCSA_Hidden:<br>
   case MCSA_Protected:<br>
     return false;<br>
<br>
+  case MCSA_Hidden:<br>
+    Symbol->setHidden(true);<br>
+    break;<br>
+<br>
   case MCSA_Weak:<br>
   case MCSA_WeakReference:<br>
     Symbol->setWeak(true);<br>
<br>
Modified: llvm/trunk/lib/MC/<wbr>WasmObjectWriter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WasmObjectWriter.cpp?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/MC/<wbr>WasmObjectWriter.cpp?rev=<wbr>319488&r1=319487&r2=319488&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/MC/<wbr>WasmObjectWriter.cpp (original)<br>
+++ llvm/trunk/lib/MC/<wbr>WasmObjectWriter.cpp Thu Nov 30 14:34:58 2017<br>
@@ -1180,10 +1180,14 @@ void WasmObjectWriter::writeObject(<wbr>MCAss<br>
                  << S.isExternal() << " isTemporary=" << S.isTemporary()<br>
                  << " isFunction=" << WS.isFunction()<br>
                  << " isWeak=" << WS.isWeak()<br>
+                 << " isHidden=" << WS.isHidden()<br>
                  << " isVariable=" << WS.isVariable() << "\n");<br>
<br>
-    if (WS.isWeak())<br>
-      SymbolFlags.emplace_back(WS.<wbr>getName(), wasm::WASM_SYMBOL_BINDING_<wbr>WEAK);<br>
+    if (WS.isWeak() || WS.isHidden()) {<br>
+      uint32_t Flags = (WS.isWeak() ? wasm::WASM_SYMBOL_BINDING_WEAK : 0) |<br>
+          (WS.isHidden() ? wasm::WASM_SYMBOL_VISIBILITY_<wbr>HIDDEN : 0);<br>
+      SymbolFlags.emplace_back(WS.<wbr>getName(), Flags);<br>
+    }<br>
<br>
     if (WS.isVariable())<br>
       continue;<br>
<br>
Modified: llvm/trunk/lib/Object/<wbr>WasmObjectFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WasmObjectFile.cpp?rev=319488&r1=319487&r2=319488&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Object/<wbr>WasmObjectFile.cpp?rev=319488&<wbr>r1=319487&r2=319488&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Object/<wbr>WasmObjectFile.cpp (original)<br>
+++ llvm/trunk/lib/Object/<wbr>WasmObjectFile.cpp Thu Nov 30 14:34:58 2017<br>
@@ -378,7 +378,7 @@ Error WasmObjectFile::<wbr>parseLinkingSectio<br>
         Symbols[SymIndex].Flags = Flags;<br>
         DEBUG(dbgs() << "Set symbol flags index:"<br>
                      << SymIndex << " name:"<br>
-                     << Symbols[SymIndex].Name << " exptected:"<br>
+                     << Symbols[SymIndex].Name << " expected:"<br>
                      << Symbol << " flags: " << Flags << "\n");<br>
       }<br>
       break;<br>
@@ -766,6 +766,8 @@ uint32_t WasmObjectFile::<wbr>getSymbolFlags(<br>
     Result |= SymbolRef::SF_Weak;<br>
   if (!Sym.isLocal())<br>
     Result |= SymbolRef::SF_Global;<br>
+  if (Sym.isHidden())<br>
+    Result |= SymbolRef::SF_Hidden;<br>
<br>
   switch (Sym.Type) {<br>
   case WasmSymbol::SymbolType::<wbr>FUNCTION_IMPORT:<br>
<br>
Added: llvm/trunk/test/MC/<wbr>WebAssembly/visibility.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/WebAssembly/visibility.ll?rev=319488&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/MC/<wbr>WebAssembly/visibility.ll?rev=<wbr>319488&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/MC/<wbr>WebAssembly/visibility.ll (added)<br>
+++ llvm/trunk/test/MC/<wbr>WebAssembly/visibility.ll Thu Nov 30 14:34:58 2017<br>
@@ -0,0 +1,23 @@<br>
+; RUN: llc -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - | obj2yaml | FileCheck %s<br>
+<br>
+; Function with __attribute__((visibility("<wbr>default")))<br>
+define void @defaultVis() #0 {<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; Function with __attribute__((visibility("<wbr>hidden")))<br>
+define hidden void @hiddenVis() #0 {<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; CHECK:        - Type:            CUSTOM<br>
+<br>
+; CHECK:        - Type:            CUSTOM<br>
+; CHECK-NEXT:     Name:            linking<br>
+; CHECK-NEXT:     DataSize:        0<br>
+; CHECK-NEXT:     SymbolInfo:<br>
+; CHECK-NEXT:       - Name:            hiddenVis<br>
+; CHECK-NEXT:         Flags:           4<br>
+; CHECK-NEXT: ...<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>