gdb:
* xml-tdesc.c (tdesc_end_union): Update. * stabsread.c (define_symbol): Update. (read_type): Update. (read_struct_type): Update. (read_enum_type): Update. * spu-tdep.c (spu_builtin_type_vec128): Update. * sh-tdep.c (sh_push_dummy_call_fpu): Update. (sh_push_dummy_call_nofpu): Update. * mdebugread.c (parse_symbol): Update. (parse_symbol): Update. (parse_symbol): Update. (upgrade_type): Update. * jv-lang.c (java_lookup_class): Update. * iq2000-tdep.c (iq2000_pointer_to_address): Update. * i386-tdep.c (i386_mmx_type): Update. (i386_sse_type): Update. * gdbtypes.h (enum type_flag_value): New enum. (enum type_instance_flag_value): New enum. (TYPE_FLAG_UNSIGNED, TYPE_FLAG_NOSIGN, TYPE_FLAG_STUB, TYPE_FLAG_TARGET_STUB, TYPE_FLAG_STATIC, TYPE_FLAG_PROTOTYPED, TYPE_FLAG_INCOMPLETE, TYPE_FLAG_VARARGS, TYPE_FLAG_VECTOR, TYPE_FLAG_FIXED_INSTANCE, TYPE_FLAG_STUB_SUPPORTED, TYPE_FLAG_NOTTEXT): Now enum constants. (TYPE_FLAG_CONST, TYPE_FLAG_VOLATILE, TYPE_FLAG_CODE_SPACE, TYPE_FLAG_DATA_SPACE, TYPE_FLAG_ADDRESS_CLASS_1, TYPE_FLAG_ADDRESS_CLASS_2): Remove. (TYPE_INSTANCE_FLAG_CONST, TYPE_INSTANCE_FLAG_VOLATILE, TYPE_INSTANCE_FLAG_CODE_SPACE, TYPE_INSTANCE_FLAG_DATA_SPACE, TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1, TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2): New constants. (TYPE_UNSIGNED, TYPE_NOSIGN, TYPE_STUB, TYPE_TARGET_STUB, TYPE_STATIC, TYPE_PROTOTYPED, TYPE_INCOMPLETE, TYPE_VARARGS, TYPE_VECTOR, TYPE_FIXED_INSTANCE, TYPE_STUB_SUPPORTED, TYPE_NOTTEXT): Update. (TYPE_FLAG_ADDRESS_CLASS_ALL): Remove. (TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL): New define. (TYPE_VOLATILE, TYPE_CODE_SPACE, TYPE_DATA_SPACE, TYPE_ADDRESS_CLASS_1, TYPE_ADDRESS_CLASS_2, TYPE_ADDRESS_CLASS_ALL): Update. (struct main_type) <flags>: Remove. <flag_unsigned, flag_nosign, flag_stub, flag_target_stub, flag_static, flag_prototyped, flag_incomplete, flag_varargs, flag_vector, flag_stub_supported, flag_nottext, flag_fixed_instance>: New fields. <nfields, vptr_fieldno>: Move earlier. (TYPE_FLAGS): Remove. * gdbtypes.c (make_pointer_type): Update. (address_space_name_to_int): Update. (address_space_int_to_name): Update. (make_type_with_address_space): Update. (make_cv_type): Update. (create_range_type): Update. (get_discrete_bounds): Update. (create_set_type): Update. (make_vector_type): Update. (smash_to_method_type): Update. (check_typedef): Update. (check_stub_method): Update. (init_type): Individually assign flag fields. (recursive_dump_type): Don't print entire TYPE_FLAGS field. Do print TYPE_FIXED_INSTANCE, TYPE_STUB_SUPPORTED, and TYPE_NOTTEXT. (copy_type_recursive): Copy the entire main type. Don't use TYPE_FLAGS. * features/rs6000/powerpc-altivec64l.c (initialize_tdesc_powerpc_altivec64l): Update. * features/rs6000/powerpc-altivec64.c (initialize_tdesc_powerpc_altivec64): Update. * features/rs6000/powerpc-altivec32l.c (initialize_tdesc_powerpc_altivec32l): Update. * features/rs6000/powerpc-altivec32.c (initialize_tdesc_powerpc_altivec32): Update. * features/rs6000/powerpc-7400.c (initialize_tdesc_powerpc_7400): Update. * features/arm-with-iwmmxt.c (initialize_tdesc_arm_with_iwmmxt): Update. * dwarf2read.c (read_structure_type): Update. (read_enumeration_type): Likewise. (process_enumeration_scope): Likewise. (read_tag_pointer_type): Likewise. (read_subroutine_type): Likewise. (read_subroutine_type): Likewise. (read_base_type): Likewise. * coffread.c (coff_read_enum_type): Update. * ada-valprint.c (adjust_type_signedness): Update. * ada-typeprint.c (print_record_field_types): Update. * ada-lang.c (packed_array_type): Update. (empty_record): Don't reset TYPE_FLAGS. (ada_template_to_fixed_record_type_1): Update. (ada_template_to_fixed_record_type_1): Likewise. (template_to_static_fixed_type): Likewise. (to_record_with_fixed_variant_part): Likewise. (to_fixed_record_type): Likewise. (to_fixed_array_type): Likewise. (to_static_fixed_type): Likewise. gdb/testsuite: * gdb.base/maint.exp: Update "maint print type".
This commit is contained in:
parent
50fbf7fec2
commit
876cecd0ee
@ -1,3 +1,100 @@
|
||||
2008-08-24 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* xml-tdesc.c (tdesc_end_union): Update.
|
||||
* stabsread.c (define_symbol): Update.
|
||||
(read_type): Update.
|
||||
(read_struct_type): Update.
|
||||
(read_enum_type): Update.
|
||||
* spu-tdep.c (spu_builtin_type_vec128): Update.
|
||||
* sh-tdep.c (sh_push_dummy_call_fpu): Update.
|
||||
(sh_push_dummy_call_nofpu): Update.
|
||||
* mdebugread.c (parse_symbol): Update.
|
||||
(parse_symbol): Update.
|
||||
(parse_symbol): Update.
|
||||
(upgrade_type): Update.
|
||||
* jv-lang.c (java_lookup_class): Update.
|
||||
* iq2000-tdep.c (iq2000_pointer_to_address): Update.
|
||||
* i386-tdep.c (i386_mmx_type): Update.
|
||||
(i386_sse_type): Update.
|
||||
* gdbtypes.h (enum type_flag_value): New enum.
|
||||
(enum type_instance_flag_value): New enum.
|
||||
(TYPE_FLAG_UNSIGNED, TYPE_FLAG_NOSIGN, TYPE_FLAG_STUB,
|
||||
TYPE_FLAG_TARGET_STUB, TYPE_FLAG_STATIC, TYPE_FLAG_PROTOTYPED,
|
||||
TYPE_FLAG_INCOMPLETE, TYPE_FLAG_VARARGS, TYPE_FLAG_VECTOR,
|
||||
TYPE_FLAG_FIXED_INSTANCE, TYPE_FLAG_STUB_SUPPORTED,
|
||||
TYPE_FLAG_NOTTEXT): Now enum constants.
|
||||
(TYPE_FLAG_CONST, TYPE_FLAG_VOLATILE, TYPE_FLAG_CODE_SPACE,
|
||||
TYPE_FLAG_DATA_SPACE, TYPE_FLAG_ADDRESS_CLASS_1,
|
||||
TYPE_FLAG_ADDRESS_CLASS_2): Remove.
|
||||
(TYPE_INSTANCE_FLAG_CONST, TYPE_INSTANCE_FLAG_VOLATILE,
|
||||
TYPE_INSTANCE_FLAG_CODE_SPACE, TYPE_INSTANCE_FLAG_DATA_SPACE,
|
||||
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1,
|
||||
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2): New constants.
|
||||
(TYPE_UNSIGNED, TYPE_NOSIGN, TYPE_STUB, TYPE_TARGET_STUB,
|
||||
TYPE_STATIC, TYPE_PROTOTYPED, TYPE_INCOMPLETE, TYPE_VARARGS,
|
||||
TYPE_VECTOR, TYPE_FIXED_INSTANCE, TYPE_STUB_SUPPORTED,
|
||||
TYPE_NOTTEXT): Update.
|
||||
(TYPE_FLAG_ADDRESS_CLASS_ALL): Remove.
|
||||
(TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL): New define.
|
||||
(TYPE_VOLATILE, TYPE_CODE_SPACE, TYPE_DATA_SPACE,
|
||||
TYPE_ADDRESS_CLASS_1, TYPE_ADDRESS_CLASS_2,
|
||||
TYPE_ADDRESS_CLASS_ALL): Update.
|
||||
(struct main_type) <flags>: Remove.
|
||||
<flag_unsigned, flag_nosign, flag_stub, flag_target_stub,
|
||||
flag_static, flag_prototyped, flag_incomplete, flag_varargs,
|
||||
flag_vector, flag_stub_supported, flag_nottext,
|
||||
flag_fixed_instance>: New fields.
|
||||
<nfields, vptr_fieldno>: Move earlier.
|
||||
(TYPE_FLAGS): Remove.
|
||||
* gdbtypes.c (make_pointer_type): Update.
|
||||
(address_space_name_to_int): Update.
|
||||
(address_space_int_to_name): Update.
|
||||
(make_type_with_address_space): Update.
|
||||
(make_cv_type): Update.
|
||||
(create_range_type): Update.
|
||||
(get_discrete_bounds): Update.
|
||||
(create_set_type): Update.
|
||||
(make_vector_type): Update.
|
||||
(smash_to_method_type): Update.
|
||||
(check_typedef): Update.
|
||||
(check_stub_method): Update.
|
||||
(init_type): Individually assign flag fields.
|
||||
(recursive_dump_type): Don't print entire TYPE_FLAGS field. Do
|
||||
print TYPE_FIXED_INSTANCE, TYPE_STUB_SUPPORTED, and TYPE_NOTTEXT.
|
||||
(copy_type_recursive): Copy the entire main type. Don't use
|
||||
TYPE_FLAGS.
|
||||
* features/rs6000/powerpc-altivec64l.c
|
||||
(initialize_tdesc_powerpc_altivec64l): Update.
|
||||
* features/rs6000/powerpc-altivec64.c
|
||||
(initialize_tdesc_powerpc_altivec64): Update.
|
||||
* features/rs6000/powerpc-altivec32l.c
|
||||
(initialize_tdesc_powerpc_altivec32l): Update.
|
||||
* features/rs6000/powerpc-altivec32.c
|
||||
(initialize_tdesc_powerpc_altivec32): Update.
|
||||
* features/rs6000/powerpc-7400.c (initialize_tdesc_powerpc_7400):
|
||||
Update.
|
||||
* features/arm-with-iwmmxt.c (initialize_tdesc_arm_with_iwmmxt):
|
||||
Update.
|
||||
* dwarf2read.c (read_structure_type): Update.
|
||||
(read_enumeration_type): Likewise.
|
||||
(process_enumeration_scope): Likewise.
|
||||
(read_tag_pointer_type): Likewise.
|
||||
(read_subroutine_type): Likewise.
|
||||
(read_subroutine_type): Likewise.
|
||||
(read_base_type): Likewise.
|
||||
* coffread.c (coff_read_enum_type): Update.
|
||||
* ada-valprint.c (adjust_type_signedness): Update.
|
||||
* ada-typeprint.c (print_record_field_types): Update.
|
||||
* ada-lang.c (packed_array_type): Update.
|
||||
(empty_record): Don't reset TYPE_FLAGS.
|
||||
(ada_template_to_fixed_record_type_1): Update.
|
||||
(ada_template_to_fixed_record_type_1): Likewise.
|
||||
(template_to_static_fixed_type): Likewise.
|
||||
(to_record_with_fixed_variant_part): Likewise.
|
||||
(to_fixed_record_type): Likewise.
|
||||
(to_fixed_array_type): Likewise.
|
||||
(to_static_fixed_type): Likewise.
|
||||
|
||||
2008-08-23 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
PR macros/607:
|
||||
|
@ -1829,7 +1829,7 @@ packed_array_type (struct type *type, long *elt_bits)
|
||||
(*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
|
||||
}
|
||||
|
||||
TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (new_type) = 1;
|
||||
return new_type;
|
||||
}
|
||||
|
||||
@ -6902,7 +6902,6 @@ empty_record (struct objfile *objfile)
|
||||
TYPE_FIELDS (type) = NULL;
|
||||
TYPE_NAME (type) = "<empty>";
|
||||
TYPE_TAG_NAME (type) = NULL;
|
||||
TYPE_FLAGS (type) = 0;
|
||||
TYPE_LENGTH (type) = 0;
|
||||
return type;
|
||||
}
|
||||
@ -6962,7 +6961,7 @@ ada_template_to_fixed_record_type_1 (struct type *type,
|
||||
memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
|
||||
TYPE_NAME (rtype) = ada_type_name (type);
|
||||
TYPE_TAG_NAME (rtype) = NULL;
|
||||
TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (rtype) = 1;
|
||||
|
||||
off = 0;
|
||||
bit_len = 0;
|
||||
@ -7142,7 +7141,7 @@ template_to_static_fixed_type (struct type *type0)
|
||||
sizeof (struct field) * nfields);
|
||||
TYPE_NAME (type) = ada_type_name (type0);
|
||||
TYPE_TAG_NAME (type) = NULL;
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (type) = 1;
|
||||
TYPE_LENGTH (type) = 0;
|
||||
}
|
||||
TYPE_FIELD_TYPE (type, f) = new_type;
|
||||
@ -7187,7 +7186,7 @@ to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
|
||||
sizeof (struct field) * nfields);
|
||||
TYPE_NAME (rtype) = ada_type_name (type);
|
||||
TYPE_TAG_NAME (rtype) = NULL;
|
||||
TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (rtype) = 1;
|
||||
TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
|
||||
|
||||
branch_type = to_fixed_variant_branch_type
|
||||
@ -7242,7 +7241,7 @@ to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
|
||||
{
|
||||
struct type *templ_type;
|
||||
|
||||
if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
|
||||
if (TYPE_FIXED_INSTANCE (type0))
|
||||
return type0;
|
||||
|
||||
templ_type = dynamic_template_type (type0);
|
||||
@ -7258,7 +7257,7 @@ to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
|
||||
}
|
||||
else
|
||||
{
|
||||
TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (type0) = 1;
|
||||
return type0;
|
||||
}
|
||||
|
||||
@ -7323,7 +7322,7 @@ to_fixed_array_type (struct type *type0, struct value *dval,
|
||||
struct type *result;
|
||||
|
||||
if (ada_is_packed_array_type (type0) /* revisit? */
|
||||
|| (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
|
||||
|| TYPE_FIXED_INSTANCE (type0))
|
||||
return type0;
|
||||
|
||||
index_type_desc = ada_find_parallel_type (type0, "___XA");
|
||||
@ -7383,7 +7382,7 @@ to_fixed_array_type (struct type *type0, struct value *dval,
|
||||
error (_("array type with dynamic size is larger than varsize-limit"));
|
||||
}
|
||||
|
||||
TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
|
||||
TYPE_FIXED_INSTANCE (result) = 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -7473,7 +7472,7 @@ to_static_fixed_type (struct type *type0)
|
||||
if (type0 == NULL)
|
||||
return NULL;
|
||||
|
||||
if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
|
||||
if (TYPE_FIXED_INSTANCE (type0))
|
||||
return type0;
|
||||
|
||||
type0 = ada_check_typedef (type0);
|
||||
|
@ -585,7 +585,7 @@ print_record_field_types (struct type *type, struct type *outer_type,
|
||||
flds = 0;
|
||||
len = TYPE_NFIELDS (type);
|
||||
|
||||
if (len == 0 && (TYPE_FLAGS (type) & TYPE_FLAG_STUB) != 0)
|
||||
if (len == 0 && TYPE_STUB (type))
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < len; i += 1)
|
||||
|
@ -71,7 +71,7 @@ adjust_type_signedness (struct type *type)
|
||||
{
|
||||
if (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
|
||||
&& TYPE_LOW_BOUND (type) >= 0)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (type) = 1;
|
||||
}
|
||||
|
||||
/* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
|
||||
|
@ -2091,7 +2091,7 @@ coff_read_enum_type (int index, int length, int lastsym,
|
||||
}
|
||||
|
||||
if (unsigned_enum)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (type) = 1;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
@ -4048,9 +4048,9 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
TYPE_LENGTH (type) = 0;
|
||||
}
|
||||
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB_SUPPORTED;
|
||||
TYPE_STUB_SUPPORTED (type) = 1;
|
||||
if (die_is_declaration (die, cu))
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 1;
|
||||
|
||||
/* We need to add the type field to the die immediately so we don't
|
||||
infinitely recurse when dealing with pointers to the structure
|
||||
@ -4240,7 +4240,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
Types. When another package uses such a type, an incomplete DIE
|
||||
may be generated by the compiler. */
|
||||
if (die_is_declaration (die, cu))
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 1;
|
||||
|
||||
return set_die_type (die, type, cu);
|
||||
}
|
||||
@ -4362,7 +4362,7 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
|
||||
xfree (fields);
|
||||
}
|
||||
if (unsigned_enum)
|
||||
TYPE_FLAGS (this_type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (this_type) = 1;
|
||||
}
|
||||
|
||||
new_symbol (die, this_type, cu);
|
||||
@ -4700,7 +4700,8 @@ read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
|
||||
type_flags = gdbarch_address_class_type_flags
|
||||
(gdbarch, byte_size, addr_class);
|
||||
gdb_assert ((type_flags & ~TYPE_FLAG_ADDRESS_CLASS_ALL) == 0);
|
||||
gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
|
||||
== 0);
|
||||
type = make_type_with_address_space (type, type_flags);
|
||||
}
|
||||
else if (TYPE_LENGTH (type) != byte_size)
|
||||
@ -4847,7 +4848,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
|| cu->language == language_cplus
|
||||
|| cu->language == language_java
|
||||
|| cu->language == language_pascal)
|
||||
TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
|
||||
TYPE_PROTOTYPED (ftype) = 1;
|
||||
|
||||
/* Store the calling convention in the type if it's available in
|
||||
the subroutine die. Otherwise set the calling convention to
|
||||
@ -4870,7 +4871,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
if (child_die->tag == DW_TAG_formal_parameter)
|
||||
nparams++;
|
||||
else if (child_die->tag == DW_TAG_unspecified_parameters)
|
||||
TYPE_FLAGS (ftype) |= TYPE_FLAG_VARARGS;
|
||||
TYPE_VARARGS (ftype) = 1;
|
||||
child_die = sibling_die (child_die);
|
||||
}
|
||||
|
||||
@ -5000,7 +5001,7 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
|
||||
TYPE_TARGET_TYPE (type) = target_type;
|
||||
|
||||
if (name && strcmp (name, "char") == 0)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_NOSIGN;
|
||||
TYPE_NOSIGN (type) = 1;
|
||||
|
||||
return set_die_type (die, type, cu);
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ initialize_tdesc_arm_with_iwmmxt (void)
|
||||
append_composite_type_field (type, xstrdup ("u32"), field_type);
|
||||
field_type = tdesc_named_type (feature, "uint64");
|
||||
append_composite_type_field (type, xstrdup ("u64"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "wR0", 26, 1, NULL, 64, "iwmmxt_vec64i");
|
||||
|
@ -170,7 +170,7 @@ initialize_tdesc_powerpc_7400 (void)
|
||||
append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
|
||||
field_type = tdesc_named_type (feature, "v16i8");
|
||||
append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "vr0", 119, 1, NULL, 128, "vec128");
|
||||
|
@ -122,7 +122,7 @@ initialize_tdesc_powerpc_altivec32 (void)
|
||||
append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
|
||||
field_type = tdesc_named_type (feature, "v16i8");
|
||||
append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
|
||||
|
@ -126,7 +126,7 @@ initialize_tdesc_powerpc_altivec32l (void)
|
||||
append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
|
||||
field_type = tdesc_named_type (feature, "v16i8");
|
||||
append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
|
||||
|
@ -122,7 +122,7 @@ initialize_tdesc_powerpc_altivec64 (void)
|
||||
append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
|
||||
field_type = tdesc_named_type (feature, "v16i8");
|
||||
append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
|
||||
|
@ -126,7 +126,7 @@ initialize_tdesc_powerpc_altivec64l (void)
|
||||
append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
|
||||
field_type = tdesc_named_type (feature, "v16i8");
|
||||
append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (type) = 1;
|
||||
tdesc_record_type (feature, type);
|
||||
|
||||
tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
|
||||
|
104
gdb/gdbtypes.c
104
gdb/gdbtypes.c
@ -277,7 +277,7 @@ make_pointer_type (struct type *type, struct type **typeptr)
|
||||
/* Mark pointers as unsigned. The target converts between pointers
|
||||
and addresses (CORE_ADDRs) using gdbarch_pointer_to_address and
|
||||
gdbarch_address_to_pointer. */
|
||||
TYPE_FLAGS (ntype) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (ntype) = 1;
|
||||
|
||||
if (!TYPE_POINTER_TYPE (type)) /* Remember it, if don't have one. */
|
||||
TYPE_POINTER_TYPE (type) = ntype;
|
||||
@ -429,9 +429,9 @@ address_space_name_to_int (char *space_identifier)
|
||||
int type_flags;
|
||||
/* Check for known address space delimiters. */
|
||||
if (!strcmp (space_identifier, "code"))
|
||||
return TYPE_FLAG_CODE_SPACE;
|
||||
return TYPE_INSTANCE_FLAG_CODE_SPACE;
|
||||
else if (!strcmp (space_identifier, "data"))
|
||||
return TYPE_FLAG_DATA_SPACE;
|
||||
return TYPE_INSTANCE_FLAG_DATA_SPACE;
|
||||
else if (gdbarch_address_class_name_to_type_flags_p (gdbarch)
|
||||
&& gdbarch_address_class_name_to_type_flags (gdbarch,
|
||||
space_identifier,
|
||||
@ -448,11 +448,11 @@ const char *
|
||||
address_space_int_to_name (int space_flag)
|
||||
{
|
||||
struct gdbarch *gdbarch = current_gdbarch;
|
||||
if (space_flag & TYPE_FLAG_CODE_SPACE)
|
||||
if (space_flag & TYPE_INSTANCE_FLAG_CODE_SPACE)
|
||||
return "code";
|
||||
else if (space_flag & TYPE_FLAG_DATA_SPACE)
|
||||
else if (space_flag & TYPE_INSTANCE_FLAG_DATA_SPACE)
|
||||
return "data";
|
||||
else if ((space_flag & TYPE_FLAG_ADDRESS_CLASS_ALL)
|
||||
else if ((space_flag & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
|
||||
&& gdbarch_address_class_type_flags_to_name_p (gdbarch))
|
||||
return gdbarch_address_class_type_flags_to_name (gdbarch, space_flag);
|
||||
else
|
||||
@ -525,8 +525,9 @@ make_type_with_address_space (struct type *type, int space_flag)
|
||||
{
|
||||
struct type *ntype;
|
||||
int new_flags = ((TYPE_INSTANCE_FLAGS (type)
|
||||
& ~(TYPE_FLAG_CODE_SPACE | TYPE_FLAG_DATA_SPACE
|
||||
| TYPE_FLAG_ADDRESS_CLASS_ALL))
|
||||
& ~(TYPE_INSTANCE_FLAG_CODE_SPACE
|
||||
| TYPE_INSTANCE_FLAG_DATA_SPACE
|
||||
| TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
|
||||
| space_flag);
|
||||
|
||||
return make_qualified_type (type, new_flags, NULL);
|
||||
@ -553,13 +554,13 @@ make_cv_type (int cnst, int voltl,
|
||||
struct objfile *objfile;
|
||||
|
||||
int new_flags = (TYPE_INSTANCE_FLAGS (type)
|
||||
& ~(TYPE_FLAG_CONST | TYPE_FLAG_VOLATILE));
|
||||
& ~(TYPE_INSTANCE_FLAG_CONST | TYPE_INSTANCE_FLAG_VOLATILE));
|
||||
|
||||
if (cnst)
|
||||
new_flags |= TYPE_FLAG_CONST;
|
||||
new_flags |= TYPE_INSTANCE_FLAG_CONST;
|
||||
|
||||
if (voltl)
|
||||
new_flags |= TYPE_FLAG_VOLATILE;
|
||||
new_flags |= TYPE_INSTANCE_FLAG_VOLATILE;
|
||||
|
||||
if (typeptr && *typeptr != NULL)
|
||||
{
|
||||
@ -699,7 +700,7 @@ create_range_type (struct type *result_type, struct type *index_type,
|
||||
TYPE_CODE (result_type) = TYPE_CODE_RANGE;
|
||||
TYPE_TARGET_TYPE (result_type) = index_type;
|
||||
if (TYPE_STUB (index_type))
|
||||
TYPE_FLAGS (result_type) |= TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (result_type) = 1;
|
||||
else
|
||||
TYPE_LENGTH (result_type) = TYPE_LENGTH (check_typedef (index_type));
|
||||
TYPE_NFIELDS (result_type) = 2;
|
||||
@ -710,7 +711,7 @@ create_range_type (struct type *result_type, struct type *index_type,
|
||||
TYPE_FIELD_BITPOS (result_type, 1) = high_bound;
|
||||
|
||||
if (low_bound >= 0)
|
||||
TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (result_type) = 1;
|
||||
|
||||
return (result_type);
|
||||
}
|
||||
@ -748,7 +749,7 @@ get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
|
||||
/* Set unsigned indicator if warranted. */
|
||||
if (*lowp >= 0)
|
||||
{
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (type) = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -828,7 +829,7 @@ create_array_type (struct type *result_type,
|
||||
|
||||
/* TYPE_FLAG_TARGET_STUB will take care of zero length arrays */
|
||||
if (TYPE_LENGTH (result_type) == 0)
|
||||
TYPE_FLAGS (result_type) |= TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (result_type) = 1;
|
||||
|
||||
return (result_type);
|
||||
}
|
||||
@ -882,7 +883,7 @@ create_set_type (struct type *result_type, struct type *domain_type)
|
||||
TYPE_LENGTH (result_type)
|
||||
= (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
|
||||
if (low_bound >= 0)
|
||||
TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (result_type) = 1;
|
||||
}
|
||||
TYPE_FIELD_TYPE (result_type, 0) = domain_type;
|
||||
|
||||
@ -947,7 +948,7 @@ make_vector_type (struct type *array_type)
|
||||
TYPE_TARGET_TYPE (inner_array) = elt_type;
|
||||
}
|
||||
|
||||
TYPE_FLAGS (array_type) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (array_type) = 1;
|
||||
}
|
||||
|
||||
struct type *
|
||||
@ -1015,7 +1016,7 @@ smash_to_method_type (struct type *type, struct type *domain,
|
||||
TYPE_FIELDS (type) = args;
|
||||
TYPE_NFIELDS (type) = nargs;
|
||||
if (varargs)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_VARARGS;
|
||||
TYPE_VARARGS (type) = 1;
|
||||
TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
|
||||
TYPE_CODE (type) = TYPE_CODE_METHOD;
|
||||
}
|
||||
@ -1526,12 +1527,12 @@ check_typedef (struct type *type)
|
||||
nb_elements = high_bound - low_bound + 1;
|
||||
|
||||
TYPE_LENGTH (type) = nb_elements * TYPE_LENGTH (target_type);
|
||||
TYPE_FLAGS (type) &= ~TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (type) = 0;
|
||||
}
|
||||
else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
|
||||
{
|
||||
TYPE_LENGTH (type) = TYPE_LENGTH (target_type);
|
||||
TYPE_FLAGS (type) &= ~TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (type) = 0;
|
||||
}
|
||||
}
|
||||
/* Cache TYPE_LENGTH for future use. */
|
||||
@ -1675,10 +1676,10 @@ check_stub_method (struct type *type, int method_id, int signature_id)
|
||||
TYPE_DOMAIN_TYPE (mtype) = type;
|
||||
TYPE_FIELDS (mtype) = argtypes;
|
||||
TYPE_NFIELDS (mtype) = argcount;
|
||||
TYPE_FLAGS (mtype) &= ~TYPE_FLAG_STUB;
|
||||
TYPE_STUB (mtype) = 0;
|
||||
TYPE_FN_FIELD_STUB (f, signature_id) = 0;
|
||||
if (p[-2] == '.')
|
||||
TYPE_FLAGS (mtype) |= TYPE_FLAG_VARARGS;
|
||||
TYPE_VARARGS (mtype) = 1;
|
||||
|
||||
xfree (demangled_name);
|
||||
}
|
||||
@ -1760,7 +1761,33 @@ init_type (enum type_code code, int length, int flags,
|
||||
type = alloc_type (objfile);
|
||||
TYPE_CODE (type) = code;
|
||||
TYPE_LENGTH (type) = length;
|
||||
TYPE_FLAGS (type) |= flags;
|
||||
|
||||
gdb_assert (!(flags & (TYPE_FLAG_MIN - 1)));
|
||||
if (flags & TYPE_FLAG_UNSIGNED)
|
||||
TYPE_UNSIGNED (type) = 1;
|
||||
if (flags & TYPE_FLAG_NOSIGN)
|
||||
TYPE_NOSIGN (type) = 1;
|
||||
if (flags & TYPE_FLAG_STUB)
|
||||
TYPE_STUB (type) = 1;
|
||||
if (flags & TYPE_FLAG_TARGET_STUB)
|
||||
TYPE_TARGET_STUB (type) = 1;
|
||||
if (flags & TYPE_FLAG_STATIC)
|
||||
TYPE_STATIC (type) = 1;
|
||||
if (flags & TYPE_FLAG_PROTOTYPED)
|
||||
TYPE_PROTOTYPED (type) = 1;
|
||||
if (flags & TYPE_FLAG_INCOMPLETE)
|
||||
TYPE_INCOMPLETE (type) = 1;
|
||||
if (flags & TYPE_FLAG_VARARGS)
|
||||
TYPE_VARARGS (type) = 1;
|
||||
if (flags & TYPE_FLAG_VECTOR)
|
||||
TYPE_VECTOR (type) = 1;
|
||||
if (flags & TYPE_FLAG_STUB_SUPPORTED)
|
||||
TYPE_STUB_SUPPORTED (type) = 1;
|
||||
if (flags & TYPE_FLAG_NOTTEXT)
|
||||
TYPE_NOTTEXT (type) = 1;
|
||||
if (flags & TYPE_FLAG_FIXED_INSTANCE)
|
||||
TYPE_FIXED_INSTANCE (type) = 1;
|
||||
|
||||
if ((name != NULL) && (objfile != NULL))
|
||||
{
|
||||
TYPE_NAME (type) = obsavestring (name, strlen (name),
|
||||
@ -1774,7 +1801,7 @@ init_type (enum type_code code, int length, int flags,
|
||||
/* C++ fancies. */
|
||||
|
||||
if (name && strcmp (name, "char") == 0)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_NOSIGN;
|
||||
TYPE_NOSIGN (type) = 1;
|
||||
|
||||
if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
|
||||
|| code == TYPE_CODE_NAMESPACE)
|
||||
@ -2739,7 +2766,8 @@ recursive_dump_type (struct type *type, int spaces)
|
||||
puts_filtered (" TYPE_FLAG_ADDRESS_CLASS_2");
|
||||
}
|
||||
puts_filtered ("\n");
|
||||
printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
|
||||
|
||||
printfi_filtered (spaces, "flags");
|
||||
if (TYPE_UNSIGNED (type))
|
||||
{
|
||||
puts_filtered (" TYPE_FLAG_UNSIGNED");
|
||||
@ -2779,6 +2807,18 @@ recursive_dump_type (struct type *type, int spaces)
|
||||
{
|
||||
puts_filtered (" TYPE_FLAG_VECTOR");
|
||||
}
|
||||
if (TYPE_FIXED_INSTANCE (type))
|
||||
{
|
||||
puts_filtered (" TYPE_FIXED_INSTANCE");
|
||||
}
|
||||
if (TYPE_STUB_SUPPORTED (type))
|
||||
{
|
||||
puts_filtered (" TYPE_STUB_SUPPORTED");
|
||||
}
|
||||
if (TYPE_NOTTEXT (type))
|
||||
{
|
||||
puts_filtered (" TYPE_NOTTEXT");
|
||||
}
|
||||
puts_filtered ("\n");
|
||||
printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type));
|
||||
gdb_print_host_address (TYPE_FIELDS (type), gdb_stdout);
|
||||
@ -2933,24 +2973,20 @@ copy_type_recursive (struct objfile *objfile,
|
||||
stored->new = new_type;
|
||||
*slot = stored;
|
||||
|
||||
/* Copy the common fields of types. */
|
||||
TYPE_CODE (new_type) = TYPE_CODE (type);
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE (new_type) =
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE (type);
|
||||
TYPE_ARRAY_LOWER_BOUND_TYPE (new_type) =
|
||||
TYPE_ARRAY_LOWER_BOUND_TYPE (type);
|
||||
/* Copy the common fields of types. For the main type, we simply
|
||||
copy the entire thing and then update specific fields as needed. */
|
||||
*TYPE_MAIN_TYPE (new_type) = *TYPE_MAIN_TYPE (type);
|
||||
TYPE_OBJFILE (new_type) = NULL;
|
||||
|
||||
if (TYPE_NAME (type))
|
||||
TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type));
|
||||
if (TYPE_TAG_NAME (type))
|
||||
TYPE_TAG_NAME (new_type) = xstrdup (TYPE_TAG_NAME (type));
|
||||
TYPE_FLAGS (new_type) = TYPE_FLAGS (type);
|
||||
TYPE_VPTR_FIELDNO (new_type) = TYPE_VPTR_FIELDNO (type);
|
||||
|
||||
TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
|
||||
TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
|
||||
|
||||
/* Copy the fields. */
|
||||
TYPE_NFIELDS (new_type) = TYPE_NFIELDS (type);
|
||||
if (TYPE_NFIELDS (type))
|
||||
{
|
||||
int i, nfields;
|
||||
|
231
gdb/gdbtypes.h
231
gdb/gdbtypes.h
@ -144,27 +144,61 @@ enum type_code
|
||||
|
||||
#define TYPE_CODE_CLASS TYPE_CODE_STRUCT
|
||||
|
||||
/* Some bits for the type's flags word, and macros to test them. */
|
||||
/* Some constants representing each bit field in the main_type. See
|
||||
the bit-field-specific macros, below, for documentation of each
|
||||
constant in this enum. These enum values are only used with
|
||||
init_type. Note that the values are chosen not to conflict with
|
||||
type_instance_flag_value; this lets init_type error-check its
|
||||
input. */
|
||||
|
||||
enum type_flag_value
|
||||
{
|
||||
TYPE_FLAG_UNSIGNED = (1 << 6),
|
||||
TYPE_FLAG_NOSIGN = (1 << 7),
|
||||
TYPE_FLAG_STUB = (1 << 8),
|
||||
TYPE_FLAG_TARGET_STUB = (1 << 9),
|
||||
TYPE_FLAG_STATIC = (1 << 10),
|
||||
TYPE_FLAG_PROTOTYPED = (1 << 11),
|
||||
TYPE_FLAG_INCOMPLETE = (1 << 12),
|
||||
TYPE_FLAG_VARARGS = (1 << 13),
|
||||
TYPE_FLAG_VECTOR = (1 << 14),
|
||||
TYPE_FLAG_FIXED_INSTANCE = (1 << 15),
|
||||
TYPE_FLAG_STUB_SUPPORTED = (1 << 16),
|
||||
TYPE_FLAG_NOTTEXT = (1 << 17),
|
||||
|
||||
/* Used for error-checking. */
|
||||
TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED
|
||||
};
|
||||
|
||||
/* Some bits for the type's instance_flags word. See the macros below
|
||||
for documentation on each bit. Note that if you add a value here,
|
||||
you must update the enum type_flag_value as well. */
|
||||
enum type_instance_flag_value
|
||||
{
|
||||
TYPE_INSTANCE_FLAG_CONST = (1 << 0),
|
||||
TYPE_INSTANCE_FLAG_VOLATILE = (1 << 1),
|
||||
TYPE_INSTANCE_FLAG_CODE_SPACE = (1 << 2),
|
||||
TYPE_INSTANCE_FLAG_DATA_SPACE = (1 << 3),
|
||||
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 = (1 << 4),
|
||||
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2 = (1 << 5)
|
||||
};
|
||||
|
||||
/* Unsigned integer type. If this is not set for a TYPE_CODE_INT, the
|
||||
type is signed (unless TYPE_FLAG_NOSIGN (below) is set). */
|
||||
|
||||
#define TYPE_FLAG_UNSIGNED (1 << 0)
|
||||
#define TYPE_UNSIGNED(t) (TYPE_FLAGS (t) & TYPE_FLAG_UNSIGNED)
|
||||
#define TYPE_UNSIGNED(t) (TYPE_MAIN_TYPE (t)->flag_unsigned)
|
||||
|
||||
/* No sign for this type. In C++, "char", "signed char", and "unsigned
|
||||
char" are distinct types; so we need an extra flag to indicate the
|
||||
absence of a sign! */
|
||||
|
||||
#define TYPE_FLAG_NOSIGN (1 << 1)
|
||||
#define TYPE_NOSIGN(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOSIGN)
|
||||
#define TYPE_NOSIGN(t) (TYPE_MAIN_TYPE (t)->flag_nosign)
|
||||
|
||||
/* This appears in a type's flags word if it is a stub type (e.g., if
|
||||
someone referenced a type that wasn't defined in a source file
|
||||
via (struct sir_not_appearing_in_this_film *)). */
|
||||
|
||||
#define TYPE_FLAG_STUB (1 << 2)
|
||||
#define TYPE_STUB(t) (TYPE_FLAGS (t) & TYPE_FLAG_STUB)
|
||||
#define TYPE_STUB(t) (TYPE_MAIN_TYPE (t)->flag_stub)
|
||||
|
||||
/* The target type of this type is a stub type, and this type needs to
|
||||
be updated if it gets un-stubbed in check_typedef.
|
||||
@ -172,8 +206,7 @@ enum type_code
|
||||
gets set based on the TYPE_LENGTH of the target type.
|
||||
Also, set for TYPE_CODE_TYPEDEF. */
|
||||
|
||||
#define TYPE_FLAG_TARGET_STUB (1 << 3)
|
||||
#define TYPE_TARGET_STUB(t) (TYPE_FLAGS (t) & TYPE_FLAG_TARGET_STUB)
|
||||
#define TYPE_TARGET_STUB(t) (TYPE_MAIN_TYPE (t)->flag_target_stub)
|
||||
|
||||
/* Static type. If this is set, the corresponding type had
|
||||
* a static modifier.
|
||||
@ -181,30 +214,13 @@ enum type_code
|
||||
* are indicated by other means (bitpos == -1)
|
||||
*/
|
||||
|
||||
#define TYPE_FLAG_STATIC (1 << 4)
|
||||
#define TYPE_STATIC(t) (TYPE_FLAGS (t) & TYPE_FLAG_STATIC)
|
||||
|
||||
/* Constant type. If this is set, the corresponding type has a
|
||||
* const modifier.
|
||||
*/
|
||||
|
||||
#define TYPE_FLAG_CONST (1 << 5)
|
||||
#define TYPE_CONST(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_CONST)
|
||||
|
||||
/* Volatile type. If this is set, the corresponding type has a
|
||||
* volatile modifier.
|
||||
*/
|
||||
|
||||
#define TYPE_FLAG_VOLATILE (1 << 6)
|
||||
#define TYPE_VOLATILE(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_VOLATILE)
|
||||
|
||||
#define TYPE_STATIC(t) (TYPE_MAIN_TYPE (t)->flag_static)
|
||||
|
||||
/* This is a function type which appears to have a prototype. We need this
|
||||
for function calls in order to tell us if it's necessary to coerce the args,
|
||||
or to just do the standard conversions. This is used with a short field. */
|
||||
|
||||
#define TYPE_FLAG_PROTOTYPED (1 << 7)
|
||||
#define TYPE_PROTOTYPED(t) (TYPE_FLAGS (t) & TYPE_FLAG_PROTOTYPED)
|
||||
#define TYPE_PROTOTYPED(t) (TYPE_MAIN_TYPE (t)->flag_prototyped)
|
||||
|
||||
/* This flag is used to indicate that processing for this type
|
||||
is incomplete.
|
||||
@ -214,8 +230,52 @@ enum type_code
|
||||
info; the incomplete type has to be marked so that the class and
|
||||
the method can be assigned correct types.) */
|
||||
|
||||
#define TYPE_FLAG_INCOMPLETE (1 << 8)
|
||||
#define TYPE_INCOMPLETE(t) (TYPE_FLAGS (t) & TYPE_FLAG_INCOMPLETE)
|
||||
#define TYPE_INCOMPLETE(t) (TYPE_MAIN_TYPE (t)->flag_incomplete)
|
||||
|
||||
/* FIXME drow/2002-06-03: Only used for methods, but applies as well
|
||||
to functions. */
|
||||
|
||||
#define TYPE_VARARGS(t) (TYPE_MAIN_TYPE (t)->flag_varargs)
|
||||
|
||||
/* Identify a vector type. Gcc is handling this by adding an extra
|
||||
attribute to the array type. We slurp that in as a new flag of a
|
||||
type. This is used only in dwarf2read.c. */
|
||||
#define TYPE_VECTOR(t) (TYPE_MAIN_TYPE (t)->flag_vector)
|
||||
|
||||
/* 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_FIXED_INSTANCE(t) (TYPE_MAIN_TYPE (t)->flag_fixed_instance)
|
||||
|
||||
/* This debug target supports TYPE_STUB(t). In the unsupported case we have to
|
||||
rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE ().
|
||||
TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only guessed
|
||||
the TYPE_STUB(t) value (see dwarfread.c). */
|
||||
|
||||
#define TYPE_STUB_SUPPORTED(t) (TYPE_MAIN_TYPE (t)->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_NOTTEXT(t) (TYPE_MAIN_TYPE (t)->flag_nottext)
|
||||
|
||||
/* Constant type. If this is set, the corresponding type has a
|
||||
* const modifier.
|
||||
*/
|
||||
|
||||
#define TYPE_CONST(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_CONST)
|
||||
|
||||
/* Volatile type. If this is set, the corresponding type has a
|
||||
* volatile modifier.
|
||||
*/
|
||||
|
||||
#define TYPE_VOLATILE(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_VOLATILE)
|
||||
|
||||
/* Instruction-space delimited type. This is for Harvard architectures
|
||||
which have separate instruction and data address spaces (and perhaps
|
||||
@ -236,64 +296,26 @@ enum type_code
|
||||
If neither flag is set, the default space for functions / methods
|
||||
is instruction space, and for data objects is data memory. */
|
||||
|
||||
#define TYPE_FLAG_CODE_SPACE (1 << 9)
|
||||
#define TYPE_CODE_SPACE(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_CODE_SPACE)
|
||||
#define TYPE_CODE_SPACE(t) \
|
||||
(TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_CODE_SPACE)
|
||||
|
||||
#define TYPE_FLAG_DATA_SPACE (1 << 10)
|
||||
#define TYPE_DATA_SPACE(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_DATA_SPACE)
|
||||
|
||||
/* FIXME drow/2002-06-03: Only used for methods, but applies as well
|
||||
to functions. */
|
||||
|
||||
#define TYPE_FLAG_VARARGS (1 << 11)
|
||||
#define TYPE_VARARGS(t) (TYPE_FLAGS (t) & TYPE_FLAG_VARARGS)
|
||||
|
||||
/* Identify a vector type. Gcc is handling this by adding an extra
|
||||
attribute to the array type. We slurp that in as a new flag of a
|
||||
type. This is used only in dwarf2read.c. */
|
||||
#define TYPE_FLAG_VECTOR (1 << 12)
|
||||
#define TYPE_VECTOR(t) (TYPE_FLAGS (t) & TYPE_FLAG_VECTOR)
|
||||
#define TYPE_DATA_SPACE(t) \
|
||||
(TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_DATA_SPACE)
|
||||
|
||||
/* Address class flags. Some environments provide for pointers whose
|
||||
size is different from that of a normal pointer or address types
|
||||
where the bits are interpreted differently than normal addresses. The
|
||||
TYPE_FLAG_ADDRESS_CLASS_n flags may be used in target specific
|
||||
ways to represent these different types of address classes. */
|
||||
#define TYPE_FLAG_ADDRESS_CLASS_1 (1 << 13)
|
||||
#define TYPE_ADDRESS_CLASS_1(t) (TYPE_INSTANCE_FLAGS(t) \
|
||||
& TYPE_FLAG_ADDRESS_CLASS_1)
|
||||
#define TYPE_FLAG_ADDRESS_CLASS_2 (1 << 14)
|
||||
& TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
|
||||
#define TYPE_ADDRESS_CLASS_2(t) (TYPE_INSTANCE_FLAGS(t) \
|
||||
& TYPE_FLAG_ADDRESS_CLASS_2)
|
||||
#define TYPE_FLAG_ADDRESS_CLASS_ALL (TYPE_FLAG_ADDRESS_CLASS_1 \
|
||||
| TYPE_FLAG_ADDRESS_CLASS_2)
|
||||
& TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
|
||||
#define TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL \
|
||||
(TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
|
||||
#define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \
|
||||
& TYPE_FLAG_ADDRESS_CLASS_ALL)
|
||||
& TYPE_INSTANCE_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)
|
||||
|
||||
/* This debug target supports TYPE_STUB(t). In the unsupported case we have to
|
||||
rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE ().
|
||||
TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only guessed
|
||||
the TYPE_STUB(t) value (see dwarfread.c). */
|
||||
|
||||
#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
|
||||
@ -321,6 +343,41 @@ struct main_type
|
||||
ENUM_BITFIELD(array_bound_type) upper_bound_type : 4;
|
||||
ENUM_BITFIELD(array_bound_type) lower_bound_type : 4;
|
||||
|
||||
/* Flags about this type. These fields appear at this location
|
||||
because they packs nicely here. See the TYPE_* macros for
|
||||
documentation about these fields. */
|
||||
|
||||
unsigned int flag_unsigned : 1;
|
||||
unsigned int flag_nosign : 1;
|
||||
unsigned int flag_stub : 1;
|
||||
unsigned int flag_target_stub : 1;
|
||||
unsigned int flag_static : 1;
|
||||
unsigned int flag_prototyped : 1;
|
||||
unsigned int flag_incomplete : 1;
|
||||
unsigned int flag_varargs : 1;
|
||||
unsigned int flag_vector : 1;
|
||||
unsigned int flag_stub_supported : 1;
|
||||
unsigned int flag_nottext : 1;
|
||||
unsigned int flag_fixed_instance : 1;
|
||||
|
||||
/* Number of fields described for this type. This field appears at
|
||||
this location because it packs nicely here. */
|
||||
|
||||
short nfields;
|
||||
|
||||
/* Field number of the virtual function table pointer in
|
||||
VPTR_BASETYPE. If -1, we were unable to find the virtual
|
||||
function table pointer in initial symbol reading, and
|
||||
get_vptr_fieldno should be called to find it if possible.
|
||||
get_vptr_fieldno will update this field if possible.
|
||||
Otherwise the value is left at -1.
|
||||
|
||||
Unused if this type does not have virtual functions.
|
||||
|
||||
This field appears at this location because it packs nicely here. */
|
||||
|
||||
short vptr_fieldno;
|
||||
|
||||
/* Name of this type, or NULL if none.
|
||||
|
||||
This is used for printing only, except by poorly designed C++ code.
|
||||
@ -364,25 +421,6 @@ struct main_type
|
||||
|
||||
struct type *target_type;
|
||||
|
||||
/* Flags about this type. */
|
||||
|
||||
int flags;
|
||||
|
||||
/* Number of fields described for this type */
|
||||
|
||||
short nfields;
|
||||
|
||||
/* Field number of the virtual function table pointer in
|
||||
VPTR_BASETYPE. If -1, we were unable to find the virtual
|
||||
function table pointer in initial symbol reading, and
|
||||
get_vptr_fieldno should be called to find it if possible.
|
||||
get_vptr_fieldno will update this field if possible.
|
||||
Otherwise the value is left at -1.
|
||||
|
||||
Unused if this type does not have virtual functions. */
|
||||
|
||||
short vptr_fieldno;
|
||||
|
||||
/* For structure and union types, a description of each field.
|
||||
For set and pascal array types, there is one "field",
|
||||
whose type is the domain type of the set or array.
|
||||
@ -766,7 +804,6 @@ extern void allocate_cplus_struct_type (struct type *);
|
||||
calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe. */
|
||||
#define TYPE_LENGTH(thistype) (thistype)->length
|
||||
#define TYPE_OBJFILE(thistype) TYPE_MAIN_TYPE(thistype)->objfile
|
||||
#define TYPE_FLAGS(thistype) TYPE_MAIN_TYPE(thistype)->flags
|
||||
/* Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real
|
||||
type, you need to do TYPE_CODE (check_type (this_type)). */
|
||||
#define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code
|
||||
|
@ -2038,7 +2038,7 @@ i386_mmx_type (struct gdbarch *gdbarch)
|
||||
append_composite_type_field (t, "v8_int8",
|
||||
init_vector_type (builtin_type_int8, 8));
|
||||
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (t) = 1;
|
||||
TYPE_NAME (t) = "builtin_type_vec64i";
|
||||
tdep->i386_mmx_type = t;
|
||||
}
|
||||
@ -2084,7 +2084,7 @@ i386_sse_type (struct gdbarch *gdbarch)
|
||||
init_vector_type (builtin_type_int64, 2));
|
||||
append_composite_type_field (t, "uint128", builtin_type_int128);
|
||||
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (t) = 1;
|
||||
TYPE_NAME (t) = "builtin_type_vec128i";
|
||||
tdep->i386_sse_type = t;
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ iq2000_pointer_to_address (struct type * type, const gdb_byte * buf)
|
||||
|
||||
if (target == TYPE_CODE_FUNC
|
||||
|| target == TYPE_CODE_METHOD
|
||||
|| (TYPE_FLAGS (TYPE_TARGET_TYPE (type)) & TYPE_FLAG_CODE_SPACE) != 0)
|
||||
|| TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
|
||||
addr = insn_addr_from_ptr (addr);
|
||||
|
||||
return addr;
|
||||
|
@ -189,7 +189,7 @@ java_lookup_class (char *name)
|
||||
TYPE_CODE (type) = TYPE_CODE_STRUCT;
|
||||
INIT_CPLUS_SPECIFIC (type);
|
||||
TYPE_TAG_NAME (type) = obsavestring (name, strlen (name), &objfile->objfile_obstack);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 1;
|
||||
TYPE ? = addr;
|
||||
return type;
|
||||
#else
|
||||
|
@ -789,7 +789,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
|
||||
/* All functions in C++ have prototypes. For C we don't have enough
|
||||
information in the debug info. */
|
||||
if (SYMBOL_LANGUAGE (s) == language_cplus)
|
||||
TYPE_FLAGS (SYMBOL_TYPE (s)) |= TYPE_FLAG_PROTOTYPED;
|
||||
TYPE_PROTOTYPED (SYMBOL_TYPE (s)) = 1;
|
||||
|
||||
/* Create and enter a new lexical context */
|
||||
b = new_block (FUNCTION_BLOCK);
|
||||
@ -1080,7 +1080,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
|
||||
f++;
|
||||
}
|
||||
if (unsigned_enum)
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (t) = 1;
|
||||
}
|
||||
/* make this the current type */
|
||||
top_stack->cur_type = t;
|
||||
@ -1094,7 +1094,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
|
||||
do not create a symbol for it either. */
|
||||
if (TYPE_NFIELDS (t) == 0)
|
||||
{
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
|
||||
TYPE_STUB (t) = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1781,7 +1781,7 @@ upgrade_type (int fd, struct type **tpp, int tq, union aux_ext *ax, int bigend,
|
||||
problem. */
|
||||
if (TYPE_LENGTH (*tpp) == 0)
|
||||
{
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (t) = 1;
|
||||
}
|
||||
|
||||
*tpp = t;
|
||||
|
@ -2087,7 +2087,7 @@ rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
|
||||
append_composite_type_field (t, "v8_int8",
|
||||
init_vector_type (builtin_type_int8, 8));
|
||||
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (t) = 1;
|
||||
TYPE_NAME (t) = "ppc_builtin_type_vec64";
|
||||
tdep->ppc_builtin_type_vec64 = t;
|
||||
}
|
||||
|
@ -1080,7 +1080,7 @@ sh_push_dummy_call_fpu (struct gdbarch *gdbarch,
|
||||
non-vararg argument to be on the stack, no matter how many
|
||||
registers have been used so far. */
|
||||
if (sh_is_renesas_calling_convention (func_type)
|
||||
&& (TYPE_FLAGS (func_type) & TYPE_FLAG_VARARGS))
|
||||
&& TYPE_VARARGS (func_type))
|
||||
last_reg_arg = TYPE_NFIELDS (func_type) - 2;
|
||||
|
||||
/* first force sp to a 4-byte alignment */
|
||||
@ -1217,7 +1217,7 @@ sh_push_dummy_call_nofpu (struct gdbarch *gdbarch,
|
||||
non-vararg argument to be on the stack, no matter how many
|
||||
registers have been used so far. */
|
||||
if (sh_is_renesas_calling_convention (func_type)
|
||||
&& (TYPE_FLAGS (func_type) & TYPE_FLAG_VARARGS))
|
||||
&& TYPE_VARARGS (func_type))
|
||||
last_reg_arg = TYPE_NFIELDS (func_type) - 2;
|
||||
|
||||
/* first force sp to a 4-byte alignment */
|
||||
|
@ -78,7 +78,7 @@ spu_builtin_type_vec128 (struct gdbarch *gdbarch)
|
||||
append_composite_type_field (t, "v4_float",
|
||||
init_vector_type (builtin_type_float, 4));
|
||||
|
||||
TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (t) = 1;
|
||||
TYPE_NAME (t) = "spu_builtin_type_vec128";
|
||||
|
||||
tdep->spu_builtin_type_vec128 = t;
|
||||
|
@ -826,7 +826,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
|
||||
than the "declared-as" type for unprototyped functions, so
|
||||
we treat all functions as if they were prototyped. This is used
|
||||
primarily for promotion when calling the function from GDB. */
|
||||
TYPE_FLAGS (SYMBOL_TYPE (sym)) |= TYPE_FLAG_PROTOTYPED;
|
||||
TYPE_PROTOTYPED (SYMBOL_TYPE (sym)) = 1;
|
||||
|
||||
/* fall into process_prototype_types */
|
||||
|
||||
@ -872,7 +872,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
|
||||
TYPE_FIELD_ARTIFICIAL (ftype, nparams++) = 0;
|
||||
}
|
||||
TYPE_NFIELDS (ftype) = nparams;
|
||||
TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
|
||||
TYPE_PROTOTYPED (ftype) = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1564,7 +1564,7 @@ again:
|
||||
TYPE_CODE (type) = code;
|
||||
TYPE_TAG_NAME (type) = type_name;
|
||||
INIT_CPLUS_SPECIFIC (type);
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 1;
|
||||
|
||||
add_undefined_type (type, typenums);
|
||||
return type;
|
||||
@ -1630,7 +1630,7 @@ again:
|
||||
}
|
||||
else
|
||||
{
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB;
|
||||
TYPE_TARGET_STUB (type) = 1;
|
||||
TYPE_TARGET_TYPE (type) = xtype;
|
||||
}
|
||||
}
|
||||
@ -1725,7 +1725,7 @@ again:
|
||||
TYPE_FIELD_TYPE (func_type, i) = t->type;
|
||||
}
|
||||
TYPE_NFIELDS (func_type) = num_args;
|
||||
TYPE_FLAGS (func_type) |= TYPE_FLAG_PROTOTYPED;
|
||||
TYPE_PROTOTYPED (func_type) = 1;
|
||||
|
||||
type = func_type;
|
||||
break;
|
||||
@ -3338,7 +3338,7 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
|
||||
|
||||
INIT_CPLUS_SPECIFIC (type);
|
||||
TYPE_CODE (type) = type_code;
|
||||
TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 0;
|
||||
|
||||
/* First comes the total size in bytes. */
|
||||
|
||||
@ -3512,9 +3512,9 @@ read_enum_type (char **pp, struct type *type,
|
||||
|
||||
TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
|
||||
TYPE_CODE (type) = TYPE_CODE_ENUM;
|
||||
TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
|
||||
TYPE_STUB (type) = 0;
|
||||
if (unsigned_enum)
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
|
||||
TYPE_UNSIGNED (type) = 1;
|
||||
TYPE_NFIELDS (type) = nsyms;
|
||||
TYPE_FIELDS (type) = (struct field *)
|
||||
TYPE_ALLOC (type, sizeof (struct field) * nsyms);
|
||||
|
@ -1,3 +1,7 @@
|
||||
2008-08-24 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.base/maint.exp: Update "maint print type".
|
||||
|
||||
2008-08-21 Vladimir Prus <vladimir@codesourcery.com>
|
||||
|
||||
* gdb.mi/mi-nonstop.exp: Fix the check for non-stop
|
||||
|
@ -401,7 +401,7 @@ gdb_expect {
|
||||
|
||||
send_gdb "maint print type argc\n"
|
||||
gdb_expect {
|
||||
-re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nupper_bound_type $hex \\(BOUND_SIMPLE\\)\r\nlower_bound_type $hex \\(BOUND_SIMPLE\\)\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags $hex\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
||||
-re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nupper_bound_type $hex \\(BOUND_SIMPLE\\)\r\nlower_bound_type $hex \\(BOUND_SIMPLE\\)\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
||||
{ pass "maint print type" }
|
||||
-re ".*$gdb_prompt $" { fail "maint print type" }
|
||||
timeout { fail "(timeout) maint print type" }
|
||||
|
@ -222,7 +222,7 @@ tdesc_end_union (struct gdb_xml_parser *parser,
|
||||
for (i = 0; i < TYPE_NFIELDS (data->current_union); i++)
|
||||
if (TYPE_VECTOR (TYPE_FIELD_TYPE (data->current_union, i)))
|
||||
{
|
||||
TYPE_FLAGS (data->current_union) |= TYPE_FLAG_VECTOR;
|
||||
TYPE_VECTOR (data->current_union) = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user