gdb: enable target_async around stop_all_threads call in process_initial_stop_replies
[binutils-gdb.git] / gdb / i386-tdep.h
index 99b89e747dfb4bd22d417ff3fccf74a4830a4470..ee7655e9861ef865e0ef7dc3e0f2ef32f75894dc 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for the i386.
 
-   Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #ifndef I386_TDEP_H
 #define I386_TDEP_H
 
+#include "gdbarch.h"
+#include "infrun.h"
+#include "expression.h"
+
 struct frame_info;
 struct gdbarch;
 struct reggroup;
@@ -142,21 +146,21 @@ struct gdbarch_tdep
   int xsave_xcr0_offset;
 
   /* Register names.  */
-  const char **register_names;
+  const char * const *register_names;
 
   /* Register number for %ymm0h.  Set this to -1 to indicate the absence
      of upper YMM register support.  */
   int ymm0h_regnum;
 
   /* Upper YMM register names.  Only used for tdesc_numbered_register.  */
-  const char **ymmh_register_names;
+  const char * const *ymmh_register_names;
 
   /* Register number for %ymm16h.  Set this to -1 to indicate the absence
   of support for YMM16-31.  */
   int ymm16h_regnum;
 
   /* YMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **ymm16h_register_names;
+  const char * const *ymm16h_register_names;
 
   /* Register number for %bnd0r.  Set this to -1 to indicate the absence
      bound registers.  */
@@ -171,23 +175,23 @@ struct gdbarch_tdep
   int bndcfgu_regnum;
 
   /* MPX register names.  Only used for tdesc_numbered_register.  */
-  const char **mpx_register_names;
+  const char * const *mpx_register_names;
 
   /* Register number for %zmm0h.  Set this to -1 to indicate the absence
      of ZMM_HI256 register support.  */
   int zmm0h_regnum;
 
   /* OpMask register names.  */
-  const char **k_register_names;
+  const char * const *k_register_names;
 
   /* ZMM register names.  Only used for tdesc_numbered_register.  */
-  const char **zmmh_register_names;
+  const char * const *zmmh_register_names;
 
   /* XMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **xmm_avx512_register_names;
+  const char * const *xmm_avx512_register_names;
 
   /* YMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **ymm_avx512_register_names;
+  const char * const *ymm_avx512_register_names;
 
   /* Number of PKEYS registers.  */
   int num_pkeys_regs;
@@ -196,7 +200,11 @@ struct gdbarch_tdep
   int pkru_regnum;
 
   /* PKEYS register names.  */
-  const char **pkeys_register_names;
+  const char * const *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;
@@ -253,7 +261,7 @@ struct gdbarch_tdep
 
 /* Floating-point registers.  */
 
-/* All FPU control regusters (except for FIOFF and FOOFF) are 16-bit
+/* All FPU control registers (except for FIOFF and FOOFF) are 16-bit
    (at most) in the FPU, but are zero-extended to 32 bits in GDB's
    register cache.  */
 
@@ -294,7 +302,9 @@ enum i386_regnum
   I386_K7_REGNUM = I386_K0_REGNUM + 7,
   I386_ZMM0H_REGNUM,           /* %zmm0h */
   I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7,
-  I386_PKRU_REGNUM
+  I386_PKRU_REGNUM,
+  I386_FSBASE_REGNUM,
+  I386_GSBASE_REGNUM
 };
 
 /* Register numbers of RECORD_REGMAP.  */
@@ -335,6 +345,7 @@ enum record_i386_regnum
 #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
@@ -362,7 +373,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);
 
@@ -389,6 +400,19 @@ extern CORE_ADDR i386_pe_skip_trampoline_code (struct frame_info *frame,
 extern CORE_ADDR i386_skip_main_prologue (struct gdbarch *gdbarch,
                                          CORE_ADDR pc);
 
+/* The "push_dummy_call" gdbarch method, optionally with the thiscall
+   calling convention.  */
+extern CORE_ADDR i386_thiscall_push_dummy_call (struct gdbarch *gdbarch,
+                                               struct value *function,
+                                               struct regcache *regcache,
+                                               CORE_ADDR bp_addr,
+                                               int nargs, struct value **args,
+                                               CORE_ADDR sp,
+                                               function_call_return_method
+                                               return_method,
+                                               CORE_ADDR struct_addr,
+                                               bool thiscall);
+
 /* Return whether the THIS_FRAME corresponds to a sigtramp routine.  */
 extern int i386_sigtramp_p (struct frame_info *this_frame);
 
@@ -416,13 +440,15 @@ extern void
                                     void *cb_data,
                                     const struct regcache *regcache);
 
-extern struct displaced_step_closure *i386_displaced_step_copy_insn
+typedef buf_displaced_step_copy_insn_closure
+  i386_displaced_step_copy_insn_closure;
+
+extern displaced_step_copy_insn_closure_up i386_displaced_step_copy_insn
   (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to,
    struct regcache *regs);
-extern void i386_displaced_step_fixup (struct gdbarch *gdbarch,
-                                      struct displaced_step_closure *closure,
-                                      CORE_ADDR from, CORE_ADDR to,
-                                      struct regcache *regs);
+extern void i386_displaced_step_fixup
+  (struct gdbarch *gdbarch, displaced_step_copy_insn_closure *closure,
+   CORE_ADDR from, CORE_ADDR to, regcache *regs);
 
 /* Initialize a basic ELF architecture variant.  */
 extern void i386_elf_init_abi (struct gdbarch_info, struct gdbarch *);
@@ -435,8 +461,9 @@ extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *);
 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);
+                               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);
@@ -451,7 +478,6 @@ extern CORE_ADDR i386obsd_sigtramp_start_addr;
 extern CORE_ADDR i386obsd_sigtramp_end_addr;
 extern int i386fbsd4_sc_reg_offset[];
 extern int i386fbsd_sc_reg_offset[];
-extern int i386nbsd_sc_reg_offset[];
 extern int i386obsd_sc_reg_offset[];
 extern int i386bsd_sc_reg_offset[];
 
@@ -460,7 +486,7 @@ extern int i386bsd_sc_reg_offset[];
 extern int i386_stap_is_single_operand (struct gdbarch *gdbarch,
                                        const char *s);
 
-extern int i386_stap_parse_special_token (struct gdbarch *gdbarch,
-                                         struct stap_parse_info *p);
+extern expr::operation_up i386_stap_parse_special_token
+     (struct gdbarch *gdbarch, struct stap_parse_info *p);
 
 #endif /* i386-tdep.h */