Try door_arg32_t instead of "struct door_arg".
tester wrote:
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
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org