Signed-off-by: Tomek Grabiec <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel