1 /* Copyright (C) 2006-2019 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 */
588 HOWTO (R_SH_DIR16S
, /* type */
590 1, /* size (0 = byte, 1 = short, 2 = long) */
592 FALSE
, /* pc_relative */
594 complain_overflow_signed
, /* complain_on_overflow */
595 bfd_elf_generic_reloc
, /* special_function */
596 "R_SH_DIR16S", /* name */
597 FALSE
, /* partial_inplace */
599 0xffff, /* dst_mask */
600 FALSE
), /* pcrel_offset */
693 HOWTO (R_SH_TLS_GD_32
, /* type */
695 2, /* size (0 = byte, 1 = short, 2 = long) */
697 FALSE
, /* pc_relative */
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 */
709 2, /* size (0 = byte, 1 = short, 2 = long) */
711 FALSE
, /* pc_relative */
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 */
723 2, /* size (0 = byte, 1 = short, 2 = long) */
725 FALSE
, /* pc_relative */
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 */
737 2, /* size (0 = byte, 1 = short, 2 = long) */
739 FALSE
, /* pc_relative */
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 */
751 2, /* size (0 = byte, 1 = short, 2 = long) */
753 FALSE
, /* pc_relative */
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 */
765 2, /* size (0 = byte, 1 = short, 2 = long) */
767 FALSE
, /* pc_relative */
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 */
779 2, /* size (0 = byte, 1 = short, 2 = long) */
781 FALSE
, /* pc_relative */
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 */
793 2, /* size (0 = byte, 1 = short, 2 = long) */
795 FALSE
, /* pc_relative */
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 */
814 HOWTO (R_SH_GOT32
, /* type */
816 2, /* size (0 = byte, 1 = short, 2 = long) */
818 FALSE
, /* pc_relative */
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 */
830 2, /* size (0 = byte, 1 = short, 2 = long) */
832 TRUE
, /* pc_relative */
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 */
844 2, /* size (0 = byte, 1 = short, 2 = long) */
846 FALSE
, /* pc_relative */
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 */
858 2, /* size (0 = byte, 1 = short, 2 = long) */
860 FALSE
, /* pc_relative */
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 */
872 2, /* size (0 = byte, 1 = short, 2 = long) */
874 FALSE
, /* pc_relative */
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 */
886 2, /* size (0 = byte, 1 = short, 2 = long) */
888 FALSE
, /* pc_relative */
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 */
900 2, /* size (0 = byte, 1 = short, 2 = long) */
902 FALSE
, /* pc_relative */
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 */
914 2, /* size (0 = byte, 1 = short, 2 = long) */
916 TRUE
, /* pc_relative */
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 */
928 2, /* size (0 = byte, 1 = short, 2 = long) */
930 FALSE
, /* pc_relative */
932 complain_overflow_bitfield
, /* complain_on_overflow */
933 bfd_elf_generic_reloc
, /* */
934 "R_SH_GOTPLT32", /* name */
935 FALSE
, /* partial_inplace */
937 SH_SRC_MASK32
, /* src_mask */
938 0xffffffff, /* dst_mask */
939 FALSE
), /* pcrel_offset */
974 /* FDPIC-relative offset to a GOT entry, for movi20. */
975 HOWTO (R_SH_GOT20
, /* type */
977 2, /* size (0 = byte, 1 = short, 2 = long) */
979 FALSE
, /* pc_relative */
981 complain_overflow_signed
, /* complain_on_overflow */
982 bfd_elf_generic_reloc
, /* special_function */
983 "R_SH_GOT20", /* name */
984 FALSE
, /* partial_inplace */
986 0x00f0ffff, /* dst_mask */
987 FALSE
), /* pcrel_offset */
989 /* FDPIC-relative offset to a data object, for movi20. */
990 HOWTO (R_SH_GOTOFF20
, /* type */
992 2, /* size (0 = byte, 1 = short, 2 = long) */
994 FALSE
, /* pc_relative */
996 complain_overflow_signed
, /* complain_on_overflow */
997 bfd_elf_generic_reloc
, /* special_function */
998 "R_SH_GOTOFF20", /* name */
999 FALSE
, /* partial_inplace */
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 */
1007 2, /* size (0 = byte, 1 = short, 2 = long) */
1009 FALSE
, /* pc_relative */
1011 complain_overflow_signed
, /* complain_on_overflow */
1012 bfd_elf_generic_reloc
, /* special_function */
1013 "R_SH_GOTFUNCDESC", /* name */
1014 FALSE
, /* partial_inplace */
1016 0xffffffff, /* dst_mask */
1017 FALSE
), /* pcrel_offset */
1019 /* FDPIC-relative offset to a GOT entry for a function descriptor,
1021 HOWTO (R_SH_GOTFUNCDESC20
, /* type */
1023 2, /* size (0 = byte, 1 = short, 2 = long) */
1025 FALSE
, /* pc_relative */
1027 complain_overflow_signed
, /* complain_on_overflow */
1028 bfd_elf_generic_reloc
, /* special_function */
1029 "R_SH_GOTFUNCDESC20", /* name */
1030 FALSE
, /* partial_inplace */
1032 0x00f0ffff, /* dst_mask */
1033 FALSE
), /* pcrel_offset */
1035 /* FDPIC-relative offset to a function descriptor. */
1036 HOWTO (R_SH_GOTOFFFUNCDESC
, /* type */
1038 2, /* size (0 = byte, 1 = short, 2 = long) */
1040 FALSE
, /* pc_relative */
1042 complain_overflow_signed
, /* complain_on_overflow */
1043 bfd_elf_generic_reloc
, /* special_function */
1044 "R_SH_GOTOFFFUNCDESC", /* name */
1045 FALSE
, /* partial_inplace */
1047 0xffffffff, /* dst_mask */
1048 FALSE
), /* pcrel_offset */
1050 /* FDPIC-relative offset to a function descriptor, for movi20. */
1051 HOWTO (R_SH_GOTOFFFUNCDESC20
, /* type */
1053 2, /* size (0 = byte, 1 = short, 2 = long) */
1055 FALSE
, /* pc_relative */
1057 complain_overflow_signed
, /* complain_on_overflow */
1058 bfd_elf_generic_reloc
, /* special_function */
1059 "R_SH_GOTOFFFUNCDESC20", /* name */
1060 FALSE
, /* partial_inplace */
1062 0x00f0ffff, /* dst_mask */
1063 FALSE
), /* pcrel_offset */
1065 /* Address of an official function descriptor. */
1066 HOWTO (R_SH_FUNCDESC
, /* type */
1068 2, /* size (0 = byte, 1 = short, 2 = long) */
1070 FALSE
, /* pc_relative */
1072 complain_overflow_signed
, /* complain_on_overflow */
1073 bfd_elf_generic_reloc
, /* special_function */
1074 "R_SH_FUNCDESC", /* name */
1075 FALSE
, /* partial_inplace */
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 */
1083 2, /* size (0 = byte, 1 = short, 2 = long) */
1085 FALSE
, /* pc_relative */
1087 complain_overflow_signed
, /* complain_on_overflow */
1088 bfd_elf_generic_reloc
, /* special_function */
1089 "R_SH_FUNCDESC_VALUE", /* name */
1090 FALSE
, /* partial_inplace */
1092 0xffffffff, /* dst_mask */
1093 FALSE
), /* pcrel_offset */
1096 #undef SH_SRC_MASK32