ptrace.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * OpenRISC Linux
  3. *
  4. * Linux architectural port borrowing liberally from similar works of
  5. * others. All original copyrights apply as per the original source
  6. * declaration.
  7. *
  8. * OpenRISC implementation:
  9. * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
  10. * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
  11. * et al.
  12. *
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License as published by
  15. * the Free Software Foundation; either version 2 of the License, or
  16. * (at your option) any later version.
  17. */
  18. #ifndef __ASM_OPENRISC_PTRACE_H
  19. #define __ASM_OPENRISC_PTRACE_H
  20. #ifndef __ASSEMBLY__
  21. /*
  22. * This is the layout of the regset returned by the GETREGSET ptrace call
  23. */
  24. struct user_regs_struct {
  25. /* GPR R0-R31... */
  26. unsigned long gpr[32];
  27. unsigned long pc;
  28. unsigned long sr;
  29. };
  30. #endif
  31. #ifdef __KERNEL__
  32. #include <asm/spr_defs.h>
  33. /*
  34. * Make kernel PTrace/register structures opaque to userspace... userspace can
  35. * access thread state via the regset mechanism. This allows us a bit of
  36. * flexibility in how we order the registers on the stack, permitting some
  37. * optimizations like packing call-clobbered registers together so that
  38. * they share a cacheline (not done yet, though... future optimization).
  39. */
  40. #ifndef __ASSEMBLY__
  41. /*
  42. * This struct describes how the registers are laid out on the kernel stack
  43. * during a syscall or other kernel entry.
  44. *
  45. * This structure should always be cacheline aligned on the stack.
  46. * FIXME: I don't think that's the case right now. The alignment is
  47. * taken care of elsewhere... head.S, process.c, etc.
  48. */
  49. struct pt_regs {
  50. union {
  51. struct {
  52. /* Named registers */
  53. long sr; /* Stored in place of r0 */
  54. long sp; /* r1 */
  55. };
  56. struct {
  57. /* Old style */
  58. long offset[2];
  59. long gprs[30];
  60. };
  61. struct {
  62. /* New style */
  63. long gpr[32];
  64. };
  65. };
  66. long pc;
  67. /* For restarting system calls:
  68. * Set to syscall number for syscall exceptions,
  69. * -1 for all other exceptions.
  70. */
  71. long orig_gpr11; /* For restarting system calls */
  72. long dummy; /* Cheap alignment fix */
  73. long dummy2; /* Cheap alignment fix */
  74. };
  75. /* TODO: Rename this to REDZONE because that's what it is */
  76. #define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */
  77. #define instruction_pointer(regs) ((regs)->pc)
  78. #define user_mode(regs) (((regs)->sr & SPR_SR_SM) == 0)
  79. #define user_stack_pointer(regs) ((unsigned long)(regs)->sp)
  80. #define profile_pc(regs) instruction_pointer(regs)
  81. static inline long regs_return_value(struct pt_regs *regs)
  82. {
  83. return regs->gpr[11];
  84. }
  85. #endif /* __ASSEMBLY__ */
  86. /*
  87. * Offsets used by 'ptrace' system call interface.
  88. */
  89. #define PT_SR 0
  90. #define PT_SP 4
  91. #define PT_GPR2 8
  92. #define PT_GPR3 12
  93. #define PT_GPR4 16
  94. #define PT_GPR5 20
  95. #define PT_GPR6 24
  96. #define PT_GPR7 28
  97. #define PT_GPR8 32
  98. #define PT_GPR9 36
  99. #define PT_GPR10 40
  100. #define PT_GPR11 44
  101. #define PT_GPR12 48
  102. #define PT_GPR13 52
  103. #define PT_GPR14 56
  104. #define PT_GPR15 60
  105. #define PT_GPR16 64
  106. #define PT_GPR17 68
  107. #define PT_GPR18 72
  108. #define PT_GPR19 76
  109. #define PT_GPR20 80
  110. #define PT_GPR21 84
  111. #define PT_GPR22 88
  112. #define PT_GPR23 92
  113. #define PT_GPR24 96
  114. #define PT_GPR25 100
  115. #define PT_GPR26 104
  116. #define PT_GPR27 108
  117. #define PT_GPR28 112
  118. #define PT_GPR29 116
  119. #define PT_GPR30 120
  120. #define PT_GPR31 124
  121. #define PT_PC 128
  122. #define PT_ORIG_GPR11 132
  123. #define PT_SYSCALLNO 136
  124. #endif /* __KERNEL__ */
  125. #endif /* __ASM_OPENRISC_PTRACE_H */