This is the mail archive of the gdb-cvs@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]

src/gdb ChangeLog breakpoint.c testsuite/Chang ...


CVSROOT:	/cvs/src
Module name:	src
Changes by:	palves@sourceware.org	2013-09-17 19:32:47

Modified files:
	gdb            : ChangeLog breakpoint.c 
	gdb/testsuite  : ChangeLog 
Added files:
	gdb/testsuite/gdb.threads: thread-specific-bp.c 
	                           thread-specific-bp.exp 

Log message:
	PR gdb/11568 - delete thread-specific breakpoints on thread exit
	
	PR gdb/11568 is about thread-specific breakpoints being left behind
	when the corresponding thread exits.
	
	Currently:
	
	(gdb) b start thread 2
	Breakpoint 3 at 0x400614: file thread-specific-bp.c, line 23.
	(gdb) b end
	Breakpoint 4 at 0x40061f: file thread-specific-bp.c, line 29.
	(gdb) c
	Continuing.
	[Thread 0x7ffff7fcb700 (LWP 14925) exited]
	[Switching to Thread 0x7ffff7fcc740 (LWP 14921)]
	
	Breakpoint 4, end () at thread-specific-bp.c:29
	29      }
	(gdb) info threads
	Id   Target Id         Frame
	* 1    Thread 0x7ffff7fcc740 (LWP 14921) "thread-specific" end () at thread-specific-bp.c:29
	(gdb) info breakpoints
	Num     Type           Disp Enb Address            What
	2       breakpoint     keep y   0x0000000000400614 in start at thread-specific-bp.c:23
	breakpoint already hit 1 time
	3       breakpoint     keep y   0x0000000000400614 in start at thread-specific-bp.c:23 thread 2
	stop only in thread 2
	4       breakpoint     keep y   0x000000000040061f in end at thread-specific-bp.c:29
	breakpoint already hit 1 time
	
	Note that the thread-specific breakpoint 3 stayed around, even though
	thread 2 is gone.
	
	There's no way that breakpoint can trigger again (*), so the PR argues
	that the breakpoint should just be removed, like local watchpoints.
	I'm ambivalent on this -- it could be reasonable to disable the
	breakpoint (kind of like breakpoint in shared library code when the
	DSO is unloaded), so the user could still use it as visual template
	for creating other breakpoints (copy/paste command lists, etc.), or we
	could have a way to change to which thread a breakpoint applies.  But,
	several people pushed this direction, and I don't plan on arguing...
	
	(*) - actually, there is ...  thread numbers are reset on "run", so
	the user could do "break foo thread 2", "run", and expect the
	breakpoint to hit again on the second thread.  But given gdb's thread
	numbering can't really be stable, that'd only work sufficiently well
	for thread 1, so we'd better call it unsupported.
	
	So with the patch, whenever a thread is deleted from GDB's list, GDB
	goes through the thread-specific breakpoints and deletes corresponding
	breakpoints.  Since this is user-visible, GDB prints out:
	
	Thread-specific breakpoint 3 deleted - thread 2 is gone.
	
	And of course, we end up with:
	
	(gdb) info breakpoints
	Num     Type           Disp Enb Address            What
	2       breakpoint     keep y   0x0000000000400614 in start at thread-specific-bp.c:23
	breakpoint already hit 1 time
	4       breakpoint     keep y   0x000000000040061f in end at thread-specific-bp.c:29
	breakpoint already hit 1 time
	
	2013-09-17  Muhammad Waqas <mwaqas@codesourcery.com>
	Pedro Alves  <palves@redhat.com>
	
	PR gdb/11568
	* breakpoint.c (remove_threaded_breakpoints): New function.
	(_initialize_breakpoint): Attach remove_threaded_breakpoints
	as thread_exit observer.
	
	2013-09-17  Muhammad Waqas  <mwaqas@codesourccery.com>
	Jan Kratochvil  <jan.kartochvil@redhat.com>
	Pedro Alves  <palves@redhat.com>
	
	PR gdb/11568
	* gdb.thread/thread-specific-bp.c: New file.
	* gdb.thread/thread-specific-bp.exp: New file.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.16003&r2=1.16004
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.c.diff?cvsroot=src&r1=1.776&r2=1.777
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3810&r2=1.3811
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.threads/thread-specific-bp.c.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.threads/thread-specific-bp.exp.diff?cvsroot=src&r1=NONE&r2=1.1


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