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

Side by Side Diff: src/wasm/wasm-module.cc

Issue 2720813002: [wasm] Fix importing wasm functions which are being debugged (Closed)
Patch Set: Created 3 years, 9 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
OLDNEW
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/assembler-inl.h" 7 #include "src/assembler-inl.h"
8 #include "src/base/adapters.h" 8 #include "src/base/adapters.h"
9 #include "src/base/atomic-utils.h" 9 #include "src/base/atomic-utils.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET); 867 int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET);
868 Handle<Code> code; 868 Handle<Code> code;
869 for (RelocIterator it(*export_wrapper_code, mask); !it.done(); it.next()) { 869 for (RelocIterator it(*export_wrapper_code, mask); !it.done(); it.next()) {
870 RelocInfo* rinfo = it.rinfo(); 870 RelocInfo* rinfo = it.rinfo();
871 Address target_address = rinfo->target_address(); 871 Address target_address = rinfo->target_address();
872 Code* target = Code::GetCodeFromTargetAddress(target_address); 872 Code* target = Code::GetCodeFromTargetAddress(target_address);
873 if (target->kind() == Code::WASM_FUNCTION || 873 if (target->kind() == Code::WASM_FUNCTION ||
874 target->kind() == Code::WASM_TO_JS_FUNCTION) { 874 target->kind() == Code::WASM_TO_JS_FUNCTION) {
875 ++found; 875 ++found;
876 code = handle(target); 876 code = handle(target);
877 } else if (target->kind() == Code::WASM_INTERPRETER_ENTRY) {
878 // Don't call the interpreter entry directly, otherwise we cannot disable
879 // the breakpoint later by patching the exported code.
880 return Handle<Code>::null();
877 } 881 }
878 } 882 }
879 DCHECK_EQ(1, found); 883 DCHECK_EQ(1, found);
880 return code; 884 return code;
881 } 885 }
882 886
883 static Handle<Code> CompileImportWrapper(Isolate* isolate, int index, 887 static Handle<Code> CompileImportWrapper(Isolate* isolate, int index,
884 FunctionSig* sig, 888 FunctionSig* sig,
885 Handle<JSReceiver> target, 889 Handle<JSReceiver> target,
886 Handle<String> module_name, 890 Handle<String> module_name,
887 MaybeHandle<String> import_name, 891 MaybeHandle<String> import_name,
888 ModuleOrigin origin) { 892 ModuleOrigin origin) {
889 WasmFunction* other_func = GetWasmFunctionForImportWrapper(isolate, target); 893 WasmFunction* other_func = GetWasmFunctionForImportWrapper(isolate, target);
890 if (other_func) { 894 if (other_func) {
891 if (sig->Equals(other_func->sig)) { 895 if (!sig->Equals(other_func->sig)) return Handle<Code>::null();
892 // Signature matched. Unwrap the JS->WASM wrapper and return the raw 896 // Signature matched. Unwrap the JS->WASM wrapper and return the raw
893 // WASM function code. 897 // WASM function code.
894 return UnwrapImportWrapper(target); 898 Handle<Code> code = UnwrapImportWrapper(target);
895 } else { 899 // If we got no code (imported function is being debugged), fall through
896 return Handle<Code>::null(); 900 // to CompileWasmToJSWrapper.
897 } 901 if (!code.is_null()) return code;
898 } else {
899 // Signature mismatch. Compile a new wrapper for the new signature.
900 return compiler::CompileWasmToJSWrapper(isolate, target, sig, index,
901 module_name, import_name, origin);
902 } 902 }
903 // No wasm function or being debugged. Compile a new wrapper for the new
904 // signature.
905 return compiler::CompileWasmToJSWrapper(isolate, target, sig, index,
906 module_name, import_name, origin);
903 } 907 }
904 908
905 static void UpdateDispatchTablesInternal(Isolate* isolate, 909 static void UpdateDispatchTablesInternal(Isolate* isolate,
906 Handle<FixedArray> dispatch_tables, 910 Handle<FixedArray> dispatch_tables,
907 int index, WasmFunction* function, 911 int index, WasmFunction* function,
908 Handle<Code> code) { 912 Handle<Code> code) {
909 DCHECK_EQ(0, dispatch_tables->length() % 4); 913 DCHECK_EQ(0, dispatch_tables->length() % 4);
910 for (int i = 0; i < dispatch_tables->length(); i += 4) { 914 for (int i = 0; i < dispatch_tables->length(); i += 4) {
911 int table_index = Smi::cast(dispatch_tables->get(i + 1))->value(); 915 int table_index = Smi::cast(dispatch_tables->get(i + 1))->value();
912 Handle<FixedArray> function_table( 916 Handle<FixedArray> function_table(
(...skipping 1797 matching lines...) Expand 10 before | Expand all | Expand 10 after
2710 Handle<String> module_property_name = 2714 Handle<String> module_property_name =
2711 isolate->factory()->InternalizeUtf8String("module"); 2715 isolate->factory()->InternalizeUtf8String("module");
2712 Handle<String> instance_property_name = 2716 Handle<String> instance_property_name =
2713 isolate->factory()->InternalizeUtf8String("instance"); 2717 isolate->factory()->InternalizeUtf8String("instance");
2714 JSObject::AddProperty(ret, module_property_name, module, NONE); 2718 JSObject::AddProperty(ret, module_property_name, module, NONE);
2715 JSObject::AddProperty(ret, instance_property_name, 2719 JSObject::AddProperty(ret, instance_property_name,
2716 instance_object.ToHandleChecked(), NONE); 2720 instance_object.ToHandleChecked(), NONE);
2717 2721
2718 ResolvePromise(isolate, promise, ret); 2722 ResolvePromise(isolate, promise, ret);
2719 } 2723 }
OLDNEW
« no previous file with comments | « no previous file | test/inspector/debugger/wasm-imports.js » ('j') | test/inspector/debugger/wasm-imports.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698