1 /* 2 * Copyright (c) 1997, 2025, 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 31 #include "jni.h" 32 #include "jvm_constants.h" 33 #include "jvm_io.h" 34 #include "jvm_md.h" 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 /* 41 * This file contains additional functions exported from the VM. 42 * These functions are complementary to the standard JNI support. 43 * There are three parts to this file: 44 * 45 * First, this file contains the VM-related functions needed by native 46 * libraries in the standard Java API. For example, the java.lang.Object 47 * class needs VM-level functions that wait for and notify monitors. 48 * 49 * Second, (included from jvm_constants.h) constant definitions 50 * needed by the byte code verifier and class file format checker. 51 * These definitions allow the verifier and format checker to be written 52 * in a VM-independent way. 53 * 54 * Third, this file contains various I/O and network operations needed 55 * by the standard Java I/O and network APIs. A part of these APIs, 56 * namely the jio_xxxprintf functions, are included from jvm_io.h. 57 */ 58 59 60 /************************************************************************* 61 PART 1: Functions for Native Libraries 62 ************************************************************************/ 63 /* 64 * java.lang.Object 65 */ 66 JNIEXPORT jint JNICALL 67 JVM_IHashCode(JNIEnv *env, jobject obj); 68 69 JNIEXPORT void JNICALL 70 JVM_MonitorWait(JNIEnv *env, jobject obj, jlong ms); 71 72 JNIEXPORT void JNICALL 73 JVM_MonitorNotify(JNIEnv *env, jobject obj); 74 75 JNIEXPORT void JNICALL 76 JVM_MonitorNotifyAll(JNIEnv *env, jobject obj); 77 78 JNIEXPORT jobject JNICALL 79 JVM_Clone(JNIEnv *env, jobject obj); 80 81 /* 82 * java.lang.String 83 */ 84 JNIEXPORT jstring JNICALL 85 JVM_InternString(JNIEnv *env, jstring str); 86 87 /* 88 * java.lang.System 89 */ 90 JNIEXPORT jlong JNICALL 91 JVM_CurrentTimeMillis(JNIEnv *env, jclass ignored); 92 93 JNIEXPORT jlong JNICALL 94 JVM_NanoTime(JNIEnv *env, jclass ignored); 95 96 JNIEXPORT jlong JNICALL 97 JVM_GetNanoTimeAdjustment(JNIEnv *env, jclass ignored, jlong offset_secs); 98 99 JNIEXPORT void JNICALL 100 JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos, 101 jobject dst, jint dst_pos, jint length); 102 103 /* 104 * Return an array of all properties as alternating name and value pairs. 105 */ 106 JNIEXPORT jobjectArray JNICALL 107 JVM_GetProperties(JNIEnv *env); 108 109 /* 110 * java.lang.Runtime 111 */ 112 JNIEXPORT void JNICALL 113 JVM_BeforeHalt(); 114 115 JNIEXPORT void JNICALL 116 JVM_Halt(jint code); 117 118 JNIEXPORT void JNICALL 119 JVM_GC(void); 120 121 /* Returns the number of real-time milliseconds that have elapsed since the 122 * least-recently-inspected heap object was last inspected by the garbage 123 * collector. 124 * 125 * For simple stop-the-world collectors this value is just the time 126 * since the most recent collection. For generational collectors it is the 127 * time since the oldest generation was most recently collected. Other 128 * collectors are free to return a pessimistic estimate of the elapsed time, or 129 * simply the time since the last full collection was performed. 130 * 131 * Note that in the presence of reference objects, a given object that is no 132 * longer strongly reachable may have to be inspected multiple times before it 133 * can be reclaimed. 134 */ 135 JNIEXPORT jlong JNICALL 136 JVM_MaxObjectInspectionAge(void); 137 138 JNIEXPORT jlong JNICALL 139 JVM_TotalMemory(void); 140 141 JNIEXPORT jlong JNICALL 142 JVM_FreeMemory(void); 143 144 JNIEXPORT jlong JNICALL 145 JVM_MaxMemory(void); 146 147 JNIEXPORT jint JNICALL 148 JVM_ActiveProcessorCount(void); 149 150 JNIEXPORT jboolean JNICALL 151 JVM_IsUseContainerSupport(void); 152 153 JNIEXPORT jboolean JNICALL 154 JVM_IsContainerized(void); 155 156 JNIEXPORT void * JNICALL 157 JVM_LoadZipLibrary(); 158 159 JNIEXPORT void * JNICALL 160 JVM_LoadLibrary(const char *name, jboolean throwException); 161 162 JNIEXPORT void JNICALL 163 JVM_UnloadLibrary(void * handle); 164 165 JNIEXPORT void * JNICALL 166 JVM_FindLibraryEntry(void *handle, const char *name); 167 168 JNIEXPORT jboolean JNICALL 169 JVM_IsSupportedJNIVersion(jint version); 170 171 JNIEXPORT jobjectArray JNICALL 172 JVM_GetVmArguments(JNIEnv *env); 173 174 JNIEXPORT jboolean JNICALL 175 JVM_IsPreviewEnabled(void); 176 177 JNIEXPORT jboolean JNICALL 178 JVM_IsValhallaEnabled(void); 179 180 JNIEXPORT jboolean JNICALL 181 JVM_IsContinuationsSupported(void); 182 183 JNIEXPORT jboolean JNICALL 184 JVM_IsForeignLinkerSupported(void); 185 186 JNIEXPORT jboolean JNICALL 187 JVM_IsStaticallyLinked(void); 188 189 JNIEXPORT void JNICALL 190 JVM_InitializeFromArchive(JNIEnv* env, jclass cls); 191 192 JNIEXPORT void JNICALL 193 JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env, jclass caller, 194 jstring interfaceMethodName, 195 jobject factoryType, 196 jobject interfaceMethodType, 197 jobject implementationMember, 198 jobject dynamicMethodType, 199 jclass lambdaProxyClass); 200 201 JNIEXPORT jclass JNICALL 202 JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env, jclass caller, 203 jstring interfaceMethodName, 204 jobject factoryType, 205 jobject interfaceMethodType, 206 jobject implementationMember, 207 jobject dynamicMethodType); 208 209 JNIEXPORT jint JNICALL 210 JVM_GetCDSConfigStatus(); 211 212 JNIEXPORT jlong JNICALL 213 JVM_GetRandomSeedForDumping(); 214 215 JNIEXPORT void JNICALL 216 JVM_LogLambdaFormInvoker(JNIEnv* env, jstring line); 217 218 JNIEXPORT void JNICALL 219 JVM_DumpClassListToFile(JNIEnv* env, jstring fileName); 220 221 JNIEXPORT void JNICALL 222 JVM_DumpDynamicArchive(JNIEnv* env, jstring archiveName); 223 224 JNIEXPORT jboolean JNICALL 225 JVM_NeedsClassInitBarrierForCDS(JNIEnv* env, jclass cls); 226 227 /* 228 * java.lang.Throwable 229 */ 230 JNIEXPORT void JNICALL 231 JVM_FillInStackTrace(JNIEnv *env, jobject throwable); 232 233 /* 234 * java.lang.StackTraceElement 235 */ 236 JNIEXPORT void JNICALL 237 JVM_InitStackTraceElementArray(JNIEnv *env, jobjectArray elements, jobject backtrace, jint depth); 238 239 JNIEXPORT void JNICALL 240 JVM_InitStackTraceElement(JNIEnv* env, jobject element, jobject stackFrameInfo); 241 242 /* 243 * java.lang.NullPointerException 244 */ 245 246 JNIEXPORT jstring JNICALL 247 JVM_GetExtendedNPEMessage(JNIEnv *env, jthrowable throwable); 248 249 /* 250 * java.lang.StackWalker 251 */ 252 enum { 253 JVM_STACKWALK_CLASS_INFO_ONLY = 0x2, 254 JVM_STACKWALK_SHOW_HIDDEN_FRAMES = 0x20, 255 JVM_STACKWALK_FILL_LIVE_STACK_FRAMES = 0x100 256 }; 257 258 JNIEXPORT void JNICALL 259 JVM_ExpandStackFrameInfo(JNIEnv *env, jobject obj); 260 261 JNIEXPORT jobject JNICALL 262 JVM_CallStackWalk(JNIEnv *env, jobject stackStream, jint mode, 263 jint skip_frames, jobject contScope, jobject cont, 264 jint buffer_size, jint start_index, jobjectArray frames); 265 266 JNIEXPORT jint JNICALL 267 JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jint mode, jlong anchor, 268 jint last_batch_count, jint buffer_size, jint start_index, 269 jobjectArray frames); 270 271 JNIEXPORT void JNICALL 272 JVM_SetStackWalkContinuation(JNIEnv *env, jobject stackStream, jlong anchor, jobjectArray frames, jobject cont); 273 274 /* 275 * java.lang.Thread 276 */ 277 JNIEXPORT void JNICALL 278 JVM_StartThread(JNIEnv *env, jobject thread); 279 280 JNIEXPORT void JNICALL 281 JVM_SetThreadPriority(JNIEnv *env, jobject thread, jint prio); 282 283 JNIEXPORT void JNICALL 284 JVM_Yield(JNIEnv *env, jclass threadClass); 285 286 JNIEXPORT void JNICALL 287 JVM_SleepNanos(JNIEnv *env, jclass threadClass, jlong nanos); 288 289 JNIEXPORT jobject JNICALL 290 JVM_CurrentCarrierThread(JNIEnv *env, jclass threadClass); 291 292 JNIEXPORT jobject JNICALL 293 JVM_CurrentThread(JNIEnv *env, jclass threadClass); 294 295 JNIEXPORT void JNICALL 296 JVM_SetCurrentThread(JNIEnv *env, jobject thisThread, jobject theThread); 297 298 JNIEXPORT void JNICALL 299 JVM_Interrupt(JNIEnv *env, jobject thread); 300 301 JNIEXPORT jboolean JNICALL 302 JVM_HoldsLock(JNIEnv *env, jclass threadClass, jobject obj); 303 304 JNIEXPORT jobject JNICALL 305 JVM_GetStackTrace(JNIEnv *env, jobject thread); 306 307 JNIEXPORT jobject JNICALL 308 JVM_CreateThreadSnapshot(JNIEnv* env, jobject thread); 309 310 JNIEXPORT jobjectArray JNICALL 311 JVM_GetAllThreads(JNIEnv *env, jclass dummy); 312 313 JNIEXPORT void JNICALL 314 JVM_SetNativeThreadName(JNIEnv *env, jobject jthread, jstring name); 315 316 /* getStackTrace() and getAllStackTraces() method */ 317 JNIEXPORT jobjectArray JNICALL 318 JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads); 319 320 JNIEXPORT jobject JNICALL 321 JVM_ScopedValueCache(JNIEnv *env, jclass threadClass); 322 323 JNIEXPORT void JNICALL 324 JVM_SetScopedValueCache(JNIEnv *env, jclass threadClass, jobject theCache); 325 326 JNIEXPORT jobject JNICALL 327 JVM_FindScopedValueBindings(JNIEnv *env, jclass threadClass); 328 329 JNIEXPORT jlong JNICALL 330 JVM_GetNextThreadIdOffset(JNIEnv *env, jclass threadClass); 331 332 /* 333 * jdk.internal.vm.Continuation 334 */ 335 JNIEXPORT void JNICALL 336 JVM_RegisterContinuationMethods(JNIEnv *env, jclass cls); 337 338 /* 339 * java.lang.Package 340 */ 341 JNIEXPORT jstring JNICALL 342 JVM_GetSystemPackage(JNIEnv *env, jstring name); 343 344 JNIEXPORT jobjectArray JNICALL 345 JVM_GetSystemPackages(JNIEnv *env); 346 347 /* 348 * java.lang.ref.Reference 349 */ 350 JNIEXPORT jobject JNICALL 351 JVM_GetAndClearReferencePendingList(JNIEnv *env); 352 353 JNIEXPORT jboolean JNICALL 354 JVM_HasReferencePendingList(JNIEnv *env); 355 356 JNIEXPORT void JNICALL 357 JVM_WaitForReferencePendingList(JNIEnv *env); 358 359 JNIEXPORT jobject JNICALL 360 JVM_ReferenceGet(JNIEnv *env, jobject ref); 361 362 JNIEXPORT jboolean JNICALL 363 JVM_ReferenceRefersTo(JNIEnv *env, jobject ref, jobject o); 364 365 JNIEXPORT void JNICALL 366 JVM_ReferenceClear(JNIEnv *env, jobject ref); 367 368 /* 369 * java.lang.ref.PhantomReference 370 */ 371 JNIEXPORT jboolean JNICALL 372 JVM_PhantomReferenceRefersTo(JNIEnv *env, jobject ref, jobject o); 373 374 /* 375 * java.io.ObjectInputStream 376 */ 377 JNIEXPORT jobject JNICALL 378 JVM_LatestUserDefinedLoader(JNIEnv *env); 379 380 /* 381 * java.lang.reflect.Array 382 */ 383 JNIEXPORT jint JNICALL 384 JVM_GetArrayLength(JNIEnv *env, jobject arr); 385 386 JNIEXPORT jobject JNICALL 387 JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index); 388 389 JNIEXPORT jvalue JNICALL 390 JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode); 391 392 JNIEXPORT void JNICALL 393 JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val); 394 395 JNIEXPORT void JNICALL 396 JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, 397 unsigned char vCode); 398 399 JNIEXPORT jobject JNICALL 400 JVM_NewArray(JNIEnv *env, jclass eltClass, jint length); 401 402 JNIEXPORT jobject JNICALL 403 JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim); 404 405 406 /* 407 * Returns the immediate caller class of the native method invoking 408 * JVM_GetCallerClass. The Method.invoke and other frames due to 409 * reflection machinery are skipped. 410 * 411 * The caller is expected to be marked with 412 * jdk.internal.reflect.CallerSensitive. The JVM will throw an 413 * error if it is not marked properly. 414 */ 415 JNIEXPORT jclass JNICALL 416 JVM_GetCallerClass(JNIEnv *env); 417 418 419 /* 420 * Find primitive classes 421 * utf: class name 422 */ 423 JNIEXPORT jclass JNICALL 424 JVM_FindPrimitiveClass(JNIEnv *env, const char *utf); 425 426 427 /* 428 * Find a class from a boot class loader. Returns null if class not found. 429 */ 430 JNIEXPORT jclass JNICALL 431 JVM_FindClassFromBootLoader(JNIEnv *env, const char *name); 432 433 /* 434 * Find a class from a given class loader. Throws ClassNotFoundException. 435 * name: name of class 436 * init: whether initialization is done 437 * loader: class loader to look up the class. This may not be the same as the caller's 438 * class loader. 439 * caller: initiating class. The initiating class may be null when a security 440 * manager is not installed. 441 */ 442 JNIEXPORT jclass JNICALL 443 JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, 444 jobject loader, jclass caller); 445 446 /* 447 * Find a class from a given class. 448 */ 449 JNIEXPORT jclass JNICALL 450 JVM_FindClassFromClass(JNIEnv *env, const char *name, jboolean init, 451 jclass from); 452 453 /* Find a loaded class cached by the VM */ 454 JNIEXPORT jclass JNICALL 455 JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name); 456 457 /* Define a class */ 458 JNIEXPORT jclass JNICALL 459 JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, 460 jsize len, jobject pd); 461 462 /* Define a class with a source (added in JDK1.5) */ 463 JNIEXPORT jclass JNICALL 464 JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, 465 const jbyte *buf, jsize len, jobject pd, 466 const char *source); 467 468 /* 469 * Define a class with the specified lookup class. 470 * lookup: Lookup class 471 * name: the name of the class 472 * buf: class bytes 473 * len: length of class bytes 474 * pd: protection domain 475 * init: initialize the class 476 * flags: properties of the class 477 * classData: private static pre-initialized field; may be null 478 */ 479 JNIEXPORT jclass JNICALL 480 JVM_LookupDefineClass(JNIEnv *env, jclass lookup, const char *name, const jbyte *buf, 481 jsize len, jobject pd, jboolean init, int flags, jobject classData); 482 483 /* 484 * Module support functions 485 */ 486 487 /* 488 * Define a module with the specified packages and bind the module to the 489 * given class loader. 490 * module: module to define 491 * is_open: specifies if module is open (currently ignored) 492 * version: the module version 493 * location: the module location 494 * packages: array of packages in the module 495 */ 496 JNIEXPORT void JNICALL 497 JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version, 498 jstring location, jobjectArray packages); 499 500 /* 501 * Set the boot loader's unnamed module. 502 * module: boot loader's unnamed module 503 */ 504 JNIEXPORT void JNICALL 505 JVM_SetBootLoaderUnnamedModule(JNIEnv *env, jobject module); 506 507 /* 508 * Do a qualified export of a package. 509 * from_module: module containing the package to export 510 * package: name of the package to export 511 * to_module: module to export the package to 512 */ 513 JNIEXPORT void JNICALL 514 JVM_AddModuleExports(JNIEnv *env, jobject from_module, jstring package, jobject to_module); 515 516 /* 517 * Do an export of a package to all unnamed modules. 518 * from_module: module containing the package to export 519 * package: name of the package to export to all unnamed modules 520 */ 521 JNIEXPORT void JNICALL 522 JVM_AddModuleExportsToAllUnnamed(JNIEnv *env, jobject from_module, jstring package); 523 524 /* 525 * Do an unqualified export of a package. 526 * from_module: module containing the package to export 527 * package: name of the package to export 528 */ 529 JNIEXPORT void JNICALL 530 JVM_AddModuleExportsToAll(JNIEnv *env, jobject from_module, jstring package); 531 532 /* 533 * Add a module to the list of modules that a given module can read. 534 * from_module: module requesting read access 535 * source_module: module that from_module wants to read 536 */ 537 JNIEXPORT void JNICALL 538 JVM_AddReadsModule(JNIEnv *env, jobject from_module, jobject source_module); 539 540 /* 541 * Define all modules that have been stored in the CDS archived heap. 542 * platform_loader: the built-in platform class loader 543 * system_loader: the built-in system class loader 544 */ 545 JNIEXPORT void JNICALL 546 JVM_DefineArchivedModules(JNIEnv *env, jobject platform_loader, jobject system_loader); 547 548 /* 549 * Reflection support functions 550 */ 551 552 JNIEXPORT jstring JNICALL 553 JVM_InitClassName(JNIEnv *env, jclass cls); 554 555 JNIEXPORT jobjectArray JNICALL 556 JVM_GetClassInterfaces(JNIEnv *env, jclass cls); 557 558 JNIEXPORT jboolean JNICALL 559 JVM_IsInterface(JNIEnv *env, jclass cls); 560 561 JNIEXPORT jboolean JNICALL 562 JVM_IsHiddenClass(JNIEnv *env, jclass cls); 563 564 JNIEXPORT jboolean JNICALL 565 JVM_IsIdentityClass(JNIEnv *env, jclass cls); 566 567 JNIEXPORT jobjectArray JNICALL 568 JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass); 569 570 JNIEXPORT jclass JNICALL 571 JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass); 572 573 JNIEXPORT jstring JNICALL 574 JVM_GetSimpleBinaryName(JNIEnv *env, jclass ofClass); 575 576 /* Generics support (JDK 1.5) */ 577 JNIEXPORT jstring JNICALL 578 JVM_GetClassSignature(JNIEnv *env, jclass cls); 579 580 /* Annotations support (JDK 1.5) */ 581 JNIEXPORT jbyteArray JNICALL 582 JVM_GetClassAnnotations(JNIEnv *env, jclass cls); 583 584 /* Type use annotations support (JDK 1.8) */ 585 586 JNIEXPORT jbyteArray JNICALL 587 JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls); 588 589 JNIEXPORT jbyteArray JNICALL 590 JVM_GetFieldTypeAnnotations(JNIEnv *env, jobject field); 591 592 JNIEXPORT jbyteArray JNICALL 593 JVM_GetMethodTypeAnnotations(JNIEnv *env, jobject method); 594 595 /* 596 * New (JDK 1.4) reflection implementation 597 */ 598 599 JNIEXPORT jobjectArray JNICALL 600 JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly); 601 602 JNIEXPORT jobjectArray JNICALL 603 JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly); 604 605 JNIEXPORT jobjectArray JNICALL 606 JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly); 607 608 /* Nestmates - since JDK 11 */ 609 610 JNIEXPORT jboolean JNICALL 611 JVM_AreNestMates(JNIEnv *env, jclass current, jclass member); 612 613 JNIEXPORT jclass JNICALL 614 JVM_GetNestHost(JNIEnv *env, jclass current); 615 616 JNIEXPORT jobjectArray JNICALL 617 JVM_GetNestMembers(JNIEnv *env, jclass current); 618 619 /* Records - since JDK 16 */ 620 621 JNIEXPORT jboolean JNICALL 622 JVM_IsRecord(JNIEnv *env, jclass cls); 623 624 JNIEXPORT jobjectArray JNICALL 625 JVM_GetRecordComponents(JNIEnv *env, jclass ofClass); 626 627 /* Sealed classes - since JDK 17 */ 628 629 JNIEXPORT jobjectArray JNICALL 630 JVM_GetPermittedSubclasses(JNIEnv *env, jclass current); 631 632 /* The following two reflection routines are still needed due to startup time issues */ 633 /* 634 * java.lang.reflect.Method 635 */ 636 JNIEXPORT jobject JNICALL 637 JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0); 638 639 /* 640 * java.lang.reflect.Constructor 641 */ 642 JNIEXPORT jobject JNICALL 643 JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0); 644 645 /* 646 * Constant pool access; currently used to implement reflective access to annotations (JDK 1.5) 647 */ 648 649 JNIEXPORT jobject JNICALL 650 JVM_GetClassConstantPool(JNIEnv *env, jclass cls); 651 652 JNIEXPORT jint JNICALL JVM_ConstantPoolGetSize 653 (JNIEnv *env, jobject jcpool); 654 655 JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAt 656 (JNIEnv *env, jobject jcpool, jint index); 657 658 JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAtIfLoaded 659 (JNIEnv *env, jobject jcpool, jint index); 660 661 JNIEXPORT jint JNICALL JVM_ConstantPoolGetClassRefIndexAt 662 (JNIEnv *env, jobject jcpool, jint index); 663 664 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAt 665 (JNIEnv *env, jobject jcpool, jint index); 666 667 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAtIfLoaded 668 (JNIEnv *env, jobject jcpool, jint index); 669 670 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAt 671 (JNIEnv *env, jobject jcpool, jint index); 672 673 JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAtIfLoaded 674 (JNIEnv *env, jobject jcpool, jint index); 675 676 JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetMemberRefInfoAt 677 (JNIEnv *env, jobject jcpool, jint index); 678 679 JNIEXPORT jint JNICALL JVM_ConstantPoolGetNameAndTypeRefIndexAt 680 (JNIEnv *env, jobject jcpool, jint index); 681 682 JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetNameAndTypeRefInfoAt 683 (JNIEnv *env, jobject jcpool, jint index); 684 685 JNIEXPORT jint JNICALL JVM_ConstantPoolGetIntAt 686 (JNIEnv *env, jobject jcpool, jint index); 687 688 JNIEXPORT jlong JNICALL JVM_ConstantPoolGetLongAt 689 (JNIEnv *env, jobject jcpool, jint index); 690 691 JNIEXPORT jfloat JNICALL JVM_ConstantPoolGetFloatAt 692 (JNIEnv *env, jobject jcpool, jint index); 693 694 JNIEXPORT jdouble JNICALL JVM_ConstantPoolGetDoubleAt 695 (JNIEnv *env, jobject jcpool, jint index); 696 697 JNIEXPORT jstring JNICALL JVM_ConstantPoolGetStringAt 698 (JNIEnv *env, jobject jcpool, jint index); 699 700 JNIEXPORT jstring JNICALL JVM_ConstantPoolGetUTF8At 701 (JNIEnv *env, jobject jcpool, jint index); 702 703 JNIEXPORT jbyte JNICALL JVM_ConstantPoolGetTagAt 704 (JNIEnv *env, jobject jcpool, jint index); 705 706 /* 707 * Parameter reflection 708 */ 709 710 JNIEXPORT jobjectArray JNICALL 711 JVM_GetMethodParameters(JNIEnv *env, jobject method); 712 713 /* 714 * Ensure that code doing a stackwalk and using javaVFrame::locals() to 715 * get the value will see a materialized value and not a scalar-replaced 716 * null value. 717 */ 718 #define JVM_EnsureMaterializedForStackWalk(env, value) \ 719 do {} while(0) // Nothing to do. The fact that the value escaped 720 // through a native method is enough. 721 JNIEXPORT void JNICALL 722 JVM_EnsureMaterializedForStackWalk_func(JNIEnv* env, jobject vthread, jobject value); 723 724 /* 725 * Signal support, used to implement the shutdown sequence. Every VM must 726 * support JVM_SIGINT and JVM_SIGTERM, raising the former for user interrupts 727 * (^C) and the latter for external termination (kill, system shutdown, etc.). 728 * Other platform-dependent signal values may also be supported. 729 */ 730 731 JNIEXPORT void * JNICALL 732 JVM_RegisterSignal(jint sig, void *handler); 733 734 JNIEXPORT jboolean JNICALL 735 JVM_RaiseSignal(jint sig); 736 737 JNIEXPORT jint JNICALL 738 JVM_FindSignal(const char *name); 739 740 /* 741 * Retrieve the assertion directives for the specified class. 742 */ 743 JNIEXPORT jboolean JNICALL 744 JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls); 745 746 /* 747 * Retrieve the assertion directives from the VM. 748 */ 749 JNIEXPORT jobject JNICALL 750 JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused); 751 752 /* 753 * java.lang.ref.Finalizer 754 */ 755 JNIEXPORT void JNICALL 756 JVM_ReportFinalizationComplete(JNIEnv *env, jobject finalizee); 757 758 JNIEXPORT jboolean JNICALL 759 JVM_IsFinalizationEnabled(JNIEnv *env); 760 761 /************************************************************************* 762 PART 2: Support for the Verifier and Class File Format Checker 763 ************************************************************************/ 764 /* 765 * Return the class name in UTF format. The result is valid 766 * until JVM_ReleaseUTf is called. 767 * 768 * The caller must treat the string as a constant and not modify it 769 * in any way. 770 */ 771 JNIEXPORT const char * JNICALL 772 JVM_GetClassNameUTF(JNIEnv *env, jclass cb); 773 774 /* 775 * Returns the constant pool types in the buffer provided by "types." 776 */ 777 JNIEXPORT void JNICALL 778 JVM_GetClassCPTypes(JNIEnv *env, jclass cb, unsigned char *types); 779 780 /* 781 * Returns the number of Constant Pool entries. 782 */ 783 JNIEXPORT jint JNICALL 784 JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cb); 785 786 /* 787 * Returns the number of *declared* fields or methods. 788 */ 789 JNIEXPORT jint JNICALL 790 JVM_GetClassFieldsCount(JNIEnv *env, jclass cb); 791 792 JNIEXPORT jint JNICALL 793 JVM_GetClassMethodsCount(JNIEnv *env, jclass cb); 794 795 /* 796 * Returns the CP indexes of exceptions raised by a given method. 797 * Places the result in the given buffer. 798 * 799 * The method is identified by method_index. 800 */ 801 JNIEXPORT void JNICALL 802 JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cb, jint method_index, 803 unsigned short *exceptions); 804 /* 805 * Returns the number of exceptions raised by a given method. 806 * The method is identified by method_index. 807 */ 808 JNIEXPORT jint JNICALL 809 JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cb, jint method_index); 810 811 /* 812 * Returns the byte code sequence of a given method. 813 * Places the result in the given buffer. 814 * 815 * The method is identified by method_index. 816 */ 817 JNIEXPORT void JNICALL 818 JVM_GetMethodIxByteCode(JNIEnv *env, jclass cb, jint method_index, 819 unsigned char *code); 820 821 /* 822 * Returns the length of the byte code sequence of a given method. 823 * The method is identified by method_index. 824 */ 825 JNIEXPORT jint JNICALL 826 JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cb, jint method_index); 827 828 /* 829 * A structure used to a capture exception table entry in a Java method. 830 */ 831 typedef struct { 832 jint start_pc; 833 jint end_pc; 834 jint handler_pc; 835 jint catchType; 836 } JVM_ExceptionTableEntryType; 837 838 /* 839 * Returns the exception table entry at entry_index of a given method. 840 * Places the result in the given buffer. 841 * 842 * The method is identified by method_index. 843 */ 844 JNIEXPORT void JNICALL 845 JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cb, jint method_index, 846 jint entry_index, 847 JVM_ExceptionTableEntryType *entry); 848 849 /* 850 * Returns the length of the exception table of a given method. 851 * The method is identified by method_index. 852 */ 853 JNIEXPORT jint JNICALL 854 JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cb, int index); 855 856 /* 857 * Returns the modifiers of a given field. 858 * The field is identified by field_index. 859 */ 860 JNIEXPORT jint JNICALL 861 JVM_GetFieldIxModifiers(JNIEnv *env, jclass cb, int index); 862 863 /* 864 * Returns the modifiers of a given method. 865 * The method is identified by method_index. 866 */ 867 JNIEXPORT jint JNICALL 868 JVM_GetMethodIxModifiers(JNIEnv *env, jclass cb, int index); 869 870 /* 871 * Returns the number of local variables of a given method. 872 * The method is identified by method_index. 873 */ 874 JNIEXPORT jint JNICALL 875 JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cb, int index); 876 877 /* 878 * Returns the number of arguments (including this pointer) of a given method. 879 * The method is identified by method_index. 880 */ 881 JNIEXPORT jint JNICALL 882 JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cb, int index); 883 884 /* 885 * Returns the maximum amount of stack (in words) used by a given method. 886 * The method is identified by method_index. 887 */ 888 JNIEXPORT jint JNICALL 889 JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cb, int index); 890 891 /* 892 * Is a given method a constructor. 893 * The method is identified by method_index. 894 */ 895 JNIEXPORT jboolean JNICALL 896 JVM_IsConstructorIx(JNIEnv *env, jclass cb, int index); 897 898 /* 899 * Is the given method generated by the VM. 900 * The method is identified by method_index. 901 */ 902 JNIEXPORT jboolean JNICALL 903 JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cb, int index); 904 905 /* 906 * Returns the name of a given method in UTF format. 907 * The result remains valid until JVM_ReleaseUTF is called. 908 * 909 * The caller must treat the string as a constant and not modify it 910 * in any way. 911 */ 912 JNIEXPORT const char * JNICALL 913 JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cb, jint index); 914 915 /* 916 * Returns the signature of a given method in UTF format. 917 * The result remains valid until JVM_ReleaseUTF is called. 918 * 919 * The caller must treat the string as a constant and not modify it 920 * in any way. 921 */ 922 JNIEXPORT const char * JNICALL 923 JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cb, jint index); 924 925 /* 926 * Returns the name of the field referred to at a given constant pool 927 * index. 928 * 929 * The result is in UTF format and remains valid until JVM_ReleaseUTF 930 * is called. 931 * 932 * The caller must treat the string as a constant and not modify it 933 * in any way. 934 */ 935 JNIEXPORT const char * JNICALL 936 JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cb, jint index); 937 938 /* 939 * Returns the name of the method referred to at a given constant pool 940 * index. 941 * 942 * The result is in UTF format and remains valid until JVM_ReleaseUTF 943 * is called. 944 * 945 * The caller must treat the string as a constant and not modify it 946 * in any way. 947 */ 948 JNIEXPORT const char * JNICALL 949 JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cb, jint index); 950 951 /* 952 * Returns the signature of the method referred to at a given constant pool 953 * index. 954 * 955 * The result is in UTF format and remains valid until JVM_ReleaseUTF 956 * is called. 957 * 958 * The caller must treat the string as a constant and not modify it 959 * in any way. 960 */ 961 JNIEXPORT const char * JNICALL 962 JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cb, jint index); 963 964 /* 965 * Returns the signature of the field referred to at a given constant pool 966 * index. 967 * 968 * The result is in UTF format and remains valid until JVM_ReleaseUTF 969 * is called. 970 * 971 * The caller must treat the string as a constant and not modify it 972 * in any way. 973 */ 974 JNIEXPORT const char * JNICALL 975 JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cb, jint index); 976 977 /* 978 * Returns the class name referred to at a given constant pool index. 979 * 980 * The result is in UTF format and remains valid until JVM_ReleaseUTF 981 * is called. 982 * 983 * The caller must treat the string as a constant and not modify it 984 * in any way. 985 */ 986 JNIEXPORT const char * JNICALL 987 JVM_GetCPClassNameUTF(JNIEnv *env, jclass cb, jint index); 988 989 /* 990 * Returns the class name referred to at a given constant pool index. 991 * 992 * The constant pool entry must refer to a CONSTANT_Fieldref. 993 * 994 * The result is in UTF format and remains valid until JVM_ReleaseUTF 995 * is called. 996 * 997 * The caller must treat the string as a constant and not modify it 998 * in any way. 999 */ 1000 JNIEXPORT const char * JNICALL 1001 JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cb, jint index); 1002 1003 /* 1004 * Returns the class name referred to at a given constant pool index. 1005 * 1006 * The constant pool entry must refer to CONSTANT_Methodref or 1007 * CONSTANT_InterfaceMethodref. 1008 * 1009 * The result is in UTF format and remains valid until JVM_ReleaseUTF 1010 * is called. 1011 * 1012 * The caller must treat the string as a constant and not modify it 1013 * in any way. 1014 */ 1015 JNIEXPORT const char * JNICALL 1016 JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cb, jint index); 1017 1018 /* 1019 * Returns the modifiers of a field in calledClass. The field is 1020 * referred to in class cb at constant pool entry index. 1021 * 1022 * The caller must treat the string as a constant and not modify it 1023 * in any way. 1024 * 1025 * Returns -1 if the field does not exist in calledClass. 1026 */ 1027 JNIEXPORT jint JNICALL 1028 JVM_GetCPFieldModifiers(JNIEnv *env, jclass cb, int index, jclass calledClass); 1029 1030 /* 1031 * Returns the modifiers of a method in calledClass. The method is 1032 * referred to in class cb at constant pool entry index. 1033 * 1034 * Returns -1 if the method does not exist in calledClass. 1035 */ 1036 JNIEXPORT jint JNICALL 1037 JVM_GetCPMethodModifiers(JNIEnv *env, jclass cb, int index, jclass calledClass); 1038 1039 /* 1040 * Releases the UTF string obtained from the VM. 1041 */ 1042 JNIEXPORT void JNICALL 1043 JVM_ReleaseUTF(const char *utf); 1044 1045 /* 1046 * Compare if two classes are in the same package. 1047 */ 1048 JNIEXPORT jboolean JNICALL 1049 JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2); 1050 1051 1052 /************************************************************************* 1053 PART 3: I/O and Network Support 1054 ************************************************************************/ 1055 1056 /* 1057 * Convert a pathname into native format. This function does syntactic 1058 * cleanup, such as removing redundant separator characters. It modifies 1059 * the given pathname string in place. 1060 */ 1061 JNIEXPORT char * JNICALL 1062 JVM_NativePath(char *); 1063 1064 JNIEXPORT void * JNICALL 1065 JVM_RawMonitorCreate(void); 1066 1067 JNIEXPORT void JNICALL 1068 JVM_RawMonitorDestroy(void *mon); 1069 1070 JNIEXPORT jint JNICALL 1071 JVM_RawMonitorEnter(void *mon); 1072 1073 JNIEXPORT void JNICALL 1074 JVM_RawMonitorExit(void *mon); 1075 1076 /* 1077 * java.lang.management support 1078 */ 1079 JNIEXPORT void* JNICALL 1080 JVM_GetManagement(jint version); 1081 1082 /* 1083 * com.sun.tools.attach.VirtualMachine support 1084 * 1085 * Initialize the agent properties with the properties maintained in the VM. 1086 */ 1087 JNIEXPORT jobject JNICALL 1088 JVM_InitAgentProperties(JNIEnv *env, jobject agent_props); 1089 1090 JNIEXPORT jstring JNICALL 1091 JVM_GetTemporaryDirectory(JNIEnv *env); 1092 1093 JNIEXPORT jarray JNICALL 1094 JVM_CopyOfSpecialArray(JNIEnv *env, jarray orig, jint from, jint to); 1095 1096 JNIEXPORT jarray JNICALL 1097 JVM_NewNullRestrictedNonAtomicArray(JNIEnv *env, jclass elmClass, jint len, jobject initVal); 1098 1099 JNIEXPORT jarray JNICALL 1100 JVM_NewNullRestrictedAtomicArray(JNIEnv *env, jclass elmClass, jint len, jobject initVal); 1101 1102 JNIEXPORT jarray JNICALL 1103 JVM_NewNullableAtomicArray(JNIEnv *env, jclass elmClass, jint len); 1104 1105 JNIEXPORT jboolean JNICALL 1106 JVM_IsFlatArray(JNIEnv *env, jobject obj); 1107 1108 JNIEXPORT jboolean JNICALL 1109 JVM_IsNullRestrictedArray(JNIEnv *env, jobject obj); 1110 1111 JNIEXPORT jboolean JNICALL 1112 JVM_IsAtomicArray(JNIEnv *env, jobject obj); 1113 1114 /* Generics reflection support. 1115 * 1116 * Returns information about the given class's EnclosingMethod 1117 * attribute, if present, or null if the class had no enclosing 1118 * method. 1119 * 1120 * If non-null, the returned array contains three elements. Element 0 1121 * is the java.lang.Class of which the enclosing method is a member, 1122 * and elements 1 and 2 are the java.lang.Strings for the enclosing 1123 * method's name and descriptor, respectively. 1124 */ 1125 JNIEXPORT jobjectArray JNICALL 1126 JVM_GetEnclosingMethodInfo(JNIEnv* env, jclass ofClass); 1127 1128 /* 1129 * Virtual thread support. 1130 */ 1131 JNIEXPORT void JNICALL 1132 JVM_VirtualThreadStart(JNIEnv* env, jobject vthread); 1133 1134 JNIEXPORT void JNICALL 1135 JVM_VirtualThreadEnd(JNIEnv* env, jobject vthread); 1136 1137 JNIEXPORT void JNICALL 1138 JVM_VirtualThreadMount(JNIEnv* env, jobject vthread, jboolean hide); 1139 1140 JNIEXPORT void JNICALL 1141 JVM_VirtualThreadUnmount(JNIEnv* env, jobject vthread, jboolean hide); 1142 1143 JNIEXPORT void JNICALL 1144 JVM_VirtualThreadDisableSuspend(JNIEnv* env, jclass clazz, jboolean enter); 1145 1146 JNIEXPORT void JNICALL 1147 JVM_VirtualThreadPinnedEvent(JNIEnv* env, jclass clazz, jstring op); 1148 1149 JNIEXPORT jobject JNICALL 1150 JVM_TakeVirtualThreadListToUnblock(JNIEnv* env, jclass ignored); 1151 1152 /* 1153 * Core reflection support. 1154 */ 1155 JNIEXPORT jint JNICALL 1156 JVM_GetClassFileVersion(JNIEnv *env, jclass current); 1157 1158 /* 1159 * Return JNI_TRUE if warnings are printed when agents are dynamically loaded. 1160 */ 1161 JNIEXPORT jboolean JNICALL 1162 JVM_PrintWarningAtDynamicAgentLoad(void); 1163 1164 /* 1165 * This structure is used by the launcher to get the default thread 1166 * stack size from the VM using JNI_GetDefaultJavaVMInitArgs() with a 1167 * version of 1.1. As it is not supported otherwise, it has been removed 1168 * from jni.h 1169 */ 1170 typedef struct JDK1_1InitArgs { 1171 jint version; 1172 1173 char **properties; 1174 jint checkSource; 1175 jint nativeStackSize; 1176 jint javaStackSize; 1177 jint minHeapSize; 1178 jint maxHeapSize; 1179 jint verifyMode; 1180 char *classpath; 1181 1182 jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args); 1183 void (JNICALL *exit)(jint code); 1184 void (JNICALL *abort)(void); 1185 1186 jint enableClassGC; 1187 jint enableVerboseGC; 1188 jint disableAsyncGC; 1189 jint verbose; 1190 jboolean debugging; 1191 jint debugPort; 1192 } JDK1_1InitArgs; 1193 1194 1195 #ifdef __cplusplus 1196 } /* extern "C" */ 1197 1198 #endif /* __cplusplus */ 1199 1200 #endif /* !_JAVASOFT_JVM_H_ */