hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp
author ysr
Thu, 03 Dec 2009 15:01:57 -0800
changeset 4461 c17c526d36ef
parent 1 489c9b5090e2
child 4448 d6ec2737186c
permissions -rw-r--r--
6906727: UseCompressedOops: some card-marking fixes related to object arrays Summary: Introduced a new write_ref_array(HeapWords* start, size_t count) method that does the requisite MemRegion range calculation so (some of the) clients of the erstwhile write_ref_array(MemRegion mr) do not need to worry. This removed all external uses of array_size(), which was also simplified and made private. Asserts were added to catch other possible issues. Further, less essential, fixes stemming from this investigation are deferred to CR 6904516 (to follow shortly in hs17). Reviewed-by: kvn, coleenp, jmasa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
489c9b5090e2 Initial load
duke
parents:
diff changeset
     2
 * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
 * have any questions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
# include "incls/_precompiled.incl"
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
# include "incls/_jvmtiManageCapabilities.cpp.incl"
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
static const jint CAPA_SIZE = (JVMTI_INTERNAL_CAPABILITY_COUNT + 7) / 8;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
  // capabilities which are always potentially available
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
jvmtiCapabilities JvmtiManageCapabilities::always_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
  // capabilities which are potentially available during OnLoad
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
jvmtiCapabilities JvmtiManageCapabilities::onload_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
  // capabilities which are always potentially available
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  // but to only one environment
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
jvmtiCapabilities JvmtiManageCapabilities::always_solo_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  // capabilities which are potentially available during OnLoad
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  // but to only one environment
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
jvmtiCapabilities JvmtiManageCapabilities::onload_solo_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
  // remaining capabilities which are always potentially available
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  // but to only one environment
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
jvmtiCapabilities JvmtiManageCapabilities::always_solo_remaining_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  // remaining capabilities which are potentially available during OnLoad
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  // but to only one environment
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
jvmtiCapabilities JvmtiManageCapabilities::onload_solo_remaining_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  // all capabilities ever acquired
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
void JvmtiManageCapabilities::initialize() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  always_capabilities = init_always_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  if (JvmtiEnv::get_phase() != JVMTI_PHASE_ONLOAD) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
    recompute_always_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  onload_capabilities = init_onload_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  always_solo_capabilities = init_always_solo_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  onload_solo_capabilities = init_onload_solo_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  always_solo_remaining_capabilities = init_always_solo_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  onload_solo_remaining_capabilities = init_onload_solo_capabilities();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  memset(&acquired_capabilities, 0, sizeof(acquired_capabilities));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
// if the capability sets are initialized in the onload phase then
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
// it happens before class data sharing (CDS) is initialized. If it
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
// turns out that CDS gets disabled then we must adjust the always
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
// capabilities. To ensure a consistent view of the capabililties
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
// anything we add here should already be in the onload set.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
void JvmtiManageCapabilities::recompute_always_capabilities() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  if (!UseSharedSpaces) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
    jvmtiCapabilities jc = always_capabilities;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
    jc.can_generate_all_class_hook_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
    always_capabilities = jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
