--- include/qemu/qemu-plugin.h | 11 +++++++++++ plugins/api.c | 13 +++++++++++++ 2 files changed, 24 insertions(+)
diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index 3a850aa216..a1c478c54f 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -500,6 +500,17 @@ QEMU_PLUGIN_API struct qemu_plugin_insn * qemu_plugin_tb_get_insn(const struct qemu_plugin_tb *tb, size_t idx); +/** + * qemu_plugin_tb_get_insn_by_vaddr() - lookup handle for instruction by vaddr + * @tb: opaque handle to TB passed to callback + * @vaddr: virtual address of instruction + * + * Returns: opaque handle to instruction + */ +QEMU_PLUGIN_API +struct qemu_plugin_insn * +qemu_plugin_tb_get_insn_by_vaddr(const struct qemu_plugin_tb *tb, uint64_t vaddr); + /** * qemu_plugin_insn_data() - copy instruction data * @insn: opaque instruction handle from qemu_plugin_tb_get_insn() diff --git a/plugins/api.c b/plugins/api.c index 4110cfaa23..7ff5e1c1bd 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -258,6 +258,19 @@ qemu_plugin_tb_get_insn(const struct qemu_plugin_tb *tb, size_t idx) return insn; } +struct qemu_plugin_insn * +qemu_plugin_tb_get_insn_by_vaddr(const struct qemu_plugin_tb *tb, uint64_t vaddr) +{ + struct qemu_plugin_insn *insn; + for (size_t i = 0; i < tb->n; i++){ + insn = g_ptr_array_index(tb->insns, idx); + if (insn != NULL && insn->vaddr == vaddr){ + return insn; + } + } + return NULL; +} + /* * Instruction information * -- 2.34.1