]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
linux-user/sparc: Put address for data faults where linux-user expects it
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 6 Nov 2017 18:33:25 +0000 (18:33 +0000)
committerRiku Voipio <riku.voipio@linaro.org>
Tue, 7 Nov 2017 19:59:18 +0000 (21:59 +0200)
In the user-mode-only version of sparc_cpu_handle_mmu_fault(),
we must save the fault address for a data fault into the CPU
state's mmu registers, because the code in linux-user/main.c
expects to find it there in order to populate the si_addr
field of the guest siginfo.

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
target/sparc/mmu_helper.c

index 126ea5e3ee5e1c65b067220459d7b93e8d285bc4..d5b6c1e48ccc2ad3e8a47fcc45abcc60ca67ec46 100644 (file)
 int sparc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
                                int mmu_idx)
 {
+    SPARCCPU *cpu = SPARC_CPU(cs);
+    CPUSPARCState *env = &cpu->env;
+
     if (rw & 2) {
         cs->exception_index = TT_TFAULT;
     } else {
         cs->exception_index = TT_DFAULT;
+#ifdef TARGET_SPARC64
+        env->dmmu.mmuregs[4] = address;
+#else
+        env->mmuregs[4] = address;
+#endif
     }
     return 1;
 }