ptrace.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. * S390 version
  3. * Copyright IBM Corp. 1999, 2000
  4. * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
  5. */
  6. #ifndef _S390_PTRACE_H
  7. #define _S390_PTRACE_H
  8. #include <uapi/asm/ptrace.h>
  9. #ifndef __ASSEMBLY__
  10. #ifndef __s390x__
  11. #else /* __s390x__ */
  12. #endif /* __s390x__ */
  13. extern long psw_kernel_bits;
  14. extern long psw_user_bits;
  15. /*
  16. * The pt_regs struct defines the way the registers are stored on
  17. * the stack during a system call.
  18. */
  19. struct pt_regs
  20. {
  21. unsigned long args[1];
  22. psw_t psw;
  23. unsigned long gprs[NUM_GPRS];
  24. unsigned long orig_gpr2;
  25. unsigned int int_code;
  26. unsigned long int_parm_long;
  27. };
  28. /*
  29. * Program event recording (PER) register set.
  30. */
  31. struct per_regs {
  32. unsigned long control; /* PER control bits */
  33. unsigned long start; /* PER starting address */
  34. unsigned long end; /* PER ending address */
  35. };
  36. /*
  37. * PER event contains information about the cause of the last PER exception.
  38. */
  39. struct per_event {
  40. unsigned short cause; /* PER code, ATMID and AI */
  41. unsigned long address; /* PER address */
  42. unsigned char paid; /* PER access identification */
  43. };
  44. /*
  45. * Simplified per_info structure used to decode the ptrace user space ABI.
  46. */
  47. struct per_struct_kernel {
  48. unsigned long cr9; /* PER control bits */
  49. unsigned long cr10; /* PER starting address */
  50. unsigned long cr11; /* PER ending address */
  51. unsigned long bits; /* Obsolete software bits */
  52. unsigned long starting_addr; /* User specified start address */
  53. unsigned long ending_addr; /* User specified end address */
  54. unsigned short perc_atmid; /* PER trap ATMID */
  55. unsigned long address; /* PER trap instruction address */
  56. unsigned char access_id; /* PER trap access identification */
  57. };
  58. #define PER_EVENT_MASK 0xEB000000UL
  59. #define PER_EVENT_BRANCH 0x80000000UL
  60. #define PER_EVENT_IFETCH 0x40000000UL
  61. #define PER_EVENT_STORE 0x20000000UL
  62. #define PER_EVENT_STORE_REAL 0x08000000UL
  63. #define PER_EVENT_TRANSACTION_END 0x02000000UL
  64. #define PER_EVENT_NULLIFICATION 0x01000000UL
  65. #define PER_CONTROL_MASK 0x00e00000UL
  66. #define PER_CONTROL_BRANCH_ADDRESS 0x00800000UL
  67. #define PER_CONTROL_SUSPENSION 0x00400000UL
  68. #define PER_CONTROL_ALTERATION 0x00200000UL
  69. #ifdef __s390x__
  70. #endif /* __s390x__ */
  71. /*
  72. * These are defined as per linux/ptrace.h, which see.
  73. */
  74. #define arch_has_single_step() (1)
  75. #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0)
  76. #define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN)
  77. #define user_stack_pointer(regs)((regs)->gprs[15])
  78. #define profile_pc(regs) instruction_pointer(regs)
  79. static inline long regs_return_value(struct pt_regs *regs)
  80. {
  81. return regs->gprs[2];
  82. }
  83. int regs_query_register_offset(const char *name);
  84. const char *regs_query_register_name(unsigned int offset);
  85. unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset);
  86. unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n);
  87. static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
  88. {
  89. return regs->gprs[15] & PSW_ADDR_INSN;
  90. }
  91. #endif /* __ASSEMBLY__ */
  92. #endif /* _S390_PTRACE_H */