Hi All,
  I am trying to create a D script to emulate the command 
"truss -o ls.truss -f -d -l -t \!all -u 
a.out,*::malloc,realloc,free,calloc,fork,vfork,mmap,munmap,mprotect,brk 
/bin/firefox"

Is this possible with DTrace due to forking issues?  I created this D Script 
which I beleive should capture all the calls that truss has but in reality only 
captures about 1/4...Ideas?

#!/usr/sbin/dtrace -s
#pragma D option quiet
BEGIN{
self->start = vtimestamp;

printf("Base Time Stamp: %d [ %Y ] \n", vtimestamp, walltimestamp);
}
pid$target::malloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
}
pid$target::malloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}

/*pid$target::malloc_internal:return,
pid$target::oversize:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:malloc() = 0x%p\n",pid, 
self->timer, self->extra,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}*/
pid$target::realloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::realloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
self->trace = 0;
}
pid$target::calloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::calloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}
pid$target::free:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::free:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}
pid$target::mmap:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::mmap:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}
pid$target::munmap:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::munmap:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}
pid$target::mprotect:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
  printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d -> 
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0, 
arg1, arg2, arg3);
  self->timer = 0;
  self->extra = 0;
  self->trace = 1;

}
pid$target::mprotect:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer; 
     printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid, 
self->timer, self->extra, probefunc,arg1); 
       self->timer = 0;
       self->extra = 0;       
    self->trace = 0;
}


--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to