Merge -> trunk
[cacao.git] / src / cacaoh / dummy.c
index 4c1fcfde0b53dc18175b36efcd165dd3b7722cae..900c74c936356988c5fd9ac1bda296ca05dfcc9e 100644 (file)
@@ -1,9 +1,7 @@
 /* src/cacaoh/dummy.c - dummy functions for cacaoh
 
-   Copyright (C) 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) 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: headers.c 6286 2007-01-10 10:03:38Z twisti $
-
 */
 
 
 #include "config.h"
 
+#include <assert.h>
+#include <errno.h>
 #include <stdarg.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <assert.h>
 
-#if defined(ENABLE_THREADS)
-# include <pthread.h>
-#endif
+#include "mm/memory.h"
 
-#include "toolbox/logging.h"
+#include "native/llni.h"
 
-#include "vm/types.h"
+#include "toolbox/logging.h"
 
+#include "vm/exceptions.h"
 #include "vm/global.h"
+#include "vm/primitive.h"
 #include "vm/vm.h"
 
 #include "vmcore/class.h"
-#include "vmcore/method.h"
-#include "vmcore/utf8.h"
 #include "vmcore/classcache.h"
 #include "vmcore/loader.h"
+#include "vmcore/method.h"
+#include "vmcore/utf8.h"
+#include "vmcore/system.h"
 
 
 /* global variables ***********************************************************/
 
+bool  vm_initializing = true;
 char *_Jv_bootclasspath;
 
 
-java_objectheader *javastring_new_slash_to_dot(utf *u)
+java_handle_t *javastring_new_slash_to_dot(utf *u)
 {
        vm_abort("javastring_new_slash_to_dot");
 
@@ -73,7 +73,7 @@ bool access_is_accessible_class(classinfo *referer, classinfo *cls)
 }
 
 bool access_is_accessible_member(classinfo *referer, classinfo *declarer,
-                                                                s4 memberflags)
+                                                                int32_t memberflags)
 {
        vm_abort("access_is_accessible_member");
 
@@ -81,6 +81,60 @@ bool access_is_accessible_member(classinfo *referer, classinfo *declarer,
 }
 
 
+/* array **********************************************************************/
+
+java_handle_t *array_objectarray_element_get(java_handle_objectarray_t *a, int32_t index)
+{
+       java_handle_t *value;
+       int32_t        size;
+
+       if (a == NULL) {
+               log_println("array_objectarray_element_get(a=%p, index=%d): NullPointerException", a, index);
+               return NULL;
+       }
+
+       size = LLNI_array_size(a);
+
+       if ((index < 0) || (index > size)) {
+               log_println("array_objectarray_element_get(a=%p, index=%d): ArrayIndexOutOfBoundsException", a, index);
+               return NULL;
+       }
+
+       value = LLNI_WRAP(LLNI_array_direct(a, index));
+
+       return value;
+}
+
+void array_objectarray_element_set(java_handle_objectarray_t *a, int32_t index, java_handle_t *value)
+{
+       int32_t size;
+
+       if (a == NULL) {
+               log_println("array_objectarray_element_set(a=%p, index=%d): NullPointerException", a, index);
+               return;
+       }
+
+       size = LLNI_array_size(a);
+
+       if ((index < 0) || (index > size)) {
+               log_println("array_objectarray_element_set(a=%p, index=%d): ArrayIndexOutOfBoundsException", a, index);
+               return;
+       }
+
+       LLNI_array_direct(a, index) = LLNI_UNWRAP(value);
+}
+
+int32_t array_length_get(java_handle_t *a)
+{
+       if (a == NULL) {
+               log_println("array_length_get(a=%p): NullPointerException", a);
+               return 0;
+       }
+
+       return LLNI_array_size(a);
+}
+
+
 /* asm ************************************************************************/
 
 void asm_abstractmethoderror(void)
@@ -106,32 +160,53 @@ void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out
 
 /* builtin ********************************************************************/
 
-java_objectheader *builtin_clone(void *env, java_objectheader *o)
+java_handle_t *builtin_clone(void *env, java_handle_t *o)
 {
        abort();
 
        return NULL;
 }
 
-s4 builtin_isanysubclass(classinfo *sub, classinfo *super)
+int32_t builtin_isanysubclass(classinfo *sub, classinfo *super)
 {
        abort();
 
        return 0;
 }
 
-java_objectheader *builtin_new(classinfo *c)
+java_handle_t *builtin_new(classinfo *c)
 {
        abort();
 
        return NULL;
 }
 
-java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass)
+java_handle_objectarray_t *builtin_anewarray(int32_t size, classinfo *componentclass)
 {
-       abort();
+       java_objectarray_t *oa = (java_objectarray_t*) mem_alloc(
+               sizeof(java_array_t) + size * sizeof(java_object_t*));
+       java_handle_objectarray_t *h = (java_handle_objectarray_t*) LLNI_WRAP(
+               (java_object_t*) oa);
 
-       return NULL;
+       if (h != NULL) {
+               LLNI_array_size(h) = size;
+       }
+
+       return h;
+}
+
+java_handle_bytearray_t *builtin_newarray_byte(int32_t size)
+{
+       java_bytearray_t *ba = (java_bytearray_t*) mem_alloc(
+               sizeof(java_array_t) + size * sizeof(int8_t));
+       java_handle_bytearray_t *h = (java_handle_bytearray_t*) LLNI_WRAP(
+               (java_object_t*) ba);
+
+       if (h != NULL) {
+               LLNI_array_size(h) = size;
+       }
+       
+       return h;
 }
 
 
