LLVM  10.0.0svn
MCSymbolWasm.h
Go to the documentation of this file.
1 //===- MCSymbolWasm.h - ----------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_MC_MCSYMBOLWASM_H
9 #define LLVM_MC_MCSYMBOLWASM_H
10 
11 #include "llvm/BinaryFormat/Wasm.h"
12 #include "llvm/MC/MCSymbol.h"
13 
14 namespace llvm {
15 
16 class MCSymbolWasm : public MCSymbol {
18  bool IsWeak = false;
19  bool IsHidden = false;
20  bool IsComdat = false;
21  mutable bool IsUsedInGOT = false;
22  Optional<std::string> ImportModule;
23  Optional<std::string> ImportName;
24  wasm::WasmSignature *Signature = nullptr;
27 
28  /// An expression describing how to calculate the size of a symbol. If a
29  /// symbol has no size this field will be NULL.
30  const MCExpr *SymbolSize = nullptr;
31 
32 public:
33  // Use a module name of "env" for now, for compatibility with existing tools.
34  // This is temporary, and may change, as the ABI is not yet stable.
36  : MCSymbol(SymbolKindWasm, Name, isTemporary) {}
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 Type == wasm::WASM_SYMBOL_TYPE_FUNCTION; }
43  bool isData() const { return Type == wasm::WASM_SYMBOL_TYPE_DATA; }
44  bool isGlobal() const { return Type == wasm::WASM_SYMBOL_TYPE_GLOBAL; }
45  bool isSection() const { return Type == wasm::WASM_SYMBOL_TYPE_SECTION; }
46  bool isEvent() const { return Type == wasm::WASM_SYMBOL_TYPE_EVENT; }
47  wasm::WasmSymbolType getType() const { return Type; }
48  void setType(wasm::WasmSymbolType type) { Type = type; }
49 
50  bool isExported() const {
52  }
53  void setExported() const {
55  }
56 
57  bool isNoStrip() const {
59  }
60  void setNoStrip() const {
62  }
63 
64  bool isWeak() const { return IsWeak; }
65  void setWeak(bool isWeak) { IsWeak = isWeak; }
66 
67  bool isHidden() const { return IsHidden; }
68  void setHidden(bool isHidden) { IsHidden = isHidden; }
69 
70  bool isComdat() const { return IsComdat; }
71  void setComdat(bool isComdat) { IsComdat = isComdat; }
72 
73  const StringRef getImportModule() const {
74  if (ImportModule.hasValue()) {
75  return ImportModule.getValue();
76  }
77  return "env";
78  }
79  void setImportModule(StringRef Name) { ImportModule = Name; }
80 
81  const StringRef getImportName() const {
82  if (ImportName.hasValue()) {
83  return ImportName.getValue();
84  }
85  return getName();
86  }
87  void setImportName(StringRef Name) { ImportName = Name; }
88 
89  void setUsedInGOT() const { IsUsedInGOT = true; }
90  bool isUsedInGOT() const { return IsUsedInGOT; }
91 
92  const wasm::WasmSignature *getSignature() const { return Signature; }
93  void setSignature(wasm::WasmSignature *Sig) { Signature = Sig; }
94 
96  assert(GlobalType.hasValue());
97  return GlobalType.getValue();
98  }
99  void setGlobalType(wasm::WasmGlobalType GT) { GlobalType = GT; }
100 
102  assert(EventType.hasValue());
103  return EventType.getValue();
104  }
105  void setEventType(wasm::WasmEventType ET) { EventType = ET; }
106 };
107 
108 } // end namespace llvm
109 
110 #endif // LLVM_MC_MCSYMBOLWASM_H
bool isFunction() const
Definition: MCSymbolWasm.h:42
void setImportModule(StringRef Name)
Definition: MCSymbolWasm.h:79
WasmSymbolType
Definition: Wasm.h:309
bool isData() const
Definition: MCSymbolWasm.h:43
This class represents lattice values for constants.
Definition: AllocatorList.h:23
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
Definition: StringMap.h:158
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
void setWeak(bool isWeak)
Definition: MCSymbolWasm.h:65
bool isWasm() const
Definition: MCSymbol.h:288
void setNoStrip() const
Definition: MCSymbolWasm.h:60
static bool classof(const MCSymbol *S)
Definition: MCSymbolWasm.h:37
void setGlobalType(wasm::WasmGlobalType GT)
Definition: MCSymbolWasm.h:99
void setImportName(StringRef Name)
Definition: MCSymbolWasm.h:87
bool isUsedInGOT() const
Definition: MCSymbolWasm.h:90
const wasm::WasmGlobalType & getGlobalType() const
Definition: MCSymbolWasm.h:95
bool isWeak() const
Definition: MCSymbolWasm.h:64
const wasm::WasmEventType & getEventType() const
Definition: MCSymbolWasm.h:101
void setComdat(bool isComdat)
Definition: MCSymbolWasm.h:71
bool isSection() const
Definition: MCSymbolWasm.h:45
void setSize(const MCExpr *SS)
Definition: MCSymbolWasm.h:40
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:35
const unsigned WASM_SYMBOL_NO_STRIP
Definition: Wasm.h:333
bool isGlobal() const
Definition: MCSymbolWasm.h:44
const wasm::WasmSignature * getSignature() const
Definition: MCSymbolWasm.h:92
const T & getValue() const LLVM_LVALUE_FUNCTION
Definition: Optional.h:255
void setHidden(bool isHidden)
Definition: MCSymbolWasm.h:68
void setEventType(wasm::WasmEventType ET)
Definition: MCSymbolWasm.h:105
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
bool isNoStrip() const
Definition: MCSymbolWasm.h:57
bool isTemporary() const
isTemporary - Check if this is an assembler temporary symbol.
Definition: MCSymbol.h:221
const MCExpr * getSize() const
Definition: MCSymbolWasm.h:39
void setType(wasm::WasmSymbolType type)
Definition: MCSymbolWasm.h:48
const StringRef getImportModule() const
Definition: MCSymbolWasm.h:73
bool isComdat() const
Definition: MCSymbolWasm.h:70
MCSymbolWasm(const StringMapEntry< bool > *Name, bool isTemporary)
Definition: MCSymbolWasm.h:35
bool isExported() const
Definition: MCSymbolWasm.h:50
bool hasValue() const
Definition: Optional.h:259
void setExported() const
Definition: MCSymbolWasm.h:53
StringRef getName() const
getName - Get the symbol name.
Definition: MCSymbol.h:204
wasm::WasmSymbolType getType() const
Definition: MCSymbolWasm.h:47
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
void setSignature(wasm::WasmSignature *Sig)
Definition: MCSymbolWasm.h:93
void setUsedInGOT() const
Definition: MCSymbolWasm.h:89
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
const StringRef getImportName() const
Definition: MCSymbolWasm.h:81
const unsigned WASM_SYMBOL_EXPORTED
Definition: Wasm.h:331
bool isHidden() const
Definition: MCSymbolWasm.h:67
void modifyFlags(uint32_t Value, uint32_t Mask) const
Modify the flags via a mask.
Definition: MCSymbol.h:428
uint32_t getFlags() const
Get the (implementation defined) symbol flags.
Definition: MCSymbol.h:419
bool isEvent() const
Definition: MCSymbolWasm.h:46