/* Dynamic architecture support for GDB, the GNU debugger.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
- Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GDB.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
/* This file was created with the aid of ``gdbarch.sh''.
#define GDBARCH_DEBUG 0
#endif
int gdbarch_debug = GDBARCH_DEBUG;
+static void
+show_gdbarch_debug (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("Architecture debugging is %s.\n"), value);
+}
static const char *
-pformat (const struct floatformat *format)
+pformat (const struct floatformat **format)
{
if (format == NULL)
return "(null)";
else
- return format->name;
+ /* Just print out one of them - this is only for diagnostics. */
+ return format[0]->name;
}
const struct bfd_arch_info * bfd_arch_info;
int byte_order;
enum gdb_osabi osabi;
+ const struct target_desc * target_desc;
/* target specific vector. */
struct gdbarch_tdep *tdep;
int long_bit;
int long_long_bit;
int float_bit;
- const struct floatformat * float_format;
+ const struct floatformat ** float_format;
int double_bit;
- const struct floatformat * double_format;
+ const struct floatformat ** double_format;
int long_double_bit;
- const struct floatformat * long_double_format;
+ const struct floatformat ** long_double_format;
int ptr_bit;
int addr_bit;
int bfd_vma_bit;
gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum;
gdbarch_register_name_ftype *register_name;
gdbarch_register_type_ftype *register_type;
- gdbarch_deprecated_register_byte_ftype *deprecated_register_byte;
gdbarch_unwind_dummy_id_ftype *unwind_dummy_id;
int deprecated_fp_regnum;
gdbarch_push_dummy_call_ftype *push_dummy_call;
- gdbarch_deprecated_push_arguments_ftype *deprecated_push_arguments;
int deprecated_register_size;
int call_dummy_location;
gdbarch_push_dummy_code_ftype *push_dummy_code;
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_value_from_register_ftype *value_from_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_ftype *return_value;
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_deprecated_use_struct_convention_ftype *deprecated_use_struct_convention;
gdbarch_deprecated_extract_struct_value_address_ftype *deprecated_extract_struct_value_address;
gdbarch_skip_prologue_ftype *skip_prologue;
CORE_ADDR decr_pc_after_break;
CORE_ADDR deprecated_function_start_offset;
gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address;
+ gdbarch_remote_register_number_ftype *remote_register_number;
+ gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address;
CORE_ADDR frame_args_skip;
gdbarch_unwind_pc_ftype *unwind_pc;
gdbarch_unwind_sp_ftype *unwind_sp;
- gdbarch_deprecated_saved_pc_after_call_ftype *deprecated_saved_pc_after_call;
gdbarch_frame_num_args_ftype *frame_num_args;
gdbarch_deprecated_stack_align_ftype *deprecated_stack_align;
gdbarch_frame_align_ftype *frame_align;
gdbarch_register_reggroup_p_ftype *register_reggroup_p;
gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument;
gdbarch_regset_from_core_section_ftype *regset_from_core_section;
+ int vtable_function_descriptors;
+ int vbit_in_delta;
+ gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint;
};
&bfd_default_arch_struct, /* bfd_arch_info */
BFD_ENDIAN_BIG, /* byte_order */
GDB_OSABI_UNKNOWN, /* osabi */
+ 0, /* target_desc */
/* target specific vector and its dump routine */
NULL, NULL,
/*per-architecture data-pointers and swap regions */
0, /* dwarf2_reg_to_regnum */
0, /* register_name */
0, /* register_type */
- generic_register_byte, /* deprecated_register_byte */
0, /* unwind_dummy_id */
-1, /* deprecated_fp_regnum */
0, /* push_dummy_call */
- 0, /* deprecated_push_arguments */
0, /* deprecated_register_size */
0, /* call_dummy_location */
0, /* push_dummy_code */
0, /* convert_register_p */
0, /* register_to_value */
0, /* value_to_register */
+ 0, /* value_from_register */
0, /* pointer_to_address */
0, /* address_to_pointer */
0, /* integer_to_address */
0, /* return_value */
0, /* extract_return_value */
0, /* store_return_value */
- 0, /* deprecated_extract_return_value */
- 0, /* deprecated_store_return_value */
0, /* deprecated_use_struct_convention */
0, /* deprecated_extract_struct_value_address */
0, /* skip_prologue */
0, /* decr_pc_after_break */
0, /* deprecated_function_start_offset */
generic_remote_translate_xfer_address, /* remote_translate_xfer_address */
+ default_remote_register_number, /* remote_register_number */
+ 0, /* fetch_tls_load_module_address */
0, /* frame_args_skip */
0, /* unwind_pc */
0, /* unwind_sp */
- 0, /* deprecated_saved_pc_after_call */
0, /* frame_num_args */
0, /* deprecated_stack_align */
0, /* frame_align */
default_register_reggroup_p, /* register_reggroup_p */
0, /* fetch_pointer_argument */
0, /* regset_from_core_section */
+ 0, /* vtable_function_descriptors */
+ 0, /* vbit_in_delta */
+ 0, /* skip_permanent_breakpoint */
/* startup_gdbarch() */
};
current_gdbarch->bfd_arch_info = info->bfd_arch_info;
current_gdbarch->byte_order = info->byte_order;
current_gdbarch->osabi = info->osabi;
+ current_gdbarch->target_desc = info->target_desc;
/* Force the explicit initialization of these. */
current_gdbarch->short_bit = 2*TARGET_CHAR_BIT;
current_gdbarch->dwarf_reg_to_regnum = no_op_reg_to_regnum;
current_gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum;
current_gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum;
- current_gdbarch->deprecated_register_byte = generic_register_byte;
current_gdbarch->deprecated_fp_regnum = -1;
current_gdbarch->call_dummy_location = AT_ENTRY_POINT;
current_gdbarch->print_registers_info = default_print_registers_info;
current_gdbarch->cannot_fetch_register = cannot_register_not;
current_gdbarch->cannot_store_register = cannot_register_not;
current_gdbarch->convert_register_p = generic_convert_register_p;
+ current_gdbarch->value_from_register = default_value_from_register;
current_gdbarch->pointer_to_address = unsigned_pointer_to_address;
current_gdbarch->address_to_pointer = unsigned_address_to_pointer;
current_gdbarch->return_value = legacy_return_value;
- current_gdbarch->extract_return_value = legacy_extract_return_value;
- current_gdbarch->store_return_value = legacy_store_return_value;
current_gdbarch->deprecated_use_struct_convention = generic_use_struct_convention;
current_gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
current_gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
current_gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address;
+ current_gdbarch->remote_register_number = default_remote_register_number;
current_gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr;
current_gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
current_gdbarch->addr_bits_remove = core_addr_identity;
/* Skip verify of long_long_bit, invalid_p == 0 */
/* Skip verify of float_bit, invalid_p == 0 */
if (current_gdbarch->float_format == 0)
- current_gdbarch->float_format = default_float_format (current_gdbarch);
+ current_gdbarch->float_format = floatformats_ieee_single;
/* Skip verify of double_bit, invalid_p == 0 */
if (current_gdbarch->double_format == 0)
- current_gdbarch->double_format = default_double_format (current_gdbarch);
+ current_gdbarch->double_format = floatformats_ieee_double;
/* Skip verify of long_double_bit, invalid_p == 0 */
if (current_gdbarch->long_double_format == 0)
- current_gdbarch->long_double_format = default_double_format (current_gdbarch);
+ current_gdbarch->long_double_format = floatformats_ieee_double;
/* Skip verify of ptr_bit, invalid_p == 0 */
if (current_gdbarch->addr_bit == 0)
current_gdbarch->addr_bit = TARGET_PTR_BIT;
/* Skip verify of sdb_reg_to_regnum, invalid_p == 0 */
/* Skip verify of dwarf2_reg_to_regnum, invalid_p == 0 */
/* Skip verify of register_type, has predicate */
- /* Skip verify of deprecated_register_byte, has predicate */
/* Skip verify of unwind_dummy_id, has predicate */
/* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
/* Skip verify of push_dummy_call, has predicate */
- /* Skip verify of deprecated_push_arguments, has predicate */
/* Skip verify of call_dummy_location, invalid_p == 0 */
/* Skip verify of push_dummy_code, has predicate */
/* Skip verify of print_registers_info, invalid_p == 0 */
/* Skip verify of cannot_store_register, invalid_p == 0 */
/* Skip verify of get_longjmp_target, has predicate */
/* Skip verify of convert_register_p, invalid_p == 0 */
+ /* Skip verify of value_from_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 deprecated_store_struct_return, has predicate */
/* Skip verify of return_value, has predicate */
- /* Skip verify of extract_return_value, invalid_p == 0 */
- /* Skip verify of store_return_value, invalid_p == 0 */
/* Skip verify of deprecated_use_struct_convention, invalid_p == 0 */
/* Skip verify of deprecated_extract_struct_value_address, has predicate */
if (current_gdbarch->skip_prologue == 0)
/* Skip verify of decr_pc_after_break, invalid_p == 0 */
/* Skip verify of deprecated_function_start_offset, invalid_p == 0 */
/* Skip verify of remote_translate_xfer_address, 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 frame_args_skip, invalid_p == 0 */
/* Skip verify of unwind_pc, has predicate */
/* Skip verify of unwind_sp, has predicate */
- /* Skip verify of deprecated_saved_pc_after_call, has predicate */
/* Skip verify of frame_num_args, has predicate */
/* Skip verify of deprecated_stack_align, has predicate */
/* Skip verify of frame_align, has predicate */
/* Skip verify of register_reggroup_p, invalid_p == 0 */
/* Skip verify of fetch_pointer_argument, has predicate */
/* Skip verify of regset_from_core_section, has predicate */
+ /* Skip verify of vtable_function_descriptors, invalid_p == 0 */
+ /* Skip verify of vbit_in_delta, invalid_p == 0 */
+ /* Skip verify of skip_permanent_breakpoint, has predicate */
buf = ui_file_xstrdup (log, &dummy);
make_cleanup (xfree, buf);
if (strlen (buf) > 0)
internal_error (__FILE__, __LINE__,
- "verify_gdbarch: the following are invalid ...%s",
+ _("verify_gdbarch: the following are invalid ...%s"),
buf);
do_cleanups (cleanups);
}
fprintf_unfiltered (file,
"gdbarch_dump: decr_pc_after_break = 0x%s\n",
paddr_nz (current_gdbarch->decr_pc_after_break));
-#ifdef DEPRECATED_EXTRACT_RETURN_VALUE
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_EXTRACT_RETURN_VALUE(type, regbuf, valbuf)",
- XSTRING (DEPRECATED_EXTRACT_RETURN_VALUE (type, regbuf, valbuf)));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: deprecated_extract_return_value = <0x%lx>\n",
- (long) current_gdbarch->deprecated_extract_return_value);
#ifdef DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: deprecated_function_start_offset = 0x%s\n",
paddr_nz (current_gdbarch->deprecated_function_start_offset));
-#ifdef DEPRECATED_PUSH_ARGUMENTS_P
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_PUSH_ARGUMENTS_P()",
- XSTRING (DEPRECATED_PUSH_ARGUMENTS_P ()));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: gdbarch_deprecated_push_arguments_p() = %d\n",
- gdbarch_deprecated_push_arguments_p (current_gdbarch));
-#ifdef DEPRECATED_PUSH_ARGUMENTS
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr)",
- XSTRING (DEPRECATED_PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr)));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: deprecated_push_arguments = <0x%lx>\n",
- (long) current_gdbarch->deprecated_push_arguments);
#ifdef DEPRECATED_REG_STRUCT_HAS_ADDR_P
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: deprecated_reg_struct_has_addr = <0x%lx>\n",
(long) current_gdbarch->deprecated_reg_struct_has_addr);
-#ifdef DEPRECATED_REGISTER_BYTE_P
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_REGISTER_BYTE_P()",
- XSTRING (DEPRECATED_REGISTER_BYTE_P ()));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: gdbarch_deprecated_register_byte_p() = %d\n",
- gdbarch_deprecated_register_byte_p (current_gdbarch));
-#ifdef DEPRECATED_REGISTER_BYTE
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_REGISTER_BYTE(reg_nr)",
- XSTRING (DEPRECATED_REGISTER_BYTE (reg_nr)));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: deprecated_register_byte = <0x%lx>\n",
- (long) current_gdbarch->deprecated_register_byte);
#ifdef DEPRECATED_REGISTER_SIZE
fprintf_unfiltered (file,
"gdbarch_dump: DEPRECATED_REGISTER_SIZE # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: deprecated_register_size = %s\n",
paddr_d (current_gdbarch->deprecated_register_size));
-#ifdef DEPRECATED_SAVED_PC_AFTER_CALL_P
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_SAVED_PC_AFTER_CALL_P()",
- XSTRING (DEPRECATED_SAVED_PC_AFTER_CALL_P ()));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: gdbarch_deprecated_saved_pc_after_call_p() = %d\n",
- gdbarch_deprecated_saved_pc_after_call_p (current_gdbarch));
-#ifdef DEPRECATED_SAVED_PC_AFTER_CALL
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_SAVED_PC_AFTER_CALL(frame)",
- XSTRING (DEPRECATED_SAVED_PC_AFTER_CALL (frame)));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: deprecated_saved_pc_after_call = <0x%lx>\n",
- (long) current_gdbarch->deprecated_saved_pc_after_call);
#ifdef DEPRECATED_STACK_ALIGN_P
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: deprecated_stack_align = <0x%lx>\n",
(long) current_gdbarch->deprecated_stack_align);
-#ifdef DEPRECATED_STORE_RETURN_VALUE
- fprintf_unfiltered (file,
- "gdbarch_dump: %s # %s\n",
- "DEPRECATED_STORE_RETURN_VALUE(type, valbuf)",
- XSTRING (DEPRECATED_STORE_RETURN_VALUE (type, valbuf)));
-#endif
- fprintf_unfiltered (file,
- "gdbarch_dump: deprecated_store_return_value = <0x%lx>\n",
- (long) current_gdbarch->deprecated_store_return_value);
#ifdef DEPRECATED_STORE_STRUCT_RETURN_P
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: fetch_pointer_argument = <0x%lx>\n",
(long) current_gdbarch->fetch_pointer_argument);
+#ifdef FETCH_TLS_LOAD_MODULE_ADDRESS_P
+ fprintf_unfiltered (file,
+ "gdbarch_dump: %s # %s\n",
+ "FETCH_TLS_LOAD_MODULE_ADDRESS_P()",
+ XSTRING (FETCH_TLS_LOAD_MODULE_ADDRESS_P ()));
+#endif
+ fprintf_unfiltered (file,
+ "gdbarch_dump: gdbarch_fetch_tls_load_module_address_p() = %d\n",
+ gdbarch_fetch_tls_load_module_address_p (current_gdbarch));
+#ifdef FETCH_TLS_LOAD_MODULE_ADDRESS
+ fprintf_unfiltered (file,
+ "gdbarch_dump: %s # %s\n",
+ "FETCH_TLS_LOAD_MODULE_ADDRESS(objfile)",
+ XSTRING (FETCH_TLS_LOAD_MODULE_ADDRESS (objfile)));
+#endif
+ fprintf_unfiltered (file,
+ "gdbarch_dump: fetch_tls_load_module_address = <0x%lx>\n",
+ (long) current_gdbarch->fetch_tls_load_module_address);
#ifdef TARGET_FLOAT_BIT
fprintf_unfiltered (file,
"gdbarch_dump: TARGET_FLOAT_BIT # %s\n",
#ifdef MEMORY_INSERT_BREAKPOINT
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
- "MEMORY_INSERT_BREAKPOINT(addr, contents_cache)",
- XSTRING (MEMORY_INSERT_BREAKPOINT (addr, contents_cache)));
+ "MEMORY_INSERT_BREAKPOINT(bp_tgt)",
+ XSTRING (MEMORY_INSERT_BREAKPOINT (bp_tgt)));
#endif
fprintf_unfiltered (file,
"gdbarch_dump: memory_insert_breakpoint = <0x%lx>\n",
#ifdef MEMORY_REMOVE_BREAKPOINT
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
- "MEMORY_REMOVE_BREAKPOINT(addr, contents_cache)",
- XSTRING (MEMORY_REMOVE_BREAKPOINT (addr, contents_cache)));
+ "MEMORY_REMOVE_BREAKPOINT(bp_tgt)",
+ XSTRING (MEMORY_REMOVE_BREAKPOINT (bp_tgt)));
#endif
fprintf_unfiltered (file,
"gdbarch_dump: memory_remove_breakpoint = <0x%lx>\n",
fprintf_unfiltered (file,
"gdbarch_dump: regset_from_core_section = <0x%lx>\n",
(long) current_gdbarch->regset_from_core_section);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: remote_register_number = <0x%lx>\n",
+ (long) current_gdbarch->remote_register_number);
fprintf_unfiltered (file,
"gdbarch_dump: remote_translate_xfer_address = <0x%lx>\n",
(long) current_gdbarch->remote_translate_xfer_address);
fprintf_unfiltered (file,
"gdbarch_dump: single_step_through_delay = <0x%lx>\n",
(long) current_gdbarch->single_step_through_delay);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: gdbarch_skip_permanent_breakpoint_p() = %d\n",
+ gdbarch_skip_permanent_breakpoint_p (current_gdbarch));
+ fprintf_unfiltered (file,
+ "gdbarch_dump: skip_permanent_breakpoint = <0x%lx>\n",
+ (long) current_gdbarch->skip_permanent_breakpoint);
#ifdef SKIP_PROLOGUE
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
#ifdef SOFTWARE_SINGLE_STEP
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
- "SOFTWARE_SINGLE_STEP(sig, insert_breakpoints_p)",
- XSTRING (SOFTWARE_SINGLE_STEP (sig, insert_breakpoints_p)));
+ "SOFTWARE_SINGLE_STEP(regcache)",
+ XSTRING (SOFTWARE_SINGLE_STEP (regcache)));
#endif
fprintf_unfiltered (file,
"gdbarch_dump: software_single_step = <0x%lx>\n",
fprintf_unfiltered (file,
"gdbarch_dump: store_return_value = <0x%lx>\n",
(long) current_gdbarch->store_return_value);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: target_desc = %s\n",
+ paddr_d ((long) current_gdbarch->target_desc));
fprintf_unfiltered (file,
"gdbarch_dump: gdbarch_unwind_dummy_id_p() = %d\n",
gdbarch_unwind_dummy_id_p (current_gdbarch));
fprintf_unfiltered (file,
"gdbarch_dump: unwind_sp = <0x%lx>\n",
(long) current_gdbarch->unwind_sp);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: value_from_register = <0x%lx>\n",
+ (long) current_gdbarch->value_from_register);
#ifdef VALUE_TO_REGISTER
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: value_to_register = <0x%lx>\n",
(long) current_gdbarch->value_to_register);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: vbit_in_delta = %s\n",
+ paddr_d (current_gdbarch->vbit_in_delta));
#ifdef TARGET_VIRTUAL_FRAME_POINTER
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
fprintf_unfiltered (file,
"gdbarch_dump: virtual_frame_pointer = <0x%lx>\n",
(long) current_gdbarch->virtual_frame_pointer);
+ fprintf_unfiltered (file,
+ "gdbarch_dump: vtable_function_descriptors = %s\n",
+ paddr_d (current_gdbarch->vtable_function_descriptors));
#ifdef TARGET_WRITE_PC
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
return gdbarch->osabi;
}
+const struct target_desc *
+gdbarch_target_desc (struct gdbarch *gdbarch)
+{
+ gdb_assert (gdbarch != NULL);
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_target_desc called\n");
+ return gdbarch->target_desc;
+}
+
int
gdbarch_short_bit (struct gdbarch *gdbarch)
{
gdbarch->float_bit = float_bit;
}
-const struct floatformat *
+const struct floatformat **
gdbarch_float_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
void
set_gdbarch_float_format (struct gdbarch *gdbarch,
- const struct floatformat * float_format)
+ const struct floatformat ** float_format)
{
gdbarch->float_format = float_format;
}
gdbarch->double_bit = double_bit;
}
-const struct floatformat *
+const struct floatformat **
gdbarch_double_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
void
set_gdbarch_double_format (struct gdbarch *gdbarch,
- const struct floatformat * double_format)
+ const struct floatformat ** double_format)
{
gdbarch->double_format = double_format;
}
gdbarch->long_double_bit = long_double_bit;
}
-const struct floatformat *
+const struct floatformat **
gdbarch_long_double_format (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
void
set_gdbarch_long_double_format (struct gdbarch *gdbarch,
- const struct floatformat * long_double_format)
+ const struct floatformat ** long_double_format)
{
gdbarch->long_double_format = long_double_format;
}
}
void
-gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, void *buf)
+gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pseudo_register_read != NULL);
}
void
-gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const void *buf)
+gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pseudo_register_write != NULL);
gdbarch->register_type = register_type;
}
-int
-gdbarch_deprecated_register_byte_p (struct gdbarch *gdbarch)
-{
- gdb_assert (gdbarch != NULL);
- return gdbarch->deprecated_register_byte != generic_register_byte;
-}
-
-int
-gdbarch_deprecated_register_byte (struct gdbarch *gdbarch, int reg_nr)
-{
- gdb_assert (gdbarch != NULL);
- gdb_assert (gdbarch->deprecated_register_byte != NULL);
- /* Do not check predicate: gdbarch->deprecated_register_byte != generic_register_byte, allow call. */
- if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_register_byte called\n");
- return gdbarch->deprecated_register_byte (reg_nr);
-}
-
-void
-set_gdbarch_deprecated_register_byte (struct gdbarch *gdbarch,
- gdbarch_deprecated_register_byte_ftype deprecated_register_byte)
-{
- gdbarch->deprecated_register_byte = deprecated_register_byte;
-}
-
int
gdbarch_unwind_dummy_id_p (struct gdbarch *gdbarch)
{
gdbarch->push_dummy_call = push_dummy_call;
}
-int
-gdbarch_deprecated_push_arguments_p (struct gdbarch *gdbarch)
-{
- gdb_assert (gdbarch != NULL);
- return gdbarch->deprecated_push_arguments != NULL;
-}
-
-CORE_ADDR
-gdbarch_deprecated_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
-{
- gdb_assert (gdbarch != NULL);
- gdb_assert (gdbarch->deprecated_push_arguments != NULL);
- if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_push_arguments called\n");
- return gdbarch->deprecated_push_arguments (nargs, args, sp, struct_return, struct_addr);
-}
-
-void
-set_gdbarch_deprecated_push_arguments (struct gdbarch *gdbarch,
- gdbarch_deprecated_push_arguments_ftype deprecated_push_arguments)
-{
- gdbarch->deprecated_push_arguments = deprecated_push_arguments;
-}
-
int
gdbarch_deprecated_register_size (struct gdbarch *gdbarch)
{
}
void
-gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, void *buf)
+gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->register_to_value != NULL);
}
void
-gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const void *buf)
+gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->value_to_register != NULL);
gdbarch->value_to_register = value_to_register;
}
+struct value *
+gdbarch_value_from_register (struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_info *frame)
+{
+ gdb_assert (gdbarch != NULL);
+ gdb_assert (gdbarch->value_from_register != NULL);
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_value_from_register called\n");
+ return gdbarch->value_from_register (type, regnum, frame);
+}
+
+void
+set_gdbarch_value_from_register (struct gdbarch *gdbarch,
+ gdbarch_value_from_register_ftype value_from_register)
+{
+ gdbarch->value_from_register = value_from_register;
+}
+
CORE_ADDR
-gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const void *buf)
+gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->pointer_to_address != NULL);
}
void
-gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr)
+gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->address_to_pointer != NULL);
}
CORE_ADDR
-gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const bfd_byte *buf)
+gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->integer_to_address != NULL);
}
enum return_value_convention
-gdbarch_return_value (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, void *readbuf, const void *writebuf)
+gdbarch_return_value (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->return_value != NULL);
}
void
-gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, void *valbuf)
+gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, gdb_byte *valbuf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->extract_return_value != NULL);
}
void
-gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const void *valbuf)
+gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->store_return_value != NULL);
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);
- gdb_assert (gdbarch->deprecated_extract_return_value != NULL);
- 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);
- gdb_assert (gdbarch->deprecated_store_return_value != NULL);
- 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_deprecated_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type)
{
gdbarch->inner_than = inner_than;
}
-const unsigned char *
+const gdb_byte *
gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
{
gdb_assert (gdbarch != NULL);
}
int
-gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache)
+gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memory_insert_breakpoint != NULL);
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_insert_breakpoint called\n");
- return gdbarch->memory_insert_breakpoint (addr, contents_cache);
+ return gdbarch->memory_insert_breakpoint (bp_tgt);
}
void
}
int
-gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache)
+gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->memory_remove_breakpoint != NULL);
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_remove_breakpoint called\n");
- return gdbarch->memory_remove_breakpoint (addr, contents_cache);
+ return gdbarch->memory_remove_breakpoint (bp_tgt);
}
void
gdbarch->remote_translate_xfer_address = remote_translate_xfer_address;
}
+int
+gdbarch_remote_register_number (struct gdbarch *gdbarch, int regno)
+{
+ gdb_assert (gdbarch != NULL);
+ gdb_assert (gdbarch->remote_register_number != NULL);
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_remote_register_number called\n");
+ return gdbarch->remote_register_number (gdbarch, regno);
+}
+
+void
+set_gdbarch_remote_register_number (struct gdbarch *gdbarch,
+ gdbarch_remote_register_number_ftype remote_register_number)
+{
+ gdbarch->remote_register_number = remote_register_number;
+}
+
+int
+gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch)
+{
+ gdb_assert (gdbarch != NULL);
+ return gdbarch->fetch_tls_load_module_address != NULL;
+}
+
+CORE_ADDR
+gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile)
+{
+ gdb_assert (gdbarch != NULL);
+ gdb_assert (gdbarch->fetch_tls_load_module_address != NULL);
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_tls_load_module_address called\n");
+ return gdbarch->fetch_tls_load_module_address (objfile);
+}
+
+void
+set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch,
+ gdbarch_fetch_tls_load_module_address_ftype fetch_tls_load_module_address)
+{
+ gdbarch->fetch_tls_load_module_address = fetch_tls_load_module_address;
+}
+
CORE_ADDR
gdbarch_frame_args_skip (struct gdbarch *gdbarch)
{
gdbarch->unwind_sp = unwind_sp;
}
-int
-gdbarch_deprecated_saved_pc_after_call_p (struct gdbarch *gdbarch)
-{
- gdb_assert (gdbarch != NULL);
- return gdbarch->deprecated_saved_pc_after_call != NULL;
-}
-
-CORE_ADDR
-gdbarch_deprecated_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame)
-{
- gdb_assert (gdbarch != NULL);
- gdb_assert (gdbarch->deprecated_saved_pc_after_call != NULL);
- if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_saved_pc_after_call called\n");
- return gdbarch->deprecated_saved_pc_after_call (frame);
-}
-
-void
-set_gdbarch_deprecated_saved_pc_after_call (struct gdbarch *gdbarch,
- gdbarch_deprecated_saved_pc_after_call_ftype deprecated_saved_pc_after_call)
-{
- gdbarch->deprecated_saved_pc_after_call = deprecated_saved_pc_after_call;
-}
-
int
gdbarch_frame_num_args_p (struct gdbarch *gdbarch)
{
return gdbarch->software_single_step != NULL;
}
-void
-gdbarch_software_single_step (struct gdbarch *gdbarch, enum target_signal sig, int insert_breakpoints_p)
+int
+gdbarch_software_single_step (struct gdbarch *gdbarch, struct regcache *regcache)
{
gdb_assert (gdbarch != NULL);
gdb_assert (gdbarch->software_single_step != NULL);
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_software_single_step called\n");
- gdbarch->software_single_step (sig, insert_breakpoints_p);
+ return gdbarch->software_single_step (regcache);
}
void
gdbarch->regset_from_core_section = regset_from_core_section;
}
+int
+gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch)
+{
+ gdb_assert (gdbarch != NULL);
+ /* Skip verify of vtable_function_descriptors, invalid_p == 0 */
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_vtable_function_descriptors called\n");
+ return gdbarch->vtable_function_descriptors;
+}
+
+void
+set_gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch,
+ int vtable_function_descriptors)
+{
+ gdbarch->vtable_function_descriptors = vtable_function_descriptors;
+}
+
+int
+gdbarch_vbit_in_delta (struct gdbarch *gdbarch)
+{
+ gdb_assert (gdbarch != NULL);
+ /* Skip verify of vbit_in_delta, invalid_p == 0 */
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_vbit_in_delta called\n");
+ return gdbarch->vbit_in_delta;
+}
+
+void
+set_gdbarch_vbit_in_delta (struct gdbarch *gdbarch,
+ int vbit_in_delta)
+{
+ gdbarch->vbit_in_delta = vbit_in_delta;
+}
+
+int
+gdbarch_skip_permanent_breakpoint_p (struct gdbarch *gdbarch)
+{
+ gdb_assert (gdbarch != NULL);
+ return gdbarch->skip_permanent_breakpoint != NULL;
+}
+
+void
+gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, struct regcache *regcache)
+{
+ gdb_assert (gdbarch != NULL);
+ gdb_assert (gdbarch->skip_permanent_breakpoint != NULL);
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_permanent_breakpoint called\n");
+ gdbarch->skip_permanent_breakpoint (regcache);
+}
+
+void
+set_gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch,
+ gdbarch_skip_permanent_breakpoint_ftype skip_permanent_breakpoint)
+{
+ gdbarch->skip_permanent_breakpoint = skip_permanent_breakpoint;
+}
+
/* Keep a registry of per-architecture data-pointers required by GDB
modules. */
ap = bfd_lookup_arch (rego->bfd_architecture, 0);
if (ap == NULL)
internal_error (__FILE__, __LINE__,
- "gdbarch_architecture_names: multi-arch unknown");
+ _("gdbarch_architecture_names: multi-arch unknown"));
do
{
append_name (&arches, &nr_arches, ap->printable_name);
if (bfd_arch_info == NULL)
{
internal_error (__FILE__, __LINE__,
- "gdbarch: Attempt to register unknown architecture (%d)",
+ _("gdbarch: Attempt to register unknown architecture (%d)"),
bfd_architecture);
}
/* Check that we haven't seen this architecture before */
{
if (bfd_architecture == (*curr)->bfd_architecture)
internal_error (__FILE__, __LINE__,
- "gdbarch: Duplicate registraration of architecture (%s)",
+ _("gdbarch: Duplicate registraration of architecture (%s)"),
bfd_arch_info->printable_name);
}
/* log it */
}
-/* Look for an architecture using gdbarch_info. Base search on only
- BFD_ARCH_INFO and BYTE_ORDER. */
+/* Look for an architecture using gdbarch_info. */
struct gdbarch_list *
gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
continue;
if (info->osabi != arches->gdbarch->osabi)
continue;
+ if (info->target_desc != arches->gdbarch->target_desc)
+ continue;
return arches;
}
return NULL;
that there is no current architecture. */
static struct gdbarch *
-find_arch_by_info (struct gdbarch *old_gdbarch, struct gdbarch_info info)
+find_arch_by_info (struct gdbarch_info info)
{
struct gdbarch *new_gdbarch;
struct gdbarch_registration *rego;
gdb_assert (current_gdbarch == NULL);
/* Fill in missing parts of the INFO struct using a number of
- sources: "set ..."; INFOabfd supplied; and the existing
- architecture. */
- gdbarch_info_fill (old_gdbarch, &info);
+ sources: "set ..."; INFOabfd supplied; and the global
+ defaults. */
+ gdbarch_info_fill (&info);
/* Must have found some sort of architecture. */
gdb_assert (info.bfd_arch_info != NULL);
struct gdbarch *old_gdbarch = current_gdbarch_swap_out_hack ();
/* Find the specified architecture. */
- struct gdbarch *new_gdbarch = find_arch_by_info (old_gdbarch, info);
+ struct gdbarch *new_gdbarch = find_arch_by_info (info);
/* Restore the existing architecture. */
gdb_assert (current_gdbarch == NULL);
current_gdbarch_swap_out_hack ();
current_gdbarch_swap_in_hack (new_gdbarch);
architecture_changed_event ();
+ reinit_frame_cache ();
}
extern void _initialize_gdbarch (void);
{
struct cmd_list_element *c;
- deprecated_add_show_from_set
- (add_set_cmd ("arch",
- class_maintenance,
- var_zinteger,
- (char *)&gdbarch_debug,
- "Set architecture debugging.\n\
-When non-zero, architecture debugging is enabled.", &setdebuglist),
- &showdebuglist);
- c = add_set_cmd ("archdebug",
- class_maintenance,
- var_zinteger,
- (char *)&gdbarch_debug,
- "Set architecture debugging.\n\
-When non-zero, architecture debugging is enabled.", &setlist);
-
- deprecate_cmd (c, "set debug arch");
- deprecate_cmd (deprecated_add_show_from_set (c, &showlist), "show debug arch");
+ add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
+Set architecture debugging."), _("\
+Show architecture debugging."), _("\
+When non-zero, architecture debugging is enabled."),
+ NULL,
+ show_gdbarch_debug,
+ &setdebuglist, &showdebuglist);
}