tcg/tci: Use {set,clear}_helper_retaddr
Wrap guest memory operations for tci like we do for cpu_ld*_data. We cannot actually use the cpu_ldst.h interface without duplicating the memory trace operations performed within, which will already have been expanded into the tcg opcode stream. Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
d1b1348cc3
commit
2fc6f16ca5
10
tcg/tci.c
10
tcg/tci.c
@ -292,10 +292,9 @@ static uint64_t tci_qemu_ld(CPUArchState *env, target_ulong taddr,
|
||||
TCGMemOpIdx oi, const void *tb_ptr)
|
||||
{
|
||||
MemOp mop = get_memop(oi) & (MO_BSWAP | MO_SSIZE);
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
uintptr_t ra = (uintptr_t)tb_ptr;
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
switch (mop) {
|
||||
case MO_UB:
|
||||
return helper_ret_ldub_mmu(env, taddr, oi, ra);
|
||||
@ -328,6 +327,7 @@ static uint64_t tci_qemu_ld(CPUArchState *env, target_ulong taddr,
|
||||
void *haddr = g2h(env_cpu(env), taddr);
|
||||
uint64_t ret;
|
||||
|
||||
set_helper_retaddr(ra);
|
||||
switch (mop) {
|
||||
case MO_UB:
|
||||
ret = ldub_p(haddr);
|
||||
@ -368,6 +368,7 @@ static uint64_t tci_qemu_ld(CPUArchState *env, target_ulong taddr,
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
clear_helper_retaddr();
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
@ -376,10 +377,9 @@ static void tci_qemu_st(CPUArchState *env, target_ulong taddr, uint64_t val,
|
||||
TCGMemOpIdx oi, const void *tb_ptr)
|
||||
{
|
||||
MemOp mop = get_memop(oi) & (MO_BSWAP | MO_SSIZE);
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
uintptr_t ra = (uintptr_t)tb_ptr;
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
switch (mop) {
|
||||
case MO_UB:
|
||||
helper_ret_stb_mmu(env, taddr, val, oi, ra);
|
||||
@ -408,6 +408,7 @@ static void tci_qemu_st(CPUArchState *env, target_ulong taddr, uint64_t val,
|
||||
#else
|
||||
void *haddr = g2h(env_cpu(env), taddr);
|
||||
|
||||
set_helper_retaddr(ra);
|
||||
switch (mop) {
|
||||
case MO_UB:
|
||||
stb_p(haddr, val);
|
||||
@ -433,6 +434,7 @@ static void tci_qemu_st(CPUArchState *env, target_ulong taddr, uint64_t val,
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
clear_helper_retaddr();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user