SELinux: /proc/mounts should show what it can
[pandora-kernel.git] / arch / sh / include / asm / ptrace.h
1 #ifndef __ASM_SH_PTRACE_H
2 #define __ASM_SH_PTRACE_H
3
4 /*
5  * Copyright (C) 1999, 2000  Niibe Yutaka
6  *
7  */
8 #if defined(__SH5__)
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
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
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  * 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
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
95 #define PTRACE_GETDSPREGS       55
96 #define PTRACE_SETDSPREGS       56
97 #endif
98
99 #ifdef __KERNEL__
100 #include <asm/addrspace.h>
101
102 #define user_mode(regs)                 (((regs)->sr & 0x40000000)==0)
103 #define instruction_pointer(regs)       ((unsigned long)(regs)->pc)
104
105 extern void show_regs(struct pt_regs *);
106
107 #ifdef CONFIG_SH_DSP
108 #define task_pt_regs(task) \
109         ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
110                  - sizeof(struct pt_dspregs) - sizeof(unsigned long)) - 1)
111 #else
112 #define task_pt_regs(task) \
113         ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
114                  - sizeof(unsigned long)) - 1)
115 #endif
116
117 static inline unsigned long profile_pc(struct pt_regs *regs)
118 {
119         unsigned long pc = instruction_pointer(regs);
120
121 #ifdef P2SEG
122         if (pc >= P2SEG && pc < P3SEG)
123                 pc -= 0x20000000;
124 #endif
125
126         return pc;
127 }
128 #endif /* __KERNEL__ */
129
130 #endif /* __ASM_SH_PTRACE_H */