From: Dmitry V. Levin Date: Thu, 11 Dec 2014 19:25:02 +0000 (+0000) Subject: process.c: move sched_* parsers to a separate file X-Git-Tag: v4.10~305 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fff2f319f97c7555eef4a6de350c6353283634e0;p=strace process.c: move sched_* parsers to a separate file * sched.c: New file. * Makefile.am (strace_SOURCES): Add it. * process.c: Move sys_sched_getscheduler, sys_sched_setscheduler, sys_sched_getparam, sys_sched_setparam, sys_sched_get_priority_min, sys_sched_rr_get_interval, and related code to sched.c. --- diff --git a/Makefile.am b/Makefile.am index 1b6b77ce..f72fd076 100644 --- a/Makefile.am +++ b/Makefile.am @@ -67,6 +67,7 @@ strace_SOURCES = \ reboot.c \ renameat.c \ resource.c \ + sched.c \ scsi.c \ signal.c \ sock.c \ diff --git a/process.c b/process.c index 998e1713..ea73594d 100644 --- a/process.c +++ b/process.c @@ -90,7 +90,6 @@ # define FUTEX_REQUEUE 3 #endif -#include #include #undef GETGROUPS_T #define GETGROUPS_T __kernel_gid_t @@ -2230,84 +2229,3 @@ sys_get_robust_list(struct tcb *tcp) } return 0; } - -#include "xlat/schedulers.h" - -int -sys_sched_getscheduler(struct tcb *tcp) -{ - if (entering(tcp)) { - tprintf("%d", (int) tcp->u_arg[0]); - } else if (!syserror(tcp)) { - tcp->auxstr = xlookup(schedulers, tcp->u_rval); - if (tcp->auxstr != NULL) - return RVAL_STR; - } - return 0; -} - -int -sys_sched_setscheduler(struct tcb *tcp) -{ - if (entering(tcp)) { - struct sched_param p; - tprintf("%d, ", (int) tcp->u_arg[0]); - printxval(schedulers, tcp->u_arg[1], "SCHED_???"); - if (umove(tcp, tcp->u_arg[2], &p) < 0) - tprintf(", %#lx", tcp->u_arg[2]); - else - tprintf(", { %d }", p.sched_priority); - } - return 0; -} - -int -sys_sched_getparam(struct tcb *tcp) -{ - if (entering(tcp)) { - tprintf("%d, ", (int) tcp->u_arg[0]); - } else { - struct sched_param p; - if (umove(tcp, tcp->u_arg[1], &p) < 0) - tprintf("%#lx", tcp->u_arg[1]); - else - tprintf("{ %d }", p.sched_priority); - } - return 0; -} - -int -sys_sched_setparam(struct tcb *tcp) -{ - if (entering(tcp)) { - struct sched_param p; - if (umove(tcp, tcp->u_arg[1], &p) < 0) - tprintf("%d, %#lx", (int) tcp->u_arg[0], tcp->u_arg[1]); - else - tprintf("%d, { %d }", (int) tcp->u_arg[0], p.sched_priority); - } - return 0; -} - -int -sys_sched_get_priority_min(struct tcb *tcp) -{ - if (entering(tcp)) { - printxval(schedulers, tcp->u_arg[0], "SCHED_???"); - } - return 0; -} - -int -sys_sched_rr_get_interval(struct tcb *tcp) -{ - if (entering(tcp)) { - tprintf("%ld, ", (long) (pid_t) tcp->u_arg[0]); - } else { - if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[1]); - else - print_timespec(tcp, tcp->u_arg[1]); - } - return 0; -} diff --git a/sched.c b/sched.c new file mode 100644 index 00000000..d3192fa2 --- /dev/null +++ b/sched.c @@ -0,0 +1,84 @@ +#include "defs.h" + +#include + +#include "xlat/schedulers.h" + +int +sys_sched_getscheduler(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%d", (int) tcp->u_arg[0]); + } else if (!syserror(tcp)) { + tcp->auxstr = xlookup(schedulers, tcp->u_rval); + if (tcp->auxstr != NULL) + return RVAL_STR; + } + return 0; +} + +int +sys_sched_setscheduler(struct tcb *tcp) +{ + if (entering(tcp)) { + struct sched_param p; + tprintf("%d, ", (int) tcp->u_arg[0]); + printxval(schedulers, tcp->u_arg[1], "SCHED_???"); + if (umove(tcp, tcp->u_arg[2], &p) < 0) + tprintf(", %#lx", tcp->u_arg[2]); + else + tprintf(", { %d }", p.sched_priority); + } + return 0; +} + +int +sys_sched_getparam(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%d, ", (int) tcp->u_arg[0]); + } else { + struct sched_param p; + if (umove(tcp, tcp->u_arg[1], &p) < 0) + tprintf("%#lx", tcp->u_arg[1]); + else + tprintf("{ %d }", p.sched_priority); + } + return 0; +} + +int +sys_sched_setparam(struct tcb *tcp) +{ + if (entering(tcp)) { + struct sched_param p; + if (umove(tcp, tcp->u_arg[1], &p) < 0) + tprintf("%d, %#lx", (int) tcp->u_arg[0], tcp->u_arg[1]); + else + tprintf("%d, { %d }", (int) tcp->u_arg[0], p.sched_priority); + } + return 0; +} + +int +sys_sched_get_priority_min(struct tcb *tcp) +{ + if (entering(tcp)) { + printxval(schedulers, tcp->u_arg[0], "SCHED_???"); + } + return 0; +} + +int +sys_sched_rr_get_interval(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%ld, ", (long) (pid_t) tcp->u_arg[0]); + } else { + if (syserror(tcp)) + tprintf("%#lx", tcp->u_arg[1]); + else + print_timespec(tcp, tcp->u_arg[1]); + } + return 0; +}