From 5674de600f8bea2ae04159ad20bb50e9d3d3a5f2 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Fri, 22 Jun 2007 12:32:19 +0000 Subject: [PATCH] * gdbtypes.h (builtin_type_true_char, builtin_type_void, builtin_type_char, builtin_type_short, builtin_type_int, builtin_type_long, builtin_type_signed_char, builtin_type_unsigned_char, builtin_type_unsigned_short, builtin_type_unsigned_int, builtin_type_unsigned_long, builtin_type_float, builtin_type_double, builtin_type_long_double, builtin_type_complex, builtin_type_double_complex, builtin_type_string, builtin_type_bool, builtin_type_long_long, builtin_type_unsigned_long_long, builtin_type_void_data_ptr, builtin_type_void_func_ptr, builtin_type_CORE_ADDR): Replace global variable declaration with compatibility macro. * gdbtypes.c (builtin_type_true_char, builtin_type_void, builtin_type_char, builtin_type_short, builtin_type_int, builtin_type_long, builtin_type_signed_char, builtin_type_unsigned_char, builtin_type_unsigned_short, builtin_type_unsigned_int, builtin_type_unsigned_long, builtin_type_float, builtin_type_double, builtin_type_long_double, builtin_type_complex, builtin_type_double_complex, builtin_type_string, builtin_type_bool, builtin_type_long_long, builtin_type_unsigned_long_long, builtin_type_void_data_ptr, builtin_type_void_func_ptr, builtin_type_CORE_ADDR): Remove. (build_gdbtypes): Remove. (_initialize_gdbtypes): Do not call build_gdbtypes, move installing opaque-type-resolution command here. Do not call deprecated_register_gdbarch_swap. --- gdb/ChangeLog | 28 +++++++ gdb/gdbtypes.c | 218 ++++--------------------------------------------- gdb/gdbtypes.h | 93 +++++++++++---------- 3 files changed, 91 insertions(+), 248 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7264d4e122..64708ad3b5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,31 @@ +2007-06-22 Ulrich Weigand + + * gdbtypes.h (builtin_type_true_char, builtin_type_void, + builtin_type_char, builtin_type_short, builtin_type_int, + builtin_type_long, builtin_type_signed_char, + builtin_type_unsigned_char, builtin_type_unsigned_short, + builtin_type_unsigned_int, builtin_type_unsigned_long, + builtin_type_float, builtin_type_double, builtin_type_long_double, + builtin_type_complex, builtin_type_double_complex, builtin_type_string, + builtin_type_bool, builtin_type_long_long, + builtin_type_unsigned_long_long, builtin_type_void_data_ptr, + builtin_type_void_func_ptr, builtin_type_CORE_ADDR): Replace global + variable declaration with compatibility macro. + * gdbtypes.c (builtin_type_true_char, builtin_type_void, + builtin_type_char, builtin_type_short, builtin_type_int, + builtin_type_long, builtin_type_signed_char, + builtin_type_unsigned_char, builtin_type_unsigned_short, + builtin_type_unsigned_int, builtin_type_unsigned_long, + builtin_type_float, builtin_type_double, builtin_type_long_double, + builtin_type_complex, builtin_type_double_complex, builtin_type_string, + builtin_type_bool, builtin_type_long_long, + builtin_type_unsigned_long_long, builtin_type_void_data_ptr, + builtin_type_void_func_ptr, builtin_type_CORE_ADDR): Remove. + (build_gdbtypes): Remove. + (_initialize_gdbtypes): Do not call build_gdbtypes, move installing + opaque-type-resolution command here. Do not call + deprecated_register_gdbarch_swap. + 2007-06-22 Ulrich Weigand * gdbtypes.h (struct builtin_type): New members nodebug_text_symbol, diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 15af16b4d5..c45dfd44e6 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -44,25 +44,6 @@ /* These variables point to the objects representing the predefined C data types. */ -struct type *builtin_type_void; -struct type *builtin_type_char; -struct type *builtin_type_true_char; -struct type *builtin_type_short; -struct type *builtin_type_int; -struct type *builtin_type_long; -struct type *builtin_type_long_long; -struct type *builtin_type_signed_char; -struct type *builtin_type_unsigned_char; -struct type *builtin_type_unsigned_short; -struct type *builtin_type_unsigned_int; -struct type *builtin_type_unsigned_long; -struct type *builtin_type_unsigned_long_long; -struct type *builtin_type_float; -struct type *builtin_type_double; -struct type *builtin_type_long_double; -struct type *builtin_type_complex; -struct type *builtin_type_double_complex; -struct type *builtin_type_string; struct type *builtin_type_int0; struct type *builtin_type_int8; struct type *builtin_type_uint8; @@ -74,7 +55,6 @@ struct type *builtin_type_int64; struct type *builtin_type_uint64; struct type *builtin_type_int128; struct type *builtin_type_uint128; -struct type *builtin_type_bool; /* Floatformat pairs. */ const struct floatformat *floatformats_ieee_single[BFD_ENDIAN_UNKNOWN] = { @@ -126,9 +106,6 @@ struct type *builtin_type_arm_ext; struct type *builtin_type_ia64_spill; struct type *builtin_type_ia64_quad; -struct type *builtin_type_void_data_ptr; -struct type *builtin_type_void_func_ptr; -struct type *builtin_type_CORE_ADDR; int opaque_type_resolution = 1; static void @@ -3298,144 +3275,6 @@ build_flt (int bit, char *name, const struct floatformat **floatformats) return t; } -static void -build_gdbtypes (void) -{ - builtin_type_void = - init_type (TYPE_CODE_VOID, 1, - 0, - "void", (struct objfile *) NULL); - builtin_type_char = - init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - (TYPE_FLAG_NOSIGN - | (gdbarch_char_signed (current_gdbarch) ? - 0 : TYPE_FLAG_UNSIGNED)), - "char", (struct objfile *) NULL); - builtin_type_true_char = - init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - 0, - "true character", (struct objfile *) NULL); - builtin_type_signed_char = - init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - 0, - "signed char", (struct objfile *) NULL); - builtin_type_unsigned_char = - init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, - "unsigned char", (struct objfile *) NULL); - builtin_type_short = - init_type (TYPE_CODE_INT, - gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, "short", (struct objfile *) NULL); - builtin_type_unsigned_short = - init_type (TYPE_CODE_INT, - gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, "unsigned short", (struct objfile *) NULL); - builtin_type_int = - init_type (TYPE_CODE_INT, - gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, "int", (struct objfile *) NULL); - builtin_type_unsigned_int = - init_type (TYPE_CODE_INT, - gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, "unsigned int", (struct objfile *) NULL); - builtin_type_long = - init_type (TYPE_CODE_INT, - gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, "long", (struct objfile *) NULL); - builtin_type_unsigned_long = - init_type (TYPE_CODE_INT, - gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, "unsigned long", (struct objfile *) NULL); - builtin_type_long_long = - init_type (TYPE_CODE_INT, - gdbarch_long_long_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, "long long", (struct objfile *) NULL); - builtin_type_unsigned_long_long = - init_type (TYPE_CODE_INT, - gdbarch_long_long_bit (current_gdbarch) / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, - "unsigned long long", (struct objfile *) NULL); - - builtin_type_float - = build_flt (gdbarch_float_bit (current_gdbarch), "float", - gdbarch_float_format (current_gdbarch)); - builtin_type_double - = build_flt (gdbarch_double_bit (current_gdbarch), "double", - gdbarch_double_format (current_gdbarch)); - builtin_type_long_double - = build_flt (gdbarch_long_double_bit (current_gdbarch), "long double", - gdbarch_long_double_format - (current_gdbarch)); - - builtin_type_complex = - init_type (TYPE_CODE_COMPLEX, - 2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, - "complex", (struct objfile *) NULL); - TYPE_TARGET_TYPE (builtin_type_complex) = builtin_type_float; - builtin_type_double_complex = - init_type (TYPE_CODE_COMPLEX, - 2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT, - 0, - "double complex", (struct objfile *) NULL); - TYPE_TARGET_TYPE (builtin_type_double_complex) = builtin_type_double; - builtin_type_string = - init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - 0, - "string", (struct objfile *) NULL); - builtin_type_bool = - init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT, - 0, - "bool", (struct objfile *) NULL); - - /* Add user knob for controlling resolution of opaque types */ - add_setshow_boolean_cmd ("opaque-type-resolution", class_support, - &opaque_type_resolution, _("\ -Set resolution of opaque struct/class/union types (if set before loading symbols)."), _("\ -Show resolution of opaque struct/class/union types (if set before loading symbols)."), NULL, - NULL, - show_opaque_type_resolution, - &setlist, &showlist); - opaque_type_resolution = 1; - - /* Pointer/Address types. */ - - /* NOTE: on some targets, addresses and pointers are not necessarily - the same --- for example, on the D10V, pointers are 16 bits long, - but addresses are 32 bits long. See doc/gdbint.texinfo, - ``Pointers Are Not Always Addresses''. - - The upshot is: - - gdb's `struct type' always describes the target's - representation. - - gdb's `struct value' objects should always hold values in - target form. - - gdb's CORE_ADDR values are addresses in the unified virtual - address space that the assembler and linker work with. Thus, - since target_read_memory takes a CORE_ADDR as an argument, it - can access any memory on the target, even if the processor has - separate code and data address spaces. - - So, for example: - - If v is a value holding a D10V code pointer, its contents are - in target form: a big-endian address left-shifted two bits. - - If p is a D10V pointer type, TYPE_LENGTH (p) == 2, just as - sizeof (void *) == 2 on the target. - - In this context, builtin_type_CORE_ADDR is a bit odd: it's a - target type for a value the target will never see. It's only - used to hold the values of (typeless) linker symbols, which are - indeed in the unified virtual address space. */ - builtin_type_void_data_ptr = make_pointer_type (builtin_type_void, NULL); - builtin_type_void_func_ptr - = lookup_pointer_type (lookup_function_type (builtin_type_void)); - builtin_type_CORE_ADDR = - init_type (TYPE_CODE_INT, gdbarch_addr_bit (current_gdbarch) / 8, - TYPE_FLAG_UNSIGNED, - "__CORE_ADDR", (struct objfile *) NULL); -} - static struct gdbarch_data *gdbtypes_data; const struct builtin_type * @@ -3606,11 +3445,12 @@ extern void _initialize_gdbtypes (void); void _initialize_gdbtypes (void) { - struct cmd_list_element *c; + gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init); + + /* FIXME: The following types are architecture-neutral. However, they + contain pointer_type and reference_type fields potentially caching + pointer or reference types that *are* architecture dependent. */ - /* FIXME: Why don't the following types need to be arch-swapped? - See the comment at the top of the calls to - DEPRECATED_REGISTER_GDBARCH_SWAP below. */ builtin_type_int0 = init_type (TYPE_CODE_INT, 0 / 8, 0, @@ -3656,45 +3496,6 @@ _initialize_gdbtypes (void) TYPE_FLAG_UNSIGNED, "uint128_t", (struct objfile *) NULL); - build_gdbtypes (); - - gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init); - - /* FIXME - For the moment, handle types by swapping them in and out. - Should be using the per-architecture data-pointer and a large - struct. - - Note that any type T that we might create a 'T *' type for must - be arch-swapped: we cache a type's 'T *' type in the pointer_type - field, so if we change architectures but don't swap T, then - lookup_pointer_type will start handing out pointer types made for - a different architecture. */ - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_char); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_short); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_int); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long_long); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_signed_char); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_char); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_short); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_int); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_long); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_long_long); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_float); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_double); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long_double); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_complex); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_double_complex); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_string); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void_data_ptr); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void_func_ptr); - DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_CORE_ADDR); - deprecated_register_gdbarch_swap (NULL, 0, build_gdbtypes); - - /* Note: These types do not need to be swapped - they are target - neutral. FIXME: Are you sure? See the comment above the calls - to DEPRECATED_REGISTER_GDBARCH_SWAP above. */ builtin_type_ieee_single = build_flt (-1, "builtin_type_ieee_single", floatformats_ieee_single); builtin_type_ieee_double @@ -3717,4 +3518,13 @@ When enabled, ranking of the functions is displayed."), NULL, show_overload_debug, &setdebuglist, &showdebuglist); + + /* Add user knob for controlling resolution of opaque types */ + add_setshow_boolean_cmd ("opaque-type-resolution", class_support, + &opaque_type_resolution, _("\ +Set resolution of opaque struct/class/union types (if set before loading symbols)."), _("\ +Show resolution of opaque struct/class/union types (if set before loading symbols)."), NULL, + NULL, + show_opaque_type_resolution, + &setlist, &showlist); } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index c565be626b..8d60894fc4 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1041,43 +1041,55 @@ struct builtin_type /* Return the type table for the specified architecture. */ extern const struct builtin_type *builtin_type (struct gdbarch *gdbarch); -/* Implicit sizes */ -extern struct type *builtin_type_void; -extern struct type *builtin_type_char; -extern struct type *builtin_type_short; -extern struct type *builtin_type_int; -extern struct type *builtin_type_long; -extern struct type *builtin_type_signed_char; -extern struct type *builtin_type_unsigned_char; -extern struct type *builtin_type_unsigned_short; -extern struct type *builtin_type_unsigned_int; -extern struct type *builtin_type_unsigned_long; -extern struct type *builtin_type_float; -extern struct type *builtin_type_double; -extern struct type *builtin_type_long_double; -extern struct type *builtin_type_complex; -extern struct type *builtin_type_double_complex; -extern struct type *builtin_type_string; -extern struct type *builtin_type_bool; - -/* Address/pointer types: */ -/* (C) Language `pointer to data' type. Some target platforms use an - implicitly {sign,zero} -extended 32 bit C language pointer on a 64 - bit ISA. */ -extern struct type *builtin_type_void_data_ptr; - -/* (C) Language `pointer to function returning void' type. Since - ANSI, C standards have explicitly said that pointers to functions - and pointers to data are not interconvertible --- that is, you - can't cast a function pointer to void * and back, and expect to get - the same value. However, all function pointer types are - interconvertible, so void (*) () can server as a generic function - pointer. */ -extern struct type *builtin_type_void_func_ptr; - -/* The target CPU's address type. This is the ISA address size. */ -extern struct type *builtin_type_CORE_ADDR; - +/* Compatibility macros to access types for the current architecture. */ +#define builtin_type_void_data_ptr \ + (builtin_type (current_gdbarch)->builtin_data_ptr) +#define builtin_type_void_func_ptr \ + (builtin_type (current_gdbarch)->builtin_func_ptr) +#define builtin_type_CORE_ADDR \ + (builtin_type (current_gdbarch)->builtin_core_addr) +#define builtin_type_true_char \ + (builtin_type (current_gdbarch)->builtin_true_char) +#define builtin_type_void \ + (builtin_type (current_gdbarch)->builtin_void) +#define builtin_type_char \ + (builtin_type (current_gdbarch)->builtin_char) +#define builtin_type_short \ + (builtin_type (current_gdbarch)->builtin_short) +#define builtin_type_int \ + (builtin_type (current_gdbarch)->builtin_int) +#define builtin_type_long \ + (builtin_type (current_gdbarch)->builtin_long) +#define builtin_type_signed_char \ + (builtin_type (current_gdbarch)->builtin_signed_char) +#define builtin_type_unsigned_char \ + (builtin_type (current_gdbarch)->builtin_unsigned_char) +#define builtin_type_unsigned_short \ + (builtin_type (current_gdbarch)->builtin_unsigned_short) +#define builtin_type_unsigned_int \ + (builtin_type (current_gdbarch)->builtin_unsigned_int) +#define builtin_type_unsigned_long \ + (builtin_type (current_gdbarch)->builtin_unsigned_long) +#define builtin_type_float \ + (builtin_type (current_gdbarch)->builtin_float) +#define builtin_type_double \ + (builtin_type (current_gdbarch)->builtin_double) +#define builtin_type_long_double \ + (builtin_type (current_gdbarch)->builtin_long_double) +#define builtin_type_complex \ + (builtin_type (current_gdbarch)->builtin_complex) +#define builtin_type_double_complex \ + (builtin_type (current_gdbarch)->builtin_double_complex) +#define builtin_type_string \ + (builtin_type (current_gdbarch)->builtin_string) +#define builtin_type_bool \ + (builtin_type (current_gdbarch)->builtin_bool) +#define builtin_type_long_long \ + (builtin_type (current_gdbarch)->builtin_long_long) +#define builtin_type_unsigned_long_long \ + (builtin_type (current_gdbarch)->builtin_unsigned_long_long) + + /* Explicit sizes - see C9X for naming scheme. The "int0" is for when an architecture needs to describe a register that has no size. */ @@ -1113,18 +1125,11 @@ extern struct type *builtin_type_arm_ext; extern struct type *builtin_type_ia64_spill; extern struct type *builtin_type_ia64_quad; -/* We use this for the '/c' print format, because builtin_type_char is - just a one-byte integral type, which languages less laid back than - C will print as ... well, a one-byte integral type. */ -extern struct type *builtin_type_true_char; - /* This type represents a type that was unrecognized in symbol read-in. */ extern struct type *builtin_type_error; -extern struct type *builtin_type_long_long; -extern struct type *builtin_type_unsigned_long_long; /* Modula-2 types */ -- 2.34.1