Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Unified Diff: runtime/vm/stack_frame.cc

Issue 14925005: Remove stack_frame_<arch>.cc files. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/stack_frame.h ('k') | runtime/vm/stack_frame_arm.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/stack_frame.cc
===================================================================
--- runtime/vm/stack_frame.cc (revision 22469)
+++ runtime/vm/stack_frame.cc (working copy)
@@ -21,7 +21,7 @@
bool StackFrame::IsStubFrame() const {
ASSERT(!(IsEntryFrame() || IsExitFrame()));
uword saved_pc =
- *(reinterpret_cast<uword*>(fp() + EntrypointMarkerOffsetFromFp()));
+ *(reinterpret_cast<uword*>(fp() + (kPcMarkerSlotFromFp * kWordSize)));
return (saved_pc == 0);
}
@@ -37,17 +37,18 @@
RawContext* EntryFrame::SavedContext() const {
- return *(reinterpret_cast<RawContext**>(fp() + SavedContextOffset()));
+ return *(reinterpret_cast<RawContext**>(
+ fp() + (kSavedContextSlotFromEntryFp * kWordSize)));
}
void EntryFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
// Visit objects between SP and (FP - callee_save_area).
ASSERT(visitor != NULL);
- RawObject** start = reinterpret_cast<RawObject**>(sp());
- RawObject** end = reinterpret_cast<RawObject**>(
- fp() - kWordSize + ExitLinkOffset());
- visitor->VisitPointers(start, end);
+ RawObject** first = reinterpret_cast<RawObject**>(sp());
+ RawObject** last = reinterpret_cast<RawObject**>(
+ fp() + (kExitLinkSlotFromEntryFp - 1) * kWordSize);
+ visitor->VisitPointers(first, last);
}
@@ -60,9 +61,9 @@
// helper functions to the raw object interface.
ASSERT(visitor != NULL);
NoGCScope no_gc;
- RawObject** start_addr = reinterpret_cast<RawObject**>(sp());
- RawObject** end_addr =
- reinterpret_cast<RawObject**>(fp()) + kFirstLocalSlotIndex;
+ RawObject** first = reinterpret_cast<RawObject**>(sp());
+ RawObject** last = reinterpret_cast<RawObject**>(
+ fp() + (kFirstLocalSlotFromFp * kWordSize));
Code code;
code = LookupDartCode();
if (!code.IsNull()) {
@@ -93,24 +94,24 @@
// Spill slots are at the 'bottom' of the frame.
intptr_t spill_slot_count = length - map.RegisterBitCount();
for (intptr_t bit = 0; bit < spill_slot_count; ++bit) {
- if (map.IsObject(bit)) visitor->VisitPointer(end_addr);
- --end_addr;
+ if (map.IsObject(bit)) visitor->VisitPointer(last);
+ --last;
}
// The live registers at the 'top' of the frame comprise the rest of the
// stack map.
for (intptr_t bit = length - 1; bit >= spill_slot_count; --bit) {
- if (map.IsObject(bit)) visitor->VisitPointer(start_addr);
- ++start_addr;
+ if (map.IsObject(bit)) visitor->VisitPointer(first);
+ ++first;
}
- // The end address can be one slot (but not more) past the start
- // address in the case that all slots were covered by the stack map.
- ASSERT((end_addr + 1) >= start_addr);
+ // The last slot can be one slot (but not more) past the last slot
+ // in the case that all slots were covered by the stack map.
+ ASSERT((last + 1) >= first);
}
}
- // Each slot between the start and end address are tagged objects.
- visitor->VisitPointers(start_addr, end_addr);
+ // Each slot between the first and last included are tagged objects.
+ visitor->VisitPointers(first, last);
}
@@ -139,11 +140,11 @@
// a GC as we are handling raw object references here. It is possible
// that the code is called while a GC is in progress, that is ok.
NoGCScope no_gc;
- uword saved_pc =
- *(reinterpret_cast<uword*>(fp() + EntrypointMarkerOffsetFromFp()));
- if (saved_pc != 0) {
- uword entry_point =
- (saved_pc - Assembler::kOffsetOfSavedPCfromEntrypoint);
+ const uword pc_marker =
+ *(reinterpret_cast<uword*>(fp() + (kPcMarkerSlotFromFp * kWordSize)));
+ if (pc_marker != 0) {
+ const uword entry_point =
+ (pc_marker - Assembler::kEntryPointToPcMarkerOffset);
RawInstructions* instr = Instructions::FromEntryPoint(entry_point);
if (instr != Instructions::null()) {
return instr->ptr()->code_;
@@ -202,6 +203,21 @@
}
+void StackFrameIterator::SetupLastExitFrameData() {
+ Isolate* current = Isolate::Current();
+ uword exit_marker = current->top_exit_frame_info();
+ frames_.fp_ = exit_marker;
+}
+
+
+void StackFrameIterator::SetupNextExitFrameData() {
+ uword exit_address = entry_.fp() + (kExitLinkSlotFromEntryFp * kWordSize);
+ uword exit_marker = *reinterpret_cast<uword*>(exit_address);
+ frames_.fp_ = exit_marker;
+ frames_.sp_ = 0;
+}
+
+
StackFrameIterator::StackFrameIterator(bool validate)
: validate_(validate), entry_(), exit_(), current_frame_(NULL) {
SetupLastExitFrameData(); // Setup data for last exit frame.
« no previous file with comments | « runtime/vm/stack_frame.h ('k') | runtime/vm/stack_frame_arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698