< prev index next >

src/hotspot/cpu/ppc/frame_ppc.cpp

Print this page

226   UpcallStub* blob = _cb->as_upcall_stub();
227   JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
228   return jfa->last_Java_sp() == nullptr;
229 }
230 
231 frame frame::sender_for_upcall_stub_frame(RegisterMap* map) const {
232   assert(map != nullptr, "map must be set");
233   UpcallStub* blob = _cb->as_upcall_stub();
234   // Java frame called from C; skip all C frames and return top C
235   // frame of that chunk as the sender
236   JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
237   assert(!upcall_stub_frame_is_first(), "must have a frame anchor to go back to");
238   assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack");
239   map->clear();
240   assert(map->include_argument_oops(), "should be set by clear");
241   frame fr(jfa->last_Java_sp(), jfa->last_Java_pc(), kind::code_blob);
242 
243   return fr;
244 }
245 





246 frame frame::sender_for_interpreter_frame(RegisterMap *map) const {
247   // This is the sp before any possible extension (adapter/locals).
248   intptr_t* unextended_sp = interpreter_frame_sender_sp();
249   address sender_pc = this->sender_pc();
250   if (Continuation::is_return_barrier_entry(sender_pc)) {
251     if (map->walk_cont()) { // about to walk into an h-stack
252       return Continuation::top_frame(*this, map);
253     } else {
254       return Continuation::continuation_bottom_sender(map->thread(), *this, sender_sp());
255     }
256   }
257 
258   return frame(sender_sp(), sender_pc, unextended_sp);
259 }
260 
261 // locals
262 
263 void frame::interpreter_frame_set_locals(intptr_t* locs)  {
264   assert(is_interpreted_frame(), "interpreted frame expected");
265   // set relativized locals

226   UpcallStub* blob = _cb->as_upcall_stub();
227   JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
228   return jfa->last_Java_sp() == nullptr;
229 }
230 
231 frame frame::sender_for_upcall_stub_frame(RegisterMap* map) const {
232   assert(map != nullptr, "map must be set");
233   UpcallStub* blob = _cb->as_upcall_stub();
234   // Java frame called from C; skip all C frames and return top C
235   // frame of that chunk as the sender
236   JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
237   assert(!upcall_stub_frame_is_first(), "must have a frame anchor to go back to");
238   assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack");
239   map->clear();
240   assert(map->include_argument_oops(), "should be set by clear");
241   frame fr(jfa->last_Java_sp(), jfa->last_Java_pc(), kind::code_blob);
242 
243   return fr;
244 }
245 
246 JavaThread** frame::saved_thread_address(const frame& f) {
247   // The current thread (JavaThread*) is never stored on the stack
248   return nullptr;
249 }
250 
251 frame frame::sender_for_interpreter_frame(RegisterMap *map) const {
252   // This is the sp before any possible extension (adapter/locals).
253   intptr_t* unextended_sp = interpreter_frame_sender_sp();
254   address sender_pc = this->sender_pc();
255   if (Continuation::is_return_barrier_entry(sender_pc)) {
256     if (map->walk_cont()) { // about to walk into an h-stack
257       return Continuation::top_frame(*this, map);
258     } else {
259       return Continuation::continuation_bottom_sender(map->thread(), *this, sender_sp());
260     }
261   }
262 
263   return frame(sender_sp(), sender_pc, unextended_sp);
264 }
265 
266 // locals
267 
268 void frame::interpreter_frame_set_locals(intptr_t* locs)  {
269   assert(is_interpreted_frame(), "interpreted frame expected");
270   // set relativized locals
< prev index next >