source: trunk/icedtea-web/launcher/jvm.h@ 404

Last change on this file since 404 was 348, checked in by dmik, 13 years ago

vendor: Add icedtea-web v1.1.2 to current.

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