mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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. This cannot cope
with #defines between the #ifdef and the struct definitions, so move
MAX_GUEST_CMDLINE to be next to its only usage.
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>
This commit is contained in:
1 parent
6bba043afe
commit
f07cb646ff
6 files changed
+24
-16
No files matched your search
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -19,6 +19,8 @@ defines = [ "__arm__",
|
||||
"__i386__",
|
||||
"__x86_64__",
|
||||
|
||||
"XEN_HAVE_PV_GUEST_ENTRY",
|
||||
|
||||
# arm
|
||||
# None
|
||||
|
||||
|
||||
@@ -257,14 +257,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)*/
|
||||
|
||||
|
||||
@@ -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. */
|
||||
|
||||