| Index: test/cctest/wasm/wasm-run-utils.h
|
| diff --git a/test/cctest/wasm/wasm-run-utils.h b/test/cctest/wasm/wasm-run-utils.h
|
| index 1d0fd7110d6eff801a6e3549d3850f8ad998ef4f..120292c1d295702901049c6d52e9ed0468f82686 100644
|
| --- a/test/cctest/wasm/wasm-run-utils.h
|
| +++ b/test/cctest/wasm/wasm-run-utils.h
|
| @@ -21,6 +21,7 @@
|
|
|
| #include "src/wasm/ast-decoder.h"
|
| #include "src/wasm/wasm-js.h"
|
| +#include "src/wasm/wasm-macro-gen.h"
|
| #include "src/wasm/wasm-module.h"
|
| #include "src/wasm/wasm-opcodes.h"
|
|
|
| @@ -202,6 +203,21 @@ class TestingModule : public ModuleEnv {
|
| instance->function_code[index] = code;
|
| }
|
|
|
| + void SetFunctionBytes(uint32_t index, const byte* start, const byte* end) {
|
| + int length = static_cast<int>(end - start);
|
| + DCHECK_EQ(end - start, length);
|
| + uint32_t bytes_offset = AddModuleBytes(Vector<const byte>(start, length));
|
| + module_.functions[index].code_start_offset = bytes_offset;
|
| + module_.functions[index].code_end_offset = bytes_offset + length;
|
| + }
|
| +
|
| + void SetFunctionName(uint32_t index, Vector<const char> name) {
|
| + uint32_t name_offset = AddModuleBytes(Vector<const byte>(
|
| + reinterpret_cast<const byte*>(name.start()), name.length()));
|
| + module_.functions[index].name_offset = name_offset;
|
| + module_.functions[index].name_length = name.length();
|
| + }
|
| +
|
| void AddIndirectFunctionTable(int* functions, int table_size) {
|
| Isolate* isolate = module->shared_isolate;
|
| Handle<FixedArray> fixed =
|
| @@ -225,12 +241,23 @@ class TestingModule : public ModuleEnv {
|
| }
|
| }
|
|
|
| + Handle<JSObject> Instantiate() {
|
| + Isolate* isolate = module->shared_isolate;
|
| + Handle<JSObject> ffi; // We don't need ffi in tests.
|
| + Handle<JSArrayBuffer> memory; // We don't need memory in tests.
|
| + return module->Instantiate(isolate, ffi, memory).ToHandleChecked();
|
| + }
|
| +
|
| private:
|
| WasmModule module_;
|
| WasmModuleInstance instance_;
|
| uint32_t global_offset;
|
| V8_ALIGNED(8) byte global_data[kMaxGlobalsSize]; // preallocated global data.
|
|
|
| + // This vector contains function names and wasm code, but not in any valid
|
| + // format. It is references by WasmFunctions (name_offset, code_start_offset).
|
| + std::vector<byte> module_bytes_;
|
| +
|
| WasmGlobal* AddGlobal(MachineType mem_type) {
|
| byte size = WasmOpcodes::MemSize(mem_type);
|
| global_offset = (global_offset + size - 1) & ~(size - 1); // align
|
| @@ -240,6 +267,17 @@ class TestingModule : public ModuleEnv {
|
| CHECK_LT(global_offset, kMaxGlobalsSize);
|
| return &module->globals.back();
|
| }
|
| +
|
| + uint32_t AddModuleBytes(Vector<const byte> bytes) {
|
| + DCHECK(module->module_start == nullptr ||
|
| + module->module_start == module_bytes_.data());
|
| + DCHECK_EQ(module->module_start == nullptr, module_bytes_.empty());
|
| + module_bytes_.insert(module_bytes_.end(), bytes.start(),
|
| + bytes.start() + bytes.length());
|
| + module->module_start = module_bytes_.data();
|
| + module->module_end = module_bytes_.data() + module_bytes_.size();
|
| + return static_cast<uint32_t>(module_bytes_.size() - bytes.length());
|
| + }
|
| };
|
|
|
| inline void TestBuildingGraph(Zone* zone, JSGraph* jsgraph, ModuleEnv* module,
|
| @@ -467,6 +505,8 @@ class WasmFunctionCompiler : public HandleAndZoneScope,
|
| local_decls.Prepend(&start, &end);
|
| TestBuildingGraph(main_zone(), &jsgraph, testing_module_, sig,
|
| &source_position_table_, start, end);
|
| + if (testing_module_ != nullptr)
|
| + testing_module_->SetFunctionBytes(function_index_, start, end);
|
| delete[] start;
|
| }
|
|
|
| @@ -523,6 +563,8 @@ class WasmFunctionCompiler : public HandleAndZoneScope,
|
| function()->sig_index = sig_index;
|
| Handle<Code> code = Compile();
|
| testing_module_->SetFunctionCode(function_index_, code);
|
| + if (debug_name_.start() != nullptr)
|
| + testing_module_->SetFunctionName(function_index_, debug_name_);
|
| return static_cast<uint32_t>(function_index_);
|
| }
|
|
|
|
|