home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / ptrace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.3 KB  |  149 lines

  1. #ifndef __ASM_SH_PTRACE_H
  2. #define __ASM_SH_PTRACE_H
  3.  
  4. /*
  5.  * Copyright (C) 1999, 2000  Niibe Yutaka
  6.  *
  7.  */
  8. #if defined(__SH5__)
  9. struct pt_regs {
  10.     unsigned long long pc;
  11.     unsigned long long sr;
  12.     unsigned long long syscall_nr;
  13.     unsigned long long regs[63];
  14.     unsigned long long tregs[8];
  15.     unsigned long long pad[2];
  16. };
  17. #else
  18. /*
  19.  * GCC defines register number like this:
  20.  * -----------------------------
  21.  *     0 - 15 are integer registers
  22.  *    17 - 22 are control/special registers
  23.  *    24 - 39 fp registers
  24.  *    40 - 47 xd registers
  25.  *    48 -    fpscr register
  26.  * -----------------------------
  27.  *
  28.  * We follows above, except:
  29.  *    16 --- program counter (PC)
  30.  *    22 --- syscall #
  31.  *    23 --- floating point communication register
  32.  */
  33. #define REG_REG0     0
  34. #define REG_REG15    15
  35.  
  36. #define REG_PC        16
  37.  
  38. #define REG_PR        17
  39. #define REG_SR        18
  40. #define REG_GBR        19
  41. #define REG_MACH    20
  42. #define REG_MACL    21
  43.  
  44. #define REG_SYSCALL    22
  45.  
  46. #define REG_FPREG0    23
  47. #define REG_FPREG15    38
  48. #define REG_XFREG0    39
  49. #define REG_XFREG15    54
  50.  
  51. #define REG_FPSCR    55
  52. #define REG_FPUL    56
  53.  
  54. /*
  55.  * This struct defines the way the registers are stored on the
  56.  * kernel stack during a system call or other kernel entry.
  57.  */
  58. struct pt_regs {
  59.     unsigned long regs[16];
  60.     unsigned long pc;
  61.     unsigned long pr;
  62.     unsigned long sr;
  63.     unsigned long gbr;
  64.     unsigned long mach;
  65.     unsigned long macl;
  66.     long tra;
  67. };
  68.  
  69. /*
  70.  * This struct defines the way the DSP registers are stored on the
  71.  * kernel stack during a system call or other kernel entry.
  72.  */
  73. struct pt_dspregs {
  74.     unsigned long    a1;
  75.     unsigned long    a0g;
  76.     unsigned long    a1g;
  77.     unsigned long    m0;
  78.     unsigned long    m1;
  79.     unsigned long    a0;
  80.     unsigned long    x0;
  81.     unsigned long    x1;
  82.     unsigned long    y0;
  83.     unsigned long    y1;
  84.     unsigned long    dsr;
  85.     unsigned long    rs;
  86.     unsigned long    re;
  87.     unsigned long    mod;
  88. };
  89.  
  90. #define PTRACE_GETREGS        12    /* General registers */
  91. #define PTRACE_SETREGS        13
  92.  
  93. #define PTRACE_GETFPREGS    14    /* FPU registers */
  94. #define PTRACE_SETFPREGS    15
  95.  
  96. #define PTRACE_GETFDPIC        31    /* get the ELF fdpic loadmap address */
  97.  
  98. #define PTRACE_GETFDPIC_EXEC    0    /* [addr] request the executable loadmap */
  99. #define PTRACE_GETFDPIC_INTERP    1    /* [addr] request the interpreter loadmap */
  100.  
  101. #define    PTRACE_GETDSPREGS    55    /* DSP registers */
  102. #define    PTRACE_SETDSPREGS    56
  103. #endif
  104.  
  105. #ifdef __KERNEL__
  106. #include <asm/addrspace.h>
  107.  
  108. #define user_mode(regs)            (((regs)->sr & 0x40000000)==0)
  109. #define instruction_pointer(regs)    ((unsigned long)(regs)->pc)
  110.  
  111. extern void show_regs(struct pt_regs *);
  112.  
  113. /*
  114.  * These are defined as per linux/ptrace.h.
  115.  */
  116. struct task_struct;
  117.  
  118. #define arch_has_single_step()    (1)
  119. extern void user_enable_single_step(struct task_struct *);
  120. extern void user_disable_single_step(struct task_struct *);
  121.  
  122. #ifdef CONFIG_SH_DSP
  123. #define task_pt_regs(task) \
  124.     ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
  125.          - sizeof(struct pt_dspregs) - sizeof(unsigned long)) - 1)
  126. #define task_pt_dspregs(task) \
  127.     ((struct pt_dspregs *) (task_stack_page(task) + THREAD_SIZE \
  128.          - sizeof(unsigned long)) - 1)
  129. #else
  130. #define task_pt_regs(task) \
  131.     ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
  132.          - sizeof(unsigned long)) - 1)
  133. #endif
  134.  
  135. static inline unsigned long profile_pc(struct pt_regs *regs)
  136. {
  137.     unsigned long pc = instruction_pointer(regs);
  138.  
  139. #ifdef P2SEG
  140.     if (pc >= P2SEG && pc < P3SEG)
  141.         pc -= 0x20000000;
  142. #endif
  143.  
  144.     return pc;
  145. }
  146. #endif /* __KERNEL__ */
  147.  
  148. #endif /* __ASM_SH_PTRACE_H */
  149.