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