* hppa-tdep.c (pa_print_registers), monitor.c: Use
authorJim Kingdon <jkingdon@engr.sgi.com>
Wed, 1 Mar 1995 07:18:04 +0000 (07:18 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Wed, 1 Mar 1995 07:18:04 +0000 (07:18 +0000)
extract_unsigned_integer and friends, not SWAP_TARGET_AND_HOST.
* defs.h, findvar.c: Move SWAP_TARGET_AND_HOST back to findvar.c.
Rename it to SWAP_FLOATING to make it clear it is no longer for
integers.

gdb/ChangeLog
gdb/findvar.c
gdb/hppa-tdep.c

index b6096eefda1f5e4e879a9fffee01c6c016a6c594..6f89ae2b4e9a7a3da7fa104dee251fc1ee9d6ea0 100644 (file)
@@ -1,3 +1,11 @@
+Tue Feb 28 22:55:47 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * hppa-tdep.c (pa_print_registers), monitor.c: Use
+       extract_unsigned_integer and friends, not SWAP_TARGET_AND_HOST.
+       * defs.h, findvar.c: Move SWAP_TARGET_AND_HOST back to findvar.c.
+       Rename it to SWAP_FLOATING to make it clear it is no longer for
+       integers.
+
 Tue Feb 28 14:38:39 1995  Kung Hsu  <kung@mexican.cygnus.com>
 
        * defs.h (SWAP_TARGET_AND_HOST): check endianess at runtime not
index 922572786b3d109ba51631bc7e753eb37e8bb749..edf85ee568bccec98ae10f0470fab8a4da288781 100644 (file)
@@ -187,9 +187,27 @@ store_address (addr, len, val)
   store_unsigned_integer (addr, len, (LONGEST)val);
 }
 \f
-
-/* There are many problems with floating point cross-debugging
-   in macro SWAP_TARGET_AND_HOST().
+/* Swap LEN bytes at BUFFER between target and host byte-order.  */
+#define SWAP_FLOATING(buffer,len) \
+  do                                                                    \
+    {                                                                   \
+      if (TARGET_BYTE_ORDER != HOST_BYTE_ORDER)                         \
+        {                                                               \
+          char tmp;                                                     \
+          char *p = (char *)(buffer);                                   \
+          char *q = ((char *)(buffer)) + len - 1;                       \
+          for (; p < q; p++, q--)                                       \
+            {                                                           \
+              tmp = *q;                                                 \
+              *q = *p;                                                  \
+              *p = tmp;                                                 \
+            }                                                           \
+        }                                                               \
+    }                                                                   \
+  while (0)
+
+/* There are various problems with the extract_floating and store_floating
+   routines.
 
    1.  These routines only handle byte-swapping, not conversion of
    formats.  So if host is IEEE floating and target is VAX floating,
@@ -213,14 +231,14 @@ extract_floating (addr, len)
     {
       float retval;
       memcpy (&retval, addr, sizeof (retval));
-      SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
+      SWAP_FLOATING (&retval, sizeof (retval));
       return retval;
     }
   else if (len == sizeof (double))
     {
       double retval;
       memcpy (&retval, addr, sizeof (retval));
-      SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
+      SWAP_FLOATING (&retval, sizeof (retval));
       return retval;
     }
   else
@@ -238,12 +256,12 @@ store_floating (addr, len, val)
   if (len == sizeof (float))
     {
       float floatval = val;
-      SWAP_TARGET_AND_HOST (&floatval, sizeof (floatval));
+      SWAP_FLOATING (&floatval, sizeof (floatval));
       memcpy (addr, &floatval, sizeof (floatval));
     }
   else if (len == sizeof (double))
     {
-      SWAP_TARGET_AND_HOST (&val, sizeof (val));
+      SWAP_FLOATING (&val, sizeof (val));
       memcpy (addr, &val, sizeof (val));
     }
   else
index 74efb3b935b5f7a60634053f461fab21a55b3472..31876443fabea59fdb5989ff769b77a6ac10c25a 100644 (file)
@@ -1652,8 +1652,8 @@ pa_print_registers (raw_regs, regnum, fpregs)
     {
       for (j = 0; j < 4; j++)
        {
-         val = *(int *)(raw_regs + REGISTER_BYTE (i+(j*18)));
-         SWAP_TARGET_AND_HOST (&val, 4);
+         val =
+           extract_signed_integer (raw_regs + REGISTER_BYTE (i+(j*18)), 4);
          printf_unfiltered ("%8.8s: %8x  ", reg_names[i+(j*18)], val);
        }
       printf_unfiltered ("\n");