~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/include/asm/ptrace.h

Version: ~ [ linux-5.19-rc3 ] ~ [ linux-5.18.5 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.48 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.123 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.199 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.248 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.284 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.319 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  *  S390 version
  4  *    Copyright IBM Corp. 1999, 2000
  5  *    Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
  6  */
  7 #ifndef _S390_PTRACE_H
  8 #define _S390_PTRACE_H
  9 
 10 #include <linux/const.h>
 11 #include <uapi/asm/ptrace.h>
 12 
 13 #define PIF_SYSCALL             0       /* inside a system call */
 14 #define PIF_PER_TRAP            1       /* deliver sigtrap on return to user */
 15 #define PIF_SYSCALL_RESTART     2       /* restart the current system call */
 16 #define PIF_GUEST_FAULT         3       /* indicates program check in sie64a */
 17 
 18 #define _PIF_SYSCALL            _BITUL(PIF_SYSCALL)
 19 #define _PIF_PER_TRAP           _BITUL(PIF_PER_TRAP)
 20 #define _PIF_SYSCALL_RESTART    _BITUL(PIF_SYSCALL_RESTART)
 21 #define _PIF_GUEST_FAULT        _BITUL(PIF_GUEST_FAULT)
 22 
 23 #ifndef __ASSEMBLY__
 24 
 25 #define PSW_KERNEL_BITS (PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_HOME | \
 26                          PSW_MASK_EA | PSW_MASK_BA)
 27 #define PSW_USER_BITS   (PSW_MASK_DAT | PSW_MASK_IO | PSW_MASK_EXT | \
 28                          PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_MASK_MCHECK | \
 29                          PSW_MASK_PSTATE | PSW_ASC_PRIMARY)
 30 
 31 struct psw_bits {
 32         unsigned long        :  1;
 33         unsigned long per    :  1; /* PER-Mask */
 34         unsigned long        :  3;
 35         unsigned long dat    :  1; /* DAT Mode */
 36         unsigned long io     :  1; /* Input/Output Mask */
 37         unsigned long ext    :  1; /* External Mask */
 38         unsigned long key    :  4; /* PSW Key */
 39         unsigned long        :  1;
 40         unsigned long mcheck :  1; /* Machine-Check Mask */
 41         unsigned long wait   :  1; /* Wait State */
 42         unsigned long pstate :  1; /* Problem State */
 43         unsigned long as     :  2; /* Address Space Control */
 44         unsigned long cc     :  2; /* Condition Code */
 45         unsigned long pm     :  4; /* Program Mask */
 46         unsigned long ri     :  1; /* Runtime Instrumentation */
 47         unsigned long        :  6;
 48         unsigned long eaba   :  2; /* Addressing Mode */
 49         unsigned long        : 31;
 50         unsigned long ia     : 64; /* Instruction Address */
 51 };
 52 
 53 enum {
 54         PSW_BITS_AMODE_24BIT = 0,
 55         PSW_BITS_AMODE_31BIT = 1,
 56         PSW_BITS_AMODE_64BIT = 3
 57 };
 58 
 59 enum {
 60         PSW_BITS_AS_PRIMARY     = 0,
 61         PSW_BITS_AS_ACCREG      = 1,
 62         PSW_BITS_AS_SECONDARY   = 2,
 63         PSW_BITS_AS_HOME        = 3
 64 };
 65 
 66 #define psw_bits(__psw) (*({                    \
 67         typecheck(psw_t, __psw);                \
 68         &(*(struct psw_bits *)(&(__psw)));      \
 69 }))
 70 
 71 /*
 72  * The pt_regs struct defines the way the registers are stored on
 73  * the stack during a system call.
 74  */
 75 struct pt_regs 
 76 {
 77         union {
 78                 user_pt_regs user_regs;
 79                 struct {
 80                         unsigned long args[1];
 81                         psw_t psw;
 82                         unsigned long gprs[NUM_GPRS];
 83                 };
 84         };
 85         unsigned long orig_gpr2;
 86         unsigned int int_code;
 87         unsigned int int_parm;
 88         unsigned long int_parm_long;
 89         unsigned long flags;
 90 };
 91 
 92 /*
 93  * Program event recording (PER) register set.
 94  */
 95 struct per_regs {
 96         unsigned long control;          /* PER control bits */
 97         unsigned long start;            /* PER starting address */
 98         unsigned long end;              /* PER ending address */
 99 };
100 
101 /*
102  * PER event contains information about the cause of the last PER exception.
103  */
104 struct per_event {
105         unsigned short cause;           /* PER code, ATMID and AI */
106         unsigned long address;          /* PER address */
107         unsigned char paid;             /* PER access identification */
108 };
109 
110 /*
111  * Simplified per_info structure used to decode the ptrace user space ABI.
112  */
113 struct per_struct_kernel {
114         unsigned long cr9;              /* PER control bits */
115         unsigned long cr10;             /* PER starting address */
116         unsigned long cr11;             /* PER ending address */
117         unsigned long bits;             /* Obsolete software bits */
118         unsigned long starting_addr;    /* User specified start address */
119         unsigned long ending_addr;      /* User specified end address */
120         unsigned short perc_atmid;      /* PER trap ATMID */
121         unsigned long address;          /* PER trap instruction address */
122         unsigned char access_id;        /* PER trap access identification */
123 };
124 
125 #define PER_EVENT_MASK                  0xEB000000UL
126 
127 #define PER_EVENT_BRANCH                0x80000000UL
128 #define PER_EVENT_IFETCH                0x40000000UL
129 #define PER_EVENT_STORE                 0x20000000UL
130 #define PER_EVENT_STORE_REAL            0x08000000UL
131 #define PER_EVENT_TRANSACTION_END       0x02000000UL
132 #define PER_EVENT_NULLIFICATION         0x01000000UL
133 
134 #define PER_CONTROL_MASK                0x00e00000UL
135 
136 #define PER_CONTROL_BRANCH_ADDRESS      0x00800000UL
137 #define PER_CONTROL_SUSPENSION          0x00400000UL
138 #define PER_CONTROL_ALTERATION          0x00200000UL
139 
140 static inline void set_pt_regs_flag(struct pt_regs *regs, int flag)
141 {
142         regs->flags |= (1UL << flag);
143 }
144 
145 static inline void clear_pt_regs_flag(struct pt_regs *regs, int flag)
146 {
147         regs->flags &= ~(1UL << flag);
148 }
149 
150 static inline int test_pt_regs_flag(struct pt_regs *regs, int flag)
151 {
152         return !!(regs->flags & (1UL << flag));
153 }
154 
155 /*
156  * These are defined as per linux/ptrace.h, which see.
157  */
158 #define arch_has_single_step()  (1)
159 #define arch_has_block_step()   (1)
160 
161 #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0)
162 #define instruction_pointer(regs) ((regs)->psw.addr)
163 #define user_stack_pointer(regs)((regs)->gprs[15])
164 #define profile_pc(regs) instruction_pointer(regs)
165 
166 static inline long regs_return_value(struct pt_regs *regs)
167 {
168         return regs->gprs[2];
169 }
170 
171 static inline void instruction_pointer_set(struct pt_regs *regs,
172                                            unsigned long val)
173 {
174         regs->psw.addr = val;
175 }
176 
177 int regs_query_register_offset(const char *name);
178 const char *regs_query_register_name(unsigned int offset);
179 unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset);
180 unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n);
181 
182 static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
183 {
184         return regs->gprs[15];
185 }
186 
187 #endif /* __ASSEMBLY__ */
188 #endif /* _S390_PTRACE_H */
189 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp