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 dwarf2read.c


CVSROOT:	/cvs/src
Module name:	src
Changes by:	brobecke@sourceware.org	2013-06-18 23:35:24

Modified files:
	gdb            : ChangeLog dwarf2read.c 

Log message:
	do not use dwarf2_per_objfile in dwarf2_per_objfile_free.
	
	This patch fixes a case of multiple calls freeing the same data
	while free-ing objfiles that have child objfiles (separate debug
	info, as is the case on Darwin targets).
	
	Following the code, free_objfile_separate_debug iterates over
	all child objfiles of the parent objfile, calling free_objfile:
	
	for (child = objfile->separate_debug_objfile; child;)
	{
	struct objfile *next_child = child->separate_debug_objfile_link;
	free_objfile (child);
	child = next_child;
	}
	
	This causes, among other things, the free'ing of the child objfile's
	private data:
	
	/* Discard any data modules have associated with the objfile.  The function
	still may reference objfile->obfd.  */
	objfile_free_data (objfile);
	
	This indirectly calls(back) dwarf2_per_objfile_free, which tries
	to free the dwarf2read-specific data by using the dwarf2_per_objfile
	global, eg:
	
	for (ix = 0; ix < dwarf2_per_objfile->n_comp_units; ++ix)
	
	Even if we were lucky enough the first time around that this global
	actually corresponds to the objfile being destroyed, the global
	will still have the same value at the second iteration, and thus
	become dangling. Indeed, after dwarf2_per_objfile_free returns
	eventually back to free_objfile, free_objfile then deallocates
	its objfile_obstack, where the dwarf2_per_objfile is allocated.
	
	Ironically, there should be no need to access that global at all,
	here, since the data is passed as an argument of the callback.
	And it looks like the dwo/dwp/[...]-handling code is in fact already
	using that argument, rather than the global.
	
	This patch thus fixes the problem by doing the same, replacing
	all references to DWARF2_PER_OBJFILE by uses of DATA instead.
	
	gdb/ChangeLog:
	
	* dwarf2read.c (dwarf2_per_objfile): Replace uses of
	DWARF2_PER_OBJFILE by uses of DATA instead.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15712&r2=1.15713
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/dwarf2read.c.diff?cvsroot=src&r1=1.805&r2=1.806


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