55#include "gdbsupport/selftest.h"
57#include "elf/common.h"
58#include "elf/aarch64.h"
143#define AARCH64_SIGCONTEXT_REG_SIZE 8
144#define AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET 128
145#define AARCH64_UCONTEXT_SIGCONTEXT_OFFSET 176
146#define AARCH64_SIGCONTEXT_XO_OFFSET 8
147#define AARCH64_SIGCONTEXT_RESERVED_OFFSET 288
149#define AARCH64_SIGCONTEXT_RESERVED_SIZE 4096
152#define AARCH64_EXTRA_MAGIC 0x45585401
153#define AARCH64_FPSIMD_MAGIC 0x46508001
154#define AARCH64_SVE_MAGIC 0x53564501
157#define AARCH64_EXTRA_DATAP_OFFSET 8
160#define AARCH64_FPSIMD_FPSR_OFFSET 8
161#define AARCH64_FPSIMD_FPCR_OFFSET 12
162#define AARCH64_FPSIMD_V0_OFFSET 16
163#define AARCH64_FPSIMD_VREG_SIZE 16
166#define AARCH64_SVE_CONTEXT_VL_OFFSET 8
167#define AARCH64_SVE_CONTEXT_REGS_OFFSET 16
168#define AARCH64_SVE_CONTEXT_P_REGS_OFFSET(vq) (32 * vq * 16)
169#define AARCH64_SVE_CONTEXT_FFR_OFFSET(vq) \
170 (AARCH64_SVE_CONTEXT_P_REGS_OFFSET (vq) + (16 * vq * 2))
171#define AARCH64_SVE_CONTEXT_SIZE(vq) \
172 (AARCH64_SVE_CONTEXT_FFR_OFFSET (vq) + (vq * 2))
205 int vreg_num, CORE_ADDR offset,
206 enum bfd_endian byte_order,
bool has_sve)
218 if (byte_order == BFD_ENDIAN_BIG)
299 CORE_ADDR fpsimd = 0;
300 CORE_ADDR sve_regs = 0;
301 uint32_t
size, magic;
302 bool extra_found =
false;
307 for (
int i = 0; i < 31; i++)
351 error (_(
"Invalid vector length in signal frame %d vs %s."), vq,
352 pulongest (tdep->
vq));
389 if (!extra_found && section > section_end)
397 for (
int i = 0; i < 32; i++)
399 offset = sve_regs + (i * tdep->
vq * 16);
418 for (
int i = 0; i < 16; i++)
420 offset + (i * tdep->
vq * 2));
436 for (
int i = 0; i < 32; i++)
502#define SVE_HEADER_SIZE_LENGTH 4
503#define SVE_HEADER_MAX_SIZE_LENGTH 4
504#define SVE_HEADER_VL_LENGTH 2
505#define SVE_HEADER_MAX_VL_LENGTH 2
506#define SVE_HEADER_FLAGS_LENGTH 2
507#define SVE_HEADER_RESERVED_LENGTH 2
509#define SVE_HEADER_SIZE_OFFSET 0
510#define SVE_HEADER_MAX_SIZE_OFFSET \
511 (SVE_HEADER_SIZE_OFFSET + SVE_HEADER_SIZE_LENGTH)
512#define SVE_HEADER_VL_OFFSET \
513 (SVE_HEADER_MAX_SIZE_OFFSET + SVE_HEADER_MAX_SIZE_LENGTH)
514#define SVE_HEADER_MAX_VL_OFFSET \
515 (SVE_HEADER_VL_OFFSET + SVE_HEADER_VL_LENGTH)
516#define SVE_HEADER_FLAGS_OFFSET \
517 (SVE_HEADER_MAX_VL_OFFSET + SVE_HEADER_MAX_VL_LENGTH)
518#define SVE_HEADER_RESERVED_OFFSET \
519 (SVE_HEADER_FLAGS_OFFSET + SVE_HEADER_FLAGS_LENGTH)
520#define SVE_HEADER_SIZE \
521 (SVE_HEADER_RESERVED_OFFSET + SVE_HEADER_RESERVED_LENGTH)
523#define SVE_HEADER_FLAG_SVE 1
532 asection *sve_section = bfd_get_section_by_name (abfd,
".reg-aarch-sve");
534 if (sve_section ==
nullptr)
540 size_t size = bfd_section_size (sve_section);
545 warning (_(
"'.reg-aarch-sve' section in core file too small."));
549 if (!bfd_get_section_contents (abfd, sve_section, header, 0,
SVE_HEADER_SIZE))
551 warning (_(
"Couldn't read sve header from "
552 "'.reg-aarch-sve' section in core file."));
562 warning (_(
"SVE Vector length in core file not supported by this version"
563 " of GDB. (VQ=%s)"), pulongest (vq));
568 warning (_(
"SVE Vector length in core file is invalid. (VQ=%s"),
585 gdb_byte *header = (gdb_byte *) buf;
605 gdb_byte vg_target[8];
606 store_integer ((gdb_byte *)&vg_target,
sizeof (uint64_t), byte_order,
644 gdb_byte *header = (gdb_byte *) buf;
648 uint64_t vq = tdep->
vq;
650 gdb_assert (buf != NULL);
701 const struct regset aarch64_linux_sve_regset =
708 cb (
".reg-aarch-sve",
711 &aarch64_linux_sve_regset,
"SVE registers", cb_data);
727 const struct regset aarch64_linux_pauth_regset =
734 "pauth registers", cb_data);
747 const struct regset aarch64_linux_mte_regset =
754 "MTE registers", cb_data);
763 int sizeof_tls_regset
773 const struct regset aarch64_linux_tls_regset =
779 cb (
".reg-aarch-tls", sizeof_tls_regset, sizeof_tls_regset,
780 &aarch64_linux_tls_regset,
"TLS register", cb_data);
800 asection *tls = bfd_get_section_by_name (abfd,
".reg-aarch-tls");
803 size_t size = bfd_section_size (tls);
818 return (*s ==
'#' || isdigit (*s)
839 const char *tmp = p->
arg;
851 while (isalnum (*tmp))
858 std::string regname (start, len);
861 error (_(
"Invalid register name `%s' on expression `%s'."),
865 tmp = skip_spaces (tmp);
876 else if (*tmp ==
'+')
882 displacement = strtol (tmp, &endp, 10);
890 using namespace expr;
895 displacement = -displacement;
896 operation_up disp = make_operation<long_const_operation> (long_type,
901 = make_operation<register_operation> (std::move (regname));
904 = make_operation<add_operation> (std::move (reg), std::move (disp));
908 sum = make_operation<unop_cast_operation> (std::move (sum),
910 return make_operation<unop_ind_operation> (std::move (sum));
1193#define SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \
1194 return gdb_sys_##SYSCALL
1196#define UNSUPPORTED_SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \
1197 return gdb_sys_no_syscall
1199 switch (syscall_number)
1495 LONGEST x1 = -1, fp = -1, lr = -1;
1499 if (x1 == 0 && fp ==0 && lr == 0)
1527 unsigned long svc_number)
1535 if (syscall_gdb < 0)
1538 _(
"Process record and replay target doesn't "
1539 "support syscall number %s\n"),
1540 plongest (svc_number));
1583static gdb::optional<CORE_ADDR>
1586 gdb::byte_vector tags;
1594 if (tags.size () != 1)
1595 error (_(
"Target returned an unexpected number of tags."));
1607 gdb_assert (address !=
nullptr);
1626 struct value *address)
1628 gdb_assert (address !=
nullptr);
1637 gdb::optional<CORE_ADDR> atag
1640 if (!atag.has_value ())
1647 return ltag == *atag;
1654 size_t length,
const gdb::byte_vector &tags,
1657 gdb_assert (!tags.empty ());
1658 gdb_assert (address !=
nullptr);
1698 size_t n = tags.size ();
1701 warning (_(
"Got more tags than memory granules. Tags will be "
1704 warning (_(
"Using tag pattern to fill memory range."));
1715static struct value *
1719 gdb_assert (
address !=
nullptr);
1737 if (!atag.has_value ())
1753 if (tag_value ==
nullptr)
1758 return string_printf (
"0x%s", phex_nz (tag,
sizeof (tag)));
1767 enum gdb_signal siggnal)
1771 if (!tdep->
has_mte () || siggnal != GDB_SIGNAL_SEGV)
1774 CORE_ADDR fault_addr = 0;
1786 catch (
const gdb_exception_error &exception)
1798 uiout->
field_string (
"sigcode-meaning", _(
"Memory tag violation"));
1803 uiout->
text (_(
" while accessing address "));
1807 gdb::optional<CORE_ADDR> atag
1812 if (!atag.has_value ())
1813 uiout->
text (_(
"Allocation tag unavailable"));
1816 uiout->
text (_(
"Allocation tag "));
1817 uiout->
field_string (
"allocation-tag", hex_string (*atag));
1819 uiout->
text (_(
"Logical tag "));
1820 uiout->
field_string (
"logical-tag", hex_string (ltag));
1826 uiout->
text (_(
"Fault address unavailable"));
1836 gdb_assert (
obfd !=
nullptr);
1837 gdb_assert (
size > 0);
1843 asection *mte_section
1844 = bfd_make_section_anyway_with_flags (
obfd,
"memtag", SEC_HAS_CONTENTS);
1846 if (mte_section ==
nullptr)
1849 bfd_set_section_vma (mte_section,
address);
1852 mte_section->rawsize =
size;
1858 bfd_set_section_size (mte_section, (tags_count + 1) >> 1);
1860 bfd_record_phdr (
obfd, PT_AARCH64_MEMTAG_MTE, 1, 0, 0, 0, 0, 0, 1,
1867#define MAX_TAGS_TO_TRANSFER 1024
1876 size_t segment_size = osec->rawsize;
1877 CORE_ADDR start_address = bfd_section_vma (osec);
1878 CORE_ADDR end_address = start_address + segment_size;
1888 CORE_ADDR
address = start_address;
1891 gdb::byte_vector tags;
1893 while (granules > 0)
1896 gdb::byte_vector tags_read;
1905 warning (_(
"Failed to read MTE tags from memory range [%s,%s)."),
1906 phex_nz (start_address,
sizeof (start_address)),
1907 phex_nz (end_address,
sizeof (end_address)));
1912 tags.insert (tags.end (), tags_read.begin (), tags_read.end ());
1915 granules -= tags_read.size ();
1922 if (!bfd_set_section_contents (osec->owner, osec, tags.data (),
1925 warning (_(
"Failed to write %s bytes of corefile memory "
1926 "tag content (%s)."),
1927 pulongest (tags.size ()),
1928 bfd_errmsg (bfd_get_error ()));
1939static gdb::byte_vector
1941 bfd_section *section,
1943 CORE_ADDR
address,
size_t length)
1945 gdb_assert (section !=
nullptr);
1948 gdb_assert (section->vma <=
address);
1954 gdb_assert (granules > 0);
1957 size_t granules_from_vma
1959 address - section->vma + length,
1963 gdb::byte_vector tags (((granules - 1) >> 1) + 1);
1966 file_ptr
offset = ((granules_from_vma - granules) >> 1);
1968 if (!bfd_get_section_contents (section->owner, section, tags.data (),
1970 error (_(
"Couldn't read contents from memtag section."));
1974 bool skip_first = ((granules_from_vma - granules) % 2) != 0;
1978 tags.resize (granules);
2003 CORE_ADDR cmask, dmask;
2020 static const char *
const stap_integer_prefixes[] = {
"#",
"", NULL };
2021 static const char *
const stap_register_prefixes[] = {
"", NULL };
2022 static const char *
const stap_register_indirection_prefixes[] = {
"[",
2024 static const char *
const stap_register_indirection_suffixes[] = {
"]",
2057 stap_register_indirection_prefixes);
2059 stap_register_indirection_suffixes);
2300aarch64_linux_ltag_tests (
void)
2304 for (
int i = 0; i < 1 << 8; i++)
2306 CORE_ADDR addr = ((CORE_ADDR) i << 56) | 0xdeadbeef;
2310 SELF_CHECK (addr = ((CORE_ADDR) (i & 0xf) << 56) | 0xdeadbeef);
2325 selftests::register_test (
"aarch64-linux-tagged-address",
2326 selftests::aarch64_linux_ltag_tests);
#define AARCH64_EXTRA_DATAP_OFFSET
@ aarch64_sys_sync_file_range
@ aarch64_sys_mq_getsetattr
@ aarch64_sys_sched_setaffinity
@ aarch64_sys_migrate_pages
@ aarch64_sys_timer_create
@ aarch64_sys_fanotify_mark
@ aarch64_sys_sync_file_range2
@ aarch64_sys_setdomainname
@ aarch64_sys_remap_file_pages
@ aarch64_sys_sched_getaffinity
@ aarch64_sys_timer_settime
@ aarch64_sys_timer_getoverrun
@ aarch64_sys_sched_setscheduler
@ aarch64_sys_fremovexattr
@ aarch64_sys_settimeofday
@ aarch64_sys_rt_sigpending
@ aarch64_sys_inotify_add_watch
@ aarch64_sys_timerfd_gettime
@ aarch64_sys_inotify_init1
@ aarch64_sys_mq_timedsend
@ aarch64_sys_sethostname
@ aarch64_sys_sched_getparam
@ aarch64_sys_sched_get_priority_max
@ aarch64_sys_sched_get_priority_min
@ aarch64_sys_process_vm_readv
@ aarch64_sys_clock_settime
@ aarch64_sys_timer_delete
@ aarch64_sys_epoll_create1
@ aarch64_sys_removexattr
@ aarch64_sys_finit_module
@ aarch64_sys_get_mempolicy
@ aarch64_sys_getpriority
@ aarch64_sys_set_mempolicy
@ aarch64_sys_set_robust_list
@ aarch64_sys_fanotify_init
@ aarch64_sys_getsockname
@ aarch64_sys_timerfd_create
@ aarch64_sys_io_getevents
@ aarch64_sys_rt_sigqueueinfo
@ aarch64_sys_sigaltstack
@ aarch64_sys_rt_sigprocmask
@ aarch64_sys_epoll_pwait
@ aarch64_sys_sched_getattr
@ aarch64_sys_open_by_handle_at
@ aarch64_sys_clock_gettime
@ aarch64_sys_inotify_rm_watch
@ aarch64_sys_clock_adjtime
@ aarch64_sys_sched_getscheduler
@ aarch64_sys_setpriority
@ aarch64_sys_lookup_dcookie
@ aarch64_sys_lremovexattr
@ aarch64_sys_set_tid_address
@ aarch64_sys_mq_timedreceive
@ aarch64_sys_name_to_handle_at
@ aarch64_sys_rt_sigtimedwait
@ aarch64_sys_gettimeofday
@ aarch64_sys_delete_module
@ aarch64_sys_rt_sigreturn
@ aarch64_sys_getpeername
@ aarch64_sys_sched_setparam
@ aarch64_sys_request_key
@ aarch64_sys_sched_rr_get_interval
@ aarch64_sys_clock_nanosleep
@ aarch64_sys_process_vm_writev
@ aarch64_sys_clock_getres
@ aarch64_sys_init_module
@ aarch64_sys_timerfd_settime
@ aarch64_sys_rt_tgsigqueueinfo
@ aarch64_sys_get_robust_list
@ aarch64_sys_rt_sigaction
@ aarch64_sys_sched_setattr
@ aarch64_sys_rt_sigsuspend
@ aarch64_sys_timer_gettime
@ aarch64_sys_perf_event_open
@ aarch64_sys_sched_yield
@ aarch64_sys_personality
#define MAX_TAGS_TO_TRANSFER
static linux_record_tdep aarch64_linux_record_tdep
static int aarch64_all_but_pc_registers_record(struct regcache *regcache)
static expr::operation_up aarch64_stap_parse_special_token(struct gdbarch *gdbarch, struct stap_parse_info *p)
#define SVE_HEADER_RESERVED_LENGTH
#define SVE_HEADER_MAX_VL_LENGTH
#define SVE_HEADER_RESERVED_OFFSET
#define SVE_HEADER_FLAGS_LENGTH
#define AARCH64_SIGCONTEXT_REG_SIZE
#define SVE_HEADER_SIZE_LENGTH
#define AARCH64_SVE_CONTEXT_VL_OFFSET
#define SVE_HEADER_FLAG_SVE
static std::string aarch64_linux_gcc_target_options(struct gdbarch *gdbarch)
static void aarch64_linux_collect_sve_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
static int aarch64_linux_syscall_record(struct regcache *regcache, unsigned long svc_number)
static uint64_t aarch64_linux_core_read_vq(struct gdbarch *gdbarch, bfd *abfd)
static gdb::optional< CORE_ADDR > aarch64_mte_get_atag(CORE_ADDR address)
#define AARCH64_UCONTEXT_SIGCONTEXT_OFFSET
#define AARCH64_FPSIMD_VREG_SIZE
#define AARCH64_SVE_CONTEXT_P_REGS_OFFSET(vq)
#define SVE_HEADER_FLAGS_OFFSET
static const struct regcache_map_entry aarch64_linux_fpregmap[]
static bool aarch64_linux_set_memtags(struct gdbarch *gdbarch, struct value *address, size_t length, const gdb::byte_vector &tags, memtag_type tag_type)
static struct value * aarch64_linux_get_memtag(struct gdbarch *gdbarch, struct value *address, memtag_type tag_type)
static const struct tramp_frame aarch64_linux_rt_sigframe
static void aarch64_linux_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
static const struct regcache_map_entry aarch64_linux_gregmap[]
#define AARCH64_SIGCONTEXT_RESERVED_SIZE
#define AARCH64_SVE_CONTEXT_FFR_OFFSET(vq)
static bool aarch64_linux_fill_memtag_section(struct gdbarch *gdbarch, asection *osec)
const struct regset aarch64_linux_fpregset
static void aarch64_linux_report_signal_info(struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal)
#define AARCH64_FPSIMD_FPCR_OFFSET
#define AARCH64_SVE_CONTEXT_REGS_OFFSET
#define SVE_HEADER_MAX_SIZE_OFFSET
static enum gdb_syscall aarch64_canonicalize_syscall(enum aarch64_syscall syscall_number)
static gdb::byte_vector aarch64_linux_decode_memtag_section(struct gdbarch *gdbarch, bfd_section *section, int type, CORE_ADDR address, size_t length)
#define AARCH64_FPSIMD_FPSR_OFFSET
#define AARCH64_SIGCONTEXT_XO_OFFSET
#define SVE_HEADER_VL_LENGTH
static CORE_ADDR aarch64_remove_non_address_bits(struct gdbarch *gdbarch, CORE_ADDR pointer)
#define AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET
static uint32_t read_aarch64_ctx(CORE_ADDR ctx_addr, enum bfd_endian byte_order, uint32_t *size)
static void aarch64_linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
static void aarch64_linux_sigframe_init(const struct tramp_frame *self, frame_info_ptr this_frame, struct trad_frame_cache *this_cache, CORE_ADDR func)
void _initialize_aarch64_linux_tdep()
#define SYSCALL_MAP(SYSCALL)
static bool aarch64_linux_tagged_address_p(struct gdbarch *gdbarch, struct value *address)
#define AARCH64_FPSIMD_MAGIC
#define UNSUPPORTED_SYSCALL_MAP(SYSCALL)
#define AARCH64_SVE_CONTEXT_SIZE(vq)
static LONGEST aarch64_linux_get_syscall_number(struct gdbarch *gdbarch, thread_info *thread)
#define AARCH64_FPSIMD_V0_OFFSET
#define SVE_HEADER_SIZE_OFFSET
#define AARCH64_EXTRA_MAGIC
static int aarch64_stap_is_single_operand(struct gdbarch *gdbarch, const char *s)
static void aarch64_linux_supply_sve_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
static const struct target_desc * aarch64_linux_core_read_description(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
#define AARCH64_SVE_MAGIC
#define SVE_HEADER_MAX_VL_OFFSET
static asection * aarch64_linux_create_memtag_section(struct gdbarch *gdbarch, bfd *obfd, CORE_ADDR address, size_t size)
static std::string aarch64_linux_memtag_to_string(struct gdbarch *gdbarch, struct value *tag_value)
static void aarch64_linux_restore_vreg(struct trad_frame_cache *cache, int num_regs, int vreg_num, CORE_ADDR offset, enum bfd_endian byte_order, bool has_sve)
static bool aarch64_linux_memtag_matches_p(struct gdbarch *gdbarch, struct value *address)
#define SVE_HEADER_VL_OFFSET
const struct regset aarch64_linux_gregset
#define SVE_HEADER_MAX_SIZE_LENGTH
#define AARCH64_SIGCONTEXT_RESERVED_OFFSET
#define AARCH64_LINUX_SIZEOF_GREGSET
#define AARCH64_LINUX_SIZEOF_MTE_REGSET
#define AARCH64_HWCAP_PACA
#define AARCH64_LINUX_SIZEOF_FPREGSET
#define AARCH64_LINUX_SIZEOF_PAUTH
CORE_ADDR aarch64_mte_get_ltag(CORE_ADDR address)
size_t aarch64_mte_get_tag_granules(CORE_ADDR addr, size_t len, size_t granule_size)
void aarch64_mte_unpack_tags(gdb::byte_vector &tags, bool skip_first)
CORE_ADDR aarch64_mte_set_ltag(CORE_ADDR address, CORE_ADDR tag)
void aarch64_mte_pack_tags(gdb::byte_vector &tags)
#define AARCH64_MTE_GRANULE_SIZE
displaced_step_copy_insn_closure_up aarch64_displaced_step_copy_insn(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
bool aarch64_displaced_step_hw_singlestep(struct gdbarch *gdbarch)
const target_desc * aarch64_read_description(const aarch64_features &features)
int aarch64_process_record(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR insn_addr)
void aarch64_displaced_step_fixup(struct gdbarch *gdbarch, struct displaced_step_copy_insn_closure *dsc_, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
#define AARCH64_DISPLACED_MODIFIED_INSNS
CORE_ADDR aarch64_remove_top_bits(CORE_ADDR pointer, CORE_ADDR mask)
CORE_ADDR aarch64_mask_from_pac_registers(const CORE_ADDR cmask, const CORE_ADDR dmask)
#define AARCH64_Q0_REGNUM
#define AARCH64_H0_REGNUM
#define AARCH64_SVE_P_REGS_NUM
#define sve_vq_from_vl(vl)
#define sve_vl_from_vq(vq)
#define AARCH64_TOP_BITS_MASK
#define AARCH64_SVE_V0_REGNUM
#define AARCH64_B0_REGNUM
#define AARCH64_TLS_REGISTER_SIZE
#define sve_vg_from_vl(vl)
#define AARCH64_S0_REGNUM
#define AARCH64_SVE_Z_REGS_NUM
#define AARCH64_MAX_SVE_VQ
#define AARCH64_D0_REGNUM
#define AARCH64_PAUTH_DMASK_REGNUM(pauth_reg_base)
gdb::optional< gdb::byte_vector > target_read_auxv_raw(target_ops *ops)
enum register_status cooked_read(int regnum, gdb_byte *buf)
void raw_supply(int regnum, const void *buf) override
void raw_supply_zeroed(int regnum)
void collect_regset(const struct regset *regset, int regbase, int regnum, void *buf, size_t size) const
void supply_regset(const struct regset *regset, int regbase, int regnum, const void *buf, size_t size)
void field_core_addr(const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address)
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
void text(const char *string)
void store_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, T val)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
LONGEST parse_and_eval_long(const char *exp)
void exception_print(struct ui_file *file, const struct gdb_exception &e)
ssize_t read(int fd, void *buf, size_t count)
ULONGEST get_frame_register_unsigned(frame_info_ptr frame, int regnum)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
#define ptrace(request, pid, addr, data)
void set_gdbarch_process_record(struct gdbarch *gdbarch, gdbarch_process_record_ftype *process_record)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void set_gdbarch_stap_parse_special_token(struct gdbarch *gdbarch, gdbarch_stap_parse_special_token_ftype *stap_parse_special_token)
void set_gdbarch_stap_integer_prefixes(struct gdbarch *gdbarch, const char *const *stap_integer_prefixes)
void set_gdbarch_max_insn_length(struct gdbarch *gdbarch, ULONGEST max_insn_length)
void set_gdbarch_core_read_description(struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description)
void set_gdbarch_create_memtag_section(struct gdbarch *gdbarch, gdbarch_create_memtag_section_ftype *create_memtag_section)
void set_gdbarch_memtag_granule_size(struct gdbarch *gdbarch, CORE_ADDR memtag_granule_size)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code)
void set_gdbarch_stap_is_single_operand(struct gdbarch *gdbarch, gdbarch_stap_is_single_operand_ftype *stap_is_single_operand)
void set_gdbarch_tagged_address_p(struct gdbarch *gdbarch, gdbarch_tagged_address_p_ftype *tagged_address_p)
void set_gdbarch_get_syscall_number(struct gdbarch *gdbarch, gdbarch_get_syscall_number_ftype *get_syscall_number)
int gdbarch_num_regs(struct gdbarch *gdbarch)
void set_gdbarch_get_memtag(struct gdbarch *gdbarch, gdbarch_get_memtag_ftype *get_memtag)
int gdbarch_int_bit(struct gdbarch *gdbarch)
void set_gdbarch_memtag_matches_p(struct gdbarch *gdbarch, gdbarch_memtag_matches_p_ftype *memtag_matches_p)
void set_gdbarch_displaced_step_copy_insn(struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn)
void set_gdbarch_stap_register_indirection_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_prefixes)
void set_gdbarch_gcc_target_options(struct gdbarch *gdbarch, gdbarch_gcc_target_options_ftype *gcc_target_options)
void set_gdbarch_displaced_step_fixup(struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype *displaced_step_fixup)
CORE_ADDR gdbarch_remove_non_address_bits(struct gdbarch *gdbarch, CORE_ADDR pointer)
void set_gdbarch_memtag_to_string(struct gdbarch *gdbarch, gdbarch_memtag_to_string_ftype *memtag_to_string)
void set_gdbarch_remove_non_address_bits(struct gdbarch *gdbarch, gdbarch_remove_non_address_bits_ftype *remove_non_address_bits)
void set_gdbarch_report_signal_info(struct gdbarch *gdbarch, gdbarch_report_signal_info_ftype *report_signal_info)
void set_gdbarch_fetch_tls_load_module_address(struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address)
void set_gdbarch_displaced_step_hw_singlestep(struct gdbarch *gdbarch, gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep)
int gdbarch_long_bit(struct gdbarch *gdbarch)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
void set_gdbarch_fill_memtag_section(struct gdbarch *gdbarch, gdbarch_fill_memtag_section_ftype *fill_memtag_section)
void set_gdbarch_stap_register_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_prefixes)
void set_gdbarch_stap_register_indirection_suffixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_suffixes)
void set_gdbarch_set_memtags(struct gdbarch *gdbarch, gdbarch_set_memtags_ftype *set_memtags)
void set_gdbarch_skip_solib_resolver(struct gdbarch *gdbarch, gdbarch_skip_solib_resolver_ftype *skip_solib_resolver)
void set_gdbarch_decode_memtag_section(struct gdbarch *gdbarch, gdbarch_decode_memtag_section_ftype *decode_memtag_section)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections)
void() iterate_over_regset_sections_cb(const char *sect_name, int supply_size, int collect_size, const struct regset *regset, const char *human_name, void *cb_data)
struct type * lookup_pointer_type(struct type *type)
CORE_ADDR glibc_skip_solib_resolver(struct gdbarch *gdbarch, CORE_ADDR pc)
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
int record_linux_system_call(enum gdb_syscall syscall, struct regcache *regcache, struct linux_record_tdep *tdep)
link_map_offsets * linux_lp64_fetch_link_map_offsets()
CORE_ADDR linux_get_hwcap2()
void linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch, int num_disp_step_buffers)
bool linux_address_in_memtag_page(CORE_ADDR address)
CORE_ADDR linux_get_hwcap()
CORE_ADDR find_solib_trampoline_target(frame_info_ptr frame, CORE_ADDR pc)
std::unique_ptr< operation > operation_up
void gdbarch_register_osabi(enum bfd_architecture arch, unsigned long machine, enum gdb_osabi osabi, void(*init_osabi)(struct gdbarch_info, struct gdbarch *))
int record_full_arch_list_add_reg(struct regcache *regcache, int regnum)
void regcache_collect_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
struct regcache * get_current_regcache(void)
struct regcache * get_thread_regcache(process_stratum_target *target, ptid_t ptid)
void regcache_supply_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
static int regcache_map_entry_size(const struct regcache_map_entry *map)
#define REGSET_VARIABLE_SIZE
void(* func)(remote_target *remote, char *)
void set_solib_svr4_fetch_link_map_offsets(struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
CORE_ADDR svr4_fetch_objfile_link_map(struct objfile *objfile)
int(* aarch64_syscall_record)(struct regcache *regcache, unsigned long svc_number)
struct type * builtin_long
ULONGEST ioctl_TIOCGLCKTRMIOS
ULONGEST ioctl_TIOCMIWAIT
ULONGEST ioctl_TIOCGICOUNT
ULONGEST ioctl_TIOCSERGSTRUCT
ULONGEST ioctl_TIOCSERGETMULTI
ULONGEST ioctl_TIOCSERCONFIG
ULONGEST ioctl_TIOCSSOFTCAR
ULONGEST ioctl_TIOCSWINSZ
ULONGEST ioctl_TIOCTTYGSTRUCT
int size_hayes_esp_config
ULONGEST ioctl_TIOCSERSETMULTI
ULONGEST ioctl_TIOCSSERIAL
int size_serial_icounter_struct
ULONGEST ioctl_TIOCSPTLCK
ULONGEST ioctl_TIOCGSOFTCAR
ULONGEST ioctl_TIOCGSERIAL
ULONGEST ioctl_TIOCSERGETLSR
ULONGEST ioctl_TIOCGWINSZ
ULONGEST ioctl_TIOCSERGWILD
ULONGEST ioctl_TIOCSLCKTRMIOS
ULONGEST ioctl_TIOCSHAYESESP
ULONGEST ioctl_TIOCGHAYESESP
ULONGEST ioctl_TIOCSERSWILD
int size__old_kernel_stat
std::vector< tdesc_feature_up > features
bool target_store_memtags(CORE_ADDR address, size_t len, const gdb::byte_vector &tags, int type)
bool target_fetch_memtags(CORE_ADDR address, size_t len, gdb::byte_vector &tags, int type)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void trad_frame_set_reg_value_bytes(struct trad_frame_cache *this_trad_cache, int regnum, gdb::array_view< const gdb_byte > bytes)
void trad_frame_set_reg_addr(struct trad_frame_cache *this_trad_cache, int regnum, CORE_ADDR addr)
void trad_frame_set_id(struct trad_frame_cache *this_trad_cache, struct frame_id this_id)
void tramp_frame_prepend_unwinder(struct gdbarch *gdbarch, const struct tramp_frame *tramp_frame)
#define TRAMP_SENTINEL_INSN
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
void gdb_printf(struct ui_file *stream, const char *format,...)
CORE_ADDR value_as_address(struct value *val)
struct value * value_from_ulongest(struct type *type, ULONGEST num)
gdb::array_view< gdb_byte > value_contents_raw(struct value *value)
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)