X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fgdbarch.c;h=e7d4ccca9e7d6ebaa0a4dc37add2929ad2026613;hb=a4425a57c7ad127b30cdfe271c870d5c8ebcfad7;hp=dd7c89d94802ce0218eee2b581553ce4d9cc5d86;hpb=2b4424c35b9ebabaab8588b2ba6c38935a48efec;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index dd7c89d948..e7d4ccca9e 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -3,7 +3,7 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2018 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -48,6 +48,8 @@ #include "regcache.h" #include "objfiles.h" #include "auxv.h" +#include "frame-unwind.h" +#include "dummy-frame.h" /* Static function declarations */ @@ -170,12 +172,10 @@ struct gdbarch */ - int bits_big_endian; int short_bit; int int_bit; int long_bit; int long_long_bit; - int long_long_align_bit; int half_bit; const struct floatformat ** half_format; int float_bit; @@ -250,6 +250,7 @@ struct gdbarch CORE_ADDR deprecated_function_start_offset; gdbarch_remote_register_number_ftype *remote_register_number; gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address; + gdbarch_get_thread_local_address_ftype *get_thread_local_address; CORE_ADDR frame_args_skip; gdbarch_unwind_pc_ftype *unwind_pc; gdbarch_unwind_sp_ftype *unwind_sp; @@ -322,6 +323,7 @@ struct gdbarch const char * stap_gdb_register_suffix; gdbarch_stap_is_single_operand_ftype *stap_is_single_operand; gdbarch_stap_parse_special_token_ftype *stap_parse_special_token; + gdbarch_stap_adjust_register_ftype *stap_adjust_register; gdbarch_dtrace_parse_probe_argument_ftype *dtrace_parse_probe_argument; gdbarch_dtrace_probe_is_enabled_ftype *dtrace_probe_is_enabled; gdbarch_dtrace_enable_probe_ftype *dtrace_enable_probe; @@ -343,6 +345,7 @@ struct gdbarch gdbarch_insn_is_call_ftype *insn_is_call; gdbarch_insn_is_ret_ftype *insn_is_ret; gdbarch_insn_is_jump_ftype *insn_is_jump; + gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p; gdbarch_auxv_parse_ftype *auxv_parse; gdbarch_print_auxv_entry_ftype *print_auxv_entry; gdbarch_vsyscall_range_ftype *vsyscall_range; @@ -351,9 +354,11 @@ struct gdbarch gdbarch_gcc_target_options_ftype *gcc_target_options; gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp; gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size; + const char * disassembler_options_implicit; char ** disassembler_options; - const disasm_options_t * valid_disassembler_options; + const disasm_options_and_args_t * valid_disassembler_options; gdbarch_type_align_ftype *type_align; + gdbarch_get_pc_address_flags_ftype *get_pc_address_flags; }; /* Create a new ``struct gdbarch'' based on information provided by @@ -384,12 +389,10 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->target_desc = info->target_desc; /* Force the explicit initialization of these. */ - gdbarch->bits_big_endian = (gdbarch->byte_order == BFD_ENDIAN_BIG); gdbarch->short_bit = 2*TARGET_CHAR_BIT; gdbarch->int_bit = 4*TARGET_CHAR_BIT; gdbarch->long_bit = 4*TARGET_CHAR_BIT; gdbarch->long_long_bit = 2*gdbarch->long_bit; - gdbarch->long_long_align_bit = 2*gdbarch->long_bit; gdbarch->half_bit = 2*TARGET_CHAR_BIT; gdbarch->float_bit = 4*TARGET_CHAR_BIT; gdbarch->double_bit = 8*TARGET_CHAR_BIT; @@ -409,6 +412,7 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum; gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum; gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum; + gdbarch->dummy_id = default_dummy_id; gdbarch->deprecated_fp_regnum = -1; gdbarch->call_dummy_location = AT_ENTRY_POINT; gdbarch->code_of_frame_writable = default_code_of_frame_writable; @@ -428,6 +432,8 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint; gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint; gdbarch->remote_register_number = default_remote_register_number; + gdbarch->unwind_pc = default_unwind_pc; + gdbarch->unwind_sp = default_unwind_sp; gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr; gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity; gdbarch->addr_bits_remove = core_addr_identity; @@ -459,6 +465,7 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->insn_is_call = default_insn_is_call; gdbarch->insn_is_ret = default_insn_is_ret; gdbarch->insn_is_jump = default_insn_is_jump; + gdbarch->program_breakpoint_here_p = default_program_breakpoint_here_p; gdbarch->print_auxv_entry = default_print_auxv_entry; gdbarch->vsyscall_range = default_vsyscall_range; gdbarch->infcall_mmap = default_infcall_mmap; @@ -467,21 +474,17 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->gnu_triplet_regexp = default_gnu_triplet_regexp; gdbarch->addressable_memory_unit_size = default_addressable_memory_unit_size; gdbarch->type_align = default_type_align; + gdbarch->get_pc_address_flags = default_get_pc_address_flags; /* gdbarch_alloc() */ return gdbarch; } -/* Allocate extra space using the per-architecture obstack. */ -void * -gdbarch_obstack_zalloc (struct gdbarch *arch, long size) +obstack *gdbarch_obstack (gdbarch *arch) { - void *data = obstack_alloc (arch->obstack, size); - - memset (data, 0, size); - return data; + return arch->obstack; } /* See gdbarch.h. */ @@ -525,12 +528,10 @@ verify_gdbarch (struct gdbarch *gdbarch) if (gdbarch->bfd_arch_info == NULL) log.puts ("\n\tbfd_arch_info"); /* Check those that need to be defined for the given multi-arch level. */ - /* Skip verify of bits_big_endian, invalid_p == 0 */ /* Skip verify of short_bit, invalid_p == 0 */ /* Skip verify of int_bit, invalid_p == 0 */ /* Skip verify of long_bit, invalid_p == 0 */ /* Skip verify of long_long_bit, invalid_p == 0 */ - /* Skip verify of long_long_align_bit, invalid_p == 0 */ /* Skip verify of half_bit, invalid_p == 0 */ if (gdbarch->half_format == 0) gdbarch->half_format = floatformats_ieee_half; @@ -577,7 +578,7 @@ verify_gdbarch (struct gdbarch *gdbarch) if (gdbarch->register_name == 0) log.puts ("\n\tregister_name"); /* Skip verify of register_type, has predicate. */ - /* Skip verify of dummy_id, has predicate. */ + /* Skip verify of dummy_id, invalid_p == 0 */ /* Skip verify of deprecated_fp_regnum, invalid_p == 0 */ /* Skip verify of push_dummy_call, has predicate. */ /* Skip verify of call_dummy_location, invalid_p == 0 */ @@ -615,16 +616,16 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of deprecated_function_start_offset, invalid_p == 0 */ /* Skip verify of remote_register_number, invalid_p == 0 */ /* Skip verify of fetch_tls_load_module_address, has predicate. */ + /* Skip verify of get_thread_local_address, has predicate. */ /* Skip verify of frame_args_skip, invalid_p == 0 */ - /* Skip verify of unwind_pc, has predicate. */ - /* Skip verify of unwind_sp, has predicate. */ + /* Skip verify of unwind_pc, invalid_p == 0 */ + /* Skip verify of unwind_sp, invalid_p == 0 */ /* Skip verify of frame_num_args, has predicate. */ /* Skip verify of frame_align, has predicate. */ /* Skip verify of stabs_argument_has_addr, invalid_p == 0 */ /* Skip verify of convert_from_func_ptr_addr, invalid_p == 0 */ /* Skip verify of addr_bits_remove, invalid_p == 0 */ - if (gdbarch->significant_addr_bit == 0) - gdbarch->significant_addr_bit = gdbarch_addr_bit (gdbarch); + /* Skip verify of significant_addr_bit, invalid_p == 0 */ /* Skip verify of software_single_step, has predicate. */ /* Skip verify of single_step_through_delay, has predicate. */ /* Skip verify of print_insn, invalid_p == 0 */ @@ -688,6 +689,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of stap_gdb_register_suffix, invalid_p == 0 */ /* Skip verify of stap_is_single_operand, has predicate. */ /* Skip verify of stap_parse_special_token, has predicate. */ + /* Skip verify of stap_adjust_register, has predicate. */ /* Skip verify of dtrace_parse_probe_argument, has predicate. */ /* Skip verify of dtrace_probe_is_enabled, has predicate. */ /* Skip verify of dtrace_enable_probe, has predicate. */ @@ -708,6 +710,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of insn_is_call, invalid_p == 0 */ /* Skip verify of insn_is_ret, invalid_p == 0 */ /* Skip verify of insn_is_jump, invalid_p == 0 */ + /* Skip verify of program_breakpoint_here_p, invalid_p == 0 */ /* Skip verify of auxv_parse, has predicate. */ /* Skip verify of print_auxv_entry, invalid_p == 0 */ /* Skip verify of vsyscall_range, invalid_p == 0 */ @@ -716,9 +719,11 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of gcc_target_options, invalid_p == 0 */ /* Skip verify of gnu_triplet_regexp, invalid_p == 0 */ /* Skip verify of addressable_memory_unit_size, invalid_p == 0 */ + /* Skip verify of disassembler_options_implicit, invalid_p == 0 */ /* Skip verify of disassembler_options, invalid_p == 0 */ /* Skip verify of valid_disassembler_options, invalid_p == 0 */ /* Skip verify of type_align, invalid_p == 0 */ + /* Skip verify of get_pc_address_flags, invalid_p == 0 */ if (!log.empty ()) internal_error (__FILE__, __LINE__, _("verify_gdbarch: the following are invalid ...%s"), @@ -811,9 +816,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: bfd_arch_info = %s\n", gdbarch_bfd_arch_info (gdbarch)->printable_name); - fprintf_unfiltered (file, - "gdbarch_dump: bits_big_endian = %s\n", - plongest (gdbarch->bits_big_endian)); fprintf_unfiltered (file, "gdbarch_dump: breakpoint_from_pc = <%s>\n", host_address_to_string (gdbarch->breakpoint_from_pc)); @@ -910,6 +912,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: disassembler_options = %s\n", pstring_ptr (gdbarch->disassembler_options)); + fprintf_unfiltered (file, + "gdbarch_dump: disassembler_options_implicit = %s\n", + pstring (gdbarch->disassembler_options_implicit)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_displaced_step_copy_insn_p() = %d\n", gdbarch_displaced_step_copy_insn_p (gdbarch)); @@ -958,9 +963,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: dtrace_probe_is_enabled = <%s>\n", host_address_to_string (gdbarch->dtrace_probe_is_enabled)); - fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_dummy_id_p() = %d\n", - gdbarch_dummy_id_p (gdbarch)); fprintf_unfiltered (file, "gdbarch_dump: dummy_id = <%s>\n", host_address_to_string (gdbarch->dummy_id)); @@ -1063,6 +1065,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: get_longjmp_target = <%s>\n", host_address_to_string (gdbarch->get_longjmp_target)); + fprintf_unfiltered (file, + "gdbarch_dump: get_pc_address_flags = <%s>\n", + host_address_to_string (gdbarch->get_pc_address_flags)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_get_siginfo_type_p() = %d\n", gdbarch_get_siginfo_type_p (gdbarch)); @@ -1075,6 +1080,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: get_syscall_number = <%s>\n", host_address_to_string (gdbarch->get_syscall_number)); + fprintf_unfiltered (file, + "gdbarch_dump: gdbarch_get_thread_local_address_p() = %d\n", + gdbarch_get_thread_local_address_p (gdbarch)); + fprintf_unfiltered (file, + "gdbarch_dump: get_thread_local_address = <%s>\n", + host_address_to_string (gdbarch->get_thread_local_address)); fprintf_unfiltered (file, "gdbarch_dump: gnu_triplet_regexp = <%s>\n", host_address_to_string (gdbarch->gnu_triplet_regexp)); @@ -1165,9 +1176,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: long_double_format = %s\n", pformat (gdbarch->long_double_format)); - fprintf_unfiltered (file, - "gdbarch_dump: long_long_align_bit = %s\n", - plongest (gdbarch->long_long_align_bit)); fprintf_unfiltered (file, "gdbarch_dump: long_long_bit = %s\n", plongest (gdbarch->long_long_bit)); @@ -1243,6 +1251,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: process_record_signal = <%s>\n", host_address_to_string (gdbarch->process_record_signal)); + fprintf_unfiltered (file, + "gdbarch_dump: program_breakpoint_here_p = <%s>\n", + host_address_to_string (gdbarch->program_breakpoint_here_p)); fprintf_unfiltered (file, "gdbarch_dump: ps_regnum = %s\n", plongest (gdbarch->ps_regnum)); @@ -1393,6 +1404,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: stack_frame_destroyed_p = <%s>\n", host_address_to_string (gdbarch->stack_frame_destroyed_p)); + fprintf_unfiltered (file, + "gdbarch_dump: gdbarch_stap_adjust_register_p() = %d\n", + gdbarch_stap_adjust_register_p (gdbarch)); + fprintf_unfiltered (file, + "gdbarch_dump: stap_adjust_register = <%s>\n", + host_address_to_string (gdbarch->stap_adjust_register)); fprintf_unfiltered (file, "gdbarch_dump: stap_gdb_register_prefix = %s\n", pstring (gdbarch->stap_gdb_register_prefix)); @@ -1447,15 +1464,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: type_align = <%s>\n", host_address_to_string (gdbarch->type_align)); - fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_unwind_pc_p() = %d\n", - gdbarch_unwind_pc_p (gdbarch)); fprintf_unfiltered (file, "gdbarch_dump: unwind_pc = <%s>\n", host_address_to_string (gdbarch->unwind_pc)); - fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_unwind_sp_p() = %d\n", - gdbarch_unwind_sp_p (gdbarch)); fprintf_unfiltered (file, "gdbarch_dump: unwind_sp = <%s>\n", host_address_to_string (gdbarch->unwind_sp)); @@ -1553,23 +1564,6 @@ gdbarch_target_desc (struct gdbarch *gdbarch) return gdbarch->target_desc; } -int -gdbarch_bits_big_endian (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - /* Skip verify of bits_big_endian, invalid_p == 0 */ - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_bits_big_endian called\n"); - return gdbarch->bits_big_endian; -} - -void -set_gdbarch_bits_big_endian (struct gdbarch *gdbarch, - int bits_big_endian) -{ - gdbarch->bits_big_endian = bits_big_endian; -} - int gdbarch_short_bit (struct gdbarch *gdbarch) { @@ -1638,23 +1632,6 @@ set_gdbarch_long_long_bit (struct gdbarch *gdbarch, gdbarch->long_long_bit = long_long_bit; } -int -gdbarch_long_long_align_bit (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - /* Skip verify of long_long_align_bit, invalid_p == 0 */ - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_long_long_align_bit called\n"); - return gdbarch->long_long_align_bit; -} - -void -set_gdbarch_long_long_align_bit (struct gdbarch *gdbarch, - int long_long_align_bit) -{ - gdbarch->long_long_align_bit = long_long_align_bit; -} - int gdbarch_half_bit (struct gdbarch *gdbarch) { @@ -2331,13 +2308,6 @@ set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch->register_type = register_type; } -int -gdbarch_dummy_id_p (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - return gdbarch->dummy_id != NULL; -} - struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame) { @@ -2380,13 +2350,13 @@ gdbarch_push_dummy_call_p (struct gdbarch *gdbarch) } CORE_ADDR -gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) +gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->push_dummy_call != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_push_dummy_call called\n"); - return gdbarch->push_dummy_call (gdbarch, function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr); + return gdbarch->push_dummy_call (gdbarch, function, regcache, bp_addr, nargs, args, sp, return_method, struct_addr); } void @@ -3053,6 +3023,30 @@ set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, gdbarch->fetch_tls_load_module_address = fetch_tls_load_module_address; } +int +gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->get_thread_local_address != NULL; +} + +CORE_ADDR +gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->get_thread_local_address != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_get_thread_local_address called\n"); + return gdbarch->get_thread_local_address (gdbarch, ptid, lm_addr, offset); +} + +void +set_gdbarch_get_thread_local_address (struct gdbarch *gdbarch, + gdbarch_get_thread_local_address_ftype get_thread_local_address) +{ + gdbarch->get_thread_local_address = get_thread_local_address; +} + CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch) { @@ -3070,13 +3064,6 @@ set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, gdbarch->frame_args_skip = frame_args_skip; } -int -gdbarch_unwind_pc_p (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - return gdbarch->unwind_pc != NULL; -} - CORE_ADDR gdbarch_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) { @@ -3094,13 +3081,6 @@ set_gdbarch_unwind_pc (struct gdbarch *gdbarch, gdbarch->unwind_pc = unwind_pc; } -int -gdbarch_unwind_sp_p (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - return gdbarch->unwind_sp != NULL; -} - CORE_ADDR gdbarch_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame) { @@ -3237,6 +3217,7 @@ int gdbarch_significant_addr_bit (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); + /* Skip verify of significant_addr_bit, invalid_p == 0 */ if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_significant_addr_bit called\n"); return gdbarch->significant_addr_bit; @@ -3782,7 +3763,7 @@ gdbarch_core_pid_to_str_p (struct gdbarch *gdbarch) return gdbarch->core_pid_to_str != NULL; } -const char * +std::string gdbarch_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) { gdb_assert (gdbarch != NULL); @@ -3955,7 +3936,7 @@ gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch) return gdbarch->displaced_step_copy_insn != NULL; } -struct displaced_step_closure * +displaced_step_closure_up gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { gdb_assert (gdbarch != NULL); @@ -4297,13 +4278,13 @@ gdbarch_get_syscall_number_p (struct gdbarch *gdbarch) } LONGEST -gdbarch_get_syscall_number (struct gdbarch *gdbarch, ptid_t ptid) +gdbarch_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->get_syscall_number != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_get_syscall_number called\n"); - return gdbarch->get_syscall_number (gdbarch, ptid); + return gdbarch->get_syscall_number (gdbarch, thread); } void @@ -4531,6 +4512,30 @@ set_gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, gdbarch->stap_parse_special_token = stap_parse_special_token; } +int +gdbarch_stap_adjust_register_p (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + return gdbarch->stap_adjust_register != NULL; +} + +std::string +gdbarch_stap_adjust_register (struct gdbarch *gdbarch, struct stap_parse_info *p, const std::string ®name, int regnum) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->stap_adjust_register != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_adjust_register called\n"); + return gdbarch->stap_adjust_register (gdbarch, p, regname, regnum); +} + +void +set_gdbarch_stap_adjust_register (struct gdbarch *gdbarch, + gdbarch_stap_adjust_register_ftype stap_adjust_register) +{ + gdbarch->stap_adjust_register = stap_adjust_register; +} + int gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch) { @@ -4539,13 +4544,13 @@ gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch) } void -gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct parser_state *pstate, int narg) +gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct expr_builder *builder, int narg) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->dtrace_parse_probe_argument != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_parse_probe_argument called\n"); - gdbarch->dtrace_parse_probe_argument (gdbarch, pstate, narg); + gdbarch->dtrace_parse_probe_argument (gdbarch, builder, narg); } void @@ -4929,6 +4934,23 @@ set_gdbarch_insn_is_jump (struct gdbarch *gdbarch, gdbarch->insn_is_jump = insn_is_jump; } +bool +gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->program_breakpoint_here_p != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_program_breakpoint_here_p called\n"); + return gdbarch->program_breakpoint_here_p (gdbarch, address); +} + +void +set_gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, + gdbarch_program_breakpoint_here_p_ftype program_breakpoint_here_p) +{ + gdbarch->program_breakpoint_here_p = program_breakpoint_here_p; +} + int gdbarch_auxv_parse_p (struct gdbarch *gdbarch) { @@ -5021,7 +5043,7 @@ set_gdbarch_infcall_munmap (struct gdbarch *gdbarch, gdbarch->infcall_munmap = infcall_munmap; } -char * +std::string gdbarch_gcc_target_options (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); @@ -5072,6 +5094,23 @@ set_gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch, gdbarch->addressable_memory_unit_size = addressable_memory_unit_size; } +const char * +gdbarch_disassembler_options_implicit (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of disassembler_options_implicit, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options_implicit called\n"); + return gdbarch->disassembler_options_implicit; +} + +void +set_gdbarch_disassembler_options_implicit (struct gdbarch *gdbarch, + const char * disassembler_options_implicit) +{ + gdbarch->disassembler_options_implicit = disassembler_options_implicit; +} + char ** gdbarch_disassembler_options (struct gdbarch *gdbarch) { @@ -5089,7 +5128,7 @@ set_gdbarch_disassembler_options (struct gdbarch *gdbarch, gdbarch->disassembler_options = disassembler_options; } -const disasm_options_t * +const disasm_options_and_args_t * gdbarch_valid_disassembler_options (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); @@ -5101,7 +5140,7 @@ gdbarch_valid_disassembler_options (struct gdbarch *gdbarch) void set_gdbarch_valid_disassembler_options (struct gdbarch *gdbarch, - const disasm_options_t * valid_disassembler_options) + const disasm_options_and_args_t * valid_disassembler_options) { gdbarch->valid_disassembler_options = valid_disassembler_options; } @@ -5123,6 +5162,23 @@ set_gdbarch_type_align (struct gdbarch *gdbarch, gdbarch->type_align = type_align; } +std::string +gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, frame_info *frame, CORE_ADDR pc) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->get_pc_address_flags != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_get_pc_address_flags called\n"); + return gdbarch->get_pc_address_flags (frame, pc); +} + +void +set_gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, + gdbarch_get_pc_address_flags_ftype get_pc_address_flags) +{ + gdbarch->get_pc_address_flags = get_pc_address_flags; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ @@ -5515,8 +5571,9 @@ target_gdbarch (void) return current_inferior ()->gdbarch; } +void _initialize_gdbarch (); void -_initialize_gdbarch (void) +_initialize_gdbarch () { add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\ Set architecture debugging."), _("\