| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_STACK_FRAME_H_ | 5 #ifndef VM_STACK_FRAME_H_ |
| 6 #define VM_STACK_FRAME_H_ | 6 #define VM_STACK_FRAME_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/object.h" | 9 #include "vm/object.h" |
| 10 #include "vm/stub_code.h" | 10 #include "vm/stub_code.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 uword pc() const { | 27 uword pc() const { |
| 28 return *reinterpret_cast<uword*>(sp_ + PcAddressOffsetFromSp()); | 28 return *reinterpret_cast<uword*>(sp_ + PcAddressOffsetFromSp()); |
| 29 } | 29 } |
| 30 | 30 |
| 31 void set_pc(uword value) { | 31 void set_pc(uword value) { |
| 32 *reinterpret_cast<uword*>(sp_ + PcAddressOffsetFromSp()) = value; | 32 *reinterpret_cast<uword*>(sp_ + PcAddressOffsetFromSp()) = value; |
| 33 } | 33 } |
| 34 | 34 |
| 35 void SetEntrypointMarker(uword value) { | 35 void SetEntrypointMarker(uword value) { |
| 36 ASSERT(!(IsStubFrame() || IsEntryFrame() || IsExitFrame())); | 36 ASSERT(!(IsStubFrame() || IsEntryFrame() || IsExitFrame())); |
| 37 *reinterpret_cast<uword*>(fp_ - kWordSize) = value; | 37 *reinterpret_cast<uword*>(fp_ + EntrypointMarkerOffsetFromFp()) = value; |
| 38 } | 38 } |
| 39 | 39 |
| 40 // Visit objects in the frame. | 40 // Visit objects in the frame. |
| 41 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); | 41 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); |
| 42 | 42 |
| 43 // Print a frame. | 43 // Print a frame. |
| 44 virtual void Print() const; | 44 virtual void Print() const; |
| 45 | 45 |
| 46 // Check validity of a frame, used for assertion purposes. | 46 // Check validity of a frame, used for assertion purposes. |
| 47 virtual bool IsValid() const; | 47 virtual bool IsValid() const; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 66 StackFrame() : fp_(0), sp_(0) { } | 66 StackFrame() : fp_(0), sp_(0) { } |
| 67 | 67 |
| 68 // Name of the frame, used for generic frame printing functionality. | 68 // Name of the frame, used for generic frame printing functionality. |
| 69 virtual const char* GetName() const { return IsStubFrame()? "stub" : "dart"; } | 69 virtual const char* GetName() const { return IsStubFrame()? "stub" : "dart"; } |
| 70 | 70 |
| 71 private: | 71 private: |
| 72 RawCode* GetCodeObject() const; | 72 RawCode* GetCodeObject() const; |
| 73 | 73 |
| 74 // Target specific implementations for locating pc and caller fp/sp values. | 74 // Target specific implementations for locating pc and caller fp/sp values. |
| 75 static intptr_t PcAddressOffsetFromSp(); | 75 static intptr_t PcAddressOffsetFromSp(); |
| 76 static intptr_t EntrypointMarkerOffsetFromFp(); |
| 76 uword GetCallerSp() const; | 77 uword GetCallerSp() const; |
| 77 uword GetCallerFp() const; | 78 uword GetCallerFp() const; |
| 78 | 79 |
| 79 uword fp_; | 80 uword fp_; |
| 80 uword sp_; | 81 uword sp_; |
| 81 | 82 |
| 82 // The iterators FrameSetIterator and StackFrameIterator set the private | 83 // The iterators FrameSetIterator and StackFrameIterator set the private |
| 83 // fields fp_ and sp_ when they return the respective frame objects. | 84 // fields fp_ and sp_ when they return the respective frame objects. |
| 84 friend class FrameSetIterator; | 85 friend class FrameSetIterator; |
| 85 friend class StackFrameIterator; | 86 friend class StackFrameIterator; |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 uword pc_; | 265 uword pc_; |
| 265 GrowableArray<DeoptInstr*> deopt_instructions_; | 266 GrowableArray<DeoptInstr*> deopt_instructions_; |
| 266 Array& object_table_; | 267 Array& object_table_; |
| 267 | 268 |
| 268 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); | 269 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); |
| 269 }; | 270 }; |
| 270 | 271 |
| 271 } // namespace dart | 272 } // namespace dart |
| 272 | 273 |
| 273 #endif // VM_STACK_FRAME_H_ | 274 #endif // VM_STACK_FRAME_H_ |
| OLD | NEW |