@@ -184,6 +259,7 @@ void exceptions_clear_exception(void)
 
 void exceptions_print_current_exception(void)
 {
+       abort();
 }
 
 void exceptions_throw_abstractmethoderror(void)
@@ -221,7 +297,7 @@ void exceptions_throw_classformaterror(classinfo *c, const char *message, ...)
        abort();
 }
 
-void exceptions_throw_incompatibleclasschangeerror(classinfo *c)
+void exceptions_throw_incompatibleclasschangeerror(classinfo *c, const char *message)
 {
        fprintf(stderr, "java.lang.IncompatibleClassChangeError: ");
 
@@ -278,14 +354,7 @@ void exceptions_throw_noclassdeffounderror_wrong_name(classinfo *c, utf *name)
        abort();
 }
 
-void exceptions_throw_outofmemoryerror(void)
-{
-       fprintf(stderr, "java.lang.OutOfMemoryError\n");
-
-       abort();
-}
-
-void exceptions_throw_verifyerror(methodinfo *m, const char *message)
+void exceptions_throw_verifyerror(methodinfo *m, const char *message, ...)
 {
        fprintf(stderr, "java.lang.VerifyError: ");
        utf_fprint_printable_ascii(stderr, m->name);
@@ -317,32 +386,19 @@ void exceptions_throw_nosuchmethoderror(classinfo *c, utf *name, utf *desc)
        abort();
 }
 
-void exceptions_throw_unsupportedclassversionerror(classinfo *c,
-                                                                                                  const char *message, ...)
+void exceptions_throw_unsupportedclassversionerror(classinfo *c, u4 ma, u4 mi)
 {
-       va_list ap;
-
        fprintf(stderr, "java.lang.UnsupportedClassVersionError: " );
-
        utf_display_printable_ascii(c->name);
-       fprintf(stderr, ": ");
-
-       va_start(ap, message);
-       vfprintf(stderr, message, ap);
-       va_end(ap);
-
-       fputc('\n', stderr);
+       fprintf(stderr, " (Unsupported major.minor version %d.%d)\n", ma, mi);
 
        abort();
 }
 
-void exceptions_throw_illegalaccessexception(classinfo *c)
+void exceptions_throw_classnotfoundexception(utf *name)
 {
-       fprintf(stderr, "java.lang.IllegalAccessException: ");
-
-       if (c != NULL)
-               utf_fprint_printable_ascii_classname(stderr, c->name);
-
+       fprintf(stderr, "java.lang.ClassNotFoundException: ");
+       utf_fprint_printable_ascii(stderr, name);
        fputc('\n', stderr);
 
        abort();
@@ -355,13 +411,6 @@ void exceptions_throw_nullpointerexception(void)
        abort();
 }
 
-void classnotfoundexception_to_noclassdeffounderror(void)
-{
-       /* Can that one happen? */
-
-       abort();
-}
-
 
 /* finalizer ******************************************************************/
 
@@ -378,22 +427,27 @@ void finalizer_run(void *o, void *p)
 
 /* gc *************************************************************************/
 
-s8 gc_get_heap_size(void)
+void gc_reference_register(java_object_t **ref, int32_t reftype)
+{
+       vm_abort("gc_reference_register");
+}
+
+int64_t gc_get_heap_size(void)
 {
        return 0;
 }
 
-s8 gc_get_free_bytes(void)
+int64_t gc_get_free_bytes(void)
 {
        return 0;
 }
 
-s8 gc_get_total_bytes(void)
+int64_t gc_get_total_bytes(void)
 {
        return 0;
 }
 
-s8 gc_get_max_heap_size(void)
+int64_t gc_get_max_heap_size(void)
 {
        return 0;
 }
@@ -401,12 +455,12 @@ s8 gc_get_max_heap_size(void)
 
 /* heap ***********************************************************************/
 
-void *heap_alloc_uncollectable(u4 bytelength)
+void *heap_alloc_uncollectable(uint32_t bytelength)
 {
        return calloc(bytelength, 1);
 }
 
-s4 heap_get_hashcode(java_objectheader *o)
+s4 heap_get_hashcode(java_object_t *o)
 {
        return 0;
 }
@@ -420,18 +474,45 @@ void jit_invalidate_code(methodinfo *m)
 }
 
 
+/* llni ***********************************************************************/
+
+void llni_critical_start()
+{
+}
+
+void llni_critical_end()
+{
+}
+
+
+/* localref *******************************************************************/
+
+java_handle_t *localref_add(java_object_t *o)
+{
+#if defined(ENABLE_HANDLES)
+       java_handle_t *h = (java_handle_t*) mem_alloc(sizeof(java_handle_t));
+
+       h->heap_object = o;
+
+       return h;
+#else
+       return (java_handle_t*) o;
+#endif
+}
+
+
 /* lock ***********************************************************************/
 
