diff --git a/libgintrace-cg.a b/libgintrace-cg.a index e7297ef..ea4ba1f 100644 Binary files a/libgintrace-cg.a and b/libgintrace-cg.a differ diff --git a/src/tracer.c b/src/tracer.c index 375b513..9b9d086 100644 --- a/src/tracer.c +++ b/src/tracer.c @@ -38,6 +38,7 @@ struct tsession *tracer_create_session(void *address, int menu) menu_register(session->display.gmenu, &menu_callgraph, "CallG"); /* force install the UBC driver */ + //FIXME: move me into tracer_set_session !! ubc_install(); ubc_set_handler(&gintrace_handler); ubc_set_breakpoint(0, address, NULL); diff --git a/src/ubc/ubc.c b/src/ubc/ubc.c index da1db96..569afb6 100644 --- a/src/ubc/ubc.c +++ b/src/ubc/ubc.c @@ -58,17 +58,19 @@ void ubc_install(void) /* ubc_uninstall(): Uninstall the UBC driver */ void ubc_uninstall(void) { - ubctx.cbr0 = SH7305_UBC.CBR0.lword; - ubctx.crr0 = SH7305_UBC.CRR0.lword; - ubctx.car0 = SH7305_UBC.CAR0; - ubctx.camr0 = SH7305_UBC.CAMR0; - ubctx.cbr1 = SH7305_UBC.CBR1.lword; - ubctx.crr1 = SH7305_UBC.CRR1.lword; - ubctx.car1 = SH7305_UBC.CAR1; - ubctx.camr1 = SH7305_UBC.CAMR1; - ubctx.cdr1 = SH7305_UBC.CDR1; - ubctx.cdmr1 = SH7305_UBC.CDMR1; - ubctx.cdr1 = SH7305_UBC.CETR1.lword; + if (ubc_driver_installed == 1) { + ubctx.cbr0 = SH7305_UBC.CBR0.lword; + ubctx.crr0 = SH7305_UBC.CRR0.lword; + ubctx.car0 = SH7305_UBC.CAR0; + ubctx.camr0 = SH7305_UBC.CAMR0; + ubctx.cbr1 = SH7305_UBC.CBR1.lword; + ubctx.crr1 = SH7305_UBC.CRR1.lword; + ubctx.car1 = SH7305_UBC.CAR1; + ubctx.camr1 = SH7305_UBC.CAMR1; + ubctx.cdr1 = SH7305_UBC.CDR1; + ubctx.cdmr1 = SH7305_UBC.CDMR1; + ubctx.cdr1 = SH7305_UBC.CETR1.lword; + } } /* ubc_set_breakpoint(): Setup one breakpoint */