[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] linux-user: Use correct alignment for long long
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH] linux-user: Use correct alignment for long long on i386 guests |
Date: |
Thu, 28 Jul 2016 21:19:24 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
Le 28/07/2016 à 13:57, Peter Maydell a écrit :
> For i386, the ABI specifies that 'long long' (8 byte values)
> need only be 4 aligned, but we were requiring them to be
> 8-aligned. This meant we were laying out the target_epoll_event
> structure wrongly. Add a suitable ifdef to abitypes.h to
> specify the i386-specific alignment requirement.
>
> Reported-by: Icenowy Zheng <address@hidden>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> include/exec/user/abitypes.h | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/include/exec/user/abitypes.h b/include/exec/user/abitypes.h
> index a09d6c6..ba18860 100644
> --- a/include/exec/user/abitypes.h
> +++ b/include/exec/user/abitypes.h
> @@ -15,6 +15,10 @@
> #define ABI_LLONG_ALIGNMENT 2
> #endif
>
> +#if defined(TARGET_I386) && !defined(TARGET_X86_64)
> +#define ABI_LLONG_ALIGNMENT 4
> +#endif
> +
> #ifndef ABI_SHORT_ALIGNMENT
> #define ABI_SHORT_ALIGNMENT 2
> #endif
>
Why the following program from commit
c2e3dee linux-user: Define target alignment size
int main(void)
{
printf("alignof(short) %ld\n", __alignof__(short));
printf("alignof(int) %ld\n", __alignof__(int));
printf("alignof(long) %ld\n", __alignof__(long));
printf("alignof(long long) %ld\n", __alignof__(long long));
}
gives me:
alignof(short) 2
alignof(int) 4
alignof(long) 4
alignof(long long) 8
?
I compile it on x86_64 in 32bit mode:
cc -m32 -o align align.c
file align
align: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux
2.6.32, BuildID[sha1]=f5312f2334462b48fd9764e78a845879ff317b94, not stripped
Thanks,
Laurent