This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[7/9] Add missing format for built-in floating-point types
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Date: Thu, 25 Aug 2016 17:07:44 +0200 (CEST)
- Subject: [7/9] Add missing format for built-in floating-point types
- Authentication-results: sourceware.org; auth=none
Hello,
many callers of init_float_type and arch_float_type still pass a NULL
floatformat. This patch changes those callers where the floatformat
that is supposed to be use is obvious. There are two categories where
this is the case:
- A number of built-in types are intended to match the platform ABI
floating-point types (i.e. types that use gdbarch_float_bit etc.).
Those places should use the platform ABI floating-point formats
defined via gdbarch_float_format etc.
- A number of language built-in types should simply use IEEE floating-
point formats, since the language actually defines that this is the
format that must be used to implement floating-point types for this
language. (This affects Java, Go, and Rust.) The same applies for
to the predefined "RS/6000" stabs floating-point built-in types.
Bye,
Ulrich
ChangeLog:
* ada-lang.c (ada_language_arch_info): Use gdbarch-provided
platform ABI floating-point formats for built-in types.
* d-lang.c (build_d_types): Likewise.
* f-lang.c (build_fortran_types): Likewise.
* m2-lang.c (build_m2_types): Likewise.
* mdebugread.c (basic_type): Likewise.
* go-lang.c (build_go_types): Use IEEE floating-point formats
for language built-in types as mandanted by the language.
* jv-lang.c (build_java_types): Likewise.
* rust-lang.c (rust_language_arch_info): Likewise.
* stabsread.c (rs6000_builtin_type): Likewise.
Index: binutils-gdb/gdb/ada-lang.c
===================================================================
--- binutils-gdb.orig/gdb/ada-lang.c 2016-08-25 13:11:47.068826679 +0200
+++ binutils-gdb/gdb/ada-lang.c 2016-08-25 13:11:51.591846503 +0200
@@ -14004,16 +14004,16 @@ ada_language_arch_info (struct gdbarch *
= arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
lai->primitive_type_vector [ada_primitive_type_float]
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "float", NULL);
+ "float", gdbarch_float_format (gdbarch));
lai->primitive_type_vector [ada_primitive_type_double]
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "long_float", NULL);
+ "long_float", gdbarch_double_format (gdbarch));
lai->primitive_type_vector [ada_primitive_type_long_long]
= arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
0, "long_long_integer");
lai->primitive_type_vector [ada_primitive_type_long_double]
= arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "long_long_float", NULL);
+ "long_long_float", gdbarch_long_double_format (gdbarch));
lai->primitive_type_vector [ada_primitive_type_natural]
= arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
0, "natural");
Index: binutils-gdb/gdb/d-lang.c
===================================================================
--- binutils-gdb.orig/gdb/d-lang.c 2016-08-25 13:11:36.961782431 +0200
+++ binutils-gdb/gdb/d-lang.c 2016-08-25 13:11:51.595846522 +0200
@@ -287,13 +287,13 @@ build_d_types (struct gdbarch *gdbarch)
= arch_integer_type (gdbarch, 128, 1, "ucent");
builtin_d_type->builtin_float
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "float", NULL);
+ "float", gdbarch_float_format (gdbarch));
builtin_d_type->builtin_double
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "double", NULL);
+ "double", gdbarch_double_format (gdbarch));
builtin_d_type->builtin_real
= arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "real", NULL);
+ "real", gdbarch_long_double_format (gdbarch));
TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
|= TYPE_INSTANCE_FLAG_NOTTEXT;
@@ -303,13 +303,13 @@ build_d_types (struct gdbarch *gdbarch)
/* Imaginary and complex types. */
builtin_d_type->builtin_ifloat
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "ifloat", NULL);
+ "ifloat", gdbarch_float_format (gdbarch));
builtin_d_type->builtin_idouble
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "idouble", NULL);
+ "idouble", gdbarch_double_format (gdbarch));
builtin_d_type->builtin_ireal
= arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "ireal", NULL);
+ "ireal", gdbarch_long_double_format (gdbarch));
builtin_d_type->builtin_cfloat
= arch_complex_type (gdbarch, "cfloat",
builtin_d_type->builtin_float);
Index: binutils-gdb/gdb/f-lang.c
===================================================================
--- binutils-gdb.orig/gdb/f-lang.c 2016-08-25 13:11:36.962782435 +0200
+++ binutils-gdb/gdb/f-lang.c 2016-08-25 13:11:51.598846534 +0200
@@ -332,13 +332,13 @@ build_fortran_types (struct gdbarch *gdb
builtin_f_type->builtin_real
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "real", NULL);
+ "real", gdbarch_float_format (gdbarch));
builtin_f_type->builtin_real_s8
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "real*8", NULL);
+ "real*8", gdbarch_double_format (gdbarch));
builtin_f_type->builtin_real_s16
= arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "real*16", NULL);
+ "real*16", gdbarch_long_double_format (gdbarch));
builtin_f_type->builtin_complex_s8
= arch_complex_type (gdbarch, "complex*8",
Index: binutils-gdb/gdb/go-lang.c
===================================================================
--- binutils-gdb.orig/gdb/go-lang.c 2016-08-25 13:11:36.962782435 +0200
+++ binutils-gdb/gdb/go-lang.c 2016-08-25 13:11:51.602846551 +0200
@@ -648,9 +648,9 @@ build_go_types (struct gdbarch *gdbarch)
builtin_go_type->builtin_uint64
= arch_integer_type (gdbarch, 64, 1, "uint64");
builtin_go_type->builtin_float32
- = arch_float_type (gdbarch, 32, "float32", NULL);
+ = arch_float_type (gdbarch, 32, "float32", floatformats_ieee_single);
builtin_go_type->builtin_float64
- = arch_float_type (gdbarch, 64, "float64", NULL);
+ = arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double);
builtin_go_type->builtin_complex64
= arch_complex_type (gdbarch, "complex64",
builtin_go_type->builtin_float32);
Index: binutils-gdb/gdb/jv-lang.c
===================================================================
--- binutils-gdb.orig/gdb/jv-lang.c 2016-08-25 13:11:36.962782435 +0200
+++ binutils-gdb/gdb/jv-lang.c 2016-08-25 13:11:51.606846569 +0200
@@ -1241,9 +1241,9 @@ build_java_types (struct gdbarch *gdbarc
builtin_java_type->builtin_char
= arch_character_type (gdbarch, 16, 1, "char");
builtin_java_type->builtin_float
- = arch_float_type (gdbarch, 32, "float", NULL);
+ = arch_float_type (gdbarch, 32, "float", floatformats_ieee_single);
builtin_java_type->builtin_double
- = arch_float_type (gdbarch, 64, "double", NULL);
+ = arch_float_type (gdbarch, 64, "double", floatformats_ieee_double);
builtin_java_type->builtin_void
= arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
Index: binutils-gdb/gdb/m2-lang.c
===================================================================
--- binutils-gdb.orig/gdb/m2-lang.c 2016-08-25 13:11:36.962782435 +0200
+++ binutils-gdb/gdb/m2-lang.c 2016-08-25 13:11:51.610846587 +0200
@@ -413,7 +413,8 @@ build_m2_types (struct gdbarch *gdbarch)
builtin_m2_type->builtin_card
= arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "CARDINAL");
builtin_m2_type->builtin_real
- = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "REAL", NULL);
+ = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "REAL",
+ gdbarch_float_format (gdbarch));
builtin_m2_type->builtin_char
= arch_character_type (gdbarch, TARGET_CHAR_BIT, 1, "CHAR");
builtin_m2_type->builtin_bool
Index: binutils-gdb/gdb/rust-lang.c
===================================================================
--- binutils-gdb.orig/gdb/rust-lang.c 2016-08-25 13:11:36.961782431 +0200
+++ binutils-gdb/gdb/rust-lang.c 2016-08-25 13:11:51.614846604 +0200
@@ -1128,8 +1128,10 @@ rust_language_arch_info (struct gdbarch
types[rust_primitive_isize] = arch_integer_type (gdbarch, length, 0, "isize");
types[rust_primitive_usize] = arch_integer_type (gdbarch, length, 1, "usize");
- types[rust_primitive_f32] = arch_float_type (gdbarch, 32, "f32", NULL);
- types[rust_primitive_f64] = arch_float_type (gdbarch, 64, "f64", NULL);
+ types[rust_primitive_f32] = arch_float_type (gdbarch, 32, "f32",
+ floatformats_ieee_single);
+ types[rust_primitive_f64] = arch_float_type (gdbarch, 64, "f64",
+ floatformats_ieee_double);
types[rust_primitive_unit] = arch_integer_type (gdbarch, 0, 1, "()");
Index: binutils-gdb/gdb/mdebugread.c
===================================================================
--- binutils-gdb.orig/gdb/mdebugread.c 2016-08-25 13:11:50.768842894 +0200
+++ binutils-gdb/gdb/mdebugread.c 2016-08-25 13:11:51.619846627 +0200
@@ -1441,12 +1441,12 @@ basic_type (int bt, struct objfile *objf
case btFloat:
tp = init_float_type (objfile, gdbarch_float_bit (gdbarch),
- "float", NULL);
+ "float", gdbarch_float_format (gdbarch));
break;
case btDouble:
tp = init_float_type (objfile, gdbarch_double_bit (gdbarch),
- "double", NULL);
+ "double", gdbarch_double_format (gdbarch));
break;
case btComplex:
Index: binutils-gdb/gdb/stabsread.c
===================================================================
--- binutils-gdb.orig/gdb/stabsread.c 2016-08-25 13:11:50.770842904 +0200
+++ binutils-gdb/gdb/stabsread.c 2016-08-25 13:11:51.623846644 +0200
@@ -2133,17 +2133,20 @@ rs6000_builtin_type (int typenum, struct
break;
case 12:
/* IEEE single precision (32 bit). */
- rettype = init_float_type (objfile, 32, "float", NULL);
+ rettype = init_float_type (objfile, 32, "float",
+ floatformats_ieee_single);
break;
case 13:
/* IEEE double precision (64 bit). */
- rettype = init_float_type (objfile, 64, "double", NULL);
+ rettype = init_float_type (objfile, 64, "double",
+ floatformats_ieee_double);
break;
case 14:
/* This is an IEEE double on the RS/6000, and different machines with
different sizes for "long double" should use different negative
type numbers. See stabs.texinfo. */
- rettype = init_float_type (objfile, 64, "long double", NULL);
+ rettype = init_float_type (objfile, 64, "long double",
+ floatformats_ieee_double);
break;
case 15:
rettype = init_integer_type (objfile, 32, 0, "integer");
@@ -2152,10 +2155,12 @@ rs6000_builtin_type (int typenum, struct
rettype = init_boolean_type (objfile, 32, 1, "boolean");
break;
case 17:
- rettype = init_float_type (objfile, 32, "short real", NULL);
+ rettype = init_float_type (objfile, 32, "short real",
+ floatformats_ieee_single);
break;
case 18:
- rettype = init_float_type (objfile, 64, "real", NULL);
+ rettype = init_float_type (objfile, 64, "real",
+ floatformats_ieee_double);
break;
case 19:
rettype = init_type (objfile, TYPE_CODE_ERROR, 0, "stringptr");
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com