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/cpu-profiler.h" | 9 #include "src/cpu-profiler.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
147 | 147 |
148 // Locate the deoptimization point in the code. As we are at a call the | 148 // Locate the deoptimization point in the code. As we are at a call the |
149 // return address must be at a place in the code with deoptimization support. | 149 // return address must be at a place in the code with deoptimization support. |
150 SafepointEntry safepoint_entry = code->GetSafepointEntry(frame->pc()); | 150 SafepointEntry safepoint_entry = code->GetSafepointEntry(frame->pc()); |
151 int deoptimization_index = safepoint_entry.deoptimization_index(); | 151 int deoptimization_index = safepoint_entry.deoptimization_index(); |
152 CHECK_NE(deoptimization_index, Safepoint::kNoDeoptimizationIndex); | 152 CHECK_NE(deoptimization_index, Safepoint::kNoDeoptimizationIndex); |
153 | 153 |
154 // Always use the actual stack slots when calculating the fp to sp | 154 // Always use the actual stack slots when calculating the fp to sp |
155 // delta adding two for the function and context. | 155 // delta adding two for the function and context. |
156 unsigned stack_slots = code->stack_slots(); | 156 unsigned stack_slots = code->stack_slots(); |
157 DeoptimizationInputData* data = | |
158 DeoptimizationInputData::cast(code->deoptimization_data()); | |
159 unsigned arguments_stack_height = | |
160 data->ArgumentsStackHeight(deoptimization_index)->value() * kPointerSize; | |
Yang
2015/08/03 11:35:14
ComputeOutgoingArgumentSize() contains the same co
Jarin
2015/08/03 11:48:23
Done.
| |
157 unsigned fp_to_sp_delta = (stack_slots * kPointerSize) + | 161 unsigned fp_to_sp_delta = (stack_slots * kPointerSize) + |
158 StandardFrameConstants::kFixedFrameSizeFromFp; | 162 StandardFrameConstants::kFixedFrameSizeFromFp + |
163 arguments_stack_height; | |
159 | 164 |
160 Deoptimizer* deoptimizer = new Deoptimizer(isolate, | 165 Deoptimizer* deoptimizer = new Deoptimizer(isolate, |
161 function, | 166 function, |
162 Deoptimizer::DEBUGGER, | 167 Deoptimizer::DEBUGGER, |
163 deoptimization_index, | 168 deoptimization_index, |
164 frame->pc(), | 169 frame->pc(), |
165 fp_to_sp_delta, | 170 fp_to_sp_delta, |
166 code); | 171 code); |
167 Address tos = frame->fp() - fp_to_sp_delta; | 172 Address tos = frame->fp() - fp_to_sp_delta; |
168 deoptimizer->FillInputFrame(tos, frame); | 173 deoptimizer->FillInputFrame(tos, frame); |
(...skipping 3247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3416 DCHECK(value_info->IsMaterializedObject()); | 3421 DCHECK(value_info->IsMaterializedObject()); |
3417 | 3422 |
3418 value_info->value_ = | 3423 value_info->value_ = |
3419 Handle<Object>(previously_materialized_objects->get(i), isolate_); | 3424 Handle<Object>(previously_materialized_objects->get(i), isolate_); |
3420 } | 3425 } |
3421 } | 3426 } |
3422 } | 3427 } |
3423 | 3428 |
3424 } // namespace internal | 3429 } // namespace internal |
3425 } // namespace v8 | 3430 } // namespace v8 |
OLD | NEW |