Rui Paulo
2010-07-05 12:51:46 UTC
Hi,
I'm trying to follow the process creation code path from DTrace but something is missing:
First dtrace(1) calls:
dtrace_proc_create()
dt_proc_create()
Pcreate()
dt_proc_create_thread()
pthread_create(..., dt_proc_control)
dt_proc_control() sets the child running and expects all the rtld breakpoints to hit and also the main() breakpoint.
Then dtrace(1) expects the childs to be stopped after returning from dtrace_proc_create() and calls dtrace_proc_continue().
What I'm missing is how this can happen since dt_proc_control() has a loop calling Psetrun(), which, according to my understanding, would set the child running until it died (and that's what's happening in FreeBSD).
On a related note, I noticed that running 'dtrace -c ls' on Solaris produces 'dtrace: no probes specified' (because dtrace(1) never calls dtrace_proc_continue()), but on Mac OS X, 'dtrace -c ls' effectively runs ls(1) and then prints 'dtrace: no probes specified'.
Any ideas?
Thanks,
--
Rui Paulo
I'm trying to follow the process creation code path from DTrace but something is missing:
First dtrace(1) calls:
dtrace_proc_create()
dt_proc_create()
Pcreate()
dt_proc_create_thread()
pthread_create(..., dt_proc_control)
dt_proc_control() sets the child running and expects all the rtld breakpoints to hit and also the main() breakpoint.
Then dtrace(1) expects the childs to be stopped after returning from dtrace_proc_create() and calls dtrace_proc_continue().
What I'm missing is how this can happen since dt_proc_control() has a loop calling Psetrun(), which, according to my understanding, would set the child running until it died (and that's what's happening in FreeBSD).
On a related note, I noticed that running 'dtrace -c ls' on Solaris produces 'dtrace: no probes specified' (because dtrace(1) never calls dtrace_proc_continue()), but on Mac OS X, 'dtrace -c ls' effectively runs ls(1) and then prints 'dtrace: no probes specified'.
Any ideas?
Thanks,
--
Rui Paulo