Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 1 | #include "tests.h" |
Dmitry V. Levin | 6a2f43c | 2016-08-09 14:38:29 +0000 | [diff] [blame^] | 2 | #include <asm/unistd.h> |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 3 | |
Dmitry V. Levin | 6d44012 | 2016-05-09 21:46:17 +0000 | [diff] [blame] | 4 | #ifdef __NR_epoll_ctl |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 5 | |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 6 | # include <inttypes.h> |
| 7 | # include <stdio.h> |
| 8 | # include <sys/epoll.h> |
| 9 | # include <unistd.h> |
| 10 | |
Dmitry V. Levin | 55044d9 | 2016-05-16 21:43:35 +0000 | [diff] [blame] | 11 | static long |
| 12 | invoke_syscall(unsigned long epfd, unsigned long op, unsigned long fd, void *ev) |
| 13 | { |
| 14 | op |= (unsigned long) 0xffffffff00000000; |
| 15 | return syscall(__NR_epoll_ctl, epfd, op, fd, (unsigned long) ev); |
| 16 | } |
| 17 | |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 18 | int |
| 19 | main(void) |
| 20 | { |
| 21 | struct epoll_event *const ev = tail_alloc(sizeof(*ev)); |
| 22 | ev->events = EPOLLIN; |
| 23 | |
Dmitry V. Levin | 55044d9 | 2016-05-16 21:43:35 +0000 | [diff] [blame] | 24 | long rc = invoke_syscall(-1U, EPOLL_CTL_ADD, -2U, ev); |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 25 | printf("epoll_ctl(-1, EPOLL_CTL_ADD, -2, {EPOLLIN," |
Dmitry V. Levin | becfc0e | 2016-04-21 20:37:50 +0000 | [diff] [blame] | 26 | " {u32=%u, u64=%" PRIu64 "}}) = %ld %s (%m)\n", |
| 27 | ev->data.u32, ev->data.u64, rc, errno2name()); |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 28 | |
Dmitry V. Levin | 55044d9 | 2016-05-16 21:43:35 +0000 | [diff] [blame] | 29 | rc = invoke_syscall(-3U, EPOLL_CTL_DEL, -4U, ev); |
Dmitry V. Levin | becfc0e | 2016-04-21 20:37:50 +0000 | [diff] [blame] | 30 | printf("epoll_ctl(-3, EPOLL_CTL_DEL, -4, %p) = %ld %s (%m)\n", |
Dmitry V. Levin | 9f6611b | 2016-04-21 17:49:32 +0000 | [diff] [blame] | 31 | ev, rc, errno2name()); |
Dmitry V. Levin | 2399a60 | 2016-04-10 22:38:00 +0000 | [diff] [blame] | 32 | |
Dmitry V. Levin | 55044d9 | 2016-05-16 21:43:35 +0000 | [diff] [blame] | 33 | rc = invoke_syscall(-1UL, EPOLL_CTL_MOD, -16UL, 0); |
Dmitry V. Levin | becfc0e | 2016-04-21 20:37:50 +0000 | [diff] [blame] | 34 | printf("epoll_ctl(-1, EPOLL_CTL_MOD, -16, NULL) = %ld %s (%m)\n", |
Dmitry V. Levin | 9f6611b | 2016-04-21 17:49:32 +0000 | [diff] [blame] | 35 | rc, errno2name()); |
Dmitry V. Levin | 2399a60 | 2016-04-10 22:38:00 +0000 | [diff] [blame] | 36 | |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 37 | puts("+++ exited with 0 +++"); |
| 38 | return 0; |
| 39 | } |
| 40 | |
| 41 | #else |
| 42 | |
Dmitry V. Levin | 6d44012 | 2016-05-09 21:46:17 +0000 | [diff] [blame] | 43 | SKIP_MAIN_UNDEFINED("__NR_epoll_ctl") |
Fei Jie | 258a225 | 2016-04-08 15:59:15 +0800 | [diff] [blame] | 44 | |
| 45 | #endif |