You may want to use/start with the dtrace script located here:
http://hub.opensolaris.org/bin/view/Project+sparks/dtrace
It can trace all nscd calls & returns, and provide appropriate
information along the way.

It was originally written as part of the sparks project.

Doug.



On 03/16/10 10:55 AM, tester wrote:
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.
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to