diff options
author | Kevin Buettner <kevinb@redhat.com> | 2010-12-14 21:07:50 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2010-12-14 21:07:50 +0000 |
commit | a8852dc55e66b770e87e3028189ed2be09e86b81 (patch) | |
tree | d0645394e11af41d0118f8c3a4de1b5119f01bce | |
parent | 9b547ce6834ed6367db2e76b2c4c2e99b188fc9b (diff) | |
download | gdb-a8852dc55e66b770e87e3028189ed2be09e86b81.zip gdb-a8852dc55e66b770e87e3028189ed2be09e86b81.tar.gz gdb-a8852dc55e66b770e87e3028189ed2be09e86b81.tar.bz2 |
* mips-tdep.c (mips_eabi_push_dummy_call): Place signed, rather
than unsigned, values in registers.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 22 |
2 files changed, 16 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 002f3d2..b14a856 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-12-14 Kevin Buettner <kevinb@redhat.com> + + * mips-tdep.c (mips_eabi_push_dummy_call): Place signed, rather + than unsigned, values in registers. + 2010-12-14 Ken Werner <ken.werner@de.ibm.com> * valops.c (value_one): Use get_array_bounds to compute the number diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 7f28c18..98e7a3e 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -2826,23 +2826,23 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function, { int low_offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 4 : 0; - unsigned long regval; + long regval; /* Write the low word of the double to the even register(s). */ - regval = extract_unsigned_integer (val + low_offset, - 4, byte_order); + regval = extract_signed_integer (val + low_offset, + 4, byte_order); if (mips_debug) fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s", float_argreg, phex (regval, 4)); - regcache_cooked_write_unsigned (regcache, float_argreg++, regval); + regcache_cooked_write_signed (regcache, float_argreg++, regval); /* Write the high word of the double to the odd register(s). */ - regval = extract_unsigned_integer (val + 4 - low_offset, - 4, byte_order); + regval = extract_signed_integer (val + 4 - low_offset, + 4, byte_order); if (mips_debug) fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s", float_argreg, phex (regval, 4)); - regcache_cooked_write_unsigned (regcache, float_argreg++, regval); + regcache_cooked_write_signed (regcache, float_argreg++, regval); } else { @@ -2850,11 +2850,11 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function, in a single register. */ /* On 32 bit ABI's the float_argreg is further adjusted above to ensure that it is even register aligned. */ - LONGEST regval = extract_unsigned_integer (val, len, byte_order); + LONGEST regval = extract_signed_integer (val, len, byte_order); if (mips_debug) fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s", float_argreg, phex (regval, len)); - regcache_cooked_write_unsigned (regcache, float_argreg++, regval); + regcache_cooked_write_signed (regcache, float_argreg++, regval); } } else @@ -2937,13 +2937,13 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function, && !fp_register_arg_p (gdbarch, typecode, arg_type)) { LONGEST regval = - extract_unsigned_integer (val, partial_len, byte_order); + extract_signed_integer (val, partial_len, byte_order); if (mips_debug) fprintf_filtered (gdb_stdlog, " - reg=%d val=%s", argreg, phex (regval, regsize)); - regcache_cooked_write_unsigned (regcache, argreg, regval); + regcache_cooked_write_signed (regcache, argreg, regval); argreg++; } |