330 JvmtiTagMap* tag_map_acquire() {
331 return AtomicAccess::load_acquire(&_tag_map);
332 }
333
334 void release_set_tag_map(JvmtiTagMap* tag_map) {
335 AtomicAccess::release_store(&_tag_map, tag_map);
336 }
337
338 // return true if event is enabled globally or for any thread
339 // True only if there is a callback for it.
340 bool is_enabled(jvmtiEvent event_type) {
341 return _env_event_enable.is_enabled(event_type);
342 }
343
344 // Random Utilities
345
346 protected:
347 // helper methods for creating arrays of global JNI Handles from local Handles
348 // allocated into environment specific storage
349 jthread * new_jthreadArray(int length, Handle *handles);
350 jthreadGroup * new_jthreadGroupArray(int length, objArrayHandle groups);
351
352 // convert to a jni jclass from a non-null Klass*
353 jclass get_jni_class_non_null(Klass* k);
354
355 jint count_locked_objects(JavaThread *java_thread, Handle hobj);
356 jvmtiError get_locked_objects_in_frame(JavaThread *calling_thread,
357 JavaThread* java_thread,
358 javaVFrame *jvf,
359 GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list,
360 jint depth, oop vthread = nullptr);
361 public:
362 static javaVFrame* jvf_for_thread_and_depth(JavaThread* java_thread, jint depth);
363
364 // get a field descriptor for the specified class and field
365 static bool get_field_descriptor(Klass* k, jfieldID field, fieldDescriptor* fd);
366
367 // check and skip frames hidden in mount/unmount transitions
368 static javaVFrame* skip_yield_frames_for_unmounted_vthread(oop vthread, javaVFrame* jvf);
369 static javaVFrame* check_and_skip_hidden_frames(bool is_in_VTMS_transition, javaVFrame* jvf);
370 static javaVFrame* check_and_skip_hidden_frames(JavaThread* jt, javaVFrame* jvf);
378 // get virtual thread last java vframe
379 static javaVFrame* get_vthread_jvf(oop vthread);
380
381 // get carrier thread last java vframe
382 static javaVFrame* get_cthread_last_java_vframe(JavaThread* jt, RegisterMap* reg_map);
383
384 // get platform thread state
385 static jint get_thread_state_base(oop thread_oop, JavaThread* jt);
386 static jint get_thread_state(oop thread_oop, JavaThread* jt);
387
388 // get virtual thread state
389 static jint get_vthread_state(oop thread_oop, JavaThread* jt);
390
391 // get platform or virtual thread state
392 static jint get_thread_or_vthread_state(oop thread_oop, JavaThread* jt);
393
394 // enumerates the live threads in the given thread group
395 static jvmtiError get_live_threads(JavaThread* current_thread, Handle group_hdl, jint *count_ptr, Handle **thread_objs_p);
396
397 // enumerates the subgroups in the given thread group
398 static jvmtiError get_subgroups(JavaThread* current_thread, Handle group_hdl, jint *count_ptr, objArrayHandle *group_objs_p);
399
400 // JVMTI API helper functions which are called when target thread is suspended
401 // or at safepoint / thread local handshake.
402 static jint get_frame_count(javaVFrame* jvf);
403 jvmtiError get_frame_count(JavaThread* java_thread, jint *count_ptr);
404 jvmtiError get_frame_count(oop frame_oop, jint *count_ptr);
405 jvmtiError get_frame_location(javaVFrame* jvf, jint depth,
406 jmethodID* method_ptr, jlocation* location_ptr);
407 jvmtiError get_frame_location(JavaThread* java_thread, jint depth,
408 jmethodID* method_ptr, jlocation* location_ptr);
409 jvmtiError get_frame_location(oop vthread_oop, jint depth,
410 jmethodID* method_ptr, jlocation* location_ptr);
411 jvmtiError set_frame_pop(JvmtiThreadState* state, javaVFrame* jvf, jint depth);
412 jvmtiError clear_all_frame_pops(JvmtiThreadState* state);
413 jvmtiError get_object_monitor_usage(JavaThread* calling_thread,
414 jobject object, jvmtiMonitorUsage* info_ptr);
415 jvmtiError get_stack_trace(javaVFrame* jvf,
416 jint stack_depth, jint max_count,
417 jvmtiFrameInfo* frame_buffer, jint* count_ptr);
418 jvmtiError get_stack_trace(JavaThread* java_thread,
|
330 JvmtiTagMap* tag_map_acquire() {
331 return AtomicAccess::load_acquire(&_tag_map);
332 }
333
334 void release_set_tag_map(JvmtiTagMap* tag_map) {
335 AtomicAccess::release_store(&_tag_map, tag_map);
336 }
337
338 // return true if event is enabled globally or for any thread
339 // True only if there is a callback for it.
340 bool is_enabled(jvmtiEvent event_type) {
341 return _env_event_enable.is_enabled(event_type);
342 }
343
344 // Random Utilities
345
346 protected:
347 // helper methods for creating arrays of global JNI Handles from local Handles
348 // allocated into environment specific storage
349 jthread * new_jthreadArray(int length, Handle *handles);
350 jthreadGroup * new_jthreadGroupArray(int length, refArrayHandle groups);
351
352 // convert to a jni jclass from a non-null Klass*
353 jclass get_jni_class_non_null(Klass* k);
354
355 jint count_locked_objects(JavaThread *java_thread, Handle hobj);
356 jvmtiError get_locked_objects_in_frame(JavaThread *calling_thread,
357 JavaThread* java_thread,
358 javaVFrame *jvf,
359 GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list,
360 jint depth, oop vthread = nullptr);
361 public:
362 static javaVFrame* jvf_for_thread_and_depth(JavaThread* java_thread, jint depth);
363
364 // get a field descriptor for the specified class and field
365 static bool get_field_descriptor(Klass* k, jfieldID field, fieldDescriptor* fd);
366
367 // check and skip frames hidden in mount/unmount transitions
368 static javaVFrame* skip_yield_frames_for_unmounted_vthread(oop vthread, javaVFrame* jvf);
369 static javaVFrame* check_and_skip_hidden_frames(bool is_in_VTMS_transition, javaVFrame* jvf);
370 static javaVFrame* check_and_skip_hidden_frames(JavaThread* jt, javaVFrame* jvf);
378 // get virtual thread last java vframe
379 static javaVFrame* get_vthread_jvf(oop vthread);
380
381 // get carrier thread last java vframe
382 static javaVFrame* get_cthread_last_java_vframe(JavaThread* jt, RegisterMap* reg_map);
383
384 // get platform thread state
385 static jint get_thread_state_base(oop thread_oop, JavaThread* jt);
386 static jint get_thread_state(oop thread_oop, JavaThread* jt);
387
388 // get virtual thread state
389 static jint get_vthread_state(oop thread_oop, JavaThread* jt);
390
391 // get platform or virtual thread state
392 static jint get_thread_or_vthread_state(oop thread_oop, JavaThread* jt);
393
394 // enumerates the live threads in the given thread group
395 static jvmtiError get_live_threads(JavaThread* current_thread, Handle group_hdl, jint *count_ptr, Handle **thread_objs_p);
396
397 // enumerates the subgroups in the given thread group
398 static jvmtiError get_subgroups(JavaThread* current_thread, Handle group_hdl, jint *count_ptr, refArrayHandle *group_objs_p);
399
400 // JVMTI API helper functions which are called when target thread is suspended
401 // or at safepoint / thread local handshake.
402 static jint get_frame_count(javaVFrame* jvf);
403 jvmtiError get_frame_count(JavaThread* java_thread, jint *count_ptr);
404 jvmtiError get_frame_count(oop frame_oop, jint *count_ptr);
405 jvmtiError get_frame_location(javaVFrame* jvf, jint depth,
406 jmethodID* method_ptr, jlocation* location_ptr);
407 jvmtiError get_frame_location(JavaThread* java_thread, jint depth,
408 jmethodID* method_ptr, jlocation* location_ptr);
409 jvmtiError get_frame_location(oop vthread_oop, jint depth,
410 jmethodID* method_ptr, jlocation* location_ptr);
411 jvmtiError set_frame_pop(JvmtiThreadState* state, javaVFrame* jvf, jint depth);
412 jvmtiError clear_all_frame_pops(JvmtiThreadState* state);
413 jvmtiError get_object_monitor_usage(JavaThread* calling_thread,
414 jobject object, jvmtiMonitorUsage* info_ptr);
415 jvmtiError get_stack_trace(javaVFrame* jvf,
416 jint stack_depth, jint max_count,
417 jvmtiFrameInfo* frame_buffer, jint* count_ptr);
418 jvmtiError get_stack_trace(JavaThread* java_thread,
|