Rename include/vm/java_lang.h to include/vm/preload.h
Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- Makefile | 3 +- include/vm/java_lang.h | 30 -------- include/vm/preload.h | 32 ++++++++ jit/emulate.c | 1 + jit/trace-jit.c | 2 +- jit/trampoline.c | 1 + test/arch-x86/Makefile | 2 +- test/vm/java_lang-stub.c | 11 --- test/vm/preload-stub.c | 23 ++++++ vm/class.c | 2 +- vm/classloader.c | 2 +- vm/jato.c | 148 +-------------------------------------- vm/object.c | 2 +- vm/preload.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++ vm/stack-trace.c | 2 +- 15 files changed, 243 insertions(+), 195 deletions(-) delete mode 100644 include/vm/java_lang.h create mode 100644 include/vm/preload.h delete mode 100644 test/vm/java_lang-stub.c create mode 100644 test/vm/preload-stub.c create mode 100644 vm/preload.c diff --git a/Makefile b/Makefile index 73df9b4..640e2dd 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,8 @@ VM_OBJS = \ vm/static.o \ vm/types.o \ vm/utf8.o \ - vm/zalloc.o + vm/zalloc.o \ + vm/preload.o LIB_OBJS = \ lib/bitset.o \ diff --git a/include/vm/java_lang.h b/include/vm/java_lang.h deleted file mode 100644 index cb9d150..0000000 --- a/include/vm/java_lang.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _VM_JAVA_LANG_H -#define _VM_JAVA_LANG_H - -extern struct vm_class *vm_java_lang_Object; -extern struct vm_class *vm_java_lang_Class; -extern struct vm_class *vm_java_lang_String; -extern struct vm_class *vm_java_lang_Throwable; -extern struct vm_class *vm_java_util_Properties; -extern struct vm_class *vm_java_lang_VMThrowable; -extern struct vm_class *vm_java_lang_StackTraceElement; -extern struct vm_class *vm_array_of_java_lang_StackTraceElement; -extern struct vm_class *vm_boolean_class; -extern struct vm_class *vm_char_class; -extern struct vm_class *vm_float_class; -extern struct vm_class *vm_double_class; -extern struct vm_class *vm_byte_class; -extern struct vm_class *vm_short_class; -extern struct vm_class *vm_int_class; -extern struct vm_class *vm_long_class; - -extern struct vm_field *vm_java_lang_Class_vmdata; -extern struct vm_field *vm_java_lang_String_offset; -extern struct vm_field *vm_java_lang_String_count; -extern struct vm_field *vm_java_lang_String_value; -extern struct vm_field *vm_java_lang_Throwable_detailMessage; -extern struct vm_field *vm_java_lang_VMThrowable_vmdata; - -extern struct vm_method *vm_java_util_Properties_setProperty; - -#endif diff --git a/include/vm/preload.h b/include/vm/preload.h new file mode 100644 index 0000000..4c46462 --- /dev/null +++ b/include/vm/preload.h @@ -0,0 +1,32 @@ +#ifndef _VM_JAVA_LANG_H +#define _VM_JAVA_LANG_H + +extern struct vm_class *vm_java_lang_Object; +extern struct vm_class *vm_java_lang_Class; +extern struct vm_class *vm_java_lang_String; +extern struct vm_class *vm_java_lang_Throwable; +extern struct vm_class *vm_java_util_Properties; +extern struct vm_class *vm_java_lang_VMThrowable; +extern struct vm_class *vm_java_lang_StackTraceElement; +extern struct vm_class *vm_array_of_java_lang_StackTraceElement; +extern struct vm_class *vm_boolean_class; +extern struct vm_class *vm_char_class; +extern struct vm_class *vm_float_class; +extern struct vm_class *vm_double_class; +extern struct vm_class *vm_byte_class; +extern struct vm_class *vm_short_class; +extern struct vm_class *vm_int_class; +extern struct vm_class *vm_long_class; + +extern struct vm_field *vm_java_lang_Class_vmdata; +extern struct vm_field *vm_java_lang_String_offset; +extern struct vm_field *vm_java_lang_String_count; +extern struct vm_field *vm_java_lang_String_value; +extern struct vm_field *vm_java_lang_Throwable_detailMessage; +extern struct vm_field *vm_java_lang_VMThrowable_vmdata; + +extern struct vm_method *vm_java_util_Properties_setProperty; + +int preload_vm_classes(void); + +#endif diff --git a/jit/emulate.c b/jit/emulate.c index d64eaa2..368b8b3 100644 --- a/jit/emulate.c +++ b/jit/emulate.c @@ -28,6 +28,7 @@ #include <jit/exception.h> #include <jit/emulate.h> #include <vm/class.h> +#include <vm/preload.h> int emulate_lcmp(long long value1, long long value2) { diff --git a/jit/trace-jit.c b/jit/trace-jit.c index 89158e2..bfcce4e 100644 --- a/jit/trace-jit.c +++ b/jit/trace-jit.c @@ -17,7 +17,7 @@ #include <jit/statement.h> #include <jit/vars.h> #include <jit/args.h> -#include <vm/java_lang.h> +#include <vm/preload.h> #include <vm/object.h> #include <vm/buffer.h> diff --git a/jit/trampoline.c b/jit/trampoline.c index 40c8eca..c0ce053 100644 --- a/jit/trampoline.c +++ b/jit/trampoline.c @@ -29,6 +29,7 @@ #include <jit/exception.h> #include <jit/compiler.h> +#include <vm/preload.h> #include <vm/buffer.h> #include <vm/class.h> #include <vm/method.h> diff --git a/test/arch-x86/Makefile b/test/arch-x86/Makefile index 21d039c..2470e2d 100644 --- a/test/arch-x86/Makefile +++ b/test/arch-x86/Makefile @@ -79,7 +79,7 @@ OBJS = \ ../jit/trace-stub.o \ ../libharness/libharness.o \ ../vm/classloader-stub.o \ - ../vm/java_lang-stub.o \ + ../vm/preload-stub.o \ $(TESTS) TESTS = \ diff --git a/test/vm/java_lang-stub.c b/test/vm/java_lang-stub.c deleted file mode 100644 index bb5dde2..0000000 --- a/test/vm/java_lang-stub.c +++ /dev/null @@ -1,11 +0,0 @@ -#include <vm/class.h> -#include <vm/java_lang.h> - -struct vm_class *vm_java_lang_Object; -struct vm_class *vm_java_lang_Class; -struct vm_field *vm_java_lang_Class_vmdata; -struct vm_class *vm_java_lang_String; - -struct vm_field *vm_java_lang_String_offset; -struct vm_field *vm_java_lang_String_count; -struct vm_field *vm_java_lang_String_value; diff --git a/test/vm/preload-stub.c b/test/vm/preload-stub.c new file mode 100644 index 0000000..b068714 --- /dev/null +++ b/test/vm/preload-stub.c @@ -0,0 +1,23 @@ +#include <vm/class.h> +#include <vm/preload.h> + +struct vm_class *vm_java_lang_Object; +struct vm_class *vm_java_lang_Class; +struct vm_field *vm_java_lang_Class_vmdata; +struct vm_class *vm_java_lang_String; + +struct vm_field *vm_java_lang_String_offset; +struct vm_field *vm_java_lang_String_count; +struct vm_field *vm_java_lang_String_value; + +struct vm_class *vm_java_lang_Error; +struct vm_class *vm_java_lang_ArithmeticException; +struct vm_class *vm_java_lang_NullPointerException; +struct vm_class *vm_java_lang_NoClassDefFoundError; +struct vm_class *vm_java_lang_UnsatisfiedLinkError; +struct vm_class *vm_java_lang_ArrayIndexOutOfBoundsException; +struct vm_class *vm_java_lang_ArrayStoreException; +struct vm_class *vm_java_lang_RuntimeException; +struct vm_class *vm_java_lang_ExceptionInInitializerError; +struct vm_class *vm_java_lang_NegativeArraySizeException; +struct vm_class *vm_java_lang_ClassCastException; diff --git a/vm/class.c b/vm/class.c index c61a667..35bdc95 100644 --- a/vm/class.c +++ b/vm/class.c @@ -38,7 +38,7 @@ #include <vm/classloader.h> #include <vm/die.h> #include <vm/field.h> -#include <vm/java_lang.h> +#include <vm/preload.h> #include <vm/method.h> #include <vm/object.h> #include <vm/string.h> diff --git a/vm/classloader.c b/vm/classloader.c index e99e41e..a615fa3 100644 --- a/vm/classloader.c +++ b/vm/classloader.c @@ -10,7 +10,7 @@ #include <vm/class.h> #include <vm/classloader.h> -#include <vm/java_lang.h> +#include <vm/preload.h> bool opt_trace_classloader; static int trace_classloader_level = 0; diff --git a/vm/jato.c b/vm/jato.c index 2567ad7..f005dd8 100644 --- a/vm/jato.c +++ b/vm/jato.c @@ -42,7 +42,7 @@ #include "vm/class.h" #include "vm/classloader.h" -#include "vm/java_lang.h" +#include "vm/preload.h" #include "vm/method.h" #include "vm/natives.h" #include "vm/object.h" @@ -218,152 +218,6 @@ static void jit_init_natives(void) vm_register_native(&natives[i]); } -struct preload_entry { - const char *name; - struct vm_class **class; -}; - -struct vm_class *vm_java_lang_Object; -struct vm_class *vm_java_lang_Class; -struct vm_class *vm_java_lang_String; -struct vm_class *vm_java_lang_Throwable; -struct vm_class *vm_java_util_Properties; -struct vm_class *vm_java_lang_VMThrowable; -struct vm_class *vm_java_lang_StackTraceElement; -struct vm_class *vm_array_of_java_lang_StackTraceElement; -struct vm_class *vm_boolean_class; -struct vm_class *vm_char_class; -struct vm_class *vm_float_class; -struct vm_class *vm_double_class; -struct vm_class *vm_byte_class; -struct vm_class *vm_short_class; -struct vm_class *vm_int_class; -struct vm_class *vm_long_class; - -static const struct preload_entry preload_entries[] = { - { "java/lang/Object", &vm_java_lang_Object }, - { "java/lang/Class", &vm_java_lang_Class }, - { "java/lang/String", &vm_java_lang_String }, - { "java/lang/Throwable", &vm_java_lang_Throwable }, - { "java/util/Properties", &vm_java_util_Properties }, - { "java/lang/RuntimeException", &vm_java_lang_RE }, - { "java/lang/VMThrowable", &vm_java_lang_VMThrowable }, - { "java/lang/StackTraceElement", &vm_java_lang_StackTraceElement }, - { "[Ljava/lang/StackTraceElement;", &vm_array_of_java_lang_StackTraceElement }, -}; - -static const struct preload_entry primitive_preload_entries[] = { - {"Z", &vm_boolean_class}, - {"C", &vm_char_class}, - {"F", &vm_float_class}, - {"D", &vm_double_class}, - {"B", &vm_byte_class}, - {"S", &vm_short_class}, - {"I", &vm_int_class}, - {"J", &vm_long_class}, -}; - -struct field_preload_entry { - struct vm_class **class; - const char *name; - const char *type; - struct vm_field **field; -}; - -struct vm_field *vm_java_lang_Class_vmdata; -struct vm_field *vm_java_lang_String_offset; -struct vm_field *vm_java_lang_String_count; -struct vm_field *vm_java_lang_String_value; -struct vm_field *vm_java_lang_Throwable_detailMessage; -struct vm_field *vm_java_lang_VMThrowable_vmdata; - -static const struct field_preload_entry field_preload_entries[] = { - { &vm_java_lang_Class, "vmdata", "Ljava/lang/Object;", &vm_java_lang_Class_vmdata }, - { &vm_java_lang_String, "offset", "I", &vm_java_lang_String_offset }, - { &vm_java_lang_String, "count", "I", &vm_java_lang_String_count }, - { &vm_java_lang_String, "value", "[C", &vm_java_lang_String_value }, - { &vm_java_lang_Throwable, "detailMessage", "Ljava/lang/String;", &vm_java_lang_Throwable_detailMessage }, - { &vm_java_lang_VMThrowable, "vmdata", "Ljava/lang/Object;", &vm_java_lang_VMThrowable_vmdata }, -}; - -struct method_preload_entry { - struct vm_class **class; - const char *name; - const char *type; - struct vm_method **method; -}; - -struct vm_method *vm_java_util_Properties_setProperty; - -static const struct method_preload_entry method_preload_entries[] = { - { - &vm_java_util_Properties, - "setProperty", - "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;", - &vm_java_util_Properties_setProperty, - }, -}; - -static int preload_vm_classes(void) -{ - unsigned int array_size; - - for (unsigned int i = 0; i < ARRAY_SIZE(preload_entries); ++i) { - const struct preload_entry *pe = &preload_entries[i]; - - struct vm_class *class = classloader_load(pe->name); - if (!class) { - NOT_IMPLEMENTED; - return 1; - } - - *pe->class = class; - } - - array_size = ARRAY_SIZE(primitive_preload_entries); - for (unsigned int i = 0; i < array_size; ++i) { - const struct preload_entry *pe = &primitive_preload_entries[i]; - - struct vm_class *class = classloader_load_primitive(pe->name); - if (!class) { - NOT_IMPLEMENTED; - return 1; - } - - *pe->class = class; - } - - for (unsigned int i = 0; i < ARRAY_SIZE(field_preload_entries); ++i) { - const struct field_preload_entry *pe - = &field_preload_entries[i]; - - struct vm_field *field = vm_class_get_field(*pe->class, - pe->name, pe->type); - if (!field) { - NOT_IMPLEMENTED; - return 1; - } - - *pe->field = field; - } - - for (unsigned int i = 0; i < ARRAY_SIZE(method_preload_entries); ++i) { - const struct method_preload_entry *me - = &method_preload_entries[i]; - - struct vm_method *method = vm_class_get_method(*me->class, - me->name, me->type); - if (!method) { - NOT_IMPLEMENTED; - return 1; - } - - *me->method = method; - } - - return 0; -} - static void usage(FILE *f, int retval) { fprintf(f, "usage: %s [options] class\n", exe_name); diff --git a/vm/object.c b/vm/object.c index 2e614c5..f997025 100644 --- a/vm/object.c +++ b/vm/object.c @@ -10,7 +10,7 @@ #include <vm/class.h> #include <vm/classloader.h> #include <vm/die.h> -#include <vm/java_lang.h> +#include <vm/preload.h> #include <vm/object.h> #include <vm/stdlib.h> #include <vm/string.h> diff --git a/vm/preload.c b/vm/preload.c new file mode 100644 index 0000000..dfac41f --- /dev/null +++ b/vm/preload.c @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2009 Vegard Nossum + * 2009 Tomasz Grabiec + * + * This file is released under the GPL version 2 with the following + * clarification and special exception: + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under terms + * of your choice, provided that you also meet, for each linked independent + * module, the terms and conditions of the license of that module. An + * independent module is a module which is not derived from or based on + * this library. If you modify this library, you may extend this exception + * to your version of the library, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + * + * Please refer to the file LICENSE for details. + */ + +#include <stdio.h> + +#include "vm/class.h" +#include "vm/classloader.h" + +struct preload_entry { + const char *name; + struct vm_class **class; +}; + +struct vm_class *vm_java_lang_Object; +struct vm_class *vm_java_lang_Class; +struct vm_class *vm_java_lang_String; +struct vm_class *vm_java_lang_Throwable; +struct vm_class *vm_java_util_Properties; +struct vm_class *vm_java_lang_VMThrowable; +struct vm_class *vm_java_lang_StackTraceElement; +struct vm_class *vm_array_of_java_lang_StackTraceElement; +struct vm_class *vm_java_lang_RE; +struct vm_class *vm_boolean_class; +struct vm_class *vm_char_class; +struct vm_class *vm_float_class; +struct vm_class *vm_double_class; +struct vm_class *vm_byte_class; +struct vm_class *vm_short_class; +struct vm_class *vm_int_class; +struct vm_class *vm_long_class; + +static const struct preload_entry preload_entries[] = { + { "java/lang/Object", &vm_java_lang_Object }, + { "java/lang/Class", &vm_java_lang_Class }, + { "java/lang/String", &vm_java_lang_String }, + { "java/lang/Throwable", &vm_java_lang_Throwable }, + { "java/util/Properties", &vm_java_util_Properties }, + { "java/lang/StackTraceElement", &vm_java_lang_StackTraceElement }, + { "[Ljava/lang/StackTraceElement;", &vm_array_of_java_lang_StackTraceElement }, + { "java/lang/VMThrowable", &vm_java_lang_VMThrowable }, +}; + +static const struct preload_entry primitive_preload_entries[] = { + {"Z", &vm_boolean_class}, + {"C", &vm_char_class}, + {"F", &vm_float_class}, + {"D", &vm_double_class}, + {"B", &vm_byte_class}, + {"S", &vm_short_class}, + {"I", &vm_int_class}, + {"J", &vm_long_class}, +}; + +struct field_preload_entry { + struct vm_class **class; + const char *name; + const char *type; + struct vm_field **field; +}; + +struct vm_field *vm_java_lang_Class_vmdata; +struct vm_field *vm_java_lang_String_offset; +struct vm_field *vm_java_lang_String_count; +struct vm_field *vm_java_lang_String_value; +struct vm_field *vm_java_lang_Throwable_detailMessage; +struct vm_field *vm_java_lang_VMThrowable_vmdata; + +static const struct field_preload_entry field_preload_entries[] = { + { &vm_java_lang_Class, "vmdata", "Ljava/lang/Object;", &vm_java_lang_Class_vmdata }, + { &vm_java_lang_String, "offset", "I", &vm_java_lang_String_offset }, + { &vm_java_lang_String, "count", "I", &vm_java_lang_String_count }, + { &vm_java_lang_String, "value", "[C", &vm_java_lang_String_value }, + { &vm_java_lang_Throwable, "detailMessage", "Ljava/lang/String;", &vm_java_lang_Throwable_detailMessage }, + { &vm_java_lang_VMThrowable, "vmdata", "Ljava/lang/Object;", &vm_java_lang_VMThrowable_vmdata }, +}; + +struct method_preload_entry { + struct vm_class **class; + const char *name; + const char *type; + struct vm_method **method; +}; + +struct vm_method *vm_java_util_Properties_setProperty; + +static const struct method_preload_entry method_preload_entries[] = { + { + &vm_java_util_Properties, + "setProperty", + "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;", + &vm_java_util_Properties_setProperty, + }, +}; + +int preload_vm_classes(void) +{ + unsigned int array_size; + + for (unsigned int i = 0; i < ARRAY_SIZE(preload_entries); ++i) { + const struct preload_entry *pe = &preload_entries[i]; + + struct vm_class *class = classloader_load(pe->name); + if (!class) { + NOT_IMPLEMENTED; + return 1; + } + + *pe->class = class; + } + + array_size = ARRAY_SIZE(primitive_preload_entries); + for (unsigned int i = 0; i < array_size; ++i) { + const struct preload_entry *pe = &primitive_preload_entries[i]; + + struct vm_class *class = classloader_load_primitive(pe->name); + if (!class) { + NOT_IMPLEMENTED; + return 1; + } + + *pe->class = class; + } + + for (unsigned int i = 0; i < ARRAY_SIZE(field_preload_entries); ++i) { + const struct field_preload_entry *pe + = &field_preload_entries[i]; + + struct vm_field *field = vm_class_get_field(*pe->class, + pe->name, pe->type); + if (!field) { + NOT_IMPLEMENTED; + return 1; + } + + *pe->field = field; + } + + for (unsigned int i = 0; i < ARRAY_SIZE(method_preload_entries); ++i) { + const struct method_preload_entry *me + = &method_preload_entries[i]; + + struct vm_method *method = vm_class_get_method(*me->class, + me->name, me->type); + if (!method) { + NOT_IMPLEMENTED; + return 1; + } + + *me->method = method; + } + + return 0; +} diff --git a/vm/stack-trace.c b/vm/stack-trace.c index 3b31afc..064c8e4 100644 --- a/vm/stack-trace.c +++ b/vm/stack-trace.c @@ -31,7 +31,7 @@ #include <vm/natives.h> #include <vm/object.h> #include <vm/stack-trace.h> -#include <vm/java_lang.h> +#include <vm/preload.h> #include <vm/system.h> #include <jit/bc-offset-mapping.h> -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel