]> granicus.if.org Git - strace/commitdiff
process.c: move futex parser to a separate file
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 11 Dec 2014 19:25:02 +0000 (19:25 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 11 Dec 2014 19:25:02 +0000 (19:25 +0000)
* futex.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* process.c: Move sys_futex and related code to futex.c.

Makefile.am
futex.c [new file with mode: 0644]
process.c

index 917e08c7b07524fff07cdc09e253ec1692efcb5e..93421237ac17c3fb11920b0a333c2ee3cf245527 100644 (file)
@@ -34,6 +34,7 @@ strace_SOURCES =      \
        fallocate.c     \
        fanotify.c      \
        file.c          \
+       futex.c         \
        get_robust_list.c \
        getcpu.c        \
        getcwd.c        \
diff --git a/futex.c b/futex.c
new file mode 100644 (file)
index 0000000..a1781c0
--- /dev/null
+++ b/futex.c
@@ -0,0 +1,139 @@
+#include "defs.h"
+
+#ifdef HAVE_LINUX_FUTEX_H
+# include <linux/futex.h>
+#endif
+
+#ifndef FUTEX_WAIT
+# define FUTEX_WAIT 0
+#endif
+#ifndef FUTEX_WAKE
+# define FUTEX_WAKE 1
+#endif
+#ifndef FUTEX_FD
+# define FUTEX_FD 2
+#endif
+#ifndef FUTEX_REQUEUE
+# define FUTEX_REQUEUE 3
+#endif
+#ifndef FUTEX_CMP_REQUEUE
+# define FUTEX_CMP_REQUEUE 4
+#endif
+#ifndef FUTEX_WAKE_OP
+# define FUTEX_WAKE_OP 5
+#endif
+#ifndef FUTEX_LOCK_PI
+# define FUTEX_LOCK_PI 6
+# define FUTEX_UNLOCK_PI 7
+# define FUTEX_TRYLOCK_PI 8
+#endif
+#ifndef FUTEX_WAIT_BITSET
+# define FUTEX_WAIT_BITSET 9
+#endif
+#ifndef FUTEX_WAKE_BITSET
+# define FUTEX_WAKE_BITSET 10
+#endif
+#ifndef FUTEX_WAIT_REQUEUE_PI
+# define FUTEX_WAIT_REQUEUE_PI 11
+#endif
+#ifndef FUTEX_CMP_REQUEUE_PI
+# define FUTEX_CMP_REQUEUE_PI 12
+#endif
+#ifndef FUTEX_PRIVATE_FLAG
+# define FUTEX_PRIVATE_FLAG 128
+#endif
+#ifndef FUTEX_CLOCK_REALTIME
+# define FUTEX_CLOCK_REALTIME 256
+#endif
+#ifndef FUTEX_WAIT_PRIVATE
+# define FUTEX_WAIT_PRIVATE            (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_WAKE_PRIVATE
+# define FUTEX_WAKE_PRIVATE            (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_REQUEUE_PRIVATE
+# define FUTEX_REQUEUE_PRIVATE         (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_CMP_REQUEUE_PRIVATE
+# define FUTEX_CMP_REQUEUE_PRIVATE     (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_WAKE_OP_PRIVATE
+# define FUTEX_WAKE_OP_PRIVATE         (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_LOCK_PI_PRIVATE
+# define FUTEX_LOCK_PI_PRIVATE         (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_UNLOCK_PI_PRIVATE
+# define FUTEX_UNLOCK_PI_PRIVATE       (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_TRYLOCK_PI_PRIVATE
+# define FUTEX_TRYLOCK_PI_PRIVATE      (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_WAIT_BITSET_PRIVATE
+# define FUTEX_WAIT_BITSET_PRIVATE     (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_WAKE_BITSET_PRIVATE
+# define FUTEX_WAKE_BITSET_PRIVATE     (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_WAIT_REQUEUE_PI_PRIVATE
+# define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
+#endif
+#ifndef FUTEX_CMP_REQUEUE_PI_PRIVATE
+# define FUTEX_CMP_REQUEUE_PI_PRIVATE  (FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
+#endif
+#include "xlat/futexops.h"
+#ifndef FUTEX_OP_SET
+# define FUTEX_OP_SET          0
+# define FUTEX_OP_ADD          1
+# define FUTEX_OP_OR           2
+# define FUTEX_OP_ANDN         3
+# define FUTEX_OP_XOR          4
+# define FUTEX_OP_CMP_EQ       0
+# define FUTEX_OP_CMP_NE       1
+# define FUTEX_OP_CMP_LT       2
+# define FUTEX_OP_CMP_LE       3
+# define FUTEX_OP_CMP_GT       4
+# define FUTEX_OP_CMP_GE       5
+#endif
+#include "xlat/futexwakeops.h"
+#include "xlat/futexwakecmps.h"
+
+int
+sys_futex(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               long int cmd = tcp->u_arg[1] & 127;
+               tprintf("%p, ", (void *) tcp->u_arg[0]);
+               printxval(futexops, tcp->u_arg[1], "FUTEX_???");
+               tprintf(", %ld", tcp->u_arg[2]);
+               if (cmd == FUTEX_WAKE_BITSET)
+                       tprintf(", %lx", tcp->u_arg[5]);
+               else if (cmd == FUTEX_WAIT) {
+                       tprints(", ");
+                       printtv(tcp, tcp->u_arg[3]);
+               } else if (cmd == FUTEX_WAIT_BITSET) {
+                       tprints(", ");
+                       printtv(tcp, tcp->u_arg[3]);
+                       tprintf(", %lx", tcp->u_arg[5]);
+               } else if (cmd == FUTEX_REQUEUE)
+                       tprintf(", %ld, %p", tcp->u_arg[3], (void *) tcp->u_arg[4]);
+               else if (cmd == FUTEX_CMP_REQUEUE || cmd == FUTEX_CMP_REQUEUE_PI)
+                       tprintf(", %ld, %p, %ld", tcp->u_arg[3], (void *) tcp->u_arg[4], tcp->u_arg[5]);
+               else if (cmd == FUTEX_WAKE_OP) {
+                       tprintf(", %ld, %p, {", tcp->u_arg[3], (void *) tcp->u_arg[4]);
+                       if ((tcp->u_arg[5] >> 28) & 8)
+                               tprints("FUTEX_OP_OPARG_SHIFT|");
+                       printxval(futexwakeops, (tcp->u_arg[5] >> 28) & 0x7, "FUTEX_OP_???");
+                       tprintf(", %ld, ", (tcp->u_arg[5] >> 12) & 0xfff);
+                       if ((tcp->u_arg[5] >> 24) & 8)
+                               tprints("FUTEX_OP_OPARG_SHIFT|");
+                       printxval(futexwakecmps, (tcp->u_arg[5] >> 24) & 0x7, "FUTEX_OP_CMP_???");
+                       tprintf(", %ld}", tcp->u_arg[5] & 0xfff);
+               } else if (cmd == FUTEX_WAIT_REQUEUE_PI) {
+                       tprints(", ");
+                       printtv(tcp, tcp->u_arg[3]);
+                       tprintf(", %p", (void *) tcp->u_arg[4]);
+               }
+       }
+       return 0;
+}
index 46b980f02af0137b5a602878e23553405f9e1107..0536227854c9bac5e551e8289f47da8757f58b73 100644 (file)
--- a/process.c
+++ b/process.c
 # define PTRACE_SETREGS PTRACE_SETREGS64
 #endif
 
