X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbtypes.h;h=4fb970e0edbeb7b14a2cf86a060c288c3ed2ce35;hb=dbdb27ec2d5ddeb8a214181881ab616ebe47b0cf;hp=3d8fbca073ef4cd915a80b7c3998a034f4eb136a;hpb=000177f0ad8107eeacc1fceaec5ca72ad9725099;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 3d8fbca073..4fb970e0ed 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -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 { @@ -946,29 +977,10 @@ struct builtin_type /* Integral types. */ - /* Explicit sizes. These are assumed to be 2's complement and in - the architecture's byte order. The "int0" is for when an ISA - needs to describe a register that has no size. The naming schema - is based on C9X . */ - /* FIXME: cagney/2004-07-26: As with floating-point, there should be - explicit big, little and little-byte-big-word endian types that - exist outside of the architecture vector. */ - struct type *builtin_int0; - struct type *builtin_int8; - struct type *builtin_uint8; - struct type *builtin_int16; - struct type *builtin_uint16; - struct type *builtin_int32; - struct type *builtin_uint32; - struct type *builtin_int64; - struct type *builtin_uint64; - struct type *builtin_int128; - struct type *builtin_uint128; - /* We use this for the '/c' print format, because c_char is just a one-byte integral type, which languages less laid back than C will print as ... well, a one-byte integral type. */ - struct type *true_char; + struct type *builtin_true_char; /* Implicit size/sign (based on the the architecture's ABI). */ struct type *builtin_void; @@ -1060,17 +1072,27 @@ extern struct type *builtin_type_v8hi; extern struct type *builtin_type_v4hi; extern struct type *builtin_type_v2si; -/* Type for 64 bit vectors. */ +/* Types for 64 bit vectors. */ +extern struct type *builtin_type_v2_float; +extern struct type *builtin_type_v2_int32; +extern struct type *builtin_type_v4_int16; +extern struct type *builtin_type_v8_int8; extern struct type *builtin_type_vec64; -extern struct type *builtin_type_vec64i; -/* Type for 128 bit vectors. */ +/* Types for 128 bit vectors. */ +extern struct type *builtin_type_v2_double; +extern struct type *builtin_type_v4_float; +extern struct type *builtin_type_v2_int64; +extern struct type *builtin_type_v4_int32; +extern struct type *builtin_type_v8_int16; +extern struct type *builtin_type_v16_int8; 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; @@ -1079,10 +1101,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; @@ -1223,8 +1248,6 @@ extern struct type *check_typedef (struct type *); extern void check_stub_method_group (struct type *, int); -extern struct type *lookup_primitive_typename (char *); - extern char *gdb_mangle_name (struct type *, int, int); extern struct type *lookup_typename (char *, struct block *, int); @@ -1332,7 +1355,7 @@ extern void recursive_dump_type (struct type *, int); /* printcmd.c */ -extern void print_scalar_formatted (void *, struct type *, int, int, +extern void print_scalar_formatted (const void *, struct type *, int, int, struct ui_file *); extern int can_dereference (struct type *);