Hello, I had been doing some work on the pid provider in Dtrace.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).
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) 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. 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. 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. 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]"
