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

[ping] mips-tdep.c: Sign-extend pointers for n32


Hello,

 Hmm, no opinion on this fix whatsoever?

  Maciej

---------- Forwarded message ----------
Message-ID: <Pine.LNX.4.61.0710251443260.22756@perivale.mips.com>
Date: Thu, 25 Oct 2007 15:10:20 +0100 (BST)
From: Maciej W. Rozycki <macro@mips.com>
To: gdb-patches@sourceware.org
Cc: David Ung <davidu@mips.com>, Maciej W. Rozycki <macro@linux-mips.org>
Subject: mips-tdep.c: Sign-extend pointers for n32

Hello,

 The change below fixes a few regressions in the GDB test suite for 
MIPS/n32 like the one below:

print (diamond.*left_base_vpmf) ()
UNPREDICTABLE: PC = 0x80020580
Quit
(gdb) FAIL: gdb.cp/member-ptr.exp: print (diamond.*left_base_vpmf) ()

 Tested for n32 using the mipsisa32-sde-elf target, with the 
mips-sim-sde64/-mips64/-EB and mips-sim-sde64/-mips64/-EL boards, fixing 6 
regressions (of 78) for the former and 3 regressions (of 74) for the 
latter.

2007-10-25  David Ung  <davidu@mips.com>

	* mips-tdep.c (mips_n32n64_push_dummy_call): Sign-extend the
	pointer value if the length of the variable is less than the
	width of the register size of the ABI.

 OK to apply?

  Maciej

12741-0.diff
Index: binutils-quilt/src/gdb/mips-tdep.c
===================================================================
--- binutils-quilt.orig/src/gdb/mips-tdep.c	2007-09-21 17:19:38.000000000 +0100
+++ binutils-quilt/src/gdb/mips-tdep.c	2007-09-21 17:19:38.000000000 +0100
@@ -3032,6 +3032,10 @@
 			  || typecode == TYPE_CODE_UNION))
 		    regval <<= ((MIPS64_REGSIZE - partial_len)
 				* TARGET_CHAR_BIT);
+		  /* Sign extend the value if it is an address.  */
+		  else if (partial_len < MIPS64_REGSIZE
+			   && typecode == TYPE_CODE_PTR)
+		    regval = extract_signed_integer (val, partial_len);
 
 		  if (mips_debug)
 		    fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",


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