// corresponding init functions
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
jvmtiCapabilities JvmtiManageCapabilities::init_always_capabilities() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  jvmtiCapabilities jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  memset(&jc, 0, sizeof(jc));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  jc.can_get_bytecodes = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  jc.can_signal_thread = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  jc.can_get_source_file_name = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  jc.can_get_line_numbers = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
  jc.can_get_synthetic_attribute = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  jc.can_get_monitor_info = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
  jc.can_get_constant_pool = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  jc.can_generate_monitor_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  jc.can_generate_garbage_collection_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  jc.can_generate_compiled_method_load_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  jc.can_generate_native_method_bind_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  jc.can_generate_vm_object_alloc_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  if (os::is_thread_cpu_time_supported()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
    jc.can_get_current_thread_cpu_time = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
    jc.can_get_thread_cpu_time = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  jc.can_redefine_classes = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  jc.can_redefine_any_class = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  jc.can_retransform_classes = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  jc.can_retransform_any_class = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
  jc.can_set_native_method_prefix = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  jc.can_tag_objects = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  jc.can_generate_object_free_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
  jc.can_generate_resource_exhaustion_heap_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
  jc.can_generate_resource_exhaustion_threads_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
  return jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
  jvmtiCapabilities jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
  memset(&jc, 0, sizeof(jc));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
  jc.can_pop_frame = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
  jc.can_force_early_return = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  jc.can_get_source_debug_extension = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
  jc.can_access_local_variables = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  jc.can_maintain_original_method_order = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  jc.can_generate_all_class_hook_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  jc.can_generate_single_step_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  jc.can_generate_exception_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  jc.can_generate_frame_pop_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
  jc.can_generate_method_entry_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  jc.can_generate_method_exit_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  jc.can_get_owned_monitor_info = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  jc.can_get_owned_monitor_stack_depth_info = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
  jc.can_get_current_contended_monitor = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  // jc.can_get_monitor_info = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  jc.can_tag_objects = 1;                 // TODO: this should have been removed
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  jc.can_generate_object_free_events = 1; // TODO: this should have been removed
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
  return jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
jvmtiCapabilities JvmtiManageCapabilities::init_always_solo_capabilities() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  jvmtiCapabilities jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  memset(&jc, 0, sizeof(jc));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  jc.can_suspend = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  return jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
jvmtiCapabilities JvmtiManageCapabilities::init_onload_solo_capabilities() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  jvmtiCapabilities jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  memset(&jc, 0, sizeof(jc));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  jc.can_generate_field_modification_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  jc.can_generate_field_access_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  jc.can_generate_breakpoint_events = 1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  return jc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
jvmtiCapabilities *JvmtiManageCapabilities::either(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
                                                   jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  char *ap = (char *)a;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
  char *bp = (char *)b;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  char *resultp = (char *)result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  for (int i = 0; i < CAPA_SIZE; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
    *resultp++ = *ap++ | *bp++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
jvmtiCapabilities *JvmtiManageCapabilities::both(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
                                                    jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  char *ap = (char *)a;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  char *bp = (char *)b;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  char *resultp = (char *)result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  for (int i = 0; i < CAPA_SIZE; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
    *resultp++ = *ap++ & *bp++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
jvmtiCapabilities *JvmtiManageCapabilities::exclude(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
                                                    jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  char *ap = (char *)a;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  char *bp = (char *)b;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  char *resultp = (char *)result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  for (int i = 0; i < CAPA_SIZE; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
    *resultp++ = *ap++ & ~*bp++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
  return result;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
bool JvmtiManageCapabilities::has_some(const jvmtiCapabilities *a) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  char *ap = (char *)a;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
  for (int i = 0; i < CAPA_SIZE; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
    if (*ap++ != 0) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
      return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
void JvmtiManageCapabilities::copy_capabilities(const jvmtiCapabilities *from, jvmtiCapabilities *to) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  char *ap = (char *)from;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  char *resultp = (char *)to;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
  for (int i = 0; i < CAPA_SIZE; ++i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
    *resultp++ = *ap++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
void JvmtiManageCapabilities::get_potential_capabilities(const jvmtiCapabilities *current,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
                                                         const jvmtiCapabilities *prohibited,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
                                                         jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  // exclude prohibited capabilities, must be before adding current
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
  exclude(&always_capabilities, prohibited, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  // must include current since it may possess solo capabilities and now prohibited
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
  either(result, current, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
  // add other remaining
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
  either(result, &always_solo_remaining_capabilities, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
  // if this is during OnLoad more capabilities are available
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  if (JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
    either(result, &onload_capabilities, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
    either(result, &onload_solo_remaining_capabilities, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
jvmtiError JvmtiManageCapabilities::add_capabilities(const jvmtiCapabilities *current,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
                                                     const jvmtiCapabilities *prohibited,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
                                                     const jvmtiCapabilities *desired,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
                                                     jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  // check that the capabilities being added are potential capabilities
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
  jvmtiCapabilities temp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
  get_potential_capabilities(current, prohibited, &temp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
  if (has_some(exclude(desired, &temp, &temp))) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
    return JVMTI_ERROR_NOT_AVAILABLE;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
  // add to the set of ever acquired capabilities
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
  either(&acquired_capabilities, desired, &acquired_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
  // onload capabilities that got added are now permanent - so, also remove from onload
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
  both(&onload_capabilities, desired, &temp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
  either(&always_capabilities, &temp, &always_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
  exclude(&onload_capabilities, &temp, &onload_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
  // same for solo capabilities (transferred capabilities in the remaining sets handled as part of standard grab - below)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   263
  both(&onload_solo_capabilities, desired, &temp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   264
  either(&always_solo_capabilities, &temp, &always_solo_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   265
  exclude(&onload_solo_capabilities, &temp, &onload_solo_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   266
489c9b5090e2 Initial load
duke
parents:
diff changeset
   267
  // remove solo capabilities that are now taken
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
  exclude(&always_solo_remaining_capabilities, desired, &always_solo_remaining_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
  exclude(&onload_solo_remaining_capabilities, desired, &onload_solo_remaining_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  // return the result
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
  either(current, desired, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
489c9b5090e2 Initial load
duke
parents:
diff changeset
   274
  update();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   275
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
  return JVMTI_ERROR_NONE;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   277
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   278
489c9b5090e2 Initial load
duke
parents:
diff changeset
   279
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
void JvmtiManageCapabilities::relinquish_capabilities(const jvmtiCapabilities *current,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
                                                      const jvmtiCapabilities *unwanted,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
                                                      jvmtiCapabilities *result) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
  jvmtiCapabilities to_trash;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
  jvmtiCapabilities temp;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
  // can't give up what you don't have
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
  both(current, unwanted, &to_trash);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
  // restore solo capabilities but only those that belong
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  either(&always_solo_remaining_capabilities, both(&always_solo_capabilities, &to_trash, &temp),
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
         &always_solo_remaining_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
  either(&onload_solo_remaining_capabilities, both(&onload_solo_capabilities, &to_trash, &temp),
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
         &onload_solo_remaining_capabilities);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   294
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
  update();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
  // return the result
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
  exclude(current, unwanted, result);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
void JvmtiManageCapabilities::update() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
  jvmtiCapabilities avail;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  // all capabilities
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  either(&always_capabilities, &always_solo_capabilities, &avail);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
  bool interp_events =
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
    avail.can_generate_field_access_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
    avail.can_generate_field_modification_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
    avail.can_generate_single_step_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   312
    avail.can_generate_frame_pop_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
    avail.can_generate_method_entry_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   314
    avail.can_generate_method_exit_events;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   315
  bool enter_all_methods =
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
    interp_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
    avail.can_generate_breakpoint_events;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  UseFastEmptyMethods = !enter_all_methods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
  UseFastAccessorMethods = !enter_all_methods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  if (avail.can_generate_breakpoint_events) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
    RewriteFrequentPairs = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   323
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   324
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
  // If can_redefine_classes is enabled in the onload phase then we know that the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
  // dependency information recorded by the compiler is complete.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
  if ((avail.can_redefine_classes || avail.can_retransform_classes) &&
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
      JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
    JvmtiExport::set_all_dependencies_are_recorded(true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
  JvmtiExport::set_can_get_source_debug_extension(avail.can_get_source_debug_extension);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
  JvmtiExport::set_can_examine_or_deopt_anywhere(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   334
    avail.can_generate_breakpoint_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
    interp_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
    avail.can_redefine_classes ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
    avail.can_retransform_classes ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   338
    avail.can_access_local_variables ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
    avail.can_get_owned_monitor_info ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
    avail.can_get_current_contended_monitor ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   341
    avail.can_get_monitor_info ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   342
    avail.can_get_owned_monitor_stack_depth_info);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  JvmtiExport::set_can_maintain_original_method_order(avail.can_maintain_original_method_order);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   344
  JvmtiExport::set_can_post_interpreter_events(interp_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  JvmtiExport::set_can_hotswap_or_post_breakpoint(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
    avail.can_generate_breakpoint_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
    avail.can_redefine_classes ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
    avail.can_retransform_classes);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   349
  JvmtiExport::set_can_modify_any_class(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
    avail.can_generate_breakpoint_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   351
    avail.can_generate_all_class_hook_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
  JvmtiExport::set_can_walk_any_space(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
    avail.can_tag_objects);   // disable sharing in onload phase
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
  JvmtiExport::set_can_access_local_variables(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   355
    avail.can_access_local_variables  ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   356
    avail.can_redefine_classes ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   357
    avail.can_retransform_classes);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
  JvmtiExport::set_can_post_exceptions(
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
    avail.can_generate_exception_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   360
    avail.can_generate_frame_pop_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   361
    avail.can_generate_method_exit_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   362
  JvmtiExport::set_can_post_breakpoint(avail.can_generate_breakpoint_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   363
  JvmtiExport::set_can_post_field_access(avail.can_generate_field_access_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   364
  JvmtiExport::set_can_post_field_modification(avail.can_generate_field_modification_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   365
  JvmtiExport::set_can_post_method_entry(avail.can_generate_method_entry_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   366
  JvmtiExport::set_can_post_method_exit(avail.can_generate_method_exit_events ||
489c9b5090e2 Initial load
duke
parents:
diff changeset
   367
                                        avail.can_generate_frame_pop_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   368
  JvmtiExport::set_can_pop_frame(avail.can_pop_frame);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   369
  JvmtiExport::set_can_force_early_return(avail.can_force_early_return);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   370
  JvmtiExport::set_should_clean_up_heap_objects(avail.can_generate_breakpoint_events);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   371
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   372
489c9b5090e2 Initial load
duke
parents:
diff changeset
   373
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
489c9b5090e2 Initial load
duke
parents:
diff changeset
   375
void JvmtiManageCapabilities:: print(const jvmtiCapabilities* cap) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   376
  tty->print_cr("----- capabilities -----");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
  if (cap->can_tag_objects)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
    tty->print_cr("can_tag_objects");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
  if (cap->can_generate_field_modification_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   380
    tty->print_cr("can_generate_field_modification_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
  if (cap->can_generate_field_access_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
    tty->print_cr("can_generate_field_access_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
  if (cap->can_get_bytecodes)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
    tty->print_cr("can_get_bytecodes");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
  if (cap->can_get_synthetic_attribute)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
    tty->print_cr("can_get_synthetic_attribute");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
  if (cap->can_get_owned_monitor_info)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   388
    tty->print_cr("can_get_owned_monitor_info");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   389
  if (cap->can_get_current_contended_monitor)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   390
    tty->print_cr("can_get_current_contended_monitor");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   391
  if (cap->can_get_monitor_info)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   392
    tty->print_cr("can_get_monitor_info");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
  if (cap->can_get_constant_pool)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
    tty->print_cr("can_get_constant_pool");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
  if (cap->can_pop_frame)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
    tty->print_cr("can_pop_frame");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
  if (cap->can_force_early_return)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
    tty->print_cr("can_force_early_return");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  if (cap->can_redefine_classes)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
    tty->print_cr("can_redefine_classes");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
  if (cap->can_retransform_classes)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
    tty->print_cr("can_retransform_classes");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
  if (cap->can_signal_thread)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
    tty->print_cr("can_signal_thread");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
  if (cap->can_get_source_file_name)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   406
    tty->print_cr("can_get_source_file_name");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   407
  if (cap->can_get_line_numbers)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
    tty->print_cr("can_get_line_numbers");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   409
  if (cap->can_get_source_debug_extension)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
    tty->print_cr("can_get_source_debug_extension");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   411
  if (cap->can_access_local_variables)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   412
    tty->print_cr("can_access_local_variables");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   413
  if (cap->can_maintain_original_method_order)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   414
    tty->print_cr("can_maintain_original_method_order");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   415
  if (cap->can_generate_single_step_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   416
    tty->print_cr("can_generate_single_step_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   417
  if (cap->can_generate_exception_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   418
    tty->print_cr("can_generate_exception_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   419
  if (cap->can_generate_frame_pop_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   420
    tty->print_cr("can_generate_frame_pop_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   421
  if (cap->can_generate_breakpoint_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
    tty->print_cr("can_generate_breakpoint_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
  if (cap->can_suspend)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   424
    tty->print_cr("can_suspend");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   425
  if (cap->can_redefine_any_class )
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
    tty->print_cr("can_redefine_any_class");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
  if (cap->can_retransform_any_class )
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
    tty->print_cr("can_retransform_any_class");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
  if (cap->can_get_current_thread_cpu_time)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
    tty->print_cr("can_get_current_thread_cpu_time");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
  if (cap->can_get_thread_cpu_time)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
    tty->print_cr("can_get_thread_cpu_time");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
  if (cap->can_generate_method_entry_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
    tty->print_cr("can_generate_method_entry_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
  if (cap->can_generate_method_exit_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
    tty->print_cr("can_generate_method_exit_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   437
  if (cap->can_generate_all_class_hook_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
    tty->print_cr("can_generate_all_class_hook_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   439
  if (cap->can_generate_compiled_method_load_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   440
    tty->print_cr("can_generate_compiled_method_load_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   441
  if (cap->can_generate_monitor_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   442
    tty->print_cr("can_generate_monitor_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   443
  if (cap->can_generate_vm_object_alloc_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   444
    tty->print_cr("can_generate_vm_object_alloc_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   445
  if (cap->can_generate_native_method_bind_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   446
    tty->print_cr("can_generate_native_method_bind_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
  if (cap->can_generate_garbage_collection_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
    tty->print_cr("can_generate_garbage_collection_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   449
  if (cap->can_generate_object_free_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   450
    tty->print_cr("can_generate_object_free_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
  if (cap->can_generate_resource_exhaustion_heap_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
    tty->print_cr("can_generate_resource_exhaustion_heap_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   453
  if (cap->can_generate_resource_exhaustion_threads_events)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   454
    tty->print_cr("can_generate_resource_exhaustion_threads_events");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
489c9b5090e2 Initial load
duke
parents:
diff changeset
   457
#endif