From 809ee3e46c8bbcc47d81e86e8237afc085f77ea9 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 12 May 2016 15:45:24 +0000 Subject: [PATCH] ptrace: decode addr argument of PTRACE_PEEKSIGINFO request 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 | 19 +++++++++++++++++++ xlat/ptrace_peeksiginfo_flags.in | 1 + 2 files changed, 20 insertions(+) create mode 100644 xlat/ptrace_peeksiginfo_flags.in diff --git a/process.c b/process.c index 3f10a891..520711b7 100644 --- 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 index 00000000..28a4c222 --- /dev/null +++ b/xlat/ptrace_peeksiginfo_flags.in @@ -0,0 +1 @@ +PTRACE_PEEKSIGINFO_SHARED 1