mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-04 13:57:12 +08:00
* defs.h, findvar.c (extract_floating, store_floating): New functions.
* Move SWAP_TARGET_AND_HOST from defs.h to findvar.c because it is now used only by extract_floating and store_floating. * valprint.c (print_floating): Use unsigned arithmetic. Use extract_unsigned_integer instead of SWAP_TARGET_AND_HOST. Change sizeof (float) to 4 and sizeof (double) to 8 (those are always the relevant sizes for this code, which is in #ifdef IEEE_FLOAT). * values.c (unpack_long, unpack_double, value_from_double), valarith.c (value_binop), stabsread.c (define_symbol): Use extract_floating and store_floating instead of SWAP_TARGET_AND_HOST. * config/m68k/tm-m68k.h, config/i960/tm-i960.h (REGISTER_CONVERT_*): Use extract_floating and store_floating. * config/m88k/tm-m88k.h: Add comments (it should be doing the same). * i386-tdep.c (i386_extract_return_value), * remote-nindy.c (nindy_store_registers): Use store_floating.
This commit is contained in:
97
gdb/values.c
97
gdb/values.c
@ -594,49 +594,33 @@ unpack_long (type, valaddr)
|
||||
register int len = TYPE_LENGTH (type);
|
||||
register int nosign = TYPE_UNSIGNED (type);
|
||||
|
||||
if (code == TYPE_CODE_ENUM || code == TYPE_CODE_BOOL)
|
||||
code = TYPE_CODE_INT;
|
||||
if (code == TYPE_CODE_FLT)
|
||||
switch (code)
|
||||
{
|
||||
if (len == sizeof (float))
|
||||
{
|
||||
float retval;
|
||||
memcpy (&retval, valaddr, sizeof (retval));
|
||||
SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
|
||||
return retval;
|
||||
}
|
||||
|
||||
if (len == sizeof (double))
|
||||
{
|
||||
double retval;
|
||||
memcpy (&retval, valaddr, sizeof (retval));
|
||||
SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
|
||||
return retval;
|
||||
}
|
||||
case TYPE_CODE_ENUM:
|
||||
case TYPE_CODE_BOOL:
|
||||
case TYPE_CODE_INT:
|
||||
case TYPE_CODE_CHAR:
|
||||
if (nosign)
|
||||
return extract_unsigned_integer (valaddr, len);
|
||||
else
|
||||
{
|
||||
error ("Unexpected type of floating point number.");
|
||||
}
|
||||
}
|
||||
else if ((code == TYPE_CODE_INT || code == TYPE_CODE_CHAR) && nosign)
|
||||
{
|
||||
return extract_unsigned_integer (valaddr, len);
|
||||
}
|
||||
else if (code == TYPE_CODE_INT || code == TYPE_CODE_CHAR)
|
||||
{
|
||||
return extract_signed_integer (valaddr, len);
|
||||
}
|
||||
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
||||
whether we want this to be true eventually. */
|
||||
else if (code == TYPE_CODE_PTR || code == TYPE_CODE_REF)
|
||||
{
|
||||
return extract_address (valaddr, len);
|
||||
}
|
||||
else if (code == TYPE_CODE_MEMBER)
|
||||
error ("not implemented: member types in unpack_long");
|
||||
return extract_signed_integer (valaddr, len);
|
||||
|
||||
error ("Value not integer or pointer.");
|
||||
return 0; /* For lint -- never reached */
|
||||
case TYPE_CODE_FLT:
|
||||
return extract_floating (valaddr, len);
|
||||
|
||||
case TYPE_CODE_PTR:
|
||||
case TYPE_CODE_REF:
|
||||
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
||||
whether we want this to be true eventually. */
|
||||
return extract_address (valaddr, len);
|
||||
|
||||
case TYPE_CODE_MEMBER:
|
||||
error ("not implemented: member types in unpack_long");
|
||||
|
||||
default:
|
||||
error ("Value can't be converted to intenot integer or pointer.");
|
||||
}
|
||||
return 0; /* Placate lint. */
|
||||
}
|
||||
|
||||
/* Return a double value from the specified type and address.
|
||||
@ -663,27 +647,7 @@ unpack_double (type, valaddr, invp)
|
||||
*invp = 1;
|
||||
return 1.234567891011121314;
|
||||
}
|
||||
|
||||
if (len == sizeof (float))
|
||||
{
|
||||
float retval;
|
||||
memcpy (&retval, valaddr, sizeof (retval));
|
||||
SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
|
||||
return retval;
|
||||
}
|
||||
|
||||
if (len == sizeof (double))
|
||||
{
|
||||
double retval;
|
||||
memcpy (&retval, valaddr, sizeof (retval));
|
||||
SWAP_TARGET_AND_HOST (&retval, sizeof (retval));
|
||||
return retval;
|
||||
}
|
||||
else
|
||||
{
|
||||
error ("Unexpected type of floating point number.");
|
||||
return 0; /* Placate lint. */
|
||||
}
|
||||
return extract_floating (valaddr, TYPE_LENGTH (type));
|
||||
}
|
||||
else if (nosign) {
|
||||
/* Unsigned -- be sure we compensate for signed LONGEST. */
|
||||
@ -1341,20 +1305,11 @@ value_from_double (type, num)
|
||||
|
||||
if (code == TYPE_CODE_FLT)
|
||||
{
|
||||
if (len == sizeof (float))
|
||||
* (float *) VALUE_CONTENTS_RAW (val) = num;
|
||||
else if (len == sizeof (double))
|
||||
* (double *) VALUE_CONTENTS_RAW (val) = num;
|
||||
else
|
||||
error ("Floating type encountered with unexpected data length.");
|
||||
store_floating (VALUE_CONTENTS_RAW (val), len, num);
|
||||
}
|
||||
else
|
||||
error ("Unexpected type encountered for floating constant.");
|
||||
|
||||
/* num was in host byte order. So now put the value's contents
|
||||
into target byte order. */
|
||||
SWAP_TARGET_AND_HOST (VALUE_CONTENTS_RAW (val), len);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user