Bug 15564 - MI thread-exited event inconsistency when detaching
Summary: MI thread-exited event inconsistency when detaching
Status: REOPENED
Alias: None
Product: gdb
Classification: Unclassified
Component: mi (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-06-03 16:05 UTC by Simon Marchi
Modified: 2024-01-13 20:04 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Simon Marchi 2013-06-03 16:05:53 UTC
When attaching and detaching a process, we see two different behavior depending on if we pass through a gdbserver or if we do it natively. The difference is whether the thread-exited event is emitted or not.


Attaching and detaching a process without directly (no gdbserver)
$ gdb -i mi
=thread-group-added,id="i1"
(gdb)
-target-attach 5422
=thread-group-started,id="i1",pid="5422"
=thread-created,id="1",group-id="i1"
=library-loaded,id="/lib/x86_64-linux-gnu/libc.so.6",target-name="/lib/x86_64-linux-gnu/libc.so.6",host-name="/lib/x86_64-linux-gnu/libc.so.6",symbols-loaded="0",thread-group="i1"
=library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1"
*stopped,frame={addr="0x00007fe48e131d20",func="nanosleep",args=[],from="/lib/x86_64-linux-gnu/libc.so.6"},thread-id="1",stopped-threads="all",core="1"
^done
(gdb)
-target-detach
=thread-group-exited,id="i1"
=library-unloaded,id="/lib/x86_64-linux-gnu/libc.so.6",target-name="/lib/x86_64-linux-gnu/libc.so.6",host-name="/lib/x86_64-linux-gnu/libc.so.6",thread-group="i1"
=library-unloaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",thread-group="i1"
^done
(gdb)


Attaching and detaching a process through gdbserver
(start gdbserver and attach the process)
$ gdbserver --attach :1234 5422

$ gdb -i mi
=thread-group-added,id="i1"
(gdb)
-target-select extended-remote :1234
=thread-group-started,id="i1",pid="5422"
=thread-created,id="1",group-id="i1"

&"warning: Could not load vsyscall page because no executable was specified\ntry using the \"file\" command first."

&"\n"
*stopped,frame={addr="0x00007fe48e131d20",func="??",args=[]},thread-id="1",stopped-threads="all",core="3"
=tsv-created,name="trace_timestamp",initial="0"\n
^connected
(gdb)
-target-detach
=thread-exited,id="1",group-id="i1"
=thread-group-exited,id="i1"
^done
(gdb)

Reference: http://sourceware.org/ml/gdb/2013-05/msg00149.html
Comment 1 Sourceware Commits 2015-06-02 19:34:35 UTC
The master branch has been updated by Simon Marchi <simark@sourceware.org>:

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

commit 3b462ec2bedca7392bf4720db44fdf2a46ad8b4d
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Tue Jun 2 15:32:40 2015 -0400

    Fix =thread-exited not showing up when detaching (PR 15564)
    
    I sent a patch in 2013 for this (incorrectly named =thread-created):
    
      https://cygwin.com/ml/gdb-patches/2013-06/msg00129.html
    
    Tom Tromey was ok with the change, but suggested to add a test as well.
    Then I forgot about this patch until today. So here it is again, with the
    corresponding test.
    
    The problem is that the =thread-exited event does not appear when detaching
    from a local process. It does appear with remote though. It's not a really
    big deal, but I'd like it to be consistent.
    
    Tested with local and remote Linux on my Ubuntu 14.04.
    
    gdb/ChangeLog:
    
    	PR gdb/15564
    	* inferior.c (detach_inferior): Call exit_inferior_1 with silent = 0.
    
    gdb/testsuite/ChangeLog:
    
    	PR gdb/15564
    	* gdb.mi/mi-detach.exp: New file.
Comment 2 Simon Marchi 2015-06-03 14:18:42 UTC
Fixed by commit above.
Comment 3 Yao Qi 2015-10-27 17:26:22 UTC
The test still fails when testing with GDBserver.

-target-detach^M
=thread-group-exited,id="i1"^M
=library-unloaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="target:/lib64/ld-linux-x86-64.so.2",thread-group="i1"^M
=library-unloaded,id="/lib/x86_64-linux-gnu/libc.so.6",target-name="/lib/x86_64-linux-gnu/libc.so.6",host-name="target:/lib/x86_64-linux-gnu/libc.so.6",thread-group="i1"^M
^done^M
(gdb) ^M
FAIL: gdb.mi/mi-detach.exp: detach
Comment 4 Simon Marchi 2015-10-27 17:29:03 UTC
There is a patch posted for that, but it needs to be re-worked after comments by Pedro.

https://sourceware.org/ml/gdb-patches/2015-09/msg00047.html
Comment 5 Hannes Domani 2024-01-13 20:04:14 UTC
I wonder if the remaining problem was fixed with this commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=a78ef8757418105c35685c5d82b9fdf79459321b