All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] RFC: Make xen's public headers a little friendlier for C++.
@ 2015-02-26 13:11 Tim Deegan
  2015-02-26 14:09 ` Jan Beulich
                   ` (2 more replies)
  0 siblings, 3 replies; 31+ messages in thread
From: Tim Deegan @ 2015-02-26 13:11 UTC (permalink / raw)
  To: xen-devel; +Cc: Jan Beulich

Shuffle some struct definitions up to file scope so that they remain
in scope in C++ when they're used again later.

Add an automatic check for similar C++ pitfalls, to be run only when
g++ is available.

RFC because it's not clear whether we want to make any commitments to
have the public headers be C++-friendly.

Explicitly _not_ addressing the use of 'private' in various fields,
since we'd previously decided not to fix that.

Reported-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Signed-off-by: Tim Deegan <tim@xen.org>
Cc: Jan Beulich <JBeulich@suse.com>
---
 .gitignore                    |  1 +
 xen/include/Makefile          | 12 +++++++++---
 xen/include/public/platform.h | 39 ++++++++++++++++++++++-----------------
 3 files changed, 32 insertions(+), 20 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/xen/include/Makefile b/xen/include/Makefile
index 94112d1..c361877 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -87,13 +87,19 @@ 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
+PUBLIC_HEADERS_TO_CHECK := $(filter-out public/arch-% public/%ctl.h public/xsm/% public/%hvm/save.h, $(wildcard public/*.h public/*/*.h) $(public-y))
+
+headers.chk: $(PUBLIC_HEADERS_TO_CHECK) 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
 	mv $@.new $@
 
+headers++.chk: $(PUBLIC_HEADERS_TO_CHECK) Makefile
+	if g++ -v >/dev/null; then for i in $(filter %.h,$^); do g++ -ansi -include stdint.h -Wall -W -Werror -S -o /dev/null -x c++ -Dprivate=private_is_a_keyword_in_c_plus_plus $$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 {
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2015-03-12 11:16 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-26 13:11 [PATCH] RFC: Make xen's public headers a little friendlier for C++ Tim Deegan
2015-02-26 14:09 ` Jan Beulich
2015-02-26 15:22   ` Tim Deegan
2015-02-26 15:39     ` Jan Beulich
2015-02-26 16:11 ` [PATCH v2] RFC: Automatically check xen's public headers for C++ pitfalls Tim Deegan
2015-02-26 16:28   ` Tim Deegan
2015-02-26 16:43     ` Andrew Cooper
2015-02-26 16:47     ` Jan Beulich
2015-02-26 17:01       ` Tim Deegan
2015-02-26 17:49         ` Razvan Cojocaru
2015-02-26 19:22           ` Tim Deegan
2015-02-26 20:31             ` Don Slutz
2015-02-27  8:00         ` Jan Beulich
2015-02-26 16:49     ` David Vrabel
2015-03-05 11:25     ` Tim Deegan
2015-03-05 11:35       ` Ian Campbell
2015-03-05 11:41         ` Jan Beulich
2015-03-05 11:55           ` Ian Campbell
2015-03-05 12:13             ` Wei Liu
2015-03-05 12:34               ` Ian Campbell
2015-03-05 12:16             ` Tim Deegan
2015-03-12 10:03               ` Tim Deegan
2015-03-12 10:14                 ` Ian Campbell
2015-03-12 11:16                   ` Tim Deegan
2015-03-12 10:57                 ` Jan Beulich
2015-02-26 16:24 ` [PATCH v3] " Tim Deegan
2015-02-26 20:28   ` Don Slutz
2015-02-27 10:05     ` Tim Deegan
2015-02-27  8:36   ` Jan Beulich
2015-02-27  9:22     ` Tim Deegan
2015-02-27  9:34       ` Jan Beulich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.