ptrace.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.ptrace.h 1.8 01/17/02 23:05:50 paulus
  3.  */
  4. #ifndef _PPC_PTRACE_H
  5. #define _PPC_PTRACE_H
  6. /*
  7.  * This struct defines the way the registers are stored on the
  8.  * kernel stack during a system call or other kernel entry.
  9.  *
  10.  * this should only contain volatile regs
  11.  * since we can keep non-volatile in the thread_struct
  12.  * should set this up when only volatiles are saved
  13.  * by intr code.
  14.  *
  15.  * Since this is going on the stack, *CARE MUST BE TAKEN* to insure
  16.  * that the overall structure is a multiple of 16 bytes in length.
  17.  *
  18.  * Note that the offsets of the fields in this struct correspond with
  19.  * the PT_* values below.  This simplifies arch/ppc/kernel/ptrace.c.
  20.  */
  21. #ifndef __ASSEMBLY__
  22. struct pt_regs {
  23. unsigned long gpr[32];
  24. unsigned long nip;
  25. unsigned long msr;
  26. unsigned long orig_gpr3; /* Used for restarting system calls */
  27. unsigned long ctr;
  28. unsigned long link;
  29. unsigned long xer;
  30. unsigned long ccr;
  31. unsigned long mq; /* 601 only (not used at present) */
  32. /* Used on APUS to hold IPL value. */
  33. unsigned long trap; /* Reason for being here */
  34. unsigned long dar; /* Fault registers */
  35. unsigned long dsisr;
  36. unsigned long result;  /* Result of a system call */
  37. };
  38. #endif
  39. #ifdef __KERNEL__
  40. #define STACK_FRAME_OVERHEAD 16 /* size of minimum stack frame */
  41. /* Size of stack frame allocated when calling signal handler. */
  42. #define __SIGNAL_FRAMESIZE 64
  43. #define instruction_pointer(regs) ((regs)->nip)
  44. #define user_mode(regs) (((regs)->msr & MSR_PR) != 0)
  45. #endif /* __KERNEL__ */
  46. /*
  47.  * Offsets used by 'ptrace' system call interface.
  48.  * These can't be changed without breaking binary compatibility
  49.  * with MkLinux, etc.
  50.  */
  51. #define PT_R0 0
  52. #define PT_R1 1
  53. #define PT_R2 2
  54. #define PT_R3 3
  55. #define PT_R4 4
  56. #define PT_R5 5
  57. #define PT_R6 6
  58. #define PT_R7 7
  59. #define PT_R8 8
  60. #define PT_R9 9
  61. #define PT_R10 10
  62. #define PT_R11 11
  63. #define PT_R12 12
  64. #define PT_R13 13
  65. #define PT_R14 14
  66. #define PT_R15 15
  67. #define PT_R16 16
  68. #define PT_R17 17
  69. #define PT_R18 18
  70. #define PT_R19 19
  71. #define PT_R20 20
  72. #define PT_R21 21
  73. #define PT_R22 22
  74. #define PT_R23 23
  75. #define PT_R24 24
  76. #define PT_R25 25
  77. #define PT_R26 26
  78. #define PT_R27 27
  79. #define PT_R28 28
  80. #define PT_R29 29
  81. #define PT_R30 30
  82. #define PT_R31 31
  83. #define PT_NIP 32
  84. #define PT_MSR 33
  85. #ifdef __KERNEL__
  86. #define PT_ORIG_R3 34
  87. #endif
  88. #define PT_CTR 35
  89. #define PT_LNK 36
  90. #define PT_XER 37
  91. #define PT_CCR 38
  92. #define PT_MQ 39
  93. #define PT_FPR0 48 /* each FP reg occupies 2 slots in this space */
  94. #define PT_FPR31 (PT_FPR0 + 2*31)
  95. #define PT_FPSCR (PT_FPR0 + 2*32 + 1)
  96. /* Get/set all the altivec registers vr0..vr31, vscr, vrsave, in one go */
  97. #define PTRACE_GETVRREGS 18
  98. #define PTRACE_SETVRREGS 19
  99. #endif