From d712a018dddbccf6f80e1ecfc3e08385d36bfebc Mon Sep 17 00:00:00 2001 From: James Hogan Date: Mon, 9 Dec 2013 17:05:03 +0000 Subject: [PATCH] uclibc: add patch to fix arch specific eventfd defs 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 Signed-off-by: Thomas Petazzoni --- ...w-bits-scheme-for-arch-specific-flag.patch | 284 ++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 package/uclibc/0.9.33.2/uclibc-0055-Use-new-bits-scheme-for-arch-specific-flag.patch diff --git a/package/uclibc/0.9.33.2/uclibc-0055-Use-new-bits-scheme-for-arch-specific-flag.patch b/package/uclibc/0.9.33.2/uclibc-0055-Use-new-bits-scheme-for-arch-specific-flag.patch new file mode 100644 index 0000000000..3d966ff752 --- /dev/null +++ b/package/uclibc/0.9.33.2/uclibc-0055-Use-new-bits-scheme-for-arch-specific-flag.patch @@ -0,0 +1,284 @@ +From c1a78badec59b1ebd303ace8257ca86fa1e14acb Mon Sep 17 00:00:00 2001 +From: Hiroaki KAWAI +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 +Signed-off-by: Bernhard Reutner-Fischer +--- + 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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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 + ++/* Get the platform-dependent flags. */ ++#include + + /* 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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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 + -- 2.30.2