]> granicus.if.org Git - strace/commitdiff
ptrace: decode addr argument of PTRACE_PEEKSIGINFO request
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 12 May 2016 15:45:24 +0000 (15:45 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 12 May 2016 15:45:24 +0000 (15:45 +0000)
The addr argument of PTRACE_PEEKSIGINFO request is a pointer to
a struct ptrace_peeksiginfo_args.

* process.c: Include "xlat/ptrace_peeksiginfo_flags.h".
(SYS_FUNC(ptrace)): Print addr argument of PTRACE_PEEKSIGINFO request
as a struct ptrace_peeksiginfo_args.
* xlat/ptrace_peeksiginfo_flags.in: New file.

process.c
xlat/ptrace_peeksiginfo_flags.in [new file with mode: 0644]

index 3f10a8916b7041e9eb275bb2c0e44dfd91b1d412..520711b73e54fa2e8d5507e01420691af505dab0 100644 (file)
--- a/process.c
+++ b/process.c
@@ -46,6 +46,7 @@
 #include "ptrace.h"
 #include "xlat/ptrace_cmds.h"
 #include "xlat/ptrace_setoptions_flags.h"
+#include "xlat/ptrace_peeksiginfo_flags.h"
 
 #define uoff(member)   offsetof(struct user, member)
 #define XLAT_UOFF(member)      { uoff(member), "offsetof(struct user, " #member ")" }
@@ -122,6 +123,24 @@ SYS_FUNC(ptrace)
                case PTRACE_SECCOMP_GET_FILTER:
                        tprintf(", %lu", addr);
                        break;
+               case PTRACE_PEEKSIGINFO: {
+                       tprints(", ");
+                       struct {
+                               uint64_t off;
+                               uint32_t flags;
+                               uint32_t nr;
+                       } psi;
+                       if (umove_or_printaddr(tcp, addr, &psi)) {
+                               tprints(", ");
+                               printaddr(data);
+                               return RVAL_DECODED;
+                       }
+                       tprintf("{off=%" PRIu64 ", flags=", psi.off);
+                       printflags(ptrace_peeksiginfo_flags, psi.flags,
+                                  "PTRACE_PEEKSIGINFO_???");
+                       tprintf(", nr=%u}", psi.nr);
+                       break;
+               }
 #if defined SPARC || defined SPARC64
                case PTRACE_GETREGS:
                case PTRACE_SETREGS:
diff --git a/xlat/ptrace_peeksiginfo_flags.in b/xlat/ptrace_peeksiginfo_flags.in
new file mode 100644 (file)
index 0000000..28a4c22
--- /dev/null
@@ -0,0 +1 @@
+PTRACE_PEEKSIGINFO_SHARED 1