diff options
author | Andrew Haley <aph@redhat.com> | 2016-09-30 16:24:48 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2016-09-30 16:24:48 +0000 |
commit | 07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch) | |
tree | 3f22b3241c513ad168c8353805614ae1249410f4 /libjava/include/jvm.h | |
parent | eae993948bae8b788c53772bcb9217c063716f93 (diff) | |
download | gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2 |
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com>
* Makefile.def: Remove libjava.
* Makefile.tpl: Likewise.
* Makefile.in: Regenerate.
* configure.ac: Likewise.
* configure: Likewise.
* gcc/java: Remove.
* libjava: Likewise.
From-SVN: r240662
Diffstat (limited to 'libjava/include/jvm.h')
-rw-r--r-- | libjava/include/jvm.h | 804 |
1 files changed, 0 insertions, 804 deletions
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h deleted file mode 100644 index 5015d4e..0000000 --- a/libjava/include/jvm.h +++ /dev/null @@ -1,804 +0,0 @@ -// jvm.h - Header file for private implementation information. -*- c++ -*- - -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#ifndef __JAVA_JVM_H__ -#define __JAVA_JVM_H__ - -// Define this before including jni.h. -// jni.h is included by jvmpi.h, which might be included. We define -// this unconditionally because it is convenient and it lets other -// files include jni.h without difficulty. -#define __GCJ_JNI_IMPL__ - -#include <gcj/javaprims.h> - -#include <java-assert.h> -#include <java-threads.h> -// Must include java-gc.h before Object.h for the implementation. -#include <java-gc.h> - -#include <java/lang/Object.h> - -// Include cni.h before field.h to enable all definitions. FIXME. -#include <gcj/cni.h> -#include <gcj/field.h> - -#include <java/lang/Thread.h> - -#include <sysdep/locks.h> - -/* Macro for possible unused arguments. */ -#define MAYBE_UNUSED __attribute__((__unused__)) - -/* Structure of the virtual table. */ -struct _Jv_VTable -{ -#ifdef __ia64__ - typedef struct { void *pc, *gp; } vtable_elt; -#else - typedef void *vtable_elt; -#endif - jclass clas; - void *gc_descr; - - // This must be last, as derived classes "extend" this by - // adding new data members. - vtable_elt method[1]; - -#ifdef __ia64__ - void *get_method(int i) { return &method[i]; } - void set_method(int i, void *fptr) { method[i] = *(vtable_elt *)fptr; } - void *get_finalizer() - { - // We know that get_finalizer is only used for checking whether - // this object needs to have a finalizer registered. So it is - // safe to simply return just the PC component of the vtable - // slot. - return ((vtable_elt *)(get_method(0)))->pc; - } -#else - void *get_method(int i) { return method[i]; } - void set_method(int i, void *fptr) { method[i] = fptr; } - void *get_finalizer() { return get_method(0); } -#endif - - static size_t vtable_elt_size() { return sizeof(vtable_elt); } - - // Given a method index, return byte offset from the vtable pointer. - static jint idx_to_offset (int index) - { - return (2 * sizeof (void *)) + (index * vtable_elt_size ()); - } - - static _Jv_VTable *new_vtable (int count); -}; - -union _Jv_word -{ - jobject o; - jint i; // Also stores smaller integral types. - jfloat f; - jint ia[1]; // Half of _Jv_word2. - void* p; - -#if SIZEOF_VOID_P == 8 - // We can safely put a long or a double in here without increasing - // the size of _Jv_Word; we take advantage of this in the interpreter. - jlong l; - jdouble d; -#endif - - jclass clazz; - jstring string; - struct _Jv_Field *field; - struct _Jv_Utf8Const *utf8; - struct _Jv_ResolvedMethod *rmethod; -}; - -union _Jv_word2 -{ - jint ia[2]; - jlong l; - jdouble d; -}; - -union _Jv_value -{ - jbyte byte_value; - jshort short_value; - jchar char_value; - jint int_value; - jlong long_value; - jfloat float_value; - jdouble double_value; - jobject object_value; -}; - -/* Extract a character from a Java-style Utf8 string. - * PTR points to the current character. - * LIMIT points to the end of the Utf8 string. - * PTR is incremented to point after the character thta gets returns. - * On an error, -1 is returned. */ -#define UTF8_GET(PTR, LIMIT) \ - ((PTR) >= (LIMIT) ? -1 \ - : *(PTR) < 128 ? *(PTR)++ \ - : (*(PTR)&0xE0) == 0xC0 && ((PTR)+=2)<=(LIMIT) && ((PTR)[-1]&0xC0) == 0x80 \ - ? (((PTR)[-2] & 0x1F) << 6) + ((PTR)[-1] & 0x3F) \ - : (*(PTR) & 0xF0) == 0xE0 && ((PTR) += 3) <= (LIMIT) \ - && ((PTR)[-2] & 0xC0) == 0x80 && ((PTR)[-1] & 0xC0) == 0x80 \ - ? (((PTR)[-3]&0x0F) << 12) + (((PTR)[-2]&0x3F) << 6) + ((PTR)[-1]&0x3F) \ - : ((PTR)++, -1)) - -extern int _Jv_strLengthUtf8(const char* str, int len); - -typedef struct _Jv_Utf8Const Utf8Const; -_Jv_Utf8Const *_Jv_makeUtf8Const (const char *s, int len); -_Jv_Utf8Const *_Jv_makeUtf8Const (jstring string); -static inline _Jv_Utf8Const *_Jv_makeUtf8Const (const char *s) -{ - return _Jv_makeUtf8Const (s, strlen (s)); -} -extern jboolean _Jv_equalUtf8Consts (const _Jv_Utf8Const *, const _Jv_Utf8Const *); -extern jboolean _Jv_equal (_Jv_Utf8Const *, jstring, jint); -extern jboolean _Jv_equaln (_Jv_Utf8Const *, jstring, jint); - -/* Helper class which converts a jstring to a temporary char*. - Uses the supplied buffer, if non-null. Otherwise, allocates - the buffer on the heap. Use the JV_TEMP_UTF_STRING macro, - which follows, to automatically allocate a stack buffer if - the string is small enough. */ -class _Jv_TempUTFString -{ -public: - _Jv_TempUTFString(jstring jstr, char* buf=0); - ~_Jv_TempUTFString(); - -// Accessors - operator const char*() const - { - return buf_; - } - const char* buf() const - { - return buf_; - } - char* buf() - { - return buf_; - } - -private: - char* buf_; - bool heapAllocated_; -}; - -inline _Jv_TempUTFString::_Jv_TempUTFString (jstring jstr, char* buf) - : buf_(0), heapAllocated_(false) -{ - if (!jstr) return; - jsize len = JvGetStringUTFLength (jstr); - if (buf) - buf_ = buf; - else - { - buf_ = (char*) _Jv_Malloc (len+1); - heapAllocated_ = true; - } - - JvGetStringUTFRegion (jstr, 0, jstr->length(), buf_); - buf_[len] = '\0'; -} - -inline _Jv_TempUTFString::~_Jv_TempUTFString () -{ - if (heapAllocated_) - _Jv_Free (buf_); -} - -/* Macro which uses _Jv_TempUTFString. Allocates a stack-based - buffer if the string and its null terminator are <= 256 - characters in length. Otherwise, a heap-based buffer is - used. The parameters to this macro are the variable name - which is an instance of _Jv_TempUTFString (above) and a - jstring. - - Sample Usage: - - jstring jstr = getAJString(); - JV_TEMP_UTF_STRING(utfstr, jstr); - printf("The string is: %s\n", utfstr.buf()); - - */ -#define JV_TEMP_UTF_STRING(utfstr, jstr) \ - jstring utfstr##thejstr = (jstr); \ - jsize utfstr##_len = utfstr##thejstr ? JvGetStringUTFLength (utfstr##thejstr) + 1 : 0; \ - char utfstr##_buf[utfstr##_len <= 256 ? utfstr##_len : 0]; \ - _Jv_TempUTFString utfstr(utfstr##thejstr, sizeof(utfstr##_buf)==0 ? 0 : utfstr##_buf) - -namespace gcj -{ - /* Some constants used during lookup of special class methods. */ - extern _Jv_Utf8Const *void_signature; /* "()V" */ - extern _Jv_Utf8Const *clinit_name; /* "<clinit>" */ - extern _Jv_Utf8Const *init_name; /* "<init>" */ - extern _Jv_Utf8Const *finit_name; /* "finit$", */ - - /* Set to true by _Jv_CreateJavaVM. */ - extern bool runtimeInitialized; - - /* Print out class names as they are initialized. */ - extern bool verbose_class_flag; - - /* When true, enable the bytecode verifier and BC-ABI verification. */ - extern bool verifyClasses; - - /* Thread stack size specified by the -Xss runtime argument. */ - extern size_t stack_size; - - /* The start time */ - extern jlong startTime; - - /* The VM arguments */ - extern JArray<jstring>* vmArgs; - - // Currently loaded classes - extern jint loadedClasses; - - // Unloaded classes - extern jlong unloadedClasses; -} - -// This class handles all aspects of class preparation and linking. -class _Jv_Linker -{ -private: - typedef unsigned int uaddr __attribute__ ((mode (pointer))); - - static _Jv_Field *find_field_helper(jclass, _Jv_Utf8Const *, _Jv_Utf8Const *, - jclass, jclass *); - static _Jv_Field *find_field(jclass, jclass, jclass *, _Jv_Utf8Const *, - _Jv_Utf8Const *); - static void check_loading_constraints (_Jv_Method *, jclass, jclass); - static void prepare_constant_time_tables(jclass); - static jshort get_interfaces(jclass, _Jv_ifaces *); - static void link_symbol_table(jclass); - static void link_exception_table(jclass); - static void layout_interface_methods(jclass); - static void set_vtable_entries(jclass, _Jv_VTable *); - static void make_vtable(jclass); - static void ensure_fields_laid_out(jclass); - static void ensure_class_linked(jclass); - static void ensure_supers_installed(jclass); - static void add_miranda_methods(jclass, jclass); - static void ensure_method_table_complete(jclass); - static void verify_class(jclass); - static jshort find_iindex(jclass *, jshort *, jshort); - static jshort indexof(void *, void **, jshort); - static int get_alignment_from_class(jclass); - static void generate_itable(jclass, _Jv_ifaces *, jshort *); - static jshort append_partial_itable(jclass, jclass, void **, jshort); - static _Jv_Method *search_method_in_superclasses (jclass cls, jclass klass, - _Jv_Utf8Const *method_name, - _Jv_Utf8Const *method_signature, - jclass *found_class, - bool check_perms = true); - static void *create_error_method(_Jv_Utf8Const *, jclass); - - /* The least significant bit of the signature pointer in a symbol - table is set to 1 by the compiler if the reference is "special", - i.e. if it is an access to a private field or method. Extract - that bit, clearing it in the address and setting the LSB of - SPECIAL accordingly. */ - static void maybe_adjust_signature (_Jv_Utf8Const *&s, uaddr &special) - { - union { - _Jv_Utf8Const *signature; - uaddr signature_bits; - }; - signature = s; - special = signature_bits & 1; - signature_bits -= special; - s = signature; - } - - static _Jv_Mutex_t resolve_mutex; - static void init (void) __attribute__((constructor)); - -public: - - static bool has_field_p (jclass, _Jv_Utf8Const *); - static void print_class_loaded (jclass); - static void resolve_class_ref (jclass, jclass *); - static void wait_for_state(jclass, int); - static _Jv_Method *resolve_method_entry (jclass, jclass &, - int, int, - bool, bool); - static _Jv_word resolve_pool_entry (jclass, int, bool =false); - static void resolve_field (_Jv_Field *, java::lang::ClassLoader *); - static void verify_type_assertions (jclass); - static _Jv_Method *search_method_in_class (jclass, jclass, - _Jv_Utf8Const *, - _Jv_Utf8Const *, - bool check_perms = true); - static void layout_vtable_methods(jclass); - - static jbyte read_cpool_entry (_Jv_word *data, - const _Jv_Constants *const pool, - int index) - { - _Jv_MutexLock (&resolve_mutex); - jbyte tags = pool->tags[index]; - *data = pool->data[index]; - _Jv_MutexUnlock (&resolve_mutex); - return tags; - } - - static void write_cpool_entry (_Jv_word data, jbyte tags, - _Jv_Constants *pool, - int index) - { - _Jv_MutexLock (&resolve_mutex); - pool->data[index] = data; - pool->tags[index] = tags; - _Jv_MutexUnlock (&resolve_mutex); - } -}; - -/* Type of pointer used as finalizer. */ -typedef void _Jv_FinalizerFunc (jobject); - -/* Allocate space for a new Java object. */ -void *_Jv_AllocObj (jsize size, jclass cl) __attribute__((__malloc__)); -/* Allocate space for a potentially uninitialized pointer-free object. - Interesting only with JV_HASH_SYNCHRONIZATION. */ -void *_Jv_AllocPtrFreeObj (jsize size, jclass cl) __attribute__((__malloc__)); -/* Allocate space for an array of Java objects. */ -void *_Jv_AllocArray (jsize size, jclass cl) __attribute__((__malloc__)); -/* Allocate space that is known to be pointer-free. */ -void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__)); -/* Allocate space for a new non-Java object, which does not have the usual - Java object header but may contain pointers to other GC'ed objects. */ -void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__)); -/* Allocate a double-indirect pointer to a _Jv_ClosureList such that - the _Jv_ClosureList gets automatically finalized when it is no - longer reachable, not even by other finalizable objects. */ -_Jv_ClosureList **_Jv_ClosureListFinalizer (void) __attribute__((__malloc__)); -/* Explicitly throw an out-of-memory exception. */ -void _Jv_ThrowNoMemory() __attribute__((__noreturn__)); -/* Allocate an object with a single pointer. The first word is reserved - for the GC, and the second word is the traced pointer. */ -void *_Jv_AllocTraceOne (jsize size /* incl. reserved slot */); -/* Ditto, but for two traced pointers. */ -void *_Jv_AllocTraceTwo (jsize size /* incl. reserved slot */); -/* Initialize the GC. */ -void _Jv_InitGC (void); -/* Register a finalizer. */ -void _Jv_RegisterFinalizer (void *object, _Jv_FinalizerFunc *method); -/* Compute the GC descriptor for a class */ -void * _Jv_BuildGCDescr(jclass); - -/* Allocate some unscanned, unmoveable memory. Return NULL if out of - memory. */ -void *_Jv_MallocUnchecked (jsize size) __attribute__((__malloc__)); - -/* Initialize finalizers. The argument is a function to be called - when a finalizer is ready to be run. */ -void _Jv_GCInitializeFinalizers (void (*notifier) (void)); -/* Run finalizers for objects ready to be finalized.. */ -void _Jv_RunFinalizers (void); -/* Run all finalizers. Should be called only before exit. */ -void _Jv_RunAllFinalizers (void); -/* Perform a GC. */ -void _Jv_RunGC (void); -/* Disable and enable GC. */ -void _Jv_DisableGC (void); -void _Jv_EnableGC (void); -/* Register a disappearing link. This is a field F which should be - cleared when *F is found to be inaccessible. This is used in the - implementation of java.lang.ref.Reference. */ -void _Jv_GCRegisterDisappearingLink (jobject *objp); -/* Return true if OBJECT should be reclaimed. This is used to - implement soft references. */ -jboolean _Jv_GCCanReclaimSoftReference (jobject obj); - -/* Register a finalizer for a String object. This is only used by - the intern() implementation. */ -void _Jv_RegisterStringFinalizer (jobject str); -/* This is called to actually finalize a possibly-intern()d String. */ -void _Jv_FinalizeString (jobject str); - -/* Return approximation of total size of heap. */ -long _Jv_GCTotalMemory (void); -/* Return approximation of total free memory. */ -long _Jv_GCFreeMemory (void); - -/* Set initial heap size. If SIZE==0, ignore. Should be run before - _Jv_InitGC. Not required to have any actual effect. */ -void _Jv_GCSetInitialHeapSize (size_t size); - -/* Set maximum heap size. If SIZE==0, unbounded. Should be run - before _Jv_InitGC. Not required to have any actual effect. */ -void _Jv_GCSetMaximumHeapSize (size_t size); - -/* External interface to setting the heap size. Parses ARG (a number - which can optionally have "k" or "m" appended and calls - _Jv_GCSetInitialHeapSize. */ -void _Jv_SetInitialHeapSize (const char *arg); - -/* External interface to setting the maximum heap size. Parses ARG (a - number which can optionally have "k" or "m" appended and calls - _Jv_GCSetMaximumHeapSize. */ -void _Jv_SetMaximumHeapSize (const char *arg); - -/* External interface for setting the GC_free_space_divisor. Calls - GC_set_free_space_divisor and returns the old value. */ -int _Jv_SetGCFreeSpaceDivisor (int div); - -/* Free the method cache, if one was allocated. This is only called - during thread deregistration. */ -void _Jv_FreeMethodCache (); - -/* Set the stack size for threads. Parses ARG, a number which can - optionally have "k" or "m" appended. */ -void _Jv_SetStackSize (const char *arg); - -extern "C" void JvRunMain (jclass klass, int argc, const char **argv); -extern "C" void JvRunMainName (const char *name, int argc, const char **argv); - -void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, - bool is_jar); - -void _Jv_RunMain (struct _Jv_VMInitArgs *vm_args, jclass klass, - const char *name, int argc, const char **argv, bool is_jar); - -// Delayed until after _Jv_AllocRawObj is declared. -inline _Jv_VTable * -_Jv_VTable::new_vtable (int count) -{ - size_t size = sizeof(_Jv_VTable) + (count - 1) * vtable_elt_size (); - return (_Jv_VTable *) _Jv_AllocRawObj (size); -} - -// Determine if METH gets an entry in a VTable. -static inline jboolean _Jv_isVirtualMethod (_Jv_Method *meth) -{ - using namespace java::lang::reflect; - return (((meth->accflags & (Modifier::STATIC | Modifier::PRIVATE)) == 0) - && meth->name->first() != '<'); -} - -// This function is used to determine the hash code of an object. -inline jint -_Jv_HashCode (jobject obj) -{ - // This was chosen to yield relatively well distributed results on - // both 32- and 64-bit architectures. Note 0x7fffffff is prime. - // FIXME: we assume sizeof(long) == sizeof(void *). - return (jint) ((unsigned long) obj % 0x7fffffff); -} - -// Return a raw pointer to the elements of an array given the array -// and its element type. You might think we could just pick a single -// array type and use elements() on it, but we can't because we must -// account for alignment of the element type. When ARRAY is null, we -// obtain the number of bytes taken by the base part of the array. -inline char * -_Jv_GetArrayElementFromElementType (jobject array, - jclass element_type) -{ - char *elts; - if (element_type == JvPrimClass (byte)) - elts = (char *) elements ((jbyteArray) array); - else if (element_type == JvPrimClass (short)) - elts = (char *) elements ((jshortArray) array); - else if (element_type == JvPrimClass (int)) - elts = (char *) elements ((jintArray) array); - else if (element_type == JvPrimClass (long)) - elts = (char *) elements ((jlongArray) array); - else if (element_type == JvPrimClass (boolean)) - elts = (char *) elements ((jbooleanArray) array); - else if (element_type == JvPrimClass (char)) - elts = (char *) elements ((jcharArray) array); - else if (element_type == JvPrimClass (float)) - elts = (char *) elements ((jfloatArray) array); - else if (element_type == JvPrimClass (double)) - elts = (char *) elements ((jdoubleArray) array); - else - elts = (char *) elements ((jobjectArray) array); - return elts; -} - -extern "C" void _Jv_ThrowBadArrayIndex (jint bad_index) - __attribute__((noreturn)); -extern "C" void _Jv_ThrowNullPointerException (void) - __attribute__((noreturn)); -extern "C" void _Jv_ThrowNoSuchMethodError (void) - __attribute__((noreturn)); -extern "C" void _Jv_ThrowNoSuchFieldError (int) - __attribute__((noreturn)); -extern "C" jobject _Jv_NewArray (jint type, jint size) - __attribute__((__malloc__)); -extern "C" jobject _Jv_NewMultiArray (jclass klass, jint dims, ...) - __attribute__((__malloc__)); -extern "C" void *_Jv_CheckCast (jclass klass, jobject obj); -extern "C" void *_Jv_LookupInterfaceMethod (jclass klass, Utf8Const *name, - Utf8Const *signature); -extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, - int meth_idx); -extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj); -extern "C" void _Jv_RegisterClass (jclass klass); -extern "C" void _Jv_RegisterClasses (const jclass *classes); -extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes, - size_t count); -extern "C" void _Jv_RegisterResource (void *vptr); -extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*); - -extern "C" jobject _Jv_UnwrapJNIweakReference (jobject); - -extern jclass _Jv_FindClass (_Jv_Utf8Const *name, - java::lang::ClassLoader *loader); - -extern jclass _Jv_FindClassNoException (_Jv_Utf8Const *name, - java::lang::ClassLoader *loader); - -extern jclass _Jv_FindClassFromSignature (char *, - java::lang::ClassLoader *loader, - char ** = NULL); - -extern jclass _Jv_FindClassFromSignatureNoException (char *, - java::lang::ClassLoader *loader, - char ** = NULL); - -extern void _Jv_GetTypesFromSignature (jmethodID method, - jclass declaringClass, - JArray<jclass> **arg_types_out, - jclass *return_type_out); - -extern jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass, - jint flags); - -extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type, - jmethodID meth, jboolean is_constructor, - JArray<jclass> *parameter_types, - jobjectArray args, - jclass iface = NULL); - -union jvalue; -extern void _Jv_CallAnyMethodA (jobject obj, - jclass return_type, - jmethodID meth, - jboolean is_constructor, - jboolean is_virtual_call, - JArray<jclass> *parameter_types, - const jvalue *args, - jvalue *result, - jboolean is_jni_call = true, - jclass iface = NULL); - -extern void _Jv_CheckOrCreateLoadingConstraint (jclass, - java::lang::ClassLoader *); - -extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims) - __attribute__((__malloc__)); - -extern "C" void _Jv_ThrowAbstractMethodError () __attribute__((__noreturn__)); - -/* Checked divide subroutines. */ -extern "C" -{ - jint _Jv_divI (jint, jint); - jint _Jv_remI (jint, jint); - jlong _Jv_divJ (jlong, jlong); - jlong _Jv_remJ (jlong, jlong); -} - -/* Get the number of arguments (cf. argc) or 0 if our argument - list was never initialized. */ -extern int _Jv_GetNbArgs (void); - -/* Get the specified argument (cf. argv[index]) or "" if either - our argument list was never initialized or the specified index - is out of bounds. */ -extern const char * _Jv_GetSafeArg (int index); - -/* Sets our argument list. Can be used by programs with non-standard - entry points. */ -extern void _Jv_SetArgs (int argc, const char **argv); - -/* Get the name of the running executable. */ -extern const char *_Jv_ThisExecutable (void); - -/* Return a pointer to a symbol in executable or loaded library. */ -void *_Jv_FindSymbolInExecutable (const char *); - -/* Initialize JNI. */ -extern void _Jv_JNI_Init (void); - -/* Get or set the per-thread JNIEnv used by the invocation API. */ -_Jv_JNIEnv *_Jv_GetCurrentJNIEnv (); -void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *); - -/* Free a JNIEnv. */ -void _Jv_FreeJNIEnv (_Jv_JNIEnv *); - -extern "C" void _Jv_JNI_PopSystemFrame (_Jv_JNIEnv *); -_Jv_JNIEnv *_Jv_GetJNIEnvNewFrameWithLoader (::java::lang::ClassLoader *); - -struct _Jv_JavaVM; -_Jv_JavaVM *_Jv_GetJavaVM (); - -/* Get a JVMTI environment */ -struct _Jv_JVMTIEnv; -_Jv_JVMTIEnv *_Jv_GetJVMTIEnv (void); - -/* Initialize JVMTI */ -extern void _Jv_JVMTI_Init (void); - -// Some verification functions from defineclass.cc. -bool _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig); -bool _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig); -bool _Jv_VerifyClassName (unsigned char* ptr, _Jv_ushort length); -bool _Jv_VerifyClassName (_Jv_Utf8Const *name); -bool _Jv_VerifyIdentifier (_Jv_Utf8Const *); -bool _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2); - -struct _Jv_core_chain -{ - int name_length; - const char *name; - int data_length; - const void *data; - - struct _Jv_core_chain *next; -}; - -// This is called when new core data is loaded. -extern void (*_Jv_RegisterCoreHook) (_Jv_core_chain *); - -_Jv_core_chain *_Jv_FindCore (_Jv_core_chain *node, jstring name); -void _Jv_FreeCoreChain (_Jv_core_chain *chain); - -#ifdef ENABLE_JVMPI - -#include "jvmpi.h" - -extern void (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (JVMPI_Event *event); -extern void (*_Jv_JVMPI_Notify_THREAD_START) (JVMPI_Event *event); -extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event); -#endif - -/* FIXME: this should really be defined in some more generic place */ -#define ROUND(V, A) (((((unsigned) (V))-1) | ((A)-1))+1) - -extern void _Jv_RegisterBootstrapPackages (); - -#define FLAG_BINARYCOMPAT_ABI (1<<31) /* Class is built with the BC-ABI. */ - -#define FLAG_BOOTSTRAP_LOADER (1<<30) /* Used when defining a class that - should be loaded by the bootstrap - loader. */ - -// These are used to find ABI versions we recognize. -#define GCJ_CXX_ABI_VERSION (__GNUC__ * 100000) - -// This is the old-style BC version ID used by GCJ 4.0.0. -#define OLD_GCJ_40_BC_ABI_VERSION (4 * 10000 + 0 * 10 + 5) - -// New style version IDs used by GCJ 4.0.1 and later. -#define GCJ_40_BC_ABI_VERSION (4 * 100000 + 0 * 1000) - -void _Jv_CheckABIVersion (unsigned long value); - - -inline bool -_Jv_ClassForBootstrapLoader (unsigned long value) -{ - return (value & FLAG_BOOTSTRAP_LOADER); -} - -// It makes the source cleaner if we simply always define this -// function. If the interpreter is not built, it will never return -// 'true'. -extern inline jboolean -_Jv_IsInterpretedClass (jclass c) -{ - return (c->accflags & java::lang::reflect::Modifier::INTERPRETED) != 0; -} - -// Return true if the class was compiled with the BC ABI. -extern inline jboolean -_Jv_IsBinaryCompatibilityABI (jclass c) -{ - // There isn't really a better test for the ABI type at this point, - // that will work once the class has been registered. - return c->otable_syms || c->atable_syms || c->itable_syms; -} - -// Returns whether the given class does not really exists (ie. we have no -// bytecode) but still allows us to do some very conservative actions. -// E.g. throwing a NoClassDefFoundError with the name of the missing -// class. -extern inline jboolean -_Jv_IsPhantomClass (jclass c) -{ - return c->state == JV_STATE_PHANTOM; -} - -// A helper function defined in prims.cc. -char* _Jv_PrependVersionedLibdir (char* libpath); - - -// An enum for use with JvSetThreadState. We use a C++ enum rather -// than the Java enum to avoid problems with class initialization -// during VM bootstrap. -typedef enum -{ - JV_BLOCKED, - JV_NEW, - JV_RUNNABLE, - JV_TERMINATED, - JV_TIMED_WAITING, - JV_WAITING -} JvThreadState; - -// Temporarily set the thread's state. -class JvSetThreadState -{ -private: - ::java::lang::Thread *thread; - jint saved; - -public: - - // Note that 'cthread' could be NULL -- during VM startup there may - // not be a Thread available. - JvSetThreadState(::java::lang::Thread *cthread, JvThreadState nstate) - : thread (cthread), - saved (cthread ? cthread->state : (jint)JV_NEW) - { - if (thread) - thread->state = nstate; - } - - ~JvSetThreadState() - { - if (thread) - thread->state = saved; - } -}; - -// This structure is used to represent all the data the native side -// needs. An object of this type is assigned to the `data' member of -// the Thread class. -struct natThread -{ - // A thread is either alive, dead, or being sent a signal; if it is - // being sent a signal, it is also alive. Thus, if you want to know - // if a thread is alive, it is sufficient to test alive_status != - // THREAD_DEAD. - volatile obj_addr_t alive_flag; - - // These are used to interrupt sleep and join calls. We can share a - // condition variable here since it only ever gets notified when the thread - // exits. - _Jv_Mutex_t join_mutex; - _Jv_ConditionVariable_t join_cond; - - // These are used by Unsafe.park() and Unsafe.unpark(). - ParkHelper park_helper; - - // This is private data for the thread system layer. - _Jv_Thread_t *thread; - - // Each thread has its own JNI object. - _Jv_JNIEnv *jni_env; -}; - -#endif /* __JAVA_JVM_H__ */ |