mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-02 23:11:53 -06:00
plugins: try and make plugin_insn_append more ergonomic
Currently we make the assumption that the guest frontend loads all op code bytes sequentially. This mostly holds up for regular fixed encodings but some architectures like s390x like to re-read the instruction which causes weirdness to occur. Rather than changing the frontends make the plugin API a little more ergonomic and able to handle the re-read case. Stuff will still get strange if we read ahead of the opcode but so far no front ends have done that and this patch asserts the case so we can catch it early if they do. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Suggested-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20211026102234.3961636-21-alex.bennee@linaro.org>
This commit is contained in:
parent
e83f79b3fa
commit
357af9be5c
4 changed files with 17 additions and 7 deletions
|
@ -163,10 +163,12 @@ struct qemu_plugin_tb {
|
|||
|
||||
/**
|
||||
* qemu_plugin_tb_insn_get(): get next plugin record for translation.
|
||||
*
|
||||
* @tb: the internal tb context
|
||||
* @pc: address of instruction
|
||||
*/
|
||||
static inline
|
||||
struct qemu_plugin_insn *qemu_plugin_tb_insn_get(struct qemu_plugin_tb *tb)
|
||||
struct qemu_plugin_insn *qemu_plugin_tb_insn_get(struct qemu_plugin_tb *tb,
|
||||
uint64_t pc)
|
||||
{
|
||||
struct qemu_plugin_insn *insn;
|
||||
int i, j;
|
||||
|
@ -179,6 +181,7 @@ struct qemu_plugin_insn *qemu_plugin_tb_insn_get(struct qemu_plugin_tb *tb)
|
|||
g_byte_array_set_size(insn->data, 0);
|
||||
insn->calls_helpers = false;
|
||||
insn->mem_helper = false;
|
||||
insn->vaddr = pc;
|
||||
|
||||
for (i = 0; i < PLUGIN_N_CB_TYPES; i++) {
|
||||
for (j = 0; j < PLUGIN_N_CB_SUBTYPES; j++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue