X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbarch.c;h=ce837e9430124a8bff3a5e45195b5f67442e85db;hb=8b2dbe47f314187de7089f4ffeb26c100b7d4c3e;hp=09bc8fab1a87e2543367da61ab806351e4c5b456;hpb=50248794620c15613c8d5639c0894afa16e728dc;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 09bc8fab1a..ce837e9430 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -62,25 +62,19 @@ #include "floatformat.h" #include "gdb_assert.h" +#include "gdb_string.h" #include "gdb-events.h" /* Static function declarations */ static void verify_gdbarch (struct gdbarch *gdbarch); static void alloc_gdbarch_data (struct gdbarch *); -static void init_gdbarch_data (struct gdbarch *); static void free_gdbarch_data (struct gdbarch *); static void init_gdbarch_swap (struct gdbarch *); +static void clear_gdbarch_swap (struct gdbarch *); static void swapout_gdbarch_swap (struct gdbarch *); static void swapin_gdbarch_swap (struct gdbarch *); -/* Convenience macro for allocting typesafe memory. */ - -#ifndef XMALLOC -#define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE)) -#endif - - /* Non-zero if we want to trace architecture code. */ #ifndef GDBARCH_DEBUG @@ -93,6 +87,8 @@ int gdbarch_debug = GDBARCH_DEBUG; struct gdbarch { + /* Has this architecture been fully initialized? */ + int initialized_p; /* basic architectural information */ const struct bfd_arch_info * bfd_arch_info; int byte_order; @@ -148,20 +144,19 @@ struct gdbarch gdbarch_read_pc_ftype *read_pc; gdbarch_write_pc_ftype *write_pc; gdbarch_read_fp_ftype *read_fp; - gdbarch_write_fp_ftype *write_fp; gdbarch_read_sp_ftype *read_sp; gdbarch_write_sp_ftype *write_sp; gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer; - gdbarch_register_read_ftype *register_read; - gdbarch_register_write_ftype *register_write; + gdbarch_pseudo_register_read_ftype *pseudo_register_read; + gdbarch_pseudo_register_write_ftype *pseudo_register_write; int num_regs; int num_pseudo_regs; int sp_regnum; int fp_regnum; int pc_regnum; + int ps_regnum; int fp0_regnum; int npc_regnum; - int nnpc_regnum; gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum; gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum; gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum; @@ -177,11 +172,14 @@ struct gdbarch int max_register_virtual_size; gdbarch_register_virtual_type_ftype *register_virtual_type; gdbarch_do_registers_info_ftype *do_registers_info; + gdbarch_print_registers_info_ftype *print_registers_info; gdbarch_print_float_info_ftype *print_float_info; + gdbarch_print_vector_info_ftype *print_vector_info; gdbarch_register_sim_regno_ftype *register_sim_regno; gdbarch_register_bytes_ok_ftype *register_bytes_ok; gdbarch_cannot_fetch_register_ftype *cannot_fetch_register; gdbarch_cannot_store_register_ftype *cannot_store_register; + gdbarch_get_longjmp_target_ftype *get_longjmp_target; int use_generic_dummy_frames; int call_dummy_location; gdbarch_call_dummy_address_ftype *call_dummy_address; @@ -205,20 +203,24 @@ struct gdbarch gdbarch_register_convertible_ftype *register_convertible; gdbarch_register_convert_to_virtual_ftype *register_convert_to_virtual; gdbarch_register_convert_to_raw_ftype *register_convert_to_raw; - gdbarch_fetch_pseudo_register_ftype *fetch_pseudo_register; - gdbarch_store_pseudo_register_ftype *store_pseudo_register; + gdbarch_convert_register_p_ftype *convert_register_p; + gdbarch_register_to_value_ftype *register_to_value; + gdbarch_value_to_register_ftype *value_to_register; gdbarch_pointer_to_address_ftype *pointer_to_address; gdbarch_address_to_pointer_ftype *address_to_pointer; gdbarch_integer_to_address_ftype *integer_to_address; gdbarch_return_value_on_stack_ftype *return_value_on_stack; - gdbarch_extract_return_value_ftype *extract_return_value; gdbarch_push_arguments_ftype *push_arguments; gdbarch_push_dummy_frame_ftype *push_dummy_frame; gdbarch_push_return_address_ftype *push_return_address; gdbarch_pop_frame_ftype *pop_frame; gdbarch_store_struct_return_ftype *store_struct_return; + gdbarch_extract_return_value_ftype *extract_return_value; gdbarch_store_return_value_ftype *store_return_value; + gdbarch_deprecated_extract_return_value_ftype *deprecated_extract_return_value; + gdbarch_deprecated_store_return_value_ftype *deprecated_store_return_value; gdbarch_extract_struct_value_address_ftype *extract_struct_value_address; + gdbarch_deprecated_extract_struct_value_address_ftype *deprecated_extract_struct_value_address; gdbarch_use_struct_convention_ftype *use_struct_convention; gdbarch_frame_init_saved_regs_ftype *frame_init_saved_regs; gdbarch_init_extra_frame_info_ftype *init_extra_frame_info; @@ -242,6 +244,7 @@ struct gdbarch gdbarch_saved_pc_after_call_ftype *saved_pc_after_call; gdbarch_frame_num_args_ftype *frame_num_args; gdbarch_stack_align_ftype *stack_align; + gdbarch_frame_align_ftype *frame_align; int extra_stack_alignment_needed; gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr; gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos; @@ -256,11 +259,21 @@ struct gdbarch gdbarch_print_insn_ftype *print_insn; gdbarch_skip_trampoline_code_ftype *skip_trampoline_code; gdbarch_in_solib_call_trampoline_ftype *in_solib_call_trampoline; + gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline; + gdbarch_pc_in_sigtramp_ftype *pc_in_sigtramp; + gdbarch_sigtramp_start_ftype *sigtramp_start; + gdbarch_sigtramp_end_ftype *sigtramp_end; gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p; gdbarch_construct_inferior_arguments_ftype *construct_inferior_arguments; gdbarch_dwarf2_build_frame_info_ftype *dwarf2_build_frame_info; gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special; gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special; + const char * name_of_malloc; + int cannot_step_breakpoint; + int have_nonsteppable_watchpoint; + gdbarch_address_class_type_flags_ftype *address_class_type_flags; + gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name; + gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags; }; @@ -271,6 +284,7 @@ extern const struct bfd_arch_info bfd_default_arch_struct; struct gdbarch startup_gdbarch = { + 1, /* Always initialized. */ /* basic architecture information */ &bfd_default_arch_struct, BFD_ENDIAN_BIG, @@ -300,6 +314,11 @@ struct gdbarch startup_gdbarch = 0, 0, 0, + -1, + -1, + -1, + -1, + 0, 0, 0, 0, @@ -309,6 +328,15 @@ struct gdbarch startup_gdbarch = 0, 0, 0, + generic_register_byte, + generic_register_size, + 0, + generic_register_size, + 0, + 0, + 0, + default_print_registers_info, + 0, 0, 0, 0, @@ -316,9 +344,7 @@ struct gdbarch startup_gdbarch = 0, 0, 0, - generic_register_raw_size, 0, - generic_register_virtual_size, 0, 0, 0, @@ -346,7 +372,6 @@ struct gdbarch startup_gdbarch = 0, 0, 0, - generic_get_saved_register, 0, 0, 0, @@ -406,6 +431,12 @@ struct gdbarch startup_gdbarch = 0, 0, 0, + "malloc", + 0, + 0, + 0, + 0, + 0, /* startup_gdbarch() */ }; @@ -414,10 +445,13 @@ struct gdbarch *current_gdbarch = &startup_gdbarch; /* Do any initialization needed for a non-multiarch configuration after the _initialize_MODULE functions have been run. */ void -initialize_non_multiarch () +initialize_non_multiarch (void) { alloc_gdbarch_data (&startup_gdbarch); - init_gdbarch_data (&startup_gdbarch); + /* Ensure that all swap areas are zeroed so that they again think + they are starting from scratch. */ + clear_gdbarch_swap (&startup_gdbarch); + init_gdbarch_swap (&startup_gdbarch); } @@ -451,14 +485,13 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->long_long_bit = 2*TARGET_LONG_BIT; current_gdbarch->float_bit = 4*TARGET_CHAR_BIT; current_gdbarch->double_bit = 8*TARGET_CHAR_BIT; - current_gdbarch->long_double_bit = 2*TARGET_DOUBLE_BIT; + current_gdbarch->long_double_bit = 8*TARGET_CHAR_BIT; current_gdbarch->ptr_bit = TARGET_INT_BIT; current_gdbarch->bfd_vma_bit = TARGET_ARCHITECTURE->bits_per_address; current_gdbarch->char_signed = -1; current_gdbarch->read_pc = generic_target_read_pc; current_gdbarch->write_pc = generic_target_write_pc; current_gdbarch->read_fp = generic_target_read_fp; - current_gdbarch->write_fp = generic_target_write_fp; current_gdbarch->read_sp = generic_target_read_sp; current_gdbarch->write_sp = generic_target_write_sp; current_gdbarch->virtual_frame_pointer = legacy_virtual_frame_pointer; @@ -466,9 +499,9 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->sp_regnum = -1; current_gdbarch->fp_regnum = -1; current_gdbarch->pc_regnum = -1; + current_gdbarch->ps_regnum = -1; current_gdbarch->fp0_regnum = -1; current_gdbarch->npc_regnum = -1; - current_gdbarch->nnpc_regnum = -1; current_gdbarch->stab_reg_to_regnum = no_op_reg_to_regnum; current_gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum; current_gdbarch->dwarf_reg_to_regnum = no_op_reg_to_regnum; @@ -477,11 +510,13 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->register_name = legacy_register_name; current_gdbarch->register_size = -1; current_gdbarch->register_bytes = -1; + current_gdbarch->register_byte = generic_register_byte; + current_gdbarch->register_raw_size = generic_register_size; current_gdbarch->max_register_raw_size = -1; + current_gdbarch->register_virtual_size = generic_register_size; current_gdbarch->max_register_virtual_size = -1; - current_gdbarch->do_registers_info = do_registers_info; - current_gdbarch->print_float_info = default_print_float_info; - current_gdbarch->register_sim_regno = default_register_sim_regno; + current_gdbarch->print_registers_info = default_print_registers_info; + current_gdbarch->register_sim_regno = legacy_register_sim_regno; current_gdbarch->cannot_fetch_register = cannot_register_not; current_gdbarch->cannot_store_register = cannot_register_not; current_gdbarch->use_generic_dummy_frames = -1; @@ -496,11 +531,17 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->init_frame_pc_first = init_frame_pc_noop; current_gdbarch->init_frame_pc = init_frame_pc_default; current_gdbarch->coerce_float_to_double = default_coerce_float_to_double; + current_gdbarch->get_saved_register = generic_unwind_get_saved_register; current_gdbarch->register_convertible = generic_register_convertible_not; + current_gdbarch->convert_register_p = legacy_convert_register_p; + current_gdbarch->register_to_value = legacy_register_to_value; + current_gdbarch->value_to_register = legacy_value_to_register; current_gdbarch->pointer_to_address = unsigned_pointer_to_address; current_gdbarch->address_to_pointer = unsigned_address_to_pointer; current_gdbarch->return_value_on_stack = generic_return_value_on_stack_not; current_gdbarch->push_arguments = default_push_arguments; + current_gdbarch->extract_return_value = legacy_extract_return_value; + current_gdbarch->store_return_value = legacy_store_return_value; current_gdbarch->use_struct_convention = generic_use_struct_convention; current_gdbarch->prologue_frameless_p = generic_prologue_frameless_p; current_gdbarch->breakpoint_from_pc = legacy_breakpoint_from_pc; @@ -512,6 +553,7 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address; current_gdbarch->frame_args_skip = -1; current_gdbarch->frameless_function_invocation = generic_frameless_function_invocation_not; + current_gdbarch->frame_chain_valid = generic_func_frame_chain_valid; current_gdbarch->extra_stack_alignment_needed = 1; current_gdbarch->convert_from_func_ptr_addr = core_addr_identity; current_gdbarch->addr_bits_remove = core_addr_identity; @@ -519,10 +561,13 @@ gdbarch_alloc (const struct gdbarch_info *info, current_gdbarch->print_insn = legacy_print_insn; current_gdbarch->skip_trampoline_code = generic_skip_trampoline_code; current_gdbarch->in_solib_call_trampoline = generic_in_solib_call_trampoline; + current_gdbarch->in_solib_return_trampoline = generic_in_solib_return_trampoline; + current_gdbarch->pc_in_sigtramp = legacy_pc_in_sigtramp; current_gdbarch->in_function_epilogue_p = generic_in_function_epilogue_p; current_gdbarch->construct_inferior_arguments = construct_inferior_arguments; current_gdbarch->elf_make_msymbol_special = default_elf_make_msymbol_special; current_gdbarch->coff_make_msymbol_special = default_coff_make_msymbol_special; + current_gdbarch->name_of_malloc = "malloc"; /* gdbarch_alloc() */ return current_gdbarch; @@ -580,28 +625,21 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of read_pc, invalid_p == 0 */ /* Skip verify of write_pc, invalid_p == 0 */ /* Skip verify of read_fp, invalid_p == 0 */ - /* Skip verify of write_fp, invalid_p == 0 */ /* Skip verify of read_sp, invalid_p == 0 */ /* Skip verify of write_sp, invalid_p == 0 */ /* Skip verify of virtual_frame_pointer, invalid_p == 0 */ - /* Skip verify of register_read, has predicate */ - /* Skip verify of register_write, has predicate */ + /* Skip verify of pseudo_register_read, has predicate */ + /* Skip verify of pseudo_register_write, has predicate */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->num_regs == -1)) fprintf_unfiltered (log, "\n\tnum_regs"); /* Skip verify of num_pseudo_regs, invalid_p == 0 */ - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->sp_regnum == -1)) - fprintf_unfiltered (log, "\n\tsp_regnum"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->fp_regnum == -1)) - fprintf_unfiltered (log, "\n\tfp_regnum"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->pc_regnum == -1)) - fprintf_unfiltered (log, "\n\tpc_regnum"); + /* Skip verify of sp_regnum, invalid_p == 0 */ + /* Skip verify of fp_regnum, invalid_p == 0 */ + /* Skip verify of pc_regnum, invalid_p == 0 */ + /* Skip verify of ps_regnum, invalid_p == 0 */ /* Skip verify of fp0_regnum, invalid_p == 0 */ /* Skip verify of npc_regnum, invalid_p == 0 */ - /* Skip verify of nnpc_regnum, invalid_p == 0 */ /* Skip verify of stab_reg_to_regnum, invalid_p == 0 */ /* Skip verify of ecoff_reg_to_regnum, invalid_p == 0 */ /* Skip verify of dwarf_reg_to_regnum, invalid_p == 0 */ @@ -614,30 +652,27 @@ verify_gdbarch (struct gdbarch *gdbarch) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->register_bytes == -1)) fprintf_unfiltered (log, "\n\tregister_bytes"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->register_byte == 0)) - fprintf_unfiltered (log, "\n\tregister_byte"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->register_raw_size == 0)) - fprintf_unfiltered (log, "\n\tregister_raw_size"); + /* Skip verify of register_byte, invalid_p == 0 */ + /* Skip verify of register_raw_size, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->max_register_raw_size == -1)) fprintf_unfiltered (log, "\n\tmax_register_raw_size"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->register_virtual_size == 0)) - fprintf_unfiltered (log, "\n\tregister_virtual_size"); + /* Skip verify of register_virtual_size, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->max_register_virtual_size == -1)) fprintf_unfiltered (log, "\n\tmax_register_virtual_size"); if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->register_virtual_type == 0)) fprintf_unfiltered (log, "\n\tregister_virtual_type"); - /* Skip verify of do_registers_info, invalid_p == 0 */ - /* Skip verify of print_float_info, invalid_p == 0 */ + /* Skip verify of do_registers_info, has predicate */ + /* Skip verify of print_registers_info, invalid_p == 0 */ + /* Skip verify of print_float_info, has predicate */ + /* Skip verify of print_vector_info, has predicate */ /* Skip verify of register_sim_regno, invalid_p == 0 */ /* Skip verify of register_bytes_ok, has predicate */ /* Skip verify of cannot_fetch_register, invalid_p == 0 */ /* Skip verify of cannot_store_register, invalid_p == 0 */ + /* Skip verify of get_longjmp_target, has predicate */ if ((GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && (gdbarch->use_generic_dummy_frames == -1)) fprintf_unfiltered (log, "\n\tuse_generic_dummy_frames"); @@ -679,21 +714,17 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of init_frame_pc_first, invalid_p == 0 */ /* Skip verify of init_frame_pc, invalid_p == 0 */ /* Skip verify of coerce_float_to_double, invalid_p == 0 */ - if ((GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->get_saved_register == 0)) - fprintf_unfiltered (log, "\n\tget_saved_register"); + /* Skip verify of get_saved_register, invalid_p == 0 */ /* Skip verify of register_convertible, invalid_p == 0 */ /* Skip verify of register_convert_to_virtual, invalid_p == 0 */ /* Skip verify of register_convert_to_raw, invalid_p == 0 */ - /* Skip verify of fetch_pseudo_register, has predicate */ - /* Skip verify of store_pseudo_register, has predicate */ + /* Skip verify of convert_register_p, invalid_p == 0 */ + /* Skip verify of register_to_value, invalid_p == 0 */ + /* Skip verify of value_to_register, invalid_p == 0 */ /* Skip verify of pointer_to_address, invalid_p == 0 */ /* Skip verify of address_to_pointer, invalid_p == 0 */ /* Skip verify of integer_to_address, has predicate */ /* Skip verify of return_value_on_stack, invalid_p == 0 */ - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->extract_return_value == 0)) - fprintf_unfiltered (log, "\n\textract_return_value"); /* Skip verify of push_arguments, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->push_dummy_frame == 0)) @@ -705,10 +736,10 @@ verify_gdbarch (struct gdbarch *gdbarch) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->store_struct_return == 0)) fprintf_unfiltered (log, "\n\tstore_struct_return"); - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->store_return_value == 0)) - fprintf_unfiltered (log, "\n\tstore_return_value"); + /* Skip verify of extract_return_value, invalid_p == 0 */ + /* Skip verify of store_return_value, invalid_p == 0 */ /* Skip verify of extract_struct_value_address, has predicate */ + /* Skip verify of deprecated_extract_struct_value_address, has predicate */ /* Skip verify of use_struct_convention, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->frame_init_saved_regs == 0)) @@ -739,9 +770,7 @@ verify_gdbarch (struct gdbarch *gdbarch) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->frame_chain == 0)) fprintf_unfiltered (log, "\n\tframe_chain"); - if ((GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) - && (gdbarch->frame_chain_valid == 0)) - fprintf_unfiltered (log, "\n\tframe_chain_valid"); + /* Skip verify of frame_chain_valid, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->frame_saved_pc == 0)) fprintf_unfiltered (log, "\n\tframe_saved_pc"); @@ -758,6 +787,7 @@ verify_gdbarch (struct gdbarch *gdbarch) && (gdbarch->frame_num_args == 0)) fprintf_unfiltered (log, "\n\tframe_num_args"); /* Skip verify of stack_align, has predicate */ + /* Skip verify of frame_align, has predicate */ /* Skip verify of extra_stack_alignment_needed, invalid_p == 0 */ /* Skip verify of reg_struct_has_addr, has predicate */ /* Skip verify of save_dummy_frame_tos, has predicate */ @@ -774,11 +804,21 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of print_insn, invalid_p == 0 */ /* Skip verify of skip_trampoline_code, invalid_p == 0 */ /* Skip verify of in_solib_call_trampoline, invalid_p == 0 */ + /* Skip verify of in_solib_return_trampoline, invalid_p == 0 */ + /* Skip verify of pc_in_sigtramp, invalid_p == 0 */ + /* Skip verify of sigtramp_start, has predicate */ + /* Skip verify of sigtramp_end, has predicate */ /* Skip verify of in_function_epilogue_p, invalid_p == 0 */ /* Skip verify of construct_inferior_arguments, invalid_p == 0 */ /* Skip verify of dwarf2_build_frame_info, has predicate */ /* Skip verify of elf_make_msymbol_special, invalid_p == 0 */ /* Skip verify of coff_make_msymbol_special, invalid_p == 0 */ + /* Skip verify of name_of_malloc, invalid_p == 0 */ + /* Skip verify of cannot_step_breakpoint, invalid_p == 0 */ + /* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0 */ + /* Skip verify of address_class_type_flags, has predicate */ + /* Skip verify of address_class_type_flags_to_name, has predicate */ + /* Skip verify of address_class_name_to_type_flags, has predicate */ buf = ui_file_xstrdup (log, &dummy); make_cleanup (xfree, buf); if (strlen (buf) > 0) @@ -803,18 +843,55 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: GDB_MULTI_ARCH = %d\n", GDB_MULTI_ARCH); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: frame_align = 0x%08lx\n", + (long) current_gdbarch->frame_align); if (GDB_MULTI_ARCH) fprintf_unfiltered (file, "gdbarch_dump: in_function_epilogue_p = 0x%08lx\n", (long) current_gdbarch->in_function_epilogue_p); if (GDB_MULTI_ARCH) fprintf_unfiltered (file, - "gdbarch_dump: register_read = 0x%08lx\n", - (long) current_gdbarch->register_read); + "gdbarch_dump: pseudo_register_read = 0x%08lx\n", + (long) current_gdbarch->pseudo_register_read); if (GDB_MULTI_ARCH) fprintf_unfiltered (file, - "gdbarch_dump: register_write = 0x%08lx\n", - (long) current_gdbarch->register_write); + "gdbarch_dump: pseudo_register_write = 0x%08lx\n", + (long) current_gdbarch->pseudo_register_write); +#ifdef ADDRESS_CLASS_NAME_TO_TYPE_FLAGS + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "ADDRESS_CLASS_NAME_TO_TYPE_FLAGS(name, type_flags_ptr)", + XSTRING (ADDRESS_CLASS_NAME_TO_TYPE_FLAGS (name, type_flags_ptr))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: ADDRESS_CLASS_NAME_TO_TYPE_FLAGS = 0x%08lx\n", + (long) current_gdbarch->address_class_name_to_type_flags + /*ADDRESS_CLASS_NAME_TO_TYPE_FLAGS ()*/); +#endif +#ifdef ADDRESS_CLASS_TYPE_FLAGS + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "ADDRESS_CLASS_TYPE_FLAGS(byte_size, dwarf2_addr_class)", + XSTRING (ADDRESS_CLASS_TYPE_FLAGS (byte_size, dwarf2_addr_class))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: ADDRESS_CLASS_TYPE_FLAGS = 0x%08lx\n", + (long) current_gdbarch->address_class_type_flags + /*ADDRESS_CLASS_TYPE_FLAGS ()*/); +#endif +#ifdef ADDRESS_CLASS_TYPE_FLAGS_TO_NAME + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "ADDRESS_CLASS_TYPE_FLAGS_TO_NAME(type_flags)", + XSTRING (ADDRESS_CLASS_TYPE_FLAGS_TO_NAME (type_flags))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: ADDRESS_CLASS_TYPE_FLAGS_TO_NAME = 0x%08lx\n", + (long) current_gdbarch->address_class_type_flags_to_name + /*ADDRESS_CLASS_TYPE_FLAGS_TO_NAME ()*/); +#endif #ifdef ADDRESS_TO_POINTER #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -964,6 +1041,14 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->cannot_fetch_register /*CANNOT_FETCH_REGISTER ()*/); #endif +#ifdef CANNOT_STEP_BREAKPOINT + fprintf_unfiltered (file, + "gdbarch_dump: CANNOT_STEP_BREAKPOINT # %s\n", + XSTRING (CANNOT_STEP_BREAKPOINT)); + fprintf_unfiltered (file, + "gdbarch_dump: CANNOT_STEP_BREAKPOINT = %d\n", + CANNOT_STEP_BREAKPOINT); +#endif #ifdef CANNOT_STORE_REGISTER fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", @@ -1015,6 +1100,17 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->convert_from_func_ptr_addr /*CONVERT_FROM_FUNC_PTR_ADDR ()*/); #endif +#ifdef CONVERT_REGISTER_P + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "CONVERT_REGISTER_P(regnum)", + XSTRING (CONVERT_REGISTER_P (regnum))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: CONVERT_REGISTER_P = 0x%08lx\n", + (long) current_gdbarch->convert_register_p + /*CONVERT_REGISTER_P ()*/); +#endif #ifdef DECR_PC_AFTER_BREAK fprintf_unfiltered (file, "gdbarch_dump: DECR_PC_AFTER_BREAK # %s\n", @@ -1023,6 +1119,45 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: DECR_PC_AFTER_BREAK = %ld\n", (long) DECR_PC_AFTER_BREAK); #endif +#ifdef DEPRECATED_EXTRACT_RETURN_VALUE +#if GDB_MULTI_ARCH + /* Macro might contain `[{}]' when not multi-arch */ + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "DEPRECATED_EXTRACT_RETURN_VALUE(type, regbuf, valbuf)", + XSTRING (DEPRECATED_EXTRACT_RETURN_VALUE (type, regbuf, valbuf))); +#endif + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: DEPRECATED_EXTRACT_RETURN_VALUE = 0x%08lx\n", + (long) current_gdbarch->deprecated_extract_return_value + /*DEPRECATED_EXTRACT_RETURN_VALUE ()*/); +#endif +#ifdef DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(regbuf)", + XSTRING (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS (regbuf))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS = 0x%08lx\n", + (long) current_gdbarch->deprecated_extract_struct_value_address + /*DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS ()*/); +#endif +#ifdef DEPRECATED_STORE_RETURN_VALUE +#if GDB_MULTI_ARCH + /* Macro might contain `[{}]' when not multi-arch */ + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "DEPRECATED_STORE_RETURN_VALUE(type, valbuf)", + XSTRING (DEPRECATED_STORE_RETURN_VALUE (type, valbuf))); +#endif + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: DEPRECATED_STORE_RETURN_VALUE = 0x%08lx\n", + (long) current_gdbarch->deprecated_store_return_value + /*DEPRECATED_STORE_RETURN_VALUE ()*/); +#endif #ifdef DO_REGISTERS_INFO #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -1103,8 +1238,8 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) /* Macro might contain `[{}]' when not multi-arch */ fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", - "EXTRACT_RETURN_VALUE(type, regbuf, valbuf)", - XSTRING (EXTRACT_RETURN_VALUE (type, regbuf, valbuf))); + "EXTRACT_RETURN_VALUE(type, regcache, valbuf)", + XSTRING (EXTRACT_RETURN_VALUE (type, regcache, valbuf))); #endif if (GDB_MULTI_ARCH) fprintf_unfiltered (file, @@ -1115,8 +1250,8 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) #ifdef EXTRACT_STRUCT_VALUE_ADDRESS fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", - "EXTRACT_STRUCT_VALUE_ADDRESS(regbuf)", - XSTRING (EXTRACT_STRUCT_VALUE_ADDRESS (regbuf))); + "EXTRACT_STRUCT_VALUE_ADDRESS(regcache)", + XSTRING (EXTRACT_STRUCT_VALUE_ADDRESS (regcache))); if (GDB_MULTI_ARCH) fprintf_unfiltered (file, "gdbarch_dump: EXTRACT_STRUCT_VALUE_ADDRESS = 0x%08lx\n", @@ -1131,20 +1266,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: EXTRA_STACK_ALIGNMENT_NEEDED = %d\n", EXTRA_STACK_ALIGNMENT_NEEDED); #endif -#ifdef FETCH_PSEUDO_REGISTER -#if GDB_MULTI_ARCH - /* Macro might contain `[{}]' when not multi-arch */ - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "FETCH_PSEUDO_REGISTER(regnum)", - XSTRING (FETCH_PSEUDO_REGISTER (regnum))); -#endif - if (GDB_MULTI_ARCH) - fprintf_unfiltered (file, - "gdbarch_dump: FETCH_PSEUDO_REGISTER = 0x%08lx\n", - (long) current_gdbarch->fetch_pseudo_register - /*FETCH_PSEUDO_REGISTER ()*/); -#endif #ifdef FIX_CALL_DUMMY #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -1282,6 +1403,17 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: FUNCTION_START_OFFSET = %ld\n", (long) FUNCTION_START_OFFSET); #endif +#ifdef GET_LONGJMP_TARGET + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "GET_LONGJMP_TARGET(pc)", + XSTRING (GET_LONGJMP_TARGET (pc))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: GET_LONGJMP_TARGET = 0x%08lx\n", + (long) current_gdbarch->get_longjmp_target + /*GET_LONGJMP_TARGET ()*/); +#endif #ifdef GET_SAVED_REGISTER #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -1296,6 +1428,14 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->get_saved_register /*GET_SAVED_REGISTER ()*/); #endif +#ifdef HAVE_NONSTEPPABLE_WATCHPOINT + fprintf_unfiltered (file, + "gdbarch_dump: HAVE_NONSTEPPABLE_WATCHPOINT # %s\n", + XSTRING (HAVE_NONSTEPPABLE_WATCHPOINT)); + fprintf_unfiltered (file, + "gdbarch_dump: HAVE_NONSTEPPABLE_WATCHPOINT = %d\n", + HAVE_NONSTEPPABLE_WATCHPOINT); +#endif #ifdef INIT_EXTRA_FRAME_INFO #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -1371,6 +1511,17 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->in_solib_call_trampoline /*IN_SOLIB_CALL_TRAMPOLINE ()*/); #endif +#ifdef IN_SOLIB_RETURN_TRAMPOLINE + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "IN_SOLIB_RETURN_TRAMPOLINE(pc, name)", + XSTRING (IN_SOLIB_RETURN_TRAMPOLINE (pc, name))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: IN_SOLIB_RETURN_TRAMPOLINE = 0x%08lx\n", + (long) current_gdbarch->in_solib_return_trampoline + /*IN_SOLIB_RETURN_TRAMPOLINE ()*/); +#endif #ifdef MAX_REGISTER_RAW_SIZE fprintf_unfiltered (file, "gdbarch_dump: MAX_REGISTER_RAW_SIZE # %s\n", @@ -1409,13 +1560,13 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->memory_remove_breakpoint /*MEMORY_REMOVE_BREAKPOINT ()*/); #endif -#ifdef NNPC_REGNUM +#ifdef NAME_OF_MALLOC fprintf_unfiltered (file, - "gdbarch_dump: NNPC_REGNUM # %s\n", - XSTRING (NNPC_REGNUM)); + "gdbarch_dump: NAME_OF_MALLOC # %s\n", + XSTRING (NAME_OF_MALLOC)); fprintf_unfiltered (file, - "gdbarch_dump: NNPC_REGNUM = %d\n", - NNPC_REGNUM); + "gdbarch_dump: NAME_OF_MALLOC = %ld\n", + (long) NAME_OF_MALLOC); #endif #ifdef NPC_REGNUM fprintf_unfiltered (file, @@ -1460,6 +1611,17 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->pc_in_call_dummy /*PC_IN_CALL_DUMMY ()*/); #endif +#ifdef PC_IN_SIGTRAMP + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "PC_IN_SIGTRAMP(pc, name)", + XSTRING (PC_IN_SIGTRAMP (pc, name))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: PC_IN_SIGTRAMP = 0x%08lx\n", + (long) current_gdbarch->pc_in_sigtramp + /*PC_IN_SIGTRAMP ()*/); +#endif #ifdef PC_REGNUM fprintf_unfiltered (file, "gdbarch_dump: PC_REGNUM # %s\n", @@ -1503,21 +1665,19 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: PREPARE_TO_PROCEED = 0x%08lx\n", (long) current_gdbarch->prepare_to_proceed /*PREPARE_TO_PROCEED ()*/); -#endif -#ifdef PRINT_FLOAT_INFO -#if GDB_MULTI_ARCH - /* Macro might contain `[{}]' when not multi-arch */ - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "PRINT_FLOAT_INFO()", - XSTRING (PRINT_FLOAT_INFO ())); #endif if (GDB_MULTI_ARCH) fprintf_unfiltered (file, - "gdbarch_dump: PRINT_FLOAT_INFO = 0x%08lx\n", - (long) current_gdbarch->print_float_info - /*PRINT_FLOAT_INFO ()*/); -#endif + "gdbarch_dump: print_float_info = 0x%08lx\n", + (long) current_gdbarch->print_float_info); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: print_registers_info = 0x%08lx\n", + (long) current_gdbarch->print_registers_info); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: print_vector_info = 0x%08lx\n", + (long) current_gdbarch->print_vector_info); #ifdef PROLOGUE_FRAMELESS_P fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", @@ -1529,6 +1689,14 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->prologue_frameless_p /*PROLOGUE_FRAMELESS_P ()*/); #endif +#ifdef PS_REGNUM + fprintf_unfiltered (file, + "gdbarch_dump: PS_REGNUM # %s\n", + XSTRING (PS_REGNUM)); + fprintf_unfiltered (file, + "gdbarch_dump: PS_REGNUM = %d\n", + PS_REGNUM); +#endif #ifdef PUSH_ARGUMENTS fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", @@ -1675,6 +1843,20 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: REGISTER_SIZE = %d\n", REGISTER_SIZE); #endif +#ifdef REGISTER_TO_VALUE +#if GDB_MULTI_ARCH + /* Macro might contain `[{}]' when not multi-arch */ + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "REGISTER_TO_VALUE(regnum, type, from, to)", + XSTRING (REGISTER_TO_VALUE (regnum, type, from, to))); +#endif + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: REGISTER_TO_VALUE = 0x%08lx\n", + (long) current_gdbarch->register_to_value + /*REGISTER_TO_VALUE ()*/); +#endif #ifdef REGISTER_VIRTUAL_SIZE fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", @@ -1769,6 +1951,28 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->sdb_reg_to_regnum /*SDB_REG_TO_REGNUM ()*/); #endif +#ifdef SIGTRAMP_END + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "SIGTRAMP_END(pc)", + XSTRING (SIGTRAMP_END (pc))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: SIGTRAMP_END = 0x%08lx\n", + (long) current_gdbarch->sigtramp_end + /*SIGTRAMP_END ()*/); +#endif +#ifdef SIGTRAMP_START + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "SIGTRAMP_START(pc)", + XSTRING (SIGTRAMP_START (pc))); + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: SIGTRAMP_START = 0x%08lx\n", + (long) current_gdbarch->sigtramp_start + /*SIGTRAMP_START ()*/); +#endif #ifdef SIZEOF_CALL_DUMMY_WORDS fprintf_unfiltered (file, "gdbarch_dump: SIZEOF_CALL_DUMMY_WORDS # %s\n", @@ -1854,27 +2058,13 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->stack_align /*STACK_ALIGN ()*/); #endif -#ifdef STORE_PSEUDO_REGISTER -#if GDB_MULTI_ARCH - /* Macro might contain `[{}]' when not multi-arch */ - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "STORE_PSEUDO_REGISTER(regnum)", - XSTRING (STORE_PSEUDO_REGISTER (regnum))); -#endif - if (GDB_MULTI_ARCH) - fprintf_unfiltered (file, - "gdbarch_dump: STORE_PSEUDO_REGISTER = 0x%08lx\n", - (long) current_gdbarch->store_pseudo_register - /*STORE_PSEUDO_REGISTER ()*/); -#endif #ifdef STORE_RETURN_VALUE #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ fprintf_unfiltered (file, "gdbarch_dump: %s # %s\n", - "STORE_RETURN_VALUE(type, valbuf)", - XSTRING (STORE_RETURN_VALUE (type, valbuf))); + "STORE_RETURN_VALUE(type, regcache, valbuf)", + XSTRING (STORE_RETURN_VALUE (type, regcache, valbuf))); #endif if (GDB_MULTI_ARCH) fprintf_unfiltered (file, @@ -2083,20 +2273,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) (long) current_gdbarch->virtual_frame_pointer /*TARGET_VIRTUAL_FRAME_POINTER ()*/); #endif -#ifdef TARGET_WRITE_FP -#if GDB_MULTI_ARCH - /* Macro might contain `[{}]' when not multi-arch */ - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "TARGET_WRITE_FP(val)", - XSTRING (TARGET_WRITE_FP (val))); -#endif - if (GDB_MULTI_ARCH) - fprintf_unfiltered (file, - "gdbarch_dump: TARGET_WRITE_FP = 0x%08lx\n", - (long) current_gdbarch->write_fp - /*TARGET_WRITE_FP ()*/); -#endif #ifdef TARGET_WRITE_PC #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -2143,6 +2319,20 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: USE_STRUCT_CONVENTION = 0x%08lx\n", (long) current_gdbarch->use_struct_convention /*USE_STRUCT_CONVENTION ()*/); +#endif +#ifdef VALUE_TO_REGISTER +#if GDB_MULTI_ARCH + /* Macro might contain `[{}]' when not multi-arch */ + fprintf_unfiltered (file, + "gdbarch_dump: %s # %s\n", + "VALUE_TO_REGISTER(type, regnum, from, to)", + XSTRING (VALUE_TO_REGISTER (type, regnum, from, to))); +#endif + if (GDB_MULTI_ARCH) + fprintf_unfiltered (file, + "gdbarch_dump: VALUE_TO_REGISTER = 0x%08lx\n", + (long) current_gdbarch->value_to_register + /*VALUE_TO_REGISTER ()*/); #endif if (current_gdbarch->dump_tdep != NULL) current_gdbarch->dump_tdep (current_gdbarch, file); @@ -2160,6 +2350,7 @@ gdbarch_tdep (struct gdbarch *gdbarch) const struct bfd_arch_info * gdbarch_bfd_arch_info (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_arch_info called\n"); return gdbarch->bfd_arch_info; @@ -2168,6 +2359,7 @@ gdbarch_bfd_arch_info (struct gdbarch *gdbarch) int gdbarch_byte_order (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_byte_order called\n"); return gdbarch->byte_order; @@ -2176,6 +2368,7 @@ gdbarch_byte_order (struct gdbarch *gdbarch) int gdbarch_short_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of short_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_short_bit called\n"); @@ -2192,6 +2385,7 @@ set_gdbarch_short_bit (struct gdbarch *gdbarch, int gdbarch_int_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of int_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_int_bit called\n"); @@ -2208,6 +2402,7 @@ set_gdbarch_int_bit (struct gdbarch *gdbarch, int gdbarch_long_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of long_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_long_bit called\n"); @@ -2224,6 +2419,7 @@ set_gdbarch_long_bit (struct gdbarch *gdbarch, int gdbarch_long_long_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of long_long_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_long_long_bit called\n"); @@ -2240,6 +2436,7 @@ set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int gdbarch_float_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of float_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_float_bit called\n"); @@ -2256,6 +2453,7 @@ set_gdbarch_float_bit (struct gdbarch *gdbarch, int gdbarch_double_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of double_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_double_bit called\n"); @@ -2272,6 +2470,7 @@ set_gdbarch_double_bit (struct gdbarch *gdbarch, int gdbarch_long_double_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of long_double_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_bit called\n"); @@ -2288,6 +2487,7 @@ set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int gdbarch_ptr_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of ptr_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_ptr_bit called\n"); @@ -2304,6 +2504,7 @@ set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int gdbarch_addr_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->addr_bit == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_addr_bit invalid"); @@ -2322,6 +2523,7 @@ set_gdbarch_addr_bit (struct gdbarch *gdbarch, int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of bfd_vma_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_vma_bit called\n"); @@ -2338,6 +2540,7 @@ set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int gdbarch_char_signed (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->char_signed == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_char_signed invalid"); @@ -2356,6 +2559,7 @@ set_gdbarch_char_signed (struct gdbarch *gdbarch, CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, ptid_t ptid) { + gdb_assert (gdbarch != NULL); if (gdbarch->read_pc == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_read_pc invalid"); @@ -2374,6 +2578,7 @@ set_gdbarch_read_pc (struct gdbarch *gdbarch, void gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR val, ptid_t ptid) { + gdb_assert (gdbarch != NULL); if (gdbarch->write_pc == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_write_pc invalid"); @@ -2392,6 +2597,7 @@ set_gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR gdbarch_read_fp (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->read_fp == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_read_fp invalid"); @@ -2407,27 +2613,10 @@ set_gdbarch_read_fp (struct gdbarch *gdbarch, gdbarch->read_fp = read_fp; } -void -gdbarch_write_fp (struct gdbarch *gdbarch, CORE_ADDR val) -{ - if (gdbarch->write_fp == 0) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_write_fp invalid"); - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_write_fp called\n"); - gdbarch->write_fp (val); -} - -void -set_gdbarch_write_fp (struct gdbarch *gdbarch, - gdbarch_write_fp_ftype write_fp) -{ - gdbarch->write_fp = write_fp; -} - CORE_ADDR gdbarch_read_sp (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->read_sp == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_read_sp invalid"); @@ -2446,6 +2635,7 @@ set_gdbarch_read_sp (struct gdbarch *gdbarch, void gdbarch_write_sp (struct gdbarch *gdbarch, CORE_ADDR val) { + gdb_assert (gdbarch != NULL); if (gdbarch->write_sp == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_write_sp invalid"); @@ -2464,6 +2654,7 @@ set_gdbarch_write_sp (struct gdbarch *gdbarch, void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset) { + gdb_assert (gdbarch != NULL); if (gdbarch->virtual_frame_pointer == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_virtual_frame_pointer invalid"); @@ -2480,56 +2671,61 @@ set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, } int -gdbarch_register_read_p (struct gdbarch *gdbarch) +gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch) { - return gdbarch->register_read != 0; + gdb_assert (gdbarch != NULL); + return gdbarch->pseudo_register_read != 0; } void -gdbarch_register_read (struct gdbarch *gdbarch, int regnum, char *buf) +gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, void *buf) { - if (gdbarch->register_read == 0) + gdb_assert (gdbarch != NULL); + if (gdbarch->pseudo_register_read == 0) internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_register_read invalid"); + "gdbarch: gdbarch_pseudo_register_read invalid"); if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_register_read called\n"); - gdbarch->register_read (gdbarch, regnum, buf); + fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_read called\n"); + gdbarch->pseudo_register_read (gdbarch, regcache, cookednum, buf); } void -set_gdbarch_register_read (struct gdbarch *gdbarch, - gdbarch_register_read_ftype register_read) +set_gdbarch_pseudo_register_read (struct gdbarch *gdbarch, + gdbarch_pseudo_register_read_ftype pseudo_register_read) { - gdbarch->register_read = register_read; + gdbarch->pseudo_register_read = pseudo_register_read; } int -gdbarch_register_write_p (struct gdbarch *gdbarch) +gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch) { - return gdbarch->register_write != 0; + gdb_assert (gdbarch != NULL); + return gdbarch->pseudo_register_write != 0; } void -gdbarch_register_write (struct gdbarch *gdbarch, int regnum, char *buf) +gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const void *buf) { - if (gdbarch->register_write == 0) + gdb_assert (gdbarch != NULL); + if (gdbarch->pseudo_register_write == 0) internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_register_write invalid"); + "gdbarch: gdbarch_pseudo_register_write invalid"); if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_register_write called\n"); - gdbarch->register_write (gdbarch, regnum, buf); + fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_write called\n"); + gdbarch->pseudo_register_write (gdbarch, regcache, cookednum, buf); } void -set_gdbarch_register_write (struct gdbarch *gdbarch, - gdbarch_register_write_ftype register_write) +set_gdbarch_pseudo_register_write (struct gdbarch *gdbarch, + gdbarch_pseudo_register_write_ftype pseudo_register_write) { - gdbarch->register_write = register_write; + gdbarch->pseudo_register_write = pseudo_register_write; } int gdbarch_num_regs (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->num_regs == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_num_regs invalid"); @@ -2548,6 +2744,7 @@ set_gdbarch_num_regs (struct gdbarch *gdbarch, int gdbarch_num_pseudo_regs (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of num_pseudo_regs, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_num_pseudo_regs called\n"); @@ -2564,9 +2761,8 @@ set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch, int gdbarch_sp_regnum (struct gdbarch *gdbarch) { - if (gdbarch->sp_regnum == -1) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_sp_regnum invalid"); + gdb_assert (gdbarch != NULL); + /* Skip verify of sp_regnum, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_sp_regnum called\n"); return gdbarch->sp_regnum; @@ -2582,9 +2778,8 @@ set_gdbarch_sp_regnum (struct gdbarch *gdbarch, int gdbarch_fp_regnum (struct gdbarch *gdbarch) { - if (gdbarch->fp_regnum == -1) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_fp_regnum invalid"); + gdb_assert (gdbarch != NULL); + /* Skip verify of fp_regnum, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_fp_regnum called\n"); return gdbarch->fp_regnum; @@ -2600,9 +2795,8 @@ set_gdbarch_fp_regnum (struct gdbarch *gdbarch, int gdbarch_pc_regnum (struct gdbarch *gdbarch) { - if (gdbarch->pc_regnum == -1) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_pc_regnum invalid"); + gdb_assert (gdbarch != NULL); + /* Skip verify of pc_regnum, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_pc_regnum called\n"); return gdbarch->pc_regnum; @@ -2615,9 +2809,27 @@ set_gdbarch_pc_regnum (struct gdbarch *gdbarch, gdbarch->pc_regnum = pc_regnum; } +int +gdbarch_ps_regnum (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of ps_regnum, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_ps_regnum called\n"); + return gdbarch->ps_regnum; +} + +void +set_gdbarch_ps_regnum (struct gdbarch *gdbarch, + int ps_regnum) +{ + gdbarch->ps_regnum = ps_regnum; +} + int gdbarch_fp0_regnum (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of fp0_regnum, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_fp0_regnum called\n"); @@ -2634,6 +2846,7 @@ set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int gdbarch_npc_regnum (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of npc_regnum, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_npc_regnum called\n"); @@ -2647,25 +2860,10 @@ set_gdbarch_npc_regnum (struct gdbarch *gdbarch, gdbarch->npc_regnum = npc_regnum; } -int -gdbarch_nnpc_regnum (struct gdbarch *gdbarch) -{ - /* Skip verify of nnpc_regnum, invalid_p == 0 */ - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_nnpc_regnum called\n"); - return gdbarch->nnpc_regnum; -} - -void -set_gdbarch_nnpc_regnum (struct gdbarch *gdbarch, - int nnpc_regnum) -{ - gdbarch->nnpc_regnum = nnpc_regnum; -} - int gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->stab_reg_to_regnum == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_stab_reg_to_regnum invalid"); @@ -2684,6 +2882,7 @@ set_gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->ecoff_reg_to_regnum == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_ecoff_reg_to_regnum invalid"); @@ -2702,6 +2901,7 @@ set_gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->dwarf_reg_to_regnum == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_dwarf_reg_to_regnum invalid"); @@ -2720,6 +2920,7 @@ set_gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->sdb_reg_to_regnum == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_sdb_reg_to_regnum invalid"); @@ -2738,6 +2939,7 @@ set_gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->dwarf2_reg_to_regnum == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_dwarf2_reg_to_regnum invalid"); @@ -2753,9 +2955,10 @@ set_gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, gdbarch->dwarf2_reg_to_regnum = dwarf2_reg_to_regnum; } -char * +const char * gdbarch_register_name (struct gdbarch *gdbarch, int regnr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_name == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_name invalid"); @@ -2774,6 +2977,7 @@ set_gdbarch_register_name (struct gdbarch *gdbarch, int gdbarch_register_size (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_size == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_size invalid"); @@ -2792,6 +2996,7 @@ set_gdbarch_register_size (struct gdbarch *gdbarch, int gdbarch_register_bytes (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_bytes == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_bytes invalid"); @@ -2810,6 +3015,7 @@ set_gdbarch_register_bytes (struct gdbarch *gdbarch, int gdbarch_register_byte (struct gdbarch *gdbarch, int reg_nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_byte == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_byte invalid"); @@ -2828,6 +3034,7 @@ set_gdbarch_register_byte (struct gdbarch *gdbarch, int gdbarch_register_raw_size (struct gdbarch *gdbarch, int reg_nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_raw_size == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_raw_size invalid"); @@ -2846,6 +3053,7 @@ set_gdbarch_register_raw_size (struct gdbarch *gdbarch, int gdbarch_max_register_raw_size (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->max_register_raw_size == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_max_register_raw_size invalid"); @@ -2864,6 +3072,7 @@ set_gdbarch_max_register_raw_size (struct gdbarch *gdbarch, int gdbarch_register_virtual_size (struct gdbarch *gdbarch, int reg_nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_virtual_size == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_virtual_size invalid"); @@ -2882,6 +3091,7 @@ set_gdbarch_register_virtual_size (struct gdbarch *gdbarch, int gdbarch_max_register_virtual_size (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->max_register_virtual_size == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_max_register_virtual_size invalid"); @@ -2900,6 +3110,7 @@ set_gdbarch_max_register_virtual_size (struct gdbarch *gdbarch, struct type * gdbarch_register_virtual_type (struct gdbarch *gdbarch, int reg_nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_virtual_type == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_virtual_type invalid"); @@ -2915,9 +3126,17 @@ set_gdbarch_register_virtual_type (struct gdbarch *gdbarch, gdbarch->register_virtual_type = register_virtual_type; } +int +gdbarch_do_registers_info_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->do_registers_info != 0; +} + void gdbarch_do_registers_info (struct gdbarch *gdbarch, int reg_nr, int fpregs) { + gdb_assert (gdbarch != NULL); if (gdbarch->do_registers_info == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_do_registers_info invalid"); @@ -2934,14 +3153,41 @@ set_gdbarch_do_registers_info (struct gdbarch *gdbarch, } void -gdbarch_print_float_info (struct gdbarch *gdbarch) +gdbarch_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->print_registers_info == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_print_registers_info invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_print_registers_info called\n"); + gdbarch->print_registers_info (gdbarch, file, frame, regnum, all); +} + +void +set_gdbarch_print_registers_info (struct gdbarch *gdbarch, + gdbarch_print_registers_info_ftype print_registers_info) +{ + gdbarch->print_registers_info = print_registers_info; +} + +int +gdbarch_print_float_info_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); + return gdbarch->print_float_info != 0; +} + +void +gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args) +{ + gdb_assert (gdbarch != NULL); if (gdbarch->print_float_info == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_print_float_info invalid"); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_print_float_info called\n"); - gdbarch->print_float_info (); + gdbarch->print_float_info (gdbarch, file, frame, args); } void @@ -2951,9 +3197,36 @@ set_gdbarch_print_float_info (struct gdbarch *gdbarch, gdbarch->print_float_info = print_float_info; } +int +gdbarch_print_vector_info_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->print_vector_info != 0; +} + +void +gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->print_vector_info == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_print_vector_info invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_print_vector_info called\n"); + gdbarch->print_vector_info (gdbarch, file, frame, args); +} + +void +set_gdbarch_print_vector_info (struct gdbarch *gdbarch, + gdbarch_print_vector_info_ftype print_vector_info) +{ + gdbarch->print_vector_info = print_vector_info; +} + int gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_sim_regno == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_sim_regno invalid"); @@ -2972,12 +3245,14 @@ set_gdbarch_register_sim_regno (struct gdbarch *gdbarch, int gdbarch_register_bytes_ok_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->register_bytes_ok != 0; } int gdbarch_register_bytes_ok (struct gdbarch *gdbarch, long nr_bytes) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_bytes_ok == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_bytes_ok invalid"); @@ -2996,6 +3271,7 @@ set_gdbarch_register_bytes_ok (struct gdbarch *gdbarch, int gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum) { + gdb_assert (gdbarch != NULL); if (gdbarch->cannot_fetch_register == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_cannot_fetch_register invalid"); @@ -3014,6 +3290,7 @@ set_gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum) { + gdb_assert (gdbarch != NULL); if (gdbarch->cannot_store_register == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_cannot_store_register invalid"); @@ -3029,9 +3306,36 @@ set_gdbarch_cannot_store_register (struct gdbarch *gdbarch, gdbarch->cannot_store_register = cannot_store_register; } +int +gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->get_longjmp_target != 0; +} + +int +gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->get_longjmp_target == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_get_longjmp_target invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_get_longjmp_target called\n"); + return gdbarch->get_longjmp_target (pc); +} + +void +set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch, + gdbarch_get_longjmp_target_ftype get_longjmp_target) +{ + gdbarch->get_longjmp_target = get_longjmp_target; +} + int gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->use_generic_dummy_frames == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_use_generic_dummy_frames invalid"); @@ -3050,6 +3354,7 @@ set_gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch, int gdbarch_call_dummy_location (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_location == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_location invalid"); @@ -3068,6 +3373,7 @@ set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, CORE_ADDR gdbarch_call_dummy_address (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_address invalid"); @@ -3086,6 +3392,7 @@ set_gdbarch_call_dummy_address (struct gdbarch *gdbarch, CORE_ADDR gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_start_offset == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_start_offset invalid"); @@ -3104,6 +3411,7 @@ set_gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch, CORE_ADDR gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_breakpoint_offset_p && gdbarch->call_dummy_breakpoint_offset == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_breakpoint_offset invalid"); @@ -3122,6 +3430,7 @@ set_gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch, int gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_breakpoint_offset_p == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_breakpoint_offset_p invalid"); @@ -3140,6 +3449,7 @@ set_gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch, int gdbarch_call_dummy_length (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_length == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_length invalid"); @@ -3158,6 +3468,7 @@ set_gdbarch_call_dummy_length (struct gdbarch *gdbarch, int gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address) { + gdb_assert (gdbarch != NULL); if (gdbarch->pc_in_call_dummy == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_pc_in_call_dummy invalid"); @@ -3176,6 +3487,7 @@ set_gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, int gdbarch_call_dummy_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_p == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_p invalid"); @@ -3194,6 +3506,7 @@ set_gdbarch_call_dummy_p (struct gdbarch *gdbarch, LONGEST * gdbarch_call_dummy_words (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of call_dummy_words, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_call_dummy_words called\n"); @@ -3210,6 +3523,7 @@ set_gdbarch_call_dummy_words (struct gdbarch *gdbarch, int gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of sizeof_call_dummy_words, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_sizeof_call_dummy_words called\n"); @@ -3226,6 +3540,7 @@ set_gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch, int gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_stack_adjust_p == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_stack_adjust_p invalid"); @@ -3244,6 +3559,7 @@ set_gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch, int gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->call_dummy_stack_adjust_p && gdbarch->call_dummy_stack_adjust == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_call_dummy_stack_adjust invalid"); @@ -3262,6 +3578,7 @@ set_gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch, void gdbarch_fix_call_dummy (struct gdbarch *gdbarch, char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p) { + gdb_assert (gdbarch != NULL); if (gdbarch->fix_call_dummy == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_fix_call_dummy invalid"); @@ -3280,6 +3597,7 @@ set_gdbarch_fix_call_dummy (struct gdbarch *gdbarch, void gdbarch_init_frame_pc_first (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev) { + gdb_assert (gdbarch != NULL); if (gdbarch->init_frame_pc_first == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_init_frame_pc_first invalid"); @@ -3298,6 +3616,7 @@ set_gdbarch_init_frame_pc_first (struct gdbarch *gdbarch, void gdbarch_init_frame_pc (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev) { + gdb_assert (gdbarch != NULL); if (gdbarch->init_frame_pc == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_init_frame_pc invalid"); @@ -3316,6 +3635,7 @@ set_gdbarch_init_frame_pc (struct gdbarch *gdbarch, int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_believe_pcc_promotion called\n"); return gdbarch->believe_pcc_promotion; @@ -3331,6 +3651,7 @@ set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_believe_pcc_promotion_type called\n"); return gdbarch->believe_pcc_promotion_type; @@ -3346,6 +3667,7 @@ set_gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch, int gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, struct type *formal, struct type *actual) { + gdb_assert (gdbarch != NULL); if (gdbarch->coerce_float_to_double == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_coerce_float_to_double invalid"); @@ -3364,6 +3686,7 @@ set_gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, void gdbarch_get_saved_register (struct gdbarch *gdbarch, char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval) { + gdb_assert (gdbarch != NULL); if (gdbarch->get_saved_register == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_get_saved_register invalid"); @@ -3382,6 +3705,7 @@ set_gdbarch_get_saved_register (struct gdbarch *gdbarch, int gdbarch_register_convertible (struct gdbarch *gdbarch, int nr) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_convertible == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_convertible invalid"); @@ -3400,6 +3724,7 @@ set_gdbarch_register_convertible (struct gdbarch *gdbarch, void gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_convert_to_virtual == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_convert_to_virtual invalid"); @@ -3418,6 +3743,7 @@ set_gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, void gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to) { + gdb_assert (gdbarch != NULL); if (gdbarch->register_convert_to_raw == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_register_convert_to_raw invalid"); @@ -3434,56 +3760,66 @@ set_gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, } int -gdbarch_fetch_pseudo_register_p (struct gdbarch *gdbarch) +gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum) { - return gdbarch->fetch_pseudo_register != 0; + gdb_assert (gdbarch != NULL); + if (gdbarch->convert_register_p == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_convert_register_p invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_convert_register_p called\n"); + return gdbarch->convert_register_p (regnum); } void -gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, int regnum) +set_gdbarch_convert_register_p (struct gdbarch *gdbarch, + gdbarch_convert_register_p_ftype convert_register_p) { - if (gdbarch->fetch_pseudo_register == 0) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_fetch_pseudo_register invalid"); - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_pseudo_register called\n"); - gdbarch->fetch_pseudo_register (regnum); + gdbarch->convert_register_p = convert_register_p; } void -set_gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, - gdbarch_fetch_pseudo_register_ftype fetch_pseudo_register) +gdbarch_register_to_value (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to) { - gdbarch->fetch_pseudo_register = fetch_pseudo_register; + gdb_assert (gdbarch != NULL); + if (gdbarch->register_to_value == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_register_to_value invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_register_to_value called\n"); + gdbarch->register_to_value (regnum, type, from, to); } -int -gdbarch_store_pseudo_register_p (struct gdbarch *gdbarch) +void +set_gdbarch_register_to_value (struct gdbarch *gdbarch, + gdbarch_register_to_value_ftype register_to_value) { - return gdbarch->store_pseudo_register != 0; + gdbarch->register_to_value = register_to_value; } void -gdbarch_store_pseudo_register (struct gdbarch *gdbarch, int regnum) +gdbarch_value_to_register (struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to) { - if (gdbarch->store_pseudo_register == 0) + gdb_assert (gdbarch != NULL); + if (gdbarch->value_to_register == 0) internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_store_pseudo_register invalid"); + "gdbarch: gdbarch_value_to_register invalid"); if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_store_pseudo_register called\n"); - gdbarch->store_pseudo_register (regnum); + fprintf_unfiltered (gdb_stdlog, "gdbarch_value_to_register called\n"); + gdbarch->value_to_register (type, regnum, from, to); } void -set_gdbarch_store_pseudo_register (struct gdbarch *gdbarch, - gdbarch_store_pseudo_register_ftype store_pseudo_register) +set_gdbarch_value_to_register (struct gdbarch *gdbarch, + gdbarch_value_to_register_ftype value_to_register) { - gdbarch->store_pseudo_register = store_pseudo_register; + gdbarch->value_to_register = value_to_register; } CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf) { + gdb_assert (gdbarch != NULL); if (gdbarch->pointer_to_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_pointer_to_address invalid"); @@ -3502,6 +3838,7 @@ set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->address_to_pointer == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_address_to_pointer invalid"); @@ -3520,12 +3857,14 @@ set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, int gdbarch_integer_to_address_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->integer_to_address != 0; } CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf) { + gdb_assert (gdbarch != NULL); if (gdbarch->integer_to_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_integer_to_address invalid"); @@ -3544,6 +3883,7 @@ set_gdbarch_integer_to_address (struct gdbarch *gdbarch, int gdbarch_return_value_on_stack (struct gdbarch *gdbarch, struct type *type) { + gdb_assert (gdbarch != NULL); if (gdbarch->return_value_on_stack == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_return_value_on_stack invalid"); @@ -3559,27 +3899,10 @@ set_gdbarch_return_value_on_stack (struct gdbarch *gdbarch, gdbarch->return_value_on_stack = return_value_on_stack; } -void -gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf) -{ - if (gdbarch->extract_return_value == 0) - internal_error (__FILE__, __LINE__, - "gdbarch: gdbarch_extract_return_value invalid"); - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_extract_return_value called\n"); - gdbarch->extract_return_value (type, regbuf, valbuf); -} - -void -set_gdbarch_extract_return_value (struct gdbarch *gdbarch, - gdbarch_extract_return_value_ftype extract_return_value) -{ - gdbarch->extract_return_value = extract_return_value; -} - CORE_ADDR gdbarch_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->push_arguments == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_push_arguments invalid"); @@ -3598,6 +3921,7 @@ set_gdbarch_push_arguments (struct gdbarch *gdbarch, void gdbarch_push_dummy_frame (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->push_dummy_frame == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_push_dummy_frame invalid"); @@ -3616,12 +3940,14 @@ set_gdbarch_push_dummy_frame (struct gdbarch *gdbarch, int gdbarch_push_return_address_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->push_return_address != 0; } CORE_ADDR gdbarch_push_return_address (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp) { + gdb_assert (gdbarch != NULL); if (gdbarch->push_return_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_push_return_address invalid"); @@ -3640,6 +3966,7 @@ set_gdbarch_push_return_address (struct gdbarch *gdbarch, void gdbarch_pop_frame (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->pop_frame == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_pop_frame invalid"); @@ -3658,6 +3985,7 @@ set_gdbarch_pop_frame (struct gdbarch *gdbarch, void gdbarch_store_struct_return (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp) { + gdb_assert (gdbarch != NULL); if (gdbarch->store_struct_return == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_store_struct_return invalid"); @@ -3674,14 +4002,34 @@ set_gdbarch_store_struct_return (struct gdbarch *gdbarch, } void -gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf) +gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, void *valbuf) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->extract_return_value == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_extract_return_value invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_extract_return_value called\n"); + gdbarch->extract_return_value (type, regcache, valbuf); +} + +void +set_gdbarch_extract_return_value (struct gdbarch *gdbarch, + gdbarch_extract_return_value_ftype extract_return_value) +{ + gdbarch->extract_return_value = extract_return_value; +} + +void +gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const void *valbuf) { + gdb_assert (gdbarch != NULL); if (gdbarch->store_return_value == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_store_return_value invalid"); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_store_return_value called\n"); - gdbarch->store_return_value (type, valbuf); + gdbarch->store_return_value (type, regcache, valbuf); } void @@ -3691,21 +4039,61 @@ set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch->store_return_value = store_return_value; } +void +gdbarch_deprecated_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->deprecated_extract_return_value == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_deprecated_extract_return_value invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_extract_return_value called\n"); + gdbarch->deprecated_extract_return_value (type, regbuf, valbuf); +} + +void +set_gdbarch_deprecated_extract_return_value (struct gdbarch *gdbarch, + gdbarch_deprecated_extract_return_value_ftype deprecated_extract_return_value) +{ + gdbarch->deprecated_extract_return_value = deprecated_extract_return_value; +} + +void +gdbarch_deprecated_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->deprecated_store_return_value == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_deprecated_store_return_value invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_store_return_value called\n"); + gdbarch->deprecated_store_return_value (type, valbuf); +} + +void +set_gdbarch_deprecated_store_return_value (struct gdbarch *gdbarch, + gdbarch_deprecated_store_return_value_ftype deprecated_store_return_value) +{ + gdbarch->deprecated_store_return_value = deprecated_store_return_value; +} + int gdbarch_extract_struct_value_address_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->extract_struct_value_address != 0; } CORE_ADDR -gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, char *regbuf) +gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, struct regcache *regcache) { + gdb_assert (gdbarch != NULL); if (gdbarch->extract_struct_value_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_extract_struct_value_address invalid"); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_extract_struct_value_address called\n"); - return gdbarch->extract_struct_value_address (regbuf); + return gdbarch->extract_struct_value_address (regcache); } void @@ -3715,9 +4103,36 @@ set_gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch->extract_struct_value_address = extract_struct_value_address; } +int +gdbarch_deprecated_extract_struct_value_address_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->deprecated_extract_struct_value_address != 0; +} + +CORE_ADDR +gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, char *regbuf) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->deprecated_extract_struct_value_address == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_deprecated_extract_struct_value_address invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_extract_struct_value_address called\n"); + return gdbarch->deprecated_extract_struct_value_address (regbuf); +} + +void +set_gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, + gdbarch_deprecated_extract_struct_value_address_ftype deprecated_extract_struct_value_address) +{ + gdbarch->deprecated_extract_struct_value_address = deprecated_extract_struct_value_address; +} + int gdbarch_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type) { + gdb_assert (gdbarch != NULL); if (gdbarch->use_struct_convention == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_use_struct_convention invalid"); @@ -3736,6 +4151,7 @@ set_gdbarch_use_struct_convention (struct gdbarch *gdbarch, void gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, struct frame_info *frame) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_init_saved_regs == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_init_saved_regs invalid"); @@ -3754,12 +4170,14 @@ set_gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, int gdbarch_init_extra_frame_info_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->init_extra_frame_info != 0; } void gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame) { + gdb_assert (gdbarch != NULL); if (gdbarch->init_extra_frame_info == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_init_extra_frame_info invalid"); @@ -3778,6 +4196,7 @@ set_gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip) { + gdb_assert (gdbarch != NULL); if (gdbarch->skip_prologue == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_skip_prologue invalid"); @@ -3796,6 +4215,7 @@ set_gdbarch_skip_prologue (struct gdbarch *gdbarch, int gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, CORE_ADDR ip) { + gdb_assert (gdbarch != NULL); if (gdbarch->prologue_frameless_p == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_prologue_frameless_p invalid"); @@ -3814,6 +4234,7 @@ set_gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs) { + gdb_assert (gdbarch != NULL); if (gdbarch->inner_than == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_inner_than invalid"); @@ -3829,9 +4250,10 @@ set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch->inner_than = inner_than; } -unsigned char * +const unsigned char * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr) { + gdb_assert (gdbarch != NULL); if (gdbarch->breakpoint_from_pc == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_breakpoint_from_pc invalid"); @@ -3850,6 +4272,7 @@ set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache) { + gdb_assert (gdbarch != NULL); if (gdbarch->memory_insert_breakpoint == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_memory_insert_breakpoint invalid"); @@ -3868,6 +4291,7 @@ set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache) { + gdb_assert (gdbarch != NULL); if (gdbarch->memory_remove_breakpoint == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_memory_remove_breakpoint invalid"); @@ -3886,6 +4310,7 @@ set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->decr_pc_after_break == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_decr_pc_after_break invalid"); @@ -3904,6 +4329,7 @@ set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, int gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, int select_it) { + gdb_assert (gdbarch != NULL); if (gdbarch->prepare_to_proceed == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_prepare_to_proceed invalid"); @@ -3922,6 +4348,7 @@ set_gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->function_start_offset == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_function_start_offset invalid"); @@ -3940,6 +4367,7 @@ set_gdbarch_function_start_offset (struct gdbarch *gdbarch, void gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len) { + gdb_assert (gdbarch != NULL); if (gdbarch->remote_translate_xfer_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_remote_translate_xfer_address invalid"); @@ -3958,6 +4386,7 @@ set_gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_args_skip == -1) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_args_skip invalid"); @@ -3976,6 +4405,7 @@ set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, int gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, struct frame_info *fi) { + gdb_assert (gdbarch != NULL); if (gdbarch->frameless_function_invocation == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frameless_function_invocation invalid"); @@ -3994,6 +4424,7 @@ set_gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, CORE_ADDR gdbarch_frame_chain (struct gdbarch *gdbarch, struct frame_info *frame) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_chain == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_chain invalid"); @@ -4012,6 +4443,7 @@ set_gdbarch_frame_chain (struct gdbarch *gdbarch, int gdbarch_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_chain_valid == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_chain_valid invalid"); @@ -4030,6 +4462,7 @@ set_gdbarch_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR gdbarch_frame_saved_pc (struct gdbarch *gdbarch, struct frame_info *fi) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_saved_pc == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_saved_pc invalid"); @@ -4048,6 +4481,7 @@ set_gdbarch_frame_saved_pc (struct gdbarch *gdbarch, CORE_ADDR gdbarch_frame_args_address (struct gdbarch *gdbarch, struct frame_info *fi) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_args_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_args_address invalid"); @@ -4066,6 +4500,7 @@ set_gdbarch_frame_args_address (struct gdbarch *gdbarch, CORE_ADDR gdbarch_frame_locals_address (struct gdbarch *gdbarch, struct frame_info *fi) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_locals_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_locals_address invalid"); @@ -4084,6 +4519,7 @@ set_gdbarch_frame_locals_address (struct gdbarch *gdbarch, CORE_ADDR gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame) { + gdb_assert (gdbarch != NULL); if (gdbarch->saved_pc_after_call == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_saved_pc_after_call invalid"); @@ -4102,6 +4538,7 @@ set_gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame) { + gdb_assert (gdbarch != NULL); if (gdbarch->frame_num_args == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_frame_num_args invalid"); @@ -4120,12 +4557,14 @@ set_gdbarch_frame_num_args (struct gdbarch *gdbarch, int gdbarch_stack_align_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->stack_align != 0; } CORE_ADDR gdbarch_stack_align (struct gdbarch *gdbarch, CORE_ADDR sp) { + gdb_assert (gdbarch != NULL); if (gdbarch->stack_align == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_stack_align invalid"); @@ -4141,9 +4580,36 @@ set_gdbarch_stack_align (struct gdbarch *gdbarch, gdbarch->stack_align = stack_align; } +int +gdbarch_frame_align_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->frame_align != 0; +} + +CORE_ADDR +gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->frame_align == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_frame_align invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_align called\n"); + return gdbarch->frame_align (gdbarch, address); +} + +void +set_gdbarch_frame_align (struct gdbarch *gdbarch, + gdbarch_frame_align_ftype frame_align) +{ + gdbarch->frame_align = frame_align; +} + int gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); /* Skip verify of extra_stack_alignment_needed, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_extra_stack_alignment_needed called\n"); @@ -4160,12 +4626,14 @@ set_gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch, int gdbarch_reg_struct_has_addr_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->reg_struct_has_addr != 0; } int gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type) { + gdb_assert (gdbarch != NULL); if (gdbarch->reg_struct_has_addr == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_reg_struct_has_addr invalid"); @@ -4184,12 +4652,14 @@ set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, int gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->save_dummy_frame_tos != 0; } void gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp) { + gdb_assert (gdbarch != NULL); if (gdbarch->save_dummy_frame_tos == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_save_dummy_frame_tos invalid"); @@ -4208,6 +4678,7 @@ set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, int gdbarch_parm_boundary (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_parm_boundary called\n"); return gdbarch->parm_boundary; @@ -4223,6 +4694,7 @@ set_gdbarch_parm_boundary (struct gdbarch *gdbarch, const struct floatformat * gdbarch_float_format (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_float_format called\n"); return gdbarch->float_format; @@ -4238,6 +4710,7 @@ set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat * gdbarch_double_format (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_double_format called\n"); return gdbarch->double_format; @@ -4253,6 +4726,7 @@ set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat * gdbarch_long_double_format (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_format called\n"); return gdbarch->long_double_format; @@ -4268,6 +4742,7 @@ set_gdbarch_long_double_format (struct gdbarch *gdbarch, CORE_ADDR gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->convert_from_func_ptr_addr == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_convert_from_func_ptr_addr invalid"); @@ -4286,6 +4761,7 @@ set_gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->addr_bits_remove == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_addr_bits_remove invalid"); @@ -4304,6 +4780,7 @@ set_gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR gdbarch_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->smash_text_address == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_smash_text_address invalid"); @@ -4322,12 +4799,14 @@ set_gdbarch_smash_text_address (struct gdbarch *gdbarch, int gdbarch_software_single_step_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->software_single_step != 0; } void gdbarch_software_single_step (struct gdbarch *gdbarch, enum target_signal sig, int insert_breakpoints_p) { + gdb_assert (gdbarch != NULL); if (gdbarch->software_single_step == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_software_single_step invalid"); @@ -4346,6 +4825,7 @@ set_gdbarch_software_single_step (struct gdbarch *gdbarch, int gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, disassemble_info *info) { + gdb_assert (gdbarch != NULL); if (gdbarch->print_insn == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_print_insn invalid"); @@ -4364,6 +4844,7 @@ set_gdbarch_print_insn (struct gdbarch *gdbarch, CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc) { + gdb_assert (gdbarch != NULL); if (gdbarch->skip_trampoline_code == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_skip_trampoline_code invalid"); @@ -4382,6 +4863,7 @@ set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, int gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name) { + gdb_assert (gdbarch != NULL); if (gdbarch->in_solib_call_trampoline == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_in_solib_call_trampoline invalid"); @@ -4397,9 +4879,100 @@ set_gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, gdbarch->in_solib_call_trampoline = in_solib_call_trampoline; } +int +gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->in_solib_return_trampoline == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_in_solib_return_trampoline invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_in_solib_return_trampoline called\n"); + return gdbarch->in_solib_return_trampoline (pc, name); +} + +void +set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, + gdbarch_in_solib_return_trampoline_ftype in_solib_return_trampoline) +{ + gdbarch->in_solib_return_trampoline = in_solib_return_trampoline; +} + +int +gdbarch_pc_in_sigtramp (struct gdbarch *gdbarch, CORE_ADDR pc, char *name) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->pc_in_sigtramp == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_pc_in_sigtramp invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_pc_in_sigtramp called\n"); + return gdbarch->pc_in_sigtramp (pc, name); +} + +void +set_gdbarch_pc_in_sigtramp (struct gdbarch *gdbarch, + gdbarch_pc_in_sigtramp_ftype pc_in_sigtramp) +{ + gdbarch->pc_in_sigtramp = pc_in_sigtramp; +} + +int +gdbarch_sigtramp_start_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->sigtramp_start != 0; +} + +CORE_ADDR +gdbarch_sigtramp_start (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->sigtramp_start == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_sigtramp_start invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_sigtramp_start called\n"); + return gdbarch->sigtramp_start (pc); +} + +void +set_gdbarch_sigtramp_start (struct gdbarch *gdbarch, + gdbarch_sigtramp_start_ftype sigtramp_start) +{ + gdbarch->sigtramp_start = sigtramp_start; +} + +int +gdbarch_sigtramp_end_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->sigtramp_end != 0; +} + +CORE_ADDR +gdbarch_sigtramp_end (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->sigtramp_end == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_sigtramp_end invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_sigtramp_end called\n"); + return gdbarch->sigtramp_end (pc); +} + +void +set_gdbarch_sigtramp_end (struct gdbarch *gdbarch, + gdbarch_sigtramp_end_ftype sigtramp_end) +{ + gdbarch->sigtramp_end = sigtramp_end; +} + int gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr) { + gdb_assert (gdbarch != NULL); if (gdbarch->in_function_epilogue_p == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_in_function_epilogue_p invalid"); @@ -4418,6 +4991,7 @@ set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, char * gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv) { + gdb_assert (gdbarch != NULL); if (gdbarch->construct_inferior_arguments == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_construct_inferior_arguments invalid"); @@ -4436,12 +5010,14 @@ set_gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int gdbarch_dwarf2_build_frame_info_p (struct gdbarch *gdbarch) { + gdb_assert (gdbarch != NULL); return gdbarch->dwarf2_build_frame_info != 0; } void gdbarch_dwarf2_build_frame_info (struct gdbarch *gdbarch, struct objfile *objfile) { + gdb_assert (gdbarch != NULL); if (gdbarch->dwarf2_build_frame_info == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_dwarf2_build_frame_info invalid"); @@ -4460,6 +5036,7 @@ set_gdbarch_dwarf2_build_frame_info (struct gdbarch *gdbarch, void gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym) { + gdb_assert (gdbarch != NULL); if (gdbarch->elf_make_msymbol_special == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_elf_make_msymbol_special invalid"); @@ -4478,6 +5055,7 @@ set_gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, void gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct minimal_symbol *msym) { + gdb_assert (gdbarch != NULL); if (gdbarch->coff_make_msymbol_special == 0) internal_error (__FILE__, __LINE__, "gdbarch: gdbarch_coff_make_msymbol_special invalid"); @@ -4493,6 +5071,135 @@ set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, gdbarch->coff_make_msymbol_special = coff_make_msymbol_special; } +const char * +gdbarch_name_of_malloc (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of name_of_malloc, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_name_of_malloc called\n"); + return gdbarch->name_of_malloc; +} + +void +set_gdbarch_name_of_malloc (struct gdbarch *gdbarch, + const char * name_of_malloc) +{ + gdbarch->name_of_malloc = name_of_malloc; +} + +int +gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of cannot_step_breakpoint, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_step_breakpoint called\n"); + return gdbarch->cannot_step_breakpoint; +} + +void +set_gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch, + int cannot_step_breakpoint) +{ + gdbarch->cannot_step_breakpoint = cannot_step_breakpoint; +} + +int +gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_have_nonsteppable_watchpoint called\n"); + return gdbarch->have_nonsteppable_watchpoint; +} + +void +set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch, + int have_nonsteppable_watchpoint) +{ + gdbarch->have_nonsteppable_watchpoint = have_nonsteppable_watchpoint; +} + +int +gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->address_class_type_flags != 0; +} + +int +gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->address_class_type_flags == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_address_class_type_flags invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags called\n"); + return gdbarch->address_class_type_flags (byte_size, dwarf2_addr_class); +} + +void +set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, + gdbarch_address_class_type_flags_ftype address_class_type_flags) +{ + gdbarch->address_class_type_flags = address_class_type_flags; +} + +int +gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->address_class_type_flags_to_name != 0; +} + +char * +gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->address_class_type_flags_to_name == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_address_class_type_flags_to_name invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags_to_name called\n"); + return gdbarch->address_class_type_flags_to_name (type_flags); +} + +void +set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, + gdbarch_address_class_type_flags_to_name_ftype address_class_type_flags_to_name) +{ + gdbarch->address_class_type_flags_to_name = address_class_type_flags_to_name; +} + +int +gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->address_class_name_to_type_flags != 0; +} + +int +gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, char *name, int *type_flags_ptr) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch->address_class_name_to_type_flags == 0) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_address_class_name_to_type_flags invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_name_to_type_flags called\n"); + return gdbarch->address_class_name_to_type_flags (name, type_flags_ptr); +} + +void +set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, + gdbarch_address_class_name_to_type_flags_ftype address_class_name_to_type_flags) +{ + gdbarch->address_class_name_to_type_flags = address_class_name_to_type_flags; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ @@ -4500,6 +5207,7 @@ set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, struct gdbarch_data { unsigned index; + int init_p; gdbarch_data_init_ftype *init; gdbarch_data_free_ftype *free; }; @@ -4526,6 +5234,7 @@ register_gdbarch_data (gdbarch_data_init_ftype *init, gdbarch_data_free_ftype *free) { struct gdbarch_data_registration **curr; + /* Append the new registraration. */ for (curr = &gdbarch_data_registry.registrations; (*curr) != NULL; curr = &(*curr)->next); @@ -4534,31 +5243,12 @@ register_gdbarch_data (gdbarch_data_init_ftype *init, (*curr)->data = XMALLOC (struct gdbarch_data); (*curr)->data->index = gdbarch_data_registry.nr++; (*curr)->data->init = init; + (*curr)->data->init_p = 1; (*curr)->data->free = free; return (*curr)->data; } -/* Walk through all the registered users initializing each in turn. */ - -static void -init_gdbarch_data (struct gdbarch *gdbarch) -{ - struct gdbarch_data_registration *rego; - for (rego = gdbarch_data_registry.registrations; - rego != NULL; - rego = rego->next) - { - struct gdbarch_data *data = rego->data; - gdb_assert (data->index < gdbarch->nr_data); - if (data->init != NULL) - { - void *pointer = data->init (gdbarch); - set_gdbarch_data (gdbarch, data, pointer); - } - } -} - /* Create/delete the gdbarch data vector. */ static void @@ -4591,7 +5281,7 @@ free_gdbarch_data (struct gdbarch *gdbarch) } -/* Initialize the current value of thee specified per-architecture +/* Initialize the current value of the specified per-architecture data-pointer. */ void @@ -4600,8 +5290,11 @@ set_gdbarch_data (struct gdbarch *gdbarch, void *pointer) { gdb_assert (data->index < gdbarch->nr_data); - if (data->free != NULL && gdbarch->data[data->index] != NULL) - data->free (gdbarch, gdbarch->data[data->index]); + if (gdbarch->data[data->index] != NULL) + { + gdb_assert (data->free != NULL); + data->free (gdbarch, gdbarch->data[data->index]); + } gdbarch->data[data->index] = pointer; } @@ -4609,10 +5302,24 @@ set_gdbarch_data (struct gdbarch *gdbarch, data-pointer. */ void * -gdbarch_data (struct gdbarch_data *data) +gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data) { - gdb_assert (data->index < current_gdbarch->nr_data); - return current_gdbarch->data[data->index]; + gdb_assert (data->index < gdbarch->nr_data); + /* The data-pointer isn't initialized, call init() to get a value but + only if the architecture initializaiton has completed. Otherwise + punt - hope that the caller knows what they are doing. */ + if (gdbarch->data[data->index] == NULL + && gdbarch->initialized_p) + { + /* Be careful to detect an initialization cycle. */ + gdb_assert (data->init_p); + data->init_p = 0; + gdb_assert (data->init != NULL); + gdbarch->data[data->index] = data->init (gdbarch); + data->init_p = 1; + gdb_assert (gdbarch->data[data->index] != NULL); + } + return gdbarch->data[data->index]; } @@ -4661,6 +5368,17 @@ register_gdbarch_swap (void *data, (*rego)->sizeof_data = sizeof_data; } +static void +clear_gdbarch_swap (struct gdbarch *gdbarch) +{ + struct gdbarch_swap *curr; + for (curr = gdbarch->swap; + curr != NULL; + curr = curr->next) + { + memset (curr->source->data, 0, curr->source->sizeof_data); + } +} static void init_gdbarch_swap (struct gdbarch *gdbarch) @@ -4677,7 +5395,6 @@ init_gdbarch_swap (struct gdbarch *gdbarch) (*curr)->source = rego; (*curr)->swap = xmalloc (rego->sizeof_data); (*curr)->next = NULL; - memset (rego->data, 0, rego->sizeof_data); curr = &(*curr)->next; } if (rego->init != NULL) @@ -4843,7 +5560,7 @@ int gdbarch_update_p (struct gdbarch_info info) { struct gdbarch *new_gdbarch; - struct gdbarch_list **list; + struct gdbarch *old_gdbarch; struct gdbarch_registration *rego; /* Fill in missing parts of the INFO struct using a number of @@ -4912,56 +5629,92 @@ gdbarch_update_p (struct gdbarch_info info) return 0; } + /* Swap the data belonging to the old target out setting the + installed data to zero. This stops the ->init() function trying + to refer to the previous architecture's global data structures. */ + swapout_gdbarch_swap (current_gdbarch); + clear_gdbarch_swap (current_gdbarch); + + /* Save the previously selected architecture, setting the global to + NULL. This stops ->init() trying to use the previous + architecture's configuration. The previous architecture may not + even be of the same architecture family. The most recent + architecture of the same family is found at the head of the + rego->arches list. */ + old_gdbarch = current_gdbarch; + current_gdbarch = NULL; + /* Ask the target for a replacement architecture. */ new_gdbarch = rego->init (info, rego->arches); - /* Did the target like it? No. Reject the change. */ + /* Did the target like it? No. Reject the change and revert to the + old architecture. */ if (new_gdbarch == NULL) { if (gdbarch_debug) fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\n"); + swapin_gdbarch_swap (old_gdbarch); + current_gdbarch = old_gdbarch; return 0; } - /* Did the architecture change? No. Do nothing. */ - if (current_gdbarch == new_gdbarch) + /* Did the architecture change? No. Oops, put the old architecture + back. */ + if (old_gdbarch == new_gdbarch) { if (gdbarch_debug) fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\n", (long) new_gdbarch, new_gdbarch->bfd_arch_info->printable_name); + swapin_gdbarch_swap (old_gdbarch); + current_gdbarch = old_gdbarch; return 1; } - /* Swap all data belonging to the old target out */ - swapout_gdbarch_swap (current_gdbarch); - - /* Is this a pre-existing architecture? Yes. Swap it in. */ - for (list = ®o->arches; - (*list) != NULL; - list = &(*list)->next) - { - if ((*list)->gdbarch == new_gdbarch) - { - if (gdbarch_debug) - fprintf_unfiltered (gdb_stdlog, - "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n", - (long) new_gdbarch, - new_gdbarch->bfd_arch_info->printable_name); - current_gdbarch = new_gdbarch; - swapin_gdbarch_swap (new_gdbarch); - architecture_changed_event (); - return 1; - } - } - - /* Append this new architecture to this targets list. */ - (*list) = XMALLOC (struct gdbarch_list); - (*list)->next = NULL; - (*list)->gdbarch = new_gdbarch; - - /* Switch to this new architecture. Dump it out. */ + /* Is this a pre-existing architecture? Yes. Move it to the front + of the list of architectures (keeping the list sorted Most + Recently Used) and then copy it in. */ + { + struct gdbarch_list **list; + for (list = ®o->arches; + (*list) != NULL; + list = &(*list)->next) + { + if ((*list)->gdbarch == new_gdbarch) + { + struct gdbarch_list *this; + if (gdbarch_debug) + fprintf_unfiltered (gdb_stdlog, + "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n", + (long) new_gdbarch, + new_gdbarch->bfd_arch_info->printable_name); + /* Unlink this. */ + this = (*list); + (*list) = this->next; + /* Insert in the front. */ + this->next = rego->arches; + rego->arches = this; + /* Copy the new architecture in. */ + current_gdbarch = new_gdbarch; + swapin_gdbarch_swap (new_gdbarch); + architecture_changed_event (); + return 1; + } + } + } + + /* Prepend this new architecture to the architecture list (keep the + list sorted Most Recently Used). */ + { + struct gdbarch_list *this = XMALLOC (struct gdbarch_list); + this->next = rego->arches; + this->gdbarch = new_gdbarch; + rego->arches = this; + } + + /* Switch to this new architecture marking it initialized. */ current_gdbarch = new_gdbarch; + current_gdbarch->initialized_p = 1; if (gdbarch_debug) { fprintf_unfiltered (gdb_stdlog, @@ -4980,10 +5733,8 @@ gdbarch_update_p (struct gdbarch_info info) called. */ init_gdbarch_swap (new_gdbarch); - /* Initialize the per-architecture data-pointer of all parties that - registered an interest in this architecture. CURRENT_GDBARCH + /* Initialize the per-architecture data. CURRENT_GDBARCH must be updated before these modules are called. */ - init_gdbarch_data (new_gdbarch); architecture_changed_event (); if (gdbarch_debug)