|  | #ifndef _PPC_PTRACE_H | 
|  | #define _PPC_PTRACE_H | 
|  |  | 
|  | /* | 
|  | * This struct defines the way the registers are stored on the | 
|  | * kernel stack during a system call or other kernel entry. | 
|  | * | 
|  | * this should only contain volatile regs | 
|  | * since we can keep non-volatile in the thread_struct | 
|  | * should set this up when only volatiles are saved | 
|  | * by intr code. | 
|  | * | 
|  | * Since this is going on the stack, *CARE MUST BE TAKEN* to insure | 
|  | * that the overall structure is a multiple of 16 bytes in length. | 
|  | * | 
|  | * Note that the offsets of the fields in this struct correspond with | 
|  | * the PT_* values below.  This simplifies arch/ppc/kernel/ptrace.c. | 
|  | */ | 
|  |  | 
|  | #include <linux/config.h> | 
|  |  | 
|  | #ifndef __ASSEMBLY__ | 
|  | #ifdef CONFIG_PPC64BRIDGE | 
|  | #define PPC_REG unsigned long /*long*/ | 
|  | #else | 
|  | #define PPC_REG unsigned long | 
|  | #endif | 
|  | struct pt_regs { | 
|  | PPC_REG gpr[32]; | 
|  | PPC_REG nip; | 
|  | PPC_REG msr; | 
|  | PPC_REG orig_gpr3;	/* Used for restarting system calls */ | 
|  | PPC_REG ctr; | 
|  | PPC_REG link; | 
|  | PPC_REG xer; | 
|  | PPC_REG ccr; | 
|  | PPC_REG mq;		/* 601 only (not used at present) */ | 
|  | /* Used on APUS to hold IPL value. */ | 
|  | PPC_REG trap;		/* Reason for being here */ | 
|  | PPC_REG dar;		/* Fault registers */ | 
|  | PPC_REG dsisr; | 
|  | PPC_REG result;		/* Result of a system call */ | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #define STACK_FRAME_OVERHEAD	16	/* size of minimum stack frame */ | 
|  |  | 
|  | /* Size of stack frame allocated when calling signal handler. */ | 
|  | #define __SIGNAL_FRAMESIZE	64 | 
|  |  | 
|  | #define instruction_pointer(regs) ((regs)->nip) | 
|  | #define user_mode(regs) (((regs)->msr & MSR_PR) != 0) | 
|  |  | 
|  | /* | 
|  | * Offsets used by 'ptrace' system call interface. | 
|  | * These can't be changed without breaking binary compatibility | 
|  | * with MkLinux, etc. | 
|  | */ | 
|  | #define PT_R0	0 | 
|  | #define PT_R1	1 | 
|  | #define PT_R2	2 | 
|  | #define PT_R3	3 | 
|  | #define PT_R4	4 | 
|  | #define PT_R5	5 | 
|  | #define PT_R6	6 | 
|  | #define PT_R7	7 | 
|  | #define PT_R8	8 | 
|  | #define PT_R9	9 | 
|  | #define PT_R10	10 | 
|  | #define PT_R11	11 | 
|  | #define PT_R12	12 | 
|  | #define PT_R13	13 | 
|  | #define PT_R14	14 | 
|  | #define PT_R15	15 | 
|  | #define PT_R16	16 | 
|  | #define PT_R17	17 | 
|  | #define PT_R18	18 | 
|  | #define PT_R19	19 | 
|  | #define PT_R20	20 | 
|  | #define PT_R21	21 | 
|  | #define PT_R22	22 | 
|  | #define PT_R23	23 | 
|  | #define PT_R24	24 | 
|  | #define PT_R25	25 | 
|  | #define PT_R26	26 | 
|  | #define PT_R27	27 | 
|  | #define PT_R28	28 | 
|  | #define PT_R29	29 | 
|  | #define PT_R30	30 | 
|  | #define PT_R31	31 | 
|  |  | 
|  | #define PT_NIP	32 | 
|  | #define PT_MSR	33 | 
|  | #ifdef __KERNEL__ | 
|  | #define PT_ORIG_R3 34 | 
|  | #endif | 
|  | #define PT_CTR	35 | 
|  | #define PT_LNK	36 | 
|  | #define PT_XER	37 | 
|  | #define PT_CCR	38 | 
|  | #define PT_MQ	39 | 
|  |  | 
|  | #define PT_FPR0	48	/* each FP reg occupies 2 slots in this space */ | 
|  | #define PT_FPR31 (PT_FPR0 + 2*31) | 
|  | #define PT_FPSCR (PT_FPR0 + 2*32 + 1) | 
|  |  | 
|  | #endif |