1 /* Copyright 2007 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 0, /* 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 */
1512 /* Relocations for SHmedia code. None of these are partial_inplace or
1513 use the field being relocated (except R_SH_PT_16). */
1515 /* The assembler will generate this reloc before a block of SHmedia
1516 instructions. A section should be processed as assuming it contains
1517 data, unless this reloc is seen. Note that a block of SHcompact
1518 instructions are instead preceded by R_SH_CODE.
1519 This is currently not implemented, but should be used for SHmedia
1520 linker relaxation. */
1521 HOWTO (R_SH_SHMEDIA_CODE
, /* type */
1523 1, /* size (0 = byte, 1 = short, 2 = long) */
1525 FALSE
, /* pc_relative */
1527 complain_overflow_unsigned
, /* complain_on_overflow */
1528 sh_elf_ignore_reloc
, /* special_function */
1529 "R_SH_SHMEDIA_CODE", /* name */
1530 FALSE
, /* partial_inplace */
1533 FALSE
), /* pcrel_offset */
1535 /* The assembler will generate this reloc at a PTA or PTB instruction,
1536 and the linker checks the right type of target, or changes a PTA to a
1537 PTB, if the original insn was PT. */
1538 HOWTO (R_SH_PT_16
, /* type */
1540 2, /* size (0 = byte, 1 = short, 2 = long) */
1542 TRUE
, /* pc_relative */
1544 complain_overflow_signed
, /* complain_on_overflow */
1545 bfd_elf_generic_reloc
, /* special_function */
1546 "R_SH_PT_16", /* name */
1547 FALSE
, /* partial_inplace */
1549 0x3fffc00, /* dst_mask */
1550 TRUE
), /* pcrel_offset */
1552 /* Used in unexpanded MOVI. */
1553 HOWTO (R_SH_IMMS16
, /* type */
1555 2, /* size (0 = byte, 1 = short, 2 = long) */
1557 FALSE
, /* pc_relative */
1559 complain_overflow_signed
, /* complain_on_overflow */
1560 bfd_elf_generic_reloc
, /* special_function */
1561 "R_SH_IMMS16", /* name */
1562 FALSE
, /* partial_inplace */
1564 0x3fffc00, /* dst_mask */
1565 FALSE
), /* pcrel_offset */
1567 /* Used in SHORI. */
1568 HOWTO (R_SH_IMMU16
, /* type */
1570 2, /* size (0 = byte, 1 = short, 2 = long) */
1572 FALSE
, /* pc_relative */
1574 complain_overflow_unsigned
, /* complain_on_overflow */
1575 bfd_elf_generic_reloc
, /* special_function */
1576 "R_SH_IMMU16", /* name */
1577 FALSE
, /* partial_inplace */
1579 0x3fffc00, /* dst_mask */
1580 FALSE
), /* pcrel_offset */
1582 /* Used in MOVI and SHORI (x & 65536). */
1583 HOWTO (R_SH_IMM_LOW16
, /* type */
1585 2, /* size (0 = byte, 1 = short, 2 = long) */
1587 FALSE
, /* pc_relative */
1589 complain_overflow_dont
, /* complain_on_overflow */
1590 bfd_elf_generic_reloc
, /* special_function */
1591 "R_SH_IMM_LOW16", /* name */
1592 FALSE
, /* partial_inplace */
1594 0x3fffc00, /* dst_mask */
1595 FALSE
), /* pcrel_offset */
1597 /* Used in MOVI and SHORI ((x - $) & 65536). */
1598 HOWTO (R_SH_IMM_LOW16_PCREL
, /* type */
1600 2, /* size (0 = byte, 1 = short, 2 = long) */
1602 TRUE
, /* pc_relative */
1604 complain_overflow_dont
, /* complain_on_overflow */
1605 bfd_elf_generic_reloc
, /* special_function */
1606 "R_SH_IMM_LOW16_PCREL", /* name */
1607 FALSE
, /* partial_inplace */
1609 0x3fffc00, /* dst_mask */
1610 TRUE
), /* pcrel_offset */
1612 /* Used in MOVI and SHORI ((x >> 16) & 65536). */
1613 HOWTO (R_SH_IMM_MEDLOW16
, /* type */
1614 16, /* rightshift */
1615 2, /* size (0 = byte, 1 = short, 2 = long) */
1617 FALSE
, /* pc_relative */
1619 complain_overflow_dont
, /* complain_on_overflow */
1620 bfd_elf_generic_reloc
, /* special_function */
1621 "R_SH_IMM_MEDLOW16", /* name */
1622 FALSE
, /* partial_inplace */
1624 0x3fffc00, /* dst_mask */
1625 FALSE
), /* pcrel_offset */
1627 /* Used in MOVI and SHORI (((x - $) >> 16) & 65536). */
1628 HOWTO (R_SH_IMM_MEDLOW16_PCREL
, /* type */
1629 16, /* rightshift */
1630 2, /* size (0 = byte, 1 = short, 2 = long) */
1632 TRUE
, /* pc_relative */
1634 complain_overflow_dont
, /* complain_on_overflow */
1635 bfd_elf_generic_reloc
, /* special_function */
1636 "R_SH_IMM_MEDLOW16_PCREL", /* name */
1637 FALSE
, /* partial_inplace */
1639 0x3fffc00, /* dst_mask */
1640 TRUE
), /* pcrel_offset */
1642 /* Used in MOVI and SHORI ((x >> 32) & 65536). */
1643 HOWTO (R_SH_IMM_MEDHI16
, /* type */
1644 32, /* rightshift */
1645 2, /* size (0 = byte, 1 = short, 2 = long) */
1647 FALSE
, /* pc_relative */
1649 complain_overflow_dont
, /* complain_on_overflow */
1650 bfd_elf_generic_reloc
, /* special_function */
1651 "R_SH_IMM_MEDHI16", /* name */
1652 FALSE
, /* partial_inplace */
1654 0x3fffc00, /* dst_mask */
1655 FALSE
), /* pcrel_offset */
1657 /* Used in MOVI and SHORI (((x - $) >> 32) & 65536). */
1658 HOWTO (R_SH_IMM_MEDHI16_PCREL
, /* type */
1659 32, /* rightshift */
1660 2, /* size (0 = byte, 1 = short, 2 = long) */
1662 TRUE
, /* pc_relative */
1664 complain_overflow_dont
, /* complain_on_overflow */
1665 bfd_elf_generic_reloc
, /* special_function */
1666 "R_SH_IMM_MEDHI16_PCREL", /* name */
1667 FALSE
, /* partial_inplace */
1669 0x3fffc00, /* dst_mask */
1670 TRUE
), /* pcrel_offset */
1672 /* Used in MOVI and SHORI ((x >> 48) & 65536). */
1673 HOWTO (R_SH_IMM_HI16
, /* type */
1674 48, /* rightshift */
1675 2, /* size (0 = byte, 1 = short, 2 = long) */
1677 FALSE
, /* pc_relative */
1679 complain_overflow_dont
, /* complain_on_overflow */
1680 bfd_elf_generic_reloc
, /* special_function */
1681 "R_SH_IMM_HI16", /* name */
1682 FALSE
, /* partial_inplace */
1684 0x3fffc00, /* dst_mask */
1685 FALSE
), /* pcrel_offset */
1687 /* Used in MOVI and SHORI (((x - $) >> 48) & 65536). */
1688 HOWTO (R_SH_IMM_HI16_PCREL
, /* type */
1689 48, /* rightshift */
1690 2, /* size (0 = byte, 1 = short, 2 = long) */
1692 TRUE
, /* pc_relative */
1694 complain_overflow_dont
, /* complain_on_overflow */
1695 bfd_elf_generic_reloc
, /* special_function */
1696 "R_SH_IMM_HI16_PCREL", /* name */
1697 FALSE
, /* partial_inplace */
1699 0x3fffc00, /* dst_mask */
1700 TRUE
), /* pcrel_offset */
1702 /* For the .uaquad pseudo. */
1703 HOWTO (R_SH_64
, /* type */
1705 4, /* size (0 = byte, 1 = short, 2 = long) */
1707 FALSE
, /* pc_relative */
1709 complain_overflow_dont
, /* complain_on_overflow */
1710 bfd_elf_generic_reloc
, /* special_function */
1711 "R_SH_64", /* name */
1712 FALSE
, /* partial_inplace */
1714 ((bfd_vma
) 0) - 1, /* dst_mask */
1715 FALSE
), /* pcrel_offset */
1717 /* For the .uaquad pseudo, (x - $). */
1718 HOWTO (R_SH_64_PCREL
, /* type */
1719 48, /* rightshift */
1720 2, /* size (0 = byte, 1 = short, 2 = long) */
1722 TRUE
, /* pc_relative */
1724 complain_overflow_dont
, /* complain_on_overflow */
1725 bfd_elf_generic_reloc
, /* special_function */
1726 "R_SH_64_PCREL", /* name */
1727 FALSE
, /* partial_inplace */
1729 ((bfd_vma
) 0) - 1, /* dst_mask */
1730 TRUE
), /* pcrel_offset */
1734 #undef SH_SRC_MASK32