Hello,
in fork_inferior (fork-child.c), gdb uses vfork () to spawn a child
process, and then calls getpid () (within gdb_setpgid) from within
that child process, before doing the execve ().
With current glibc CVS builds, this doesn't work any more, since
glibc caches the PID in thread-local memory, and memory is shared
between vfork parent and child. (In fact, what happens is that
all subsequent getpid calls in gdb return the pid of the initial
child that was spawned ...) This causes various breakage.
Now, according to this libc-hacker thread:
http://sources.redhat.com/ml/libc-hacker/2004-03/msg00014.html
gdb's behaviour is actually not standards-compliant, as it is not
permitted to call getpid () between the vfork and the exec.
Can this be fixed in gdb?