Hello!

I'm trying to write a dtrace script that will log the parameters of
the putmsg calls of a process. So far I've got this:

#!/usr/sbin/dtrace -qs

syscall::putmsg:entry
{
        printf("Calling putmsg, filedes: %5d, ctlptr: %8x, dataptr: %8x,
flags: %5d", arg0, arg1, arg2, arg3);
}

syscall::putmsg:return
{
        printf("Return from putmsg: %d", (int)arg0);
}

Of course, the value of the ctlptr is a rather meaningless memory
address of a struct - how can I access the values of the fields of
that struct? I've tried this:

        printf("maxlen: %5d", arg1->maxlen);

compilation error, then

        ctlptr = (struct strbuf*)arg1;
        printf("maxlen: %5d", ctlptr->maxlen);

and got:

dtrace: error on enabled probe ID 1 (ID 6236: syscall::putmsg:entry):
invalid address (0xffbfeeac) in action #6 at DIF offset 4

How can that be an invalid address? Or is the program I'm tracing buggy?
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to