qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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

      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 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).