2004-12-13 Randolph Chung <tausq@debian.org>
[binutils-gdb.git] / gdb / gdbtypes.h
index a9d98dcbfddc63864a566ccd3b57af43cbfc9cad..eb28de2faae0969fa69795917dcf0ec236ab46e2 100644 (file)
@@ -82,7 +82,27 @@ enum type_code
   {
     TYPE_CODE_UNDEF,           /* Not used; catches errors */
     TYPE_CODE_PTR,             /* Pointer type */
-    TYPE_CODE_ARRAY,           /* Array type with lower & upper bounds. */
+
+    /* Array type with lower & upper bounds.
+
+       Regardless of the language, GDB represents multidimensional
+       array types the way C does: as arrays of arrays.  So an
+       instance of a GDB array type T can always be seen as a series
+       of instances of TYPE_TARGET_TYPE (T) laid out sequentially in
+       memory.
+
+       Row-major languages like C lay out multi-dimensional arrays so
+       that incrementing the rightmost index in a subscripting
+       expression results in the smallest change in the address of the
+       element referred to.  Column-major languages like Fortran lay
+       them out so that incrementing the leftmost index results in the
+       smallest change.
+
+       This means that, in column-major languages, working our way
+       from type to target type corresponds to working through indices
+       from right to left, not left to right.  */
+    TYPE_CODE_ARRAY,
+
     TYPE_CODE_STRUCT,          /* C struct or Pascal record */
     TYPE_CODE_UNION,           /* C union or Pascal variant part */
     TYPE_CODE_ENUM,            /* Enumeration type */
@@ -273,6 +293,17 @@ enum type_code
 #define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \
                                   & TYPE_FLAG_ADDRESS_CLASS_ALL)
 
+/* The debugging formats (especially STABS) do not contain enough information
+   to represent all Ada types---especially those whose size depends on
+   dynamic quantities.  Therefore, the GNAT Ada compiler includes
+   extra information in the form of additional type definitions
+   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. */
+
+#define TYPE_FLAG_FIXED_INSTANCE (1 << 15)
+
 /*  Array bound type.  */
 enum array_bound_type
 {
@@ -1050,8 +1081,10 @@ extern struct type *builtin_type_vec128;
 extern struct type *builtin_type_vec128i;
 
 /* Explicit floating-point formats.  See "floatformat.h".  */
+extern struct type *builtin_type_ieee_single[BFD_ENDIAN_UNKNOWN];
 extern struct type *builtin_type_ieee_single_big;
 extern struct type *builtin_type_ieee_single_little;
+extern struct type *builtin_type_ieee_double[BFD_ENDIAN_UNKNOWN];
 extern struct type *builtin_type_ieee_double_big;
 extern struct type *builtin_type_ieee_double_little;
 extern struct type *builtin_type_ieee_double_littlebyte_bigword;
@@ -1060,10 +1093,13 @@ extern struct type *builtin_type_m68881_ext;
 extern struct type *builtin_type_i960_ext;
 extern struct type *builtin_type_m88110_ext;
 extern struct type *builtin_type_m88110_harris_ext;
+extern struct type *builtin_type_arm_ext[BFD_ENDIAN_UNKNOWN];
 extern struct type *builtin_type_arm_ext_big;
 extern struct type *builtin_type_arm_ext_littlebyte_bigword;
+extern struct type *builtin_type_ia64_spill[BFD_ENDIAN_UNKNOWN];
 extern struct type *builtin_type_ia64_spill_big;
 extern struct type *builtin_type_ia64_spill_little;
+extern struct type *builtin_type_ia64_quad[BFD_ENDIAN_UNKNOWN];
 extern struct type *builtin_type_ia64_quad_big;
 extern struct type *builtin_type_ia64_quad_little;