diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1995-03-01 07:18:04 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1995-03-01 07:18:04 +0000 |
commit | bc28e68dad2a19b0727d4842d6e9cbaf230dd7fc (patch) | |
tree | 5ad8d5a0f5bced002a8c2a789103529fdef0fc94 | |
parent | 66aa7cf935634f615e1134f708c3d5aa95b3e5bc (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/findvar.c | 32 | ||||
-rw-r--r-- | gdb/hppa-tdep.c | 4 |
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"); |