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 dwarf2loc.c utils.c utils.h ...


CVSROOT:	/cvs/src
Module name:	src
Changes by:	tromey@sourceware.org	2013-06-18 18:11:19

Modified files:
	gdb            : ChangeLog dwarf2loc.c utils.c utils.h 
	gdb/testsuite  : ChangeLog 
	gdb/testsuite/gdb.dwarf2: implptrconst.exp 
	gdb/testsuite/lib: dwarf.exp 
Added files:
	gdb/testsuite/gdb.dwarf2: implptrpiece.exp 

Log message:
	Fix PR symtab/15391
	
	PR symtab/15391 is a failure with the DW_OP_GNU_implicit_pointer
	feature.
	
	I tracked it down to a logic error in read_pieced_value.  The code
	truncates this_size_bits according to the type size and offset too
	early -- it should do it after taking bits_to_skip into account.
	
	This patch fixes the bug.
	
	While testing this, I also tripped across a latent bug because
	indirect_pieced_value does not sign-extend where needed.  This patch
	fixes this bug as well.
	
	Finally, Pedro pointed out that a previous version implemented sign
	extension incorrectly.  This version introduces a new gdb_sign_extend
	function for this.  A couple of notes on this function:
	
	* It has the gdb_ prefix to avoid clashes with various libraries that
	felt free to avoid proper namespacing.  There is a "sign_extend"
	function in a Tile GX header, in an SOM-related BFD header (and in
	sh64-tdep.c and as a macro in arm-wince-tdep.c, but those are
	ours...)
	
	* I looked at all the sign extensions in gdb and didn't see ones that
	I felt comfortable converting to use this function; in large part
	because I don't have a good way to test the conversion.
	
	Built and regtested on x86-64 Fedora 18.  New test cases included;
	this required a minor addition to the DWARF assembler.  Note that the
	DWARF CU made by implptrpiece.exp uses a funny pointer size in order
	to show the sign-extension bug on all platforms.
	
	* dwarf2loc.c (read_pieced_value): Truncate this_size_bits
	after taking bits_to_skip into account.  Sign extend byte_offset.
	* utils.h (gdb_sign_extend): Declare.
	* utils.c (gdb_sign_extend): New function.
	
	* gdb.dwarf2/implptrpiece.exp: New file.
	* gdb.dwarf2/implptrconst.exp (d): New variable.
	Print d.
	* lib/dwarf2.exp (Dwarf::_location): Handle DW_OP_piece.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15708&r2=1.15709
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/dwarf2loc.c.diff?cvsroot=src&r1=1.173&r2=1.174
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/utils.c.diff?cvsroot=src&r1=1.300&r2=1.301
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/utils.h.diff?cvsroot=src&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3696&r2=1.3697
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/implptrpiece.exp.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/implptrconst.exp.diff?cvsroot=src&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/lib/dwarf.exp.diff?cvsroot=src&r1=1.9&r2=1.10


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