From: Martin Mohring <martin.mohring@opensuse.org>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [6095] User-mode GDB stub improvements - handle fork
Date: Tue, 06 Jan 2009 17:19:15 +0100 [thread overview]
Message-ID: <49638483.4050701@opensuse.org> (raw)
In-Reply-To: <E1LDRbB-0002Tm-Bh@cvs.savannah.gnu.org>
I seem to have found the cause, why ARM user mode with nptl does not
work as before. see below.
Martin
Aurelien Jarno wrote:
> Revision: 6095
> http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6095
> Author: aurel32
> Date: 2008-12-18 22:44:04 +0000 (Thu, 18 Dec 2008)
>
> Log Message:
> -----------
> 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>
>
> Modified Paths:
> --------------
> trunk/gdbstub.c
> trunk/gdbstub.h
> trunk/linux-user/main.c
> trunk/linux-user/syscall.c
>
> Modified: trunk/gdbstub.c
> ===================================================================
> --- trunk/gdbstub.c 2008-12-18 22:43:56 UTC (rev 6094)
> +++ trunk/gdbstub.c 2008-12-18 22:44:04 UTC (rev 6095)
> @@ -1996,6 +1996,18 @@
> gdb_accept();
> return 0;
> }
> +
> +/* Disable gdb stub for child processes. */
> +void gdbserver_fork(CPUState *env)
> +{
> + GDBState *s = gdbserver_state;
> + if (s->fd < 0)
> + return;
> + close(s->fd);
> + s->fd = -1;
> + cpu_breakpoint_remove_all(env, BP_GDB);
> + cpu_watchpoint_remove_all(env, BP_GDB);
> +}
>
In case of USE_NPTL is defined, it seems that either s or env can be
NULL, so I get a exception (yes, nptl works on arm in user mode).
My understanding is that this might be a race condition of the first
fork() call coming even before env or gdbserver_state is initialised
towards !NULL.
> #else
> static int gdb_chr_can_receive(void *opaque)
> {
>
> Modified: trunk/gdbstub.h
> ===================================================================
> --- trunk/gdbstub.h 2008-12-18 22:43:56 UTC (rev 6094)
> +++ trunk/gdbstub.h 2008-12-18 22:44:04 UTC (rev 6095)
> @@ -13,6 +13,7 @@
> int gdb_handlesig (CPUState *, int);
> void gdb_exit(CPUState *, int);
> int gdbserver_start(int);
> +void gdbserver_fork(CPUState *);
> #else
> int gdbserver_start(const char *port);
> #endif
>
> Modified: trunk/linux-user/main.c
> ===================================================================
> --- trunk/linux-user/main.c 2008-12-18 22:43:56 UTC (rev 6094)
> +++ trunk/linux-user/main.c 2008-12-18 22:44:04 UTC (rev 6095)
> @@ -162,6 +162,7 @@
> pthread_cond_init(&exclusive_cond, NULL);
> pthread_cond_init(&exclusive_resume, NULL);
> pthread_mutex_init(&tb_lock, NULL);
> + gdbserver_fork(thread_env);
>
This gdbserver_fork(thread_env) call then causes the exception.
next prev parent reply other threads:[~2009-01-06 16:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-18 22:44 [Qemu-devel] [6095] User-mode GDB stub improvements - handle fork Aurelien Jarno
2009-01-06 16:19 ` Martin Mohring [this message]
2009-01-06 17:27 ` Laurent Desnogues
2009-01-06 19:08 ` Martin Mohring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49638483.4050701@opensuse.org \
--to=martin.mohring@opensuse.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).