< prev index next >

src/hotspot/cpu/ppc/frame_ppc.inline.hpp

Print this page

310   // Must be native-compiled frame, i.e. the marshaling code for native
311   // methods that exists in the core system.
312   return frame(sender_sp(), sender_pc(), kind::code_blob);
313 }
314 
315 inline frame frame::sender(RegisterMap* map) const {
316   frame result = sender_raw(map);
317 
318   if (map->process_frames() && !map->in_cont()) {
319     StackWatermarkSet::on_iteration(map->thread(), result);
320   }
321 
322   // Calling frame::id() is currently not supported for heap frames.
323   assert(result._on_heap || this->_on_heap || result.is_older(this->id()), "Must be");
324 
325   return result;
326 }
327 
328 inline frame frame::sender_for_compiled_frame(RegisterMap *map) const {
329   assert(map != nullptr, "map must be set");

330 
331   intptr_t* sender_sp = this->sender_sp();
332   address   sender_pc = this->sender_pc();
333 
334   if (map->update_map()) {
335     // Tell GC to use argument oopmaps for some runtime stubs that need it.
336     // For C1, the runtime stub might not have oop maps, so set this flag
337     // outside of update_register_map.





338     if (!_cb->is_nmethod()) { // compiled frames do not use callee-saved registers
339       map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread()));
340       if (oop_map() != nullptr) {
341         _oop_map->update_register_map(this, map);
342       }
343     } else {
344       assert(!_cb->caller_must_gc_arguments(map->thread()), "");
345       assert(!map->include_argument_oops(), "");
346       assert(oop_map() == nullptr || !oop_map()->has_any(OopMapValue::callee_saved_value), "callee-saved value in compiled frame");
347     }
348   }
349 
350   assert(sender_sp != sp(), "must have changed");
351 
352   if (Continuation::is_return_barrier_entry(sender_pc)) {
353     if (map->walk_cont()) { // about to walk into an h-stack
354       return Continuation::top_frame(*this, map);
355     } else {
356       return Continuation::continuation_bottom_sender(map->thread(), *this, sender_sp);
357     }

310   // Must be native-compiled frame, i.e. the marshaling code for native
311   // methods that exists in the core system.
312   return frame(sender_sp(), sender_pc(), kind::code_blob);
313 }
314 
315 inline frame frame::sender(RegisterMap* map) const {
316   frame result = sender_raw(map);
317 
318   if (map->process_frames() && !map->in_cont()) {
319     StackWatermarkSet::on_iteration(map->thread(), result);
320   }
321 
322   // Calling frame::id() is currently not supported for heap frames.
323   assert(result._on_heap || this->_on_heap || result.is_older(this->id()), "Must be");
324 
325   return result;
326 }
327 
328 inline frame frame::sender_for_compiled_frame(RegisterMap *map) const {
329   assert(map != nullptr, "map must be set");
330   assert(!_cb->is_nmethod() || !_cb->as_nmethod()->needs_stack_repair(), "unsupported");
331 
332   intptr_t* sender_sp = this->sender_sp();
333   address   sender_pc = this->sender_pc();
334 
335   if (map->update_map()) {
336     // Tell GC to use argument oopmaps for some runtime stubs that need it.
337     // For C1, the runtime stub might not have oop maps, so set this flag
338     // outside of update_register_map.
339 #ifdef COMPILER1
340     DEBUG_ONLY(nmethod* nm = _cb->as_nmethod_or_null());
341     assert(nm == nullptr || !nm->is_compiled_by_c1() || !nm->method()->has_scalarized_args() ||
342            pc() >= nm->verified_inline_entry_point(), "unsupported");
343 #endif
344     if (!_cb->is_nmethod()) { // compiled frames do not use callee-saved registers
345       map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread()));
346       if (oop_map() != nullptr) {
347         _oop_map->update_register_map(this, map);
348       }
349     } else {
350       assert(!_cb->caller_must_gc_arguments(map->thread()), "");
351       assert(!map->include_argument_oops(), "");
352       assert(oop_map() == nullptr || !oop_map()->has_any(OopMapValue::callee_saved_value), "callee-saved value in compiled frame");
353     }
354   }
355 
356   assert(sender_sp != sp(), "must have changed");
357 
358   if (Continuation::is_return_barrier_entry(sender_pc)) {
359     if (map->walk_cont()) { // about to walk into an h-stack
360       return Continuation::top_frame(*this, map);
361     } else {
362       return Continuation::continuation_bottom_sender(map->thread(), *this, sender_sp);
363     }
< prev index next >