From 6cfd9b5251c1d03c60f9ebc95fa98670db8f3e09 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 17 Apr 2013 16:26:41 +0200 Subject: elfload: only give abi_long/ulong the alignment specified by the target Previously, this was done for target_long/ulong, and propagated to abi_long/ulong via a typedef. But target_long/ulong should not have any specific alignment, it is never used to access guest memory. Signed-off-by: Paolo Bonzini Signed-off-by: Edgar E. Iglesias --- include/exec/user/abitypes.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'include/exec/user/abitypes.h') diff --git a/include/exec/user/abitypes.h b/include/exec/user/abitypes.h index 4f3e804..4b04f6d 100644 --- a/include/exec/user/abitypes.h +++ b/include/exec/user/abitypes.h @@ -2,8 +2,15 @@ #define QEMU_TYPES_H #include "cpu.h" +#ifdef TARGET_ABI32 +#define TARGET_ABI_BITS 32 +#else +#define TARGET_ABI_BITS TARGET_LONG_BITS +#endif + #ifdef TARGET_M68K #define ABI_INT_ALIGNMENT 2 +#define ABI_LONG_ALIGNMENT 2 #endif #ifndef ABI_SHORT_ALIGNMENT @@ -12,6 +19,9 @@ #ifndef ABI_INT_ALIGNMENT #define ABI_INT_ALIGNMENT 4 #endif +#ifndef ABI_LONG_ALIGNMENT +#define ABI_LONG_ALIGNMENT (TARGET_ABI_BITS / 8) +#endif typedef int16_t abi_short __attribute__ ((aligned(ABI_SHORT_ALIGNMENT))); typedef uint16_t abi_ushort __attribute__((aligned(ABI_SHORT_ALIGNMENT))); @@ -19,12 +29,11 @@ typedef int32_t abi_int __attribute__((aligned(ABI_INT_ALIGNMENT))); typedef uint32_t abi_uint __attribute__((aligned(ABI_INT_ALIGNMENT))); #ifdef TARGET_ABI32 -typedef uint32_t abi_ulong; -typedef int32_t abi_long; +typedef uint32_t abi_ulong __attribute__((aligned(ABI_LONG_ALIGNMENT))); +typedef int32_t abi_long __attribute__((aligned(ABI_LONG_ALIGNMENT))); #define TARGET_ABI_FMT_lx "%08x" #define TARGET_ABI_FMT_ld "%d" #define TARGET_ABI_FMT_lu "%u" -#define TARGET_ABI_BITS 32 static inline abi_ulong tswapal(abi_ulong v) { @@ -32,12 +41,11 @@ static inline abi_ulong tswapal(abi_ulong v) } #else -typedef target_ulong abi_ulong; -typedef target_long abi_long; +typedef target_ulong abi_ulong __attribute__((aligned(ABI_LONG_ALIGNMENT))); +typedef target_long abi_long __attribute__((aligned(ABI_LONG_ALIGNMENT))); #define TARGET_ABI_FMT_lx TARGET_FMT_lx #define TARGET_ABI_FMT_ld TARGET_FMT_ld #define TARGET_ABI_FMT_lu TARGET_FMT_lu -#define TARGET_ABI_BITS TARGET_LONG_BITS /* for consistency, define ABI32 too */ #if TARGET_ABI_BITS == 32 #define TARGET_ABI32 1 -- cgit v1.1