1 #ifndef _CRIS_ARCH_PTRACE_H 2 #define _CRIS_ARCH_PTRACE_H 3 4 /* Register numbers in the ptrace system call interface */ 5 6 #define PT_ORIG_R10 0 7 #define PT_R0 1 8 #define PT_R1 2 9 #define PT_R2 3 10 #define PT_R3 4 11 #define PT_R4 5 12 #define PT_R5 6 13 #define PT_R6 7 14 #define PT_R7 8 15 #define PT_R8 9 16 #define PT_R9 10 17 #define PT_R10 11 18 #define PT_R11 12 19 #define PT_R12 13 20 #define PT_R13 14 21 #define PT_ACR 15 22 #define PT_SRS 16 23 #define PT_MOF 17 24 #define PT_SPC 18 25 #define PT_CCS 19 26 #define PT_SRP 20 27 #define PT_ERP 21 /* This is actually the debugged process' PC */ 28 #define PT_EXS 22 29 #define PT_EDA 23 30 #define PT_USP 24 /* special case - USP is not in the pt_regs */ 31 #define PT_PPC 25 /* special case - pseudo PC */ 32 #define PT_BP 26 /* Base number for BP registers. */ 33 #define PT_BP_CTRL 26 /* BP control register. */ 34 #define PT_MAX 40 35 36 /* Condition code bit numbers. */ 37 #define C_CCS_BITNR 0 38 #define V_CCS_BITNR 1 39 #define Z_CCS_BITNR 2 40 #define N_CCS_BITNR 3 41 #define X_CCS_BITNR 4 42 #define I_CCS_BITNR 5 43 #define U_CCS_BITNR 6 44 #define P_CCS_BITNR 7 45 #define R_CCS_BITNR 8 46 #define S_CCS_BITNR 9 47 #define M_CCS_BITNR 30 48 #define Q_CCS_BITNR 31 49 #define CCS_SHIFT 10 /* Shift count for each level in CCS */ 50 51 /* pt_regs not only specifices the format in the user-struct during 52 * ptrace but is also the frame format used in the kernel prologue/epilogues 53 * themselves 54 */ 55 56 struct pt_regs { 57 unsigned long orig_r10; 58 /* pushed by movem r13, [sp] in SAVE_ALL. */ 59 unsigned long r0; 60 unsigned long r1; 61 unsigned long r2; 62 unsigned long r3; 63 unsigned long r4; 64 unsigned long r5; 65 unsigned long r6; 66 unsigned long r7; 67 unsigned long r8; 68 unsigned long r9; 69 unsigned long r10; 70 unsigned long r11; 71 unsigned long r12; 72 unsigned long r13; 73 unsigned long acr; 74 unsigned long srs; 75 unsigned long mof; 76 unsigned long spc; 77 unsigned long ccs; 78 unsigned long srp; 79 unsigned long erp; /* This is actually the debugged process' PC */ 80 /* For debugging purposes; saved only when needed. */ 81 unsigned long exs; 82 unsigned long eda; 83 }; 84 85 /* switch_stack is the extra stuff pushed onto the stack in _resume (entry.S) 86 * when doing a context-switch. it is used (apart from in resume) when a new 87 * thread is made and we need to make _resume (which is starting it for the 88 * first time) realise what is going on. 89 * 90 * Actually, the use is very close to the thread struct (TSS) in that both the 91 * switch_stack and the TSS are used to keep thread stuff when switching in 92 * _resume. 93 */ 94 95 struct switch_stack { 96 unsigned long r0; 97 unsigned long r1; 98 unsigned long r2; 99 unsigned long r3; 100 unsigned long r4; 101 unsigned long r5; 102 unsigned long r6; 103 unsigned long r7; 104 unsigned long r8; 105 unsigned long r9; 106 unsigned long return_ip; /* ip that _resume will return to */ 107 }; 108 109 #ifdef __KERNEL__ 110 111 #define arch_has_single_step() (1) 112 #define user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0) 113 #define instruction_pointer(regs) ((regs)->erp) 114 #define profile_pc(regs) instruction_pointer(regs) 115 116 #endif /* __KERNEL__ */ 117 118 #endif 119