* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-05 15:54 David Howells
2018-09-05 15:55 ` [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
0 siblings, 2 replies; 11+ 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] 11+ messages in thread* [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
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-10-02 14:52 ` Jan Engelhardt
[not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
1 sibling, 1 reply; 11+ messages in thread
From: David Howells @ 2018-09-05 15:55 UTC (permalink / raw)
To: linux-api, linux-kbuild
Cc: Coly Li, Kent Overstreet, linux-bcache, linux-kernel, dhowells
The bkey struct defined by bcache is embedded in the jset struct. However,
this is illegal in C++ as there's a "flexible array" at the end of the
struct. Change this to be a 0-length struct instead.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Coly Li <colyli@suse.de>
cc: Kent Overstreet <kent.overstreet@gmail.com>
cc: linux-bcache@vger.kernel.org
---
include/uapi/linux/bcache.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h
index 5d4f58e059fd..11863e903bff 100644
--- a/include/uapi/linux/bcache.h
+++ b/include/uapi/linux/bcache.h
@@ -23,7 +23,7 @@ static inline void SET_##name(type *k, __u64 v) \
struct bkey {
__u64 high;
__u64 low;
- __u64 ptr[];
+ __u64 ptr[0];
};
#define KEY_FIELD(name, field, offset, size) \
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
2018-09-05 15:55 ` [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
@ 2018-10-02 14:52 ` Jan Engelhardt
2018-10-09 15:41 ` David Howells
0 siblings, 1 reply; 11+ messages in thread
From: Jan Engelhardt @ 2018-10-02 14:52 UTC (permalink / raw)
To: David Howells
Cc: linux-api, linux-kbuild, Coly Li, Kent Overstreet, linux-bcache,
linux-kernel
On Wed, 05 Sep 2018 16:55:03 +0100, David Howells wrote:
>
>The bkey struct defined by bcache is embedded in the jset struct. However,
>this is illegal in C++ as there's a "flexible array" at the end of the struct.
>Change this to be a 0-length struct instead.
>
>- __u64 ptr[];
>+ __u64 ptr[0];
As per the C++ standard, it is _also_ illegal to declare an array of size zero.
"""it [the array size expression] shall be a converted constant expression of
type std::size_t and its value shall be greater than zero."""
—http://eel.is/c++draft/dcl.array
That makes both "__u64 ptr[]" and "__u64 ptr[0]" *implementation-specific
extensions*.
3rd party tooling (concerns both C and C++):
Coverity Scan (IIRC) treats "__u64 ptr[0]" as an array of "definitely-zero"
size. Writing to any element will outright flag an out-of-bounds violation.
That is sensible, since only "ptr[]" was standardized.
Conclusion:
So please, do never use __u64 ptr[0].
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
2018-10-02 14:52 ` Jan Engelhardt
@ 2018-10-09 15:41 ` David Howells
2018-10-09 16:54 ` Jan Engelhardt
0 siblings, 1 reply; 11+ messages in thread
From: David Howells @ 2018-10-09 15:41 UTC (permalink / raw)
To: Jan Engelhardt
Cc: dhowells, linux-api, linux-kbuild, Coly Li, Kent Overstreet,
linux-bcache, linux-kernel
Jan Engelhardt <jengelh@inai.de> wrote:
> """it [the array size expression] shall be a converted constant expression of
> type std::size_t and its value shall be greater than zero."""
> —http://eel.is/c++draft/dcl.array
Interesting. You're not actually quoting the full sentence:
If the constant-expression is present, it shall be a converted
constant expression of type std::size_t and its value shall be
greater than zero.
This suggests that:
__u64 ptr[]
is actually valid since:
D1 [ constant-expressionopt ] attribute-specifier-seqopt
suggests that the part between the brackets is optional.
David
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
2018-10-09 15:41 ` David Howells
@ 2018-10-09 16:54 ` Jan Engelhardt
0 siblings, 0 replies; 11+ messages in thread
From: Jan Engelhardt @ 2018-10-09 16:54 UTC (permalink / raw)
To: David Howells
Cc: linux-api, linux-kbuild, Coly Li, Kent Overstreet, linux-bcache,
linux-kernel
On Tuesday 2018-10-09 17:41, David Howells wrote:
>Jan Engelhardt <jengelh@inai.de> wrote:
>
>> """it [the array size expression] shall be a converted constant expression of
>> type std::size_t and its value shall be greater than zero."""
>> —http://eel.is/c++draft/dcl.array
>
>Interesting. You're not actually quoting the full sentence:
>
> If the constant-expression is present, it shall be a converted
> constant expression of type std::size_t and its value shall be
> greater than zero.
>
>This suggests that:
>
> __u64 ptr[]
>
>is actually valid
I think that kind of validity only goes for this kind of standalone
decl:
extern int myints[];
but not for []-inside-struct.
^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>]
* 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; 11+ 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,
linux-kernel@
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] 11+ messages in thread
* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-06 9:18 David Howells
0 siblings, 0 replies; 11+ 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] 11+ messages in thread
end of thread, other threads:[~2018-10-09 16:54 UTC | newest]
Thread overview: 11+ 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 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
2018-10-02 14:52 ` Jan Engelhardt
2018-10-09 15:41 ` David Howells
2018-10-09 16:54 ` Jan Engelhardt
[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