1#ifndef __ASM_SH_PTRACE_H
2#define __ASM_SH_PTRACE_H
3
4
5
6
7
8#if defined(__SH5__)
9struct pt_regs {
10 unsigned long long pc;
11 unsigned long long sr;
12 long long syscall_nr;
13 unsigned long long regs[63];
14 unsigned long long tregs[8];
15 unsigned long long pad[2];
16};
17#else
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33#define REG_REG0 0
34#define REG_REG15 15
35
36#define REG_PC 16
37
38#define REG_PR 17
39#define REG_SR 18
40#define REG_GBR 19
41#define REG_MACH 20
42#define REG_MACL 21
43
44#define REG_SYSCALL 22
45
46#define REG_FPREG0 23
47#define REG_FPREG15 38
48#define REG_XFREG0 39
49#define REG_XFREG15 54
50
51#define REG_FPSCR 55
52#define REG_FPUL 56
53
54
55
56
57
58struct pt_regs {
59 unsigned long regs[16];
60 unsigned long pc;
61 unsigned long pr;
62 unsigned long sr;
63 unsigned long gbr;
64 unsigned long mach;
65 unsigned long macl;
66 long tra;
67};
68
69
70
71
72
73struct pt_dspregs {
74 unsigned long a1;
75 unsigned long a0g;
76 unsigned long a1g;
77 unsigned long m0;
78 unsigned long m1;
79 unsigned long a0;
80 unsigned long x0;
81 unsigned long x1;
82 unsigned long y0;
83 unsigned long y1;
84 unsigned long dsr;
85 unsigned long rs;
86 unsigned long re;
87 unsigned long mod;
88};
89#endif
90
91#define PTRACE_GETREGS 12
92#define PTRACE_SETREGS 13
93
94#define PTRACE_GETFPREGS 14
95#define PTRACE_SETFPREGS 15
96
97#define PTRACE_GETFDPIC 31
98
99#define PTRACE_GETFDPIC_EXEC 0
100#define PTRACE_GETFDPIC_INTERP 1
101
102#define PTRACE_GETDSPREGS 55
103#define PTRACE_SETDSPREGS 56
104
105#define PT_TEXT_END_ADDR 240
106#define PT_TEXT_ADDR 244
107#define PT_DATA_ADDR 248
108#define PT_TEXT_LEN 252
109
110#ifdef __KERNEL__
111#include <asm/addrspace.h>
112
113#define user_mode(regs) (((regs)->sr & 0x40000000)==0)
114#define instruction_pointer(regs) ((unsigned long)(regs)->pc)
115
116extern void show_regs(struct pt_regs *);
117
118
119
120
121struct task_struct;
122
123#define arch_has_single_step() (1)
124extern void user_enable_single_step(struct task_struct *);
125extern void user_disable_single_step(struct task_struct *);
126
127#define task_pt_regs(task) \
128 ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE) - 1)
129
130static inline unsigned long profile_pc(struct pt_regs *regs)
131{
132 unsigned long pc = instruction_pointer(regs);
133
134#ifdef P2SEG
135 if (pc >= P2SEG && pc < P3SEG)
136 pc -= 0x20000000;
137#endif
138
139 return pc;
140}
141#endif
142
143#endif
144