I need to debug my Solaris kernel module particularly extract the data in a structure passed by reference to my kernel function.
msg_recv(sk_buff *skbp, uint_t link, uchar_t* src)
{
pkt_hdr_t *pkt;
pkt = (pkt_hdr_t *)skbp->data;
port = pkt->port;
}
I have written a systemtap script in linux to access the argument and extract data.
How can I do this using DTRACE for solaris modules.
I tried looking into the system and trying few commands, but thats all i know about dtrace:
[root@vcssx247-ldm7 ~]#dtrace -l | grep msg_recv
7090 fbt mymod msg_recv1 entry
7091 fbt mymod msg_recv1 return
7548 fbt mymod msg_recv entry
7549 fbt mymod msg_recv return
DTrace is similar conceptually to SystemTap (actually, vice versa as SystemTap came later):
Like SystemTap, it can attach probes to function, but it requires different syntax:
Accessing arguments is quite different as DTrace doesn't support DWARF for argument names (it has
arg0
..arg9
variables which containsuintptr_t
values of arguments):Accessing in-kernel data, is similar, but printing functions are different:
I've added links to my open book about DTrace/SystemTap where you can find more info