tools: foreign: ensure 64 bit values are properly aligned for arm
authorIan Campbell <Ian.Campbell@citrix.com>
Tue, 26 Feb 2013 10:12:46 +0000 (10:12 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 26 Feb 2013 12:20:56 +0000 (12:20 +0000)
When building the foreign headers on x86_32 we use '#pragma pack(4)' and
therefore need to explicitly align types which should be aligned to 8-byte
boundaries.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
tools/include/xen-foreign/mkheader.py

index 8a784d342a68506052663a85fe9cd729fee7533b..b19292ff032bcdd37e0ba32c4539c78ebcb15f37 100644 (file)
@@ -20,15 +20,18 @@ footer = {};
 inttypes["arm32"] = {
     "unsigned long" : "uint32_t",
     "long"          : "uint32_t",
-    "xen_pfn_t"     : "uint64_t",
-    "xen_ulong_t"   : "uint64_t",
+    "xen_pfn_t"     : "__align8__ uint64_t",
+    "xen_ulong_t"   : "__align8__ uint64_t",
+    "uint64_t"      : "__align8__ uint64_t",
 };
 header["arm32"] = """
 #define __arm___ARM32 1
 #if defined(__GNUC__) && !defined(__STRICT_ANSI__)
 # define __DECL_REG(n64, n32) union { uint64_t n64; uint32_t n32; }
+# define __align8__ __attribute__((aligned (8)))
 #else
 # define __DECL_REG(n64, n32) uint64_t n64
+# define __align8__ FIXME
 #endif
 """;
 footer["arm32"] = """
@@ -38,15 +41,18 @@ footer["arm32"] = """
 inttypes["arm64"] = {
     "unsigned long" : "__danger_unsigned_long_on_arm64",
     "long"          : "__danger_long_on_arm64",
-    "xen_pfn_t"     : "uint64_t",
-    "xen_ulong_t"   : "uint64_t",
+    "xen_pfn_t"     : "__align8__ uint64_t",
+    "xen_ulong_t"   : "__align8__ uint64_t",
+    "uint64_t"      : "__align8__ uint64_t",
 };
 header["arm64"] = """
 #define __aarch64___ARM64 1
 #if defined(__GNUC__) && !defined(__STRICT_ANSI__)
 # define __DECL_REG(n64, n32) union { uint64_t n64; uint32_t n32; }
+# define __align8__ __attribute__((aligned (8)))
 #else
 # define __DECL_REG(n64, n32) uint64_t n64
+# define __align8__ FIXME
 #endif
 """;
 footer["arm64"] = """