Richard Henderson <richard.hender...@linaro.org> writes: > On 9/2/24 10:52, Alex Bennée wrote: >> Pierrick Bouvier <pierrick.bouv...@linaro.org> writes: >> >>> Hi Xingran, >>> >>> On 9/2/24 03:42, Alex Bennée wrote: >>>> Xingran Wang <wangxingran123...@outlook.com> writes: >>>> >>>>> Currently, the instruction count obtained by plugins using the translation >>>>> block execution callback is larger than the actual value. Adding callbacks >>>>> in cpu_restore_state_from_tb() and cpu_io_recompile() allows plugins to >>>>> correct the instruction count when exiting a translation block >>>>> mid-execution, properly subtracting the excess unexecuted >>>>> instructions. >>>> This smells like exposing two much of the TCG internals to the >>>> plugin >>>> mechanism. You can already detect when we don't reach the end of a block >>>> of instructions by instrumentation as I did in: >>>> >>> >>> I agree that this is definitely a QEMU implementation "detail", and >>> should not be a concern for end users. >>> <snip> >> /** >> * qemu_plugin_register_vcpu_tb_exec_end_cb() - register execution >> callback at end of TB >> * @tb: the opaque qemu_plugin_tb handle for the translation >> * @cb: callback function >> * @flags: does the plugin read or write the CPU's registers? >> * @userdata: any plugin data to pass to the @cb? >> * >> * The @cb function is called every time a translated unit executes. >> */ >> QEMU_PLUGIN_API >> void qemu_plugin_register_vcpu_tb_exec_end_cb(struct qemu_plugin_tb *tb, >> >> qemu_plugin_vcpu_tb_end_cb_t cb, >> enum qemu_plugin_cb_flags >> flags, >> void *userdata); >> I think the tricky bit would be getting TCG to emit the callback >> code >> for the last instruction before the >> tcg_gen_exit_tb/tcg_gen_lookup_and_goto_ptr bits but after whatever else >> it has done to execute the instruction. >> I don't think we could easily support inline ops at tb end though. >> Richard, >> What do you think? > I think this will miss all exceptions raised in the middle of the block. > I don't think it will be reliable at all.
Ahh yes - I guess we can't fixup as we go through cpu_loop_exit() and the restore code is only called from helpers. Oh well I think we can make do with what we currently have. > > > r~ -- Alex Bennée Virtualisation Tech Lead @ Linaro