Recent glibc added memfd_create in sys/mman.h. This conflicts with
the definition in util/memfd.c:
/builddir/build/BUILD/qemu-2.11.0-rc1/util/memfd.c:40:12: error: static declaration of memfd_create follows non-static declaration
Fix the configure test, and remove the sys/memfd.h inclusion since the
file actually does not exist---it is a typo in the memfd_create(2) man
page.
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 2 +-
util/memfd.c | 4 +---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index e31d6a7fee..11eac205ec 100755
--- a/configure
+++ b/configure
@@ -3910,7 +3910,7 @@ fi
# check if memfd is supported
memfd=no
cat > $TMPC << EOF
-#include <sys/memfd.h>
+#include <sys/mman.h>
int main(void)
{
diff --git a/util/memfd.c b/util/memfd.c
index 4571d1aba8..412e94a405 100644
--- a/util/memfd.c
+++ b/util/memfd.c
@@ -31,9 +31,7 @@
#include "qemu/memfd.h"
-#ifdef CONFIG_MEMFD
-#include <sys/memfd.h>
-#elif defined CONFIG_LINUX
+#if defined CONFIG_LINUX && !defined CONFIG_MEMFD
#include <sys/syscall.h>
#include <asm/unistd.h>
--
2.14.3
Hi On Tue, Nov 28, 2017 at 12:32 PM, Paolo Bonzini <pbonzini@redhat.com> wrote: > Recent glibc added memfd_create in sys/mman.h. This conflicts with > the definition in util/memfd.c: > > /builddir/build/BUILD/qemu-2.11.0-rc1/util/memfd.c:40:12: error: static declaration of memfd_create follows non-static declaration > > Fix the configure test, and remove the sys/memfd.h inclusion since the > file actually does not exist---it is a typo in the memfd_create(2) man > page. > It is introduced by this commit, right? https://sourceware.org/git/?p=glibc.git;a=commit;h=59d2cbb1fe4b8601d5cbd359c3806973eab6c62d (I added Florian Weimer in cc) So it's not part of glibc release yet. Couldn't the declarations be put in sys/memfd.h like the man claimed it would be for > 1y? > Cc: Marc-André Lureau <marcandre.lureau@redhat.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > configure | 2 +- > util/memfd.c | 4 +--- > 2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/configure b/configure > index e31d6a7fee..11eac205ec 100755 > --- a/configure > +++ b/configure > @@ -3910,7 +3910,7 @@ fi > # check if memfd is supported > memfd=no > cat > $TMPC << EOF > -#include <sys/memfd.h> > +#include <sys/mman.h> > > int main(void) > { > diff --git a/util/memfd.c b/util/memfd.c > index 4571d1aba8..412e94a405 100644 > --- a/util/memfd.c > +++ b/util/memfd.c > @@ -31,9 +31,7 @@ > > #include "qemu/memfd.h" > > -#ifdef CONFIG_MEMFD > -#include <sys/memfd.h> > -#elif defined CONFIG_LINUX > +#if defined CONFIG_LINUX && !defined CONFIG_MEMFD > #include <sys/syscall.h> > #include <asm/unistd.h> > -- > 2.14.3 > > -- Marc-André Lureau
On 28/11/2017 12:42, Marc-André Lureau wrote: > Hi > > On Tue, Nov 28, 2017 at 12:32 PM, Paolo Bonzini <pbonzini@redhat.com> wrote: >> Recent glibc added memfd_create in sys/mman.h. This conflicts with >> the definition in util/memfd.c: >> >> /builddir/build/BUILD/qemu-2.11.0-rc1/util/memfd.c:40:12: error: static declaration of memfd_create follows non-static declaration >> >> Fix the configure test, and remove the sys/memfd.h inclusion since the >> file actually does not exist---it is a typo in the memfd_create(2) man >> page. >> > > It is introduced by this commit, right? > https://sourceware.org/git/?p=glibc.git;a=commit;h=59d2cbb1fe4b8601d5cbd359c3806973eab6c62d > > (I added Florian Weimer in cc) > > So it's not part of glibc release yet. > > Couldn't the declarations be put in sys/memfd.h like the man claimed > it would be for > 1y? Yeah, that would have been better---certainly other software than QEMU is likely to have a static memfd_create declaration, and polluting sys/mman.h is going to trigger the same error. However, at least systemd seems to have changed the test to sys/mman.h (https://github.com/systemd/systemd/pull/7468), so I think we should follow their lead now Thanks, Paolo > >> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> configure | 2 +- >> util/memfd.c | 4 +--- >> 2 files changed, 2 insertions(+), 4 deletions(-) >> >> diff --git a/configure b/configure >> index e31d6a7fee..11eac205ec 100755 >> --- a/configure >> +++ b/configure >> @@ -3910,7 +3910,7 @@ fi >> # check if memfd is supported >> memfd=no >> cat > $TMPC << EOF >> -#include <sys/memfd.h> >> +#include <sys/mman.h> >> >> int main(void) >> { >> diff --git a/util/memfd.c b/util/memfd.c >> index 4571d1aba8..412e94a405 100644 >> --- a/util/memfd.c >> +++ b/util/memfd.c >> @@ -31,9 +31,7 @@ >> >> #include "qemu/memfd.h" >> >> -#ifdef CONFIG_MEMFD >> -#include <sys/memfd.h> >> -#elif defined CONFIG_LINUX >> +#if defined CONFIG_LINUX && !defined CONFIG_MEMFD >> #include <sys/syscall.h> >> #include <asm/unistd.h> >> -- >> 2.14.3 >> >> > > >
On 28 November 2017 at 11:49, Paolo Bonzini <pbonzini@redhat.com> wrote: > On 28/11/2017 12:42, Marc-André Lureau wrote: >> It is introduced by this commit, right? >> https://sourceware.org/git/?p=glibc.git;a=commit;h=59d2cbb1fe4b8601d5cbd359c3806973eab6c62d >> >> (I added Florian Weimer in cc) >> >> So it's not part of glibc release yet. >> >> Couldn't the declarations be put in sys/memfd.h like the man claimed >> it would be for > 1y? > > Yeah, that would have been better---certainly other software than QEMU > is likely to have a static memfd_create declaration, and polluting > sys/mman.h is going to trigger the same error. However, at least > systemd seems to have changed the test to sys/mman.h > (https://github.com/systemd/systemd/pull/7468), so I think we should > follow their lead now I don't see why systemd should control anything. If the documentation has been around for ages and there hasn't been a released glibc with the incorrect placement then the implementation in glibc should follow the documentation. thanks -- PMM
On 11/28/2017 12:42 PM, Marc-André Lureau wrote: > Couldn't the declarations be put in sys/memfd.h like the man claimed > it would be for > 1y? We discussed it. It was a typo in the manual page. There never was a <sys/memfd.h> header file: https://marc.info/?l=linux-man&m=150988359906012&w=2 The UAPI header is called <linux/memfd.h>. The downside of using a separate header is that you cannot determine, using the preprocessor alone, whether the toolchain provides the memfd_create function. If we put everything in <sys/mman.h>, you can use “#ifdef MFD_CLOEXEC” to see if the definitions and declarations are there. Thanks, Florian
© 2016 - 2024 Red Hat, Inc.