From 70bd8e24cc5c2a4e6a17606fea19dd7e05bd4a22 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Sat, 7 Aug 2004 21:03:33 +0000 Subject: [PATCH] 2004-08-07 Andrew Cagney * gdbtypes.c (build_flt, build_complex): New functions. (gdbtypes_post_init): Use. --- gdb/ChangeLog | 3 +++ gdb/gdbtypes.c | 71 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 00a1b3f908..db8f96e671 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ 2004-08-07 Andrew Cagney + * gdbtypes.c (build_flt, build_complex): New functions. + (gdbtypes_post_init): Use. + * doublest.c (floatformat_from_length): Fix tipo, "*" not "&". * gdbtypes.c (_initialize_gdbtypes): Do not swap builtin_type_int8 diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 5a00c12345..e42d118e8e 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -3312,6 +3312,37 @@ builtin_type (struct gdbarch *gdbarch) return gdbarch_data (gdbarch, gdbtypes_data); } + +static struct type * +build_flt (int bit, char *name, const struct floatformat *floatformat) +{ + struct type *t; + if (bit <= 0 || floatformat == NULL) + { + gdb_assert (builtin_type_error != NULL); + return builtin_type_error; + } + t = init_type (TYPE_CODE_FLT, bit / TARGET_CHAR_BIT, + 0, name, (struct objfile *) NULL); + TYPE_FLOATFORMAT (t) = floatformat; + return t; +} + +static struct type * +build_complex (int bit, char *name, struct type *target_type) +{ + struct type *t; + if (bit <= 0 || target_type == builtin_type_error) + { + gdb_assert (builtin_type_error != NULL); + return builtin_type_error; + } + t = init_type (TYPE_CODE_COMPLEX, 2 * bit / TARGET_CHAR_BIT, + 0, name, (struct objfile *) NULL); + TYPE_TARGET_TYPE (t) = target_type; + return t; +} + static void * gdbtypes_post_init (struct gdbarch *gdbarch) { @@ -3371,31 +3402,21 @@ gdbtypes_post_init (struct gdbarch *gdbarch) init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "unsigned long long", (struct objfile *) NULL); - builtin_type->builtin_float = - init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT, - 0, - "float", (struct objfile *) NULL); - TYPE_FLOATFORMAT (builtin_type->builtin_float) = TARGET_FLOAT_FORMAT; - builtin_type->builtin_double = - init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT, - 0, - "double", (struct objfile *) NULL); - TYPE_FLOATFORMAT (builtin_type->builtin_double) = TARGET_DOUBLE_FORMAT; - builtin_type->builtin_long_double = - init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT, - 0, - "long double", (struct objfile *) NULL); - TYPE_FLOATFORMAT (builtin_type->builtin_long_double) = TARGET_LONG_DOUBLE_FORMAT; - builtin_type->builtin_complex = - init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT, - 0, - "complex", (struct objfile *) NULL); - TYPE_TARGET_TYPE (builtin_type->builtin_complex) = builtin_type->builtin_float; - builtin_type->builtin_double_complex = - init_type (TYPE_CODE_COMPLEX, 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT, - 0, - "double complex", (struct objfile *) NULL); - TYPE_TARGET_TYPE (builtin_type->builtin_double_complex) = builtin_type->builtin_double; + builtin_type->builtin_float + = build_flt (gdbarch_float_bit (gdbarch), "float", + gdbarch_float_format (gdbarch)); + builtin_type->builtin_double + = build_flt (gdbarch_double_bit (gdbarch), "double", + gdbarch_double_format (gdbarch)); + builtin_type->builtin_long_double + = build_flt (gdbarch_long_double_bit (gdbarch), "long double", + gdbarch_long_double_format (gdbarch)); + builtin_type->builtin_complex + = build_complex (gdbarch_float_bit (gdbarch), "complex", + builtin_type->builtin_float); + builtin_type->builtin_double_complex + = build_complex (gdbarch_double_bit (gdbarch), "double complex", + builtin_type->builtin_double); builtin_type->builtin_string = init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT, 0,