home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-xtensa / ptrace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.1 KB  |  136 lines

  1. /*
  2.  * include/asm-xtensa/ptrace.h
  3.  *
  4.  * This file is subject to the terms and conditions of the GNU General Public
  5.  * License.  See the file "COPYING" in the main directory of this archive
  6.  * for more details.
  7.  *
  8.  * Copyright (C) 2001 - 2005 Tensilica Inc.
  9.  */
  10.  
  11. #ifndef _XTENSA_PTRACE_H
  12. #define _XTENSA_PTRACE_H
  13.  
  14. #include <xtensa/config/core.h>
  15.  
  16. /*
  17.  * Kernel stack
  18.  *
  19.  *         +-----------------------+  -------- STACK_SIZE
  20.  *         |     register file     |  |
  21.  *         +-----------------------+  |
  22.  *         |    struct pt_regs     |  |
  23.  *         +-----------------------+  | ------ PT_REGS_OFFSET
  24.  * double     :  16 bytes spill area  :  |  ^
  25.  * excetion     :- - - - - - - - - - - -:  |  |
  26.  * frame    :    struct pt_regs     :  |  |
  27.  *         :- - - - - - - - - - - -:  |  |
  28.  *         |                       |  |  |
  29.  *         |     memory stack      |  |  |
  30.  *         |                       |  |  |
  31.  *         ~                       ~  ~  ~
  32.  *         ~                       ~  ~  ~
  33.  *         |                       |  |  |
  34.  *         |                       |  |  |
  35.  *         +-----------------------+  |  | --- STACK_BIAS
  36.  *         |  struct task_struct   |  |  |  ^
  37.  *  current --> +-----------------------+  |  |  |
  38.  *         |  struct thread_info   |  |  |  |
  39.  *        +-----------------------+ --------
  40.  */
  41.  
  42. #define KERNEL_STACK_SIZE (2 * PAGE_SIZE)
  43.  
  44. /*  Offsets for exception_handlers[] (3 x 64-entries x 4-byte tables). */
  45.  
  46. #define EXC_TABLE_KSTK        0x004    /* Kernel Stack */
  47. #define EXC_TABLE_DOUBLE_SAVE    0x008    /* Double exception save area for a0 */
  48. #define EXC_TABLE_FIXUP        0x00c    /* Fixup handler */
  49. #define EXC_TABLE_PARAM        0x010    /* For passing a parameter to fixup */
  50. #define EXC_TABLE_SYSCALL_SAVE    0x014    /* For fast syscall handler */
  51. #define EXC_TABLE_FAST_USER    0x100    /* Fast user exception handler */
  52. #define EXC_TABLE_FAST_KERNEL    0x200    /* Fast kernel exception handler */
  53. #define EXC_TABLE_DEFAULT    0x300    /* Default C-Handler */
  54. #define EXC_TABLE_SIZE        0x400
  55.  
  56. /* Registers used by strace */
  57.  
  58. #define REG_A_BASE    0xfc000000
  59. #define REG_AR_BASE    0x04000000
  60. #define REG_PC        0x14000000
  61. #define REG_PS        0x080000e6
  62. #define REG_WB        0x08000048
  63. #define REG_WS        0x08000049
  64. #define REG_LBEG    0x08000000
  65. #define REG_LEND    0x08000001
  66. #define REG_LCOUNT    0x08000002
  67. #define REG_SAR        0x08000003
  68. #define REG_DEPC    0x080000c0
  69. #define    REG_EXCCAUSE    0x080000e8
  70. #define REG_EXCVADDR    0x080000ee
  71. #define SYSCALL_NR    0x1
  72.  
  73. #define AR_REGNO_TO_A_REGNO(ar, wb) (ar - wb*4) & ~(XCHAL_NUM_AREGS - 1)
  74.  
  75. /* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */
  76.  
  77. #define PTRACE_GETREGS            12
  78. #define PTRACE_SETREGS            13
  79. #define PTRACE_GETFPREGS          14
  80. #define PTRACE_SETFPREGS          15
  81. #define PTRACE_GETFPREGSIZE       18
  82.  
  83. #ifndef __ASSEMBLY__
  84.  
  85. /*
  86.  * This struct defines the way the registers are stored on the
  87.  * kernel stack during a system call or other kernel entry.
  88.  */
  89. struct pt_regs {
  90.     unsigned long pc;        /*   4 */
  91.     unsigned long ps;        /*   8 */
  92.     unsigned long depc;        /*  12 */
  93.     unsigned long exccause;        /*  16 */
  94.     unsigned long excvaddr;        /*  20 */
  95.     unsigned long debugcause;    /*  24 */
  96.     unsigned long wmask;        /*  28 */
  97.     unsigned long lbeg;        /*  32 */
  98.     unsigned long lend;        /*  36 */
  99.     unsigned long lcount;        /*  40 */
  100.     unsigned long sar;        /*  44 */
  101.     unsigned long windowbase;    /*  48 */
  102.     unsigned long windowstart;    /*  52 */
  103.     unsigned long syscall;        /*  56 */
  104.     int reserved[2];        /*  64 */
  105.  
  106.     /* Make sure the areg field is 16 bytes aligned. */
  107.     int align[0] __attribute__ ((aligned(16)));
  108.  
  109.     /* current register frame.
  110.      * Note: The ESF for kernel exceptions ends after 16 registers!
  111.      */
  112.     unsigned long areg[16];        /* 128 (64) */
  113. };
  114.  
  115. #ifdef __KERNEL__
  116. # define task_pt_regs(tsk) ((struct pt_regs*) \
  117.   (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1)
  118. # define user_mode(regs) (((regs)->ps & 0x00000020)!=0)
  119. # define instruction_pointer(regs) ((regs)->pc)
  120. extern void show_regs(struct pt_regs *);
  121.  
  122. # ifndef CONFIG_SMP
  123. #  define profile_pc(regs) instruction_pointer(regs)
  124. # endif
  125. #endif /* __KERNEL__ */
  126.  
  127. #else    /* __ASSEMBLY__ */
  128.  
  129. #ifdef __KERNEL__
  130. # include <asm/asm-offsets.h>
  131. #define PT_REGS_OFFSET      (KERNEL_STACK_SIZE - PT_USER_SIZE)
  132. #endif
  133.  
  134. #endif    /* !__ASSEMBLY__ */
  135. #endif    /* _XTENSA_PTRACE_H */
  136.