Index: src/arm/deoptimizer-arm.cc |
diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc |
index 7b2a3c4fc1c43b70763ad288203194408aa309fd..699e6aa4b103a67cf553482dcd5f12a353471a16 100644 |
--- a/src/arm/deoptimizer-arm.cc |
+++ b/src/arm/deoptimizer-arm.cc |
@@ -457,6 +457,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; |
@@ -464,7 +466,7 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
PrintF(" translating construct stub => height=%d\n", height_in_bytes); |
} |
- unsigned fixed_frame_size = 7 * kPointerSize; |
+ unsigned fixed_frame_size = 8 * kPointerSize; |
unsigned output_frame_size = height_in_bytes + fixed_frame_size; |
// Allocate and store the output frame description. |
@@ -529,6 +531,15 @@ 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%08x: [top + %d] <- 0x%08x ; code object\n", |
+ top_address + output_offset, output_offset, value); |
+ } |
+ |
// Number of incoming arguments. |
output_offset -= kPointerSize; |
value = reinterpret_cast<uint32_t>(Smi::FromInt(height - 1)); |
@@ -559,8 +570,6 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
ASSERT(0 == output_offset); |
- Builtins* builtins = isolate_->builtins(); |
- Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); |
uint32_t pc = reinterpret_cast<uint32_t>( |
construct_stub->instruction_start() + |
isolate_->heap()->construct_stub_deopt_pc_offset()->value()); |