linux-user: Define target alignment size

Datatype alignment can be found using following application:

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));
}

This patch includes following alignments:

i386

   alignof(short) 2
   alignof(int) 4
   alignof(long) 4
   alignof(long long) 8

 x86_64

   alignof(short) 2
   alignof(int) 4
   alignof(long) 8
   alignof(long long) 8

 arm

   alignof(short) 2
   alignof(int) 4
   alignof(long) 4
   alignof(long long) 4

 m68k (680x0)

   alignof(short) 2
   alignof(int) 2
   alignof(long) 2
   alignof(long long) 2

 mips

   alignof(short) 2
   alignof(int) 4
   alignof(long) 4
   alignof(long long) 8

 ppc

   alignof(short) 2
   alignof(int) 4
   alignof(long) 4
   alignof(long long) 8

for other targets, use by default (2,4,4,8).

Please, update for your favorite target...

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@nokia.com>
This commit is contained in:
Laurent Vivier 2011-02-13 23:37:34 +01:00 committed by Riku Voipio
parent 3b6edd1611
commit c2e3dee6e0
2 changed files with 27 additions and 4 deletions

17
configure vendored
View File

@ -2962,6 +2962,10 @@ 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"`
echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
gdb_xml_files="" gdb_xml_files=""
target_short_alignment=2
target_int_alignment=4
target_long_alignment=4
target_llong_alignment=8
TARGET_ARCH="$target_arch2" TARGET_ARCH="$target_arch2"
TARGET_BASE_ARCH="" TARGET_BASE_ARCH=""
@ -2974,9 +2978,11 @@ case "$target_arch2" in
x86_64) x86_64)
TARGET_BASE_ARCH=i386 TARGET_BASE_ARCH=i386
target_phys_bits=64 target_phys_bits=64
target_long_alignment=8
;; ;;
alpha) alpha)
target_phys_bits=64 target_phys_bits=64
target_long_alignment=8
target_nptl="yes" target_nptl="yes"
;; ;;
arm|armeb) arm|armeb)
@ -2985,6 +2991,7 @@ case "$target_arch2" in
target_nptl="yes" target_nptl="yes"
gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
target_phys_bits=32 target_phys_bits=32
target_llong_alignment=4
;; ;;
cris) cris)
target_nptl="yes" target_nptl="yes"
@ -2994,6 +3001,9 @@ case "$target_arch2" in
bflt="yes" bflt="yes"
gdb_xml_files="cf-core.xml cf-fp.xml" gdb_xml_files="cf-core.xml cf-fp.xml"
target_phys_bits=32 target_phys_bits=32
target_int_alignment=2
target_long_alignment=2
target_llong_alignment=2
;; ;;
microblaze) microblaze)
bflt="yes" bflt="yes"
@ -3017,6 +3027,7 @@ case "$target_arch2" in
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_phys_bits=64 target_phys_bits=64
target_long_alignment=8
;; ;;
ppc) ppc)
gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
@ -3035,6 +3046,7 @@ case "$target_arch2" in
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_phys_bits=64 target_phys_bits=64
target_long_alignment=8
;; ;;
ppc64abi32) ppc64abi32)
TARGET_ARCH=ppc64 TARGET_ARCH=ppc64
@ -3056,6 +3068,7 @@ case "$target_arch2" in
sparc64) sparc64)
TARGET_BASE_ARCH=sparc TARGET_BASE_ARCH=sparc
target_phys_bits=64 target_phys_bits=64
target_long_alignment=8
;; ;;
sparc32plus) sparc32plus)
TARGET_ARCH=sparc64 TARGET_ARCH=sparc64
@ -3072,6 +3085,10 @@ case "$target_arch2" in
exit 1 exit 1
;; ;;
esac esac
echo "TARGET_SHORT_ALIGNMENT=$target_short_alignment" >> $config_target_mak
echo "TARGET_INT_ALIGNMENT=$target_int_alignment" >> $config_target_mak
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 echo "TARGET_ARCH=$TARGET_ARCH" >> $config_target_mak
target_arch_name="`echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'`" target_arch_name="`echo $TARGET_ARCH | tr '[:lower:]' '[:upper:]'`"
echo "TARGET_$target_arch_name=y" >> $config_target_mak echo "TARGET_$target_arch_name=y" >> $config_target_mak

View File

@ -37,16 +37,22 @@
#define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8) #define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8)
typedef int16_t target_short __attribute__ ((aligned(TARGET_SHORT_ALIGNMENT)));
typedef uint16_t target_ushort __attribute__((aligned(TARGET_SHORT_ALIGNMENT)));
typedef int32_t target_int __attribute__((aligned(TARGET_INT_ALIGNMENT)));
typedef uint32_t target_uint __attribute__((aligned(TARGET_INT_ALIGNMENT)));
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 */ /* target_ulong is the type of a virtual address */
#if TARGET_LONG_SIZE == 4 #if TARGET_LONG_SIZE == 4
typedef int32_t target_long; typedef int32_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT)));
typedef uint32_t target_ulong; typedef uint32_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT)));
#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; typedef int64_t target_long __attribute__((aligned(TARGET_LONG_ALIGNMENT)));
typedef uint64_t target_ulong; typedef uint64_t target_ulong __attribute__((aligned(TARGET_LONG_ALIGNMENT)));
#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