[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/5] xen: arm: include public/xen.h in foreign interface checking
mkheader.py doesn't cope with struct foo { }; so add a newline. Define unsigned long and long to a non-existent type on ARM so as to catch their use. Teach mkheader.py to cope with structs which are ifdef'd. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Jan Beulich <JBeulich@xxxxxxxx> Cc: Keir (Xen.org) <keir@xxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- v3: rework for ifdeffed instead of moved start_info. --- tools/include/xen-foreign/Makefile | 4 ++-- tools/include/xen-foreign/mkheader.py | 14 +++++++++----- tools/include/xen-foreign/reference.size | 10 +++++----- tools/include/xen-foreign/structs.py | 2 ++ xen/include/public/arch-arm.h | 8 +++++--- xen/include/public/xen.h | 2 +- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/tools/include/xen-foreign/Makefile b/tools/include/xen-foreign/Makefile index 8e0be83..06b844c 100644 --- a/tools/include/xen-foreign/Makefile +++ b/tools/include/xen-foreign/Makefile @@ -22,10 +22,10 @@ check-headers: checker diff -u reference.size tmp.size rm tmp.size -arm32.h: mkheader.py structs.py $(ROOT)/arch-arm.h +arm32.h: mkheader.py structs.py $(ROOT)/arch-arm.h $(ROOT)/xen.h $(PYTHON) $< $* $@ $(filter %.h,$^) -arm64.h: mkheader.py structs.py $(ROOT)/arch-arm.h +arm64.h: mkheader.py structs.py $(ROOT)/arch-arm.h $(ROOT)/xen.h $(PYTHON) $< $* $@ $(filter %.h,$^) x86_32.h: mkheader.py structs.py $(ROOT)/arch-x86/xen-x86_32.h $(ROOT)/arch-x86/xen.h $(ROOT)/xen.h diff --git a/tools/include/xen-foreign/mkheader.py b/tools/include/xen-foreign/mkheader.py index b19292f..0504cb8 100644 --- a/tools/include/xen-foreign/mkheader.py +++ b/tools/include/xen-foreign/mkheader.py @@ -18,8 +18,8 @@ footer = {}; #arm inttypes["arm32"] = { - "unsigned long" : "uint32_t", - "long" : "uint32_t", + "unsigned long" : "__danger_unsigned_long_on_arm32", + "long" : "__danger_long_on_arm32", "xen_pfn_t" : "__align8__ uint64_t", "xen_ulong_t" : "__align8__ uint64_t", "uint64_t" : "__align8__ uint64_t", @@ -124,6 +124,8 @@ if arch in header: output += header[arch]; output += "\n"; +defined = {} + # add defines to output for line in re.findall("#define[^\n]+", input): for define in defines: @@ -131,6 +133,7 @@ for line in re.findall("#define[^\n]+", input): match = re.search(regex, line); if None == match: continue; + defined[define] = 1 if define.upper()[0] == define[0]: replace = define + "_" + arch.upper(); else: @@ -156,12 +159,13 @@ for union in unions: # add structs to output for struct in structs: - regex = "struct\s+%s\s*\{(.*?)\n\};" % struct; + regex = "(?:#ifdef ([A-Z_]+))?\nstruct\s+%s\s*\{(.*?)\n\};" % struct; match = re.search(regex, input, re.S) - if None == match: + if None == match or \ + (match.group(1) is not None and match.group(1) not in defined): output += "#define %s_has_no_%s 1\n" % (arch, struct); else: - output += "struct %s_%s {%s\n};\n" % (struct, arch, match.group(1)); + output += "struct %s_%s {%s\n};\n" % (struct, arch, match.group(2)); output += "typedef struct %s_%s %s_%s_t;\n" % (struct, arch, struct, arch); output += "\n"; diff --git a/tools/include/xen-foreign/reference.size b/tools/include/xen-foreign/reference.size index de36455..b3347b4 100644 --- a/tools/include/xen-foreign/reference.size +++ b/tools/include/xen-foreign/reference.size @@ -6,9 +6,9 @@ trap_info | - - 8 16 cpu_user_regs | - - 68 200 vcpu_guest_core_regs | 304 304 - - vcpu_guest_context | 336 336 2800 5168 -arch_vcpu_info | - - 24 16 -vcpu_time_info | - - 32 32 -vcpu_info | - - 64 64 -arch_shared_info | - - 268 280 -shared_info | - - 2584 3368 +arch_vcpu_info | 0 0 24 16 +vcpu_time_info | 32 32 32 32 +vcpu_info | 48 48 64 64 +arch_shared_info | 0 0 268 280 +shared_info | 1088 1088 2584 3368 diff --git a/tools/include/xen-foreign/structs.py b/tools/include/xen-foreign/structs.py index 0b33a77..476eb85 100644 --- a/tools/include/xen-foreign/structs.py +++ b/tools/include/xen-foreign/structs.py @@ -19,6 +19,8 @@ defines = [ "__arm__", "__i386__", "__x86_64__", + "XEN_HAVE_PV_GUEST_ENTRY", + # arm # None diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h index 8aa62d3..93c420c 100644 --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -195,14 +195,16 @@ struct vcpu_guest_context { typedef struct vcpu_guest_context vcpu_guest_context_t; DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); -struct arch_vcpu_info { }; +struct arch_vcpu_info { +}; typedef struct arch_vcpu_info arch_vcpu_info_t; -struct arch_shared_info { }; +struct arch_shared_info { +}; typedef struct arch_shared_info arch_shared_info_t; typedef uint64_t xen_callback_t; -#endif /* ifndef __ASSEMBLY __ */ +#endif /* PSR bits (CPSR, SPSR)*/ diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 2414e7e..037540d 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -717,7 +717,6 @@ typedef struct shared_info shared_info_t; * pages preceding pt_base and mark them as reserved/unused. */ #ifdef XEN_HAVE_PV_GUEST_ENTRY -#define MAX_GUEST_CMDLINE 1024 struct start_info { /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */ char magic[32]; /* "xen-<version>-<platform>". */ @@ -744,6 +743,7 @@ struct start_info { /* (PFN of pre-loaded module if */ /* SIF_MOD_START_PFN set in flags). */ unsigned long mod_len; /* Size (bytes) of pre-loaded module. */ +#define MAX_GUEST_CMDLINE 1024 int8_t cmd_line[MAX_GUEST_CMDLINE]; /* The pfn range here covers both page table and p->m table frames. */ unsigned long first_p2m_pfn;/* 1st pfn forming initial P->M table. */ -- 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |