[wasm] No longer require Isolate for runtime stubs.
R=jgruber@chromium.org Change-Id: I03c1aec177c389bf4d6550a26ad30d870e10135a Reviewed-on: https://chromium-review.googlesource.com/c/1477738 Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#59699}
This commit is contained in:
parent
d992246d71
commit
b9dde931af
@ -17,6 +17,7 @@
|
||||
#include "src/macro-assembler.h"
|
||||
#include "src/objects-inl.h"
|
||||
#include "src/ostreams.h"
|
||||
#include "src/snapshot/embedded-data.h"
|
||||
#include "src/wasm/compilation-environment.h"
|
||||
#include "src/wasm/function-compiler.h"
|
||||
#include "src/wasm/jump-table-assembler.h"
|
||||
@ -503,16 +504,16 @@ void NativeModule::SetLazyBuiltin(Handle<Code> code) {
|
||||
jump_table_->instructions().size());
|
||||
}
|
||||
|
||||
// TODO(mstarzinger): Remove {Isolate} parameter once {V8_EMBEDDED_BUILTINS}
|
||||
// was removed and embedded builtins are no longer optional.
|
||||
void NativeModule::SetRuntimeStubs(Isolate* isolate) {
|
||||
// TODO(mstarzinger): Switch this from accessing the {Isolate} to using the
|
||||
// embedded blob directly. This will allow us to do this from the background.
|
||||
HandleScope scope(isolate);
|
||||
DCHECK_EQ(kNullAddress, runtime_stub_entries_[0]); // Only called once.
|
||||
#ifdef V8_EMBEDDED_BUILTINS
|
||||
WasmCode* jump_table =
|
||||
CreateEmptyJumpTable(JumpTableAssembler::SizeForNumberOfStubSlots(
|
||||
WasmCode::kRuntimeStubCount));
|
||||
Address base = jump_table->instruction_start();
|
||||
EmbeddedData embedded_data = EmbeddedData::FromBlob();
|
||||
#define RUNTIME_STUB(Name) {Builtins::k##Name, WasmCode::k##Name},
|
||||
#define RUNTIME_STUB_TRAP(Name) RUNTIME_STUB(ThrowWasm##Name)
|
||||
std::pair<Builtins::Name, WasmCode::RuntimeStubId> wasm_runtime_stubs[] = {
|
||||
@ -520,11 +521,10 @@ void NativeModule::SetRuntimeStubs(Isolate* isolate) {
|
||||
#undef RUNTIME_STUB
|
||||
#undef RUNTIME_STUB_TRAP
|
||||
for (auto pair : wasm_runtime_stubs) {
|
||||
Handle<Code> builtin_code = isolate->builtins()->builtin_handle(pair.first);
|
||||
CHECK(builtin_code->is_off_heap_trampoline());
|
||||
JumpTableAssembler::EmitRuntimeStubSlot(
|
||||
base, pair.second, builtin_code->OffHeapInstructionStart(),
|
||||
WasmCode::kNoFlushICache);
|
||||
CHECK(embedded_data.ContainsBuiltin(pair.first));
|
||||
Address builtin = embedded_data.InstructionStartOfBuiltin(pair.first);
|
||||
JumpTableAssembler::EmitRuntimeStubSlot(base, pair.second, builtin,
|
||||
WasmCode::kNoFlushICache);
|
||||
uint32_t slot_offset =
|
||||
JumpTableAssembler::StubSlotIndexToOffset(pair.second);
|
||||
runtime_stub_entries_[pair.second] = base + slot_offset;
|
||||
@ -534,6 +534,7 @@ void NativeModule::SetRuntimeStubs(Isolate* isolate) {
|
||||
DCHECK_NULL(runtime_stub_table_);
|
||||
runtime_stub_table_ = jump_table;
|
||||
#else // V8_EMBEDDED_BUILTINS
|
||||
HandleScope scope(isolate);
|
||||
USE(runtime_stub_table_); // Actually unused, but avoids ifdef's in header.
|
||||
#define COPY_BUILTIN(Name) \
|
||||
runtime_stub_entries_[WasmCode::k##Name] = \
|
||||
|
@ -256,10 +256,9 @@ class V8_EXPORT_PRIVATE NativeModule final {
|
||||
// jump table will be populated with that copy.
|
||||
void SetLazyBuiltin(Handle<Code> code);
|
||||
|
||||
// Initializes all runtime stubs by copying them over from the JS-allocated
|
||||
// heap into this native module. It must be called exactly once per native
|
||||
// module before adding other WasmCode so that runtime stub ids can be
|
||||
// resolved during relocation.
|
||||
// Initializes all runtime stubs by setting up entry addresses in the runtime
|
||||
// stub table. It must be called exactly once per native module before adding
|
||||
// other WasmCode so that runtime stub ids can be resolved during relocation.
|
||||
void SetRuntimeStubs(Isolate* isolate);
|
||||
|
||||
// Makes the code available to the system (by entering it into the code table
|
||||
|
Loading…
Reference in New Issue
Block a user