summaryrefslogtreecommitdiff
path: root/packages/strace/4.10/008_decode_mips_indirect_syscall.patch
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2017-07-13 07:38:03 (GMT)
committerGitHub <noreply@github.com>2017-07-13 07:38:03 (GMT)
commit45c5bb0f484cba724be2c6105801dcce9a1a82d9 (patch)
tree8fd1c8eaa2ef203009d72b6ca6348611dcc5ee1c /packages/strace/4.10/008_decode_mips_indirect_syscall.patch
parent8f8e131d566af1f577d8fb6e62e6f121b7955472 (diff)
parentb32fcf7c1eea890a2bd3f88487f818ba241aabb1 (diff)
Merge pull request #767 from stilor/packages
Packages
Diffstat (limited to 'packages/strace/4.10/008_decode_mips_indirect_syscall.patch')
-rw-r--r--packages/strace/4.10/008_decode_mips_indirect_syscall.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/packages/strace/4.10/008_decode_mips_indirect_syscall.patch b/packages/strace/4.10/008_decode_mips_indirect_syscall.patch
new file mode 100644
index 0000000..d2d7217
--- /dev/null
+++ b/packages/strace/4.10/008_decode_mips_indirect_syscall.patch
@@ -0,0 +1,65 @@
+commit f34b97f89dd3893ef3652a6899487771402fc13c
+Index: strace-4.10/linux/mips/syscallent-o32.h
+===================================================================
+--- strace-4.10.orig/linux/mips/syscallent-o32.h
++++ strace-4.10/linux/mips/syscallent-o32.h
+@@ -1,6 +1,6 @@
+ #if defined LINUX_MIPSO32
+ /* For an O32 strace, decode the o32 syscalls. */
+-[4000] = { MA, 0, printargs, "syscall" }, /* start of Linux o32 */
++[4000] = { MA, 0, sys_syscall, "syscall" }, /* start of Linux o32 */
+ [4001] = { 1, TP|SE, sys_exit, "exit" },
+ [4002] = { 0, TP, sys_fork, "fork" },
+ [4003] = { 3, TD, sys_read, "read" },
+Index: strace-4.10/syscall.c
+===================================================================
+--- strace-4.10.orig/syscall.c
++++ strace-4.10/syscall.c
+@@ -606,6 +606,25 @@ decode_ipc_subcall(struct tcb *tcp)
+ }
+ #endif
+
++#ifdef LINUX_MIPSO32
++static void
++decode_mips_subcall(struct tcb *tcp)
++{
++ if (!SCNO_IS_VALID(tcp->u_arg[0]))
++ return;
++ tcp->scno = tcp->u_arg[0];
++ tcp->qual_flg = qual_flags[tcp->scno];
++ tcp->s_ent = &sysent[tcp->scno];
++ memmove(&tcp->u_arg[0], &tcp->u_arg[1],
++ sizeof(tcp->u_arg) - sizeof(tcp->u_arg[0]));
++}
++
++int sys_syscall(struct tcb *tcp)
++{
++ return printargs(tcp);
++}
++#endif
++
+ int
+ printargs(struct tcb *tcp)
+ {
+@@ -1774,6 +1793,11 @@ trace_syscall_entering(struct tcb *tcp)
+ goto ret;
+ }
+
++#ifdef LINUX_MIPSO32
++ if (sys_syscall == tcp->s_ent->sys_func)
++ decode_mips_subcall(tcp);
++#endif
++
+ if ( sys_execve == tcp->s_ent->sys_func
+ # if defined(SPARC) || defined(SPARC64)
+ || sys_execv == tcp->s_ent->sys_func
+--- strace-4.10.orig/linux/syscall.h 2015-02-06 01:23:05.000000000 +0000
++++ strace-4.10/linux/syscall.h 2015-07-09 14:36:49.372494628 +0100
+@@ -277,6 +277,7 @@
+ int sys_symlinkat();
+ int sys_sync_file_range();
+ int sys_sync_file_range2();
++int sys_syscall();
+ int sys_sysctl();
+ int sys_sysinfo();
+ int sys_syslog();