aboutsummaryrefslogtreecommitdiffstats
path: root/tools/include/xen-foreign/mkchecker.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/include/xen-foreign/mkchecker.py')
-rw-r--r--tools/include/xen-foreign/mkchecker.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/include/xen-foreign/mkchecker.py b/tools/include/xen-foreign/mkchecker.py
new file mode 100644
index 0000000000..66c17b19e9
--- /dev/null
+++ b/tools/include/xen-foreign/mkchecker.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+
+import sys;
+from structs import structs;
+
+# command line arguments
+outfile = sys.argv[1];
+archs = sys.argv[2:];
+
+f = open(outfile, "w");
+f.write('''
+/*
+ * sanity checks for generated foreign headers:
+ * - verify struct sizes
+ *
+ * generated by %s -- DO NOT EDIT
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <inttypes.h>
+''');
+
+for a in archs:
+ f.write('#include "%s.h"\n' % a);
+
+f.write('int main(int argc, char *argv[])\n{\n');
+
+f.write('\tprintf("\\n");');
+f.write('printf("%-25s |", "structs");\n');
+for a in archs:
+ f.write('\tprintf("%%8s", "%s");\n' % a);
+f.write('\tprintf("\\n");');
+
+f.write('\tprintf("\\n");');
+for struct in structs:
+ f.write('\tprintf("%%-25s |", "%s");\n' % struct);
+ for a in archs:
+ s = struct + "_" + a;
+ f.write('#ifdef %s_has_no_%s\n' % (a, struct));
+ f.write('\tprintf("%8s", "-");\n');
+ f.write("#else\n");
+ f.write('\tprintf("%%8zd", sizeof(struct %s));\n' % s);
+ f.write("#endif\n");
+
+ f.write('\tprintf("\\n");\n\n');
+
+f.write('\tprintf("\\n");\n');
+f.write('\texit(0);\n');
+f.write('}\n');
+
+f.close();
+