gdb support for follow-fork

Dmitry Mikulin dmitrym at juniper.net
Mon Apr 16 17:51:23 UTC 2012


> Yes, could you, please, split the patch somewhat ?
> It would be much easier to review if you were able to provide relatively
> small pieces with descriptions.

I don't think I can split it into independent functioning pieces, but I can group the changes logically and explain them in a bit more detail. I'll go by groups of files.

1. These files contain added initialization for a new fbsd target specific file fbsd-nat.c. The same change is applied to every supported target architecture. A call to _initialize_fbsdnat() is added and fbsd-nat.o is added to the make files.
gnu/usr.bin/gdb/arch/arm/init.c
gnu/usr.bin/gdb/arch/arm/Makefile
gnu/usr.bin/gdb/arch/powerpc/init.c
gnu/usr.bin/gdb/arch/powerpc/Makefile
gnu/usr.bin/gdb/arch/sparc64/init.c
gnu/usr.bin/gdb/arch/ia64/init.c
gnu/usr.bin/gdb/arch/ia64/Makefile
gnu/usr.bin/gdb/arch/mips/init.c
gnu/usr.bin/gdb/arch/mips/Makefile
gnu/usr.bin/gdb/arch/i386/init.c
gnu/usr.bin/gdb/arch/i386/Makefile
gnu/usr.bin/gdb/arch/powerpc64/init.c
gnu/usr.bin/gdb/arch/powerpc64/Makefile
gnu/usr.bin/gdb/arch/amd64/init.c
gnu/usr.bin/gdb/arch/amd64/Makefile

2. Added target specific verions of follow_fork() and follow_exec()
contrib/gdb/gdb/target.c
contrib/gdb/gdb/target.h

3. Added an external interface to check if the thread list is empty.
contrib/gdb/gdb/thread.c
contrib/gdb/gdb/gdbthread.h

4. Added 2 new interfaces to clear step-resume breakpoint info; switched to target specific follow-fork.
contrib/gdb/gdb/infrun.c

5. Fix for a problem re-loading binaries after fork-exec.
contrib/gdb/gdb/objfiles.c

6. This is where the 'meat' of the implementation is.
fbsd-nat.c is a new file which contains FreeBSD specific  functions to handle follow-fork and follow-exec.
fbsd_wait() is added to handle stops attributed to fork() and exec() and to translate those stops into target independent info that handle_inferior_event() can understand.
fbsd_follow_fork() manages the switch-over from parent to child when gdb is to follow the child or manages a clean detach from the child when gdb is to follow the parent.
fbsd_follow_exec() manages the switch-over from one symbol file to another when gdb is stopped after a successful exec() in the inferior.
gnu/usr.bin/gdb/libgdb/fbsd-nat.c

The changes here deal with the fact that thread state if a process gdb is tracing changes after fork()  when we follow the child and exec().
gnu/usr.bin/gdb/libgdb/fbsd-threads.c





More information about the freebsd-toolchain mailing list