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

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

Issue 2201663003: Heap::CopyCode handling of references into NEW_SPACE (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Just wasm-module changes. Created 4 years, 4 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 | « no previous file | 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 a0a15793b6627bc37c02cb5a277d65ec4534e3a0..fdec11b33fb572aac5fbc42a3145cef376484fd3 100644
--- a/src/wasm/wasm-module.cc
+++ b/src/wasm/wasm-module.cc
@@ -1008,14 +1008,15 @@ MaybeHandle<FixedArray> WasmModule::CompileFunctions(
MaybeHandle<FixedArray> indirect_table =
function_tables.size()
- ? factory->NewFixedArray(static_cast<int>(function_tables.size()))
+ ? factory->NewFixedArray(static_cast<int>(function_tables.size()),
+ TENURED)
: MaybeHandle<FixedArray>();
for (uint32_t i = 0; i < function_tables.size(); ++i) {
Handle<FixedArray> values = wasm::BuildFunctionTable(isolate, i, this);
temp_instance_for_compilation.function_tables[i] = values;
Handle<FixedArray> metadata = isolate->factory()->NewFixedArray(
- kWasmIndirectFunctionTableMetadataSize);
+ kWasmIndirectFunctionTableMetadataSize, TENURED);
metadata->set(kSize, Smi::FromInt(function_tables[i].size));
metadata->set(kTable, *values);
indirect_table.ToHandleChecked()->set(i, *metadata);
@@ -1168,6 +1169,19 @@ Handle<FixedArray> CloneModuleForInstance(Isolate* isolate,
Factory* factory = isolate->factory();
Handle<FixedArray> clone = factory->CopyFixedArray(original);
+ // Clone each wasm code object.
+ Handle<FixedArray> orig_wasm_functions =
+ original->GetValueChecked<FixedArray>(isolate, kFunctions);
+ Handle<FixedArray> clone_wasm_functions =
+ factory->CopyFixedArray(orig_wasm_functions);
+ clone->set(kFunctions, *clone_wasm_functions);
+ for (int i = 0; i < clone_wasm_functions->length(); ++i) {
+ Handle<Code> orig_code =
+ clone_wasm_functions->GetValueChecked<Code>(isolate, i);
+ Handle<Code> cloned_code = factory->CopyCode(orig_code);
+ clone_wasm_functions->set(i, *cloned_code);
+ }
+
// Copy the outer table, each WasmIndirectFunctionTableMetadata table, and the
// inner kTable.
MaybeHandle<FixedArray> maybe_indirect_tables =
@@ -1187,34 +1201,10 @@ Handle<FixedArray> CloneModuleForInstance(Isolate* isolate,
clone_metadata->GetValueChecked<FixedArray>(isolate, kTable);
Handle<FixedArray> clone_table = factory->CopyFixedArray(orig_table);
clone_metadata->set(kTable, *clone_table);
- }
- }
-
- // Clone each code, then if indirect tables are used, patch the cloned code to
- // refer to the cloned kTable.
- Handle<FixedArray> orig_wasm_functions =
- original->GetValueChecked<FixedArray>(isolate, kFunctions);
- Handle<FixedArray> clone_wasm_functions =
- factory->CopyFixedArray(orig_wasm_functions);
- clone->set(kFunctions, *clone_wasm_functions);
- for (int i = 0; i < clone_wasm_functions->length(); ++i) {
- Handle<Code> orig_code =
- clone_wasm_functions->GetValueChecked<Code>(isolate, i);
- Handle<Code> cloned_code = factory->CopyCode(orig_code);
- clone_wasm_functions->set(i, *cloned_code);
-
- if (!clone_indirect_tables.is_null()) {
- for (int j = 0; j < clone_indirect_tables->length(); ++j) {
bradnelson 2016/08/02 22:47:14 I think you want to keep this.
bradnelson 2016/08/02 22:48:54 Nm, this got pulled into the loop above.
- Handle<FixedArray> orig_metadata =
- indirect_tables->GetValueChecked<FixedArray>(isolate, j);
- Handle<FixedArray> orig_table =
- orig_metadata->GetValueChecked<FixedArray>(isolate, kTable);
-
- Handle<FixedArray> clone_metadata =
- clone_indirect_tables->GetValueChecked<FixedArray>(isolate, j);
- Handle<FixedArray> clone_table =
- clone_metadata->GetValueChecked<FixedArray>(isolate, kTable);
-
+ // Patch the cloned code to refer to the cloned kTable.
+ for (int i = 0; i < clone_wasm_functions->length(); ++i) {
+ Handle<Code> cloned_code =
+ clone_wasm_functions->GetValueChecked<Code>(isolate, i);
PatchFunctionTable(cloned_code, orig_table, clone_table);
}
}
@@ -1493,7 +1483,7 @@ Handle<FixedArray> BuildFunctionTable(Isolate* isolate, uint32_t index,
DCHECK_EQ(table->size, table->values.size());
DCHECK_GE(table->max_size, table->size);
Handle<FixedArray> values =
- isolate->factory()->NewFixedArray(2 * table->max_size);
+ isolate->factory()->NewFixedArray(2 * table->max_size, TENURED);
for (uint32_t i = 0; i < table->size; ++i) {
const WasmFunction* function = &module->functions[table->values[i]];
values->set(i, Smi::FromInt(function->sig_index));
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698