/* 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 4530 2006-02-21 09:11:53Z twisti $
-
*/
#include "config.h"
-#if !defined(WITH_STATIC_CLASSPATH)
+#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"
+
+#include "vmcore/class.h"
+#include "vmcore/method.h"
+#include "vmcore/utf8.h"
+
+
+/* defines ********************************************************************/
+
+#define NATIVE_METHODS_COUNT sizeof(methods) / sizeof(JNINativeMethod)
/* table for locating native methods */
+#if defined(WITH_STATIC_CLASSPATH)
typedef struct nativeref nativeref;
typedef struct nativecompref nativecompref;
+#endif
-#if !defined(WITH_STATIC_CLASSPATH)
-typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
-typedef struct hashtable_library_name_entry hashtable_library_name_entry;
+/* 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 */
};
-/* initialize native subsystem */
+/* function prototypes ********************************************************/
+
bool native_init(void);
+void native_method_register(utf *classname, const JNINativeMethod *methods,
+ int32_t count);
+
#if defined(WITH_STATIC_CLASSPATH)
-/* find native function */
functionptr native_findfunction(utf *cname, utf *mname, utf *desc,
bool isstatic);
#else /* defined(WITH_STATIC_CLASSPATH) */
-/* 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(WITH_STATIC_CLASSPATH) */
-/* 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_handle_t *native_new_and_init(classinfo *c);
-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_string(classinfo *c, java_handle_t *s);
#endif /* _NATIVE_H */