This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug gdb/19828] 7.11 regression: non-stop gdb -p <process from a container>: internal error


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

--- Comment #8 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pedro Alves <palves@sourceware.org>:

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

commit 026a91747567565bf2956fae98fed6a958151aab
Author: Pedro Alves <palves@redhat.com>
Date:   Tue May 24 14:47:57 2016 +0100

    Fix PR gdb/19828: gdb -p <process from a container>: internal error

    When GDB attaches to a process, it looks at the /proc/PID/task/ dir
    for all clone threads of that process, and attaches to each of them.

    Usually, if there is more than one clone thread, it means the program
    is multi threaded and linked with pthreads.  Thus when GDB soon after
    attaching finds and loads a libthread_db matching the process, it'll
    add a thread to the thread list for each of the initially found
    lower-level LWPs.

    If, however, GDB fails to find/load a matching libthread_db, nothing
    is adding the LWPs to the thread list.  And because of that, "detach"
    hits an internal error:

      (gdb) PASS: gdb.threads/clone-attach-detach.exp: fg attach 1: attach
      info threads
        Id   Target Id         Frame
      * 1    LWP 6891 "clone-attach-de" 0x00007f87e5fd0790 in
__nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:84
      (gdb) FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: info
threads shows two LWPs
      detach
      .../src/gdb/thread.c:1010: internal-error: is_executing: Assertion `tp'
failed.
      A problem internal to GDB has been detected,
      further debugging may prove unreliable.
      Quit this debugging session? (y or n)
      FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: detach (GDB
internal error)

    From here:

      ...
      #8  0x00000000007ba7cc in internal_error (file=0x98ea68
".../src/gdb/thread.c", line=1010, fmt=0x98ea30 "%s: Assertion `%s' failed.")
          at .../src/gdb/common/errors.c:55
      #9  0x000000000064bb83 in is_executing (ptid=...) at
.../src/gdb/thread.c:1010
      #10 0x00000000004c23bb in get_pending_status (lp=0x12c5cc0,
status=0x7fffffffdc0c) at .../src/gdb/linux-nat.c:1235
      #11 0x00000000004c2738 in detach_callback (lp=0x12c5cc0, data=0x0) at
.../src/gdb/linux-nat.c:1317
      #12 0x00000000004c1a2a in iterate_over_lwps (filter=...,
callback=0x4c2599 <detach_callback>, data=0x0) at .../src/gdb/linux-nat.c:899
      #13 0x00000000004c295c in linux_nat_detach (ops=0xe7bd30, args=0x0,
from_tty=1) at .../src/gdb/linux-nat.c:1358
      #14 0x000000000068284d in delegate_detach (self=0xe7bd30, arg1=0x0,
arg2=1) at .../src/gdb/target-delegates.c:34
      #15 0x0000000000694141 in target_detach (args=0x0, from_tty=1) at
.../src/gdb/target.c:2241
      #16 0x0000000000630582 in detach_command (args=0x0, from_tty=1) at
.../src/gdb/infcmd.c:2975
      ...

    Tested on x86-64 Fedora 23.  Also confirmed the test passes against
    gdbserver with "maint set target-non-stop".

    gdb/ChangeLog:
    2016-05-24  Pedro Alves  <palves@redhat.com>

        PR gdb/19828
        * linux-nat.c (attach_proc_task_lwp_callback): Mark the lwp
        resumed, and add the thread to GDB's thread list.

    testsuite/ChangeLog:
    2016-05-24  Pedro Alves  <palves@redhat.com>

        PR gdb/19828
        * gdb.threads/clone-attach-detach.c: New file.
        * gdb.threads/clone-attach-detach.exp: New file.

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]