* gdbtypes.h (builtin_type_f_character, builtin_type_f_logical,

builtin_type_f_logical_s1, builtin_type_f_logical_s2,
	builtin_type_f_integer, builtin_type_f_integer_s2, builtin_type_f_real,
	builtin_type_f_real_s8, builtin_type_f_real_s16,
	builtin_type_f_complex_s8, builtin_type_f_complex_s16,
	builtin_type_f_complex_s32, builtin_type_f_void): Replace global
	variable declaration with compatibility macro.
	(struct builtin_f_type): New data type.
	(builtin_f_type): Add prototype.
	* f-lang.c (builtin_type_f_character, builtin_type_f_logical,
	builtin_type_f_logical_s1, builtin_type_f_logical_s2,
	builtin_type_f_integer, builtin_type_f_integer_s2, builtin_type_f_real,
	builtin_type_f_real_s8, builtin_type_f_real_s16,
	builtin_type_f_complex_s8, builtin_type_f_complex_s16,
	builtin_type_f_complex_s32, builtin_type_f_void): Remove variables.
	(f_language_arch_info): Use builtin_f_type instead of variables.
	(build_fortran_types): Build builtin_f_type structure instead of
	setting global type variables.
	(f_type_data): New variable.
	(builtin_f_type): New function.
	(_initialize_f_language): Do not call build_fortran_types.  Do not
	swap global type variables.  Register f_type_data per-gdbarch data.
This commit is contained in:
Ulrich Weigand
2007-06-16 20:09:07 +00:00
parent 92e0cef42c
commit 54ef06c726
3 changed files with 121 additions and 74 deletions

View File

@ -1,3 +1,28 @@
2007-06-16 Ulrich Weigand <uweigand@de.ibm.com>
* gdbtypes.h (builtin_type_f_character, builtin_type_f_logical,
builtin_type_f_logical_s1, builtin_type_f_logical_s2,
builtin_type_f_integer, builtin_type_f_integer_s2, builtin_type_f_real,
builtin_type_f_real_s8, builtin_type_f_real_s16,
builtin_type_f_complex_s8, builtin_type_f_complex_s16,
builtin_type_f_complex_s32, builtin_type_f_void): Replace global
variable declaration with compatibility macro.
(struct builtin_f_type): New data type.
(builtin_f_type): Add prototype.
* f-lang.c (builtin_type_f_character, builtin_type_f_logical,
builtin_type_f_logical_s1, builtin_type_f_logical_s2,
builtin_type_f_integer, builtin_type_f_integer_s2, builtin_type_f_real,
builtin_type_f_real_s8, builtin_type_f_real_s16,
builtin_type_f_complex_s8, builtin_type_f_complex_s16,
builtin_type_f_complex_s32, builtin_type_f_void): Remove variables.
(f_language_arch_info): Use builtin_f_type instead of variables.
(build_fortran_types): Build builtin_f_type structure instead of
setting global type variables.
(f_type_data): New variable.
(builtin_f_type): New function.
(_initialize_f_language): Do not call build_fortran_types. Do not
swap global type variables. Register f_type_data per-gdbarch data.
2007-06-16 Ulrich Weigand <uweigand@de.ibm.com> 2007-06-16 Ulrich Weigand <uweigand@de.ibm.com>
* f-lang.c (_initialize_f_language): Do not initialize or * f-lang.c (_initialize_f_language): Do not initialize or

View File

