Add software single step support to moxie port
[deliverable/binutils-gdb.git] / gdb / gdbtypes.h
index 0353f962b200636bacdc24a4cd95e2ad04f27d1b..c7bef5fdd83e4babc889874ffea082fe769f4acc 100644 (file)
@@ -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-2013 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
@@ -32,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)))
@@ -45,7 +58,8 @@ struct language_defn;
 
 enum type_code
   {
-    TYPE_CODE_UNDEF,           /* Not used; catches errors */
+    TYPE_CODE_BITSTRING = -1,  /* Deprecated  */
+    TYPE_CODE_UNDEF = 0,       /* Not used; catches errors */
     TYPE_CODE_PTR,             /* Pointer type */
 
     /* Array type with lower & upper bounds.
@@ -87,7 +101,7 @@ enum type_code
     TYPE_CODE_VOID,
 
     TYPE_CODE_SET,             /* Pascal sets */
-    TYPE_CODE_RANGE,           /* Range (integers within spec'd bounds) */
+    TYPE_CODE_RANGE,           /* Range (integers within spec'd bounds) */
 
     /* A string type which is like an array of character but prints
        differently (at least for (the deleted) CHILL).  It does not
@@ -96,10 +110,6 @@ enum type_code
        a new type code.  */
     TYPE_CODE_STRING,
 
-    /* String of bits; like TYPE_CODE_SET but prints differently (at
-       least for (the deleted) CHILL).  */
-    TYPE_CODE_BITSTRING,
-
     /* Unknown type.  The length field is valid if we were able to
        deduce that much about the type, or 0 if we don't even know that.  */
     TYPE_CODE_ERROR,
@@ -159,17 +169,18 @@ enum type_code
 
 enum type_flag_value
 {
-  TYPE_FLAG_UNSIGNED = (1 << 7),
-  TYPE_FLAG_NOSIGN = (1 << 8),
-  TYPE_FLAG_STUB = (1 << 9),
-  TYPE_FLAG_TARGET_STUB = (1 << 10),
-  TYPE_FLAG_STATIC = (1 << 11),
-  TYPE_FLAG_PROTOTYPED = (1 << 12),
-  TYPE_FLAG_INCOMPLETE = (1 << 13),
-  TYPE_FLAG_VARARGS = (1 << 14),
-  TYPE_FLAG_VECTOR = (1 << 15),
-  TYPE_FLAG_FIXED_INSTANCE = (1 << 16),
-  TYPE_FLAG_STUB_SUPPORTED = (1 << 17),
+  TYPE_FLAG_UNSIGNED = (1 << 8),
+  TYPE_FLAG_NOSIGN = (1 << 9),
+  TYPE_FLAG_STUB = (1 << 10),
+  TYPE_FLAG_TARGET_STUB = (1 << 11),
+  TYPE_FLAG_STATIC = (1 << 12),
+  TYPE_FLAG_PROTOTYPED = (1 << 13),
+  TYPE_FLAG_INCOMPLETE = (1 << 14),
+  TYPE_FLAG_VARARGS = (1 << 15),
+  TYPE_FLAG_VECTOR = (1 << 16),
+  TYPE_FLAG_FIXED_INSTANCE = (1 << 17),
+  TYPE_FLAG_STUB_SUPPORTED = (1 << 18),
+  TYPE_FLAG_GNU_IFUNC = (1 << 19),
 
   /* Used for error-checking.  */
   TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED
@@ -187,16 +198,17 @@ enum type_instance_flag_value
   TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 = (1 << 4),
   TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2 = (1 << 5),
   TYPE_INSTANCE_FLAG_NOTTEXT = (1 << 6),
+  TYPE_INSTANCE_FLAG_RESTRICT = (1 << 7)
 };
 
 /* Unsigned integer type.  If this is not set for a TYPE_CODE_INT, the
-   type is signed (unless TYPE_FLAG_NOSIGN (below) is set). */
+   type is signed (unless TYPE_FLAG_NOSIGN (below) is set).  */
 
 #define TYPE_UNSIGNED(t)       (TYPE_MAIN_TYPE (t)->flag_unsigned)
 
 /* No sign for this type.  In C++, "char", "signed char", and "unsigned
    char" are distinct types; so we need an extra flag to indicate the
-   absence of a sign! */
+   absence of a sign!  */
 
 #define TYPE_NOSIGN(t)         (TYPE_MAIN_TYPE (t)->flag_nosign)
 
@@ -210,21 +222,21 @@ enum type_instance_flag_value
    be updated if it gets un-stubbed in check_typedef.
    Used for arrays and ranges, in which TYPE_LENGTH of the array/range
    gets set based on the TYPE_LENGTH of the target type.
-   Also, set for TYPE_CODE_TYPEDEF. */
+   Also, set for TYPE_CODE_TYPEDEF.  */
 
 #define TYPE_TARGET_STUB(t)    (TYPE_MAIN_TYPE (t)->flag_target_stub)
 
 /* Static type.  If this is set, the corresponding type had 
- * a static modifier.
- * Note: This may be unnecessary, since static data members
- * are indicated by other means (bitpos == -1)
- */
+   a static modifier.
+   Note: This may be unnecessary, since static data members
+   are indicated by other means (bitpos == -1).  */
 
 #define TYPE_STATIC(t)         (TYPE_MAIN_TYPE (t)->flag_static)
 
-/* This is a function type which appears to have a prototype.  We need this
-   for function calls in order to tell us if it's necessary to coerce the args,
-   or to just do the standard conversions.  This is used with a short field. */
+/* This is a function type which appears to have a prototype.  We need
+   this for function calls in order to tell us if it's necessary to
+   coerce the args, or to just do the standard conversions.  This is
+   used with a short field.  */
 
 #define TYPE_PROTOTYPED(t)     (TYPE_MAIN_TYPE (t)->flag_prototyped)
 
@@ -234,7 +246,7 @@ enum type_instance_flag_value
    (Mostly intended for HP platforms, where class methods, for
    instance, can be encountered before their classes in the debug
    info; the incomplete type has to be marked so that the class and
-   the method can be assigned correct types.) */
+   the method can be assigned correct types.)  */
 
 #define TYPE_INCOMPLETE(t)     (TYPE_MAIN_TYPE (t)->flag_incomplete)
 
