1 /* src/cacaoh/dummy.c - dummy functions for cacaoh
3 Copyright (C) 2007 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 $Id: dummy.c 8360 2007-08-20 18:02:50Z michi $
38 #include "toolbox/logging.h"
40 #include "vm/global.h"
41 #include "vm/primitive.h"
44 #include "vmcore/class.h"
45 #include "vmcore/method.h"
46 #include "vmcore/utf8.h"
47 #include "vmcore/classcache.h"
48 #include "vmcore/loader.h"
51 /* global variables ***********************************************************/
53 char *_Jv_bootclasspath;
56 java_handle_t *javastring_new_slash_to_dot(utf *u)
58 vm_abort("javastring_new_slash_to_dot");
64 /* access *********************************************************************/
66 bool access_is_accessible_class(classinfo *referer, classinfo *cls)
71 bool access_is_accessible_member(classinfo *referer, classinfo *declarer,
74 vm_abort("access_is_accessible_member");
80 /* asm ************************************************************************/
82 void asm_abstractmethoderror(void)
87 void intrp_asm_abstractmethoderror(void)
92 void asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out)
97 void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out)
103 /* builtin ********************************************************************/
105 java_handle_t *builtin_clone(void *env, java_handle_t *o)
112 int32_t builtin_isanysubclass(classinfo *sub, classinfo *super)
119 java_handle_t *builtin_new(classinfo *c)
126 java_handle_objectarray_t *builtin_anewarray(int32_t size, classinfo *componentclass)
133 java_handle_bytearray_t *builtin_newarray_byte(int32_t size)
141 /* code ***********************************************************************/
143 void code_free_code_of_method(methodinfo *m)
148 methodinfo *code_get_methodinfo_for_pv(u1 *pv)
154 /* codegen ********************************************************************/
156 u1 *codegen_generate_stub_compiler(methodinfo *m)
161 codeinfo *codegen_generate_stub_native(methodinfo *m, functionptr f)
166 #if defined(ENABLE_INTRP)
167 u1 *intrp_createcompilerstub(methodinfo *m)
173 void removecompilerstub(u1 *stub)
177 void removenativestub(u1 *stub)
182 /* exceptions *****************************************************************/
184 void exceptions_clear_exception(void)
188 void exceptions_print_current_exception(void)
193 void exceptions_throw_abstractmethoderror(void)
195 fprintf(stderr, "java.lang.AbstractMethodError\n");
200 void exceptions_throw_classcircularityerror(classinfo *c)
202 fprintf(stderr, "java.lang.ClassCircularityError: ");
204 utf_display_printable_ascii(c->name);
210 void exceptions_throw_classformaterror(classinfo *c, const char *message, ...)
214 fprintf(stderr, "java.lang.ClassFormatError: ");
216 utf_display_printable_ascii(c->name);
217 fprintf(stderr, ": ");
219 va_start(ap, message);
220 vfprintf(stderr, message, ap);
228 void exceptions_throw_incompatibleclasschangeerror(classinfo *c)
230 fprintf(stderr, "java.lang.IncompatibleClassChangeError: ");
233 utf_fprint_printable_ascii_classname(stderr, c->name);
240 void exceptions_throw_internalerror(const char *message, ...)
244 fprintf(stderr, "java.lang.InternalError: ");
246 va_start(ap, message);
247 vfprintf(stderr, message, ap);
253 void exceptions_throw_linkageerror(const char *message, classinfo *c)
255 fprintf(stderr, "java.lang.LinkageError: %s", message);
258 utf_fprint_printable_ascii_classname(stderr, c->name);
265 void exceptions_throw_noclassdeffounderror(utf *name)
267 fprintf(stderr, "java.lang.NoClassDefFoundError: ");
268 utf_fprint_printable_ascii(stderr, name);
274 void exceptions_throw_noclassdeffounderror_wrong_name(classinfo *c, utf *name)
276 fprintf(stderr, "java.lang.NoClassDefFoundError: ");
277 utf_fprint_printable_ascii(stderr, c->name);
278 fprintf(stderr, " (wrong name: ");
279 utf_fprint_printable_ascii(stderr, name);
280 fprintf(stderr, ")\n");
285 void exceptions_throw_verifyerror(methodinfo *m, const char *message)
287 fprintf(stderr, "java.lang.VerifyError: ");
288 utf_fprint_printable_ascii(stderr, m->name);
289 fprintf(stderr, ": %s", message);
294 void exceptions_throw_nosuchfielderror(classinfo *c, utf *name)
296 fprintf(stderr, "java.lang.NoSuchFieldError: ");
297 utf_fprint_printable_ascii(stderr, c->name);
298 fprintf(stderr, ".");
299 utf_fprint_printable_ascii(stderr, name);
305 void exceptions_throw_nosuchmethoderror(classinfo *c, utf *name, utf *desc)
307 fprintf(stderr, "java.lang.NoSuchMethodError: ");
308 utf_fprint_printable_ascii(stderr, c->name);
309 fprintf(stderr, ".");
310 utf_fprint_printable_ascii(stderr, name);
311 utf_fprint_printable_ascii(stderr, desc);
317 void exceptions_throw_unsupportedclassversionerror(classinfo *c,
318 const char *message, ...)
322 fprintf(stderr, "java.lang.UnsupportedClassVersionError: " );
324 utf_display_printable_ascii(c->name);
325 fprintf(stderr, ": ");
327 va_start(ap, message);
328 vfprintf(stderr, message, ap);
336 void exceptions_throw_classnotfoundexception(utf *name)
338 fprintf(stderr, "java.lang.ClassNotFoundException: ");
339 utf_fprint_printable_ascii(stderr, name);
345 void exceptions_throw_nullpointerexception(void)
347 fprintf(stderr, "java.lang.NullPointerException\n");
353 /* finalizer ******************************************************************/
355 void finalizer_notify(void)
357 vm_abort("finalizer_notify");
360 void finalizer_run(void *o, void *p)
362 vm_abort("finalizer_run");
366 /* gc *************************************************************************/
368 void gc_reference_register(java_object_t **ref)
370 vm_abort("gc_reference_register");
373 int64_t gc_get_heap_size(void)
378 int64_t gc_get_free_bytes(void)
383 int64_t gc_get_total_bytes(void)
388 int64_t gc_get_max_heap_size(void)
394 /* heap ***********************************************************************/
396 void *heap_alloc_uncollectable(uint32_t bytelength)
398 return calloc(bytelength, 1);
401 s4 heap_get_hashcode(java_object_t *o)
407 /* jit ************************************************************************/
409 void jit_invalidate_code(methodinfo *m)
411 vm_abort("jit_invalidate_code");
415 /* lock ***********************************************************************/
417 void lock_init_object_lock(java_object_t *o)
421 bool lock_monitor_enter(java_object_t *o)
426 bool lock_monitor_exit(java_object_t *o)
432 /* md *************************************************************************/
434 void md_param_alloc(methoddesc *md)
438 void md_param_alloc_native(methoddesc *md)
443 /* memory *********************************************************************/
445 void *mem_alloc(int32_t size)
447 /* real implementation in src/mm/memory.c clears memory */
449 return calloc(size, 1);
452 void *mem_realloc(void *src, int32_t len1, int32_t len2)
454 return realloc(src, len2);
457 void mem_free(void *m, int32_t size)
462 void *dump_alloc(int32_t size)
467 void dump_release(int32_t size)
471 int32_t dump_size(void)
477 /* primitive ******************************************************************/
479 classinfo *primitive_class_get_by_type(int type)
485 classinfo *primitive_class_get_by_char(char ch)
492 /* properties *****************************************************************/
494 void properties_add(char *key, char *value)
498 char *properties_get(char *key)
504 /* resolve ********************************************************************/
506 bool resolve_class_from_typedesc(typedesc *d, bool checkaccess, bool link, classinfo **result)
513 /* stupid resolving implementation used by resolve_classref_or_classinfo_eager */
514 /* This function does eager resolving without any access checks. */
516 static classinfo * dummy_resolve_class_from_name(classinfo *referer,
520 classinfo *cls = NULL;
527 /* lookup if this class has already been loaded */
529 cls = classcache_lookup(referer->classloader, classname);
532 /* resolve array types */
534 if (classname->text[0] == '[') {
535 utf_ptr = classname->text + 1;
536 len = classname->blength - 1;
538 /* classname is an array type name */
546 /* the component type is a reference type */
547 /* resolve the component type */
548 if ((cls = dummy_resolve_class_from_name(referer,
549 utf_new(utf_ptr,len),
550 checkaccess)) == NULL)
551 return NULL; /* exception */
553 /* create the array class */
554 cls = class_array_of(cls,false);
556 return NULL; /* exception */
562 if (!(cls = load_class_from_classloader(classname,
563 referer->classloader)))
564 return false; /* exception */
568 /* the class is now loaded */
570 assert(cls->state & CLASS_LOADED);
576 classinfo * resolve_classref_or_classinfo_eager(classref_or_classinfo cls,
583 if (IS_CLASSREF(cls)) {
584 /* we must resolve this reference */
586 if ((c = dummy_resolve_class_from_name(cls.ref->referer, cls.ref->name,
587 checkaccess)) == NULL)
591 /* cls has already been resolved */
596 assert(c->state & CLASS_LOADED);
603 /* stacktrace *****************************************************************/
605 java_handle_objectarray_t *stacktrace_getClassContext()
611 /* threads ********************************************************************/
613 intptr_t threads_get_current_tid(void)
618 void threads_stopworld(void)
622 void threads_startworld(void)
627 /* vm *************************************************************************/
629 void vm_printconfig(void)
633 void vm_abort(const char *text, ...)
637 /* print the log message */
640 vfprintf(stderr, text, ap);
643 /* now abort the VM */
648 java_handle_t *vm_call_method(methodinfo *m, java_handle_t *o, ...)
656 void stringtable_update(void)
658 log_println("stringtable_update: REMOVE ME!");
661 java_object_t *literalstring_new(utf *u)
663 log_println("literalstring_new: REMOVE ME!");
669 void print_dynamic_super_statistics(void)
675 * These are local overrides for various environment variables in Emacs.
676 * Please do not remove this and leave it at the end of the file, where
677 * Emacs will automagically detect them.
678 * ---------------------------------------------------------------------
681 * indent-tabs-mode: t
685 * vim:noexpandtab:sw=4:ts=4: