The function do_unassigned_access in op_helper.c looks very similar to the function cpu_sparc_handle_mmu_fault in helper.c and it is called after the later one.
Why do we need to set env->mmuregs[3] and env->mmuregs[4] twice? Setting the SFSR and SFAR in do_unassigned_access looks redundant to me and actually the second setting env->mmuregs[3] will also set the overflow flag and therefore produce a wrong result. Also env->mmuregs[4] = addr; looks wrong because addr is definied as target_phys_addr_t, so there is a cast to the smaller uint_32 type. If I remove the suspicious code from do_unassigned_access I can boot Solaris 2.6. Shall I produce a patch for 0.12? -- Regards, Artyom Tarasenko solaris/sparc under qemu blog: http://tyom.blogspot.com/