d712a018dd
Add uClibc 0.9.33.2 patch to fix arch specific eventfd definitions, particularly EFD_NONBLOCK. The definition in sys/eventfd.h was 04000 (0x800), however MIPS uses 0200 (0x80). This resulted in QEMU built for MIPS hanging at various points until input is received due to a blocking poll of stdin. The patch is a backport of uClibc commit fd355bc1dbcb (eventfd.h: Use new "bits/" scheme for arch-specific flags). The only conflict was minor in Makefile.in. Signed-off-by: James Hogan <james.hogan@imgtec.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
285 lines
10 KiB
Diff
285 lines
10 KiB
Diff
From c1a78badec59b1ebd303ace8257ca86fa1e14acb Mon Sep 17 00:00:00 2001
|
|
From: Hiroaki KAWAI <kawai@stratosphere.co.jp>
|
|
Date: Fri, 19 Apr 2013 10:09:35 +0900
|
|
Subject: [PATCH-0.9.33] eventfd.h: Use new "bits/" scheme for arch-specific flags
|
|
|
|
As in timerfd.h, eventfd.h needs arch-specific definition files.
|
|
alpha, mips and sparc needs separate file, all the other arch
|
|
will use common definition.
|
|
|
|
This problem is already fixed in glibc.
|
|
|
|
Also sanitize and provide bits for hppa.
|
|
Make sure not to install the new bits/eventfd unless eventfd support is
|
|
enabled.
|
|
|
|
Signed-off-by: Hiroaki KAWAI <kawai@stratosphere.co.jp>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
---
|
|
Makefile.in | 1 +
|
|
libc/sysdeps/linux/alpha/bits/eventfd.h | 31 +++++++++++++++++++++++++++++++
|
|
libc/sysdeps/linux/common/bits/eventfd.h | 31 +++++++++++++++++++++++++++++++
|
|
libc/sysdeps/linux/common/sys/eventfd.h | 25 +++++++++++++------------
|
|
libc/sysdeps/linux/hppa/bits/eventfd.h | 32 ++++++++++++++++++++++++++++++++
|
|
libc/sysdeps/linux/mips/bits/eventfd.h | 31 +++++++++++++++++++++++++++++++
|
|
libc/sysdeps/linux/sparc/bits/eventfd.h | 31 +++++++++++++++++++++++++++++++
|
|
7 files changed, 170 insertions(+), 12 deletions(-)
|
|
create mode 100644 libc/sysdeps/linux/alpha/bits/eventfd.h
|
|
create mode 100644 libc/sysdeps/linux/common/bits/eventfd.h
|
|
create mode 100644 libc/sysdeps/linux/hppa/bits/eventfd.h
|
|
create mode 100644 libc/sysdeps/linux/mips/bits/eventfd.h
|
|
create mode 100644 libc/sysdeps/linux/sparc/bits/eventfd.h
|
|
|
|
diff --git a/Makefile.in b/Makefile.in
|
|
index 9ba590d..633358f 100644
|
|
--- a/Makefile.in
|
|
+++ b/Makefile.in
|
|
@@ -271,6 +271,7 @@ HEADERS_RM-$(UCLIBC_HAS_WORDEXP) += wordexp.h
|
|
HEADERS_RM-$(UCLIBC_HAS_XATTR) += sys/xattr.h
|
|
HEADERS_RM-$(UCLIBC_HAS_XLOCALE) += xlocale.h
|
|
HEADERS_RM-$(UCLIBC_LINUX_SPECIFIC) += sys/eventfd.h sys/fsuid.h \
|
|
+ bits/eventfd.h \
|
|
bits/inotify.h \
|
|
sys/inotify.h \
|
|
sys/kdaemon.h \
|
|
diff --git a/libc/sysdeps/linux/alpha/bits/eventfd.h b/libc/sysdeps/linux/alpha/bits/eventfd.h
|
|
new file mode 100644
|
|
index 0000000..b5a7e41
|
|
--- /dev/null
|
|
+++ b/libc/sysdeps/linux/alpha/bits/eventfd.h
|
|
@@ -0,0 +1,31 @@
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library; if not, see
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for eventfd. */
|
|
+enum
|
|
+ {
|
|
+ EFD_SEMAPHORE = 000000001,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 010000000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+ EFD_NONBLOCK = 000000004
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+ };
|
|
diff --git a/libc/sysdeps/linux/common/bits/eventfd.h b/libc/sysdeps/linux/common/bits/eventfd.h
|
|
new file mode 100644
|
|
index 0000000..ef49c61
|
|
--- /dev/null
|
|
+++ b/libc/sysdeps/linux/common/bits/eventfd.h
|
|
@@ -0,0 +1,31 @@
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library; if not, see
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for eventfd. */
|
|
+enum
|
|
+ {
|
|
+ EFD_SEMAPHORE = 00000001,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 02000000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+ EFD_NONBLOCK = 00004000
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+ };
|
|
diff --git a/libc/sysdeps/linux/common/sys/eventfd.h b/libc/sysdeps/linux/common/sys/eventfd.h
|
|
index 311f803..8686355 100644
|
|
--- a/libc/sysdeps/linux/common/sys/eventfd.h
|
|
+++ b/libc/sysdeps/linux/common/sys/eventfd.h
|
|
@@ -1,4 +1,4 @@
|
|
-/* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
@@ -21,21 +21,12 @@
|
|
|
|
#include <stdint.h>
|
|
|
|
+/* Get the platform-dependent flags. */
|
|
+#include <bits/eventfd.h>
|
|
|
|
/* Type for event counter. */
|
|
typedef uint64_t eventfd_t;
|
|
|
|
-/* Flags for signalfd. */
|
|
-enum
|
|
- {
|
|
- EFD_SEMAPHORE = 1,
|
|
-#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
- EFD_CLOEXEC = 02000000,
|
|
-#define EFD_CLOEXEC EFD_CLOEXEC
|
|
- EFD_NONBLOCK = 04000
|
|
-#define EFD_NONBLOCK EFD_NONBLOCK
|
|
- };
|
|
-
|
|
|
|
__BEGIN_DECLS
|
|
|
|
@@ -43,6 +34,16 @@ __BEGIN_DECLS
|
|
value to COUNT. */
|
|
extern int eventfd (int __count, int __flags) __THROW;
|
|
|
|
+#if 0 /* not (yet) implemented in uClibc */
|
|
+
|
|
+/* Read event counter and possibly wait for events. */
|
|
+extern int eventfd_read (int __fd, eventfd_t *__value);
|
|
+
|
|
+/* Increment event counter. */
|
|
+extern int eventfd_write (int __fd, eventfd_t __value);
|
|
+
|
|
+#endif
|
|
+
|
|
__END_DECLS
|
|
|
|
#endif /* sys/eventfd.h */
|
|
diff --git a/libc/sysdeps/linux/hppa/bits/eventfd.h b/libc/sysdeps/linux/hppa/bits/eventfd.h
|
|
new file mode 100644
|
|
index 0000000..6182c07
|
|
--- /dev/null
|
|
+++ b/libc/sysdeps/linux/hppa/bits/eventfd.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library. If not, see
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for signalfd. */
|
|
+enum
|
|
+ {
|
|
+ EFD_SEMAPHORE = 000000001,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 010000000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+/* the below value looks suspicious, should be 000200004 for consistency */
|
|
+ EFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+ };
|
|
diff --git a/libc/sysdeps/linux/mips/bits/eventfd.h b/libc/sysdeps/linux/mips/bits/eventfd.h
|
|
new file mode 100644
|
|
index 0000000..17b2f46
|
|
--- /dev/null
|
|
+++ b/libc/sysdeps/linux/mips/bits/eventfd.h
|
|
@@ -0,0 +1,31 @@
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library; if not, see
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for eventfd. */
|
|
+enum
|
|
+ {
|
|
+ EFD_SEMAPHORE = 00000001,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 02000000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+ EFD_NONBLOCK = 00000200
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+ };
|
|
diff --git a/libc/sysdeps/linux/sparc/bits/eventfd.h b/libc/sysdeps/linux/sparc/bits/eventfd.h
|
|
new file mode 100644
|
|
index 0000000..bed9f09
|
|
--- /dev/null
|
|
+++ b/libc/sysdeps/linux/sparc/bits/eventfd.h
|
|
@@ -0,0 +1,31 @@
|
|
+/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library; if not, see
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for eventfd. */
|
|
+enum
|
|
+ {
|
|
+ EFD_SEMAPHORE = 1,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 0x400000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+ EFD_NONBLOCK = 0x004000
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+ };
|
|
--
|
|
1.8.1.2
|
|
|