arm: PR gas/25472 Enable DSP instructions with +mve
[binutils-gdb.git] / bfd / elf32-sh-relocs.h
blob5dd0b79b65f3939cc489e118bb0583a825b41c0c
1 /* Copyright (C) 2006-2020 Free Software Foundation, Inc.
3 This file is part of BFD, the Binary File Descriptor library.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18 MA 02110-1301, USA. */
20 /* No relocation. */
21 HOWTO (R_SH_NONE, /* type */
22 0, /* rightshift */
23 3, /* size (0 = byte, 1 = short, 2 = long) */
24 0, /* bitsize */
25 FALSE, /* pc_relative */
26 0, /* bitpos */
27 complain_overflow_dont, /* complain_on_overflow */
28 sh_elf_ignore_reloc, /* special_function */
29 "R_SH_NONE", /* name */
30 FALSE, /* partial_inplace */
31 0, /* src_mask */
32 0, /* dst_mask */
33 FALSE), /* pcrel_offset */
35 /* 32 bit absolute relocation. Setting partial_inplace to TRUE and
36 src_mask to a non-zero value is similar to the COFF toolchain. */
37 HOWTO (R_SH_DIR32, /* type */
38 0, /* rightshift */
39 2, /* size (0 = byte, 1 = short, 2 = long) */
40 32, /* bitsize */
41 FALSE, /* pc_relative */
42 0, /* bitpos */
43 complain_overflow_bitfield, /* complain_on_overflow */
44 SH_ELF_RELOC, /* special_function */
45 "R_SH_DIR32", /* name */
46 SH_PARTIAL32, /* partial_inplace */
47 SH_SRC_MASK32, /* src_mask */
48 0xffffffff, /* dst_mask */
49 FALSE), /* pcrel_offset */
51 /* 32 bit PC relative relocation. */
52 HOWTO (R_SH_REL32, /* type */
53 0, /* rightshift */
54 2, /* size (0 = byte, 1 = short, 2 = long) */
55 32, /* bitsize */
56 TRUE, /* pc_relative */
57 0, /* bitpos */
58 complain_overflow_signed, /* complain_on_overflow */
59 sh_elf_ignore_reloc, /* special_function */
60 "R_SH_REL32", /* name */
61 SH_PARTIAL32, /* partial_inplace */
62 SH_SRC_MASK32, /* src_mask */
63 0xffffffff, /* dst_mask */
64 TRUE), /* pcrel_offset */
66 /* 8 bit PC relative branch divided by 2. */
67 HOWTO (R_SH_DIR8WPN, /* type */
68 1, /* rightshift */
69 1, /* size (0 = byte, 1 = short, 2 = long) */
70 8, /* bitsize */
71 TRUE, /* pc_relative */
72 0, /* bitpos */
73 complain_overflow_signed, /* complain_on_overflow */
74 sh_elf_ignore_reloc, /* special_function */
75 "R_SH_DIR8WPN", /* name */
76 TRUE, /* partial_inplace */
77 0xff, /* src_mask */
78 0xff, /* dst_mask */
79 TRUE), /* pcrel_offset */
81 /* 12 bit PC relative branch divided by 2. */
82 /* This cannot be partial_inplace because relaxation can't know the
83 eventual value of a symbol. */
84 HOWTO (R_SH_IND12W, /* type */
85 1, /* rightshift */
86 1, /* size (0 = byte, 1 = short, 2 = long) */
87 12, /* bitsize */
88 TRUE, /* pc_relative */
89 0, /* bitpos */
90 complain_overflow_signed, /* complain_on_overflow */
91 NULL, /* special_function */
92 "R_SH_IND12W", /* name */
93 FALSE, /* partial_inplace */
94 0x0, /* src_mask */
95 0xfff, /* dst_mask */
96 TRUE), /* pcrel_offset */
98 /* 8 bit unsigned PC relative divided by 4. */
99 HOWTO (R_SH_DIR8WPL, /* type */
100 2, /* rightshift */
101 1, /* size (0 = byte, 1 = short, 2 = long) */
102 8, /* bitsize */
103 TRUE, /* pc_relative */
104 0, /* bitpos */
105 complain_overflow_unsigned, /* complain_on_overflow */
106 sh_elf_ignore_reloc, /* special_function */
107 "R_SH_DIR8WPL", /* name */
108 TRUE, /* partial_inplace */
109 0xff, /* src_mask */
110 0xff, /* dst_mask */
111 TRUE), /* pcrel_offset */
113 /* 8 bit unsigned PC relative divided by 2. */
114 HOWTO (R_SH_DIR8WPZ, /* type */
115 1, /* rightshift */
116 1, /* size (0 = byte, 1 = short, 2 = long) */
117 8, /* bitsize */
118 TRUE, /* pc_relative */
119 0, /* bitpos */
120 complain_overflow_unsigned, /* complain_on_overflow */
121 sh_elf_ignore_reloc, /* special_function */
122 "R_SH_DIR8WPZ", /* name */
123 TRUE, /* partial_inplace */
124 0xff, /* src_mask */
125 0xff, /* dst_mask */
126 TRUE), /* pcrel_offset */
128 /* 8 bit GBR relative. FIXME: This only makes sense if we have some
129 special symbol for the GBR relative area, and that is not
130 implemented. */
131 HOWTO (R_SH_DIR8BP, /* type */
132 0, /* rightshift */
133 1, /* size (0 = byte, 1 = short, 2 = long) */
134 8, /* bitsize */
135 FALSE, /* pc_relative */
136 0, /* bitpos */
137 complain_overflow_unsigned, /* complain_on_overflow */
138 sh_elf_ignore_reloc, /* special_function */
139 "R_SH_DIR8BP", /* name */
140 FALSE, /* partial_inplace */
141 0, /* src_mask */
142 0xff, /* dst_mask */
143 TRUE), /* pcrel_offset */
145 /* 8 bit GBR relative divided by 2. FIXME: This only makes sense if
146 we have some special symbol for the GBR relative area, and that
147 is not implemented. */
148 HOWTO (R_SH_DIR8W, /* type */
149 1, /* rightshift */
150 1, /* size (0 = byte, 1 = short, 2 = long) */
151 8, /* bitsize */
152 FALSE, /* pc_relative */
153 0, /* bitpos */
154 complain_overflow_unsigned, /* complain_on_overflow */
155 sh_elf_ignore_reloc, /* special_function */
156 "R_SH_DIR8W", /* name */
157 FALSE, /* partial_inplace */
158 0, /* src_mask */
159 0xff, /* dst_mask */
160 TRUE), /* pcrel_offset */
162 /* 8 bit GBR relative divided by 4. FIXME: This only makes sense if
163 we have some special symbol for the GBR relative area, and that
164 is not implemented. */
165 HOWTO (R_SH_DIR8L, /* type */
166 2, /* rightshift */
167 1, /* size (0 = byte, 1 = short, 2 = long) */
168 8, /* bitsize */
169 FALSE, /* pc_relative */
170 0, /* bitpos */
171 complain_overflow_unsigned, /* complain_on_overflow */
172 sh_elf_ignore_reloc, /* special_function */
173 "R_SH_DIR8L", /* name */
174 FALSE, /* partial_inplace */
175 0, /* src_mask */
176 0xff, /* dst_mask */
177 TRUE), /* pcrel_offset */
179 /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
180 HOWTO (R_SH_LOOP_START, /* type */
181 1, /* rightshift */
182 1, /* size (0 = byte, 1 = short, 2 = long) */
183 8, /* bitsize */
184 FALSE, /* pc_relative */
185 0, /* bitpos */
186 complain_overflow_signed, /* complain_on_overflow */
187 sh_elf_ignore_reloc, /* special_function */
188 "R_SH_LOOP_START", /* name */
189 TRUE, /* partial_inplace */
190 0xff, /* src_mask */
191 0xff, /* dst_mask */
192 TRUE), /* pcrel_offset */
194 /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
195 HOWTO (R_SH_LOOP_END, /* type */
196 1, /* rightshift */
197 1, /* size (0 = byte, 1 = short, 2 = long) */
198 8, /* bitsize */
199 FALSE, /* pc_relative */
200 0, /* bitpos */
201 complain_overflow_signed, /* complain_on_overflow */
202 sh_elf_ignore_reloc, /* special_function */
203 "R_SH_LOOP_END", /* name */
204 TRUE, /* partial_inplace */
205 0xff, /* src_mask */
206 0xff, /* dst_mask */
207 TRUE), /* pcrel_offset */
209 EMPTY_HOWTO (12),
210 EMPTY_HOWTO (13),
211 EMPTY_HOWTO (14),
212 EMPTY_HOWTO (15),
213 EMPTY_HOWTO (16),
214 EMPTY_HOWTO (17),
215 EMPTY_HOWTO (18),
216 EMPTY_HOWTO (19),
217 EMPTY_HOWTO (20),
218 EMPTY_HOWTO (21),
220 /* The remaining relocs are a GNU extension used for relaxing. The
221 final pass of the linker never needs to do anything with any of
222 these relocs. Any required operations are handled by the
223 relaxation code. */
225 /* GNU extension to record C++ vtable hierarchy */
226 HOWTO (R_SH_GNU_VTINHERIT, /* type */
227 0, /* rightshift */
228 2, /* size (0 = byte, 1 = short, 2 = long) */
229 0, /* bitsize */
230 FALSE, /* pc_relative */
231 0, /* bitpos */
232 complain_overflow_dont, /* complain_on_overflow */
233 NULL, /* special_function */
234 "R_SH_GNU_VTINHERIT", /* name */
235 FALSE, /* partial_inplace */
236 0, /* src_mask */
237 0, /* dst_mask */
238 FALSE), /* pcrel_offset */
240 /* GNU extension to record C++ vtable member usage */
241 HOWTO (R_SH_GNU_VTENTRY, /* type */
242 0, /* rightshift */
243 2, /* size (0 = byte, 1 = short, 2 = long) */
244 0, /* bitsize */
245 FALSE, /* pc_relative */
246 0, /* bitpos */
247 complain_overflow_dont, /* complain_on_overflow */
248 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
249 "R_SH_GNU_VTENTRY", /* name */
250 FALSE, /* partial_inplace */
251 0, /* src_mask */
252 0, /* dst_mask */
253 FALSE), /* pcrel_offset */
255 /* An 8 bit switch table entry. This is generated for an expression
256 such as ``.word L1 - L2''. The offset holds the difference
257 between the reloc address and L2. */
258 HOWTO (R_SH_SWITCH8, /* type */
259 0, /* rightshift */
260 0, /* size (0 = byte, 1 = short, 2 = long) */
261 8, /* bitsize */
262 FALSE, /* pc_relative */
263 0, /* bitpos */
264 complain_overflow_unsigned, /* complain_on_overflow */
265 sh_elf_ignore_reloc, /* special_function */
266 "R_SH_SWITCH8", /* name */
267 FALSE, /* partial_inplace */
268 0, /* src_mask */
269 0, /* dst_mask */
270 TRUE), /* pcrel_offset */
272 /* A 16 bit switch table entry. This is generated for an expression
273 such as ``.word L1 - L2''. The offset holds the difference
274 between the reloc address and L2. */
275 HOWTO (R_SH_SWITCH16, /* type */
276 0, /* rightshift */
277 1, /* size (0 = byte, 1 = short, 2 = long) */
278 16, /* bitsize */
279 FALSE, /* pc_relative */
280 0, /* bitpos */
281 complain_overflow_unsigned, /* complain_on_overflow */
282 sh_elf_ignore_reloc, /* special_function */
283 "R_SH_SWITCH16", /* name */
284 FALSE, /* partial_inplace */
285 0, /* src_mask */
286 0, /* dst_mask */
287 TRUE), /* pcrel_offset */
289 /* A 32 bit switch table entry. This is generated for an expression
290 such as ``.long L1 - L2''. The offset holds the difference
291 between the reloc address and L2. */
292 HOWTO (R_SH_SWITCH32, /* type */
293 0, /* rightshift */
294 2, /* size (0 = byte, 1 = short, 2 = long) */
295 32, /* bitsize */
296 FALSE, /* pc_relative */
297 0, /* bitpos */
298 complain_overflow_unsigned, /* complain_on_overflow */
299 sh_elf_ignore_reloc, /* special_function */
300 "R_SH_SWITCH32", /* name */
301 FALSE, /* partial_inplace */
302 0, /* src_mask */
303 0, /* dst_mask */
304 TRUE), /* pcrel_offset */
306 /* Indicates a .uses pseudo-op. The compiler will generate .uses
307 pseudo-ops when it finds a function call which can be relaxed.
308 The offset field holds the PC relative offset to the instruction
309 which loads the register used in the function call. */
310 HOWTO (R_SH_USES, /* type */
311 0, /* rightshift */
312 1, /* size (0 = byte, 1 = short, 2 = long) */
313 0, /* bitsize */
314 FALSE, /* pc_relative */
315 0, /* bitpos */
316 complain_overflow_unsigned, /* complain_on_overflow */
317 sh_elf_ignore_reloc, /* special_function */
318 "R_SH_USES", /* name */
319 FALSE, /* partial_inplace */
320 0, /* src_mask */
321 0, /* dst_mask */
322 TRUE), /* pcrel_offset */
324 /* The assembler will generate this reloc for addresses referred to
325 by the register loads associated with USES relocs. The offset
326 field holds the number of times the address is referenced in the
327 object file. */
328 HOWTO (R_SH_COUNT, /* type */
329 0, /* rightshift */
330 1, /* size (0 = byte, 1 = short, 2 = long) */
331 0, /* bitsize */
332 FALSE, /* pc_relative */
333 0, /* bitpos */
334 complain_overflow_unsigned, /* complain_on_overflow */
335 sh_elf_ignore_reloc, /* special_function */
336 "R_SH_COUNT", /* name */
337 FALSE, /* partial_inplace */
338 0, /* src_mask */
339 0, /* dst_mask */
340 TRUE), /* pcrel_offset */
342 /* Indicates an alignment statement. The offset field is the power
343 of 2 to which subsequent portions of the object file must be
344 aligned. */
345 HOWTO (R_SH_ALIGN, /* type */
346 0, /* rightshift */
347 1, /* size (0 = byte, 1 = short, 2 = long) */
348 0, /* bitsize */
349 FALSE, /* pc_relative */
350 0, /* bitpos */
351 complain_overflow_unsigned, /* complain_on_overflow */
352 sh_elf_ignore_reloc, /* special_function */
353 "R_SH_ALIGN", /* name */
354 FALSE, /* partial_inplace */
355 0, /* src_mask */
356 0, /* dst_mask */
357 TRUE), /* pcrel_offset */
359 /* The assembler will generate this reloc before a block of
360 instructions. A section should be processed as assuming it
361 contains data, unless this reloc is seen. */
362 HOWTO (R_SH_CODE, /* type */
363 0, /* rightshift */
364 1, /* size (0 = byte, 1 = short, 2 = long) */
365 0, /* bitsize */
366 FALSE, /* pc_relative */
367 0, /* bitpos */
368 complain_overflow_unsigned, /* complain_on_overflow */
369 sh_elf_ignore_reloc, /* special_function */
370 "R_SH_CODE", /* name */
371 FALSE, /* partial_inplace */
372 0, /* src_mask */
373 0, /* dst_mask */
374 TRUE), /* pcrel_offset */
376 /* The assembler will generate this reloc after a block of
377 instructions when it sees data that is not instructions. */
378 HOWTO (R_SH_DATA, /* type */
379 0, /* rightshift */
380 1, /* size (0 = byte, 1 = short, 2 = long) */
381 0, /* bitsize */
382 FALSE, /* pc_relative */
383 0, /* bitpos */
384 complain_overflow_unsigned, /* complain_on_overflow */
385 sh_elf_ignore_reloc, /* special_function */
386 "R_SH_DATA", /* name */
387 FALSE, /* partial_inplace */
388 0, /* src_mask */
389 0, /* dst_mask */
390 TRUE), /* pcrel_offset */
392 /* The assembler generates this reloc for each label within a block
393 of instructions. This permits the linker to avoid swapping
394 instructions which are the targets of branches. */
395 HOWTO (R_SH_LABEL, /* type */
396 0, /* rightshift */
397 1, /* size (0 = byte, 1 = short, 2 = long) */
398 0, /* bitsize */
399 FALSE, /* pc_relative */
400 0, /* bitpos */
401 complain_overflow_unsigned, /* complain_on_overflow */
402 sh_elf_ignore_reloc, /* special_function */
403 "R_SH_LABEL", /* name */
404 FALSE, /* partial_inplace */
405 0, /* src_mask */
406 0, /* dst_mask */
407 TRUE), /* pcrel_offset */
409 /* The next 12 are only supported via linking in SHC-generated objects. */
410 HOWTO (R_SH_DIR16, /* type */
411 0, /* rightshift */
412 1, /* size (0 = byte, 1 = short, 2 = long) */
413 16, /* bitsize */
414 FALSE, /* pc_relative */
415 0, /* bitpos */
416 complain_overflow_dont, /* complain_on_overflow */
417 bfd_elf_generic_reloc, /* special_function */
418 "R_SH_DIR16", /* name */
419 FALSE, /* partial_inplace */
420 0, /* src_mask */
421 0xffff, /* dst_mask */
422 FALSE), /* pcrel_offset */
424 HOWTO (R_SH_DIR8, /* type */
425 0, /* rightshift */
426 0, /* size (0 = byte, 1 = short, 2 = long) */
427 8, /* bitsize */
428 FALSE, /* pc_relative */
429 0, /* bitpos */
430 complain_overflow_dont, /* complain_on_overflow */
431 bfd_elf_generic_reloc, /* special_function */
432 "R_SH_DIR8", /* name */
433 FALSE, /* partial_inplace */
434 0, /* src_mask */
435 0xff, /* dst_mask */
436 FALSE), /* pcrel_offset */
438 HOWTO (R_SH_DIR8UL, /* type */
439 2, /* rightshift */
440 0, /* size (0 = byte, 1 = short, 2 = long) */
441 8, /* bitsize */
442 FALSE, /* pc_relative */
443 0, /* bitpos */
444 complain_overflow_unsigned, /* complain_on_overflow */
445 bfd_elf_generic_reloc, /* special_function */
446 "R_SH_DIR8UL", /* name */
447 FALSE, /* partial_inplace */
448 0, /* src_mask */
449 0xff, /* dst_mask */
450 FALSE), /* pcrel_offset */
452 HOWTO (R_SH_DIR8UW, /* type */
453 1, /* rightshift */
454 0, /* size (0 = byte, 1 = short, 2 = long) */
455 8, /* bitsize */
456 FALSE, /* pc_relative */
457 0, /* bitpos */
458 complain_overflow_unsigned, /* complain_on_overflow */
459 bfd_elf_generic_reloc, /* special_function */
460 "R_SH_DIR8UW", /* name */
461 FALSE, /* partial_inplace */
462 0, /* src_mask */
463 0xff, /* dst_mask */
464 FALSE), /* pcrel_offset */
466 HOWTO (R_SH_DIR8U, /* type */
467 0, /* rightshift */
468 0, /* size (0 = byte, 1 = short, 2 = long) */
469 8, /* bitsize */
470 FALSE, /* pc_relative */
471 0, /* bitpos */
472 complain_overflow_unsigned, /* complain_on_overflow */
473 bfd_elf_generic_reloc, /* special_function */
474 "R_SH_DIR8U", /* name */
475 FALSE, /* partial_inplace */
476 0, /* src_mask */
477 0xff, /* dst_mask */
478 FALSE), /* pcrel_offset */
480 HOWTO (R_SH_DIR8SW, /* type */
481 1, /* rightshift */
482 0, /* size (0 = byte, 1 = short, 2 = long) */
483 8, /* bitsize */
484 FALSE, /* pc_relative */
485 0, /* bitpos */
486 complain_overflow_signed, /* complain_on_overflow */
487 bfd_elf_generic_reloc, /* special_function */
488 "R_SH_DIR8SW", /* name */
489 FALSE, /* partial_inplace */
490 0, /* src_mask */
491 0xff, /* dst_mask */
492 FALSE), /* pcrel_offset */
494 HOWTO (R_SH_DIR8S, /* type */
495 0, /* rightshift */
496 0, /* size (0 = byte, 1 = short, 2 = long) */
497 8, /* bitsize */
498 FALSE, /* pc_relative */
499 0, /* bitpos */
500 complain_overflow_signed, /* complain_on_overflow */
501 bfd_elf_generic_reloc, /* special_function */
502 "R_SH_DIR8S", /* name */
503 FALSE, /* partial_inplace */
504 0, /* src_mask */
505 0xff, /* dst_mask */
506 FALSE), /* pcrel_offset */
508 HOWTO (R_SH_DIR4UL, /* type */
509 2, /* rightshift */
510 0, /* size (0 = byte, 1 = short, 2 = long) */
511 4, /* bitsize */
512 FALSE, /* pc_relative */
513 0, /* bitpos */
514 complain_overflow_unsigned, /* complain_on_overflow */
515 bfd_elf_generic_reloc, /* special_function */
516 "R_SH_DIR4UL", /* name */
517 FALSE, /* partial_inplace */
518 0, /* src_mask */
519 0x0f, /* dst_mask */
520 FALSE), /* pcrel_offset */
522 HOWTO (R_SH_DIR4UW, /* type */
523 1, /* rightshift */
524 0, /* size (0 = byte, 1 = short, 2 = long) */
525 4, /* bitsize */
526 FALSE, /* pc_relative */
527 0, /* bitpos */
528 complain_overflow_unsigned, /* complain_on_overflow */
529 bfd_elf_generic_reloc, /* special_function */
530 "R_SH_DIR4UW", /* name */
531 FALSE, /* partial_inplace */
532 0, /* src_mask */
533 0x0f, /* dst_mask */
534 FALSE), /* pcrel_offset */
536 HOWTO (R_SH_DIR4U, /* type */
537 0, /* rightshift */
538 0, /* size (0 = byte, 1 = short, 2 = long) */
539 4, /* bitsize */
540 FALSE, /* pc_relative */
541 0, /* bitpos */
542 complain_overflow_unsigned, /* complain_on_overflow */
543 bfd_elf_generic_reloc, /* special_function */
544 "R_SH_DIR4U", /* name */
545 FALSE, /* partial_inplace */
546 0, /* src_mask */
547 0x0f, /* dst_mask */
548 FALSE), /* pcrel_offset */
550 HOWTO (R_SH_PSHA, /* type */
551 0, /* rightshift */
552 1, /* size (0 = byte, 1 = short, 2 = long) */
553 7, /* bitsize */
554 FALSE, /* pc_relative */
555 4, /* bitpos */
556 complain_overflow_signed, /* complain_on_overflow */
557 bfd_elf_generic_reloc, /* special_function */
558 "R_SH_PSHA", /* name */
559 FALSE, /* partial_inplace */
560 0, /* src_mask */
561 0x0f, /* dst_mask */
562 FALSE), /* pcrel_offset */
564 HOWTO (R_SH_PSHL, /* type */
565 0, /* rightshift */
566 1, /* size (0 = byte, 1 = short, 2 = long) */
567 7, /* bitsize */
568 FALSE, /* pc_relative */
569 4, /* bitpos */
570 complain_overflow_signed, /* complain_on_overflow */
571 bfd_elf_generic_reloc, /* special_function */
572 "R_SH_PSHL", /* name */
573 FALSE, /* partial_inplace */
574 0, /* src_mask */
575 0x0f, /* dst_mask */
576 FALSE), /* pcrel_offset */
578 EMPTY_HOWTO (45),
579 EMPTY_HOWTO (46),
580 EMPTY_HOWTO (47),
581 EMPTY_HOWTO (48),
582 EMPTY_HOWTO (49),
583 EMPTY_HOWTO (50),
584 EMPTY_HOWTO (51),
586 EMPTY_HOWTO (52),
588 HOWTO (R_SH_DIR16S, /* type */
589 0, /* rightshift */
590 1, /* size (0 = byte, 1 = short, 2 = long) */
591 16, /* bitsize */
592 FALSE, /* pc_relative */
593 0, /* bitpos */
594 complain_overflow_signed, /* complain_on_overflow */
595 bfd_elf_generic_reloc, /* special_function */
596 "R_SH_DIR16S", /* name */
597 FALSE, /* partial_inplace */
598 0, /* src_mask */
599 0xffff, /* dst_mask */
600 FALSE), /* pcrel_offset */
602 EMPTY_HOWTO (54),
603 EMPTY_HOWTO (55),
604 EMPTY_HOWTO (56),
605 EMPTY_HOWTO (57),
606 EMPTY_HOWTO (58),
607 EMPTY_HOWTO (59),
608 EMPTY_HOWTO (60),
609 EMPTY_HOWTO (61),
610 EMPTY_HOWTO (62),
611 EMPTY_HOWTO (63),
612 EMPTY_HOWTO (64),
613 EMPTY_HOWTO (65),
614 EMPTY_HOWTO (66),
615 EMPTY_HOWTO (67),
616 EMPTY_HOWTO (68),
617 EMPTY_HOWTO (69),
618 EMPTY_HOWTO (70),
619 EMPTY_HOWTO (71),
620 EMPTY_HOWTO (72),
621 EMPTY_HOWTO (73),
622 EMPTY_HOWTO (74),
623 EMPTY_HOWTO (75),
624 EMPTY_HOWTO (76),
625 EMPTY_HOWTO (77),
626 EMPTY_HOWTO (78),
627 EMPTY_HOWTO (79),
628 EMPTY_HOWTO (80),
629 EMPTY_HOWTO (81),
630 EMPTY_HOWTO (82),
631 EMPTY_HOWTO (83),
632 EMPTY_HOWTO (84),
633 EMPTY_HOWTO (85),
634 EMPTY_HOWTO (86),
635 EMPTY_HOWTO (87),
636 EMPTY_HOWTO (88),
637 EMPTY_HOWTO (89),
638 EMPTY_HOWTO (90),
639 EMPTY_HOWTO (91),
640 EMPTY_HOWTO (92),
641 EMPTY_HOWTO (93),
642 EMPTY_HOWTO (94),
643 EMPTY_HOWTO (95),
644 EMPTY_HOWTO (96),
645 EMPTY_HOWTO (97),
646 EMPTY_HOWTO (98),
647 EMPTY_HOWTO (99),
648 EMPTY_HOWTO (100),
649 EMPTY_HOWTO (101),
650 EMPTY_HOWTO (102),
651 EMPTY_HOWTO (103),
652 EMPTY_HOWTO (104),
653 EMPTY_HOWTO (105),
654 EMPTY_HOWTO (106),
655 EMPTY_HOWTO (107),
656 EMPTY_HOWTO (108),
657 EMPTY_HOWTO (109),
658 EMPTY_HOWTO (110),
659 EMPTY_HOWTO (111),
660 EMPTY_HOWTO (112),
661 EMPTY_HOWTO (113),
662 EMPTY_HOWTO (114),
663 EMPTY_HOWTO (115),
664 EMPTY_HOWTO (116),
665 EMPTY_HOWTO (117),
666 EMPTY_HOWTO (118),
667 EMPTY_HOWTO (119),
668 EMPTY_HOWTO (120),
669 EMPTY_HOWTO (121),
670 EMPTY_HOWTO (122),
671 EMPTY_HOWTO (123),
672 EMPTY_HOWTO (124),
673 EMPTY_HOWTO (125),
674 EMPTY_HOWTO (126),
675 EMPTY_HOWTO (127),
676 EMPTY_HOWTO (128),
677 EMPTY_HOWTO (129),
678 EMPTY_HOWTO (130),
679 EMPTY_HOWTO (131),
680 EMPTY_HOWTO (132),
681 EMPTY_HOWTO (133),
682 EMPTY_HOWTO (134),
683 EMPTY_HOWTO (135),
684 EMPTY_HOWTO (136),
685 EMPTY_HOWTO (137),
686 EMPTY_HOWTO (138),
687 EMPTY_HOWTO (139),
688 EMPTY_HOWTO (140),
689 EMPTY_HOWTO (141),
690 EMPTY_HOWTO (142),
691 EMPTY_HOWTO (143),
693 HOWTO (R_SH_TLS_GD_32, /* type */
694 0, /* rightshift */
695 2, /* size (0 = byte, 1 = short, 2 = long) */
696 32, /* bitsize */
697 FALSE, /* pc_relative */
698 0, /* bitpos */
699 complain_overflow_bitfield, /* complain_on_overflow */
700 bfd_elf_generic_reloc, /* */
701 "R_SH_TLS_GD_32", /* name */
702 SH_PARTIAL32, /* partial_inplace */
703 SH_SRC_MASK32, /* src_mask */
704 0xffffffff, /* dst_mask */
705 FALSE), /* pcrel_offset */
707 HOWTO (R_SH_TLS_LD_32, /* type */
708 0, /* rightshift */
709 2, /* size (0 = byte, 1 = short, 2 = long) */
710 32, /* bitsize */
711 FALSE, /* pc_relative */
712 0, /* bitpos */
713 complain_overflow_bitfield, /* complain_on_overflow */
714 bfd_elf_generic_reloc, /* */
715 "R_SH_TLS_LD_32", /* name */
716 SH_PARTIAL32, /* partial_inplace */
717 SH_SRC_MASK32, /* src_mask */
718 0xffffffff, /* dst_mask */
719 FALSE), /* pcrel_offset */
721 HOWTO (R_SH_TLS_LDO_32, /* type */
722 0, /* rightshift */
723 2, /* size (0 = byte, 1 = short, 2 = long) */
724 32, /* bitsize */
725 FALSE, /* pc_relative */
726 0, /* bitpos */
727 complain_overflow_bitfield, /* complain_on_overflow */
728 bfd_elf_generic_reloc, /* */
729 "R_SH_TLS_LDO_32", /* name */
730 SH_PARTIAL32, /* partial_inplace */
731 SH_SRC_MASK32, /* src_mask */
732 0xffffffff, /* dst_mask */
733 FALSE), /* pcrel_offset */
735 HOWTO (R_SH_TLS_IE_32, /* type */
736 0, /* rightshift */
737 2, /* size (0 = byte, 1 = short, 2 = long) */
738 32, /* bitsize */
739 FALSE, /* pc_relative */
740 0, /* bitpos */
741 complain_overflow_bitfield, /* complain_on_overflow */
742 bfd_elf_generic_reloc, /* */
743 "R_SH_TLS_IE_32", /* name */
744 SH_PARTIAL32, /* partial_inplace */
745 SH_SRC_MASK32, /* src_mask */
746 0xffffffff, /* dst_mask */
747 FALSE), /* pcrel_offset */
749 HOWTO (R_SH_TLS_LE_32, /* type */
750 0, /* rightshift */
751 2, /* size (0 = byte, 1 = short, 2 = long) */
752 32, /* bitsize */
753 FALSE, /* pc_relative */
754 0, /* bitpos */
755 complain_overflow_bitfield, /* complain_on_overflow */
756 bfd_elf_generic_reloc, /* */
757 "R_SH_TLS_LE_32", /* name */
758 SH_PARTIAL32, /* partial_inplace */
759 SH_SRC_MASK32, /* src_mask */
760 0xffffffff, /* dst_mask */
761 FALSE), /* pcrel_offset */
763 HOWTO (R_SH_TLS_DTPMOD32, /* type */
764 0, /* rightshift */
765 2, /* size (0 = byte, 1 = short, 2 = long) */
766 32, /* bitsize */
767 FALSE, /* pc_relative */
768 0, /* bitpos */
769 complain_overflow_bitfield, /* complain_on_overflow */
770 bfd_elf_generic_reloc, /* */
771 "R_SH_TLS_DTPMOD32", /* name */
772 SH_PARTIAL32, /* partial_inplace */
773 SH_SRC_MASK32, /* src_mask */
774 0xffffffff, /* dst_mask */
775 FALSE), /* pcrel_offset */
777 HOWTO (R_SH_TLS_DTPOFF32, /* type */
778 0, /* rightshift */
779 2, /* size (0 = byte, 1 = short, 2 = long) */
780 32, /* bitsize */
781 FALSE, /* pc_relative */
782 0, /* bitpos */
783 complain_overflow_bitfield, /* complain_on_overflow */
784 bfd_elf_generic_reloc, /* */
785 "R_SH_TLS_DTPOFF32", /* name */
786 SH_PARTIAL32, /* partial_inplace */
787 SH_SRC_MASK32, /* src_mask */
788 0xffffffff, /* dst_mask */
789 FALSE), /* pcrel_offset */
791 HOWTO (R_SH_TLS_TPOFF32, /* type */
792 0, /* rightshift */
793 2, /* size (0 = byte, 1 = short, 2 = long) */
794 32, /* bitsize */
795 FALSE, /* pc_relative */
796 0, /* bitpos */
797 complain_overflow_bitfield, /* complain_on_overflow */
798 bfd_elf_generic_reloc, /* */
799 "R_SH_TLS_TPOFF32", /* name */
800 SH_PARTIAL32, /* partial_inplace */
801 SH_SRC_MASK32, /* src_mask */
802 0xffffffff, /* dst_mask */
803 FALSE), /* pcrel_offset */
805 EMPTY_HOWTO (152),
806 EMPTY_HOWTO (153),
807 EMPTY_HOWTO (154),
808 EMPTY_HOWTO (155),
809 EMPTY_HOWTO (156),
810 EMPTY_HOWTO (157),
811 EMPTY_HOWTO (158),
812 EMPTY_HOWTO (159),
814 HOWTO (R_SH_GOT32, /* type */
815 0, /* rightshift */
816 2, /* size (0 = byte, 1 = short, 2 = long) */
817 32, /* bitsize */
818 FALSE, /* pc_relative */
819 0, /* bitpos */
820 complain_overflow_bitfield, /* complain_on_overflow */
821 bfd_elf_generic_reloc, /* */
822 "R_SH_GOT32", /* name */
823 SH_PARTIAL32, /* partial_inplace */
824 SH_SRC_MASK32, /* src_mask */
825 0xffffffff, /* dst_mask */
826 FALSE), /* pcrel_offset */
828 HOWTO (R_SH_PLT32, /* type */
829 0, /* rightshift */
830 2, /* size (0 = byte, 1 = short, 2 = long) */
831 32, /* bitsize */
832 TRUE, /* pc_relative */
833 0, /* bitpos */
834 complain_overflow_bitfield, /* complain_on_overflow */
835 bfd_elf_generic_reloc, /* */
836 "R_SH_PLT32", /* name */
837 SH_PARTIAL32, /* partial_inplace */
838 SH_SRC_MASK32, /* src_mask */
839 0xffffffff, /* dst_mask */
840 TRUE), /* pcrel_offset */
842 HOWTO (R_SH_COPY, /* type */
843 0, /* rightshift */
844 2, /* size (0 = byte, 1 = short, 2 = long) */
845 32, /* bitsize */
846 FALSE, /* pc_relative */
847 0, /* bitpos */
848 complain_overflow_bitfield, /* complain_on_overflow */
849 bfd_elf_generic_reloc, /* */
850 "R_SH_COPY", /* name */
851 SH_PARTIAL32, /* partial_inplace */
852 SH_SRC_MASK32, /* src_mask */
853 0xffffffff, /* dst_mask */
854 FALSE), /* pcrel_offset */
856 HOWTO (R_SH_GLOB_DAT, /* type */
857 0, /* rightshift */
858 2, /* size (0 = byte, 1 = short, 2 = long) */
859 32, /* bitsize */
860 FALSE, /* pc_relative */
861 0, /* bitpos */
862 complain_overflow_bitfield, /* complain_on_overflow */
863 bfd_elf_generic_reloc, /* */
864 "R_SH_GLOB_DAT", /* name */
865 SH_PARTIAL32, /* partial_inplace */
866 SH_SRC_MASK32, /* src_mask */
867 0xffffffff, /* dst_mask */
868 FALSE), /* pcrel_offset */
870 HOWTO (R_SH_JMP_SLOT, /* type */
871 0, /* rightshift */
872 2, /* size (0 = byte, 1 = short, 2 = long) */
873 32, /* bitsize */
874 FALSE, /* pc_relative */
875 0, /* bitpos */
876 complain_overflow_bitfield, /* complain_on_overflow */
877 bfd_elf_generic_reloc, /* */
878 "R_SH_JMP_SLOT", /* name */
879 SH_PARTIAL32, /* partial_inplace */
880 SH_SRC_MASK32, /* src_mask */
881 0xffffffff, /* dst_mask */
882 FALSE), /* pcrel_offset */
884 HOWTO (R_SH_RELATIVE, /* type */
885 0, /* rightshift */
886 2, /* size (0 = byte, 1 = short, 2 = long) */
887 32, /* bitsize */
888 FALSE, /* pc_relative */
889 0, /* bitpos */
890 complain_overflow_bitfield, /* complain_on_overflow */
891 bfd_elf_generic_reloc, /* */
892 "R_SH_RELATIVE", /* name */
893 SH_PARTIAL32, /* partial_inplace */
894 SH_SRC_MASK32, /* src_mask */
895 0xffffffff, /* dst_mask */
896 FALSE), /* pcrel_offset */
898 HOWTO (R_SH_GOTOFF, /* type */
899 0, /* rightshift */
900 2, /* size (0 = byte, 1 = short, 2 = long) */
901 32, /* bitsize */
902 FALSE, /* pc_relative */
903 0, /* bitpos */
904 complain_overflow_bitfield, /* complain_on_overflow */
905 bfd_elf_generic_reloc, /* */
906 "R_SH_GOTOFF", /* name */
907 SH_PARTIAL32, /* partial_inplace */
908 SH_SRC_MASK32, /* src_mask */
909 0xffffffff, /* dst_mask */
910 FALSE), /* pcrel_offset */
912 HOWTO (R_SH_GOTPC, /* type */
913 0, /* rightshift */
914 2, /* size (0 = byte, 1 = short, 2 = long) */
915 32, /* bitsize */
916 TRUE, /* pc_relative */
917 0, /* bitpos */
918 complain_overflow_bitfield, /* complain_on_overflow */
919 bfd_elf_generic_reloc, /* */
920 "R_SH_GOTPC", /* name */
921 SH_PARTIAL32, /* partial_inplace */
922 SH_SRC_MASK32, /* src_mask */
923 0xffffffff, /* dst_mask */
924 TRUE), /* pcrel_offset */
926 HOWTO (R_SH_GOTPLT32, /* type */
927 0, /* rightshift */
928 2, /* size (0 = byte, 1 = short, 2 = long) */
929 32, /* bitsize */
930 FALSE, /* pc_relative */
931 0, /* bitpos */
932 complain_overflow_bitfield, /* complain_on_overflow */
933 bfd_elf_generic_reloc, /* */
934 "R_SH_GOTPLT32", /* name */
935 FALSE, /* partial_inplace */
936 /* ??? Why not 0? */
937 SH_SRC_MASK32, /* src_mask */
938 0xffffffff, /* dst_mask */
939 FALSE), /* pcrel_offset */
941 EMPTY_HOWTO (169),
942 EMPTY_HOWTO (170),
943 EMPTY_HOWTO (171),
944 EMPTY_HOWTO (172),
945 EMPTY_HOWTO (173),
946 EMPTY_HOWTO (174),
947 EMPTY_HOWTO (175),
948 EMPTY_HOWTO (176),
949 EMPTY_HOWTO (177),
950 EMPTY_HOWTO (178),
951 EMPTY_HOWTO (179),
952 EMPTY_HOWTO (180),
953 EMPTY_HOWTO (181),
954 EMPTY_HOWTO (182),
955 EMPTY_HOWTO (183),
956 EMPTY_HOWTO (184),
957 EMPTY_HOWTO (185),
958 EMPTY_HOWTO (186),
959 EMPTY_HOWTO (187),
960 EMPTY_HOWTO (188),
961 EMPTY_HOWTO (189),
962 EMPTY_HOWTO (190),
963 EMPTY_HOWTO (191),
964 EMPTY_HOWTO (192),
965 EMPTY_HOWTO (193),
966 EMPTY_HOWTO (194),
967 EMPTY_HOWTO (195),
968 EMPTY_HOWTO (196),
969 EMPTY_HOWTO (197),
970 EMPTY_HOWTO (198),
971 EMPTY_HOWTO (199),
972 EMPTY_HOWTO (200),
974 /* FDPIC-relative offset to a GOT entry, for movi20. */
975 HOWTO (R_SH_GOT20, /* type */
976 0, /* rightshift */
977 2, /* size (0 = byte, 1 = short, 2 = long) */
978 20, /* bitsize */
979 FALSE, /* pc_relative */
980 0, /* bitpos */
981 complain_overflow_signed, /* complain_on_overflow */
982 bfd_elf_generic_reloc, /* special_function */
983 "R_SH_GOT20", /* name */
984 FALSE, /* partial_inplace */
985 0, /* src_mask */
986 0x00f0ffff, /* dst_mask */
987 FALSE), /* pcrel_offset */
989 /* FDPIC-relative offset to a data object, for movi20. */
990 HOWTO (R_SH_GOTOFF20, /* type */
991 0, /* rightshift */
992 2, /* size (0 = byte, 1 = short, 2 = long) */
993 20, /* bitsize */
994 FALSE, /* pc_relative */
995 0, /* bitpos */
996 complain_overflow_signed, /* complain_on_overflow */
997 bfd_elf_generic_reloc, /* special_function */
998 "R_SH_GOTOFF20", /* name */
999 FALSE, /* partial_inplace */
1000 0, /* src_mask */
1001 0x00f0ffff, /* dst_mask */
1002 FALSE), /* pcrel_offset */
1004 /* FDPIC-relative offset to a GOT entry for a function descriptor. */
1005 HOWTO (R_SH_GOTFUNCDESC, /* type */
1006 0, /* rightshift */
1007 2, /* size (0 = byte, 1 = short, 2 = long) */
1008 32, /* bitsize */
1009 FALSE, /* pc_relative */
1010 0, /* bitpos */
1011 complain_overflow_signed, /* complain_on_overflow */
1012 bfd_elf_generic_reloc, /* special_function */
1013 "R_SH_GOTFUNCDESC", /* name */
1014 FALSE, /* partial_inplace */
1015 0, /* src_mask */
1016 0xffffffff, /* dst_mask */
1017 FALSE), /* pcrel_offset */
1019 /* FDPIC-relative offset to a GOT entry for a function descriptor,
1020 for movi20. */
1021 HOWTO (R_SH_GOTFUNCDESC20, /* type */
1022 0, /* rightshift */
1023 2, /* size (0 = byte, 1 = short, 2 = long) */
1024 20, /* bitsize */
1025 FALSE, /* pc_relative */
1026 0, /* bitpos */
1027 complain_overflow_signed, /* complain_on_overflow */
1028 bfd_elf_generic_reloc, /* special_function */
1029 "R_SH_GOTFUNCDESC20", /* name */
1030 FALSE, /* partial_inplace */
1031 0, /* src_mask */
1032 0x00f0ffff, /* dst_mask */
1033 FALSE), /* pcrel_offset */
1035 /* FDPIC-relative offset to a function descriptor. */
1036 HOWTO (R_SH_GOTOFFFUNCDESC, /* type */
1037 0, /* rightshift */
1038 2, /* size (0 = byte, 1 = short, 2 = long) */
1039 32, /* bitsize */
1040 FALSE, /* pc_relative */
1041 0, /* bitpos */
1042 complain_overflow_signed, /* complain_on_overflow */
1043 bfd_elf_generic_reloc, /* special_function */
1044 "R_SH_GOTOFFFUNCDESC", /* name */
1045 FALSE, /* partial_inplace */
1046 0, /* src_mask */
1047 0xffffffff, /* dst_mask */
1048 FALSE), /* pcrel_offset */
1050 /* FDPIC-relative offset to a function descriptor, for movi20. */
1051 HOWTO (R_SH_GOTOFFFUNCDESC20, /* type */
1052 0, /* rightshift */
1053 2, /* size (0 = byte, 1 = short, 2 = long) */
1054 20, /* bitsize */
1055 FALSE, /* pc_relative */
1056 0, /* bitpos */
1057 complain_overflow_signed, /* complain_on_overflow */
1058 bfd_elf_generic_reloc, /* special_function */
1059 "R_SH_GOTOFFFUNCDESC20", /* name */
1060 FALSE, /* partial_inplace */
1061 0, /* src_mask */
1062 0x00f0ffff, /* dst_mask */
1063 FALSE), /* pcrel_offset */
1065 /* Address of an official function descriptor. */
1066 HOWTO (R_SH_FUNCDESC, /* type */
1067 0, /* rightshift */
1068 2, /* size (0 = byte, 1 = short, 2 = long) */
1069 32, /* bitsize */
1070 FALSE, /* pc_relative */
1071 0, /* bitpos */
1072 complain_overflow_signed, /* complain_on_overflow */
1073 bfd_elf_generic_reloc, /* special_function */
1074 "R_SH_FUNCDESC", /* name */
1075 FALSE, /* partial_inplace */
1076 0, /* src_mask */
1077 0xffffffff, /* dst_mask */
1078 FALSE), /* pcrel_offset */
1080 /* Function descriptor to be filled in by the dynamic linker. */
1081 HOWTO (R_SH_FUNCDESC_VALUE, /* type */
1082 0, /* rightshift */
1083 2, /* size (0 = byte, 1 = short, 2 = long) */
1084 64, /* bitsize */
1085 FALSE, /* pc_relative */
1086 0, /* bitpos */
1087 complain_overflow_signed, /* complain_on_overflow */
1088 bfd_elf_generic_reloc, /* special_function */
1089 "R_SH_FUNCDESC_VALUE", /* name */
1090 FALSE, /* partial_inplace */
1091 0, /* src_mask */
1092 0xffffffff, /* dst_mask */
1093 FALSE), /* pcrel_offset */
1095 #undef SH_PARTIAL32
1096 #undef SH_SRC_MASK32
1097 #undef SH_ELF_RELOC