[Ltrace-devel] 3 patches for ltrace - fixes "armhf" target
Greg Alexander
ltracedeb at galexander.org
Wed Mar 6 18:18:14 UTC 2013
Hi -
Thanks, I got the git tree now. I am surprised how far ahead of
debian-unstable it is.
The build problem and syscall tracing have both already been fixed. :)
The PTRACE_SINGLESTEP issue remains:
26753 couldn't continue when handling __libc_start_main (0x9e88) at 0x9e88
This part of ltrace is much more sophisticated than it was at 0.5.3, so
it will take me a while to work around it. With any luck, I'll have a
proposal soon.
Thanks,
- Greg
On Wed, Mar 06, 2013 at 06:38:11PM +0100, Sedat Dilek wrote:
> 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 <ltracedeb at galexander.org> 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
> > Ltrace-devel at lists.alioth.debian.org
> > http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/ltrace-devel
More information about the Ltrace-devel
mailing list