Index: runtime/vm/stack_frame.cc |
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc |
index 194067aa8cfac5288dfcc6a65bde7e1e7fe31281..3ec07cb8210f1170651725133f5bf382f2ee7741 100644 |
--- a/runtime/vm/stack_frame.cc |
+++ b/runtime/vm/stack_frame.cc |
@@ -35,7 +35,7 @@ bool StackFrame::IsStubFrame() const { |
const char* StackFrame::ToCString() const { |
- ASSERT(isolate_ == Isolate::Current()); |
+ ASSERT(thread_ == Thread::Current()); |
Zone* zone = Thread::Current()->zone(); |
if (IsDartFrame()) { |
const Code& code = Code::Handle(LookupDartCode()); |
@@ -68,7 +68,7 @@ void ExitFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
void EntryFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
- ASSERT(isolate() == Isolate::Current()); |
+ ASSERT(thread() == Thread::Current()); |
// Visit objects between SP and (FP - callee_save_area). |
ASSERT(visitor != NULL); |
RawObject** first = reinterpret_cast<RawObject**>(sp()); |
@@ -85,7 +85,7 @@ void StackFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
// these handles are not traversed. The use of handles is mainly to |
// be able to reuse the handle based code and avoid having to add |
// helper functions to the raw object interface. |
- ASSERT(isolate_ == Isolate::Current()); |
+ ASSERT(thread() == Thread::Current()); |
ASSERT(visitor != NULL); |
NoSafepointScope no_safepoint; |
Code code; |
@@ -165,7 +165,6 @@ void StackFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
RawFunction* StackFrame::LookupDartFunction() const { |
- ASSERT(isolate_ == Isolate::Current()); |
const Code& code = Code::Handle(LookupDartCode()); |
if (!code.IsNull()) { |
return code.function(); |
@@ -175,7 +174,6 @@ RawFunction* StackFrame::LookupDartFunction() const { |
RawCode* StackFrame::LookupDartCode() const { |
- ASSERT(isolate_ == Isolate::Current()); |
// We add a no gc scope to ensure that the code below does not trigger |
// 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. |
@@ -270,9 +268,8 @@ bool StackFrame::IsValid() const { |
void StackFrameIterator::SetupLastExitFrameData() { |
- // This gets called by profiler which may run in a different thread (Windows) |
- // but needs the info from mutator_thread instead. |
- uword exit_marker = isolate_->top_exit_frame_info(); |
+ ASSERT(thread_ != NULL); |
+ uword exit_marker = thread_->top_exit_frame_info(); |
frames_.fp_ = exit_marker; |
} |
@@ -286,6 +283,7 @@ void StackFrameIterator::SetupNextExitFrameData() { |
} |
+// TODO(johnmccutchan): Remove |isolate| argument. |
// Tell MemorySanitizer that generated code initializes part of the stack. |
// TODO(koda): Limit to frames that are actually written by generated code. |
static void UnpoisonStack(Isolate* isolate, uword fp) { |
@@ -295,28 +293,28 @@ static void UnpoisonStack(Isolate* isolate, uword fp) { |
} |
-StackFrameIterator::StackFrameIterator(bool validate, Isolate* isolate) |
+StackFrameIterator::StackFrameIterator(bool validate, Thread* thread) |
: validate_(validate), |
- entry_(isolate), |
- exit_(isolate), |
- frames_(isolate), |
+ entry_(thread), |
+ exit_(thread), |
+ frames_(thread), |
current_frame_(NULL), |
- isolate_(isolate) { |
- ASSERT((isolate_ == Isolate::Current()) || |
+ thread_(thread) { |
+ ASSERT((thread_ == Thread::Current()) || |
OS::AllowStackFrameIteratorFromAnotherThread()); |
SetupLastExitFrameData(); // Setup data for last exit frame. |
} |
StackFrameIterator::StackFrameIterator(uword last_fp, bool validate, |
- Isolate* isolate) |
+ Thread* thread) |
: validate_(validate), |
- entry_(isolate), |
- exit_(isolate), |
- frames_(isolate), |
+ entry_(thread), |
+ exit_(thread), |
+ frames_(thread), |
current_frame_(NULL), |
- isolate_(isolate) { |
- ASSERT((isolate_ == Isolate::Current()) || |
+ thread_(thread) { |
+ ASSERT((thread_ == Thread::Current()) || |
OS::AllowStackFrameIteratorFromAnotherThread()); |
frames_.fp_ = last_fp; |
frames_.sp_ = 0; |
@@ -325,14 +323,14 @@ StackFrameIterator::StackFrameIterator(uword last_fp, bool validate, |
StackFrameIterator::StackFrameIterator(uword fp, uword sp, uword pc, |
- bool validate, Isolate* isolate) |
+ bool validate, Thread* thread) |
: validate_(validate), |
- entry_(isolate), |
- exit_(isolate), |
- frames_(isolate), |
+ entry_(thread), |
+ exit_(thread), |
+ frames_(thread), |
current_frame_(NULL), |
- isolate_(isolate) { |
- ASSERT((isolate_ == Isolate::Current()) || |
+ thread_(thread) { |
+ ASSERT((thread_ == Thread::Current()) || |
OS::AllowStackFrameIteratorFromAnotherThread()); |
frames_.fp_ = fp; |
frames_.sp_ = sp; |
@@ -357,7 +355,7 @@ StackFrame* StackFrameIterator::NextFrame() { |
if (!HasNextFrame()) { |
return NULL; |
} |
- UnpoisonStack(isolate_, frames_.fp_); |
+ UnpoisonStack(thread_->isolate(), frames_.fp_); |
if (frames_.pc_ == 0) { |
// Iteration starts from an exit frame given by its fp. |
current_frame_ = NextExitFrame(); |