trace: [tcg] Add documentation
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
e0b2fd0efb
commit
0bb403b0ae
|
@ -307,3 +307,43 @@ guard such computations and avoid its compilation when the event is disabled:
|
||||||
You can check both if the event has been disabled and is dynamically enabled at
|
You can check both if the event has been disabled and is dynamically enabled at
|
||||||
the same time using the 'trace_event_get_state' routine (see header
|
the same time using the 'trace_event_get_state' routine (see header
|
||||||
"trace/control.h" for more information).
|
"trace/control.h" for more information).
|
||||||
|
|
||||||
|
=== "tcg" ===
|
||||||
|
|
||||||
|
Guest code generated by TCG can be traced by defining an event with the "tcg"
|
||||||
|
event property. Internally, this property generates two events:
|
||||||
|
"<eventname>_trans" to trace the event at translation time, and
|
||||||
|
"<eventname>_exec" to trace the event at execution time.
|
||||||
|
|
||||||
|
Instead of using these two events, you should instead use the function
|
||||||
|
"trace_<eventname>_tcg" during translation (TCG code generation). This function
|
||||||
|
will automatically call "trace_<eventname>_trans", and will generate the
|
||||||
|
necessary TCG code to call "trace_<eventname>_exec" during guest code execution.
|
||||||
|
|
||||||
|
Events with the "tcg" property can be declared in the "trace-events" file with a
|
||||||
|
mix of native and TCG types, and "trace_<eventname>_tcg" will gracefully forward
|
||||||
|
them to the "<eventname>_trans" and "<eventname>_exec" events. Since TCG values
|
||||||
|
are not known at translation time, these are ignored by the "<eventname>_trans"
|
||||||
|
event. Because of this, the entry in the "trace-events" file needs two printing
|
||||||
|
formats (separated by a comma):
|
||||||
|
|
||||||
|
tcg foo(uint8_t a1, TCGv_i32 a2) "a1=%d", "a1=%d a2=%d"
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
#include "trace-tcg.h"
|
||||||
|
|
||||||
|
void some_disassembly_func (...)
|
||||||
|
{
|
||||||
|
uint8_t a1 = ...;
|
||||||
|
TCGv_i32 a2 = ...;
|
||||||
|
trace_foo_tcg(a1, a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
This will immediately call:
|
||||||
|
|
||||||
|
void trace_foo_trans(uint8_t a1);
|
||||||
|
|
||||||
|
and will generate the TCG code to call:
|
||||||
|
|
||||||
|
void trace_foo(uint8_t a1, uint32_t a2);
|
||||||
|
|
Loading…
Reference in a new issue