1 /* 2 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 #include <stdio.h> 25 #include <string.h> 26 #include "JVMTITools.h" 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 const char* TranslateState(jint flags) { 33 static char str[15 * 20]; 34 35 if (flags == 0) 36 return "<none>"; 37 38 str[0] = '\0'; 39 40 if (flags & JVMTI_THREAD_STATE_ALIVE) { 41 strcat(str, " ALIVE"); 42 } 43 44 if (flags & JVMTI_THREAD_STATE_TERMINATED) { 45 strcat(str, " TERMINATED"); 46 } 47 48 if (flags & JVMTI_THREAD_STATE_RUNNABLE) { 49 strcat(str, " RUNNABLE"); 50 } 51 52 if (flags & JVMTI_THREAD_STATE_WAITING) { 53 strcat(str, " WAITING"); 54 } 55 56 if (flags & JVMTI_THREAD_STATE_WAITING_INDEFINITELY) { 57 strcat(str, " WAITING_INDEFINITELY"); 58 } 59 60 if (flags & JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT) { 61 strcat(str, " WAITING_WITH_TIMEOUT"); 62 } 63 64 if (flags & JVMTI_THREAD_STATE_SLEEPING) { 65 strcat(str, " SLEEPING"); 66 } 67 68 if (flags & JVMTI_THREAD_STATE_IN_OBJECT_WAIT) { 69 strcat(str, " IN_OBJECT_WAIT"); 70 } 71 72 if (flags & JVMTI_THREAD_STATE_PARKED) { 73 strcat(str, " PARKED"); 74 } 75 76 if (flags & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) { 77 strcat(str, " BLOCKED_ON_MONITOR_ENTER"); 78 } 79 80 if (flags & JVMTI_THREAD_STATE_SUSPENDED) { 81 strcat(str, " SUSPENDED"); 82 } 83 84 if (flags & JVMTI_THREAD_STATE_INTERRUPTED) { 85 strcat(str, " INTERRUPTED"); 86 } 87 88 if (flags & JVMTI_THREAD_STATE_IN_NATIVE) { 89 strcat(str, " IN_NATIVE"); 90 } 91 92 93 return str; 94 } 95 96 const char* TranslateEvent(jvmtiEvent event_type) { 97 switch (event_type) { 98 case JVMTI_EVENT_VM_INIT: 99 return ("JVMTI_EVENT_VM_INIT"); 100 case JVMTI_EVENT_VM_DEATH: 101 return ("JVMTI_EVENT_VM_DEATH"); 102 case JVMTI_EVENT_THREAD_START: 103 return ("JVMTI_EVENT_THREAD_START"); 104 case JVMTI_EVENT_THREAD_END: 105 return ("JVMTI_EVENT_THREAD_END"); 106 case JVMTI_EVENT_CLASS_FILE_LOAD_HOOK: 107 return ("JVMTI_EVENT_CLASS_FILE_LOAD_HOOK"); 108 case JVMTI_EVENT_CLASS_LOAD: 109 return ("JVMTI_EVENT_CLASS_LOAD"); 110 case JVMTI_EVENT_CLASS_PREPARE: 111 return ("JVMTI_EVENT_CLASS_PREPARE"); 112 case JVMTI_EVENT_VM_START: 113 return ("JVMTI_EVENT_VM_START"); 114 case JVMTI_EVENT_EXCEPTION: 115 return ("JVMTI_EVENT_EXCEPTION"); 116 case JVMTI_EVENT_EXCEPTION_CATCH: 117 return ("JVMTI_EVENT_EXCEPTION_CATCH"); 118 case JVMTI_EVENT_SINGLE_STEP: 119 return ("JVMTI_EVENT_SINGLE_STEP"); 120 case JVMTI_EVENT_FRAME_POP: 121 return ("JVMTI_EVENT_FRAME_POP"); 122 case JVMTI_EVENT_BREAKPOINT: 123 return ("JVMTI_EVENT_BREAKPOINT"); 124 case JVMTI_EVENT_FIELD_ACCESS: 125 return ("JVMTI_EVENT_FIELD_ACCESS"); 126 case JVMTI_EVENT_FIELD_MODIFICATION: 127 return ("JVMTI_EVENT_FIELD_MODIFICATION"); 128 case JVMTI_EVENT_METHOD_ENTRY: 129 return ("JVMTI_EVENT_METHOD_ENTRY"); 130 case JVMTI_EVENT_METHOD_EXIT: 131 return ("JVMTI_EVENT_METHOD_EXIT"); 132 case JVMTI_EVENT_NATIVE_METHOD_BIND: 133 return ("JVMTI_EVENT_NATIVE_METHOD_BIND"); 134 case JVMTI_EVENT_COMPILED_METHOD_LOAD: 135 return ("JVMTI_EVENT_COMPILED_METHOD_LOAD"); 136 case JVMTI_EVENT_COMPILED_METHOD_UNLOAD: 137 return ("JVMTI_EVENT_COMPILED_METHOD_UNLOAD"); 138 case JVMTI_EVENT_DYNAMIC_CODE_GENERATED: 139 return ("JVMTI_EVENT_DYNAMIC_CODE_GENERATED"); 140 case JVMTI_EVENT_DATA_DUMP_REQUEST: 141 return ("JVMTI_EVENT_DATA_DUMP_REQUEST"); 142 case JVMTI_EVENT_MONITOR_WAIT: 143 return ("JVMTI_EVENT_MONITOR_WAIT"); 144 case JVMTI_EVENT_MONITOR_WAITED: 145 return ("JVMTI_EVENT_MONITOR_WAITED"); 146 case JVMTI_EVENT_MONITOR_CONTENDED_ENTER: 147 return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTER"); 148 case JVMTI_EVENT_MONITOR_CONTENDED_ENTERED: 149 return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTERED"); 150 case JVMTI_EVENT_GARBAGE_COLLECTION_START: 151 return ("JVMTI_EVENT_GARBAGE_COLLECTION_START"); 152 case JVMTI_EVENT_GARBAGE_COLLECTION_FINISH: 153 return ("JVMTI_EVENT_GARBAGE_COLLECTION_FINISH"); 154 case JVMTI_EVENT_OBJECT_FREE: 155 return ("JVMTI_EVENT_OBJECT_FREE"); 156 case JVMTI_EVENT_VM_OBJECT_ALLOC: 157 return ("JVMTI_EVENT_VM_OBJECT_ALLOC"); 158 default: 159 return ("<unknown event>"); 160 } 161 } 162 163 const char* TranslateError(jvmtiError err) { 164 switch (err) { 165 case JVMTI_ERROR_NONE: 166 return ("JVMTI_ERROR_NONE"); 167 case JVMTI_ERROR_INVALID_THREAD: 168 return ("JVMTI_ERROR_INVALID_THREAD"); 169 case JVMTI_ERROR_INVALID_THREAD_GROUP: 170 return ("JVMTI_ERROR_INVALID_THREAD_GROUP"); 171 case JVMTI_ERROR_INVALID_PRIORITY: 172 return ("JVMTI_ERROR_INVALID_PRIORITY"); 173 case JVMTI_ERROR_THREAD_NOT_SUSPENDED: 174 return ("JVMTI_ERROR_THREAD_NOT_SUSPENDED"); 175 case JVMTI_ERROR_THREAD_SUSPENDED: 176 return ("JVMTI_ERROR_THREAD_SUSPENDED"); 177 case JVMTI_ERROR_THREAD_NOT_ALIVE: 178 return ("JVMTI_ERROR_THREAD_NOT_ALIVE"); 179 case JVMTI_ERROR_INVALID_OBJECT: 180 return ("JVMTI_ERROR_INVALID_OBJECT"); 181 case JVMTI_ERROR_INVALID_CLASS: 182 return ("JVMTI_ERROR_INVALID_CLASS"); 183 case JVMTI_ERROR_CLASS_NOT_PREPARED: 184 return ("JVMTI_ERROR_CLASS_NOT_PREPARED"); 185 case JVMTI_ERROR_INVALID_METHODID: 186 return ("JVMTI_ERROR_INVALID_METHODID"); 187 case JVMTI_ERROR_INVALID_LOCATION: 188 return ("JVMTI_ERROR_INVALID_LOCATION"); 189 case JVMTI_ERROR_INVALID_FIELDID: 190 return ("JVMTI_ERROR_INVALID_FIELDID"); 191 case JVMTI_ERROR_NO_MORE_FRAMES: 192 return ("JVMTI_ERROR_NO_MORE_FRAMES"); 193 case JVMTI_ERROR_OPAQUE_FRAME: 194 return ("JVMTI_ERROR_OPAQUE_FRAME"); 195 case JVMTI_ERROR_TYPE_MISMATCH: 196 return ("JVMTI_ERROR_TYPE_MISMATCH"); 197 case JVMTI_ERROR_INVALID_SLOT: 198 return ("JVMTI_ERROR_INVALID_SLOT"); 199 case JVMTI_ERROR_DUPLICATE: 200 return ("JVMTI_ERROR_DUPLICATE"); 201 case JVMTI_ERROR_NOT_FOUND: 202 return ("JVMTI_ERROR_NOT_FOUND"); 203 case JVMTI_ERROR_INVALID_MONITOR: 204 return ("JVMTI_ERROR_INVALID_MONITOR"); 205 case JVMTI_ERROR_NOT_MONITOR_OWNER: 206 return ("JVMTI_ERROR_NOT_MONITOR_OWNER"); 207 case JVMTI_ERROR_INTERRUPT: 208 return ("JVMTI_ERROR_INTERRUPT"); 209 case JVMTI_ERROR_INVALID_CLASS_FORMAT: 210 return ("JVMTI_ERROR_INVALID_CLASS_FORMAT"); 211 case JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION: 212 return ("JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION"); 213 case JVMTI_ERROR_FAILS_VERIFICATION: 214 return ("JVMTI_ERROR_FAILS_VERIFICATION"); 215 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED: 216 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED"); 217 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED: 218 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED"); 219 case JVMTI_ERROR_INVALID_TYPESTATE: 220 return ("JVMTI_ERROR_INVALID_TYPESTATE"); 221 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED: 222 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED"); 223 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED: 224 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED"); 225 case JVMTI_ERROR_UNSUPPORTED_VERSION: 226 return ("JVMTI_ERROR_UNSUPPORTED_VERSION"); 227 case JVMTI_ERROR_NAMES_DONT_MATCH: 228 return ("JVMTI_ERROR_NAMES_DONT_MATCH"); 229 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED: 230 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED"); 231 case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED: 232 return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED"); 233 case JVMTI_ERROR_UNMODIFIABLE_CLASS: 234 return ("JVMTI_ERROR_UNMODIFIABLE_CLASS"); 235 case JVMTI_ERROR_NOT_AVAILABLE: 236 return ("JVMTI_ERROR_NOT_AVAILABLE"); 237 case JVMTI_ERROR_MUST_POSSESS_CAPABILITY: 238 return ("JVMTI_ERROR_MUST_POSSESS_CAPABILITY"); 239 case JVMTI_ERROR_NULL_POINTER: 240 return ("JVMTI_ERROR_NULL_POINTER"); 241 case JVMTI_ERROR_ABSENT_INFORMATION: 242 return ("JVMTI_ERROR_ABSENT_INFORMATION"); 243 case JVMTI_ERROR_INVALID_EVENT_TYPE: 244 return ("JVMTI_ERROR_INVALID_EVENT_TYPE"); 245 case JVMTI_ERROR_ILLEGAL_ARGUMENT: 246 return ("JVMTI_ERROR_ILLEGAL_ARGUMENT"); 247 case JVMTI_ERROR_NATIVE_METHOD: 248 return ("JVMTI_ERROR_NATIVE_METHOD"); 249 case JVMTI_ERROR_OUT_OF_MEMORY: 250 return ("JVMTI_ERROR_OUT_OF_MEMORY"); 251 case JVMTI_ERROR_ACCESS_DENIED: 252 return ("JVMTI_ERROR_ACCESS_DENIED"); 253 case JVMTI_ERROR_WRONG_PHASE: 254 return ("JVMTI_ERROR_WRONG_PHASE"); 255 case JVMTI_ERROR_INTERNAL: 256 return ("JVMTI_ERROR_INTERNAL"); 257 case JVMTI_ERROR_UNATTACHED_THREAD: 258 return ("JVMTI_ERROR_UNATTACHED_THREAD"); 259 case JVMTI_ERROR_INVALID_ENVIRONMENT: 260 return ("JVMTI_ERROR_INVALID_ENVIRONMENT"); 261 default: 262 return ("<unknown error>"); 263 } 264 } 265 266 const char* TranslatePhase(jvmtiPhase phase) { 267 switch (phase) { 268 case JVMTI_PHASE_ONLOAD: 269 return ("JVMTI_PHASE_ONLOAD"); 270 case JVMTI_PHASE_PRIMORDIAL: 271 return ("JVMTI_PHASE_PRIMORDIAL"); 272 case JVMTI_PHASE_START: 273 return ("JVMTI_PHASE_START"); 274 case JVMTI_PHASE_LIVE: 275 return ("JVMTI_PHASE_LIVE"); 276 case JVMTI_PHASE_DEAD: 277 return ("JVMTI_PHASE_DEAD"); 278 default: 279 return ("<unknown phase>"); 280 } 281 } 282 283 const char* TranslateRootKind(jvmtiHeapRootKind root) { 284 switch (root) { 285 case JVMTI_HEAP_ROOT_JNI_GLOBAL: 286 return ("JVMTI_HEAP_ROOT_JNI_GLOBAL"); 287 case JVMTI_HEAP_ROOT_JNI_LOCAL: 288 return ("JVMTI_HEAP_ROOT_JNI_LOCAL"); 289 case JVMTI_HEAP_ROOT_SYSTEM_CLASS: 290 return ("JVMTI_HEAP_ROOT_SYSTEM_CLASS"); 291 case JVMTI_HEAP_ROOT_MONITOR: 292 return ("JVMTI_HEAP_ROOT_MONITOR"); 293 case JVMTI_HEAP_ROOT_STACK_LOCAL: 294 return ("JVMTI_HEAP_ROOT_STACK_LOCAL"); 295 case JVMTI_HEAP_ROOT_THREAD: 296 return ("JVMTI_HEAP_ROOT_THREAD"); 297 case JVMTI_HEAP_ROOT_OTHER: 298 return ("JVMTI_HEAP_ROOT_OTHER"); 299 default: 300 return ("<unknown root kind>"); 301 } 302 } 303 304 const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref) { 305 switch (ref) { 306 case JVMTI_REFERENCE_CLASS: 307 return ("JVMTI_REFERENCE_CLASS"); 308 case JVMTI_REFERENCE_FIELD: 309 return ("JVMTI_REFERENCE_FIELD"); 310 case JVMTI_REFERENCE_ARRAY_ELEMENT: 311 return ("JVMTI_REFERENCE_ARRAY_ELEMENT"); 312 case JVMTI_REFERENCE_CLASS_LOADER: 313 return ("JVMTI_REFERENCE_CLASS_LOADER"); 314 case JVMTI_REFERENCE_SIGNERS: 315 return ("JVMTI_REFERENCE_SIGNERS"); 316 case JVMTI_REFERENCE_PROTECTION_DOMAIN: 317 return ("JVMTI_REFERENCE_PROTECTION_DOMAIN"); 318 case JVMTI_REFERENCE_INTERFACE: 319 return ("JVMTI_REFERENCE_INTERFACE"); 320 case JVMTI_REFERENCE_STATIC_FIELD: 321 return ("JVMTI_REFERENCE_STATIC_FIELD"); 322 case JVMTI_REFERENCE_CONSTANT_POOL: 323 return ("JVMTI_REFERENCE_CONSTANT_POOL"); 324 default: 325 return ("<unknown reference kind>"); 326 } 327 } 328 329 #ifdef __cplusplus 330 } 331 #endif