This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#if !defined (GDBTYPES_H)
#define GDBTYPES_H 1
struct field;
struct block;
-/* Codes for `fundamental types'. This is a monstrosity based on the
- bogus notion that there are certain compiler-independent
- `fundamental types'. None of these is well-defined (how big is
- FT_SHORT? Does it depend on the language? How does the
- language-specific code know which type to correlate to FT_SHORT?) */
-
-#define FT_VOID 0
-#define FT_BOOLEAN 1
-#define FT_CHAR 2 /* we use this for not-unsigned C/C++ chars */
-#define FT_SIGNED_CHAR 3 /* we use this for C++ signed chars */
-#define FT_UNSIGNED_CHAR 4 /* we use this for C/C++ unsigned chars */
-#define FT_SHORT 5
-#define FT_SIGNED_SHORT 6
-#define FT_UNSIGNED_SHORT 7
-#define FT_INTEGER 8
-#define FT_SIGNED_INTEGER 9
-#define FT_UNSIGNED_INTEGER 10
-#define FT_LONG 11
-#define FT_SIGNED_LONG 12
-#define FT_UNSIGNED_LONG 13
-#define FT_LONG_LONG 14
-#define FT_SIGNED_LONG_LONG 15
-#define FT_UNSIGNED_LONG_LONG 16
-#define FT_FLOAT 17
-#define FT_DBL_PREC_FLOAT 18
-#define FT_EXT_PREC_FLOAT 19
-#define FT_COMPLEX 20
-#define FT_DBL_PREC_COMPLEX 21
-#define FT_EXT_PREC_COMPLEX 22
-#define FT_STRING 23
-#define FT_FIXED_DECIMAL 24
-#define FT_FLOAT_DECIMAL 25
-#define FT_BYTE 26
-#define FT_UNSIGNED_BYTE 27
-#define FT_TEMPLATE_ARG 28
-
-#define FT_NUM_MEMBERS 29 /* Highest FT_* above, plus one. */
-
/* Some macros for char-based bitfields. */
#define B_SET(a,x) ((a)[(x)>>3] |= (1 << ((x)&7)))
TYPE_CODE_TEMPLATE, /* C++ template */
TYPE_CODE_TEMPLATE_ARG, /* C++ template arg */
- TYPE_CODE_NAMESPACE /* C++ namespace. */
+ TYPE_CODE_NAMESPACE, /* C++ namespace. */
+
+ TYPE_CODE_DECFLOAT /* Decimal floating point. */
};
/* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
#define TYPE_FLAG_STUB_SUPPORTED (1 << 16)
#define TYPE_STUB_SUPPORTED(t) (TYPE_FLAGS (t) & TYPE_FLAG_STUB_SUPPORTED)
+/* Not textual. By default, GDB treats all single byte integers as
+ characters (or elements of strings) unless this flag is set. */
+
+#define TYPE_FLAG_NOTTEXT (1 << 17)
+#define TYPE_NOTTEXT(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOTTEXT)
+
/* Array bound type. */
enum array_bound_type
{
short ninstantiations;
struct type **instantiations;
- /* The following points to information relevant to the runtime model
- * of the compiler.
- * Currently being used only for HP's ANSI C++ compiler.
- * (This type may have to be changed/enhanced for other compilers.)
- *
- * RUNTIME_PTR is NULL if there is no runtime information (currently
- * this means the type was not compiled by HP aCC).
- *
- * Fields in structure pointed to:
- * ->HAS_VTABLE : 0 => no virtual table, 1 => vtable present
- *
- * ->PRIMARY_BASE points to the first non-virtual base class that has
- * a virtual table.
- *
- * ->VIRTUAL_BASE_LIST points to a list of struct type * pointers that
- * point to the type information for all virtual bases among this type's
- * ancestors.
- */
- struct runtime_info
- {
- short has_vtable;
- struct type *primary_base;
- struct type **virtual_base_list;
- }
- *runtime_ptr;
-
/* Pointer to information about enclosing scope, if this is a
* local type. If it is not a local type, this is NULL
*/
#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_RUNTIME_PTR(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->runtime_ptr)
-#define TYPE_VTABLE(thistype) (TYPE_RUNTIME_PTR(thistype)->has_vtable)
-#define TYPE_HAS_VTABLE(thistype) (TYPE_RUNTIME_PTR(thistype) && TYPE_VTABLE(thistype))
-#define TYPE_PRIMARY_BASE(thistype) (TYPE_RUNTIME_PTR(thistype)->primary_base)
-#define TYPE_VIRTUAL_BASE_LIST(thistype) (TYPE_RUNTIME_PTR(thistype)->virtual_base_list)
-
#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)
/* The target CPU's address type. This is the ISA address size. */
struct type *builtin_core_addr;
+
+ /* Types used for symbols with no debug information. */
+ struct type *nodebug_text_symbol;
+ struct type *nodebug_data_symbol;
+ struct type *nodebug_unknown_symbol;
+ struct type *nodebug_tls_symbol;
+
+
/* Integral types. */
- /* We use this for the '/c' print format, because c_char is just a
+ /* We use these 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 *builtin_true_char;
+ struct type *builtin_true_unsigned_char;
/* Implicit size/sign (based on the the architecture's ABI). */
struct type *builtin_void;
struct type *builtin_bool;
struct type *builtin_long_long;
struct type *builtin_unsigned_long_long;
+ struct type *builtin_decfloat;
+ struct type *builtin_decdouble;
+ struct type *builtin_declong;
};
/* Return the type table for the specified architecture. */
extern const struct builtin_type *builtin_type (struct gdbarch *gdbarch);
-/* Implicit sizes */
-extern struct type *builtin_type_void;
-extern struct type *builtin_type_char;
-extern struct type *builtin_type_short;
-extern struct type *builtin_type_int;
-extern struct type *builtin_type_long;
-extern struct type *builtin_type_signed_char;
-extern struct type *builtin_type_unsigned_char;
-extern struct type *builtin_type_unsigned_short;
-extern struct type *builtin_type_unsigned_int;
-extern struct type *builtin_type_unsigned_long;
-extern struct type *builtin_type_float;
-extern struct type *builtin_type_double;
-extern struct type *builtin_type_long_double;
-extern struct type *builtin_type_complex;
-extern struct type *builtin_type_double_complex;
-extern struct type *builtin_type_string;
-extern struct type *builtin_type_bool;
-
-/* Address/pointer types: */
-/* (C) Language `pointer to data' type. Some target platforms use an
- implicitly {sign,zero} -extended 32 bit C language pointer on a 64
- bit ISA. */
-extern struct type *builtin_type_void_data_ptr;
-
-/* (C) Language `pointer to function returning void' type. Since
- ANSI, C standards have explicitly said that pointers to functions
- and pointers to data are not interconvertible --- that is, you
- can't cast a function pointer to void * and back, and expect to get
- the same value. However, all function pointer types are
- interconvertible, so void (*) () can server as a generic function
- pointer. */
-extern struct type *builtin_type_void_func_ptr;
-
-/* The target CPU's address type. This is the ISA address size. */
-extern struct type *builtin_type_CORE_ADDR;
-/* The symbol table address type. Some object file formats have a 32
- bit address type even though the TARGET has a 64 bit pointer type
- (cf MIPS). */
-extern struct type *builtin_type_bfd_vma;
-
+/* Compatibility macros to access types for the current architecture. */
+#define builtin_type_void_data_ptr \
+ (builtin_type (current_gdbarch)->builtin_data_ptr)
+#define builtin_type_void_func_ptr \
+ (builtin_type (current_gdbarch)->builtin_func_ptr)
+#define builtin_type_CORE_ADDR \
+ (builtin_type (current_gdbarch)->builtin_core_addr)
+#define builtin_type_true_char \
+ (builtin_type (current_gdbarch)->builtin_true_char)
+#define builtin_type_void \
+ (builtin_type (current_gdbarch)->builtin_void)
+#define builtin_type_char \
+ (builtin_type (current_gdbarch)->builtin_char)
+#define builtin_type_short \
+ (builtin_type (current_gdbarch)->builtin_short)
+#define builtin_type_int \
+ (builtin_type (current_gdbarch)->builtin_int)
+#define builtin_type_long \
+ (builtin_type (current_gdbarch)->builtin_long)
+#define builtin_type_signed_char \
+ (builtin_type (current_gdbarch)->builtin_signed_char)
+#define builtin_type_unsigned_char \
+ (builtin_type (current_gdbarch)->builtin_unsigned_char)
+#define builtin_type_unsigned_short \
+ (builtin_type (current_gdbarch)->builtin_unsigned_short)
+#define builtin_type_unsigned_int \
+ (builtin_type (current_gdbarch)->builtin_unsigned_int)
+#define builtin_type_unsigned_long \
+ (builtin_type (current_gdbarch)->builtin_unsigned_long)
+#define builtin_type_float \
+ (builtin_type (current_gdbarch)->builtin_float)
+#define builtin_type_double \
+ (builtin_type (current_gdbarch)->builtin_double)
+#define builtin_type_long_double \
+ (builtin_type (current_gdbarch)->builtin_long_double)
+#define builtin_type_complex \
+ (builtin_type (current_gdbarch)->builtin_complex)
+#define builtin_type_double_complex \
+ (builtin_type (current_gdbarch)->builtin_double_complex)
+#define builtin_type_string \
+ (builtin_type (current_gdbarch)->builtin_string)
+#define builtin_type_bool \
+ (builtin_type (current_gdbarch)->builtin_bool)
+#define builtin_type_long_long \
+ (builtin_type (current_gdbarch)->builtin_long_long)
+#define builtin_type_unsigned_long_long \
+ (builtin_type (current_gdbarch)->builtin_unsigned_long_long)
+
+
/* Explicit sizes - see C9X <intypes.h> for naming scheme. The "int0"
is for when an architecture needs to describe a register that has
no size. */
extern const struct floatformat *floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN];
extern const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN];
+extern const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN];
extern struct type *builtin_type_ieee_single;
extern struct type *builtin_type_ieee_double;
extern struct type *builtin_type_ia64_spill;
extern struct type *builtin_type_ia64_quad;
-/* We use this for the '/c' print format, because builtin_type_char is
- just a one-byte integral type, which languages less laid back than
- C will print as ... well, a one-byte integral type. */
-extern struct type *builtin_type_true_char;
-
/* This type represents a type that was unrecognized in symbol
read-in. */
extern struct type *builtin_type_error;
-extern struct type *builtin_type_long_long;
-extern struct type *builtin_type_unsigned_long_long;
/* Modula-2 types */
-extern struct type *builtin_type_m2_char;
-extern struct type *builtin_type_m2_int;
-extern struct type *builtin_type_m2_card;
-extern struct type *builtin_type_m2_real;
-extern struct type *builtin_type_m2_bool;
+struct builtin_m2_type
+{
+ struct type *builtin_char;
+ struct type *builtin_int;
+ struct type *builtin_card;
+ struct type *builtin_real;
+ struct type *builtin_bool;
+};
+
+/* Return the Modula-2 type table for the specified architecture. */
+extern const struct builtin_m2_type *builtin_m2_type (struct gdbarch *gdbarch);
+
+/* Compatibility macros to access types for the current architecture. */
+#define builtin_type_m2_char \
+ (builtin_m2_type (current_gdbarch)->builtin_char)
+#define builtin_type_m2_int \
+ (builtin_m2_type (current_gdbarch)->builtin_int)
+#define builtin_type_m2_card \
+ (builtin_m2_type (current_gdbarch)->builtin_card)
+#define builtin_type_m2_real \
+ (builtin_m2_type (current_gdbarch)->builtin_real)
+#define builtin_type_m2_bool \
+ (builtin_m2_type (current_gdbarch)->builtin_bool)
+
/* Fortran (F77) types */
-extern struct type *builtin_type_f_character;
-extern struct type *builtin_type_f_integer;
-extern struct type *builtin_type_f_integer_s2;
-extern struct type *builtin_type_f_logical;
-extern struct type *builtin_type_f_logical_s1;
-extern struct type *builtin_type_f_logical_s2;
-extern struct type *builtin_type_f_real;
-extern struct type *builtin_type_f_real_s8;
-extern struct type *builtin_type_f_real_s16;
-extern struct type *builtin_type_f_complex_s8;
-extern struct type *builtin_type_f_complex_s16;
-extern struct type *builtin_type_f_complex_s32;
-extern struct type *builtin_type_f_void;
+struct builtin_f_type
+{
+ struct type *builtin_character;
+ struct type *builtin_integer;
+ struct type *builtin_integer_s2;
+ struct type *builtin_logical;
+ struct type *builtin_logical_s1;
+ struct type *builtin_logical_s2;
+ struct type *builtin_real;
+ struct type *builtin_real_s8;
+ struct type *builtin_real_s16;
+ struct type *builtin_complex_s8;
+ struct type *builtin_complex_s16;
+ struct type *builtin_complex_s32;
+ struct type *builtin_void;
+};
+
+/* Return the Fortran type table for the specified architecture. */
+extern const struct builtin_f_type *builtin_f_type (struct gdbarch *gdbarch);
+
+/* Compatibility macros to access types for the current architecture. */
+#define builtin_type_f_character \
+ (builtin_f_type (current_gdbarch)->builtin_character)
+#define builtin_type_f_integer \
+ (builtin_f_type (current_gdbarch)->builtin_integer)
+#define builtin_type_f_integer_s2 \
+ (builtin_f_type (current_gdbarch)->builtin_integer_s2)
+#define builtin_type_f_logical \
+ (builtin_f_type (current_gdbarch)->builtin_logical)
+#define builtin_type_f_logical_s1 \
+ (builtin_f_type (current_gdbarch)->builtin_logical_s1)
+#define builtin_type_f_logical_s2 \
+ (builtin_f_type (current_gdbarch)->builtin_logical_s2)
+#define builtin_type_f_real \
+ (builtin_f_type (current_gdbarch)->builtin_real)
+#define builtin_type_f_real_s8 \
+ (builtin_f_type (current_gdbarch)->builtin_real_s8)
+#define builtin_type_f_real_s16 \
+ (builtin_f_type (current_gdbarch)->builtin_real_s16)
+#define builtin_type_f_complex_s8 \
+ (builtin_f_type (current_gdbarch)->builtin_complex_s8)
+#define builtin_type_f_complex_s16 \
+ (builtin_f_type (current_gdbarch)->builtin_complex_s16)
+#define builtin_type_f_complex_s32 \
+ (builtin_f_type (current_gdbarch)->builtin_complex_s32)
+#define builtin_type_f_void \
+ (builtin_f_type (current_gdbarch)->builtin_void)
+
/* RTTI for C++ */
/* extern struct type *builtin_type_cxx_typeinfo; */
extern struct type *init_flags_type (char *name, int length);
extern void append_flags_type_flag (struct type *type, int bitpos, char *name);
+extern void make_vector_type (struct type *array_type);
extern struct type *init_vector_type (struct type *elt_type, int n);
extern struct type *lookup_reference_type (struct type *);
extern struct type *lookup_template_type (char *, struct type *,
struct block *);
-extern struct type *lookup_fundamental_type (struct objfile *, int);
-
extern void fill_in_vptr_fieldno (struct type *);
extern int get_destructor_fn_field (struct type *, int *, int *);
extern int is_ancestor (struct type *, struct type *);
-extern int has_vtable (struct type *);
-
-extern struct type *primary_base_class (struct type *);
-
-extern struct type **virtual_base_list (struct type *);
-
-extern int virtual_base_list_length (struct type *);
-extern int virtual_base_list_length_skip_primaries (struct type *);
-
-extern int virtual_base_index (struct type *, struct type *);
-extern int virtual_base_index_skip_primaries (struct type *, struct type *);
-
-
-extern int class_index_in_primary_list (struct type *);
-
-extern int count_virtual_fns (struct type *);
-
-/* Constants for HP/Taligent ANSI C++ runtime model */
-
-/* Where virtual function entries begin in the
- * virtual table, in the non-RRBC vtable format.
- * First 4 are the metavtable pointer, top offset,
- * typeinfo pointer, and dup base info pointer */
-#define HP_ACC_VFUNC_START 4
-
-/* (Negative) Offset where virtual base offset entries begin
- * in the virtual table. Skips over metavtable pointer and
- * the self-offset entry.
- * NOTE: NEGATE THIS BEFORE USING! The virtual base offsets
- * appear before the address point of the vtable (the slot
- * pointed to by the object's vtable pointer), i.e. at lower
- * addresses than the vtable pointer. */
-#define HP_ACC_VBASE_START 2
-
-/* (Positive) Offset where the pointer to the typeinfo
- * object is present in the virtual table */
-#define HP_ACC_TYPEINFO_OFFSET 2
-
-/* (Positive) Offset where the ``top offset'' entry of
- * the virtual table is */
-#define HP_ACC_TOP_OFFSET_OFFSET 1
-
/* Overload resolution */
#define LENGTH_MATCH(bv) ((bv)->rank[0])