[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 11/35] target/ppc: Add do_unaligned_access hook
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 11/35] target/ppc: Add do_unaligned_access hook |
Date: |
Tue, 3 Jul 2018 15:57:40 +1000 |
From: Richard Henderson <address@hidden>
This allows faults from MO_ALIGN to have the same effect
as from gen_check_align.
Signed-off-by: Richard Henderson <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
target/ppc/excp_helper.c | 18 +++++++++++++++++-
target/ppc/internal.h | 5 +++++
target/ppc/translate_init.inc.c | 1 +
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index c092fbead0..d6e97a90e0 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -22,7 +22,7 @@
#include "exec/helper-proto.h"
#include "exec/exec-all.h"
#include "exec/cpu_ldst.h"
-
+#include "internal.h"
#include "helper_regs.h"
//#define DEBUG_OP
@@ -1198,3 +1198,19 @@ void helper_book3s_msgsnd(target_ulong rb)
qemu_mutex_unlock_iothread();
}
#endif
+
+void ppc_cpu_do_unaligned_access(CPUState *cs, vaddr vaddr,
+ MMUAccessType access_type,
+ int mmu_idx, uintptr_t retaddr)
+{
+ CPUPPCState *env = cs->env_ptr;
+ uint32_t insn;
+
+ /* Restore state and reload the insn we executed, for filling in DSISR. */
+ cpu_restore_state(cs, retaddr, true);
+ insn = cpu_ldl_code(env, env->nip);
+
+ cs->exception_index = POWERPC_EXCP_ALIGN;
+ env->error_code = insn & 0x03FF0000;
+ cpu_loop_exit(cs);
+}
diff --git a/target/ppc/internal.h b/target/ppc/internal.h
index 1f441c6483..a9bcadff42 100644
--- a/target/ppc/internal.h
+++ b/target/ppc/internal.h
@@ -252,4 +252,9 @@ static inline void putVSR(int n, ppc_vsr_t *vsr,
CPUPPCState *env)
void helper_compute_fprf_float16(CPUPPCState *env, float16 arg);
void helper_compute_fprf_float32(CPUPPCState *env, float32 arg);
void helper_compute_fprf_float128(CPUPPCState *env, float128 arg);
+
+/* Raise a data fault alignment exception for the specified virtual address */
+void ppc_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
+ MMUAccessType access_type,
+ int mmu_idx, uintptr_t retaddr);
#endif /* PPC_INTERNAL_H */
diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
index 76d6f3fd5e..7813b1b004 100644
--- a/target/ppc/translate_init.inc.c
+++ b/target/ppc/translate_init.inc.c
@@ -10457,6 +10457,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void
*data)
cc->set_pc = ppc_cpu_set_pc;
cc->gdb_read_register = ppc_cpu_gdb_read_register;
cc->gdb_write_register = ppc_cpu_gdb_write_register;
+ cc->do_unaligned_access = ppc_cpu_do_unaligned_access;
#ifdef CONFIG_USER_ONLY
cc->handle_mmu_fault = ppc_cpu_handle_mmu_fault;
#else
--
2.17.1
- [Qemu-ppc] [PULL 00/35] ppc-for-3.0 queue 20180703, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 01/35] mac_dbdma: only dump commands for debug enabled channels, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 03/35] sam460ex: Fix sam460ex device tree when booting the Linux kernel, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 10/35] ppc/pnv: fix pnv_core_realize() error handling, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 02/35] mac_newworld: always enable disable_direct_reg3_writes for ADB machines, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 06/35] ppc/xics: move the instance_init handler under the ics-base class, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 11/35] target/ppc: Add do_unaligned_access hook,
David Gibson <=
- [Qemu-ppc] [PULL 07/35] ppx/xics: introduce a parent_reset in ICSStateClass, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 20/35] target/ppc: Use MO_ALIGN for EXIWX and ECOWX, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 16/35] target/ppc: Tidy gen_conditional_store, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 09/35] ppc/xics: rework the ICS classes inheritance tree, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 19/35] target/ppc: Split out gen_st_atomic, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 22/35] target/ppc: Implement the rest of gen_ld_atomic, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 27/35] hw/timer: Add basic M41T80 emulation, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 33/35] target/ppc: set is_jmp on ppc_tr_breakpoint_check, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 28/35] sam460ex: Add RTC device, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 35/35] ppc: Include vga cirrus card into the compiling process, David Gibson, 2018/07/03