-#ifdef HAVE_LINUX_FUTEX_H
-# include <linux/futex.h>
-#endif
-#ifndef FUTEX_WAIT
-# define FUTEX_WAIT 0
-#endif
-#ifndef FUTEX_WAKE
-# define FUTEX_WAKE 1
-#endif
-#ifndef FUTEX_FD
-# define FUTEX_FD 2
-#endif
-#ifndef FUTEX_REQUEUE
-# define FUTEX_REQUEUE 3
-#endif
-
 #include <asm/posix_types.h>
 #undef GETGROUPS_T
 #define GETGROUPS_T __kernel_gid_t
@@ -2079,125 +2063,3 @@ sys_ptrace(struct tcb *tcp)
        }
        return 0;
 }
-
-#ifndef FUTEX_CMP_REQUEUE
-# define FUTEX_CMP_REQUEUE 4
-#endif
-#ifndef FUTEX_WAKE_OP
-# define FUTEX_WAKE_OP 5
-#endif
-#ifndef FUTEX_LOCK_PI
-# define FUTEX_LOCK_PI 6
-# define FUTEX_UNLOCK_PI 7
-# define FUTEX_TRYLOCK_PI 8
-#endif
-#ifndef FUTEX_WAIT_BITSET
-# define FUTEX_WAIT_BITSET 9
-#endif
-#ifndef FUTEX_WAKE_BITSET
-# define FUTEX_WAKE_BITSET 10
-#endif
-#ifndef FUTEX_WAIT_REQUEUE_PI
-# define FUTEX_WAIT_REQUEUE_PI 11
-#endif
-#ifndef FUTEX_CMP_REQUEUE_PI
-# define FUTEX_CMP_REQUEUE_PI 12
-#endif
-#ifndef FUTEX_PRIVATE_FLAG
-# define FUTEX_PRIVATE_FLAG 128
-#endif
-#ifndef FUTEX_CLOCK_REALTIME
-# define FUTEX_CLOCK_REALTIME 256
-#endif
-#ifndef FUTEX_WAIT_PRIVATE
-# define FUTEX_WAIT_PRIVATE            (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_WAKE_PRIVATE
-# define FUTEX_WAKE_PRIVATE            (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_REQUEUE_PRIVATE
-# define FUTEX_REQUEUE_PRIVATE         (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_CMP_REQUEUE_PRIVATE
-# define FUTEX_CMP_REQUEUE_PRIVATE     (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_WAKE_OP_PRIVATE
-# define FUTEX_WAKE_OP_PRIVATE         (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_LOCK_PI_PRIVATE
-# define FUTEX_LOCK_PI_PRIVATE         (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_UNLOCK_PI_PRIVATE
-# define FUTEX_UNLOCK_PI_PRIVATE       (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_TRYLOCK_PI_PRIVATE
-# define FUTEX_TRYLOCK_PI_PRIVATE      (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_WAIT_BITSET_PRIVATE
-# define FUTEX_WAIT_BITSET_PRIVATE     (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_WAKE_BITSET_PRIVATE
-# define FUTEX_WAKE_BITSET_PRIVATE     (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_WAIT_REQUEUE_PI_PRIVATE
-# define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
-#endif
-#ifndef FUTEX_CMP_REQUEUE_PI_PRIVATE
-# define FUTEX_CMP_REQUEUE_PI_PRIVATE  (FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
-#endif
-#include "xlat/futexops.h"
-#ifndef FUTEX_OP_SET
-# define FUTEX_OP_SET          0
-# define FUTEX_OP_ADD          1
-# define FUTEX_OP_OR           2
-# define FUTEX_OP_ANDN         3
-# define FUTEX_OP_XOR          4
-# define FUTEX_OP_CMP_EQ       0
-# define FUTEX_OP_CMP_NE       1
-# define FUTEX_OP_CMP_LT       2
-# define FUTEX_OP_CMP_LE       3
-# define FUTEX_OP_CMP_GT       4
-# define FUTEX_OP_CMP_GE       5
-#endif
-#include "xlat/futexwakeops.h"
-#include "xlat/futexwakecmps.h"
-
-int
-sys_futex(struct tcb *tcp)
-{
-       if (entering(tcp)) {
-               long int cmd = tcp->u_arg[1] & 127;
-               tprintf("%p, ", (void *) tcp->u_arg[0]);
-               printxval(futexops, tcp->u_arg[1], "FUTEX_???");
-               tprintf(", %ld", tcp->u_arg[2]);
-               if (cmd == FUTEX_WAKE_BITSET)
-                       tprintf(", %lx", tcp->u_arg[5]);
-               else if (cmd == FUTEX_WAIT) {
-                       tprints(", ");
-                       printtv(tcp, tcp->u_arg[3]);
-               } else if (cmd == FUTEX_WAIT_BITSET) {
-                       tprints(", ");
-                       printtv(tcp, tcp->u_arg[3]);
-                       tprintf(", %lx", tcp->u_arg[5]);
-               } else if (cmd == FUTEX_REQUEUE)
-                       tprintf(", %ld, %p", tcp->u_arg[3], (void *) tcp->u_arg[4]);
-               else if (cmd == FUTEX_CMP_REQUEUE || cmd == FUTEX_CMP_REQUEUE_PI)
-                       tprintf(", %ld, %p, %ld", tcp->u_arg[3], (void *) tcp->u_arg[4], tcp->u_arg[5]);
-               else if (cmd == FUTEX_WAKE_OP) {
-                       tprintf(", %ld, %p, {", tcp->u_arg[3], (void *) tcp->u_arg[4]);
-                       if ((tcp->u_arg[5] >> 28) & 8)
-                               tprints("FUTEX_OP_OPARG_SHIFT|");
-                       printxval(futexwakeops, (tcp->u_arg[5] >> 28) & 0x7, "FUTEX_OP_???");
-                       tprintf(", %ld, ", (tcp->u_arg[5] >> 12) & 0xfff);
-                       if ((tcp->u_arg[5] >> 24) & 8)
-                               tprints("FUTEX_OP_OPARG_SHIFT|");
-                       printxval(futexwakecmps, (tcp->u_arg[5] >> 24) & 0x7, "FUTEX_OP_CMP_???");
-                       tprintf(", %ld}", tcp->u_arg[5] & 0xfff);
-               } else if (cmd == FUTEX_WAIT_REQUEUE_PI) {
-                       tprints(", ");
-                       printtv(tcp, tcp->u_arg[3]);
-                       tprintf(", %p", (void *) tcp->u_arg[4]);
-               }
-       }
-       return 0;
-}