/* src/native/native.h - table of native functions
- 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
-
- Changes: Christian Thalinger
-
- $Id: native.h 4357 2006-01-22 23:33:38Z twisti $
-
*/
#include "config.h"
-#if !defined(ENABLE_STATICVM)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
# include <ltdl.h>
#endif
-#include "vm/class.h"
-#include "vm/global.h"
-#include "vm/method.h"
-#include "vm/utf8.h"
+#include <stdint.h>
+
#include "native/jni.h"
-#include "native/include/java_lang_String.h"
-#include "native/include/java_lang_ClassLoader.h"
-#include "native/include/java_lang_Throwable.h"
+#include "vm/global.h"
-/* table for locating native methods */
+#include "vmcore/class.h"
+#include "vmcore/loader.h"
+#include "vmcore/method.h"
+#include "vmcore/utf8.h"
-typedef struct nativeref nativeref;
-typedef struct nativecompref nativecompref;
+/* defines ********************************************************************/
-#if !defined(ENABLE_STATICVM)
-typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
-typedef struct hashtable_library_name_entry hashtable_library_name_entry;
+#define NATIVE_METHODS_COUNT sizeof(methods) / sizeof(JNINativeMethod)
+
+
+/* native_methods_node_t ******************************************************/
+
+typedef struct native_methods_node_t native_methods_node_t;
+
+struct native_methods_node_t {
+ utf *classname; /* class name */
+ utf *name; /* method name */
+ utf *descriptor; /* descriptor name */
+ functionptr function; /* pointer to the implementation */
+};
/* hashtable_library_loader_entry *********************************************/
+#if defined(ENABLE_LTDL)
+typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
+typedef struct hashtable_library_name_entry hashtable_library_name_entry;
+
struct hashtable_library_loader_entry {
- java_objectheader *loader; /* class loader */
+ classloader *loader; /* class loader */
hashtable_library_name_entry *namelink;/* libs loaded by this loader */
hashtable_library_loader_entry *hashlink;/* link for external chaining */
};
+#endif
/* hashtable_library_name_entry ***********************************************/
+#if defined(ENABLE_LTDL)
struct hashtable_library_name_entry {
utf *name; /* library name */
lt_dlhandle handle; /* libtool library handle */
#endif
-struct nativeref {
- char *classname;
- char *methodname;
- char *descriptor;
- bool isstatic;
- functionptr func;
-};
-
-/* table for fast string comparison */
-
-struct nativecompref {
- utf *classname;
- utf *methodname;
- utf *descriptor;
- bool isstatic;
- functionptr func;
-};
-
+/* function prototypes ********************************************************/
-/* initialize native subsystem */
bool native_init(void);
-#if defined(ENABLE_STATICVM)
-
-/* find native function */
-functionptr native_findfunction(utf *cname, utf *mname, utf *desc,
- bool isstatic);
-
-#else /* defined(ENABLE_STATICVM) */
+void native_method_register(utf *classname, const JNINativeMethod *methods,
+ int32_t count);
-/* add a library to the library hash */
-void native_hashtable_library_add(utf *filename, java_objectheader *loader,
- lt_dlhandle handle);
-
-/* find a library entry in the library hash */
-hashtable_library_name_entry *native_hashtable_library_find(utf *filename,
- java_objectheader *loader);
+#if defined(ENABLE_LTDL)
+lt_dlhandle native_library_open(utf *filename);
+void native_library_add(utf *filename, classloader *loader,
+ lt_dlhandle handle);
+hashtable_library_name_entry *native_library_find(utf *filename,
+ classloader *loader);
+#endif
-/* resolve native function */
functionptr native_resolve_function(methodinfo *m);
-#endif /* defined(ENABLE_STATICVM) */
-
-/* create new object on the heap and call the initializer */
-java_objectheader *native_new_and_init(classinfo *c);
-
-/* create new object on the heap and call the initializer
- mainly used for exceptions with a message */
-java_objectheader *native_new_and_init_string(classinfo *c, java_lang_String *s);
-
-/* create new object on the heap and call the initializer
- mainly used for exceptions with an index */
-java_objectheader *native_new_and_init_int(classinfo *c, s4 i);
-
-/* create new object on the heap and call the initializer
- mainly used for exceptions with cause */
-java_objectheader *native_new_and_init_throwable(classinfo *c, java_lang_Throwable *t);
-
-java_objectarray *native_get_parametertypes(methodinfo *m);
-java_objectarray *native_get_exceptiontypes(methodinfo *m);
-classinfo *native_get_returntype(methodinfo *m);
+java_handle_t *native_new_and_init(classinfo *c);
+java_handle_t *native_new_and_init_string(classinfo *c, java_handle_t *s);
#endif /* _NATIVE_H */
* c-basic-offset: 4
* tab-width: 4
* End:
+ * vim:noexpandtab:sw=4:ts=4:
*/