1 /*
2   Copyright (C) 2007-2012 David Anderson. All Rights Reserved.
3   Portions Copyright (C) 2012 SN Systems Ltd. All rights reserved.
4 
5   This program is free software; you can redistribute it and/or modify it
6   under the terms of version 2.1 of the GNU Lesser General Public License
7   published by the Free Software Foundation.
8 
9   This program is distributed in the hope that it would be useful, but
10   WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13   Further, this software is distributed without any warranty that it is
14   free of the rightful claim of any third person regarding infringement
15   or the like.  Any license provided herein, whether implied or
16   otherwise, applies only to this software file.  Patent licenses, if
17   any, provided herein do not apply to combinations of this program with
18   other software, or any other product whatsoever.
19 
20   You should have received a copy of the GNU Lesser General Public License along
21   with this program; if not, write the Free Software Foundation, Inc., 51
22   Franklin Street - Fifth Floor, Boston MA 02110-1301, USA.
23 */
24 /* The address of the Free Software Foundation is
25    Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
26    Boston, MA 02110-1301, USA.
27 */
28 
29 #ifndef DWARF_RELOC_PPC_H
30 #define DWARF_RELOC_PPC_H
31 
32 /* Definitions for PPC */
33 #define DWARF_RELOC_PPC
34 
35 /* Include the definitions only in the case of Windows */
36 #ifdef _WIN32
37 /* PowerPC relocations defined by the ABIs */
38 #define R_PPC_NONE                   0
39 #define R_PPC_ADDR32                 1 /* 32bit absolute address */
40 #define R_PPC_ADDR24                 2 /* 26bit address, 2 bits ignored.  */
41 #define R_PPC_ADDR16                 3 /* 16bit absolute address */
42 #define R_PPC_ADDR16_LO              4 /* lower 16bit of absolute address */
43 #define R_PPC_ADDR16_HI              5 /* high 16bit of absolute address */
44 #define R_PPC_ADDR16_HA              6 /* adjusted high 16bit */
45 #define R_PPC_ADDR14                 7 /* 16bit address, 2 bits ignored */
46 #define R_PPC_ADDR14_BRTAKEN         8
47 #define R_PPC_ADDR14_BRNTAKEN        9
48 #define R_PPC_REL24                 10 /* PC relative 26 bit */
49 #define R_PPC_REL14                 11 /* PC relative 16 bit */
50 #define R_PPC_REL14_BRTAKEN         12
51 #define R_PPC_REL14_BRNTAKEN        13
52 #define R_PPC_GOT16                 14
53 #define R_PPC_GOT16_LO              15
54 #define R_PPC_GOT16_HI              16
55 #define R_PPC_GOT16_HA              17
56 #define R_PPC_PLTREL24              18
57 #define R_PPC_COPY                  19
58 #define R_PPC_GLOB_DAT              20
59 #define R_PPC_JMP_SLOT              21
60 #define R_PPC_RELATIVE              22
61 #define R_PPC_LOCAL24PC             23
62 #define R_PPC_UADDR32               24
63 #define R_PPC_UADDR16               25
64 #define R_PPC_REL32                 26
65 #define R_PPC_PLT32                 27
66 #define R_PPC_PLTREL32              28
67 #define R_PPC_PLT16_LO              29
68 #define R_PPC_PLT16_HI              30
69 #define R_PPC_PLT16_HA              31
70 #define R_PPC_SDAREL16              32
71 #define R_PPC_SECTOFF               33
72 #define R_PPC_SECTOFF_LO            34
73 #define R_PPC_SECTOFF_HI            35
74 #define R_PPC_SECTOFF_HA            36
75 
76 /* Unused types */
77 #define R_PPC_37                    37
78 #define R_PPC_38                    38
79 #define R_PPC_39                    39
80 #define R_PPC_40                    40
81 #define R_PPC_41                    41
82 #define R_PPC_42                    42
83 #define R_PPC_43                    43
84 #define R_PPC_44                    44
85 #define R_PPC_45                    45
86 #define R_PPC_46                    46
87 #define R_PPC_47                    47
88 #define R_PPC_48                    48
89 #define R_PPC_49                    49
90 #define R_PPC_50                    50
91 #define R_PPC_51                    51
92 #define R_PPC_52                    52
93 #define R_PPC_53                    53
94 #define R_PPC_54                    54
95 #define R_PPC_55                    55
96 
97 /* Unused types */
98 #define R_PPC_56                    56
99 #define R_PPC_57                    57
100 #define R_PPC_58                    58
101 #define R_PPC_59                    59
102 #define R_PPC_60                    60
103 #define R_PPC_61                    61
104 #define R_PPC_62                    62
105 #define R_PPC_63                    63
106 #define R_PPC_64                    64
107 #define R_PPC_65                    65
108 #define R_PPC_66                    66
109 
110 /* PowerPC relocations defined for the TLS access ABI.  */
111 #define R_PPC_TLS                   67 /* none      (sym+add)@tls */
112 #define R_PPC_DTPMOD32              68 /* word32    (sym+add)@dtpmod */
113 #define R_PPC_TPREL16               69 /* half16*   (sym+add)@tprel */
114 #define R_PPC_TPREL16_LO            70 /* half16    (sym+add)@tprel@l */
115 #define R_PPC_TPREL16_HI            71 /* half16    (sym+add)@tprel@h */
116 #define R_PPC_TPREL16_HA            72 /* half16    (sym+add)@tprel@ha */
117 #define R_PPC_TPREL32               73 /* word32    (sym+add)@tprel */
118 #define R_PPC_DTPREL16              74 /* half16*   (sym+add)@dtprel */
119 #define R_PPC_DTPREL16_LO           75 /* half16    (sym+add)@dtprel@l */
120 #define R_PPC_DTPREL16_HI           76 /* half16    (sym+add)@dtprel@h */
121 #define R_PPC_DTPREL16_HA           77 /* half16    (sym+add)@dtprel@ha */
122 #define R_PPC_DTPREL32              78 /* word32    (sym+add)@dtprel */
123 #define R_PPC_GOT_TLSGD16           79 /* half16*   (sym+add)@got@tlsgd */
124 #define R_PPC_GOT_TLSGD16_LO        80 /* half16    (sym+add)@got@tlsgd@l */
125 #define R_PPC_GOT_TLSGD16_HI        81 /* half16    (sym+add)@got@tlsgd@h */
126 #define R_PPC_GOT_TLSGD16_HA        82 /* half16    (sym+add)@got@tlsgd@ha */
127 #define R_PPC_GOT_TLSLD16           83 /* half16*   (sym+add)@got@tlsld */
128 #define R_PPC_GOT_TLSLD16_LO        84 /* half16    (sym+add)@got@tlsld@l */
129 #define R_PPC_GOT_TLSLD16_HI        85 /* half16    (sym+add)@got@tlsld@h */
130 #define R_PPC_GOT_TLSLD16_HA        86 /* half16    (sym+add)@got@tlsld@ha */
131 #define R_PPC_GOT_TPREL16           87 /* half16*   (sym+add)@got@tprel */
132 #define R_PPC_GOT_TPREL16_LO        88 /* half16    (sym+add)@got@tprel@l */
133 #define R_PPC_GOT_TPREL16_HI        89 /* half16    (sym+add)@got@tprel@h */
134 #define R_PPC_GOT_TPREL16_HA        90 /* half16    (sym+add)@got@tprel@ha */
135 #define R_PPC_GOT_DTPREL16          91 /* half16*   (sym+add)@got@dtprel */
136 #define R_PPC_GOT_DTPREL16_LO       92 /* half16*   (sym+add)@got@dtprel@l */
137 #define R_PPC_GOT_DTPREL16_HI       93 /* half16*   (sym+add)@got@dtprel@h */
138 #define R_PPC_GOT_DTPREL16_HA       94 /* half16*   (sym+add)@got@dtprel@ha */
139 
140 /* Keep this the last entry.  */
141 #define R_PPC_NUM                   95
142 #endif /* _WIN32 */
143 
144 /* PowerPC relocations defined by the ABIs */
145 static const char *reloc_type_names_PPC[] = {
146     "R_PPC_NONE",                 /*  00 */
147     "R_PPC_ADDR32",               /*  01 */
148     "R_PPC_ADDR24",               /*  02 */
149     "R_PPC_ADDR16",               /*  03 */
150     "R_PPC_ADDR16_LO",            /*  04 */
151     "R_PPC_ADDR16_HI",            /*  05 */
152     "R_PPC_ADDR16_HA",            /*  06 */
153     "R_PPC_ADDR14",               /*  07 */
154     "R_PPC_ADDR14_BRTAKEN",       /*  08 */
155     "R_PPC_ADDR14_BRNTAKEN",      /*  09 */
156     "R_PPC_REL24",                /*  10 */
157     "R_PPC_REL14",                /*  11 */
158     "R_PPC_REL14_BRTAKEN",        /*  12 */
159     "R_PPC_REL14_BRNTAKEN",       /*  13 */
160     "R_PPC_GOT16",                /*  14 */
161     "R_PPC_GOT16_LO",             /*  15 */
162     "R_PPC_GOT16_HI",             /*  16 */
163     "R_PPC_GOT16_HA",             /*  17 */
164     "R_PPC_PLTREL24",             /*  18 */
165     "R_PPC_COPY",                 /*  19 */
166     "R_PPC_GLOB_DAT",             /*  20 */
167     "R_PPC_JMP_SLOT",             /*  21 */
168     "R_PPC_RELATIVE",             /*  22 */
169     "R_PPC_LOCAL24PC",            /*  23 */
170     "R_PPC_UADDR32",              /*  24 */
171     "R_PPC_UADDR16",              /*  25 */
172     "R_PPC_REL32",                /*  26 */
173     "R_PPC_PLT32",                /*  27 */
174     "R_PPC_PLTREL32",             /*  28 */
175     "R_PPC_PLT16_LO",             /*  29 */
176     "R_PPC_PLT16_HI",             /*  30 */
177     "R_PPC_PLT16_HA",             /*  31 */
178     "R_PPC_SDAREL16",             /*  32 */
179     "R_PPC_SECTOFF",              /*  33 */
180     "R_PPC_SECTOFF_LO",           /*  34 */
181     "R_PPC_SECTOFF_HI",           /*  35 */
182     "R_PPC_SECTOFF_HA",           /*  36 */
183     "R_PPC_37",                   /*  37 */
184     "R_PPC_38",                   /*  38 */
185     "R_PPC_39",                   /*  39 */
186     "R_PPC_40",                   /*  40 */
187     "R_PPC_41",                   /*  41 */
188     "R_PPC_42",                   /*  42 */
189     "R_PPC_43",                   /*  43 */
190     "R_PPC_44",                   /*  44 */
191     "R_PPC_45",                   /*  45 */
192     "R_PPC_46",                   /*  46 */
193     "R_PPC_47",                   /*  47 */
194     "R_PPC_48",                   /*  48 */
195     "R_PPC_49",                   /*  49 */
196     "R_PPC_50",                   /*  50 */
197     "R_PPC_51",                   /*  51 */
198     "R_PPC_52",                   /*  52 */
199     "R_PPC_53",                   /*  53 */
200     "R_PPC_54",                   /*  54 */
201     "R_PPC_55",                   /*  55 */
202     "R_PPC_56",                   /*  56 */
203     "R_PPC_57",                   /*  57 */
204     "R_PPC_58",                   /*  58 */
205     "R_PPC_59",                   /*  59 */
206     "R_PPC_60",                   /*  60 */
207     "R_PPC_61",                   /*  61 */
208     "R_PPC_62",                   /*  62 */
209     "R_PPC_63",                   /*  63 */
210     "R_PPC_64",                   /*  64 */
211     "R_PPC_65",                   /*  65 */
212     "R_PPC_66",                   /*  66 */
213     "R_PPC_TLS",                  /*  67 */
214     "R_PPC_DTPMOD32",             /*  68 */
215     "R_PPC_TPREL16",              /*  69 */
216     "R_PPC_TPREL16_LO",           /*  70 */
217     "R_PPC_TPREL16_HI",           /*  71 */
218     "R_PPC_TPREL16_HA",           /*  72 */
219     "R_PPC_TPREL32",              /*  73 */
220     "R_PPC_DTPREL16",             /*  74 */
221     "R_PPC_DTPREL16_LO",          /*  75 */
222     "R_PPC_DTPREL16_HI",          /*  76 */
223     "R_PPC_DTPREL16_HA",          /*  77 */
224     "R_PPC_DTPREL64",             /*  78 */
225     "R_PPC_GOT_TLSGD16",          /*  79 */
226     "R_PPC_GOT_TLSGD16_LO",       /*  80 */
227     "R_PPC_GOT_TLSGD16_HI",       /*  81 */
228     "R_PPC_GOT_TLSGD16_HA",       /*  82 */
229     "R_PPC_GOT_TLSLD16",          /*  83 */
230     "R_PPC_GOT_TLSLD16_LO",       /*  84 */
231     "R_PPC_GOT_TLSLD16_HI",       /*  85 */
232     "R_PPC_GOT_TLSLD16_HA",       /*  86 */
233     "R_PPC_GOT_TPREL16_DS",       /*  87 */
234     "R_PPC_GOT_TPREL16_LO",       /*  88 */
235     "R_PPC_GOT_TPREL16_HI",       /*  89 */
236     "R_PPC_GOT_TPREL16_HA",       /*  90 */
237     "R_PPC_GOT_DTPREL16",         /*  91 */
238     "R_PPC_GOT_DTPREL16_LO",      /*  92 */
239     "R_PPC_GOT_DTPREL16_HI",      /*  93 */
240     "R_PPC_GOT_DTPREL16_HA",      /*  94 */
241 };
242 #endif /* DWARF_RELOC_PPC_H */
243