I am getting a 64bit address for char pointer for a 32 bit process. I don't 
know if I am getting the casting correct.

#!/usr/sbin/dtrace -qs

     typedef struct door_arg {
          char             *data_ptr;     /* Argument/result buf ptr*/
          size_t           data_size;     /* Argument/result buf size */
          door_desc_t      *desc_ptr;     /* Argument/result descriptors */
          uint_t           desc_num;      /* Argument/result num desc */
          char             *rbuf;         /* Result buffer */
          size_t           rsize;         /* Result buffer size */
     } door_arg_t;



fbt::door_call:entry
/curpsinfo->pr_dmodel == PR_MODEL_ILP32/
{
   self->r = (struct door_arg *)copyin(arg1,sizeof(struct door_arg));
   printf("32bit char data pointer is %a and size %x\n",self->r->data_ptr, 
self->r->data_size);
   tracemem(self->r,100);
}

I am getting a 64 bit address here, am I missing some casting here? 

32bit char data pointer is 0xff1e0000000000b0 and size 0

             0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  0123456789abcdef
         0: ff 1e 00 00 00 00 00 b0 00 00 00 00 00 00 00 00  ................
        10: ff 1e 00 00 00 00 40 00 ff 33 37 c0 00 00 00 07  ......@..37.....
        20: ff 33 37 c8 00 00 00 b0 00 00 40 00 ff 1e 00 90  .37.......@.....
        30: 00 00 00 1c ff ff ff ff 7d 60 00 00 00 00 00 00  ........}`......
        40: 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00  ..d.............
        50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        60: 00 00 00 00                                      ....

Thanks
-- 
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to