2007-10-25 Wu Zhou <woodzltc@cn.ibm.com>
Thiago Jung Bauermann <bauerman@br.ibm.com> * c-lang.c (c_create_fundamental_type): Create fundamental types for DFP. * c-typeprint.c (c_type_print_varspec_prefix): Add TYPE_CODE_DECFLOAT to no prefix needed case. (c_type_print_varspec_suffix): Add TYPE_CODE_DECFLOAT to no suffix needed case. * c-valprint.c (c_val_print): Call print_decimal_floating to print DFP values. * dwarf2read.c (read_base_type): Read DW_ATE_decimal_float attribute code and return TYPE_CODE_DECFLOAT. (dwarf_base_type): Set dwarf2_fundamental_type for DFP values. * gdbtypes.c (gdbtypes_post_init): Initialize builtin_decfloat, builtin_decdouble and builtin_declong. * gdbtypes.h (enum type_code): Add TYPE_CODE_DECFLOAT as a type code for DFP. (FT_DECFLOAT, FT_DBL_PREC_DECFLOAT, FT_EXT_PREC_DECFLOAT): New types, for decimal floating point. (FT_NUM_MEMBERS): Increment, new types added. (struct builtin_type): Add builtin_decfloat, builtin_decdouble and builtin_declong. * valprint.c (print_decimal_floating): New function to print DFP values. * value.h (print_decimal_floating): Prototype.
This commit is contained in:
parent
9b913628cf
commit
7678ef8fb0
@ -1,3 +1,30 @@
|
||||
2007-10-25 Wu Zhou <woodzltc@cn.ibm.com>
|
||||
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
||||
|
||||
* c-lang.c (c_create_fundamental_type): Create fundamental
|
||||
types for DFP.
|
||||
* c-typeprint.c (c_type_print_varspec_prefix): Add
|
||||
TYPE_CODE_DECFLOAT to no prefix needed case.
|
||||
(c_type_print_varspec_suffix): Add TYPE_CODE_DECFLOAT to no
|
||||
suffix needed case.
|
||||
* c-valprint.c (c_val_print): Call print_decimal_floating to
|
||||
print DFP values.
|
||||
* dwarf2read.c (read_base_type): Read DW_ATE_decimal_float
|
||||
attribute code and return TYPE_CODE_DECFLOAT.
|
||||
(dwarf_base_type): Set dwarf2_fundamental_type for DFP values.
|
||||
* gdbtypes.c (gdbtypes_post_init): Initialize builtin_decfloat,
|
||||
builtin_decdouble and builtin_declong.
|
||||
* gdbtypes.h (enum type_code): Add TYPE_CODE_DECFLOAT as a
|
||||
type code for DFP.
|
||||
(FT_DECFLOAT, FT_DBL_PREC_DECFLOAT, FT_EXT_PREC_DECFLOAT): New
|
||||
types, for decimal floating point.
|
||||
(FT_NUM_MEMBERS): Increment, new types added.
|
||||
(struct builtin_type): Add builtin_decfloat, builtin_decdouble
|
||||
and builtin_declong.
|
||||
* valprint.c (print_decimal_floating): New function to print DFP
|
||||
values.
|
||||
* value.h (print_decimal_floating): Prototype.
|
||||
|
||||
2007-10-25 Wu Zhou <woodzltc@cn.ibm.com>
|
||||
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
||||
|
||||
|
15
gdb/c-lang.c
15
gdb/c-lang.c
@ -325,6 +325,21 @@ c_create_fundamental_type (struct objfile *objfile, int typeid)
|
||||
/ TARGET_CHAR_BIT,
|
||||
0, "long double", objfile);
|
||||
break;
|
||||
case FT_DECFLOAT:
|
||||
type = init_type (TYPE_CODE_DECFLOAT,
|
||||
32 / 8,
|
||||
0, "decimal float", objfile);
|
||||
break;
|
||||
case FT_DBL_PREC_DECFLOAT:
|
||||
type = init_type (TYPE_CODE_DECFLOAT,
|
||||
64 / 8,
|
||||
0, "decimal double", objfile);
|
||||
break;
|
||||
case FT_EXT_PREC_DECFLOAT:
|
||||
type = init_type (TYPE_CODE_DECFLOAT,
|
||||
128 / 8,
|
||||
0, "decimal long double", objfile);
|
||||
break;
|
||||
case FT_COMPLEX:
|
||||
type = init_type (TYPE_CODE_FLT,
|
||||
2 * gdbarch_float_bit (current_gdbarch)
|
||||
|
@ -277,6 +277,7 @@ c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
|
||||
case TYPE_CODE_COMPLEX:
|
||||
case TYPE_CODE_TEMPLATE:
|
||||
case TYPE_CODE_NAMESPACE:
|
||||
case TYPE_CODE_DECFLOAT:
|
||||
/* These types need no prefix. They are listed here so that
|
||||
gcc -Wall will reveal any types that haven't been handled. */
|
||||
break;
|
||||
@ -599,6 +600,7 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
|
||||
case TYPE_CODE_COMPLEX:
|
||||
case TYPE_CODE_TEMPLATE:
|
||||
case TYPE_CODE_NAMESPACE:
|
||||
case TYPE_CODE_DECFLOAT:
|
||||
/* These types do not need a suffix. They are listed so that
|
||||
gcc -Wall will report types that may not have been considered. */
|
||||
break;
|
||||
|
@ -474,6 +474,13 @@ c_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_CODE_DECFLOAT:
|
||||
if (format)
|
||||
print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
|
||||
else
|
||||
print_decimal_floating (valaddr + embedded_offset, type, stream);
|
||||
break;
|
||||
|
||||
case TYPE_CODE_VOID:
|
||||
fprintf_filtered (stream, "void");
|
||||
break;
|
||||
|
@ -4865,6 +4865,9 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
case DW_ATE_complex_float:
|
||||
code = TYPE_CODE_COMPLEX;
|
||||
break;
|
||||
case DW_ATE_decimal_float:
|
||||
code = TYPE_CODE_DECFLOAT;
|
||||
break;
|
||||
case DW_ATE_float:
|
||||
code = TYPE_CODE_FLT;
|
||||
break;
|
||||
@ -7751,6 +7754,14 @@ dwarf_base_type (int encoding, int size, struct dwarf2_cu *cu)
|
||||
type = dwarf2_fundamental_type (objfile, FT_FLOAT, cu);
|
||||
}
|
||||
return type;
|
||||
case DW_ATE_decimal_float:
|
||||
if (size == 16)
|
||||
type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_DECFLOAT, cu);
|
||||
else if (size == 8)
|
||||
type = dwarf2_fundamental_type (objfile, FT_EXT_PREC_DECFLOAT, cu);
|
||||
else
|
||||
type = dwarf2_fundamental_type (objfile, FT_DECFLOAT, cu);
|
||||
return type;
|
||||
case DW_ATE_signed:
|
||||
switch (size)
|
||||
{
|
||||
|
@ -3506,6 +3506,21 @@ gdbtypes_post_init (struct gdbarch *gdbarch)
|
||||
0,
|
||||
"bool", (struct objfile *) NULL);
|
||||
|
||||
/* The following three are about decimal floating point types, which
|
||||
are 32-bits, 64-bits and 128-bits respectively. */
|
||||
builtin_type->builtin_decfloat
|
||||
= init_type (TYPE_CODE_DECFLOAT, 32 / 8,
|
||||
0,
|
||||
"decimal float", (struct objfile *) NULL);
|
||||
builtin_type->builtin_decdouble
|
||||
= init_type (TYPE_CODE_DECFLOAT, 64 / 8,
|
||||
0,
|
||||
"decimal double", (struct objfile *) NULL);
|
||||
builtin_type->builtin_declong
|
||||
= init_type (TYPE_CODE_DECFLOAT, 128 / 8,
|
||||
0,
|
||||
"decimal long double", (struct objfile *) NULL);
|
||||
|
||||
/* Pointer/Address types. */
|
||||
|
||||
/* NOTE: on some targets, addresses and pointers are not necessarily
|
||||
|
@ -65,7 +65,12 @@ struct block;
|
||||
#define FT_UNSIGNED_BYTE 27
|
||||
#define FT_TEMPLATE_ARG 28
|
||||
|
||||
#define FT_NUM_MEMBERS 29 /* Highest FT_* above, plus one. */
|
||||
/* The following three fundamental types are for decimal floating point. */
|
||||
#define FT_DECFLOAT 29
|
||||
#define FT_DBL_PREC_DECFLOAT 30
|
||||
#define FT_EXT_PREC_DECFLOAT 31
|
||||
|
||||
#define FT_NUM_MEMBERS 32 /* Highest FT_* above, plus one. */
|
||||
|
||||
/* Some macros for char-based bitfields. */
|
||||
|
||||
@ -169,7 +174,9 @@ enum type_code
|
||||
TYPE_CODE_TEMPLATE, /* C++ template */
|
||||
TYPE_CODE_TEMPLATE_ARG, /* C++ template arg */
|
||||
|
||||
TYPE_CODE_NAMESPACE /* C++ namespace. */
|
||||
TYPE_CODE_NAMESPACE, /* C++ namespace. */
|
||||
|
||||
TYPE_CODE_DECFLOAT /* Decimal floating point. */
|
||||
};
|
||||
|
||||
/* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
|
||||
@ -1041,6 +1048,9 @@ struct builtin_type
|
||||
struct type *builtin_bool;
|
||||
struct type *builtin_long_long;
|
||||
struct type *builtin_unsigned_long_long;
|
||||
struct type *builtin_decfloat;
|
||||
struct type *builtin_decdouble;
|
||||
struct type *builtin_declong;
|
||||
};
|
||||
|
||||
/* Return the type table for the specified architecture. */
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "floatformat.h"
|
||||
#include "doublest.h"
|
||||
#include "exceptions.h"
|
||||
#include "dfp.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
@ -505,6 +506,18 @@ print_floating (const gdb_byte *valaddr, struct type *type,
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
print_decimal_floating (const gdb_byte *valaddr, struct type *type,
|
||||
struct ui_file *stream)
|
||||
{
|
||||
char decstr[MAX_DECIMAL_STRING];
|
||||
unsigned len = TYPE_LENGTH (type);
|
||||
|
||||
decimal_to_string (valaddr, len, decstr);
|
||||
fputs_filtered (decstr, stream);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
|
||||
unsigned len)
|
||||
|
@ -492,6 +492,9 @@ extern void print_longest (struct ui_file *stream, int format,
|
||||
extern void print_floating (const gdb_byte *valaddr, struct type *type,
|
||||
struct ui_file *stream);
|
||||
|
||||
extern void print_decimal_floating (const gdb_byte *valaddr, struct type *type,
|
||||
struct ui_file *stream);
|
||||
|
||||
extern int value_print (struct value *val, struct ui_file *stream, int format,
|
||||
enum val_prettyprint pretty);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user