[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 63/66] tcg/tci: Support raising sigbus for user-only
From: |
Richard Henderson |
Subject: |
[PATCH v3 63/66] tcg/tci: Support raising sigbus for user-only |
Date: |
Wed, 18 Aug 2021 09:19:17 -1000 |
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/tci.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/tcg/tci.c b/tcg/tci.c
index e76087ccac..985c8a91cb 100644
--- a/tcg/tci.c
+++ b/tcg/tci.c
@@ -296,7 +296,7 @@ static uint64_t tci_qemu_ld(CPUArchState *env, target_ulong
taddr,
uintptr_t ra = (uintptr_t)tb_ptr;
#ifdef CONFIG_SOFTMMU
- switch (mop) {
+ switch (mop & (MO_BSWAP | MO_SSIZE)) {
case MO_UB:
return helper_ret_ldub_mmu(env, taddr, oi, ra);
case MO_SB:
@@ -326,10 +326,14 @@ static uint64_t tci_qemu_ld(CPUArchState *env,
target_ulong taddr,
}
#else
void *haddr = g2h(env_cpu(env), taddr);
+ unsigned a_mask = (1u << get_alignment_bits(mop)) - 1;
uint64_t ret;
set_helper_retaddr(ra);
- switch (mop) {
+ if (taddr & a_mask) {
+ helper_unaligned_ld(env, taddr);
+ }
+ switch (mop & (MO_BSWAP | MO_SSIZE)) {
case MO_UB:
ret = ldub_p(haddr);
break;
@@ -377,11 +381,11 @@ static uint64_t tci_qemu_ld(CPUArchState *env,
target_ulong taddr,
static void tci_qemu_st(CPUArchState *env, target_ulong taddr, uint64_t val,
MemOpIdx oi, const void *tb_ptr)
{
- MemOp mop = get_memop(oi) & (MO_BSWAP | MO_SSIZE);
+ MemOp mop = get_memop(oi);
uintptr_t ra = (uintptr_t)tb_ptr;
#ifdef CONFIG_SOFTMMU
- switch (mop) {
+ switch (mop & (MO_BSWAP | MO_SIZE)) {
case MO_UB:
helper_ret_stb_mmu(env, taddr, val, oi, ra);
break;
@@ -408,9 +412,13 @@ static void tci_qemu_st(CPUArchState *env, target_ulong
taddr, uint64_t val,
}
#else
void *haddr = g2h(env_cpu(env), taddr);
+ unsigned a_mask = (1u << get_alignment_bits(mop)) - 1;
set_helper_retaddr(ra);
- switch (mop) {
+ if (taddr & a_mask) {
+ helper_unaligned_st(env, taddr);
+ }
+ switch (mop & (MO_BSWAP | MO_SIZE)) {
case MO_UB:
stb_p(haddr, val);
break;
--
2.25.1
- Re: [PATCH v3 58/66] include/exec: Move cpu_signal_handler declaration, (continued)
[PATCH v3 64/66] tcg: Canonicalize alignment flags in MemOp, Richard Henderson, 2021/08/18
[PATCH v3 65/66] tcg/riscv: Support raising sigbus for user-only, Richard Henderson, 2021/08/18
[PATCH v3 66/66] tcg/riscv: Remove add with zero on user-only memory access, Richard Henderson, 2021/08/18