It is somewhat complex for someone like me with limited C programming to 
unearth the actual data(args and result) from the door call API. I beleive it 
has custom NSS headers packed along with  actual data. Tracemem for most part 
is not that meaningful. If anyone has already done this, please share it.  

I am startting to look at other places where I can get this data in a 
strcutured form. I started looking at

pid$target:libc:_nsc_try1door:entry 

this is where I am now:


BEGIN { last = timestamp; }

typedef unsigned long long int door_ptr_t;      /* Handle 64 bit pointers */
typedef unsigned long long int door_id_t;       /* Unique door identifier */
typedef unsigned int       door_attr_t; /* Door attributes */

typedef struct door_info {
    pid_t               di_target;      /* Server process */
    door_ptr_t  di_proc;        /* Server procedure */
    door_ptr_t  di_data;        /* Data cookie */
    door_attr_t di_attributes;  /* Attributes associated with door */
    door_id_t   di_uniquifier;  /* Unique number */
    int         di_resv[4];     /* Future use */
    } door_info_t;

typedef struct _nsc_door_t {
    int                 doorfd;
    mutex_t             door_lock;
    door_info_t         doori;
    } nsc_door_t;


pid$target:libc:_nsc_try1door:entry
/curpsinfo->pr_dmodel == PR_MODEL_ILP32/
{
   /* args nsc_door_t *dp, void **dptr, size_t *ndata, size_t *adata, int 
*pdesc */

   trace(timestamp - last);
   last = timestamp;
   self->dp = (struct _nsc_door_t *)copyin(arg0,sizeof(struct _nsc_door_t));

   printf("doorfd %d di_proc %x",self->dp->doorfd,self->dp->doori.di_proc);

   tracemem(self->dp,100);
}

pid$target:libc:_nsc_try1door:return
/curpsinfo->pr_dmodel == PR_MODEL_ILP32/
{
   trace(timestamp - last);
   last = timestamp;
}

I get a invalid alignement.

dtrace: error on enabled probe ID 2 (ID 80106: 
pid13913:libc.so.1:_nsc_try1door:entry): invalid alignment (0x302124160ac) in 
action #5 at DIF offset 20

I think  struct definitions  above many not be correct. Now, my basic question 
is, is there a set of instructions that I can  follow to convert structure 
definitions to 32bit and/or 64 bit. Nico, helped me last time, how can I do 
this myself? Is it out of my league? (meaning basic/medium C programming 
experience) 

Is there anything that I can read up further on userland data tracing 32/64 bit 
programs/libraries?

Thank you for your help.
-- 
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to