diff --git a/desc.c b/desc.c index 31af6c19..9c26b633 100644 --- a/desc.c +++ b/desc.c @@ -669,8 +669,8 @@ struct tcb *tcp; return 0; } -int -sys_epoll_wait(tcp) +static void +epoll_wait_common(tcp) struct tcb *tcp; { if (entering(tcp)) @@ -708,6 +708,23 @@ struct tcb *tcp; } tprintf(", %ld, %ld", tcp->u_arg[2], tcp->u_arg[3]); } +} + +int +sys_epoll_wait(tcp) +struct tcb *tcp; +{ + epoll_wait_common(tcp); + return 0; +} + +int +sys_epoll_pwait(tcp) +struct tcb *tcp; +{ + epoll_wait_common(tcp); + if (exiting(tcp)) + print_sigset(tcp, tcp->u_arg[4], 0); return 0; } diff --git a/linux/syscall.h b/linux/syscall.h index 1922ee01..9a2e4266 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -102,7 +102,7 @@ int sys_waitid(), sys_fadvise64(), sys_fadvise64_64(); int sys_mbind(), sys_get_mempolicy(), sys_set_mempolicy(), sys_move_pages(); int sys_arch_prctl(); int sys_io_setup(), sys_io_submit(), sys_io_cancel(), sys_io_getevents(), sys_io_destroy(); -int sys_utimensat(); +int sys_utimensat(), sys_epoll_pwait(); /* sys_socketcall subcalls */ diff --git a/linux/syscallent.h b/linux/syscallent.h index 581f5b65..862b604d 100644 --- a/linux/syscallent.h +++ b/linux/syscallent.h @@ -349,7 +349,7 @@ { 4, TD, printargs, "vmsplice" }, /* 316 */ { 6, 0, sys_move_pages, "move_pages" }, /* 317 */ { 5, 0, printargs, "SYS_318" }, /* 318 */ - { 5, 0, printargs, "SYS_319" }, /* 319 */ + { 5, TD, sys_epoll_pwait, "epoll_pwait" }, /* 319 */ { 4, TD|TF, sys_utimensat, "utimensat" }, /* 320 */ { 5, 0, printargs, "SYS_321" }, /* 321 */ { 5, 0, printargs, "SYS_322" }, /* 322 */ diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h index fb68ec30..57f821ec 100644 --- a/linux/x86_64/syscallent.h +++ b/linux/x86_64/syscallent.h @@ -279,3 +279,4 @@ { 4, TD, printargs, "vmsplice" }, /* 278 */ { 6, 0, sys_move_pages, "move_pages" }, /* 279 */ { 4, TD|TF, sys_utimensat, "utimensat" }, /* 280 */ + { 5, TD, sys_epoll_pwait, "epoll_pwait" }, /* 281 */