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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _PPC64_PTRACE_H
  2. #define _PPC64_PTRACE_H
  3. /*
  4.  * Copyright (C) 2001 PPC64 Team, IBM Corp
  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.  * this should only contain volatile regs
  10.  * since we can keep non-volatile in the thread_struct
  11.  * should set this up when only volatiles are saved
  12.  * by intr code.
  13.  *
  14.  * Since this is going on the stack, *CARE MUST BE TAKEN* to insure
  15.  * that the overall structure is a multiple of 16 bytes in length.
  16.  *
  17.  * Note that the offsets of the fields in this struct correspond with
  18.  * the PT_* values below.  This simplifies arch/ppc/kernel/ptrace.c.
  19.  *
  20.  * This program is free software; you can redistribute it and/or
  21.  * modify it under the terms of the GNU General Public License
  22.  * as published by the Free Software Foundation; either version
  23.  * 2 of the License, or (at your option) any later version.
  24.  */
  25. #define INIT_TASK_SIZE 4*PAGE_SIZE
  26. #ifndef __ASSEMBLY__
  27. #define PPC_REG unsigned long
  28. struct pt_regs {
  29. PPC_REG gpr[32];
  30. PPC_REG nip;
  31. PPC_REG msr;
  32. PPC_REG orig_gpr3; /* Used for restarting system calls */
  33. PPC_REG ctr;
  34. PPC_REG link;
  35. PPC_REG xer;
  36. PPC_REG ccr;
  37. PPC_REG softe; /* Soft enabled/disabled */
  38. PPC_REG trap; /* Reason for being here */
  39. PPC_REG dar; /* Fault registers */
  40. PPC_REG dsisr;
  41. PPC_REG result;  /* Result of a system call */
  42. };
  43. #define PPC_REG_32 unsigned int
  44. struct pt_regs32 {
  45. PPC_REG_32 gpr[32];
  46. PPC_REG_32 nip;
  47. PPC_REG_32 msr;
  48. PPC_REG_32 orig_gpr3; /* Used for restarting system calls */
  49. PPC_REG_32 ctr;
  50. PPC_REG_32 link;
  51. PPC_REG_32 xer;
  52. PPC_REG_32 ccr;
  53. PPC_REG_32 mq; /* 601 only (not used at present) */
  54. /* Used on APUS to hold IPL value. */
  55. PPC_REG_32 trap; /* Reason for being here */
  56. PPC_REG_32 dar; /* Fault registers */
  57. PPC_REG_32 dsisr;
  58. PPC_REG_32 result;  /* Result of a system call */
  59. };
  60. #endif
  61. #define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */
  62. /* Size of stack frame allocated when calling signal handler. */
  63. /* FIXME: What should this be on 64-bit kernel (64 for 32-bit) */
  64. #define __SIGNAL_FRAMESIZE 64
  65. #define __SIGNAL_FRAMESIZE32 64
  66. #define instruction_pointer(regs) ((regs)->nip)
  67. #define user_mode(regs) ((((regs)->msr) >> MSR_PR_LG) & 0x1)
  68. /*
  69.  * Offsets used by 'ptrace' system call interface.
  70.  */
  71. #define PT_R0 0
  72. #define PT_R1 1
  73. #define PT_R2 2
  74. #define PT_R3 3
  75. #define PT_R4 4
  76. #define PT_R5 5
  77. #define PT_R6 6
  78. #define PT_R7 7
  79. #define PT_R8 8
  80. #define PT_R9 9
  81. #define PT_R10 10
  82. #define PT_R11 11
  83. #define PT_R12 12
  84. #define PT_R13 13
  85. #define PT_R14 14
  86. #define PT_R15 15
  87. #define PT_R16 16
  88. #define PT_R17 17
  89. #define PT_R18 18
  90. #define PT_R19 19
  91. #define PT_R20 20
  92. #define PT_R21 21
  93. #define PT_R22 22
  94. #define PT_R23 23
  95. #define PT_R24 24
  96. #define PT_R25 25
  97. #define PT_R26 26
  98. #define PT_R27 27
  99. #define PT_R28 28
  100. #define PT_R29 29
  101. #define PT_R30 30
  102. #define PT_R31 31
  103. #define PT_NIP 32
  104. #define PT_MSR 33
  105. #ifdef __KERNEL__
  106. #define PT_ORIG_R3 34
  107. #endif
  108. #define PT_CTR 35
  109. #define PT_LNK 36
  110. #define PT_XER 37
  111. #define PT_CCR 38
  112. #define PT_SOFTE 39
  113. #define PT_RESULT 43
  114. #define PT_FPR0 48
  115. #ifdef __KERNEL__
  116. #define PT_FPSCR (PT_FPR0 + 32 + 1)   /* each FP reg occupies 1 slot in this space */
  117. #define PT_FPSCR32 (PT_FPR0 + 2*32 + 1)   /* To the 32-bit user - each FP reg occupies 2 slots in this space */
  118. #else
  119. #define PT_FPSCR (PT_FPR0 + 2*32 + 1) /* each FP reg occupies 2 slots in this space -- Fix when 64-bit apps. */
  120. #endif
  121. /* Additional PTRACE requests implemented on PowerPC. */
  122. #define PPC_PTRACE_GETREGS       0x99  /* Get GPRs 0 - 31 */
  123. #define PPC_PTRACE_SETREGS       0x98  /* Set GPRs 0 - 31 */
  124. #define PPC_PTRACE_GETFPREGS     0x97  /* Get FPRs 0 - 31 */
  125. #define PPC_PTRACE_SETFPREGS     0x96  /* Set FPRs 0 - 31 */
  126. #define PPC_PTRACE_PEEKTEXT_3264  0x95  /* Read word at location ADDR on a 64-bit process from a 32-bit process. */
  127. #define PPC_PTRACE_PEEKDATA_3264  0x94  /* Read word at location ADDR on a 64-bit process from a 32-bit process. */
  128. #define PPC_PTRACE_POKETEXT_3264  0x93  /* Write word at location ADDR on a 64-bit process from a 32-bit process. */
  129. #define PPC_PTRACE_POKEDATA_3264  0x92  /* Write word at location ADDR on a 64-bit process from a 32-bit process. */
  130. #define PPC_PTRACE_PEEKUSR_3264   0x91  /* Read a register (specified by ADDR) out of the "user area" on a 64-bit process from a 32-bit process. */
  131. #define PPC_PTRACE_POKEUSR_3264   0x90  /* Write DATA into location ADDR within the "user area" on a 64-bit process from a 32-bit process. */
  132. #endif /* _PPC64_PTRACE_H */