On Tue, Nov 12, 2013 at 12:03:05PM +0800, Prashanth Kumar wrote:
> Hello, 
> 
> I had been doing some work on the pid provider in Dtrace.

Hi Prashanth,

I've been going through your patches and committing them as time permits.

>  I have made a few modification
>  so that it will list all the functions used in the program as seen in 
> Solaris or MacOSX.
>  Presently in FreeBSD, you have to name each functions you have to probe in 
> the program. For
>  example "dtrace -n 'pid$target:program::entry' -c ./program" will list all 
> the functions called
>  in the program.This modification was made in libproc library(proc_sym.c).

This has been fixed:

http://svnweb.freebsd.org/base?view=revision&revision=257300
http://svnweb.freebsd.org/base?view=revision&revision=258000

> 
>             Also while creating probe points for return probe type, any 
> function with more than one return
>  path will fail.This is because "fasttrap_probe_spec_t" type variable is not 
> fully copied into the
>  kernel in fasttrap_ioctl() function.I have modified in line with Solaris 
> code where the copying  is
>  done manually by Dtrace, rather than the kernel.(fasttap.c, fasttrap.h)

I'm working on this one.

>  Also in "fasttrap_pid_probe()" (fasttrap_isa.c) for the case of 
> "FASTTRAP_T_PUSHL_EBP", the ebp register
>  has to be copied to the stack not esp.
>         I had attached the patch files for review.

This has been fixed:

http://svnweb.freebsd.org/base?view=revision&revision=257679
http://svnweb.freebsd.org/base?view=revision&revision=257143

> 
>  One other issue i noticed is that if the program being traced uses Thread 
> Local Storage than
>  for the case of entry probe, it will hang in ___tls_get_addr function in 
> ld-elf.so.
>  If you use scanf or fscanf in your program you can notice this behaviour. 
> This i believe is due to
>  Dtrace using gs segment register to point to the scratch space, and TLS also 
> loading the thread variable
>  from gs register.

I haven't been able to reproduce this one yet. If you can send me a
program and D script that does the trick, that'd be very helpful.

> 
>  if you change the following code in fasttrap_isa.c
>  <code>
>  #ifdef __i386__
>          addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
>  #else
>          addr = curthread->td_pcb->pcb_gsbase;
>  #endif
>          addr += sizeof (void *);   
>  </code>
> 
>  to
> 
>  <code>
>  #ifdef __i386__
>          addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
>  #else
>          addr = curthread->td_pcb->pcb_gsbase;
>  #endif
>          addr += sizeof (void *) * 3;   
>  </code>
> 
>  the Dtrace will not hang. I am not sure what is happening here and
>  whether this is the correct solution.

Neither am I. :)

>  This changes were made in FreeBSD 9.2-386-RELEASE. I applied the above 
> patches on
>  FreeBSD 10-BETA (with some manual work) and it was still working.
> _______________________________________________
> [email protected] mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace
> To unsubscribe, send any mail to "[email protected]"
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace
To unsubscribe, send any mail to "[email protected]"

Reply via email to