41#include "gdbsupport/version.h"
43#include "floatformat.h"
99 error (_(
"This architecture has no method to convert a memory tag to"
125 size_t length,
const gdb::byte_vector &tags,
156 CORE_ADDR pc,
const char *
name)
262 LONGEST *frame_offset)
280 internal_error (_(
"No virtual frame pointer available"));
288const struct floatformat **
290 const char *
name,
int len)
292 const struct floatformat **format = NULL;
297 if (
name !=
nullptr && strcmp (
name,
"__bf16") == 0
385 gdb_printf (file, _(
"The target endianness is set automatically "
386 "(currently big endian).\n"));
388 gdb_printf (file, _(
"The target endianness is set automatically "
389 "(currently little endian).\n"));
393 _(
"The target is set to big endian.\n"));
396 _(
"The target is set to little endian.\n"));
408 internal_error (_(
"set_endian: architecture update failed"));
412 info.byte_order = BFD_ENDIAN_LITTLE;
415 _(
"Little endian target not supported by GDB\n"));
421 info.byte_order = BFD_ENDIAN_BIG;
424 _(
"Big endian target not supported by GDB\n"));
429 internal_error (_(
"set_endian: bad value"));
448static const struct bfd_arch_info *
450 const struct bfd_arch_info *selected)
453 const struct bfd_arch_info *compat1, *compat2;
455 if (selected == NULL)
458 if (from_target == NULL)
464 if (from_target == selected)
477 compat1 = selected->compatible (selected, from_target);
478 compat2 = from_target->compatible (from_target, selected);
480 if (compat1 == NULL && compat2 == NULL)
488 warning (_(
"Selected architecture %s is not compatible "
489 "with reported target architecture %s"),
490 selected->printable_name, from_target->printable_name);
498 if (compat1 == compat2)
505 if (compat1->the_default)
507 if (compat2->the_default)
512 warning (_(
"Selected architecture %s is ambiguous with "
513 "reported target architecture %s"),
514 selected->printable_name, from_target->printable_name);
543 gdb_printf (file, _(
"The target architecture is set to "
544 "\"auto\" (currently \"%s\").\n"),
547 gdb_printf (file, _(
"The target architecture is set to \"%s\".\n"),
565 internal_error (_(
"could not select an architecture automatically"));
570 if (info.bfd_arch_info == NULL)
571 internal_error (_(
"set_architecture: bfd_scan_arch failed"));
576 _(
"Architecture `%s' not recognized.\n"),
590 if (
info.abfd == NULL)
592 if (
info.abfd == NULL)
596 if (
info.target_desc == NULL)
602 if (new_gdbarch == NULL)
606 "Architecture not found\n");
616 "Architecture %s (%s) unchanged\n",
617 host_address_to_string (new_gdbarch),
625 "New architecture %s (%s) selected\n",
626 host_address_to_string (new_gdbarch),
659 error (_(
"Architecture of file not recognized."));
667#ifdef DEFAULT_BFD_ARCH
674#ifdef DEFAULT_BFD_VEC
697 const char *chosen =
arches[0];
699 for (
const char *arch :
arches)
701 if (strcmp (arch, chosen) < 0)
706 internal_error (_(
"initialize_current_architecture: No arch"));
710 internal_error (_(
"initialize_current_architecture: Arch not found"));
726 case BFD_ENDIAN_LITTLE:
740 && startswith (chp - 2,
"el"))
750 info.byte_order_for_code =
info.byte_order;
753 internal_error (_(
"initialize_current_architecture: Selection of "
754 "initial architecture failed"));
762 arches.push_back (
nullptr);
766 _(
"Set architecture of target."),
767 _(
"Show architecture of target."), NULL,
783 if (
info->bfd_arch_info == NULL
787 if (
info->bfd_arch_info == NULL
788 &&
info->abfd != NULL
789 && bfd_get_arch (
info->abfd) != bfd_arch_unknown
790 && bfd_get_arch (
info->abfd) != bfd_arch_obscure)
791 info->bfd_arch_info = bfd_get_arch_info (
info->abfd);
793 if (
info->target_desc != NULL)
795 (
info->target_desc,
info->bfd_arch_info);
797 if (
info->bfd_arch_info == NULL)
801 if (
info->byte_order == BFD_ENDIAN_UNKNOWN
805 if (
info->byte_order == BFD_ENDIAN_UNKNOWN
806 &&
info->abfd != NULL)
807 info->byte_order = (bfd_big_endian (
info->abfd) ? BFD_ENDIAN_BIG
808 : bfd_little_endian (
info->abfd) ? BFD_ENDIAN_LITTLE
809 : BFD_ENDIAN_UNKNOWN);
811 if (
info->byte_order == BFD_ENDIAN_UNKNOWN)
813 info->byte_order_for_code =
info->byte_order;
826#ifdef GDB_OSABI_DEFAULT
835 gdb_assert (
info->bfd_arch_info != NULL);
895 error (_(
"This architecture has no method to collect a return address."));
933 if (bpoint ==
nullptr)
936 gdb_byte *target_mem = (gdb_byte *) alloca (len);
941 scoped_restore restore_memory
948 if (memcmp (target_mem, bpoint, len) == 0)
963 current_pc += bp_len;
970 error (_(
"This target does not support inferior memory allocation by mmap."));
987 ?
" -mcmodel=large" :
""));
1035 disassembler_ftype disassemble_fn;
1037 disassemble_fn = disassembler (
info->arch,
info->endian == BFD_ENDIAN_BIG,
1040 gdb_assert (disassemble_fn != NULL);
1041 return (*disassemble_fn) (memaddr,
info);
1049 CORE_ADDR new_pc = pc;
1055 catch (
const gdb_exception &ex)
1098 struct bfd *corefile_bfd)
1126#ifndef GDBARCH_DEBUG
1127#define GDBARCH_DEBUG 0
1144 return format[format_index]->name;
1158 if (
string == NULL || *
string == NULL)
1169 static char ret[100];
1170 const char *
const *p;
1177 for (p = list; *p != NULL && offset <
sizeof (ret); ++p)
1179 size_t s = xsnprintf (ret + offset,
sizeof (ret) - offset,
"%s, ", *p);
1185 gdb_assert (offset - 2 <
sizeof (ret));
1186 ret[offset - 2] =
'\0';
1198 const gdb_byte *writebuf)
1200 gdb_byte *readbuf =
nullptr;
1202 if (read_value !=
nullptr)
1205 readbuf = (*read_value)->contents_raw ().data ();
1222 return obstack_strdup (&arch->
obstack,
string);
1235 gdb_assert (arch != NULL);
1270std::vector<const char *>
1275 std::vector<const char *>
arches;
1281 const struct bfd_arch_info *ap
1282 = bfd_lookup_arch (rego->bfd_architecture, 0);
1284 internal_error (_(
"gdbarch_architecture_names: multi-arch unknown"));
1287 if (rego->supports_arch_info ==
nullptr
1288 || rego->supports_arch_info (ap))
1289 arches.push_back (ap->printable_name);
1306 const struct bfd_arch_info *bfd_arch_info;
1309 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1310 if (bfd_arch_info == NULL)
1312 internal_error (_(
"gdbarch: Attempt to register "
1313 "unknown architecture (%d)"),
1319 curr = &(*curr)->
next)
1321 if (bfd_architecture == (*curr)->bfd_architecture)
1322 internal_error (_(
"gdbarch: Duplicate registration "
1323 "of architecture (%s)"),
1324 bfd_arch_info->printable_name);
1329 bfd_arch_info->printable_name,
1330 host_address_to_string (init));
1333 (*curr)->bfd_architecture = bfd_architecture;
1334 (*curr)->init = init;
1335 (*curr)->dump_tdep = dump_tdep;
1336 (*curr)->supports_arch_info = supports_arch_info;
1337 (*curr)->arches = NULL;
1338 (*curr)->next = NULL;
1349 if (info->bfd_arch_info !=
arches->gdbarch->bfd_arch_info)
1351 if (info->byte_order !=
arches->gdbarch->byte_order)
1353 if (info->osabi !=
arches->gdbarch->osabi)
1355 if (info->target_desc !=
arches->gdbarch->target_desc)
1378 gdb_assert (info.bfd_arch_info !=
nullptr);
1383 "gdbarch_find_by_info: info.bfd_arch_info %s\n",
1384 (info.bfd_arch_info !=
nullptr
1385 ? info.bfd_arch_info->printable_name
1388 "gdbarch_find_by_info: info.byte_order %d (%s)\n",
1390 (info.byte_order == BFD_ENDIAN_BIG ?
"big"
1391 : info.byte_order == BFD_ENDIAN_LITTLE ?
"little"
1394 "gdbarch_find_by_info: info.osabi %d (%s)\n",
1397 "gdbarch_find_by_info: info.abfd %s\n",
1398 host_address_to_string (info.abfd));
1407 if (rego ==
nullptr)
1411 "No matching architecture\n");
1416 new_gdbarch = rego->
init (info, rego->
arches);
1420 if (new_gdbarch ==
nullptr)
1424 "Target rejected architecture\n");
1437 "Previous architecture %s (%s) selected\n",
1438 host_address_to_string (new_gdbarch),
1441 for (list = ®o->
arches;
1442 (*list) !=
nullptr && (*list)->gdbarch != new_gdbarch;
1443 list = &(*list)->
next);
1445 gdb_assert ((*list) !=
nullptr && (*list)->gdbarch == new_gdbarch);
1448 (*list) = self->
next;
1459 "New architecture %s (%s) selected\n",
1460 host_address_to_string (new_gdbarch),
1489 gdb_assert (new_gdbarch != NULL);
1510 _(
"Set endianness of target."),
1511 _(
"Show endianness of target."),
1515Set architecture debugging."), _(
"\
1516Show architecture debugging."), _(
"\
1517When non-zero, architecture debugging is enabled."),
std::string default_get_pc_address_flags(frame_info_ptr frame, CORE_ADDR pc)
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep, gdbarch_supports_arch_info_ftype *supports_arch_info)
void gdbarch_free(struct gdbarch *arch)
ULONGEST default_type_align(struct gdbarch *gdbarch, struct type *type)
static const char * pstring_list(const char *const *list)
struct gdbarch * gdbarch_from_bfd(bfd *abfd)
unsigned int gdbarch_debug
static const char * set_architecture_string
bool default_execute_dwarf_cfa_vendor_op(struct gdbarch *gdbarch, gdb_byte op, struct dwarf2_frame_state *fs)
static const char * pstring_ptr(char **string)
int generic_in_solib_return_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
int default_insn_is_ret(struct gdbarch *gdbarch, CORE_ADDR addr)
static const char endian_little[]
static void show_gdbarch_debug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
static const bfd_arch_info_type * default_bfd_arch
int default_print_insn(bfd_vma memaddr, disassemble_info *info)
const struct floatformat ** default_floatformat_for_type(struct gdbarch *gdbarch, const char *name, int len)
void set_target_gdbarch(struct gdbarch *new_gdbarch)
static const char * pformat(struct gdbarch *gdbarch, const struct floatformat **format)
CORE_ADDR generic_skip_trampoline_code(frame_info_ptr frame, CORE_ADDR pc)
int gdbarch_update_p(struct gdbarch_info info)
void default_skip_permanent_breakpoint(struct regcache *regcache)
CORE_ADDR displaced_step_at_entry_point(struct gdbarch *gdbarch)
void gdbarch_info_fill(struct gdbarch_info *info)
static const char * set_endian_string
int default_insn_is_jump(struct gdbarch *gdbarch, CORE_ADDR addr)
void default_guess_tracepoint_registers(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr)
struct gdbarch * get_current_arch(void)
void set_gdbarch_from_file(bfd *abfd)
bool default_use_target_description_from_corefile_notes(struct gdbarch *gdbarch, struct bfd *corefile_bfd)
static const char endian_auto[]
int default_addressable_memory_unit_size(struct gdbarch *gdbarch)
void default_read_core_file_mappings(struct gdbarch *gdbarch, struct bfd *cbfd, read_core_file_mappings_pre_loop_ftype pre_loop_cb, read_core_file_mappings_loop_ftype loop_cb)
int generic_instruction_nullified(struct gdbarch *gdbarch, struct regcache *regcache)
CORE_ADDR default_adjust_dwarf2_line(CORE_ADDR addr, int rel)
struct gdbarch * target_gdbarch(void)
static enum bfd_endian default_byte_order
static const char *const endian_enum[]
struct value * default_get_memtag(struct gdbarch *gdbarch, struct value *address, memtag_type tag_type)
static void set_architecture(const char *ignore_args, int from_tty, struct cmd_list_element *c)
static std::vector< const char * > arches
static const bfd_target * default_bfd_vec
CORE_ADDR default_get_return_buf_addr(struct type *val_type, frame_info_ptr cur_frame)
CORE_ADDR default_remove_non_address_bits(struct gdbarch *gdbarch, CORE_ADDR pointer)
int default_breakpoint_kind_from_current_state(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR *pcptr)
char * gdbarch_obstack_strdup(struct gdbarch *arch, const char *string)
static const char * pstring(const char *string)
int default_fast_tracepoint_valid_at(struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg)
void initialize_current_architecture(void)
const char * default_gnu_triplet_regexp(struct gdbarch *gdbarch)
int legacy_register_sim_regno(struct gdbarch *gdbarch, int regnum)
CORE_ADDR gdbarch_skip_prologue_noexcept(gdbarch *gdbarch, CORE_ADDR pc) noexcept
int generic_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
void default_infcall_munmap(CORE_ADDR addr, CORE_ADDR size)
void default_make_symbol_special(struct symbol *sym, struct objfile *objfile)
bool default_tagged_address_p(struct gdbarch *gdbarch, struct value *address)
int core_addr_greaterthan(CORE_ADDR lhs, CORE_ADDR rhs)
bool default_memtag_matches_p(struct gdbarch *gdbarch, struct value *address)
CORE_ADDR core_addr_identity(struct gdbarch *gdbarch, CORE_ADDR addr)
static const struct bfd_arch_info * target_architecture_user
static void set_endian(const char *ignore_args, int from_tty, struct cmd_list_element *c)
static const struct bfd_arch_info * choose_architecture_for_target(const struct target_desc *target_desc, const struct bfd_arch_info *selected)
obstack * gdbarch_obstack(gdbarch *arch)
static enum bfd_endian target_byte_order_user
const gdb_byte * default_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
bool default_dwarf2_omit_typedef_p(struct type *target_type, const char *producer, const char *name)
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
enum bfd_endian selected_byte_order(void)
void _initialize_gdbarch_utils()
std::string default_memtag_to_string(struct gdbarch *gdbarch, struct value *tag)
std::vector< const char * > gdbarch_printable_names()
int generic_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
bool default_displaced_step_hw_singlestep(struct gdbarch *gdbarch)
int no_op_reg_to_regnum(struct gdbarch *gdbarch, int reg)
static const char endian_big[]
struct gdbarch_tdep_base * gdbarch_tdep_1(struct gdbarch *gdbarch)
int default_has_shared_address_space(struct gdbarch *gdbarch)
int default_stabs_argument_has_addr(struct gdbarch *gdbarch, struct type *type)
std::string default_gcc_target_options(struct gdbarch *gdbarch)
bool default_set_memtags(struct gdbarch *gdbarch, struct value *address, size_t length, const gdb::byte_vector &tags, memtag_type tag_type)
const char * selected_architecture_name(void)
int default_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
void default_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
int cannot_register_not(struct gdbarch *gdbarch, int regnum)
static CORE_ADDR default_update_call_site_pc(struct gdbarch *gdbarch, CORE_ADDR pc)
bool default_in_indirect_branch_thunk(gdbarch *gdbarch, CORE_ADDR pc)
void default_gen_return_address(struct gdbarch *gdbarch, struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope)
int default_return_in_first_hidden_param_p(struct gdbarch *gdbarch, struct type *type)
bool default_program_breakpoint_here_p(struct gdbarch *gdbarch, CORE_ADDR address)
static void show_architecture(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
int default_code_of_frame_writable(struct gdbarch *gdbarch, frame_info_ptr frame)
CORE_ADDR generic_skip_solib_resolver(struct gdbarch *gdbarch, CORE_ADDR pc)
static struct gdbarch_registration * gdbarch_registry
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
static void show_endian(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
enum return_value_convention default_gdbarch_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, struct value **read_value, const gdb_byte *writebuf)
int default_remote_register_number(struct gdbarch *gdbarch, int regno)
int default_insn_is_call(struct gdbarch *gdbarch, CORE_ADDR addr)
CORE_ADDR default_adjust_dwarf2_addr(CORE_ADDR pc)
CORE_ADDR default_infcall_mmap(CORE_ADDR size, unsigned prot)
struct gdbarch * gdbarch_find_by_info(struct gdbarch_info info)
gdbarch_virtual_frame_pointer_ftype legacy_virtual_frame_pointer
gdbarch_convert_from_func_ptr_addr_ftype convert_from_func_ptr_addr_identity
void raw_supply(int regnum, const void *buf) override
struct cmd_list_element * showlist
struct cmd_list_element * setlist
struct cmd_list_element * showdebuglist
struct cmd_list_element * setdebuglist
struct cmd_list_element * add_alias_cmd(const char *name, cmd_list_element *target, enum command_class theclass, int abbrev_flag, struct cmd_list_element **list)
set_show_commands add_setshow_enum_cmd(const char *name, enum command_class theclass, const char *const *enumlist, const char **var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
frame_info_ptr get_selected_frame(const char *message)
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
int gdbarch_half_bit(struct gdbarch *gdbarch)
const gdb_byte * gdbarch_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
const struct floatformat ** gdbarch_half_format(struct gdbarch *gdbarch)
const struct floatformat ** gdbarch_bfloat16_format(struct gdbarch *gdbarch)
CORE_ADDR gdbarch_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR ip)
int gdbarch_num_regs(struct gdbarch *gdbarch)
int gdbarch_float_bit(struct gdbarch *gdbarch)
int gdbarch_deprecated_fp_regnum(struct gdbarch *gdbarch)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
const struct floatformat ** gdbarch_double_format(struct gdbarch *gdbarch)
int gdbarch_long_double_bit(struct gdbarch *gdbarch)
int gdbarch_bfloat16_bit(struct gdbarch *gdbarch)
const gdb_byte * gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, int kind, int *size)
const struct floatformat ** gdbarch_float_format(struct gdbarch *gdbarch)
const struct floatformat ** gdbarch_long_double_format(struct gdbarch *gdbarch)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
bool gdbarch_software_single_step_p(struct gdbarch *gdbarch)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
int gdbarch_double_bit(struct gdbarch *gdbarch)
int gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
void gdbarch_dump(struct gdbarch *gdbarch, struct ui_file *file)
static void verify_gdbarch(struct gdbarch *gdbarch)
gdb::function_view< void(ULONGEST count)> read_core_file_mappings_pre_loop_ftype
bool gdbarch_supports_arch_info_ftype(const struct bfd_arch_info *)
struct gdbarch * gdbarch_init_ftype(struct gdbarch_info info, struct gdbarch_list *arches)
void gdbarch_dump_tdep_ftype(struct gdbarch *gdbarch, struct ui_file *file)
gdb::function_view< void(int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename, const bfd_build_id *build_id)> read_core_file_mappings_loop_ftype
struct inferior * current_inferior(void)
struct language_pass_by_ref_info language_pass_by_reference(struct type *type)
observable< struct gdbarch * > architecture_changed
CORE_ADDR entry_point_address(void)
#define GDB_OSABI_DEFAULT
enum gdb_osabi gdbarch_lookup_osabi(bfd *abfd)
const char * gdbarch_osabi_name(enum gdb_osabi osabi)
struct program_space * current_program_space
CORE_ADDR regcache_read_pc(struct regcache *regcache)
int register_size(struct gdbarch *gdbarch, int regnum)
void regcache_write_pc(struct regcache *regcache, CORE_ADDR pc)
void registers_changed(void)
@ LEGACY_SIM_REGNO_IGNORE
const struct bfd_arch_info * bfd_arch_info
struct gdbarch_list * next
struct gdbarch_list * arches
gdbarch_dump_tdep_ftype * dump_tdep
gdbarch_init_ftype * init
enum bfd_architecture bfd_architecture
gdbarch_supports_arch_info_ftype * supports_arch_info
struct gdbarch_registration * next
gdbarch_dump_tdep_ftype * dump_tdep
registry< gdbarch > registry_fields
const struct bfd_arch_info * bfd_arch_info
static registry< T > * get(T *obj)
static struct value * allocate(struct type *type)
struct value::@203::@204 reg
const struct bfd_arch_info * tdesc_architecture(const struct target_desc *target_desc)
const struct target_desc * target_current_description(void)
enum gdb_osabi tdesc_osabi(const struct target_desc *target_desc)
int tdesc_compatible_p(const struct target_desc *target_desc, const struct bfd_arch_info *arch)
scoped_restore_tmpl< int > make_scoped_restore_show_memory_breakpoints(int show)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void gdb_printf(struct ui_file *stream, const char *format,...)