| 1 | // jvm.h - Header file for private implementation information. -*- c++ -*-
|
|---|
| 2 |
|
|---|
| 3 | /* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
|
|---|
| 4 |
|
|---|
| 5 | This file is part of libgcj.
|
|---|
| 6 |
|
|---|
| 7 | This software is copyrighted work licensed under the terms of the
|
|---|
| 8 | Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
|---|
| 9 | details. */
|
|---|
| 10 |
|
|---|
| 11 | #ifndef __JAVA_JVM_H__
|
|---|
| 12 | #define __JAVA_JVM_H__
|
|---|
| 13 |
|
|---|
| 14 | // Define this before including jni.h.
|
|---|
| 15 | // jni.h is included by jvmpi.h, which might be included. We define
|
|---|
| 16 | // this unconditionally because it is convenient and it lets other
|
|---|
| 17 | // files include jni.h without difficulty.
|
|---|
| 18 | #define __GCJ_JNI_IMPL__
|
|---|
| 19 |
|
|---|
| 20 | #include <gcj/javaprims.h>
|
|---|
| 21 |
|
|---|
| 22 | #include <java-assert.h>
|
|---|
| 23 | #include <java-threads.h>
|
|---|
| 24 | // Must include java-gc.h before Object.h for the implementation.
|
|---|
| 25 | #include <java-gc.h>
|
|---|
| 26 |
|
|---|
| 27 | #include <java/lang/Object.h>
|
|---|
| 28 |
|
|---|
| 29 | // Include cni.h before field.h to enable all definitions. FIXME.
|
|---|
| 30 | #include <gcj/cni.h>
|
|---|
| 31 | #include <gcj/field.h>
|
|---|
| 32 |
|
|---|
| 33 | /* Structure of the virtual table. */
|
|---|
| 34 | struct _Jv_VTable
|
|---|
| 35 | {
|
|---|
| 36 | #ifdef __ia64__
|
|---|
| 37 | typedef struct { void *pc, *gp; } vtable_elt;
|
|---|
| 38 | #else
|
|---|
| 39 | typedef void *vtable_elt;
|
|---|
| 40 | #endif
|
|---|
| 41 | jclass clas;
|
|---|
| 42 | void *gc_descr;
|
|---|
| 43 |
|
|---|
| 44 | // This must be last, as derived classes "extend" this by
|
|---|
| 45 | // adding new data members.
|
|---|
| 46 | vtable_elt method[1];
|
|---|
| 47 |
|
|---|
| 48 | #ifdef __ia64__
|
|---|
| 49 | void *get_method(int i) { return &method[i]; }
|
|---|
| 50 | void set_method(int i, void *fptr) { method[i] = *(vtable_elt *)fptr; }
|
|---|
| 51 | void *get_finalizer()
|
|---|
| 52 | {
|
|---|
| 53 | // We know that get_finalizer is only used for checking whether
|
|---|
| 54 | // this object needs to have a finalizer registered. So it is
|
|---|
| 55 | // safe to simply return just the PC component of the vtable
|
|---|
| 56 | // slot.
|
|---|
| 57 | return ((vtable_elt *)(get_method(0)))->pc;
|
|---|
| 58 | }
|
|---|
| 59 | #else
|
|---|
| 60 | void *get_method(int i) { return method[i]; }
|
|---|
| 61 | void set_method(int i, void *fptr) { method[i] = fptr; }
|
|---|
| 62 | void *get_finalizer() { return get_method(0); }
|
|---|
| 63 | #endif
|
|---|
| 64 |
|
|---|
| 65 | static size_t vtable_elt_size() { return sizeof(vtable_elt); }
|
|---|
| 66 |
|
|---|
| 67 | // Given a method index, return byte offset from the vtable pointer.
|
|---|
| 68 | static jint idx_to_offset (int index)
|
|---|
| 69 | {
|
|---|
| 70 | return (2 * sizeof (void *)) + (index * vtable_elt_size ());
|
|---|
| 71 | }
|
|---|
| 72 | static _Jv_VTable *new_vtable (int count);
|
|---|
| 73 | };
|
|---|
| 74 |
|
|---|
| 75 | // Number of virtual methods on object. FIXME: it sucks that we have
|
|---|
| 76 | // to keep this up to date by hand.
|
|---|
| 77 | #define NUM_OBJECT_METHODS 5
|
|---|
| 78 |
|
|---|
| 79 | // This structure is the type of an array's vtable.
|
|---|
| 80 | struct _Jv_ArrayVTable : public _Jv_VTable
|
|---|
| 81 | {
|
|---|
| 82 | vtable_elt extra_method[NUM_OBJECT_METHODS - 1];
|
|---|
| 83 | };
|
|---|
| 84 |
|
|---|
| 85 | union _Jv_word
|
|---|
| 86 | {
|
|---|
| 87 | jobject o;
|
|---|
| 88 | jint i; // Also stores smaller integral types.
|
|---|
| 89 | jfloat f;
|
|---|
| 90 | jint ia[1]; // Half of _Jv_word2.
|
|---|
| 91 | void* p;
|
|---|
| 92 |
|
|---|
| 93 | #if SIZEOF_VOID_P == 8
|
|---|
| 94 | // We can safely put a long or a double in here without increasing
|
|---|
| 95 | // the size of _Jv_Word; we take advantage of this in the interpreter.
|
|---|
| 96 | jlong l;
|
|---|
| 97 | jdouble d;
|
|---|
| 98 | #endif
|
|---|
| 99 |
|
|---|
| 100 | jclass clazz;
|
|---|
| 101 | jstring string;
|
|---|
| 102 | struct _Jv_Field *field;
|
|---|
| 103 | struct _Jv_Utf8Const *utf8;
|
|---|
| 104 | struct _Jv_ResolvedMethod *rmethod;
|
|---|
| 105 | };
|
|---|
| 106 |
|
|---|
| 107 | union _Jv_word2
|
|---|
| 108 | {
|
|---|
| 109 | jint ia[2];
|
|---|
| 110 | jlong l;
|
|---|
| 111 | jdouble d;
|
|---|
| 112 | };
|
|---|
| 113 |
|
|---|
| 114 | // An instance of this type is used to represent a single frame in a
|
|---|
| 115 | // backtrace. If the interpreter has been built, we also include
|
|---|
| 116 | // information about the interpreted method.
|
|---|
| 117 | struct _Jv_frame_info
|
|---|
| 118 | {
|
|---|
| 119 | // PC value.
|
|---|
| 120 | void *addr;
|
|---|
| 121 | #ifdef INTERPRETER
|
|---|
| 122 | // Actually a _Jv_InterpMethod, but we don't want to include
|
|---|
| 123 | // java-interp.h everywhere.
|
|---|
| 124 | void *interp;
|
|---|
| 125 | #endif // INTERPRETER
|
|---|
| 126 | };
|
|---|
| 127 |
|
|---|
| 128 | /* Extract a character from a Java-style Utf8 string.
|
|---|
| 129 | * PTR points to the current character.
|
|---|
| 130 | * LIMIT points to the end of the Utf8 string.
|
|---|
| 131 | * PTR is incremented to point after the character thta gets returns.
|
|---|
| 132 | * On an error, -1 is returned. */
|
|---|
| 133 | #define UTF8_GET(PTR, LIMIT) \
|
|---|
| 134 | ((PTR) >= (LIMIT) ? -1 \
|
|---|
| 135 | : *(PTR) < 128 ? *(PTR)++ \
|
|---|
| 136 | : (*(PTR)&0xE0) == 0xC0 && ((PTR)+=2)<=(LIMIT) && ((PTR)[-1]&0xC0) == 0x80 \
|
|---|
| 137 | ? (((PTR)[-2] & 0x1F) << 6) + ((PTR)[-1] & 0x3F) \
|
|---|
| 138 | : (*(PTR) & 0xF0) == 0xE0 && ((PTR) += 3) <= (LIMIT) \
|
|---|
| 139 | && ((PTR)[-2] & 0xC0) == 0x80 && ((PTR)[-1] & 0xC0) == 0x80 \
|
|---|
| 140 | ? (((PTR)[-3]&0x0F) << 12) + (((PTR)[-2]&0x3F) << 6) + ((PTR)[-1]&0x3F) \
|
|---|
| 141 | : ((PTR)++, -1))
|
|---|
| 142 |
|
|---|
| 143 | extern int _Jv_strLengthUtf8(char* str, int len);
|
|---|
| 144 |
|
|---|
| 145 | typedef struct _Jv_Utf8Const Utf8Const;
|
|---|
| 146 | _Jv_Utf8Const *_Jv_makeUtf8Const (char *s, int len);
|
|---|
| 147 | _Jv_Utf8Const *_Jv_makeUtf8Const (jstring string);
|
|---|
| 148 | extern jboolean _Jv_equalUtf8Consts (_Jv_Utf8Const *, _Jv_Utf8Const *);
|
|---|
| 149 | extern jboolean _Jv_equal (_Jv_Utf8Const *, jstring, jint);
|
|---|
| 150 | extern jboolean _Jv_equaln (_Jv_Utf8Const *, jstring, jint);
|
|---|
| 151 |
|
|---|
| 152 | // FIXME: remove this define.
|
|---|
| 153 | #define StringClass java::lang::String::class$
|
|---|
| 154 |
|
|---|
| 155 | namespace gcj
|
|---|
| 156 | {
|
|---|
| 157 | /* Some constants used during lookup of special class methods. */
|
|---|
| 158 | extern _Jv_Utf8Const *void_signature; /* "()V" */
|
|---|
| 159 | extern _Jv_Utf8Const *clinit_name; /* "<clinit>" */
|
|---|
| 160 | extern _Jv_Utf8Const *init_name; /* "<init>" */
|
|---|
| 161 | extern _Jv_Utf8Const *finit_name; /* "finit$", */
|
|---|
| 162 |
|
|---|
| 163 | /* Set to true by _Jv_CreateJavaVM. */
|
|---|
| 164 | extern bool runtimeInitialized;
|
|---|
| 165 | };
|
|---|
| 166 |
|
|---|
| 167 | /* Type of pointer used as finalizer. */
|
|---|
| 168 | typedef void _Jv_FinalizerFunc (jobject);
|
|---|
| 169 |
|
|---|
| 170 | /* Allocate space for a new Java object. */
|
|---|
| 171 | void *_Jv_AllocObj (jsize size, jclass cl) __attribute__((__malloc__));
|
|---|
| 172 | /* Allocate space for a potentially uninitialized pointer-free object.
|
|---|
| 173 | Interesting only with JV_HASH_SYNCHRONIZATION. */
|
|---|
| 174 | void *_Jv_AllocPtrFreeObj (jsize size, jclass cl) __attribute__((__malloc__));
|
|---|
| 175 | /* Allocate space for an array of Java objects. */
|
|---|
| 176 | void *_Jv_AllocArray (jsize size, jclass cl) __attribute__((__malloc__));
|
|---|
| 177 | /* Allocate space that is known to be pointer-free. */
|
|---|
| 178 | void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__));
|
|---|
| 179 | /* Allocate space for a new non-Java object, which does not have the usual
|
|---|
| 180 | Java object header but may contain pointers to other GC'ed objects. */
|
|---|
| 181 | void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__));
|
|---|
| 182 | /* Explicitly throw an out-of-memory exception. */
|
|---|
| 183 | void _Jv_ThrowNoMemory() __attribute__((__noreturn__));
|
|---|
| 184 | /* Allocate an object with a single pointer. The first word is reserved
|
|---|
| 185 | for the GC, and the second word is the traced pointer. */
|
|---|
| 186 | void *_Jv_AllocTraceOne (jsize size /* incl. reserved slot */);
|
|---|
| 187 | /* Ditto, but for two traced pointers. */
|
|---|
| 188 | void *_Jv_AllocTraceTwo (jsize size /* incl. reserved slot */);
|
|---|
| 189 | /* Initialize the GC. */
|
|---|
| 190 | void _Jv_InitGC (void);
|
|---|
| 191 | /* Register a finalizer. */
|
|---|
| 192 | void _Jv_RegisterFinalizer (void *object, _Jv_FinalizerFunc *method);
|
|---|
| 193 | /* Compute the GC descriptor for a class */
|
|---|
| 194 | void * _Jv_BuildGCDescr(jclass);
|
|---|
| 195 |
|
|---|
| 196 | /* Allocate some unscanned, unmoveable memory. Return NULL if out of
|
|---|
| 197 | memory. */
|
|---|
| 198 | void *_Jv_MallocUnchecked (jsize size) __attribute__((__malloc__));
|
|---|
| 199 |
|
|---|
| 200 | /* Initialize finalizers. The argument is a function to be called
|
|---|
| 201 | when a finalizer is ready to be run. */
|
|---|
| 202 | void _Jv_GCInitializeFinalizers (void (*notifier) (void));
|
|---|
| 203 | /* Run finalizers for objects ready to be finalized.. */
|
|---|
| 204 | void _Jv_RunFinalizers (void);
|
|---|
| 205 | /* Run all finalizers. Should be called only before exit. */
|
|---|
| 206 | void _Jv_RunAllFinalizers (void);
|
|---|
| 207 | /* Perform a GC. */
|
|---|
| 208 | void _Jv_RunGC (void);
|
|---|
| 209 | /* Disable and enable GC. */
|
|---|
| 210 | void _Jv_DisableGC (void);
|
|---|
| 211 | void _Jv_EnableGC (void);
|
|---|
| 212 | /* Register a disappearing link. This is a field F which should be
|
|---|
| 213 | cleared when *F is found to be inaccessible. This is used in the
|
|---|
| 214 | implementation of java.lang.ref.Reference. */
|
|---|
| 215 | void _Jv_GCRegisterDisappearingLink (jobject *objp);
|
|---|
| 216 | /* Return true if OBJECT should be reclaimed. This is used to
|
|---|
| 217 | implement soft references. */
|
|---|
| 218 | jboolean _Jv_GCCanReclaimSoftReference (jobject obj);
|
|---|
| 219 |
|
|---|
| 220 | /* Return approximation of total size of heap. */
|
|---|
| 221 | long _Jv_GCTotalMemory (void);
|
|---|
| 222 | /* Return approximation of total free memory. */
|
|---|
| 223 | long _Jv_GCFreeMemory (void);
|
|---|
| 224 |
|
|---|
| 225 | /* Set initial heap size. If SIZE==0, ignore. Should be run before
|
|---|
| 226 | _Jv_InitGC. Not required to have any actual effect. */
|
|---|
| 227 | void _Jv_GCSetInitialHeapSize (size_t size);
|
|---|
| 228 |
|
|---|
| 229 | /* Set maximum heap size. If SIZE==0, unbounded. Should be run
|
|---|
| 230 | before _Jv_InitGC. Not required to have any actual effect. */
|
|---|
| 231 | void _Jv_GCSetMaximumHeapSize (size_t size);
|
|---|
| 232 |
|
|---|
| 233 | /* External interface to setting the heap size. Parses ARG (a number
|
|---|
| 234 | which can optionally have "k" or "m" appended and calls
|
|---|
| 235 | _Jv_GCSetInitialHeapSize. */
|
|---|
| 236 | void _Jv_SetInitialHeapSize (const char *arg);
|
|---|
| 237 |
|
|---|
| 238 | /* External interface to setting the maximum heap size. Parses ARG (a
|
|---|
| 239 | number which can optionally have "k" or "m" appended and calls
|
|---|
| 240 | _Jv_GCSetMaximumHeapSize. */
|
|---|
| 241 | void _Jv_SetMaximumHeapSize (const char *arg);
|
|---|
| 242 |
|
|---|
| 243 | extern "C" void JvRunMain (jclass klass, int argc, const char **argv);
|
|---|
| 244 | void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv,
|
|---|
| 245 | bool is_jar);
|
|---|
| 246 |
|
|---|
| 247 | // Delayed until after _Jv_AllocBytes is declared.
|
|---|
| 248 | //
|
|---|
| 249 | // Note that we allocate this as unscanned memory -- the vtables
|
|---|
| 250 | // are handled specially by the GC.
|
|---|
| 251 |
|
|---|
| 252 | inline _Jv_VTable *
|
|---|
| 253 | _Jv_VTable::new_vtable (int count)
|
|---|
| 254 | {
|
|---|
| 255 | size_t size = sizeof(_Jv_VTable) + (count - 1) * vtable_elt_size ();
|
|---|
| 256 | return (_Jv_VTable *) _Jv_AllocBytes (size);
|
|---|
| 257 | }
|
|---|
| 258 |
|
|---|
| 259 | // This function is used to determine the hash code of an object.
|
|---|
| 260 | inline jint
|
|---|
| 261 | _Jv_HashCode (jobject obj)
|
|---|
| 262 | {
|
|---|
| 263 | // This was chosen to yield relatively well distributed results on
|
|---|
| 264 | // both 32- and 64-bit architectures. Note 0x7fffffff is prime.
|
|---|
| 265 | // FIXME: we assume sizeof(long) == sizeof(void *).
|
|---|
| 266 | return (jint) ((unsigned long) obj % 0x7fffffff);
|
|---|
| 267 | }
|
|---|
| 268 |
|
|---|
| 269 | // Return a raw pointer to the elements of an array given the array
|
|---|
| 270 | // and its element type. You might think we could just pick a single
|
|---|
| 271 | // array type and use elements() on it, but we can't because we must
|
|---|
| 272 | // account for alignment of the element type. When ARRAY is null, we
|
|---|
| 273 | // obtain the number of bytes taken by the base part of the array.
|
|---|
| 274 | inline char *
|
|---|
| 275 | _Jv_GetArrayElementFromElementType (jobject array,
|
|---|
| 276 | jclass element_type)
|
|---|
| 277 | {
|
|---|
| 278 | char *elts;
|
|---|
| 279 | if (element_type == JvPrimClass (byte))
|
|---|
| 280 | elts = (char *) elements ((jbyteArray) array);
|
|---|
| 281 | else if (element_type == JvPrimClass (short))
|
|---|
| 282 | elts = (char *) elements ((jshortArray) array);
|
|---|
| 283 | else if (element_type == JvPrimClass (int))
|
|---|
| 284 | elts = (char *) elements ((jintArray) array);
|
|---|
| 285 | else if (element_type == JvPrimClass (long))
|
|---|
| 286 | elts = (char *) elements ((jlongArray) array);
|
|---|
| 287 | else if (element_type == JvPrimClass (boolean))
|
|---|
| 288 | elts = (char *) elements ((jbooleanArray) array);
|
|---|
| 289 | else if (element_type == JvPrimClass (char))
|
|---|
| 290 | elts = (char *) elements ((jcharArray) array);
|
|---|
| 291 | else if (element_type == JvPrimClass (float))
|
|---|
| 292 | elts = (char *) elements ((jfloatArray) array);
|
|---|
| 293 | else if (element_type == JvPrimClass (double))
|
|---|
| 294 | elts = (char *) elements ((jdoubleArray) array);
|
|---|
| 295 | else
|
|---|
| 296 | elts = (char *) elements ((jobjectArray) array);
|
|---|
| 297 | return elts;
|
|---|
| 298 | }
|
|---|
| 299 |
|
|---|
| 300 | extern "C" void _Jv_ThrowBadArrayIndex (jint bad_index)
|
|---|
| 301 | __attribute__((noreturn));
|
|---|
| 302 | extern "C" void _Jv_ThrowNullPointerException (void)
|
|---|
| 303 | __attribute__((noreturn));
|
|---|
| 304 | extern "C" jobject _Jv_NewArray (jint type, jint size)
|
|---|
| 305 | __attribute__((__malloc__));
|
|---|
| 306 | extern "C" jobject _Jv_NewMultiArray (jclass klass, jint dims, ...)
|
|---|
| 307 | __attribute__((__malloc__));
|
|---|
| 308 | extern "C" void *_Jv_CheckCast (jclass klass, jobject obj);
|
|---|
| 309 | extern "C" void *_Jv_LookupInterfaceMethod (jclass klass, Utf8Const *name,
|
|---|
| 310 | Utf8Const *signature);
|
|---|
| 311 | extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
|
|---|
| 312 | int meth_idx);
|
|---|
| 313 | extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
|
|---|
| 314 | extern "C" void _Jv_RegisterClass (jclass klass);
|
|---|
| 315 | extern "C" void _Jv_RegisterClasses (jclass *classes);
|
|---|
| 316 | extern "C" void _Jv_RegisterResource (void *vptr);
|
|---|
| 317 | extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*);
|
|---|
| 318 | extern void _Jv_ResolveField (_Jv_Field *, java::lang::ClassLoader*);
|
|---|
| 319 |
|
|---|
| 320 | extern jclass _Jv_FindClass (_Jv_Utf8Const *name,
|
|---|
| 321 | java::lang::ClassLoader *loader);
|
|---|
| 322 | extern jclass _Jv_FindClassFromSignature (char *,
|
|---|
| 323 | java::lang::ClassLoader *loader);
|
|---|
| 324 | extern void _Jv_GetTypesFromSignature (jmethodID method,
|
|---|
| 325 | jclass declaringClass,
|
|---|
| 326 | JArray<jclass> **arg_types_out,
|
|---|
| 327 | jclass *return_type_out);
|
|---|
| 328 |
|
|---|
| 329 | extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type,
|
|---|
| 330 | jmethodID meth, jboolean is_constructor,
|
|---|
| 331 | JArray<jclass> *parameter_types,
|
|---|
| 332 | jobjectArray args);
|
|---|
| 333 |
|
|---|
| 334 | union jvalue;
|
|---|
| 335 | extern jthrowable _Jv_CallAnyMethodA (jobject obj,
|
|---|
| 336 | jclass return_type,
|
|---|
| 337 | jmethodID meth,
|
|---|
| 338 | jboolean is_constructor,
|
|---|
| 339 | JArray<jclass> *parameter_types,
|
|---|
| 340 | jvalue *args,
|
|---|
| 341 | jvalue *result);
|
|---|
| 342 |
|
|---|
| 343 | extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims)
|
|---|
| 344 | __attribute__((__malloc__));
|
|---|
| 345 |
|
|---|
| 346 | /* Checked divide subroutines. */
|
|---|
| 347 | extern "C"
|
|---|
| 348 | {
|
|---|
| 349 | jint _Jv_divI (jint, jint);
|
|---|
| 350 | jint _Jv_remI (jint, jint);
|
|---|
| 351 | jlong _Jv_divJ (jlong, jlong);
|
|---|
| 352 | jlong _Jv_remJ (jlong, jlong);
|
|---|
| 353 | }
|
|---|
| 354 |
|
|---|
| 355 | /* Get the number of arguments (cf. argc) or 0 if our argument
|
|---|
| 356 | list was never initialized. */
|
|---|
| 357 | extern int _Jv_GetNbArgs (void);
|
|---|
| 358 |
|
|---|
| 359 | /* Get the specified argument (cf. argv[index]) or "" if either
|
|---|
| 360 | our argument list was never initialized or the specified index
|
|---|
| 361 | is out of bounds. */
|
|---|
| 362 | extern const char * _Jv_GetSafeArg (int index);
|
|---|
| 363 |
|
|---|
| 364 | /* Sets our argument list. Can be used by programs with non-standard
|
|---|
| 365 | entry points. */
|
|---|
| 366 | extern void _Jv_SetArgs (int argc, const char **argv);
|
|---|
| 367 |
|
|---|
| 368 | /* Get the name of the running executable. */
|
|---|
| 369 | extern const char *_Jv_ThisExecutable (void);
|
|---|
| 370 |
|
|---|
| 371 | /* Return a pointer to a symbol in executable or loaded library. */
|
|---|
| 372 | void *_Jv_FindSymbolInExecutable (const char *);
|
|---|
| 373 |
|
|---|
| 374 | /* Initialize JNI. */
|
|---|
| 375 | extern void _Jv_JNI_Init (void);
|
|---|
| 376 |
|
|---|
| 377 | /* Get or set the per-thread JNIEnv used by the invocation API. */
|
|---|
| 378 | _Jv_JNIEnv *_Jv_GetCurrentJNIEnv ();
|
|---|
| 379 | void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *);
|
|---|
| 380 |
|
|---|
| 381 | struct _Jv_JavaVM;
|
|---|
| 382 | _Jv_JavaVM *_Jv_GetJavaVM ();
|
|---|
| 383 |
|
|---|
| 384 | // Some verification functions from defineclass.cc.
|
|---|
| 385 | bool _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig);
|
|---|
| 386 | bool _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig);
|
|---|
| 387 | bool _Jv_VerifyClassName (unsigned char* ptr, _Jv_ushort length);
|
|---|
| 388 | bool _Jv_VerifyClassName (_Jv_Utf8Const *name);
|
|---|
| 389 | bool _Jv_VerifyIdentifier (_Jv_Utf8Const *);
|
|---|
| 390 | bool _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2);
|
|---|
| 391 |
|
|---|
| 392 | #ifdef ENABLE_JVMPI
|
|---|
| 393 |
|
|---|
| 394 | #include "jvmpi.h"
|
|---|
| 395 |
|
|---|
| 396 | extern void (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (JVMPI_Event *event);
|
|---|
| 397 | extern void (*_Jv_JVMPI_Notify_THREAD_START) (JVMPI_Event *event);
|
|---|
| 398 | extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
|
|---|
| 399 | #endif
|
|---|
| 400 |
|
|---|
| 401 | #endif /* __JAVA_JVM_H__ */
|
|---|