Add PIC and TLS support to the ARC target.
[external/binutils.git] / include / elf / arc-reloc.def
1 ARC_RELOC_HOWTO(ARC_NONE, 0, \
2                 2, \
3                 32, \
4                 replace_none, \
5                 bitfield, \
6                 0)
7
8 ARC_RELOC_HOWTO(ARC_8, 1, \
9                 0, \
10                 8, \
11                 replace_bits8, \
12                 bitfield, \
13                 ( S + A ))
14
15 ARC_RELOC_HOWTO(ARC_16, 2, \
16                 1, \
17                 16, \
18                 replace_bits16, \
19                 bitfield, \
20                 ( S + A ))
21
22 ARC_RELOC_HOWTO(ARC_24, 3, \
23                 2, \
24                 24, \
25                 replace_bits24, \
26                 bitfield, \
27                 ( S + A ))
28
29 ARC_RELOC_HOWTO(ARC_32, 4, \
30                 2, \
31                 32, \
32                 replace_word32, \
33                 bitfield, \
34                 (NON_ME ( S + A ) ))
35
36 ARC_RELOC_HOWTO(ARC_N8, 8, \
37                 0, \
38                 8, \
39                 replace_bits8, \
40                 bitfield, \
41                 ( S - A ))
42
43 ARC_RELOC_HOWTO(ARC_N16, 9, \
44                 1, \
45                 16, \
46                 replace_bits16, \
47                 bitfield, \
48                 ( S - A ))
49
50 ARC_RELOC_HOWTO(ARC_N24, 10, \
51                 2, \
52                 24, \
53                 replace_bits24, \
54                 bitfield, \
55                 ( S - A ))
56
57 ARC_RELOC_HOWTO(ARC_N32, 11, \
58                 2, \
59                 32, \
60                 replace_word32, \
61                 bitfield, \
62                 ( S - A ))
63
64 ARC_RELOC_HOWTO(ARC_SDA, 12, \
65                 2, \
66                 9, \
67                 replace_disp9, \
68                 bitfield, \
69                 ( S + A ))
70
71 ARC_RELOC_HOWTO(ARC_SECTOFF, 13, \
72                 2, \
73                 32, \
74                 replace_word32, \
75                 bitfield, \
76                 ( ( S - SECTSTART ) + A ))
77
78 ARC_RELOC_HOWTO(ARC_S21H_PCREL, 14, \
79                 2, \
80                 20, \
81                 replace_disp21h, \
82                 signed, \
83                 ( ( ( S + A ) - P ) >> 1 ))
84
85 ARC_RELOC_HOWTO(ARC_S21W_PCREL, 15, \
86                 2, \
87                 19, \
88                 replace_disp21w, \
89                 signed, \
90                 ( ( ( S + A ) - P ) >> 2 ))
91
92 ARC_RELOC_HOWTO(ARC_S25H_PCREL, 16, \
93                 2, \
94                 24, \
95                 replace_disp25h, \
96                 signed, \
97                 ( ( ( S + A ) - P ) >> 1 ))
98
99 ARC_RELOC_HOWTO(ARC_S25W_PCREL, 17, \
100                 2, \
101                 23, \
102                 replace_disp25w, \
103                 signed, \
104                 ( ( ( S + A ) - P ) >> 2 ))
105
106 ARC_RELOC_HOWTO(ARC_SDA32, 18, \
107                 2, \
108                 32, \
109                 replace_word32, \
110                 signed, \
111                 ( ( S + A ) - _SDA_BASE_ ))
112
113 ARC_RELOC_HOWTO(ARC_SDA_LDST, 19, \
114                 2, \
115                 9, \
116                 replace_disp9ls, \
117                 signed, \
118                 ( ( S + A ) - _SDA_BASE_ ))
119
120 ARC_RELOC_HOWTO(ARC_SDA_LDST1, 20, \
121                 2, \
122                 9, \
123                 replace_disp9ls, \
124                 signed, \
125                 ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ))
126
127 ARC_RELOC_HOWTO(ARC_SDA_LDST2, 21, \
128                 2, \
129                 9, \
130                 replace_disp9ls, \
131                 signed, \
132                 ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ))
133
134 ARC_RELOC_HOWTO(ARC_SDA16_LD, 22, \
135                 1, \
136                 9, \
137                 replace_disp9s, \
138                 signed, \
139                 ( ( S + A ) - _SDA_BASE_ ))
140
141 ARC_RELOC_HOWTO(ARC_SDA16_LD1, 23, \
142                 1, \
143                 9, \
144                 replace_disp9s, \
145                 signed, \
146                 ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ))
147
148 ARC_RELOC_HOWTO(ARC_SDA16_LD2, 24, \
149                 1, \
150                 9, \
151                 replace_disp9s, \
152                 signed, \
153                 ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ))
154
155 ARC_RELOC_HOWTO(ARC_S13_PCREL, 25, \
156                 1, \
157                 11, \
158                 replace_disp13s, \
159                 signed, \
160                 ( ( ( S + A ) - P ) >> 2 ))
161
162 ARC_RELOC_HOWTO(ARC_W, 26, \
163                 2, \
164                 32, \
165                 replace_word32, \
166                 bitfield, \
167                 ( ( S + A ) & ( ~3 ) ))
168
169 ARC_RELOC_HOWTO(ARC_32_ME, 27, \
170                 2, \
171                 32, \
172                 replace_limm, \
173                 signed, \
174                 ( S + A ))
175
176 ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \
177                 2, \
178                 32, \
179                 replace_limms, \
180                 signed, \
181                 ( S + A ))
182
183 ARC_RELOC_HOWTO(ARC_N32_ME, 28, \
184                 2, \
185                 32, \
186                 replace_word32, \
187                 bitfield, \
188                 ( S - A ))
189
190 ARC_RELOC_HOWTO(ARC_SECTOFF_ME, 29, \
191                 2, \
192                 32, \
193                 replace_word32, \
194                 bitfield, \
195                 ( ( S - SECTSTART ) + A ))
196
197 ARC_RELOC_HOWTO(ARC_SDA32_ME, 30, \
198                 2, \
199                 32, \
200                 replace_limm, \
201                 signed, \
202                 ( ( S + A ) - _SDA_BASE_ ))
203
204 ARC_RELOC_HOWTO(ARC_W_ME, 31, \
205                 2, \
206                 32, \
207                 replace_word32, \
208                 bitfield, \
209                 ( S + A ))
210
211 ARC_RELOC_HOWTO(AC_SECTOFF_U8, 35, \
212                 2, \
213                 9, \
214                 replace_disp9ls, \
215                 bitfield, \
216                 ( ( S + A ) - SECTSTART ))
217
218 ARC_RELOC_HOWTO(AC_SECTOFF_U8_1, 36, \
219                 2, \
220                 9, \
221                 replace_disp9ls, \
222                 bitfield, \
223                 ( ( ( S + A ) - SECTSTART ) >> 1 ))
224
225 ARC_RELOC_HOWTO(AC_SECTOFF_U8_2, 37, \
226                 2, \
227                 9, \
228                 replace_disp9ls, \
229                 bitfield, \
230                 ( ( ( S + A ) - SECTSTART ) >> 2 ))
231
232 ARC_RELOC_HOWTO(AC_SECTFOFF_S9, 38, \
233                 2, \
234                 9, \
235                 replace_disp9ls, \
236                 bitfield, \
237                 ( ( S + A ) - SECTSTART ))
238
239 ARC_RELOC_HOWTO(AC_SECTFOFF_S9_1, 39, \
240                 2, \
241                 9, \
242                 replace_disp9ls, \
243                 bitfield, \
244                 ( ( ( S + A ) - SECTSTART ) >> 1 ))
245
246 ARC_RELOC_HOWTO(AC_SECTFOFF_S9_2, 40, \
247                 2, \
248                 9, \
249                 replace_disp9ls, \
250                 bitfield, \
251                 ( ( ( S + A ) - SECTSTART ) >> 2 ))
252
253 ARC_RELOC_HOWTO(ARC_SECTOFF_ME_1, 41, \
254                 2, \
255                 32, \
256                 replace_word32, \
257                 bitfield, \
258                 ( ( ( S - SECTSTART ) + A ) >> 1 ))
259
260 ARC_RELOC_HOWTO(ARC_SECTOFF_ME_2, 42, \
261                 2, \
262                 32, \
263                 replace_word32, \
264                 bitfield, \
265                 ( ( ( S - SECTSTART ) + A ) >> 2 ))
266
267 ARC_RELOC_HOWTO(ARC_SECTOFF_1, 43, \
268                 2, \
269                 32, \
270                 replace_word32, \
271                 bitfield, \
272                 ( ( ( S - SECTSTART ) + A ) >> 1 ))
273
274 ARC_RELOC_HOWTO(ARC_SECTOFF_2, 44, \
275                 2, \
276                 32, \
277                 replace_word32, \
278                 bitfield, \
279                 ( ( ( S - SECTSTART ) + A ) >> 2 ))
280
281 ARC_RELOC_HOWTO(ARC_SDA16_ST2, 48, \
282                 1, \
283                 9, \
284                 replace_disp9s1, \
285                 signed, \
286                 ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ))
287
288 ARC_RELOC_HOWTO(ARC_32_PCREL, 49, \
289                 2, \
290                 32, \
291                 replace_word32, \
292                 signed, \
293                 ( ( S + A ) - PDATA ))
294
295 ARC_RELOC_HOWTO(ARC_PC32, 50, \
296                 2, \
297                 32, \
298                 replace_word32, \
299                 signed, \
300                 ( ( S + A ) - P ))
301
302 ARC_RELOC_HOWTO(ARC_GOT32, 59, \
303                 2, \
304                 32, \
305                 replace_word32, \
306                 dont, \
307                 ( G + A ))
308
309 ARC_RELOC_HOWTO(ARC_GOTPC32, 51, \
310                 2, \
311                 32, \
312                 replace_word32, \
313                 signed, \
314                 ( ( ( GOT + G ) + A ) - P ))
315
316 ARC_RELOC_HOWTO(ARC_PLT32, 52, \
317                 2, \
318                 32, \
319                 replace_word32, \
320                 signed, \
321                 ( ( L + A ) - P ))
322
323 ARC_RELOC_HOWTO(ARC_COPY, 53, \
324                 2, \
325                 0, \
326                 replace_none, \
327                 signed, \
328                 none)
329
330 ARC_RELOC_HOWTO(ARC_GLOB_DAT, 54, \
331                 2, \
332                 32, \
333                 replace_word32, \
334                 signed, \
335                 S)
336
337 ARC_RELOC_HOWTO(ARC_JMP_SLOT, 55, \
338                 2, \
339                 32, \
340                 replace_word32, \
341                 signed, \
342                 S)
343
344 ARC_RELOC_HOWTO(ARC_RELATIVE, 56, \
345                 2, \
346                 32, \
347                 replace_word32, \
348                 signed, \
349                 ( B + A ))
350
351 ARC_RELOC_HOWTO(ARC_GOTOFF, 57, \
352                 2, \
353                 32, \
354                 replace_word32, \
355                 signed, \
356                 ( ( S + A ) - GOT ))
357
358 ARC_RELOC_HOWTO(ARC_GOTPC, 58, \
359                 2, \
360                 32, \
361                 replace_word32, \
362                 signed, \
363                 ( GOT_BEGIN - P ))
364
365 ARC_RELOC_HOWTO(ARC_S21W_PCREL_PLT, 60, \
366                 2, \
367                 19, \
368                 replace_disp21w, \
369                 signed, \
370                 ( ( ( L + A ) - P ) >> 2 ))
371
372 ARC_RELOC_HOWTO(ARC_S25H_PCREL_PLT, 61, \
373                 2, \
374                 24, \
375                 replace_disp25h, \
376                 signed, \
377                 ( ( ( L + A ) - P ) >> 1 ))
378
379 ARC_RELOC_HOWTO(ARC_TLS_DTPMOD, 66, \
380                 2, \
381                 32, \
382                 replace_word32, \
383                 dont, \
384                 0)
385
386 ARC_RELOC_HOWTO(ARC_TLS_TPOFF, 68, \
387                 2, \
388                 32, \
389                 replace_word32, \
390                 dont, \
391                 0)
392
393 ARC_RELOC_HOWTO(ARC_TLS_GD_GOT, 69, \
394                 2, \
395                 32, \
396                 replace_word32, \
397                 dont, \
398                 ( G + GOT - P))
399
400 ARC_RELOC_HOWTO(ARC_TLS_GD_LD, 70, \
401                 2, \
402                 0, \
403                 replace_none, \
404                 dont, \
405                 0)
406
407 ARC_RELOC_HOWTO(ARC_TLS_GD_CALL, 71, \
408                 2, \
409                 32, \
410                 replace_word32, \
411                 dont, \
412                 0)
413
414 ARC_RELOC_HOWTO(ARC_TLS_IE_GOT, 72, \
415                 2, \
416                 32, \
417                 replace_word32, \
418                 dont, \
419                 ( G + GOT - P))
420
421 ARC_RELOC_HOWTO(ARC_TLS_DTPOFF, 67, \
422                 2, \
423                 32, \
424                 replace_word32, \
425                 dont, \
426                 ( S - TLS_REL ))
427
428 ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \
429                 2, \
430                 32, \
431                 replace_word32, \
432                 dont, \
433                 ( S - TLS_REL ))
434
435 ARC_RELOC_HOWTO(ARC_TLS_LE_S9, 74, \
436                 2, \
437                 32, \
438                 replace_word32, \
439                 dont, \
440                 ( ( S + TCB_SIZE ) - TLS_REL ))
441
442 ARC_RELOC_HOWTO(ARC_TLS_LE_32, 75, \
443                 2, \
444                 32, \
445                 replace_word32, \
446                 dont, \
447                 ( ( S + A + TCB_SIZE ) - TLS_REL ))
448
449 ARC_RELOC_HOWTO(ARC_S25W_PCREL_PLT, 76, \
450                 2, \
451                 23, \
452                 replace_disp25w, \
453                 signed, \
454                 ( ( ( L + A ) - P ) >> 2 ))
455
456 ARC_RELOC_HOWTO(ARC_S21H_PCREL_PLT, 77, \
457                 2, \
458                 20, \
459                 replace_disp21h, \
460                 signed, \
461                 ( ( ( L + A ) - P ) >> 1 ))
462