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 testsuite/Chang ...


CVSROOT:	/cvs/src
Module name:	src
Changes by:	brobecke@sourceware.org	2013-05-20 09:45:13

Modified files:
	gdb            : ChangeLog dwarf2read.c 
	gdb/testsuite  : ChangeLog 
Added files:
	gdb/testsuite/gdb.ada: float_param.exp 
	gdb/testsuite/gdb.ada/float_param: foo.adb pck.adb pck.ads 

Log message:
	[dwarf] Mark all functions as prototyped except C functions.
	
	This makes sure that the types of the arguments are taken into account
	when performing an inferior function call to a non-C (or C-like)
	function.  In particular, this makes sure that the arguments are
	appropriatly converted to the correct type.
	
	For instance, on x86_64-linux, with the following Ada code:
	
	procedure Set_Float (F : Float) is
	begin
	Global_Float := F;
	end Set_Float;
	
	The following sequence shows that Float arguments are incorrectly
	passed (Ada's Float type is the equivalent of type "float" in C):
	
	(gdb) call set_float (2.0)
	(gdb) print global_float
	$1 = 0.0
	
	Putting a breakpoint inside set_float to inspect the value of
	register xmm0 gives the first hint of the problem:
	
	(gdb) p $xmm0
	$2 = (v4_float => (0 => 0.0, 2.0, 0.0, 0.0),
	v2_double => (0 => 2.0, 0.0),
	[...]
	
	It shows that the argument was passed as a double.
	
	The code responsible for doing appropriate type conversions
	for the arguments (value_arg_coerce) found that our function
	was not prototyped, and thus could not use typing information
	for the arguments. Instead, it defaulted to the value of "set
	coerce-float-to-double", which by default is true, to determine
	the argument type.
	
	This patch fixes the problem by setting the PROTOTYPE flag
	for all functions of any language except C and Objective C.
	
	gdb/ChangeLog:
	
	* dwarf2read.c (prototyped_function_p): New function.
	(read_subroutine_type): Use it.
	
	gdb/testsuite/ChangeLog:
	
	* gdb.ada/float_param: New testcase.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15571&r2=1.15572
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/dwarf2read.c.diff?cvsroot=src&r1=1.799&r2=1.800
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3663&r2=1.3664
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.ada/float_param.exp.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.ada/float_param/foo.adb.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.ada/float_param/pck.adb.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.ada/float_param/pck.ads.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]