Hi,

I have managed to do few things. @Jim and @Mathew inputs were helpful. Thanks

So i have
[root@vcssx247-ldm7 ~]#dtrace -lvn fbt:my_mod:msg_recv1:entry
   ID   PROVIDER            MODULE                          FUNCTION NAME
 7090        fbt               mymod                     msg_recv1 entry

        Probe Description Attributes
                Identifier Names: Private
                Data Semantics:   Private
                Dependency Class: Unknown

        Argument Attributes
                Identifier Names: Private
                Data Semantics:   Private
                Dependency Class: ISA

        Argument Types
                args[0]: mblk_t *
                args[1]: uint_t
                args[2]: uchar_t *
                args[3]: ulong_t

And my probe then becomes:
dtrace -n 'msg_recv1:entry { printf("msg_recv1: %x, %x\n",
*(uchar_t*)args[0]->b_rptr, *((uchar_t*)args[0]->b_rptr + 1)); }'

Now, the args[0]->b_rptr points to my custom structure pkt_hdr_t { }.

Is is possible to typecast this args[0]->b_rptr to struct pkt_hdr_t *
in the dtrace script for better readable access of the private
structure variables instead of using offsets to b_rptr:

Something like this:
struct pkt_hdr_t* ppkt = (struct pkt_hdr_t*)args[0]->b_rptr;

Then printf("%d\n", ppkt->member1);

Regards

On Wed, Sep 20, 2017 at 12:13 AM, jim mauro <jim.ma...@gmail.com> wrote:
> It's been a while (2+ years), but...
>
> The fbt provider makes function args available at entry probes via
> args[0] ... args[n]. This are typed.
>
> So you should be able to dereference structure members of sk_buff
> doing 'args[0]->structure_member', etc, when fbt:mymod:msg_recv:entry
> fires....
>
> args[1] will be the link value
> args[2] will be the src pointer.
>
> (jeez...I hope I'm remember this correctly. There was a book....).
>
> Thanks
> Jim
>
>
> On Tue, Sep 19, 2017 at 6:00 AM, Nayan Gadre <beejoy.na...@gmail.com> wrote:
>> 
>> Hi,
>> 
>> I am new to solaris dtrace debugging tool, but I have prior experience
>> with Linux SystemTap.
>> 
>> I need to debug my Solaris kernel module particularly extract the data
>> in a structure passed by reference to my kernel function.
>> 
>> msg_recv(struct 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
>> 
>> Any pointers to correct, to the point documentation would be appreciated.
>> 
>> Thanks
>> Nayan
>> 
>
>


-------------------------------------------
dtrace-discuss
Archives: https://www.listbox.com/member/archive/184261/=now
RSS Feed: https://www.listbox.com/member/archive/rss/184261/25769126-e243886f
Modify Your Subscription: 
https://www.listbox.com/member/?member_id=25769126&id_secret=25769126-8d47a7b2
Powered by Listbox: http://www.listbox.com

Reply via email to