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