On Mon, Jan 30, 2012 at 10:26:25AM -0800, Dmitry Mikulin wrote: > > > On 01/28/2012 11:48 PM, Kostik Belousov wrote: > >On Fri, Jan 27, 2012 at 10:12:13AM -0800, Dmitry Mikulin wrote: > >>Attached are 4 separate patches for each somewhat independent portion of > >>the kernel work related to the follow-fork implementation. > >Ok, as I said, I think that vfork-fork.patch is just wrong. > > Gdb needs to be able to read/write process memory between the time the > child is forked and exec is called (in the vfork case). Without the change > it causes a kernel panic when gdb tries to read/write process memory. Since > my understanding of the kernel is a bit limited, it was the best I could do > at the time. I will send more details about the panic once I get a working > fbsd system again. Maybe there's a better way to deal with the panic. Please provide more details, I am looking forward for the panic message and backtrace. > > >Lets postpone discussion of the orphan.patch for later. > > OK. > > > > >The follow-fork.patch and follow-exec.patch make me wonder, and I > >already expressed my doubts. IMO, all features, except one bug, are > >already presented in the stock src. > > > >More, suggested follow-{fork,exec} patches break the SCE/SCX tracers > >notification of fork and exec events, since TDB_FORK and TBD_EXEC flags > >are consumed before syscall returns (I also said this previously). > > > > > > > >Namely, if the process is being debugged, the successfull [f]execve() > >causes unconditional stop even. This makes PT_FOLLOW_EXEC unneccessary. > > > >Existing PT_FOLLOW_FORK implementation indeed has a bug, which was not > >revealed by my testing during the development, because I only tested > >SCE/SCX scenario. Namely, if PT_FOLLOW_FORK is requested, but the next > >stop is not SCX, then follow-fork notification is not sent. After this > >nit is fixed, PT_FOLLOW_FORK caller gets stops for the child creation. > >Child is put into stop state as needed to not loose it. > > I think this will fix only a part of the problem, the one that relates to > PT_CONTINUE. > > I still need the change that forces a stop in both child and parent on > fork(). Without my changes the notification is generated in the child but > not in the parent. I need to be able to have both processes stopped in gdb > in order to clean up and detach from the parent, and initialize and attach > to the child. The main reason I need both processes stopped is that gdb has > to be able to read/write into both processes address space and registers. > Ideally I would like to have a single event generated for fork() at a point > where both child and parent are stopped and available for ptrace read/write > requests. Do you think it's possible? The lack of the notification for parent is exactly what the patch I posted fixes. More exactly, it is the lack of notification for parent with PT_CONTINUE loop. I will commit this today. Regarding a single notification. Currently, parent arrives at the syscall return code only after the child is attached to the debugger. See the cv_wait() in kern_fork.c:739. In other words, if you get the PL_FLAG_FORK, the child is already attached (at last it shall be). My scescx.c code illustrates this well, IMO. You still get a separate stop from the child, but I do not see how is it harmful.
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:23 UTC