[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 06/66] target/hppa: Implement do_unaligned_access for user-onl
From: |
Richard Henderson |
Subject: |
[PATCH v3 06/66] target/hppa: Implement do_unaligned_access for user-only |
Date: |
Wed, 18 Aug 2021 09:18:20 -1000 |
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/hppa/cpu_loop.c | 2 +-
target/hppa/cpu.c | 9 ++++++---
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c
index 82d8183821..5ce30fec8b 100644
--- a/linux-user/hppa/cpu_loop.c
+++ b/linux-user/hppa/cpu_loop.c
@@ -161,7 +161,7 @@ void cpu_loop(CPUHPPAState *env)
case EXCP_UNALIGN:
info.si_signo = TARGET_SIGBUS;
info.si_errno = 0;
- info.si_code = 0;
+ info.si_code = TARGET_BUS_ADRALN;
info._sifields._sigfault._addr = env->cr[CR_IOR];
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
break;
diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
index c2c56e7635..91f149ed77 100644
--- a/target/hppa/cpu.c
+++ b/target/hppa/cpu.c
@@ -71,7 +71,6 @@ static void hppa_cpu_disas_set_info(CPUState *cs,
disassemble_info *info)
info->print_insn = print_insn_hppa;
}
-#ifndef CONFIG_USER_ONLY
static void QEMU_NORETURN
hppa_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
MMUAccessType access_type, int mmu_idx,
@@ -81,15 +80,19 @@ hppa_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
CPUHPPAState *env = &cpu->env;
cs->exception_index = EXCP_UNALIGN;
+#ifdef CONFIG_USER_ONLY
+ /* Recall that user-only always uses address space 0. */
+ env->cr[CR_IOR] = addr;
+#else
if (env->psw & PSW_Q) {
/* ??? Needs tweaking for hppa64. */
env->cr[CR_IOR] = addr;
env->cr[CR_ISR] = addr >> 32;
}
+#endif
cpu_loop_exit_restore(cs, retaddr);
}
-#endif /* CONFIG_USER_ONLY */
static void hppa_cpu_realizefn(DeviceState *dev, Error **errp)
{
@@ -147,10 +150,10 @@ static const struct TCGCPUOps hppa_tcg_ops = {
.synchronize_from_tb = hppa_cpu_synchronize_from_tb,
.cpu_exec_interrupt = hppa_cpu_exec_interrupt,
.tlb_fill = hppa_cpu_tlb_fill,
+ .do_unaligned_access = hppa_cpu_do_unaligned_access,
#ifndef CONFIG_USER_ONLY
.do_interrupt = hppa_cpu_do_interrupt,
- .do_unaligned_access = hppa_cpu_do_unaligned_access,
#endif /* !CONFIG_USER_ONLY */
};
--
2.25.1
- [PATCH v3 00/66] Unaligned access for user-only, Richard Henderson, 2021/08/18
- [PATCH v3 01/66] util: Suppress -Wstringop-overflow in qemu_thread_start, Richard Henderson, 2021/08/18
- [PATCH v3 02/66] hw/core: Make do_unaligned_access noreturn, Richard Henderson, 2021/08/18
- [PATCH v3 03/66] hw/core: Make do_unaligned_access available to user-only, Richard Henderson, 2021/08/18
- [PATCH v3 04/66] target/alpha: Implement do_unaligned_access for user-only, Richard Henderson, 2021/08/18
- [PATCH v3 05/66] target/arm: Implement do_unaligned_access for user-only, Richard Henderson, 2021/08/18
- [PATCH v3 06/66] target/hppa: Implement do_unaligned_access for user-only,
Richard Henderson <=
- [PATCH v3 09/66] target/ppc: Move SPR_DSISR setting to powerpc_excp, Richard Henderson, 2021/08/18
- [PATCH v3 10/66] target/ppc: Set fault address in ppc_cpu_do_unaligned_access, Richard Henderson, 2021/08/18
- [PATCH v3 11/66] target/ppc: Implement do_unaligned_access for user-only, Richard Henderson, 2021/08/18
- [PATCH v3 07/66] target/microblaze: Do not set MO_ALIGN for user-only, Richard Henderson, 2021/08/18
- [PATCH v3 12/66] target/riscv: Implement do_unaligned_access for user-only, Richard Henderson, 2021/08/18