We have to make trace_mutex recursive because java.lang.String
initialization might be triggered during compilation of method
containing ldc on String constant.

Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 include/jit/compiler.h |    2 ++
 jit/compiler.c         |    6 ++++++
 jit/trace-jit.c        |   19 ++++++++++++++++++-
 vm/jato.c              |    4 ++++
 4 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/include/jit/compiler.h b/include/jit/compiler.h
index a781730..4cf0548 100644
--- a/include/jit/compiler.h
+++ b/include/jit/compiler.h
@@ -101,7 +101,9 @@ extern bool opt_trace_invoke;
 extern bool opt_trace_invoke_verbose;
 extern bool opt_trace_exceptions;
 extern bool opt_trace_bytecode;
+extern bool opt_trace_compile;
 
+void init_tracing(void);
 void trace_magic_trampoline(struct compilation_unit *);
 void trace_method(struct compilation_unit *);
 void trace_cfg(struct compilation_unit *);
diff --git a/jit/compiler.c b/jit/compiler.c
index fa3deaa..b1f51aa 100644
--- a/jit/compiler.c
+++ b/jit/compiler.c
@@ -51,6 +51,9 @@ int compile(struct compilation_unit *cu)
 {
        int err;
 
+       if (opt_trace_compile)
+               trace_begin();
+
        if (opt_trace_method)
                trace_method(cu);
 
@@ -120,6 +123,9 @@ int compile(struct compilation_unit *cu)
 
        perf_append_cu(cu);
   out:
+       if (opt_trace_compile)
+               trace_end();
+
        if (err)
                compile_error(cu, err);
        return err;
diff --git a/jit/trace-jit.c b/jit/trace-jit.c
index 37fe6d4..eec5338 100644
--- a/jit/trace-jit.c
+++ b/jit/trace-jit.c
@@ -47,8 +47,23 @@ bool opt_trace_invoke;
 bool opt_trace_invoke_verbose;
 bool opt_trace_exceptions;
 bool opt_trace_bytecode;
+bool opt_trace_compile;
 
-static pthread_mutex_t trace_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t trace_mutex;
+
+void init_tracing(void)
+{
+       pthread_mutexattr_t mutexattr;
+
+       if (pthread_mutexattr_init(&mutexattr))
+               error("pthread_mutexattr_init() failed");
+
+       if (pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE))
+               error("pthread_mutexattr_settype() failed");
+
+       if (pthread_mutex_init(&trace_mutex, &mutexattr))
+               error("pthread_mutex_init() failed");
+}
 
 static void print_current_thread(void)
 {
@@ -335,12 +350,14 @@ void trace_machine_code(struct compilation_unit *cu)
 
 void trace_magic_trampoline(struct compilation_unit *cu)
 {
+       trace_begin();
        printf("jit_magic_trampoline: ret0=%p, ret1=%p: %s.%s #%d\n",
               __builtin_return_address(1),
               __builtin_return_address(2),
               cu->method->class->name,
               cu->method->name,
               cu->method->method_index);
+       trace_end();
 }
 
 static void print_arg(enum vm_type arg_type, const unsigned long *args,
diff --git a/vm/jato.c b/vm/jato.c
index 1319ba6..e607ee6 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -685,6 +685,7 @@ static void handle_trace_asm(void)
 {
        opt_trace_method = true;
        opt_trace_machine_code = true;
+       opt_trace_compile = true;
 }
 
 static void handle_trace_bytecode_offset(void)
@@ -729,12 +730,14 @@ static void handle_trace_jit(void)
        opt_trace_machine_code = true;
        opt_trace_magic_trampoline = true;
        opt_trace_bytecode_offset = true;
+       opt_trace_compile = true;
 }
 
 static void handle_trace_bytecode(void)
 {
        opt_trace_bytecode = true;
        opt_trace_method = true;
+       opt_trace_compile = true;
 }
 
 static void handle_trace_trampoline(void)
@@ -891,6 +894,7 @@ main(int argc, char *argv[])
        setvbuf(stderr, NULL, _IONBF, 0);
 #endif
 
+       init_tracing();
        init_system_properties();
        parse_options(argc, argv);
 
-- 
1.6.0.6


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to