-#!/usr/bin/sh
-
-# Use dtrace to trace the following syscalls of all "dt" processes:
-# open*, close, mkdir, [f]chmod, dup, [l|f]stat[64]
-
-
-dtrace='
-#pragma D option quiet
-
-dtrace:::BEGIN
-{
-}
-
-/******************************************************************************
- * open stuff
- */
-
-syscall::open*:entry
-/execname == "dt" && arg1 == 770/
-/* arg2 770 = O_RDWR|O_CREAT|O_TRUNC */
-{
- printf("%Y\t%d:\t%s(\"%s\", 0x%x(O_RDWR|O_CREAT|O_TRUNC), %04o)", walltimestamp, pid, probefunc, copyinstr(arg0), arg1, arg2);
-}
-
-syscall::open*:entry
-/execname == "dt" && arg1 != 770/
-{
- printf("%Y\t%d:\t%s(\"%s\", 0x%x, %04o)", walltimestamp, pid, probefunc, copyinstr(arg0), arg1, arg2);
-}
-
-syscall::open*:return
-/execname == "dt"/
-{
- printf("\t-> fd:%d\n", arg0);
-}
-
-/******************************************************************************
- * close stuff
- */
-
-syscall::close:entry
-/execname == "dt"/
-{
- printf("%Y\t%d:\t%s(fd:%d)", walltimestamp, pid, probefunc, arg0);
-}
-
-syscall::close:return
-/execname == "dt"/
-{
- printf("\t-> returned: %d\n", arg0);
-}
-
-/******************************************************************************
- * mkdir
- */
-
-syscall::mkdir:entry
-/execname == "dt"/
-{
- printf("%Y\t%d:\t%s(\"%s\", %04o)", walltimestamp, pid, probefunc, copyinstr(arg0), arg1);
-}
-
-syscall::mkdir:return
-/execname == "dt"/
-{
- printf("\t-> returned: %d\n", arg0);
-}
-
-
-/******************************************************************************
- * *chmod stuff
- */
-
-syscall::chmod:entry
-/execname == "dt"/
-{
- printf("%Y\t%d:\t%s(\"%s\", %04o)", walltimestamp, pid, probefunc, copyinstr(arg0), arg1);
-}
-
-syscall::chmod:return
-/execname == "dt"/
-{
- printf("\treturned: %d\n", arg0);
-}
-
-
-syscall::fchmod:entry
-/execname == "dt"/
-{
- printf("%Y\t%d:\t%s(fd: %d, %04o)", walltimestamp, pid, probefunc, arg0, arg1);
-}
-
-syscall::fchmod:return
-/execname == "dt"/
-{
- printf("\treturned: %d\n", arg0);
-}
-
-
-/******************************************************************************
- * *stat stuff
- */
-
-syscall::stat*:entry
-/execname == "dt"/
-{
- self->pathp = copyinstr(arg0);
- self->statptr = arg1;
- printf("%Y\t%d:\t%s(\"%s\")", walltimestamp, pid, probefunc, self->pathp);
-}
-
-syscall::lstat*:entry
-/execname == "dt"/
-{
- self->pathp = copyinstr(arg0);
- self->statptr = arg1;
- printf("%Y\t%d:\t%s(\"%s\")", walltimestamp, pid, probefunc, self->pathp);
-}
-
-syscall::fstat*:entry
-/execname == "dt"/
-{
- self->statptr = arg1;
- printf("%Y\t%d:\t%s(fd:%d)", walltimestamp, pid, probefunc, arg0);
-}
-
-
-/*** stat returns with ERROR ***/
-
-syscall::*stat:return
-/execname == "dt" && arg0 != 0/
-{
- printf("\t -> returned: %d, errno: %d\n", arg0, errno);
-}
-
-syscall::*stat64:return
-/execname == "dt" && arg0 != 0/
-{
- printf("\t -> returned: %d, errno: %d\n", arg0, errno);
-}
-
-/*** "*stat*" returns OK ***/
-
-syscall::*stat:return
-/execname == "dt" && arg0 == 0 && self->statptr != NULL && curpsinfo->pr_dmodel == PR_MODEL_ILP32/
-{
- self->stat32 = (struct stat32 *)copyin(self->statptr, sizeof(struct stat32));
- printf("\t-> size:%lld, mode:%04o\n", (long long)self->stat32->st_size, self->stat32->st_mode);
-}
-
-syscall::*stat:return
-/execname == "dt" && arg0 == 0 && self->statptr != NULL && curpsinfo->pr_dmodel == PR_MODEL_LP64/
-{
- self->stat64 = (struct stat *)copyin(self->statptr, sizeof(struct stat));
- printf("\t-> size:%lld, mode:%04o\n", (long long)self->stat64->st_size, self->stat64->st_mode);
-}
-
-syscall::*stat64:return
-/execname == "dt" && arg0 == 0 && self->statptr != NULL && curpsinfo->pr_dmodel == PR_MODEL_ILP32/
-{
- self->stat64_32 = (struct stat64_32 *)copyin(self->statptr, sizeof(struct stat64_32));
- printf("\t-> size:%lld, mode:%04o\n", (long long)self->stat64_32->st_size, self->stat64_32->st_mode);
-}
-
-syscall::*stat64:return
-/execname == "dt" && arg0 == 0 && self->statptr != NULL && curpsinfo->pr_dmodel == PR_MODEL_LP64/
-{
- self->stat64_64 = (struct stat64 *)copyin(self->statptr, sizeof(struct stat64));
- printf("\t-> size:%lld, mode:%04o\n", (long long)self->stat64_64->st_size, self->stat64_64->st_mode);
-}
-
-/******************************************************************************
- * MISC
- */
-
-syscall::dup:entry
-/execname == "dt"/
-{
- printf("%Y\t%d:\t%s(fd:%d)", walltimestamp, pid, probefunc, arg0);
-}
-
-syscall::dup:return
-/execname == "dt"/
-{
- printf("\t-> returned: %d\n", arg0);
-}
-
-
-/****************** END ****************/
-
-dtrace:::END
-{
-}
-'
-
-/usr/sbin/dtrace -x dynvarsize=4m -n "$dtrace" >&2
\ No newline at end of file