| 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.
|
| }
|
|
|
|
|
|
|