File: /usr/src/linux/include/asm-ppc/ptrace.h

1     /*
2      * BK Id: SCCS/s.ptrace.h 1.5 05/17/01 18:14:25 cort
3      */
4     #ifndef _PPC_PTRACE_H
5     #define _PPC_PTRACE_H
6     
7     /*
8      * This struct defines the way the registers are stored on the
9      * kernel stack during a system call or other kernel entry.
10      *
11      * this should only contain volatile regs
12      * since we can keep non-volatile in the thread_struct
13      * should set this up when only volatiles are saved
14      * by intr code.
15      *
16      * Since this is going on the stack, *CARE MUST BE TAKEN* to insure
17      * that the overall structure is a multiple of 16 bytes in length.
18      *
19      * Note that the offsets of the fields in this struct correspond with
20      * the PT_* values below.  This simplifies arch/ppc/kernel/ptrace.c.
21      */
22     
23     #ifndef __ASSEMBLY__
24     struct pt_regs {
25     	unsigned long gpr[32];
26     	unsigned long nip;
27     	unsigned long msr;
28     	unsigned long orig_gpr3;	/* Used for restarting system calls */
29     	unsigned long ctr;
30     	unsigned long link;
31     	unsigned long xer;
32     	unsigned long ccr;
33     	unsigned long mq;		/* 601 only (not used at present) */
34     					/* Used on APUS to hold IPL value. */
35     	unsigned long trap;		/* Reason for being here */
36     	unsigned long dar;		/* Fault registers */
37     	unsigned long dsisr;
38     	unsigned long result; 		/* Result of a system call */
39     };
40     #endif
41     
42     #ifdef __KERNEL__
43     #define STACK_FRAME_OVERHEAD	16	/* size of minimum stack frame */
44     
45     /* Size of stack frame allocated when calling signal handler. */
46     #define __SIGNAL_FRAMESIZE	64
47     
48     #define instruction_pointer(regs) ((regs)->nip)
49     #define user_mode(regs) (((regs)->msr & MSR_PR) != 0)
50     
51     #endif /* __KERNEL__ */
52     
53     /*
54      * Offsets used by 'ptrace' system call interface.
55      * These can't be changed without breaking binary compatibility
56      * with MkLinux, etc.
57      */
58     #define PT_R0	0
59     #define PT_R1	1
60     #define PT_R2	2
61     #define PT_R3	3
62     #define PT_R4	4
63     #define PT_R5	5
64     #define PT_R6	6
65     #define PT_R7	7
66     #define PT_R8	8
67     #define PT_R9	9
68     #define PT_R10	10
69     #define PT_R11	11
70     #define PT_R12	12
71     #define PT_R13	13
72     #define PT_R14	14
73     #define PT_R15	15
74     #define PT_R16	16
75     #define PT_R17	17
76     #define PT_R18	18
77     #define PT_R19	19
78     #define PT_R20	20
79     #define PT_R21	21
80     #define PT_R22	22
81     #define PT_R23	23
82     #define PT_R24	24
83     #define PT_R25	25
84     #define PT_R26	26
85     #define PT_R27	27
86     #define PT_R28	28
87     #define PT_R29	29
88     #define PT_R30	30
89     #define PT_R31	31
90     
91     #define PT_NIP	32
92     #define PT_MSR	33
93     #ifdef __KERNEL__
94     #define PT_ORIG_R3 34
95     #endif
96     #define PT_CTR	35
97     #define PT_LNK	36
98     #define PT_XER	37
99     #define PT_CCR	38
100     #define PT_MQ	39
101     
102     #define PT_FPR0	48	/* each FP reg occupies 2 slots in this space */
103     #define PT_FPR31 (PT_FPR0 + 2*31)
104     #define PT_FPSCR (PT_FPR0 + 2*32 + 1)
105     
106     #endif
107     
108