Initial import
[external/libunwind.git] / src / ptrace / _UPT_reg_offset.c
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
5 This file is part of libunwind.
6
7 Permission is hereby granted, free of charge, to any person obtaining
8 a copy of this software and associated documentation files (the
9 "Software"), to deal in the Software without restriction, including
10 without limitation the rights to use, copy, modify, merge, publish,
11 distribute, sublicense, and/or sell copies of the Software, and to
12 permit persons to whom the Software is furnished to do so, subject to
13 the following conditions:
14
15 The above copyright notice and this permission notice shall be
16 included in all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
25
26 #include "_UPT_internal.h"
27
28 #include <stddef.h>
29
30 #ifdef HAVE_ASM_PTRACE_OFFSETS_H
31 # include <asm/ptrace_offsets.h>
32 #endif
33
34 const int _UPT_reg_offset[UNW_REG_LAST + 1] =
35   {
36 #ifdef HAVE_ASM_PTRACE_OFFSETS_H
37 # ifndef PT_AR_CSD
38 #  define PT_AR_CSD     -1      /* this was introduced with rev 2.1 of ia64 */
39 # endif
40
41     [UNW_IA64_GR +  0]  = -1,           [UNW_IA64_GR +  1]      = PT_R1,
42     [UNW_IA64_GR +  2]  = PT_R2,        [UNW_IA64_GR +  3]      = PT_R3,
43     [UNW_IA64_GR +  4]  = PT_R4,        [UNW_IA64_GR +  5]      = PT_R5,
44     [UNW_IA64_GR +  6]  = PT_R6,        [UNW_IA64_GR +  7]      = PT_R7,
45     [UNW_IA64_GR +  8]  = PT_R8,        [UNW_IA64_GR +  9]      = PT_R9,
46     [UNW_IA64_GR + 10]  = PT_R10,       [UNW_IA64_GR + 11]      = PT_R11,
47     [UNW_IA64_GR + 12]  = PT_R12,       [UNW_IA64_GR + 13]      = PT_R13,
48     [UNW_IA64_GR + 14]  = PT_R14,       [UNW_IA64_GR + 15]      = PT_R15,
49     [UNW_IA64_GR + 16]  = PT_R16,       [UNW_IA64_GR + 17]      = PT_R17,
50     [UNW_IA64_GR + 18]  = PT_R18,       [UNW_IA64_GR + 19]      = PT_R19,
51     [UNW_IA64_GR + 20]  = PT_R20,       [UNW_IA64_GR + 21]      = PT_R21,
52     [UNW_IA64_GR + 22]  = PT_R22,       [UNW_IA64_GR + 23]      = PT_R23,
53     [UNW_IA64_GR + 24]  = PT_R24,       [UNW_IA64_GR + 25]      = PT_R25,
54     [UNW_IA64_GR + 26]  = PT_R26,       [UNW_IA64_GR + 27]      = PT_R27,
55     [UNW_IA64_GR + 28]  = PT_R28,       [UNW_IA64_GR + 29]      = PT_R29,
56     [UNW_IA64_GR + 30]  = PT_R30,       [UNW_IA64_GR + 31]      = PT_R31,
57
58     [UNW_IA64_NAT+  0]  = -1,           [UNW_IA64_NAT+  1]      = PT_NAT_BITS,
59     [UNW_IA64_NAT+  2]  = PT_NAT_BITS,  [UNW_IA64_NAT+  3]      = PT_NAT_BITS,
60     [UNW_IA64_NAT+  4]  = PT_NAT_BITS,  [UNW_IA64_NAT+  5]      = PT_NAT_BITS,
61     [UNW_IA64_NAT+  6]  = PT_NAT_BITS,  [UNW_IA64_NAT+  7]      = PT_NAT_BITS,
62     [UNW_IA64_NAT+  8]  = PT_NAT_BITS,  [UNW_IA64_NAT+  9]      = PT_NAT_BITS,
63     [UNW_IA64_NAT+ 10]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 11]      = PT_NAT_BITS,
64     [UNW_IA64_NAT+ 12]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 13]      = PT_NAT_BITS,
65     [UNW_IA64_NAT+ 14]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 15]      = PT_NAT_BITS,
66     [UNW_IA64_NAT+ 16]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 17]      = PT_NAT_BITS,
67     [UNW_IA64_NAT+ 18]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 19]      = PT_NAT_BITS,
68     [UNW_IA64_NAT+ 20]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 21]      = PT_NAT_BITS,
69     [UNW_IA64_NAT+ 22]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 23]      = PT_NAT_BITS,
70     [UNW_IA64_NAT+ 24]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 25]      = PT_NAT_BITS,
71     [UNW_IA64_NAT+ 26]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 27]      = PT_NAT_BITS,
72     [UNW_IA64_NAT+ 28]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 29]      = PT_NAT_BITS,
73     [UNW_IA64_NAT+ 30]  = PT_NAT_BITS,  [UNW_IA64_NAT+ 31]      = PT_NAT_BITS,
74
75     [UNW_IA64_FR +  0]  = -1,           [UNW_IA64_FR +  1]      = -1,
76     [UNW_IA64_FR +  2]  = PT_F2,        [UNW_IA64_FR +  3]      = PT_F3,
77     [UNW_IA64_FR +  4]  = PT_F4,        [UNW_IA64_FR +  5]      = PT_F5,
78     [UNW_IA64_FR +  6]  = PT_F6,        [UNW_IA64_FR +  7]      = PT_F7,
79     [UNW_IA64_FR +  8]  = PT_F8,        [UNW_IA64_FR +  9]      = PT_F9,
80     [UNW_IA64_FR + 10]  = PT_F10,       [UNW_IA64_FR + 11]      = PT_F11,
81     [UNW_IA64_FR + 12]  = PT_F12,       [UNW_IA64_FR + 13]      = PT_F13,
82     [UNW_IA64_FR + 14]  = PT_F14,       [UNW_IA64_FR + 15]      = PT_F15,
83     [UNW_IA64_FR + 16]  = PT_F16,       [UNW_IA64_FR + 17]      = PT_F17,
84     [UNW_IA64_FR + 18]  = PT_F18,       [UNW_IA64_FR + 19]      = PT_F19,
85     [UNW_IA64_FR + 20]  = PT_F20,       [UNW_IA64_FR + 21]      = PT_F21,
86     [UNW_IA64_FR + 22]  = PT_F22,       [UNW_IA64_FR + 23]      = PT_F23,
87     [UNW_IA64_FR + 24]  = PT_F24,       [UNW_IA64_FR + 25]      = PT_F25,
88     [UNW_IA64_FR + 26]  = PT_F26,       [UNW_IA64_FR + 27]      = PT_F27,
89     [UNW_IA64_FR + 28]  = PT_F28,       [UNW_IA64_FR + 29]      = PT_F29,
90     [UNW_IA64_FR + 30]  = PT_F30,       [UNW_IA64_FR + 31]      = PT_F31,
91     [UNW_IA64_FR + 32]  = PT_F32,       [UNW_IA64_FR + 33]      = PT_F33,
92     [UNW_IA64_FR + 34]  = PT_F34,       [UNW_IA64_FR + 35]      = PT_F35,
93     [UNW_IA64_FR + 36]  = PT_F36,       [UNW_IA64_FR + 37]      = PT_F37,
94     [UNW_IA64_FR + 38]  = PT_F38,       [UNW_IA64_FR + 39]      = PT_F39,
95     [UNW_IA64_FR + 40]  = PT_F40,       [UNW_IA64_FR + 41]      = PT_F41,
96     [UNW_IA64_FR + 42]  = PT_F42,       [UNW_IA64_FR + 43]      = PT_F43,
97     [UNW_IA64_FR + 44]  = PT_F44,       [UNW_IA64_FR + 45]      = PT_F45,
98     [UNW_IA64_FR + 46]  = PT_F46,       [UNW_IA64_FR + 47]      = PT_F47,
99     [UNW_IA64_FR + 48]  = PT_F48,       [UNW_IA64_FR + 49]      = PT_F49,
100     [UNW_IA64_FR + 50]  = PT_F50,       [UNW_IA64_FR + 51]      = PT_F51,
101     [UNW_IA64_FR + 52]  = PT_F52,       [UNW_IA64_FR + 53]      = PT_F53,
102     [UNW_IA64_FR + 54]  = PT_F54,       [UNW_IA64_FR + 55]      = PT_F55,
103     [UNW_IA64_FR + 56]  = PT_F56,       [UNW_IA64_FR + 57]      = PT_F57,
104     [UNW_IA64_FR + 58]  = PT_F58,       [UNW_IA64_FR + 59]      = PT_F59,
105     [UNW_IA64_FR + 60]  = PT_F60,       [UNW_IA64_FR + 61]      = PT_F61,
106     [UNW_IA64_FR + 62]  = PT_F62,       [UNW_IA64_FR + 63]      = PT_F63,
107     [UNW_IA64_FR + 64]  = PT_F64,       [UNW_IA64_FR + 65]      = PT_F65,
108     [UNW_IA64_FR + 66]  = PT_F66,       [UNW_IA64_FR + 67]      = PT_F67,
109     [UNW_IA64_FR + 68]  = PT_F68,       [UNW_IA64_FR + 69]      = PT_F69,
110     [UNW_IA64_FR + 70]  = PT_F70,       [UNW_IA64_FR + 71]      = PT_F71,
111     [UNW_IA64_FR + 72]  = PT_F72,       [UNW_IA64_FR + 73]      = PT_F73,
112     [UNW_IA64_FR + 74]  = PT_F74,       [UNW_IA64_FR + 75]      = PT_F75,
113     [UNW_IA64_FR + 76]  = PT_F76,       [UNW_IA64_FR + 77]      = PT_F77,
114     [UNW_IA64_FR + 78]  = PT_F78,       [UNW_IA64_FR + 79]      = PT_F79,
115     [UNW_IA64_FR + 80]  = PT_F80,       [UNW_IA64_FR + 81]      = PT_F81,
116     [UNW_IA64_FR + 82]  = PT_F82,       [UNW_IA64_FR + 83]      = PT_F83,
117     [UNW_IA64_FR + 84]  = PT_F84,       [UNW_IA64_FR + 85]      = PT_F85,
118     [UNW_IA64_FR + 86]  = PT_F86,       [UNW_IA64_FR + 87]      = PT_F87,
119     [UNW_IA64_FR + 88]  = PT_F88,       [UNW_IA64_FR + 89]      = PT_F89,
120     [UNW_IA64_FR + 90]  = PT_F90,       [UNW_IA64_FR + 91]      = PT_F91,
121     [UNW_IA64_FR + 92]  = PT_F92,       [UNW_IA64_FR + 93]      = PT_F93,
122     [UNW_IA64_FR + 94]  = PT_F94,       [UNW_IA64_FR + 95]      = PT_F95,
123     [UNW_IA64_FR + 96]  = PT_F96,       [UNW_IA64_FR + 97]      = PT_F97,
124     [UNW_IA64_FR + 98]  = PT_F98,       [UNW_IA64_FR + 99]      = PT_F99,
125     [UNW_IA64_FR +100]  = PT_F100,      [UNW_IA64_FR +101]      = PT_F101,
126     [UNW_IA64_FR +102]  = PT_F102,      [UNW_IA64_FR +103]      = PT_F103,
127     [UNW_IA64_FR +104]  = PT_F104,      [UNW_IA64_FR +105]      = PT_F105,
128     [UNW_IA64_FR +106]  = PT_F106,      [UNW_IA64_FR +107]      = PT_F107,
129     [UNW_IA64_FR +108]  = PT_F108,      [UNW_IA64_FR +109]      = PT_F109,
130     [UNW_IA64_FR +110]  = PT_F110,      [UNW_IA64_FR +111]      = PT_F111,
131     [UNW_IA64_FR +112]  = PT_F112,      [UNW_IA64_FR +113]      = PT_F113,
132     [UNW_IA64_FR +114]  = PT_F114,      [UNW_IA64_FR +115]      = PT_F115,
133     [UNW_IA64_FR +116]  = PT_F116,      [UNW_IA64_FR +117]      = PT_F117,
134     [UNW_IA64_FR +118]  = PT_F118,      [UNW_IA64_FR +119]      = PT_F119,
135     [UNW_IA64_FR +120]  = PT_F120,      [UNW_IA64_FR +121]      = PT_F121,
136     [UNW_IA64_FR +122]  = PT_F122,      [UNW_IA64_FR +123]      = PT_F123,
137     [UNW_IA64_FR +124]  = PT_F124,      [UNW_IA64_FR +125]      = PT_F125,
138     [UNW_IA64_FR +126]  = PT_F126,      [UNW_IA64_FR +127]      = PT_F127,
139
140     [UNW_IA64_AR +  0]  = -1,           [UNW_IA64_AR +  1]      = -1,
141     [UNW_IA64_AR +  2]  = -1,           [UNW_IA64_AR +  3]      = -1,
142     [UNW_IA64_AR +  4]  = -1,           [UNW_IA64_AR +  5]      = -1,
143     [UNW_IA64_AR +  6]  = -1,           [UNW_IA64_AR +  7]      = -1,
144     [UNW_IA64_AR +  8]  = -1,           [UNW_IA64_AR +  9]      = -1,
145     [UNW_IA64_AR + 10]  = -1,           [UNW_IA64_AR + 11]      = -1,
146     [UNW_IA64_AR + 12]  = -1,           [UNW_IA64_AR + 13]      = -1,
147     [UNW_IA64_AR + 14]  = -1,           [UNW_IA64_AR + 15]      = -1,
148     [UNW_IA64_AR + 16]  = PT_AR_RSC,    [UNW_IA64_AR + 17]      = PT_AR_BSP,
149     [UNW_IA64_AR + 18]  = PT_AR_BSPSTORE,[UNW_IA64_AR + 19]     = PT_AR_RNAT,
150     [UNW_IA64_AR + 20]  = -1,           [UNW_IA64_AR + 21]      = -1,
151     [UNW_IA64_AR + 22]  = -1,           [UNW_IA64_AR + 23]      = -1,
152     [UNW_IA64_AR + 24]  = -1,           [UNW_IA64_AR + 25]      = PT_AR_CSD,
153     [UNW_IA64_AR + 26]  = -1,           [UNW_IA64_AR + 27]      = -1,
154     [UNW_IA64_AR + 28]  = -1,           [UNW_IA64_AR + 29]      = -1,
155     [UNW_IA64_AR + 30]  = -1,           [UNW_IA64_AR + 31]      = -1,
156     [UNW_IA64_AR + 32]  = PT_AR_CCV,    [UNW_IA64_AR + 33]      = -1,
157     [UNW_IA64_AR + 34]  = -1,           [UNW_IA64_AR + 35]      = -1,
158     [UNW_IA64_AR + 36]  = PT_AR_UNAT,   [UNW_IA64_AR + 37]      = -1,
159     [UNW_IA64_AR + 38]  = -1,           [UNW_IA64_AR + 39]      = -1,
160     [UNW_IA64_AR + 40]  = PT_AR_FPSR,   [UNW_IA64_AR + 41]      = -1,
161     [UNW_IA64_AR + 42]  = -1,           [UNW_IA64_AR + 43]      = -1,
162     [UNW_IA64_AR + 44]  = -1,           [UNW_IA64_AR + 45]      = -1,
163     [UNW_IA64_AR + 46]  = -1,           [UNW_IA64_AR + 47]      = -1,
164     [UNW_IA64_AR + 48]  = -1,           [UNW_IA64_AR + 49]      = -1,
165     [UNW_IA64_AR + 50]  = -1,           [UNW_IA64_AR + 51]      = -1,
166     [UNW_IA64_AR + 52]  = -1,           [UNW_IA64_AR + 53]      = -1,
167     [UNW_IA64_AR + 54]  = -1,           [UNW_IA64_AR + 55]      = -1,
168     [UNW_IA64_AR + 56]  = -1,           [UNW_IA64_AR + 57]      = -1,
169     [UNW_IA64_AR + 58]  = -1,           [UNW_IA64_AR + 59]      = -1,
170     [UNW_IA64_AR + 60]  = -1,           [UNW_IA64_AR + 61]      = -1,
171     [UNW_IA64_AR + 62]  = -1,           [UNW_IA64_AR + 63]      = -1,
172     [UNW_IA64_AR + 64]  = PT_AR_PFS,    [UNW_IA64_AR + 65]      = PT_AR_LC,
173     [UNW_IA64_AR + 66]  = PT_AR_EC,     [UNW_IA64_AR + 67]      = -1,
174     [UNW_IA64_AR + 68]  = -1,           [UNW_IA64_AR + 69]      = -1,
175     [UNW_IA64_AR + 70]  = -1,           [UNW_IA64_AR + 71]      = -1,
176     [UNW_IA64_AR + 72]  = -1,           [UNW_IA64_AR + 73]      = -1,
177     [UNW_IA64_AR + 74]  = -1,           [UNW_IA64_AR + 75]      = -1,
178     [UNW_IA64_AR + 76]  = -1,           [UNW_IA64_AR + 77]      = -1,
179     [UNW_IA64_AR + 78]  = -1,           [UNW_IA64_AR + 79]      = -1,
180     [UNW_IA64_AR + 80]  = -1,           [UNW_IA64_AR + 81]      = -1,
181     [UNW_IA64_AR + 82]  = -1,           [UNW_IA64_AR + 83]      = -1,
182     [UNW_IA64_AR + 84]  = -1,           [UNW_IA64_AR + 85]      = -1,
183     [UNW_IA64_AR + 86]  = -1,           [UNW_IA64_AR + 87]      = -1,
184     [UNW_IA64_AR + 88]  = -1,           [UNW_IA64_AR + 89]      = -1,
185     [UNW_IA64_AR + 90]  = -1,           [UNW_IA64_AR + 91]      = -1,
186     [UNW_IA64_AR + 92]  = -1,           [UNW_IA64_AR + 93]      = -1,
187     [UNW_IA64_AR + 94]  = -1,           [UNW_IA64_AR + 95]      = -1,
188     [UNW_IA64_AR + 96]  = -1,           [UNW_IA64_AR + 97]      = -1,
189     [UNW_IA64_AR + 98]  = -1,           [UNW_IA64_AR + 99]      = -1,
190     [UNW_IA64_AR +100]  = -1,           [UNW_IA64_AR +101]      = -1,
191     [UNW_IA64_AR +102]  = -1,           [UNW_IA64_AR +103]      = -1,
192     [UNW_IA64_AR +104]  = -1,           [UNW_IA64_AR +105]      = -1,
193     [UNW_IA64_AR +106]  = -1,           [UNW_IA64_AR +107]      = -1,
194     [UNW_IA64_AR +108]  = -1,           [UNW_IA64_AR +109]      = -1,
195     [UNW_IA64_AR +110]  = -1,           [UNW_IA64_AR +111]      = -1,
196     [UNW_IA64_AR +112]  = -1,           [UNW_IA64_AR +113]      = -1,
197     [UNW_IA64_AR +114]  = -1,           [UNW_IA64_AR +115]      = -1,
198     [UNW_IA64_AR +116]  = -1,           [UNW_IA64_AR +117]      = -1,
199     [UNW_IA64_AR +118]  = -1,           [UNW_IA64_AR +119]      = -1,
200     [UNW_IA64_AR +120]  = -1,           [UNW_IA64_AR +121]      = -1,
201     [UNW_IA64_AR +122]  = -1,           [UNW_IA64_AR +123]      = -1,
202     [UNW_IA64_AR +124]  = -1,           [UNW_IA64_AR +125]      = -1,
203     [UNW_IA64_AR +126]  = -1,           [UNW_IA64_AR +127]      = -1,
204
205     [UNW_IA64_BR +  0]  = PT_B0,        [UNW_IA64_BR +  1]      = PT_B1,
206     [UNW_IA64_BR +  2]  = PT_B2,        [UNW_IA64_BR +  3]      = PT_B3,
207     [UNW_IA64_BR +  4]  = PT_B4,        [UNW_IA64_BR +  5]      = PT_B5,
208     [UNW_IA64_BR +  6]  = PT_B6,        [UNW_IA64_BR +  7]      = PT_B7,
209
210     [UNW_IA64_PR]       = PT_PR,
211     [UNW_IA64_CFM]      = PT_CFM,
212     [UNW_IA64_IP]       = PT_CR_IIP
213 #elif defined(HAVE_TTRACE)
214 # warning No support for ttrace() yet.
215 #elif defined(UNW_TARGET_HPPA)
216     [UNW_HPPA_GR +  0]  = 0x000,        [UNW_HPPA_GR +  1]      = 0x004,
217     [UNW_HPPA_GR +  2]  = 0x008,        [UNW_HPPA_GR +  3]      = 0x00c,
218     [UNW_HPPA_GR +  4]  = 0x010,        [UNW_HPPA_GR +  5]      = 0x014,
219     [UNW_HPPA_GR +  6]  = 0x018,        [UNW_HPPA_GR +  7]      = 0x01c,
220     [UNW_HPPA_GR +  8]  = 0x020,        [UNW_HPPA_GR +  9]      = 0x024,
221     [UNW_HPPA_GR + 10]  = 0x028,        [UNW_HPPA_GR + 11]      = 0x02c,
222     [UNW_HPPA_GR + 12]  = 0x030,        [UNW_HPPA_GR + 13]      = 0x034,
223     [UNW_HPPA_GR + 14]  = 0x038,        [UNW_HPPA_GR + 15]      = 0x03c,
224     [UNW_HPPA_GR + 16]  = 0x040,        [UNW_HPPA_GR + 17]      = 0x044,
225     [UNW_HPPA_GR + 18]  = 0x048,        [UNW_HPPA_GR + 19]      = 0x04c,
226     [UNW_HPPA_GR + 20]  = 0x050,        [UNW_HPPA_GR + 21]      = 0x054,
227     [UNW_HPPA_GR + 22]  = 0x058,        [UNW_HPPA_GR + 23]      = 0x05c,
228     [UNW_HPPA_GR + 24]  = 0x060,        [UNW_HPPA_GR + 25]      = 0x064,
229     [UNW_HPPA_GR + 26]  = 0x068,        [UNW_HPPA_GR + 27]      = 0x06c,
230     [UNW_HPPA_GR + 28]  = 0x070,        [UNW_HPPA_GR + 29]      = 0x074,
231     [UNW_HPPA_GR + 30]  = 0x078,        [UNW_HPPA_GR + 31]      = 0x07c,
232
233     [UNW_HPPA_FR +  0]  = 0x080,        [UNW_HPPA_FR +  1]      = 0x088,
234     [UNW_HPPA_FR +  2]  = 0x090,        [UNW_HPPA_FR +  3]      = 0x098,
235     [UNW_HPPA_FR +  4]  = 0x0a0,        [UNW_HPPA_FR +  5]      = 0x0a8,
236     [UNW_HPPA_FR +  6]  = 0x0b0,        [UNW_HPPA_FR +  7]      = 0x0b8,
237     [UNW_HPPA_FR +  8]  = 0x0c0,        [UNW_HPPA_FR +  9]      = 0x0c8,
238     [UNW_HPPA_FR + 10]  = 0x0d0,        [UNW_HPPA_FR + 11]      = 0x0d8,
239     [UNW_HPPA_FR + 12]  = 0x0e0,        [UNW_HPPA_FR + 13]      = 0x0e8,
240     [UNW_HPPA_FR + 14]  = 0x0f0,        [UNW_HPPA_FR + 15]      = 0x0f8,
241     [UNW_HPPA_FR + 16]  = 0x100,        [UNW_HPPA_FR + 17]      = 0x108,
242     [UNW_HPPA_FR + 18]  = 0x110,        [UNW_HPPA_FR + 19]      = 0x118,
243     [UNW_HPPA_FR + 20]  = 0x120,        [UNW_HPPA_FR + 21]      = 0x128,
244     [UNW_HPPA_FR + 22]  = 0x130,        [UNW_HPPA_FR + 23]      = 0x138,
245     [UNW_HPPA_FR + 24]  = 0x140,        [UNW_HPPA_FR + 25]      = 0x148,
246     [UNW_HPPA_FR + 26]  = 0x150,        [UNW_HPPA_FR + 27]      = 0x158,
247     [UNW_HPPA_FR + 28]  = 0x160,        [UNW_HPPA_FR + 29]      = 0x168,
248     [UNW_HPPA_FR + 30]  = 0x170,        [UNW_HPPA_FR + 31]      = 0x178,
249
250     [UNW_HPPA_IP]       = 0x1a8         /* IAOQ[0] */
251 #elif defined(UNW_TARGET_X86)
252 #if defined __FreeBSD__
253 #define UNW_R_OFF(R, r) \
254     [UNW_X86_##R]       = offsetof(gregset_t, r_##r),
255     UNW_R_OFF(EAX, eax)
256     UNW_R_OFF(EDX, edx)
257     UNW_R_OFF(ECX, ecx)
258     UNW_R_OFF(EBX, ebx)
259     UNW_R_OFF(ESI, esi)
260     UNW_R_OFF(EDI, edi)
261     UNW_R_OFF(EBP, ebp)
262     UNW_R_OFF(ESP, esp)
263     UNW_R_OFF(EIP, eip)
264 //  UNW_R_OFF(CS, cs)
265 //  UNW_R_OFF(EFLAGS, eflags)
266 //  UNW_R_OFF(SS, ss)
267 #elif defined __linux__
268     [UNW_X86_EAX]       = 0x18,
269     [UNW_X86_EBX]       = 0x00,
270     [UNW_X86_ECX]       = 0x04,
271     [UNW_X86_EDX]       = 0x08,
272     [UNW_X86_ESI]       = 0x0c,
273     [UNW_X86_EDI]       = 0x10,
274     [UNW_X86_EBP]       = 0x14,
275     [UNW_X86_EIP]       = 0x30,
276     [UNW_X86_ESP]       = 0x3c
277 /*  CS                  = 0x34, */
278 /*  DS                  = 0x1c, */
279 /*  ES                  = 0x20, */
280 /*  FS                  = 0x24, */
281 /*  GS                  = 0x28, */
282 /*  ORIG_EAX            = 0x2c, */
283 /*  EFLAGS              = 0x38, */
284 /*  SS                  = 0x40 */
285 #else
286 #error Port me
287 #endif
288 #elif defined(UNW_TARGET_X86_64)
289 #if defined __FreeBSD__
290 #define UNW_R_OFF(R, r) \
291     [UNW_X86_64_##R]    = offsetof(gregset_t, r_##r),
292     UNW_R_OFF(RAX, rax)
293     UNW_R_OFF(RDX, rdx)
294     UNW_R_OFF(RCX, rcx)
295     UNW_R_OFF(RBX, rbx)
296     UNW_R_OFF(RSI, rsi)
297     UNW_R_OFF(RDI, rdi)
298     UNW_R_OFF(RBP, rbp)
299     UNW_R_OFF(RSP, rsp)
300     UNW_R_OFF(R8, r8)
301     UNW_R_OFF(R9, r9)
302     UNW_R_OFF(R10, r10)
303     UNW_R_OFF(R11, r11)
304     UNW_R_OFF(R12, r12)
305     UNW_R_OFF(R13, r13)
306     UNW_R_OFF(R14, r14)
307     UNW_R_OFF(R15, r15)
308     UNW_R_OFF(RIP, rip)
309 //  UNW_R_OFF(CS, cs)
310 //  UNW_R_OFF(EFLAGS, rflags)
311 //  UNW_R_OFF(SS, ss)
312 #undef UNW_R_OFF
313 #elif defined __linux__
314     [UNW_X86_64_RAX]    = 0x50,
315     [UNW_X86_64_RDX]    = 0x60,
316     [UNW_X86_64_RCX]    = 0x58,
317     [UNW_X86_64_RBX]    = 0x28,
318     [UNW_X86_64_RSI]    = 0x68,
319     [UNW_X86_64_RDI]    = 0x70,
320     [UNW_X86_64_RBP]    = 0x20,
321     [UNW_X86_64_RSP]    = 0x98,
322     [UNW_X86_64_R8]     = 0x48,
323     [UNW_X86_64_R9]     = 0x40,
324     [UNW_X86_64_R10]    = 0x38,
325     [UNW_X86_64_R11]    = 0x30,
326     [UNW_X86_64_R12]    = 0x18,
327     [UNW_X86_64_R13]    = 0x10,
328     [UNW_X86_64_R14]    = 0x08,
329     [UNW_X86_64_R15]    = 0x00,
330     [UNW_X86_64_RIP]    = 0x80
331 //  [UNW_X86_64_CS]     = 0x88,
332 //  [UNW_X86_64_EFLAGS] = 0x90,
333 //  [UNW_X86_64_RSP]    = 0x98,
334 //  [UNW_X86_64_SS]     = 0xa0
335 #else
336 #error Port me
337 #endif
338 #elif defined(UNW_TARGET_PPC32) || defined(UNW_TARGET_PPC64)
339
340 #define UNW_REG_SLOT_SIZE sizeof(unsigned long)
341 #define UNW_PPC_R(v) ((v) * UNW_REG_SLOT_SIZE)
342 #define UNW_PPC_PT(p) UNW_PPC_R(PT_##p)
343
344 #define UNW_FP_OFF(b, i)    \
345     [UNW_PPC##b##_F##i] = UNW_PPC_R(PT_FPR0 + i * 8/UNW_REG_SLOT_SIZE)
346
347 #define UNW_R_OFF(b, i) \
348     [UNW_PPC##b##_R##i] = UNW_PPC_R(PT_R##i)
349
350 #define UNW_PPC_REGS(b) \
351     UNW_R_OFF(b, 0),    \
352     UNW_R_OFF(b, 1),    \
353     UNW_R_OFF(b, 2),    \
354     UNW_R_OFF(b, 3),    \
355     UNW_R_OFF(b, 4),    \
356     UNW_R_OFF(b, 5),    \
357     UNW_R_OFF(b, 6),    \
358     UNW_R_OFF(b, 7),    \
359     UNW_R_OFF(b, 8),    \
360     UNW_R_OFF(b, 9),    \
361     UNW_R_OFF(b, 10),   \
362     UNW_R_OFF(b, 11),   \
363     UNW_R_OFF(b, 12),   \
364     UNW_R_OFF(b, 13),   \
365     UNW_R_OFF(b, 14),   \
366     UNW_R_OFF(b, 15),   \
367     UNW_R_OFF(b, 16),   \
368     UNW_R_OFF(b, 17),   \
369     UNW_R_OFF(b, 18),   \
370     UNW_R_OFF(b, 19),   \
371     UNW_R_OFF(b, 20),   \
372     UNW_R_OFF(b, 21),   \
373     UNW_R_OFF(b, 22),   \
374     UNW_R_OFF(b, 23),   \
375     UNW_R_OFF(b, 24),   \
376     UNW_R_OFF(b, 25),   \
377     UNW_R_OFF(b, 26),   \
378     UNW_R_OFF(b, 27),   \
379     UNW_R_OFF(b, 28),   \
380     UNW_R_OFF(b, 29),   \
381     UNW_R_OFF(b, 30),   \
382     UNW_R_OFF(b, 31),   \
383                                \
384     [UNW_PPC##b##_CTR] = UNW_PPC_PT(CTR), \
385     [UNW_PPC##b##_XER] = UNW_PPC_PT(XER), \
386     [UNW_PPC##b##_LR]  = UNW_PPC_PT(LNK), \
387                                \
388     UNW_FP_OFF(b, 0), \
389     UNW_FP_OFF(b, 1), \
390     UNW_FP_OFF(b, 2), \
391     UNW_FP_OFF(b, 3), \
392     UNW_FP_OFF(b, 4), \
393     UNW_FP_OFF(b, 5), \
394     UNW_FP_OFF(b, 6), \
395     UNW_FP_OFF(b, 7), \
396     UNW_FP_OFF(b, 8), \
397     UNW_FP_OFF(b, 9), \
398     UNW_FP_OFF(b, 10), \
399     UNW_FP_OFF(b, 11), \
400     UNW_FP_OFF(b, 12), \
401     UNW_FP_OFF(b, 13), \
402     UNW_FP_OFF(b, 14), \
403     UNW_FP_OFF(b, 15), \
404     UNW_FP_OFF(b, 16), \
405     UNW_FP_OFF(b, 17), \
406     UNW_FP_OFF(b, 18), \
407     UNW_FP_OFF(b, 19), \
408     UNW_FP_OFF(b, 20), \
409     UNW_FP_OFF(b, 21), \
410     UNW_FP_OFF(b, 22), \
411     UNW_FP_OFF(b, 23), \
412     UNW_FP_OFF(b, 24), \
413     UNW_FP_OFF(b, 25), \
414     UNW_FP_OFF(b, 26), \
415     UNW_FP_OFF(b, 27), \
416     UNW_FP_OFF(b, 28), \
417     UNW_FP_OFF(b, 29), \
418     UNW_FP_OFF(b, 30), \
419     UNW_FP_OFF(b, 31)
420
421 #define UNW_PPC32_REGS \
422     [UNW_PPC32_FPSCR] = UNW_PPC_PT(FPSCR), \
423     [UNW_PPC32_CCR] = UNW_PPC_PT(CCR)
424
425 #define UNW_VR_OFF(i)   \
426     [UNW_PPC64_V##i] = UNW_PPC_R(PT_VR0 + i * 2)
427
428 #define UNW_PPC64_REGS \
429     [UNW_PPC64_NIP] = UNW_PPC_PT(NIP), \
430     [UNW_PPC64_FRAME_POINTER] = -1, \
431     [UNW_PPC64_ARG_POINTER] = -1,   \
432     [UNW_PPC64_CR0] = -1,           \
433     [UNW_PPC64_CR1] = -1,           \
434     [UNW_PPC64_CR2] = -1,           \
435     [UNW_PPC64_CR3] = -1,           \
436     [UNW_PPC64_CR4] = -1,           \
437     [UNW_PPC64_CR5] = -1,           \
438     [UNW_PPC64_CR6] = -1,           \
439     [UNW_PPC64_CR7] = -1,           \
440     [UNW_PPC64_VRSAVE] = UNW_PPC_PT(VRSAVE), \
441     [UNW_PPC64_VSCR] = UNW_PPC_PT(VSCR),     \
442     [UNW_PPC64_SPE_ACC] = -1,       \
443     [UNW_PPC64_SPEFSCR] = -1,       \
444     UNW_VR_OFF(0), \
445     UNW_VR_OFF(1), \
446     UNW_VR_OFF(2), \
447     UNW_VR_OFF(3), \
448     UNW_VR_OFF(4), \
449     UNW_VR_OFF(5), \
450     UNW_VR_OFF(6), \
451     UNW_VR_OFF(7), \
452     UNW_VR_OFF(8), \
453     UNW_VR_OFF(9), \
454     UNW_VR_OFF(10), \
455     UNW_VR_OFF(11), \
456     UNW_VR_OFF(12), \
457     UNW_VR_OFF(13), \
458     UNW_VR_OFF(14), \
459     UNW_VR_OFF(15), \
460     UNW_VR_OFF(16), \
461     UNW_VR_OFF(17), \
462     UNW_VR_OFF(18), \
463     UNW_VR_OFF(19), \
464     UNW_VR_OFF(20), \
465     UNW_VR_OFF(21), \
466     UNW_VR_OFF(22), \
467     UNW_VR_OFF(23), \
468     UNW_VR_OFF(24), \
469     UNW_VR_OFF(25), \
470     UNW_VR_OFF(26), \
471     UNW_VR_OFF(27), \
472     UNW_VR_OFF(28), \
473     UNW_VR_OFF(29), \
474     UNW_VR_OFF(30), \
475     UNW_VR_OFF(31)
476
477 #if defined(UNW_TARGET_PPC32)
478     UNW_PPC_REGS(32),
479     UNW_PPC32_REGS,
480 #else
481     UNW_PPC_REGS(64),
482     UNW_PPC64_REGS,
483 #endif
484
485 #elif defined(UNW_TARGET_ARM)
486     [UNW_ARM_R0]       = 0x00,
487     [UNW_ARM_R1]       = 0x04,
488     [UNW_ARM_R2]       = 0x08,
489     [UNW_ARM_R3]       = 0x0c,
490     [UNW_ARM_R4]       = 0x10,
491     [UNW_ARM_R5]       = 0x14,
492     [UNW_ARM_R6]       = 0x18,
493     [UNW_ARM_R7]       = 0x1c,
494     [UNW_ARM_R8]       = 0x20,
495     [UNW_ARM_R9]       = 0x24,
496     [UNW_ARM_R10]      = 0x28,
497     [UNW_ARM_R11]      = 0x2c,
498     [UNW_ARM_R12]      = 0x30,
499     [UNW_ARM_R13]      = 0x34,
500     [UNW_ARM_R14]      = 0x38,
501     [UNW_ARM_R15]      = 0x3c,
502 #elif defined(UNW_TARGET_MIPS)
503 #elif defined(UNW_TARGET_SH)
504 #else
505 # error Fix me.
506 #endif
507   };