55 class NonInterpretedFrame;
56
57 // Concrete helpers for describing concrete types of frames
58 class InterpretedFrame;
59 class NonInterpretedUnknownFrame;
60 class CompiledFrame;
61 class NativeFrame;
62 class StubFrame;
63 };
64
65 class ContinuationHelper::Frame : public AllStatic {
66 public:
67 static const bool interpreted = false;
68 static const bool compiled = false;
69 static const bool stub = false;
70 static const bool native = false;
71
72 static inline intptr_t** callee_link_address(const frame& f);
73 static Method* frame_method(const frame& f);
74 static inline address real_pc(const frame& f);
75 static inline void patch_pc(const frame& f, address pc);
76 static address* return_pc_address(const frame& f);
77 static address return_pc(const frame& f);
78 static bool is_stub(CodeBlob* cb);
79
80 #ifdef ASSERT
81 static inline intptr_t* frame_top(const frame &f);
82 static inline bool is_deopt_return(address pc, const frame& sender);
83 static bool assert_frame_laid_out(frame f);
84 #endif
85 };
86
87 class ContinuationHelper::InterpretedFrame : public ContinuationHelper::Frame {
88 public:
89 static const bool interpreted = true;
90
91 static inline intptr_t* frame_top(const frame& f, InterpreterOopMap* mask);
92 static inline intptr_t* frame_top(const frame& f);
93 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
94 static inline intptr_t* frame_bottom(const frame& f);
95 static inline intptr_t* callers_sp(const frame& f);
|
55 class NonInterpretedFrame;
56
57 // Concrete helpers for describing concrete types of frames
58 class InterpretedFrame;
59 class NonInterpretedUnknownFrame;
60 class CompiledFrame;
61 class NativeFrame;
62 class StubFrame;
63 };
64
65 class ContinuationHelper::Frame : public AllStatic {
66 public:
67 static const bool interpreted = false;
68 static const bool compiled = false;
69 static const bool stub = false;
70 static const bool native = false;
71
72 static inline intptr_t** callee_link_address(const frame& f);
73 static Method* frame_method(const frame& f);
74 static inline address real_pc(const frame& f);
75 static inline void patch_pc(const frame& f, address pc, bool callee_augmented = false);
76 static address* return_pc_address(const frame& f);
77 static address return_pc(const frame& f);
78 static bool is_stub(CodeBlob* cb);
79
80 #ifdef ASSERT
81 static inline intptr_t* frame_top(const frame &f);
82 static inline bool is_deopt_return(address pc, const frame& sender);
83 static bool assert_frame_laid_out(frame f);
84 #endif
85 };
86
87 class ContinuationHelper::InterpretedFrame : public ContinuationHelper::Frame {
88 public:
89 static const bool interpreted = true;
90
91 static inline intptr_t* frame_top(const frame& f, InterpreterOopMap* mask);
92 static inline intptr_t* frame_top(const frame& f);
93 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
94 static inline intptr_t* frame_bottom(const frame& f);
95 static inline intptr_t* callers_sp(const frame& f);
|