Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Side by Side Diff: test/common/wasm/wasm-module-runner.cc

Issue 2341673002: [wasm] Allocate memory for the wasm interpreter in the fuzzer. (Closed)
Patch Set: Delete stale code. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include "test/common/wasm/wasm-module-runner.h" 5 #include "test/common/wasm/wasm-module-runner.h"
6 6
7 #include "src/handles.h" 7 #include "src/handles.h"
8 #include "src/isolate.h" 8 #include "src/isolate.h"
9 #include "src/objects.h" 9 #include "src/objects.h"
10 #include "src/property-descriptor.h" 10 #include "src/property-descriptor.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 103
104 if (module->import_table.size() > 0) { 104 if (module->import_table.size() > 0) {
105 thrower.Error("Not supported: module has imports."); 105 thrower.Error("Not supported: module has imports.");
106 } 106 }
107 if (module->export_table.size() == 0) { 107 if (module->export_table.size() == 0) {
108 thrower.Error("Not supported: module has no exports."); 108 thrower.Error("Not supported: module has no exports.");
109 } 109 }
110 110
111 if (thrower.error()) return -1; 111 if (thrower.error()) return -1;
112 112
113 ModuleEnv module_env;
114 module_env.module = module;
115 module_env.origin = module->origin;
116
117 for (size_t i = 0; i < module->functions.size(); i++) {
118 FunctionBody body = {
119 &module_env, module->functions[i].sig, module->module_start,
120 module->module_start + module->functions[i].code_start_offset,
121 module->module_start + module->functions[i].code_end_offset};
122 DecodeResult result = VerifyWasmCode(isolate->allocator(), body);
123 if (result.failed()) {
124 thrower.Error("Function did not verify");
125 return -1;
126 }
127 }
128
129 // The code verifies, we create an instance to run it in the interpreter.
113 WasmModuleInstance instance(module); 130 WasmModuleInstance instance(module);
114 instance.context = isolate->native_context(); 131 instance.context = isolate->native_context();
115 instance.mem_size = GetMinModuleMemSize(module); 132 instance.mem_size = GetMinModuleMemSize(module);
116 instance.mem_start = nullptr; 133 // TODO(ahaas): Move memory allocation to wasm-module.cc for better
134 // encapsulation.
135 instance.mem_start =
136 static_cast<byte*>(calloc(GetMinModuleMemSize(module), 1));
117 instance.globals_start = nullptr; 137 instance.globals_start = nullptr;
118
119 ModuleEnv module_env;
120 module_env.module = module;
121 module_env.instance = &instance; 138 module_env.instance = &instance;
122 module_env.origin = module->origin;
123
124 const WasmFunction* function = &(module->functions[function_index]);
125
126 FunctionBody body = {&module_env, function->sig, module->module_start,
127 module->module_start + function->code_start_offset,
128 module->module_start + function->code_end_offset};
129 DecodeResult result = VerifyWasmCode(isolate->allocator(), body);
130 if (result.failed()) {
131 thrower.Error("Function did not verify");
132 return -1;
133 }
134 139
135 WasmInterpreter interpreter(&instance, isolate->allocator()); 140 WasmInterpreter interpreter(&instance, isolate->allocator());
136 141
137 WasmInterpreter::Thread* thread = interpreter.GetThread(0); 142 WasmInterpreter::Thread* thread = interpreter.GetThread(0);
138 thread->Reset(); 143 thread->Reset();
139 thread->PushFrame(function, args); 144 thread->PushFrame(&(module->functions[function_index]), args);
140 if (thread->Run() == WasmInterpreter::FINISHED) { 145 WasmInterpreter::State interpreter_result = thread->Run();
146 if (instance.mem_start) {
147 free(instance.mem_start);
148 }
149 if (interpreter_result == WasmInterpreter::FINISHED) {
141 WasmVal val = thread->GetReturnValue(); 150 WasmVal val = thread->GetReturnValue();
142 return val.to<int32_t>(); 151 return val.to<int32_t>();
143 } else if (thread->state() == WasmInterpreter::TRAPPED) { 152 } else if (thread->state() == WasmInterpreter::TRAPPED) {
144 return 0xdeadbeef; 153 return 0xdeadbeef;
145 } else { 154 } else {
146 thrower.Error("Interpreter did not finish execution within its step bound"); 155 thrower.Error("Interpreter did not finish execution within its step bound");
147 return -1; 156 return -1;
148 } 157 }
149 } 158 }
150 159
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 return static_cast<int32_t>(HeapNumber::cast(*result)->value()); 195 return static_cast<int32_t>(HeapNumber::cast(*result)->value());
187 } 196 }
188 thrower.Error("WASM.compileRun() failed: Return value should be number"); 197 thrower.Error("WASM.compileRun() failed: Return value should be number");
189 return -1; 198 return -1;
190 } 199 }
191 200
192 } // namespace testing 201 } // namespace testing
193 } // namespace wasm 202 } // namespace wasm
194 } // namespace internal 203 } // namespace internal
195 } // namespace v8 204 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698