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-alpha / ptrace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.0 KB  |  86 lines

  1. #ifndef _ASMAXP_PTRACE_H
  2. #define _ASMAXP_PTRACE_H
  3.  
  4.  
  5. /*
  6.  * This struct defines the way the registers are stored on the
  7.  * kernel stack during a system call or other kernel entry
  8.  *
  9.  * NOTE! I want to minimize the overhead of system calls, so this
  10.  * struct has as little information as possible.  I does not have
  11.  *
  12.  *  - floating point regs: the kernel doesn't change those
  13.  *  - r9-15: saved by the C compiler
  14.  *
  15.  * This makes "fork()" and "exec()" a bit more complex, but should
  16.  * give us low system call latency.
  17.  */
  18.  
  19. struct pt_regs {
  20.     unsigned long r0;
  21.     unsigned long r1;
  22.     unsigned long r2;
  23.     unsigned long r3;
  24.     unsigned long r4;
  25.     unsigned long r5;
  26.     unsigned long r6;
  27.     unsigned long r7;
  28.     unsigned long r8;
  29.     unsigned long r19;
  30.     unsigned long r20;
  31.     unsigned long r21;
  32.     unsigned long r22;
  33.     unsigned long r23;
  34.     unsigned long r24;
  35.     unsigned long r25;
  36.     unsigned long r26;
  37.     unsigned long r27;
  38.     unsigned long r28;
  39.     unsigned long hae;
  40. /* JRP - These are the values provided to a0-a2 by PALcode */
  41.     unsigned long trap_a0;
  42.     unsigned long trap_a1;
  43.     unsigned long trap_a2;
  44. /* These are saved by PAL-code: */
  45.     unsigned long ps;
  46.     unsigned long pc;
  47.     unsigned long gp;
  48.     unsigned long r16;
  49.     unsigned long r17;
  50.     unsigned long r18;
  51. };
  52.  
  53. /*
  54.  * This is the extended stack used by signal handlers and the context
  55.  * switcher: it's pushed after the normal "struct pt_regs".
  56.  */
  57. struct switch_stack {
  58.     unsigned long r9;
  59.     unsigned long r10;
  60.     unsigned long r11;
  61.     unsigned long r12;
  62.     unsigned long r13;
  63.     unsigned long r14;
  64.     unsigned long r15;
  65.     unsigned long r26;
  66.     unsigned long fp[32];    /* fp[31] is fpcr */
  67. };
  68.  
  69. #ifdef __KERNEL__
  70.  
  71. #define __ARCH_SYS_PTRACE    1
  72.  
  73. #define user_mode(regs) (((regs)->ps & 8) != 0)
  74. #define instruction_pointer(regs) ((regs)->pc)
  75. #define profile_pc(regs) instruction_pointer(regs)
  76. extern void show_regs(struct pt_regs *);
  77.  
  78. #define task_pt_regs(task) \
  79.   ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)
  80.  
  81. #define force_successful_syscall_return() (task_pt_regs(current)->r0 = 0)
  82.  
  83. #endif
  84.  
  85. #endif
  86.