static void c_type_print_modifier (struct type *type, struct ui_file *stream, int need_pre_space, int need_post_space) { int did_print_modifier = 0; const char *address_space_id; /* We don't print `const' qualifiers for references --- since all operators affect the thing referenced, not the reference itself, every reference is `const'. */ if (TYPE_CONST (type) && TYPE_CODE (type) != TYPE_CODE_REF) { if (need_pre_space) fprintf_filtered (stream, " "); fprintf_filtered (stream, "const"); did_print_modifier = 1; } if (TYPE_VOLATILE (type)) { if (did_print_modifier || need_pre_space) fprintf_filtered (stream, " "); fprintf_filtered (stream, "volatile"); did_print_modifier = 1; } if (TYPE_RESTRICT (type)) { if (did_print_modifier || need_pre_space) fprintf_filtered (stream, " "); fprintf_filtered (stream, "restrict"); did_print_modifier = 1; } if (TYPE_ATOMIC (type)) { if (did_print_modifier || need_pre_space) fprintf_filtered (stream, " "); fprintf_filtered (stream, "_Atomic"); did_print_modifier = 1; } address_space_id = address_space_int_to_name (get_type_arch (type), TYPE_INSTANCE_FLAGS (type)); if (address_space_id) { if (did_print_modifier || need_pre_space) fprintf_filtered (stream, " "); fprintf_filtered (stream, "@%s", address_space_id); did_print_modifier = 1; } if (did_print_modifier && need_post_space) fprintf_filtered (stream, " "); }
static void * build_d_types (struct gdbarch *gdbarch) { struct builtin_d_type *builtin_d_type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type); /* Basic types. */ builtin_d_type->builtin_void = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"); builtin_d_type->builtin_bool = arch_boolean_type (gdbarch, 8, 1, "bool"); builtin_d_type->builtin_byte = arch_integer_type (gdbarch, 8, 0, "byte"); builtin_d_type->builtin_ubyte = arch_integer_type (gdbarch, 8, 1, "ubyte"); builtin_d_type->builtin_short = arch_integer_type (gdbarch, 16, 0, "short"); builtin_d_type->builtin_ushort = arch_integer_type (gdbarch, 16, 1, "ushort"); builtin_d_type->builtin_int = arch_integer_type (gdbarch, 32, 0, "int"); builtin_d_type->builtin_uint = arch_integer_type (gdbarch, 32, 1, "uint"); builtin_d_type->builtin_long = arch_integer_type (gdbarch, 64, 0, "long"); builtin_d_type->builtin_ulong = arch_integer_type (gdbarch, 64, 1, "ulong"); builtin_d_type->builtin_cent = arch_integer_type (gdbarch, 128, 0, "cent"); builtin_d_type->builtin_ucent = arch_integer_type (gdbarch, 128, 1, "ucent"); builtin_d_type->builtin_float = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "float", NULL); builtin_d_type->builtin_double = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), "double", NULL); builtin_d_type->builtin_real = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), "real", NULL); TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte) |= TYPE_INSTANCE_FLAG_NOTTEXT; TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte) |= TYPE_INSTANCE_FLAG_NOTTEXT; /* Imaginary and complex types. */ builtin_d_type->builtin_ifloat = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "ifloat", NULL); builtin_d_type->builtin_idouble = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), "idouble", NULL); builtin_d_type->builtin_ireal = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), "ireal", NULL); builtin_d_type->builtin_cfloat = arch_complex_type (gdbarch, "cfloat", builtin_d_type->builtin_float); builtin_d_type->builtin_cdouble = arch_complex_type (gdbarch, "cdouble", builtin_d_type->builtin_double); builtin_d_type->builtin_creal = arch_complex_type (gdbarch, "creal", builtin_d_type->builtin_real); /* Character types. */ builtin_d_type->builtin_char = arch_character_type (gdbarch, 8, 1, "char"); builtin_d_type->builtin_wchar = arch_character_type (gdbarch, 16, 1, "wchar"); builtin_d_type->builtin_dchar = arch_character_type (gdbarch, 32, 1, "dchar"); return builtin_d_type; }
static struct gdbarch * ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { struct gdbarch *gdbarch; struct gdbarch_tdep *tdep; struct type *void_type; struct type *func_void_type; /* If there is already a candidate, use it. */ arches = gdbarch_list_lookup_by_info (arches, &info); if (arches != NULL) return arches->gdbarch; /* Allocate space for the new architecture. */ tdep = XNEW (struct gdbarch_tdep); gdbarch = gdbarch_alloc (&info, tdep); /* Create a type for PC. We can't use builtin types here, as they may not be defined. */ void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"); func_void_type = make_function_type (void_type, NULL); tdep->pc_type = arch_type (gdbarch, TYPE_CODE_PTR, 4, NULL); TYPE_TARGET_TYPE (tdep->pc_type) = func_void_type; TYPE_UNSIGNED (tdep->pc_type) = 1; TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1; set_gdbarch_read_pc (gdbarch, ft32_read_pc); set_gdbarch_write_pc (gdbarch, ft32_write_pc); set_gdbarch_unwind_sp (gdbarch, ft32_unwind_sp); set_gdbarch_num_regs (gdbarch, FT32_NUM_REGS); set_gdbarch_sp_regnum (gdbarch, FT32_SP_REGNUM); set_gdbarch_pc_regnum (gdbarch, FT32_PC_REGNUM); set_gdbarch_register_name (gdbarch, ft32_register_name); set_gdbarch_register_type (gdbarch, ft32_register_type); set_gdbarch_return_value (gdbarch, ft32_return_value); set_gdbarch_pointer_to_address (gdbarch, ft32_pointer_to_address); set_gdbarch_skip_prologue (gdbarch, ft32_skip_prologue); set_gdbarch_inner_than (gdbarch, core_addr_lessthan); set_gdbarch_breakpoint_from_pc (gdbarch, ft32_breakpoint_from_pc); set_gdbarch_frame_align (gdbarch, ft32_frame_align); frame_base_set_default (gdbarch, &ft32_frame_base); /* Methods for saving / extracting a dummy frame's ID. The ID's stack address must match the SP value returned by PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */ set_gdbarch_dummy_id (gdbarch, ft32_dummy_id); set_gdbarch_unwind_pc (gdbarch, ft32_unwind_pc); set_gdbarch_print_insn (gdbarch, print_insn_ft32); /* Hook in ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch); /* Hook in the default unwinders. */ frame_unwind_append_unwinder (gdbarch, &ft32_frame_unwind); /* Support simple overlay manager. */ set_gdbarch_overlay_update (gdbarch, simple_overlay_update); set_gdbarch_address_class_type_flags (gdbarch, ft32_address_class_type_flags); set_gdbarch_address_class_name_to_type_flags (gdbarch, ft32_address_class_name_to_type_flags); set_gdbarch_address_class_type_flags_to_name (gdbarch, ft32_address_class_type_flags_to_name); return gdbarch; }