#include "defs.h"
#include "gdbarch.h"
-#include "arch-utils.h"
#include "glibc-tdep.h"
#include "linux-tdep.h"
#include "aarch64-tdep.h"
#include "symtab.h"
#include "tramp-frame.h"
#include "trad-frame.h"
+#include "target/target.h"
-#include "inferior.h"
#include "regcache.h"
#include "regset.h"
-#include "cli/cli-utils.h"
#include "stap-probe.h"
#include "parser-defs.h"
#include "user-regs.h"
#include "record-full.h"
#include "linux-record.h"
-#include "auxv.h"
-#include "elf/common.h"
/* Signal frame handling.
return 0;
}
- size_t size = bfd_section_size (abfd, sve_section);
+ size_t size = bfd_section_size (sve_section);
/* Check extended state size. */
if (size < SVE_HEADER_SIZE)
else
cb (".reg2", AARCH64_LINUX_SIZEOF_FPREGSET, AARCH64_LINUX_SIZEOF_FPREGSET,
&aarch64_linux_fpregset, NULL, cb_data);
+
+
+ if (tdep->has_pauth ())
+ {
+ /* Create this on the fly in order to handle the variable location. */
+ const struct regcache_map_entry pauth_regmap[] =
+ {
+ { 2, AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base), 8},
+ { 0 }
+ };
+
+ const struct regset aarch64_linux_pauth_regset =
+ {
+ pauth_regmap, regcache_supply_regset, regcache_collect_regset
+ };
+
+ cb (".reg-aarch-pauth", AARCH64_LINUX_SIZEOF_PAUTH,
+ AARCH64_LINUX_SIZEOF_PAUTH, &aarch64_linux_pauth_regset,
+ "pauth registers", cb_data);
+ }
}
/* Implement the "core_read_description" gdbarch method. */
aarch64_linux_core_read_description (struct gdbarch *gdbarch,
struct target_ops *target, bfd *abfd)
{
- CORE_ADDR aarch64_hwcap = 0;
-
- if (target_auxv_search (target, AT_HWCAP, &aarch64_hwcap) != 1)
- return NULL;
+ CORE_ADDR hwcap = linux_get_hwcap (target);
- return aarch64_read_description (aarch64_linux_core_read_vq (gdbarch, abfd));
+ return aarch64_read_description (aarch64_linux_core_read_vq (gdbarch, abfd),
+ hwcap & AARCH64_HWCAP_PACA);
}
/* Implementation of `gdbarch_stap_is_single_operand', as defined in
This function will only ever get called when stopped at the entry or exit
of a syscall, so by checking for 0 in x0 (arg0/retval), x1 (arg1), x8
(syscall), x29 (FP) and x30 (LR) we can infer:
- 1) Either inferior is at exit from sucessful execve.
+ 1) Either inferior is at exit from successful execve.
2) Or inferior is at entry to a call to io_setup with invalid arguments and
a corrupted FP and LR.
It should be safe enough to assume case 1. */
/* Implement the "gcc_target_options" gdbarch method. */
-static char *
+static std::string
aarch64_linux_gcc_target_options (struct gdbarch *gdbarch)
{
/* GCC doesn't know "-m64". */
- return NULL;
+ return {};
}
static void
set_gdbarch_get_syscall_number (gdbarch, aarch64_linux_get_syscall_number);
/* Displaced stepping. */
- set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
+ set_gdbarch_max_insn_length (gdbarch, 4 * AARCH64_DISPLACED_MODIFIED_INSNS);
set_gdbarch_displaced_step_copy_insn (gdbarch,
aarch64_displaced_step_copy_insn);
set_gdbarch_displaced_step_fixup (gdbarch, aarch64_displaced_step_fixup);