@@ -255,7 +267,7 @@ enum type_instance_flag_value
    connected by naming conventions.  This flag indicates that the 
    type is an ordinary (unencoded) GDB type that has been created from 
    the necessary run-time information, and does not need further 
-   interpretation. Optionally marks ordinary, fixed-size GDB type. */
+   interpretation.  Optionally marks ordinary, fixed-size GDB type.  */
 
 #define TYPE_FIXED_INSTANCE(t) (TYPE_MAIN_TYPE (t)->flag_fixed_instance)
 
@@ -271,6 +283,12 @@ enum type_instance_flag_value
 
 #define TYPE_NOTTEXT(t)        (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_NOTTEXT)
 
+/* Used only for TYPE_CODE_FUNC where it specifies the real function
+   address is returned by this function call.  TYPE_TARGET_TYPE determines the
+   final returned function type to be presented to user.  */
+
+#define TYPE_GNU_IFUNC(t)      (TYPE_MAIN_TYPE (t)->flag_gnu_ifunc)
+
 /* Type owner.  If TYPE_OBJFILE_OWNED is true, the type is owned by
    the objfile retrieved as TYPE_OBJFILE.  Otherweise, the type is
    owned by an architecture; TYPE_OBJFILE is NULL in this case.  */
@@ -285,19 +303,29 @@ 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.
- */
+   const modifier.  */
 
 #define TYPE_CONST(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_CONST)
 
 /* Volatile type.  If this is set, the corresponding type has a
- * volatile modifier.
- */
+   volatile modifier.  */
 
 #define TYPE_VOLATILE(t) \
   (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_VOLATILE)
 
