diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index bfb9b8229e..d9c25b2443 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -1,4 +1,5 @@ -use core::{arch::asm, num::NonZeroU64, ptr}; +#[cfg(target_arch = "x86_64")] +use core::arch::asm; use super::{Pal, types::*}; use crate::{ @@ -19,6 +20,7 @@ use crate::{ ld_so::tcb::OsSpecific, out::Out, }; +use core::{num::NonZeroU64, ptr}; // use header::sys_times::tms; use crate::{ error::{Errno, Result}, diff --git a/tests/Makefile b/tests/Makefile index a14f6bb286..40b90dca1f 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -11,6 +11,7 @@ FAILING_TESTS=tls \ mkfifo \ sigchld \ stdlib/ptsname \ + sys_epoll/epollet \ sys_mman/fmap \ signals/pthread_kill-child \ unistd/isatty \ diff --git a/tests/expected/bins_dynamic/sys_epoll/epollet.stdout b/tests/expected/bins_dynamic/sys_epoll/epollet.stdout new file mode 100644 index 0000000000..cc912d90cf --- /dev/null +++ b/tests/expected/bins_dynamic/sys_epoll/epollet.stdout @@ -0,0 +1,5 @@ +ctl ADD: 0 +wait for HUP, edge-triggered: 1 +wait for HUP again: 0 +ctl MOD: 0 +wait for HUP: 1 diff --git a/tests/expected/bins_static/sys_epoll/epollet.stdout b/tests/expected/bins_static/sys_epoll/epollet.stdout new file mode 100644 index 0000000000..cc912d90cf --- /dev/null +++ b/tests/expected/bins_static/sys_epoll/epollet.stdout @@ -0,0 +1,5 @@ +ctl ADD: 0 +wait for HUP, edge-triggered: 1 +wait for HUP again: 0 +ctl MOD: 0 +wait for HUP: 1 diff --git a/tests/sys_epoll/epollet.c b/tests/sys_epoll/epollet.c new file mode 100644 index 0000000000..7c0646730b --- /dev/null +++ b/tests/sys_epoll/epollet.c @@ -0,0 +1,46 @@ +// test code found on dbus, currently hangs on redox + +#include +#include +#include +#include + +#define _DBUS_ZERO(object) (memset (&(object), '\0', sizeof ((object)))) + +int +main (void) +{ + struct epoll_event input; + struct epoll_event output; + int epfd = epoll_create1 (EPOLL_CLOEXEC); + + int pipefds[2]; + pipe(pipefds); + close(pipefds[1]); + int fd = pipefds[0]; + + int ret; + + _DBUS_ZERO (input); + + input.events = EPOLLHUP | EPOLLET; + ret = epoll_ctl (epfd, EPOLL_CTL_ADD, fd, &input); + printf ("ctl ADD: %d\n", ret); + + ret = epoll_wait (epfd, &output, 1, -1); + printf ("wait for HUP, edge-triggered: %d\n", ret); + + ret = epoll_wait (epfd, &output, 1, 100); + printf ("wait for HUP again: %d\n", ret); + + input.events = EPOLLHUP; + ret = epoll_ctl (epfd, EPOLL_CTL_MOD, fd, &input); + printf ("ctl MOD: %d\n", ret); + + ret = epoll_wait (epfd, &output, 1, -1); + printf ("wait for HUP: %d\n", ret); + + close(fd); + close(epfd); + return 0; +} \ No newline at end of file