1 //===- MCSymbolWasm.h - ----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef LLVM_MC_MCSYMBOLWASM_H 10 #define LLVM_MC_MCSYMBOLWASM_H 11 12 #include "llvm/BinaryFormat/Wasm.h" 13 #include "llvm/MC/MCSymbol.h" 14 15 namespace llvm { 16 17 class MCSymbolWasm : public MCSymbol { 18 private: 19 bool IsFunction = false; 20 bool IsWeak = false; 21 std::string ModuleName; 22 SmallVector<wasm::ValType, 1> Returns; 23 SmallVector<wasm::ValType, 4> Params; 24 bool ParamsSet = false; 25 bool ReturnsSet = false; 26 27 /// An expression describing how to calculate the size of a symbol. If a 28 /// symbol has no size this field will be NULL. 29 const MCExpr *SymbolSize = nullptr; 30 31 public: 32 // Use a module name of "env" for now, for compatibility with existing tools. 33 // This is temporary, and may change, as the ABI is not yet stable. 34 MCSymbolWasm(const StringMapEntry<bool> *Name, bool isTemporary) 35 : MCSymbol(SymbolKindWasm, Name, isTemporary), 36 ModuleName("env") {} 37 static bool classof(const MCSymbol *S) { return S->isWasm(); } 38 39 const MCExpr *getSize() const { return SymbolSize; } 40 void setSize(const MCExpr *SS) { SymbolSize = SS; } 41 42 bool isFunction() const { return IsFunction; } 43 void setIsFunction(bool isFunc) { IsFunction = isFunc; } 44 45 bool isWeak() const { return IsWeak; } 46 void setWeak(bool isWeak) { IsWeak = isWeak; } 47 48 const StringRef getModuleName() const { return ModuleName; } 49 50 const SmallVector<wasm::ValType, 1> &getReturns() const { 51 assert(ReturnsSet); 52 return Returns; 53 } 54 55 void setReturns(SmallVectorImpl<wasm::ValType> &&Rets) { 56 ReturnsSet = true; 57 Returns = std::move(Rets); 58 } 59 60 const SmallVector<wasm::ValType, 4> &getParams() const { 61 assert(ParamsSet); 62 return Params; 63 } 64 65 void setParams(SmallVectorImpl<wasm::ValType> &&Pars) { 66 ParamsSet = true; 67 Params = std::move(Pars); 68 } 69 }; 70 71 } // end namespace llvm 72 73 #endif // LLVM_MC_MCSYMBOLWASM_H 74