/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef WABT_BINARY_READER_LOGGING_H_ #define WABT_BINARY_READER_LOGGING_H_ #include "wabt/binary-reader.h" namespace wabt { class Stream; class BinaryReaderLogging : public BinaryReaderDelegate { public: BinaryReaderLogging(Stream*, BinaryReaderDelegate* forward); bool OnError(const Error&) override; void OnSetState(const State* s) override; Result BeginModule(uint32_t version) override; Result EndModule() override; Result BeginSection(Index section_index, BinarySection section_type, Offset size) override; Result BeginCustomSection(Index section_index, Offset size, std::string_view section_name) override; Result EndCustomSection() override; Result BeginTypeSection(Offset size) override; Result OnTypeCount(Index count) override; Result OnFuncType(Index index, Index param_count, Type* param_types, Index result_count, Type* result_types) override; Result OnStructType(Index index, Index field_count, TypeMut* fields) override; Result OnArrayType(Index index, TypeMut field) override; Result EndTypeSection() override; Result BeginImportSection(Offset size) override; Result OnImportCount(Index count) override; Result OnImport(Index index, ExternalKind kind, std::string_view module_name, std::string_view field_name) override; Result OnImportFunc(Index import_index, std::string_view module_name, std::string_view field_name, Index func_index, Index sig_index) override; Result OnImportTable(Index import_index, std::string_view module_name, std::string_view field_name, Index table_index, Type elem_type, const Limits* elem_limits) override; Result OnImportMemory(Index import_index, std::string_view module_name, std::string_view field_name, Index memory_index, const Limits* page_limits) override; Result OnImportGlobal(Index import_index, std::string_view module_name, std::string_view field_name, Index global_index, Type type, bool mutable_) override; Result OnImportTag(Index import_index, std::string_view module_name, std::string_view field_name, Index tag_index, Index sig_index) override; Result EndImportSection() override; Result BeginFunctionSection(Offset size) override; Result OnFunctionCount(Index count) override; Result OnFunction(Index index, Index sig_index) override; Result EndFunctionSection() override; Result BeginTableSection(Offset size) override; Result OnTableCount(Index count) override; Result OnTable(Index index, Type elem_type, const Limits* elem_limits) override; Result EndTableSection() override; Result BeginMemorySection(Offset size) override; Result OnMemoryCount(Index count) override; Result OnMemory(Index index, const Limits* limits) override; Result EndMemorySection() override; Result BeginGlobalSection(Offset size) override; Result OnGlobalCount(Index count) override; Result BeginGlobal(Index index, Type type, bool mutable_) override; Result BeginGlobalInitExpr(Index index) override; Result EndGlobalInitExpr(Index index) override; Result EndGlobal(Index index) override; Result EndGlobalSection() override; Result BeginExportSection(Offset size) override; Result OnExportCount(Index count) override; Result OnExport(Index index, ExternalKind kind, Index item_index, std::string_view name) override; Result EndExportSection() override; Result BeginStartSection(Offset size) override; Result OnStartFunction(Index func_index) override; Result EndStartSection() override; Result BeginCodeSection(Offset size) override; Result OnFunctionBodyCount(Index count) override; Result BeginFunctionBody(Index index, Offset size) override; Result OnLocalDeclCount(Index count) override; Result OnLocalDecl(Index decl_index, Index count, Type type) override; Result OnOpcode(Opcode opcode) override; Result OnOpcodeBare() override; Result OnOpcodeIndex(Index value) override; Result OnOpcodeIndexIndex(Index value, Index value2) override; Result OnOpcodeUint32(uint32_t value) override; Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) override; Result OnOpcodeUint32Uint32Uint32(uint32_t value, uint32_t value2, uint32_t value3) override; Result OnOpcodeUint32Uint32Uint32Uint32(uint32_t value, uint32_t value2, uint32_t value3, uint32_t value4) override; Result OnOpcodeUint64(uint64_t value) override; Result OnOpcodeF32(uint32_t value) override; Result OnOpcodeF64(uint64_t value) override; Result OnOpcodeV128(v128 value) override; Result OnOpcodeBlockSig(Type sig_type) override; Result OnOpcodeType(Type type) override; Result OnAtomicLoadExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnAtomicStoreExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnAtomicRmwExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnAtomicRmwCmpxchgExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnBinaryExpr(Opcode opcode) override; Result OnBlockExpr(Type sig_type) override; Result OnBrExpr(Index depth) override; Result OnBrIfExpr(Index depth) override; Result OnBrTableExpr(Index num_targets, Index* target_depths, Index default_target_depth) override; Result OnCallExpr(Index func_index) override; Result OnCatchExpr(Index tag_index) override; Result OnCatchAllExpr() override; Result OnCallIndirectExpr(Index sig_index, Index table_index) override; Result OnCallRefExpr() override; Result OnCompareExpr(Opcode opcode) override; Result OnConvertExpr(Opcode opcode) override; Result OnDelegateExpr(Index depth) override; Result OnDropExpr() override; Result OnElseExpr() override; Result OnEndExpr() override; Result OnF32ConstExpr(uint32_t value_bits) override; Result OnF64ConstExpr(uint64_t value_bits) override; Result OnV128ConstExpr(v128 value_bits) override; Result OnGlobalGetExpr(Index global_index) override; Result OnGlobalSetExpr(Index global_index) override; Result OnI32ConstExpr(uint32_t value) override; Result OnI64ConstExpr(uint64_t value) override; Result OnIfExpr(Type sig_type) override; Result OnLoadExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnLocalGetExpr(Index local_index) override; Result OnLocalSetExpr(Index local_index) override; Result OnLocalTeeExpr(Index local_index) override; Result OnLoopExpr(Type sig_type) override; Result OnMemoryCopyExpr(Index srcmemidx, Index destmemidx) override; Result OnDataDropExpr(Index segment_index) override; Result OnMemoryFillExpr(Index memidx) override; Result OnMemoryGrowExpr(Index memidx) override; Result OnMemoryInitExpr(Index segment_index, Index memidx) override; Result OnMemorySizeExpr(Index memidx) override; Result OnTableCopyExpr(Index dst_index, Index src_index) override; Result OnElemDropExpr(Index segment_index) override; Result OnTableInitExpr(Index segment_index, Index table_index) override; Result OnTableGetExpr(Index table) override; Result OnTableSetExpr(Index table) override; Result OnTableGrowExpr(Index table) override; Result OnTableSizeExpr(Index table) override; Result OnTableFillExpr(Index table) override; Result OnRefFuncExpr(Index index) override; Result OnRefNullExpr(Type type) override; Result OnRefIsNullExpr() override; Result OnNopExpr() override; Result OnRethrowExpr(Index depth) override; Result OnReturnCallExpr(Index func_index) override; Result OnReturnCallIndirectExpr(Index sig_index, Index table_index) override; Result OnReturnExpr() override; Result OnSelectExpr(Index result_count, Type* result_types) override; Result OnStoreExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnThrowExpr(Index tag_index) override; Result OnTryExpr(Type sig_type) override; Result OnUnaryExpr(Opcode opcode) override; Result OnTernaryExpr(Opcode opcode) override; Result OnUnreachableExpr() override; Result OnAtomicWaitExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnAtomicFenceExpr(uint32_t consistency_model) override; Result OnAtomicNotifyExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result EndFunctionBody(Index index) override; Result EndCodeSection() override; Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override; Result OnSimdLoadLaneExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset, uint64_t value) override; Result OnSimdStoreLaneExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset, uint64_t value) override; Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) override; Result OnLoadSplatExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result OnLoadZeroExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override; Result BeginElemSection(Offset size) override; Result OnElemSegmentCount(Index count) override; Result BeginElemSegment(Index index, Index table_index, uint8_t flags) override; Result BeginElemSegmentInitExpr(Index index) override; Result EndElemSegmentInitExpr(Index index) override; Result OnElemSegmentElemType(Index index, Type elem_type) override; Result OnElemSegmentElemExprCount(Index index, Index count) override; Result OnElemSegmentElemExpr_RefNull(Index segment_index, Type type) override; Result OnElemSegmentElemExpr_RefFunc(Index segment_index, Index func_index) override; Result EndElemSegment(Index index) override; Result EndElemSection() override; Result BeginDataSection(Offset size) override; Result OnDataSegmentCount(Index count) override; Result BeginDataSegment(Index index, Index memory_index, uint8_t flags) override; Result BeginDataSegmentInitExpr(Index index) override; Result EndDataSegmentInitExpr(Index index) override; Result OnDataSegmentData(Index index, const void* data, Address size) override; Result EndDataSegment(Index index) override; Result EndDataSection() override; Result BeginDataCountSection(Offset size) override; Result OnDataCount(Index count) override; Result EndDataCountSection() override; Result BeginNamesSection(Offset size) override; Result OnModuleNameSubsection(Index index, uint32_t name_type, Offset subsection_size) override; Result OnModuleName(std::string_view name) override; Result OnFunctionNameSubsection(Index index, uint32_t name_type, Offset subsection_size) override; Result OnFunctionNamesCount(Index num_functions) override; Result OnFunctionName(Index function_index, std::string_view function_name) override; Result OnLocalNameSubsection(Index index, uint32_t name_type, Offset subsection_size) override; Result OnLocalNameFunctionCount(Index num_functions) override; Result OnLocalNameLocalCount(Index function_index, Index num_locals) override; Result OnLocalName(Index function_index, Index local_index, std::string_view local_name) override; Result OnNameSubsection(Index index, NameSectionSubsection subsection_type, Offset subsection_size) override; Result OnNameEntry(NameSectionSubsection type, Index index, std::string_view name) override; Result OnNameCount(Index num_names) override; Result EndNamesSection() override; Result BeginRelocSection(Offset size) override; Result OnRelocCount(Index count, Index section_index) override; Result OnReloc(RelocType type, Offset offset, Index index, uint32_t addend) override; Result EndRelocSection() override; Result BeginDylinkSection(Offset size) override; Result OnDylinkInfo(uint32_t mem_size, uint32_t mem_align, uint32_t table_size, uint32_t table_align) override; Result OnDylinkNeededCount(Index count) override; Result OnDylinkNeeded(std::string_view needed) override; Result OnDylinkImportCount(Index count) override; Result OnDylinkExportCount(Index count) override; Result OnDylinkImport(std::string_view module, std::string_view name, uint32_t flags) override; Result OnDylinkExport(std::string_view name, uint32_t flags) override; Result EndDylinkSection() override; Result BeginTargetFeaturesSection(Offset size) override; Result OnFeatureCount(Index count) override; Result OnFeature(uint8_t prefix, std::string_view name) override; Result EndTargetFeaturesSection() override; Result BeginLinkingSection(Offset size) override; Result OnSymbolCount(Index count) override; Result OnDataSymbol(Index index, uint32_t flags, std::string_view name, Index segment, uint32_t offset, uint32_t size) override; Result OnFunctionSymbol(Index index, uint32_t flags, std::string_view name, Index func_index) override; Result OnGlobalSymbol(Index index, uint32_t flags, std::string_view name, Index global_index) override; Result OnSectionSymbol(Index index, uint32_t flags, Index section_index) override; Result OnTagSymbol(Index index, uint32_t flags, std::string_view name, Index tag_index) override; Result OnTableSymbol(Index index, uint32_t flags, std::string_view name, Index tag_index) override; Result OnSegmentInfoCount(Index count) override; Result OnSegmentInfo(Index index, std::string_view name, Address alignment, uint32_t flags) override; Result OnInitFunctionCount(Index count) override; Result OnInitFunction(uint32_t priority, Index symbol_index) override; Result OnComdatCount(Index count) override; Result OnComdatBegin(std::string_view name, uint32_t flags, Index count) override; Result OnComdatEntry(ComdatType kind, Index index) override; Result EndLinkingSection() override; Result BeginTagSection(Offset size) override; Result OnTagCount(Index count) override; Result OnTagType(Index index, Index sig_index) override; Result EndTagSection() override; /* Code Metadata sections */ Result BeginCodeMetadataSection(std::string_view name, Offset size) override; Result OnCodeMetadataFuncCount(Index count) override; Result OnCodeMetadataCount(Index function_index, Index count) override; Result OnCodeMetadata(Offset offset, const void* data, Address size) override; Result EndCodeMetadataSection() override; private: void Indent(); void Dedent(); void WriteIndent(); void LogType(Type type); void LogTypes(Index type_count, Type* types); void LogTypes(TypeVector& types); void LogField(TypeMut field); Stream* stream_; BinaryReaderDelegate* reader_; int indent_; }; } // namespace wabt #endif // WABT_BINARY_READER_LOGGING_H_