Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- include/vm/java_lang.h | 2 ++ vm/jato.c | 10 +++++++--- vm/stack-trace.c | 13 ++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/include/vm/java_lang.h b/include/vm/java_lang.h index 663d0ea..e3e2a25 100644 --- a/include/vm/java_lang.h +++ b/include/vm/java_lang.h @@ -4,9 +4,11 @@ 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_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; #endif diff --git a/vm/jato.c b/vm/jato.c index 4b5c9f7..2d81fed 100644 --- a/vm/jato.c +++ b/vm/jato.c @@ -134,11 +134,13 @@ struct preload_entry { 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; 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/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 }, }; struct field_preload_entry { @@ -151,11 +153,13 @@ struct field_preload_entry { 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; static const struct field_preload_entry field_preload_entries[] = { { &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 }, }; static int preload_vm_classes(void) diff --git a/vm/stack-trace.c b/vm/stack-trace.c index b36245b..cffe568 100644 --- a/vm/stack-trace.c +++ b/vm/stack-trace.c @@ -31,6 +31,7 @@ #include <vm/natives.h> #include <vm/object.h> #include <vm/stack-trace.h> +#include <vm/java_lang.h> #include <jit/bc-offset-mapping.h> #include <jit/cu-mapping.h> @@ -410,6 +411,16 @@ void set_throwable_vmstate(struct vm_object *throwable, struct vm_object *vmstat void vm_print_exception(struct vm_object *exception) { - printf("%s: %s\n", __func__, exception->class->name); + struct vm_object *message_obj; + + fprintf(stderr, "%s", exception->class->name); + + message_obj = field_get_object(exception, + vm_java_lang_Throwable_detailMessage); + if (message_obj) + fprintf(stderr, ": %s", vm_string_to_cstr(message_obj)); + + fprintf(stderr, "\n <<No stack trace available>>\n"); + NOT_IMPLEMENTED; } -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel