/*
+ * Check decoding of signalfd4 syscall.
+ *
* Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#include "tests.h"
#include <fcntl.h>
+#include <asm/unistd.h>
-#if defined HAVE_SYS_SIGNALFD_H && defined HAVE_SIGNALFD && defined O_CLOEXEC
+#if defined HAVE_SYS_SIGNALFD_H \
+ && defined HAVE_SIGNALFD \
+ && defined O_CLOEXEC
# include <signal.h>
+# include <stdio.h>
# include <unistd.h>
# include <sys/signalfd.h>
int
main(void)
{
+ const char *const sigs = SIGUSR2 < SIGCHLD ? "USR2 CHLD" : "CHLD USR2";
+ const unsigned int size = get_sigset_size();
+
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGUSR2);
sigaddset(&mask, SIGCHLD);
- (void) close(0);
- if (signalfd(-1, &mask, O_CLOEXEC | O_NONBLOCK))
- perror_msg_and_skip("signalfd");
+
+ int fd = signalfd(-1, &mask, O_CLOEXEC | O_NONBLOCK);
+ printf("signalfd4(-1, [%s], %u, SFD_CLOEXEC|SFD_NONBLOCK) = %s\n",
+ sigs, size, sprintrc(fd));
+
+ puts("+++ exited with 0 +++");
return 0;
}