* vax-tdep.c (INVALID_FLOAT): To here. Document why it is broken.
* rs6000-tdep.c (rs6000_do_registers_info): Delete code wrapped in
#ifdef INVALID_FLOAT.
* infcmd.c (do_registers_info): Ditto.
* values.c (unpack_double): Ditto. Add comment.
* config/ns32k/tm-umax.h (INVALID_FLOAT): Delete macro that was
already commented out.
+2002-01-28 Andrew Cagney <ac131313@redhat.com>
+
+ * config/vax/tm-vax.h (INVALID_FLOAT): Move macro from here...
+ * vax-tdep.c (INVALID_FLOAT): To here. Document why it is broken.
+
+ * rs6000-tdep.c (rs6000_do_registers_info): Delete code wrapped in
+ #ifdef INVALID_FLOAT.
+ * infcmd.c (do_registers_info): Ditto.
+ * values.c (unpack_double): Ditto. Add comment.
+
+ * config/ns32k/tm-umax.h (INVALID_FLOAT): Delete macro that was
+ already commented out.
+
2002-01-26 Andreas Schwab <schwab@suse.de>
* config/m68k/nm-linux.h (FETCH_INFERIOR_REGISTERS): Define.
#define DECR_PC_AFTER_BREAK 0
-#if 0 /* Disable until fixed *correctly*. */
-#ifndef INVALID_FLOAT
-#ifndef NaN
-#include <nan.h>
-#endif /* NaN */
-
-/* Return 1 if P points to an invalid floating point value. */
-/* Surely wrong for cross-debugging. */
-#define INVALID_FLOAT(p, s) \
- ((s == sizeof (float))? \
- NaF (*(float *) p) : \
- NaD (*(double *) p))
-#endif /* INVALID_FLOAT */
-#endif
-
/* Say how long (ordinary) registers are. This is a piece of bogosity
used in push_word and a few other places; REGISTER_RAW_SIZE is the
real way to know how big a register is. */
#define DECR_PC_AFTER_BREAK 0
-/* Return 1 if P points to an invalid floating point value.
- LEN is the length in bytes -- not relevant on the Vax. */
-
-#define INVALID_FLOAT(p, len) ((*(short *) p & 0xff80) == 0x8000)
-
/* Say how long (ordinary) registers are. This is a piece of bogosity
used in push_word and a few other places; REGISTER_RAW_SIZE is the
real way to know how big a register is. */
{
register int j;
-#ifdef INVALID_FLOAT
- if (INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
- printf_filtered ("<invalid float>");
- else
-#endif
- val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
- gdb_stdout, 0, 1, 0, Val_pretty_default);
+ val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
+ gdb_stdout, 0, 1, 0, Val_pretty_default);
printf_filtered ("\t(raw 0x");
for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
{
register int j;
-#ifdef INVALID_FLOAT
- if (INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
- printf_filtered ("<invalid float>");
- else
-#endif
- val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
- gdb_stdout, 0, 1, 0, Val_pretty_default);
+ val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
+ gdb_stdout, 0, 1, 0, Val_pretty_default);
printf_filtered ("\t(raw 0x");
for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
nosign = TYPE_UNSIGNED (type);
if (code == TYPE_CODE_FLT)
{
-#ifdef INVALID_FLOAT
- if (INVALID_FLOAT (valaddr, len))
- {
- *invp = 1;
- return 1.234567891011121314;
- }
-#endif
+ /* NOTE: cagney/2002-02-19: There was a test here to see if the
+ floating-point value was valid (using the macro
+ INVALID_FLOAT). That test/macro have been removed.
+
+ It turns out that only the VAX defined this macro and then
+ only in a non-portable way. Fixing the portability problem
+ wouldn't help since the VAX floating-point code is also badly
+ bit-rotten. The target needs to add definitions for the
+ methods TARGET_FLOAT_FORMAT and TARGET_DOUBLE_FORMAT - these
+ exactly describe the target floating-point format. The
+ problem here is that the corresponding floatformat_vax_f and
+ floatformat_vax_d values these methods should be set to are
+ also not defined either. Oops!
+
+ Hopefully someone will add both the missing floatformat
+ definitions and floatformat_is_invalid() function. */
return extract_typed_floating (valaddr, type);
}
else if (nosign)
#include "frame.h"
#include "value.h"
+/* Return 1 if P points to an invalid floating point value.
+ LEN is the length in bytes -- not relevant on the Vax. */
+
+/* FIXME: cagney/2002-01-19: The macro below was originally defined in
+ tm-vax.h and used in values.c. Two problems. Firstly this is a
+ very non-portable and secondly it is wrong. The VAX should be
+ using floatformat and associated methods to identify and handle
+ invalid floating-point values. Adding to the poor target's woes
+ there is no floatformat_vax_{f,d} and no TARGET_FLOAT_FORMAT
+ et.al.. */
+
+/* FIXME: cagney/2002-01-19: It turns out that the only thing that
+ uses this macro is the vax disassembler code (so how old is this
+ target?). This target should instead be using the opcodes
+ disassembler. That allowing the macro to be eliminated. */
+
+#define INVALID_FLOAT(p, len) ((*(short *) p & 0xff80) == 0x8000)
+
/* Vax instructions are never longer than this. */
#define MAXLEN 62