Signed-off-by: Vegard Nossum <[email protected]>
---
include/jit/compiler.h | 2 ++
jit/compiler.c | 3 +++
jit/trace-jit.c | 41 +++++++++++++++++++++++++++++++++++++++++
vm/jato.c | 6 ++++++
4 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/include/jit/compiler.h b/include/jit/compiler.h
index 776196f..1bae506 100644
--- a/include/jit/compiler.h
+++ b/include/jit/compiler.h
@@ -97,6 +97,7 @@ extern bool opt_trace_lir;
extern bool opt_trace_liveness;
extern bool opt_trace_regalloc;
extern bool opt_trace_machine_code;
+extern bool opt_trace_gc_maps;
extern bool opt_trace_magic_trampoline;
extern bool opt_trace_bytecode_offset;
extern bool opt_trace_invoke;
@@ -113,6 +114,7 @@ void trace_lir(struct compilation_unit *);
void trace_liveness(struct compilation_unit *);
void trace_regalloc(struct compilation_unit *);
void trace_machine_code(struct compilation_unit *);
+void trace_gc_maps(struct compilation_unit *);
void trace_invoke(struct compilation_unit *);
void trace_exception(struct compilation_unit *, struct jit_stack_frame *,
unsigned char *);
void trace_exception_handler(struct compilation_unit *, unsigned char *);
diff --git a/jit/compiler.c b/jit/compiler.c
index cd095b3..f4e1c59 100644
--- a/jit/compiler.c
+++ b/jit/compiler.c
@@ -121,6 +121,9 @@ int compile(struct compilation_unit *cu)
if (err)
goto out;
+ if (opt_trace_gc_maps)
+ trace_gc_maps(cu);
+
cu->native_ptr = buffer_ptr(cu->objcode);
cu->is_compiled = true;
diff --git a/jit/trace-jit.c b/jit/trace-jit.c
index 25a3d4b..2923c89 100644
--- a/jit/trace-jit.c
+++ b/jit/trace-jit.c
@@ -44,6 +44,7 @@ bool opt_trace_lir;
bool opt_trace_liveness;
bool opt_trace_regalloc;
bool opt_trace_machine_code;
+bool opt_trace_gc_maps;
bool opt_trace_magic_trampoline;
bool opt_trace_bytecode_offset;
bool opt_trace_invoke;
@@ -346,6 +347,46 @@ void trace_machine_code(struct compilation_unit *cu)
trace_printf("\n");
}
+static void print_gc_map(struct compilation_unit *cu, struct insn *insn)
+{
+ struct bitset *live_vars
+ = radix_tree_lookup(cu->safepoint_map, insn->mach_offset);
+ assert(live_vars);
+
+ trace_printf(" * %p: ", buffer_ptr(cu->objcode) + insn->mach_offset);
+
+ struct var_info *var;
+ for_each_variable(var, cu->var_infos) {
+ if (!test_bit(live_vars->bits, var->vreg))
+ continue;
+
+ trace_printf("%d (%s), ",
+ var->vreg, "" /* reg_name(var->interval->reg) */);
+ }
+
+ trace_printf("\n");
+}
+
+void trace_gc_maps(struct compilation_unit *cu)
+{
+ trace_printf("GC Map:\n\n");
+
+ struct basic_block *bb;
+ for_each_basic_block(bb, &cu->bb_list) {
+ trace_printf("[bb %p]:\n", bb);
+
+ struct insn *insn;
+ for_each_insn(insn, &bb->insn_list) {
+ if (!insn->safepoint)
+ continue;
+
+ print_gc_map(cu, insn);
+ }
+ }
+
+ trace_printf("\n");
+}
+
void trace_magic_trampoline(struct compilation_unit *cu)
{
trace_printf("jit_magic_trampoline: ret0=%p, ret1=%p: %s.%s #%d\n",
diff --git a/vm/jato.c b/vm/jato.c
index 78973e5..5223478 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -898,6 +898,11 @@ static void handle_trace_exceptions(void)
opt_trace_exceptions = true;
}
+static void handle_trace_gc_maps(void)
+{
+ opt_trace_gc_maps = true;
+}
+
static void handle_trace_invoke(void)
{
opt_trace_invoke = true;
@@ -1008,6 +1013,7 @@ const struct option options[] = {
DEFINE_OPTION("Xtrace:bytecode-offset", handle_trace_bytecode_offset),
DEFINE_OPTION("Xtrace:classloader", handle_trace_classloader),
DEFINE_OPTION("Xtrace:exceptions", handle_trace_exceptions),
+ DEFINE_OPTION("Xtrace:gc-maps", handle_trace_gc_maps),
DEFINE_OPTION("Xtrace:invoke", handle_trace_invoke),
DEFINE_OPTION("Xtrace:invoke-verbose", handle_trace_invoke_verbose),
DEFINE_OPTION("Xtrace:itable", handle_trace_itable),
--
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel