Did you try latest Git of ltrace on ARM arch? - Sedat -
http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=summary On Wed, Mar 6, 2013 at 4:47 PM, Greg Alexander <[email protected]> wrote: > Hi all - > > Thanks for work on ltrace, it is fabulous. > > I am using Debian on armhf, and I built ltrace from > ltrace_0.5.3.orig.tar.gz that I downloaded from the Debian pool. > I found a few problems on this target, and corrected them. The patches > aren't long so I'm just going to append them at the bottom of this email, > but let me know if I should have done something different. > > First patch corrects a build problem, header files were included in the > wrong order, so just use "common.h" instead. > > Second patch corrects syscall tracing. For whatever reason, my EABI > syscalls calls are using the ARM-Thumb encoding of the SWI/SVC > instruction, so I just added a condition for that. > > Third patch provides fallback behavior if PTRACE_SINGLESTEP is > unavailable. There is a #if to check for __sparc__ or __ia64__ to avoid > PTRACE_SINGLESTEP, and I left that alone, but probably it should go away > too. My patch tries PTRACE_SINGLESTEP, but if -1 is returned then it > falls back to the same behavior as on sparc/ia64. I think that is a > better solution than adding __arm__ to the #if, because if the kernel > does change to support PTRACE_SINGLESTEP here, it will not be any more > work for ltrace to support it. > > Thank you! > - Greg > > > --- ltrace-0.5.3.orig/sysdeps/linux-gnu/arm/breakpoint.c 2009-07-25 > 11:13:02.000000000 -0400 > +++ ltrace-0.5.3/sysdeps/linux-gnu/arm/breakpoint.c 2013-03-06 > 09:21:41.803584766 -0500 > @@ -25,9 +25,7 @@ > #include <sys/ptrace.h> > #include "config.h" > #include "arch.h" > -#include "options.h" > -#include "output.h" > -#include "debug.h" > +#include "common.h" > > void > arch_enable_breakpoint(pid_t pid, Breakpoint *sbp) { > --- ltrace-0.5.3.orig/sysdeps/linux-gnu/arm/trace.c 2009-07-25 > 11:13:02.000000000 -0400 > +++ ltrace-0.5.3/sysdeps/linux-gnu/arm/trace.c 2013-03-06 09:41:38.078585339 > -0500 > @@ -52,6 +52,9 @@ > if (insn == 0xef000000 || insn == 0x0f000000) { > /* EABI syscall */ > *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, off_r7, > 0); > + } else if ((insn & 0xffff0000) == 0xdf000000) { > + /* EABI syscall "encoding T1" (thumb) */ > + *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, off_r7, > 0); > } else if ((insn & 0xfff00000) == 0xef900000) { > /* old ABI syscall */ > *sysnum = insn & 0xfffff; > --- ltrace-0.5.3.orig/sysdeps/linux-gnu/trace.c 2009-07-25 11:13:02.000000000 > -0400 > +++ ltrace-0.5.3/sysdeps/linux-gnu/trace.c 2013-03-06 10:26:15.368586617 > -0500 > @@ -122,7 +122,10 @@ > #if defined __sparc__ || defined __ia64___ > ptrace(PTRACE_SYSCALL, pid, 0, signum); > #else > - ptrace(PTRACE_SINGLESTEP, pid, 0, signum); > + if (ptrace(PTRACE_SINGLESTEP, pid, 0, signum) == -1) { > + ptrace(PTRACE_SYSCALL, pid, 0, signum); > + } > + > #endif > } else { > ptrace(PTRACE_SYSCALL, pid, 0, signum); > @@ -158,7 +161,9 @@ > /* we don't want to singlestep here */ > continue_process(proc->pid); > #else > - ptrace(PTRACE_SINGLESTEP, proc->pid, 0, 0); > + if (ptrace(PTRACE_SINGLESTEP, proc->pid, 0, 0) == -1) { > + continue_process(proc->pid); > + } > #endif > } > } > > _______________________________________________ > Ltrace-devel mailing list > [email protected] > http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/ltrace-devel _______________________________________________ Ltrace-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/ltrace-devel
