diff options
Diffstat (limited to 'src/binary-reader.h')
-rw-r--r-- | src/binary-reader.h | 505 |
1 files changed, 0 insertions, 505 deletions
diff --git a/src/binary-reader.h b/src/binary-reader.h deleted file mode 100644 index 9ab067fe..00000000 --- a/src/binary-reader.h +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright 2016 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_H_ -#define WABT_BINARY_READER_H_ - -#include <stddef.h> -#include <stdint.h> -#include <string_view> - -#include "src/binary.h" -#include "src/common.h" -#include "src/error.h" -#include "src/feature.h" -#include "src/opcode.h" - -namespace wabt { - -class Stream; - -struct ReadBinaryOptions { - ReadBinaryOptions() = default; - ReadBinaryOptions(const Features& features, - Stream* log_stream, - bool read_debug_names, - bool stop_on_first_error, - bool fail_on_custom_section_error) - : features(features), - log_stream(log_stream), - read_debug_names(read_debug_names), - stop_on_first_error(stop_on_first_error), - fail_on_custom_section_error(fail_on_custom_section_error) {} - - Features features; - Stream* log_stream = nullptr; - bool read_debug_names = false; - bool stop_on_first_error = true; - bool fail_on_custom_section_error = true; - bool skip_function_bodies = false; -}; - -// TODO: Move somewhere else? -struct TypeMut { - Type type; - bool mutable_; -}; -using TypeMutVector = std::vector<TypeMut>; - -class BinaryReaderDelegate { - public: - struct State { - State(const uint8_t* data, Offset size) - : data(data), size(size), offset(0) {} - - const uint8_t* data; - Offset size; - Offset offset; - }; - - virtual ~BinaryReaderDelegate() {} - - virtual bool OnError(const Error&) = 0; - virtual void OnSetState(const State* s) { state = s; } - - /* Module */ - virtual Result BeginModule(uint32_t version) = 0; - virtual Result EndModule() = 0; - - virtual Result BeginSection(Index section_index, - BinarySection section_type, - Offset size) = 0; - - /* Custom section */ - virtual Result BeginCustomSection(Index section_index, - Offset size, - std::string_view section_name) = 0; - virtual Result EndCustomSection() = 0; - - /* Type section */ - virtual Result BeginTypeSection(Offset size) = 0; - virtual Result OnTypeCount(Index count) = 0; - virtual Result OnFuncType(Index index, - Index param_count, - Type* param_types, - Index result_count, - Type* result_types) = 0; - virtual Result OnStructType(Index index, - Index field_count, - TypeMut* fields) = 0; - virtual Result OnArrayType(Index index, TypeMut field) = 0; - virtual Result EndTypeSection() = 0; - - /* Import section */ - virtual Result BeginImportSection(Offset size) = 0; - virtual Result OnImportCount(Index count) = 0; - virtual Result OnImport(Index index, - ExternalKind kind, - std::string_view module_name, - std::string_view field_name) = 0; - virtual Result OnImportFunc(Index import_index, - std::string_view module_name, - std::string_view field_name, - Index func_index, - Index sig_index) = 0; - virtual 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) = 0; - virtual Result OnImportMemory(Index import_index, - std::string_view module_name, - std::string_view field_name, - Index memory_index, - const Limits* page_limits) = 0; - virtual Result OnImportGlobal(Index import_index, - std::string_view module_name, - std::string_view field_name, - Index global_index, - Type type, - bool mutable_) = 0; - virtual Result OnImportTag(Index import_index, - std::string_view module_name, - std::string_view field_name, - Index tag_index, - Index sig_index) = 0; - virtual Result EndImportSection() = 0; - - /* Function section */ - virtual Result BeginFunctionSection(Offset size) = 0; - virtual Result OnFunctionCount(Index count) = 0; - virtual Result OnFunction(Index index, Index sig_index) = 0; - virtual Result EndFunctionSection() = 0; - - /* Table section */ - virtual Result BeginTableSection(Offset size) = 0; - virtual Result OnTableCount(Index count) = 0; - virtual Result OnTable(Index index, - Type elem_type, - const Limits* elem_limits) = 0; - virtual Result EndTableSection() = 0; - - /* Memory section */ - virtual Result BeginMemorySection(Offset size) = 0; - virtual Result OnMemoryCount(Index count) = 0; - virtual Result OnMemory(Index index, const Limits* limits) = 0; - virtual Result EndMemorySection() = 0; - - /* Global section */ - virtual Result BeginGlobalSection(Offset size) = 0; - virtual Result OnGlobalCount(Index count) = 0; - virtual Result BeginGlobal(Index index, Type type, bool mutable_) = 0; - virtual Result BeginGlobalInitExpr(Index index) = 0; - virtual Result EndGlobalInitExpr(Index index) = 0; - virtual Result EndGlobal(Index index) = 0; - virtual Result EndGlobalSection() = 0; - - /* Exports section */ - virtual Result BeginExportSection(Offset size) = 0; - virtual Result OnExportCount(Index count) = 0; - virtual Result OnExport(Index index, - ExternalKind kind, - Index item_index, - std::string_view name) = 0; - virtual Result EndExportSection() = 0; - - /* Start section */ - virtual Result BeginStartSection(Offset size) = 0; - virtual Result OnStartFunction(Index func_index) = 0; - virtual Result EndStartSection() = 0; - - /* Code section */ - virtual Result BeginCodeSection(Offset size) = 0; - virtual Result OnFunctionBodyCount(Index count) = 0; - virtual Result BeginFunctionBody(Index index, Offset size) = 0; - virtual Result OnLocalDeclCount(Index count) = 0; - virtual Result OnLocalDecl(Index decl_index, Index count, Type type) = 0; - - /* Function expressions; called between BeginFunctionBody and - EndFunctionBody */ - virtual Result OnOpcode(Opcode Opcode) = 0; - virtual Result OnOpcodeBare() = 0; - virtual Result OnOpcodeUint32(uint32_t value) = 0; - virtual Result OnOpcodeIndex(Index value) = 0; - virtual Result OnOpcodeIndexIndex(Index value, Index value2) = 0; - virtual Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) = 0; - virtual Result OnOpcodeUint32Uint32Uint32(uint32_t value, - uint32_t value2, - uint32_t value3) = 0; - virtual Result OnOpcodeUint32Uint32Uint32Uint32(uint32_t value, - uint32_t value2, - uint32_t value3, - uint32_t value4) = 0; - virtual Result OnOpcodeUint64(uint64_t value) = 0; - virtual Result OnOpcodeF32(uint32_t value) = 0; - virtual Result OnOpcodeF64(uint64_t value) = 0; - virtual Result OnOpcodeV128(v128 value) = 0; - virtual Result OnOpcodeBlockSig(Type sig_type) = 0; - virtual Result OnOpcodeType(Type type) = 0; - virtual Result OnAtomicLoadExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnAtomicStoreExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnAtomicRmwExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnAtomicRmwCmpxchgExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnAtomicWaitExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnAtomicFenceExpr(uint32_t consistency_model) = 0; - virtual Result OnAtomicNotifyExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnBinaryExpr(Opcode opcode) = 0; - virtual Result OnBlockExpr(Type sig_type) = 0; - virtual Result OnBrExpr(Index depth) = 0; - virtual Result OnBrIfExpr(Index depth) = 0; - virtual Result OnBrTableExpr(Index num_targets, - Index* target_depths, - Index default_target_depth) = 0; - virtual Result OnCallExpr(Index func_index) = 0; - virtual Result OnCallIndirectExpr(Index sig_index, Index table_index) = 0; - virtual Result OnCallRefExpr() = 0; - virtual Result OnCatchExpr(Index tag_index) = 0; - virtual Result OnCatchAllExpr() = 0; - virtual Result OnCompareExpr(Opcode opcode) = 0; - virtual Result OnConvertExpr(Opcode opcode) = 0; - virtual Result OnDelegateExpr(Index depth) = 0; - virtual Result OnDropExpr() = 0; - virtual Result OnElseExpr() = 0; - virtual Result OnEndExpr() = 0; - virtual Result OnF32ConstExpr(uint32_t value_bits) = 0; - virtual Result OnF64ConstExpr(uint64_t value_bits) = 0; - virtual Result OnV128ConstExpr(v128 value_bits) = 0; - virtual Result OnGlobalGetExpr(Index global_index) = 0; - virtual Result OnGlobalSetExpr(Index global_index) = 0; - virtual Result OnI32ConstExpr(uint32_t value) = 0; - virtual Result OnI64ConstExpr(uint64_t value) = 0; - virtual Result OnIfExpr(Type sig_type) = 0; - virtual Result OnLoadExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnLocalGetExpr(Index local_index) = 0; - virtual Result OnLocalSetExpr(Index local_index) = 0; - virtual Result OnLocalTeeExpr(Index local_index) = 0; - virtual Result OnLoopExpr(Type sig_type) = 0; - virtual Result OnMemoryCopyExpr(Index srcmemidx, Index destmemidx) = 0; - virtual Result OnDataDropExpr(Index segment_index) = 0; - virtual Result OnMemoryFillExpr(Index memidx) = 0; - virtual Result OnMemoryGrowExpr(Index memidx) = 0; - virtual Result OnMemoryInitExpr(Index segment_index, Index memidx) = 0; - virtual Result OnMemorySizeExpr(Index memidx) = 0; - virtual Result OnTableCopyExpr(Index dst_index, Index src_index) = 0; - virtual Result OnElemDropExpr(Index segment_index) = 0; - virtual Result OnTableInitExpr(Index segment_index, Index table_index) = 0; - virtual Result OnTableGetExpr(Index table_index) = 0; - virtual Result OnTableSetExpr(Index table_index) = 0; - virtual Result OnTableGrowExpr(Index table_index) = 0; - virtual Result OnTableSizeExpr(Index table_index) = 0; - virtual Result OnTableFillExpr(Index table_index) = 0; - virtual Result OnRefFuncExpr(Index func_index) = 0; - virtual Result OnRefNullExpr(Type type) = 0; - virtual Result OnRefIsNullExpr() = 0; - virtual Result OnNopExpr() = 0; - virtual Result OnRethrowExpr(Index depth) = 0; - virtual Result OnReturnExpr() = 0; - virtual Result OnReturnCallExpr(Index func_index) = 0; - virtual Result OnReturnCallIndirectExpr(Index sig_index, - Index table_index) = 0; - virtual Result OnSelectExpr(Index result_count, Type* result_types) = 0; - virtual Result OnStoreExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnThrowExpr(Index tag_index) = 0; - virtual Result OnTryExpr(Type sig_type) = 0; - - virtual Result OnUnaryExpr(Opcode opcode) = 0; - virtual Result OnTernaryExpr(Opcode opcode) = 0; - virtual Result OnUnreachableExpr() = 0; - virtual Result EndFunctionBody(Index index) = 0; - virtual Result EndCodeSection() = 0; - - /* Simd instructions with Lane Imm operand*/ - virtual Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) = 0; - virtual Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) = 0; - virtual Result OnSimdLoadLaneExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset, - uint64_t value) = 0; - virtual Result OnSimdStoreLaneExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset, - uint64_t value) = 0; - - virtual Result OnLoadSplatExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - virtual Result OnLoadZeroExpr(Opcode opcode, - Index memidx, - Address alignment_log2, - Address offset) = 0; - - /* Elem section */ - virtual Result BeginElemSection(Offset size) = 0; - virtual Result OnElemSegmentCount(Index count) = 0; - virtual Result BeginElemSegment(Index index, - Index table_index, - uint8_t flags) = 0; - virtual Result BeginElemSegmentInitExpr(Index index) = 0; - virtual Result EndElemSegmentInitExpr(Index index) = 0; - virtual Result OnElemSegmentElemType(Index index, Type elem_type) = 0; - virtual Result OnElemSegmentElemExprCount(Index index, Index count) = 0; - virtual Result OnElemSegmentElemExpr_RefNull(Index segment_index, - Type type) = 0; - virtual Result OnElemSegmentElemExpr_RefFunc(Index segment_index, - Index func_index) = 0; - virtual Result EndElemSegment(Index index) = 0; - virtual Result EndElemSection() = 0; - - /* Data section */ - virtual Result BeginDataSection(Offset size) = 0; - virtual Result OnDataSegmentCount(Index count) = 0; - virtual Result BeginDataSegment(Index index, - Index memory_index, - uint8_t flags) = 0; - virtual Result BeginDataSegmentInitExpr(Index index) = 0; - virtual Result EndDataSegmentInitExpr(Index index) = 0; - virtual Result OnDataSegmentData(Index index, - const void* data, - Address size) = 0; - virtual Result EndDataSegment(Index index) = 0; - virtual Result EndDataSection() = 0; - - /* DataCount section */ - virtual Result BeginDataCountSection(Offset size) = 0; - virtual Result OnDataCount(Index count) = 0; - virtual Result EndDataCountSection() = 0; - - /* Names section */ - virtual Result BeginNamesSection(Offset size) = 0; - virtual Result OnModuleNameSubsection(Index index, - uint32_t name_type, - Offset subsection_size) = 0; - virtual Result OnModuleName(std::string_view name) = 0; - virtual Result OnFunctionNameSubsection(Index index, - uint32_t name_type, - Offset subsection_size) = 0; - virtual Result OnFunctionNamesCount(Index num_functions) = 0; - virtual Result OnFunctionName(Index function_index, - std::string_view function_name) = 0; - virtual Result OnLocalNameSubsection(Index index, - uint32_t name_type, - Offset subsection_size) = 0; - virtual Result OnLocalNameFunctionCount(Index num_functions) = 0; - virtual Result OnLocalNameLocalCount(Index function_index, - Index num_locals) = 0; - virtual Result OnLocalName(Index function_index, - Index local_index, - std::string_view local_name) = 0; - virtual Result OnNameSubsection(Index index, - NameSectionSubsection subsection_type, - Offset subsection_size) = 0; - virtual Result OnNameCount(Index num_names) = 0; - virtual Result OnNameEntry(NameSectionSubsection type, - Index index, - std::string_view name) = 0; - virtual Result EndNamesSection() = 0; - - /* Reloc section */ - virtual Result BeginRelocSection(Offset size) = 0; - virtual Result OnRelocCount(Index count, Index section_index) = 0; - virtual Result OnReloc(RelocType type, - Offset offset, - Index index, - uint32_t addend) = 0; - virtual Result EndRelocSection() = 0; - - /* Dylink section */ - virtual Result BeginDylinkSection(Offset size) = 0; - virtual Result OnDylinkInfo(uint32_t mem_size, - uint32_t mem_align_log2, - uint32_t table_size, - uint32_t table_align_log2) = 0; - virtual Result OnDylinkImportCount(Index count) = 0; - virtual Result OnDylinkExportCount(Index count) = 0; - virtual Result OnDylinkImport(std::string_view module, - std::string_view name, - uint32_t flags) = 0; - virtual Result OnDylinkExport(std::string_view name, uint32_t flags) = 0; - virtual Result OnDylinkNeededCount(Index count) = 0; - virtual Result OnDylinkNeeded(std::string_view so_name) = 0; - virtual Result EndDylinkSection() = 0; - - /* target_features section */ - virtual Result BeginTargetFeaturesSection(Offset size) = 0; - virtual Result OnFeatureCount(Index count) = 0; - virtual Result OnFeature(uint8_t prefix, std::string_view name) = 0; - virtual Result EndTargetFeaturesSection() = 0; - - /* Linking section */ - virtual Result BeginLinkingSection(Offset size) = 0; - virtual Result OnSymbolCount(Index count) = 0; - virtual Result OnDataSymbol(Index index, - uint32_t flags, - std::string_view name, - Index segment, - uint32_t offset, - uint32_t size) = 0; - virtual Result OnFunctionSymbol(Index index, - uint32_t flags, - std::string_view name, - Index function_index) = 0; - virtual Result OnGlobalSymbol(Index index, - uint32_t flags, - std::string_view name, - Index global_index) = 0; - virtual Result OnSectionSymbol(Index index, - uint32_t flags, - Index section_index) = 0; - virtual Result OnTagSymbol(Index index, - uint32_t flags, - std::string_view name, - Index tag_index) = 0; - virtual Result OnTableSymbol(Index index, - uint32_t flags, - std::string_view name, - Index table_index) = 0; - virtual Result OnSegmentInfoCount(Index count) = 0; - virtual Result OnSegmentInfo(Index index, - std::string_view name, - Address alignment_log2, - uint32_t flags) = 0; - virtual Result OnInitFunctionCount(Index count) = 0; - virtual Result OnInitFunction(uint32_t priority, Index function_index) = 0; - virtual Result OnComdatCount(Index count) = 0; - virtual Result OnComdatBegin(std::string_view name, - uint32_t flags, - Index count) = 0; - virtual Result OnComdatEntry(ComdatType kind, Index index) = 0; - virtual Result EndLinkingSection() = 0; - - /* Tag section */ - virtual Result BeginTagSection(Offset size) = 0; - virtual Result OnTagCount(Index count) = 0; - virtual Result OnTagType(Index index, Index sig_index) = 0; - virtual Result EndTagSection() = 0; - - /* Code Metadata sections */ - virtual Result BeginCodeMetadataSection(std::string_view name, - Offset size) = 0; - virtual Result OnCodeMetadataFuncCount(Index count) = 0; - virtual Result OnCodeMetadataCount(Index function_index, Index count) = 0; - virtual Result OnCodeMetadata(Offset offset, - const void* data, - Address size) = 0; - virtual Result EndCodeMetadataSection() = 0; - - const State* state = nullptr; -}; - -Result ReadBinary(const void* data, - size_t size, - BinaryReaderDelegate* reader, - const ReadBinaryOptions& options); - -size_t ReadU32Leb128(const uint8_t* ptr, - const uint8_t* end, - uint32_t* out_value); - -size_t ReadI32Leb128(const uint8_t* ptr, - const uint8_t* end, - uint32_t* out_value); - -} // namespace wabt - -#endif /* WABT_BINARY_READER_H_ */ |