* ada-exp.y (write_object_renaming, write_var_or_type)
[deliverable/binutils-gdb.git] / gdb / gdbtypes.h
index e6ed7ac10fc8d9e3ce9c78c3712621f26dceffbc..fb113d21b917be32e18568b76d1ebe8c87ad2542 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-2004, 2006-2012 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.
@@ -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,
@@ -292,6 +302,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 +363,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 +419,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 +449,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 +466,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 +524,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 +553,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 +561,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 +573,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 +721,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 +778,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.  */
 
@@ -830,15 +853,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
@@ -858,13 +872,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
   {
@@ -911,6 +918,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.  */
 
@@ -930,7 +951,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;
 
@@ -944,15 +965,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.  */
@@ -1052,7 +1082,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
@@ -1087,13 +1116,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))
@@ -1111,6 +1146,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))
@@ -1181,10 +1217,6 @@ extern void allocate_gnat_aux_type (struct type *);
 #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) \
@@ -1204,6 +1236,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) \
@@ -1453,7 +1490,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);
 
@@ -1467,24 +1504,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 *);
 
@@ -1502,7 +1543,7 @@ extern struct type *lookup_typename (const struct language_defn *,
                                     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 **);
 
@@ -1549,8 +1590,8 @@ extern const struct rank FLOAT_CONVERSION_BADNESS;
 extern const struct rank INT_FLOAT_CONVERSION_BADNESS;
 /* 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 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.  */
@@ -1562,6 +1603,9 @@ extern const struct rank NULL_POINTER_CONVERSION;
 /* 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);
@@ -1600,4 +1644,6 @@ 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 *);
+
 #endif /* GDBTYPES_H */
This page took 0.03152 seconds and 4 git commands to generate.