On 10 October 2014 05:22, Amanieu d'Antras <aman...@gmail.com> wrote: > On AArch64 the si_addr field of siginfo_t is truncated to 32 bits > because the fault address passes through an uint32_t variable. This > is fixed by changing the variable to uint64_t. > > Signed-off-by: Amanieu d'Antras <aman...@gmail.com> > --- > linux-user/main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/linux-user/main.c b/linux-user/main.c > index 483eb3f..d63e093 100644 > --- a/linux-user/main.c > +++ b/linux-user/main.c > @@ -1006,7 +1006,7 @@ void cpu_loop(CPUARMState *env) > CPUState *cs = CPU(arm_env_get_cpu(env)); > int trapnr, sig; > target_siginfo_t info; > - uint32_t addr; > + uint64_t addr; > > for (;;) { > cpu_exec_start(cs);
Thanks for catching this. Better to fix it by dropping the unnecessary local variable completely and just setting info._sifields._sigfault._addr = env->exception.vaddress; at the only point where we currently use 'addr', though, I think. -- PMM