I'm using the obvious fix rule to commit this.
authorMichael Chastain <mec@google.com>
Sat, 7 Jul 2001 00:14:06 +0000 (00:14 +0000)
committerMichael Chastain <mec@google.com>
Sat, 7 Jul 2001 00:14:06 +0000 (00:14 +0000)
Testing: I tested on native Red Hat Linux 7 using gcc 3.0.
The "info float" command exercises print_i387_value.

2001-07-06  Michael Chastain  <chastain@redhat.com>

* i387-tdep.c (print_i387_value): Fix pointer glitch.

===

Index: i387-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i387-tdep.c,v
retrieving revision 1.11
diff -c -1 -0 -p -r1.11 i387-tdep.c
*** gdb/i387-tdep.c 2001/07/04 21:14:05 1.11
--- gdb/i387-tdep.c 2001/07/06 12:47:00
*************** print_i387_value (char *raw)
*** 163,184 ****
    DOUBLEST value;
    int len = TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT;
    char *tmp = alloca (len);

    /* This code only works on targets where ... */
    gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);

    /* Take care of the padding.  FP reg is 80 bits.  The same value in
       memory is 96 bits.  */
    gdb_assert (FPU_REG_RAW_SIZE < len);
!   memcpy (&tmp, raw, FPU_REG_RAW_SIZE);
!   memset (&tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);

    /* Extract the value as a DOUBLEST.  */
    /* Use extract_floating() rather than floatformat_to_doublest().
       The latter is lossy in nature.  Once GDB gets a host/target
       independent and non-lossy FP it will become possible to bypass
       extract_floating() and call floatformat*() directly.  Note also
       the assumptions about TARGET_LONG_DOUBLE above.  */
    value = extract_floating (tmp, len);

    /* We try to print 19 digits.  The last digit may or may not contain
--- 163,184 ----
    DOUBLEST value;
    int len = TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT;
    char *tmp = alloca (len);

    /* This code only works on targets where ... */
    gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);

    /* Take care of the padding.  FP reg is 80 bits.  The same value in
       memory is 96 bits.  */
    gdb_assert (FPU_REG_RAW_SIZE < len);
!   memcpy (tmp, raw, FPU_REG_RAW_SIZE);
!   memset (tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);

    /* Extract the value as a DOUBLEST.  */
    /* Use extract_floating() rather than floatformat_to_doublest().
       The latter is lossy in nature.  Once GDB gets a host/target
       independent and non-lossy FP it will become possible to bypass
       extract_floating() and call floatformat*() directly.  Note also
       the assumptions about TARGET_LONG_DOUBLE above.  */
    value = extract_floating (tmp, len);

    /* We try to print 19 digits.  The last digit may or may not contain

gdb/ChangeLog
gdb/i387-tdep.c

index 1fb4efc3477e98f0183e2e7ee49008030371a87d..c240072499e586eb47439b19b4812275496ec2f4 100644 (file)
@@ -1,3 +1,7 @@
+2001-07-06  Michael Chastain  <chastain@redhat.com>
+
+       * i387-tdep.c (print_i387_value): Fix pointer glitch.
+
 2001-07-07  Mark Kettenis  <kettenis@gnu.org>
 
        * lin-lwp.c (count_events_callback): Fix formatting.  Turn check
index 71cb030ca3f076e7384c687c46c184d351d0aa1b..66b6dc0370c8388ed0edb04c38eb57bfde1e830e 100644 (file)
@@ -170,8 +170,8 @@ print_i387_value (char *raw)
   /* Take care of the padding.  FP reg is 80 bits.  The same value in
      memory is 96 bits.  */
   gdb_assert (FPU_REG_RAW_SIZE < len);
-  memcpy (&tmp, raw, FPU_REG_RAW_SIZE);
-  memset (&tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
+  memcpy (tmp, raw, FPU_REG_RAW_SIZE);
+  memset (tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
   
   /* Extract the value as a DOUBLEST.  */
   /* Use extract_floating() rather than floatformat_to_doublest().