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

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

Issue 2691993004: [wasm] Introduce WasmStackGuard builtin (Closed)
Patch Set: 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
« BUILD.gn ('K') | « src/runtime/runtime.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime/runtime-wasm.cc
diff --git a/src/runtime/runtime-wasm.cc b/src/runtime/runtime-wasm.cc
index 3ed63879add0dd24a128c273ff0075f92070f276..2e579753363e5aedb322ebc9b0d5e23a8caafafb 100644
--- a/src/runtime/runtime-wasm.cc
+++ b/src/runtime/runtime-wasm.cc
@@ -12,6 +12,7 @@
#include "src/factory.h"
#include "src/frames-inl.h"
#include "src/objects-inl.h"
+#include "src/runtime/runtime.h"
#include "src/v8memory.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-objects.h"
@@ -21,7 +22,7 @@ namespace v8 {
namespace internal {
namespace {
-Handle<WasmInstanceObject> GetWasmInstanceOnStackTop(Isolate* isolate) {
+WasmInstanceObject* GetWasmInstanceOnStackTop(Isolate* isolate) {
DisallowHeapAllocation no_allocation;
const Address entry = Isolate::c_entry_fp(isolate->thread_local_top());
Address pc =
@@ -30,7 +31,7 @@ Handle<WasmInstanceObject> GetWasmInstanceOnStackTop(Isolate* isolate) {
DCHECK_EQ(Code::WASM_FUNCTION, code->kind());
WasmInstanceObject* owning_instance = wasm::GetOwningWasmInstance(code);
CHECK_NOT_NULL(owning_instance);
- return handle(owning_instance, isolate);
+ return owning_instance;
}
} // namespace
@@ -38,7 +39,8 @@ RUNTIME_FUNCTION(Runtime_WasmMemorySize) {
HandleScope scope(isolate);
DCHECK_EQ(0, args.length());
- Handle<WasmInstanceObject> instance = GetWasmInstanceOnStackTop(isolate);
+ Handle<WasmInstanceObject> instance(GetWasmInstanceOnStackTop(isolate),
+ isolate);
return *isolate->factory()->NewNumberFromInt(
wasm::GetInstanceMemorySize(isolate, instance));
}
@@ -47,7 +49,8 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) {
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_UINT32_ARG_CHECKED(delta_pages, 0);
- Handle<WasmInstanceObject> instance = GetWasmInstanceOnStackTop(isolate);
+ Handle<WasmInstanceObject> instance(GetWasmInstanceOnStackTop(isolate),
+ isolate);
return *isolate->factory()->NewNumberFromInt(
wasm::GrowMemory(isolate, instance, delta_pages));
}
@@ -161,7 +164,7 @@ RUNTIME_FUNCTION(Runtime_WasmGetCaughtExceptionValue) {
}
RUNTIME_FUNCTION(Runtime_WasmRunInterpreter) {
- DCHECK(args.length() == 3);
+ DCHECK_EQ(3, args.length());
HandleScope scope(isolate);
CONVERT_ARG_HANDLE_CHECKED(JSObject, instance_obj, 0);
CONVERT_NUMBER_CHECKED(int32_t, func_index, Int32, args[1]);
@@ -177,13 +180,27 @@ RUNTIME_FUNCTION(Runtime_WasmRunInterpreter) {
CHECK(arg_buffer_obj->IsSmi());
uint8_t* arg_buffer = reinterpret_cast<uint8_t*>(*arg_buffer_obj);
- // Set the current isolate's context, saving the previous one.
- SaveContext save(isolate);
+ // Set the current isolate's context.
isolate->set_context(*instance->compiled_module()->native_context());
ahaas 2017/02/14 14:45:38 nit: Can you add a DCHECK_NULL(isolate->context())
Clemens Hammacher 2017/02/14 17:23:14 Done.
instance->debug_info()->RunInterpreter(func_index, arg_buffer);
return isolate->heap()->undefined_value();
}
+RUNTIME_FUNCTION(Runtime_WasmStackGuard) {
+ SealHandleScope shs(isolate);
+ DCHECK_EQ(0, args.length());
+
+ // Set the current isolate's context.
+ WasmInstanceObject* instance = GetWasmInstanceOnStackTop(isolate);
+ isolate->set_context(instance->compiled_module()->ptr_to_native_context());
ahaas 2017/02/14 14:45:38 nit: Can you add a DCHECK_NULL(isolate->context())
Clemens Hammacher 2017/02/14 17:23:14 Done.
+
+ // Check if this is a real stack overflow.
+ StackLimitCheck check(isolate);
+ if (check.JsHasOverflowed()) return isolate->StackOverflow();
+
+ return isolate->stack_guard()->HandleInterrupts();
+}
+
} // namespace internal
} // namespace v8
« BUILD.gn ('K') | « src/runtime/runtime.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698