aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1995-03-01 07:18:04 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1995-03-01 07:18:04 +0000
commitbc28e68dad2a19b0727d4842d6e9cbaf230dd7fc (patch)
tree5ad8d5a0f5bced002a8c2a789103529fdef0fc94
parent66aa7cf935634f615e1134f708c3d5aa95b3e5bc (diff)
downloadgdb-bc28e68dad2a19b0727d4842d6e9cbaf230dd7fc.zip
gdb-bc28e68dad2a19b0727d4842d6e9cbaf230dd7fc.tar.gz
gdb-bc28e68dad2a19b0727d4842d6e9cbaf230dd7fc.tar.bz2
* 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.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/findvar.c32
-rw-r--r--gdb/hppa-tdep.c4
3 files changed, 35 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b6096ee..6f89ae2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 9225727..edf85ee 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -187,9 +187,27 @@ store_address (addr, len, val)
store_unsigned_integer (addr, len, (LONGEST)val);
}
-
-/* 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
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 74efb3b..3187644 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -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");