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

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

Issue 1896863003: [wasm] Binary 11: Module changes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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') | test/cctest/wasm/test-run-wasm-module.cc » ('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 "src/macro-assembler.h" 5 #include "src/macro-assembler.h"
6 #include "src/objects.h" 6 #include "src/objects.h"
7 #include "src/property-descriptor.h"
7 #include "src/v8.h" 8 #include "src/v8.h"
8 9
9 #include "src/simulator.h" 10 #include "src/simulator.h"
10 11
11 #include "src/wasm/ast-decoder.h" 12 #include "src/wasm/ast-decoder.h"
12 #include "src/wasm/module-decoder.h" 13 #include "src/wasm/module-decoder.h"
13 #include "src/wasm/wasm-module.h" 14 #include "src/wasm/wasm-module.h"
14 #include "src/wasm/wasm-result.h" 15 #include "src/wasm/wasm-result.h"
15 16
16 #include "src/compiler/wasm-compiler.h" 17 #include "src/compiler/wasm-compiler.h"
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 // * compiles wasm code to machine code 403 // * compiles wasm code to machine code
403 MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, 404 MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate,
404 Handle<JSObject> ffi, 405 Handle<JSObject> ffi,
405 Handle<JSArrayBuffer> memory) { 406 Handle<JSArrayBuffer> memory) {
406 HistogramTimerScope wasm_instantiate_module_time_scope( 407 HistogramTimerScope wasm_instantiate_module_time_scope(
407 isolate->counters()->wasm_instantiate_module_time()); 408 isolate->counters()->wasm_instantiate_module_time());
408 this->shared_isolate = isolate; // TODO(titzer): have a real shared isolate. 409 this->shared_isolate = isolate; // TODO(titzer): have a real shared isolate.
409 ErrorThrower thrower(isolate, "WasmModule::Instantiate()"); 410 ErrorThrower thrower(isolate, "WasmModule::Instantiate()");
410 Factory* factory = isolate->factory(); 411 Factory* factory = isolate->factory();
411 412
413 PropertyDescriptor desc;
414 desc.set_writable(false);
415
412 //------------------------------------------------------------------------- 416 //-------------------------------------------------------------------------
413 // Allocate the instance and its JS counterpart. 417 // Allocate the instance and its JS counterpart.
414 //------------------------------------------------------------------------- 418 //-------------------------------------------------------------------------
415 Handle<Map> map = factory->NewMap( 419 Handle<Map> map = factory->NewMap(
416 JS_OBJECT_TYPE, 420 JS_OBJECT_TYPE,
417 JSObject::kHeaderSize + kWasmModuleInternalFieldCount * kPointerSize); 421 JSObject::kHeaderSize + kWasmModuleInternalFieldCount * kPointerSize);
418 WasmModuleInstance instance(this); 422 WasmModuleInstance instance(this);
419 instance.context = isolate->native_context(); 423 instance.context = isolate->native_context();
420 instance.js_object = factory->NewJSObjectFromMap(map, TENURED); 424 instance.js_object = factory->NewJSObjectFromMap(map, TENURED);
421 Handle<FixedArray> code_table = 425 Handle<FixedArray> code_table =
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 } 559 }
556 } 560 }
557 if (!code.is_null()) { 561 if (!code.is_null()) {
558 // Install the code into the linker table. 562 // Install the code into the linker table.
559 linker.Finish(i, code); 563 linker.Finish(i, code);
560 code_table->set(i, *code); 564 code_table->set(i, *code);
561 } 565 }
562 if (func.exported) { 566 if (func.exported) {
563 // Exported functions are installed as read-only properties on the 567 // Exported functions are installed as read-only properties on the
564 // module. 568 // module.
565 JSObject::AddProperty(instance.js_object, name, function, READ_ONLY); 569 desc.set_value(function);
570 Maybe<bool> status = JSReceiver::DefineOwnProperty(
571 isolate, instance.js_object, name, &desc, Object::THROW_ON_ERROR);
572 if (!status.IsJust())
573 thrower.Error("export of %.*s failed.", str.length(), str.start());
566 } 574 }
567 } 575 }
568 576
569 // Second pass: patch all direct call sites. 577 // Second pass: patch all direct call sites.
570 linker.Link(instance.function_table, this->function_table); 578 linker.Link(instance.function_table, this->function_table);
571 instance.js_object->SetInternalField(kWasmModuleFunctionTable, 579 instance.js_object->SetInternalField(kWasmModuleFunctionTable,
572 Smi::FromInt(0)); 580 Smi::FromInt(0));
573 581
574 //------------------------------------------------------------------------- 582 //-------------------------------------------------------------------------
575 // Create and populate the exports object. 583 // Create and populate the exports object.
(...skipping 10 matching lines...) Expand all
586 594
587 // Compile wrappers and add them to the exports object. 595 // Compile wrappers and add them to the exports object.
588 for (const WasmExport& exp : export_table) { 596 for (const WasmExport& exp : export_table) {
589 if (thrower.error()) break; 597 if (thrower.error()) break;
590 WasmName str = GetName(exp.name_offset, exp.name_length); 598 WasmName str = GetName(exp.name_offset, exp.name_length);
591 Handle<String> name = factory->InternalizeUtf8String(str); 599 Handle<String> name = factory->InternalizeUtf8String(str);
592 Handle<Code> code = linker.GetFunctionCode(exp.func_index); 600 Handle<Code> code = linker.GetFunctionCode(exp.func_index);
593 Handle<JSFunction> function = compiler::CompileJSToWasmWrapper( 601 Handle<JSFunction> function = compiler::CompileJSToWasmWrapper(
594 isolate, &module_env, name, code, instance.js_object, 602 isolate, &module_env, name, code, instance.js_object,
595 exp.func_index); 603 exp.func_index);
596 JSObject::AddProperty(exports_object, name, function, READ_ONLY); 604 desc.set_value(function);
605 Maybe<bool> status = JSReceiver::DefineOwnProperty(
606 isolate, exports_object, name, &desc, Object::THROW_ON_ERROR);
607 if (!status.IsJust())
608 thrower.Error("export of %.*s failed.", str.length(), str.start());
597 } 609 }
598 610
599 if (mem_export) { 611 if (mem_export) {
600 // Export the memory as a named property. 612 // Export the memory as a named property.
601 Handle<String> name = factory->InternalizeUtf8String("memory"); 613 Handle<String> name = factory->InternalizeUtf8String("memory");
602 JSObject::AddProperty(exports_object, name, instance.mem_buffer, 614 JSObject::AddProperty(exports_object, name, instance.mem_buffer,
603 READ_ONLY); 615 READ_ONLY);
604 } 616 }
605 } 617 }
606 } 618 }
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 } 763 }
752 if (result->IsHeapNumber()) { 764 if (result->IsHeapNumber()) {
753 return static_cast<int32_t>(HeapNumber::cast(*result)->value()); 765 return static_cast<int32_t>(HeapNumber::cast(*result)->value());
754 } 766 }
755 thrower.Error("WASM.compileRun() failed: Return value should be number"); 767 thrower.Error("WASM.compileRun() failed: Return value should be number");
756 return -1; 768 return -1;
757 } 769 }
758 } // namespace wasm 770 } // namespace wasm
759 } // namespace internal 771 } // namespace internal
760 } // namespace v8 772 } // namespace v8
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.h ('k') | test/cctest/wasm/test-run-wasm-module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698