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

Unified Diff: src/wasm/wasm-module.cc

Issue 2717973003: [wasm] Exit loop once wasm code in JS_TO_WASM is found (Closed)
Patch Set: Minor fix Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/wasm/wasm-code-specialization.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-module.cc
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
index 75a556971d521f7b515201b551598f77fa4c9364..a07469719e7bdb554bac3cba91538d946438a9b2 100644
--- a/src/wasm/wasm-module.cc
+++ b/src/wasm/wasm-module.cc
@@ -860,24 +860,29 @@ static WasmFunction* GetWasmFunctionForImportWrapper(Isolate* isolate,
return nullptr;
}
-static Handle<Code> UnwrapImportWrapper(Handle<Object> target) {
- Handle<JSFunction> func = Handle<JSFunction>::cast(target);
+Code* UnwrapImportWrapper(Object* target) {
titzer 2017/02/28 15:07:31 I think it'd be better if you left this as using h
titzer 2017/02/28 15:07:31 any reason for dropping the static qualifier?
Clemens Hammacher 2017/02/28 15:14:52 No, this is a mistake. This CL (https://codereview
Clemens Hammacher 2017/03/01 15:31:15 Done.
+ JSFunction* func = JSFunction::cast(target);
Handle<Code> export_wrapper_code = handle(func->code());
- int found = 0;
int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET);
Handle<Code> code;
- for (RelocIterator it(*export_wrapper_code, mask); !it.done(); it.next()) {
- RelocInfo* rinfo = it.rinfo();
- Address target_address = rinfo->target_address();
- Code* target = Code::GetCodeFromTargetAddress(target_address);
- if (target->kind() == Code::WASM_FUNCTION ||
- target->kind() == Code::WASM_TO_JS_FUNCTION) {
- ++found;
- code = handle(target);
- }
- }
- DCHECK_EQ(1, found);
- return code;
+ for (RelocIterator it(*export_wrapper_code, mask);; it.next()) {
+ DCHECK(!it.done());
+ Code* target = Code::GetCodeFromTargetAddress(it.rinfo()->target_address());
+ if (target->kind() != Code::WASM_FUNCTION &&
+ target->kind() != Code::WASM_TO_JS_FUNCTION)
ahaas 2017/02/28 18:40:35 What is the reason why code->builtin_index() != Bu
Clemens Hammacher 2017/03/01 15:31:14 The import wrapper we are unwrapping here belongs
+ continue;
+// There should only be this one call to wasm code.
+#ifdef DEBUG
+ for (it.next(); !it.done(); it.next()) {
+ Code* code = Code::GetCodeFromTargetAddress(it.rinfo()->target_address());
+ DCHECK(code->kind() != Code::WASM_FUNCTION &&
+ code->kind() != Code::WASM_TO_JS_FUNCTION);
+ }
+#endif
+ return target;
+ }
+ UNREACHABLE();
+ return nullptr;
}
static Handle<Code> CompileImportWrapper(Isolate* isolate, int index,
@@ -891,7 +896,7 @@ static Handle<Code> CompileImportWrapper(Isolate* isolate, int index,
if (sig->Equals(other_func->sig)) {
// Signature matched. Unwrap the JS->WASM wrapper and return the raw
// WASM function code.
- return UnwrapImportWrapper(target);
+ return handle(UnwrapImportWrapper(*target), isolate);
} else {
return Handle<Code>::null();
}
@@ -941,7 +946,7 @@ void wasm::UpdateDispatchTables(Isolate* isolate,
UpdateDispatchTablesInternal(
isolate, dispatch_tables, index,
GetWasmFunctionForImportWrapper(isolate, function),
- UnwrapImportWrapper(function));
+ handle(UnwrapImportWrapper(*function), isolate));
}
}
@@ -1583,7 +1588,7 @@ class InstantiationHelper {
}
int sig_index = table.map.FindOrInsert(function->sig);
table_instance.signature_table->set(i, Smi::FromInt(sig_index));
- table_instance.function_table->set(i, *UnwrapImportWrapper(val));
+ table_instance.function_table->set(i, UnwrapImportWrapper(*val));
}
num_imported_tables++;
« no previous file with comments | « src/wasm/wasm-code-specialization.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698