< prev index next >

src/hotspot/share/prims/jvmtiManageCapabilities.cpp

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.
--- 1,7 ---
  /*
!  * Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

*** 54,10 ***
--- 54,11 ---
  
    // all capabilities ever acquired
  jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
  
  int JvmtiManageCapabilities::_can_support_virtual_threads_count = 0;
+ int JvmtiManageCapabilities::_can_support_value_objects_count = 0;
  
  Mutex* JvmtiManageCapabilities::_capabilities_lock = nullptr;
  
  void JvmtiManageCapabilities::initialize() {
    _capabilities_lock = new Mutex(Mutex::nosafepoint, "Capabilities_lock");

*** 101,10 ***
--- 102,11 ---
    jc.can_tag_objects = 1;
    jc.can_generate_object_free_events = 1;
    jc.can_generate_resource_exhaustion_heap_events = 1;
    jc.can_generate_resource_exhaustion_threads_events = 1;
    jc.can_support_virtual_threads = 1;
+   jc.can_support_value_objects = 1;
    return jc;
  }
  
  jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
    jvmtiCapabilities jc;

*** 275,10 ***
--- 277,13 ---
    exclude(&onload_solo_remaining_capabilities, desired, &onload_solo_remaining_capabilities);
  
    if (desired->can_support_virtual_threads != 0 && current->can_support_virtual_threads == 0) {
      _can_support_virtual_threads_count++;
    }
+   if (desired->can_support_value_objects != 0 && current->can_support_value_objects == 0) {
+     _can_support_value_objects_count++;
+   }
  
    // return the result
    either(current, desired, result);
  
    update();

*** 307,10 ***
--- 312,15 ---
    if (to_trash.can_support_virtual_threads != 0) {
      assert(current->can_support_virtual_threads != 0, "sanity check");
      assert(_can_support_virtual_threads_count > 0, "sanity check");
      _can_support_virtual_threads_count--;
    }
+   if (to_trash.can_support_value_objects != 0) {
+     assert(current->can_support_value_objects != 0, "sanity check");
+     assert(_can_support_value_objects_count > 0, "sanity check");
+     _can_support_value_objects_count--;
+   }
  
    update();
  
    // return the result
    exclude(current, unwanted, result);

*** 391,10 ***
--- 401,11 ---
                                          avail.can_generate_frame_pop_events);
    JvmtiExport::set_can_post_frame_pop(avail.can_generate_frame_pop_events);
    JvmtiExport::set_can_pop_frame(avail.can_pop_frame);
    JvmtiExport::set_can_force_early_return(avail.can_force_early_return);
    JvmtiExport::set_can_support_virtual_threads(_can_support_virtual_threads_count != 0);
+   JvmtiExport::set_can_support_value_objects(_can_support_value_objects_count != 0);
    JvmtiExport::set_should_clean_up_heap_objects(avail.can_generate_breakpoint_events);
    JvmtiExport::set_can_get_owned_monitor_info(avail.can_get_owned_monitor_info ||
                                                avail.can_get_owned_monitor_stack_depth_info);
  }
  

*** 486,8 ***
--- 497,10 ---
      log_trace(jvmti)("can_generate_early_vmstart");
    if (cap->can_generate_early_class_hook_events)
      log_trace(jvmti)("can_generate_early_class_hook_events");
    if (cap->can_support_virtual_threads)
      log_trace(jvmti)("can_support_virtual_threads");
+   if (cap->can_support_value_objects)
+     log_trace(jvmti)("can_support_value_objects");
  }
  
  #endif
< prev index next >