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