From b94b9834fd638090b0be5233f11de764f1c72b77 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 11 Dec 2014 19:25:02 +0000 Subject: [PATCH] process.c: move sched_setaffinity and sched_getaffinity parsers to a separate file * affinity.c: New file. * Makefile.am (strace_SOURCES): Add it. * process.c (sys_sched_setaffinity, sys_sched_getaffinity): Move to affinity.c. --- Makefile.am | 1 + affinity.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ process.c | 56 ---------------------------------------------------- 3 files changed, 58 insertions(+), 56 deletions(-) create mode 100644 affinity.c diff --git a/Makefile.am b/Makefile.am index 2f5a8bff..1b6b77ce 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,6 +18,7 @@ include xlat/Makemodule.am strace_SOURCES = \ access.c \ + affinity.c \ aio.c \ bjm.c \ block.c \ diff --git a/affinity.c b/affinity.c new file mode 100644 index 00000000..97d8b3e2 --- /dev/null +++ b/affinity.c @@ -0,0 +1,57 @@ +#include "defs.h" + +static void +print_affinitylist(struct tcb *tcp, long list, unsigned int len) +{ + int first = 1; + unsigned long w, min_len; + + if (abbrev(tcp) && len / sizeof(w) > max_strlen) + min_len = len - max_strlen * sizeof(w); + else + min_len = 0; + for (; len >= sizeof(w) && len > min_len; + len -= sizeof(w), list += sizeof(w)) { + if (umove(tcp, list, &w) < 0) + break; + if (first) + tprints("{"); + else + tprints(", "); + first = 0; + tprintf("%lx", w); + } + if (len) { + if (first) + tprintf("%#lx", list); + else + tprintf(", %s}", (len >= sizeof(w) && len > min_len ? + "???" : "...")); + } else { + tprints(first ? "{}" : "}"); + } +} + +int +sys_sched_setaffinity(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); + print_affinitylist(tcp, tcp->u_arg[2], tcp->u_arg[1]); + } + return 0; +} + +int +sys_sched_getaffinity(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); + } else { + if (tcp->u_rval == -1) + tprintf("%#lx", tcp->u_arg[2]); + else + print_affinitylist(tcp, tcp->u_arg[2], tcp->u_rval); + } + return 0; +} diff --git a/process.c b/process.c index 28fbd42b..998e1713 100644 --- a/process.c +++ b/process.c @@ -2203,62 +2203,6 @@ sys_futex(struct tcb *tcp) return 0; } -static void -print_affinitylist(struct tcb *tcp, long list, unsigned int len) -{ - int first = 1; - unsigned long w, min_len; - - if (abbrev(tcp) && len / sizeof(w) > max_strlen) - min_len = len - max_strlen * sizeof(w); - else - min_len = 0; - for (; len >= sizeof(w) && len > min_len; - len -= sizeof(w), list += sizeof(w)) { - if (umove(tcp, list, &w) < 0) - break; - if (first) - tprints("{"); - else - tprints(", "); - first = 0; - tprintf("%lx", w); - } - if (len) { - if (first) - tprintf("%#lx", list); - else - tprintf(", %s}", (len >= sizeof(w) && len > min_len ? - "???" : "...")); - } else { - tprints(first ? "{}" : "}"); - } -} - -int -sys_sched_setaffinity(struct tcb *tcp) -{ - if (entering(tcp)) { - tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); - print_affinitylist(tcp, tcp->u_arg[2], tcp->u_arg[1]); - } - return 0; -} - -int -sys_sched_getaffinity(struct tcb *tcp) -{ - if (entering(tcp)) { - tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); - } else { - if (tcp->u_rval == -1) - tprintf("%#lx", tcp->u_arg[2]); - else - print_affinitylist(tcp, tcp->u_arg[2], tcp->u_rval); - } - return 0; -} - int sys_get_robust_list(struct tcb *tcp) { -- 2.40.0