xref: /openbmc/linux/arch/csky/include/uapi/asm/ptrace.h (revision 4bf3bd0f)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
3 
4 #ifndef _CSKY_PTRACE_H
5 #define _CSKY_PTRACE_H
6 
7 #ifndef __ASSEMBLY__
8 
9 struct pt_regs {
10 	unsigned long	tls;
11 	unsigned long	lr;
12 	unsigned long	pc;
13 	unsigned long	sr;
14 	unsigned long	usp;
15 
16 	/*
17 	 * a0, a1, a2, a3:
18 	 * abiv1: r2, r3, r4, r5
19 	 * abiv2: r0, r1, r2, r3
20 	 */
21 	unsigned long	orig_a0;
22 	unsigned long	a0;
23 	unsigned long	a1;
24 	unsigned long	a2;
25 	unsigned long	a3;
26 
27 	/*
28 	 * ABIV2: r4 ~ r13
29 	 * ABIV1: r6 ~ r14, r1
30 	 */
31 	unsigned long	regs[10];
32 
33 #if defined(__CSKYABIV2__)
34 	/* r16 ~ r30 */
35 	unsigned long	exregs[15];
36 
37 	unsigned long	rhi;
38 	unsigned long	rlo;
39 	unsigned long	pad; /* reserved */
40 #endif
41 };
42 
43 struct user_fp {
44 	unsigned long	vr[96];
45 	unsigned long	fcr;
46 	unsigned long	fesr;
47 	unsigned long	fid;
48 	unsigned long	reserved;
49 };
50 
51 /*
52  * Switch stack for switch_to after push pt_regs.
53  *
54  * ABI_CSKYV2: r4 ~ r11, r15 ~ r17, r26 ~ r30;
55  * ABI_CSKYV1: r8 ~ r14, r15;
56  */
57 struct  switch_stack {
58 #if defined(__CSKYABIV2__)
59 	unsigned long   r4;
60 	unsigned long   r5;
61 	unsigned long   r6;
62 	unsigned long   r7;
63 	unsigned long   r8;
64 	unsigned long   r9;
65 	unsigned long   r10;
66 	unsigned long   r11;
67 #else
68 	unsigned long   r8;
69 	unsigned long   r9;
70 	unsigned long   r10;
71 	unsigned long   r11;
72 	unsigned long   r12;
73 	unsigned long   r13;
74 	unsigned long   r14;
75 #endif
76 	unsigned long   r15;
77 #if defined(__CSKYABIV2__)
78 	unsigned long   r16;
79 	unsigned long   r17;
80 	unsigned long   r26;
81 	unsigned long   r27;
82 	unsigned long   r28;
83 	unsigned long   r29;
84 	unsigned long   r30;
85 #endif
86 };
87 
88 #ifdef __KERNEL__
89 
90 #define PS_S	0x80000000 /* Supervisor Mode */
91 
92 #define arch_has_single_step() (1)
93 #define current_pt_regs() \
94 ({ (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1; })
95 
96 #define user_stack_pointer(regs) ((regs)->usp)
97 
98 #define user_mode(regs) (!((regs)->sr & PS_S))
99 #define instruction_pointer(regs) ((regs)->pc)
100 #define profile_pc(regs) instruction_pointer(regs)
101 
102 #endif /* __KERNEL__ */
103 #endif /* __ASSEMBLY__ */
104 #endif /* _CSKY_PTRACE_H */
105