From: Roland McGrath Date: Mon, 9 May 2005 08:02:00 +0000 (+0000) Subject: 2005-05-09 Roland McGrath X-Git-Tag: v4.5.18~386 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=37b9f8480cf54455d1943e534509e20a92da2199;p=strace 2005-05-09 Roland McGrath * desc.c (sys_io_setup, sys_io_submit, sys_io_cancel, sys_io_getevents, sys_io_destroy): New functions. * linux/syscall.h: Declare them. * linux/syscallent.h: Use those for io_* syscalls. * linux/alpha/syscallent.h: Likewise. * linux/hppa/syscallent.h: Likewise. * linux/ia64/syscallent.h: Likewise. * linux/mips/syscallent.h: Likewise. * linux/powerpc/syscallent.h: Likewise. * linux/s390/syscallent.h: Likewise. * linux/s390x/syscallent.h: Likewise. * linux/x86_64/syscallent.h: Likewise. From Zach Brown . Fixes RH#155065. --- diff --git a/desc.c b/desc.c index 422a1a1b..031d5a13 100644 --- a/desc.c +++ b/desc.c @@ -40,6 +40,9 @@ #ifdef HAVE_SYS_EPOLL_H #include #endif +#ifdef HAVE_LIBAIO_H +#include +#endif #if HAVE_LONG_LONG_OFF_T /* @@ -703,6 +706,163 @@ struct tcb *tcp; } return 0; } + +int +sys_io_setup(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) + tprintf("%ld, ", tcp->u_arg[0]); + else { + if (syserror(tcp)) + tprintf("0x%0lx", tcp->u_arg[1]); + else { + unsigned long user_id; + if (umove(tcp, tcp->u_arg[1], &user_id) == 0) + tprintf("{%lu}", user_id); + else + tprintf("{...}"); + } + } + return 0; +} + +int +sys_io_destroy(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) + tprintf("%lu", tcp->u_arg[0]); + return 0; +} + +int +sys_io_submit(tcp) +struct tcb *tcp; +{ + long nr; + if (entering(tcp)) { + tprintf("%lu, %ld, ", tcp->u_arg[0], tcp->u_arg[1]); + nr = tcp->u_arg[1]; + /* and if nr is negative? */ + if (nr == 0) + tprintf("{}"); + else { +#ifdef HAVE_LIBAIO_H + long i; + struct iocb *iocbp, **iocbs = (void *)tcp->u_arg[2]; + + for (i = 0; i < nr; i++, iocbs++) { + struct iocb iocb; + if (i == 0) + tprintf("{"); + else + tprintf(", "); + + if (umove(tcp, (unsigned long)iocbs, &iocbp) || + umove(tcp, (unsigned long)iocbp, &iocb)) { + tprintf("{...}"); + continue; + } + tprintf("{%p, %u, %hu, %hu, %d}", + iocb.data, iocb.key, + iocb.aio_lio_opcode, + iocb.aio_reqprio, iocb.aio_fildes); + } + if (i) + tprintf("}"); +#else + tprintf("{...}"); +#endif + } + } + return 0; +} + +int +sys_io_cancel(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) { +#ifdef HAVE_LIBAIO_H + struct iocb iocb; +#endif + tprintf("%lu, ", tcp->u_arg[0]); +#ifdef HAVE_LIBAIO_H + if (umove(tcp, tcp->u_arg[1], &iocb) == 0) { + tprintf("{%p, %u, %hu, %hu, %d}, ", + iocb.data, iocb.key, + iocb.aio_lio_opcode, + iocb.aio_reqprio, iocb.aio_fildes); + } else +#endif + tprintf("{...}, "); + } else { + if (tcp->u_rval < 0) + tprintf("{...}"); + else { +#ifdef HAVE_LIBAIO_H + struct io_event event; + if (umove(tcp, tcp->u_arg[2], &event) == 0) + tprintf("{%p, %p, %ld, %ld}", + event.data, event.obj, + event.res, event.res2); + else +#endif + tprintf("{...}"); + } + } + return 0; +} + +int +sys_io_getevents(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) { + tprintf("%ld, %ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1], + tcp->u_arg[2]); + } else { + if (tcp->u_rval == 0) { + tprintf("{}"); + } else { +#ifdef HAVE_LIBAIO_H + struct io_event *events = (void *)tcp->u_arg[3]; + long i, nr = tcp->u_rval; + + for (i = 0; i < nr; i++, events++) { + struct io_event event; + + if (i == 0) + tprintf("{"); + else + tprintf(", "); + + if (umove(tcp, (unsigned long)events, &event) != 0) { + tprintf("{...}"); + continue; + } + tprintf("{%p, %p, %ld, %ld}", event.data, + event.obj, event.res, event.res2); + } + tprintf("}, "); +#else + tprintf("{...}"); +#endif + } + + if (tcp->u_arg[4] == 0) + tprintf("NULL"); + else { + struct timespec to; + if (umove(tcp, tcp->u_arg[4], &to) == 0) + tprintf("{%lu, %lu}", to.tv_sec, to.tv_nsec); + else + tprintf("{...}"); + } + } + return 0; +} #endif /* LINUX */ int diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h index 705294e7..561a9858 100644 --- a/linux/alpha/syscallent.h +++ b/linux/alpha/syscallent.h @@ -426,11 +426,11 @@ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 395 */ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 396 */ { 5, 0, printargs, "tuxcall" }, /* 397 */ - { 2, 0, printargs, "io_setup" }, /* 398 */ - { 1, 0, printargs, "io_destroy" }, /* 399 */ - { 5, 0, printargs, "io_getevents" }, /* 400 */ - { 3, 0, printargs, "io_submit" }, /* 401 */ - { 3, 0, printargs, "io_cancel" }, /* 402 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 398 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 399 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 400 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 401 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 402 */ { 5, 0, printargs, "SYS_403" }, /* 403 */ { 5, 0, printargs, "SYS_404" }, /* 404 */ { 1, TP, sys_exit, "exit_group" }, /* 405 */ diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h index 339300ff..9b8f7234 100644 --- a/linux/hppa/syscallent.h +++ b/linux/hppa/syscallent.h @@ -220,11 +220,11 @@ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 212 */ { 5, 0, printargs, "set_thread_area" }, /* 213 */ { 5, 0, printargs, "get_thread_area" }, /* 214 */ - { 2, 0, printargs, "io_setup" }, /* 215 */ - { 1, 0, printargs, "io_destroy" }, /* 216 */ - { 5, 0, printargs, "io_getevents" }, /* 217 */ - { 3, 0, printargs, "io_submit" }, /* 218 */ - { 4, 0, printargs, "io_cancel" }, /* 219 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 215 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 216 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 217 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 218 */ + { 4, 0, sys_io_cancel, "io_cancel" }, /* 219 */ { 5, 0, printargs, "alloc_hugepages" }, /* 220 */ { 1, 0, printargs, "free_hugepages" }, /* 221 */ { 1, TP, sys_exit, "exit_group" }, /* 222 */ diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h index 50a408ae..187fb4a5 100644 --- a/linux/ia64/syscallent.h +++ b/linux/ia64/syscallent.h @@ -1141,11 +1141,11 @@ { 3, TS, sys_tgkill, "tgkill" }, /* 1235 */ { 1, TP, sys_exit, "exit_group" }, /* 1236 */ { 4, 0, printargs, "lookup_dcookie"}, /* 1237 */ - { 2, 0, printargs, "io_setup" }, /* 1238 */ - { 1, 0, printargs, "io_destroy" }, /* 1239 */ - { 5, 0, printargs, "io_getevents" }, /* 1240 */ - { 3, 0, printargs, "io_submit" }, /* 1241 */ - { 3, 0, printargs, "io_cancel" }, /* 1242 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 1238 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 1239 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 1240 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 1241 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 1242 */ { 1, 0, sys_epoll_create, "epoll_create" }, /* 1243 */ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 1244 */ { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 1245 */ diff --git a/linux/mips/syscallent.h b/linux/mips/syscallent.h index 02b46df2..a9edc62b 100644 --- a/linux/mips/syscallent.h +++ b/linux/mips/syscallent.h @@ -4239,11 +4239,11 @@ { 6, 0, sys_futex, "futex" }, /* 4238 */ { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 4239 */ { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 4240 */ - { 2, 0, printargs, "io_setup" }, /* 4241 */ - { 1, 0, printargs, "io_destroy" }, /* 4242 */ - { 5, 0, printargs, "io_getevents" }, /* 4243 */ - { 3, 0, printargs, "io_submit" }, /* 4244 */ - { 3, 0, printargs, "io_cancel" }, /* 4245 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 4241 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 4242 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 4243 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 4244 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 4245 */ { 1, TP, sys_exit, "exit_group" }, /* 4246 */ { 3, 0, printargs, "lookup_dcookie"}, /* 4247 */ { 1, 0, sys_epoll_create, "epoll_create" }, /* 4248 */ diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h index 1eb4896b..a586f253 100644 --- a/linux/powerpc/syscallent.h +++ b/linux/powerpc/syscallent.h @@ -256,11 +256,11 @@ { 5, 0, printargs, "SYS_224" }, /* 224 */ { 5, 0, printargs, "tux" }, /* 225 */ { 4, TF, sys_sendfile64, "sendfile64" }, /* 226 */ - { 2, 0, printargs, "io_setup" }, /* 227 */ - { 1, 0, printargs, "io_destroy" }, /* 228 */ - { 5, 0, printargs, "io_getevents" }, /* 229 */ - { 3, 0, printargs, "io_submit" }, /* 230 */ - { 3, 0, printargs, "io_cancel" }, /* 231 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 227 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 228 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 229 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 230 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 231 */ { 1, 0, printargs, "set_tid_address" }, /* 232 */ { 6, TF, sys_fadvise64, "fadvise64" }, /* 233 */ { 1, TP, sys_exit, "exit_group" }, /* 234 */ diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h index 238fec46..23125f80 100644 --- a/linux/s390/syscallent.h +++ b/linux/s390/syscallent.h @@ -271,11 +271,11 @@ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 240 */ { -1, 0, printargs, "SYS_241" }, /* 241 */ { -1, 0, printargs, "SYS_242" }, /* 242 */ - { 2, 0, printargs, "io_setup" }, /* 243 */ - { 1, 0, printargs, "io_destroy" }, /* 244 */ - { 5, 0, printargs, "io_getevents" }, /* 245 */ - { 3, 0, printargs, "io_submit" }, /* 246 */ - { 3, 0, printargs, "io_cancel" }, /* 247 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 243 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 244 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 245 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 246 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 247 */ { 1, TP, sys_exit, "exit_group" }, /* 248 */ { 1, 0, sys_epoll_create, "epoll_create" }, /* 249 */ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 250 */ diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h index 438a39cd..b7d02f37 100644 --- a/linux/s390x/syscallent.h +++ b/linux/s390x/syscallent.h @@ -270,11 +270,11 @@ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 240 */ { -1, 0, printargs, "SYS_241" }, /* 241 */ { -1, 0, printargs, "SYS_242" }, /* 242 */ - { 2, 0, printargs, "io_setup" }, /* 243 */ - { 1, 0, printargs, "io_destroy" }, /* 244 */ - { 5, 0, printargs, "io_getevents" }, /* 245 */ - { 3, 0, printargs, "io_submit" }, /* 246 */ - { 3, 0, printargs, "io_cancel" }, /* 247 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 243 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 244 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 245 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 246 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 247 */ { 1, TP, sys_exit, "exit_group" }, /* 248 */ { 1, 0, sys_epoll_create, "epoll_create" }, /* 249 */ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 250 */ diff --git a/linux/syscall.h b/linux/syscall.h index 74c678ae..a4558f3b 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -100,6 +100,7 @@ int sys_epoll_create(), sys_epoll_ctl(), sys_epoll_wait(); int sys_waitid(), sys_fadvise64(), sys_fadvise64_64(); int sys_mbind(), sys_get_mempolicy(), sys_set_mempolicy(); int sys_arch_prctl(); +int sys_io_setup(), sys_io_submit(), sys_io_cancel(), sys_io_getevents(), sys_io_destroy(); /* sys_socketcall subcalls */ diff --git a/linux/syscallent.h b/linux/syscallent.h index ce7d9798..9fe19abc 100644 --- a/linux/syscallent.h +++ b/linux/syscallent.h @@ -291,11 +291,11 @@ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 243 */ { 1, 0, sys_get_thread_area, "get_thread_area" }, /* 244 */ - { 2, 0, printargs, "io_setup" }, /* 245 */ - { 1, 0, printargs, "io_destroy" }, /* 246 */ - { 5, 0, printargs, "io_getevents" }, /* 247 */ - { 3, 0, printargs, "io_submit" }, /* 248 */ - { 3, 0, printargs, "io_cancel" }, /* 249 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ { 5, TF, sys_fadvise64, "fadvise64" }, /* 250 */ { 5, 0, printargs, "SYS_251" }, /* 251 */ { 1, TP, sys_exit, "exit_group" }, /* 252 */ diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h index bbe6526d..afd9d968 100644 --- a/linux/x86_64/syscallent.h +++ b/linux/x86_64/syscallent.h @@ -204,11 +204,11 @@ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 203 */ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 204 */ { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 205 */ - { 2, 0, printargs, "io_setup" }, /* 206 */ - { 1, 0, printargs, "io_destroy" }, /* 207 */ - { 5, 0, printargs, "io_getevents" }, /* 208 */ - { 3, 0, printargs, "io_submit" }, /* 209 */ - { 3, 0, printargs, "io_cancel" }, /* 210 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 206 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 207 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 208 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 209 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 210 */ { 1, 0, sys_get_thread_area, "get_thread_area" }, /* 211 */ { 4, 0, printargs, "lookup_dcookie"}, /* 212 */ { 1, 0, sys_epoll_create, "epoll_create" }, /* 213 */