+/* Restrict type.  If this is set, the corresponding type has a
+   restrict modifier.  */
+
+#define TYPE_RESTRICT(t) \
+  (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_RESTRICT)
+
 /* Instruction-space delimited type.  This is for Harvard architectures
    which have separate instruction and data address spaces (and perhaps
    others).
@@ -342,8 +370,10 @@ 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_PHYSNAME,   /* physname */
+    FIELD_LOC_KIND_DWARF_BLOCK /* dwarf_block */
   };
 
 /* A discriminant to determine which field in the main_type.type_specific
@@ -363,7 +393,7 @@ enum type_specific_kind
   TYPE_SPECIFIC_CPLUS_STUFF,
   TYPE_SPECIFIC_GNAT_STUFF,
   TYPE_SPECIFIC_FLOATFORMAT,
-  TYPE_SPECIFIC_CALLING_CONVENTION
+  TYPE_SPECIFIC_FUNC
 };
 
 /* This structure is space-critical.
@@ -371,7 +401,7 @@ enum type_specific_kind
 
 struct main_type
 {
-  /* Code for kind of type */
+  /* Code for kind of type */
 
   ENUM_BITFIELD(type_code) code : 8;
 
@@ -389,12 +419,18 @@ struct main_type
   unsigned int flag_varargs : 1;
   unsigned int flag_vector : 1;
   unsigned int flag_stub_supported : 1;
+  unsigned int flag_gnu_ifunc : 1;
   unsigned int flag_fixed_instance : 1;
   unsigned int flag_objfile_owned : 1;
   /* True if this type was declared with "class" rather than
      "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;
@@ -420,9 +456,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.
@@ -435,7 +473,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
@@ -447,7 +485,7 @@ struct main_type
      existing type, but to do this we need a backpointer to the objfile
      from the existing type.  Yes this is somewhat ugly, but without
      major overhaul of the internal type system, it can't be avoided
-     for now. */
+     for now.  */
 
   union type_owner
     {
@@ -493,17 +531,25 @@ 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. */
+          Otherwise, physname is the mangled label of the static field.  */
 
        CORE_ADDR physaddr;
-       char *physname;
+       const char *physname;
+
+       /* The field location can be computed by evaluating the following DWARF
+          block.  Its DATA is allocated on objfile_obstack - no CU load is
+          needed to access it.  */
+
+       struct dwarf2_locexpr_baton *dwarf_block;
       }
       loc;
 
@@ -514,7 +560,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
@@ -522,7 +568,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.
@@ -534,18 +580,18 @@ 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. */
+    /* Union member used for range types.  */
 
     struct range_bounds
     {
-      /* Low bound of range. */
+      /* Low bound of range.  */
 
       LONGEST low;
 
-      /* High bound of range. */
+      /* High bound of range.  */
 
       LONGEST high;
 
@@ -580,7 +626,7 @@ struct main_type
   {
     /* CPLUS_STUFF is for TYPE_CODE_STRUCT.  It is initialized to point to
        cplus_struct_default, a default static instance of a struct
-       cplus_struct_type. */
+       cplus_struct_type.  */
 
     struct cplus_struct_type *cplus_stuff;
 
@@ -595,10 +641,8 @@ struct main_type
 
     const struct floatformat **floatformat;
 
-    /* For TYPE_CODE_FUNC types, the calling convention for targets
-       supporting multiple ABIs.  Right now this is only fetched from
-       the Dwarf-2 DW_AT_calling_convention attribute.  */
-    unsigned calling_convention;
+    /* For TYPE_CODE_FUNC types,  */
+    struct func_type *func_stuff;
   } type_specific;
 };
 
@@ -680,15 +724,10 @@ struct cplus_struct_type
     short n_baseclasses;
 
     /* Number of methods with unique names.  All overloaded methods with
-       the same name count only once. */
+       the same name count only once.  */
 
     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;
 
@@ -699,6 +738,9 @@ struct cplus_struct_type
        dynamic.  Zero if not yet computed.  */
     int is_dynamic : 2;
 
