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 bfd-target.c monitor.c remot ...


CVSROOT:	/cvs/src
Module name:	src
Changes by:	tromey@sourceware.org	2013-07-25 14:34:51

Modified files:
	gdb            : ChangeLog bfd-target.c monitor.c 
	                 remote-m32r-sdi.c remote-mips.c remote-sim.c 
	                 target.c target.h tracepoint.c 

Log message:
	remove pop_target
	
	This patch fixes the target double-close problem (PR remote/15266),
	and in the process removes pop_target entire (PR remote/15256).
	
	The first issue is that pop_target calls target_close.  However, it
	then calls unpush_target, which also calls target_close.  This means
	targets must be able to be closed twice.  Not only is this strange,
	but it also directly contradicts the contract of to_xclose targets.
	(We currently have just a single such target, and it is never pushed;
	but I plan to add more, and so this latent bug is triggered.)
	
	The second issue is that it seems to me that calling pop_target is
	often unsafe.  This is what cropped up in 15256, where the remote
	target assumed that it could pop_target -- but there was another
	target higher on the stack, leading to confusion.
	
	But, it is always just as easy to call unpush_target as it is to call
	pop_target; and it is also safer.  So, removing pop_target seemed like
	an improvement.
	
	Finally, this adds an assertion to target_close to ensure that no
	currently-pushed target can be closed.
	
	Built and regtested on x86-64 Fedora 18; both natively and using the
	native-gdbserver board file.
	
	PR remote/15256, PR remote/15266:
	* bfd-target.c (target_bfd_reopen): Initialize to_magic.
	* monitor.c (monitor_detach): Use unpush_target.
	* remote-m32r-sdi.c (m32r_detach): Use unpush_target.
	* remote-mips.c (mips_detach): Use unpush_target.  Don't
	call mips_close.
	* remote-sim.c (gdbsim_detach): Use unpush_target.
	* target.c (pop_target): Remove.
	(pop_all_targets_above): Don't call target_close.
	(target_close): Assert that the target is unpushed.
	* target.h (pop_target): Don't declare.
	* tracepoint.c (tfile_open): Use unpush_target.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15829&r2=1.15830
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/bfd-target.c.diff?cvsroot=src&r1=1.23&r2=1.24
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/monitor.c.diff?cvsroot=src&r1=1.117&r2=1.118
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/remote-m32r-sdi.c.diff?cvsroot=src&r1=1.73&r2=1.74
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/remote-mips.c.diff?cvsroot=src&r1=1.142&r2=1.143
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/remote-sim.c.diff?cvsroot=src&r1=1.121&r2=1.122
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/target.c.diff?cvsroot=src&r1=1.342&r2=1.343
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/target.h.diff?cvsroot=src&r1=1.269&r2=1.270
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/tracepoint.c.diff?cvsroot=src&r1=1.320&r2=1.321


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