Chromium Code Reviews| Index: src/frames.cc |
| diff --git a/src/frames.cc b/src/frames.cc |
| index 98b3d65f955ed9eac36b52fc1f4dc365447bbfa7..40abf640363e5ab0322ce39c5cabd3fafdeed485 100644 |
| --- a/src/frames.cc |
| +++ b/src/frames.cc |
| @@ -1304,14 +1304,41 @@ void InternalFrame::Iterate(ObjectVisitor* v) const { |
| void StubFailureTrampolineFrame::Iterate(ObjectVisitor* v) const { |
| - const int offset = StandardFrameConstants::kContextOffset; |
| Object** base = &Memory::Object_at(sp()); |
| - Object** limit = &Memory::Object_at(fp() + offset) + 1; |
| + Object** limit = &Memory::Object_at(fp() + |
| + kFirstRegisterParameterFrameOffset); |
| + v->VisitPointers(base, limit); |
| + base = &Memory::Object_at(fp() + StandardFrameConstants::kMarkerOffset); |
| + const int offset = StandardFrameConstants::kContextOffset; |
| + limit = &Memory::Object_at(fp() + offset) + 1; |
| v->VisitPointers(base, limit); |
| IteratePc(v, pc_address(), LookupCode()); |
| } |
| +Address StubFailureTrampolineFrame::GetCallerStackPointer() const { |
| + return fp() + StandardFrameConstants::kCallerSPOffset; |
| +} |
| + |
| + |
| +Code* StubFailureTrampolineFrame::unchecked_code() const { |
| + int i = 0; |
| + for (; i <= StubFailureTrampolineStub::kMaxExtraExpressionStackCount; ++i) { |
| + Code* trampoline; |
| + StubFailureTrampolineStub(i).FindCodeInCache(&trampoline, isolate()); |
|
Michael Starzinger
2013/02/04 16:05:10
Are we sure that this stub is in the cache? We sho
|
| + ASSERT(trampoline != NULL); |
| + Address current_pc = pc(); |
| + Address code_start = trampoline->instruction_start(); |
| + Address code_end = code_start + trampoline->instruction_size(); |
| + if (code_start <= current_pc && current_pc < code_end) { |
| + return trampoline; |
| + } |
| + } |
| + UNREACHABLE(); |
| + return NULL; |
| +} |
| + |
| + |
| // ------------------------------------------------------------------------- |