We ran into a problem on ia64 that checker doesn''t support structures containing unions. This adds that support and changes the output format to allow for longer structure names. We''ve got both unions and a long struct name in the ia64 tree, so these changes will get used next time we merge. Thanks, Alex Signed-off-by: Alex Williamson <alex.williamson@hp.com> --- diff -r 22c5695b7c73 xen/include/public/foreign/mkchecker.py --- a/xen/include/public/foreign/mkchecker.py Fri May 11 10:07:06 2007 +0100 +++ b/xen/include/public/foreign/mkchecker.py Fri May 11 10:23:36 2007 -0600 @@ -29,14 +29,14 @@ f.write(''int main(int argc, char *argv[] f.write(''int main(int argc, char *argv[])\n{\n''); f.write(''\tprintf("\\n");''); -f.write(''printf("%-20s |", "structs");\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("%%-20s |", "%s");\n'' % struct); + f.write(''\tprintf("%%-25s |", "%s");\n'' % struct); for a in archs: if a == arch: s = struct; # native diff -r 22c5695b7c73 xen/include/public/foreign/mkheader.py --- a/xen/include/public/foreign/mkheader.py Fri May 11 10:07:06 2007 +0100 +++ b/xen/include/public/foreign/mkheader.py Fri May 11 10:21:26 2007 -0600 @@ -1,7 +1,7 @@ #!/usr/bin/python import sys, re; -from structs import structs, defines; +from structs import unions, structs, defines; # command line arguments arch = sys.argv[1]; @@ -110,6 +110,16 @@ input = re.compile("/\*(.*?)\*/", re.S). input = re.compile("/\*(.*?)\*/", re.S).sub("", input) input = re.compile("\n\s*\n", re.S).sub("\n", input); +# add unions to output +for union in unions: + regex = "union\s+%s\s*\{(.*?)\n\};" % union; + match = re.search(regex, input, re.S) + if None == match: + output += "#define %s_has_no_%s 1\n" % (arch, union); + else: + output += "union %s_%s {%s\n};\n" % (union, arch, match.group(1)); + output += "\n"; + # add structs to output for struct in structs: regex = "struct\s+%s\s*\{(.*?)\n\};" % struct; @@ -135,6 +145,10 @@ for define in defines: replace = define + "_" + arch; output = re.sub("\\b%s\\b" % define, replace, output); +# replace: unions +for union in unions: + output = re.sub("\\b(union\s+%s)\\b" % union, "\\1_%s" % arch, output); + # replace: structs + struct typedefs for struct in structs: output = re.sub("\\b(struct\s+%s)\\b" % struct, "\\1_%s" % arch, output); diff -r 22c5695b7c73 xen/include/public/foreign/reference.size --- a/xen/include/public/foreign/reference.size Fri May 11 10:07:06 2007 +0100 +++ b/xen/include/public/foreign/reference.size Fri May 11 10:25:48 2007 -0600 @@ -1,17 +1,17 @@ -structs | x86_32 x86_64 ia64 +structs | x86_32 x86_64 ia64 -start_info | 1104 1152 1152 -trap_info | 8 16 - -pt_fpreg | - - 16 -cpu_user_regs | 68 200 496 -xen_ia64_boot_param | - - 96 -ia64_tr_entry | - - 32 -vcpu_extra_regs | - - 536 -vcpu_guest_context | 2800 5168 1056 -arch_vcpu_info | 24 16 0 -vcpu_time_info | 32 32 32 -vcpu_info | 64 64 48 -arch_shared_info | 268 280 272 -shared_info | 2584 3368 4384 +start_info | 1104 1152 1152 +trap_info | 8 16 - +pt_fpreg | - - 16 +cpu_user_regs | 68 200 496 +xen_ia64_boot_param | - - 96 +ia64_tr_entry | - - 32 +vcpu_extra_regs | - - 536 +vcpu_guest_context | 2800 5168 1056 +arch_vcpu_info | 24 16 0 +vcpu_time_info | 32 32 32 +vcpu_info | 64 64 48 +arch_shared_info | 268 280 272 +shared_info | 2584 3368 4384 diff -r 22c5695b7c73 xen/include/public/foreign/structs.py --- a/xen/include/public/foreign/structs.py Fri May 11 10:07:06 2007 +0100 +++ b/xen/include/public/foreign/structs.py Fri May 11 10:22:34 2007 -0600 @@ -1,4 +1,6 @@ # configuration: what needs translation + +unions = [ ]; structs = [ "start_info", "trap_info", _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel