LLVM 22.0.0git
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
12#include "llvm/MC/MCSymbol.h"
14
15namespace llvm {
16
17class MCSymbolWasm : public MCSymbol {
18 std::optional<wasm::WasmSymbolType> Type;
19 bool IsWeak = false;
20 bool IsHidden = false;
21 bool IsComdat = false;
22 bool OmitFromLinkingSection = false;
23 mutable bool IsUsedInInitArray = false;
24 mutable bool IsUsedInGOT = false;
25 std::optional<StringRef> ImportModule;
26 std::optional<StringRef> ImportName;
27 std::optional<StringRef> ExportName;
28 wasm::WasmSignature *Signature = nullptr;
29 std::optional<wasm::WasmGlobalType> GlobalType;
30 std::optional<wasm::WasmTableType> TableType;
31
32 /// An expression describing how to calculate the size of a symbol. If a
33 /// symbol has no size this field will be NULL.
34 const MCExpr *SymbolSize = nullptr;
35
36public:
39
40 bool isExternal() const { return IsExternal; }
41 void setExternal(bool Value) const { IsExternal = Value; }
42 const MCExpr *getSize() const { return SymbolSize; }
43 void setSize(const MCExpr *SS) { SymbolSize = SS; }
44
46 // Data is the default value if not set.
47 bool isData() const { return !Type || Type == wasm::WASM_SYMBOL_TYPE_DATA; }
48 bool isGlobal() const { return Type == wasm::WASM_SYMBOL_TYPE_GLOBAL; }
49 bool isTable() const { return Type == wasm::WASM_SYMBOL_TYPE_TABLE; }
50 bool isSection() const { return Type == wasm::WASM_SYMBOL_TYPE_SECTION; }
51 bool isTag() const { return Type == wasm::WASM_SYMBOL_TYPE_TAG; }
52
53 std::optional<wasm::WasmSymbolType> getType() const { return Type; }
54
55 void setType(wasm::WasmSymbolType type) { Type = type; }
56
57 bool isExported() const {
59 }
60 void setExported() const {
62 }
63
64 bool isNoStrip() const {
66 }
67 void setNoStrip() const {
69 }
70
71 bool isTLS() const { return getFlags() & wasm::WASM_SYMBOL_TLS; }
72 void setTLS() const {
74 }
75
76 bool isWeak() const { return IsWeak; }
77 void setWeak(bool isWeak) { IsWeak = isWeak; }
78
79 bool isHidden() const { return IsHidden; }
80 void setHidden(bool isHidden) { IsHidden = isHidden; }
81
82 bool isComdat() const { return IsComdat; }
83 void setComdat(bool isComdat) { IsComdat = isComdat; }
84
85 // wasm-ld understands a finite set of symbol types. This flag allows the
86 // compiler to avoid emitting symbol table entries that would confuse the
87 // linker, unless the user specifically requests the feature.
88 bool omitFromLinkingSection() const { return OmitFromLinkingSection; }
89 void setOmitFromLinkingSection() { OmitFromLinkingSection = true; }
90
91 bool hasImportModule() const { return ImportModule.has_value(); }
93 if (ImportModule)
94 return *ImportModule;
95 // Use a default module name of "env" for now, for compatibility with
96 // existing tools.
97 // TODO(sbc): Find a way to specify a default value in the object format
98 // without picking a hardcoded value like this.
99 return "env";
100 }
101 void setImportModule(StringRef Name) { ImportModule = Name; }
102
103 bool hasImportName() const { return ImportName.has_value(); }
105 if (ImportName)
106 return *ImportName;
107 return getName();
108 }
109 void setImportName(StringRef Name) { ImportName = Name; }
110
111 bool hasExportName() const { return ExportName.has_value(); }
112 StringRef getExportName() const { return *ExportName; }
113 void setExportName(StringRef Name) { ExportName = Name; }
114
115 bool isFunctionTable() const {
116 return isTable() && hasTableType() &&
118 }
119 void setFunctionTable(bool is64) {
121 uint8_t flags =
124 }
125
126 void setUsedInGOT() const { IsUsedInGOT = true; }
127 bool isUsedInGOT() const { return IsUsedInGOT; }
128
129 void setUsedInInitArray() const { IsUsedInInitArray = true; }
130 bool isUsedInInitArray() const { return IsUsedInInitArray; }
131
132 const wasm::WasmSignature *getSignature() const { return Signature; }
133 void setSignature(wasm::WasmSignature *Sig) { Signature = Sig; }
134
136 assert(GlobalType);
137 return *GlobalType;
138 }
139 void setGlobalType(wasm::WasmGlobalType GT) { GlobalType = GT; }
140
141 bool hasTableType() const { return TableType.has_value(); }
144 return *TableType;
145 }
146 void setTableType(wasm::WasmTableType TT) { TableType = TT; }
149 // Declare a table with element type VT and no limits (min size 0, no max
150 // size).
151 wasm::WasmLimits Limits = {flags, 0, 0, 0};
152 setTableType({VT, Limits});
153 }
154};
155
156} // end namespace llvm
157
158#endif // LLVM_MC_MCSYMBOLWASM_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
std::string Name
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
bool isGlobal() const
Definition: MCSymbolWasm.h:48
void setTableType(wasm::WasmTableType TT)
Definition: MCSymbolWasm.h:146
void setComdat(bool isComdat)
Definition: MCSymbolWasm.h:83
const wasm::WasmTableType & getTableType() const
Definition: MCSymbolWasm.h:142
void setImportModule(StringRef Name)
Definition: MCSymbolWasm.h:101
bool isUsedInGOT() const
Definition: MCSymbolWasm.h:127
StringRef getImportModule() const
Definition: MCSymbolWasm.h:92
bool isExported() const
Definition: MCSymbolWasm.h:57
const wasm::WasmSignature * getSignature() const
Definition: MCSymbolWasm.h:132
StringRef getImportName() const
Definition: MCSymbolWasm.h:104
bool isExternal() const
Definition: MCSymbolWasm.h:40
MCSymbolWasm(const MCSymbolTableEntry *Name, bool isTemporary)
Definition: MCSymbolWasm.h:37
const MCExpr * getSize() const
Definition: MCSymbolWasm.h:42
bool hasImportModule() const
Definition: MCSymbolWasm.h:91
void setSignature(wasm::WasmSignature *Sig)
Definition: MCSymbolWasm.h:133
void setFunctionTable(bool is64)
Definition: MCSymbolWasm.h:119
bool isFunctionTable() const
Definition: MCSymbolWasm.h:115
bool hasTableType() const
Definition: MCSymbolWasm.h:141
void setTableType(wasm::ValType VT, uint8_t flags=wasm::WASM_LIMITS_FLAG_NONE)
Definition: MCSymbolWasm.h:147
void setNoStrip() const
Definition: MCSymbolWasm.h:67
void setImportName(StringRef Name)
Definition: MCSymbolWasm.h:109
void setWeak(bool isWeak)
Definition: MCSymbolWasm.h:77
void setType(wasm::WasmSymbolType type)
Definition: MCSymbolWasm.h:55
void setExportName(StringRef Name)
Definition: MCSymbolWasm.h:113
void setGlobalType(wasm::WasmGlobalType GT)
Definition: MCSymbolWasm.h:139
void setHidden(bool isHidden)
Definition: MCSymbolWasm.h:80
bool isNoStrip() const
Definition: MCSymbolWasm.h:64
void setOmitFromLinkingSection()
Definition: MCSymbolWasm.h:89
void setUsedInInitArray() const
Definition: MCSymbolWasm.h:129
bool isHidden() const
Definition: MCSymbolWasm.h:79
bool isSection() const
Definition: MCSymbolWasm.h:50
bool hasExportName() const
Definition: MCSymbolWasm.h:111
bool omitFromLinkingSection() const
Definition: MCSymbolWasm.h:88
void setExternal(bool Value) const
Definition: MCSymbolWasm.h:41
void setExported() const
Definition: MCSymbolWasm.h:60
bool isTable() const
Definition: MCSymbolWasm.h:49
const wasm::WasmGlobalType & getGlobalType() const
Definition: MCSymbolWasm.h:135
StringRef getExportName() const
Definition: MCSymbolWasm.h:112
bool isComdat() const
Definition: MCSymbolWasm.h:82
bool isData() const
Definition: MCSymbolWasm.h:47
void setUsedInGOT() const
Definition: MCSymbolWasm.h:126
bool isTag() const
Definition: MCSymbolWasm.h:51
bool isUsedInInitArray() const
Definition: MCSymbolWasm.h:130
bool hasImportName() const
Definition: MCSymbolWasm.h:103
bool isTLS() const
Definition: MCSymbolWasm.h:71
bool isFunction() const
Definition: MCSymbolWasm.h:45
void setSize(const MCExpr *SS)
Definition: MCSymbolWasm.h:43
std::optional< wasm::WasmSymbolType > getType() const
Definition: MCSymbolWasm.h:53
void setTLS() const
Definition: MCSymbolWasm.h:72
bool isWeak() const
Definition: MCSymbolWasm.h:76
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
void modifyFlags(uint32_t Value, uint32_t Mask) const
Modify the flags via a mask.
Definition: MCSymbol.h:375
StringRef getName() const
getName - Get the symbol name.
Definition: MCSymbol.h:188
uint32_t getFlags() const
Get the (implementation defined) symbol flags.
Definition: MCSymbol.h:366
unsigned IsExternal
True if this symbol is visible outside this translation unit.
Definition: MCSymbol.h:87
bool isTemporary() const
isTemporary - Check if this is an assembler temporary symbol.
Definition: MCSymbol.h:205
const MCExpr * Value
If non-null, the value for a variable symbol.
Definition: MCSymbol.h:130
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
LLVM Value Representation.
Definition: Value.h:75
const unsigned WASM_SYMBOL_NO_STRIP
Definition: Wasm.h:250
@ WASM_LIMITS_FLAG_IS_64
Definition: Wasm.h:161
@ WASM_LIMITS_FLAG_NONE
Definition: Wasm.h:158
const unsigned WASM_SYMBOL_TLS
Definition: Wasm.h:251
WasmSymbolType
Definition: Wasm.h:219
@ WASM_SYMBOL_TYPE_GLOBAL
Definition: Wasm.h:222
@ WASM_SYMBOL_TYPE_DATA
Definition: Wasm.h:221
@ WASM_SYMBOL_TYPE_TAG
Definition: Wasm.h:224
@ WASM_SYMBOL_TYPE_TABLE
Definition: Wasm.h:225
@ WASM_SYMBOL_TYPE_SECTION
Definition: Wasm.h:223
@ WASM_SYMBOL_TYPE_FUNCTION
Definition: Wasm.h:220
const unsigned WASM_SYMBOL_EXPORTED
Definition: Wasm.h:248
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18