root/arch/xtensa/include/asm/ptrace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. regs_return_value

   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 #ifndef _XTENSA_PTRACE_H
  11 #define _XTENSA_PTRACE_H
  12 
  13 #include <asm/kmem_layout.h>
  14 #include <uapi/asm/ptrace.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 NO_SYSCALL (-1)
  43 
  44 #ifndef __ASSEMBLY__
  45 
  46 #include <asm/coprocessor.h>
  47 
  48 /*
  49  * This struct defines the way the registers are stored on the
  50  * kernel stack during a system call or other kernel entry.
  51  */
  52 struct pt_regs {
  53         unsigned long pc;               /*   4 */
  54         unsigned long ps;               /*   8 */
  55         unsigned long depc;             /*  12 */
  56         unsigned long exccause;         /*  16 */
  57         unsigned long excvaddr;         /*  20 */
  58         unsigned long debugcause;       /*  24 */
  59         unsigned long wmask;            /*  28 */
  60         unsigned long lbeg;             /*  32 */
  61         unsigned long lend;             /*  36 */
  62         unsigned long lcount;           /*  40 */
  63         unsigned long sar;              /*  44 */
  64         unsigned long windowbase;       /*  48 */
  65         unsigned long windowstart;      /*  52 */
  66         unsigned long syscall;          /*  56 */
  67         unsigned long icountlevel;      /*  60 */
  68         unsigned long scompare1;        /*  64 */
  69         unsigned long threadptr;        /*  68 */
  70 
  71         /* Additional configurable registers that are used by the compiler. */
  72         xtregs_opt_t xtregs_opt;
  73 
  74         /* Make sure the areg field is 16 bytes aligned. */
  75         int align[0] __attribute__ ((aligned(16)));
  76 
  77         /* current register frame.
  78          * Note: The ESF for kernel exceptions ends after 16 registers!
  79          */
  80         unsigned long areg[16];
  81 };
  82 
  83 #include <asm/core.h>
  84 
  85 # define arch_has_single_step() (1)
  86 # define task_pt_regs(tsk) ((struct pt_regs*) \
  87         (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1)
  88 # define user_mode(regs) (((regs)->ps & 0x00000020)!=0)
  89 # define instruction_pointer(regs) ((regs)->pc)
  90 # define return_pointer(regs) (MAKE_PC_FROM_RA((regs)->areg[0], \
  91                                                (regs)->areg[1]))
  92 
  93 # ifndef CONFIG_SMP
  94 #  define profile_pc(regs) instruction_pointer(regs)
  95 # else
  96 #  define profile_pc(regs)                                              \
  97         ({                                                              \
  98                 in_lock_functions(instruction_pointer(regs)) ?          \
  99                 return_pointer(regs) : instruction_pointer(regs);       \
 100         })
 101 # endif
 102 
 103 #define user_stack_pointer(regs) ((regs)->areg[1])
 104 
 105 static inline unsigned long regs_return_value(struct pt_regs *regs)
 106 {
 107         return regs->areg[2];
 108 }
 109 
 110 #else   /* __ASSEMBLY__ */
 111 
 112 # include <asm/asm-offsets.h>
 113 #define PT_REGS_OFFSET    (KERNEL_STACK_SIZE - PT_USER_SIZE)
 114 
 115 #endif  /* !__ASSEMBLY__ */
 116 
 117 #endif  /* _XTENSA_PTRACE_H */

/* [<][>][^][v][top][bottom][index][help] */