public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
* [Bug server/30574] New: hang when using remote target, schedule-multiple, follow-fork-mode child, and stepping over a vfork
@ 2023-06-21 21:01 aburgess at redhat dot com
  2023-07-17  8:52 ` [Bug server/30574] " cvs-commit at gcc dot gnu.org
  0 siblings, 1 reply; 2+ messages in thread
From: aburgess at redhat dot com @ 2023-06-21 21:01 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=30574

            Bug ID: 30574
           Summary: hang when using remote target, schedule-multiple,
                    follow-fork-mode child, and stepping over a vfork
           Product: gdb
           Version: HEAD
            Status: NEW
          Severity: normal
          Priority: P2
         Component: server
          Assignee: unassigned at sourceware dot org
          Reporter: aburgess at redhat dot com
  Target Milestone: ---

Created attachment 14941
  --> https://sourceware.org/bugzilla/attachment.cgi?id=14941&action=edit
reproducer for this issue

When using a remote target and stepping over a vfork with follow-fork-mode set
to child, and schedule-multiple set to on, GDBServer will hang, which in turn
causes GDB to hang.

To reproduce the issue, download the atteached remote-vfork-bug.tar.bz2, and
then:

  $ tar -xf remote-vfork-bug.tar.bz2
  $ cd remote-vfork-bug/
  $ make GDB="/path/to/gdb"
  ... snip lots of output ...
  Breakpoint 1, main (argc=1, argv=0x7fffffffacb8) at test.c:11
  11      pid = vfork (); /* VFORK */
  [Attaching after Thread 2182093.2182093 vfork to child Thread
2182094.2182094]
  [New inferior 2 (process 2182094)]

At which point GDB hangs.

The problem appears to be that after the VFORK GDB resumes the vfork-child
process, but, due to schedule-multiple being on, this results in GDB sending a
ptid of -1 to gdbserver, this means resume everything.

I think this bit is fine, this is what happens with e.g. the linux-nat layer
within GDB, but in the linux-nat layer when we action the -1 ptid we loop over
all threads and resume them, except we spot that one thread is a vfork-parent
and specifically skip resuming that thread.

In contrast gdbserver doesn't skip the vfork-parent, and instead resumes the
vfork-parent.

While the vfork-child is running the kernel will hold the vfork parent stopped.

When the vfork-child execs gdbserver sees the event and tries to stop all
resumed threads, as the vfork-parent is resumed gdbserver sends it a SIGSTOP
and then waits for the thread to report a stop .... and it is this stop that
never arrives, and this is where we seem to hang.

Some of the details in the above might be a little off, I've only given this a
quick review before filing this bug.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug server/30574] hang when using remote target, schedule-multiple, follow-fork-mode child, and stepping over a vfork
  2023-06-21 21:01 [Bug server/30574] New: hang when using remote target, schedule-multiple, follow-fork-mode child, and stepping over a vfork aburgess at redhat dot com
@ 2023-07-17  8:52 ` cvs-commit at gcc dot gnu.org
  0 siblings, 0 replies; 2+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-07-17  8:52 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=30574

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andrew Burgess <aburgess@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a068d1a6b2dd982e1019bc265610f07bb8adff94

commit a068d1a6b2dd982e1019bc265610f07bb8adff94
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Wed Jun 21 14:19:27 2023 +0100

    gdb/testsuite: expand gdb.base/foll-vfork.exp

    This commit provides tests for all of the bugs fixed in the previous
    four commits, this is achieved by expanding gdb.base/foll-vfork.exp to
    run with different configurations:

      * target-non-stop on/off
      * non-stop on/off
      * schedule-multiple on/off

    We don't test with schedule-multiple on if we are using a remote
    target, this is due to bug gdb/30574.  I've added a link to that bug
    in this commit, but all this commit does is expose that bug, there's
    no fixes here.

    Some of the bugs fixed in the previous commits are very timing
    dependent, as such, they don't always show up.  I've had more success
    when running this test on a very loaded machine -- I usually run ~8
    copies of the test in parallel, then the bugs would normally show up
    pretty quickly.

    Other than running the test in more configurations, I've not made any
    changes to what is actually being tested, other than in one place
    where, when testing with non-stop mode, GDB stops in a different
    inferior, as such I had to add a new 'inferior 2' call, this can be
    found in vfork_relations_in_info_inferiors.

    I have cleaned things up a little, for example, making use of
    proc_with_prefix to remove some with_test_prefix calls.

    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30574

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-07-17  8:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-21 21:01 [Bug server/30574] New: hang when using remote target, schedule-multiple, follow-fork-mode child, and stepping over a vfork aburgess at redhat dot com
2023-07-17  8:52 ` [Bug server/30574] " cvs-commit at gcc dot gnu.org

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 read-only IMAP folder(s) and NNTP newsgroup(s).