1 #ifndef _ASMAXP_PTRACE_H
2 #define _ASMAXP_PTRACE_H
3
4
5 /*
6 * This struct defines the way the registers are stored on the
7 * kernel stack during a system call or other kernel entry
8 *
9 * NOTE! I want to minimize the overhead of system calls, so this
10 * struct has as little information as possible. I does not have
11 *
12 * - floating point regs: the kernel doesn't change those
13 * - r9-15: saved by the C compiler
14 *
15 * This makes "fork()" and "exec()" a bit more complex, but should
16 * give us low system call latency.
17 */
18
19 struct pt_regs {
20 unsigned long r0;
21 unsigned long r1;
22 unsigned long r2;
23 unsigned long r3;
24 unsigned long r4;
25 unsigned long r5;
26 unsigned long r6;
27 unsigned long r7;
28 unsigned long r8;
29 unsigned long r19;
30 unsigned long r20;
31 unsigned long r21;
32 unsigned long r22;
33 unsigned long r23;
34 unsigned long r24;
35 unsigned long r25;
36 unsigned long r26;
37 unsigned long r27;
38 unsigned long r28;
39 unsigned long hae;
40 /* These are saved by PAL-code: */
41 unsigned long ps;
42 unsigned long pc;
43 unsigned long gp;
44 unsigned long r16;
45 unsigned long r17;
46 unsigned long r18;
47 };
48
49 /*
50 * This is the extended stack used by signal handlers and the context
51 * switcher: it's pushed after the normal "struct pt_regs".
52 */
53 struct switch_stack {
54 unsigned long r9;
55 unsigned long r10;
56 unsigned long r11;
57 unsigned long r12;
58 unsigned long r13;
59 unsigned long r14;
60 unsigned long r15;
61 unsigned long r26;
62 unsigned long fp[32];
63 };
64
65 #ifdef __KERNEL__
66 #define user_mode(regs) ((regs)->ps & 8)
67 extern void show_regs(struct pt_regs *);
68 #endif
69
70 #endif