On 11/06/2017 03:33 PM, Peter Maydell wrote: > 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. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > target/sparc/mmu_helper.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/target/sparc/mmu_helper.c b/target/sparc/mmu_helper.c > index 126ea5e..d5b6c1e 100644 > --- a/target/sparc/mmu_helper.c > +++ b/target/sparc/mmu_helper.c > @@ -30,10 +30,18 @@ > 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; > } >