Index: src/ia32/deoptimizer-ia32.cc |
diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc |
index 026572f2e54ddd1e5c2fef42acf27e3c6d6d3cdb..c6342d7b4847437e4402e2ad9976c8a7673fa5af 100644 |
--- a/src/ia32/deoptimizer-ia32.cc |
+++ b/src/ia32/deoptimizer-ia32.cc |
@@ -369,13 +369,31 @@ void Deoptimizer::DoComputeOsrOutputFrame() { |
// There are no translation commands for the caller's pc and fp, the |
// context, and the function. Set them up explicitly. |
- for (int i = 0; ok && i < 4; i++) { |
+ for (int i = StandardFrameConstants::kCallerPCOffset; |
+ ok && i >= StandardFrameConstants::kMarkerOffset; |
+ i -= kPointerSize) { |
uint32_t input_value = input_->GetFrameSlot(input_offset); |
if (FLAG_trace_osr) { |
- PrintF(" [esp + %d] <- 0x%08x ; [esp + %d] (fixed part)\n", |
+ const char* name = "UNKNOWN"; |
+ switch (i) { |
+ case StandardFrameConstants::kCallerPCOffset: |
+ name = "caller's pc"; |
+ break; |
+ case StandardFrameConstants::kCallerFPOffset: |
+ name = "fp"; |
+ break; |
+ case StandardFrameConstants::kContextOffset: |
+ name = "context"; |
+ break; |
+ case StandardFrameConstants::kMarkerOffset: |
+ name = "function"; |
+ break; |
+ } |
+ PrintF(" [esp + %d] <- 0x%08x ; [esp + %d] (fixed part - %s)\n", |
output_offset, |
input_value, |
- input_offset); |
+ input_offset, |
+ name); |
} |
output_[0]->SetFrameSlot(output_offset, input_->GetFrameSlot(input_offset)); |
input_offset -= kPointerSize; |