diff options
Diffstat (limited to 'src/wasm/module-decoder.h')
-rw-r--r-- | src/wasm/module-decoder.h | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/src/wasm/module-decoder.h b/src/wasm/module-decoder.h index 7cf5cfe3..446883fd 100644 --- a/src/wasm/module-decoder.h +++ b/src/wasm/module-decoder.h @@ -6,7 +6,7 @@ #define V8_WASM_MODULE_DECODER_H_ #include "src/globals.h" -#include "src/wasm/ast-decoder.h" +#include "src/wasm/function-body-decoder.h" #include "src/wasm/wasm-module.h" #include "src/wasm/wasm-result.h" @@ -14,11 +14,44 @@ namespace v8 { namespace internal { namespace wasm { +const uint32_t kWasmMagic = 0x6d736100; +const uint32_t kWasmVersion = 0x01; +const uint8_t kWasmFunctionTypeForm = 0x60; +const uint8_t kWasmAnyFunctionTypeForm = 0x70; +const uint8_t kResizableMaximumFlag = 1; + +enum WasmSectionCode { + kUnknownSectionCode = 0, // code for unknown sections + kTypeSectionCode = 1, // Function signature declarations + kImportSectionCode = 2, // Import declarations + kFunctionSectionCode = 3, // Function declarations + kTableSectionCode = 4, // Indirect function table and other tables + kMemorySectionCode = 5, // Memory attributes + kGlobalSectionCode = 6, // Global declarations + kExportSectionCode = 7, // Exports + kStartSectionCode = 8, // Start function declaration + kElementSectionCode = 9, // Elements section + kCodeSectionCode = 10, // Function code + kDataSectionCode = 11, // Data segments + kNameSectionCode = 12, // Name section (encoded as a string) +}; + +inline bool IsValidSectionCode(uint8_t byte) { + return kTypeSectionCode <= byte && byte <= kDataSectionCode; +} + +const char* SectionName(WasmSectionCode code); + typedef Result<const WasmModule*> ModuleResult; typedef Result<WasmFunction*> FunctionResult; typedef std::vector<std::pair<int, int>> FunctionOffsets; typedef Result<FunctionOffsets> FunctionOffsetsResult; -typedef std::vector<std::vector<std::pair<int, int>>> AsmJsOffsets; +struct AsmJsOffsetEntry { + int byte_offset; + int source_position_call; + int source_position_number_conversion; +}; +typedef std::vector<std::vector<AsmJsOffsetEntry>> AsmJsOffsets; typedef Result<AsmJsOffsets> AsmJsOffsetsResult; // Decodes the bytes of a WASM module between {module_start} and {module_end}. @@ -37,7 +70,8 @@ V8_EXPORT_PRIVATE FunctionSig* DecodeWasmSignatureForTesting(Zone* zone, // Decodes the bytes of a WASM function between // {function_start} and {function_end}. V8_EXPORT_PRIVATE FunctionResult DecodeWasmFunction(Isolate* isolate, - Zone* zone, ModuleEnv* env, + Zone* zone, + ModuleBytesEnv* env, const byte* function_start, const byte* function_end); @@ -50,6 +84,18 @@ FunctionOffsetsResult DecodeWasmFunctionOffsets(const byte* module_start, V8_EXPORT_PRIVATE WasmInitExpr DecodeWasmInitExprForTesting(const byte* start, const byte* end); +struct CustomSectionOffset { + uint32_t section_start; + uint32_t name_offset; + uint32_t name_length; + uint32_t payload_offset; + uint32_t payload_length; + uint32_t section_length; +}; + +V8_EXPORT_PRIVATE std::vector<CustomSectionOffset> DecodeCustomSections( + const byte* start, const byte* end); + // Extracts the mapping from wasm byte offset to asm.js source position per // function. // Returns a vector of vectors with <byte_offset, source_position> entries, or |