diff options
Diffstat (limited to 'patches/ltrace/0.5.2/120-debian-ltrace-0.5.2-2.patch')
-rw-r--r-- | patches/ltrace/0.5.2/120-debian-ltrace-0.5.2-2.patch | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/patches/ltrace/0.5.2/120-debian-ltrace-0.5.2-2.patch b/patches/ltrace/0.5.2/120-debian-ltrace-0.5.2-2.patch deleted file mode 100644 index 6d62315..0000000 --- a/patches/ltrace/0.5.2/120-debian-ltrace-0.5.2-2.patch +++ /dev/null @@ -1,240 +0,0 @@ ---- ltrace-0.5.2.orig/TODO -+++ ltrace-0.5.2/TODO -@@ -37,3 +37,4 @@ - * debug: change "-d" option to be something like "-d elf,events", or "-d breakpoints" - * Find out if a process is sharing memory with its parent? - * When using -p, find out if that process is sharing memory with other procs -+* After a clone(), syscalls may be seen as sysrets in s390 (see trace.c:syscall_p()) ---- ltrace-0.5.2.orig/process_event.c -+++ ltrace-0.5.2/process_event.c -@@ -170,7 +170,7 @@ - enable_breakpoint(proc->pid, proc->breakpoint_being_enabled); - proc->breakpoint_being_enabled = NULL; - } -- if (proc->parent->state == STATE_ATTACHED && options.follow) { -+ if (options.follow) { - proc->state = STATE_ATTACHED; - } else { - proc->state = STATE_IGNORED; ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/ppc/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/ppc/trace.c -@@ -50,9 +50,9 @@ - *sysnum = - (int)ptrace(PTRACE_PEEKUSER, proc->pid, - sizeof(long) * PT_R0, 0); -- if (proc->callstack_depth > 0 -- && proc->callstack[proc->callstack_depth - -- 1].is_syscall) { -+ if (proc->callstack_depth > 0 && -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } - return 1; ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/i386/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/i386/trace.c -@@ -32,7 +32,8 @@ - *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, 4 * ORIG_EAX, 0); - - if (proc->callstack_depth > 0 && -- proc->callstack[proc->callstack_depth - 1].is_syscall) { -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } - ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/ia64/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/ia64/trace.c -@@ -106,8 +106,8 @@ - if (insn == 0x1000000000 || insn == 0x1ffffffffff) { - *sysnum = r15; - if (proc->callstack_depth > 0 && -- proc->callstack[proc->callstack_depth - -- 1].is_syscall) { -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } - return 1; ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/m68k/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/m68k/trace.c -@@ -36,9 +36,8 @@ - if (*sysnum >= 0) { - depth = proc->callstack_depth; - if (depth > 0 && -- proc->callstack[depth - 1].is_syscall && -- proc->callstack[depth - 1].c_un.syscall == -- *sysnum) { -+ proc->callstack[depth - 1].is_syscall && -+ proc->callstack[depth - 1].c_un.syscall == *sysnum) { - return 2; - } else { - return 1; ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/alpha/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/alpha/trace.c -@@ -36,8 +36,9 @@ - return 0; - *sysnum = - ptrace(PTRACE_PEEKUSER, proc->pid, 0 /* REG_R0 */ , 0); -- if (proc->callstack_depth > 0 -- && proc->callstack[proc->callstack_depth - 1].is_syscall) { -+ if (proc->callstack_depth > 0 && -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } - if (*sysnum >= 0 && *sysnum < 500) { ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/sparc/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/sparc/trace.c -@@ -33,9 +33,9 @@ - insn = ptrace(PTRACE_PEEKTEXT, proc->pid, ip, 0); - if ((insn & 0xc1f8007f) == 0x81d00010) { - *sysnum = ((proc_archdep *) proc->arch_ptr)->regs.r_g1; -- if ((proc->callstack_depth > 0) -- && proc->callstack[proc->callstack_depth - -- 1].is_syscall) { -+ if (proc->callstack_depth > 0 && -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } else if (*sysnum >= 0) { - return 1; ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/mipsel/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/mipsel/trace.c -@@ -60,33 +60,34 @@ - int - syscall_p(Process *proc, int status, int *sysnum) { - if (WIFSTOPPED(status) -- && WSTOPSIG(status) == (SIGTRAP | proc->tracesysgood)) { -- /* get the user's pc (plus 8) */ -- long pc = (long)get_instruction_pointer(proc); -- /* fetch the SWI instruction */ -- int insn = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 4, 0); -- int num = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 8, 0); -- --/* -- On a mipsel, syscall looks like: -- 24040fa1 li v0, 0x0fa1 # 4001 --> _exit syscall -- 0000000c syscall -- */ -- if(insn!=0x0000000c){ -- return 0; -- } -- -- *sysnum = (num & 0xFFFF) - 4000; -- /* if it is a syscall, return 1 or 2 */ -- if (proc->callstack_depth > 0 && -- proc->callstack[proc->callstack_depth - 1].is_syscall) { -- return 2; -- } -- -- if (*sysnum >= 0) { -- return 1; -- } -- } -+ && WSTOPSIG(status) == (SIGTRAP | proc->tracesysgood)) { -+ /* get the user's pc (plus 8) */ -+ long pc = (long)get_instruction_pointer(proc); -+ /* fetch the SWI instruction */ -+ int insn = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 4, 0); -+ int num = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 8, 0); -+ -+ /* -+ On a mipsel, syscall looks like: -+ 24040fa1 li v0, 0x0fa1 # 4001 --> _exit syscall -+ 0000000c syscall -+ */ -+ if(insn!=0x0000000c){ -+ return 0; -+ } -+ -+ *sysnum = (num & 0xFFFF) - 4000; -+ /* if it is a syscall, return 1 or 2 */ -+ if (proc->callstack_depth > 0 && -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { -+ return 2; -+ } -+ -+ if (*sysnum >= 0) { -+ return 1; -+ } -+ } - return 0; - } - /** -@@ -119,34 +120,34 @@ - */ - long - gimme_arg(enum tof type, Process *proc, int arg_num, arg_type_info *info) { -- long ret; -- debug(2,"type %d arg %d",type,arg_num); -- if (type == LT_TOF_FUNCTION || type == LT_TOF_SYSCALL){ -- if(arg_num <4){ -- ret=ptrace(PTRACE_PEEKUSER,proc->pid,off_a0+arg_num,0); -- debug(2,"ret = %#lx",ret); -- return ret; -- } else { -- // If we need this, I think we can look at [sp+16] for arg_num==4. -- CP; -- return 0; -- } -- } -- if(arg_num>=0){ -- fprintf(stderr,"args on return?"); -- } -- if(type == LT_TOF_FUNCTIONR) { -- return ptrace(PTRACE_PEEKUSER,proc->pid,off_v0,0); -- } -- if (type == LT_TOF_SYSCALLR) { -- unsigned a3=ptrace(PTRACE_PEEKUSER, proc->pid,off_a3,0); -- unsigned v0=ptrace(PTRACE_PEEKUSER, proc->pid,off_v0,0); -- if(!a3){ -- return v0; -- } -- return -1; -- } -- fprintf(stderr, "gimme_arg called with wrong arguments\n"); -+ long ret; -+ debug(2,"type %d arg %d",type,arg_num); -+ if (type == LT_TOF_FUNCTION || type == LT_TOF_SYSCALL){ -+ if(arg_num <4){ -+ ret=ptrace(PTRACE_PEEKUSER,proc->pid,off_a0+arg_num,0); -+ debug(2,"ret = %#lx",ret); -+ return ret; -+ } else { -+ // If we need this, I think we can look at [sp+16] for arg_num==4. -+ CP; -+ return 0; -+ } -+ } -+ if(arg_num>=0){ -+ fprintf(stderr,"args on return?"); -+ } -+ if(type == LT_TOF_FUNCTIONR) { -+ return ptrace(PTRACE_PEEKUSER,proc->pid,off_v0,0); -+ } -+ if (type == LT_TOF_SYSCALLR) { -+ unsigned a3=ptrace(PTRACE_PEEKUSER, proc->pid,off_a3,0); -+ unsigned v0=ptrace(PTRACE_PEEKUSER, proc->pid,off_v0,0); -+ if(!a3){ -+ return v0; -+ } -+ return -1; -+ } -+ fprintf(stderr, "gimme_arg called with wrong arguments\n"); - return 0; - } - ---- ltrace-0.5.2.orig/sysdeps/linux-gnu/x86_64/trace.c -+++ ltrace-0.5.2/sysdeps/linux-gnu/x86_64/trace.c -@@ -41,7 +41,8 @@ - *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, 8 * ORIG_RAX, 0); - - if (proc->callstack_depth > 0 && -- proc->callstack[proc->callstack_depth - 1].is_syscall) { -+ proc->callstack[proc->callstack_depth - 1].is_syscall && -+ proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) { - return 2; - } - |