This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
mips-tdep.c: Sign-extend pointers for n32
- From: "Maciej W. Rozycki" <macro at mips dot com>
- To: gdb-patches at sourceware dot org
- Cc: David Ung <davidu at mips dot com>, "Maciej W. Rozycki" <macro at linux-mips dot org>
- Date: Thu, 25 Oct 2007 15:10:20 +0100 (BST)
- 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",