]> git.proxmox.com Git - qemu.git/blobdiff - target-sh4/helper.c
SH usermode fault handling.
[qemu.git] / target-sh4 / helper.c
index 5ab505aedd8e7ef6009dda4bbf3c2d21bedd8e46..1839c96ddecb58a20dc0743d87067366d80309b3 100644 (file)
 #include "cpu.h"
 #include "exec-all.h"
 
+#if defined(CONFIG_USER_ONLY)
+
+void do_interrupt (CPUState *env)
+{
+  env->exception_index = -1;
+}
+
+int cpu_sh4_handle_mmu_fault(CPUState * env, target_ulong address, int rw,
+                            int is_user, int is_softmmu)
+{
+    env->tea = address;
+    switch (rw) {
+    case 0:
+        env->exception_index = 0x0a0;
+        break;
+    case 1:
+        env->exception_index = 0x0c0;
+        break;
+    case 2:
+        env->exception_index = 0x0a0;
+        break;
+    }
+    return 1;
+}
+
+target_ulong cpu_get_phys_page_debug(CPUState * env, target_ulong addr)
+{
+    return addr;
+}
+
+#else /* !CONFIG_USER_ONLY */
+
 #define MMU_OK                   0
 #define MMU_ITLB_MISS            (-1)
 #define MMU_ITLB_MULTIPLE        (-2)
@@ -396,3 +428,14 @@ int cpu_sh4_handle_mmu_fault(CPUState * env, target_ulong address, int rw,
 
     return tlb_set_page(env, address, physical, prot, is_user, is_softmmu);
 }
+
+target_ulong cpu_get_phys_page_debug(CPUState * env, target_ulong addr)
+{
+    target_ulong physical;
+    int prot;
+
+    get_physical_address(env, &physical, &prot, addr, PAGE_READ, 0);
+    return physical;
+}
+
+#endif