OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 #include "vm/globals.h" | |
6 #if defined(TARGET_ARCH_MIPS) | |
7 | |
8 #include "vm/stack_frame.h" | |
9 | |
10 namespace dart { | |
11 | |
12 // The constant kExitLinkOffsetInEntryFrame must be kept in sync with the | |
13 // code in the InvokeDartCode stub. | |
14 static const int kSavedContextOffsetInEntryFrame = -11 * kWordSize; | |
15 static const int kExitLinkOffsetInEntryFrame = -10 * kWordSize; | |
16 static const int kPcAddressOffsetFromSp = -2 * kWordSize; | |
17 static const int kEntrypointMarkerOffsetFromFp = 2 * kWordSize; | |
18 static const int kSpOffsetFromPreviousFp = 3 * kWordSize; | |
19 | |
20 | |
21 intptr_t StackFrame::PcAddressOffsetFromSp() { | |
22 return kPcAddressOffsetFromSp; | |
23 } | |
24 | |
25 | |
26 intptr_t StackFrame::EntrypointMarkerOffsetFromFp() { | |
27 return kEntrypointMarkerOffsetFromFp; | |
28 } | |
29 | |
30 | |
31 uword StackFrame::GetCallerFp() const { | |
32 return *(reinterpret_cast<uword*>(fp())); | |
33 } | |
34 | |
35 | |
36 uword StackFrame::GetCallerSp() const { | |
37 return fp() + kSpOffsetFromPreviousFp; | |
38 } | |
39 | |
40 | |
41 intptr_t EntryFrame::ExitLinkOffset() const { | |
42 return kExitLinkOffsetInEntryFrame; | |
43 } | |
44 | |
45 | |
46 intptr_t EntryFrame::SavedContextOffset() const { | |
47 return kSavedContextOffsetInEntryFrame; | |
48 } | |
49 | |
50 | |
51 void StackFrameIterator::SetupLastExitFrameData() { | |
52 Isolate* current = Isolate::Current(); | |
53 uword exit_marker = current->top_exit_frame_info(); | |
54 frames_.fp_ = exit_marker; | |
55 } | |
56 | |
57 | |
58 void StackFrameIterator::SetupNextExitFrameData() { | |
59 uword exit_address = entry_.fp() + kExitLinkOffsetInEntryFrame; | |
60 uword exit_marker = *reinterpret_cast<uword*>(exit_address); | |
61 frames_.fp_ = exit_marker; | |
62 frames_.sp_ = 0; | |
63 } | |
64 | |
65 } // namespace dart | |
66 | |
67 #endif // defined TARGET_ARCH_MIPS | |
OLD | NEW |