Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Porting DTrace to ARM



Hi,

I'm working on porting DTrace to ARM.

The patch (*) is my WIP product on the work. It's not
still mature but it works anyway in some cases.

(*) https://gist.github.com/ozaki-r/8535846

I'm sending the patch because I would like to ask comments
and suggestions whether I'm going to the right direction.
Any comments and suggestions are appreciated.

Current status:
- The patch is tested on an AM3352 board
  - built with -m evbarm kernel=BEAGLEBONE
  - and it doesn't break builds of i386/amd64 and
    evbram w/o MKDTRACE=yes
- SDT works
- FBT works on 80% functions
  - ex. dtrace -n fbt::sys_open:return
- DScript doesn't work

Implementation notes:
- Undefined instructions are used to trap functions'
  entry/return
  - The least significant four bits are used to include
    the cond of a patched instruction
  - The cond is used to known quickly if the trapped
    instruction should be executed or not
- Unlike i386/amd64 versions, the dtrace trap handler
  is implemented as one of undefined_handlers as same
  as gdb
  - So the current implementation is slightly inefficient
- Unlike i386/amd64 versions, part of a patched
  instruction is returned by dtrace_probe to the trap
  handler to emulate the instruction correctly

The diffstat of the patch is:
$ diffstat dtrace-arm.patch
 common/lib/libc/arch/arm/string/ffs.S                |    2
 external/cddl/osnet/dev/cyclic/arm/cyclic_machdep.c  |  148 ++++++++
 external/cddl/osnet/dev/cyclic/i386/cyclic_machdep.c |    2
 external/cddl/osnet/dev/dtrace/arm/dtrace_asm.S      |   10
 external/cddl/osnet/dev/dtrace/arm/dtrace_isa.c      |   33 -
 external/cddl/osnet/dev/dtrace/arm/dtrace_subr.c     |  327
+++++++++++++++++--
 external/cddl/osnet/dev/dtrace/dtrace_debug.c        |   60 ---
 external/cddl/osnet/dev/fbt/fbt.c                    |  266 ++++++++++++++-
 external/cddl/osnet/dist/uts/common/dtrace/dtrace.c  |    2
 external/cddl/osnet/dist/uts/common/sys/dtrace.h     |   17
 external/cddl/osnet/sys/kern/opensolaris.c           |    2
 external/cddl/osnet/sys/sys/cpuvar.h                 |    3
 external/cddl/osnet/sys/sys/mount.h                  |    2
 sys/arch/arm/arm/undefined.c                         |  157 +++++++++
 sys/arch/arm/arm32/db_interface.c                    |    2
 sys/arch/arm/include/armreg.h                        |   39 ++
 sys/arch/arm/include/trap.h                          |    5
 sys/conf/files                                       |    2
 sys/modules/cyclic/Makefile                          |   10
 sys/modules/dtrace/dtrace/Makefile                   |   10
 20 files changed, 962 insertions(+), 137 deletions(-)

Thanks in advance,
  ozaki-r


Home | Main Index | Thread Index | Old Index