OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_WASM_MODULE_H_ | 5 #ifndef V8_WASM_MODULE_H_ |
6 #define V8_WASM_MODULE_H_ | 6 #define V8_WASM_MODULE_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/api.h" | 10 #include "src/api.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 class WasmInstanceObject; | 25 class WasmInstanceObject; |
26 | 26 |
27 namespace compiler { | 27 namespace compiler { |
28 class CallDescriptor; | 28 class CallDescriptor; |
29 class WasmCompilationUnit; | 29 class WasmCompilationUnit; |
30 } | 30 } |
31 | 31 |
32 namespace wasm { | 32 namespace wasm { |
33 class ErrorThrower; | 33 class ErrorThrower; |
34 | 34 |
35 const size_t kMaxModuleSize = 1024 * 1024 * 1024; | |
36 const size_t kMaxFunctionSize = 128 * 1024; | |
37 const size_t kMaxStringSize = 256; | |
38 const uint32_t kWasmMagic = 0x6d736100; | 35 const uint32_t kWasmMagic = 0x6d736100; |
39 const uint32_t kWasmVersion = 0x0d; | 36 const uint32_t kWasmVersion = 0x0d; |
40 | 37 |
41 const uint8_t kWasmFunctionTypeForm = 0x60; | 38 const uint8_t kWasmFunctionTypeForm = 0x60; |
42 const uint8_t kWasmAnyFunctionTypeForm = 0x70; | 39 const uint8_t kWasmAnyFunctionTypeForm = 0x70; |
43 | 40 |
44 const uint64_t kWasmMaxHeapOffset = | |
45 static_cast<uint64_t>( | |
46 std::numeric_limits<uint32_t>::max()) // maximum base value | |
47 + std::numeric_limits<uint32_t>::max(); // maximum index value | |
48 | |
49 enum WasmSectionCode { | 41 enum WasmSectionCode { |
50 kUnknownSectionCode = 0, // code for unknown sections | 42 kUnknownSectionCode = 0, // code for unknown sections |
51 kTypeSectionCode = 1, // Function signature declarations | 43 kTypeSectionCode = 1, // Function signature declarations |
52 kImportSectionCode = 2, // Import declarations | 44 kImportSectionCode = 2, // Import declarations |
53 kFunctionSectionCode = 3, // Function declarations | 45 kFunctionSectionCode = 3, // Function declarations |
54 kTableSectionCode = 4, // Indirect function table and other tables | 46 kTableSectionCode = 4, // Indirect function table and other tables |
55 kMemorySectionCode = 5, // Memory attributes | 47 kMemorySectionCode = 5, // Memory attributes |
56 kGlobalSectionCode = 6, // Global declarations | 48 kGlobalSectionCode = 6, // Global declarations |
57 kExportSectionCode = 7, // Exports | 49 kExportSectionCode = 7, // Exports |
58 kStartSectionCode = 8, // Start function declaration | 50 kStartSectionCode = 8, // Start function declaration |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 uint32_t index; // index into the respective space. | 168 uint32_t index; // index into the respective space. |
177 }; | 169 }; |
178 | 170 |
179 enum ModuleOrigin { kWasmOrigin, kAsmJsOrigin }; | 171 enum ModuleOrigin { kWasmOrigin, kAsmJsOrigin }; |
180 struct ModuleWireBytes; | 172 struct ModuleWireBytes; |
181 | 173 |
182 // Static representation of a module. | 174 // Static representation of a module. |
183 struct V8_EXPORT_PRIVATE WasmModule { | 175 struct V8_EXPORT_PRIVATE WasmModule { |
184 static const uint32_t kPageSize = 0x10000; // Page size, 64kb. | 176 static const uint32_t kPageSize = 0x10000; // Page size, 64kb. |
185 static const uint32_t kMinMemPages = 1; // Minimum memory size = 64kb | 177 static const uint32_t kMinMemPages = 1; // Minimum memory size = 64kb |
186 static const size_t kV8MaxPages = 16384; // Maximum memory size = 1gb | |
187 static const size_t kSpecMaxPages = 65536; // Maximum according to the spec | |
188 static const size_t kV8MaxTableSize = 16 * 1024 * 1024; | |
189 | 178 |
190 Zone* owned_zone; | 179 Zone* owned_zone; |
191 uint32_t min_mem_pages = 0; // minimum size of the memory in 64k pages | 180 uint32_t min_mem_pages = 0; // minimum size of the memory in 64k pages |
192 uint32_t max_mem_pages = 0; // maximum size of the memory in 64k pages | 181 uint32_t max_mem_pages = 0; // maximum size of the memory in 64k pages |
193 bool has_memory = false; // true if the memory was defined or imported | 182 bool has_memory = false; // true if the memory was defined or imported |
194 bool mem_export = false; // true if the memory is exported | 183 bool mem_export = false; // true if the memory is exported |
195 // TODO(wasm): reconcile start function index being an int with | 184 // TODO(wasm): reconcile start function index being an int with |
196 // the fact that we index on uint32_t, so we may technically not be | 185 // the fact that we index on uint32_t, so we may technically not be |
197 // able to represent some start_function_index -es. | 186 // able to represent some start_function_index -es. |
198 int start_function_index = -1; // start function, if any | 187 int start_function_index = -1; // start function, if any |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 void ValidateModuleState(Isolate* isolate, Handle<WasmModuleObject> module_obj); | 447 void ValidateModuleState(Isolate* isolate, Handle<WasmModuleObject> module_obj); |
459 void ValidateOrphanedInstance(Isolate* isolate, | 448 void ValidateOrphanedInstance(Isolate* isolate, |
460 Handle<WasmInstanceObject> instance); | 449 Handle<WasmInstanceObject> instance); |
461 | 450 |
462 } // namespace testing | 451 } // namespace testing |
463 } // namespace wasm | 452 } // namespace wasm |
464 } // namespace internal | 453 } // namespace internal |
465 } // namespace v8 | 454 } // namespace v8 |
466 | 455 |
467 #endif // V8_WASM_MODULE_H_ | 456 #endif // V8_WASM_MODULE_H_ |
OLD | NEW |