-void lock_init_object_lock(java_objectheader *o)
+void lock_init_object_lock(java_object_t *o)
 {
 }
 
-bool lock_monitor_enter(java_objectheader *o)
+bool lock_monitor_enter(java_handle_t *o)
 {
        return true;
 }
 
-bool lock_monitor_exit(java_objectheader *o)
+bool lock_monitor_exit(java_handle_t *o)
 {
        return true;
 }
@@ -443,43 +524,80 @@ void md_param_alloc(methoddesc *md)
 {
 }
 
+void md_param_alloc_native(methoddesc *md)
+{
+}
+
 
 /* memory *********************************************************************/
 
-void *mem_alloc(s4 size)
+void *mem_alloc(int32_t size)
 {
        /* real implementation in src/mm/memory.c clears memory */
 
        return calloc(size, 1);
 }
 
-void *mem_realloc(void *src, s4 len1, s4 len2)
+void *mem_realloc(void *src, int32_t len1, int32_t len2)
 {
        return realloc(src, len2);
 }
 
-void mem_free(void *m, s4 size)
+void mem_free(void *m, int32_t size)
 {
        free(m);
 }
 
-void *dump_alloc(s4 size)
+void *dumpmemory_get(size_t size)
 {
        return malloc(size);
 }
 
-void dump_release(s4 size)
+int32_t dumpmemory_marker(void)
 {
+       return 0;
 }
 
-s4 dump_size(void)
+void dumpmemory_release(int32_t size)
 {
-       return 0;
+}
+
+
+/* package ********************************************************************/
+
+/* void package_add(java_handle_t *packagename) */
+void package_add(utf *packagename)
+{
+       /* Do nothing. */
+}
+
+
+/* primitive ******************************************************************/
+
+classinfo *primitive_arrayclass_get_by_type(int type)
+{
+       return NULL;
+}
+
+classinfo *primitive_class_get_by_type(int type)
+{
+       abort();
+       return NULL;
+}
+
+classinfo *primitive_class_get_by_char(char ch)
+{
+       abort();
+       return NULL;
 }
 
 
 /* properties *****************************************************************/
 
+void properties_add(char *key, char *value)
+{
+}
+
 char *properties_get(char *key)
 {
        return NULL;
@@ -587,7 +705,7 @@ classinfo * resolve_classref_or_classinfo_eager(classref_or_classinfo cls,
 
 /* stacktrace *****************************************************************/
 
-java_objectarray *stacktrace_getClassContext()
+java_handle_objectarray_t *stacktrace_getClassContext()
 {
        return NULL;
 }
@@ -595,32 +713,63 @@ java_objectarray *stacktrace_getClassContext()
 
 /* threads ********************************************************************/
 
-pthread_key_t threads_current_threadobject_key;
-
-ptrint threads_get_current_tid(void)
+intptr_t threads_get_current_tid(void)
 {
        return 0;
 }
 
+void threads_cast_stopworld(void)
+{
+}
+
+void threads_cast_startworld(void)
+{
+}
+
 
 /* vm *************************************************************************/
 
+void vm_printconfig(void)
+{
+}
+
 void vm_abort(const char *text, ...)
 {
        va_list ap;
 
-       /* print the log message */
-
        va_start(ap, text);
        vfprintf(stderr, text, ap);
        va_end(ap);
 
-       /* now abort the VM */
+       system_abort();
+}
 
-       abort();
+void vm_abort_errno(const char *text, ...)
+{
+       va_list ap;
+
+       va_start(ap, text);
+       vm_abort_errnum(errno, text, ap);
+       va_end(ap);
 }
 
-java_objectheader *vm_call_method(methodinfo *m, java_objectheader *o, ...)
+void vm_abort_errnum(int errnum, const char *text, ...)
+{
+       va_list ap;
+
+       log_start();
+
+       va_start(ap, text);
+       log_vprint(text, ap);
+       va_end(ap);
+
+       log_print(": %s", system_strerror(errnum));
+       log_finish();
+
+       system_abort();
+}
+
+java_handle_t *vm_call_method(methodinfo *m, java_handle_t *o, ...)
 {
        return NULL;
 }
@@ -633,7 +782,7 @@ void stringtable_update(void)
        log_println("stringtable_update: REMOVE ME!");
 }
 
-java_objectheader *literalstring_new(utf *u)
+java_object_t *literalstring_new(utf *u)
 {
        log_println("literalstring_new: REMOVE ME!");
 
@@ -646,6 +795,21 @@ void print_dynamic_super_statistics(void)
 }
 
 
+#if defined(ENABLE_VMLOG)
+void vmlog_cacao_set_prefix(const char *arg)
+{
+}
+
+void vmlog_cacao_set_stringprefix(const char *arg)
+{
+}
+
+void vmlog_cacao_set_ignoreprefix(const char *arg)
+{
+}
+#endif
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where