Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
WebAssemblyDisassembler.cpp
Go to the documentation of this file.
1//==- WebAssemblyDisassembler.cpp - Disassembler for WebAssembly -*- 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///
9/// \file
10/// This file is part of the WebAssembly Disassembler.
11///
12/// It contains code to translate the data produced by the decoder into
13/// MCInsts.
14///
15//===----------------------------------------------------------------------===//
16
17#include "MCTargetDesc/WebAssemblyMCTypeUtilities.h"
18#include "TargetInfo/WebAssemblyTargetInfo.h"
19#include "llvm/BinaryFormat/Wasm.h"
20#include "llvm/MC/MCContext.h"
21#include "llvm/MC/MCDisassembler/MCDisassembler.h"
22#include "llvm/MC/MCInst.h"
23#include "llvm/MC/MCInstrInfo.h"
24#include "llvm/MC/MCSubtargetInfo.h"
25#include "llvm/MC/MCSymbol.h"
26#include "llvm/MC/MCSymbolWasm.h"
27#include "llvm/MC/TargetRegistry.h"
28#include "llvm/Support/Casting.h"
29#include "llvm/Support/Endian.h"
30#include "llvm/Support/LEB128.h"
31
32using namespacellvm;
33
34#define DEBUG_TYPE "wasm-disassembler"
35
36usingDecodeStatus =MCDisassembler::DecodeStatus;
37
38#include "WebAssemblyGenDisassemblerTables.inc"
39
40namespace{
41staticconstexprint WebAssemblyInstructionTableSize = 256;
42
43classWebAssemblyDisassembler final :publicMCDisassembler {
44 std::unique_ptr<const MCInstrInfo> MCII;
45
46DecodeStatusgetInstruction(MCInst &Instr,uint64_t &Size,
47ArrayRef<uint8_t> Bytes,uint64_tAddress,
48raw_ostream &CStream)const override;
49
50Expected<bool>onSymbolStart(SymbolInfoTy &Symbol,uint64_t &Size,
51ArrayRef<uint8_t> Bytes,
52uint64_tAddress)const override;
53
54public:
55 WebAssemblyDisassembler(constMCSubtargetInfo &STI,MCContext &Ctx,
56 std::unique_ptr<const MCInstrInfo> MCII)
57 :MCDisassembler(STI, Ctx), MCII(std::move(MCII)) {}
58};
59}// end anonymous namespace
60
61staticMCDisassembler *createWebAssemblyDisassembler(constTarget &T,
62constMCSubtargetInfo &STI,
63MCContext &Ctx) {
64 std::unique_ptr<const MCInstrInfo> MCII(T.createMCInstrInfo());
65returnnew WebAssemblyDisassembler(STI, Ctx, std::move(MCII));
66}
67
68extern"C"LLVM_EXTERNAL_VISIBILITYvoid
69LLVMInitializeWebAssemblyDisassembler() {
70// Register the disassembler for each target.
71TargetRegistry::RegisterMCDisassembler(getTheWebAssemblyTarget32(),
72createWebAssemblyDisassembler);
73TargetRegistry::RegisterMCDisassembler(getTheWebAssemblyTarget64(),
74createWebAssemblyDisassembler);
75}
76
77staticintnextByte(ArrayRef<uint8_t> Bytes,uint64_t &Size) {
78if (Size >= Bytes.size())
79return -1;
80auto V = Bytes[Size];
81Size++;
82return V;
83}
84
85staticboolnextLEB(int64_t &Val,ArrayRef<uint8_t> Bytes,uint64_t &Size,
86boolSigned) {
87unsignedN = 0;
88constchar *Error =nullptr;
89 Val =Signed ?decodeSLEB128(Bytes.data() +Size, &N,
90 Bytes.data() + Bytes.size(), &Error)
91 :static_cast<int64_t>(decodeULEB128(Bytes.data() +Size, &N,
92 Bytes.data() + Bytes.size(),
93 &Error));
94if (Error)
95returnfalse;
96Size +=N;
97returntrue;
98}
99
100staticboolparseLEBImmediate(MCInst &MI,uint64_t &Size,
101ArrayRef<uint8_t> Bytes,boolSigned) {
102 int64_t Val;
103if (!nextLEB(Val, Bytes,Size,Signed))
104returnfalse;
105MI.addOperand(MCOperand::createImm(Val));
106returntrue;
107}
108
109template <typename T>
110boolparseImmediate(MCInst &MI,uint64_t &Size,ArrayRef<uint8_t> Bytes) {
111if (Size +sizeof(T) > Bytes.size())
112returnfalse;
113T Val =
114 support::endian::read<T, llvm::endianness::little>(Bytes.data() +Size);
115Size +=sizeof(T);
116if (std::is_floating_point<T>::value) {
117MI.addOperand(
118MCOperand::createDFPImm(bit_cast<uint64_t>(static_cast<double>(Val))));
119 }else {
120MI.addOperand(MCOperand::createImm(static_cast<int64_t>(Val)));
121 }
122returntrue;
123}
124
125Expected<bool> WebAssemblyDisassembler::onSymbolStart(SymbolInfoTy &Symbol,
126uint64_t &Size,
127ArrayRef<uint8_t> Bytes,
128uint64_t Address) const{
129Size = 0;
130if (Symbol.Type ==wasm::WASM_SYMBOL_TYPE_SECTION) {
131// Start of a code section: we're parsing only the function count.
132 int64_t FunctionCount;
133if (!nextLEB(FunctionCount, Bytes,Size,false))
134returnfalse;
135outs() <<" # " << FunctionCount <<" functions in section.";
136 }else {
137// Parse the start of a single function.
138 int64_t BodySize, LocalEntryCount;
139if (!nextLEB(BodySize, Bytes,Size,false) ||
140 !nextLEB(LocalEntryCount, Bytes,Size,false))
141returnfalse;
142if (LocalEntryCount) {
143outs() <<" .local ";
144for (int64_tI = 0;I < LocalEntryCount;I++) {
145 int64_t Count,Type;
146if (!nextLEB(Count, Bytes,Size,false) ||
147 !nextLEB(Type, Bytes,Size,false))
148returnfalse;
149for (int64_t J = 0; J < Count; J++) {
150if (I || J)
151outs() <<", ";
152outs() <<WebAssembly::anyTypeToString(Type);
153 }
154 }
155 }
156 }
157outs() <<"\n";
158returntrue;
159}
160
161MCDisassembler::DecodeStatus WebAssemblyDisassembler::getInstruction(
162MCInst &MI,uint64_t &Size,ArrayRef<uint8_t> Bytes,uint64_t/*Address*/,
163raw_ostream &CS) const{
164 CommentStream = &CS;
165Size = 0;
166int Opc =nextByte(Bytes,Size);
167if (Opc < 0)
168returnMCDisassembler::Fail;
169constauto *WasmInst = &InstructionTable0[Opc];
170// If this is a prefix byte, indirect to another table.
171if (WasmInst->ET == ET_Prefix) {
172 WasmInst =nullptr;
173// Linear search, so far only 2 entries.
174for (auto PT = PrefixTable; PT->Table; PT++) {
175if (PT->Prefix == Opc) {
176 WasmInst = PT->Table;
177break;
178 }
179 }
180if (!WasmInst)
181returnMCDisassembler::Fail;
182 int64_t PrefixedOpc;
183if (!nextLEB(PrefixedOpc, Bytes,Size,false))
184returnMCDisassembler::Fail;
185if (PrefixedOpc < 0 || PrefixedOpc >= WebAssemblyInstructionTableSize)
186returnMCDisassembler::Fail;
187 WasmInst += PrefixedOpc;
188 }
189if (WasmInst->ET == ET_Unused)
190returnMCDisassembler::Fail;
191// At this point we must have a valid instruction to decode.
192assert(WasmInst->ET == ET_Instruction);
193MI.setOpcode(WasmInst->Opcode);
194// Parse any operands.
195for (uint8_t OPI = 0; OPI < WasmInst->NumOperands; OPI++) {
196auto OT = OperandTable[WasmInst->OperandStart + OPI];
197switch (OT) {
198// ULEB operands:
199caseWebAssembly::OPERAND_BASIC_BLOCK:
200caseWebAssembly::OPERAND_LOCAL:
201caseWebAssembly::OPERAND_GLOBAL:
202caseWebAssembly::OPERAND_FUNCTION32:
203caseWebAssembly::OPERAND_TABLE:
204caseWebAssembly::OPERAND_OFFSET32:
205caseWebAssembly::OPERAND_OFFSET64:
206caseWebAssembly::OPERAND_P2ALIGN:
207caseWebAssembly::OPERAND_TYPEINDEX:
208caseWebAssembly::OPERAND_TAG:
209caseMCOI::OPERAND_IMMEDIATE: {
210if (!parseLEBImmediate(MI,Size, Bytes,false))
211returnMCDisassembler::Fail;
212break;
213 }
214// SLEB operands:
215caseWebAssembly::OPERAND_I32IMM:
216caseWebAssembly::OPERAND_I64IMM: {
217if (!parseLEBImmediate(MI,Size, Bytes,true))
218returnMCDisassembler::Fail;
219break;
220 }
221// block_type operands:
222caseWebAssembly::OPERAND_SIGNATURE: {
223 int64_t Val;
224uint64_t PrevSize =Size;
225if (!nextLEB(Val, Bytes,Size,true))
226returnMCDisassembler::Fail;
227if (Val < 0) {
228// Negative values are single septet value types or empty types
229if (Size != PrevSize + 1) {
230MI.addOperand(
231MCOperand::createImm(int64_t(WebAssembly::BlockType::Invalid)));
232 }else {
233MI.addOperand(MCOperand::createImm(Val & 0x7f));
234 }
235 }else {
236// We don't have access to the signature, so create a symbol without one
237MCSymbol *Sym = getContext().createTempSymbol("typeindex",true);
238auto *WasmSym = cast<MCSymbolWasm>(Sym);
239 WasmSym->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION);
240constMCExpr *Expr =MCSymbolRefExpr::create(
241 WasmSym,MCSymbolRefExpr::VK_WASM_TYPEINDEX, getContext());
242MI.addOperand(MCOperand::createExpr(Expr));
243 }
244break;
245 }
246// FP operands.
247caseWebAssembly::OPERAND_F32IMM: {
248if (!parseImmediate<float>(MI,Size, Bytes))
249returnMCDisassembler::Fail;
250break;
251 }
252caseWebAssembly::OPERAND_F64IMM: {
253if (!parseImmediate<double>(MI,Size, Bytes))
254returnMCDisassembler::Fail;
255break;
256 }
257// Vector lane operands (not LEB encoded).
258caseWebAssembly::OPERAND_VEC_I8IMM: {
259if (!parseImmediate<uint8_t>(MI,Size, Bytes))
260returnMCDisassembler::Fail;
261break;
262 }
263caseWebAssembly::OPERAND_VEC_I16IMM: {
264if (!parseImmediate<uint16_t>(MI,Size, Bytes))
265returnMCDisassembler::Fail;
266break;
267 }
268caseWebAssembly::OPERAND_VEC_I32IMM: {
269if (!parseImmediate<uint32_t>(MI,Size, Bytes))
270returnMCDisassembler::Fail;
271break;
272 }
273caseWebAssembly::OPERAND_VEC_I64IMM: {
274if (!parseImmediate<uint64_t>(MI,Size, Bytes))
275returnMCDisassembler::Fail;
276break;
277 }
278caseWebAssembly::OPERAND_BRLIST: {
279 int64_t TargetTableLen;
280if (!nextLEB(TargetTableLen, Bytes,Size,false))
281returnMCDisassembler::Fail;
282for (int64_tI = 0;I < TargetTableLen;I++) {
283if (!parseLEBImmediate(MI,Size, Bytes,false))
284returnMCDisassembler::Fail;
285 }
286// Default case.
287if (!parseLEBImmediate(MI,Size, Bytes,false))
288returnMCDisassembler::Fail;
289break;
290 }
291caseWebAssembly::OPERAND_CATCH_LIST: {
292if (!parseLEBImmediate(MI,Size, Bytes,false))
293returnMCDisassembler::Fail;
294 int64_t NumCatches =MI.getOperand(MI.getNumOperands() - 1).getImm();
295for (int64_tI = 0;I < NumCatches;I++) {
296if (!parseImmediate<uint8_t>(MI,Size, Bytes))
297returnMCDisassembler::Fail;
298 int64_t CatchOpcode =MI.getOperand(MI.getNumOperands() - 1).getImm();
299if (CatchOpcode ==wasm::WASM_OPCODE_CATCH ||
300 CatchOpcode ==wasm::WASM_OPCODE_CATCH_REF) {
301if (!parseLEBImmediate(MI,Size, Bytes,false))// tag index
302returnMCDisassembler::Fail;
303 }
304if (!parseLEBImmediate(MI,Size, Bytes,false))// destination
305returnMCDisassembler::Fail;
306 }
307break;
308 }
309caseMCOI::OPERAND_REGISTER:
310// The tablegen header currently does not have any register operands since
311// we use only the stack (_S) instructions.
312// If you hit this that probably means a bad instruction definition in
313// tablegen.
314llvm_unreachable("Register operand in WebAssemblyDisassembler");
315default:
316llvm_unreachable("Unknown operand type in WebAssemblyDisassembler");
317 }
318 }
319returnMCDisassembler::Success;
320}
Wasm.h
Casting.h
LLVM_EXTERNAL_VISIBILITY
#define LLVM_EXTERNAL_VISIBILITY
Definition:Compiler.h:128
Size
uint64_t Size
Definition:ELFObjHandler.cpp:81
Sym
Symbol * Sym
Definition:ELF_riscv.cpp:479
Endian.h
MI
IRTranslator LLVM IR MI
Definition:IRTranslator.cpp:112
LEB128.h
MCContext.h
MCDisassembler.h
MCInst.h
MCInstrInfo.h
MCSubtargetInfo.h
MCSymbolWasm.h
MCSymbol.h
I
#define I(x, y, z)
Definition:MD5.cpp:58
Signed
@ Signed
Definition:NVPTXISelLowering.cpp:4789
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Address
@ Address
Definition:SPIRVEmitNonSemanticDI.cpp:68
TargetRegistry.h
LLVMInitializeWebAssemblyDisassembler
LLVM_EXTERNAL_VISIBILITY void LLVMInitializeWebAssemblyDisassembler()
Definition:WebAssemblyDisassembler.cpp:69
nextByte
static int nextByte(ArrayRef< uint8_t > Bytes, uint64_t &Size)
Definition:WebAssemblyDisassembler.cpp:77
nextLEB
static bool nextLEB(int64_t &Val, ArrayRef< uint8_t > Bytes, uint64_t &Size, bool Signed)
Definition:WebAssemblyDisassembler.cpp:85
createWebAssemblyDisassembler
static MCDisassembler * createWebAssemblyDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
Definition:WebAssemblyDisassembler.cpp:61
parseImmediate
bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef< uint8_t > Bytes)
Definition:WebAssemblyDisassembler.cpp:110
parseLEBImmediate
static bool parseLEBImmediate(MCInst &MI, uint64_t &Size, ArrayRef< uint8_t > Bytes, bool Signed)
Definition:WebAssemblyDisassembler.cpp:100
WebAssemblyMCTypeUtilities.h
This file contains the declaration of the WebAssembly-specific type parsing utility functions.
WebAssemblyTargetInfo.h
This file registers the WebAssembly target.
T
llvm::ArrayRef
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition:ArrayRef.h:41
llvm::ArrayRef::size
size_t size() const
size - Get the array size.
Definition:ArrayRef.h:168
llvm::ArrayRef::data
const T * data() const
Definition:ArrayRef.h:165
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition:Error.h:160
llvm::Expected
Tagged union holding either a T or a Error.
Definition:Error.h:481
llvm::MCContext
Context object for machine code objects.
Definition:MCContext.h:83
llvm::MCDisassembler
Superclass for all disassemblers.
Definition:MCDisassembler.h:84
llvm::MCDisassembler::onSymbolStart
virtual Expected< bool > onSymbolStart(SymbolInfoTy &Symbol, uint64_t &Size, ArrayRef< uint8_t > Bytes, uint64_t Address) const
Used to perform separate target specific disassembly for a particular symbol.
Definition:MCDisassembler.cpp:16
llvm::MCDisassembler::DecodeStatus
DecodeStatus
Ternary decode status.
Definition:MCDisassembler.h:108
llvm::MCDisassembler::Fail
@ Fail
Definition:MCDisassembler.h:109
llvm::MCDisassembler::Success
@ Success
Definition:MCDisassembler.h:111
llvm::MCDisassembler::getInstruction
virtual DecodeStatus getInstruction(MCInst &Instr, uint64_t &Size, ArrayRef< uint8_t > Bytes, uint64_t Address, raw_ostream &CStream) const =0
Returns the disassembly of a single instruction.
llvm::MCExpr
Base class for the full range of assembler expressions which are needed for parsing.
Definition:MCExpr.h:34
llvm::MCInst
Instances of this class represent a single low-level machine instruction.
Definition:MCInst.h:185
llvm::MCOperand::createExpr
static MCOperand createExpr(const MCExpr *Val)
Definition:MCInst.h:163
llvm::MCOperand::createImm
static MCOperand createImm(int64_t Val)
Definition:MCInst.h:142
llvm::MCOperand::createDFPImm
static MCOperand createDFPImm(uint64_t Val)
Definition:MCInst.h:156
llvm::MCSubtargetInfo
Generic base class for all target subtargets.
Definition:MCSubtargetInfo.h:76
llvm::MCSymbolRefExpr::VK_WASM_TYPEINDEX
@ VK_WASM_TYPEINDEX
Definition:MCExpr.h:339
llvm::MCSymbolRefExpr::create
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
Definition:MCExpr.h:398
llvm::MCSymbol
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition:MCSymbol.h:41
llvm::Target
Target - Wrapper for Target specific information.
Definition:TargetRegistry.h:144
llvm::Type
The instances of the Type class are immutable: once they are created, they are never changed.
Definition:Type.h:45
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:raw_ostream.h:52
uint64_t
uint8_t
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition:ErrorHandling.h:143
llvm::ARMBuildAttrs::Symbol
@ Symbol
Definition:ARMBuildAttributes.h:83
llvm::MCOI::OPERAND_REGISTER
@ OPERAND_REGISTER
Definition:MCInstrDesc.h:61
llvm::MCOI::OPERAND_IMMEDIATE
@ OPERAND_IMMEDIATE
Definition:MCInstrDesc.h:60
llvm::WebAssembly::OPERAND_GLOBAL
@ OPERAND_GLOBAL
Global index.
Definition:WebAssemblyMCTargetDesc.h:55
llvm::WebAssembly::OPERAND_CATCH_LIST
@ OPERAND_CATCH_LIST
A list of catch clauses for try_table.
Definition:WebAssemblyMCTargetDesc.h:91
llvm::WebAssembly::OPERAND_OFFSET64
@ OPERAND_OFFSET64
64-bit unsigned memory offsets.
Definition:WebAssemblyMCTargetDesc.h:77
llvm::WebAssembly::OPERAND_I32IMM
@ OPERAND_I32IMM
32-bit integer immediates.
Definition:WebAssemblyMCTargetDesc.h:57
llvm::WebAssembly::OPERAND_P2ALIGN
@ OPERAND_P2ALIGN
p2align immediate for load and store address alignment.
Definition:WebAssemblyMCTargetDesc.h:79
llvm::WebAssembly::OPERAND_TABLE
@ OPERAND_TABLE
32-bit unsigned table number.
Definition:WebAssemblyMCTargetDesc.h:89
llvm::WebAssembly::OPERAND_LOCAL
@ OPERAND_LOCAL
Local index.
Definition:WebAssemblyMCTargetDesc.h:53
llvm::WebAssembly::OPERAND_VEC_I64IMM
@ OPERAND_VEC_I64IMM
64-bit vector lane immediate
Definition:WebAssemblyMCTargetDesc.h:71
llvm::WebAssembly::OPERAND_VEC_I16IMM
@ OPERAND_VEC_I16IMM
16-bit vector lane immediate
Definition:WebAssemblyMCTargetDesc.h:67
llvm::WebAssembly::OPERAND_TYPEINDEX
@ OPERAND_TYPEINDEX
type signature immediate for call_indirect.
Definition:WebAssemblyMCTargetDesc.h:83
llvm::WebAssembly::OPERAND_TAG
@ OPERAND_TAG
Tag index.
Definition:WebAssemblyMCTargetDesc.h:85
llvm::WebAssembly::OPERAND_FUNCTION32
@ OPERAND_FUNCTION32
32-bit unsigned function indices.
Definition:WebAssemblyMCTargetDesc.h:73
llvm::WebAssembly::OPERAND_F32IMM
@ OPERAND_F32IMM
32-bit floating-point immediates.
Definition:WebAssemblyMCTargetDesc.h:61
llvm::WebAssembly::OPERAND_BASIC_BLOCK
@ OPERAND_BASIC_BLOCK
Basic block label in a branch construct.
Definition:WebAssemblyMCTargetDesc.h:51
llvm::WebAssembly::OPERAND_VEC_I32IMM
@ OPERAND_VEC_I32IMM
32-bit vector lane immediate
Definition:WebAssemblyMCTargetDesc.h:69
llvm::WebAssembly::OPERAND_BRLIST
@ OPERAND_BRLIST
A list of branch targets for br_list.
Definition:WebAssemblyMCTargetDesc.h:87
llvm::WebAssembly::OPERAND_F64IMM
@ OPERAND_F64IMM
64-bit floating-point immediates.
Definition:WebAssemblyMCTargetDesc.h:63
llvm::WebAssembly::OPERAND_VEC_I8IMM
@ OPERAND_VEC_I8IMM
8-bit vector lane immediate
Definition:WebAssemblyMCTargetDesc.h:65
llvm::WebAssembly::OPERAND_SIGNATURE
@ OPERAND_SIGNATURE
signature immediate for block/loop.
Definition:WebAssemblyMCTargetDesc.h:81
llvm::WebAssembly::OPERAND_I64IMM
@ OPERAND_I64IMM
64-bit integer immediates.
Definition:WebAssemblyMCTargetDesc.h:59
llvm::WebAssembly::OPERAND_OFFSET32
@ OPERAND_OFFSET32
32-bit unsigned memory offsets.
Definition:WebAssemblyMCTargetDesc.h:75
llvm::WebAssembly::anyTypeToString
const char * anyTypeToString(unsigned Type)
Definition:WebAssemblyMCTypeUtilities.cpp:51
llvm::wasm::WASM_SYMBOL_TYPE_SECTION
@ WASM_SYMBOL_TYPE_SECTION
Definition:Wasm.h:219
llvm::wasm::WASM_SYMBOL_TYPE_FUNCTION
@ WASM_SYMBOL_TYPE_FUNCTION
Definition:Wasm.h:216
llvm::wasm::WASM_OPCODE_CATCH
@ WASM_OPCODE_CATCH
Definition:Wasm.h:149
llvm::wasm::WASM_OPCODE_CATCH_REF
@ WASM_OPCODE_CATCH_REF
Definition:Wasm.h:150
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::outs
raw_fd_ostream & outs()
This returns a reference to a raw_fd_ostream for standard output.
Definition:raw_ostream.cpp:895
llvm::decodeULEB128
uint64_t decodeULEB128(const uint8_t *p, unsigned *n=nullptr, const uint8_t *end=nullptr, const char **error=nullptr)
Utility function to decode a ULEB128 value.
Definition:LEB128.h:131
llvm::decodeSLEB128
int64_t decodeSLEB128(const uint8_t *p, unsigned *n=nullptr, const uint8_t *end=nullptr, const char **error=nullptr)
Utility function to decode a SLEB128 value.
Definition:LEB128.h:165
llvm::getTheWebAssemblyTarget32
Target & getTheWebAssemblyTarget32()
Definition:WebAssemblyTargetInfo.cpp:20
llvm::getTheWebAssemblyTarget64
Target & getTheWebAssemblyTarget64()
Definition:WebAssemblyTargetInfo.cpp:24
N
#define N
llvm::SymbolInfoTy
Definition:MCDisassembler.h:29
llvm::TargetRegistry::RegisterMCDisassembler
static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)
RegisterMCDisassembler - Register a MCDisassembler implementation for the given target.
Definition:TargetRegistry.h:878

Generated on Fri Jul 18 2025 14:43:22 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp