v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
v8::internal::wasm::FunctionBodyDisassembler Class Reference

#include <wasm-disassembler-impl.h>

Inheritance diagram for v8::internal::wasm::FunctionBodyDisassembler:
Collaboration diagram for v8::internal::wasm::FunctionBodyDisassembler:

Public Types

enum  FunctionHeader : bool { kSkipHeader = false , kPrintHeader = true }
 
using ValidationTag = Decoder::FullValidationTag
 
- Public Types inherited from v8::internal::wasm::Decoder
enum  TraceFlag : bool { kTrace = true , kNoTrace = false }
 
template<typename ValidationTag >
using Name = std::conditional_t<ValidationTag::validate, const char*, NoName>
 

Public Member Functions

 FunctionBodyDisassembler (Zone *zone, const WasmModule *module, uint32_t func_index, bool shared, WasmDetectedFeatures *detected, const FunctionSig *sig, const uint8_t *start, const uint8_t *end, uint32_t offset, const ModuleWireBytes wire_bytes, NamesProvider *names)
 
void DecodeAsWat (MultiLineStringBuilder &out, Indentation indentation, FunctionHeader include_header=kPrintHeader, uint32_t *first_instruction_offset=nullptr)
 
void DecodeGlobalInitializer (StringBuilder &out)
 
std::set< uint32_t > & used_types ()
 
- Public Member Functions inherited from v8::internal::wasm::WasmDecoder< Decoder::FullValidationTag >
 WasmDecoder (Zone *zone, const WasmModule *module, WasmEnabledFeatures enabled, WasmDetectedFeatures *detected, const FunctionSig *sig, bool is_shared, const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0)
 
Zonezone () const
 
uint32_t num_locals () const
 
base::Vector< ValueTypelocal_types () const
 
ValueType local_type (uint32_t index) const
 
uint32_t DecodeLocals (const uint8_t *pc)
 
V8_INLINE void DecodeError (Args... args)
 
bool Validate (const uint8_t *pc, TagIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, GlobalIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, SigIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, StructIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, FieldImmediate &imm)
 
bool Validate (const uint8_t *pc, ArrayIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, CallFunctionImmediate &imm)
 
bool Validate (const uint8_t *pc, CallIndirectImmediate &imm)
 
bool Validate (const uint8_t *pc, BranchDepthImmediate &imm, size_t control_depth)
 
bool Validate (const uint8_t *pc, BranchTableImmediate &imm)
 
bool Validate (const uint8_t *pc, WasmOpcode opcode, SimdLaneImmediate &imm)
 
bool Validate (const uint8_t *pc, Simd128Immediate &imm)
 
bool Validate (const uint8_t *pc, BlockTypeImmediate &imm)
 
bool Validate (const uint8_t *pc, MemoryIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, MemoryAccessImmediate &imm)
 
bool Validate (const uint8_t *pc, MemoryInitImmediate &imm)
 
bool Validate (const uint8_t *pc, MemoryCopyImmediate &imm)
 
bool Validate (const uint8_t *pc, TableInitImmediate &imm)
 
bool Validate (const uint8_t *pc, TableCopyImmediate &imm)
 
bool Validate (const uint8_t *pc, StringConstImmediate &imm)
 
bool Validate (const uint8_t *pc, TableIndexImmediate &imm)
 
bool Validate (const uint8_t *pc, SelectTypeImmediate &imm)
 
bool Validate (const uint8_t *pc, HeapTypeImmediate &imm)
 
bool CanReturnCall (const FunctionSig *target_sig)
 
bool ValidateElementSegment (const uint8_t *pc, IndexImmediate &imm)
 
bool ValidateLocal (const uint8_t *pc, IndexImmediate &imm)
 
bool ValidateFunction (const uint8_t *pc, IndexImmediate &imm)
 
bool ValidateCont (const uint8_t *pc, ContIndexImmediate &imm)
 
bool ValidateDataSegment (const uint8_t *pc, IndexImmediate &imm)
 
bool ValidateValueType (const uint8_t *pc, ValueType type)
 
bool ValidateHeapType (const uint8_t *pc, HeapType type)
 
- Public Member Functions inherited from v8::internal::wasm::Decoder
 Decoder (const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0)
 
 Decoder (const base::Vector< const uint8_t > bytes, uint32_t buffer_offset=0)
 
 Decoder (const uint8_t *start, const uint8_t *pc, const uint8_t *end, uint32_t buffer_offset=0)
 
virtual ~Decoder ()=default
 
template<typename ValidationTag >
uint8_t read_u8 (const uint8_t *pc, Name< ValidationTag > msg="expected 1 byte")
 
template<typename ValidationTag >
uint16_t read_u16 (const uint8_t *pc, Name< ValidationTag > msg="expected 2 bytes")
 
template<typename ValidationTag >
uint32_t read_u32 (const uint8_t *pc, Name< ValidationTag > msg="expected 4 bytes")
 
template<typename ValidationTag >
uint64_t read_u64 (const uint8_t *pc, Name< ValidationTag > msg="expected 8 bytes")
 
template<typename ValidationTag >
std::pair< uint32_t, uint32_t > read_u32v (const uint8_t *pc, Name< ValidationTag > name="LEB32")
 
template<typename ValidationTag >
std::pair< int32_t, uint32_t > read_i32v (const uint8_t *pc, Name< ValidationTag > name="signed LEB32")
 
template<typename ValidationTag >
std::pair< uint64_t, uint32_t > read_u64v (const uint8_t *pc, Name< ValidationTag > name="LEB64")
 
template<typename ValidationTag >
std::pair< int64_t, uint32_t > read_i64v (const uint8_t *pc, Name< ValidationTag > name="signed LEB64")
 
template<typename ValidationTag >
std::pair< int64_t, uint32_t > read_i33v (const uint8_t *pc, Name< ValidationTag > name="signed LEB33")
 
template<typename ValidationTag >
std::pair< WasmOpcode, uint32_t > read_prefixed_opcode (const uint8_t *pc, Name< ValidationTag > name="prefixed opcode")
 
uint8_t consume_u8 (const char *name="uint8_t")
 
uint8_t consume_u8 (const char *name, ITracer *tracer)
 
uint16_t consume_u16 (const char *name="uint16_t")
 
uint32_t consume_u32 (const char *name, ITracer *tracer)
 
uint32_t consume_u32v (const char *name="var_uint32")
 
uint32_t consume_u32v (const char *name, ITracer *tracer)
 
int32_t consume_i32v (const char *name="var_int32")
 
uint64_t consume_u64v (const char *name, ITracer *tracer)
 
int64_t consume_i64v (const char *name="var_int64")
 
void consume_bytes (uint32_t size, const char *name="skip")
 
void consume_bytes (uint32_t size, const char *name, ITracer *tracer)
 
uint32_t available_bytes () const
 
bool checkAvailable (uint32_t size)
 
void V8_NOINLINE V8_PRESERVE_MOST error (const char *msg)
 
void V8_NOINLINE V8_PRESERVE_MOST error (const uint8_t *pc, const char *msg)
 
void V8_NOINLINE V8_PRESERVE_MOST error (uint32_t offset, const char *msg)
 
template<typename... Args>
void V8_NOINLINE V8_PRESERVE_MOST errorf (const char *format, Args... args)
 
template<typename... Args>
void V8_NOINLINE V8_PRESERVE_MOST errorf (const uint8_t *pc, const char *format, Args... args)
 
template<typename... Args>
void V8_NOINLINE V8_PRESERVE_MOST errorf (uint32_t offset, const char *format, Args... args)
 
virtual void onFirstError ()
 
void traceByteRange (const uint8_t *start, const uint8_t *end)
 
void traceOffEnd ()
 
template<typename T , typename R = std::decay_t<T>>
Result< R > toResult (T &&val)
 
void Reset (const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0)
 
void Reset (base::Vector< const uint8_t > bytes, uint32_t buffer_offset=0)
 
bool ok () const
 
bool failed () const
 
bool more () const
 
const WasmErrorerror () const
 
const uint8_t * start () const
 
const uint8_t * pc () const
 
uint32_t V8_INLINE position () const
 
uint32_t V8_INLINE pc_offset (const uint8_t *pc) const
 
uint32_t pc_offset () const
 
uint32_t buffer_offset () const
 
uint32_t GetBufferRelativeOffset (uint32_t offset) const
 
const uint8_t * end () const
 
void set_end (const uint8_t *end)
 
bool lookahead (int offset, uint8_t expected)
 

Protected Member Functions

WasmOpcode GetOpcode ()
 
uint32_t PrintImmediatesAndGetLength (StringBuilder &out)
 
void PrintHexNumber (StringBuilder &out, uint64_t number)
 
LabelInfolabel_info (int depth)
 

Protected Attributes

uint32_t func_index_
 
WasmOpcode current_opcode_ = kExprUnreachable
 
const ModuleWireBytes wire_bytes_
 
NamesProvidernames_
 
std::set< uint32_t > used_types_
 
std::vector< LabelInfolabel_stack_
 
MultiLineStringBuilderout_
 
uint32_t label_occurrence_index_ = 0
 
uint32_t label_generation_index_ = 0
 
- Protected Attributes inherited from v8::internal::wasm::Decoder
const uint8_t * start_
 
const uint8_t * pc_
 
const uint8_t * end_
 
uint32_t buffer_offset_
 
WasmError error_
 

Friends

class ImmediatesPrinter< ValidationTag >
 

Additional Inherited Members

- Static Public Member Functions inherited from v8::internal::wasm::WasmDecoder< Decoder::FullValidationTag >
static BitVectorAnalyzeLoopAssignment (WasmDecoder *decoder, const uint8_t *pc, uint32_t locals_count, Zone *zone, bool *loop_is_innermost=nullptr)
 
static uint32_t OpcodeLength (WasmDecoder *decoder, const uint8_t *pc, ImmediateObservers &... ios)
 
- Public Attributes inherited from v8::internal::wasm::WasmDecoder< Decoder::FullValidationTag >
Zone *const zone_
 
ValueTypelocal_types_
 
uint32_t num_locals_
 
const WasmModulemodule_
 
const WasmEnabledFeatures enabled_
 
WasmDetectedFeaturesdetected_
 
const FunctionSigsig_
 
bool is_shared_
 
const std::pair< uint32_t, uint32_t > * current_inst_trace_
 
- Static Public Attributes inherited from v8::internal::wasm::WasmDecoder< Decoder::FullValidationTag >
static constexpr Decoder::FullValidationTag validate
 
- Static Public Attributes inherited from v8::internal::wasm::Decoder
static constexpr struct v8::internal::wasm::Decoder::NoValidationTag kNoValidation = {}
 
static constexpr struct v8::internal::wasm::Decoder::FullValidationTag kFullValidation = {}
 

Detailed Description

Definition at line 236 of file wasm-disassembler-impl.h.

Member Typedef Documentation

◆ ValidationTag

Member Enumeration Documentation

◆ FunctionHeader

Enumerator
kSkipHeader 
kPrintHeader 

Definition at line 240 of file wasm-disassembler-impl.h.

Constructor & Destructor Documentation

◆ FunctionBodyDisassembler()

v8::internal::wasm::FunctionBodyDisassembler::FunctionBodyDisassembler ( Zone * zone,
const WasmModule * module,
uint32_t func_index,
bool shared,
WasmDetectedFeatures * detected,
const FunctionSig * sig,
const uint8_t * start,
const uint8_t * end,
uint32_t offset,
const ModuleWireBytes wire_bytes,
NamesProvider * names )
inline

