mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
Fix unassigned memory access handling
cea5f9a28f
exposed bugs in unassigned memory
access handling. Fix them by always passing CPUState to the handlers.
Reported-by: Hervé Poussineau <hpoussin@reactos.org>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
21673cdecb
commit
b14ef7c9ab
10 changed files with 48 additions and 35 deletions
|
@ -347,8 +347,8 @@ static inline void cpu_get_tb_cpu_state(CPUState *env, target_ulong *pc,
|
|||
}
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
|
||||
int is_asi, int size);
|
||||
void cpu_unassigned_access(CPUState *env1, target_phys_addr_t addr,
|
||||
int is_write, int is_exec, int is_asi, int size);
|
||||
#endif
|
||||
|
||||
static inline bool cpu_has_work(CPUState *env)
|
||||
|
|
|
@ -488,20 +488,14 @@ void helper_mmu_write(uint32_t rn, uint32_t v)
|
|||
mmu_write(env, rn, v);
|
||||
}
|
||||
|
||||
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
|
||||
int is_asi, int size)
|
||||
void cpu_unassigned_access(CPUState *env1, target_phys_addr_t addr,
|
||||
int is_write, int is_exec, int is_asi, int size)
|
||||
{
|
||||
CPUState *saved_env;
|
||||
|
||||
if (!cpu_single_env) {
|
||||
/* XXX: ??? */
|
||||
return;
|
||||
}
|
||||
|
||||
/* XXX: hack to restore env in all cases, even if not called from
|
||||
generated code */
|
||||
saved_env = env;
|
||||
env = cpu_single_env;
|
||||
env = env1;
|
||||
|
||||
qemu_log_mask(CPU_LOG_INT, "Unassigned " TARGET_FMT_plx " wr=%d exe=%d\n",
|
||||
addr, is_write, is_exec);
|
||||
if (!(env->sregs[SR_MSR] & MSR_EE)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue