From acf2d315202587e81bb7f3b6841dcfce2814415e Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Fri, 19 Jul 2013 12:51:10 +0100 Subject: 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 Acked-by: Keir Fraser Acked-by: Ian Jackson --- tools/include/xen-foreign/mkchecker.py | 21 +++++++++++++++++++-- tools/include/xen-foreign/structs.py | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'tools/include') 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', +} -- cgit v1.2.3