mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-28 21:03:54 -06:00
User-mode GDB stub improvements - handle fork
Close gdbserver in child processes, so that only one stub tries to talk to GDB at a time. Updated from an earlier patch by Paul Brook. Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6095 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
6f9c5ee782
commit
2b1319c85c
4 changed files with 26 additions and 13 deletions
|
@ -2960,17 +2960,17 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
|||
return -EINVAL;
|
||||
fork_start();
|
||||
ret = fork();
|
||||
#if defined(USE_NPTL)
|
||||
/* There is a race condition here. The parent process could
|
||||
theoretically read the TID in the child process before the child
|
||||
tid is set. This would require using either ptrace
|
||||
(not implemented) or having *_tidptr to point at a shared memory
|
||||
mapping. We can't repeat the spinlock hack used above because
|
||||
the child process gets its own copy of the lock. */
|
||||
if (ret == 0) {
|
||||
/* Child Process. */
|
||||
cpu_clone_regs(env, newsp);
|
||||
fork_end(1);
|
||||
/* Child Process. */
|
||||
#if defined(USE_NPTL)
|
||||
/* There is a race condition here. The parent process could
|
||||
theoretically read the TID in the child process before the child
|
||||
tid is set. This would require using either ptrace
|
||||
(not implemented) or having *_tidptr to point at a shared memory
|
||||
mapping. We can't repeat the spinlock hack used above because
|
||||
the child process gets its own copy of the lock. */
|
||||
if (flags & CLONE_CHILD_SETTID)
|
||||
put_user_u32(gettid(), child_tidptr);
|
||||
if (flags & CLONE_PARENT_SETTID)
|
||||
|
@ -2979,14 +2979,10 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
|||
if (flags & CLONE_SETTLS)
|
||||
cpu_set_tls (env, newtls);
|
||||
/* TODO: Implement CLONE_CHILD_CLEARTID. */
|
||||
#endif
|
||||
} else {
|
||||
fork_end(0);
|
||||
}
|
||||
#else
|
||||
if (ret == 0) {
|
||||
cpu_clone_regs(env, newsp);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue