X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fgdbtypes.h;h=887dfdb5dea3bc29d700a528a5f680e1c2afedba;hb=7af8dcf87f8805397fc6b7bd722ffc8dd92f3a3c;hp=523cd8007b5a64d843d2b4f94c9a7916986d70ea;hpb=8e3b41a9061833aa9dc504d68e7446bca4984f16;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 523cd8007b..887dfdb5de 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1,8 +1,6 @@ /* Internal type definitions for GDB. - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 1992-2004, 2006-2012 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -292,6 +290,12 @@ enum type_instance_flag_value #define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class) +/* True if this type is a "flag" enum. A flag enum is one where all + the values are pairwise disjoint when "and"ed together. This + affects how enum values are printed. */ + +#define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum) + /* Constant type. If this is set, the corresponding type has a const modifier. */ @@ -347,6 +351,7 @@ enum type_instance_flag_value enum field_loc_kind { FIELD_LOC_KIND_BITPOS, /* bitpos */ + FIELD_LOC_KIND_ENUMVAL, /* enumval */ FIELD_LOC_KIND_PHYSADDR, /* physaddr */ FIELD_LOC_KIND_PHYSNAME, /* physname */ FIELD_LOC_KIND_DWARF_BLOCK /* dwarf_block */ @@ -402,6 +407,11 @@ struct main_type "struct". */ unsigned int flag_declared_class : 1; + /* True if this is an enum type with disjoint values. This affects + how the enum is printed. */ + + unsigned int flag_flag_enum : 1; + /* A discriminant telling us which field of the type_specific union is being used for this type, if any. */ ENUM_BITFIELD(type_specific_kind) type_specific_field : 3; @@ -427,9 +437,11 @@ struct main_type /* Name of this type, or NULL if none. This is used for printing only, except by poorly designed C++ code. - For looking up a name, look for a symbol in the VAR_DOMAIN. */ + For looking up a name, look for a symbol in the VAR_DOMAIN. + This is generally allocated in the objfile's obstack. + However coffread.c uses malloc. */ - char *name; + const char *name; /* Tag name for this type, or NULL if none. This means that the name of the type consists of a keyword followed by the tag name. @@ -442,7 +454,7 @@ struct main_type One more legitimate use is that if TYPE_FLAG_STUB is set, this is the name to use to look for definitions in other files. */ - char *tag_name; + const char *tag_name; /* Every type is now associated with a particular objfile, and the type is allocated on the objfile_obstack for that objfile. One problem @@ -500,11 +512,13 @@ struct main_type 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. For a range bound or enum value, this is the - value itself. */ + the LSB. */ int bitpos; + /* Enum value. */ + LONGEST enumval; + /* For a static field, if TYPE_FIELD_STATIC_HAS_ADDR then physaddr is the location (in the target) of the static field. Otherwise, physname is the mangled label of the static field. */ @@ -527,7 +541,7 @@ struct main_type unsigned int artificial : 1; /* Discriminant for union field_location. */ - ENUM_BITFIELD(field_loc_kind) loc_kind : 2; + ENUM_BITFIELD(field_loc_kind) loc_kind : 3; /* Size of this field, in bits, or zero if not packed. If non-zero in an array type, indicates the element size in @@ -535,7 +549,7 @@ struct main_type For an unpacked field, the field's type's length says how many bytes the field occupies. */ - unsigned int bitsize : 29; + unsigned int bitsize : 28; /* In a struct or union type, type of this field. In a function or member type, type of this argument. @@ -547,7 +561,7 @@ struct main_type NULL for range bounds, array domains, and member function arguments. */ - char *name; + const char *name; } *fields; /* Union member used for range types. */ @@ -695,11 +709,6 @@ struct cplus_struct_type short nfn_fields; - /* Number of methods described for this type, not including the - methods that it derives from. */ - - short nfn_fields_total; - /* Number of template arguments. */ unsigned short n_template_arguments; @@ -757,9 +766,11 @@ struct cplus_struct_type struct fn_fieldlist { - /* The overloaded name. */ + /* The overloaded name. + This is generally allocated in the objfile's obstack. + However stabsread.c sometimes uses malloc. */ - char *name; + const char *name; /* The number of methods with this name. */ @@ -858,13 +869,6 @@ struct cplus_struct_type struct symbol **template_arguments; }; -/* Struct used in computing virtual base list. */ -struct vbase - { - struct type *vbasetype; /* pointer to virtual base */ - struct vbase *next; /* next in chain */ - }; - /* Struct used to store conversion rankings. */ struct rank { @@ -902,6 +906,13 @@ struct func_type this is only fetched from the Dwarf-2 DW_AT_calling_convention attribute. */ unsigned calling_convention; + + /* Only those DW_TAG_GNU_call_site's in this function that have + DW_AT_GNU_tail_call set are linked in this list. Function without its + tail call list complete (DW_AT_GNU_all_tail_call_sites or its superset + DW_AT_GNU_all_call_sites) has TAIL_CALL_LIST NULL, even if some + DW_TAG_GNU_call_site's exist in such function. */ + struct call_site *tail_call_list; }; /* A place where a function gets called from, represented by @@ -913,6 +924,9 @@ struct call_site field as we overload core_addr_hash and core_addr_eq for it. */ CORE_ADDR pc; + /* List successor with head in FUNC_TYPE.TAIL_CALL_LIST. */ + struct call_site *tail_call_next; + /* Describe DW_AT_GNU_call_site_target. Missing attribute uses FIELD_LOC_KIND_DWARF_BLOCK with FIELD_DWARF_BLOCK == NULL. */ struct @@ -920,7 +934,7 @@ struct call_site union field_location loc; /* Discriminant for union field_location. */ - ENUM_BITFIELD(field_loc_kind) loc_kind : 2; + ENUM_BITFIELD(field_loc_kind) loc_kind : 3; } target; @@ -1042,7 +1056,6 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_VPTR_FIELDNO(thistype) TYPE_MAIN_TYPE(thistype)->vptr_fieldno #define TYPE_FN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fields #define TYPE_NFN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields -#define TYPE_NFN_FIELDS_TOTAL(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields_total #define TYPE_SPECIFIC_FIELD(thistype) \ TYPE_MAIN_TYPE(thistype)->type_specific_field #define TYPE_TYPE_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific @@ -1060,6 +1073,7 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_GNAT_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.gnat_stuff #define TYPE_DESCRIPTIVE_TYPE(thistype) TYPE_GNAT_SPECIFIC(thistype)->descriptive_type #define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->calling_convention +#define TYPE_TAIL_CALL_LIST(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->tail_call_list #define TYPE_BASECLASS(thistype,index) TYPE_FIELD_TYPE(thistype, index) #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses #define TYPE_BASECLASS_NAME(thistype,index) TYPE_FIELD_NAME(thistype, index) @@ -1076,13 +1090,19 @@ extern void allocate_gnat_aux_type (struct type *); #define FIELD_TYPE(thisfld) ((thisfld).type) #define FIELD_NAME(thisfld) ((thisfld).name) #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) -#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos) +#define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos) +#define FIELD_BITPOS(thisfld) (FIELD_BITPOS_LVAL (thisfld) + 0) +#define FIELD_ENUMVAL_LVAL(thisfld) ((thisfld).loc.enumval) +#define FIELD_ENUMVAL(thisfld) (FIELD_ENUMVAL_LVAL (thisfld) + 0) #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname) #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr) #define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block) #define SET_FIELD_BITPOS(thisfld, bitpos) \ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \ - FIELD_BITPOS (thisfld) = (bitpos)) + FIELD_BITPOS_LVAL (thisfld) = (bitpos)) +#define SET_FIELD_ENUMVAL(thisfld, enumval) \ + (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_ENUMVAL, \ + FIELD_ENUMVAL_LVAL (thisfld) = (enumval)) #define SET_FIELD_PHYSNAME(thisfld, name) \ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \ FIELD_STATIC_PHYSNAME (thisfld) = (name)) @@ -1100,6 +1120,7 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n)) #define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n)) +#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n)) @@ -1193,6 +1214,11 @@ extern void allocate_gnat_aux_type (struct type *); || TYPE_NFN_FIELDS (thistype) == 0) \ && (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype))) +/* A helper macro that returns the name of a type or "unnamed type" if the type + has no name. */ +#define TYPE_SAFE_NAME(type) \ + (TYPE_NAME (type) ? TYPE_NAME (type) : _("")) + /* A helper macro that returns the name of an error type. If the type has a name, it is used; otherwise, a default is used. */ #define TYPE_ERROR_NAME(type) \ @@ -1442,7 +1468,7 @@ extern void smash_to_methodptr_type (struct type *, struct type *); extern struct type *allocate_stub_method (struct type *); -extern char *type_name_no_tag (const struct type *); +extern const char *type_name_no_tag (const struct type *); extern const char *type_name_no_tag_or_error (struct type *type); @@ -1470,10 +1496,10 @@ extern struct type *lookup_string_range_type (struct type *, int, int); extern struct type *create_set_type (struct type *, struct type *); extern struct type *lookup_unsigned_typename (const struct language_defn *, - struct gdbarch *,char *); + struct gdbarch *, const char *); extern struct type *lookup_signed_typename (const struct language_defn *, - struct gdbarch *,char *); + struct gdbarch *, const char *); extern struct type *check_typedef (struct type *); @@ -1544,6 +1570,8 @@ extern const struct rank BOOL_PTR_CONVERSION_BADNESS; extern const struct rank BASE_CONVERSION_BADNESS; /* Badness of converting from non-reference to reference. */ extern const struct rank REFERENCE_CONVERSION_BADNESS; +/* Badness of converting integer 0 to NULL pointer. */ +extern const struct rank NULL_POINTER_CONVERSION; /* Non-standard conversions allowed by the debugger */ /* Converting a pointer to an int is usually OK. */ @@ -1556,9 +1584,10 @@ extern int compare_ranks (struct rank a, struct rank b); extern int compare_badness (struct badness_vector *, struct badness_vector *); extern struct badness_vector *rank_function (struct type **, int, - struct type **, int); + struct value **, int); -extern struct rank rank_one_type (struct type *, struct type *); +extern struct rank rank_one_type (struct type *, struct type *, + struct value *); extern void recursive_dump_type (struct type *, int);