X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Faarch64-tdep.h;h=f6ebabeaeb95b49010c0e70cfd9ca714e554a52f;hb=a435742a7fb32f6320ce0e6074e2500e28378104;hp=30a5ee360fe161536c27d984a76f64586b6074f6;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h index 30a5ee360f..f6ebabeaeb 100644 --- a/gdb/aarch64-tdep.h +++ b/gdb/aarch64-tdep.h @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on AArch64 systems. - Copyright (C) 2009-2014 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -22,6 +22,9 @@ #ifndef AARCH64_TDEP_H #define AARCH64_TDEP_H +#include "arch/aarch64.h" +#include "infrun.h" + /* Forward declarations. */ struct gdbarch; struct regset; @@ -29,33 +32,14 @@ struct regset; /* AArch64 Dwarf register numbering. */ #define AARCH64_DWARF_X0 0 #define AARCH64_DWARF_SP 31 +#define AARCH64_DWARF_PAUTH_RA_STATE 34 +#define AARCH64_DWARF_PAUTH_DMASK 35 +#define AARCH64_DWARF_PAUTH_CMASK 36 #define AARCH64_DWARF_V0 64 - -/* Register numbers of various important registers. */ -enum aarch64_regnum -{ - AARCH64_X0_REGNUM, /* First integer register */ - - /* Frame register in AArch64 code, if used. */ - AARCH64_FP_REGNUM = AARCH64_X0_REGNUM + 29, - AARCH64_LR_REGNUM = AARCH64_X0_REGNUM + 30, /* Return address */ - AARCH64_SP_REGNUM, /* Stack pointer */ - AARCH64_PC_REGNUM, /* Program counter */ - AARCH64_CPSR_REGNUM, /* Contains status register */ - AARCH64_V0_REGNUM, /* First floating point / vector register */ - - /* Last floating point / vector register */ - AARCH64_V31_REGNUM = AARCH64_V0_REGNUM + 31, - AARCH64_FPSR_REGNUM, /* Floating point status register */ - AARCH64_FPCR_REGNUM, /* Floating point control register */ - - /* Other useful registers. */ - - /* Last integer-like argument */ - AARCH64_LAST_X_ARG_REGNUM = AARCH64_X0_REGNUM + 7, - AARCH64_STRUCT_RETURN_REGNUM = AARCH64_X0_REGNUM + 8, - AARCH64_LAST_V_ARG_REGNUM = AARCH64_V0_REGNUM + 7 -}; +#define AARCH64_DWARF_SVE_VG 46 +#define AARCH64_DWARF_SVE_FFR 47 +#define AARCH64_DWARF_SVE_P0 48 +#define AARCH64_DWARF_SVE_Z0 96 /* Size of integer registers. */ #define X_REGISTER_SIZE 8 @@ -68,6 +52,12 @@ enum aarch64_regnum /* Total number of general (X) registers. */ #define AARCH64_X_REGISTER_COUNT 32 +/* Total number of D registers. */ +#define AARCH64_D_REGISTER_COUNT 32 + +/* The maximum number of modified instructions generated for one + single-stepped instruction. */ +#define AARCH64_DISPLACED_MODIFIED_INSNS 1 /* Target-dependent structure in gdbarch. */ struct gdbarch_tdep @@ -82,16 +72,52 @@ struct gdbarch_tdep /* And the size of each entry in the buf. */ size_t jb_elt_size; - /* Cached core file helpers. */ - struct regset *gregset; - struct regset *fpregset; - /* Types for AdvSISD registers. */ struct type *vnq_type; struct type *vnd_type; struct type *vns_type; struct type *vnh_type; struct type *vnb_type; + struct type *vnv_type; + + /* syscall record. */ + int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number); + + /* The VQ value for SVE targets, or zero if SVE is not supported. */ + uint64_t vq; + + /* Returns true if the target supports SVE. */ + bool has_sve () const + { + return vq != 0; + } + + int pauth_reg_base; + int pauth_ra_state_regnum; + + /* Returns true if the target supports pauth. */ + bool has_pauth () const + { + return pauth_reg_base != -1; + } }; +const target_desc *aarch64_read_description (uint64_t vq, bool pauth_p); + +extern int aarch64_process_record (struct gdbarch *gdbarch, + struct regcache *regcache, CORE_ADDR addr); + +displaced_step_closure_up + aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch, + CORE_ADDR from, CORE_ADDR to, + struct regcache *regs); + +void aarch64_displaced_step_fixup (struct gdbarch *gdbarch, + struct displaced_step_closure *dsc, + CORE_ADDR from, CORE_ADDR to, + struct regcache *regs); + +int aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch, + struct displaced_step_closure *closure); + #endif /* aarch64-tdep.h */