Index: src/arm/frames-arm.cc |
diff --git a/src/arm/frames-arm.cc b/src/arm/frames-arm.cc |
index 6fde4b73c0f7a0e164d918d28d075a28d16bd85e..b0fa13a5a1298aa157e9f1a4a3614b37ed11ea80 100644 |
--- a/src/arm/frames-arm.cc |
+++ b/src/arm/frames-arm.cc |
@@ -54,23 +54,24 @@ StackFrame::Type ExitFrame::GetStateForFramePointer(Address fp, State* state) { |
if (fp == 0) return NONE; |
// Compute frame type and stack pointer. |
Address sp = fp + ExitFrameConstants::kSPDisplacement; |
- Type type; |
- if (Memory::Address_at(fp + ExitFrameConstants::kDebugMarkOffset) != 0) { |
- type = EXIT_DEBUG; |
+ const int offset = ExitFrameConstants::kCodeOffset; |
+ Object* code = Memory::Object_at(fp + offset); |
+ bool is_debug_exit = code->IsSmi(); |
+ if (is_debug_exit) { |
sp -= kNumJSCallerSaved * kPointerSize; |
- } else { |
- type = EXIT; |
} |
// Fill in the state. |
state->sp = sp; |
state->fp = fp; |
state->pc_address = reinterpret_cast<Address*>(sp - 1 * kPointerSize); |
- return type; |
+ return EXIT; |
} |
void ExitFrame::Iterate(ObjectVisitor* v) const { |
- // Do nothing |
+ v->VisitPointer(&code_slot()); |
+ // The arguments are traversed as part of the expression stack of |
+ // the calling frame. |
} |