X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbtypes.h;h=74498435822a9b5320e60fe3a234abb8f61010b4;hb=6a053cb1ff643cec3349d7f2f47ae5573f82d613;hp=8fc770c5d39ce26033b802b06640002811be14b1;hpb=34877895ca38f74ae31bd65a6916560020d9d62b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 8fc770c5d3..7449843582 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1,7 +1,7 @@ /* Internal type definitions for GDB. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -50,6 +50,7 @@ #include "gdbsupport/enum-flags.h" #include "gdbsupport/underlying.h" #include "gdbsupport/print-utils.h" +#include "dwarf2.h" /* Forward declarations for prototypes. */ struct field; @@ -552,10 +553,9 @@ union type_owner union field_location { /* * Position of this field, counting in bits from start of - containing structure. For gdbarch_bits_big_endian=1 - targets, it is the bit offset to the MSB. For - gdbarch_bits_big_endian=0 targets, it is the bit offset to - the LSB. */ + containing structure. For big-endian targets, it is the bit + offset to the MSB. For little-endian targets, it is the bit + offset to the LSB. */ LONGEST bitpos; @@ -623,6 +623,13 @@ struct range_bounds struct dynamic_prop high; + /* The stride value for this range. This can be stored in bits or bytes + based on the value of BYTE_STRIDE_P. It is optional to have a stride + value, if this range has no stride value defined then this will be set + to the constant zero. */ + + struct dynamic_prop stride; + /* * The bias. Sometimes a range value is biased before storage. The bias is added to the stored bits to form the true value. */ @@ -631,12 +638,16 @@ struct range_bounds /* True if HIGH range bound contains the number of elements in the subrange. This affects how the final high bound is computed. */ - int flag_upper_bound_is_count : 1; + unsigned int flag_upper_bound_is_count : 1; /* True if LOW or/and HIGH are resolved into a static bound from a dynamic one. */ - int flag_bound_evaluated : 1; + unsigned int flag_bound_evaluated : 1; + + /* If this is true this STRIDE is in bytes, otherwise STRIDE is in bits. */ + + unsigned int flag_is_byte_stride : 1; }; /* Compare two range_bounds objects for equality. Simply does @@ -947,9 +958,18 @@ struct fn_field unsigned int is_constructor : 1; + /* * True if this function is deleted, false otherwise. */ + + unsigned int is_deleted : 1; + + /* * DW_AT_defaulted attribute for this function. The value is one + of the DW_DEFAULTED constants. */ + + ENUM_BITFIELD (dwarf_defaulted_attribute) defaulted : 2; + /* * Unused. */ - unsigned int dummy:9; + unsigned int dummy:6; /* * Index into that baseclass's virtual function table, minus 2; else if static: VOFFSET_STATIC; else: 0. */ @@ -1023,6 +1043,12 @@ struct cplus_struct_type int is_dynamic : 2; + /* * The calling convention for this type, fetched from the + DW_AT_calling_convention attribute. The value is one of the + DW_CC constants. */ + + ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8; + /* * The base class which defined the virtual function table pointer. */ struct type *vptr_basetype; @@ -1131,9 +1157,9 @@ struct func_type /* * The calling convention for targets supporting multiple ABIs. Right now this is only fetched from the Dwarf-2 DW_AT_calling_convention attribute. The value is one of the - DW_CC enum dwarf_calling_convention constants. */ + DW_CC constants. */ - unsigned calling_convention : 8; + ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8; /* * Whether this function normally returns to its caller. It is set from the DW_AT_noreturn attribute if set on the @@ -1352,6 +1378,9 @@ extern bool set_type_align (struct type *, ULONGEST); TYPE_RANGE_DATA(range_type)->high.kind #define TYPE_LOW_BOUND_KIND(range_type) \ TYPE_RANGE_DATA(range_type)->low.kind +#define TYPE_BIT_STRIDE(range_type) \ + (TYPE_RANGE_DATA(range_type)->stride.data.const_val \ + * (TYPE_RANGE_DATA(range_type)->flag_is_byte_stride ? 8 : 1)) /* Property accessors for the type data location. */ #define TYPE_DATA_LOCATION(thistype) \ @@ -1394,6 +1423,9 @@ extern bool set_type_align (struct type *, ULONGEST); #define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \ (TYPE_LOW_BOUND(TYPE_INDEX_TYPE((arraytype)))) +#define TYPE_ARRAY_BIT_STRIDE(arraytype) \ + (TYPE_BIT_STRIDE(TYPE_INDEX_TYPE((arraytype)))) + /* C++ */ #define TYPE_SELF_TYPE(thistype) internal_type_self_type (thistype) @@ -1421,6 +1453,8 @@ extern void set_type_vptr_basetype (struct type *, struct type *); ? (struct cplus_struct_type*)&cplus_struct_default \ : TYPE_RAW_CPLUS_SPECIFIC(thistype)) #define TYPE_RAW_CPLUS_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff +#define TYPE_CPLUS_CALLING_CONVENTION(thistype) \ + TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff->calling_convention #define TYPE_FLOATFORMAT(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.floatformat #define TYPE_GNAT_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.gnat_stuff #define TYPE_DESCRIPTIVE_TYPE(thistype) TYPE_GNAT_SPECIFIC(thistype)->descriptive_type @@ -1537,6 +1571,8 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_FN_FIELD_VOFFSET(thisfn, n) ((thisfn)[n].voffset-2) #define TYPE_FN_FIELD_VIRTUAL_P(thisfn, n) ((thisfn)[n].voffset > 1) #define TYPE_FN_FIELD_STATIC_P(thisfn, n) ((thisfn)[n].voffset == VOFFSET_STATIC) +#define TYPE_FN_FIELD_DEFAULTED(thisfn, n) ((thisfn)[n].defaulted) +#define TYPE_FN_FIELD_DELETED(thisfn, n) ((thisfn)[n].is_deleted) /* Accessors for typedefs defined by a class. */ #define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \ @@ -1804,7 +1840,8 @@ extern struct type *init_character_type (struct objfile *, int, int, 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 **); + const struct floatformat **, + enum bfd_endian = BFD_ENDIAN_UNKNOWN); extern struct type *init_decfloat_type (struct objfile *, int, const char *); extern struct type *init_complex_type (struct objfile *, const char *, struct type *); @@ -1966,6 +2003,16 @@ extern struct type *create_range_type (struct type *, struct type *, const struct dynamic_prop *, LONGEST); +/* Like CREATE_RANGE_TYPE but also sets up a stride. When BYTE_STRIDE_P + is true the value in STRIDE is a byte stride, otherwise STRIDE is a bit + stride. */ + +extern struct type * create_range_type_with_stride + (struct type *result_type, struct type *index_type, + const struct dynamic_prop *low_bound, + const struct dynamic_prop *high_bound, LONGEST bias, + const struct dynamic_prop *stride, bool byte_stride_p); + extern struct type *create_array_type (struct type *, struct type *, struct type *); @@ -1978,10 +2025,10 @@ extern struct type *lookup_string_range_type (struct type *, LONGEST, LONGEST); extern struct type *create_set_type (struct type *, struct type *); extern struct type *lookup_unsigned_typename (const struct language_defn *, - struct gdbarch *, const char *); + const char *); extern struct type *lookup_signed_typename (const struct language_defn *, - struct gdbarch *, const char *); + const char *); extern void get_unsigned_type_max (struct type *, ULONGEST *); @@ -2021,8 +2068,7 @@ extern void check_stub_method_group (struct type *, int); extern char *gdb_mangle_name (struct type *, int, int); extern struct type *lookup_typename (const struct language_defn *, - struct gdbarch *, const char *, - const struct block *, int); + const char *, const struct block *, int); extern struct type *lookup_template_type (const char *, struct type *, const struct block *); @@ -2079,6 +2125,7 @@ extern const struct rank BASE_CONVERSION_BADNESS; /* * Badness of converting from non-reference to reference. Subrank is the type of reference conversion being done. */ extern const struct rank REFERENCE_CONVERSION_BADNESS; +extern const struct rank REFERENCE_SEE_THROUGH_BADNESS; /* * Conversion to rvalue reference. */ #define REFERENCE_CONVERSION_RVALUE 1 /* * Conversion to const lvalue reference. */