135 // of the return address we need the real "raw" sp. Since sparc already
136 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
137 // original sp we use that convention.
138
139 union {
140 intptr_t* _unextended_sp;
141 int _offset_unextended_sp; // for use in stack-chunk frames
142 };
143
144 void adjust_unextended_sp() NOT_DEBUG_RETURN;
145
146 // true means _sp value is correct and we can use it to get the sender's sp
147 // of the compiled frame, otherwise, _sp value may be invalid and we can use
148 // _fp to get the sender's sp if PreserveFramePointer is enabled.
149 bool _sp_is_trusted;
150
151 intptr_t* ptr_at_addr(int offset) const {
152 return (intptr_t*) addr_at(offset);
153 }
154
155 #ifdef ASSERT
156 // Used in frame::sender_for_{interpreter,compiled}_frame
157 static void verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp);
158 #endif
159
160 public:
161 // Constructors
162
163 frame(intptr_t* sp, intptr_t* fp, address pc);
164
165 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
166
167 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
168 // used for fast frame construction by continuations
169 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
170
171 frame(intptr_t* sp, intptr_t* fp);
172
173 void init(intptr_t* sp, intptr_t* fp, address pc);
174 void setup(address pc);
|
135 // of the return address we need the real "raw" sp. Since sparc already
136 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
137 // original sp we use that convention.
138
139 union {
140 intptr_t* _unextended_sp;
141 int _offset_unextended_sp; // for use in stack-chunk frames
142 };
143
144 void adjust_unextended_sp() NOT_DEBUG_RETURN;
145
146 // true means _sp value is correct and we can use it to get the sender's sp
147 // of the compiled frame, otherwise, _sp value may be invalid and we can use
148 // _fp to get the sender's sp if PreserveFramePointer is enabled.
149 bool _sp_is_trusted;
150
151 intptr_t* ptr_at_addr(int offset) const {
152 return (intptr_t*) addr_at(offset);
153 }
154
155 public:
156 // Support for scalarized inline type calling convention
157 intptr_t* repair_sender_sp(intptr_t* sender_sp, intptr_t** saved_fp_addr) const;
158 static intptr_t* repair_sender_sp(nmethod* nm, intptr_t* sp, intptr_t** saved_fp_addr);
159 bool was_augmented_on_entry(int& real_size) const;
160
161 private:
162
163 #ifdef ASSERT
164 // Used in frame::sender_for_{interpreter,compiled}_frame
165 static void verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp);
166 #endif
167
168 public:
169 // Constructors
170
171 frame(intptr_t* sp, intptr_t* fp, address pc);
172
173 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
174
175 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
176 // used for fast frame construction by continuations
177 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
178
179 frame(intptr_t* sp, intptr_t* fp);
180
181 void init(intptr_t* sp, intptr_t* fp, address pc);
182 void setup(address pc);
|