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