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>
master
Paolo Bonzini 2013-04-17 16:26:41 +02:00 committed by Edgar E. Iglesias
parent f8fd4fc4cd
commit 6cfd9b5251
3 changed files with 18 additions and 19 deletions

9
configure vendored
View File

@ -4153,7 +4153,6 @@ bflt="no"
target_nptl="no" target_nptl="no"
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"`
gdb_xml_files="" gdb_xml_files=""
target_long_alignment=4
target_llong_alignment=8 target_llong_alignment=8
target_libs_softmmu= target_libs_softmmu=
@ -4166,10 +4165,8 @@ case "$target_arch2" in
;; ;;
x86_64) x86_64)
TARGET_BASE_ARCH=i386 TARGET_BASE_ARCH=i386
target_long_alignment=8
;; ;;
alpha) alpha)
target_long_alignment=8
target_nptl="yes" target_nptl="yes"
;; ;;
arm|armeb) arm|armeb)
@ -4188,7 +4185,6 @@ case "$target_arch2" in
m68k) m68k)
bflt="yes" bflt="yes"
gdb_xml_files="cf-core.xml cf-fp.xml" gdb_xml_files="cf-core.xml cf-fp.xml"
target_long_alignment=2
target_llong_alignment=2 target_llong_alignment=2
;; ;;
microblaze|microblazeel) microblaze|microblazeel)
@ -4211,7 +4207,6 @@ case "$target_arch2" in
TARGET_ARCH=mips64 TARGET_ARCH=mips64
TARGET_BASE_ARCH=mips TARGET_BASE_ARCH=mips
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
target_long_alignment=8
;; ;;
moxie) moxie)
;; ;;
@ -4233,7 +4228,6 @@ case "$target_arch2" in
TARGET_BASE_ARCH=ppc TARGET_BASE_ARCH=ppc
TARGET_ABI_DIR=ppc TARGET_ABI_DIR=ppc
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
target_long_alignment=8
;; ;;
ppc64abi32) ppc64abi32)
TARGET_ARCH=ppc64 TARGET_ARCH=ppc64
@ -4251,7 +4245,6 @@ case "$target_arch2" in
;; ;;
sparc64) sparc64)
TARGET_BASE_ARCH=sparc TARGET_BASE_ARCH=sparc
target_long_alignment=8
;; ;;
sparc32plus) sparc32plus)
TARGET_ARCH=sparc64 TARGET_ARCH=sparc64
@ -4261,7 +4254,6 @@ case "$target_arch2" in
;; ;;
s390x) s390x)
target_nptl="yes" target_nptl="yes"
target_long_alignment=8
;; ;;
unicore32) unicore32)
;; ;;
@ -4292,7 +4284,6 @@ case "$cpu" in
;; ;;
esac esac
echo "TARGET_LONG_ALIGNMENT=$target_long_alignment" >> $config_target_mak
echo "TARGET_LLONG_ALIGNMENT=$target_llong_alignment" >> $config_target_mak echo "TARGET_LLONG_ALIGNMENT=$target_llong_alignment" >> $config_target_mak
echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak
target_arch_name="`upper $TARGET_ARCH`" target_arch_name="`upper $TARGET_ARCH`"

View File

