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

Reply via email to