+    /* Non-zero if this type came from a Java CU.  */
+    unsigned int is_java : 1;
+
     /* For derived classes, the number of base classes is given by
        n_baseclasses and virtual_field_bits is a bit vector containing
        one bit per base class.  If the base class is virtual, the
@@ -710,26 +752,26 @@ struct cplus_struct_type
        class C : public B, public virtual A {};
 
        B is a baseclass of C; A is a virtual baseclass for C.
-       This is a C++ 2.0 language feature. */
+       This is a C++ 2.0 language feature.  */
 
     B_TYPE *virtual_field_bits;
 
     /* For classes with private fields, the number of fields is given by
        nfields and private_field_bits is a bit vector containing one bit
        per field.
-       If the field is private, the corresponding bit will be set. */
+       If the field is private, the corresponding bit will be set.  */
 
     B_TYPE *private_field_bits;
 
     /* For classes with protected fields, the number of fields is given by
        nfields and protected_field_bits is a bit vector containing one bit
        per field.
-       If the field is private, the corresponding bit will be set. */
+       If the field is private, the corresponding bit will be set.  */
 
     B_TYPE *protected_field_bits;
 
-    /* for classes with fields to be ignored, either this is optimized out
-       or this field has length 0 */
+    /* For classes with fields to be ignored, either this is optimized out
+       or this field has length 0 */
 
     B_TYPE *ignore_field_bits;
 
@@ -738,14 +780,16 @@ struct cplus_struct_type
        arguments that the method expects, and then the name after it
        has been renamed to make it distinct.
 
-       fn_fieldlists points to an array of nfn_fields of these. */
+       fn_fieldlists points to an array of nfn_fields of these.  */
 
     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.  */
 
@@ -767,22 +811,22 @@ struct cplus_struct_type
               arguments.  See gdb_mangle_name for the conversion from this
               format to the one used if is_stub is clear.  */
 
-           char *physname;
+           const char *physname;
 
            /* The function type for the method.
               (This comment used to say "The return value of the method",
-              but that's wrong. The function type 
+              but that's wrong.  The function type 
               is expected here, i.e. something with TYPE_CODE_FUNC,
-              and *not* the return-value type). */
+              and *not* the return-value type).  */
 
            struct type *type;
 
            /* For virtual functions.
-              First baseclass that defines this virtual function.   */
+              First baseclass that defines this virtual function.  */
 
            struct type *fcontext;
 
-           /* Attributes. */
+           /* Attributes.  */
 
            unsigned int is_const:1;
            unsigned int is_volatile:1;
@@ -800,8 +844,12 @@ struct cplus_struct_type
               to reconstruct the rest of the fields).  */
            unsigned int is_stub:1;
 
+           /* True if this function is a constructor, false
+              otherwise.  */
+           unsigned int is_constructor : 1;
+
            /* Unused.  */
-           unsigned int dummy:4;
+           unsigned int dummy:3;
 
            /* Index into that baseclass's virtual function table,
               minus 2; else if static: VOFFSET_STATIC; else: 0.  */
@@ -816,16 +864,6 @@ struct cplus_struct_type
       }
      *fn_fieldlists;
 
-    /* Pointer to information about enclosing scope, if this is a
-     * local type.  If it is not a local type, this is NULL
-     */
-    struct local_type_info
-      {
-       char *file;
-       int line;
-      }
-     *localtype_ptr;
-
     /* typedefs defined inside this class.  TYPEDEF_FIELD points to an array of
        TYPEDEF_FIELD_COUNT elements.  */
     struct typedef_field
@@ -845,13 +883,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
   {
@@ -861,12 +892,12 @@ struct rank
        rank, subrank is used to differentiate the two.
        Eg: Two derived-class-pointer to base-class-pointer conversions would
        both have base pointer conversion rank, but the conversion with the
-       shorter distance to the ancestor is preferable. 'subrank' would be used
+       shorter distance to the ancestor is preferable.  'subrank' would be used
        to reflect that.  */
     short subrank;
   };
 
-/* Struct used for ranking a function for overload resolution */
+/* Struct used for ranking a function for overload resolution */
 struct badness_vector
   {
     int length;
@@ -882,8 +913,103 @@ struct gnat_aux_type
     struct type* descriptive_type;
   };
 
