This is the mail archive of the frysk@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fstep added


Hi,

I finally added my little fstep program. It is certainly not complete,
and I am not sure it is a much use as is now since it makes programs
really, really slow. But it is a nice start for the future. You can use
it as follows:

$ frysk/bindir/fstep -i 5 -s 15000 /bin/echo

Which means, execute /bin/echo, print 5 instructions, every 15000 steps.
And gives the following output:

[30788] 0x3375dff160    add    $0x18,%rcx
[30788] 0x3375dff164    cmp    %rcx,%rsi
[30788] 0x3375dff167    jbe    0x3375dff1d8
[30788] 0x3375dff169    movzbl 0x4(%rcx),%edx
[30788] 0x3375dff16d    mov    %edx,%eax
[30788] 0x3375dff17e    cmp    $0x6,%eax
[30788] 0x3375dff181    je     0x3375dff160
[30788] 0x3375dff183    movzwl 0x6(%rcx),%edx
[30788] 0x3375dff187    test   %dx,%dx
[30788] 0x3375dff18a    jne    0x3375dff193
[30788] 0x3375dff169    movzbl 0x4(%rcx),%edx
[30788] 0x3375dff16d    mov    %edx,%eax
[30788] 0x3375dff16f    shr    $0x4,%al
[30788] 0x3375dff172    sub    $0x1,%eax
[30788] 0x3375dff175    cmp    $0x1,%al
[30788] 0x3375d271d5    add    0xfffffffffffffee8(%rbp),%rax
[30788] 0x3375d271dc    add    $0x1,%edi
[30788] 0x3375d271df    shl    $0x4,%rdx
[30788] 0x3375d271e3    mov    %esi,%esi
[30788] 0x3375d271e5    cmp    $0xc,%edi
[30788] 0x3375d73f8b    sub    $0x1,%rdx
[30788] 0x3375d73f8f    je     0x3375d73f20
[30788] 0x3375d73f91    movzbl 0x1(%r8,%rdi,1),%eax
[30788] 0x3375d73f97    movzbl 0x1(%r8,%rsi,1),%ecx
[30788] 0x3375d73f9d    add    $0x1,%r8

Total steps [30788]: 86545

You can also attach it to a running process with --pid.

The following things can/should be improved:

- It is currently build right on top of the Instruction TaskObserver. It
might be better to build it on top of the new rt framework. The rt
framework can probably also handle stepping over locking sequences like
on ppc (lwarx/stwcx).

- It only steps the main task. Plumbing is in place to track other
Tasks, but nothing is connected to that yet.

- Maybe merge it completely with ftrace?

- It is partially so slow because it accesses the Task memory for every
disassambly. Maybe that can be cached? Although instruction stepping is
just slow in general. An alternative could be combining stepping with
breakpoints set on "interesting functions". Or only stepping while in
the main program map, and not in any of the shared library maps?

- It could give the name of the memory map the PC is currently in.

- It could even give the source/line-number if available.

Note that I have marked the original tracker bug as suspended.
http://sourceware.org/bugzilla/show_bug.cgi?id=3364
If any of the above is useful they should probably be raised as bugs and
depend on #3364.

Cheers,

Mark


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]