diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2013-07-19 12:51:10 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-08-20 15:41:25 +0100 |
commit | acf2d315202587e81bb7f3b6841dcfce2814415e (patch) | |
tree | 7733f2b495570c7a4ba30e8ffaabdb3034f0d486 /tools/include | |
parent | f07cb646ff013b631a6efb53bb0e38ea9b2e7c60 (diff) | |
download | xen-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.py | 21 | ||||
-rw-r--r-- | tools/include/xen-foreign/structs.py | 5 |
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', +} |