@ -40,14 +40,14 @@ typedef int64_t target_llong __attribute__((aligned(TARGET_LLONG_ALIGNMENT)));
typedef uint64_t target_ullong __attribute__((aligned(TARGET_LLONG_ALIGNMENT))); typedef uint64_t target_ullong __attribute__((aligned(TARGET_LLONG_ALIGNMENT)));
/* target_ulong is the type of a virtual address */ /* target_ulong is the type of a virtual address */
#if TARGET_LONG_SIZE == 4 #if TARGET_LONG_SIZE == 4
typedef int32_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT))); typedef int32_t target_long;
typedef uint32_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT))); typedef uint32_t target_ulong;
#define TARGET_FMT_lx "%08x" #define TARGET_FMT_lx "%08x"
#define TARGET_FMT_ld "%d" #define TARGET_FMT_ld "%d"
#define TARGET_FMT_lu "%u" #define TARGET_FMT_lu "%u"
#elif TARGET_LONG_SIZE == 8 #elif TARGET_LONG_SIZE == 8
typedef int64_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT))); typedef int64_t target_long;
typedef uint64_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT))); typedef uint64_t target_ulong;
#define TARGET_FMT_lx "%016" PRIx64 #define TARGET_FMT_lx "%016" PRIx64
#define TARGET_FMT_ld "%" PRId64 #define TARGET_FMT_ld "%" PRId64
#define TARGET_FMT_lu "%" PRIu64 #define TARGET_FMT_lu "%" PRIu64

View File

@ -2,8 +2,15 @@
#define QEMU_TYPES_H #define QEMU_TYPES_H
#include "cpu.h" #include "cpu.h"
#ifdef TARGET_ABI32
#define TARGET_ABI_BITS 32
#else
#define TARGET_ABI_BITS TARGET_LONG_BITS
#endif
#ifdef TARGET_M68K #ifdef TARGET_M68K
#define ABI_INT_ALIGNMENT 2 #define ABI_INT_ALIGNMENT 2
#define ABI_LONG_ALIGNMENT 2
#endif #endif
#ifndef ABI_SHORT_ALIGNMENT #ifndef ABI_SHORT_ALIGNMENT
@ -12,6 +19,9 @@
#ifndef ABI_INT_ALIGNMENT #ifndef ABI_INT_ALIGNMENT
#define ABI_INT_ALIGNMENT 4 #define ABI_INT_ALIGNMENT 4
#endif #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 int16_t abi_short __attribute__ ((aligned(ABI_SHORT_ALIGNMENT)));
typedef uint16_t abi_ushort __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))); typedef uint32_t abi_uint __attribute__((aligned(ABI_INT_ALIGNMENT)));
#ifdef TARGET_ABI32 #ifdef TARGET_ABI32
typedef uint32_t abi_ulong; typedef uint32_t abi_ulong __attribute__((aligned(ABI_LONG_ALIGNMENT)));
typedef int32_t abi_long; typedef int32_t abi_long __attribute__((aligned(ABI_LONG_ALIGNMENT)));
#define TARGET_ABI_FMT_lx "%08x" #define TARGET_ABI_FMT_lx "%08x"
#define TARGET_ABI_FMT_ld "%d" #define TARGET_ABI_FMT_ld "%d"
#define TARGET_ABI_FMT_lu "%u" #define TARGET_ABI_FMT_lu "%u"
#define TARGET_ABI_BITS 32
static inline abi_ulong tswapal(abi_ulong v) static inline abi_ulong tswapal(abi_ulong v)
{ {
@ -32,12 +41,11 @@ static inline abi_ulong tswapal(abi_ulong v)
} }
#else #else
typedef target_ulong abi_ulong; typedef target_ulong abi_ulong __attribute__((aligned(ABI_LONG_ALIGNMENT)));
typedef target_long abi_long; typedef target_long abi_long __attribute__((aligned(ABI_LONG_ALIGNMENT)));
#define TARGET_ABI_FMT_lx TARGET_FMT_lx #define TARGET_ABI_FMT_lx TARGET_FMT_lx
#define TARGET_ABI_FMT_ld TARGET_FMT_ld #define TARGET_ABI_FMT_ld TARGET_FMT_ld
#define TARGET_ABI_FMT_lu TARGET_FMT_lu #define TARGET_ABI_FMT_lu TARGET_FMT_lu
#define TARGET_ABI_BITS TARGET_LONG_BITS
/* for consistency, define ABI32 too */ /* for consistency, define ABI32 too */
#if TARGET_ABI_BITS == 32 #if TARGET_ABI_BITS == 32
#define TARGET_ABI32 1 #define TARGET_ABI32 1