[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] RFC: Automatically check xen's public headers for C++ pitfalls.
Add a check, like the existing check for non-ANSI C in the public headers, that runs the public headers through a C++ compiler to flag non-C++-friendly constructs. Unlike the ANSI C check, we accept GCC-isms (gnu++98), and we also check various tools-only headers. Explicitly _not_ addressing the use of 'private' in various fields, since we'd previously decided not to fix that. Also tidy up the runes for these checks to be a bit more readable. Reported-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx> Signed-off-by: Tim Deegan <tim@xxxxxxx> Cc: Jan Beulich <JBeulich@xxxxxxxx> --- v2: test more headers; define __XEN_TOOLS__; use g++98 rather than ansi; tidy the makefile for readability; add a missing include to flask_op.h, which uses evtchn_port_t. --- .gitignore | 1 + config/StdGNU.mk | 2 ++ config/SunOS.mk | 1 + xen/include/Makefile | 28 ++++++++++++++++++++++++---- xen/include/public/platform.h | 39 ++++++++++++++++++++++----------------- xen/include/public/xsm/flask_op.h | 2 ++ 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 13ee05b..78958ea 100644 --- a/.gitignore +++ b/.gitignore @@ -233,6 +233,7 @@ xen/arch/*/efi/compat.c xen/arch/*/efi/efi.h xen/arch/*/efi/runtime.c xen/include/headers.chk +xen/include/headers++.chk xen/include/asm xen/include/asm-*/asm-offsets.h xen/include/compat/* diff --git a/config/StdGNU.mk b/config/StdGNU.mk index 4efebe3..e10ed39 100644 --- a/config/StdGNU.mk +++ b/config/StdGNU.mk @@ -2,9 +2,11 @@ AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld ifeq ($(clang),y) CC = $(CROSS_COMPILE)clang +CXX = $(CROSS_COMPILE)clang++ LD_LTO = $(CROSS_COMPILE)llvm-ld else CC = $(CROSS_COMPILE)gcc +CXX = $(CROSS_COMPILE)g++ LD_LTO = $(CROSS_COMPILE)ld endif CPP = $(CC) -E diff --git a/config/SunOS.mk b/config/SunOS.mk index 3316280..c2be37d 100644 --- a/config/SunOS.mk +++ b/config/SunOS.mk @@ -2,6 +2,7 @@ AS = $(CROSS_COMPILE)gas LD = $(CROSS_COMPILE)gld CC = $(CROSS_COMPILE)gcc CPP = $(CROSS_COMPILE)gcc -E +CXX = $(CROSS_COMPILE)g++ AR = $(CROSS_COMPILE)gar RANLIB = $(CROSS_COMPILE)granlib NM = $(CROSS_COMPILE)gnm diff --git a/xen/include/Makefile b/xen/include/Makefile index 94112d1..d48a642 100644 --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -87,13 +87,33 @@ compat/xlat.h: $(addprefix compat/.xlat/,$(xlat-y)) Makefile ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH)) -all: headers.chk +all: headers.chk headers++.chk -headers.chk: $(filter-out public/arch-% public/%ctl.h public/xsm/% public/%hvm/save.h, $(wildcard public/*.h public/*/*.h) $(public-y)) Makefile - for i in $(filter %.h,$^); do $(CC) -ansi -include stdint.h -Wall -W -Werror -S -o /dev/null -x c $$i || exit 1; echo $$i; done >$@.new +PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h) $(public-y)) + +PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h, $(PUBLIC_HEADERS)) + +headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile + for i in $(filter %.h,$^); do \ + $(CC) -x c -ansi -Wall -Werror -include stdint.h \ + -S -o /dev/null $$i || exit 1; \ + echo $$i; \ + done >$@.new + mv $@.new $@ + +headers++.chk: $(PUBLIC_HEADERS) Makefile + if $(CXX) -v >/dev/null 2>&1; then \ + for i in $(filter %.h,$^); do \ + $(CXX) -x c++ -std=gnu++98 -Wall -Werror \ + -D__XEN_TOOLS__ -Dprivate=private_is_a_keyword_in_cpp \ + -include stdint.h -include public/xen.h \ + -S -o /dev/null $$i || exit 1; \ + echo $$i; \ + done ; \ + fi >$@.new mv $@.new $@ endif clean:: - rm -rf compat headers.chk + rm -rf compat headers.chk headers++.chk diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h index 3e340b4..dd03447 100644 --- a/xen/include/public/platform.h +++ b/xen/include/public/platform.h @@ -126,6 +126,26 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t); #define XEN_EFI_query_variable_info 9 #define XEN_EFI_query_capsule_capabilities 10 #define XEN_EFI_update_capsule 11 + +struct xenpf_efi_guid { + uint32_t data1; + uint16_t data2; + uint16_t data3; + uint8_t data4[8]; +}; + +struct xenpf_efi_time { + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t min; + uint8_t sec; + uint32_t ns; + int16_t tz; + uint8_t daylight; +}; + struct xenpf_efi_runtime_call { uint32_t function; /* @@ -138,17 +158,7 @@ struct xenpf_efi_runtime_call { union { #define XEN_EFI_GET_TIME_SET_CLEARS_NS 0x00000001 struct { - struct xenpf_efi_time { - uint16_t year; - uint8_t month; - uint8_t day; - uint8_t hour; - uint8_t min; - uint8_t sec; - uint32_t ns; - int16_t tz; - uint8_t daylight; - } time; + struct xenpf_efi_time time; uint32_t resolution; uint32_t accuracy; } get_time; @@ -170,12 +180,7 @@ struct xenpf_efi_runtime_call { XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ xen_ulong_t size; XEN_GUEST_HANDLE(void) data; - struct xenpf_efi_guid { - uint32_t data1; - uint16_t data2; - uint16_t data3; - uint8_t data4[8]; - } vendor_guid; + struct xenpf_efi_guid vendor_guid; } get_variable, set_variable; struct { diff --git a/xen/include/public/xsm/flask_op.h b/xen/include/public/xsm/flask_op.h index 233de81..f874589 100644 --- a/xen/include/public/xsm/flask_op.h +++ b/xen/include/public/xsm/flask_op.h @@ -25,6 +25,8 @@ #ifndef __FLASK_OP_H__ #define __FLASK_OP_H__ +#include "../event_channel.h" + #define XEN_FLASK_INTERFACE_VERSION 1 struct xen_flask_load { -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |