* configure.ac (AC_CHECK_HEADERS): Add sys/eventfd.h.
* eventfd.c: Include <fcntl.h>.
[HAVE_SYS_EVENTFD_H] Include <sys/eventfd.h>.
Include "xlat/efd_flags.h".
(do_eventfd): Use efd_flags for flags decoding.
* xlat/efd_flags.in: New file.
* tests/eventfd.c: New file.
* tests/eventfd.expected: Likewise.
* tests/eventfd.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add eventfd.
(TESTS): Add eventfd.test.
(EXTRA_DIST): Add eventfd.expected.
* tests/.gitignore: Add eventfd.
stropts.h
sys/conf.h
sys/epoll.h
+ sys/eventfd.h
sys/fanotify.h
sys/ioctl.h
sys/reg.h
#include "defs.h"
+#include <fcntl.h>
+#ifdef HAVE_SYS_EVENTFD_H
+# include <sys/eventfd.h>
+#endif
+
+#include "xlat/efd_flags.h"
static int
do_eventfd(struct tcb *tcp, int flags_arg)
tprintf("%u", (unsigned int) tcp->u_arg[0]);
if (flags_arg >= 0) {
tprints(", ");
- printflags(open_mode_flags, tcp->u_arg[flags_arg], "O_???");
+ printflags(efd_flags, tcp->u_arg[flags_arg], "EFD_???");
}
return RVAL_DECODED | RVAL_FD;
bpf
caps
+eventfd
execve
execveat
fanotify_mark
check_PROGRAMS = \
bpf \
caps \
+ eventfd \
execve \
execveat \
fanotify_mark \
bpf.test \
caps.test \
dumpio.test \
+ eventfd.test \
execve.test \
execveat.test \
fanotify_mark.test \
EXTRA_DIST = init.sh run.sh match.awk \
caps.awk \
dumpio.expected \
+ eventfd.expected \
execve.expected \
execve-v.expected \
execveat.expected \
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+int
+main(void)
+{
+#ifdef __NR_eventfd2
+ (void) close(0);
+ return syscall(__NR_eventfd2, -1L, 1 | O_CLOEXEC | O_NONBLOCK) == 0 ?
+ 0 : 77;
+#else
+ return 77;
+#endif
+}
--- /dev/null
+eventfd2(4294967295, EFD_SEMAPHORE|EFD_CLOEXEC|EFD_NONBLOCK) = 0
++++ exited with 0 +++
--- /dev/null
+#!/bin/sh
+
+# Check eventfd2 syscall decoding.
+
+. "${srcdir=.}/init.sh"
+
+run_prog
+run_strace -e eventfd2 $args
+match_diff
+
+exit 0
--- /dev/null
+EFD_SEMAPHORE 1
+EFD_CLOEXEC O_CLOEXEC
+EFD_NONBLOCK O_NONBLOCK