ptrace.h 2.9 KB

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