Linux: implement decoding of preadv and pwritev syscalls

* io.c [LINUX && HAVE_SYS_UIO_H] (sys_preadv, sys_pwritev): New functions.
* linux/syscall.h (sys_preadv, sys_pwritev): Declare them.
* linux/*/syscallent.h: Use them.

Signed-off-by: Damir Shayhutdinov <damir@altlinux.ru>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
This commit is contained in:
Damir Shayhutdinov 2011-05-12 16:57:40 +04:00 committed by Dmitry V. Levin
parent 1201426dd4
commit 3087dd6780
18 changed files with 70 additions and 36 deletions

33
io.c
View File

@ -304,6 +304,39 @@ sys_pwrite(struct tcb *tcp)
return 0;
}
#if HAVE_SYS_UIO_H
int
sys_preadv(struct tcb *tcp)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp)) {
tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
return 0;
}
tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%llu", PREAD_OFFSET_ARG);
}
return 0;
}
int
sys_pwritev(struct tcb *tcp)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%llu", PREAD_OFFSET_ARG);
}
return 0;
}
#endif /* HAVE_SYS_UIO_H */
int
sys_sendfile(struct tcb *tcp)
{

View File

@ -518,8 +518,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 487 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 488 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 489 */
{ 5, TD, printargs, "preadv" }, /* 490 */
{ 5, TD, printargs, "pwritev" }, /* 491 */
{ 5, TD, sys_preadv, "preadv" }, /* 490 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 491 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 492 */
{ 5, TD, printargs, "perf_event_open" }, /* 493 */
{ 2, TD, printargs, "fanotify_init" }, /* 494 */

View File

@ -391,8 +391,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 358 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 359 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 360 */
{ 5, TD, printargs, "preadv" }, /* 361 */
{ 5, TD, printargs, "pwritev" }, /* 362 */
{ 5, TD, sys_preadv, "preadv" }, /* 361 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 362 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 363 */
{ 5, TD, printargs, "perf_event_open"}, /* 364 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 365 */

View File

@ -394,8 +394,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 363 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 364 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 365 */
{ 5, TD, printargs, "preadv" }, /* 366 */
{ 5, TD, printargs, "pwritev" }, /* 367 */
{ 5, TD, sys_preadv, "preadv" }, /* 366 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 367 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 368 */
{ 5, TD, printargs, "perf_event_open" }, /* 369 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 370 */

View File

@ -320,8 +320,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 312 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 313 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 314 */
{ 5, TD, printargs, "preadv" }, /* 315 */
{ 5, TD, printargs, "pwritev" }, /* 316 */
{ 5, TD, sys_preadv, "preadv" }, /* 315 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 316 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 317 */
{ 5, TD, printargs, "perf_event_open" }, /* 318 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 319 */

View File

@ -363,8 +363,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 330 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 331 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 332 */
{ 5, TD, printargs, "preadv" }, /* 333 */
{ 5, TD, printargs, "pwritev" }, /* 334 */
{ 5, TD, sys_preadv, "preadv" }, /* 333 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 334 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 335 */
{ 5, TD, printargs, "perf_event_open"}, /* 336 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 337 */

View File

@ -1114,8 +1114,8 @@
{ 3, TD|TS, sys_signalfd, "signalfd" }, /* 1307 */
{ 4, TD, sys_timerfd, "timerfd" }, /* 1308 */
{ 1, TD, sys_eventfd, "eventfd" }, /* 1309 */
{ 5, TD, printargs, "preadv" }, /* 1319 */
{ 5, TD, printargs, "pwritev" }, /* 1320 */
{ 5, TD, sys_preadv, "preadv" }, /* 1319 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 1320 */
{ 4, TS, printargs, "rt_tgsigqueueinfo"}, /* 1321 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 1322 */
{ 2, TD, printargs, "fanotify_init" }, /* 1323 */

View File

@ -357,8 +357,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 326 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 327 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 328 */
{ 5, TD, printargs, "preadv" }, /* 329 */
{ 5, TD, printargs, "pwritev" }, /* 330 */
{ 5, TD, sys_preadv, "preadv" }, /* 329 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 330 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 331 */
{ 5, TD, printargs, "perf_event_open"}, /* 332 */
{ 0, 0, sys_get_thread_area, "get_thread_area"}, /* 333 */

View File

@ -392,8 +392,8 @@
{ 5, TN, sys_sendmsg, "sendmsg" }, /* 360 */
{ 5, TN, sys_recvmsg, "recvmsg" }, /* 361 */
{ 4, TN, sys_accept4, "accept4" }, /* 362 */
{ 5, TD, printargs, "preadv" }, /* 363 */
{ 5, TD, printargs, "pwritev" }, /* 364 */
{ 5, TD, sys_preadv, "preadv" }, /* 363 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 364 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 365 */
{ 5, TN, printargs, "perf_event_open" }, /* 366 */
{ 5, TN, printargs, "recvmmsg" }, /* 367 */

View File

@ -4332,8 +4332,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 4327 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 4328 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 4329 */
{ 6, TD, printargs, "preadv" }, /* 4330 */
{ 6, TD, printargs, "pwritev" }, /* 4331 */
{ 6, TD, sys_preadv, "preadv" }, /* 4330 */
{ 6, TD, sys_pwritev, "pwritev" }, /* 4331 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 4332 */
{ 5, TD, printargs, "perf_event_open" }, /* 4333 */
{ 4, TN, sys_accept4, "accept4" }, /* 4334 */
@ -5637,8 +5637,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 5286 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 5287 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 5288 */
{ 5, TD, printargs, "preadv" }, /* 5289 */
{ 5, TD, printargs, "pwritev" }, /* 5290 */
{ 5, TD, sys_preadv, "preadv" }, /* 5289 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 5290 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 5291 */
{ 5, TD, printargs, "perf_event_open" }, /* 5292 */
{ 4, TN, sys_accept4, "accept4" }, /* 5293 */
@ -6947,8 +6947,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 6290 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 6291 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 6292 */
{ 5, TD, printargs, "preadv" }, /* 6293 */
{ 5, TD, printargs, "pwritev" }, /* 6294 */
{ 5, TD, sys_preadv, "preadv" }, /* 6293 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 6294 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 6295 */
{ 5, TD, printargs, "perf_event_open" }, /* 6296 */
{ 4, TN, sys_accept4, "accept4" }, /* 6297 */

View File

@ -348,8 +348,8 @@
{ 2, TD, sys_pipe2, "pipe2" }, /* 317 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 318 */
{ 5, TD, printargs, "perf_event_open" }, /* 319 */
{ 5, TD, printargs, "preadv" }, /* 320 */
{ 5, TD, printargs, "pwritev" }, /* 321 */
{ 5, TD, sys_preadv, "preadv" }, /* 320 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 321 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo" }, /* 322 */
{ 2, TD, printargs, "fanotify_init" }, /* 323 */
{ 5, TD|TF, printargs, "fanotify_mark" }, /* 324 */

View File

@ -356,8 +356,8 @@
{ 2, TD, sys_pipe2, "pipe2" }, /* 325 */
{ 3, TD, sys_dup3, "dup3" }, /* 326 */
{ 1, TD, sys_epoll_create1, "epoll_create1" }, /* 327 */
{ 5, TD, printargs, "preadv" }, /* 328 */
{ 5, TD, printargs, "pwritev" }, /* 329 */
{ 5, TD, sys_preadv, "preadv" }, /* 328 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 329 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 330 */
{ 5, TD, printargs, "perf_event_open"}, /* 331 */
{ 2, TD, printargs, "fanotify_init" }, /* 332 */

View File

@ -355,8 +355,8 @@
{ 2, TD, sys_pipe2, "pipe2" }, /* 325 */
{ 3, TD, sys_dup3, "dup3" }, /* 326 */
{ 1, TD, sys_epoll_create1, "epoll_create1" }, /* 327 */
{ 5, TD, printargs, "preadv" }, /* 328 */
{ 5, TD, printargs, "pwritev" }, /* 329 */
{ 5, TD, sys_preadv, "preadv" }, /* 328 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 329 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 330 */
{ 5, TD, printargs, "perf_event_open"}, /* 331 */
{ 2, TD, printargs, "fanotify_init" }, /* 332 */

View File

@ -365,8 +365,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 330 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 331 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 332 */
{ 5, TD, printargs, "preadv" }, /* 333 */
{ 5, TD, printargs, "pwritev" }, /* 334 */
{ 5, TD, sys_preadv, "preadv" }, /* 333 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 334 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 335 */
{ 5, TD, printargs, "perf_event_open"}, /* 336 */
{ 2, TD, printargs, "fanotify_init" }, /* 337 */

View File

@ -389,8 +389,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 358 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 359 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 360 */
{ 5, TD, printargs, "preadv" }, /* 361 */
{ 5, TD, printargs, "pwritev" }, /* 362 */
{ 5, TD, sys_preadv, "preadv" }, /* 361 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 362 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 363 */
{ 5, TD, printargs, "perf_event_open"}, /* 364 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 365 */

View File

@ -322,8 +322,8 @@
{ 2, TD, sys_pipe2, "pipe2" }, /* 321 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 322 */
{ 4, TN, sys_accept4, "accept4" }, /* 323 */
{ 5, TD, printargs, "preadv" }, /* 324 */
{ 5, TD, printargs, "pwritev" }, /* 325 */
{ 5, TD, sys_preadv, "preadv" }, /* 324 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 325 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 326 */
{ 5, TD, printargs, "perf_event_open"}, /* 327 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 328 */

View File

@ -80,6 +80,7 @@ int sys_sched_get_priority_max(), sys_sched_get_priority_min();
int sys_sched_rr_get_interval(), sys_nanosleep(), sys_mremap();
int sys_sendmsg(), sys_recvmsg(), sys_setresuid(), sys_setresgid();
int sys_getresuid(), sys_getresgid(), sys_pread(), sys_pwrite(), sys_getcwd();
int sys_preadv(), sys_pwritev();
int sys_sigaltstack(), sys_rt_sigprocmask(), sys_rt_sigaction();
int sys_rt_sigpending(), sys_rt_sigsuspend(), sys_rt_sigqueueinfo();
int sys_rt_sigtimedwait(), sys_prctl(), sys_poll(), sys_vfork();

View File

@ -293,8 +293,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 292 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 293 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 294 */
{ 5, TD, printargs, "preadv" }, /* 295 */
{ 5, TD, printargs, "pwritev" }, /* 296 */
{ 5, TD, sys_preadv, "preadv" }, /* 295 */
{ 5, TD, sys_pwritev, "pwritev" }, /* 296 */
{ 4, TP|TS, printargs, "rt_tgsigqueueinfo"}, /* 297 */
{ 5, TD, printargs, "perf_event_open"}, /* 298 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 299 */