* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-05 15:54 David Howells
2018-09-05 15:55 ` [PATCH 07/11] UAPI: nilfs2: Fix use of undefined byteswapping functions David Howells
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
0 siblings, 2 replies; 9+ messages in thread
From: David Howells @ 2018-09-05 15:54 UTC (permalink / raw)
To: linux-api-u79uwXL29TY76Z2rM5mHXA,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA
Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
dhowells-H+wXaHxf7aLQT0dZR+AlfA, Masahiro Yamada,
keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
Michal Marek, Takashi Iwai, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
Rob Clark <robdclar>
Here's a set of patches that inserts a step into the build process to make
sure that the UAPI headers can all be built together with C++ (if the
compiler being used supports C++). All but the final patch perform fixups,
including:
(1) Fix member names that conflict with C++ reserved words by providing
alternates that can be used anywhere. An anonymous union is used so
that that the conflicting name is still available outside of C++.
(2) Fix the use of flexible arrays in structs that get embedded (which is
illegal in C++).
(3) Remove the use of internal kernel structs in UAPI structures.
(4) Fix symbol collisions.
(5) Replace usage of u32 and co. with __u32 and co.
(6) Fix use of sparsely initialised arrays (which g++ doesn't implement).
(7) Remove some use of PAGE_SIZE since this isn't valid outside of the
kernel.
And lastly:
(8) Compile all of the UAPI headers (with a few exceptions) together as
C++ to catch new errors occurring as part of the regular build
process.
The patches can also be found here:
http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=uapi-check
Thanks,
David
---
David Howells (11):
UAPI: drm: Fix use of C++ keywords as structural members
UAPI: keys: Fix use of C++ keywords as structural members
UAPI: virtio_net: Fix use of C++ keywords as structural members
UAPI: bcache: Fix use of embedded flexible array
UAPI: coda: Don't use internal kernel structs in UAPI
UAPI: netfilter: Fix symbol collision issues
UAPI: nilfs2: Fix use of undefined byteswapping functions
UAPI: sound: Fix use of u32 and co. in UAPI headers
UAPI: ndctl: Fix g++-unsupported initialisation in headers
UAPI: ndctl: Remove use of PAGE_SIZE
UAPI: Check headers build for C++
Makefile | 1
include/linux/ndctl.h | 22 ++++
include/uapi/drm/i810_drm.h | 7 +
include/uapi/drm/msm_drm.h | 7 +
include/uapi/linux/bcache.h | 2
include/uapi/linux/coda_psdev.h | 4 +
include/uapi/linux/keyctl.h | 7 +
include/uapi/linux/ndctl.h | 20 ++-
include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2
include/uapi/linux/netfilter_ipv4/ipt_ECN.h | 9 --
include/uapi/linux/nilfs2_ondisk.h | 21 ++--
include/uapi/linux/virtio_net.h | 7 +
include/uapi/sound/skl-tplg-interface.h | 106 +++++++++---------
scripts/headers-c++.sh | 124 +++++++++++++++++++++
14 files changed, 255 insertions(+), 84 deletions(-)
create mode 100644 include/linux/ndctl.h
create mode 100755 scripts/headers-c++.sh
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 07/11] UAPI: nilfs2: Fix use of undefined byteswapping functions
2018-09-05 15:54 [RFC] UAPI: Check headers by compiling all together as C++ David Howells
@ 2018-09-05 15:55 ` David Howells
2018-09-05 22:20 ` Al Viro
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
1 sibling, 1 reply; 9+ messages in thread
From: David Howells @ 2018-09-05 15:55 UTC (permalink / raw)
To: linux-api, linux-kbuild
Cc: Ryusuke Konishi, linux-nilfs, linux-fsdevel, linux-kernel,
dhowells
nilfs2 exports a load of inline functions to userspace that call kernel
byteswapping functions that don't exist in UAPI. Fix this by making it
#include asm/byteorder.h and use the functions declared there.
A better way is probably to remove these inline functions from the nilfs2
header since they are technically broken.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
cc: linux-nilfs@vger.kernel.org
cc: linux-fsdevel@vger.kernel.org
---
include/uapi/linux/nilfs2_ondisk.h | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/include/uapi/linux/nilfs2_ondisk.h b/include/uapi/linux/nilfs2_ondisk.h
index a7e66ab11d1d..d3bd2fe08791 100644
--- a/include/uapi/linux/nilfs2_ondisk.h
+++ b/include/uapi/linux/nilfs2_ondisk.h
@@ -29,6 +29,7 @@
#include <linux/types.h>
#include <linux/magic.h>
+#include <asm/byteorder.h>
#define NILFS_INODE_BMAP_SIZE 7
@@ -533,19 +534,19 @@ enum {
static inline void \
nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
{ \
- cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
+ cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) | \
(1UL << NILFS_CHECKPOINT_##flag)); \
} \
static inline void \
nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
{ \
- cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
+ cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) & \
~(1UL << NILFS_CHECKPOINT_##flag)); \
} \
static inline int \
nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
{ \
- return !!(le32_to_cpu(cp->cp_flags) & \
+ return !!(__le32_to_cpu(cp->cp_flags) & \
(1UL << NILFS_CHECKPOINT_##flag)); \
}
@@ -595,20 +596,20 @@ enum {
static inline void \
nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
{ \
- su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
+ su->su_flags = __cpu_to_le32(__le32_to_cpu(su->su_flags) | \
(1UL << NILFS_SEGMENT_USAGE_##flag));\
} \
static inline void \
nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
{ \
su->su_flags = \
- cpu_to_le32(le32_to_cpu(su->su_flags) & \
+ __cpu_to_le32(__le32_to_cpu(su->su_flags) & \
~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
} \
static inline int \
nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
{ \
- return !!(le32_to_cpu(su->su_flags) & \
+ return !!(__le32_to_cpu(su->su_flags) & \
(1UL << NILFS_SEGMENT_USAGE_##flag)); \
}
@@ -619,15 +620,15 @@ NILFS_SEGMENT_USAGE_FNS(ERROR, error)
static inline void
nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
{
- su->su_lastmod = cpu_to_le64(0);
- su->su_nblocks = cpu_to_le32(0);
- su->su_flags = cpu_to_le32(0);
+ su->su_lastmod = __cpu_to_le64(0);
+ su->su_nblocks = __cpu_to_le32(0);
+ su->su_flags = __cpu_to_le32(0);
}
static inline int
nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
{
- return !le32_to_cpu(su->su_flags);
+ return !__le32_to_cpu(su->su_flags);
}
/**
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC] UAPI: Check headers by compiling all together as C++
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
@ 2018-09-05 16:55 ` Greg KH
[not found] ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 9+ messages in thread
From: Greg KH @ 2018-09-05 16:55 UTC (permalink / raw)
To: David Howells
Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai
On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
>
> Here's a set of patches that inserts a step into the build process to make
> sure that the UAPI headers can all be built together with C++ (if the
> compiler being used supports C++). All but the final patch perform fixups,
> including:
Wait, why do we care? What has recently changed to start to directly
import kernel uapi files into C++ code?
And if userspace wants to do this, can't they do the C namespace trick
themselves when they do the import? That must be how they are doing it
today, right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] UAPI: Check headers by compiling all together as C++
[not found] ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
@ 2018-09-05 17:33 ` Yann Droneaud
2018-09-05 17:42 ` Michael S. Tsirkin
[not found] ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
2018-09-05 19:22 ` Jan Engelhardt
1 sibling, 2 replies; 9+ messages in thread
From: Yann Droneaud @ 2018-09-05 17:33 UTC (permalink / raw)
To: Greg KH, David Howells
Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai
Hi,
Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> >
> > Here's a set of patches that inserts a step into the build process to make
> > sure that the UAPI headers can all be built together with C++ (if the
> > compiler being used supports C++). All but the final patch perform fixups,
> > including:
>
> Wait, why do we care? What has recently changed to start to directly
> import kernel uapi files into C++ code?
>
> And if userspace wants to do this, can't they do the C namespace trick
> themselves when they do the import? That must be how they are doing it
> today, right?
>
They can't.
Adding extern "C" { } doesn't magically make "class" a non keyword.
Even if it was the case, writing C++ code using whatever->class would
probably broke because class is a keyword in C++.
--
Yann Droneaud
OPTEYA
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] UAPI: Check headers by compiling all together as C++
2018-09-05 17:33 ` Yann Droneaud
@ 2018-09-05 17:42 ` Michael S. Tsirkin
[not found] ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
1 sibling, 0 replies; 9+ messages in thread
From: Michael S. Tsirkin @ 2018-09-05 17:42 UTC (permalink / raw)
To: Yann Droneaud
Cc: moderated for non-subscribers, David Airlie, Greg KH, Jason Wang,
Mat Martineau, dri-devel, virtualization, David Howells,
Masahiro Yamada, keyrings, Ryusuke Konishi, linux-nilfs,
linux-nvdimm, codalist, coda, coreteam, Kent Overstreet,
linux-kbuild, linux-arm-msm, Coly Li, linux-bcache, Dan Williams,
Jaroslav Kysela, Jan Harkes, Michal Marek, linux
On Wed, Sep 05, 2018 at 07:33:38PM +0200, Yann Droneaud wrote:
> Hi,
>
> Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> > On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> > >
> > > Here's a set of patches that inserts a step into the build process to make
> > > sure that the UAPI headers can all be built together with C++ (if the
> > > compiler being used supports C++). All but the final patch perform fixups,
> > > including:
> >
> > Wait, why do we care? What has recently changed to start to directly
> > import kernel uapi files into C++ code?
> >
> > And if userspace wants to do this, can't they do the C namespace trick
> > themselves when they do the import? That must be how they are doing it
> > today, right?
> >
>
> They can't.
>
>
> Adding extern "C" { } doesn't magically make "class" a non keyword.
> Even if it was the case, writing C++ code using whatever->class would
> probably broke because class is a keyword in C++.
I think it's a bug in the language TBH.
> --
> Yann Droneaud
> OPTEYA
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] UAPI: Check headers by compiling all together as C++
[not found] ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2018-09-05 17:33 ` Yann Droneaud
@ 2018-09-05 19:22 ` Jan Engelhardt
1 sibling, 0 replies; 9+ messages in thread
From: Jan Engelhardt @ 2018-09-05 19:22 UTC (permalink / raw)
To: Greg KH
Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
David Howells, Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA,
Ryusuke Konishi, linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takash
On Wednesday 2018-09-05 18:55, Greg KH wrote:
>On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
>>
>> Here's a set of patches that inserts a step into the build process to make
>> sure that the UAPI headers can all be built together with C++ (if the
>> compiler being used supports C++). All but the final patch perform fixups,
>> including:
>
>Wait, why do we care? What has recently changed to start to directly
>import kernel uapi files into C++ code?
With C++11, C++ has become a much nicer language to use (for userspace, anyway).
>And if userspace wants to do this, can't they do the C namespace trick
>themselves when they do the import?
The only trick is to use an extra C source file and extensively wrap things.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 07/11] UAPI: nilfs2: Fix use of undefined byteswapping functions
2018-09-05 15:55 ` [PATCH 07/11] UAPI: nilfs2: Fix use of undefined byteswapping functions David Howells
@ 2018-09-05 22:20 ` Al Viro
0 siblings, 0 replies; 9+ messages in thread
From: Al Viro @ 2018-09-05 22:20 UTC (permalink / raw)
To: David Howells
Cc: linux-api, linux-kbuild, Ryusuke Konishi, linux-nilfs,
linux-fsdevel, linux-kernel
On Wed, Sep 05, 2018 at 04:55:23PM +0100, David Howells wrote:
> nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
> { \
> - cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
> + cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) | \
> (1UL << NILFS_CHECKPOINT_##flag)); \
How about sanitiziung the damn thing to
cp->cp_flags |= __cpu_to_le32(1UL << NILFS_CHECKPOINT_##flag));
while you are at it? Or, perhaps, even
#define NILFS2_CP_FLAG(flag) __cpu_to_le32(1UL << NILFS_CHECKPOINT_##flag)
and cp->cp_flags |= NILFS2_CP_FLAG(flag) for this one,
> } \
> static inline void \
> nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
> { \
> - cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
> + cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) & \
> ~(1UL << NILFS_CHECKPOINT_##flag)); \
cp->cp_flags &= ~NILFS2_CP_FLAG(flag);
here
> } \
> static inline int \
> nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
> { \
> - return !!(le32_to_cpu(cp->cp_flags) & \
> + return !!(__le32_to_cpu(cp->cp_flags) & \
> (1UL << NILFS_CHECKPOINT_##flag)); \
and !!(cp->cp_flags & NILFS2_CP_FLAG(flag)
here? Or maybe even make the damn thing bool and lose the !! here...
)> }
>
and similar for those:
> @@ -595,20 +596,20 @@ enum {
> static inline void \
> nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
> { \
> - su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
> + su->su_flags = __cpu_to_le32(__le32_to_cpu(su->su_flags) | \
> (1UL << NILFS_SEGMENT_USAGE_##flag));\
> } \
> static inline void \
> nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
> { \
> su->su_flags = \
> - cpu_to_le32(le32_to_cpu(su->su_flags) & \
> + __cpu_to_le32(__le32_to_cpu(su->su_flags) & \
> ~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
> } \
> static inline int \
> nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
> { \
> - return !!(le32_to_cpu(su->su_flags) & \
> + return !!(__le32_to_cpu(su->su_flags) & \
> (1UL << NILFS_SEGMENT_USAGE_##flag)); \
> }
> @@ -619,15 +620,15 @@ NILFS_SEGMENT_USAGE_FNS(ERROR, error)
> static inline void
> nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
> {
> - su->su_lastmod = cpu_to_le64(0);
> - su->su_nblocks = cpu_to_le32(0);
> - su->su_flags = cpu_to_le32(0);
> + su->su_lastmod = __cpu_to_le64(0);
> + su->su_nblocks = __cpu_to_le32(0);
> + su->su_flags = __cpu_to_le32(0);
> }
>
> static inline int
> nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
> {
> - return !le32_to_cpu(su->su_flags);
> + return !__le32_to_cpu(su->su_flags);
"Check that after byteswap it becomes 0", is it? How is that different
from return !su->su_flags; ?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] UAPI: Check headers by compiling all together as C++
[not found] ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
@ 2018-09-06 7:12 ` Yann Droneaud
0 siblings, 0 replies; 9+ messages in thread
From: Yann Droneaud @ 2018-09-06 7:12 UTC (permalink / raw)
To: Greg KH, David Howells
Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai
Le mercredi 05 septembre 2018 à 19:33 +0200, Yann Droneaud a écrit :
> Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> > On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> > >
> > > Here's a set of patches that inserts a step into the build
> > > process to make
> > > sure that the UAPI headers can all be built together with C++ (if
> > > the
> > > compiler being used supports C++). All but the final patch
> > > perform fixups,
> > > including:
> >
> > Wait, why do we care? What has recently changed to start to
> > directly
> > import kernel uapi files into C++ code?
> >
> > And if userspace wants to do this, can't they do the C namespace
> > trick
> > themselves when they do the import? That must be how they are
> > doing it
> > today, right?
> >
>
> They can't.
>
>
> Adding extern "C" { } doesn't magically make "class" a non keyword.
> Even if it was the case, writing C++ code using whatever->class would
> probably broke because class is a keyword in C++.
>
For the record, libX11 has to handle the kink pf issue with C++
keyword:
https://gitlab.freedesktop.org/xorg/lib/libx11/blob/733f64bfeb311c1d040b2f751bfdef9c9d0f89ef/include/X11/Xlib.h#L227
typedef struct {
XExtData *ext_data; /* hook for extension to hang data */
VisualID visualid; /* visual id of this visual */
#if defined(__cplusplus) || defined(c_plusplus)
int c_class; /* C++ class of screen (monochrome, etc.) */
#else
int class; /* class of screen (monochrome, etc.) */
#endif
unsigned long red_mask, green_mask, blue_mask; /* mask values */
int bits_per_rgb; /* log base 2 of distinct color values */
int map_entries; /* color map entries */
} Visual;
Regards.
--
Yann Droneaud
OPTEYA
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-06 9:18 David Howells
0 siblings, 0 replies; 9+ messages in thread
From: David Howells @ 2018-09-06 9:18 UTC (permalink / raw)
To: linux-api-u79uwXL29TY76Z2rM5mHXA,
linux-kbuild-u79uwXL29TY76Z2rM5mHXA
Cc: Michael S. Tsirkin, David Airlie, Jason Wang, Mat Martineau,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
dhowells-H+wXaHxf7aLQT0dZR+AlfA, Masahiro Yamada,
keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi, Yann Droneaud,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
linux-bcache-u79uwXL29TY76Z2rM5mHXA, Dan Williams, Jan Harkes,
Michal Marek, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rob Clark,
netfilter-devel-u79uwXL29TY76Z2rM5mHXA
Here's a set of patches that inserts a step into the build process to make
sure that the UAPI headers can all be built together with C++ (if the
compiler being used supports C++).
Note that it's based on a commit from the sound tree to fix usage of u32
and co..
Most of the patches perform fixups, including:
(1) Fix member names that conflict with C++ reserved words by providing
alternates that can be used anywhere. An anonymous union is used so
that that the conflicting name is still available outside of C++.
(2) Fix the use of flexible arrays in structs that get embedded (which is
illegal in C++).
(3) Remove the use of internal kernel structs in UAPI structures.
(4) Fix symbol collisions.
(5) Fix use of sparsely initialised arrays (which g++ doesn't implement).
(6) Remove some use of PAGE_SIZE since this isn't valid outside of the
kernel.
There's also:
(7) Move the coda_psdev.h header file to fs/coda/.
And lastly:
(8) Compile all of the UAPI headers (with a few exceptions) together as
C++ to catch new errors occurring as part of the regular build
process.
Changes for v2:
- Merge commit from sound tree to fix u32 usage issues
- Use a switch to fix sparse array initialisation
- Simplify nilfs2 by performing bitwise ops in LE space not CPU space
- Handle conflicting fix to use of 'private' in keyctl.h
- Move kernel internal coda bits to coda internal headers
- Move coda_psdev.h header to fs/coda/.
The patches can also be found here:
http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=uapi-check
Thanks,
David
---
David Howells (11):
UAPI: drm: Fix use of C++ keywords as structural members
UAPI: keys: Fix use of C++ keywords as structural members
UAPI: virtio_net: Fix use of C++ keywords as structural members
UAPI: bcache: Fix use of embedded flexible array
UAPI: coda: Move kernel internals out of public view
coda: Move internal defs out of include/linux/
UAPI: netfilter: Fix symbol collision issues
UAPI: nilfs2: Fix use of undefined byteswapping functions
UAPI: ndctl: Fix g++-unsupported initialisation in headers
UAPI: ndctl: Remove use of PAGE_SIZE
UAPI: Check headers build for C++
Makefile | 1
fs/coda/cache.c | 2
fs/coda/cnode.c | 2
fs/coda/coda_linux.c | 2
fs/coda/coda_psdev.h | 88 +++++++++++++++
fs/coda/dir.c | 2
fs/coda/file.c | 3 -
fs/coda/inode.c | 2
fs/coda/pioctl.c | 3 -
fs/coda/psdev.c | 3 -
fs/coda/symlink.c | 3 -
fs/coda/upcall.c | 2
include/linux/coda_psdev.h | 72 ------------
include/linux/ndctl.h | 22 ++++
include/uapi/drm/i810_drm.h | 7 +
include/uapi/drm/msm_drm.h | 7 +
include/uapi/linux/bcache.h | 2
include/uapi/linux/coda_psdev.h | 18 ---
include/uapi/linux/keyctl.h | 7 +
include/uapi/linux/ndctl.h | 52 ++++-----
include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2
include/uapi/linux/netfilter_ipv4/ipt_ECN.h | 9 --
include/uapi/linux/nilfs2_ondisk.h | 28 ++---
include/uapi/linux/virtio_net.h | 7 +
scripts/headers-c++.sh | 124 +++++++++++++++++++++
25 files changed, 304 insertions(+), 166 deletions(-)
create mode 100644 fs/coda/coda_psdev.h
delete mode 100644 include/linux/coda_psdev.h
create mode 100644 include/linux/ndctl.h
create mode 100755 scripts/headers-c++.sh
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-09-06 9:18 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-05 15:54 [RFC] UAPI: Check headers by compiling all together as C++ David Howells
2018-09-05 15:55 ` [PATCH 07/11] UAPI: nilfs2: Fix use of undefined byteswapping functions David Howells
2018-09-05 22:20 ` Al Viro
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2018-09-05 16:55 ` [RFC] UAPI: Check headers by compiling all together as C++ Greg KH
[not found] ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2018-09-05 17:33 ` Yann Droneaud
2018-09-05 17:42 ` Michael S. Tsirkin
[not found] ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
2018-09-06 7:12 ` Yann Droneaud
2018-09-05 19:22 ` Jan Engelhardt
-- strict thread matches above, loose matches on Subject: below --
2018-09-06 9:18 David Howells
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox