| Index: src/arm/frames-arm.cc
|
| ===================================================================
|
| --- src/arm/frames-arm.cc (revision 3149)
|
| +++ src/arm/frames-arm.cc (working copy)
|
| @@ -54,23 +54,24 @@
|
| 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.
|
| }
|
|
|
|
|
|
|