Definition at line 242 of file wasm-disassembler-impl.h.

Member Function Documentation

◆ DecodeAsWat()

void v8::internal::wasm::FunctionBodyDisassembler::DecodeAsWat ( MultiLineStringBuilder & out,
Indentation indentation,
FunctionHeader include_header = kPrintHeader,
uint32_t * first_instruction_offset = nullptr )

Definition at line 217 of file wasm-disassembler.cc.

Here is the call graph for this function:

◆ DecodeGlobalInitializer()

void v8::internal::wasm::FunctionBodyDisassembler::DecodeGlobalInitializer ( StringBuilder & out)

Definition at line 314 of file wasm-disassembler.cc.

Here is the call graph for this function:

◆ GetOpcode()

WasmOpcode v8::internal::wasm::FunctionBodyDisassembler::GetOpcode ( )
protected

Definition at line 328 of file wasm-disassembler.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ label_info()

LabelInfo & v8::internal::wasm::FunctionBodyDisassembler::label_info ( int depth)
inlineprotected

Definition at line 270 of file wasm-disassembler-impl.h.

Here is the caller graph for this function:

◆ PrintHexNumber()

void v8::internal::wasm::FunctionBodyDisassembler::PrintHexNumber ( StringBuilder & out,
uint64_t number )
protected

Definition at line 334 of file wasm-disassembler.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrintImmediatesAndGetLength()

uint32_t v8::internal::wasm::FunctionBodyDisassembler::PrintImmediatesAndGetLength ( StringBuilder & out)
protected

Definition at line 718 of file wasm-disassembler.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ used_types()

std::set< uint32_t > & v8::internal::wasm::FunctionBodyDisassembler::used_types ( )
inline

Definition at line 261 of file wasm-disassembler-impl.h.

Friends And Related Symbol Documentation

◆ ImmediatesPrinter< ValidationTag >

friend class ImmediatesPrinter< ValidationTag >
friend

Definition at line 270 of file wasm-disassembler-impl.h.

Member Data Documentation

◆ current_opcode_

WasmOpcode v8::internal::wasm::FunctionBodyDisassembler::current_opcode_ = kExprUnreachable
protected

Definition at line 276 of file wasm-disassembler-impl.h.

◆ func_index_

uint32_t v8::internal::wasm::FunctionBodyDisassembler::func_index_
protected

Definition at line 275 of file wasm-disassembler-impl.h.

◆ label_generation_index_

uint32_t v8::internal::wasm::FunctionBodyDisassembler::label_generation_index_ = 0
protected

Definition at line 288 of file wasm-disassembler-impl.h.

◆ label_occurrence_index_

uint32_t v8::internal::wasm::FunctionBodyDisassembler::label_occurrence_index_ = 0
protected

Definition at line 287 of file wasm-disassembler-impl.h.

◆ label_stack_

std::vector<LabelInfo> v8::internal::wasm::FunctionBodyDisassembler::label_stack_
protected

Definition at line 280 of file wasm-disassembler-impl.h.

◆ names_

NamesProvider* v8::internal::wasm::FunctionBodyDisassembler::names_
protected

Definition at line 278 of file wasm-disassembler-impl.h.

◆ out_

MultiLineStringBuilder* v8::internal::wasm::FunctionBodyDisassembler::out_
protected

Definition at line 281 of file wasm-disassembler-impl.h.

◆ used_types_

std::set<uint32_t> v8::internal::wasm::FunctionBodyDisassembler::used_types_
protected

Definition at line 279 of file wasm-disassembler-impl.h.

◆ wire_bytes_

const ModuleWireBytes v8::internal::wasm::FunctionBodyDisassembler::wire_bytes_
protected

Definition at line 277 of file wasm-disassembler-impl.h.


The documentation for this class was generated from the following files: