diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2013-04-17 16:26:41 +0200 |
---|---|---|
committer | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2013-04-18 14:12:31 +0200 |
commit | 6cfd9b5251c1d03c60f9ebc95fa98670db8f3e09 (patch) | |
tree | 53d54650d850a7dff72ec1bcddccac27555bd1a3 | |
parent | f8fd4fc4cd9138576cb1cec15c6ac9416e51eeb8 (diff) | |
download | qemu-6cfd9b5251c1d03c60f9ebc95fa98670db8f3e09.zip |
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 <pbonzini@redhat.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
-rwxr-xr-x | configure | 9 | ||||
-rw-r--r-- | include/exec/cpu-defs.h | 8 | ||||
-rw-r--r-- | include/exec/user/abitypes.h | 20 |
3 files changed, 18 insertions, 19 deletions
@@ -4153,7 +4153,6 @@ bflt="no" target_nptl="no" interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` gdb_xml_files="" -target_long_alignment=4 target_llong_alignment=8 target_libs_softmmu= @@ -4166,10 +4165,8 @@ case "$target_arch2" in ;; x86_64) TARGET_BASE_ARCH=i386 - target_long_alignment=8 ;; alpha) - target_long_alignment=8 target_nptl="yes" ;; arm|armeb) @@ -4188,7 +4185,6 @@ case "$target_arch2" in m68k) bflt="yes" gdb_xml_files="cf-core.xml cf-fp.xml" - target_long_alignment=2 target_llong_alignment=2 ;; microblaze|microblazeel) @@ -4211,7 +4207,6 @@ case "$target_arch2" in TARGET_ARCH=mips64 TARGET_BASE_ARCH=mips echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak - target_long_alignment=8 ;; moxie) ;; @@ -4233,7 +4228,6 @@ case "$target_arch2" in TARGET_BASE_ARCH=ppc TARGET_ABI_DIR=ppc gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" - target_long_alignment=8 ;; ppc64abi32) TARGET_ARCH=ppc64 @@ -4251,7 +4245,6 @@ case "$target_arch2" in ;; sparc64) TARGET_BASE_ARCH=sparc - target_long_alignment=8 ;; sparc32plus) TARGET_ARCH=sparc64 @@ -4261,7 +4254,6 @@ case "$target_arch2" in ;; s390x) target_nptl="yes" - target_long_alignment=8 ;; unicore32) ;; @@ -4292,7 +4284,6 @@ case "$cpu" in ;; esac -echo "TARGET_LONG_ALIGNMENT=$target_long_alignment" >> $config_target_mak echo "TARGET_LLONG_ALIGNMENT=$target_llong_alignment" >> $config_target_mak echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak target_arch_name="`upper $TARGET_ARCH`" diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h index 2aa933156a..3cf1272281 100644 --- a/include/exec/cpu-defs.h +++ b/include/exec/cpu-defs.h @@ -40,14 +40,14 @@ typedef int64_t target_llong __attribute__((aligned(TARGET_LLONG_ALIGNMENT))); typedef uint64_t target_ullong __attribute__((aligned(TARGET_LLONG_ALIGNMENT))); /* target_ulong is the type of a virtual address */ #if TARGET_LONG_SIZE == 4 -typedef int32_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT))); -typedef uint32_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT))); +typedef int32_t target_long; +typedef uint32_t target_ulong; #define TARGET_FMT_lx "%08x" #define TARGET_FMT_ld "%d" #define TARGET_FMT_lu "%u" #elif TARGET_LONG_SIZE == 8 -typedef int64_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT))); -typedef uint64_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT))); +typedef int64_t target_long; +typedef uint64_t target_ulong; #define TARGET_FMT_lx "%016" PRIx64 #define TARGET_FMT_ld "%" PRId64 #define TARGET_FMT_lu "%" PRIu64 diff --git a/include/exec/user/abitypes.h b/include/exec/user/abitypes.h index 4f3e804786..4b04f6d27b 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 |