* configure.ac (AC_CHECK_ENABLE_ASSERTION): Added
[cacao.git] / src / native / jni.h
index 31a97446a2655a4087edabf5c5f17e1607b78aa1..05a013659d12f8a74c0041aa7cff4d89f3ccbece 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 4661 2006-03-21 00:04:59Z motse $
+   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 *****************************************************************/
@@ -54,7 +63,7 @@
 typedef struct _Jv_JNIEnv _Jv_JNIEnv;
 
 struct _Jv_JNIEnv {
-       const struct JNINativeInterface *env;     /* This MUST be the first entry */
+       const struct JNINativeInterface_ *env;    /* This MUST be the first entry */
 };
 
 
@@ -63,52 +72,44 @@ struct _Jv_JNIEnv {
 typedef struct _Jv_JavaVM _Jv_JavaVM;
 
 struct _Jv_JavaVM {
-       const struct JNIInvokeInterface *functions;/* This MUST be the first entry*/
-};
+       const struct JNIInvokeInterface_ *functions;/*This MUST be the first entry*/
 
+       /* JVM instance-specific variables */
 
-/* CACAO related stuff ********************************************************/
+       s8 starttime;                       /* VM startup time                    */
 
-extern const struct JNIInvokeInterface _Jv_JNIInvokeInterface;
-extern struct JNINativeInterface _Jv_JNINativeInterface;
+       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;
+};
 
 
-/* local reference table ******************************************************/
+/* CACAO related stuff ********************************************************/
 
-#define LOCALREFTABLE_CAPACITY    16
+extern const struct JNIInvokeInterface_ _Jv_JNIInvokeInterface;
+extern struct JNINativeInterface_ _Jv_JNINativeInterface;
 
-typedef struct localref_table localref_table;
 
-/* localref_table **************************************************************
+/* hashtable_global_ref_entry *************************************************/
 
-   ATTENTION: keep this structure a multiple of 8-bytes!!! This is
-   essential for the native stub on 64-bit architectures.
+typedef struct hashtable_global_ref_entry 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            */
+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       */
 };
 
-#if defined(USE_THREADS)
-#define LOCALREFTABLE    (THREADINFO->_localref_table)
-#else
-extern localref_table *_no_threads_localref_table;
-
-#define LOCALREFTABLE    (_no_threads_localref_table)
-#endif
 
+/* function prototypes ********************************************************/
 
-/* initialize JNI subsystem */
 bool jni_init(void);
+bool jni_version_check(int version);
 
-java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
-                                                                               java_objectarray *params);
+java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o,
+                                                                       java_handle_objectarray_t *params);
 
 #endif /* _JNI_H */