|
@@ -123,10 +123,15 @@ void helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi)
|
|
* Load helpers for cpu_ldst.h
|
|
* Load helpers for cpu_ldst.h
|
|
*/
|
|
*/
|
|
|
|
|
|
-static void plugin_load_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi)
|
|
|
|
|
|
+static void plugin_load_cb(CPUArchState *env, abi_ptr addr,
|
|
|
|
+ uint64_t value_low,
|
|
|
|
+ uint64_t value_high,
|
|
|
|
+ MemOpIdx oi)
|
|
{
|
|
{
|
|
if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) {
|
|
if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) {
|
|
- qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
|
|
|
|
|
|
+ qemu_plugin_vcpu_mem_cb(env_cpu(env), addr,
|
|
|
|
+ value_low, value_high,
|
|
|
|
+ oi, QEMU_PLUGIN_MEM_R);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -136,7 +141,7 @@ uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra)
|
|
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_UB);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_UB);
|
|
ret = do_ld1_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
ret = do_ld1_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
- plugin_load_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_load_cb(env, addr, ret, 0, oi);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -147,7 +152,7 @@ uint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr,
|
|
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
ret = do_ld2_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
ret = do_ld2_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
- plugin_load_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_load_cb(env, addr, ret, 0, oi);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -158,7 +163,7 @@ uint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr,
|
|
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
ret = do_ld4_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
ret = do_ld4_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
- plugin_load_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_load_cb(env, addr, ret, 0, oi);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -169,7 +174,7 @@ uint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr,
|
|
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
ret = do_ld8_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
ret = do_ld8_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD);
|
|
- plugin_load_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_load_cb(env, addr, ret, 0, oi);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -180,7 +185,7 @@ Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr,
|
|
|
|
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
ret = do_ld16_mmu(env_cpu(env), addr, oi, ra);
|
|
ret = do_ld16_mmu(env_cpu(env), addr, oi, ra);
|
|
- plugin_load_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_load_cb(env, addr, int128_getlo(ret), int128_gethi(ret), oi);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -188,10 +193,15 @@ Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr,
|
|
* Store helpers for cpu_ldst.h
|
|
* Store helpers for cpu_ldst.h
|
|
*/
|
|
*/
|
|
|
|
|
|
-static void plugin_store_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi)
|
|
|
|
|
|
+static void plugin_store_cb(CPUArchState *env, abi_ptr addr,
|
|
|
|
+ uint64_t value_low,
|
|
|
|
+ uint64_t value_high,
|
|
|
|
+ MemOpIdx oi)
|
|
{
|
|
{
|
|
if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) {
|
|
if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) {
|
|
- qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W);
|
|
|
|
|
|
+ qemu_plugin_vcpu_mem_cb(env_cpu(env), addr,
|
|
|
|
+ value_low, value_high,
|
|
|
|
+ oi, QEMU_PLUGIN_MEM_W);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -199,7 +209,7 @@ void cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val,
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
MemOpIdx oi, uintptr_t retaddr)
|
|
{
|
|
{
|
|
helper_stb_mmu(env, addr, val, oi, retaddr);
|
|
helper_stb_mmu(env, addr, val, oi, retaddr);
|
|
- plugin_store_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_store_cb(env, addr, val, 0, oi);
|
|
}
|
|
}
|
|
|
|
|
|
void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
|
|
void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
|
|
@@ -207,7 +217,7 @@ void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
|
|
{
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16);
|
|
do_st2_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
do_st2_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
- plugin_store_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_store_cb(env, addr, val, 0, oi);
|
|
}
|
|
}
|
|
|
|
|
|
void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
@@ -215,7 +225,7 @@ void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
|
|
{
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32);
|
|
do_st4_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
do_st4_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
- plugin_store_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_store_cb(env, addr, val, 0, oi);
|
|
}
|
|
}
|
|
|
|
|
|
void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
@@ -223,7 +233,7 @@ void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
|
{
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64);
|
|
do_st8_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
do_st8_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
- plugin_store_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_store_cb(env, addr, val, 0, oi);
|
|
}
|
|
}
|
|
|
|
|
|
void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val,
|
|
void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val,
|
|
@@ -231,7 +241,7 @@ void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val,
|
|
{
|
|
{
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128);
|
|
do_st16_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
do_st16_mmu(env_cpu(env), addr, val, oi, retaddr);
|
|
- plugin_store_cb(env, addr, oi);
|
|
|
|
|
|
+ plugin_store_cb(env, addr, int128_getlo(val), int128_gethi(val), oi);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|