mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-26 20:03:54 -06:00
plugins: Reorg arguments to qemu_plugin_vcpu_mem_cb
Use the MemOpIdx directly, rather than the rearrangement of the same bits currently done by the trace infrastructure. Pass in enum qemu_plugin_mem_rw so that we are able to treat read-modify-write operations as a single operation. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
c3e83e376c
commit
37aff08726
8 changed files with 82 additions and 53 deletions
|
@ -45,7 +45,6 @@
|
|||
#include "qemu/plugin-memory.h"
|
||||
#include "hw/boards.h"
|
||||
#endif
|
||||
#include "trace/mem.h"
|
||||
|
||||
/* Uninstall and Reset handlers */
|
||||
|
||||
|
@ -246,22 +245,25 @@ const char *qemu_plugin_insn_symbol(const struct qemu_plugin_insn *insn)
|
|||
|
||||
unsigned qemu_plugin_mem_size_shift(qemu_plugin_meminfo_t info)
|
||||
{
|
||||
return info & TRACE_MEM_SZ_SHIFT_MASK;
|
||||
MemOp op = get_memop(info);
|
||||
return op & MO_SIZE;
|
||||
}
|
||||
|
||||
bool qemu_plugin_mem_is_sign_extended(qemu_plugin_meminfo_t info)
|
||||
{
|
||||
return !!(info & TRACE_MEM_SE);
|
||||
MemOp op = get_memop(info);
|
||||
return op & MO_SIGN;
|
||||
}
|
||||
|
||||
bool qemu_plugin_mem_is_big_endian(qemu_plugin_meminfo_t info)
|
||||
{
|
||||
return !!(info & TRACE_MEM_BE);
|
||||
MemOp op = get_memop(info);
|
||||
return (op & MO_BSWAP) == MO_BE;
|
||||
}
|
||||
|
||||
bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info)
|
||||
{
|
||||
return !!(info & TRACE_MEM_ST);
|
||||
return get_plugin_meminfo_rw(info) & QEMU_PLUGIN_MEM_W;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -277,11 +279,12 @@ struct qemu_plugin_hwaddr *qemu_plugin_get_hwaddr(qemu_plugin_meminfo_t info,
|
|||
{
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
CPUState *cpu = current_cpu;
|
||||
unsigned int mmu_idx = info >> TRACE_MEM_MMU_SHIFT;
|
||||
hwaddr_info.is_store = info & TRACE_MEM_ST;
|
||||
unsigned int mmu_idx = get_mmuidx(info);
|
||||
enum qemu_plugin_mem_rw rw = get_plugin_meminfo_rw(info);
|
||||
hwaddr_info.is_store = (rw & QEMU_PLUGIN_MEM_W) != 0;
|
||||
|
||||
if (!tlb_plugin_lookup(cpu, vaddr, mmu_idx,
|
||||
info & TRACE_MEM_ST, &hwaddr_info)) {
|
||||
hwaddr_info.is_store, &hwaddr_info)) {
|
||||
error_report("invalid use of qemu_plugin_get_hwaddr");
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue