]> git.ipfire.org Git - thirdparty/qemu.git/commit
contrib/plugins: extend execlog to track register changes
authorAlex Bennée <alex.bennee@linaro.org>
Tue, 27 Feb 2024 14:43:32 +0000 (14:43 +0000)
committerAlex Bennée <alex.bennee@linaro.org>
Wed, 28 Feb 2024 09:11:42 +0000 (09:11 +0000)
commitaf6e4e0a22c18a7cc97650caec56ed99c9899dd7
tree47315ce74c2217b2bd370f243890ab56f527d6f5
parent9e096a76c78ac215e8d06cc9739ab9c181d85a2b
contrib/plugins: extend execlog to track register changes

With the new plugin register API we can now track changes to register
values. Currently the implementation is fairly dumb which will slow
down if a large number of register values are being tracked. This
could be improved by only instrumenting instructions which mention
registers we are interested in tracking.

Example usage:

  ./qemu-aarch64 -D plugin.log -d plugin \
     -cpu max,sve256=on \
     -plugin contrib/plugins/libexeclog.so,reg=sp,reg=z\* \
     ./tests/tcg/aarch64-linux-user/sha512-sve

will display in the execlog any changes to the stack pointer (sp) and
the SVE Z registers.

As testing registers every instruction will be quite a heavy operation
there is an additional flag which attempts to optimise the register
tracking by only instrumenting instructions which are likely to change
its value. This relies on the QEMU disassembler showing up the register
names in disassembly so is an explicit opt-in.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
Based-On:  <20231025093128.33116-19-akihiko.odaki@daynix.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240227144335.1196131-27-alex.bennee@linaro.org>
contrib/plugins/execlog.c
docs/devel/tcg-plugins.rst