xref: /openbmc/linux/arch/m68k/include/asm/ptrace.h (revision faa47b466935e73251b18b17d51455b06ed65764)
1230d1866SGreg Ungerer #ifndef _M68K_PTRACE_H
2230d1866SGreg Ungerer #define _M68K_PTRACE_H
3230d1866SGreg Ungerer 
4230d1866SGreg Ungerer #define PT_D1	   0
5230d1866SGreg Ungerer #define PT_D2	   1
6230d1866SGreg Ungerer #define PT_D3	   2
7230d1866SGreg Ungerer #define PT_D4	   3
8230d1866SGreg Ungerer #define PT_D5	   4
9230d1866SGreg Ungerer #define PT_D6	   5
10230d1866SGreg Ungerer #define PT_D7	   6
11230d1866SGreg Ungerer #define PT_A0	   7
12230d1866SGreg Ungerer #define PT_A1	   8
13230d1866SGreg Ungerer #define PT_A2	   9
14230d1866SGreg Ungerer #define PT_A3	   10
15230d1866SGreg Ungerer #define PT_A4	   11
16230d1866SGreg Ungerer #define PT_A5	   12
17230d1866SGreg Ungerer #define PT_A6	   13
18230d1866SGreg Ungerer #define PT_D0	   14
19230d1866SGreg Ungerer #define PT_USP	   15
20230d1866SGreg Ungerer #define PT_ORIG_D0 16
21230d1866SGreg Ungerer #define PT_SR	   17
22230d1866SGreg Ungerer #define PT_PC	   18
23230d1866SGreg Ungerer 
24230d1866SGreg Ungerer #ifndef __ASSEMBLY__
25230d1866SGreg Ungerer 
26230d1866SGreg Ungerer /* this struct defines the way the registers are stored on the
27230d1866SGreg Ungerer    stack during a system call. */
28230d1866SGreg Ungerer 
29230d1866SGreg Ungerer struct pt_regs {
30230d1866SGreg Ungerer   long     d1;
31230d1866SGreg Ungerer   long     d2;
32230d1866SGreg Ungerer   long     d3;
33230d1866SGreg Ungerer   long     d4;
34230d1866SGreg Ungerer   long     d5;
35230d1866SGreg Ungerer   long     a0;
36230d1866SGreg Ungerer   long     a1;
37230d1866SGreg Ungerer   long     a2;
38230d1866SGreg Ungerer   long     d0;
39230d1866SGreg Ungerer   long     orig_d0;
40230d1866SGreg Ungerer   long     stkadj;
41230d1866SGreg Ungerer #ifdef CONFIG_COLDFIRE
42230d1866SGreg Ungerer   unsigned format :  4; /* frame format specifier */
43230d1866SGreg Ungerer   unsigned vector : 12; /* vector offset */
44230d1866SGreg Ungerer   unsigned short sr;
45230d1866SGreg Ungerer   unsigned long  pc;
4649148020SSam Ravnborg #else
47230d1866SGreg Ungerer   unsigned short sr;
48230d1866SGreg Ungerer   unsigned long  pc;
49230d1866SGreg Ungerer   unsigned format :  4; /* frame format specifier */
50230d1866SGreg Ungerer   unsigned vector : 12; /* vector offset */
5149148020SSam Ravnborg #endif
52230d1866SGreg Ungerer };
53230d1866SGreg Ungerer 
54230d1866SGreg Ungerer /*
55230d1866SGreg Ungerer  * This is the extended stack used by signal handlers and the context
56230d1866SGreg Ungerer  * switcher: it's pushed after the normal "struct pt_regs".
57230d1866SGreg Ungerer  */
58230d1866SGreg Ungerer struct switch_stack {
59230d1866SGreg Ungerer 	unsigned long  d6;
60230d1866SGreg Ungerer 	unsigned long  d7;
61230d1866SGreg Ungerer 	unsigned long  a3;
62230d1866SGreg Ungerer 	unsigned long  a4;
63230d1866SGreg Ungerer 	unsigned long  a5;
64230d1866SGreg Ungerer 	unsigned long  a6;
65230d1866SGreg Ungerer 	unsigned long  retpc;
66230d1866SGreg Ungerer };
67230d1866SGreg Ungerer 
68230d1866SGreg Ungerer /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
69230d1866SGreg Ungerer #define PTRACE_GETREGS            12
70230d1866SGreg Ungerer #define PTRACE_SETREGS            13
71230d1866SGreg Ungerer #define PTRACE_GETFPREGS          14
72230d1866SGreg Ungerer #define PTRACE_SETFPREGS          15
73230d1866SGreg Ungerer 
74*faa47b46SAndreas Schwab #define PTRACE_SINGLEBLOCK	33	/* resume execution until next branch */
75*faa47b46SAndreas Schwab 
76230d1866SGreg Ungerer #ifdef __KERNEL__
77230d1866SGreg Ungerer 
78230d1866SGreg Ungerer #ifndef PS_S
79230d1866SGreg Ungerer #define PS_S  (0x2000)
80230d1866SGreg Ungerer #define PS_M  (0x1000)
81230d1866SGreg Ungerer #endif
82230d1866SGreg Ungerer 
83230d1866SGreg Ungerer #define user_mode(regs) (!((regs)->sr & PS_S))
84230d1866SGreg Ungerer #define instruction_pointer(regs) ((regs)->pc)
85230d1866SGreg Ungerer #define profile_pc(regs) instruction_pointer(regs)
86230d1866SGreg Ungerer extern void show_regs(struct pt_regs *);
87*faa47b46SAndreas Schwab 
88*faa47b46SAndreas Schwab /*
89*faa47b46SAndreas Schwab  * These are defined as per linux/ptrace.h, which see.
90*faa47b46SAndreas Schwab  */
91*faa47b46SAndreas Schwab struct task_struct;
92*faa47b46SAndreas Schwab 
93*faa47b46SAndreas Schwab #ifdef CONFIG_MMU
94*faa47b46SAndreas Schwab #define arch_has_single_step()	(1)
95*faa47b46SAndreas Schwab extern void user_enable_single_step(struct task_struct *);
96*faa47b46SAndreas Schwab extern void user_disable_single_step(struct task_struct *);
97*faa47b46SAndreas Schwab 
98*faa47b46SAndreas Schwab #define arch_has_block_step()	(1)
99*faa47b46SAndreas Schwab extern void user_enable_block_step(struct task_struct *);
100*faa47b46SAndreas Schwab #endif
101*faa47b46SAndreas Schwab 
102230d1866SGreg Ungerer #endif /* __KERNEL__ */
103230d1866SGreg Ungerer #endif /* __ASSEMBLY__ */
104230d1866SGreg Ungerer #endif /* _M68K_PTRACE_H */
105