+/* For TYPE_CODE_FUNC types,  */
+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.  */
+    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;
+  };
+
+/* 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.  */
+
+struct call_site
+  {
+    /* Address of the first instruction after this call.  It must be the first
+       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
+      {
+       union field_location loc;
+
+       /* Discriminant for union field_location.  */
+       ENUM_BITFIELD(field_loc_kind) loc_kind : 3;
+      }
+    target;
+
+    /* Size of the PARAMETER array.  */
+    unsigned parameter_count;
+
+    /* CU of the function where the call is located.  It gets used for DWARF
+       blocks execution in the parameter array below.  */
+    struct dwarf2_per_cu_data *per_cu;
+
+    /* Describe DW_TAG_GNU_call_site's DW_TAG_formal_parameter.  */
+    struct call_site_parameter
+      {
+       ENUM_BITFIELD (call_site_parameter_kind) kind : 2;
+
+       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.  */
+       const gdb_byte *value;
+       size_t value_size;
+
+       /* DW_TAG_formal_parameter's DW_AT_GNU_call_site_data_value.  It may be
+          NULL if not provided by DWARF.  */
+       const gdb_byte *data_value;
+       size_t data_value_size;
+      }
+    parameter[1];
+  };
+
 /* The default value of TYPE_CPLUS_SPECIFIC(T) points to the
-   this shared static structure. */
+   this shared static structure.  */
 
 extern const struct cplus_struct_type cplus_struct_default;
 
@@ -913,6 +1039,12 @@ extern void allocate_gnat_aux_type (struct type *);
 #define HAVE_GNAT_AUX_INFO(type) \
   (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_GNAT_STUFF)
 
+#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)))
+
 #define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags
 #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type
 #define TYPE_NAME(thistype) TYPE_MAIN_TYPE(thistype)->name
@@ -927,7 +1059,7 @@ extern void allocate_gnat_aux_type (struct type *);
    calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe.  */
 #define TYPE_LENGTH(thistype) (thistype)->length
 /* Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real
-   type, you need to do TYPE_CODE (check_type (this_type)). */
+   type, you need to do TYPE_CODE (check_type (this_type)).  */
 #define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code
 #define TYPE_NFIELDS(thistype) TYPE_MAIN_TYPE(thistype)->nfields
 #define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields
@@ -941,7 +1073,7 @@ extern void allocate_gnat_aux_type (struct type *);
 #define TYPE_HIGH_BOUND_UNDEFINED(range_type) \
    TYPE_RANGE_DATA(range_type)->high_undefined
 
-/* Moto-specific stuff for FORTRAN arrays */
+/* Moto-specific stuff for FORTRAN arrays */
 
 #define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
    TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
@@ -961,7 +1093,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
@@ -978,7 +1109,8 @@ extern void allocate_gnat_aux_type (struct type *);
 #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
-#define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.calling_convention
+#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)
@@ -986,6 +1118,7 @@ extern void allocate_gnat_aux_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 \
@@ -994,18 +1127,28 @@ 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))
 #define SET_FIELD_PHYSADDR(thisfld, addr)                      \
   (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR,         \
    FIELD_STATIC_PHYSADDR (thisfld) = (addr))
+#define SET_FIELD_DWARF_BLOCK(thisfld, addr)                   \
+  (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_DWARF_BLOCK,      \
+   FIELD_DWARF_BLOCK (thisfld) = (addr))
 #define FIELD_ARTIFICIAL(thisfld) ((thisfld).artificial)
 #define FIELD_BITSIZE(thisfld) ((thisfld).bitsize)
 
@@ -1014,8 +1157,10 @@ 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))
 #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
 #define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
 #define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0)
@@ -1078,15 +1223,12 @@ extern void allocate_gnat_aux_type (struct type *);
 #define TYPE_FN_FIELD_ARTIFICIAL(thisfn, n) ((thisfn)[n].is_artificial)
 #define TYPE_FN_FIELD_ABSTRACT(thisfn, n) ((thisfn)[n].is_abstract)
 #define TYPE_FN_FIELD_STUB(thisfn, n) ((thisfn)[n].is_stub)
