[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alig
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target |
Date: |
Wed, 3 Apr 2013 12:32:04 +0200 |
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 <address@hidden>
---
configure | 9 ---------
include/exec/cpu-defs.h | 8 ++++----
include/exec/user/abitypes.h | 19 +++++++++++++------
target-m68k/cpu.h | 1 +
4 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/configure b/configure
index 8276e79..0763047 100755
--- a/configure
+++ b/configure
@@ -4011,7 +4011,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=
@@ -4024,10 +4023,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)
@@ -4046,7 +4043,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)
@@ -4069,7 +4065,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)
;;
@@ -4091,7 +4086,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
@@ -4109,7 +4103,6 @@ case "$target_arch2" in
;;
sparc64)
TARGET_BASE_ARCH=sparc
- target_long_alignment=8
;;
sparc32plus)
TARGET_ARCH=sparc64
@@ -4119,7 +4112,6 @@ case "$target_arch2" in
;;
s390x)
target_nptl="yes"
- target_long_alignment=8
;;
unicore32)
;;
@@ -4151,7 +4143,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 2aa9331..3cf1272 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 97a87a6..9bf916a 100644
--- a/include/exec/user/abitypes.h
+++ b/include/exec/user/abitypes.h
@@ -2,12 +2,21 @@
#define QEMU_TYPES_H
#include "cpu.h"
+#ifdef TARGET_ABI32
+#define TARGET_ABI_BITS 32
+#else
+#define TARGET_ABI_BITS TARGET_LONG_BITS
+#endif
+
#ifndef ABI_SHORT_ALIGNMENT
#define ABI_SHORT_ALIGNMENT 2
#endif
#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)));
@@ -15,12 +24,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)
{
@@ -28,12 +36,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
diff --git a/target-m68k/cpu.h b/target-m68k/cpu.h
index 29cc887..6825e7c 100644
--- a/target-m68k/cpu.h
+++ b/target-m68k/cpu.h
@@ -22,6 +22,7 @@
#define TARGET_LONG_BITS 32
#define ABI_INT_ALIGNMENT 2
+#define ABI_LONG_ALIGNMENT 2
#define CPUArchState struct CPUM68KState
--
1.8.1.4
- Re: [Qemu-devel] [PATCH v2 01/10] elfload: fix size of ABI-dependent fields in core dumps, (continued)
[Qemu-devel] [PATCH v2 03/10] elfload: use tswapreg consistently in elf_core_copy_regs, Paolo Bonzini, 2013/04/03
[Qemu-devel] [PATCH v2 04/10] elfload: use abi_short/ushort instead of target_short/ushort, Paolo Bonzini, 2013/04/03
[Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Peter Maydell, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Paolo Bonzini, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Peter Maydell, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Paolo Bonzini, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Peter Maydell, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Paolo Bonzini, 2013/04/04
- Re: [Qemu-devel] [PATCH v2 06/10] elfload: only give abi_long/ulong the alignment specified by the target, Peter Maydell, 2013/04/04
[Qemu-devel] [PATCH v2 07/10] elfload: use abi_llong/ullong instead of target_llong/ullong, Paolo Bonzini, 2013/04/03
[Qemu-devel] [PATCH v2 08/10] configure: move CONFIG_QEMU_LDST_OPTIMIZATION to config-host.mak, Paolo Bonzini, 2013/04/03
[Qemu-devel] [PATCH v2 05/10] elfload: use abi_int/uint instead of target_int/uint, Paolo Bonzini, 2013/04/03