X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbtypes.h;h=4ca0bd8746f3488ec2fd59e69c7b8d7d193de513;hb=e4975d6a9cd8aaf3fb14135b36850964def131d7;hp=79d72dfeef671123a112cacdc7f1519f6bb4f273;hpb=d9823cbb391e015f79687f4d17d7f9a32d27b5eb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 79d72dfeef..4ca0bd8746 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1,7 +1,7 @@ /* Internal type definitions for GDB. - Copyright (C) 1992-2015 Free Software Foundation, Inc. + Copyright (C) 1992-2016 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -184,35 +184,8 @@ enum type_code TYPE_CODE_XMETHOD }; -/* * Some constants representing each bit field in the main_type. See - the bit-field-specific macros, below, for documentation of each - constant in this enum. These enum values are only used with - init_type. Note that the values are chosen not to conflict with - type_instance_flag_value; this lets init_type error-check its - input. */ - -enum type_flag_value -{ - TYPE_FLAG_UNSIGNED = (1 << 9), - TYPE_FLAG_NOSIGN = (1 << 10), - TYPE_FLAG_STUB = (1 << 11), - TYPE_FLAG_TARGET_STUB = (1 << 12), - TYPE_FLAG_STATIC = (1 << 13), - TYPE_FLAG_PROTOTYPED = (1 << 14), - TYPE_FLAG_INCOMPLETE = (1 << 15), - TYPE_FLAG_VARARGS = (1 << 16), - TYPE_FLAG_VECTOR = (1 << 17), - TYPE_FLAG_FIXED_INSTANCE = (1 << 18), - TYPE_FLAG_STUB_SUPPORTED = (1 << 19), - TYPE_FLAG_GNU_IFUNC = (1 << 20), - - /* * Used for error-checking. */ - TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED -}; - /* * Some bits for the type's instance_flags word. See the macros - below for documentation on each bit. Note that if you add a value - here, you must update the enum type_flag_value as well. */ + below for documentation on each bit. */ enum type_instance_flag_value { @@ -228,7 +201,7 @@ enum type_instance_flag_value }; /* * Unsigned integer type. If this is not set for a TYPE_CODE_INT, - the type is signed (unless TYPE_FLAG_NOSIGN (below) is set). */ + the type is signed (unless TYPE_NOSIGN (below) is set). */ #define TYPE_UNSIGNED(t) (TYPE_MAIN_TYPE (t)->flag_unsigned) @@ -370,11 +343,11 @@ enum type_instance_flag_value architecture's two (or more) address spaces, but this is an extension of the architecture's model. - If TYPE_FLAG_INST is set, an object of the corresponding type + If TYPE_INSTANCE_FLAG_CODE_SPACE is set, an object of the corresponding type resides in instruction memory, even if its address (in the extended flat address space) does not reflect this. - Similarly, if TYPE_FLAG_DATA is set, then an object of the + Similarly, if TYPE_INSTANCE_FLAG_DATA_SPACE is set, then an object of the corresponding type resides in the data memory space, even if this is not indicated by its (flat address space) address. @@ -390,7 +363,7 @@ enum type_instance_flag_value /* * Address class flags. Some environments provide for pointers whose size is different from that of a normal pointer or address types where the bits are interpreted differently than normal - addresses. The TYPE_FLAG_ADDRESS_CLASS_n flags may be used in + addresses. The TYPE_INSTANCE_FLAG_ADDRESS_CLASS_n flags may be used in target specific ways to represent these different types of address classes. */ @@ -439,7 +412,15 @@ enum dynamic_prop_node_kind { /* A property providing a type's data location. Evaluating this field yields to the location of an object's data. */ - DYN_ATTR_DATA_LOCATION, + DYN_PROP_DATA_LOCATION, + + /* A property representing DW_AT_allocated. The presence of this attribute + indicates that the object of the type can be allocated/deallocated. */ + DYN_PROP_ALLOCATED, + + /* A property representing DW_AT_allocated. The presence of this attribute + indicated that the object of the type can be associated. */ + DYN_PROP_ASSOCIATED, }; /* * List for dynamic type attributes. */ @@ -449,7 +430,7 @@ struct dynamic_prop_list enum dynamic_prop_node_kind prop_kind; /* The dynamic property itself. */ - struct dynamic_prop *prop; + struct dynamic_prop prop; /* A pointer to the next dynamic property. */ struct dynamic_prop_list *next; @@ -503,7 +484,7 @@ union field_location gdbarch_bits_big_endian=0 targets, it is the bit offset to the LSB. */ - int bitpos; + LONGEST bitpos; /* * Enum value. */ LONGEST enumval; @@ -677,7 +658,7 @@ struct main_type This is used for printing only, except by poorly designed C++ code. For looking up a name, look for a symbol in the STRUCT_DOMAIN. - One more legitimate use is that if TYPE_FLAG_STUB is set, this is + One more legitimate use is that if TYPE_STUB is set, this is the name to use to look for definitions in other files. */ const char *tag_name; @@ -780,31 +761,23 @@ struct type check_typedef. */ int instance_flags; - /* * Length of storage for a value of this type. This is what - sizeof(type) would return; use it for address arithmetic, memory - reads and writes, etc. This size includes padding. For example, - an i386 extended-precision floating point value really only - occupies ten bytes, but most ABI's declare its size to be 12 - bytes, to preserve alignment. A `struct type' representing such - a floating-point type would have a `length' value of 12, even - though the last two bytes are unused. - - There's a bit of a host/target mess here, if you're concerned - about machines whose bytes aren't eight bits long, or who don't - have byte-addressed memory. Various places pass this to memcpy - and such, meaning it must be in units of host bytes. Various - other places expect they can calculate addresses by adding it - and such, meaning it must be in units of target bytes. For - some DSP targets, in which HOST_CHAR_BIT will (presumably) be 8 - and TARGET_CHAR_BIT will be (say) 32, this is a problem. - - One fix would be to make this field in bits (requiring that it - always be a multiple of HOST_CHAR_BIT and TARGET_CHAR_BIT) --- - the other choice would be to make it consistently in units of - HOST_CHAR_BIT. However, this would still fail to address - machines based on a ternary or decimal representation. */ - - unsigned length; + /* * Length of storage for a value of this type. The value is the + expression in host bytes of what sizeof(type) would return. This + size includes padding. For example, an i386 extended-precision + floating point value really only occupies ten bytes, but most + ABI's declare its size to be 12 bytes, to preserve alignment. + A `struct type' representing such a floating-point type would + have a `length' value of 12, even though the last two bytes are + unused. + + Since this field is expressed in host bytes, its value is appropriate + to pass to memcpy and such (it is assumed that GDB itself always runs + on an 8-bits addressable architecture). However, when using it for + target address arithmetic (e.g. adding it to a target address), the + type_length_units function should be used in order to get the length + expressed in target addressable memory units. */ + + unsigned int length; /* * Core type, shared by a group of qualified types. */ @@ -915,8 +888,8 @@ struct cplus_struct_type { /* * Number of base classes this type derives from. The baseclasses are stored in the first N_BASECLASSES fields - (i.e. the `fields' field of the struct type). I think only the - `type' field of such a field has any meaning. */ + (i.e. the `fields' field of the struct type). The only fields + of struct field that are used are: type, name, loc.bitpos. */ short n_baseclasses; @@ -953,10 +926,6 @@ struct cplus_struct_type int is_dynamic : 2; - /* * Non-zero if this type came from a Java CU. */ - - unsigned int is_java : 1; - /* * The base class which defined the virtual function table pointer. */ struct type *vptr_basetype; @@ -1218,9 +1187,9 @@ extern void allocate_gnat_aux_type (struct type *); #define INIT_FUNC_SPECIFIC(type) \ (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FUNC, \ - TYPE_MAIN_TYPE (type)->type_specific.func_stuff \ - = TYPE_ZALLOC (type, \ - sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff))) + TYPE_MAIN_TYPE (type)->type_specific.func_stuff = (struct func_type *) \ + TYPE_ZALLOC (type, \ + sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff))) #define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type @@ -1258,7 +1227,7 @@ extern void allocate_gnat_aux_type (struct type *); /* Property accessors for the type data location. */ #define TYPE_DATA_LOCATION(thistype) \ - get_dyn_prop (DYN_ATTR_DATA_LOCATION, thistype) + get_dyn_prop (DYN_PROP_DATA_LOCATION, thistype) #define TYPE_DATA_LOCATION_BATON(thistype) \ TYPE_DATA_LOCATION (thistype)->data.baton #define TYPE_DATA_LOCATION_ADDR(thistype) \ @@ -1266,6 +1235,12 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_DATA_LOCATION_KIND(thistype) \ TYPE_DATA_LOCATION (thistype)->kind +/* Property accessors for the type allocated/associated. */ +#define TYPE_ALLOCATED_PROP(thistype) \ + get_dyn_prop (DYN_PROP_ALLOCATED, thistype) +#define TYPE_ASSOCIATED_PROP(thistype) \ + get_dyn_prop (DYN_PROP_ASSOCIATED, thistype) + /* Attribute accessors for dynamic properties. */ #define TYPE_DYN_PROP_LIST(thistype) \ TYPE_MAIN_TYPE(thistype)->dyn_prop_list @@ -1330,7 +1305,6 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define BASETYPE_VIA_PUBLIC(thistype, index) \ ((!TYPE_FIELD_PRIVATE(thistype, index)) && (!TYPE_FIELD_PROTECTED(thistype, index))) #define TYPE_CPLUS_DYNAMIC(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_dynamic -#define TYPE_CPLUS_REALLY_JAVA(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_java #define BASETYPE_VIA_VIRTUAL(thistype, index) \ (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ @@ -1659,19 +1633,44 @@ extern struct gdbarch *get_type_arch (const struct type *); extern struct type *get_target_type (struct type *type); +/* Return the equivalent of TYPE_LENGTH, but in number of target + addressable memory units of the associated gdbarch instead of bytes. */ + +extern unsigned int type_length_units (struct type *type); + /* * Helper function to construct objfile-owned types. */ -extern struct type *init_type (enum type_code, int, int, const char *, - struct objfile *); +extern struct type *init_type (struct objfile *, enum type_code, int, + const char *); +extern struct type *init_integer_type (struct objfile *, int, int, + const char *); +extern struct type *init_character_type (struct objfile *, int, int, + const char *); +extern struct type *init_boolean_type (struct objfile *, int, int, + const char *); +extern struct type *init_float_type (struct objfile *, int, const char *, + const struct floatformat **); +extern struct type *init_decfloat_type (struct objfile *, int, const char *); +extern struct type *init_complex_type (struct objfile *, const char *, + struct type *); +extern struct type *init_pointer_type (struct objfile *, int, const char *, + struct type *); /* Helper functions to construct architecture-owned types. */ -extern struct type *arch_type (struct gdbarch *, enum type_code, int, char *); -extern struct type *arch_integer_type (struct gdbarch *, int, int, char *); -extern struct type *arch_character_type (struct gdbarch *, int, int, char *); -extern struct type *arch_boolean_type (struct gdbarch *, int, int, char *); -extern struct type *arch_float_type (struct gdbarch *, int, char *, +extern struct type *arch_type (struct gdbarch *, enum type_code, int, + const char *); +extern struct type *arch_integer_type (struct gdbarch *, int, int, + const char *); +extern struct type *arch_character_type (struct gdbarch *, int, int, + const char *); +extern struct type *arch_boolean_type (struct gdbarch *, int, int, + const char *); +extern struct type *arch_float_type (struct gdbarch *, int, const char *, const struct floatformat **); -extern struct type *arch_complex_type (struct gdbarch *, char *, +extern struct type *arch_decfloat_type (struct gdbarch *, int, const char *); +extern struct type *arch_complex_type (struct gdbarch *, const char *, + struct type *); +extern struct type *arch_pointer_type (struct gdbarch *, int, const char *, struct type *); /* Helper functions to construct a struct or record type. An @@ -1681,22 +1680,26 @@ extern struct type *arch_complex_type (struct gdbarch *, char *, field packed against the previous. */ extern struct type *arch_composite_type (struct gdbarch *gdbarch, - char *name, enum type_code code); -extern void append_composite_type_field (struct type *t, char *name, + const char *name, enum type_code code); +extern void append_composite_type_field (struct type *t, const char *name, struct type *field); extern void append_composite_type_field_aligned (struct type *t, - char *name, + const char *name, struct type *field, int alignment); -struct field *append_composite_type_field_raw (struct type *t, char *name, +struct field *append_composite_type_field_raw (struct type *t, const char *name, struct type *field); /* Helper functions to construct a bit flags type. An initially empty type is created using arch_flag_type(). Flags are then added using - append_flag_type_flag(). */ + append_flag_type_field() and append_flag_type_flag(). */ extern struct type *arch_flags_type (struct gdbarch *gdbarch, - char *name, int length); -extern void append_flags_type_flag (struct type *type, int bitpos, char *name); + const char *name, int length); +extern void append_flags_type_field (struct type *type, + int start_bitpos, int nr_bits, + struct type *field_type, const char *name); +extern void append_flags_type_flag (struct type *type, int bitpos, + const char *name); extern void make_vector_type (struct type *array_type); extern struct type *init_vector_type (struct type *elt_type, int n); @@ -1791,7 +1794,9 @@ extern void get_signed_type_minmax (struct type *, LONGEST *, LONGEST *); ADDR specifies the location of the variable the type is bound to. If TYPE has no dynamic properties return TYPE; otherwise a new type with static properties is returned. */ -extern struct type *resolve_dynamic_type (struct type *type, CORE_ADDR addr); +extern struct type *resolve_dynamic_type (struct type *type, + const gdb_byte *valaddr, + CORE_ADDR addr); /* * Predicate if the type has dynamic values, which are not resolved yet. */ extern int is_dynamic_type (struct type *type); @@ -1810,12 +1815,10 @@ extern void add_dyn_prop (enum dynamic_prop_node_kind kind, struct dynamic_prop prop, struct type *type, struct objfile *objfile); -extern struct type *check_typedef (struct type *); +extern void remove_dyn_prop (enum dynamic_prop_node_kind prop_kind, + struct type *type); -#define CHECK_TYPEDEF(TYPE) \ - do { \ - (TYPE) = check_typedef (TYPE); \ - } while (0) +extern struct type *check_typedef (struct type *); extern void check_stub_method_group (struct type *, int); @@ -1835,6 +1838,8 @@ extern int get_discrete_bounds (struct type *, LONGEST *, LONGEST *); extern int get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound); +extern int discrete_position (struct type *type, LONGEST val, LONGEST *pos); + extern int class_types_same_p (const struct type *, const struct type *); extern int is_ancestor (struct type *, struct type *); @@ -1908,7 +1913,7 @@ extern int field_is_static (struct field *); /* printcmd.c */ -extern void print_scalar_formatted (const void *, struct type *, +extern void print_scalar_formatted (const gdb_byte *, struct type *, const struct value_print_options *, int, struct ui_file *); @@ -1916,6 +1921,8 @@ extern int can_dereference (struct type *); extern int is_integral_type (struct type *); +extern int is_scalar_type (struct type *type); + extern int is_scalar_type_recursive (struct type *); extern int class_or_union_p (const struct type *); @@ -1934,4 +1941,8 @@ extern int types_equal (struct type *, struct type *); extern int types_deeply_equal (struct type *, struct type *); +extern int type_not_allocated (const struct type *type); + +extern int type_not_associated (const struct type *type); + #endif /* GDBTYPES_H */