mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-24 02:05:40 +00:00
target-sparc: ignore MMU-faults if MMU is disabled in hypervisor mode
while IMMU/DMMU is disabled - ignore MMU-faults in hypervisorv mode or if CPU doesn't have hypervisor - signal TT_INSN_REAL_TRANSLATION_MISS/TT_DATA_REAL_TRANSLATION_MISS otherwise Backports commit 1ceca928538a3633b74a7dc718a05ce6767f2f76 from qemu
This commit is contained in:
parent
d905278b86
commit
96af2cfb58
|
@ -69,6 +69,8 @@
|
|||
#define TT_DATA_ACCESS 0x32
|
||||
#define TT_UNALIGNED 0x34
|
||||
#define TT_PRIV_ACT 0x37
|
||||
#define TT_INSN_REAL_TRANSLATION_MISS 0x3e
|
||||
#define TT_DATA_REAL_TRANSLATION_MISS 0x3f
|
||||
#define TT_EXTINT 0x40
|
||||
#define TT_IVEC 0x60
|
||||
#define TT_TMISS 0x64
|
||||
|
|
|
@ -1675,14 +1675,25 @@ void sparc_cpu_unassigned_access(CPUState *cs, hwaddr addr,
|
|||
{
|
||||
SPARCCPU *cpu = SPARC_CPU(cs->uc, cs);
|
||||
CPUSPARCState *env = &cpu->env;
|
||||
int tt = is_exec ? TT_CODE_ACCESS : TT_DATA_ACCESS;
|
||||
|
||||
#ifdef DEBUG_UNASSIGNED
|
||||
printf("Unassigned mem access to " TARGET_FMT_plx " from " TARGET_FMT_lx
|
||||
"\n", addr, env->pc);
|
||||
#endif
|
||||
|
||||
cpu_raise_exception_ra(env, tt, GETPC());
|
||||
if (is_exec) { /* XXX has_hypervisor */
|
||||
if (env->lsu & (IMMU_E)) {
|
||||
cpu_raise_exception_ra(env, TT_CODE_ACCESS, GETPC());
|
||||
} else if (cpu_has_hypervisor(env) && !(env->hpstate & HS_PRIV)) {
|
||||
cpu_raise_exception_ra(env, TT_INSN_REAL_TRANSLATION_MISS, GETPC());
|
||||
}
|
||||
} else {
|
||||
if (env->lsu & (DMMU_E)) {
|
||||
cpu_raise_exception_ra(env, TT_DATA_ACCESS, GETPC());
|
||||
} else if (cpu_has_hypervisor(env) && !(env->hpstate & HS_PRIV)) {
|
||||
cpu_raise_exception_ra(env, TT_DATA_REAL_TRANSLATION_MISS, GETPC());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue