mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
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>
This commit is contained in:
parent
9e096a76c7
commit
af6e4e0a22
2 changed files with 281 additions and 52 deletions
|
@ -497,6 +497,22 @@ arguments if required::
|
|||
$ qemu-system-arm $(QEMU_ARGS) \
|
||||
-plugin ./contrib/plugins/libexeclog.so,ifilter=st1w,afilter=0x40001808 -d plugin
|
||||
|
||||
This plugin can also dump registers when they change value. Specify the name of the
|
||||
registers with multiple ``reg`` options. You can also use glob style matching if you wish::
|
||||
|
||||
$ qemu-system-arm $(QEMU_ARGS) \
|
||||
-plugin ./contrib/plugins/libexeclog.so,reg=\*_el2,reg=sp -d plugin
|
||||
|
||||
Be aware that each additional register to check will slow down
|
||||
execution quite considerably. You can optimise the number of register
|
||||
checks done by using the rdisas option. This will only instrument
|
||||
instructions that mention the registers in question in disassembly.
|
||||
This is not foolproof as some instructions implicitly change
|
||||
instructions. You can use the ifilter to catch these cases:
|
||||
|
||||
$ qemu-system-arm $(QEMU_ARGS) \
|
||||
-plugin ./contrib/plugins/libexeclog.so,ifilter=msr,ifilter=blr,reg=x30,reg=\*_el1,rdisas=on
|
||||
|
||||
- contrib/plugins/cache.c
|
||||
|
||||
Cache modelling plugin that measures the performance of a given L1 cache
|
||||
|
@ -583,4 +599,3 @@ The following API is generated from the inline documentation in
|
|||
include the full kernel-doc annotations.
|
||||
|
||||
.. kernel-doc:: include/qemu/qemu-plugin.h
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue