1 /* 2 * Copyright (c) 1997, 2011, 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. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef _JAVASOFT_JVM_H_ 27 #define _JAVASOFT_JVM_H_ 28 29 #include <sys/stat.h> 30 #include <stdio.h> 31 32 #include "jni.h" 33 #include "jvm_md.h" 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 /* 40 * This file contains additional functions exported from the VM. 41 * These functions are complementary to the standard JNI support. 42 * There are three parts to this file: 43 * 44 * First, this file contains the VM-related functions needed by native 45 * libraries in the standard Java API. For example, the java.lang.Object 46 * class needs VM-level functions that wait for and notify monitors. 47 * 48 * Second, this file contains the functions and constant definitions 49 * needed by the byte code verifier and class file format checker. 50 * These functions allow the verifier and format checker to be written 51 * in a VM-independent way. 52 * 53 * Third, this file contains various I/O and nerwork operations needed 54 * by the standard Java I/O and network APIs. 55 */ 56 57 /* 58 * Bump the version number when either of the following happens: 59 * 60 * 1. There is a change in JVM_* functions. 61 * 62 * 2. There is a change in the contract between VM and Java classes. 63 * For example, if the VM relies on a new private field in Thread 64 * class. 65 */ 66 67 #define JVM_INTERFACE_VERSION 4 68 69 JNIEXPORT jint JNICALL 70 JVM_GetInterfaceVersion(void); 71 72 /************************************************************************* 73 PART 1: Functions for Native Libraries 74 ************************************************************************/ 75 /* 76 * java.lang.Object 77 */ 78 JNIEXPORT jint JNICALL 79 JVM_IHashCode(JNIEnv *env, jobject obj); 80 81 JNIEXPORT void JNICALL 82 JVM_MonitorWait(JNIEnv *env, jobject obj, jlong ms); 83 84 JNIEXPORT void JNICALL 85 JVM_MonitorNotify(JNIEnv *env, jobject obj); 86 87 JNIEXPORT void JNICALL 88 JVM_MonitorNotifyAll(JNIEnv *env, jobject obj); 89 90 JNIEXPORT jobject JNICALL 91 JVM_Clone(JNIEnv *env, jobject obj); 92 93 /* 94 * java.lang.String 95 */ 96 JNIEXPORT jstring JNICALL 97 JVM_InternString(JNIEnv *env, jstring str); 98 99 /* 100 * java.lang.System 101 */ 102 JNIEXPORT jlong JNICALL 103 JVM_CurrentTimeMillis(JNIEnv *env, jclass ignored); 104 105 JNIEXPORT jlong JNICALL 106 JVM_NanoTime(JNIEnv *env, jclass ignored); 107 108 JNIEXPORT jlong JNICALL 109 JVM_GetNanoTimeAdjustment(JNIEnv *env, jclass ignored, jlong offset_secs); 110 111 JNIEXPORT void JNICALL 112 JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos, 113 jobject dst, jint dst_pos, jint length); 114 115 JNIEXPORT jobject JNICALL 116 JVM_InitProperties(JNIEnv *env, jobject p); 117 118 /* 119 * java.io.File 120 */ 121 JNIEXPORT void JNICALL 122 JVM_OnExit(void (*func)(void)); 123 124 /* 125 * java.lang.Runtime 126 */ 127 JNIEXPORT void JNICALL 128 JVM_Exit(jint code); 129 130 JNIEXPORT void JNICALL 131 JVM_Halt(jint code); 132 133 JNIEXPORT void JNICALL 134 JVM_GC(void); 135 136 /* Returns the number of real-time milliseconds that have elapsed since the 137 * least-recently-inspected heap object was last inspected by the garbage 138 * collector. 139 * 140 * For simple stop-the-world collectors this value is just the time 141 * since the most recent collection. For generational collectors it is the 142 * time since the oldest generation was most recently collected. Other 143 * collectors are free to return a pessimistic estimate of the elapsed time, or 144 * simply the time since the last full collection was performed. 145 * 146 * Note that in the presence of reference objects, a given object that is no 147 * longer strongly reachable may have to be inspected multiple times before it 148 * can be reclaimed. 149 */ 150 JNIEXPORT jlong JNICALL 151 JVM_MaxObjectInspectionAge(void); 152 153 JNIEXPORT void JNICALL 154 JVM_TraceInstructions(jboolean on); 155 156 JNIEXPORT void JNICALL 157 JVM_TraceMethodCalls(jboolean on); 158 159 JNIEXPORT jlong JNICALL 160 JVM_TotalMemory(void); 161 162 JNIEXPORT jlong JNICALL 163 JVM_FreeMemory(void); 164 165 JNIEXPORT jlong JNICALL 166 JVM_MaxMemory(void); 167 168 JNIEXPORT jint JNICALL 169 JVM_ActiveProcessorCount(void); 170 171 JNIEXPORT jstring JVM_NativeLoad(JNIEnv* env, jstring javaFilename, 172 jobject javaLoader, jclass caller); 173 174 JNIEXPORT void * JNICALL 175 JVM_LoadLibrary(const char *name); 176 177 JNIEXPORT void JNICALL 178 JVM_UnloadLibrary(void * handle); 179 180 JNIEXPORT void * JNICALL 181 JVM_FindLibraryEntry(void *handle, const char *name); 182 183 JNIEXPORT jboolean JNICALL 184 JVM_IsSupportedJNIVersion(jint version); 185 186 /* 187 * java.lang.Float and java.lang.Double 188 */ 189 JNIEXPORT jboolean JNICALL 190 JVM_IsNaN(jdouble d); 191 192 /* 193 * java.lang.Throwable 194 */ 195 JNIEXPORT void JNICALL 196 JVM_FillInStackTrace(JNIEnv *env, jobject throwable); 197 198 JNIEXPORT void JNICALL 199 JVM_PrintStackTrace(JNIEnv *env, jobject throwable, jobject printable); 200 201 JNIEXPORT jint JNICALL 202 JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable); 203 204 JNIEXPORT jobject JNICALL 205 JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index); 206 207 /* 208 * java.lang.Compiler 209 */ 210 JNIEXPORT void JNICALL 211 JVM_InitializeCompiler (JNIEnv *env, jclass compCls); 212 213 JNIEXPORT jboolean JNICALL 214 JVM_IsSilentCompiler(JNIEnv *env, jclass compCls); 215 216 JNIEXPORT jboolean JNICALL 217 JVM_CompileClass(JNIEnv *env, jclass compCls, jclass cls); 218 219 JNIEXPORT jboolean JNICALL 220 JVM_CompileClasses(JNIEnv *env, jclass cls, jstring jname); 221 222 JNIEXPORT jobject JNICALL 223 JVM_CompilerCommand(JNIEnv *env, jclass compCls, jobject arg); 224 225 JNIEXPORT void JNICALL 226 JVM_EnableCompiler(JNIEnv *env, jclass compCls); 227 228 JNIEXPORT void JNICALL 229 JVM_DisableCompiler(JNIEnv *env, jclass compCls); 230 231 /* 232 * java.lang.Thread 233 */ 234 JNIEXPORT void JNICALL 235 JVM_StartThread(JNIEnv *env, jobject thread, jlong stack_size, jboolean daemon); 236 237 JNIEXPORT void JNICALL 238 JVM_StopThread(JNIEnv *env, jobject thread, jobject exception); 239 240 JNIEXPORT jboolean JNICALL 241 JVM_IsThreadAlive(JNIEnv *env, jobject thread); 242 243 JNIEXPORT void JNICALL 244 JVM_SuspendThread(JNIEnv *env, jobject thread); 245 246 JNIEXPORT void JNICALL 247 JVM_ResumeThread(JNIEnv *env, jobject thread); 248 249 JNIEXPORT void JNICALL 250 JVM_SetThreadPriority(JNIEnv *env, jobject thread, jint prio); 251 252 JNIEXPORT void JNICALL 253 JVM_Yield(JNIEnv *env, jclass threadClass); 254 255 JNIEXPORT void JNICALL 256 JVM_Sleep(JNIEnv *env, jclass threadClass, jobject java_object, jlong millis); 257 258 JNIEXPORT jobject JNICALL 259 JVM_CurrentThread(JNIEnv *env, jclass threadClass); 260 261 JNIEXPORT jint JNICALL 262 JVM_CountStackFrames(JNIEnv *env, jobject thread); 263 264 JNIEXPORT void JNICALL 265 JVM_Interrupt(JNIEnv *env, jobject thread); 266 267 JNIEXPORT jboolean JNICALL 268 JVM_IsInterrupted(JNIEnv *env, jobject thread, jboolean clearInterrupted); 269 270 JNIEXPORT jboolean JNICALL 271 JVM_HoldsLock(JNIEnv *env, jclass threadClass, jobject obj); 272 273 JNIEXPORT void JNICALL 274 JVM_DumpAllStacks(JNIEnv *env, jclass unused); 275 276 JNIEXPORT jobjectArray JNICALL 277 JVM_GetAllThreads(JNIEnv *env, jclass dummy); 278 279 JNIEXPORT void JNICALL 280 JVM_SetNativeThreadName(JNIEnv *env, jobject jthread, jstring name); 281 282 /* getStackTrace() and getAllStackTraces() method */ 283 JNIEXPORT jobjectArray JNICALL 284 JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads); 285 286 /* 287 * java.lang.SecurityManager 288 */ 289 JNIEXPORT jclass JNICALL 290 JVM_CurrentLoadedClass(JNIEnv *env); 291 292 JNIEXPORT jobject JNICALL 293 JVM_CurrentClassLoader(JNIEnv *env); 294 295 JNIEXPORT jobjectArray JNICALL 296 JVM_GetClassContext(JNIEnv *env); 297 298 JNIEXPORT jint JNICALL 299 JVM_ClassDepth(JNIEnv *env, jstring name); 300 301 JNIEXPORT jint JNICALL 302 JVM_ClassLoaderDepth(JNIEnv *env); 303 304 /* 305 * java.lang.Package 306 */ 307 JNIEXPORT jstring JNICALL 308 JVM_GetSystemPackage(JNIEnv *env, jstring name); 309 310 JNIEXPORT jobjectArray JNICALL 311 JVM_GetSystemPackages(JNIEnv *env); 312 313 /* 314 * java.io.ObjectInputStream 315 */ 316 JNIEXPORT jobject JNICALL 317 JVM_AllocateNewObject(JNIEnv *env, jobject obj, jclass currClass, 318 jclass initClass); 319 320 JNIEXPORT jobject JNICALL 321 JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, 322 jint length); 323 324 JNIEXPORT jobject JNICALL 325 JVM_LatestUserDefinedLoader(JNIEnv *env); 326 327 /* 328 * This function has been deprecated and should not be considered 329 * part of the specified JVM interface. 330 */ 331 JNIEXPORT jclass JNICALL 332 JVM_LoadClass0(JNIEnv *env, jobject obj, jclass currClass, 333 jstring currClassName); 334 335 /* 336 * java.lang.reflect.Array 337 */ 338 JNIEXPORT jint JNICALL 339 JVM_GetArrayLength(JNIEnv *env, jobject arr); 340 341 JNIEXPORT jobject JNICALL 342 JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index); 343 344 JNIEXPORT jvalue JNICALL 345 JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode); 346 347 JNIEXPORT void JNICALL 348 JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val); 349 350 JNIEXPORT void JNICALL 351 JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, 352 unsigned char vCode); 353 354 JNIEXPORT jobject JNICALL 355 JVM_NewArray(JNIEnv *env, jclass eltClass, jint length); 356 357 JNIEXPORT jobject JNICALL 358 JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim); 359 360 /* 361 * java.lang.Class and java.lang.ClassLoader 362 */ 363 /* 364 * Returns the class in which the code invoking the native method 365 * belongs. 366 * 367 * Note that in JDK 1.1, native methods did not create a frame. 368 * In 1.2, they do. Therefore native methods like Class.forName 369 * can no longer look at the current frame for the caller class. 370 */ 371 JNIEXPORT jclass JNICALL 372 JVM_GetCallerClass(JNIEnv *env, int n); 373 374 /* 375 * Find primitive classes 376 * utf: class name 377 */ 378 JNIEXPORT jclass JNICALL 379 JVM_FindPrimitiveClass(JNIEnv *env, const char *utf); 380 381 /* 382 * Link the class 383 */ 384 JNIEXPORT void JNICALL 385 JVM_ResolveClass(JNIEnv *env, jclass cls); 386 387 /* 388 * Find a class from a boot class loader. Returns NULL if class not found. 389 */ 390 JNIEXPORT jclass JNICALL 391 JVM_FindClassFromBootLoader(JNIEnv *env, const char *name); 392 393 /* 394 * Find a class from a given class loader. Throw ClassNotFoundException 395 * or NoClassDefFoundError depending on the value of the last 396 * argument. 397 */ 398 JNIEXPORT jclass JNICALL 399 JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init, 400 jobject loader, jboolean throwError); 401 402 /* 403 * Find a class from a given class. 404 */ 405 JNIEXPORT jclass JNICALL 406 JVM_FindClassFromClass(JNIEnv *env, const char *name, jboolean init, 407 jclass from); 408 409 /* Find a loaded class cached by the VM */ 410 JNIEXPORT jclass JNICALL 411 JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name); 412 413 /* Define a class */ 414 JNIEXPORT jclass JNICALL 415 JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, 416 jsize len, jobject pd); 417 418 /* Define a class with a source (added in JDK1.5) */ 419 JNIEXPORT jclass JNICALL 420 JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, 421 const jbyte *buf, jsize len, jobject pd, 422 const char *source); 423 424 /* 425 * Reflection support functions 426 */ 427 428 JNIEXPORT jstring JNICALL 429 JVM_GetClassName(JNIEnv *env, jclass cls); 430 431 JNIEXPORT jobjectArray JNICALL 432 JVM_GetClassInterfaces(JNIEnv *env, jclass cls); 433 434 JNIEXPORT jobject JNICALL 435 JVM_GetClassLoader(JNIEnv *env, jclass cls); 436 437 JNIEXPORT jboolean JNICALL 438 JVM_IsInterface(JNIEnv *env, jclass cls); 439 440 JNIEXPORT jobjectArray JNICALL 441 JVM_GetClassSigners(JNIEnv *env, jclass cls); 442 443 JNIEXPORT void JNICALL 444 JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers); 445 446 JNIEXPORT jobject JNICALL 447 JVM_GetProtectionDomain(JNIEnv *env, jclass cls); 448 449 JNIEXPORT void JNICALL 450 JVM_SetProtectionDomain(JNIEnv *env, jclass cls, jobject protection_domain); 451 452 JNIEXPORT jboolean JNICALL 453 JVM_IsArrayClass(JNIEnv *env, jclass cls); 454 455 JNIEXPORT jboolean JNICALL 456 JVM_IsPrimitiveClass(JNIEnv *env, jclass cls); 457 458 JNIEXPORT jclass JNICALL 459 JVM_GetComponentType(JNIEnv *env, jclass cls); 460 461 JNIEXPORT jint JNICALL 462 JVM_GetClassModifiers(JNIEnv *env, jclass cls); 463 464 JNIEXPORT jobjectArray JNICALL 465 JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass); 466 467 JNIEXPORT jclass JNICALL 468 JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass); 469 470 /* Generics support (JDK 1.5) */ 471 JNIEXPORT jstring JNICALL 472 JVM_GetClassSignature(JNIEnv *env, jclass cls); 473 474 /* Annotations support (JDK 1.5) */ 475 JNIEXPORT jbyteArray JNICALL 476 JVM_GetClassAnnotations(JNIEnv *env, jclass cls); 477 478 /* 479 * New (JDK 1.4) reflection implementation 480 */ 481 482 JNIEXPORT jobjectArray JNICALL 483 JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly); 484 485 JNIEXPORT jobjectArray JNICALL 486 JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly); 487 488 JNIEXPORT jobjectArray JNICALL 489 JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly); 490 491 /* Differs from JVM_GetClassModifiers in treatment of inner classes. 492 This returns the access flags for the class as specified in the 493 class file rather than searching the InnerClasses attribute (if 494 present) to find the source-level access flags. Only the values of 495 the low 13 bits (i.e., a mask of 0x1FFF) are guaranteed to be 496 valid. */ 497 JNIEXPORT jint JNICALL 498 JVM_GetClassAccessFlags(JNIEnv *env, jclass cls); 499 500 /* The following two reflection routines are still needed due to startup time issues */ 501 /* 502 * java.lang.reflect.Method 503 */ 504 JNIEXPORT jobject JNICALL 505 JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0); 506 507 /* 508 * java.lang.reflect.Constructor 509 */ 510 JNIEXPORT jobject JNICALL 511 JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0); 512 513 /* 514 * Constant pool access; currently used to implement reflective access to annotations (JDK 1.5) 515 */ 516 517 JNIEXPORT jobject JNICALL 518 JVM_GetClassConstantPool(JNIEnv *env, jclass cls); 519 520 JNIEXPORT jint JNICALL JVM_ConstantPoolGetSize 521 (JNIEnv *env, jobject unused, jobject jcpool); 522 523 JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAt 524 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 525 526 JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAtIfLoaded 527 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 528 529 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAt 530 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 531 532 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAtIfLoaded 533 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 534 535 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAt 536 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 537 538 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAtIfLoaded 539 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 540 541 JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetMemberRefInfoAt 542 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 543 544 JNIEXPORT jint JNICALL JVM_ConstantPoolGetIntAt 545 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 546 547 JNIEXPORT jlong JNICALL JVM_ConstantPoolGetLongAt 548 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 549 550 JNIEXPORT jfloat JNICALL JVM_ConstantPoolGetFloatAt 551 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 552 553 JNIEXPORT jdouble JNICALL JVM_ConstantPoolGetDoubleAt 554 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 555 556 JNIEXPORT jstring JNICALL JVM_ConstantPoolGetStringAt 557 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 558 559 JNIEXPORT jstring JNICALL JVM_ConstantPoolGetUTF8At 560 (JNIEnv *env, jobject unused, jobject jcpool, jint index); 561 562 /* 563 * java.security.* 564 */ 565 566 JNIEXPORT jobject JNICALL 567 JVM_DoPrivileged(JNIEnv *env, jclass cls, 568 jobject action, jobject context, jboolean wrapException); 569 570 JNIEXPORT jobject JNICALL 571 JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls); 572 573 JNIEXPORT jobject JNICALL 574 JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls); 575 576 /* 577 * Signal support, used to implement the shutdown sequence. Every VM must 578 * support JVM_SIGINT and JVM_SIGTERM, raising the former for user interrupts 579 * (^C) and the latter for external termination (kill, system shutdown, etc.). 580 * Other platform-dependent signal values may also be supported. 581 */ 582 583 JNIEXPORT void * JNICALL 584 JVM_RegisterSignal(jint sig, void *handler); 585 586 JNIEXPORT jboolean JNICALL 587 JVM_RaiseSignal(jint sig); 588 589 JNIEXPORT jint JNICALL 590 JVM_FindSignal(const char *name); 591 592 /* 593 * Retrieve the assertion directives for the specified class. 594 */ 595 JNIEXPORT jboolean JNICALL 596 JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls); 597 598 /* 599 * Retrieve the assertion directives from the VM. 600 */ 601 JNIEXPORT jobject JNICALL 602 JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused); 603 604 /* 605 * java.util.concurrent.AtomicLong 606 */ 607 JNIEXPORT jboolean JNICALL 608 JVM_SupportsCX8(void); 609 610 /* 611 * com.sun.dtrace.jsdt support 612 */ 613 614 #define JVM_TRACING_DTRACE_VERSION 1 615 616 /* 617 * Structure to pass one probe description to JVM 618 */ 619 typedef struct { 620 jmethodID method; 621 jstring function; 622 jstring name; 623 void* reserved[4]; // for future use 624 } JVM_DTraceProbe; 625 626 /** 627 * Encapsulates the stability ratings for a DTrace provider field 628 */ 629 typedef struct { 630 jint nameStability; 631 jint dataStability; 632 jint dependencyClass; 633 } JVM_DTraceInterfaceAttributes; 634 635 /* 636 * Structure to pass one provider description to JVM 637 */ 638 typedef struct { 639 jstring name; 640 JVM_DTraceProbe* probes; 641 jint probe_count; 642 JVM_DTraceInterfaceAttributes providerAttributes; 643 JVM_DTraceInterfaceAttributes moduleAttributes; 644 JVM_DTraceInterfaceAttributes functionAttributes; 645 JVM_DTraceInterfaceAttributes nameAttributes; 646 JVM_DTraceInterfaceAttributes argsAttributes; 647 void* reserved[4]; // for future use 648 } JVM_DTraceProvider; 649 650 /* 651 * Get the version number the JVM was built with 652 */ 653 JNIEXPORT jint JNICALL 654 JVM_DTraceGetVersion(JNIEnv* env); 655 656 /* 657 * Register new probe with given signature, return global handle 658 * 659 * The version passed in is the version that the library code was 660 * built with. 661 */ 662 JNIEXPORT jlong JNICALL 663 JVM_DTraceActivate(JNIEnv* env, jint version, jstring module_name, 664 jint providers_count, JVM_DTraceProvider* providers); 665 666 /* 667 * Check JSDT probe 668 */ 669 JNIEXPORT jboolean JNICALL 670 JVM_DTraceIsProbeEnabled(JNIEnv* env, jmethodID method); 671 672 /* 673 * Destroy custom DOF 674 */ 675 JNIEXPORT void JNICALL 676 JVM_DTraceDispose(JNIEnv* env, jlong activation_handle); 677 678 /* 679 * Check to see if DTrace is supported by OS 680 */ 681 JNIEXPORT jboolean JNICALL 682 JVM_DTraceIsSupported(JNIEnv* env); 683 684 /************************************************************************* 685 PART 2: Support for the Verifier and Class File Format Checker 686 ************************************************************************/ 687 /* 688 * Return the class name in UTF format. The result is valid 689 * until JVM_ReleaseUTf is called. 690 * 691 * The caller must treat the string as a constant and not modify it 692 * in any way. 693 */ 694 JNIEXPORT const char * JNICALL 695 JVM_GetClassNameUTF(JNIEnv *env, jclass cb); 696 697 /* 698 * Returns the constant pool types in the buffer provided by "types." 699 */ 700 JNIEXPORT void JNICALL 701 JVM_GetClassCPTypes(JNIEnv *env, jclass cb, unsigned char *types); 702 703 /* 704 * Returns the number of Constant Pool entries. 705 */ 706 JNIEXPORT jint JNICALL 707 JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cb); 708 709 /* 710 * Returns the number of *declared* fields or methods. 711 */ 712 JNIEXPORT jint JNICALL 713 JVM_GetClassFieldsCount(JNIEnv *env, jclass cb); 714 715 JNIEXPORT jint JNICALL 716 JVM_GetClassMethodsCount(JNIEnv *env, jclass cb); 717 718 /* 719 * Returns the CP indexes of exceptions raised by a given method. 720 * Places the result in the given buffer. 721 * 722 * The method is identified by method_index. 723 */ 724 JNIEXPORT void JNICALL 725 JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cb, jint method_index, 726 unsigned short *exceptions); 727 /* 728 * Returns the number of exceptions raised by a given method. 729 * The method is identified by method_index. 730 */ 731 JNIEXPORT jint JNICALL 732 JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cb, jint method_index); 733 734 /* 735 * Returns the byte code sequence of a given method. 736 * Places the result in the given buffer. 737 * 738 * The method is identified by method_index. 739 */ 740 JNIEXPORT void JNICALL 741 JVM_GetMethodIxByteCode(JNIEnv *env, jclass cb, jint method_index, 742 unsigned char *code); 743 744 /* 745 * Returns the length of the byte code sequence of a given method. 746 * The method is identified by method_index. 747 */ 748 JNIEXPORT jint JNICALL 749 JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cb, jint method_index); 750 751 /* 752 * A structure used to a capture exception table entry in a Java method. 753 */ 754 typedef struct { 755 jint start_pc; 756 jint end_pc; 757 jint handler_pc; 758 jint catchType; 759 } JVM_ExceptionTableEntryType; 760 761 /* 762 * Returns the exception table entry at entry_index of a given method. 763 * Places the result in the given buffer. 764 * 765 * The method is identified by method_index. 766 */ 767 JNIEXPORT void JNICALL 768 JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cb, jint method_index, 769 jint entry_index, 770 JVM_ExceptionTableEntryType *entry); 771 772 /* 773 * Returns the length of the exception table of a given method. 774 * The method is identified by method_index. 775 */ 776 JNIEXPORT jint JNICALL 777 JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cb, int index); 778 779 /* 780 * Returns the modifiers of a given field. 781 * The field is identified by field_index. 782 */ 783 JNIEXPORT jint JNICALL 784 JVM_GetFieldIxModifiers(JNIEnv *env, jclass cb, int index); 785 786 /* 787 * Returns the modifiers of a given method. 788 * The method is identified by method_index. 789 */ 790 JNIEXPORT jint JNICALL 791 JVM_GetMethodIxModifiers(JNIEnv *env, jclass cb, int index); 792 793 /* 794 * Returns the number of local variables of a given method. 795 * The method is identified by method_index. 796 */ 797 JNIEXPORT jint JNICALL 798 JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cb, int index); 799 800 /* 801 * Returns the number of arguments (including this pointer) of a given method. 802 * The method is identified by method_index. 803 */ 804 JNIEXPORT jint JNICALL 805 JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cb, int index); 806 807 /* 808 * Returns the maximum amount of stack (in words) used by a given method. 809 * The method is identified by method_index. 810 */ 811 JNIEXPORT jint JNICALL 812 JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cb, int index); 813 814 /* 815 * Is a given method a constructor. 816 * The method is identified by method_index. 817 */ 818 JNIEXPORT jboolean JNICALL 819 JVM_IsConstructorIx(JNIEnv *env, jclass cb, int index); 820 821 /* 822 * Returns the name of a given method in UTF format. 823 * The result remains valid until JVM_ReleaseUTF is called. 824 * 825 * The caller must treat the string as a constant and not modify it 826 * in any way. 827 */ 828 JNIEXPORT const char * JNICALL 829 JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cb, jint index); 830 831 /* 832 * Returns the signature of a given method in UTF format. 833 * The result remains valid until JVM_ReleaseUTF is called. 834 * 835 * The caller must treat the string as a constant and not modify it 836 * in any way. 837 */ 838 JNIEXPORT const char * JNICALL 839 JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cb, jint index); 840 841 /* 842 * Returns the name of the field refered to at a given constant pool 843 * index. 844 * 845 * The result is in UTF format and remains valid until JVM_ReleaseUTF 846 * is called. 847 * 848 * The caller must treat the string as a constant and not modify it 849 * in any way. 850 */ 851 JNIEXPORT const char * JNICALL 852 JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cb, jint index); 853 854 /* 855 * Returns the name of the method refered to at a given constant pool 856 * index. 857 * 858 * The result is in UTF format and remains valid until JVM_ReleaseUTF 859 * is called. 860 * 861 * The caller must treat the string as a constant and not modify it 862 * in any way. 863 */ 864 JNIEXPORT const char * JNICALL 865 JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cb, jint index); 866 867 /* 868 * Returns the signature of the method refered to at a given constant pool 869 * index. 870 * 871 * The result is in UTF format and remains valid until JVM_ReleaseUTF 872 * is called. 873 * 874 * The caller must treat the string as a constant and not modify it 875 * in any way. 876 */ 877 JNIEXPORT const char * JNICALL 878 JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cb, jint index); 879 880 /* 881 * Returns the signature of the field refered to at a given constant pool 882 * index. 883 * 884 * The result is in UTF format and remains valid until JVM_ReleaseUTF 885 * is called. 886 * 887 * The caller must treat the string as a constant and not modify it 888 * in any way. 889 */ 890 JNIEXPORT const char * JNICALL 891 JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cb, jint index); 892 893 /* 894 * Returns the class name refered to at a given constant pool index. 895 * 896 * The result is in UTF format and remains valid until JVM_ReleaseUTF 897 * is called. 898 * 899 * The caller must treat the string as a constant and not modify it 900 * in any way. 901 */ 902 JNIEXPORT const char * JNICALL 903 JVM_GetCPClassNameUTF(JNIEnv *env, jclass cb, jint index); 904 905 /* 906 * Returns the class name refered to at a given constant pool index. 907 * 908 * The constant pool entry must refer to a CONSTANT_Fieldref. 909 * 910 * The result is in UTF format and remains valid until JVM_ReleaseUTF 911 * is called. 912 * 913 * The caller must treat the string as a constant and not modify it 914 * in any way. 915 */ 916 JNIEXPORT const char * JNICALL 917 JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cb, jint index); 918 919 /* 920 * Returns the class name refered to at a given constant pool index. 921 * 922 * The constant pool entry must refer to CONSTANT_Methodref or 923 * CONSTANT_InterfaceMethodref. 924 * 925 * The result is in UTF format and remains valid until JVM_ReleaseUTF 926 * is called. 927 * 928 * The caller must treat the string as a constant and not modify it 929 * in any way. 930 */ 931 JNIEXPORT const char * JNICALL 932 JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cb, jint index); 933 934 /* 935 * Returns the modifiers of a field in calledClass. The field is 936 * referred to in class cb at constant pool entry index. 937 * 938 * The caller must treat the string as a constant and not modify it 939 * in any way. 940 * 941 * Returns -1 if the field does not exist in calledClass. 942 */ 943 JNIEXPORT jint JNICALL 944 JVM_GetCPFieldModifiers(JNIEnv *env, jclass cb, int index, jclass calledClass); 945 946 /* 947 * Returns the modifiers of a method in calledClass. The method is 948 * referred to in class cb at constant pool entry index. 949 * 950 * Returns -1 if the method does not exist in calledClass. 951 */ 952 JNIEXPORT jint JNICALL 953 JVM_GetCPMethodModifiers(JNIEnv *env, jclass cb, int index, jclass calledClass); 954 955 /* 956 * Releases the UTF string obtained from the VM. 957 */ 958 JNIEXPORT void JNICALL 959 JVM_ReleaseUTF(const char *utf); 960 961 /* 962 * Compare if two classes are in the same package. 963 */ 964 JNIEXPORT jboolean JNICALL 965 JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2); 966 967 /* Get classfile constants */ 968 #include "classfile_constants.h" 969 970 /* 971 * A function defined by the byte-code verifier and called by the VM. 972 * This is not a function implemented in the VM. 973 * 974 * Returns JNI_FALSE if verification fails. A detailed error message 975 * will be places in msg_buf, whose length is specified by buf_len. 976 */ 977 typedef jboolean (*verifier_fn_t)(JNIEnv *env, 978 jclass cb, 979 char * msg_buf, 980 jint buf_len); 981 982 983 /* 984 * Support for a VM-independent class format checker. 985 */ 986 typedef struct { 987 unsigned long code; /* byte code */ 988 unsigned long excs; /* exceptions */ 989 unsigned long etab; /* catch table */ 990 unsigned long lnum; /* line number */ 991 unsigned long lvar; /* local vars */ 992 } method_size_info; 993 994 typedef struct { 995 unsigned int constants; /* constant pool */ 996 unsigned int fields; 997 unsigned int methods; 998 unsigned int interfaces; 999 unsigned int fields2; /* number of static 2-word fields */ 1000 unsigned int innerclasses; /* # of records in InnerClasses attr */ 1001 1002 method_size_info clinit; /* memory used in clinit */ 1003 method_size_info main; /* used everywhere else */ 1004 } class_size_info; 1005 1006 /* 1007 * Functions defined in libjava.so to perform string conversions. 1008 * 1009 */ 1010 1011 typedef jstring (*to_java_string_fn_t)(JNIEnv *env, char *str); 1012 1013 typedef char *(*to_c_string_fn_t)(JNIEnv *env, jstring s, jboolean *b); 1014 1015 /* This is the function defined in libjava.so that performs class 1016 * format checks. This functions fills in size information about 1017 * the class file and returns: 1018 * 1019 * 0: good 1020 * -1: out of memory 1021 * -2: bad format 1022 * -3: unsupported version 1023 * -4: bad class name 1024 */ 1025 1026 typedef jint (*check_format_fn_t)(char *class_name, 1027 unsigned char *data, 1028 unsigned int data_size, 1029 class_size_info *class_size, 1030 char *message_buffer, 1031 jint buffer_length, 1032 jboolean measure_only, 1033 jboolean check_relaxed); 1034 1035 #define JVM_RECOGNIZED_CLASS_MODIFIERS (JVM_ACC_PUBLIC | \ 1036 JVM_ACC_FINAL | \ 1037 JVM_ACC_SUPER | \ 1038 JVM_ACC_INTERFACE | \ 1039 JVM_ACC_ABSTRACT | \ 1040 JVM_ACC_ANNOTATION | \ 1041 JVM_ACC_ENUM | \ 1042 JVM_ACC_SYNTHETIC) 1043 1044 #define JVM_RECOGNIZED_FIELD_MODIFIERS (JVM_ACC_PUBLIC | \ 1045 JVM_ACC_PRIVATE | \ 1046 JVM_ACC_PROTECTED | \ 1047 JVM_ACC_STATIC | \ 1048 JVM_ACC_FINAL | \ 1049 JVM_ACC_VOLATILE | \ 1050 JVM_ACC_TRANSIENT | \ 1051 JVM_ACC_ENUM | \ 1052 JVM_ACC_SYNTHETIC) 1053 1054 #define JVM_RECOGNIZED_METHOD_MODIFIERS (JVM_ACC_PUBLIC | \ 1055 JVM_ACC_PRIVATE | \ 1056 JVM_ACC_PROTECTED | \ 1057 JVM_ACC_STATIC | \ 1058 JVM_ACC_FINAL | \ 1059 JVM_ACC_SYNCHRONIZED | \ 1060 JVM_ACC_BRIDGE | \ 1061 JVM_ACC_VARARGS | \ 1062 JVM_ACC_NATIVE | \ 1063 JVM_ACC_ABSTRACT | \ 1064 JVM_ACC_STRICT | \ 1065 JVM_ACC_SYNTHETIC) 1066 1067 /* 1068 * This is the function defined in libjava.so to perform path 1069 * canonicalization. VM call this function before opening jar files 1070 * to load system classes. 1071 * 1072 */ 1073 1074 typedef int (*canonicalize_fn_t)(JNIEnv *env, char *orig, char *out, int len); 1075 1076 /************************************************************************* 1077 PART 3: I/O and Network Support 1078 ************************************************************************/ 1079 1080 /* Note that the JVM IO functions are expected to return JVM_IO_ERR 1081 * when there is any kind of error. The caller can then use the 1082 * platform specific support (e.g., errno) to get the detailed 1083 * error info. The JVM_GetLastErrorString procedure may also be used 1084 * to obtain a descriptive error string. 1085 */ 1086 #define JVM_IO_ERR (-1) 1087 1088 /* For interruptible IO. Returning JVM_IO_INTR indicates that an IO 1089 * operation has been disrupted by Thread.interrupt. There are a 1090 * number of technical difficulties related to interruptible IO that 1091 * need to be solved. For example, most existing programs do not handle 1092 * InterruptedIOExceptions specially, they simply treat those as any 1093 * IOExceptions, which typically indicate fatal errors. 1094 * 1095 * There are also two modes of operation for interruptible IO. In the 1096 * resumption mode, an interrupted IO operation is guaranteed not to 1097 * have any side-effects, and can be restarted. In the termination mode, 1098 * an interrupted IO operation corrupts the underlying IO stream, so 1099 * that the only reasonable operation on an interrupted stream is to 1100 * close that stream. The resumption mode seems to be impossible to 1101 * implement on Win32 and Solaris. Implementing the termination mode is 1102 * easier, but it's not clear that's the right semantics. 1103 * 1104 * Interruptible IO is not supported on Win32.It can be enabled/disabled 1105 * using a compile-time flag on Solaris. Third-party JVM ports do not 1106 * need to implement interruptible IO. 1107 */ 1108 #define JVM_IO_INTR (-2) 1109 1110 /* Write a string into the given buffer, in the platform's local encoding, 1111 * that describes the most recent system-level error to occur in this thread. 1112 * Return the length of the string or zero if no error occurred. 1113 */ 1114 JNIEXPORT jint JNICALL 1115 JVM_GetLastErrorString(char *buf, int len); 1116 1117 /* 1118 * Convert a pathname into native format. This function does syntactic 1119 * cleanup, such as removing redundant separator characters. It modifies 1120 * the given pathname string in place. 1121 */ 1122 JNIEXPORT char * JNICALL 1123 JVM_NativePath(char *); 1124 1125 /* 1126 * JVM I/O error codes 1127 */ 1128 #define JVM_EEXIST (-100) 1129 1130 /* 1131 * Open a file descriptor. This function returns a negative error code 1132 * on error, and a non-negative integer that is the file descriptor on 1133 * success. 1134 */ 1135 JNIEXPORT jint JNICALL 1136 JVM_Open(const char *fname, jint flags, jint mode); 1137 1138 /* 1139 * Close a file descriptor. This function returns -1 on error, and 0 1140 * on success. 1141 * 1142 * fd the file descriptor to close. 1143 */ 1144 JNIEXPORT jint JNICALL 1145 JVM_Close(jint fd); 1146 1147 /* 1148 * Read data from a file decriptor into a char array. 1149 * 1150 * fd the file descriptor to read from. 1151 * buf the buffer where to put the read data. 1152 * nbytes the number of bytes to read. 1153 * 1154 * This function returns -1 on error, and 0 on success. 1155 */ 1156 JNIEXPORT jint JNICALL 1157 JVM_Read(jint fd, char *buf, jint nbytes); 1158 1159 /* 1160 * Write data from a char array to a file decriptor. 1161 * 1162 * fd the file descriptor to read from. 1163 * buf the buffer from which to fetch the data. 1164 * nbytes the number of bytes to write. 1165 * 1166 * This function returns -1 on error, and 0 on success. 1167 */ 1168 JNIEXPORT jint JNICALL 1169 JVM_Write(jint fd, char *buf, jint nbytes); 1170 1171 /* 1172 * Move the file descriptor pointer from whence by offset. 1173 * 1174 * fd the file descriptor to move. 1175 * offset the number of bytes to move it by. 1176 * whence the start from where to move it. 1177 * 1178 * This function returns the resulting pointer location. 1179 */ 1180 JNIEXPORT jlong JNICALL 1181 JVM_Lseek(jint fd, jlong offset, jint whence); 1182 1183 /* 1184 * Set the length of the file associated with the given descriptor to the given 1185 * length. If the new length is longer than the current length then the file 1186 * is extended; the contents of the extended portion are not defined. The 1187 * value of the file pointer is undefined after this procedure returns. 1188 */ 1189 JNIEXPORT jint JNICALL 1190 JVM_SetLength(jint fd, jlong length); 1191 1192 /* 1193 * Synchronize the file descriptor's in memory state with that of the 1194 * physical device. Return of -1 is an error, 0 is OK. 1195 */ 1196 JNIEXPORT jint JNICALL 1197 JVM_Sync(jint fd); 1198 1199 /* 1200 * Networking library support 1201 */ 1202 1203 JNIEXPORT jint JNICALL 1204 JVM_InitializeSocketLibrary(void); 1205 1206 struct sockaddr; 1207 1208 JNIEXPORT jint JNICALL 1209 JVM_Socket(jint domain, jint type, jint protocol); 1210 1211 JNIEXPORT jint JNICALL 1212 JVM_SocketClose(jint fd); 1213 1214 JNIEXPORT jint JNICALL 1215 JVM_SocketShutdown(jint fd, jint howto); 1216 1217 JNIEXPORT jint JNICALL 1218 JVM_Recv(jint fd, char *buf, jint nBytes, jint flags); 1219 1220 JNIEXPORT jint JNICALL 1221 JVM_Send(jint fd, char *buf, jint nBytes, jint flags); 1222 1223 JNIEXPORT jint JNICALL 1224 JVM_Timeout(int fd, long timeout); 1225 1226 JNIEXPORT jint JNICALL 1227 JVM_Listen(jint fd, jint count); 1228 1229 JNIEXPORT jint JNICALL 1230 JVM_Connect(jint fd, struct sockaddr *him, jint len); 1231 1232 JNIEXPORT jint JNICALL 1233 JVM_Bind(jint fd, struct sockaddr *him, jint len); 1234 1235 JNIEXPORT jint JNICALL 1236 JVM_Accept(jint fd, struct sockaddr *him, jint *len); 1237 1238 JNIEXPORT jint JNICALL 1239 JVM_RecvFrom(jint fd, char *buf, int nBytes, 1240 int flags, struct sockaddr *from, int *fromlen); 1241 1242 JNIEXPORT jint JNICALL 1243 JVM_SendTo(jint fd, char *buf, int len, 1244 int flags, struct sockaddr *to, int tolen); 1245 1246 JNIEXPORT jint JNICALL 1247 JVM_SocketAvailable(jint fd, jint *result); 1248 1249 1250 JNIEXPORT jint JNICALL 1251 JVM_GetSockName(jint fd, struct sockaddr *him, int *len); 1252 1253 JNIEXPORT jint JNICALL 1254 JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen); 1255 1256 JNIEXPORT jint JNICALL 1257 JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen); 1258 1259 JNIEXPORT int JNICALL 1260 JVM_GetHostName(char* name, int namelen); 1261 1262 /* 1263 * The standard printing functions supported by the Java VM. (Should they 1264 * be renamed to JVM_* in the future? 1265 */ 1266 1267 /* 1268 * BE CAREFUL! The following functions do not implement the 1269 * full feature set of standard C printf formats. 1270 */ 1271 int 1272 jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args); 1273 1274 int 1275 jio_snprintf(char *str, size_t count, const char *fmt, ...); 1276 1277 int 1278 jio_fprintf(FILE *, const char *fmt, ...); 1279 1280 int 1281 jio_vfprintf(FILE *, const char *fmt, va_list args); 1282 1283 1284 JNIEXPORT void * JNICALL 1285 JVM_RawMonitorCreate(void); 1286 1287 JNIEXPORT void JNICALL 1288 JVM_RawMonitorDestroy(void *mon); 1289 1290 JNIEXPORT jint JNICALL 1291 JVM_RawMonitorEnter(void *mon); 1292 1293 JNIEXPORT void JNICALL 1294 JVM_RawMonitorExit(void *mon); 1295 1296 /* 1297 * java.lang.management support 1298 */ 1299 JNIEXPORT void* JNICALL 1300 JVM_GetManagement(jint version); 1301 1302 /* 1303 * com.sun.tools.attach.VirtualMachine support 1304 * 1305 * Initialize the agent properties with the properties maintained in the VM. 1306 */ 1307 JNIEXPORT jobject JNICALL 1308 JVM_InitAgentProperties(JNIEnv *env, jobject agent_props); 1309 1310 /* Generics reflection support. 1311 * 1312 * Returns information about the given class's EnclosingMethod 1313 * attribute, if present, or null if the class had no enclosing 1314 * method. 1315 * 1316 * If non-null, the returned array contains three elements. Element 0 1317 * is the java.lang.Class of which the enclosing method is a member, 1318 * and elements 1 and 2 are the java.lang.Strings for the enclosing 1319 * method's name and descriptor, respectively. 1320 */ 1321 JNIEXPORT jobjectArray JNICALL 1322 JVM_GetEnclosingMethodInfo(JNIEnv* env, jclass ofClass); 1323 1324 /* 1325 * Java thread state support 1326 */ 1327 enum { 1328 JAVA_THREAD_STATE_NEW = 0, 1329 JAVA_THREAD_STATE_RUNNABLE = 1, 1330 JAVA_THREAD_STATE_BLOCKED = 2, 1331 JAVA_THREAD_STATE_WAITING = 3, 1332 JAVA_THREAD_STATE_TIMED_WAITING = 4, 1333 JAVA_THREAD_STATE_TERMINATED = 5, 1334 JAVA_THREAD_STATE_COUNT = 6 1335 }; 1336 1337 /* 1338 * Returns an array of the threadStatus values representing the 1339 * given Java thread state. Returns NULL if the VM version is 1340 * incompatible with the JDK or doesn't support the given 1341 * Java thread state. 1342 */ 1343 JNIEXPORT jintArray JNICALL 1344 JVM_GetThreadStateValues(JNIEnv* env, jint javaThreadState); 1345 1346 /* 1347 * Returns an array of the substate names representing the 1348 * given Java thread state. Returns NULL if the VM version is 1349 * incompatible with the JDK or the VM doesn't support 1350 * the given Java thread state. 1351 * values must be the jintArray returned from JVM_GetThreadStateValues 1352 * and javaThreadState. 1353 */ 1354 JNIEXPORT jobjectArray JNICALL 1355 JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values); 1356 1357 /* ========================================================================= 1358 * The following defines a private JVM interface that the JDK can query 1359 * for the JVM version and capabilities. sun.misc.Version defines 1360 * the methods for getting the VM version and its capabilities. 1361 * 1362 * When a new bit is added, the following should be updated to provide 1363 * access to the new capability: 1364 * HS: JVM_GetVersionInfo and Abstract_VM_Version class 1365 * SDK: Version class 1366 * 1367 * Similary, a private JDK interface JDK_GetVersionInfo0 is defined for 1368 * JVM to query for the JDK version and capabilities. 1369 * 1370 * When a new bit is added, the following should be updated to provide 1371 * access to the new capability: 1372 * HS: JDK_Version class 1373 * SDK: JDK_GetVersionInfo0 1374 * 1375 * ========================================================================== 1376 */ 1377 typedef struct { 1378 /* Naming convention of RE build version string: n.n.n[_uu[c]][-<identifier>]-bxx */ 1379 unsigned int jvm_version; /* Consists of major, minor, micro (n.n.n) */ 1380 /* and build number (xx) */ 1381 unsigned int update_version : 8; /* Update release version (uu) */ 1382 unsigned int special_update_version : 8; /* Special update release version (c)*/ 1383 unsigned int reserved1 : 16; 1384 unsigned int reserved2; 1385 1386 /* The following bits represents JVM supports that JDK has dependency on. 1387 * JDK can use these bits to determine which JVM version 1388 * and support it has to maintain runtime compatibility. 1389 * 1390 * When a new bit is added in a minor or update release, make sure 1391 * the new bit is also added in the main/baseline. 1392 */ 1393 unsigned int is_attach_supported : 1; 1394 unsigned int is_kernel_jvm : 1; 1395 unsigned int : 30; 1396 unsigned int : 32; 1397 unsigned int : 32; 1398 } jvm_version_info; 1399 1400 #define JVM_VERSION_MAJOR(version) (((version) & 0xFF000000) >> 24) 1401 #define JVM_VERSION_MINOR(version) (((version) & 0x00FF0000) >> 16) 1402 #define JVM_VERSION_MICRO(version) (((version) & 0x0000FF00) >> 8) 1403 1404 /* Build number is available only for RE builds. 1405 * It will be zero for internal builds. 1406 */ 1407 #define JVM_VERSION_BUILD(version) (((version) & 0x000000FF)) 1408 1409 JNIEXPORT void JNICALL 1410 JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size); 1411 1412 typedef struct { 1413 // Naming convention of RE build version string: n.n.n[_uu[c]][-<identifier>]-bxx 1414 unsigned int jdk_version; /* Consists of major, minor, micro (n.n.n) */ 1415 /* and build number (xx) */ 1416 unsigned int update_version : 8; /* Update release version (uu) */ 1417 unsigned int special_update_version : 8; /* Special update release version (c)*/ 1418 unsigned int reserved1 : 16; 1419 unsigned int reserved2; 1420 1421 /* The following bits represents new JDK supports that VM has dependency on. 1422 * VM implementation can use these bits to determine which JDK version 1423 * and support it has to maintain runtime compatibility. 1424 * 1425 * When a new bit is added in a minor or update release, make sure 1426 * the new bit is also added in the main/baseline. 1427 */ 1428 unsigned int thread_park_blocker : 1; 1429 unsigned int post_vm_init_hook_enabled : 1; 1430 unsigned int : 30; 1431 unsigned int : 32; 1432 unsigned int : 32; 1433 } jdk_version_info; 1434 1435 #define JDK_VERSION_MAJOR(version) (((version) & 0xFF000000) >> 24) 1436 #define JDK_VERSION_MINOR(version) (((version) & 0x00FF0000) >> 16) 1437 #define JDK_VERSION_MICRO(version) (((version) & 0x0000FF00) >> 8) 1438 1439 /* Build number is available only for RE build (i.e. JDK_BUILD_NUMBER is set to bNN) 1440 * It will be zero for internal builds. 1441 */ 1442 #define JDK_VERSION_BUILD(version) (((version) & 0x000000FF)) 1443 1444 /* 1445 * This is the function JDK_GetVersionInfo0 defined in libjava.so 1446 * that is dynamically looked up by JVM. 1447 */ 1448 typedef void (*jdk_version_info_fn_t)(jdk_version_info* info, size_t info_size); 1449 1450 /* 1451 * This structure is used by the launcher to get the default thread 1452 * stack size from the VM using JNI_GetDefaultJavaVMInitArgs() with a 1453 * version of 1.1. As it is not supported otherwise, it has been removed 1454 * from jni.h 1455 */ 1456 typedef struct JDK1_1InitArgs { 1457 jint version; 1458 1459 char **properties; 1460 jint checkSource; 1461 jint nativeStackSize; 1462 jint javaStackSize; 1463 jint minHeapSize; 1464 jint maxHeapSize; 1465 jint verifyMode; 1466 char *classpath; 1467 1468 jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args); 1469 void (JNICALL *exit)(jint code); 1470 void (JNICALL *abort)(void); 1471 1472 jint enableClassGC; 1473 jint enableVerboseGC; 1474 jint disableAsyncGC; 1475 jint verbose; 1476 jboolean debugging; 1477 jint debugPort; 1478 } JDK1_1InitArgs; 1479 1480 1481 #ifdef __cplusplus 1482 } /* extern "C" */ 1483 1484 #endif /* __cplusplus */ 1485 1486 #endif /* !_JAVASOFT_JVM_H_ */ 1487