On 3 August 2016 at 04:15, Benjamin Herrenschmidt <b...@kernel.crashing.org> wrote: > The current constructs ends up cropping the host address to 32-bit > which crashes for me running 32-bit ppc programs on an x86_64. > > Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org> > --- > > Not sure who to CC for this... > > include/exec/cpu_ldst.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h > index 6eb5fe8..0164535 100644 > --- a/include/exec/cpu_ldst.h > +++ b/include/exec/cpu_ldst.h > @@ -49,7 +49,7 @@ > > #if defined(CONFIG_USER_ONLY) > /* All direct uses of g2h and h2g need to go away for usermode softmmu. */ > -#define g2h(x) ((void *)((unsigned long)(target_ulong)(x) + guest_base)) > +#define g2h(x) ((void *)(guest_base + (unsigned long)(target_ulong)(x)))
I'm confused. Is this just swapping the order of the operands to '+'? I wouldn't expect that to make any difference because typecast has higher precedence than '+'... I run 32-bit (ARM) programs on x86-64 a lot so I would be surprised if g2h() was broken like this. thanks -- PMM