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

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

Issue 2500443004: [wasm] OOB traps: build protected instruction list during codegen (Closed)
Patch Set: Removing spurious changes Created 4 years 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/compiler/wasm-compiler.h ('k') | src/compiler/x64/code-generator-x64.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/compiler/wasm-compiler.h" 5 #include "src/compiler/wasm-compiler.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/isolate-inl.h" 9 #include "src/isolate-inl.h"
10 10
(...skipping 3393 matching lines...) Expand 10 before | Expand all | Expand 10 after
3404 graph_zone(), MachineType::PointerRepresentation(), 3404 graph_zone(), MachineType::PointerRepresentation(),
3405 InstructionSelector::SupportedMachineOperatorFlags(), 3405 InstructionSelector::SupportedMachineOperatorFlags(),
3406 InstructionSelector::AlignmentRequirements()))), 3406 InstructionSelector::AlignmentRequirements()))),
3407 compilation_zone_(isolate->allocator(), ZONE_NAME), 3407 compilation_zone_(isolate->allocator(), ZONE_NAME),
3408 info_(function->name_length != 0 ? module_env->GetNameOrNull(function) 3408 info_(function->name_length != 0 ? module_env->GetNameOrNull(function)
3409 : ArrayVector("wasm"), 3409 : ArrayVector("wasm"),
3410 isolate, &compilation_zone_, 3410 isolate, &compilation_zone_,
3411 Code::ComputeFlags(Code::WASM_FUNCTION)), 3411 Code::ComputeFlags(Code::WASM_FUNCTION)),
3412 job_(), 3412 job_(),
3413 index_(index), 3413 index_(index),
3414 ok_(true) { 3414 ok_(true),
3415 protected_instructions_(&compilation_zone_) {
3415 // Create and cache this node in the main thread. 3416 // Create and cache this node in the main thread.
3416 jsgraph_->CEntryStubConstant(1); 3417 jsgraph_->CEntryStubConstant(1);
3417 } 3418 }
3418 3419
3419 void WasmCompilationUnit::ExecuteCompilation() { 3420 void WasmCompilationUnit::ExecuteCompilation() {
3420 // TODO(ahaas): The counters are not thread-safe at the moment. 3421 // TODO(ahaas): The counters are not thread-safe at the moment.
3421 // HistogramTimerScope wasm_compile_function_time_scope( 3422 // HistogramTimerScope wasm_compile_function_time_scope(
3422 // isolate_->counters()->wasm_compile_function_time()); 3423 // isolate_->counters()->wasm_compile_function_time());
3423 if (FLAG_trace_wasm_compiler) { 3424 if (FLAG_trace_wasm_compiler) {
3424 OFStream os(stdout); 3425 OFStream os(stdout);
(...skipping 20 matching lines...) Expand all
3445 } 3446 }
3446 3447
3447 // Run the compiler pipeline to generate machine code. 3448 // Run the compiler pipeline to generate machine code.
3448 CallDescriptor* descriptor = wasm::ModuleEnv::GetWasmCallDescriptor( 3449 CallDescriptor* descriptor = wasm::ModuleEnv::GetWasmCallDescriptor(
3449 &compilation_zone_, function_->sig); 3450 &compilation_zone_, function_->sig);
3450 if (jsgraph_->machine()->Is32()) { 3451 if (jsgraph_->machine()->Is32()) {
3451 descriptor = 3452 descriptor =
3452 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor); 3453 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor);
3453 } 3454 }
3454 job_.reset(Pipeline::NewWasmCompilationJob(&info_, jsgraph_, descriptor, 3455 job_.reset(Pipeline::NewWasmCompilationJob(&info_, jsgraph_, descriptor,
3455 source_positions)); 3456 source_positions,
3457 &protected_instructions_));
3456 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; 3458 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED;
3457 // TODO(bradnelson): Improve histogram handling of size_t. 3459 // TODO(bradnelson): Improve histogram handling of size_t.
3458 // TODO(ahaas): The counters are not thread-safe at the moment. 3460 // TODO(ahaas): The counters are not thread-safe at the moment.
3459 // isolate_->counters()->wasm_compile_function_peak_memory_bytes() 3461 // isolate_->counters()->wasm_compile_function_peak_memory_bytes()
3460 // ->AddSample( 3462 // ->AddSample(
3461 // static_cast<int>(jsgraph->graph()->zone()->allocation_size())); 3463 // static_cast<int>(jsgraph->graph()->zone()->allocation_size()));
3462 3464
3463 if (FLAG_trace_wasm_decode_time) { 3465 if (FLAG_trace_wasm_decode_time) {
3464 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); 3466 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF();
3465 PrintF( 3467 PrintF(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3503 } 3505 }
3504 3506
3505 if (FLAG_trace_wasm_decode_time) { 3507 if (FLAG_trace_wasm_decode_time) {
3506 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); 3508 double compile_ms = compile_timer.Elapsed().InMillisecondsF();
3507 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", 3509 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n",
3508 static_cast<int>(function_->code_end_offset - 3510 static_cast<int>(function_->code_end_offset -
3509 function_->code_start_offset), 3511 function_->code_start_offset),
3510 compile_ms); 3512 compile_ms);
3511 } 3513 }
3512 3514
3515 Handle<FixedArray> protected_instructions = PackProtectedInstructions();
3516 code->set_protected_instructions(*protected_instructions);
3517
3513 return code; 3518 return code;
3514 } 3519 }
3515 3520
3521 Handle<FixedArray> WasmCompilationUnit::PackProtectedInstructions() const {
3522 const int num_instructions = static_cast<int>(protected_instructions_.size());
3523 Handle<FixedArray> fn_protected = isolate_->factory()->NewFixedArray(
3524 num_instructions * Code::kTrapDataSize, TENURED);
3525 for (unsigned i = 0; i < protected_instructions_.size(); ++i) {
3526 const trap_handler::ProtectedInstructionData& instruction =
3527 protected_instructions_[i];
3528 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapCodeOffset,
3529 Smi::FromInt(instruction.instr_offset));
3530 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapLandingOffset,
3531 Smi::FromInt(instruction.landing_offset));
3532 }
3533 return fn_protected;
3534 }
3535
3516 } // namespace compiler 3536 } // namespace compiler
3517 } // namespace internal 3537 } // namespace internal
3518 } // namespace v8 3538 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698