From 5760b90a9095ebf24c15e2e8c427683f3a36dd0d Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Sat, 16 Jun 2007 20:10:51 +0000 Subject: [PATCH] * gdbtypes.h (builtin_type_m2_char, builtin_type_m2_int, builtin_type_m2_card, builtin_type_m2_real, builtin_type_m2_bool): Replace global variable declaration with compatibility macro. (struct builtin_m2_type): New data type. (builtin_m2_type): Add prototype. * m2-lang.c (builtin_type_m2_char, builtin_type_m2_int, builtin_type_m2_card, builtin_type_m2_real, builtin_type_m2_bool): Remove global variables. (m2_language_arch_info): Use builtin_m2_type instead of variables. (build_m2_types): New function. (m2_type_data): New variable. (builtin_m2_type): New function. (_initialize_m2_language): Do not build data types. Register m2_type_data per-gdbarch data. --- gdb/ChangeLog | 17 +++++++++++++++ gdb/gdbtypes.h | 29 ++++++++++++++++++++----- gdb/m2-lang.c | 58 ++++++++++++++++++++++++++++++++------------------ 3 files changed, 78 insertions(+), 26 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 95a98a9e5bd..00c31410064 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2007-06-16 Ulrich Weigand + + * gdbtypes.h (builtin_type_m2_char, builtin_type_m2_int, + builtin_type_m2_card, builtin_type_m2_real, builtin_type_m2_bool): + Replace global variable declaration with compatibility macro. + (struct builtin_m2_type): New data type. + (builtin_m2_type): Add prototype. + * m2-lang.c (builtin_type_m2_char, builtin_type_m2_int, + builtin_type_m2_card, builtin_type_m2_real, builtin_type_m2_bool): + Remove global variables. + (m2_language_arch_info): Use builtin_m2_type instead of variables. + (build_m2_types): New function. + (m2_type_data): New variable. + (builtin_m2_type): New function. + (_initialize_m2_language): Do not build data types. Register + m2_type_data per-gdbarch data. + 2007-06-16 Ulrich Weigand * gdbtypes.h (builtin_type_f_character, builtin_type_f_logical, diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 9dd05a553f6..220400cae3c 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1120,11 +1120,30 @@ extern struct type *builtin_type_unsigned_long_long; /* Modula-2 types */ -extern struct type *builtin_type_m2_char; -extern struct type *builtin_type_m2_int; -extern struct type *builtin_type_m2_card; -extern struct type *builtin_type_m2_real; -extern struct type *builtin_type_m2_bool; +struct builtin_m2_type +{ + struct type *builtin_char; + struct type *builtin_int; + struct type *builtin_card; + struct type *builtin_real; + struct type *builtin_bool; +}; + +/* Return the Modula-2 type table for the specified architecture. */ +extern const struct builtin_m2_type *builtin_m2_type (struct gdbarch *gdbarch); + +/* Compatibility macros to access types for the current architecture. */ +#define builtin_type_m2_char \ + (builtin_m2_type (current_gdbarch)->builtin_char) +#define builtin_type_m2_int \ + (builtin_m2_type (current_gdbarch)->builtin_int) +#define builtin_type_m2_card \ + (builtin_m2_type (current_gdbarch)->builtin_card) +#define builtin_type_m2_real \ + (builtin_m2_type (current_gdbarch)->builtin_real) +#define builtin_type_m2_bool \ + (builtin_m2_type (current_gdbarch)->builtin_bool) + /* Fortran (F77) types */ diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 668106d75c4..acb2de6d6c1 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -396,12 +396,6 @@ static const struct op_print m2_op_print_tab[] = /* The built-in types of Modula-2. */ -struct type *builtin_type_m2_char; -struct type *builtin_type_m2_int; -struct type *builtin_type_m2_card; -struct type *builtin_type_m2_real; -struct type *builtin_type_m2_bool; - enum m2_primitive_types { m2_primitive_type_char, m2_primitive_type_int, @@ -415,21 +409,23 @@ static void m2_language_arch_info (struct gdbarch *gdbarch, struct language_arch_info *lai) { - lai->string_char_type = builtin_type_m2_char; + const struct builtin_m2_type *builtin = builtin_m2_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; lai->primitive_type_vector = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_m2_primitive_types + 1, struct type *); lai->primitive_type_vector [m2_primitive_type_char] - = builtin_type_m2_char; + = builtin->builtin_char; lai->primitive_type_vector [m2_primitive_type_int] - = builtin_type_m2_int; + = builtin->builtin_int; lai->primitive_type_vector [m2_primitive_type_card] - = builtin_type_m2_card; + = builtin->builtin_card; lai->primitive_type_vector [m2_primitive_type_real] - = builtin_type_m2_real; + = builtin->builtin_real; lai->primitive_type_vector [m2_primitive_type_bool] - = builtin_type_m2_bool; + = builtin->builtin_bool; } const struct language_defn m2_language_defn = @@ -468,35 +464,55 @@ const struct language_defn m2_language_defn = LANG_MAGIC }; -/* Initialization for Modula-2 */ - -void -_initialize_m2_language (void) +static void * +build_m2_types (struct gdbarch *gdbarch) { + struct builtin_m2_type *builtin_m2_type + = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_m2_type); + /* Modula-2 "pervasive" types. NOTE: these can be redefined!!! */ - builtin_type_m2_int = + builtin_m2_type->builtin_int = init_type (TYPE_CODE_INT, gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, 0, "INTEGER", (struct objfile *) NULL); - builtin_type_m2_card = + builtin_m2_type->builtin_card = init_type (TYPE_CODE_INT, gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "CARDINAL", (struct objfile *) NULL); - builtin_type_m2_real = + builtin_m2_type->builtin_real = init_type (TYPE_CODE_FLT, gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT, 0, "REAL", (struct objfile *) NULL); - builtin_type_m2_char = + builtin_m2_type->builtin_char = init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "CHAR", (struct objfile *) NULL); - builtin_type_m2_bool = + builtin_m2_type->builtin_bool = init_type (TYPE_CODE_BOOL, gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "BOOLEAN", (struct objfile *) NULL); + return builtin_m2_type; +} + +static struct gdbarch_data *m2_type_data; + +const struct builtin_m2_type * +builtin_m2_type (struct gdbarch *gdbarch) +{ + return gdbarch_data (gdbarch, m2_type_data); +} + + +/* Initialization for Modula-2 */ + +void +_initialize_m2_language (void) +{ + m2_type_data = gdbarch_data_register_post_init (build_m2_types); + add_language (&m2_language_defn); } -- 2.30.2