* Removed all Id tags.
[cacao.git] / src / native / jni.h
index 45ef98a083dc70df56bd1e7b2b8a5b6cc7109536..a7cc2751eae999f2e3998a243e93ce450a08cdcb 100644 (file)
@@ -1,6 +1,6 @@
-/* native/jni.h - JNI types and data structures
+/* src/native/jni.h - JNI types and data structures
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
+*/
 
-   Authors: Reinhard Grafl
-            Roman Obermaisser
 
-   Changes: Christian Thalinger
+/* GNU Classpath jni.h *********************************************************
 
-   $Id: jni.h 4530 2006-02-21 09:11:53Z twisti $
+   ATTENTION: We include this file before we actually define our own
+   jni.h.  We do this because, otherwise we can get into unresolvable
+   circular header dependencies.
 
-*/
+   This is OK as GNU Classpath defines:
+
+   #define _CLASSPATH_JNI_H
+
+   CLASSPATH_JNI_H is in config.h defined.
+
+*******************************************************************************/
 
+#include "config.h"
+
+/* XXX quick hack to not include GCJ's jni_md.h */
+#define __GCJ_JNI_MD_H__
+
+#include CLASSPATH_JNI_MD_H
+#include CLASSPATH_JNI_H
 
 #ifndef _JNI_H
 #define _JNI_H
 
-#include "config.h"
+
 #include "vm/types.h"
 
 #include "vm/global.h"
-#include "vm/method.h"
 
-
-/* include the JNI header from GNU Classpath */
-
-#include CLASSPATH_JNI_H
+#include "vmcore/method.h"
 
 
 /* _Jv_JNIEnv *****************************************************************/
 typedef struct _Jv_JNIEnv _Jv_JNIEnv;
 
 struct _Jv_JNIEnv {
-       const struct JNINativeInterface *env;       /* This must be first for JNI */
+       const struct JNINativeInterface_ *env;    /* This MUST be the first entry */
 };
 
 
-/* CACAO related stuff ********************************************************/
+/* _Jv_JavaVM *****************************************************************/
+
+typedef struct _Jv_JavaVM _Jv_JavaVM;
+
+struct _Jv_JavaVM {
+       const struct JNIInvokeInterface_ *functions;/*This MUST be the first entry*/
 
-extern const struct JNIInvokeInterface JNI_JavaVMTable;
-extern struct JNINativeInterface JNI_JNIEnvTable;
+       /* JVM instance-specific variables */
 
+       s8 starttime;                       /* VM startup time                    */
 
-/* local reference table ******************************************************/
+       s4 Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_verbose;
+       s4 Java_gnu_java_lang_management_VMMemoryMXBeanImpl_verbose;
+       s4 java_lang_management_ThreadMXBean_PeakThreadCount;
+       s4 java_lang_management_ThreadMXBean_ThreadCount;
+       s8 java_lang_management_ThreadMXBean_TotalStartedThreadCount;
+       s4 Java_java_lang_VMClassLoader_defaultAssertionStatus;
+};
 
-#define LOCALREFTABLE_CAPACITY    16
 
-typedef struct localref_table localref_table;
+/* CACAO related stuff ********************************************************/
 
-/* localref_table **************************************************************
+extern const struct JNIInvokeInterface_ _Jv_JNIInvokeInterface;
+extern struct JNINativeInterface_ _Jv_JNINativeInterface;
 
-   ATTENTION: keep this structure a multiple of 8-bytes!!! This is
-   essential for the native stub on 64-bit architectures.
 
-*******************************************************************************/
+/* hashtable_global_ref_entry *************************************************/
 
-struct localref_table {
-       s4                 capacity;        /* table size                         */
-       s4                 used;            /* currently used references          */
-       s4                 localframes;     /* number of current frames           */
-       s4                 PADDING;         /* 8-byte padding                     */
-       localref_table    *prev;            /* link to prev table (LocalFrame)    */
-       java_objectheader *refs[LOCALREFTABLE_CAPACITY]; /* references            */
-};
+typedef struct hashtable_global_ref_entry hashtable_global_ref_entry;
 
-#if defined(USE_THREADS)
-#define LOCALREFTABLE    (THREADINFO->_localref_table)
-#else
-extern localref_table *_no_threads_localref_table;
+struct hashtable_global_ref_entry {
+       java_object_t              *o;      /* object pointer of global ref       */
+       s4                          refs;   /* references of the current pointer  */
+       hashtable_global_ref_entry *hashlink; /* link for external chaining       */
+};
 
-#define LOCALREFTABLE    (_no_threads_localref_table)
-#endif
 
+/* function prototypes ********************************************************/
 
 /* initialize JNI subsystem */
 bool jni_init(void);
 
-java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
-                                                                               java_objectarray *params);
-
-extern void* ptr_env;
-extern struct JNINativeInterface JNI_JNIEnvTable;
+java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o,
+                                                                       java_handle_objectarray_t *params);
 
 #endif /* _JNI_H */