_UPT_reg_offset.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. /* libunwind - a platform-independent unwind library
  2. Copyright (C) 2003-2004 Hewlett-Packard Co
  3. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
  4. This file is part of libunwind.
  5. Permission is hereby granted, free of charge, to any person obtaining
  6. a copy of this software and associated documentation files (the
  7. "Software"), to deal in the Software without restriction, including
  8. without limitation the rights to use, copy, modify, merge, publish,
  9. distribute, sublicense, and/or sell copies of the Software, and to
  10. permit persons to whom the Software is furnished to do so, subject to
  11. the following conditions:
  12. The above copyright notice and this permission notice shall be
  13. included in all copies or substantial portions of the Software.
  14. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  15. EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16. MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  17. NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  18. LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  19. OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  20. WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
  21. #include "_UPT_internal.h"
  22. #include <stddef.h>
  23. #ifdef HAVE_ASM_PTRACE_OFFSETS_H
  24. # include <asm/ptrace_offsets.h>
  25. #endif
  26. int _UPT_reg_offset[UNW_REG_LAST + 1] =
  27. {
  28. #ifdef HAVE_ASM_PTRACE_OFFSETS_H
  29. # ifndef PT_AR_CSD
  30. # define PT_AR_CSD -1 /* this was introduced with rev 2.1 of ia64 */
  31. # endif
  32. [UNW_IA64_GR + 0] = -1, [UNW_IA64_GR + 1] = PT_R1,
  33. [UNW_IA64_GR + 2] = PT_R2, [UNW_IA64_GR + 3] = PT_R3,
  34. [UNW_IA64_GR + 4] = PT_R4, [UNW_IA64_GR + 5] = PT_R5,
  35. [UNW_IA64_GR + 6] = PT_R6, [UNW_IA64_GR + 7] = PT_R7,
  36. [UNW_IA64_GR + 8] = PT_R8, [UNW_IA64_GR + 9] = PT_R9,
  37. [UNW_IA64_GR + 10] = PT_R10, [UNW_IA64_GR + 11] = PT_R11,
  38. [UNW_IA64_GR + 12] = PT_R12, [UNW_IA64_GR + 13] = PT_R13,
  39. [UNW_IA64_GR + 14] = PT_R14, [UNW_IA64_GR + 15] = PT_R15,
  40. [UNW_IA64_GR + 16] = PT_R16, [UNW_IA64_GR + 17] = PT_R17,
  41. [UNW_IA64_GR + 18] = PT_R18, [UNW_IA64_GR + 19] = PT_R19,
  42. [UNW_IA64_GR + 20] = PT_R20, [UNW_IA64_GR + 21] = PT_R21,
  43. [UNW_IA64_GR + 22] = PT_R22, [UNW_IA64_GR + 23] = PT_R23,
  44. [UNW_IA64_GR + 24] = PT_R24, [UNW_IA64_GR + 25] = PT_R25,
  45. [UNW_IA64_GR + 26] = PT_R26, [UNW_IA64_GR + 27] = PT_R27,
  46. [UNW_IA64_GR + 28] = PT_R28, [UNW_IA64_GR + 29] = PT_R29,
  47. [UNW_IA64_GR + 30] = PT_R30, [UNW_IA64_GR + 31] = PT_R31,
  48. [UNW_IA64_NAT+ 0] = -1, [UNW_IA64_NAT+ 1] = PT_NAT_BITS,
  49. [UNW_IA64_NAT+ 2] = PT_NAT_BITS, [UNW_IA64_NAT+ 3] = PT_NAT_BITS,
  50. [UNW_IA64_NAT+ 4] = PT_NAT_BITS, [UNW_IA64_NAT+ 5] = PT_NAT_BITS,
  51. [UNW_IA64_NAT+ 6] = PT_NAT_BITS, [UNW_IA64_NAT+ 7] = PT_NAT_BITS,
  52. [UNW_IA64_NAT+ 8] = PT_NAT_BITS, [UNW_IA64_NAT+ 9] = PT_NAT_BITS,
  53. [UNW_IA64_NAT+ 10] = PT_NAT_BITS, [UNW_IA64_NAT+ 11] = PT_NAT_BITS,
  54. [UNW_IA64_NAT+ 12] = PT_NAT_BITS, [UNW_IA64_NAT+ 13] = PT_NAT_BITS,
  55. [UNW_IA64_NAT+ 14] = PT_NAT_BITS, [UNW_IA64_NAT+ 15] = PT_NAT_BITS,
  56. [UNW_IA64_NAT+ 16] = PT_NAT_BITS, [UNW_IA64_NAT+ 17] = PT_NAT_BITS,
  57. [UNW_IA64_NAT+ 18] = PT_NAT_BITS, [UNW_IA64_NAT+ 19] = PT_NAT_BITS,
  58. [UNW_IA64_NAT+ 20] = PT_NAT_BITS, [UNW_IA64_NAT+ 21] = PT_NAT_BITS,
  59. [UNW_IA64_NAT+ 22] = PT_NAT_BITS, [UNW_IA64_NAT+ 23] = PT_NAT_BITS,
  60. [UNW_IA64_NAT+ 24] = PT_NAT_BITS, [UNW_IA64_NAT+ 25] = PT_NAT_BITS,
  61. [UNW_IA64_NAT+ 26] = PT_NAT_BITS, [UNW_IA64_NAT+ 27] = PT_NAT_BITS,
  62. [UNW_IA64_NAT+ 28] = PT_NAT_BITS, [UNW_IA64_NAT+ 29] = PT_NAT_BITS,
  63. [UNW_IA64_NAT+ 30] = PT_NAT_BITS, [UNW_IA64_NAT+ 31] = PT_NAT_BITS,
  64. [UNW_IA64_FR + 0] = -1, [UNW_IA64_FR + 1] = -1,
  65. [UNW_IA64_FR + 2] = PT_F2, [UNW_IA64_FR + 3] = PT_F3,
  66. [UNW_IA64_FR + 4] = PT_F4, [UNW_IA64_FR + 5] = PT_F5,
  67. [UNW_IA64_FR + 6] = PT_F6, [UNW_IA64_FR + 7] = PT_F7,
  68. [UNW_IA64_FR + 8] = PT_F8, [UNW_IA64_FR + 9] = PT_F9,
  69. [UNW_IA64_FR + 10] = PT_F10, [UNW_IA64_FR + 11] = PT_F11,
  70. [UNW_IA64_FR + 12] = PT_F12, [UNW_IA64_FR + 13] = PT_F13,
  71. [UNW_IA64_FR + 14] = PT_F14, [UNW_IA64_FR + 15] = PT_F15,
  72. [UNW_IA64_FR + 16] = PT_F16, [UNW_IA64_FR + 17] = PT_F17,
  73. [UNW_IA64_FR + 18] = PT_F18, [UNW_IA64_FR + 19] = PT_F19,
  74. [UNW_IA64_FR + 20] = PT_F20, [UNW_IA64_FR + 21] = PT_F21,
  75. [UNW_IA64_FR + 22] = PT_F22, [UNW_IA64_FR + 23] = PT_F23,
  76. [UNW_IA64_FR + 24] = PT_F24, [UNW_IA64_FR + 25] = PT_F25,
  77. [UNW_IA64_FR + 26] = PT_F26, [UNW_IA64_FR + 27] = PT_F27,
  78. [UNW_IA64_FR + 28] = PT_F28, [UNW_IA64_FR + 29] = PT_F29,
  79. [UNW_IA64_FR + 30] = PT_F30, [UNW_IA64_FR + 31] = PT_F31,
  80. [UNW_IA64_FR + 32] = PT_F32, [UNW_IA64_FR + 33] = PT_F33,
  81. [UNW_IA64_FR + 34] = PT_F34, [UNW_IA64_FR + 35] = PT_F35,
  82. [UNW_IA64_FR + 36] = PT_F36, [UNW_IA64_FR + 37] = PT_F37,
  83. [UNW_IA64_FR + 38] = PT_F38, [UNW_IA64_FR + 39] = PT_F39,
  84. [UNW_IA64_FR + 40] = PT_F40, [UNW_IA64_FR + 41] = PT_F41,
  85. [UNW_IA64_FR + 42] = PT_F42, [UNW_IA64_FR + 43] = PT_F43,
  86. [UNW_IA64_FR + 44] = PT_F44, [UNW_IA64_FR + 45] = PT_F45,
  87. [UNW_IA64_FR + 46] = PT_F46, [UNW_IA64_FR + 47] = PT_F47,
  88. [UNW_IA64_FR + 48] = PT_F48, [UNW_IA64_FR + 49] = PT_F49,
  89. [UNW_IA64_FR + 50] = PT_F50, [UNW_IA64_FR + 51] = PT_F51,
  90. [UNW_IA64_FR + 52] = PT_F52, [UNW_IA64_FR + 53] = PT_F53,
  91. [UNW_IA64_FR + 54] = PT_F54, [UNW_IA64_FR + 55] = PT_F55,
  92. [UNW_IA64_FR + 56] = PT_F56, [UNW_IA64_FR + 57] = PT_F57,
  93. [UNW_IA64_FR + 58] = PT_F58, [UNW_IA64_FR + 59] = PT_F59,
  94. [UNW_IA64_FR + 60] = PT_F60, [UNW_IA64_FR + 61] = PT_F61,
  95. [UNW_IA64_FR + 62] = PT_F62, [UNW_IA64_FR + 63] = PT_F63,
  96. [UNW_IA64_FR + 64] = PT_F64, [UNW_IA64_FR + 65] = PT_F65,
  97. [UNW_IA64_FR + 66] = PT_F66, [UNW_IA64_FR + 67] = PT_F67,
  98. [UNW_IA64_FR + 68] = PT_F68, [UNW_IA64_FR + 69] = PT_F69,
  99. [UNW_IA64_FR + 70] = PT_F70, [UNW_IA64_FR + 71] = PT_F71,
  100. [UNW_IA64_FR + 72] = PT_F72, [UNW_IA64_FR + 73] = PT_F73,
  101. [UNW_IA64_FR + 74] = PT_F74, [UNW_IA64_FR + 75] = PT_F75,
  102. [UNW_IA64_FR + 76] = PT_F76, [UNW_IA64_FR + 77] = PT_F77,
  103. [UNW_IA64_FR + 78] = PT_F78, [UNW_IA64_FR + 79] = PT_F79,
  104. [UNW_IA64_FR + 80] = PT_F80, [UNW_IA64_FR + 81] = PT_F81,
  105. [UNW_IA64_FR + 82] = PT_F82, [UNW_IA64_FR + 83] = PT_F83,
  106. [UNW_IA64_FR + 84] = PT_F84, [UNW_IA64_FR + 85] = PT_F85,
  107. [UNW_IA64_FR + 86] = PT_F86, [UNW_IA64_FR + 87] = PT_F87,
  108. [UNW_IA64_FR + 88] = PT_F88, [UNW_IA64_FR + 89] = PT_F89,
  109. [UNW_IA64_FR + 90] = PT_F90, [UNW_IA64_FR + 91] = PT_F91,
  110. [UNW_IA64_FR + 92] = PT_F92, [UNW_IA64_FR + 93] = PT_F93,
  111. [UNW_IA64_FR + 94] = PT_F94, [UNW_IA64_FR + 95] = PT_F95,
  112. [UNW_IA64_FR + 96] = PT_F96, [UNW_IA64_FR + 97] = PT_F97,
  113. [UNW_IA64_FR + 98] = PT_F98, [UNW_IA64_FR + 99] = PT_F99,
  114. [UNW_IA64_FR +100] = PT_F100, [UNW_IA64_FR +101] = PT_F101,
  115. [UNW_IA64_FR +102] = PT_F102, [UNW_IA64_FR +103] = PT_F103,
  116. [UNW_IA64_FR +104] = PT_F104, [UNW_IA64_FR +105] = PT_F105,
  117. [UNW_IA64_FR +106] = PT_F106, [UNW_IA64_FR +107] = PT_F107,
  118. [UNW_IA64_FR +108] = PT_F108, [UNW_IA64_FR +109] = PT_F109,
  119. [UNW_IA64_FR +110] = PT_F110, [UNW_IA64_FR +111] = PT_F111,
  120. [UNW_IA64_FR +112] = PT_F112, [UNW_IA64_FR +113] = PT_F113,
  121. [UNW_IA64_FR +114] = PT_F114, [UNW_IA64_FR +115] = PT_F115,
  122. [UNW_IA64_FR +116] = PT_F116, [UNW_IA64_FR +117] = PT_F117,
  123. [UNW_IA64_FR +118] = PT_F118, [UNW_IA64_FR +119] = PT_F119,
  124. [UNW_IA64_FR +120] = PT_F120, [UNW_IA64_FR +121] = PT_F121,
  125. [UNW_IA64_FR +122] = PT_F122, [UNW_IA64_FR +123] = PT_F123,
  126. [UNW_IA64_FR +124] = PT_F124, [UNW_IA64_FR +125] = PT_F125,
  127. [UNW_IA64_FR +126] = PT_F126, [UNW_IA64_FR +127] = PT_F127,
  128. [UNW_IA64_AR + 0] = -1, [UNW_IA64_AR + 1] = -1,
  129. [UNW_IA64_AR + 2] = -1, [UNW_IA64_AR + 3] = -1,
  130. [UNW_IA64_AR + 4] = -1, [UNW_IA64_AR + 5] = -1,
  131. [UNW_IA64_AR + 6] = -1, [UNW_IA64_AR + 7] = -1,
  132. [UNW_IA64_AR + 8] = -1, [UNW_IA64_AR + 9] = -1,
  133. [UNW_IA64_AR + 10] = -1, [UNW_IA64_AR + 11] = -1,
  134. [UNW_IA64_AR + 12] = -1, [UNW_IA64_AR + 13] = -1,
  135. [UNW_IA64_AR + 14] = -1, [UNW_IA64_AR + 15] = -1,
  136. [UNW_IA64_AR + 16] = PT_AR_RSC, [UNW_IA64_AR + 17] = PT_AR_BSP,
  137. [UNW_IA64_AR + 18] = PT_AR_BSPSTORE,[UNW_IA64_AR + 19] = PT_AR_RNAT,
  138. [UNW_IA64_AR + 20] = -1, [UNW_IA64_AR + 21] = -1,
  139. [UNW_IA64_AR + 22] = -1, [UNW_IA64_AR + 23] = -1,
  140. [UNW_IA64_AR + 24] = -1, [UNW_IA64_AR + 25] = PT_AR_CSD,
  141. [UNW_IA64_AR + 26] = -1, [UNW_IA64_AR + 27] = -1,
  142. [UNW_IA64_AR + 28] = -1, [UNW_IA64_AR + 29] = -1,
  143. [UNW_IA64_AR + 30] = -1, [UNW_IA64_AR + 31] = -1,
  144. [UNW_IA64_AR + 32] = PT_AR_CCV, [UNW_IA64_AR + 33] = -1,
  145. [UNW_IA64_AR + 34] = -1, [UNW_IA64_AR + 35] = -1,
  146. [UNW_IA64_AR + 36] = PT_AR_UNAT, [UNW_IA64_AR + 37] = -1,
  147. [UNW_IA64_AR + 38] = -1, [UNW_IA64_AR + 39] = -1,
  148. [UNW_IA64_AR + 40] = PT_AR_FPSR, [UNW_IA64_AR + 41] = -1,
  149. [UNW_IA64_AR + 42] = -1, [UNW_IA64_AR + 43] = -1,
  150. [UNW_IA64_AR + 44] = -1, [UNW_IA64_AR + 45] = -1,
  151. [UNW_IA64_AR + 46] = -1, [UNW_IA64_AR + 47] = -1,
  152. [UNW_IA64_AR + 48] = -1, [UNW_IA64_AR + 49] = -1,
  153. [UNW_IA64_AR + 50] = -1, [UNW_IA64_AR + 51] = -1,
  154. [UNW_IA64_AR + 52] = -1, [UNW_IA64_AR + 53] = -1,
  155. [UNW_IA64_AR + 54] = -1, [UNW_IA64_AR + 55] = -1,
  156. [UNW_IA64_AR + 56] = -1, [UNW_IA64_AR + 57] = -1,
  157. [UNW_IA64_AR + 58] = -1, [UNW_IA64_AR + 59] = -1,
  158. [UNW_IA64_AR + 60] = -1, [UNW_IA64_AR + 61] = -1,
  159. [UNW_IA64_AR + 62] = -1, [UNW_IA64_AR + 63] = -1,
  160. [UNW_IA64_AR + 64] = PT_AR_PFS, [UNW_IA64_AR + 65] = PT_AR_LC,
  161. [UNW_IA64_AR + 66] = PT_AR_EC, [UNW_IA64_AR + 67] = -1,
  162. [UNW_IA64_AR + 68] = -1, [UNW_IA64_AR + 69] = -1,
  163. [UNW_IA64_AR + 70] = -1, [UNW_IA64_AR + 71] = -1,
  164. [UNW_IA64_AR + 72] = -1, [UNW_IA64_AR + 73] = -1,
  165. [UNW_IA64_AR + 74] = -1, [UNW_IA64_AR + 75] = -1,
  166. [UNW_IA64_AR + 76] = -1, [UNW_IA64_AR + 77] = -1,
  167. [UNW_IA64_AR + 78] = -1, [UNW_IA64_AR + 79] = -1,
  168. [UNW_IA64_AR + 80] = -1, [UNW_IA64_AR + 81] = -1,
  169. [UNW_IA64_AR + 82] = -1, [UNW_IA64_AR + 83] = -1,
  170. [UNW_IA64_AR + 84] = -1, [UNW_IA64_AR + 85] = -1,
  171. [UNW_IA64_AR + 86] = -1, [UNW_IA64_AR + 87] = -1,
  172. [UNW_IA64_AR + 88] = -1, [UNW_IA64_AR + 89] = -1,
  173. [UNW_IA64_AR + 90] = -1, [UNW_IA64_AR + 91] = -1,
  174. [UNW_IA64_AR + 92] = -1, [UNW_IA64_AR + 93] = -1,
  175. [UNW_IA64_AR + 94] = -1, [UNW_IA64_AR + 95] = -1,
  176. [UNW_IA64_AR + 96] = -1, [UNW_IA64_AR + 97] = -1,
  177. [UNW_IA64_AR + 98] = -1, [UNW_IA64_AR + 99] = -1,
  178. [UNW_IA64_AR +100] = -1, [UNW_IA64_AR +101] = -1,
  179. [UNW_IA64_AR +102] = -1, [UNW_IA64_AR +103] = -1,
  180. [UNW_IA64_AR +104] = -1, [UNW_IA64_AR +105] = -1,
  181. [UNW_IA64_AR +106] = -1, [UNW_IA64_AR +107] = -1,
  182. [UNW_IA64_AR +108] = -1, [UNW_IA64_AR +109] = -1,
  183. [UNW_IA64_AR +110] = -1, [UNW_IA64_AR +111] = -1,
  184. [UNW_IA64_AR +112] = -1, [UNW_IA64_AR +113] = -1,
  185. [UNW_IA64_AR +114] = -1, [UNW_IA64_AR +115] = -1,
  186. [UNW_IA64_AR +116] = -1, [UNW_IA64_AR +117] = -1,
  187. [UNW_IA64_AR +118] = -1, [UNW_IA64_AR +119] = -1,
  188. [UNW_IA64_AR +120] = -1, [UNW_IA64_AR +121] = -1,
  189. [UNW_IA64_AR +122] = -1, [UNW_IA64_AR +123] = -1,
  190. [UNW_IA64_AR +124] = -1, [UNW_IA64_AR +125] = -1,
  191. [UNW_IA64_AR +126] = -1, [UNW_IA64_AR +127] = -1,
  192. [UNW_IA64_BR + 0] = PT_B0, [UNW_IA64_BR + 1] = PT_B1,
  193. [UNW_IA64_BR + 2] = PT_B2, [UNW_IA64_BR + 3] = PT_B3,
  194. [UNW_IA64_BR + 4] = PT_B4, [UNW_IA64_BR + 5] = PT_B5,
  195. [UNW_IA64_BR + 6] = PT_B6, [UNW_IA64_BR + 7] = PT_B7,
  196. [UNW_IA64_PR] = PT_PR,
  197. [UNW_IA64_CFM] = PT_CFM,
  198. [UNW_IA64_IP] = PT_CR_IIP
  199. #elif defined(HAVE_TTRACE)
  200. # warning No support for ttrace() yet.
  201. #elif defined(UNW_TARGET_HPPA)
  202. [UNW_HPPA_GR + 0] = 0x000, [UNW_HPPA_GR + 1] = 0x004,
  203. [UNW_HPPA_GR + 2] = 0x008, [UNW_HPPA_GR + 3] = 0x00c,
  204. [UNW_HPPA_GR + 4] = 0x010, [UNW_HPPA_GR + 5] = 0x014,
  205. [UNW_HPPA_GR + 6] = 0x018, [UNW_HPPA_GR + 7] = 0x01c,
  206. [UNW_HPPA_GR + 8] = 0x020, [UNW_HPPA_GR + 9] = 0x024,
  207. [UNW_HPPA_GR + 10] = 0x028, [UNW_HPPA_GR + 11] = 0x02c,
  208. [UNW_HPPA_GR + 12] = 0x030, [UNW_HPPA_GR + 13] = 0x034,
  209. [UNW_HPPA_GR + 14] = 0x038, [UNW_HPPA_GR + 15] = 0x03c,
  210. [UNW_HPPA_GR + 16] = 0x040, [UNW_HPPA_GR + 17] = 0x044,
  211. [UNW_HPPA_GR + 18] = 0x048, [UNW_HPPA_GR + 19] = 0x04c,
  212. [UNW_HPPA_GR + 20] = 0x050, [UNW_HPPA_GR + 21] = 0x054,
  213. [UNW_HPPA_GR + 22] = 0x058, [UNW_HPPA_GR + 23] = 0x05c,
  214. [UNW_HPPA_GR + 24] = 0x060, [UNW_HPPA_GR + 25] = 0x064,
  215. [UNW_HPPA_GR + 26] = 0x068, [UNW_HPPA_GR + 27] = 0x06c,
  216. [UNW_HPPA_GR + 28] = 0x070, [UNW_HPPA_GR + 29] = 0x074,
  217. [UNW_HPPA_GR + 30] = 0x078, [UNW_HPPA_GR + 31] = 0x07c,
  218. [UNW_HPPA_FR + 0] = 0x080, [UNW_HPPA_FR + 1] = 0x088,
  219. [UNW_HPPA_FR + 2] = 0x090, [UNW_HPPA_FR + 3] = 0x098,
  220. [UNW_HPPA_FR + 4] = 0x0a0, [UNW_HPPA_FR + 5] = 0x0a8,
  221. [UNW_HPPA_FR + 6] = 0x0b0, [UNW_HPPA_FR + 7] = 0x0b8,
  222. [UNW_HPPA_FR + 8] = 0x0c0, [UNW_HPPA_FR + 9] = 0x0c8,
  223. [UNW_HPPA_FR + 10] = 0x0d0, [UNW_HPPA_FR + 11] = 0x0d8,
  224. [UNW_HPPA_FR + 12] = 0x0e0, [UNW_HPPA_FR + 13] = 0x0e8,
  225. [UNW_HPPA_FR + 14] = 0x0f0, [UNW_HPPA_FR + 15] = 0x0f8,
  226. [UNW_HPPA_FR + 16] = 0x100, [UNW_HPPA_FR + 17] = 0x108,
  227. [UNW_HPPA_FR + 18] = 0x110, [UNW_HPPA_FR + 19] = 0x118,
  228. [UNW_HPPA_FR + 20] = 0x120, [UNW_HPPA_FR + 21] = 0x128,
  229. [UNW_HPPA_FR + 22] = 0x130, [UNW_HPPA_FR + 23] = 0x138,
  230. [UNW_HPPA_FR + 24] = 0x140, [UNW_HPPA_FR + 25] = 0x148,
  231. [UNW_HPPA_FR + 26] = 0x150, [UNW_HPPA_FR + 27] = 0x158,
  232. [UNW_HPPA_FR + 28] = 0x160, [UNW_HPPA_FR + 29] = 0x168,
  233. [UNW_HPPA_FR + 30] = 0x170, [UNW_HPPA_FR + 31] = 0x178,
  234. [UNW_HPPA_IP] = 0x1a8 /* IAOQ[0] */
  235. #elif defined(UNW_TARGET_X86)
  236. #if defined __FreeBSD__
  237. #define UNW_R_OFF(R, r) \
  238. [UNW_X86_##R] = offsetof(gregset_t, r_##r),
  239. UNW_R_OFF(EAX, eax)
  240. UNW_R_OFF(EDX, edx)
  241. UNW_R_OFF(ECX, ecx)
  242. UNW_R_OFF(EBX, ebx)
  243. UNW_R_OFF(ESI, esi)
  244. UNW_R_OFF(EDI, edi)
  245. UNW_R_OFF(EBP, ebp)
  246. UNW_R_OFF(ESP, esp)
  247. UNW_R_OFF(EIP, eip)
  248. // UNW_R_OFF(CS, cs)
  249. // UNW_R_OFF(EFLAGS, eflags)
  250. // UNW_R_OFF(SS, ss)
  251. #elif defined __linux__
  252. [UNW_X86_EAX] = 0x18,
  253. [UNW_X86_EBX] = 0x00,
  254. [UNW_X86_ECX] = 0x04,
  255. [UNW_X86_EDX] = 0x08,
  256. [UNW_X86_ESI] = 0x0c,
  257. [UNW_X86_EDI] = 0x10,
  258. [UNW_X86_EBP] = 0x14,
  259. [UNW_X86_EIP] = 0x30,
  260. [UNW_X86_ESP] = 0x3c
  261. /* CS = 0x34, */
  262. /* DS = 0x1c, */
  263. /* ES = 0x20, */
  264. /* FS = 0x24, */
  265. /* GS = 0x28, */
  266. /* ORIG_EAX = 0x2c, */
  267. /* EFLAGS = 0x38, */
  268. /* SS = 0x40 */
  269. #else
  270. #error Port me
  271. #endif
  272. #elif defined(UNW_TARGET_X86_64)
  273. #if defined __FreeBSD__
  274. #define UNW_R_OFF(R, r) \
  275. [UNW_X86_64_##R] = offsetof(gregset_t, r_##r),
  276. UNW_R_OFF(RAX, rax)
  277. UNW_R_OFF(RDX, rdx)
  278. UNW_R_OFF(RCX, rcx)
  279. UNW_R_OFF(RBX, rbx)
  280. UNW_R_OFF(RSI, rsi)
  281. UNW_R_OFF(RDI, rdi)
  282. UNW_R_OFF(RBP, rbp)
  283. UNW_R_OFF(RSP, rsp)
  284. UNW_R_OFF(R8, r8)
  285. UNW_R_OFF(R9, r9)
  286. UNW_R_OFF(R10, r10)
  287. UNW_R_OFF(R11, r11)
  288. UNW_R_OFF(R12, r12)
  289. UNW_R_OFF(R13, r13)
  290. UNW_R_OFF(R14, r14)
  291. UNW_R_OFF(R15, r15)
  292. UNW_R_OFF(RIP, rip)
  293. // UNW_R_OFF(CS, cs)
  294. // UNW_R_OFF(EFLAGS, rflags)
  295. // UNW_R_OFF(SS, ss)
  296. #undef UNW_R_OFF
  297. #elif defined __linux__
  298. [UNW_X86_64_RAX] = 0x50,
  299. [UNW_X86_64_RDX] = 0x60,
  300. [UNW_X86_64_RCX] = 0x58,
  301. [UNW_X86_64_RBX] = 0x28,
  302. [UNW_X86_64_RSI] = 0x68,
  303. [UNW_X86_64_RDI] = 0x70,
  304. [UNW_X86_64_RBP] = 0x20,
  305. [UNW_X86_64_RSP] = 0x98,
  306. [UNW_X86_64_R8] = 0x48,
  307. [UNW_X86_64_R9] = 0x40,
  308. [UNW_X86_64_R10] = 0x38,
  309. [UNW_X86_64_R11] = 0x30,
  310. [UNW_X86_64_R12] = 0x18,
  311. [UNW_X86_64_R13] = 0x10,
  312. [UNW_X86_64_R14] = 0x08,
  313. [UNW_X86_64_R15] = 0x00,
  314. [UNW_X86_64_RIP] = 0x80
  315. // [UNW_X86_64_CS] = 0x88,
  316. // [UNW_X86_64_EFLAGS] = 0x90,
  317. // [UNW_X86_64_RSP] = 0x98,
  318. // [UNW_X86_64_SS] = 0xa0
  319. #else
  320. #error Port me
  321. #endif
  322. #elif defined(UNW_TARGET_PPC32)
  323. #elif defined(UNW_TARGET_PPC64)
  324. #elif defined(UNW_TARGET_ARM)
  325. [UNW_ARM_R0] = 0x00,
  326. [UNW_ARM_R1] = 0x04,
  327. [UNW_ARM_R2] = 0x08,
  328. [UNW_ARM_R3] = 0x0c,
  329. [UNW_ARM_R4] = 0x10,
  330. [UNW_ARM_R5] = 0x14,
  331. [UNW_ARM_R6] = 0x18,
  332. [UNW_ARM_R7] = 0x1c,
  333. [UNW_ARM_R8] = 0x20,
  334. [UNW_ARM_R9] = 0x24,
  335. [UNW_ARM_R10] = 0x28,
  336. [UNW_ARM_R11] = 0x2c,
  337. [UNW_ARM_R12] = 0x30,
  338. [UNW_ARM_R13] = 0x34,
  339. [UNW_ARM_R14] = 0x38,
  340. [UNW_ARM_R15] = 0x3c,
  341. #elif defined(UNW_TARGET_MIPS)
  342. #else
  343. # error Fix me.
  344. #endif
  345. };