41
42 template<typename FKind> static void update_register_map(const frame& f, RegisterMap* map);
43 static inline void update_register_map_with_callee(const frame& f, RegisterMap* map);
44
45 static inline void push_pd(const frame& f);
46
47 static inline address return_address_at(intptr_t* sp);
48 static inline void patch_return_address_at(intptr_t* sp, address pc);
49
50 static inline int frame_align_words(int size);
51 static inline intptr_t* frame_align_pointer(intptr_t* sp);
52
53 // Abstract helpers for describing frames in general
54 class Frame;
55 class NonInterpretedFrame;
56
57 // Concrete helpers for describing concrete types of frames
58 class InterpretedFrame;
59 class NonInterpretedUnknownFrame;
60 class CompiledFrame;
61 class StubFrame;
62 };
63
64 class ContinuationHelper::Frame : public AllStatic {
65 public:
66 static const bool interpreted = false;
67 static const bool stub = false;
68
69 static inline intptr_t** callee_link_address(const frame& f);
70 static Method* frame_method(const frame& f);
71 static inline address real_pc(const frame& f);
72 static inline void patch_pc(const frame& f, address pc);
73 static address* return_pc_address(const frame& f);
74 static address return_pc(const frame& f);
75 static bool is_stub(CodeBlob* cb);
76
77 #ifdef ASSERT
78 static inline intptr_t* frame_top(const frame &f);
79 static inline bool is_deopt_return(address pc, const frame& sender);
80 static bool assert_frame_laid_out(frame f);
82 };
83
84 class ContinuationHelper::InterpretedFrame : public ContinuationHelper::Frame {
85 public:
86 static const bool interpreted = true;
87
88 static inline intptr_t* frame_top(const frame& f, InterpreterOopMap* mask);
89 static inline intptr_t* frame_top(const frame& f);
90 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
91 static inline intptr_t* frame_bottom(const frame& f);
92 static inline intptr_t* callers_sp(const frame& f);
93 static inline int stack_argsize(const frame& f);
94
95 static inline address* return_pc_address(const frame& f);
96 static address return_pc(const frame& f);
97 static void patch_sender_sp(frame& f, const frame& caller);
98
99 static int size(const frame& f);
100 static inline int expression_stack_size(const frame &f, InterpreterOopMap* mask);
101
102 #ifdef ASSERT
103 static bool is_owning_locks(const frame& f);
104 #endif
105
106 static bool is_instance(const frame& f);
107
108 typedef InterpreterOopMap* ExtraT;
109 };
110
111 class ContinuationHelper::NonInterpretedFrame : public ContinuationHelper::Frame {
112 public:
113 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
114 static inline intptr_t* frame_top(const frame& f);
115 static inline intptr_t* frame_bottom(const frame& f);
116
117 static inline int size(const frame& f);
118 static inline int stack_argsize(const frame& f);
119 };
120
121 class ContinuationHelper::NonInterpretedUnknownFrame : public ContinuationHelper::NonInterpretedFrame {
122 public:
123 static bool is_instance(const frame& f);
124 };
125
126 class ContinuationHelper::CompiledFrame : public ContinuationHelper::NonInterpretedFrame {
127 public:
128 static bool is_instance(const frame& f);
129
130 #ifdef ASSERT
131 template <typename RegisterMapT>
132 static bool is_owning_locks(JavaThread* thread, RegisterMapT* map, const frame& f);
133 #endif
134 };
135
136 class ContinuationHelper::StubFrame : public ContinuationHelper::NonInterpretedFrame {
137 public:
138 static const bool stub = true;
139
140 static bool is_instance(const frame& f);
141 };
142
143 #endif // SHARE_VM_RUNTIME_CONTINUATIONHELPER_HPP
|
41
42 template<typename FKind> static void update_register_map(const frame& f, RegisterMap* map);
43 static inline void update_register_map_with_callee(const frame& f, RegisterMap* map);
44
45 static inline void push_pd(const frame& f);
46
47 static inline address return_address_at(intptr_t* sp);
48 static inline void patch_return_address_at(intptr_t* sp, address pc);
49
50 static inline int frame_align_words(int size);
51 static inline intptr_t* frame_align_pointer(intptr_t* sp);
52
53 // Abstract helpers for describing frames in general
54 class Frame;
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 stub = false;
69
70 static inline intptr_t** callee_link_address(const frame& f);
71 static Method* frame_method(const frame& f);
72 static inline address real_pc(const frame& f);
73 static inline void patch_pc(const frame& f, address pc);
74 static address* return_pc_address(const frame& f);
75 static address return_pc(const frame& f);
76 static bool is_stub(CodeBlob* cb);
77
78 #ifdef ASSERT
79 static inline intptr_t* frame_top(const frame &f);
80 static inline bool is_deopt_return(address pc, const frame& sender);
81 static bool assert_frame_laid_out(frame f);
83 };
84
85 class ContinuationHelper::InterpretedFrame : public ContinuationHelper::Frame {
86 public:
87 static const bool interpreted = true;
88
89 static inline intptr_t* frame_top(const frame& f, InterpreterOopMap* mask);
90 static inline intptr_t* frame_top(const frame& f);
91 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
92 static inline intptr_t* frame_bottom(const frame& f);
93 static inline intptr_t* callers_sp(const frame& f);
94 static inline int stack_argsize(const frame& f);
95
96 static inline address* return_pc_address(const frame& f);
97 static address return_pc(const frame& f);
98 static void patch_sender_sp(frame& f, const frame& caller);
99
100 static int size(const frame& f);
101 static inline int expression_stack_size(const frame &f, InterpreterOopMap* mask);
102
103 static int monitors_to_fix(JavaThread* thread, const frame& f, ResourceHashtable<oopDesc*, bool> &table, stackChunkOop chunk) NOT_DEBUG_RETURN0;
104
105 static bool is_instance(const frame& f);
106
107 typedef InterpreterOopMap* ExtraT;
108 };
109
110 class ContinuationHelper::NonInterpretedFrame : public ContinuationHelper::Frame {
111 public:
112 static inline intptr_t* frame_top(const frame& f, int callee_argsize, bool callee_interpreted);
113 static inline intptr_t* frame_top(const frame& f);
114 static inline intptr_t* frame_bottom(const frame& f);
115
116 static inline int size(const frame& f);
117 static inline int stack_argsize(const frame& f);
118 };
119
120 class ContinuationHelper::NonInterpretedUnknownFrame : public ContinuationHelper::NonInterpretedFrame {
121 public:
122 static bool is_instance(const frame& f);
123 };
124
125 class ContinuationHelper::CompiledFrame : public ContinuationHelper::NonInterpretedFrame {
126 public:
127 static bool is_instance(const frame& f);
128
129 template <typename RegisterMapT>
130 static int monitors_to_fix(JavaThread* thread, RegisterMapT* map, const frame& f, ResourceHashtable<oopDesc*, bool> &table) NOT_DEBUG_RETURN0;
131 };
132
133 class ContinuationHelper::NativeFrame : public ContinuationHelper::NonInterpretedFrame {
134 public:
135 static bool is_instance(const frame& f);
136
137 static int monitors_to_fix(JavaThread* thread, const frame& f, ResourceHashtable<oopDesc*, bool> &table) NOT_DEBUG_RETURN0;
138 };
139
140 class ContinuationHelper::StubFrame : public ContinuationHelper::NonInterpretedFrame {
141 public:
142 static const bool stub = true;
143
144 static bool is_instance(const frame& f);
145 static int stack_argsize(const frame& f) { return 0; }
146 };
147
148 #endif // SHARE_VM_RUNTIME_CONTINUATIONHELPER_HPP
|