On Wed, 21 Aug 2019 at 14:42, Aurelien Jarno <aurel...@aurel32.net> wrote: > > Commit e41c94529740cc26 ("target/alpha: Convert to CPUClass::tlb_fill") > slightly changed the way the trap_arg2 value is computed in case of TLB > fill. The type of the variable used in the ternary operator has been > changed from an int to an enum. This causes the -1 value to not be > sign-extended to 64-bit in case of an instruction fetch. The trap_arg2 > ends up with 0xffffffff instead of 0xffffffffffffffff. Fix that by > changing the -1 into -1LL. > > This fixes the execution of user space processes in qemu-system-alpha. > > Fixes: e41c94529740cc26 > Cc: qemu-sta...@nongnu.org > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > --- > target/alpha/helper.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/alpha/helper.c b/target/alpha/helper.c > index 93b8e788b1..9e9d880c1a 100644 > --- a/target/alpha/helper.c > +++ b/target/alpha/helper.c > @@ -283,7 +283,7 @@ bool alpha_cpu_tlb_fill(CPUState *cs, vaddr addr, int > size, > cs->exception_index = EXCP_MMFAULT; > env->trap_arg0 = addr; > env->trap_arg1 = fail; > - env->trap_arg2 = (access_type == MMU_INST_FETCH ? -1 : access_type); > + env->trap_arg2 = (access_type == MMU_INST_FETCH ? -1LL : > access_type); > cpu_loop_exit_restore(cs, retaddr); > }
Oops. Thanks for the catch. Maybe we should not rely directly on the value of the access_type enum to set trap_arg2 at all (ie just go for a switch on access_type and set env->trap_arg2 to the right h/w value in the three cases)? thanks -- PMM