+#define TYPE_FN_FIELD_CONSTRUCTOR(thisfn, n) ((thisfn)[n].is_constructor)
 #define TYPE_FN_FIELD_FCONTEXT(thisfn, n) ((thisfn)[n].fcontext)
 #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_LOCALTYPE_PTR(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr)
-#define TYPE_LOCALTYPE_FILE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->file)
-#define TYPE_LOCALTYPE_LINE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->line)
-
 #define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \
   TYPE_CPLUS_SPECIFIC (thistype)->typedef_field
 #define TYPE_TYPEDEF_FIELD(thistype, n) \
@@ -1106,6 +1248,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) : _("<unnamed 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) \
@@ -1115,7 +1262,7 @@ struct builtin_type
 {
   /* Integral types.  */
 
-  /* Implicit size/sign (based on the the architecture's ABI).  */
+  /* Implicit size/sign (based on the architecture's ABI).  */
   struct type *builtin_void;
   struct type *builtin_char;
   struct type *builtin_short;
@@ -1181,6 +1328,10 @@ struct builtin_type
      (*) () can server as a generic function pointer.  */
   struct type *builtin_func_ptr;
 
+  /* `function returning pointer to function (returning void)' type.
+     The final void return type is not significant for it.  */
+  struct type *builtin_func_func;
+
 
   /* Special-purpose types.  */
 
@@ -1221,6 +1372,8 @@ struct objfile_type
 
   /* Types used for symbols with no debug information.  */
   struct type *nodebug_text_symbol;
+  struct type *nodebug_text_gnu_ifunc_symbol;
+  struct type *nodebug_got_plt_symbol;
   struct type *nodebug_data_symbol;
   struct type *nodebug_unknown_symbol;
   struct type *nodebug_tls_symbol;
@@ -1247,12 +1400,12 @@ extern const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN
 
 /* Allocate space for storing data associated with a particular type.
    We ensure that the space is allocated using the same mechanism that
-   was used to allocate the space for the type structure itself.  I.E.
+   was used to allocate the space for the type structure itself.  I.e.
    if the type is on an objfile's objfile_obstack, then the space for data
    associated with that type will also be allocated on the objfile_obstack.
    If the type is not associated with any particular objfile (such as
    builtin types), then the data space will be allocated with xmalloc,
-   the same as for the type structure. */
+   the same as for the type structure.  */
 
 #define TYPE_ALLOC(t,size)  \
    (TYPE_OBJFILE_OWNED (t) \
@@ -1278,8 +1431,12 @@ extern struct type *alloc_type_copy (const struct type *);
    objfile's architecture is returned.  */
 extern struct gdbarch *get_type_arch (const struct type *);
 
+/* This returns the target type (or NULL) of TYPE, also skipping
+   past typedefs.  */
+extern struct type *get_target_type (struct type *type);
+
 /* Helper function to construct objfile-owned types.  */
-extern struct type *init_type (enum type_code, int, int, char *,
+extern struct type *init_type (enum type_code, int, int, const char *,
                               struct objfile *);
 
 /* Helper functions to construct architecture-owned types.  */
@@ -1325,6 +1482,8 @@ extern struct type *make_reference_type (struct type *, struct type **);
 
 extern struct type *make_cv_type (int, int, struct type *, struct type **);
 
+extern struct type *make_restrict_type (struct type *);
+
 extern void replace_type (struct type *, struct type *);
 
 extern int address_space_name_to_int (struct gdbarch *, char *);
@@ -1349,9 +1508,11 @@ 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);
 
-extern struct type *lookup_struct_elt_type (struct type *, char *, int);
+extern struct type *lookup_struct_elt_type (struct type *, const char *, int);
 
 extern struct type *make_pointer_type (struct type *, struct type **);
 
@@ -1361,24 +1522,28 @@ 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);
 
 extern struct type *create_array_type (struct type *, struct type *,
                                       struct type *);
-extern struct type *lookup_array_range_type (struct type *, int, int);
+extern struct type *lookup_array_range_type (struct type *, LONGEST, LONGEST);
 
 extern struct type *create_string_type (struct type *, struct type *,
                                        struct type *);
-extern struct type *lookup_string_range_type (struct type *, int, int);
+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 *,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 *);
 
@@ -1392,11 +1557,11 @@ 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 *, char *,
+                                    struct gdbarch *, const char *,
                                     const struct block *, int);
 
 extern struct type *lookup_template_type (char *, struct type *,
-                                         struct block *);
+                                         const struct block *);
 
 extern int get_vptr_fieldno (struct type *, struct type **);
 
