OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/codegen.h" | 8 #include "src/codegen.h" |
9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
10 #include "src/disasm.h" | 10 #include "src/disasm.h" |
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 // TODO(jarin) We should tolerate missing patch entry for the topmost frame. | 461 // TODO(jarin) We should tolerate missing patch entry for the topmost frame. |
462 for (StackFrameIterator it(isolate, isolate->thread_local_top()); !it.done(); | 462 for (StackFrameIterator it(isolate, isolate->thread_local_top()); !it.done(); |
463 it.Advance()) { | 463 it.Advance()) { |
464 StackFrame::Type type = it.frame()->type(); | 464 StackFrame::Type type = it.frame()->type(); |
465 if (type == StackFrame::OPTIMIZED) { | 465 if (type == StackFrame::OPTIMIZED) { |
466 Code* code = it.frame()->LookupCode(); | 466 Code* code = it.frame()->LookupCode(); |
467 if (code->is_turbofanned() && code->marked_for_deoptimization()) { | 467 if (code->is_turbofanned() && code->marked_for_deoptimization()) { |
468 JSFunction* function = | 468 JSFunction* function = |
469 static_cast<OptimizedFrame*>(it.frame())->function(); | 469 static_cast<OptimizedFrame*>(it.frame())->function(); |
470 Address* pc_address = it.frame()->pc_address(); | 470 Address* pc_address = it.frame()->pc_address(); |
471 int pc_offset = *pc_address - code->instruction_start(); | 471 int pc_offset = |
| 472 static_cast<int>(*pc_address - code->instruction_start()); |
472 int new_pc_offset = FindPatchAddressForReturnAddress(code, pc_offset); | 473 int new_pc_offset = FindPatchAddressForReturnAddress(code, pc_offset); |
473 | 474 |
474 if (FLAG_trace_deopt) { | 475 if (FLAG_trace_deopt) { |
475 CodeTracer::Scope scope(isolate->GetCodeTracer()); | 476 CodeTracer::Scope scope(isolate->GetCodeTracer()); |
476 PrintF(scope.file(), "[patching stack address for function: "); | 477 PrintF(scope.file(), "[patching stack address for function: "); |
477 function->PrintName(scope.file()); | 478 function->PrintName(scope.file()); |
478 PrintF(scope.file(), " (Pc offset %i -> %i)]\n", pc_offset, | 479 PrintF(scope.file(), " (Pc offset %i -> %i)]\n", pc_offset, |
479 new_pc_offset); | 480 new_pc_offset); |
480 } | 481 } |
481 | 482 |
(...skipping 3187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3669 } | 3670 } |
3670 | 3671 |
3671 | 3672 |
3672 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 3673 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
3673 v->VisitPointer(BitCast<Object**>(&function_)); | 3674 v->VisitPointer(BitCast<Object**>(&function_)); |
3674 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 3675 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
3675 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 3676 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
3676 } | 3677 } |
3677 | 3678 |
3678 } } // namespace v8::internal | 3679 } } // namespace v8::internal |
OLD | NEW |