56#include "gdbsupport/selftest.h"
58#include "elf/common.h"
59#include "elf/aarch64.h"
148#define AARCH64_SIGCONTEXT_REG_SIZE 8
149#define AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET 128
150#define AARCH64_UCONTEXT_SIGCONTEXT_OFFSET 176
151#define AARCH64_SIGCONTEXT_XO_OFFSET 8
152#define AARCH64_SIGCONTEXT_RESERVED_OFFSET 288
154#define AARCH64_SIGCONTEXT_RESERVED_SIZE 4096
157#define AARCH64_EXTRA_MAGIC 0x45585401
158#define AARCH64_FPSIMD_MAGIC 0x46508001
159#define AARCH64_SVE_MAGIC 0x53564501
160#define AARCH64_ZA_MAGIC 0x54366345
161#define AARCH64_TPIDR2_MAGIC 0x54504902
162#define AARCH64_ZT_MAGIC 0x5a544e01
165#define AARCH64_EXTRA_DATAP_OFFSET 8
168#define AARCH64_FPSIMD_FPSR_OFFSET 8
169#define AARCH64_FPSIMD_FPCR_OFFSET 12
170#define AARCH64_FPSIMD_V0_OFFSET 16
171#define AARCH64_FPSIMD_VREG_SIZE 16
174#define AARCH64_SVE_CONTEXT_VL_OFFSET 8
175#define AARCH64_SVE_CONTEXT_FLAGS_OFFSET 10
176#define AARCH64_SVE_CONTEXT_REGS_OFFSET 16
177#define AARCH64_SVE_CONTEXT_P_REGS_OFFSET(vq) (32 * vq * 16)
178#define AARCH64_SVE_CONTEXT_FFR_OFFSET(vq) \
179 (AARCH64_SVE_CONTEXT_P_REGS_OFFSET (vq) + (16 * vq * 2))
180#define AARCH64_SVE_CONTEXT_SIZE(vq) \
181 (AARCH64_SVE_CONTEXT_FFR_OFFSET (vq) + (vq * 2))
183#define SVE_SIG_FLAG_SM 0x1
186#define AARCH64_SME_CONTEXT_SVL_OFFSET 8
187#define AARCH64_SME_CONTEXT_REGS_OFFSET 16
188#define AARCH64_SME_CONTEXT_ZA_SIZE(svq) \
189 ((sve_vl_from_vq (svq) * sve_vl_from_vq (svq)))
190#define AARCH64_SME_CONTEXT_SIZE(svq) \
191 (AARCH64_SME_CONTEXT_REGS_OFFSET + AARCH64_SME_CONTEXT_ZA_SIZE (svq))
194#define AARCH64_TPIDR2_CONTEXT_TPIDR2_OFFSET 8
199#define AARCH64_SME2_CONTEXT_NREGS_OFFSET 8
202#define AARCH64_SME2_CONTEXT_REGS_OFFSET 16
276 CORE_ADDR fpsimd_context)
292 for (
int i = 0; i < 32; i++)
301 error (_(
"Failed to read fpsimd register from signal context."));
303 if (byte_order == BFD_ENDIAN_BIG)
368 std::vector<gdb_byte> z_buffer (tdep->
vq * 16);
400 CORE_ADDR section = signal_frame.
section;
402 uint32_t
size, magic;
403 bool extra_found =
false;
404 enum bfd_endian byte_order
429 warning (_(
"Failed to read the vector length from the SVE "
430 "signal frame context."));
442 warning (_(
"Failed to read the flags from the SVE signal frame"
474 warning (_(
"Failed to read the streaming vector length from "
475 "ZA signal frame context."));
509 warning (_(
"Failed to read the number of ZT registers from the "
510 "ZT signal frame context."));
538 warning (_(
"Failed to read the extra section address from the"
539 " signal frame context."));
558 if (!extra_found && section > section_end)
565 error (_(
"While reading signal context information, found a ZT context "
566 "without a ZA context, which is invalid."));
586 for (
int i = 0; i < 31; i++)
609 for (
int i = 0; i < 32; i++)
611 offset = sve_regs + (i * vq * 16);
630 for (
int i = 0; i < 16; i++)
632 offset + (i * vq * 2));
713 gdb_assert (cache !=
nullptr);
731 info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64);
743 {0xd2801168, ULONGEST_MAX},
747 {0xd4000001, ULONGEST_MAX},
790#define SVE_HEADER_SIZE_LENGTH 4
791#define SVE_HEADER_MAX_SIZE_LENGTH 4
792#define SVE_HEADER_VL_LENGTH 2
793#define SVE_HEADER_MAX_VL_LENGTH 2
794#define SVE_HEADER_FLAGS_LENGTH 2
795#define SVE_HEADER_RESERVED_LENGTH 2
797#define SVE_HEADER_SIZE_OFFSET 0
798#define SVE_HEADER_MAX_SIZE_OFFSET \
799 (SVE_HEADER_SIZE_OFFSET + SVE_HEADER_SIZE_LENGTH)
800#define SVE_HEADER_VL_OFFSET \
801 (SVE_HEADER_MAX_SIZE_OFFSET + SVE_HEADER_MAX_SIZE_LENGTH)
802#define SVE_HEADER_MAX_VL_OFFSET \
803 (SVE_HEADER_VL_OFFSET + SVE_HEADER_VL_LENGTH)
804#define SVE_HEADER_FLAGS_OFFSET \
805 (SVE_HEADER_MAX_VL_OFFSET + SVE_HEADER_MAX_VL_LENGTH)
806#define SVE_HEADER_RESERVED_OFFSET \
807 (SVE_HEADER_FLAGS_OFFSET + SVE_HEADER_FLAGS_LENGTH)
808#define SVE_HEADER_SIZE \
809 (SVE_HEADER_RESERVED_OFFSET + SVE_HEADER_RESERVED_LENGTH)
811#define SVE_HEADER_FLAG_SVE 1
820 const char *section_name)
822 gdb_assert (section_name !=
nullptr);
824 asection *section = bfd_get_section_by_name (abfd, section_name);
826 if (section ==
nullptr)
832 size_t size = bfd_section_size (section);
837 warning (_(
"'%s' core file section is too small. "
838 "Expected %s bytes, got %s bytes"), section_name,
845 if (!bfd_get_section_contents (abfd, section, header, 0,
SVE_HEADER_SIZE))
847 warning (_(
"Couldn't read sve header from "
848 "'%s' core file section."), section_name);
860 warning (_(
"SVE/SSVE vector length in core file is invalid."
878 asection *section = bfd_get_section_by_name (
core_bfd,
".reg-aarch-ssve");
880 if (section !=
nullptr)
885 if (bfd_get_section_contents (
core_bfd, section, header, 0,
917 gdb_byte *header = (gdb_byte *) buf;
937 gdb_byte vg_target[8];
938 store_integer ((gdb_byte *)&vg_target,
sizeof (uint64_t), byte_order,
975 void *buf,
size_t size,
int vg_regnum)
977 gdb_byte *header = (gdb_byte *) buf;
981 gdb_assert (buf !=
nullptr);
1037 memset (header, 0, 8);
1051 gdb_byte *header = (gdb_byte *) buf;
1055 uint64_t vq = tdep->
vq;
1057 gdb_assert (buf != NULL);
1125 bool streaming_mode =
false;
1138 streaming_mode =
true;
1164 gdb_byte *header = (gdb_byte *) buf;
1228 gdb_byte *header = (gdb_byte *) buf;
1237 error (_(
"ZA state header size (%s) invalid. Should be at least %s."),
1264 bool has_za_payload = (data_size > 0);
1274 svcr &= ~SVCR_ZA_BIT;
1290 error (_(
"ZA header + payload size (%s) invalid. Should be at "
1299 gdb_byte za_zeroed[za_bytes];
1300 memset (za_zeroed, 0, za_bytes);
1314 gdb_assert (buf !=
nullptr);
1329 = gdbarch_tdep<aarch64_gdbarch_tdep> (
regcache->
arch ());
1340 gdb_byte *header = (gdb_byte *) buf;
1396 = gdbarch_tdep<aarch64_gdbarch_tdep> (
regcache->
arch ());
1416 gdb_assert (buf !=
nullptr);
1419 = gdbarch_tdep<aarch64_gdbarch_tdep> (
regcache->
arch ());
1452 const struct regset aarch64_linux_ssve_regset =
1468 cb (
".reg-aarch-ssve",
1472 &aarch64_linux_ssve_regset,
"SSVE registers", cb_data);
1476 const struct regset aarch64_linux_sve_regset =
1483 cb (
".reg-aarch-sve",
1486 &aarch64_linux_sve_regset,
"SVE registers", cb_data);
1503 const struct regset aarch64_linux_za_regset =
1510 cb (
".reg-aarch-za",
1513 &aarch64_linux_za_regset,
"ZA register", cb_data);
1526 const struct regset aarch64_linux_zt_regset =
1533 cb (
".reg-aarch-zt",
1536 &aarch64_linux_zt_regset,
"ZT registers", cb_data);
1549 const struct regset aarch64_linux_pauth_regset =
1556 "pauth registers", cb_data);
1569 const struct regset aarch64_linux_mte_regset =
1576 "MTE registers", cb_data);
1585 int sizeof_tls_regset
1595 const struct regset aarch64_linux_tls_regset =
1601 cb (
".reg-aarch-tls", sizeof_tls_regset, sizeof_tls_regset,
1602 &aarch64_linux_tls_regset,
"TLS register", cb_data);
1631 asection *tls = bfd_get_section_by_name (abfd,
".reg-aarch-tls");
1634 size_t size = bfd_section_size (tls);
1644 if (bfd_get_section_by_name (abfd,
".reg-aarch-zt") !=
nullptr)
1648 if (bfd_get_section_by_name (abfd,
".reg-aarch-za") !=
nullptr)
1651 warning (_(
"While reading core file sections, found ZT registers entry "
1652 "but no ZA register entry. The ZT contents will be "
1665 return (*s ==
'#' || isdigit (*s)
1686 const char *tmp = p->
arg;
1698 while (isalnum (*tmp))
1705 std::string regname (start, len);
1708 error (_(
"Invalid register name `%s' on expression `%s'."),
1712 tmp = skip_spaces (tmp);
1723 else if (*tmp ==
'+')
1726 if (!isdigit (*tmp))
1729 displacement = strtol (tmp, &endp, 10);
1737 using namespace expr;
1742 displacement = -displacement;
1743 operation_up disp = make_operation<long_const_operation> (long_type,
1748 = make_operation<register_operation> (std::move (regname));
1751 = make_operation<add_operation> (std::move (reg), std::move (disp));
1755 sum = make_operation<unop_cast_operation> (std::move (sum),
1757 return make_operation<unop_ind_operation> (std::move (sum));
2040#define SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \
2041 return gdb_sys_##SYSCALL
2043#define UNSUPPORTED_SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \
2044 return gdb_sys_no_syscall
2046 switch (syscall_number)
2342 LONGEST x1 = -1, fp = -1, lr = -1;
2346 if (x1 == 0 && fp ==0 && lr == 0)
2374 unsigned long svc_number)
2382 if (syscall_gdb < 0)
2385 _(
"Process record and replay target doesn't "
2386 "support syscall number %s\n"),
2387 plongest (svc_number));
2430static gdb::optional<CORE_ADDR>
2433 gdb::byte_vector tags;
2441 if (tags.size () != 1)
2442 error (_(
"Target returned an unexpected number of tags."));
2454 gdb_assert (address !=
nullptr);
2473 struct value *address)
2475 gdb_assert (address !=
nullptr);
2484 gdb::optional<CORE_ADDR> atag
2487 if (!atag.has_value ())
2494 return ltag == *atag;
2501 size_t length,
const gdb::byte_vector &tags,
2504 gdb_assert (!tags.empty ());
2505 gdb_assert (address !=
nullptr);
2545 size_t n = tags.size ();
2548 warning (_(
"Got more tags than memory granules. Tags will be "
2551 warning (_(
"Using tag pattern to fill memory range."));
2562static struct value *
2566 gdb_assert (
address !=
nullptr);
2584 if (!atag.has_value ())
2600 if (tag_value ==
nullptr)
2605 return string_printf (
"0x%s", phex_nz (tag,
sizeof (tag)));
2614 enum gdb_signal siggnal)
2618 if (!tdep->
has_mte () || siggnal != GDB_SIGNAL_SEGV)
2621 CORE_ADDR fault_addr = 0;
2633 catch (
const gdb_exception_error &exception)
2645 uiout->
field_string (
"sigcode-meaning", _(
"Memory tag violation"));
2650 uiout->
text (_(
" while accessing address "));
2654 gdb::optional<CORE_ADDR> atag
2659 if (!atag.has_value ())
2660 uiout->
text (_(
"Allocation tag unavailable"));
2663 uiout->
text (_(
"Allocation tag "));
2664 uiout->
field_string (
"allocation-tag", hex_string (*atag));
2666 uiout->
text (_(
"Logical tag "));
2667 uiout->
field_string (
"logical-tag", hex_string (ltag));
2673 uiout->
text (_(
"Fault address unavailable"));
2683 gdb_assert (
obfd !=
nullptr);
2684 gdb_assert (
size > 0);
2690 asection *mte_section
2691 = bfd_make_section_anyway_with_flags (
obfd,
"memtag", SEC_HAS_CONTENTS);
2693 if (mte_section ==
nullptr)
2696 bfd_set_section_vma (mte_section,
address);
2699 mte_section->rawsize =
size;
2705 bfd_set_section_size (mte_section, (tags_count + 1) >> 1);
2707 bfd_record_phdr (
obfd, PT_AARCH64_MEMTAG_MTE, 1, 0, 0, 0, 0, 0, 1,
2714#define MAX_TAGS_TO_TRANSFER 1024
2723 size_t segment_size = osec->rawsize;
2724 CORE_ADDR start_address = bfd_section_vma (osec);
2725 CORE_ADDR end_address = start_address + segment_size;
2735 CORE_ADDR
address = start_address;
2738 gdb::byte_vector tags;
2740 while (granules > 0)
2743 gdb::byte_vector tags_read;
2752 warning (_(
"Failed to read MTE tags from memory range [%s,%s)."),
2753 phex_nz (start_address,
sizeof (start_address)),
2754 phex_nz (end_address,
sizeof (end_address)));
2759 tags.insert (tags.end (), tags_read.begin (), tags_read.end ());
2762 granules -= tags_read.size ();
2769 if (!bfd_set_section_contents (osec->owner, osec, tags.data (),
2772 warning (_(
"Failed to write %s bytes of corefile memory "
2773 "tag content (%s)."),
2774 pulongest (tags.size ()),
2775 bfd_errmsg (bfd_get_error ()));
2786static gdb::byte_vector
2788 bfd_section *section,
2790 CORE_ADDR
address,
size_t length)
2792 gdb_assert (section !=
nullptr);
2795 gdb_assert (section->vma <=
address);
2801 gdb_assert (granules > 0);
2804 size_t granules_from_vma
2806 address - section->vma + length,
2810 gdb::byte_vector tags (((granules - 1) >> 1) + 1);
2813 file_ptr
offset = ((granules_from_vma - granules) >> 1);
2815 if (!bfd_get_section_contents (section->owner, section, tags.data (),
2817 error (_(
"Couldn't read contents from memtag section."));
2821 bool skip_first = ((granules_from_vma - granules) % 2) != 0;
2825 tags.resize (granules);
2838 gdb_assert (
obfd !=
nullptr);
2849 if (bfd_get_section_by_name (
obfd,
".reg-aarch-sve") !=
nullptr
2850 || bfd_get_section_by_name (
obfd,
".reg-aarch-za") !=
nullptr
2851 || bfd_get_section_by_name (
obfd,
".reg-aarch-zt") !=
nullptr)
2860 static const char *
const stap_integer_prefixes[] = {
"#",
"", NULL };
2861 static const char *
const stap_register_prefixes[] = {
"", NULL };
3142aarch64_linux_ltag_tests (
void)
3146 for (
int i = 0; i < 1 << 8; i++)
3148 CORE_ADDR addr = ((CORE_ADDR) i << 56) | 0xdeadbeef;
3152 SELF_CHECK (addr = ((CORE_ADDR) (i & 0xf) << 56) | 0xdeadbeef);
3167 selftests::register_test (
"aarch64-linux-tagged-address",
3168 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)
static void aarch64_linux_collect_zt_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
static void supply_sve_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
#define SVE_HEADER_RESERVED_LENGTH
#define SVE_HEADER_MAX_VL_LENGTH
#define AARCH64_SME_CONTEXT_SVL_OFFSET
#define SVE_HEADER_RESERVED_OFFSET
#define SVE_HEADER_FLAGS_LENGTH
#define AARCH64_SIGCONTEXT_REG_SIZE
static bool aarch64_use_target_description_from_corefile_notes(gdbarch *gdbarch, bfd *obfd)
#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)
#define AARCH64_SME_CONTEXT_SIZE(svq)
static gdb::optional< CORE_ADDR > aarch64_mte_get_atag(CORE_ADDR address)
static void aarch64_linux_restore_vregs(struct gdbarch *gdbarch, struct trad_frame_cache *cache, CORE_ADDR fpsimd_context)
#define AARCH64_UCONTEXT_SIGCONTEXT_OFFSET
static void aarch64_linux_supply_ssve_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
#define AARCH64_FPSIMD_VREG_SIZE
#define AARCH64_SVE_CONTEXT_P_REGS_OFFSET(vq)
#define SVE_HEADER_FLAGS_OFFSET
#define AARCH64_SVE_CONTEXT_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)
#define AARCH64_SME2_CONTEXT_NREGS_OFFSET
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_SME2_CONTEXT_REGS_OFFSET
static uint64_t aarch64_linux_core_read_vq(struct gdbarch *gdbarch, bfd *abfd, const char *section_name)
#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
static void aarch64_linux_supply_zt_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
#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
#define AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET
static void collect_inactive_sve_regset(const struct regcache *regcache, void *buf, size_t size, int vg_regnum)
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)
static void aarch64_linux_collect_za_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
#define AARCH64_TPIDR2_CONTEXT_TPIDR2_OFFSET
#define AARCH64_FPSIMD_MAGIC
#define UNSUPPORTED_SYSCALL_MAP(SYSCALL)
static void aarch64_linux_supply_za_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
#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)
#define AARCH64_SME_CONTEXT_REGS_OFFSET
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 void aarch64_linux_read_signal_frame_info(frame_info_ptr this_frame, struct aarch64_linux_sigframe &signal_frame)
static asection * aarch64_linux_create_memtag_section(struct gdbarch *gdbarch, bfd *obfd, CORE_ADDR address, size_t size)
static uint64_t aarch64_linux_core_read_vq_from_sections(struct gdbarch *gdbarch, bfd *core_bfd)
static void collect_sve_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
static void aarch64_linux_collect_ssve_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
static std::string aarch64_linux_memtag_to_string(struct gdbarch *gdbarch, struct value *tag_value)
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_TPIDR2_MAGIC
#define AARCH64_SIGCONTEXT_RESERVED_OFFSET
static struct gdbarch * aarch64_linux_sigframe_prev_arch(frame_info_ptr this_frame, void **frame_cache)
#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
bool sve_state_is_empty(const struct reg_buffer_common *reg_buf)
#define SVE_CORE_DUMMY_FLAGS
#define SVE_CORE_DUMMY_MAX_VL
#define SVE_CORE_DUMMY_MAX_SIZE
#define SVE_CORE_DUMMY_RESERVED
#define SVE_CORE_DUMMY_SIZE
displaced_step_copy_insn_closure_up aarch64_displaced_step_copy_insn(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
aarch64_features aarch64_features_from_target_desc(const struct target_desc *tdesc)
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, bool completed_p)
#define AARCH64_DISPLACED_MODIFIED_INSNS
#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 sve_vl_from_vg(vg)
#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_SME2_ZT0_SIZE
#define AARCH64_PAUTH_DMASK_REGNUM(pauth_reg_base)
struct gdbarch * gdbarch_find_by_info(struct gdbarch_info info)
gdb::optional< gdb::byte_vector > target_read_auxv_raw(target_ops *ops)
enum register_status cooked_read(int regnum, gdb_byte *buf)
void raw_collect(int regnum, void *buf) const override
void raw_supply(int regnum, const void *buf) override
void raw_supply_zeroed(int regnum)
void raw_collect_part(int regnum, int offset, int len, gdb_byte *out) const
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_use_target_description_from_corefile_notes(struct gdbarch *gdbarch, gdbarch_use_target_description_from_corefile_notes_ftype *use_target_description_from_corefile_notes)
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_displaced_step_buffer_length(struct gdbarch *gdbarch, ULONGEST displaced_step_buffer_length)
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)
const struct target_desc * gdbarch_target_desc(struct gdbarch *gdbarch)
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_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)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
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_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 *)
static const char *const stap_register_indirection_prefixes[]
static const char *const stap_register_indirection_suffixes[]
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)
unsigned int zt_register_count
CORE_ADDR sigcontext_address
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
gdb::array_view< gdb_byte > contents_raw()
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 trad_frame_set_reg_value(struct trad_frame_cache *this_trad_cache, int regnum, LONGEST val)
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)
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)