< prev index next >

src/hotspot/share/runtime/vframe.inline.hpp

Print this page

105     if (is_enterSpecial_frame) {
106       _cont_entry = _cont_entry->parent();
107     }
108   } while (!fill_from_frame());
109 }
110 
111 inline vframeStream::vframeStream(JavaThread* thread, bool stop_at_java_call_stub, bool process_frame, bool vthread_carrier)
112   : vframeStreamCommon(RegisterMap(thread,
113                                    RegisterMap::UpdateMap::include,
114                                    process_frame ? RegisterMap::ProcessFrames::include : RegisterMap::ProcessFrames::skip ,
115                                    RegisterMap::WalkContinuation::include)) {
116   _stop_at_java_call_stub = stop_at_java_call_stub;
117 
118   if (!thread->has_last_Java_frame()) {
119     _mode = at_end_mode;
120     return;
121   }
122 
123   if (thread->is_vthread_mounted()) {
124     _frame = vthread_carrier ? _thread->carrier_last_frame(&_reg_map) : _thread->vthread_last_frame();







125   } else {
126     _frame = _thread->last_frame();
127   }
128 
129   _cont_entry = _thread->last_continuation();
130   while (!fill_from_frame()) {
131     _frame = _frame.sender(&_reg_map);
132   }
133 }
134 
135 inline bool vframeStreamCommon::fill_in_compiled_inlined_sender() {
136   if (_sender_decode_offset == DebugInformationRecorder::serialized_null) {
137     return false;
138   }
139   fill_from_compiled_frame(_sender_decode_offset);
140   ++_vframe_id;
141   return true;
142 }
143 
144 

105     if (is_enterSpecial_frame) {
106       _cont_entry = _cont_entry->parent();
107     }
108   } while (!fill_from_frame());
109 }
110 
111 inline vframeStream::vframeStream(JavaThread* thread, bool stop_at_java_call_stub, bool process_frame, bool vthread_carrier)
112   : vframeStreamCommon(RegisterMap(thread,
113                                    RegisterMap::UpdateMap::include,
114                                    process_frame ? RegisterMap::ProcessFrames::include : RegisterMap::ProcessFrames::skip ,
115                                    RegisterMap::WalkContinuation::include)) {
116   _stop_at_java_call_stub = stop_at_java_call_stub;
117 
118   if (!thread->has_last_Java_frame()) {
119     _mode = at_end_mode;
120     return;
121   }
122 
123   if (thread->is_vthread_mounted()) {
124     _frame = vthread_carrier ? _thread->carrier_last_frame(&_reg_map) : _thread->vthread_last_frame();
125     if (Continuation::is_continuation_enterSpecial(_frame)) {
126       // This can happen when calling async_get_stack_trace() and catching the target
127       // vthread at the JRT_BLOCK_END in freeze_internal() or when posting the Monitor
128       // Waited event after target vthread was preempted. Since all continuation frames
129       // are freezed we get the top frame from the stackChunk instead.
130       _frame = Continuation::last_frame(java_lang_VirtualThread::continuation(_thread->vthread()), &_reg_map);
131     }
132   } else {
133     _frame = _thread->last_frame();
134   }
135 
136   _cont_entry = _thread->last_continuation();
137   while (!fill_from_frame()) {
138     _frame = _frame.sender(&_reg_map);
139   }
140 }
141 
142 inline bool vframeStreamCommon::fill_in_compiled_inlined_sender() {
143   if (_sender_decode_offset == DebugInformationRecorder::serialized_null) {
144     return false;
145   }
146   fill_from_compiled_frame(_sender_decode_offset);
147   ++_vframe_id;
148   return true;
149 }
150 
151 
< prev index next >