]> granicus.if.org Git - strace/commitdiff
Implement kcmp syscall decoding
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 22 Nov 2015 18:35:27 +0000 (18:35 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 22 Nov 2015 23:10:12 +0000 (23:10 +0000)
* kcmp.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* linux/dummy.h (sys_kcmp): Remove stub alias.
* xlat/kcmp_types.in: New file.

Makefile.am
kcmp.c [new file with mode: 0644]
linux/dummy.h
xlat/kcmp_types.in [new file with mode: 0644]

index f4271adcd7f8cc60af02be988f21d638f216e34b..92dbc10b4c6b401115e22636fb36ebd27ca980be 100644 (file)
@@ -82,6 +82,7 @@ strace_SOURCES =      \
        ipc_sem.c       \
        ipc_shm.c       \
        ipc_shmctl.c    \
+       kcmp.c          \
        kexec.c         \
        keyctl.c        \
        ldt.c           \
diff --git a/kcmp.c b/kcmp.c
new file mode 100644 (file)
index 0000000..aba5a61
--- /dev/null
+++ b/kcmp.c
@@ -0,0 +1,31 @@
+#include "defs.h"
+#include "xlat/kcmp_types.h"
+
+SYS_FUNC(kcmp)
+{
+       pid_t pid1 = tcp->u_arg[0];
+       pid_t pid2 = tcp->u_arg[1];
+       int type = tcp->u_arg[2];
+       unsigned long idx1 = tcp->u_arg[3];
+       unsigned long idx2 = tcp->u_arg[4];
+
+       tprintf("%d, %d, ", pid1, pid2);
+       printxval(kcmp_types, type, "KCMP_???");
+
+       switch(type) {
+               case KCMP_FILE:
+                       tprintf(", %u, %u", (unsigned) idx1, (unsigned) idx2);
+                       break;
+               case KCMP_FILES:
+               case KCMP_FS:
+               case KCMP_IO:
+               case KCMP_SIGHAND:
+               case KCMP_SYSVSEM:
+               case KCMP_VM:
+                       break;
+               default:
+                       tprintf(", %#lx, %#lx", idx1, idx2);
+       }
+
+       return RVAL_DECODED;
+}
index 65f6f245ba529977692979756ebc81cbbe9aeb3b..e994745744da2aef3340c779082c6d0640cda882 100644 (file)
@@ -32,7 +32,6 @@
 #endif
 
 /* still unfinished */
-#define        sys_kcmp                printargs
 #define        sys_kexec_file_load     printargs
 #define        sys_lookup_dcookie      printargs
 #define        sys_name_to_handle_at   printargs
diff --git a/xlat/kcmp_types.in b/xlat/kcmp_types.in
new file mode 100644 (file)
index 0000000..4357776
--- /dev/null
@@ -0,0 +1,7 @@
+KCMP_FILE      0
+KCMP_VM                1
+KCMP_FILES     2
+KCMP_FS                3
+KCMP_SIGHAND   4
+KCMP_IO                5
+KCMP_SYSVSEM   6