| Index: gdb/gdbtypes.h
|
| diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
|
| index a54a3022f12dce4abb6a720b1b56a6787c8ff3cb..17bfbc55b31dae69d80d980aa06befecd6b4f830 100644
|
| --- a/gdb/gdbtypes.h
|
| +++ b/gdb/gdbtypes.h
|
| @@ -30,6 +30,21 @@ struct block;
|
| struct value_print_options;
|
| struct language_defn;
|
|
|
| +/* These declarations are DWARF-specific as some of the gdbtypes.h data types
|
| + are already DWARF-specific. */
|
| +
|
| +/* Offset relative to the start of its containing CU (compilation unit). */
|
| +typedef struct
|
| +{
|
| + unsigned int cu_off;
|
| +} cu_offset;
|
| +
|
| +/* Offset relative to the start of its .debug_info or .debug_types section. */
|
| +typedef struct
|
| +{
|
| + unsigned int sect_off;
|
| +} sect_offset;
|
| +
|
| /* Some macros for char-based bitfields. */
|
|
|
| #define B_SET(a,x) ((a)[(x)>>3] |= (1 << ((x)&7)))
|
| @@ -290,6 +305,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. */
|
|
|
| @@ -345,6 +366,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 */
|
| @@ -400,6 +422,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;
|
| @@ -425,9 +452,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.
|
| @@ -440,7 +469,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
|
| @@ -498,11 +527,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. */
|
| @@ -525,7 +556,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
|
| @@ -533,7 +564,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.
|
| @@ -545,7 +576,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. */
|
| @@ -693,11 +724,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;
|
|
|
| @@ -755,9 +781,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. */
|
|
|
| @@ -856,13 +884,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
|
| {
|
| @@ -909,6 +930,20 @@ struct func_type
|
| struct call_site *tail_call_list;
|
| };
|
|
|
| +/* struct call_site_parameter can be referenced in callees by several ways. */
|
| +
|
| +enum call_site_parameter_kind
|
| +{
|
| + /* Use field call_site_parameter.u.dwarf_reg. */
|
| + CALL_SITE_PARAMETER_DWARF_REG,
|
| +
|
| + /* Use field call_site_parameter.u.fb_offset. */
|
| + CALL_SITE_PARAMETER_FB_OFFSET,
|
| +
|
| + /* Use field call_site_parameter.u.param_offset. */
|
| + CALL_SITE_PARAMETER_PARAM_OFFSET
|
| +};
|
| +
|
| /* A place where a function gets called from, represented by
|
| DW_TAG_GNU_call_site. It can be looked up from symtab->call_site_htab. */
|
|
|
| @@ -928,7 +963,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;
|
|
|
| @@ -942,15 +977,24 @@ struct call_site
|
| /* Describe DW_TAG_GNU_call_site's DW_TAG_formal_parameter. */
|
| struct call_site_parameter
|
| {
|
| - /* DW_TAG_formal_parameter's DW_AT_location's DW_OP_regX as DWARF
|
| - register number, for register passed parameters. If -1 then use
|
| - fb_offset. */
|
| - int dwarf_reg;
|
| + ENUM_BITFIELD (call_site_parameter_kind) kind : 2;
|
|
|
| - /* Offset from the callee's frame base, for stack passed parameters.
|
| - This equals offset from the caller's stack pointer. Valid only if
|
| - DWARF_REGNUM is -1. */
|
| - CORE_ADDR fb_offset;
|
| + union call_site_parameter_u
|
| + {
|
| + /* DW_TAG_formal_parameter's DW_AT_location's DW_OP_regX as DWARF
|
| + register number, for register passed parameters. */
|
| + int dwarf_reg;
|
| +
|
| + /* Offset from the callee's frame base, for stack passed parameters.
|
| + This equals offset from the caller's stack pointer. */
|
| + CORE_ADDR fb_offset;
|
| +
|
| + /* Offset relative to the start of this PER_CU to
|
| + DW_TAG_formal_parameter which is referenced by both caller and
|
| + the callee. */
|
| + cu_offset param_offset;
|
| + }
|
| + u;
|
|
|
| /* DW_TAG_formal_parameter's DW_AT_GNU_call_site_value. It is never
|
| NULL. */
|
| @@ -1050,7 +1094,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
|
| @@ -1085,13 +1128,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))
|
| @@ -1109,6 +1158,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))
|
| @@ -1456,7 +1506,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,6 +1520,10 @@ extern struct type *make_function_type (struct type *, struct type **);
|
|
|
| extern struct type *lookup_function_type (struct type *);
|
|
|
| +extern struct type *lookup_function_type_with_arguments (struct type *,
|
| + int,
|
| + struct type **);
|
| +
|
| extern struct type *create_range_type (struct type *, struct type *, LONGEST,
|
| LONGEST);
|
|
|
| @@ -1484,10 +1538,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 *);
|
|
|
|
|