mirror of
https://github.com/systemd/systemd.git
synced 2025-01-11 09:18:07 +03:00
missing: define new pidfd syscalls
This commit is contained in:
parent
5a795bff38
commit
5f152f43d0
@ -517,6 +517,14 @@ foreach ident : [
|
|||||||
#include <unistd.h>'''],
|
#include <unistd.h>'''],
|
||||||
['get_mempolicy', '''#include <stdlib.h>
|
['get_mempolicy', '''#include <stdlib.h>
|
||||||
#include <unistd.h>'''],
|
#include <unistd.h>'''],
|
||||||
|
['pidfd_send_signal', '''#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/wait.h>'''],
|
||||||
|
['pidfd_open', '''#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/wait.h>'''],
|
||||||
]
|
]
|
||||||
|
|
||||||
have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
|
have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef ARCH_MIPS
|
#ifdef ARCH_MIPS
|
||||||
@ -524,3 +526,39 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
|
|||||||
|
|
||||||
#define get_mempolicy missing_get_mempolicy
|
#define get_mempolicy missing_get_mempolicy
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_PIDFD_OPEN
|
||||||
|
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
|
||||||
|
# if ! (defined __NR_pidfd_open && __NR_pidfd_open > 0)
|
||||||
|
# if defined __NR_pidfd_open
|
||||||
|
# undef __NR_pidfd_open
|
||||||
|
# endif
|
||||||
|
# define __NR_pidfd_open 434
|
||||||
|
#endif
|
||||||
|
static inline int pidfd_open(pid_t pid, unsigned flags) {
|
||||||
|
#ifdef __NR_pidfd_open
|
||||||
|
return syscall(__NR_pidfd_open, pid, flags);
|
||||||
|
#else
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_PIDFD_SEND_SIGNAL
|
||||||
|
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
|
||||||
|
# if ! (defined __NR_pidfd_send_signal && __NR_pidfd_send_signal > 0)
|
||||||
|
# if defined __NR_pidfd_send_signal
|
||||||
|
# undef __NR_pidfd_send_signal
|
||||||
|
# endif
|
||||||
|
# define __NR_pidfd_send_signal 424
|
||||||
|
#endif
|
||||||
|
static inline int pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags) {
|
||||||
|
#ifdef __NR_pidfd_open
|
||||||
|
return syscall(__NR_pidfd_send_signal, fd, sig, info, flags);
|
||||||
|
#else
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user