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 20:08:52 +0100 [thread overview]
Message-ID: <4963AC44.3020205@opensuse.org> (raw)
In-Reply-To: <49638483.4050701@opensuse.org>
Martin Mohring wrote:
> 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.
>
The reason why I wrote this and did not propose a fix like Laurent did
now was the fact that:
- gdbserver_fork() is called unconditionally before gdbserver_start()
has ever been called
- gdbserver_fork() as result accesses gdbserver data structures before
they are inited, so we have NULL pointer access
Another issue is that gdbserver_fork() is only defined when
CONFIG_USER_ONLY is not defined but gdbserver_fork() is called when
always when USE_NPTL is defined.
So switching on CONFIG_USER_ONLY and USE_NPTL will result in
gdbserver_fork() beeing undefined. That was why my impression was that
the code is somewhat incomplete.
Also, does debugging work in user mode at all if USE_NPTL is on? If not
I would remove the call to gdbserver_fork() in this case completely.
Martin
prev parent reply other threads:[~2009-01-06 19:08 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
2009-01-06 17:27 ` Laurent Desnogues
2009-01-06 19:08 ` Martin Mohring [this message]
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=4963AC44.3020205@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.