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

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

Issue 2403093002: [wasm] Canonicalize function signature indices for matching in indirect calls. (Closed)
Patch Set: Address review comments Created 4 years, 2 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
« no previous file with comments | « src/wasm/wasm-module.h ('k') | src/wasm/wasm-module-builder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/base/atomic-utils.h" 7 #include "src/base/atomic-utils.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 9
10 #include "src/macro-assembler.h" 10 #include "src/macro-assembler.h"
(...skipping 2041 matching lines...) Expand 10 before | Expand all | Expand 10 after
2052 2052
2053 Handle<FixedArray> BuildFunctionTable(Isolate* isolate, uint32_t index, 2053 Handle<FixedArray> BuildFunctionTable(Isolate* isolate, uint32_t index,
2054 const WasmModule* module) { 2054 const WasmModule* module) {
2055 const WasmIndirectFunctionTable* table = &module->function_tables[index]; 2055 const WasmIndirectFunctionTable* table = &module->function_tables[index];
2056 DCHECK_EQ(table->size, table->values.size()); 2056 DCHECK_EQ(table->size, table->values.size());
2057 DCHECK_GE(table->max_size, table->size); 2057 DCHECK_GE(table->max_size, table->size);
2058 Handle<FixedArray> values = 2058 Handle<FixedArray> values =
2059 isolate->factory()->NewFixedArray(2 * table->max_size, TENURED); 2059 isolate->factory()->NewFixedArray(2 * table->max_size, TENURED);
2060 for (uint32_t i = 0; i < table->size; ++i) { 2060 for (uint32_t i = 0; i < table->size; ++i) {
2061 const WasmFunction* function = &module->functions[table->values[i]]; 2061 const WasmFunction* function = &module->functions[table->values[i]];
2062 values->set(i, Smi::FromInt(function->sig_index)); 2062 int32_t index = table->map.Find(function->sig);
2063 DCHECK_GE(index, 0);
2064 values->set(i, Smi::FromInt(index));
2063 values->set(i + table->max_size, Smi::FromInt(table->values[i])); 2065 values->set(i + table->max_size, Smi::FromInt(table->values[i]));
2064 } 2066 }
2065 // Set the remaining elements to -1 (instead of "undefined"). These 2067 // Set the remaining elements to -1 (instead of "undefined"). These
2066 // elements are accessed directly as SMIs (without a check). On 64-bit 2068 // elements are accessed directly as SMIs (without a check). On 64-bit
2067 // platforms, it is possible to have the top bits of "undefined" take 2069 // platforms, it is possible to have the top bits of "undefined" take
2068 // small integer values (or zero), which are more likely to be equal to 2070 // small integer values (or zero), which are more likely to be equal to
2069 // the signature index we check against. 2071 // the signature index we check against.
2070 for (uint32_t i = table->size; i < table->max_size; ++i) { 2072 for (uint32_t i = table->size; i < table->max_size; ++i) {
2071 values->set(i, Smi::FromInt(-1)); 2073 values->set(i, Smi::FromInt(-1));
2072 } 2074 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
2276 WasmCompiledModule* compiled_module = 2278 WasmCompiledModule* compiled_module =
2277 WasmCompiledModule::cast(instance->GetInternalField(kWasmCompiledModule)); 2279 WasmCompiledModule::cast(instance->GetInternalField(kWasmCompiledModule));
2278 CHECK(compiled_module->has_weak_module_object()); 2280 CHECK(compiled_module->has_weak_module_object());
2279 CHECK(compiled_module->ptr_to_weak_module_object()->cleared()); 2281 CHECK(compiled_module->ptr_to_weak_module_object()->cleared());
2280 } 2282 }
2281 2283
2282 } // namespace testing 2284 } // namespace testing
2283 } // namespace wasm 2285 } // namespace wasm
2284 } // namespace internal 2286 } // namespace internal
2285 } // namespace v8 2287 } // namespace v8
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.h ('k') | src/wasm/wasm-module-builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698