X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fnative%2Fnative.h;h=ee0403283c7a7a7e42e985590d6241005f7ee3bf;hb=9f859ad50d3d5d98c185d40b86b2179bc4dc9aeb;hp=5eb5f26f17d7be2eabd16ded74008fc92fa417b2;hpb=58e298a1fd408c1a9e60fad6ba3ab34e61653c58;p=cacao.git diff --git a/src/native/native.h b/src/native/native.h index 5eb5f26f1..ee0403283 100644 --- a/src/native/native.h +++ b/src/native/native.h @@ -1,9 +1,9 @@ /* src/native/native.h - table of native functions - Copyright (C) 1996-2005 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 + 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 This file is part of CACAO. @@ -19,16 +19,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. - - Contact: cacao@complang.tuwien.ac.at - - Authors: Reinhard Grafl - - Changes: Christian Thalinger - - $Id: native.h 2861 2005-06-28 18:38:16Z twisti $ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ @@ -36,45 +28,69 @@ #ifndef _NATIVE_H #define _NATIVE_H -#if !defined(ENABLE_STATICVM) -# include "libltdl/ltdl.h" +#include "config.h" + +#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H) +# include #endif -#include "vm/class.h" -#include "vm/global.h" -#include "vm/method.h" -#include "vm/utf8.h" +#include + #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(ENABLE_STATICVM) -typedef struct library_hash_loader_entry library_hash_loader_entry; -typedef struct library_hash_name_entry library_hash_name_entry; +/* native_methods_node_t ******************************************************/ -/* library_hash_loader_entry **************************************************/ +typedef struct native_methods_node_t native_methods_node_t; -struct library_hash_loader_entry { - java_objectheader *loader; /* class loader */ - library_hash_name_entry *namelink;/* libraries loaded by this loader */ - library_hash_loader_entry *hashlink;/* link for external chaining */ +struct native_methods_node_t { + utf *classname; /* class name */ + utf *name; /* method name */ + utf *descriptor; /* descriptor name */ + functionptr function; /* pointer to the implementation */ }; -/* library_hash_name_entry ****************************************************/ +/* 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 { + 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 ***********************************************/ -struct library_hash_name_entry { - utf *name; /* library name */ - lt_dlhandle handle; /* libtool library handle */ - library_hash_name_entry *hashlink; /* link for external chaining */ +#if defined(ENABLE_LTDL) +struct hashtable_library_name_entry { + utf *name; /* library name */ + lt_dlhandle handle; /* libtool library handle */ + hashtable_library_name_entry *hashlink; /* link for external chaining */ }; #endif @@ -98,126 +114,35 @@ struct nativecompref { }; -bool use_class_as_object(classinfo *c); +/* function prototypes ********************************************************/ -/* initialize native subsystem */ bool native_init(void); -/* find native function */ -functionptr native_findfunction(utf *cname, utf *mname, - utf *desc, bool isstatic); - -#if !defined(ENABLE_STATICVM) -/* add a library to the library hash */ -void native_library_hash_add(utf *filename, java_objectheader *loader, - lt_dlhandle handle); - -/* resolve native function */ -functionptr native_resolve_function(methodinfo *m); -#endif - -/* 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); +void native_method_register(utf *classname, const JNINativeMethod *methods, + int32_t count); -/* 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); +#if defined(WITH_STATIC_CLASSPATH) -/* 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); +functionptr native_findfunction(utf *cname, utf *mname, utf *desc, + bool isstatic); -/* add property to temporary property list -- located in nat/VMRuntime.c */ -void create_property(char *key, char *value); +#else /* defined(WITH_STATIC_CLASSPATH) */ -/* correct vftbl-entries of javastring-hash */ -void stringtable_update(); - - -/* search 'classinfo'-structure for a field with the specified name */ -fieldinfo *class_findfield_approx(classinfo *c, utf *name); -s4 class_findfield_index_approx(classinfo *c, utf *name); - -void copy_vftbl(vftbl_t **dest, vftbl_t *src); - -utf *create_methodsig(java_objectarray* types, char *retType); -classinfo *get_type(char **utf_ptr,char *desc_end, bool skip); -java_objectarray* get_parametertypes(methodinfo *m); -java_objectarray* get_exceptiontypes(methodinfo *m); -classinfo *get_returntype(methodinfo *m); - - -/*----- For Static Analysis of Natives by parseRT -----*/ - -/*---------- global variables ---------------------------*/ -typedef struct classMeth classMeth; -typedef struct nativeCall nativeCall; -typedef struct methodCall methodCall; -typedef struct nativeMethod nativeMethod; - -typedef struct nativeCompCall nativeCompCall; -typedef struct methodCompCall methodCompCall; -typedef struct nativeCompMethod nativeCompMethod; - -/*---------- Define Constants ---------------------------*/ -#define MAXCALLS 30 - -struct classMeth { - int i_class; - int j_method; - int methCnt; -}; - -struct methodCall{ - char *classname; - char *methodname; - char *descriptor; -}; - -struct nativeMethod { - char *methodname; - char *descriptor; - struct methodCall methodCalls[MAXCALLS]; -}; - - -struct nativeCall { - char *classname; - struct nativeMethod methods[MAXCALLS]; - int methCnt; - int callCnt[MAXCALLS]; -}; - - -struct methodCompCall { - utf *classname; - utf *methodname; - utf *descriptor; -}; - - -struct nativeCompMethod { - utf *methodname; - utf *descriptor; - struct methodCompCall methodCalls[MAXCALLS]; -}; +# 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 +functionptr native_resolve_function(methodinfo *m); -struct nativeCompCall { - utf *classname; - struct nativeCompMethod methods[MAXCALLS]; - int methCnt; - int callCnt[MAXCALLS]; -}; +#endif /* defined(WITH_STATIC_CLASSPATH) */ +java_handle_t *native_new_and_init(classinfo *c); -bool natcall2utf(bool); -void printNativeCall(nativeCall); -void markNativeMethodsRT(utf *, utf* , utf* ); +java_handle_t *native_new_and_init_string(classinfo *c, java_handle_t *s); #endif /* _NATIVE_H */