mirror of
https://github.com/qemu/qemu.git
synced 2024-12-13 22:43:32 +08:00
docs: remove references to TCG tracing
Users wanting this sort of functionality should turn to TCG plugins instead. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Cc: Luis Vilanova <vilanova@imperial.ac.uk> Cc: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20220204204335.1689602-18-alex.bennee@linaro.org>
This commit is contained in:
parent
3bdc19af00
commit
d9a6bad542
@ -601,6 +601,19 @@ the upstream Linux kernel in 2018, and it has also been dropped from glibc, so
|
||||
there is no new Linux development taking place with this architecture. For
|
||||
running the old binaries, you can use older versions of QEMU.
|
||||
|
||||
TCG introspection features
|
||||
--------------------------
|
||||
|
||||
TCG trace-events (since 6.2)
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
The ability to add new TCG trace points had bit rotted and as the
|
||||
feature can be replicated with TCG plugins it was removed. If
|
||||
any user is currently using this feature and needs help with
|
||||
converting to using TCG plugins they should contact the qemu-devel
|
||||
mailing list.
|
||||
|
||||
|
||||
System emulator devices
|
||||
-----------------------
|
||||
|
||||
|
@ -413,88 +413,3 @@ disabled, this check will have no performance impact.
|
||||
return ptr;
|
||||
}
|
||||
|
||||
"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);
|
||||
|
||||
"vcpu"
|
||||
------
|
||||
|
||||
Identifies events that trace vCPU-specific information. It implicitly adds a
|
||||
"CPUState*" argument, and extends the tracing print format to show the vCPU
|
||||
information. If used together with the "tcg" property, it adds a second
|
||||
"TCGv_env" argument that must point to the per-target global TCG register that
|
||||
points to the vCPU when guest code is executed (usually the "cpu_env" variable).
|
||||
|
||||
The "tcg" and "vcpu" properties are currently only honored in the root
|
||||
./trace-events file.
|
||||
|
||||
The following example events::
|
||||
|
||||
foo(uint32_t a) "a=%x"
|
||||
vcpu bar(uint32_t a) "a=%x"
|
||||
tcg vcpu baz(uint32_t a) "a=%x", "a=%x"
|
||||
|
||||
Can be used as::
|
||||
|
||||
#include "trace-tcg.h"
|
||||
|
||||
CPUArchState *env;
|
||||
TCGv_ptr cpu_env;
|
||||
|
||||
void some_disassembly_func(...)
|
||||
{
|
||||
/* trace emitted at this point */
|
||||
trace_foo(0xd1);
|
||||
/* trace emitted at this point */
|
||||
trace_bar(env_cpu(env), 0xd2);
|
||||
/* trace emitted at this point (env) and when guest code is executed (cpu_env) */
|
||||
trace_baz_tcg(env_cpu(env), cpu_env, 0xd3);
|
||||
}
|
||||
|
||||
If the translating vCPU has address 0xc1 and code is later executed by vCPU
|
||||
0xc2, this would be an example output::
|
||||
|
||||
// at guest code translation
|
||||
foo a=0xd1
|
||||
bar cpu=0xc1 a=0xd2
|
||||
baz_trans cpu=0xc1 a=0xd3
|
||||
// at guest code execution
|
||||
baz_exec cpu=0xc2 a=0xd3
|
||||
|
Loading…
Reference in New Issue
Block a user