Index: src/x64/deoptimizer-x64.cc |
diff --git a/src/x64/deoptimizer-x64.cc b/src/x64/deoptimizer-x64.cc |
index 40b9a1cce1a2a35d20b7ea0d1bd64ad5753fff14..f3046b9ce3a5f75c50223bb1200975e6b62b8c53 100644 |
--- a/src/x64/deoptimizer-x64.cc |
+++ b/src/x64/deoptimizer-x64.cc |
@@ -458,6 +458,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(TranslationIterator* iterator, |
void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
int frame_index) { |
+ Builtins* builtins = isolate_->builtins(); |
+ Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); |
JSFunction* function = JSFunction::cast(ComputeLiteral(iterator->Next())); |
unsigned height = iterator->Next(); |
unsigned height_in_bytes = height * kPointerSize; |
@@ -465,7 +467,7 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
PrintF(" translating construct stub => height=%d\n", height_in_bytes); |
} |
- unsigned fixed_frame_size = 6 * kPointerSize; |
+ unsigned fixed_frame_size = 7 * kPointerSize; |
unsigned output_frame_size = height_in_bytes + fixed_frame_size; |
// Allocate and store the output frame description. |
@@ -534,6 +536,16 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
top_address + output_offset, output_offset, value); |
} |
+ // The output frame reflects a JSConstructStubGeneric frame. |
+ output_offset -= kPointerSize; |
+ value = reinterpret_cast<intptr_t>(construct_stub); |
+ output_frame->SetFrameSlot(output_offset, value); |
+ if (FLAG_trace_deopt) { |
+ PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
+ V8PRIxPTR " ; code object\n", |
+ top_address + output_offset, output_offset, value); |
+ } |
+ |
// Number of incoming arguments. |
output_offset -= kPointerSize; |
value = reinterpret_cast<intptr_t>(Smi::FromInt(height - 1)); |
@@ -557,8 +569,6 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
ASSERT(0 == output_offset); |
- Builtins* builtins = isolate_->builtins(); |
- Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); |
intptr_t pc = reinterpret_cast<intptr_t>( |
construct_stub->instruction_start() + |
isolate_->heap()->construct_stub_deopt_pc_offset()->value()); |