[llvm] r319488 - Add visibility flag to Wasm symbol flags

Galina Kistanova via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 1 13:07:29 PST 2017


Hello Sam,

This commit broke one of our bots:

http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/3369

Could you take care of this, please?

Thanks

Galina

On Thu, Nov 30, 2017 at 2:34 PM, Sam Clegg via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: sbc
> Date: Thu Nov 30 14:34:58 2017
> New Revision: 319488
>
> URL: http://llvm.org/viewvc/llvm-project?rev=319488&view=rev
> Log:
> Add visibility flag to Wasm symbol flags
>
> The LLVM "hidden" flag needs to be passed through the Wasm
> intermediate objects in order for the linker to apply
> it to the final Wasm object.
>
> The corresponding change in LLD is here: https://github.com/
> WebAssembly/lld/pull/14
>
> Patch by Nicholas Wilson
>
> Differential Revision: https://reviews.llvm.org/D40442
>
> Added:
>     llvm/trunk/test/MC/WebAssembly/visibility.ll
> Modified:
>     llvm/trunk/include/llvm/BinaryFormat/Wasm.h
>     llvm/trunk/include/llvm/MC/MCSymbolWasm.h
>     llvm/trunk/include/llvm/Object/Wasm.h
>     llvm/trunk/lib/MC/MCWasmStreamer.cpp
>     llvm/trunk/lib/MC/WasmObjectWriter.cpp
>     llvm/trunk/lib/Object/WasmObjectFile.cpp
>
> Modified: llvm/trunk/include/llvm/BinaryFormat/Wasm.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/BinaryFormat/Wasm.h?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/BinaryFormat/Wasm.h (original)
> +++ llvm/trunk/include/llvm/BinaryFormat/Wasm.h Thu Nov 30 14:34:58 2017
> @@ -190,11 +190,15 @@ enum : unsigned {
>  };
>
>  const unsigned WASM_SYMBOL_BINDING_MASK = 0x3;
> +const unsigned WASM_SYMBOL_VISIBILITY_MASK = 0x4;
>
>  enum : unsigned {
>    WASM_SYMBOL_BINDING_GLOBAL = 0x0,
>    WASM_SYMBOL_BINDING_WEAK   = 0x1,
>    WASM_SYMBOL_BINDING_LOCAL  = 0x2,
> +
> +  WASM_SYMBOL_VISIBILITY_DEFAULT = 0x0,
> +  WASM_SYMBOL_VISIBILITY_HIDDEN = 0x4,
>  };
>
>  #define WASM_RELOC(name, value) name = value,
>
> Modified: llvm/trunk/include/llvm/MC/MCSymbolWasm.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/MC/MCSymbolWasm.h?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/MC/MCSymbolWasm.h (original)
> +++ llvm/trunk/include/llvm/MC/MCSymbolWasm.h Thu Nov 30 14:34:58 2017
> @@ -18,6 +18,7 @@ class MCSymbolWasm : public MCSymbol {
>  private:
>    bool IsFunction = false;
>    bool IsWeak = false;
> +  bool IsHidden = false;
>    std::string ModuleName;
>    SmallVector<wasm::ValType, 1> Returns;
>    SmallVector<wasm::ValType, 4> Params;
> @@ -45,6 +46,9 @@ public:
>    bool isWeak() const { return IsWeak; }
>    void setWeak(bool isWeak) { IsWeak = isWeak; }
>
> +  bool isHidden() const { return IsHidden; }
> +  void setHidden(bool isHidden) { IsHidden = isHidden; }
> +
>    const StringRef getModuleName() const { return ModuleName; }
>
>    const SmallVector<wasm::ValType, 1> &getReturns() const {
>
> Modified: llvm/trunk/include/llvm/Object/Wasm.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/Object/Wasm.h?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/Object/Wasm.h (original)
> +++ llvm/trunk/include/llvm/Object/Wasm.h Thu Nov 30 14:34:58 2017
> @@ -81,6 +81,14 @@ public:
>      return Flags & wasm::WASM_SYMBOL_BINDING_MASK;
>    }
>
> +  bool isHidden() const {
> +    return getVisibility() == wasm::WASM_SYMBOL_VISIBILITY_HIDDEN;
> +  }
> +
> +  unsigned getVisibility() const {
> +    return Flags & wasm::WASM_SYMBOL_VISIBILITY_MASK;
> +  }
> +
>    void print(raw_ostream &Out) const {
>      Out << "Name=" << Name << ", Type=" << static_cast<int>(Type)
>          << ", Flags=" << Flags << " ElemIndex=" << ElementIndex
>
> Modified: llvm/trunk/lib/MC/MCWasmStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/
> MCWasmStreamer.cpp?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/MC/MCWasmStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCWasmStreamer.cpp Thu Nov 30 14:34:58 2017
> @@ -98,10 +98,13 @@ bool MCWasmStreamer::EmitSymbolAttribute
>    case MCSA_WeakDefAutoPrivate:
>    case MCSA_Invalid:
>    case MCSA_IndirectSymbol:
> -  case MCSA_Hidden:
>    case MCSA_Protected:
>      return false;
>
> +  case MCSA_Hidden:
> +    Symbol->setHidden(true);
> +    break;
> +
>    case MCSA_Weak:
>    case MCSA_WeakReference:
>      Symbol->setWeak(true);
>
> Modified: llvm/trunk/lib/MC/WasmObjectWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/
> WasmObjectWriter.cpp?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/MC/WasmObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/WasmObjectWriter.cpp Thu Nov 30 14:34:58 2017
> @@ -1180,10 +1180,14 @@ void WasmObjectWriter::writeObject(MCAss
>                   << S.isExternal() << " isTemporary=" << S.isTemporary()
>                   << " isFunction=" << WS.isFunction()
>                   << " isWeak=" << WS.isWeak()
> +                 << " isHidden=" << WS.isHidden()
>                   << " isVariable=" << WS.isVariable() << "\n");
>
> -    if (WS.isWeak())
> -      SymbolFlags.emplace_back(WS.getName(), wasm::WASM_SYMBOL_BINDING_
> WEAK);
> +    if (WS.isWeak() || WS.isHidden()) {
> +      uint32_t Flags = (WS.isWeak() ? wasm::WASM_SYMBOL_BINDING_WEAK : 0)
> |
> +          (WS.isHidden() ? wasm::WASM_SYMBOL_VISIBILITY_HIDDEN : 0);
> +      SymbolFlags.emplace_back(WS.getName(), Flags);
> +    }
>
>      if (WS.isVariable())
>        continue;
>
> Modified: llvm/trunk/lib/Object/WasmObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/
> WasmObjectFile.cpp?rev=319488&r1=319487&r2=319488&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Object/WasmObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/WasmObjectFile.cpp Thu Nov 30 14:34:58 2017
> @@ -378,7 +378,7 @@ Error WasmObjectFile::parseLinkingSectio
>          Symbols[SymIndex].Flags = Flags;
>          DEBUG(dbgs() << "Set symbol flags index:"
>                       << SymIndex << " name:"
> -                     << Symbols[SymIndex].Name << " exptected:"
> +                     << Symbols[SymIndex].Name << " expected:"
>                       << Symbol << " flags: " << Flags << "\n");
>        }
>        break;
> @@ -766,6 +766,8 @@ uint32_t WasmObjectFile::getSymbolFlags(
>      Result |= SymbolRef::SF_Weak;
>    if (!Sym.isLocal())
>      Result |= SymbolRef::SF_Global;
> +  if (Sym.isHidden())
> +    Result |= SymbolRef::SF_Hidden;
>
>    switch (Sym.Type) {
>    case WasmSymbol::SymbolType::FUNCTION_IMPORT:
>
> Added: llvm/trunk/test/MC/WebAssembly/visibility.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/
> WebAssembly/visibility.ll?rev=319488&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/MC/WebAssembly/visibility.ll (added)
> +++ llvm/trunk/test/MC/WebAssembly/visibility.ll Thu Nov 30 14:34:58 2017
> @@ -0,0 +1,23 @@
> +; RUN: llc -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - |
> obj2yaml | FileCheck %s
> +
> +; Function with __attribute__((visibility("default")))
> +define void @defaultVis() #0 {
> +entry:
> +  ret void
> +}
> +
> +; Function with __attribute__((visibility("hidden")))
> +define hidden void @hiddenVis() #0 {
> +entry:
> +  ret void
> +}
> +
> +; CHECK:        - Type:            CUSTOM
> +
> +; CHECK:        - Type:            CUSTOM
> +; CHECK-NEXT:     Name:            linking
> +; CHECK-NEXT:     DataSize:        0
> +; CHECK-NEXT:     SymbolInfo:
> +; CHECK-NEXT:       - Name:            hiddenVis
> +; CHECK-NEXT:         Flags:           4
> +; CHECK-NEXT: ...
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171201/fba9c27d/attachment.html>


More information about the llvm-commits mailing list