/* 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: dummy.c 8321 2007-08-16 11:37:25Z michi $
-
*/
#include "config.h"
#include <assert.h>
+#include <errno.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+#include "mm/memory.h"
+
+#include "native/llni.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;
}
+/* 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)
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)
{
- abort();
+ 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);
- return NULL;
+ if (h != NULL) {
+ LLNI_array_size(h) = size;
+ }
+
+ return h;
}
abort();
}
-void exceptions_throw_incompatibleclasschangeerror(classinfo *c)
+void exceptions_throw_incompatibleclasschangeerror(classinfo *c, const char *message)
{
fprintf(stderr, "java.lang.IncompatibleClassChangeError: ");
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);
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();
}
/* gc *************************************************************************/
-void gc_reference_register(java_objectheader **ref)
+void gc_reference_register(java_object_t **ref, int32_t reftype)
{
+ vm_abort("gc_reference_register");
}
int64_t gc_get_heap_size(void)
return calloc(bytelength, 1);
}
-s4 heap_get_hashcode(java_objectheader *o)
+s4 heap_get_hashcode(java_object_t *o)
{
return 0;
}
}
+/* 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_object_t *o)
{
}
-bool lock_monitor_enter(java_object_t *o)
+bool lock_monitor_enter(java_handle_t *o)
{
return true;
}
-bool lock_monitor_exit(java_object_t *o)
+bool lock_monitor_exit(java_handle_t *o)
{
return true;
}
free(m);
}
-void *dump_alloc(int32_t size)
+void *dumpmemory_get(size_t size)
{
return malloc(size);
}
-void dump_release(int32_t size)
+int32_t dumpmemory_marker(void)
{
+ return 0;
}
-int32_t 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 0;
}
-void threads_stopworld(void)
+void threads_cast_stopworld(void)
{
}
-void threads_startworld(void)
+void threads_cast_startworld(void)
{
}
{
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);
+}
+
+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, ...)
}
+#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