[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] Fix g2h() for 32-bit targets on 64-bit host
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] Fix g2h() for 32-bit targets on 64-bit hosts |
Date: |
Wed, 3 Aug 2016 09:40:09 +0100 |
On 3 August 2016 at 04:15, Benjamin Herrenschmidt
<address@hidden> 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 <address@hidden>
> ---
>
> 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