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