From 1b0bae2969abe21c388144761bc52e3ae9d1a043 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sun, 11 Mar 2012 22:32:26 +0000 Subject: [PATCH] Implement get_robust_list syscall decoder * linux/dummy.h (sys_get_robust_list): Remove. * linux/syscall.h (sys_get_robust_list): New prototype. * process.c (sys_get_robust_list): New function. --- linux/dummy.h | 1 - linux/syscall.h | 1 + process.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/linux/dummy.h b/linux/dummy.h index e9e6f4b7..8477015e 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -32,7 +32,6 @@ #define sys_add_key printargs #define sys_fanotify_init printargs #define sys_fanotify_mark printargs -#define sys_get_robust_list printargs #define sys_ioperm printargs #define sys_iopl printargs #define sys_ioprio_get printargs diff --git a/linux/syscall.h b/linux/syscall.h index 7a66c840..c565776e 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -88,6 +88,7 @@ int sys_ftruncate64(); int sys_futex(); int sys_futimesat(); int sys_get_mempolicy(); +int sys_get_robust_list(); int sys_get_thread_area(); int sys_getcpu(); int sys_getcwd(); diff --git a/process.c b/process.c index a9b0eb30..0393288e 100644 --- a/process.c +++ b/process.c @@ -2617,6 +2617,34 @@ sys_sched_getaffinity(struct tcb *tcp) return 0; } +int +sys_get_robust_list(struct tcb *tcp) +{ + if (entering(tcp)) { + tprintf("%ld, ", (long) (pid_t) tcp->u_arg[0]); + } else { + void *addr; + size_t len; + + if (syserror(tcp) || + !tcp->u_arg[1] || + umove(tcp, tcp->u_arg[1], &addr) < 0) { + tprintf("%#lx, ", tcp->u_arg[1]); + } else { + tprintf("[%p], ", addr); + } + + if (syserror(tcp) || + !tcp->u_arg[2] || + umove(tcp, tcp->u_arg[2], &len) < 0) { + tprintf("%#lx", tcp->u_arg[2]); + } else { + tprintf("[%lu]", (unsigned long) len); + } + } + return 0; +} + static const struct xlat schedulers[] = { { SCHED_OTHER, "SCHED_OTHER" }, { SCHED_RR, "SCHED_RR" }, -- 2.40.0