As more and more tracing backends appear (right now: nop, simple, ust and the new dtrace), it is harder to provide a tracetool where these backends can be efficiently used without being aware of per-CPU tracing state.
What I have now is basically: * trace.h : trace_##name Backend-specific declaration/definition of per-event tracing functions * trace-cpu.h : trace_cpu_##name Generic "static inline" definitions of functions that check the per-CPU state and (if true) call the corresponding trace_##name * trace-gen.h: trace_gen_##name Generic "static inline" definitions of functions that check the per-CPU state and (if true) generate TCG calls to a function redirecting the call to trace_##name The last two are only generated for those events that have the "gen" keyword in "trace-events". The point is that the trace_##name functions do an extra check (the one provided by the backend) that should not be necessary, as the per-CPU state check already ensures that the trace must be produced. Thus, I'd propose to provide an extra per-backend function that prodices the trace without checking the tracing state. Another important change would be to provide a generic interface inside QEMU that provides a programmatic control of the tracing state of all events (both per-cpu and global), and let each backend provide a small .c file implementing that functionality. This would provide a centralized point through QEMU monitor for the control of tracing events, plus any backend-specific control interface that might also be available. Lluis -- "And it's much the same thing with knowledge, for whenever you learn something new, the whole world becomes that much richer." -- The Princess of Pure Reason, as told by Norton Juster in The Phantom Tollbooth