1 /* Copyright (C) 2006-2017 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. */
21 HOWTO (R_SH_NONE
, /* type */
23 3, /* size (0 = byte, 1 = short, 2 = long) */
25 FALSE
, /* pc_relative */
27 complain_overflow_dont
, /* complain_on_overflow */
28 sh_elf_ignore_reloc
, /* special_function */
29 "R_SH_NONE", /* name */
30 FALSE
, /* partial_inplace */
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 */
39 2, /* size (0 = byte, 1 = short, 2 = long) */
41 FALSE
, /* pc_relative */
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 */
54 2, /* size (0 = byte, 1 = short, 2 = long) */
56 TRUE
, /* pc_relative */
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 */
69 1, /* size (0 = byte, 1 = short, 2 = long) */
71 TRUE
, /* pc_relative */
73 complain_overflow_signed
, /* complain_on_overflow */
74 sh_elf_ignore_reloc
, /* special_function */
75 "R_SH_DIR8WPN", /* name */
76 TRUE
, /* partial_inplace */
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 */
86 1, /* size (0 = byte, 1 = short, 2 = long) */
88 TRUE
, /* pc_relative */
90 complain_overflow_signed
, /* complain_on_overflow */
91 NULL
, /* special_function */
92 "R_SH_IND12W", /* name */
93 FALSE
, /* partial_inplace */
96 TRUE
), /* pcrel_offset */
98 /* 8 bit unsigned PC relative divided by 4. */
99 HOWTO (R_SH_DIR8WPL
, /* type */
101 1, /* size (0 = byte, 1 = short, 2 = long) */
103 TRUE
, /* pc_relative */
105 complain_overflow_unsigned
, /* complain_on_overflow */
106 sh_elf_ignore_reloc
, /* special_function */
107 "R_SH_DIR8WPL", /* name */
108 TRUE
, /* partial_inplace */
111 TRUE
), /* pcrel_offset */
113 /* 8 bit unsigned PC relative divided by 2. */
114 HOWTO (R_SH_DIR8WPZ
, /* type */
116 1, /* size (0 = byte, 1 = short, 2 = long) */
118 TRUE
, /* pc_relative */
120 complain_overflow_unsigned
, /* complain_on_overflow */
121 sh_elf_ignore_reloc
, /* special_function */
122 "R_SH_DIR8WPZ", /* name */
123 TRUE
, /* partial_inplace */
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
131 HOWTO (R_SH_DIR8BP
, /* type */
133 1, /* size (0 = byte, 1 = short, 2 = long) */
135 FALSE
, /* pc_relative */
137 complain_overflow_unsigned
, /* complain_on_overflow */
138 sh_elf_ignore_reloc
, /* special_function */
139 "R_SH_DIR8BP", /* name */
140 FALSE
, /* partial_inplace */
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 */
150 1, /* size (0 = byte, 1 = short, 2 = long) */
152 FALSE
, /* pc_relative */
154 complain_overflow_unsigned
, /* complain_on_overflow */
155 sh_elf_ignore_reloc
, /* special_function */
156 "R_SH_DIR8W", /* name */
157 FALSE
, /* partial_inplace */
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 */
167 1, /* size (0 = byte, 1 = short, 2 = long) */
169 FALSE
, /* pc_relative */
171 complain_overflow_unsigned
, /* complain_on_overflow */
172 sh_elf_ignore_reloc
, /* special_function */
173 "R_SH_DIR8L", /* name */
174 FALSE
, /* partial_inplace */
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 */
182 1, /* size (0 = byte, 1 = short, 2 = long) */
184 FALSE
, /* pc_relative */
186 complain_overflow_signed
, /* complain_on_overflow */
187 sh_elf_ignore_reloc
, /* special_function */
188 "R_SH_LOOP_START", /* name */
189 TRUE
, /* partial_inplace */
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 */
197 1, /* size (0 = byte, 1 = short, 2 = long) */
199 FALSE
, /* pc_relative */
201 complain_overflow_signed
, /* complain_on_overflow */
202 sh_elf_ignore_reloc
, /* special_function */
203 "R_SH_LOOP_END", /* name */
204 TRUE
, /* partial_inplace */
207 TRUE
), /* pcrel_offset */
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
225 /* GNU extension to record C++ vtable hierarchy */
226 HOWTO (R_SH_GNU_VTINHERIT
, /* type */
228 2, /* size (0 = byte, 1 = short, 2 = long) */
230 FALSE
, /* pc_relative */
232 complain_overflow_dont
, /* complain_on_overflow */
233 NULL
, /* special_function */
234 "R_SH_GNU_VTINHERIT", /* name */
235 FALSE
, /* partial_inplace */
238 FALSE
), /* pcrel_offset */
240 /* GNU extension to record C++ vtable member usage */
241 HOWTO (R_SH_GNU_VTENTRY
, /* type */
243 2, /* size (0 = byte, 1 = short, 2 = long) */
245 FALSE
, /* pc_relative */
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 */
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 */
260 0, /* size (0 = byte, 1 = short, 2 = long) */
262 FALSE
, /* pc_relative */
264 complain_overflow_unsigned
, /* complain_on_overflow */
265 sh_elf_ignore_reloc
, /* special_function */
266 "R_SH_SWITCH8", /* name */
267 FALSE
, /* partial_inplace */
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 */
277 1, /* size (0 = byte, 1 = short, 2 = long) */
279 FALSE
, /* pc_relative */
281 complain_overflow_unsigned
, /* complain_on_overflow */
282 sh_elf_ignore_reloc
, /* special_function */
283 "R_SH_SWITCH16", /* name */
284 FALSE
, /* partial_inplace */
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 */
294 2, /* size (0 = byte, 1 = short, 2 = long) */
296 FALSE
, /* pc_relative */
298 complain_overflow_unsigned
, /* complain_on_overflow */
299 sh_elf_ignore_reloc
, /* special_function */
300 "R_SH_SWITCH32", /* name */
301 FALSE
, /* partial_inplace */
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 */
312 1, /* size (0 = byte, 1 = short, 2 = long) */
314 FALSE
, /* pc_relative */
316 complain_overflow_unsigned
, /* complain_on_overflow */
317 sh_elf_ignore_reloc
, /* special_function */
318 "R_SH_USES", /* name */
319 FALSE
, /* partial_inplace */
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
328 HOWTO (R_SH_COUNT
, /* type */
330 1, /* size (0 = byte, 1 = short, 2 = long) */
332 FALSE
, /* pc_relative */
334 complain_overflow_unsigned
, /* complain_on_overflow */
335 sh_elf_ignore_reloc
, /* special_function */
336 "R_SH_COUNT", /* name */
337 FALSE
, /* partial_inplace */
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
345 HOWTO (R_SH_ALIGN
, /* type */
347 1, /* size (0 = byte, 1 = short, 2 = long) */
349 FALSE
, /* pc_relative */
351 complain_overflow_unsigned
, /* complain_on_overflow */
352 sh_elf_ignore_reloc
, /* special_function */
353 "R_SH_ALIGN", /* name */
354 FALSE
, /* partial_inplace */
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 */
364 1, /* size (0 = byte, 1 = short, 2 = long) */
366 FALSE
, /* pc_relative */
368 complain_overflow_unsigned
, /* complain_on_overflow */
369 sh_elf_ignore_reloc
, /* special_function */
370 "R_SH_CODE", /* name */
371 FALSE
, /* partial_inplace */
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 */
380 1, /* size (0 = byte, 1 = short, 2 = long) */
382 FALSE
, /* pc_relative */
384 complain_overflow_unsigned
, /* complain_on_overflow */
385 sh_elf_ignore_reloc
, /* special_function */
386 "R_SH_DATA", /* name */
387 FALSE
, /* partial_inplace */
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 */
397 1, /* size (0 = byte, 1 = short, 2 = long) */
399 FALSE
, /* pc_relative */
401 complain_overflow_unsigned
, /* complain_on_overflow */
402 sh_elf_ignore_reloc
, /* special_function */
403 "R_SH_LABEL", /* name */
404 FALSE
, /* partial_inplace */
407 TRUE
), /* pcrel_offset */
409 /* The next 12 are only supported via linking in SHC-generated objects. */
410 HOWTO (R_SH_DIR16
, /* type */
412 1, /* size (0 = byte, 1 = short, 2 = long) */
414 FALSE
, /* pc_relative */
416 complain_overflow_dont
, /* complain_on_overflow */
417 bfd_elf_generic_reloc
, /* special_function */
418 "R_SH_DIR16", /* name */
419 FALSE
, /* partial_inplace */
421 0xffff, /* dst_mask */
422 FALSE
), /* pcrel_offset */
424 HOWTO (R_SH_DIR8
, /* type */
426 0, /* size (0 = byte, 1 = short, 2 = long) */
428 FALSE
, /* pc_relative */
430 complain_overflow_dont
, /* complain_on_overflow */
431 bfd_elf_generic_reloc
, /* special_function */
432 "R_SH_DIR8", /* name */
433 FALSE
, /* partial_inplace */
436 FALSE
), /* pcrel_offset */
438 HOWTO (R_SH_DIR8UL
, /* type */
440 0, /* size (0 = byte, 1 = short, 2 = long) */
442 FALSE
, /* pc_relative */
444 complain_overflow_unsigned
, /* complain_on_overflow */
445 bfd_elf_generic_reloc
, /* special_function */
446 "R_SH_DIR8UL", /* name */
447 FALSE
, /* partial_inplace */
450 FALSE
), /* pcrel_offset */
452 HOWTO (R_SH_DIR8UW
, /* type */
454 0, /* size (0 = byte, 1 = short, 2 = long) */
456 FALSE
, /* pc_relative */
458 complain_overflow_unsigned
, /* complain_on_overflow */
459 bfd_elf_generic_reloc
, /* special_function */
460 "R_SH_DIR8UW", /* name */
461 FALSE
, /* partial_inplace */
464 FALSE
), /* pcrel_offset */
466 HOWTO (R_SH_DIR8U
, /* type */
468 0, /* size (0 = byte, 1 = short, 2 = long) */
470 FALSE
, /* pc_relative */
472 complain_overflow_unsigned
, /* complain_on_overflow */
473 bfd_elf_generic_reloc
, /* special_function */
474 "R_SH_DIR8U", /* name */
475 FALSE
, /* partial_inplace */
478 FALSE
), /* pcrel_offset */
480 HOWTO (R_SH_DIR8SW
, /* type */
482 0, /* size (0 = byte, 1 = short, 2 = long) */
484 FALSE
, /* pc_relative */
486 complain_overflow_signed
, /* complain_on_overflow */
487 bfd_elf_generic_reloc
, /* special_function */
488 "R_SH_DIR8SW", /* name */
489 FALSE
, /* partial_inplace */
492 FALSE
), /* pcrel_offset */
494 HOWTO (R_SH_DIR8S
, /* type */
496 0, /* size (0 = byte, 1 = short, 2 = long) */
498 FALSE
, /* pc_relative */
500 complain_overflow_signed
, /* complain_on_overflow */
501 bfd_elf_generic_reloc
, /* special_function */
502 "R_SH_DIR8S", /* name */
503 FALSE
, /* partial_inplace */
506 FALSE
), /* pcrel_offset */
508 HOWTO (R_SH_DIR4UL
, /* type */
510 0, /* size (0 = byte, 1 = short, 2 = long) */
512 FALSE
, /* pc_relative */
514 complain_overflow_unsigned
, /* complain_on_overflow */
515 bfd_elf_generic_reloc
, /* special_function */
516 "R_SH_DIR4UL", /* name */
517 FALSE
, /* partial_inplace */
520 FALSE
), /* pcrel_offset */
522 HOWTO (R_SH_DIR4UW
, /* type */
524 0, /* size (0 = byte, 1 = short, 2 = long) */
526 FALSE
, /* pc_relative */
528 complain_overflow_unsigned
, /* complain_on_overflow */
529 bfd_elf_generic_reloc
, /* special_function */
530 "R_SH_DIR4UW", /* name */
531 FALSE
, /* partial_inplace */
534 FALSE
), /* pcrel_offset */
536 HOWTO (R_SH_DIR4U
, /* type */
538 0, /* size (0 = byte, 1 = short, 2 = long) */
540 FALSE
, /* pc_relative */
542 complain_overflow_unsigned
, /* complain_on_overflow */
543 bfd_elf_generic_reloc
, /* special_function */
544 "R_SH_DIR4U", /* name */
545 FALSE
, /* partial_inplace */
548 FALSE
), /* pcrel_offset */
550 HOWTO (R_SH_PSHA
, /* type */
552 1, /* size (0 = byte, 1 = short, 2 = long) */
554 FALSE
, /* pc_relative */
556 complain_overflow_signed
, /* complain_on_overflow */
557 bfd_elf_generic_reloc
, /* special_function */
558 "R_SH_PSHA", /* name */
559 FALSE
, /* partial_inplace */
562 FALSE
), /* pcrel_offset */
564 HOWTO (R_SH_PSHL
, /* type */
566 1, /* size (0 = byte, 1 = short, 2 = long) */
568 FALSE
, /* pc_relative */
570 complain_overflow_signed
, /* complain_on_overflow */
571 bfd_elf_generic_reloc
, /* special_function */
572 "R_SH_PSHL", /* name */
573 FALSE
, /* partial_inplace */
576 FALSE
), /* pcrel_offset */
578 #ifdef INCLUDE_SHMEDIA
579 /* Used in SHLLI.L and SHLRI.L. */
580 HOWTO (R_SH_DIR5U
, /* type */
582 2, /* size (0 = byte, 1 = short, 2 = long) */
584 FALSE
, /* pc_relative */
586 complain_overflow_unsigned
, /* complain_on_overflow */
587 bfd_elf_generic_reloc
, /* special_function */
588 "R_SH_DIR5U", /* name */
589 FALSE
, /* partial_inplace */
591 0xfc00, /* dst_mask */
592 FALSE
), /* pcrel_offset */
594 /* Used in SHARI, SHLLI et al. */
595 HOWTO (R_SH_DIR6U
, /* type */
597 2, /* size (0 = byte, 1 = short, 2 = long) */
599 FALSE
, /* pc_relative */
601 complain_overflow_unsigned
, /* complain_on_overflow */
602 bfd_elf_generic_reloc
, /* special_function */
603 "R_SH_DIR6U", /* name */
604 FALSE
, /* partial_inplace */
606 0xfc00, /* dst_mask */
607 FALSE
), /* pcrel_offset */
609 /* Used in BxxI, LDHI.L et al. */
610 HOWTO (R_SH_DIR6S
, /* type */
612 2, /* size (0 = byte, 1 = short, 2 = long) */
614 FALSE
, /* pc_relative */
616 complain_overflow_signed
, /* complain_on_overflow */
617 bfd_elf_generic_reloc
, /* special_function */
618 "R_SH_DIR6S", /* name */
619 FALSE
, /* partial_inplace */
621 0xfc00, /* dst_mask */
622 FALSE
), /* pcrel_offset */
624 /* Used in ADDI, ANDI et al. */
625 HOWTO (R_SH_DIR10S
, /* type */
627 2, /* size (0 = byte, 1 = short, 2 = long) */
629 FALSE
, /* pc_relative */
631 complain_overflow_signed
, /* complain_on_overflow */
632 bfd_elf_generic_reloc
, /* special_function */
633 "R_SH_DIR10S", /* name */
634 FALSE
, /* partial_inplace */
636 0xffc00, /* dst_mask */
637 FALSE
), /* pcrel_offset */
639 /* Used in LD.UW, ST.W et al. */
640 HOWTO (R_SH_DIR10SW
, /* type */
642 2, /* size (0 = byte, 1 = short, 2 = long) */
644 FALSE
, /* pc_relative */
646 complain_overflow_signed
, /* complain_on_overflow */
647 bfd_elf_generic_reloc
, /* special_function */
648 "R_SH_DIR10SW", /* name */
649 FALSE
, /* partial_inplace */
651 0xffc00, /* dst_mask */
652 FALSE
), /* pcrel_offset */
654 /* Used in LD.L, FLD.S et al. */
655 HOWTO (R_SH_DIR10SL
, /* type */
657 2, /* size (0 = byte, 1 = short, 2 = long) */
659 FALSE
, /* pc_relative */
661 complain_overflow_signed
, /* complain_on_overflow */
662 bfd_elf_generic_reloc
, /* special_function */
663 "R_SH_DIR10SL", /* name */
664 FALSE
, /* partial_inplace */
666 0xffc00, /* dst_mask */
667 FALSE
), /* pcrel_offset */
669 /* Used in FLD.D, FST.P et al. */
670 HOWTO (R_SH_DIR10SQ
, /* type */
672 2, /* size (0 = byte, 1 = short, 2 = long) */
674 FALSE
, /* pc_relative */
676 complain_overflow_signed
, /* complain_on_overflow */
677 bfd_elf_generic_reloc
, /* special_function */
678 "R_SH_DIR10SQ", /* name */
679 FALSE
, /* partial_inplace */
681 0xffc00, /* dst_mask */
682 FALSE
), /* pcrel_offset */
696 HOWTO (R_SH_DIR16S
, /* type */
698 1, /* size (0 = byte, 1 = short, 2 = long) */
700 FALSE
, /* pc_relative */
702 complain_overflow_signed
, /* complain_on_overflow */
703 bfd_elf_generic_reloc
, /* special_function */
704 "R_SH_DIR16S", /* name */
705 FALSE
, /* partial_inplace */
707 0xffff, /* dst_mask */
708 FALSE
), /* pcrel_offset */
801 HOWTO (R_SH_TLS_GD_32
, /* type */
803 2, /* size (0 = byte, 1 = short, 2 = long) */
805 FALSE
, /* pc_relative */
807 complain_overflow_bitfield
, /* complain_on_overflow */
808 bfd_elf_generic_reloc
, /* */
809 "R_SH_TLS_GD_32", /* name */
810 SH_PARTIAL32
, /* partial_inplace */
811 SH_SRC_MASK32
, /* src_mask */
812 0xffffffff, /* dst_mask */
813 FALSE
), /* pcrel_offset */
815 HOWTO (R_SH_TLS_LD_32
, /* type */
817 2, /* size (0 = byte, 1 = short, 2 = long) */
819 FALSE
, /* pc_relative */
821 complain_overflow_bitfield
, /* complain_on_overflow */
822 bfd_elf_generic_reloc
, /* */
823 "R_SH_TLS_LD_32", /* name */
824 SH_PARTIAL32
, /* partial_inplace */
825 SH_SRC_MASK32
, /* src_mask */
826 0xffffffff, /* dst_mask */
827 FALSE
), /* pcrel_offset */
829 HOWTO (R_SH_TLS_LDO_32
, /* type */
831 2, /* size (0 = byte, 1 = short, 2 = long) */
833 FALSE
, /* pc_relative */
835 complain_overflow_bitfield
, /* complain_on_overflow */
836 bfd_elf_generic_reloc
, /* */
837 "R_SH_TLS_LDO_32", /* name */
838 SH_PARTIAL32
, /* partial_inplace */
839 SH_SRC_MASK32
, /* src_mask */
840 0xffffffff, /* dst_mask */
841 FALSE
), /* pcrel_offset */
843 HOWTO (R_SH_TLS_IE_32
, /* type */
845 2, /* size (0 = byte, 1 = short, 2 = long) */
847 FALSE
, /* pc_relative */
849 complain_overflow_bitfield
, /* complain_on_overflow */
850 bfd_elf_generic_reloc
, /* */
851 "R_SH_TLS_IE_32", /* name */
852 SH_PARTIAL32
, /* partial_inplace */
853 SH_SRC_MASK32
, /* src_mask */
854 0xffffffff, /* dst_mask */
855 FALSE
), /* pcrel_offset */
857 HOWTO (R_SH_TLS_LE_32
, /* type */
859 2, /* size (0 = byte, 1 = short, 2 = long) */
861 FALSE
, /* pc_relative */
863 complain_overflow_bitfield
, /* complain_on_overflow */
864 bfd_elf_generic_reloc
, /* */
865 "R_SH_TLS_LE_32", /* name */
866 SH_PARTIAL32
, /* partial_inplace */
867 SH_SRC_MASK32
, /* src_mask */
868 0xffffffff, /* dst_mask */
869 FALSE
), /* pcrel_offset */
871 HOWTO (R_SH_TLS_DTPMOD32
, /* type */
873 2, /* size (0 = byte, 1 = short, 2 = long) */
875 FALSE
, /* pc_relative */
877 complain_overflow_bitfield
, /* complain_on_overflow */
878 bfd_elf_generic_reloc
, /* */
879 "R_SH_TLS_DTPMOD32", /* name */
880 SH_PARTIAL32
, /* partial_inplace */
881 SH_SRC_MASK32
, /* src_mask */
882 0xffffffff, /* dst_mask */
883 FALSE
), /* pcrel_offset */
885 HOWTO (R_SH_TLS_DTPOFF32
, /* type */
887 2, /* size (0 = byte, 1 = short, 2 = long) */
889 FALSE
, /* pc_relative */
891 complain_overflow_bitfield
, /* complain_on_overflow */
892 bfd_elf_generic_reloc
, /* */
893 "R_SH_TLS_DTPOFF32", /* name */
894 SH_PARTIAL32
, /* partial_inplace */
895 SH_SRC_MASK32
, /* src_mask */
896 0xffffffff, /* dst_mask */
897 FALSE
), /* pcrel_offset */
899 HOWTO (R_SH_TLS_TPOFF32
, /* type */
901 2, /* size (0 = byte, 1 = short, 2 = long) */
903 FALSE
, /* pc_relative */
905 complain_overflow_bitfield
, /* complain_on_overflow */
906 bfd_elf_generic_reloc
, /* */
907 "R_SH_TLS_TPOFF32", /* name */
908 SH_PARTIAL32
, /* partial_inplace */
909 SH_SRC_MASK32
, /* src_mask */
910 0xffffffff, /* dst_mask */
911 FALSE
), /* pcrel_offset */
922 HOWTO (R_SH_GOT32
, /* type */
924 2, /* size (0 = byte, 1 = short, 2 = long) */
926 FALSE
, /* pc_relative */
928 complain_overflow_bitfield
, /* complain_on_overflow */
929 bfd_elf_generic_reloc
, /* */
930 "R_SH_GOT32", /* name */
931 SH_PARTIAL32
, /* partial_inplace */
932 SH_SRC_MASK32
, /* src_mask */
933 0xffffffff, /* dst_mask */
934 FALSE
), /* pcrel_offset */
936 HOWTO (R_SH_PLT32
, /* type */
938 2, /* size (0 = byte, 1 = short, 2 = long) */
940 TRUE
, /* pc_relative */
942 complain_overflow_bitfield
, /* complain_on_overflow */
943 bfd_elf_generic_reloc
, /* */
944 "R_SH_PLT32", /* name */
945 SH_PARTIAL32
, /* partial_inplace */
946 SH_SRC_MASK32
, /* src_mask */
947 0xffffffff, /* dst_mask */
948 TRUE
), /* pcrel_offset */
950 HOWTO (R_SH_COPY
, /* type */
952 2, /* size (0 = byte, 1 = short, 2 = long) */
954 FALSE
, /* pc_relative */
956 complain_overflow_bitfield
, /* complain_on_overflow */
957 bfd_elf_generic_reloc
, /* */
958 "R_SH_COPY", /* name */
959 SH_PARTIAL32
, /* partial_inplace */
960 SH_SRC_MASK32
, /* src_mask */
961 0xffffffff, /* dst_mask */
962 FALSE
), /* pcrel_offset */
964 HOWTO (R_SH_GLOB_DAT
, /* type */
966 2, /* size (0 = byte, 1 = short, 2 = long) */
968 FALSE
, /* pc_relative */
970 complain_overflow_bitfield
, /* complain_on_overflow */
971 bfd_elf_generic_reloc
, /* */
972 "R_SH_GLOB_DAT", /* name */
973 SH_PARTIAL32
, /* partial_inplace */
974 SH_SRC_MASK32
, /* src_mask */
975 0xffffffff, /* dst_mask */
976 FALSE
), /* pcrel_offset */
978 HOWTO (R_SH_JMP_SLOT
, /* type */
980 2, /* size (0 = byte, 1 = short, 2 = long) */
982 FALSE
, /* pc_relative */
984 complain_overflow_bitfield
, /* complain_on_overflow */
985 bfd_elf_generic_reloc
, /* */
986 "R_SH_JMP_SLOT", /* name */
987 SH_PARTIAL32
, /* partial_inplace */
988 SH_SRC_MASK32
, /* src_mask */
989 0xffffffff, /* dst_mask */
990 FALSE
), /* pcrel_offset */
992 HOWTO (R_SH_RELATIVE
, /* type */
994 2, /* size (0 = byte, 1 = short, 2 = long) */
996 FALSE
, /* pc_relative */
998 complain_overflow_bitfield
, /* complain_on_overflow */
999 bfd_elf_generic_reloc
, /* */
1000 "R_SH_RELATIVE", /* name */
1001 SH_PARTIAL32
, /* partial_inplace */
1002 SH_SRC_MASK32
, /* src_mask */
1003 0xffffffff, /* dst_mask */
1004 FALSE
), /* pcrel_offset */
1006 HOWTO (R_SH_GOTOFF
, /* type */
1008 2, /* size (0 = byte, 1 = short, 2 = long) */
1010 FALSE
, /* pc_relative */
1012 complain_overflow_bitfield
, /* complain_on_overflow */
1013 bfd_elf_generic_reloc
, /* */
1014 "R_SH_GOTOFF", /* name */
1015 SH_PARTIAL32
, /* partial_inplace */
1016 SH_SRC_MASK32
, /* src_mask */
1017 0xffffffff, /* dst_mask */
1018 FALSE
), /* pcrel_offset */
1020 HOWTO (R_SH_GOTPC
, /* type */
1022 2, /* size (0 = byte, 1 = short, 2 = long) */
1024 TRUE
, /* pc_relative */
1026 complain_overflow_bitfield
, /* complain_on_overflow */
1027 bfd_elf_generic_reloc
, /* */
1028 "R_SH_GOTPC", /* name */
1029 SH_PARTIAL32
, /* partial_inplace */
1030 SH_SRC_MASK32
, /* src_mask */
1031 0xffffffff, /* dst_mask */
1032 TRUE
), /* pcrel_offset */
1034 HOWTO (R_SH_GOTPLT32
, /* type */
1036 2, /* size (0 = byte, 1 = short, 2 = long) */
1038 FALSE
, /* pc_relative */
1040 complain_overflow_bitfield
, /* complain_on_overflow */
1041 bfd_elf_generic_reloc
, /* */
1042 "R_SH_GOTPLT32", /* name */
1043 FALSE
, /* partial_inplace */
1044 /* ??? Why not 0? */
1045 SH_SRC_MASK32
, /* src_mask */
1046 0xffffffff, /* dst_mask */
1047 FALSE
), /* pcrel_offset */
1049 #ifdef INCLUDE_SHMEDIA
1050 /* Used in MOVI and SHORI (x & 65536). */
1051 HOWTO (R_SH_GOT_LOW16
, /* type */
1053 2, /* size (0 = byte, 1 = short, 2 = long) */
1055 FALSE
, /* pc_relative */
1057 complain_overflow_dont
, /* complain_on_overflow */
1058 bfd_elf_generic_reloc
, /* special_function */
1059 "R_SH_GOT_LOW16", /* name */
1060 FALSE
, /* partial_inplace */
1062 0x3fffc00, /* dst_mask */
1063 FALSE
), /* pcrel_offset */
1065 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1066 HOWTO (R_SH_GOT_MEDLOW16
, /* type */
1067 16, /* rightshift */
1068 2, /* size (0 = byte, 1 = short, 2 = long) */
1070 FALSE
, /* pc_relative */
1072 complain_overflow_dont
, /* complain_on_overflow */
1073 bfd_elf_generic_reloc
, /* special_function */
1074 "R_SH_GOT_MEDLOW16", /* name */
1075 FALSE
, /* partial_inplace */
1077 0x3fffc00, /* dst_mask */
1078 FALSE
), /* pcrel_offset */
1080 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1081 HOWTO (R_SH_GOT_MEDHI16
, /* type */
1082 32, /* rightshift */
1083 2, /* size (0 = byte, 1 = short, 2 = long) */
1085 FALSE
, /* pc_relative */
1087 complain_overflow_dont
, /* complain_on_overflow */
1088 bfd_elf_generic_reloc
, /* special_function */
1089 "R_SH_GOT_MEDHI16", /* name */
1090 FALSE
, /* partial_inplace */
1092 0x3fffc00, /* dst_mask */
1093 FALSE
), /* pcrel_offset */
1095 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1096 HOWTO (R_SH_GOT_HI16
, /* type */
1097 48, /* rightshift */
1098 2, /* size (0 = byte, 1 = short, 2 = long) */
1100 FALSE
, /* pc_relative */
1102 complain_overflow_dont
, /* complain_on_overflow */
1103 bfd_elf_generic_reloc
, /* special_function */
1104 "R_SH_GOT_HI16", /* name */
1105 FALSE
, /* partial_inplace */
1107 0x3fffc00, /* dst_mask */
1108 FALSE
), /* pcrel_offset */
1110 /* Used in MOVI and SHORI (x & 65536). */
1111 HOWTO (R_SH_GOTPLT_LOW16
, /* type */
1113 2, /* size (0 = byte, 1 = short, 2 = long) */
1115 FALSE
, /* pc_relative */
1117 complain_overflow_dont
, /* complain_on_overflow */
1118 bfd_elf_generic_reloc
, /* special_function */
1119 "R_SH_GOTPLT_LOW16", /* name */
1120 FALSE
, /* partial_inplace */
1122 0x3fffc00, /* dst_mask */
1123 FALSE
), /* pcrel_offset */
1125 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1126 HOWTO (R_SH_GOTPLT_MEDLOW16
, /* type */
1127 16, /* rightshift */
1128 2, /* size (0 = byte, 1 = short, 2 = long) */
1130 FALSE
, /* pc_relative */
1132 complain_overflow_dont
, /* complain_on_overflow */
1133 bfd_elf_generic_reloc
, /* special_function */
1134 "R_SH_GOTPLT_MEDLOW16", /* name */
1135 FALSE
, /* partial_inplace */
1137 0x3fffc00, /* dst_mask */
1138 FALSE
), /* pcrel_offset */
1140 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1141 HOWTO (R_SH_GOTPLT_MEDHI16
, /* type */
1142 32, /* rightshift */
1143 2, /* size (0 = byte, 1 = short, 2 = long) */
1145 FALSE
, /* pc_relative */
1147 complain_overflow_dont
, /* complain_on_overflow */
1148 bfd_elf_generic_reloc
, /* special_function */
1149 "R_SH_GOTPLT_MEDHI16", /* name */
1150 FALSE
, /* partial_inplace */
1152 0x3fffc00, /* dst_mask */
1153 FALSE
), /* pcrel_offset */
1155 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1156 HOWTO (R_SH_GOTPLT_HI16
, /* type */
1157 48, /* rightshift */
1158 2, /* size (0 = byte, 1 = short, 2 = long) */
1160 FALSE
, /* pc_relative */
1162 complain_overflow_dont
, /* complain_on_overflow */
1163 bfd_elf_generic_reloc
, /* special_function */
1164 "R_SH_GOTPLT_HI16", /* name */
1165 FALSE
, /* partial_inplace */
1167 0x3fffc00, /* dst_mask */
1168 FALSE
), /* pcrel_offset */
1170 /* Used in MOVI and SHORI (x & 65536). */
1171 HOWTO (R_SH_PLT_LOW16
, /* type */
1173 2, /* size (0 = byte, 1 = short, 2 = long) */
1175 TRUE
, /* pc_relative */
1177 complain_overflow_dont
, /* complain_on_overflow */
1178 bfd_elf_generic_reloc
, /* special_function */
1179 "R_SH_PLT_LOW16", /* name */
1180 FALSE
, /* partial_inplace */
1182 0x3fffc00, /* dst_mask */
1183 TRUE
), /* pcrel_offset */
1185 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1186 HOWTO (R_SH_PLT_MEDLOW16
, /* type */
1187 16, /* rightshift */
1188 2, /* size (0 = byte, 1 = short, 2 = long) */
1190 TRUE
, /* pc_relative */
1192 complain_overflow_dont
, /* complain_on_overflow */
1193 bfd_elf_generic_reloc
, /* special_function */
1194 "R_SH_PLT_MEDLOW16", /* name */
1195 FALSE
, /* partial_inplace */
1197 0x3fffc00, /* dst_mask */
1198 TRUE
), /* pcrel_offset */
1200 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1201 HOWTO (R_SH_PLT_MEDHI16
, /* type */
1202 32, /* rightshift */
1203 2, /* size (0 = byte, 1 = short, 2 = long) */
1205 TRUE
, /* pc_relative */
1207 complain_overflow_dont
, /* complain_on_overflow */
1208 bfd_elf_generic_reloc
, /* special_function */
1209 "R_SH_PLT_MEDHI16", /* name */
1210 FALSE
, /* partial_inplace */
1212 0x3fffc00, /* dst_mask */
1213 TRUE
), /* pcrel_offset */
1215 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1216 HOWTO (R_SH_PLT_HI16
, /* type */
1217 48, /* rightshift */
1218 2, /* size (0 = byte, 1 = short, 2 = long) */
1220 TRUE
, /* pc_relative */
1222 complain_overflow_dont
, /* complain_on_overflow */
1223 bfd_elf_generic_reloc
, /* special_function */
1224 "R_SH_PLT_HI16", /* name */
1225 FALSE
, /* partial_inplace */
1227 0x3fffc00, /* dst_mask */
1228 TRUE
), /* pcrel_offset */
1230 /* Used in MOVI and SHORI (x & 65536). */
1231 HOWTO (R_SH_GOTOFF_LOW16
, /* type */
1233 2, /* size (0 = byte, 1 = short, 2 = long) */
1235 FALSE
, /* pc_relative */
1237 complain_overflow_dont
, /* complain_on_overflow */
1238 bfd_elf_generic_reloc
, /* special_function */
1239 "R_SH_GOTOFF_LOW16", /* name */
1240 FALSE
, /* partial_inplace */
1242 0x3fffc00, /* dst_mask */
1243 FALSE
), /* pcrel_offset */
1245 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1246 HOWTO (R_SH_GOTOFF_MEDLOW16
, /* type */
1247 16, /* rightshift */
1248 2, /* size (0 = byte, 1 = short, 2 = long) */
1250 FALSE
, /* pc_relative */
1252 complain_overflow_dont
, /* complain_on_overflow */
1253 bfd_elf_generic_reloc
, /* special_function */
1254 "R_SH_GOTOFF_MEDLOW16", /* name */
1255 FALSE
, /* partial_inplace */
1257 0x3fffc00, /* dst_mask */
1258 FALSE
), /* pcrel_offset */
1260 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1261 HOWTO (R_SH_GOTOFF_MEDHI16
, /* type */
1262 32, /* rightshift */
1263 2, /* size (0 = byte, 1 = short, 2 = long) */
1265 FALSE
, /* pc_relative */
1267 complain_overflow_dont
, /* complain_on_overflow */
1268 bfd_elf_generic_reloc
, /* special_function */
1269 "R_SH_GOTOFF_MEDHI16", /* name */
1270 FALSE
, /* partial_inplace */
1272 0x3fffc00, /* dst_mask */
1273 FALSE
), /* pcrel_offset */
1275 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1276 HOWTO (R_SH_GOTOFF_HI16
, /* type */
1277 48, /* rightshift */
1278 2, /* size (0 = byte, 1 = short, 2 = long) */
1280 FALSE
, /* pc_relative */
1282 complain_overflow_dont
, /* complain_on_overflow */
1283 bfd_elf_generic_reloc
, /* special_function */
1284 "R_SH_GOTOFF_HI16", /* name */
1285 FALSE
, /* partial_inplace */
1287 0x3fffc00, /* dst_mask */
1288 FALSE
), /* pcrel_offset */
1290 /* Used in MOVI and SHORI (x & 65536). */
1291 HOWTO (R_SH_GOTPC_LOW16
, /* type */
1293 2, /* size (0 = byte, 1 = short, 2 = long) */
1295 TRUE
, /* pc_relative */
1297 complain_overflow_dont
, /* complain_on_overflow */
1298 bfd_elf_generic_reloc
, /* special_function */
1299 "R_SH_GOTPC_LOW16", /* name */
1300 FALSE
, /* partial_inplace */
1302 0x3fffc00, /* dst_mask */
1303 TRUE
), /* pcrel_offset */
1305 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1306 HOWTO (R_SH_GOTPC_MEDLOW16
, /* type */
1307 16, /* rightshift */
1308 2, /* size (0 = byte, 1 = short, 2 = long) */
1310 TRUE
, /* pc_relative */
1312 complain_overflow_dont
, /* complain_on_overflow */
1313 bfd_elf_generic_reloc
, /* special_function */
1314 "R_SH_GOTPC_MEDLOW16", /* name */
1315 FALSE
, /* partial_inplace */
1317 0x3fffc00, /* dst_mask */
1318 TRUE
), /* pcrel_offset */
1320 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1321 HOWTO (R_SH_GOTPC_MEDHI16
, /* type */
1322 32, /* rightshift */
1323 2, /* size (0 = byte, 1 = short, 2 = long) */
1325 TRUE
, /* pc_relative */
1327 complain_overflow_dont
, /* complain_on_overflow */
1328 bfd_elf_generic_reloc
, /* special_function */
1329 "R_SH_GOTPC_MEDHI16", /* name */
1330 FALSE
, /* partial_inplace */
1332 0x3fffc00, /* dst_mask */
1333 TRUE
), /* pcrel_offset */
1335 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1336 HOWTO (R_SH_GOTPC_HI16
, /* type */
1337 48, /* rightshift */
1338 2, /* size (0 = byte, 1 = short, 2 = long) */
1340 TRUE
, /* pc_relative */
1342 complain_overflow_dont
, /* complain_on_overflow */
1343 bfd_elf_generic_reloc
, /* special_function */
1344 "R_SH_GOTPC_HI16", /* name */
1345 FALSE
, /* partial_inplace */
1347 0x3fffc00, /* dst_mask */
1348 TRUE
), /* pcrel_offset */
1350 /* Used in LD.L, FLD.S et al. */
1351 HOWTO (R_SH_GOT10BY4
, /* type */
1353 2, /* size (0 = byte, 1 = short, 2 = long) */
1355 FALSE
, /* pc_relative */
1357 complain_overflow_signed
, /* complain_on_overflow */
1358 bfd_elf_generic_reloc
, /* special_function */
1359 "R_SH_GOT10BY4", /* name */
1360 FALSE
, /* partial_inplace */
1362 0xffc00, /* dst_mask */
1363 FALSE
), /* pcrel_offset */
1365 /* Used in LD.L, FLD.S et al. */
1366 HOWTO (R_SH_GOTPLT10BY4
, /* type */
1368 2, /* size (0 = byte, 1 = short, 2 = long) */
1370 FALSE
, /* pc_relative */
1372 complain_overflow_signed
, /* complain_on_overflow */
1373 bfd_elf_generic_reloc
, /* special_function */
1374 "R_SH_GOTPLT10BY4", /* name */
1375 FALSE
, /* partial_inplace */
1377 0xffc00, /* dst_mask */
1378 FALSE
), /* pcrel_offset */
1380 /* Used in FLD.D, FST.P et al. */
1381 HOWTO (R_SH_GOT10BY8
, /* type */
1383 2, /* size (0 = byte, 1 = short, 2 = long) */
1385 FALSE
, /* pc_relative */
1387 complain_overflow_signed
, /* complain_on_overflow */
1388 bfd_elf_generic_reloc
, /* special_function */
1389 "R_SH_GOT10BY8", /* name */
1390 FALSE
, /* partial_inplace */
1392 0xffc00, /* dst_mask */
1393 FALSE
), /* pcrel_offset */
1395 /* Used in FLD.D, FST.P et al. */
1396 HOWTO (R_SH_GOTPLT10BY8
, /* type */
1398 2, /* size (0 = byte, 1 = short, 2 = long) */
1400 FALSE
, /* pc_relative */
1402 complain_overflow_signed
, /* complain_on_overflow */
1403 bfd_elf_generic_reloc
, /* special_function */
1404 "R_SH_GOTPLT10BY8", /* name */
1405 FALSE
, /* partial_inplace */
1407 0xffc00, /* dst_mask */
1408 FALSE
), /* pcrel_offset */
1410 HOWTO (R_SH_COPY64
, /* type */
1412 4, /* size (0 = byte, 1 = short, 2 = long) */
1414 FALSE
, /* pc_relative */
1416 complain_overflow_dont
, /* complain_on_overflow */
1417 bfd_elf_generic_reloc
, /* special_function */
1418 "R_SH_COPY64", /* name */
1419 FALSE
, /* partial_inplace */
1421 ((bfd_vma
) 0) - 1, /* dst_mask */
1422 FALSE
), /* pcrel_offset */
1424 HOWTO (R_SH_GLOB_DAT64
, /* type */
1426 4, /* size (0 = byte, 1 = short, 2 = long) */
1428 FALSE
, /* pc_relative */
1430 complain_overflow_dont
, /* complain_on_overflow */
1431 bfd_elf_generic_reloc
, /* special_function */
1432 "R_SH_GLOB_DAT64", /* name */
1433 FALSE
, /* partial_inplace */
1435 ((bfd_vma
) 0) - 1, /* dst_mask */
1436 FALSE
), /* pcrel_offset */
1438 HOWTO (R_SH_JMP_SLOT64
, /* type */
1440 4, /* size (0 = byte, 1 = short, 2 = long) */
1442 FALSE
, /* pc_relative */
1444 complain_overflow_dont
, /* complain_on_overflow */
1445 bfd_elf_generic_reloc
, /* special_function */
1446 "R_SH_JMP_SLOT64", /* name */
1447 FALSE
, /* partial_inplace */
1449 ((bfd_vma
) 0) - 1, /* dst_mask */
1450 FALSE
), /* pcrel_offset */
1452 HOWTO (R_SH_RELATIVE64
, /* type */
1454 4, /* size (0 = byte, 1 = short, 2 = long) */
1456 FALSE
, /* pc_relative */
1458 complain_overflow_dont
, /* complain_on_overflow */
1459 bfd_elf_generic_reloc
, /* special_function */
1460 "R_SH_RELATIVE64", /* name */
1461 FALSE
, /* partial_inplace */
1463 ((bfd_vma
) 0) - 1, /* dst_mask */
1464 FALSE
), /* pcrel_offset */
1501 /* FDPIC-relative offset to a GOT entry, for movi20. */
1502 HOWTO (R_SH_GOT20
, /* type */
1504 2, /* size (0 = byte, 1 = short, 2 = long) */
1506 FALSE
, /* pc_relative */
1508 complain_overflow_signed
, /* complain_on_overflow */
1509 bfd_elf_generic_reloc
, /* special_function */
1510 "R_SH_GOT20", /* name */
1511 FALSE
, /* partial_inplace */
1513 0x00f0ffff, /* dst_mask */
1514 FALSE
), /* pcrel_offset */
1516 /* FDPIC-relative offset to a data object, for movi20. */
1517 HOWTO (R_SH_GOTOFF20
, /* type */
1519 2, /* size (0 = byte, 1 = short, 2 = long) */
1521 FALSE
, /* pc_relative */
1523 complain_overflow_signed
, /* complain_on_overflow */
1524 bfd_elf_generic_reloc
, /* special_function */
1525 "R_SH_GOTOFF20", /* name */
1526 FALSE
, /* partial_inplace */
1528 0x00f0ffff, /* dst_mask */
1529 FALSE
), /* pcrel_offset */
1531 /* FDPIC-relative offset to a GOT entry for a function descriptor. */
1532 HOWTO (R_SH_GOTFUNCDESC
, /* type */
1534 2, /* size (0 = byte, 1 = short, 2 = long) */
1536 FALSE
, /* pc_relative */
1538 complain_overflow_signed
, /* complain_on_overflow */
1539 bfd_elf_generic_reloc
, /* special_function */
1540 "R_SH_GOTFUNCDESC", /* name */
1541 FALSE
, /* partial_inplace */
1543 0xffffffff, /* dst_mask */
1544 FALSE
), /* pcrel_offset */
1546 /* FDPIC-relative offset to a GOT entry for a function descriptor,
1548 HOWTO (R_SH_GOTFUNCDESC20
, /* type */
1550 2, /* size (0 = byte, 1 = short, 2 = long) */
1552 FALSE
, /* pc_relative */
1554 complain_overflow_signed
, /* complain_on_overflow */
1555 bfd_elf_generic_reloc
, /* special_function */
1556 "R_SH_GOTFUNCDESC20", /* name */
1557 FALSE
, /* partial_inplace */
1559 0x00f0ffff, /* dst_mask */
1560 FALSE
), /* pcrel_offset */
1562 /* FDPIC-relative offset to a function descriptor. */
1563 HOWTO (R_SH_GOTOFFFUNCDESC
, /* type */
1565 2, /* size (0 = byte, 1 = short, 2 = long) */
1567 FALSE
, /* pc_relative */
1569 complain_overflow_signed
, /* complain_on_overflow */
1570 bfd_elf_generic_reloc
, /* special_function */
1571 "R_SH_GOTOFFFUNCDESC", /* name */
1572 FALSE
, /* partial_inplace */
1574 0xffffffff, /* dst_mask */
1575 FALSE
), /* pcrel_offset */
1577 /* FDPIC-relative offset to a function descriptor, for movi20. */
1578 HOWTO (R_SH_GOTOFFFUNCDESC20
, /* type */
1580 2, /* size (0 = byte, 1 = short, 2 = long) */
1582 FALSE
, /* pc_relative */
1584 complain_overflow_signed
, /* complain_on_overflow */
1585 bfd_elf_generic_reloc
, /* special_function */
1586 "R_SH_GOTOFFFUNCDESC20", /* name */
1587 FALSE
, /* partial_inplace */
1589 0x00f0ffff, /* dst_mask */
1590 FALSE
), /* pcrel_offset */
1592 /* Address of an official function descriptor. */
1593 HOWTO (R_SH_FUNCDESC
, /* type */
1595 2, /* size (0 = byte, 1 = short, 2 = long) */
1597 FALSE
, /* pc_relative */
1599 complain_overflow_signed
, /* complain_on_overflow */
1600 bfd_elf_generic_reloc
, /* special_function */
1601 "R_SH_FUNCDESC", /* name */
1602 FALSE
, /* partial_inplace */
1604 0xffffffff, /* dst_mask */
1605 FALSE
), /* pcrel_offset */
1607 /* Function descriptor to be filled in by the dynamic linker. */
1608 HOWTO (R_SH_FUNCDESC_VALUE
, /* type */
1610 2, /* size (0 = byte, 1 = short, 2 = long) */
1612 FALSE
, /* pc_relative */
1614 complain_overflow_signed
, /* complain_on_overflow */
1615 bfd_elf_generic_reloc
, /* special_function */
1616 "R_SH_FUNCDESC_VALUE", /* name */
1617 FALSE
, /* partial_inplace */
1619 0xffffffff, /* dst_mask */
1620 FALSE
), /* pcrel_offset */
1622 #ifdef INCLUDE_SHMEDIA
1657 /* Relocations for SHmedia code. None of these are partial_inplace or
1658 use the field being relocated (except R_SH_PT_16). */
1660 /* The assembler will generate this reloc before a block of SHmedia
1661 instructions. A section should be processed as assuming it contains
1662 data, unless this reloc is seen. Note that a block of SHcompact
1663 instructions are instead preceded by R_SH_CODE.
1664 This is currently not implemented, but should be used for SHmedia
1665 linker relaxation. */
1666 HOWTO (R_SH_SHMEDIA_CODE
, /* type */
1668 1, /* size (0 = byte, 1 = short, 2 = long) */
1670 FALSE
, /* pc_relative */
1672 complain_overflow_unsigned
, /* complain_on_overflow */
1673 sh_elf_ignore_reloc
, /* special_function */
1674 "R_SH_SHMEDIA_CODE", /* name */
1675 FALSE
, /* partial_inplace */
1678 FALSE
), /* pcrel_offset */
1680 /* The assembler will generate this reloc at a PTA or PTB instruction,
1681 and the linker checks the right type of target, or changes a PTA to a
1682 PTB, if the original insn was PT. */
1683 HOWTO (R_SH_PT_16
, /* type */
1685 2, /* size (0 = byte, 1 = short, 2 = long) */
1687 TRUE
, /* pc_relative */
1689 complain_overflow_signed
, /* complain_on_overflow */
1690 bfd_elf_generic_reloc
, /* special_function */
1691 "R_SH_PT_16", /* name */
1692 FALSE
, /* partial_inplace */
1694 0x3fffc00, /* dst_mask */
1695 TRUE
), /* pcrel_offset */
1697 /* Used in unexpanded MOVI. */
1698 HOWTO (R_SH_IMMS16
, /* type */
1700 2, /* size (0 = byte, 1 = short, 2 = long) */
1702 FALSE
, /* pc_relative */
1704 complain_overflow_signed
, /* complain_on_overflow */
1705 bfd_elf_generic_reloc
, /* special_function */
1706 "R_SH_IMMS16", /* name */
1707 FALSE
, /* partial_inplace */
1709 0x3fffc00, /* dst_mask */
1710 FALSE
), /* pcrel_offset */
1712 /* Used in SHORI. */
1713 HOWTO (R_SH_IMMU16
, /* type */
1715 2, /* size (0 = byte, 1 = short, 2 = long) */
1717 FALSE
, /* pc_relative */
1719 complain_overflow_unsigned
, /* complain_on_overflow */
1720 bfd_elf_generic_reloc
, /* special_function */
1721 "R_SH_IMMU16", /* name */
1722 FALSE
, /* partial_inplace */
1724 0x3fffc00, /* dst_mask */
1725 FALSE
), /* pcrel_offset */
1727 /* Used in MOVI and SHORI (x & 65536). */
1728 HOWTO (R_SH_IMM_LOW16
, /* type */
1730 2, /* size (0 = byte, 1 = short, 2 = long) */
1732 FALSE
, /* pc_relative */
1734 complain_overflow_dont
, /* complain_on_overflow */
1735 bfd_elf_generic_reloc
, /* special_function */
1736 "R_SH_IMM_LOW16", /* name */
1737 FALSE
, /* partial_inplace */
1739 0x3fffc00, /* dst_mask */
1740 FALSE
), /* pcrel_offset */
1742 /* Used in MOVI and SHORI ((x - $) & 65536). */
1743 HOWTO (R_SH_IMM_LOW16_PCREL
, /* type */
1745 2, /* size (0 = byte, 1 = short, 2 = long) */
1747 TRUE
, /* pc_relative */
1749 complain_overflow_dont
, /* complain_on_overflow */
1750 bfd_elf_generic_reloc
, /* special_function */
1751 "R_SH_IMM_LOW16_PCREL", /* name */
1752 FALSE
, /* partial_inplace */
1754 0x3fffc00, /* dst_mask */
1755 TRUE
), /* pcrel_offset */
1757 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1758 HOWTO (R_SH_IMM_MEDLOW16
, /* type */
1759 16, /* rightshift */
1760 2, /* size (0 = byte, 1 = short, 2 = long) */
1762 FALSE
, /* pc_relative */
1764 complain_overflow_dont
, /* complain_on_overflow */
1765 bfd_elf_generic_reloc
, /* special_function */
1766 "R_SH_IMM_MEDLOW16", /* name */
1767 FALSE
, /* partial_inplace */
1769 0x3fffc00, /* dst_mask */
1770 FALSE
), /* pcrel_offset */
1772 /* Used in MOVI and SHORI (((x - $) >> 16) & 65536). */
1773 HOWTO (R_SH_IMM_MEDLOW16_PCREL
, /* type */
1774 16, /* rightshift */
1775 2, /* size (0 = byte, 1 = short, 2 = long) */
1777 TRUE
, /* pc_relative */
1779 complain_overflow_dont
, /* complain_on_overflow */
1780 bfd_elf_generic_reloc
, /* special_function */
1781 "R_SH_IMM_MEDLOW16_PCREL", /* name */
1782 FALSE
, /* partial_inplace */
1784 0x3fffc00, /* dst_mask */
1785 TRUE
), /* pcrel_offset */
1787 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1788 HOWTO (R_SH_IMM_MEDHI16
, /* type */
1789 32, /* rightshift */
1790 2, /* size (0 = byte, 1 = short, 2 = long) */
1792 FALSE
, /* pc_relative */
1794 complain_overflow_dont
, /* complain_on_overflow */
1795 bfd_elf_generic_reloc
, /* special_function */
1796 "R_SH_IMM_MEDHI16", /* name */
1797 FALSE
, /* partial_inplace */
1799 0x3fffc00, /* dst_mask */
1800 FALSE
), /* pcrel_offset */
1802 /* Used in MOVI and SHORI (((x - $) >> 32) & 65536). */
1803 HOWTO (R_SH_IMM_MEDHI16_PCREL
, /* type */
1804 32, /* rightshift */
1805 2, /* size (0 = byte, 1 = short, 2 = long) */
1807 TRUE
, /* pc_relative */
1809 complain_overflow_dont
, /* complain_on_overflow */
1810 bfd_elf_generic_reloc
, /* special_function */
1811 "R_SH_IMM_MEDHI16_PCREL", /* name */
1812 FALSE
, /* partial_inplace */
1814 0x3fffc00, /* dst_mask */
1815 TRUE
), /* pcrel_offset */
1817 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1818 HOWTO (R_SH_IMM_HI16
, /* type */
1819 48, /* rightshift */
1820 2, /* size (0 = byte, 1 = short, 2 = long) */
1822 FALSE
, /* pc_relative */
1824 complain_overflow_dont
, /* complain_on_overflow */
1825 bfd_elf_generic_reloc
, /* special_function */
1826 "R_SH_IMM_HI16", /* name */
1827 FALSE
, /* partial_inplace */
1829 0x3fffc00, /* dst_mask */
1830 FALSE
), /* pcrel_offset */
1832 /* Used in MOVI and SHORI (((x - $) >> 48) & 65536). */
1833 HOWTO (R_SH_IMM_HI16_PCREL
, /* type */
1834 48, /* rightshift */
1835 2, /* size (0 = byte, 1 = short, 2 = long) */
1837 TRUE
, /* pc_relative */
1839 complain_overflow_dont
, /* complain_on_overflow */
1840 bfd_elf_generic_reloc
, /* special_function */
1841 "R_SH_IMM_HI16_PCREL", /* name */
1842 FALSE
, /* partial_inplace */
1844 0x3fffc00, /* dst_mask */
1845 TRUE
), /* pcrel_offset */
1847 /* For the .uaquad pseudo. */
1848 HOWTO (R_SH_64
, /* type */
1850 4, /* size (0 = byte, 1 = short, 2 = long) */
1852 FALSE
, /* pc_relative */
1854 complain_overflow_dont
, /* complain_on_overflow */
1855 bfd_elf_generic_reloc
, /* special_function */
1856 "R_SH_64", /* name */
1857 FALSE
, /* partial_inplace */
1859 ((bfd_vma
) 0) - 1, /* dst_mask */
1860 FALSE
), /* pcrel_offset */
1862 /* For the .uaquad pseudo, (x - $). */
1863 HOWTO (R_SH_64_PCREL
, /* type */
1864 48, /* rightshift */
1865 2, /* size (0 = byte, 1 = short, 2 = long) */
1867 TRUE
, /* pc_relative */
1869 complain_overflow_dont
, /* complain_on_overflow */
1870 bfd_elf_generic_reloc
, /* special_function */
1871 "R_SH_64_PCREL", /* name */
1872 FALSE
, /* partial_inplace */
1874 ((bfd_vma
) 0) - 1, /* dst_mask */
1875 TRUE
), /* pcrel_offset */
1879 #undef SH_SRC_MASK32