]> granicus.if.org Git - strace/commitdiff
Add definitions for PTRACE_GET_SYSCALL_INFO API
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 21 Nov 2018 01:44:16 +0000 (01:44 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 13 Dec 2018 22:07:26 +0000 (22:07 +0000)
Provide fallback definitions for PTRACE_GET_SYSCALL_INFO API.
Add very basic PTRACE_GET_SYSCALL_INFO support in the parser
of ptrace syscall.

* ptrace.h: Include <stdint.h>.
[!PTRACE_GET_SYSCALL_INFO] (PTRACE_GET_SYSCALL_INFO,
PTRACE_SYSCALL_INFO_NONE, PTRACE_SYSCALL_INFO_ENTRY,
PTRACE_SYSCALL_INFO_EXIT, PTRACE_SYSCALL_INFO_SECCOMP,
struct ptrace_syscall_info): Define.
* xlat/ptrace_cmds.in: Add PTRACE_GET_SYSCALL_INFO.
* process.c (SYS_FUNC(ptrace)): Handle it.

process.c
ptrace.h
xlat/ptrace_cmds.in

index 562921d79517c058af7dcd43b014a1d7fe2b6239..04b2a11427fa23ac01ca4845dda2e37933215a38 100644 (file)
--- a/process.c
+++ b/process.c
@@ -111,6 +111,7 @@ SYS_FUNC(ptrace)
                case PTRACE_SETSIGMASK:
                case PTRACE_SECCOMP_GET_FILTER:
                case PTRACE_SECCOMP_GET_METADATA:
+               case PTRACE_GET_SYSCALL_INFO:
                        tprintf(", %" PRI_klu, addr);
                        break;
                case PTRACE_PEEKSIGINFO: {
index fe3d8b9649a2756c525fe562b56efb367d2f6464..89d4b95dc1381aab4164c80582816b4f6631f35a 100644 (file)
--- a/ptrace.h
+++ b/ptrace.h
@@ -17,6 +17,7 @@
 #ifndef STRACE_PTRACE_H
 #define STRACE_PTRACE_H
 
+#include <stdint.h>
 #include <sys/ptrace.h>
 
 #ifdef HAVE_STRUCT_IA64_FPREG
 #ifndef PTRACE_SECCOMP_GET_METADATA
 # define PTRACE_SECCOMP_GET_METADATA   0x420d
 #endif
+#ifndef PTRACE_GET_SYSCALL_INFO
+# define PTRACE_GET_SYSCALL_INFO       0x420e
+# define PTRACE_SYSCALL_INFO_NONE      0
+# define PTRACE_SYSCALL_INFO_ENTRY     1
+# define PTRACE_SYSCALL_INFO_EXIT      2
+# define PTRACE_SYSCALL_INFO_SECCOMP   3
+struct ptrace_syscall_info {
+       uint8_t op;
+       uint8_t pad[3];
+       uint32_t arch;
+       uint64_t instruction_pointer;
+       uint64_t stack_pointer;
+       union {
+               struct {
+                       uint64_t nr;
+                       uint64_t args[6];
+               } entry;
+               struct {
+                       int64_t rval;
+                       uint8_t is_error;
+               } exit;
+               struct {
+                       uint64_t nr;
+                       uint64_t args[6];
+                       uint32_t ret_data;
+               } seccomp;
+       };
+};
+#endif
 
 #if !HAVE_DECL_PTRACE_PEEKUSER
 # define PTRACE_PEEKUSER PTRACE_PEEKUSR
index da7030d41a4a1f20dfb48f38616248ec6f3e8be7..3840f3467c55f2dc10f05138f1e335d1da9894ed 100644 (file)
@@ -34,6 +34,7 @@ PTRACE_GETSIGMASK
 PTRACE_SETSIGMASK
 PTRACE_SECCOMP_GET_FILTER
 PTRACE_SECCOMP_GET_METADATA
+PTRACE_GET_SYSCALL_INFO
 /* arch-specific */
 PTRACE_GET_THREAD_AREA
 PTRACE_SET_THREAD_AREA