diff options
Diffstat (limited to 'patches/strace/4.10/008_decode_mips_indirect_syscall.patch')
-rw-r--r-- | patches/strace/4.10/008_decode_mips_indirect_syscall.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/patches/strace/4.10/008_decode_mips_indirect_syscall.patch b/patches/strace/4.10/008_decode_mips_indirect_syscall.patch new file mode 100644 index 00000000..de0004cd --- /dev/null +++ b/patches/strace/4.10/008_decode_mips_indirect_syscall.patch @@ -0,0 +1,64 @@ +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(); |