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]"
