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:
		
							parent
							
								
									3b6edd1611
								
							
						
					
					
						commit
						c2e3dee6e0
					
				
							
								
								
									
										17
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								cpu-defs.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								cpu-defs.h
									
									
									
									
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user