]> granicus.if.org Git - strace/commitdiff
Implement get_robust_list syscall decoder
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 11 Mar 2012 22:32:26 +0000 (22:32 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 11 Mar 2012 22:32:26 +0000 (22:32 +0000)
* 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
linux/syscall.h
process.c

index e9e6f4b70646be64d1bfaa5689dc81521e30ce4a..8477015e6fc80966ac86c4d90b595b208158d27f 100644 (file)
@@ -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
index 7a66c840bd2e49f1f3ce79863f41631f9d394b64..c565776e809e0ebe94a83e896259782ff4b7e864 100644 (file)
@@ -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();
index a9b0eb30ad4ca8aa35960027454003c669345d73..0393288e8d13656e2bb6bdba28f6004543211497 100644 (file)
--- 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" },