1 From 185b3c0cdd564901133e530ddd30853f65151622 Mon Sep 17 00:00:00 2001
2 From: Khem Raj <raj.khem@gmail.com>
3 Date: Sat, 27 Jan 2018 13:14:03 -0800
4 Subject: [PATCH] build-sys: Check if memfd_create is already defined
6 glibc 2.27+ has introduced this function
8 BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104815
9 Signed-off-by: Khem Raj <raj.khem@gmail.com>
11 Upstream-Status: Submitted
13 configure.ac | 7 +++++++
14 src/pulsecore/memfd-wrappers.h | 4 ++--
15 2 files changed, 9 insertions(+), 2 deletions(-)
17 diff --git a/configure.ac b/configure.ac
18 index 77b5ff5..aa97944 100644
21 @@ -603,6 +603,10 @@ AS_IF([test "x$enable_memfd" != "xno"],
22 AC_CHECK_DECL(SYS_memfd_create, [HAVE_MEMFD=1], [HAVE_MEMFD=0], [#include <sys/syscall.h>]),
25 +AS_IF([test "x$enable_memfd" != "xno"],
26 + AC_CHECK_FUNC(memfd_create, [HAVE_MEMFD_CREATE=1], [HAVE_MEMFD_CREATE=0], [#include <sys/mman.h>]),
27 + [HAVE_MEMFD_CREATE=0])
29 AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"],
30 [AC_MSG_ERROR([*** Your Linux kernel does not support memfd shared memory.
31 *** Use linux v3.17 or higher for such a feature.])])
32 @@ -610,6 +614,9 @@ AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"],
34 AM_CONDITIONAL([HAVE_MEMFD], [test "x$HAVE_MEMFD" = x1])
35 AS_IF([test "x$HAVE_MEMFD" = "x1"], AC_DEFINE([HAVE_MEMFD], 1, [Have memfd shared memory.]))
36 +AC_SUBST(HAVE_MEMFD_CREATE)
37 +AM_CONDITIONAL([HAVE_MEMFD_CREATE], [test "x$HAVE_MEMFD_CREATE" = x1])
38 +AS_IF([test "x$HAVE_MEMFD_CREATE" = "x1"], AC_DEFINE([HAVE_MEMFD_CREATE], 1, [Define to 1 if you have the `memfd_create` function.]))
40 #### X11 (optional) ####
42 diff --git a/src/pulsecore/memfd-wrappers.h b/src/pulsecore/memfd-wrappers.h
43 index 3bed9b2..87ed758 100644
44 --- a/src/pulsecore/memfd-wrappers.h
45 +++ b/src/pulsecore/memfd-wrappers.h
47 * defined in the kernel header file <linux/fcntl.h>, that file as
48 * a whole conflicts with the original glibc header <fnctl.h>.
51 +#ifndef HAVE_MEMFD_CREATE
52 static inline int memfd_create(const char *name, unsigned int flags) {
53 return syscall(SYS_memfd_create, name, flags);
57 /* memfd_create(2) flags */