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

Reply via email to