linux/arch/cris/include/arch-v32/arch/ptrace.h
<<
>>
Prefs
   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
  56struct 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
  95struct 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 user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0)
 112#define instruction_pointer(regs) ((regs)->erp)
 113extern void show_regs(struct pt_regs *);
 114#define profile_pc(regs) instruction_pointer(regs)
 115
 116#endif  /*  __KERNEL__  */
 117
 118#endif
 119