X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fi386-tdep.h;h=c0d494824cccc27d6d20280f9b8799c21a34afd9;hb=1163a4b7a38a79ebd153dc5ee76ce93877d21dbd;hp=2ada2bd96dc3c08ecee22a692f436ba5b0e8bd80;hpb=01f9f808e2e86187c95e7cff4aeb014a421a53ce;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h index 2ada2bd96d..c0d494824c 100644 --- a/gdb/i386-tdep.h +++ b/gdb/i386-tdep.h @@ -1,6 +1,6 @@ /* Target-dependent code for the i386. - Copyright (C) 2001-2014 Free Software Foundation, Inc. + Copyright (C) 2001-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -20,6 +20,8 @@ #ifndef I386_TDEP_H #define I386_TDEP_H +#include "infrun.h" + struct frame_info; struct gdbarch; struct reggroup; @@ -56,18 +58,13 @@ enum struct_return struct gdbarch_tdep { /* General-purpose registers. */ - struct regset *gregset; int *gregset_reg_offset; int gregset_num_regs; size_t sizeof_gregset; /* Floating-point registers. */ - struct regset *fpregset; size_t sizeof_fpregset; - /* XSAVE extended state. */ - struct regset *xstateregset; - /* Register number for %st(0). The register numbers for the other registers follow from this one. Set this to -1 to indicate the absence of an FPU. */ @@ -194,11 +191,24 @@ struct gdbarch_tdep /* YMM16-31 register names. Only used for tdesc_numbered_register. */ const char **ymm_avx512_register_names; + /* Number of PKEYS registers. */ + int num_pkeys_regs; + + /* Register number for PKRU register. */ + int pkru_regnum; + + /* PKEYS register names. */ + const char **pkeys_register_names; + + /* Register number for %fsbase. Set this to -1 to indicate the + absence of segment base registers. */ + int fsbase_regnum; + /* Target description. */ const struct target_desc *tdesc; /* Register group function. */ - const void *register_reggroup_p; + gdbarch_register_reggroup_p_ftype *register_reggroup_p; /* Offset of saved PC in jmp_buf. */ int jb_pc_offset; @@ -242,6 +252,9 @@ struct gdbarch_tdep int (*i386_sysenter_record) (struct regcache *regcache); /* Parse syscall args. */ int (*i386_syscall_record) (struct regcache *regcache); + + /* Regsets. */ + const struct regset *fpregset; }; /* Floating-point registers. */ @@ -286,7 +299,10 @@ enum i386_regnum I386_K0_REGNUM, /* %k0 */ I386_K7_REGNUM = I386_K0_REGNUM + 7, I386_ZMM0H_REGNUM, /* %zmm0h */ - I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7 + I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7, + I386_PKRU_REGNUM, + I386_FSBASE_REGNUM, + I386_GSBASE_REGNUM }; /* Register numbers of RECORD_REGMAP. */ @@ -326,6 +342,8 @@ enum record_i386_regnum #define I386_AVX_NUM_REGS (I386_YMM7H_REGNUM + 1) #define I386_MPX_NUM_REGS (I386_BNDSTATUS_REGNUM + 1) #define I386_AVX512_NUM_REGS (I386_ZMM7H_REGNUM + 1) +#define I386_PKEYS_NUM_REGS (I386_PKRU_REGNUM + 1) +#define I386_NUM_REGS (I386_GSBASE_REGNUM + 1) /* Size of the largest register. */ #define I386_MAX_REGISTER_SIZE 64 @@ -345,6 +363,7 @@ extern int i386_bnd_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_k_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_zmm_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_zmmh_regnum_p (struct gdbarch *gdbarch, int regnum); +extern bool i386_pkru_regnum_p (struct gdbarch *gdbarch, int regnum); extern const char *i386_pseudo_register_name (struct gdbarch *gdbarch, int regnum); @@ -352,7 +371,7 @@ extern struct type *i386_pseudo_register_type (struct gdbarch *gdbarch, int regnum); extern void i386_pseudo_register_read_into_value (struct gdbarch *gdbarch, - struct regcache *regcache, + readable_regcache *regcache, int regnum, struct value *result); @@ -360,6 +379,10 @@ extern void i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf); +extern int i386_ax_pseudo_register_collect (struct gdbarch *gdbarch, + struct agent_expr *ax, + int regnum); + /* Segment selectors. */ #define I386_SEL_RPL 0x0003 /* Requester's Privilege Level mask. */ #define I386_SEL_UPL 0x0003 /* User Privilige Level. */ @@ -389,20 +412,20 @@ extern void i386_supply_gregset (const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len); -/* Collect register REGNUM from the register cache REGCACHE and store - it in the buffer specified by GREGS and LEN as described by the - general-purpose register set REGSET. If REGNUM is -1, do this for - all registers in REGSET. */ -extern void i386_collect_gregset (const struct regset *regset, - const struct regcache *regcache, - int regnum, void *gregs, size_t len); +/* General-purpose register set. */ +extern const struct regset i386_gregset; -/* Return the appropriate register set for the core section identified - by SECT_NAME and SECT_SIZE. */ -extern const struct regset * - i386_regset_from_core_section (struct gdbarch *gdbarch, - const char *sect_name, size_t sect_size); +/* Floating-point register set. */ +extern const struct regset i386_fpregset; +/* Default iterator over core file register note sections. */ +extern void + i386_iterate_over_regset_sections (struct gdbarch *gdbarch, + iterate_over_regset_sections_cb *cb, + void *cb_data, + const struct regcache *regcache); + +typedef buf_displaced_step_closure i386_displaced_step_closure; extern struct displaced_step_closure *i386_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, @@ -418,12 +441,20 @@ extern void i386_elf_init_abi (struct gdbarch_info, struct gdbarch *); /* Initialize a SVR4 architecture variant. */ extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *); +/* Convert SVR4 register number REG to the appropriate register number + used by GDB. */ +extern int i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg); + extern int i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr); +extern const struct target_desc *i386_target_description (uint64_t xcr0, + bool segments); +/* Return true iff the current target is MPX enabled. */ +extern int i386_mpx_enabled (void); -/* Functions and variables exported from i386bsd-tdep.c. */ +/* Functions and variables exported from i386-bsd-tdep.c. */ extern void i386bsd_init_abi (struct gdbarch_info, struct gdbarch *); extern CORE_ADDR i386fbsd_sigtramp_start_addr;