Handle multiple target events before commit resume
[deliverable/binutils-gdb.git] / gdb / s390-tdep.h
index 69055e124c4fcdcf37d0040d370c9f1813c08fda..c0ea9cf6dc934872bed7869b732c04b0ce65bfdd 100644 (file)
@@ -1,5 +1,6 @@
-/* Target-dependent code for GDB, the GNU debugger.
-   Copyright (C) 2003-2013 Free Software Foundation, Inc.
+/* Target-dependent code for s390.
+
+   Copyright (C) 2003-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #ifndef S390_TDEP_H
 #define S390_TDEP_H
 
+#include "prologue-value.h"
+
+enum s390_abi_kind
+{
+  ABI_NONE,
+  ABI_LINUX_S390,
+  ABI_LINUX_ZSERIES
+};
+
+enum s390_vector_abi_kind
+{
+  S390_VECTOR_ABI_NONE,
+  S390_VECTOR_ABI_128
+};
+
+/* The tdep structure.  */
+
+struct gdbarch_tdep
+{
+  /* Target description.  */
+  const struct target_desc *tdesc;
+
+  /* ABI version.  */
+  enum s390_abi_kind abi;
+
+  /* Vector ABI.  */
+  enum s390_vector_abi_kind vector_abi;
+
+  /* Pseudo register numbers.  */
+  int gpr_full_regnum;
+  int pc_regnum;
+  int cc_regnum;
+  int v0_full_regnum;
+
+  bool have_upper;
+  bool have_linux_v1;
+  bool have_linux_v2;
+  bool have_tdb;
+  bool have_vx;
+  bool have_gs;
+
+  /* Hook to record OS specific systemcall.  */
+  int (*s390_syscall_record) (struct regcache *regcache, LONGEST svc_number);
+};
+
+/* Decoding S/390 instructions.  */
+
+/* Named opcode values for the S/390 instructions we recognize.  Some
+   instructions have their opcode split across two fields; those are the
+   op1_* and op2_* enums.  */
+
+enum
+{
+  op1_lhi  = 0xa7,   op2_lhi  = 0x08,
+  op1_lghi = 0xa7,   op2_lghi = 0x09,
+  op1_lgfi = 0xc0,   op2_lgfi = 0x01,
+  op_lr    = 0x18,
+  op_lgr   = 0xb904,
+  op_l     = 0x58,
+  op1_ly   = 0xe3,   op2_ly   = 0x58,
+  op1_lg   = 0xe3,   op2_lg   = 0x04,
+  op_lm    = 0x98,
+  op1_lmy  = 0xeb,   op2_lmy  = 0x98,
+  op1_lmg  = 0xeb,   op2_lmg  = 0x04,
+  op_st    = 0x50,
+  op1_sty  = 0xe3,   op2_sty  = 0x50,
+  op1_stg  = 0xe3,   op2_stg  = 0x24,
+  op_std   = 0x60,
+  op_stm   = 0x90,
+  op1_stmy = 0xeb,   op2_stmy = 0x90,
+  op1_stmg = 0xeb,   op2_stmg = 0x24,
+  op1_aghi = 0xa7,   op2_aghi = 0x0b,
+  op1_ahi  = 0xa7,   op2_ahi  = 0x0a,
+  op1_agfi = 0xc2,   op2_agfi = 0x08,
+  op1_afi  = 0xc2,   op2_afi  = 0x09,
+  op1_algfi= 0xc2,   op2_algfi= 0x0a,
+  op1_alfi = 0xc2,   op2_alfi = 0x0b,
+  op_ar    = 0x1a,
+  op_agr   = 0xb908,
+  op_a     = 0x5a,
+  op1_ay   = 0xe3,   op2_ay   = 0x5a,
+  op1_ag   = 0xe3,   op2_ag   = 0x08,
+  op1_slgfi= 0xc2,   op2_slgfi= 0x04,
+  op1_slfi = 0xc2,   op2_slfi = 0x05,
+  op_sr    = 0x1b,
+  op_sgr   = 0xb909,
+  op_s     = 0x5b,
+  op1_sy   = 0xe3,   op2_sy   = 0x5b,
+  op1_sg   = 0xe3,   op2_sg   = 0x09,
+  op_nr    = 0x14,
+  op_ngr   = 0xb980,
+  op_la    = 0x41,
+  op1_lay  = 0xe3,   op2_lay  = 0x71,
+  op1_larl = 0xc0,   op2_larl = 0x00,
+  op_basr  = 0x0d,
+  op_bas   = 0x4d,
+  op_bcr   = 0x07,
+  op_bc    = 0x0d,
+  op_bctr  = 0x06,
+  op_bctgr = 0xb946,
+  op_bct   = 0x46,
+  op1_bctg = 0xe3,   op2_bctg = 0x46,
+  op_bxh   = 0x86,
+  op1_bxhg = 0xeb,   op2_bxhg = 0x44,
+  op_bxle  = 0x87,
+  op1_bxleg= 0xeb,   op2_bxleg= 0x45,
+  op1_bras = 0xa7,   op2_bras = 0x05,
+  op1_brasl= 0xc0,   op2_brasl= 0x05,
+  op1_brc  = 0xa7,   op2_brc  = 0x04,
+  op1_brcl = 0xc0,   op2_brcl = 0x04,
+  op1_brct = 0xa7,   op2_brct = 0x06,
+  op1_brctg= 0xa7,   op2_brctg= 0x07,
+  op_brxh  = 0x84,
+  op1_brxhg= 0xec,   op2_brxhg= 0x44,
+  op_brxle = 0x85,
+  op1_brxlg= 0xec,   op2_brxlg= 0x45,
+  op_svc   = 0x0a,
+};
+
 /* Hardware capabilities. */
 
 #ifndef HWCAP_S390_HIGH_GPRS
 #define HWCAP_S390_TE 1024
 #endif
 
+#ifndef HWCAP_S390_VX
+#define HWCAP_S390_VX 2048
+#endif
+
+#ifndef HWCAP_S390_GS
+#define HWCAP_S390_GS 16384
+#endif
+
 /* Register information.  */
 
 /* Program Status Word.  */
 #define S390_TDB_R13_REGNUM 87
 #define S390_TDB_R14_REGNUM 88
 #define S390_TDB_R15_REGNUM 89
+/* Vector registers.  */
+#define S390_V0_LOWER_REGNUM 90
+#define S390_V1_LOWER_REGNUM 91
+#define S390_V2_LOWER_REGNUM 92
+#define S390_V3_LOWER_REGNUM 93
+#define S390_V4_LOWER_REGNUM 94
+#define S390_V5_LOWER_REGNUM 95
+#define S390_V6_LOWER_REGNUM 96
+#define S390_V7_LOWER_REGNUM 97
+#define S390_V8_LOWER_REGNUM 98
+#define S390_V9_LOWER_REGNUM 99
+#define S390_V10_LOWER_REGNUM 100
+#define S390_V11_LOWER_REGNUM 101
+#define S390_V12_LOWER_REGNUM 102
+#define S390_V13_LOWER_REGNUM 103
+#define S390_V14_LOWER_REGNUM 104
+#define S390_V15_LOWER_REGNUM 105
+#define S390_V16_REGNUM 106
+#define S390_V17_REGNUM 107
+#define S390_V18_REGNUM 108
+#define S390_V19_REGNUM 109
+#define S390_V20_REGNUM 110
+#define S390_V21_REGNUM 111
+#define S390_V22_REGNUM 112
+#define S390_V23_REGNUM 113
+#define S390_V24_REGNUM 114
+#define S390_V25_REGNUM 115
+#define S390_V26_REGNUM 116
+#define S390_V27_REGNUM 117
+#define S390_V28_REGNUM 118
+#define S390_V29_REGNUM 119
+#define S390_V30_REGNUM 120
+#define S390_V31_REGNUM 121
+#define S390_GSD_REGNUM 122
+#define S390_GSSM_REGNUM 123
+#define S390_GSEPLA_REGNUM 124
+#define S390_BC_GSD_REGNUM 125
+#define S390_BC_GSSM_REGNUM 126
+#define S390_BC_GSEPLA_REGNUM 127
 /* Total.  */
-#define S390_NUM_REGS 90
+#define S390_NUM_REGS 128
+
+#define S390_NUM_GPRS 16
+#define S390_NUM_FPRS 16
+
+#define S390_MAX_INSTR_SIZE 6
 
 /* Special register usage.  */
 #define S390_SP_REGNUM S390_R15_REGNUM
 #define S390_RETADDR_REGNUM S390_R14_REGNUM
 #define S390_FRAME_REGNUM S390_R11_REGNUM
 
-#define S390_IS_GREGSET_REGNUM(i)                                      \
-  (((i) >= S390_PSWM_REGNUM && (i) <= S390_A15_REGNUM)                 \
-   || ((i) >= S390_R0_UPPER_REGNUM && (i) <= S390_R15_UPPER_REGNUM)    \
-   || (i) == S390_ORIG_R2_REGNUM)
-
-#define S390_IS_FPREGSET_REGNUM(i)                     \
-  ((i) >= S390_FPC_REGNUM && (i) <= S390_F15_REGNUM)
-
-#define S390_IS_TDBREGSET_REGNUM(i)                            \
-  ((i) >= S390_TDB_DWORD0_REGNUM && (i) <= S390_TDB_R15_REGNUM)
-
-/* Core file register sets, defined in s390-tdep.c.  */
-#define s390_sizeof_gregset 0x90
-extern const short s390_regmap_gregset[];
-#define s390x_sizeof_gregset 0xd8
-extern const short s390x_regmap_gregset[];
-#define s390_sizeof_fpregset 0x88
-extern const short s390_regmap_fpregset[];
-extern const short s390_regmap_last_break[];
-extern const short s390x_regmap_last_break[];
-extern const short s390_regmap_system_call[];
-extern const short s390_regmap_tdb[];
-#define s390_sizeof_tdbregset 0x100
-
-/* GNU/Linux target descriptions.  */
+/* Frame unwinding.  */
+
+extern struct value *s390_trad_frame_prev_register
+    (struct frame_info *this_frame, struct trad_frame_saved_reg saved_regs[],
+     int regnum);
+
 extern struct target_desc *tdesc_s390_linux32;
-extern struct target_desc *tdesc_s390_linux32v1;
-extern struct target_desc *tdesc_s390_linux32v2;
-extern struct target_desc *tdesc_s390_linux64;
-extern struct target_desc *tdesc_s390_linux64v1;
-extern struct target_desc *tdesc_s390_linux64v2;
-extern struct target_desc *tdesc_s390_te_linux64;
 extern struct target_desc *tdesc_s390x_linux64;
-extern struct target_desc *tdesc_s390x_linux64v1;
-extern struct target_desc *tdesc_s390x_linux64v2;
-extern struct target_desc *tdesc_s390x_te_linux64;
-
-#endif
 
+#endif /* S390_TDEP_H */
This page took 0.024705 seconds and 4 git commands to generate.