/* FIXME! Assumes the machine has only one representation for pointers! */
TYPE_LENGTH (ntype) = gdbarch_ptr_bit (type->arch ()) / TARGET_CHAR_BIT;
+ ntype->set_tagged (gdbarch_ptr_bit (type->arch ())
+ == gdbarch_capability_bit (type->arch ()));
ntype->set_code (TYPE_CODE_PTR);
/* Mark pointers as unsigned. The target converts between pointers
while (chain != ntype)
{
TYPE_LENGTH (chain) = TYPE_LENGTH (ntype);
+ chain->set_tagged (ntype->is_tagged ());
chain = TYPE_CHAIN (chain);
}
NULL);
TYPE_LENGTH (ntype) = gdbarch_capability_bit (type->arch ()) / TARGET_CHAR_BIT;
+ ntype->set_tagged (true);
return ntype;
}
t = init_type (objfile, TYPE_CODE_CAPABILITY, bit, name);
t->set_is_unsigned (unsigned_p);
+ t->set_tagged (true);
return t;
}
{
puts_filtered (" TYPE_CONTAINS_CAPABILITY");
}
+ if (type->is_tagged ())
+ {
+ puts_filtered (" TYPE_TAGGED");
+ }
if (type->is_stub ())
{
puts_filtered (" TYPE_STUB");
builtin_type->builtin_intcap_t
= arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 0,
"__intcap_t");
+ builtin_type->builtin_intcap_t->set_tagged (true);
builtin_type->builtin_uintcap_t
= arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 1,
"__uintcap_t");
+ builtin_type->builtin_uintcap_t->set_tagged (true);
/* Capability pointer types. */
builtin_type->builtin_data_capability
builtin_type->builtin_data_capability->set_instance_flags
(builtin_type->builtin_data_capability->instance_flags ()
| TYPE_INSTANCE_FLAG_CAPABILITY);
+ builtin_type->builtin_data_capability->set_tagged (true);
builtin_type->builtin_code_capability
= arch_pointer_type (gdbarch, gdbarch_capability_bit (gdbarch), "",
builtin_type->builtin_code_capability->set_instance_flags
(builtin_type->builtin_code_capability->instance_flags ()
| TYPE_INSTANCE_FLAG_CAPABILITY);
+ builtin_type->builtin_code_capability->set_tagged (true);
/* This type represents a GDB internal function. */
builtin_type->internal_fn
unsigned int m_flag_objfile_owned : 1;
unsigned int m_flag_endianity_not_default : 1;
unsigned int m_flag_contains_capability : 1;
+ unsigned int m_flag_tagged : 1;
/* * True if this type was declared with "class" rather than
"struct". */
const gdb_mpq &fixed_point_scaling_factor ();
+ /* Indicates whether this type is tagged. */
+ bool is_tagged () const
+ {
+ return this->main_type->m_flag_tagged;
+ }
+
+ void set_tagged (bool tagged)
+ {
+ this->main_type->m_flag_tagged = tagged;
+ }
+
/* Indicates whether this type contains a capability. */
bool contains_capability () const