Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef __ASM_SH_PTRACE_H |
2 | #define __ASM_SH_PTRACE_H | |
3 | ||
1da177e4 LT |
4 | /* |
5 | * Copyright (C) 1999, 2000 Niibe Yutaka | |
6 | * | |
7 | */ | |
f22ab814 | 8 | #if defined(__SH5__) |
33f242ed PM |
9 | struct pt_regs { |
10 | unsigned long long pc; | |
11 | unsigned long long sr; | |
12 | unsigned 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 | |
1da177e4 LT |
18 | /* |
19 | * GCC defines register number like this: | |
20 | * ----------------------------- | |
21 | * 0 - 15 are integer registers | |
22 | * 17 - 22 are control/special registers | |
23 | * 24 - 39 fp registers | |
24 | * 40 - 47 xd registers | |
25 | * 48 - fpscr register | |
26 | * ----------------------------- | |
27 | * | |
28 | * We follows above, except: | |
29 | * 16 --- program counter (PC) | |
30 | * 22 --- syscall # | |
31 | * 23 --- floating point communication register | |
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 | |
33f242ed | 40 | #define REG_GBR 19 |
1da177e4 LT |
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 | ||
1da177e4 LT |
54 | /* |
55 | * This struct defines the way the registers are stored on the | |
56 | * kernel stack during a system call or other kernel entry. | |
57 | */ | |
58 | struct 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 | * This struct defines the way the DSP registers are stored on the | |
71 | * kernel stack during a system call or other kernel entry. | |
72 | */ | |
73 | struct 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 | ||
3bc24a1a PM |
90 | #define PTRACE_GETFDPIC 31 /* get the ELF fdpic loadmap address */ |
91 | ||
92 | #define PTRACE_GETFDPIC_EXEC 0 /* [addr] request the executable loadmap */ | |
93 | #define PTRACE_GETFDPIC_INTERP 1 /* [addr] request the interpreter loadmap */ | |
94 | ||
1da177e4 LT |
95 | #define PTRACE_GETDSPREGS 55 |
96 | #define PTRACE_SETDSPREGS 56 | |
33f242ed | 97 | #endif |
1da177e4 LT |
98 | |
99 | #ifdef __KERNEL__ | |
33f242ed PM |
100 | #include <asm/addrspace.h> |
101 | ||
102 | #define user_mode(regs) (((regs)->sr & 0x40000000)==0) | |
5a4f7c66 | 103 | #define instruction_pointer(regs) ((unsigned long)(regs)->pc) |
33f242ed | 104 | |
1da177e4 LT |
105 | extern void show_regs(struct pt_regs *); |
106 | ||
3cf0f4ec AV |
107 | #ifdef CONFIG_SH_DSP |
108 | #define task_pt_regs(task) \ | |
308a792f | 109 | ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \ |
3cf0f4ec AV |
110 | - sizeof(struct pt_dspregs) - sizeof(unsigned long)) - 1) |
111 | #else | |
112 | #define task_pt_regs(task) \ | |
308a792f | 113 | ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \ |
3cf0f4ec AV |
114 | - sizeof(unsigned long)) - 1) |
115 | #endif | |
116 | ||
1da177e4 LT |
117 | static inline unsigned long profile_pc(struct pt_regs *regs) |
118 | { | |
119 | unsigned long pc = instruction_pointer(regs); | |
120 | ||
33f242ed PM |
121 | #ifdef P2SEG |
122 | if (pc >= P2SEG && pc < P3SEG) | |
1da177e4 | 123 | pc -= 0x20000000; |
33f242ed PM |
124 | #endif |
125 | ||
1da177e4 LT |
126 | return pc; |
127 | } | |
33f242ed | 128 | #endif /* __KERNEL__ */ |
1da177e4 LT |
129 | |
130 | #endif /* __ASM_SH_PTRACE_H */ |