* gdbtypes.h (builtin_type_f_character, builtin_type_f_logical,
authorUlrich Weigand <uweigand@de.ibm.com>
Sat, 16 Jun 2007 20:09:07 +0000 (20:09 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Sat, 16 Jun 2007 20:09:07 +0000 (20:09 +0000)
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.

gdb/ChangeLog
gdb/f-lang.c
gdb/gdbtypes.h

index 1cedf60083c55832a823850ce5b381b3d69b9a82..95a98a9e5bd3f0ed2e48d96f81923b68742583d8 100644 (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>
 
        * f-lang.c (_initialize_f_language): Do not initialize or
index 353466c44be95112f91c3646bb75da3b5ceb7e56..dd0b66672a41f4d3bde5c11668054bb94eafd7a2 100644 (file)
 #include "valprint.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. */
 
@@ -454,31 +438,33 @@ static void
 f_language_arch_info (struct gdbarch *gdbarch,
                      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
     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
                               struct type *);
 
   lai->primitive_type_vector [f_primitive_type_character]
-    = builtin_type_f_character;
+    = builtin->builtin_character;
   lai->primitive_type_vector [f_primitive_type_logical]
-    = builtin_type_f_logical;
+    = builtin->builtin_logical;
   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]
-    = builtin_type_f_logical_s2;
+    = builtin->builtin_logical_s2;
   lai->primitive_type_vector [f_primitive_type_real]
-    = builtin_type_f_real;
+    = builtin->builtin_real;
   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]
-    = builtin_type_f_real_s16;
+    = builtin->builtin_real_s16;
   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]
-    = builtin_type_f_complex_s16;
+    = builtin->builtin_complex_s16;
   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
@@ -522,106 +508,107 @@ const struct language_defn f_language_defn =
   LANG_MAGIC
 };
 
-static void
-build_fortran_types (void)
+static 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,
               0,
               "VOID", (struct objfile *) NULL);
 
-  builtin_type_f_character =
+  builtin_f_type->builtin_character =
     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
               0,
               "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,
               TYPE_FLAG_UNSIGNED,
               "logical*1", (struct objfile *) NULL);
 
-  builtin_type_f_integer_s2 =
+  builtin_f_type->builtin_integer_s2 =
     init_type (TYPE_CODE_INT,
               gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0, "integer*2", (struct objfile *) NULL);
 
-  builtin_type_f_logical_s2 =
+  builtin_f_type->builtin_logical_s2 =
     init_type (TYPE_CODE_BOOL,
               gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
               TYPE_FLAG_UNSIGNED, "logical*2", (struct objfile *) NULL);
 
-  builtin_type_f_integer =
+  builtin_f_type->builtin_integer =
     init_type (TYPE_CODE_INT, 
               gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0, "integer", (struct objfile *) NULL);
 
-  builtin_type_f_logical =
+  builtin_f_type->builtin_logical =
     init_type (TYPE_CODE_BOOL, 
               gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
               TYPE_FLAG_UNSIGNED, "logical*4", (struct objfile *) NULL);
 
-  builtin_type_f_real =
+  builtin_f_type->builtin_real =
     init_type (TYPE_CODE_FLT,
               gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "real", (struct objfile *) NULL);
 
-  builtin_type_f_real_s8 =
+  builtin_f_type->builtin_real_s8 =
     init_type (TYPE_CODE_FLT,
               gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "real*8", (struct objfile *) NULL);
 
-  builtin_type_f_real_s16 =
+  builtin_f_type->builtin_real_s16 =
     init_type (TYPE_CODE_FLT,
               gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "real*16", (struct objfile *) NULL);
 
-  builtin_type_f_complex_s8 =
+  builtin_f_type->builtin_complex_s8 =
     init_type (TYPE_CODE_COMPLEX,
               2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "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,
               2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "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
      complex*32 data type */
 
-  builtin_type_f_complex_s32 =
+  builtin_f_type->builtin_complex_s32 =
     init_type (TYPE_CODE_COMPLEX,
               2 * gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
               0,
               "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
 _initialize_f_language (void)
 {
-  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);
+  f_type_data = gdbarch_data_register_post_init (build_fortran_types);
 
   add_language (&f_language_defn);
 }
index 36bf2d69a0eb4b73b2cff4dc0e98fc811b28aea1..9dd05a553f6c5f2630a1b0ef42ebcd79379e4db4 100644 (file)
@@ -1128,19 +1128,54 @@ extern struct type *builtin_type_m2_bool;
 
 /* Fortran (F77) types */
 
-extern struct type *builtin_type_f_character;
-extern struct type *builtin_type_f_integer;
-extern struct type *builtin_type_f_integer_s2;
-extern struct type *builtin_type_f_logical;
-extern struct type *builtin_type_f_logical_s1;
-extern struct type *builtin_type_f_logical_s2;
-extern struct type *builtin_type_f_real;
-extern struct type *builtin_type_f_real_s8;
-extern struct type *builtin_type_f_real_s16;
-extern struct type *builtin_type_f_complex_s8;
-extern struct type *builtin_type_f_complex_s16;
-extern struct type *builtin_type_f_complex_s32;
-extern struct type *builtin_type_f_void;
+struct builtin_f_type
+{
+  struct type *builtin_character;
+  struct type *builtin_integer;
+  struct type *builtin_integer_s2;
+  struct type *builtin_logical;
+  struct type *builtin_logical_s1;
+  struct type *builtin_logical_s2;
+  struct type *builtin_real;
+  struct type *builtin_real_s8;
+  struct type *builtin_real_s16;
+  struct type *builtin_complex_s8;
+  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++ */
 /* extern struct type *builtin_type_cxx_typeinfo; */