| 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 #include <memory> | 5 #include <memory> |
| 6 | 6 |
| 7 #include "src/base/atomic-utils.h" | 7 #include "src/base/atomic-utils.h" |
| 8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
| 9 #include "src/compiler/wasm-compiler.h" | 9 #include "src/compiler/wasm-compiler.h" |
| 10 #include "src/debug/interface-types.h" | 10 #include "src/debug/interface-types.h" |
| (...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1212 ? static_cast<Address>( | 1212 ? static_cast<Address>( |
| 1213 compiled_module_->memory()->backing_store()) | 1213 compiled_module_->memory()->backing_store()) |
| 1214 : nullptr; | 1214 : nullptr; |
| 1215 RelocateMemoryReferencesInCode(code_table, old_mem_start, mem_start, | 1215 RelocateMemoryReferencesInCode(code_table, old_mem_start, mem_start, |
| 1216 old_mem_size, mem_size); | 1216 old_mem_size, mem_size); |
| 1217 compiled_module_->set_memory(memory_); | 1217 compiled_module_->set_memory(memory_); |
| 1218 } else { | 1218 } else { |
| 1219 LoadDataSegments(nullptr, 0); | 1219 LoadDataSegments(nullptr, 0); |
| 1220 } | 1220 } |
| 1221 | 1221 |
| 1222 DCHECK(wasm::IsWasmInstance(*instance)); | |
| 1223 if (instance->has_memory_object()) { | |
| 1224 instance->get_memory_object()->AddInstance(isolate_, instance); | |
| 1225 } | |
| 1226 | |
| 1227 //-------------------------------------------------------------------------- | 1222 //-------------------------------------------------------------------------- |
| 1228 // Set up the runtime support for the new instance. | 1223 // Set up the runtime support for the new instance. |
| 1229 //-------------------------------------------------------------------------- | 1224 //-------------------------------------------------------------------------- |
| 1230 Handle<WeakCell> weak_link = factory->NewWeakCell(instance); | 1225 Handle<WeakCell> weak_link = factory->NewWeakCell(instance); |
| 1231 | 1226 |
| 1232 for (int i = num_imported_functions + FLAG_skip_compiling_wasm_funcs; | 1227 for (int i = num_imported_functions + FLAG_skip_compiling_wasm_funcs; |
| 1233 i < code_table->length(); ++i) { | 1228 i < code_table->length(); ++i) { |
| 1234 Handle<Code> code = code_table->GetValueChecked<Code>(isolate_, i); | 1229 Handle<Code> code = code_table->GetValueChecked<Code>(isolate_, i); |
| 1235 if (code->kind() == Code::WASM_FUNCTION) { | 1230 if (code->kind() == Code::WASM_FUNCTION) { |
| 1236 Handle<FixedArray> deopt_data = factory->NewFixedArray(2, TENURED); | 1231 Handle<FixedArray> deopt_data = factory->NewFixedArray(2, TENURED); |
| 1237 deopt_data->set(0, *weak_link); | 1232 deopt_data->set(0, *weak_link); |
| 1238 deopt_data->set(1, Smi::FromInt(static_cast<int>(i))); | 1233 deopt_data->set(1, Smi::FromInt(static_cast<int>(i))); |
| 1239 deopt_data->set_length(2); | 1234 deopt_data->set_length(2); |
| 1240 code->set_deoptimization_data(*deopt_data); | 1235 code->set_deoptimization_data(*deopt_data); |
| 1241 } | 1236 } |
| 1242 } | 1237 } |
| 1243 | 1238 |
| 1244 //-------------------------------------------------------------------------- | 1239 //-------------------------------------------------------------------------- |
| 1245 // Set up the exports object for the new instance. | 1240 // Set up the exports object for the new instance. |
| 1246 //-------------------------------------------------------------------------- | 1241 //-------------------------------------------------------------------------- |
| 1247 ProcessExports(code_table, instance); | 1242 ProcessExports(code_table, instance); |
| 1248 | 1243 |
| 1249 //-------------------------------------------------------------------------- | 1244 //-------------------------------------------------------------------------- |
| 1245 // Add instance to Memory object |
| 1246 //-------------------------------------------------------------------------- |
| 1247 DCHECK(wasm::IsWasmInstance(*instance)); |
| 1248 if (instance->has_memory_object()) { |
| 1249 instance->get_memory_object()->AddInstance(isolate_, instance); |
| 1250 } |
| 1251 |
| 1252 //-------------------------------------------------------------------------- |
| 1250 // Set up the indirect function tables for the new instance. | 1253 // Set up the indirect function tables for the new instance. |
| 1251 //-------------------------------------------------------------------------- | 1254 //-------------------------------------------------------------------------- |
| 1252 if (function_table_count > 0) InitializeTables(code_table, instance); | 1255 if (function_table_count > 0) InitializeTables(code_table, instance); |
| 1253 | 1256 |
| 1254 if (num_imported_functions > 0 || !owner.is_null()) { | 1257 if (num_imported_functions > 0 || !owner.is_null()) { |
| 1255 // If the code was cloned, or new imports were compiled, patch. | 1258 // If the code was cloned, or new imports were compiled, patch. |
| 1256 PatchDirectCalls(old_code_table, code_table, num_imported_functions); | 1259 PatchDirectCalls(old_code_table, code_table, num_imported_functions); |
| 1257 } | 1260 } |
| 1258 | 1261 |
| 1259 FlushICache(isolate_, code_table); | 1262 FlushICache(isolate_, code_table); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1284 protected_instructions | 1287 protected_instructions |
| 1285 ->GetValueChecked<Smi>(isolate_, i + Code::kTrapLandingOffset) | 1288 ->GetValueChecked<Smi>(isolate_, i + Code::kTrapLandingOffset) |
| 1286 ->value(); | 1289 ->value(); |
| 1287 unpacked.emplace_back(data); | 1290 unpacked.emplace_back(data); |
| 1288 } | 1291 } |
| 1289 // TODO(eholk): Register the protected instruction information once the | 1292 // TODO(eholk): Register the protected instruction information once the |
| 1290 // trap handler is in place. | 1293 // trap handler is in place. |
| 1291 } | 1294 } |
| 1292 } | 1295 } |
| 1293 | 1296 |
| 1297 //-------------------------------------------------------------------------- |
| 1294 // Set up and link the new instance. | 1298 // Set up and link the new instance. |
| 1295 //-------------------------------------------------------------------------- | 1299 //-------------------------------------------------------------------------- |
| 1296 { | 1300 { |
| 1297 Handle<Object> global_handle = | 1301 Handle<Object> global_handle = |
| 1298 isolate_->global_handles()->Create(*instance); | 1302 isolate_->global_handles()->Create(*instance); |
| 1299 Handle<WeakCell> link_to_clone = factory->NewWeakCell(compiled_module_); | 1303 Handle<WeakCell> link_to_clone = factory->NewWeakCell(compiled_module_); |
| 1300 Handle<WeakCell> link_to_owning_instance = factory->NewWeakCell(instance); | 1304 Handle<WeakCell> link_to_owning_instance = factory->NewWeakCell(instance); |
| 1301 MaybeHandle<WeakCell> link_to_original; | 1305 MaybeHandle<WeakCell> link_to_original; |
| 1302 MaybeHandle<WasmCompiledModule> original; | 1306 MaybeHandle<WasmCompiledModule> original; |
| 1303 if (!owner.is_null()) { | 1307 if (!owner.is_null()) { |
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2371 MaybeHandle<String> WasmCompiledModule::GetFunctionName( | 2375 MaybeHandle<String> WasmCompiledModule::GetFunctionName( |
| 2372 Handle<WasmCompiledModule> compiled_module, uint32_t func_index) { | 2376 Handle<WasmCompiledModule> compiled_module, uint32_t func_index) { |
| 2373 DCHECK_LT(func_index, compiled_module->module()->functions.size()); | 2377 DCHECK_LT(func_index, compiled_module->module()->functions.size()); |
| 2374 WasmFunction& function = compiled_module->module()->functions[func_index]; | 2378 WasmFunction& function = compiled_module->module()->functions[func_index]; |
| 2375 Isolate* isolate = compiled_module->GetIsolate(); | 2379 Isolate* isolate = compiled_module->GetIsolate(); |
| 2376 MaybeHandle<String> string = ExtractStringFromModuleBytes( | 2380 MaybeHandle<String> string = ExtractStringFromModuleBytes( |
| 2377 isolate, compiled_module, function.name_offset, function.name_length); | 2381 isolate, compiled_module, function.name_offset, function.name_length); |
| 2378 if (!string.is_null()) return string.ToHandleChecked(); | 2382 if (!string.is_null()) return string.ToHandleChecked(); |
| 2379 return {}; | 2383 return {}; |
| 2380 } | 2384 } |
| OLD | NEW |