@@ -1417,43 +1582,48 @@ extern int is_unique_ancestor (struct type *, struct value *);
 
 #define LENGTH_MATCH(bv) ((bv)->rank[0])
 
-/* Badness if parameter list length doesn't match arg list length */
+/* Badness if parameter list length doesn't match arg list length */
 extern const struct rank LENGTH_MISMATCH_BADNESS;
 
-/* Dummy badness value for nonexistent parameter positions */
+/* Dummy badness value for nonexistent parameter positions */
 extern const struct rank TOO_FEW_PARAMS_BADNESS;
-/* Badness if no conversion among types */
+/* Badness if no conversion among types */
 extern const struct rank INCOMPATIBLE_TYPE_BADNESS;
 
 /* Badness of an exact match.  */
 extern const struct rank EXACT_MATCH_BADNESS;
 
-/* Badness of integral promotion */
+/* Badness of integral promotion */
 extern const struct rank INTEGER_PROMOTION_BADNESS;
-/* Badness of floating promotion */
+/* Badness of floating promotion */
 extern const struct rank FLOAT_PROMOTION_BADNESS;
 /* Badness of converting a derived class pointer
    to a base class pointer.  */
 extern const struct rank BASE_PTR_CONVERSION_BADNESS;
-/* Badness of integral conversion */
+/* Badness of integral conversion */
 extern const struct rank INTEGER_CONVERSION_BADNESS;
-/* Badness of floating conversion */
+/* Badness of floating conversion */
 extern const struct rank FLOAT_CONVERSION_BADNESS;
-/* Badness of integer<->floating conversions */
+/* Badness of integer<->floating conversions */
 extern const struct rank INT_FLOAT_CONVERSION_BADNESS;
-/* Badness of conversion of pointer to void pointer */
+/* Badness of conversion of pointer to void pointer */
 extern const struct rank VOID_PTR_CONVERSION_BADNESS;
-/* Badness of conversion of pointer to boolean.  */
-extern const struct rank BOOL_PTR_CONVERSION_BADNESS;
-/* Badness of converting derived to base class */
+/* Badness of conversion to boolean.  */
+extern const struct rank BOOL_CONVERSION_BADNESS;
+/* Badness of converting derived to base class */
 extern const struct rank BASE_CONVERSION_BADNESS;
-/* Badness of converting from non-reference to reference */
+/* 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 */
+/* Converting a pointer to an int is usually OK */
 extern const struct rank NS_POINTER_CONVERSION_BADNESS;
 
+/* Badness of converting a (non-zero) integer constant
+   to a pointer.  */
+extern const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS;
 
 extern struct rank sum_ranks (struct rank a, struct rank b);
 extern int compare_ranks (struct rank a, struct rank b);
@@ -1461,9 +1631,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);
 
@@ -1479,6 +1650,8 @@ extern int can_dereference (struct type *);
 
 extern int is_integral_type (struct type *);
 
+extern int is_scalar_type_recursive (struct type *);
+
 extern void maintenance_print_type (char *, int);
 
 extern htab_t create_copied_types_hash (struct objfile *objfile);
@@ -1489,4 +1662,8 @@ extern struct type *copy_type_recursive (struct objfile *objfile,
 
 extern struct type *copy_type (const struct type *type);
 
+extern int types_equal (struct type *, struct type *);
+
+extern int types_deeply_equal (struct type *, struct type *);
+
 #endif /* GDBTYPES_H */
This page took 0.058318 seconds and 4 git commands to generate.