@ -34,22 +34,6 @@
#include "valprint.h" #include "valprint.h"
#include "value.h" #include "value.h"
/* The built-in types of F77. FIXME: integer*4 is missing, plain
logical is missing (builtin_type_logical is logical*4). */
struct type *builtin_type_f_character;
struct type *builtin_type_f_logical;
struct type *builtin_type_f_logical_s1;
struct type *builtin_type_f_logical_s2;
struct type *builtin_type_f_integer;
struct type *builtin_type_f_integer_s2;
struct type *builtin_type_f_real;
struct type *builtin_type_f_real_s8;
struct type *builtin_type_f_real_s16;
struct type *builtin_type_f_complex_s8;
struct type *builtin_type_f_complex_s16;
struct type *builtin_type_f_complex_s32;
struct type *builtin_type_f_void;
/* Following is dubious stuff that had been in the xcoff reader. */ /* Following is dubious stuff that had been in the xcoff reader. */
@ -454,31 +438,33 @@ static void
f_language_arch_info (struct gdbarch *gdbarch, f_language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) struct language_arch_info *lai)
{ {
lai->string_char_type = builtin_type_f_character; const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
lai->string_char_type = builtin->builtin_character;
lai->primitive_type_vector lai->primitive_type_vector
= GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1, = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
struct type *); struct type *);
lai->primitive_type_vector [f_primitive_type_character] lai->primitive_type_vector [f_primitive_type_character]
= builtin_type_f_character; = builtin->builtin_character;
lai->primitive_type_vector [f_primitive_type_logical] lai->primitive_type_vector [f_primitive_type_logical]
= builtin_type_f_logical; = builtin->builtin_logical;
lai->primitive_type_vector [f_primitive_type_logical_s1] lai->primitive_type_vector [f_primitive_type_logical_s1]
= builtin_type_f_logical_s1; = builtin->builtin_logical_s1;
lai->primitive_type_vector [f_primitive_type_logical_s2] lai->primitive_type_vector [f_primitive_type_logical_s2]
= builtin_type_f_logical_s2; = builtin->builtin_logical_s2;
lai->primitive_type_vector [f_primitive_type_real] lai->primitive_type_vector [f_primitive_type_real]
= builtin_type_f_real; = builtin->builtin_real;
lai->primitive_type_vector [f_primitive_type_real_s8] lai->primitive_type_vector [f_primitive_type_real_s8]
= builtin_type_f_real_s8; = builtin->builtin_real_s8;
lai->primitive_type_vector [f_primitive_type_real_s16] lai->primitive_type_vector [f_primitive_type_real_s16]
= builtin_type_f_real_s16; = builtin->builtin_real_s16;
lai->primitive_type_vector [f_primitive_type_complex_s8] lai->primitive_type_vector [f_primitive_type_complex_s8]
= builtin_type_f_complex_s8; = builtin->builtin_complex_s8;
lai->primitive_type_vector [f_primitive_type_complex_s16] lai->primitive_type_vector [f_primitive_type_complex_s16]
= builtin_type_f_complex_s16; = builtin->builtin_complex_s16;
lai->primitive_type_vector [f_primitive_type_void] lai->primitive_type_vector [f_primitive_type_void]
= builtin_type_f_void; = builtin->builtin_void;
} }
/* This is declared in c-lang.h but it is silly to import that file for what /* This is declared in c-lang.h but it is silly to import that file for what
@ -522,106 +508,107 @@ const struct language_defn f_language_defn =
LANG_MAGIC LANG_MAGIC
}; };
static void static void *
build_fortran_types (void) build_fortran_types (struct gdbarch *gdbarch)
{ {
builtin_type_f_void = struct builtin_f_type *builtin_f_type
= GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type);
builtin_f_type->builtin_void =
init_type (TYPE_CODE_VOID, 1, init_type (TYPE_CODE_VOID, 1,
0, 0,
"VOID", (struct objfile *) NULL); "VOID", (struct objfile *) NULL);
builtin_type_f_character = builtin_f_type->builtin_character =
init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
0, 0,
"character", (struct objfile *) NULL); "character", (struct objfile *) NULL);
builtin_type_f_logical_s1 = builtin_f_type->builtin_logical_s1 =
init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT, init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
TYPE_FLAG_UNSIGNED, TYPE_FLAG_UNSIGNED,
"logical*1", (struct objfile *) NULL); "logical*1", (struct objfile *) NULL);
builtin_type_f_integer_s2 = builtin_f_type->builtin_integer_s2 =
init_type (TYPE_CODE_INT, init_type (TYPE_CODE_INT,
gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, "integer*2", (struct objfile *) NULL); 0, "integer*2", (struct objfile *) NULL);
builtin_type_f_logical_s2 = builtin_f_type->builtin_logical_s2 =
init_type (TYPE_CODE_BOOL, init_type (TYPE_CODE_BOOL,
gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
TYPE_FLAG_UNSIGNED, "logical*2", (struct objfile *) NULL); TYPE_FLAG_UNSIGNED, "logical*2", (struct objfile *) NULL);
builtin_type_f_integer = builtin_f_type->builtin_integer =
init_type (TYPE_CODE_INT, init_type (TYPE_CODE_INT,
gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, "integer", (struct objfile *) NULL); 0, "integer", (struct objfile *) NULL);
builtin_type_f_logical = builtin_f_type->builtin_logical =
init_type (TYPE_CODE_BOOL, init_type (TYPE_CODE_BOOL,
gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
TYPE_FLAG_UNSIGNED, "logical*4", (struct objfile *) NULL); TYPE_FLAG_UNSIGNED, "logical*4", (struct objfile *) NULL);
builtin_type_f_real = builtin_f_type->builtin_real =
init_type (TYPE_CODE_FLT, init_type (TYPE_CODE_FLT,
gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"real", (struct objfile *) NULL); "real", (struct objfile *) NULL);
builtin_type_f_real_s8 = builtin_f_type->builtin_real_s8 =
init_type (TYPE_CODE_FLT, init_type (TYPE_CODE_FLT,
gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"real*8", (struct objfile *) NULL); "real*8", (struct objfile *) NULL);
builtin_type_f_real_s16 = builtin_f_type->builtin_real_s16 =
init_type (TYPE_CODE_FLT, init_type (TYPE_CODE_FLT,
gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT, gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"real*16", (struct objfile *) NULL); "real*16", (struct objfile *) NULL);
builtin_type_f_complex_s8 = builtin_f_type->builtin_complex_s8 =
init_type (TYPE_CODE_COMPLEX, init_type (TYPE_CODE_COMPLEX,
2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT, 2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"complex*8", (struct objfile *) NULL); "complex*8", (struct objfile *) NULL);
TYPE_TARGET_TYPE (builtin_type_f_complex_s8) = builtin_type_f_real; TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s8)
= builtin_f_type->builtin_real;
builtin_type_f_complex_s16 = builtin_f_type->builtin_complex_s16 =
init_type (TYPE_CODE_COMPLEX, init_type (TYPE_CODE_COMPLEX,
2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT, 2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"complex*16", (struct objfile *) NULL); "complex*16", (struct objfile *) NULL);
TYPE_TARGET_TYPE (builtin_type_f_complex_s16) = builtin_type_f_real_s8; TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s16)
= builtin_f_type->builtin_real_s8;
/* We have a new size == 4 double floats for the /* We have a new size == 4 double floats for the
complex*32 data type */ complex*32 data type */
builtin_type_f_complex_s32 = builtin_f_type->builtin_complex_s32 =
init_type (TYPE_CODE_COMPLEX, init_type (TYPE_CODE_COMPLEX,
2 * gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT, 2 * gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
0, 0,
"complex*32", (struct objfile *) NULL); "complex*32", (struct objfile *) NULL);
TYPE_TARGET_TYPE (builtin_type_f_complex_s32) = builtin_type_f_real_s16; TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s32)
= builtin_f_type->builtin_real_s16;
return builtin_f_type;
}
static struct gdbarch_data *f_type_data;
const struct builtin_f_type *
builtin_f_type (struct gdbarch *gdbarch)
{
return gdbarch_data (gdbarch, f_type_data);
} }
void void
_initialize_f_language (void) _initialize_f_language (void)
{ {
build_fortran_types (); f_type_data = gdbarch_data_register_post_init (build_fortran_types);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_character);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical_s1);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical_s2);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_integer);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_integer_s2);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real_s8);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real_s16);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s8);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s16);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s32);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_void);
deprecated_register_gdbarch_swap (NULL, 0, build_fortran_types);
add_language (&f_language_defn); add_language (&f_language_defn);
} }

View File

@ -1128,19 +1128,54 @@ extern struct type *builtin_type_m2_bool;
/* Fortran (F77) types */ /* Fortran (F77) types */
extern struct type *builtin_type_f_character; struct builtin_f_type
extern struct type *builtin_type_f_integer; {
extern struct type *builtin_type_f_integer_s2; struct type *builtin_character;
extern struct type *builtin_type_f_logical; struct type *builtin_integer;
extern struct type *builtin_type_f_logical_s1; struct type *builtin_integer_s2;
extern struct type *builtin_type_f_logical_s2; struct type *builtin_logical;
extern struct type *builtin_type_f_real; struct type *builtin_logical_s1;
extern struct type *builtin_type_f_real_s8; struct type *builtin_logical_s2;
extern struct type *builtin_type_f_real_s16; struct type *builtin_real;
extern struct type *builtin_type_f_complex_s8; struct type *builtin_real_s8;
extern struct type *builtin_type_f_complex_s16; struct type *builtin_real_s16;
extern struct type *builtin_type_f_complex_s32; struct type *builtin_complex_s8;
extern struct type *builtin_type_f_void; struct type *builtin_complex_s16;
struct type *builtin_complex_s32;
struct type *builtin_void;
};
/* Return the Fortran type table for the specified architecture. */
extern const struct builtin_f_type *builtin_f_type (struct gdbarch *gdbarch);
/* Compatibility macros to access types for the current architecture. */
#define builtin_type_f_character \
(builtin_f_type (current_gdbarch)->builtin_character)
#define builtin_type_f_integer \
(builtin_f_type (current_gdbarch)->builtin_integer)
#define builtin_type_f_integer_s2 \
(builtin_f_type (current_gdbarch)->builtin_integer_s2)
#define builtin_type_f_logical \
(builtin_f_type (current_gdbarch)->builtin_logical)
#define builtin_type_f_logical_s1 \
(builtin_f_type (current_gdbarch)->builtin_logical_s1)
#define builtin_type_f_logical_s2 \
(builtin_f_type (current_gdbarch)->builtin_logical_s2)
#define builtin_type_f_real \
(builtin_f_type (current_gdbarch)->builtin_real)
#define builtin_type_f_real_s8 \
(builtin_f_type (current_gdbarch)->builtin_real_s8)
#define builtin_type_f_real_s16 \
(builtin_f_type (current_gdbarch)->builtin_real_s16)
#define builtin_type_f_complex_s8 \
(builtin_f_type (current_gdbarch)->builtin_complex_s8)
#define builtin_type_f_complex_s16 \
(builtin_f_type (current_gdbarch)->builtin_complex_s16)
#define builtin_type_f_complex_s32 \
(builtin_f_type (current_gdbarch)->builtin_complex_s32)
#define builtin_type_f_void \
(builtin_f_type (current_gdbarch)->builtin_void)
/* RTTI for C++ */ /* RTTI for C++ */
/* extern struct type *builtin_type_cxx_typeinfo; */ /* extern struct type *builtin_type_cxx_typeinfo; */