aboutsummaryrefslogtreecommitdiffstats
path: root/tools/include
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2013-07-19 12:51:10 +0100
committerIan Campbell <ian.campbell@citrix.com>2013-08-20 15:41:25 +0100
commitacf2d315202587e81bb7f3b6841dcfce2814415e (patch)
tree7733f2b495570c7a4ba30e8ffaabdb3034f0d486 /tools/include
parentf07cb646ff013b631a6efb53bb0e38ea9b2e7c60 (diff)
downloadxen-acf2d315202587e81bb7f3b6841dcfce2814415e.tar.gz
xen-acf2d315202587e81bb7f3b6841dcfce2814415e.tar.bz2
xen-acf2d315202587e81bb7f3b6841dcfce2814415e.zip
tools: foreign: add checks for compatible architectures
That is architectures whose struct layout must be identical. Use this for arm32 and arm64. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Keir Fraser <keir@xen.org> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/include')
-rw-r--r--tools/include/xen-foreign/mkchecker.py21
-rw-r--r--tools/include/xen-foreign/structs.py5
2 files changed, 24 insertions, 2 deletions
diff --git a/tools/include/xen-foreign/mkchecker.py b/tools/include/xen-foreign/mkchecker.py
index 66c17b19e9..fdad869a91 100644
--- a/tools/include/xen-foreign/mkchecker.py
+++ b/tools/include/xen-foreign/mkchecker.py
@@ -1,7 +1,7 @@
#!/usr/bin/python
import sys;
-from structs import structs;
+from structs import structs, compat_arches;
# command line arguments
outfile = sys.argv[1];
@@ -37,10 +37,27 @@ for struct in structs:
f.write('\tprintf("%%-25s |", "%s");\n' % struct);
for a in archs:
s = struct + "_" + a;
+ if compat_arches.has_key(a):
+ compat = compat_arches[a]
+ c = struct + "_" + compat;
+ else:
+ compat = None
f.write('#ifdef %s_has_no_%s\n' % (a, struct));
- f.write('\tprintf("%8s", "-");\n');
+ f.write('\tprintf("%8s",\n');
+ if compat:
+ f.write('# ifndef %s_has_no_%s\n' % (compat, struct));
+ f.write('\t\t"!"\n');
+ f.write('# else\n')
+ f.write('\t\t"-"\n');
+ f.write('# endif\n')
+ else:
+ f.write('\t\t"-"\n');
+ f.write('\t);\n')
f.write("#else\n");
f.write('\tprintf("%%8zd", sizeof(struct %s));\n' % s);
+ if compat:
+ f.write('\tif (sizeof(struct %s) != sizeof(struct %s))\n' % (s, c))
+ f.write('\t\tprintf("!");\n')
f.write("#endif\n");
f.write('\tprintf("\\n");\n\n');
diff --git a/tools/include/xen-foreign/structs.py b/tools/include/xen-foreign/structs.py
index 476eb85f06..3d9f2fe956 100644
--- a/tools/include/xen-foreign/structs.py
+++ b/tools/include/xen-foreign/structs.py
@@ -58,3 +58,8 @@ defines = [ "__arm__",
"XEN_LEGACY_MAX_VCPUS",
"MAX_GUEST_CMDLINE" ];
+# Architectures which must be compatible, i.e. identical
+compat_arches = {
+ 'arm32': 'arm64',
+ 'arm64': 'arm32',
+}