/* src/vmcore/loader.h - class loader header
- 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
+ Copyright (C) 1996-2005, 2006, 2007, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: loader.h 7921 2007-05-20 23:14:11Z michi $
*/
/* classbuffer ****************************************************************/
struct classbuffer {
- classinfo *class; /* pointer to classinfo structure */
- u1 *data; /* pointer to byte code */
- s4 size; /* size of the byte code */
- u1 *pos; /* current read position */
+ classinfo *clazz; /* pointer to classinfo structure */
+ uint8_t *data; /* pointer to byte code */
+ int32_t size; /* size of the byte code */
+ uint8_t *pos; /* current read position */
char *path; /* path to file (for debugging) */
};
-/* hashtable_classloader_entry ************************************************/
+/* hashtable_classloader_entry *************************************************
+
+ ATTENTION: The pointer to the classloader object needs to be the
+ first field of the entry, so that it can be used as an indirection
+ cell. This is checked by gc_init() during startup.
+
+*******************************************************************************/
typedef struct hashtable_classloader_entry hashtable_classloader_entry;
struct hashtable_classloader_entry {
- java_objectheader *object;
+ java_object_t *object;
hashtable_classloader_entry *hashlink;
};
-/* classloader ****************************************************************/
+/* classloader *****************************************************************
+
+ [!ENABLE_HANDLES]: The classloader is a Java Object which cannot move.
+ [ENABLE_HANDLES] : The classloader entry itself is a static handle for a
+ given classloader (use loader_hashtable_classloader_foo).
-typedef hashtable_classloader_entry classloader;
+*******************************************************************************/
+
+#if defined(ENABLE_HANDLES)
+typedef hashtable_classloader_entry classloader_t;
+#else
+typedef java_object_t classloader_t;
+#endif
/* function prototypes ********************************************************/
-/* initialize loader, load important systemclasses */
-bool loader_init(void);
+void loader_preinit(void);
+void loader_init(void);
/* classloader management functions */
-classloader *loader_hashtable_classloader_add(java_objectheader *cl);
-classloader *loader_hashtable_classloader_find(java_objectheader *cl);
+classloader_t *loader_hashtable_classloader_add(java_handle_t *cl);
+classloader_t *loader_hashtable_classloader_find(java_handle_t *cl);
void loader_load_all_classes(void);
/* class loading functions */
classinfo *load_class_from_sysloader(utf *name);
-classinfo *load_class_from_classloader(utf *name, classloader *cl);
+classinfo *load_class_from_classloader(utf *name, classloader_t *cl);
classinfo *load_class_bootstrap(utf *name);
/* (don't use the following directly) */
classinfo *load_class_from_classbuffer(classbuffer *cb);
-classinfo *load_newly_created_array(classinfo *c, classloader *loader);
+classinfo *load_newly_created_array(classinfo *c, classloader_t *loader);
#endif /* _LOADER_H */