ptrace.h 3.1 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. #define PSW_KERNEL_BITS (PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_HOME | \
  11. PSW_MASK_EA | PSW_MASK_BA)
  12. #define PSW_USER_BITS (PSW_MASK_DAT | PSW_MASK_IO | PSW_MASK_EXT | \
  13. PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_MASK_MCHECK | \
  14. PSW_MASK_PSTATE | PSW_ASC_PRIMARY)
  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 int int_parm;
  27. unsigned long int_parm_long;
  28. };
  29. /*
  30. * Program event recording (PER) register set.
  31. */
  32. struct per_regs {
  33. unsigned long control; /* PER control bits */
  34. unsigned long start; /* PER starting address */
  35. unsigned long end; /* PER ending address */
  36. };
  37. /*
  38. * PER event contains information about the cause of the last PER exception.
  39. */
  40. struct per_event {
  41. unsigned short cause; /* PER code, ATMID and AI */
  42. unsigned long address; /* PER address */
  43. unsigned char paid; /* PER access identification */
  44. };
  45. /*
  46. * Simplified per_info structure used to decode the ptrace user space ABI.
  47. */
  48. struct per_struct_kernel {
  49. unsigned long cr9; /* PER control bits */
  50. unsigned long cr10; /* PER starting address */
  51. unsigned long cr11; /* PER ending address */
  52. unsigned long bits; /* Obsolete software bits */
  53. unsigned long starting_addr; /* User specified start address */
  54. unsigned long ending_addr; /* User specified end address */
  55. unsigned short perc_atmid; /* PER trap ATMID */
  56. unsigned long address; /* PER trap instruction address */
  57. unsigned char access_id; /* PER trap access identification */
  58. };
  59. #define PER_EVENT_MASK 0xEB000000UL
  60. #define PER_EVENT_BRANCH 0x80000000UL
  61. #define PER_EVENT_IFETCH 0x40000000UL
  62. #define PER_EVENT_STORE 0x20000000UL
  63. #define PER_EVENT_STORE_REAL 0x08000000UL
  64. #define PER_EVENT_TRANSACTION_END 0x02000000UL
  65. #define PER_EVENT_NULLIFICATION 0x01000000UL
  66. #define PER_CONTROL_MASK 0x00e00000UL
  67. #define PER_CONTROL_BRANCH_ADDRESS 0x00800000UL
  68. #define PER_CONTROL_SUSPENSION 0x00400000UL
  69. #define PER_CONTROL_ALTERATION 0x00200000UL
  70. /*
  71. * These are defined as per linux/ptrace.h, which see.
  72. */
  73. #define arch_has_single_step() (1)
  74. #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0)
  75. #define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN)
  76. #define user_stack_pointer(regs)((regs)->gprs[15])
  77. #define profile_pc(regs) instruction_pointer(regs)
  78. static inline long regs_return_value(struct pt_regs *regs)
  79. {
  80. return regs->gprs[2];
  81. }
  82. int regs_query_register_offset(const char *name);
  83. const char *regs_query_register_name(unsigned int offset);
  84. unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset);
  85. unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n);
  86. static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
  87. {
  88. return regs->gprs[15] & PSW_ADDR_INSN;
  89. }
  90. #endif /* __ASSEMBLY__ */
  91. #endif /* _S390_PTRACE_H */