40 // but to only one environment
41 jvmtiCapabilities JvmtiManageCapabilities::always_solo_capabilities;
42
43 // capabilities which are potentially available during OnLoad
44 // but to only one environment
45 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_capabilities;
46
47 // remaining capabilities which are always potentially available
48 // but to only one environment
49 jvmtiCapabilities JvmtiManageCapabilities::always_solo_remaining_capabilities;
50
51 // remaining capabilities which are potentially available during OnLoad
52 // but to only one environment
53 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_remaining_capabilities;
54
55 // all capabilities ever acquired
56 jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
57
58 void JvmtiManageCapabilities::initialize() {
59 always_capabilities = init_always_capabilities();
60 if (JvmtiEnv::get_phase() != JVMTI_PHASE_ONLOAD) {
61 recompute_always_capabilities();
62 }
63 onload_capabilities = init_onload_capabilities();
64 always_solo_capabilities = init_always_solo_capabilities();
65 onload_solo_capabilities = init_onload_solo_capabilities();
66 always_solo_remaining_capabilities = init_always_solo_capabilities();
67 onload_solo_remaining_capabilities = init_onload_solo_capabilities();
68 memset(&acquired_capabilities, 0, sizeof(acquired_capabilities));
69 }
70
71 // if the capability sets are initialized in the onload phase then
72 // it happens before class data sharing (CDS) is initialized. If it
73 // turns out that CDS gets disabled then we must adjust the always
74 // capabilities. To ensure a consistent view of the capabililties
75 // anything we add here should already be in the onload set.
76 void JvmtiManageCapabilities::recompute_always_capabilities() {
77 if (!UseSharedSpaces) {
78 jvmtiCapabilities jc = always_capabilities;
79 jc.can_generate_all_class_hook_events = 1;
80 always_capabilities = jc;
81 }
82 }
83
84
85 // corresponding init functions
86 jvmtiCapabilities JvmtiManageCapabilities::init_always_capabilities() {
87 jvmtiCapabilities jc;
88
89 memset(&jc, 0, sizeof(jc));
90 jc.can_get_bytecodes = 1;
91 jc.can_signal_thread = 1;
92 jc.can_get_source_file_name = 1;
93 jc.can_get_line_numbers = 1;
94 jc.can_get_synthetic_attribute = 1;
95 jc.can_get_monitor_info = 1;
96 jc.can_get_constant_pool = 1;
97 jc.can_generate_monitor_events = 1;
98 jc.can_generate_garbage_collection_events = 1;
99 jc.can_generate_compiled_method_load_events = 1;
100 jc.can_generate_native_method_bind_events = 1;
101 jc.can_generate_vm_object_alloc_events = 1;
102 if (os::is_thread_cpu_time_supported()) {
103 jc.can_get_current_thread_cpu_time = 1;
104 jc.can_get_thread_cpu_time = 1;
105 }
106 jc.can_redefine_classes = 1;
107 jc.can_redefine_any_class = 1;
108 jc.can_retransform_classes = 1;
109 jc.can_retransform_any_class = 1;
110 jc.can_set_native_method_prefix = 1;
111 jc.can_tag_objects = 1;
112 jc.can_generate_object_free_events = 1;
113 jc.can_generate_resource_exhaustion_heap_events = 1;
114 jc.can_generate_resource_exhaustion_threads_events = 1;
115 return jc;
116 }
117
118 jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
119 jvmtiCapabilities jc;
120
121 memset(&jc, 0, sizeof(jc));
122 #ifndef ZERO
123 jc.can_pop_frame = 1;
124 jc.can_force_early_return = 1;
125 #endif // !ZERO
126 jc.can_get_source_debug_extension = 1;
127 jc.can_access_local_variables = 1;
128 jc.can_maintain_original_method_order = 1;
129 jc.can_generate_all_class_hook_events = 1;
130 jc.can_generate_single_step_events = 1;
131 jc.can_generate_exception_events = 1;
132 jc.can_generate_frame_pop_events = 1;
133 jc.can_generate_method_entry_events = 1;
134 jc.can_generate_method_exit_events = 1;
135 jc.can_get_owned_monitor_info = 1;
136 jc.can_get_owned_monitor_stack_depth_info = 1;
137 jc.can_get_current_contended_monitor = 1;
138 jc.can_generate_early_vmstart = 1;
139 jc.can_generate_early_class_hook_events = 1;
140 return jc;
141 }
142
143
144 jvmtiCapabilities JvmtiManageCapabilities::init_always_solo_capabilities() {
145 jvmtiCapabilities jc;
146
147 memset(&jc, 0, sizeof(jc));
148 jc.can_suspend = 1;
149 return jc;
|
40 // but to only one environment
41 jvmtiCapabilities JvmtiManageCapabilities::always_solo_capabilities;
42
43 // capabilities which are potentially available during OnLoad
44 // but to only one environment
45 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_capabilities;
46
47 // remaining capabilities which are always potentially available
48 // but to only one environment
49 jvmtiCapabilities JvmtiManageCapabilities::always_solo_remaining_capabilities;
50
51 // remaining capabilities which are potentially available during OnLoad
52 // but to only one environment
53 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_remaining_capabilities;
54
55 // all capabilities ever acquired
56 jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
57
58 void JvmtiManageCapabilities::initialize() {
59 always_capabilities = init_always_capabilities();
60 onload_capabilities = init_onload_capabilities();
61 always_solo_capabilities = init_always_solo_capabilities();
62 onload_solo_capabilities = init_onload_solo_capabilities();
63 always_solo_remaining_capabilities = init_always_solo_capabilities();
64 onload_solo_remaining_capabilities = init_onload_solo_capabilities();
65 memset(&acquired_capabilities, 0, sizeof(acquired_capabilities));
66 }
67
68
69 // corresponding init functions
70 jvmtiCapabilities JvmtiManageCapabilities::init_always_capabilities() {
71 jvmtiCapabilities jc;
72
73 memset(&jc, 0, sizeof(jc));
74 jc.can_get_bytecodes = 1;
75 jc.can_signal_thread = 1;
76 jc.can_get_source_file_name = 1;
77 jc.can_get_line_numbers = 1;
78 jc.can_get_synthetic_attribute = 1;
79 jc.can_get_monitor_info = 1;
80 jc.can_get_constant_pool = 1;
81 jc.can_generate_all_class_hook_events = 1;
82 jc.can_generate_monitor_events = 1;
83 jc.can_generate_garbage_collection_events = 1;
84 jc.can_generate_compiled_method_load_events = 1;
85 jc.can_generate_native_method_bind_events = 1;
86 jc.can_generate_vm_object_alloc_events = 1;
87 if (os::is_thread_cpu_time_supported()) {
88 jc.can_get_current_thread_cpu_time = 1;
89 jc.can_get_thread_cpu_time = 1;
90 }
91 jc.can_redefine_classes = 1;
92 jc.can_redefine_any_class = 1;
93 jc.can_retransform_classes = 1;
94 jc.can_retransform_any_class = 1;
95 jc.can_set_native_method_prefix = 1;
96 jc.can_tag_objects = 1;
97 jc.can_generate_object_free_events = 1;
98 jc.can_generate_resource_exhaustion_heap_events = 1;
99 jc.can_generate_resource_exhaustion_threads_events = 1;
100 return jc;
101 }
102
103 jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
104 jvmtiCapabilities jc;
105
106 memset(&jc, 0, sizeof(jc));
107 #ifndef ZERO
108 jc.can_pop_frame = 1;
109 jc.can_force_early_return = 1;
110 #endif // !ZERO
111 jc.can_get_source_debug_extension = 1;
112 jc.can_access_local_variables = 1;
113 jc.can_maintain_original_method_order = 1;
114 jc.can_generate_single_step_events = 1;
115 jc.can_generate_exception_events = 1;
116 jc.can_generate_frame_pop_events = 1;
117 jc.can_generate_method_entry_events = 1;
118 jc.can_generate_method_exit_events = 1;
119 jc.can_get_owned_monitor_info = 1;
120 jc.can_get_owned_monitor_stack_depth_info = 1;
121 jc.can_get_current_contended_monitor = 1;
122 jc.can_generate_early_vmstart = 1;
123 jc.can_generate_early_class_hook_events = 1;
124 return jc;
125 }
126
127
128 jvmtiCapabilities JvmtiManageCapabilities::init_always_solo_capabilities() {
129 jvmtiCapabilities jc;
130
131 memset(&jc, 0, sizeof(jc));
132 jc.can_suspend = 1;
133 return jc;
|