1/* 32-bit ELF support for Nios II.
2   Copyright (C) 2012-2017 Free Software Foundation, Inc.
3   Contributed by Nigel Gray (ngray@altera.com).
4   Contributed by Mentor Graphics, Inc.
5
6   This file is part of BFD, the Binary File Descriptor library.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software
20   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21   MA 02110-1301, USA.  */
22
23/* This file handles Altera Nios II ELF targets.  */
24
25#include "sysdep.h"
26#include "bfd.h"
27#include "libbfd.h"
28#include "bfdlink.h"
29#include "genlink.h"
30#include "elf-bfd.h"
31#include "elf/nios2.h"
32#include "opcode/nios2.h"
33#include "elf32-nios2.h"
34
35/* Use RELA relocations.  */
36#ifndef USE_RELA
37#define USE_RELA
38#endif
39
40#ifdef USE_REL
41#undef USE_REL
42#endif
43
44/* Forward declarations.  */
45static bfd_reloc_status_type nios2_elf32_ignore_reloc
46  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47static bfd_reloc_status_type nios2_elf32_hi16_relocate
48  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49static bfd_reloc_status_type nios2_elf32_lo16_relocate
50  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51static bfd_reloc_status_type nios2_elf32_hiadj16_relocate
52  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53static bfd_reloc_status_type nios2_elf32_pcrel_lo16_relocate
54  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55static bfd_reloc_status_type nios2_elf32_pcrel_hiadj16_relocate
56  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57static bfd_reloc_status_type nios2_elf32_pcrel16_relocate
58  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
59static bfd_reloc_status_type nios2_elf32_call26_relocate
60  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
61static bfd_reloc_status_type nios2_elf32_gprel_relocate
62  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
63static bfd_reloc_status_type nios2_elf32_ujmp_relocate
64  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
65static bfd_reloc_status_type nios2_elf32_cjmp_relocate
66  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
67static bfd_reloc_status_type nios2_elf32_callr_relocate
68  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
69
70/* Target vector.  */
71extern const bfd_target nios2_elf32_le_vec;
72extern const bfd_target nios2_elf32_be_vec;
73
74/* Offset of tp and dtp pointers from start of TLS block.  */
75#define TP_OFFSET	0x7000
76#define DTP_OFFSET	0x8000
77
78/* The relocation tables used for SHT_REL sections.  There are separate
79   tables for R1 and R2 encodings.  */
80static reloc_howto_type elf_nios2_r1_howto_table_rel[] = {
81  /* No relocation.  */
82  HOWTO (R_NIOS2_NONE,		/* type */
83	 0,			/* rightshift */
84	 3,			/* size (0 = byte, 1 = short, 2 = long) */
85	 0,			/* bitsize */
86	 FALSE,			/* pc_relative */
87	 0,			/* bitpos */
88	 complain_overflow_dont,	/* complain_on_overflow */
89	 bfd_elf_generic_reloc,	/* special_function */
90	 "R_NIOS2_NONE",	/* name */
91	 FALSE,			/* partial_inplace */
92	 0,			/* src_mask */
93	 0,			/* dst_mask */
94	 FALSE),		/* pcrel_offset */
95
96  /* 16-bit signed immediate relocation.  */
97  HOWTO (R_NIOS2_S16,		/* type */
98	 0,			/* rightshift */
99	 2,			/* size (0 = byte, 1 = short, 2 = long) */
100	 16,			/* bitsize */
101	 FALSE,			/* pc_relative */
102	 6,			/* bitpos */
103	 complain_overflow_signed,	/* complain on overflow */
104	 bfd_elf_generic_reloc,	/* special function */
105	 "R_NIOS2_S16",		/* name */
106	 FALSE,			/* partial_inplace */
107	 0x003fffc0,		/* src_mask */
108	 0x003fffc0,		/* dest_mask */
109	 FALSE),		/* pcrel_offset */
110
111  /* 16-bit unsigned immediate relocation.  */
112  HOWTO (R_NIOS2_U16,		/* type */
113	 0,			/* rightshift */
114	 2,			/* size (0 = byte, 1 = short, 2 = long) */
115	 16,			/* bitsize */
116	 FALSE,			/* pc_relative */
117	 6,			/* bitpos */
118	 complain_overflow_unsigned,	/* complain on overflow */
119	 bfd_elf_generic_reloc,	/* special function */
120	 "R_NIOS2_U16",		/* name */
121	 FALSE,			/* partial_inplace */
122	 0x003fffc0,		/* src_mask */
123	 0x003fffc0,		/* dest_mask */
124	 FALSE),		/* pcrel_offset */
125
126  HOWTO (R_NIOS2_PCREL16,	/* type */
127	 0,			/* rightshift */
128	 2,			/* size (0 = byte, 1 = short, 2 = long) */
129	 16,			/* bitsize */
130	 TRUE,			/* pc_relative */
131	 6,			/* bitpos */
132	 complain_overflow_signed,	/* complain on overflow */
133	 nios2_elf32_pcrel16_relocate,	/* special function */
134	 "R_NIOS2_PCREL16",	/* name */
135	 FALSE,			/* partial_inplace */
136	 0x003fffc0,		/* src_mask */
137	 0x003fffc0,		/* dest_mask */
138	 TRUE),			/* pcrel_offset */
139
140  HOWTO (R_NIOS2_CALL26,	/* type */
141	 2,			/* rightshift */
142	 2,			/* size (0 = byte, 1 = short, 2 = long) */
143	 26,			/* bitsize */
144	 FALSE,			/* pc_relative */
145	 6,			/* bitpos */
146	 complain_overflow_dont,	/* complain on overflow */
147	 nios2_elf32_call26_relocate,	/* special function */
148	 "R_NIOS2_CALL26",	/* name */
149	 FALSE,			/* partial_inplace */
150	 0xffffffc0,		/* src_mask */
151	 0xffffffc0,		/* dst_mask */
152	 FALSE),		/* pcrel_offset */
153
154  HOWTO (R_NIOS2_IMM5,
155	 0,
156	 2,
157	 5,
158	 FALSE,
159	 6,
160	 complain_overflow_bitfield,
161	 bfd_elf_generic_reloc,
162	 "R_NIOS2_IMM5",
163	 FALSE,
164	 0x000007c0,
165	 0x000007c0,
166	 FALSE),
167
168  HOWTO (R_NIOS2_CACHE_OPX,
169	 0,
170	 2,
171	 5,
172	 FALSE,
173	 22,
174	 complain_overflow_bitfield,
175	 bfd_elf_generic_reloc,
176	 "R_NIOS2_CACHE_OPX",
177	 FALSE,
178	 0x07c00000,
179	 0x07c00000,
180	 FALSE),
181
182  HOWTO (R_NIOS2_IMM6,
183	 0,
184	 2,
185	 6,
186	 FALSE,
187	 6,
188	 complain_overflow_bitfield,
189	 bfd_elf_generic_reloc,
190	 "R_NIOS2_IMM6",
191	 FALSE,
192	 0x00000fc0,
193	 0x00000fc0,
194	 FALSE),
195
196  HOWTO (R_NIOS2_IMM8,
197	 0,
198	 2,
199	 8,
200	 FALSE,
201	 6,
202	 complain_overflow_bitfield,
203	 bfd_elf_generic_reloc,
204	 "R_NIOS2_IMM8",
205	 FALSE,
206	 0x00003fc0,
207	 0x00003fc0,
208	 FALSE),
209
210  HOWTO (R_NIOS2_HI16,
211	 0,
212	 2,
213	 32,
214	 FALSE,
215	 6,
216	 complain_overflow_dont,
217	 nios2_elf32_hi16_relocate,
218	 "R_NIOS2_HI16",
219	 FALSE,
220	 0x003fffc0,
221	 0x003fffc0,
222	 FALSE),
223
224  HOWTO (R_NIOS2_LO16,
225	 0,
226	 2,
227	 32,
228	 FALSE,
229	 6,
230	 complain_overflow_dont,
231	 nios2_elf32_lo16_relocate,
232	 "R_NIOS2_LO16",
233	 FALSE,
234	 0x003fffc0,
235	 0x003fffc0,
236	 FALSE),
237
238  HOWTO (R_NIOS2_HIADJ16,
239	 0,
240	 2,
241	 32,
242	 FALSE,
243	 6,
244	 complain_overflow_dont,
245	 nios2_elf32_hiadj16_relocate,
246	 "R_NIOS2_HIADJ16",
247	 FALSE,
248	 0x003fffc0,
249	 0x003fffc0,
250	 FALSE),
251
252  HOWTO (R_NIOS2_BFD_RELOC_32,
253	 0,
254	 2,			/* long */
255	 32,
256	 FALSE,
257	 0,
258	 complain_overflow_dont,
259	 bfd_elf_generic_reloc,
260	 "R_NIOS2_BFD_RELOC32",
261	 FALSE,
262	 0xffffffff,
263	 0xffffffff,
264	 FALSE),
265
266  HOWTO (R_NIOS2_BFD_RELOC_16,
267	 0,
268	 1,			/* short */
269	 16,
270	 FALSE,
271	 0,
272	 complain_overflow_bitfield,
273	 bfd_elf_generic_reloc,
274	 "R_NIOS2_BFD_RELOC16",
275	 FALSE,
276	 0x0000ffff,
277	 0x0000ffff,
278	 FALSE),
279
280  HOWTO (R_NIOS2_BFD_RELOC_8,
281	 0,
282	 0,			/* byte */
283	 8,
284	 FALSE,
285	 0,
286	 complain_overflow_bitfield,
287	 bfd_elf_generic_reloc,
288	 "R_NIOS2_BFD_RELOC8",
289	 FALSE,
290	 0x000000ff,
291	 0x000000ff,
292	 FALSE),
293
294  HOWTO (R_NIOS2_GPREL,
295	 0,
296	 2,
297	 32,
298	 FALSE,
299	 6,
300	 complain_overflow_dont,
301	 nios2_elf32_gprel_relocate,
302	 "R_NIOS2_GPREL",
303	 FALSE,
304	 0x003fffc0,
305	 0x003fffc0,
306	 FALSE),
307
308  HOWTO (R_NIOS2_GNU_VTINHERIT,
309	 0,
310	 2,			/* short */
311	 0,
312	 FALSE,
313	 0,
314	 complain_overflow_dont,
315	 NULL,
316	 "R_NIOS2_GNU_VTINHERIT",
317	 FALSE,
318	 0,
319	 0,
320	 FALSE),
321
322  HOWTO (R_NIOS2_GNU_VTENTRY,
323	 0,
324	 2,			/* byte */
325	 0,
326	 FALSE,
327	 0,
328	 complain_overflow_dont,
329	 _bfd_elf_rel_vtable_reloc_fn,
330	 "R_NIOS2_GNU_VTENTRY",
331	 FALSE,
332	 0,
333	 0,
334	 FALSE),
335
336  HOWTO (R_NIOS2_UJMP,
337	 0,
338	 2,
339	 32,
340	 FALSE,
341	 6,
342	 complain_overflow_dont,
343	 nios2_elf32_ujmp_relocate,
344	 "R_NIOS2_UJMP",
345	 FALSE,
346	 0x003fffc0,
347	 0x003fffc0,
348	 FALSE),
349
350  HOWTO (R_NIOS2_CJMP,
351	 0,
352	 2,
353	 32,
354	 FALSE,
355	 6,
356	 complain_overflow_dont,
357	 nios2_elf32_cjmp_relocate,
358	 "R_NIOS2_CJMP",
359	 FALSE,
360	 0x003fffc0,
361	 0x003fffc0,
362	 FALSE),
363
364  HOWTO (R_NIOS2_CALLR,
365	 0,
366	 2,
367	 32,
368	 FALSE,
369	 6,
370	 complain_overflow_dont,
371	 nios2_elf32_callr_relocate,
372	 "R_NIOS2_CALLR",
373	 FALSE,
374	 0x003fffc0,
375	 0x003fffc0,
376	 FALSE),
377
378  HOWTO (R_NIOS2_ALIGN,
379	 0,
380	 2,
381	 0,
382	 FALSE,
383	 0,
384	 complain_overflow_dont,
385	 nios2_elf32_ignore_reloc,
386	 "R_NIOS2_ALIGN",
387	 FALSE,
388	 0,
389	 0,
390	 TRUE),
391
392
393  HOWTO (R_NIOS2_GOT16,
394	 0,
395	 2,
396	 16,
397	 FALSE,
398	 6,
399	 complain_overflow_bitfield,
400	 bfd_elf_generic_reloc,
401	 "R_NIOS2_GOT16",
402	 FALSE,
403	 0x003fffc0,
404	 0x003fffc0,
405	 FALSE),
406
407  HOWTO (R_NIOS2_CALL16,
408	 0,
409	 2,
410	 16,
411	 FALSE,
412	 6,
413	 complain_overflow_bitfield,
414	 bfd_elf_generic_reloc,
415	 "R_NIOS2_CALL16",
416	 FALSE,
417	 0x003fffc0,
418	 0x003fffc0,
419	 FALSE),
420
421  HOWTO (R_NIOS2_GOTOFF_LO,
422	 0,
423	 2,
424	 16,
425	 FALSE,
426	 6,
427	 complain_overflow_dont,
428	 bfd_elf_generic_reloc,
429	 "R_NIOS2_GOTOFF_LO",
430	 FALSE,
431	 0x003fffc0,
432	 0x003fffc0,
433	 FALSE),
434
435  HOWTO (R_NIOS2_GOTOFF_HA,
436	 0,
437	 2,
438	 16,
439	 FALSE,
440	 6,
441	 complain_overflow_dont,
442	 bfd_elf_generic_reloc,
443	 "R_NIOS2_GOTOFF_HA",
444	 FALSE,
445	 0x003fffc0,
446	 0x003fffc0,
447	 FALSE),
448
449  HOWTO (R_NIOS2_PCREL_LO,
450	 0,
451	 2,
452	 16,
453	 TRUE,
454	 6,
455	 complain_overflow_dont,
456	 nios2_elf32_pcrel_lo16_relocate,
457	 "R_NIOS2_PCREL_LO",
458	 FALSE,
459	 0x003fffc0,
460	 0x003fffc0,
461	 TRUE),
462
463  HOWTO (R_NIOS2_PCREL_HA,
464	 0,
465	 2,
466	 16,
467	 FALSE, /* This is a PC-relative relocation, but we need to subtract
468		   PC ourselves before the HIADJ.  */
469	 6,
470	 complain_overflow_dont,
471	 nios2_elf32_pcrel_hiadj16_relocate,
472	 "R_NIOS2_PCREL_HA",
473	 FALSE,
474	 0x003fffc0,
475	 0x003fffc0,
476	 TRUE),
477
478  HOWTO (R_NIOS2_TLS_GD16,
479	 0,
480	 2,
481	 16,
482	 FALSE,
483	 6,
484	 complain_overflow_bitfield,
485	 bfd_elf_generic_reloc,
486	 "R_NIOS2_TLS_GD16",
487	 FALSE,
488	 0x003fffc0,
489	 0x003fffc0,
490	 FALSE),
491
492  HOWTO (R_NIOS2_TLS_LDM16,
493	 0,
494	 2,
495	 16,
496	 FALSE,
497	 6,
498	 complain_overflow_bitfield,
499	 bfd_elf_generic_reloc,
500	 "R_NIOS2_TLS_LDM16",
501	 FALSE,
502	 0x003fffc0,
503	 0x003fffc0,
504	 FALSE),
505
506  HOWTO (R_NIOS2_TLS_LDO16,
507	 0,
508	 2,
509	 16,
510	 FALSE,
511	 6,
512	 complain_overflow_bitfield,
513	 bfd_elf_generic_reloc,
514	 "R_NIOS2_TLS_LDO16",
515	 FALSE,
516	 0x003fffc0,
517	 0x003fffc0,
518	 FALSE),
519
520  HOWTO (R_NIOS2_TLS_IE16,
521	 0,
522	 2,
523	 16,
524	 FALSE,
525	 6,
526	 complain_overflow_bitfield,
527	 bfd_elf_generic_reloc,
528	 "R_NIOS2_TLS_IE16",
529	 FALSE,
530	 0x003fffc0,
531	 0x003fffc0,
532	 FALSE),
533
534  HOWTO (R_NIOS2_TLS_LE16,
535	 0,
536	 2,
537	 16,
538	 FALSE,
539	 6,
540	 complain_overflow_bitfield,
541	 bfd_elf_generic_reloc,
542	 "R_NIOS2_TLS_LE16",
543	 FALSE,
544	 0x003fffc0,
545	 0x003fffc0,
546	 FALSE),
547
548  HOWTO (R_NIOS2_TLS_DTPMOD,
549	 0,
550	 2,
551	 32,
552	 FALSE,
553	 0,
554	 complain_overflow_dont,
555	 bfd_elf_generic_reloc,
556	 "R_NIOS2_TLS_DTPMOD",
557	 FALSE,
558	 0xffffffff,
559	 0xffffffff,
560	 FALSE),
561
562  HOWTO (R_NIOS2_TLS_DTPREL,
563	 0,
564	 2,
565	 32,
566	 FALSE,
567	 0,
568	 complain_overflow_dont,
569	 bfd_elf_generic_reloc,
570	 "R_NIOS2_TLS_DTPREL",
571	 FALSE,
572	 0xffffffff,
573	 0xffffffff,
574	 FALSE),
575
576  HOWTO (R_NIOS2_TLS_TPREL,
577	 0,
578	 2,
579	 32,
580	 FALSE,
581	 0,
582	 complain_overflow_dont,
583	 bfd_elf_generic_reloc,
584	 "R_NIOS2_TLS_TPREL",
585	 FALSE,
586	 0xffffffff,
587	 0xffffffff,
588	 FALSE),
589
590  HOWTO (R_NIOS2_COPY,
591	 0,
592	 2,
593	 32,
594	 FALSE,
595	 0,
596	 complain_overflow_dont,
597	 bfd_elf_generic_reloc,
598	 "R_NIOS2_COPY",
599	 FALSE,
600	 0,
601	 0,
602	 FALSE),
603
604  HOWTO (R_NIOS2_GLOB_DAT,
605	 0,
606	 2,
607	 32,
608	 FALSE,
609	 0,
610	 complain_overflow_dont,
611	 bfd_elf_generic_reloc,
612	 "R_NIOS2_GLOB_DAT",
613	 FALSE,
614	 0xffffffff,
615	 0xffffffff,
616	 FALSE),
617
618  HOWTO (R_NIOS2_JUMP_SLOT,
619	 0,
620	 2,
621	 32,
622	 FALSE,
623	 0,
624	 complain_overflow_dont,
625	 bfd_elf_generic_reloc,
626	 "R_NIOS2_JUMP_SLOT",
627	 FALSE,
628	 0xffffffff,
629	 0xffffffff,
630	 FALSE),
631
632  HOWTO (R_NIOS2_RELATIVE,
633	 0,
634	 2,
635	 32,
636	 FALSE,
637	 0,
638	 complain_overflow_dont,
639	 bfd_elf_generic_reloc,
640	 "R_NIOS2_RELATIVE",
641	 FALSE,
642	 0xffffffff,
643	 0xffffffff,
644	 FALSE),
645
646  HOWTO (R_NIOS2_GOTOFF,
647	 0,
648	 2,
649	 32,
650	 FALSE,
651	 0,
652	 complain_overflow_dont,
653	 bfd_elf_generic_reloc,
654	 "R_NIOS2_GOTOFF",
655	 FALSE,
656	 0xffffffff,
657	 0xffffffff,
658	 FALSE),
659
660  HOWTO (R_NIOS2_CALL26_NOAT,	/* type */
661	 2,			/* rightshift */
662	 2,			/* size (0 = byte, 1 = short, 2 = long) */
663	 26,			/* bitsize */
664	 FALSE,			/* pc_relative */
665	 6,			/* bitpos */
666	 complain_overflow_dont,	/* complain on overflow */
667	 nios2_elf32_call26_relocate,	/* special function */
668	 "R_NIOS2_CALL26_NOAT",	/* name */
669	 FALSE,			/* partial_inplace */
670	 0xffffffc0,		/* src_mask */
671	 0xffffffc0,		/* dst_mask */
672	 FALSE),		/* pcrel_offset */
673
674  HOWTO (R_NIOS2_GOT_LO,
675	 0,
676	 2,
677	 16,
678	 FALSE,
679	 6,
680	 complain_overflow_dont,
681	 bfd_elf_generic_reloc,
682	 "R_NIOS2_GOT_LO",
683	 FALSE,
684	 0x003fffc0,
685	 0x003fffc0,
686	 FALSE),
687
688  HOWTO (R_NIOS2_GOT_HA,
689	 0,
690	 2,
691	 16,
692	 FALSE,
693	 6,
694	 complain_overflow_dont,
695	 bfd_elf_generic_reloc,
696	 "R_NIOS2_GOT_HA",
697	 FALSE,
698	 0x003fffc0,
699	 0x003fffc0,
700	 FALSE),
701
702  HOWTO (R_NIOS2_CALL_LO,
703	 0,
704	 2,
705	 16,
706	 FALSE,
707	 6,
708	 complain_overflow_dont,
709	 bfd_elf_generic_reloc,
710	 "R_NIOS2_CALL_LO",
711	 FALSE,
712	 0x003fffc0,
713	 0x003fffc0,
714	 FALSE),
715
716  HOWTO (R_NIOS2_CALL_HA,
717	 0,
718	 2,
719	 16,
720	 FALSE,
721	 6,
722	 complain_overflow_dont,
723	 bfd_elf_generic_reloc,
724	 "R_NIOS2_CALL_HA",
725	 FALSE,
726	 0x003fffc0,
727	 0x003fffc0,
728	 FALSE),
729
730/* Add other relocations here.  */
731};
732
733static reloc_howto_type elf_nios2_r2_howto_table_rel[] = {
734  /* No relocation.  */
735  HOWTO (R_NIOS2_NONE,		/* type */
736	 0,			/* rightshift */
737	 0,			/* size (0 = byte, 1 = short, 2 = long) */
738	 0,			/* bitsize */
739	 FALSE,			/* pc_relative */
740	 0,			/* bitpos */
741	 complain_overflow_dont,	/* complain_on_overflow */
742	 bfd_elf_generic_reloc,	/* special_function */
743	 "R_NIOS2_NONE",	/* name */
744	 FALSE,			/* partial_inplace */
745	 0,			/* src_mask */
746	 0,			/* dst_mask */
747	 FALSE),		/* pcrel_offset */
748
749  /* 16-bit signed immediate relocation.  */
750  HOWTO (R_NIOS2_S16,		/* type */
751	 0,			/* rightshift */
752	 2,			/* size (0 = byte, 1 = short, 2 = long) */
753	 16,			/* bitsize */
754	 FALSE,			/* pc_relative */
755	 16,			/* bitpos */
756	 complain_overflow_signed,	/* complain on overflow */
757	 bfd_elf_generic_reloc,	/* special function */
758	 "R_NIOS2_S16",		/* name */
759	 FALSE,			/* partial_inplace */
760	 0xffff0000,		/* src_mask */
761	 0xffff0000,		/* dest_mask */
762	 FALSE),		/* pcrel_offset */
763
764  /* 16-bit unsigned immediate relocation.  */
765  HOWTO (R_NIOS2_U16,		/* type */
766	 0,			/* rightshift */
767	 2,			/* size (0 = byte, 1 = short, 2 = long) */
768	 16,			/* bitsize */
769	 FALSE,			/* pc_relative */
770	 16,			/* bitpos */
771	 complain_overflow_unsigned,	/* complain on overflow */
772	 bfd_elf_generic_reloc,	/* special function */
773	 "R_NIOS2_U16",		/* name */
774	 FALSE,			/* partial_inplace */
775	 0xffff0000,		/* src_mask */
776	 0xffff0000,		/* dest_mask */
777	 FALSE),		/* pcrel_offset */
778
779  HOWTO (R_NIOS2_PCREL16,	/* type */
780	 0,			/* rightshift */
781	 2,			/* size (0 = byte, 1 = short, 2 = long) */
782	 16,			/* bitsize */
783	 TRUE,			/* pc_relative */
784	 16,			/* bitpos */
785	 complain_overflow_signed,	/* complain on overflow */
786	 nios2_elf32_pcrel16_relocate,	/* special function */
787	 "R_NIOS2_PCREL16",	/* name */
788	 FALSE,			/* partial_inplace */
789	 0xffff0000,		/* src_mask */
790	 0xffff0000,		/* dest_mask */
791	 TRUE),			/* pcrel_offset */
792
793  HOWTO (R_NIOS2_CALL26,	/* type */
794	 2,			/* rightshift */
795	 2,			/* size (0 = byte, 1 = short, 2 = long) */
796	 26,			/* bitsize */
797	 FALSE,			/* pc_relative */
798	 6,			/* bitpos */
799	 complain_overflow_dont,	/* complain on overflow */
800	 nios2_elf32_call26_relocate,	/* special function */
801	 "R_NIOS2_CALL26",	/* name */
802	 FALSE,			/* partial_inplace */
803	 0xffffffc0,		/* src_mask */
804	 0xffffffc0,		/* dst_mask */
805	 FALSE),		/* pcrel_offset */
806
807  HOWTO (R_NIOS2_IMM5,
808	 0,
809	 2,
810	 5,
811	 FALSE,
812	 21,
813	 complain_overflow_bitfield,
814	 bfd_elf_generic_reloc,
815	 "R_NIOS2_IMM5",
816	 FALSE,
817	 0x03e00000,
818	 0x03e00000,
819	 FALSE),
820
821  HOWTO (R_NIOS2_CACHE_OPX,
822	 0,
823	 2,
824	 5,
825	 FALSE,
826	 11,
827	 complain_overflow_bitfield,
828	 bfd_elf_generic_reloc,
829	 "R_NIOS2_CACHE_OPX",
830	 FALSE,
831	 0x0000f800,
832	 0x0000f800,
833	 FALSE),
834
835  HOWTO (R_NIOS2_IMM6,
836	 0,
837	 2,
838	 6,
839	 FALSE,
840	 26,
841	 complain_overflow_bitfield,
842	 bfd_elf_generic_reloc,
843	 "R_NIOS2_IMM6",
844	 FALSE,
845	 0xfc000000,
846	 0xfc000000,
847	 FALSE),
848
849  HOWTO (R_NIOS2_IMM8,
850	 0,
851	 2,
852	 8,
853	 FALSE,
854	 24,
855	 complain_overflow_bitfield,
856	 bfd_elf_generic_reloc,
857	 "R_NIOS2_IMM8",
858	 FALSE,
859	 0xff000000,
860	 0xff000000,
861	 FALSE),
862
863  HOWTO (R_NIOS2_HI16,
864	 0,
865	 2,
866	 32,
867	 FALSE,
868	 16,
869	 complain_overflow_dont,
870	 nios2_elf32_hi16_relocate,
871	 "R_NIOS2_HI16",
872	 FALSE,
873	 0xffff0000,
874	 0xffff0000,
875	 FALSE),
876
877  HOWTO (R_NIOS2_LO16,
878	 0,
879	 2,
880	 32,
881	 FALSE,
882	 16,
883	 complain_overflow_dont,
884	 nios2_elf32_lo16_relocate,
885	 "R_NIOS2_LO16",
886	 FALSE,
887	 0xffff0000,
888	 0xffff0000,
889	 FALSE),
890
891  HOWTO (R_NIOS2_HIADJ16,
892	 0,
893	 2,
894	 32,
895	 FALSE,
896	 16,
897	 complain_overflow_dont,
898	 nios2_elf32_hiadj16_relocate,
899	 "R_NIOS2_HIADJ16",
900	 FALSE,
901	 0xffff0000,
902	 0xffff0000,
903	 FALSE),
904
905  HOWTO (R_NIOS2_BFD_RELOC_32,
906	 0,
907	 2,			/* long */
908	 32,
909	 FALSE,
910	 0,
911	 complain_overflow_dont,
912	 bfd_elf_generic_reloc,
913	 "R_NIOS2_BFD_RELOC32",
914	 FALSE,
915	 0xffffffff,
916	 0xffffffff,
917	 FALSE),
918
919  HOWTO (R_NIOS2_BFD_RELOC_16,
920	 0,
921	 1,			/* short */
922	 16,
923	 FALSE,
924	 0,
925	 complain_overflow_bitfield,
926	 bfd_elf_generic_reloc,
927	 "R_NIOS2_BFD_RELOC16",
928	 FALSE,
929	 0x0000ffff,
930	 0x0000ffff,
931	 FALSE),
932
933  HOWTO (R_NIOS2_BFD_RELOC_8,
934	 0,
935	 0,			/* byte */
936	 8,
937	 FALSE,
938	 0,
939	 complain_overflow_bitfield,
940	 bfd_elf_generic_reloc,
941	 "R_NIOS2_BFD_RELOC8",
942	 FALSE,
943	 0x000000ff,
944	 0x000000ff,
945	 FALSE),
946
947  HOWTO (R_NIOS2_GPREL,
948	 0,
949	 2,
950	 32,
951	 FALSE,
952	 16,
953	 complain_overflow_dont,
954	 nios2_elf32_gprel_relocate,
955	 "R_NIOS2_GPREL",
956	 FALSE,
957	 0xffff0000,
958	 0xffff0000,
959	 FALSE),
960
961  HOWTO (R_NIOS2_GNU_VTINHERIT,
962	 0,
963	 2,			/* short */
964	 0,
965	 FALSE,
966	 0,
967	 complain_overflow_dont,
968	 NULL,
969	 "R_NIOS2_GNU_VTINHERIT",
970	 FALSE,
971	 0,
972	 0,
973	 FALSE),
974
975  HOWTO (R_NIOS2_GNU_VTENTRY,
976	 0,
977	 2,			/* byte */
978	 0,
979	 FALSE,
980	 0,
981	 complain_overflow_dont,
982	 _bfd_elf_rel_vtable_reloc_fn,
983	 "R_NIOS2_GNU_VTENTRY",
984	 FALSE,
985	 0,
986	 0,
987	 FALSE),
988
989  HOWTO (R_NIOS2_UJMP,
990	 0,
991	 2,
992	 32,
993	 FALSE,
994	 16,
995	 complain_overflow_dont,
996	 nios2_elf32_ujmp_relocate,
997	 "R_NIOS2_UJMP",
998	 FALSE,
999	 0xffff0000,
1000	 0xffff0000,
1001	 FALSE),
1002
1003  HOWTO (R_NIOS2_CJMP,
1004	 0,
1005	 2,
1006	 32,
1007	 FALSE,
1008	 16,
1009	 complain_overflow_dont,
1010	 nios2_elf32_cjmp_relocate,
1011	 "R_NIOS2_CJMP",
1012	 FALSE,
1013	 0xffff0000,
1014	 0xffff0000,
1015	 FALSE),
1016
1017  HOWTO (R_NIOS2_CALLR,
1018	 0,
1019	 2,
1020	 32,
1021	 FALSE,
1022	 16,
1023	 complain_overflow_dont,
1024	 nios2_elf32_callr_relocate,
1025	 "R_NIOS2_CALLR",
1026	 FALSE,
1027	 0xffff0000,
1028	 0xffff0000,
1029	 FALSE),
1030
1031  HOWTO (R_NIOS2_ALIGN,
1032	 0,
1033	 2,
1034	 0,
1035	 FALSE,
1036	 0,
1037	 complain_overflow_dont,
1038	 nios2_elf32_ignore_reloc,
1039	 "R_NIOS2_ALIGN",
1040	 FALSE,
1041	 0,
1042	 0,
1043	 TRUE),
1044
1045  HOWTO (R_NIOS2_GOT16,
1046	 0,
1047	 2,
1048	 16,
1049	 FALSE,
1050	 16,
1051	 complain_overflow_bitfield,
1052	 bfd_elf_generic_reloc,
1053	 "R_NIOS2_GOT16",
1054	 FALSE,
1055	 0xffff0000,
1056	 0xffff0000,
1057	 FALSE),
1058
1059  HOWTO (R_NIOS2_CALL16,
1060	 0,
1061	 2,
1062	 16,
1063	 FALSE,
1064	 16,
1065	 complain_overflow_bitfield,
1066	 bfd_elf_generic_reloc,
1067	 "R_NIOS2_CALL16",
1068	 FALSE,
1069	 0xffff0000,
1070	 0xffff0000,
1071	 FALSE),
1072
1073  HOWTO (R_NIOS2_GOTOFF_LO,
1074	 0,
1075	 2,
1076	 16,
1077	 FALSE,
1078	 16,
1079	 complain_overflow_dont,
1080	 bfd_elf_generic_reloc,
1081	 "R_NIOS2_GOTOFF_LO",
1082	 FALSE,
1083	 0xffff0000,
1084	 0xffff0000,
1085	 FALSE),
1086
1087  HOWTO (R_NIOS2_GOTOFF_HA,
1088	 0,
1089	 2,
1090	 16,
1091	 FALSE,
1092	 16,
1093	 complain_overflow_dont,
1094	 bfd_elf_generic_reloc,
1095	 "R_NIOS2_GOTOFF_HA",
1096	 FALSE,
1097	 0xffff0000,
1098	 0xffff0000,
1099	 FALSE),
1100
1101  HOWTO (R_NIOS2_PCREL_LO,
1102	 0,
1103	 2,
1104	 16,
1105	 TRUE,
1106	 16,
1107	 complain_overflow_dont,
1108	 nios2_elf32_pcrel_lo16_relocate,
1109	 "R_NIOS2_PCREL_LO",
1110	 FALSE,
1111	 0xffff0000,
1112	 0xffff0000,
1113	 TRUE),
1114
1115  HOWTO (R_NIOS2_PCREL_HA,
1116	 0,
1117	 2,
1118	 16,
1119	 FALSE, /* This is a PC-relative relocation, but we need to subtract
1120		   PC ourselves before the HIADJ.  */
1121	 16,
1122	 complain_overflow_dont,
1123	 nios2_elf32_pcrel_hiadj16_relocate,
1124	 "R_NIOS2_PCREL_HA",
1125	 FALSE,
1126	 0xffff0000,
1127	 0xffff0000,
1128	 TRUE),
1129
1130  HOWTO (R_NIOS2_TLS_GD16,
1131	 0,
1132	 2,
1133	 16,
1134	 FALSE,
1135	 16,
1136	 complain_overflow_bitfield,
1137	 bfd_elf_generic_reloc,
1138	 "R_NIOS2_TLS_GD16",
1139	 FALSE,
1140	 0xffff0000,
1141	 0xffff0000,
1142	 FALSE),
1143
1144  HOWTO (R_NIOS2_TLS_LDM16,
1145	 0,
1146	 2,
1147	 16,
1148	 FALSE,
1149	 16,
1150	 complain_overflow_bitfield,
1151	 bfd_elf_generic_reloc,
1152	 "R_NIOS2_TLS_LDM16",
1153	 FALSE,
1154	 0xffff0000,
1155	 0xffff0000,
1156	 FALSE),
1157
1158  HOWTO (R_NIOS2_TLS_LDO16,
1159	 0,
1160	 2,
1161	 16,
1162	 FALSE,
1163	 16,
1164	 complain_overflow_bitfield,
1165	 bfd_elf_generic_reloc,
1166	 "R_NIOS2_TLS_LDO16",
1167	 FALSE,
1168	 0xffff0000,
1169	 0xffff0000,
1170	 FALSE),
1171
1172  HOWTO (R_NIOS2_TLS_IE16,
1173	 0,
1174	 2,
1175	 16,
1176	 FALSE,
1177	 16,
1178	 complain_overflow_bitfield,
1179	 bfd_elf_generic_reloc,
1180	 "R_NIOS2_TLS_IE16",
1181	 FALSE,
1182	 0xffff0000,
1183	 0xffff0000,
1184	 FALSE),
1185
1186  HOWTO (R_NIOS2_TLS_LE16,
1187	 0,
1188	 2,
1189	 16,
1190	 FALSE,
1191	 16,
1192	 complain_overflow_bitfield,
1193	 bfd_elf_generic_reloc,
1194	 "R_NIOS2_TLS_LE16",
1195	 FALSE,
1196	 0xffff0000,
1197	 0xffff0000,
1198	 FALSE),
1199
1200  HOWTO (R_NIOS2_TLS_DTPMOD,
1201	 0,
1202	 2,
1203	 32,
1204	 FALSE,
1205	 0,
1206	 complain_overflow_dont,
1207	 bfd_elf_generic_reloc,
1208	 "R_NIOS2_TLS_DTPMOD",
1209	 FALSE,
1210	 0xffffffff,
1211	 0xffffffff,
1212	 FALSE),
1213
1214  HOWTO (R_NIOS2_TLS_DTPREL,
1215	 0,
1216	 2,
1217	 32,
1218	 FALSE,
1219	 0,
1220	 complain_overflow_dont,
1221	 bfd_elf_generic_reloc,
1222	 "R_NIOS2_TLS_DTPREL",
1223	 FALSE,
1224	 0xffffffff,
1225	 0xffffffff,
1226	 FALSE),
1227
1228  HOWTO (R_NIOS2_TLS_TPREL,
1229	 0,
1230	 2,
1231	 32,
1232	 FALSE,
1233	 0,
1234	 complain_overflow_dont,
1235	 bfd_elf_generic_reloc,
1236	 "R_NIOS2_TLS_TPREL",
1237	 FALSE,
1238	 0xffffffff,
1239	 0xffffffff,
1240	 FALSE),
1241
1242  HOWTO (R_NIOS2_COPY,
1243	 0,
1244	 2,
1245	 32,
1246	 FALSE,
1247	 0,
1248	 complain_overflow_dont,
1249	 bfd_elf_generic_reloc,
1250	 "R_NIOS2_COPY",
1251	 FALSE,
1252	 0,
1253	 0,
1254	 FALSE),
1255
1256  HOWTO (R_NIOS2_GLOB_DAT,
1257	 0,
1258	 2,
1259	 32,
1260	 FALSE,
1261	 0,
1262	 complain_overflow_dont,
1263	 bfd_elf_generic_reloc,
1264	 "R_NIOS2_GLOB_DAT",
1265	 FALSE,
1266	 0xffffffff,
1267	 0xffffffff,
1268	 FALSE),
1269
1270  HOWTO (R_NIOS2_JUMP_SLOT,
1271	 0,
1272	 2,
1273	 32,
1274	 FALSE,
1275	 0,
1276	 complain_overflow_dont,
1277	 bfd_elf_generic_reloc,
1278	 "R_NIOS2_JUMP_SLOT",
1279	 FALSE,
1280	 0xffffffff,
1281	 0xffffffff,
1282	 FALSE),
1283
1284  HOWTO (R_NIOS2_RELATIVE,
1285	 0,
1286	 2,
1287	 32,
1288	 FALSE,
1289	 0,
1290	 complain_overflow_dont,
1291	 bfd_elf_generic_reloc,
1292	 "R_NIOS2_RELATIVE",
1293	 FALSE,
1294	 0xffffffff,
1295	 0xffffffff,
1296	 FALSE),
1297
1298  HOWTO (R_NIOS2_GOTOFF,
1299	 0,
1300	 2,
1301	 32,
1302	 FALSE,
1303	 0,
1304	 complain_overflow_dont,
1305	 bfd_elf_generic_reloc,
1306	 "R_NIOS2_GOTOFF",
1307	 FALSE,
1308	 0xffffffff,
1309	 0xffffffff,
1310	 FALSE),
1311
1312  HOWTO (R_NIOS2_CALL26_NOAT,	/* type */
1313	 2,			/* rightshift */
1314	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1315	 26,			/* bitsize */
1316	 FALSE,			/* pc_relative */
1317	 6,			/* bitpos */
1318	 complain_overflow_dont,	/* complain on overflow */
1319	 nios2_elf32_call26_relocate,	/* special function */
1320	 "R_NIOS2_CALL26_NOAT",	/* name */
1321	 FALSE,			/* partial_inplace */
1322	 0xffffffc0,		/* src_mask */
1323	 0xffffffc0,		/* dst_mask */
1324	 FALSE),		/* pcrel_offset */
1325
1326  HOWTO (R_NIOS2_GOT_LO,
1327	 0,
1328	 2,
1329	 16,
1330	 FALSE,
1331	 16,
1332	 complain_overflow_dont,
1333	 bfd_elf_generic_reloc,
1334	 "R_NIOS2_GOT_LO",
1335	 FALSE,
1336	 0xffff0000,
1337	 0xffff0000,
1338	 FALSE),
1339
1340  HOWTO (R_NIOS2_GOT_HA,
1341	 0,
1342	 2,
1343	 16,
1344	 FALSE,
1345	 16,
1346	 complain_overflow_dont,
1347	 bfd_elf_generic_reloc,
1348	 "R_NIOS2_GOT_HA",
1349	 FALSE,
1350	 0xffff0000,
1351	 0xffff0000,
1352	 FALSE),
1353
1354  HOWTO (R_NIOS2_CALL_LO,
1355	 0,
1356	 2,
1357	 16,
1358	 FALSE,
1359	 16,
1360	 complain_overflow_dont,
1361	 bfd_elf_generic_reloc,
1362	 "R_NIOS2_CALL_LO",
1363	 FALSE,
1364	 0xffff0000,
1365	 0xffff0000,
1366	 FALSE),
1367
1368  HOWTO (R_NIOS2_CALL_HA,
1369	 0,
1370	 2,
1371	 16,
1372	 FALSE,
1373	 16,
1374	 complain_overflow_dont,
1375	 bfd_elf_generic_reloc,
1376	 "R_NIOS2_CALL_HA",
1377	 FALSE,
1378	 0xffff0000,
1379	 0xffff0000,
1380	 FALSE),
1381
1382  HOWTO (R_NIOS2_R2_S12,
1383	 0,
1384	 2,
1385	 12,
1386	 FALSE,
1387	 16,
1388	 complain_overflow_signed,
1389	 bfd_elf_generic_reloc,
1390	 "R_NIOS2_R2_S12",
1391	 FALSE,
1392	 0x0fff0000,
1393	 0x0fff0000,
1394	 FALSE),
1395
1396  HOWTO (R_NIOS2_R2_I10_1_PCREL,
1397	 1,
1398	 1,
1399	 10,
1400	 TRUE,
1401	 6,
1402	 complain_overflow_signed,
1403	 bfd_elf_generic_reloc, 	/* FIXME? */
1404	 "R_NIOS2_R2_I10_1_PCREL",
1405	 FALSE,
1406	 0xffc0,
1407	 0xffc0,
1408	 TRUE),
1409
1410  HOWTO (R_NIOS2_R2_T1I7_1_PCREL,
1411	 1,
1412	 1,
1413	 7,
1414	 TRUE,
1415	 9,
1416	 complain_overflow_signed,
1417	 bfd_elf_generic_reloc,		/* FIXME? */
1418	 "R_NIOS2_R2_T1I7_1_PCREL",
1419	 FALSE,
1420	 0xfe00,
1421	 0xfe00,
1422	 TRUE),
1423
1424  HOWTO (R_NIOS2_R2_T1I7_2,
1425	 2,
1426	 1,
1427	 7,
1428	 FALSE,
1429	 9,
1430	 complain_overflow_unsigned,
1431	 bfd_elf_generic_reloc,
1432	 "R_NIOS2_R2_T1I7_2",
1433	 FALSE,
1434	 0xfe00,
1435	 0xfe00,
1436	 FALSE),
1437
1438  HOWTO (R_NIOS2_R2_T2I4,
1439	 0,
1440	 1,
1441	 4,
1442	 FALSE,
1443	 12,
1444	 complain_overflow_unsigned,
1445	 bfd_elf_generic_reloc,
1446	 "R_NIOS2_R2_T2I4",
1447	 FALSE,
1448	 0xf000,
1449	 0xf000,
1450	 FALSE),
1451
1452  HOWTO (R_NIOS2_R2_T2I4_1,
1453	 1,
1454	 1,
1455	 4,
1456	 FALSE,
1457	 12,
1458	 complain_overflow_unsigned,
1459	 bfd_elf_generic_reloc,
1460	 "R_NIOS2_R2_T2I4_1",
1461	 FALSE,
1462	 0xf000,
1463	 0xf000,
1464	 FALSE),
1465
1466  HOWTO (R_NIOS2_R2_T2I4_2,
1467	 2,
1468	 1,
1469	 4,
1470	 FALSE,
1471	 12,
1472	 complain_overflow_unsigned,
1473	 bfd_elf_generic_reloc,
1474	 "R_NIOS2_R2_T2I4_2",
1475	 FALSE,
1476	 0xf000,
1477	 0xf000,
1478	 FALSE),
1479
1480  HOWTO (R_NIOS2_R2_X1I7_2,
1481	 2,
1482	 1,
1483	 7,
1484	 FALSE,
1485	 6,
1486	 complain_overflow_unsigned,
1487	 bfd_elf_generic_reloc,
1488	 "R_NIOS2_R2_X1I7_2",
1489	 FALSE,
1490	 0x1fc0,
1491	 0x1fc0,
1492	 FALSE),
1493
1494  HOWTO (R_NIOS2_R2_X2L5,
1495	 0,
1496	 1,
1497	 5,
1498	 FALSE,
1499	 6,
1500	 complain_overflow_unsigned,
1501	 bfd_elf_generic_reloc,
1502	 "R_NIOS2_R2_X2L5",
1503	 FALSE,
1504	 0x07c0,
1505	 0x07c0,
1506	 FALSE),
1507
1508  HOWTO (R_NIOS2_R2_F1I5_2,
1509	 2,
1510	 1,
1511	 5,
1512	 FALSE,
1513	 6,
1514	 complain_overflow_unsigned,
1515	 bfd_elf_generic_reloc,
1516	 "R_NIOS2_R2_F1L5_2",
1517	 FALSE,
1518	 0x07c0,
1519	 0x07c0,
1520	 FALSE),
1521
1522  HOWTO (R_NIOS2_R2_L5I4X1,
1523	 2,
1524	 1,
1525	 4,
1526	 FALSE,
1527	 6,
1528	 complain_overflow_unsigned,
1529	 bfd_elf_generic_reloc,
1530	 "R_NIOS2_R2_L5I4X1",
1531	 FALSE,
1532	 0x03c0,
1533	 0x03c0,
1534	 FALSE),
1535
1536  HOWTO (R_NIOS2_R2_T1X1I6,
1537	 0,
1538	 1,
1539	 6,
1540	 FALSE,
1541	 9,
1542	 complain_overflow_unsigned,
1543	 bfd_elf_generic_reloc,
1544	 "R_NIOS2_R2_T1X1I6",
1545	 FALSE,
1546	 0x7e00,
1547	 0x7e00,
1548	 FALSE),
1549
1550  HOWTO (R_NIOS2_R2_T1X1I6_2,
1551	 2,
1552	 2,
1553	 6,
1554	 FALSE,
1555	 9,
1556	 complain_overflow_unsigned,
1557	 bfd_elf_generic_reloc,
1558	 "R_NIOS2_R2_T1I1X6_2",
1559	 FALSE,
1560	 0x7e00,
1561	 0x7e00,
1562	 FALSE),
1563
1564/* Add other relocations here.  */
1565};
1566
1567static unsigned char elf_code_to_howto_index[R_NIOS2_ILLEGAL + 1];
1568
1569
1570/* Return true if producing output for a R2 BFD.  */
1571#define BFD_IS_R2(abfd) (bfd_get_mach (abfd) == bfd_mach_nios2r2)
1572
1573/* Return the howto for relocation RTYPE.  */
1574static reloc_howto_type *
1575lookup_howto (unsigned int rtype, bfd *abfd)
1576{
1577  static int initialized = 0;
1578  int i;
1579  /* R2 relocations are a superset of R1, so use that for the lookup
1580     table.  */
1581  int r1_howto_tbl_size = (int) (sizeof (elf_nios2_r1_howto_table_rel)
1582				 / sizeof (elf_nios2_r1_howto_table_rel[0]));
1583  int r2_howto_tbl_size = (int) (sizeof (elf_nios2_r2_howto_table_rel)
1584				 / sizeof (elf_nios2_r2_howto_table_rel[0]));
1585
1586  if (!initialized)
1587    {
1588      initialized = 1;
1589      memset (elf_code_to_howto_index, 0xff,
1590	      sizeof (elf_code_to_howto_index));
1591      for (i = 0; i < r2_howto_tbl_size; i++)
1592	{
1593	  elf_code_to_howto_index[elf_nios2_r2_howto_table_rel[i].type] = i;
1594	  if (i < r1_howto_tbl_size)
1595	    BFD_ASSERT (elf_nios2_r2_howto_table_rel[i].type
1596			== elf_nios2_r1_howto_table_rel[i].type);
1597	}
1598    }
1599
1600  BFD_ASSERT (rtype <= R_NIOS2_ILLEGAL);
1601  i = elf_code_to_howto_index[rtype];
1602  if (BFD_IS_R2 (abfd))
1603    {
1604      if (i >= r2_howto_tbl_size)
1605	return 0;
1606      return elf_nios2_r2_howto_table_rel + i;
1607    }
1608  else
1609    {
1610      if (i >= r1_howto_tbl_size)
1611	return 0;
1612      return elf_nios2_r1_howto_table_rel + i;
1613    }
1614}
1615
1616/* Map for converting BFD reloc types to Nios II reloc types.  */
1617struct elf_reloc_map
1618{
1619  bfd_reloc_code_real_type bfd_val;
1620  enum elf_nios2_reloc_type elf_val;
1621};
1622
1623static const struct elf_reloc_map nios2_reloc_map[] = {
1624  {BFD_RELOC_NONE, R_NIOS2_NONE},
1625  {BFD_RELOC_NIOS2_S16, R_NIOS2_S16},
1626  {BFD_RELOC_NIOS2_U16, R_NIOS2_U16},
1627  {BFD_RELOC_16_PCREL, R_NIOS2_PCREL16},
1628  {BFD_RELOC_NIOS2_CALL26, R_NIOS2_CALL26},
1629  {BFD_RELOC_NIOS2_IMM5, R_NIOS2_IMM5},
1630  {BFD_RELOC_NIOS2_CACHE_OPX, R_NIOS2_CACHE_OPX},
1631  {BFD_RELOC_NIOS2_IMM6, R_NIOS2_IMM6},
1632  {BFD_RELOC_NIOS2_IMM8, R_NIOS2_IMM8},
1633  {BFD_RELOC_NIOS2_HI16, R_NIOS2_HI16},
1634  {BFD_RELOC_NIOS2_LO16, R_NIOS2_LO16},
1635  {BFD_RELOC_NIOS2_HIADJ16, R_NIOS2_HIADJ16},
1636  {BFD_RELOC_32, R_NIOS2_BFD_RELOC_32},
1637  {BFD_RELOC_16, R_NIOS2_BFD_RELOC_16},
1638  {BFD_RELOC_8, R_NIOS2_BFD_RELOC_8},
1639  {BFD_RELOC_NIOS2_GPREL, R_NIOS2_GPREL},
1640  {BFD_RELOC_VTABLE_INHERIT, R_NIOS2_GNU_VTINHERIT},
1641  {BFD_RELOC_VTABLE_ENTRY, R_NIOS2_GNU_VTENTRY},
1642  {BFD_RELOC_NIOS2_UJMP, R_NIOS2_UJMP},
1643  {BFD_RELOC_NIOS2_CJMP, R_NIOS2_CJMP},
1644  {BFD_RELOC_NIOS2_CALLR, R_NIOS2_CALLR},
1645  {BFD_RELOC_NIOS2_ALIGN, R_NIOS2_ALIGN},
1646  {BFD_RELOC_NIOS2_GOT16, R_NIOS2_GOT16},
1647  {BFD_RELOC_NIOS2_CALL16, R_NIOS2_CALL16},
1648  {BFD_RELOC_NIOS2_GOTOFF_LO, R_NIOS2_GOTOFF_LO},
1649  {BFD_RELOC_NIOS2_GOTOFF_HA, R_NIOS2_GOTOFF_HA},
1650  {BFD_RELOC_NIOS2_PCREL_LO, R_NIOS2_PCREL_LO},
1651  {BFD_RELOC_NIOS2_PCREL_HA, R_NIOS2_PCREL_HA},
1652  {BFD_RELOC_NIOS2_TLS_GD16, R_NIOS2_TLS_GD16},
1653  {BFD_RELOC_NIOS2_TLS_LDM16, R_NIOS2_TLS_LDM16},
1654  {BFD_RELOC_NIOS2_TLS_LDO16, R_NIOS2_TLS_LDO16},
1655  {BFD_RELOC_NIOS2_TLS_IE16, R_NIOS2_TLS_IE16},
1656  {BFD_RELOC_NIOS2_TLS_LE16, R_NIOS2_TLS_LE16},
1657  {BFD_RELOC_NIOS2_TLS_DTPMOD, R_NIOS2_TLS_DTPMOD},
1658  {BFD_RELOC_NIOS2_TLS_DTPREL, R_NIOS2_TLS_DTPREL},
1659  {BFD_RELOC_NIOS2_TLS_TPREL, R_NIOS2_TLS_TPREL},
1660  {BFD_RELOC_NIOS2_COPY, R_NIOS2_COPY},
1661  {BFD_RELOC_NIOS2_GLOB_DAT, R_NIOS2_GLOB_DAT},
1662  {BFD_RELOC_NIOS2_JUMP_SLOT, R_NIOS2_JUMP_SLOT},
1663  {BFD_RELOC_NIOS2_RELATIVE, R_NIOS2_RELATIVE},
1664  {BFD_RELOC_NIOS2_GOTOFF, R_NIOS2_GOTOFF},
1665  {BFD_RELOC_NIOS2_CALL26_NOAT, R_NIOS2_CALL26_NOAT},
1666  {BFD_RELOC_NIOS2_GOT_LO, R_NIOS2_GOT_LO},
1667  {BFD_RELOC_NIOS2_GOT_HA, R_NIOS2_GOT_HA},
1668  {BFD_RELOC_NIOS2_CALL_LO, R_NIOS2_CALL_LO},
1669  {BFD_RELOC_NIOS2_CALL_HA, R_NIOS2_CALL_HA},
1670  {BFD_RELOC_NIOS2_R2_S12, R_NIOS2_R2_S12},
1671  {BFD_RELOC_NIOS2_R2_I10_1_PCREL, R_NIOS2_R2_I10_1_PCREL},
1672  {BFD_RELOC_NIOS2_R2_T1I7_1_PCREL, R_NIOS2_R2_T1I7_1_PCREL},
1673  {BFD_RELOC_NIOS2_R2_T1I7_2, R_NIOS2_R2_T1I7_2},
1674  {BFD_RELOC_NIOS2_R2_T2I4, R_NIOS2_R2_T2I4},
1675  {BFD_RELOC_NIOS2_R2_T2I4_1, R_NIOS2_R2_T2I4_1},
1676  {BFD_RELOC_NIOS2_R2_T2I4_2, R_NIOS2_R2_T2I4_2},
1677  {BFD_RELOC_NIOS2_R2_X1I7_2, R_NIOS2_R2_X1I7_2},
1678  {BFD_RELOC_NIOS2_R2_X2L5, R_NIOS2_R2_X2L5},
1679  {BFD_RELOC_NIOS2_R2_F1I5_2, R_NIOS2_R2_F1I5_2},
1680  {BFD_RELOC_NIOS2_R2_L5I4X1, R_NIOS2_R2_L5I4X1},
1681  {BFD_RELOC_NIOS2_R2_T1X1I6, R_NIOS2_R2_T1X1I6},
1682  {BFD_RELOC_NIOS2_R2_T1X1I6_2, R_NIOS2_R2_T1X1I6_2},
1683};
1684
1685enum elf32_nios2_stub_type
1686{
1687  nios2_stub_call26_before,
1688  nios2_stub_call26_after,
1689  nios2_stub_none
1690};
1691
1692struct elf32_nios2_stub_hash_entry
1693{
1694  /* Base hash table entry structure.  */
1695  struct bfd_hash_entry bh_root;
1696
1697  /* The stub section.  */
1698  asection *stub_sec;
1699
1700  /* Offset within stub_sec of the beginning of this stub.  */
1701  bfd_vma stub_offset;
1702
1703  /* Given the symbol's value and its section we can determine its final
1704     value when building the stubs (so the stub knows where to jump.  */
1705  bfd_vma target_value;
1706  asection *target_section;
1707
1708  enum elf32_nios2_stub_type stub_type;
1709
1710  /* The symbol table entry, if any, that this was derived from.  */
1711  struct elf32_nios2_link_hash_entry *hh;
1712
1713  /* And the reloc addend that this was derived from.  */
1714  bfd_vma addend;
1715
1716  /* Where this stub is being called from, or, in the case of combined
1717     stub sections, the first input section in the group.  */
1718  asection *id_sec;
1719};
1720
1721#define nios2_stub_hash_entry(ent) \
1722  ((struct elf32_nios2_stub_hash_entry *)(ent))
1723
1724#define nios2_stub_hash_lookup(table, string, create, copy) \
1725  ((struct elf32_nios2_stub_hash_entry *) \
1726   bfd_hash_lookup ((table), (string), (create), (copy)))
1727
1728
1729/* The Nios II linker needs to keep track of the number of relocs that it
1730   decides to copy as dynamic relocs in check_relocs for each symbol.
1731   This is so that it can later discard them if they are found to be
1732   unnecessary.  We store the information in a field extending the
1733   regular ELF linker hash table.  */
1734
1735struct elf32_nios2_dyn_relocs
1736{
1737  struct elf32_nios2_dyn_relocs *next;
1738
1739  /* The input section of the reloc.  */
1740  asection *sec;
1741
1742  /* Total number of relocs copied for the input section.  */
1743  bfd_size_type count;
1744
1745  /* Number of pc-relative relocs copied for the input section.  */
1746  bfd_size_type pc_count;
1747};
1748
1749/* Nios II ELF linker hash entry.  */
1750
1751struct elf32_nios2_link_hash_entry
1752{
1753  struct elf_link_hash_entry root;
1754
1755  /* A pointer to the most recently used stub hash entry against this
1756     symbol.  */
1757  struct elf32_nios2_stub_hash_entry *hsh_cache;
1758
1759  /* Track dynamic relocs copied for this symbol.  */
1760  struct elf32_nios2_dyn_relocs *dyn_relocs;
1761
1762#define GOT_UNKNOWN	0
1763#define GOT_NORMAL	1
1764#define GOT_TLS_GD	2
1765#define GOT_TLS_IE	4
1766  unsigned char tls_type;
1767
1768  /* We need to detect and take special action for symbols which are only
1769     referenced with %call() and not with %got().  Such symbols do not need
1770     a dynamic GOT reloc in shared objects, only a dynamic PLT reloc.  Lazy
1771     linking will not work if the dynamic GOT reloc exists.
1772     To check for this condition efficiently, we compare got_types_used against
1773     CALL_USED, meaning
1774     (got_types_used & (GOT_USED | CALL_USED)) == CALL_USED.
1775  */
1776#define GOT_USED	1
1777#define CALL_USED	2
1778  unsigned char got_types_used;
1779};
1780
1781#define elf32_nios2_hash_entry(ent) \
1782  ((struct elf32_nios2_link_hash_entry *) (ent))
1783
1784/* Get the Nios II elf linker hash table from a link_info structure.  */
1785#define elf32_nios2_hash_table(info) \
1786  ((struct elf32_nios2_link_hash_table *) ((info)->hash))
1787
1788/* Nios II ELF linker hash table.  */
1789struct elf32_nios2_link_hash_table
1790  {
1791    /* The main hash table.  */
1792    struct elf_link_hash_table root;
1793
1794    /* The stub hash table.  */
1795    struct bfd_hash_table bstab;
1796
1797    /* Linker stub bfd.  */
1798    bfd *stub_bfd;
1799
1800    /* Linker call-backs.  */
1801    asection * (*add_stub_section) (const char *, asection *, bfd_boolean);
1802    void (*layout_sections_again) (void);
1803
1804    /* Array to keep track of which stub sections have been created, and
1805       information on stub grouping.  */
1806    struct map_stub
1807    {
1808      /* These are the section to which stubs in the group will be
1809	 attached.  */
1810      asection *first_sec, *last_sec;
1811      /* The stub sections.  There might be stubs inserted either before
1812	 or after the real section.*/
1813      asection *first_stub_sec, *last_stub_sec;
1814    } *stub_group;
1815
1816    /* Assorted information used by nios2_elf32_size_stubs.  */
1817    unsigned int bfd_count;
1818    unsigned int top_index;
1819    asection **input_list;
1820    Elf_Internal_Sym **all_local_syms;
1821
1822    /* Short-cuts to get to dynamic linker sections.  */
1823    asection *sbss;
1824
1825    /* GOT pointer symbol _gp_got.  */
1826    struct elf_link_hash_entry *h_gp_got;
1827
1828    union {
1829      bfd_signed_vma refcount;
1830      bfd_vma offset;
1831    } tls_ldm_got;
1832
1833    /* Small local sym cache.  */
1834    struct sym_cache sym_cache;
1835
1836    bfd_vma res_n_size;
1837  };
1838
1839struct nios2_elf32_obj_tdata
1840{
1841  struct elf_obj_tdata root;
1842
1843  /* tls_type for each local got entry.  */
1844  char *local_got_tls_type;
1845
1846  /* TRUE if TLS GD relocs have been seen for this object.  */
1847  bfd_boolean has_tlsgd;
1848};
1849
1850#define elf32_nios2_tdata(abfd) \
1851  ((struct nios2_elf32_obj_tdata *) (abfd)->tdata.any)
1852
1853#define elf32_nios2_local_got_tls_type(abfd) \
1854  (elf32_nios2_tdata (abfd)->local_got_tls_type)
1855
1856/* The name of the dynamic interpreter.  This is put in the .interp
1857   section.  */
1858#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
1859
1860/* PLT implementation for position-dependent code.  */
1861static const bfd_vma nios2_plt_entry[] = { /* .PLTn: */
1862  0x03c00034,	/* movhi r15, %hiadj(plt_got_slot_address) */
1863  0x7bc00017,	/* ldw r15, %lo(plt_got_slot_address)(r15) */
1864  0x7800683a	/* jmp r15 */
1865};
1866
1867static const bfd_vma nios2_plt0_entry[] = { /* .PLTresolve */
1868  0x03800034,	/* movhi r14, %hiadj(res_0) */
1869  0x73800004,	/* addi r14, r14, %lo(res_0) */
1870  0x7b9fc83a,	/* sub r15, r15, r14 */
1871  0x03400034,	/* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */
1872  0x6b800017,	/* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */
1873  0x6b400017,	/* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */
1874  0x6800683a	/* jmp r13 */
1875};
1876
1877/* PLT implementation for position-independent code.  */
1878static const bfd_vma nios2_so_plt_entry[] = { /* .PLTn */
1879  0x03c00034,	/* movhi r15, %hiadj(index * 4) */
1880  0x7bc00004,	/* addi r15, r15, %lo(index * 4) */
1881  0x00000006	/* br .PLTresolve */
1882};
1883
1884static const bfd_vma nios2_so_plt0_entry[] = { /* .PLTresolve */
1885  0x001ce03a,	/* nextpc r14 */
1886  0x03400034,	/* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */
1887  0x6b9b883a,	/* add r13, r13, r14 */
1888  0x6b800017,	/* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */
1889  0x6b400017,	/* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */
1890  0x6800683a	/* jmp r13 */
1891};
1892
1893/* CALL26 stub.  */
1894static const bfd_vma nios2_call26_stub_entry[] = {
1895  0x00400034,	/* orhi at, r0, %hiadj(dest) */
1896  0x08400004,	/* addi at, at, %lo(dest) */
1897  0x0800683a	/* jmp at */
1898};
1899
1900/* Install 16-bit immediate value VALUE at offset OFFSET into section SEC.  */
1901static void
1902nios2_elf32_install_imm16 (asection *sec, bfd_vma offset, bfd_vma value)
1903{
1904  bfd_vma word = bfd_get_32 (sec->owner, sec->contents + offset);
1905
1906  BFD_ASSERT (value <= 0xffff || ((bfd_signed_vma) value) >= -0xffff);
1907
1908  bfd_put_32 (sec->owner, word | ((value & 0xffff) << 6),
1909	      sec->contents + offset);
1910}
1911
1912/* Install COUNT 32-bit values DATA starting at offset OFFSET into
1913   section SEC. */
1914static void
1915nios2_elf32_install_data (asection *sec, const bfd_vma *data, bfd_vma offset,
1916			  int count)
1917{
1918  while (count--)
1919    {
1920      bfd_put_32 (sec->owner, *data, sec->contents + offset);
1921      offset += 4;
1922      ++data;
1923    }
1924}
1925
1926/* The usual way of loading a 32-bit constant into a Nios II register is to
1927   load the high 16 bits in one instruction and then add the low 16 bits with
1928   a signed add. This means that the high halfword needs to be adjusted to
1929   compensate for the sign bit of the low halfword. This function returns the
1930   adjusted high halfword for a given 32-bit constant.  */
1931static
1932bfd_vma hiadj (bfd_vma symbol_value)
1933{
1934  return ((symbol_value + 0x8000) >> 16) & 0xffff;
1935}
1936
1937/* Implement elf_backend_grok_prstatus:
1938   Support for core dump NOTE sections.  */
1939static bfd_boolean
1940nios2_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
1941{
1942  int offset;
1943  size_t size;
1944
1945  switch (note->descsz)
1946    {
1947    default:
1948      return FALSE;
1949
1950    case 212:	      /* Linux/Nios II */
1951      /* pr_cursig */
1952      elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
1953
1954      /* pr_pid */
1955      elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24);
1956
1957      /* pr_reg */
1958      offset = 72;
1959      size = 136;
1960
1961      break;
1962    }
1963
1964  /* Make a ".reg/999" section.  */
1965  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
1966					  size, note->descpos + offset);
1967}
1968
1969/* Implement elf_backend_grok_psinfo.  */
1970static bfd_boolean
1971nios2_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
1972{
1973  switch (note->descsz)
1974    {
1975    default:
1976      return FALSE;
1977
1978    case 124:	      /* Linux/Nios II elf_prpsinfo */
1979      elf_tdata (abfd)->core->program
1980	= _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
1981      elf_tdata (abfd)->core->command
1982	= _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
1983    }
1984
1985  /* Note that for some reason, a spurious space is tacked
1986     onto the end of the args in some (at least one anyway)
1987     implementations, so strip it off if it exists.  */
1988
1989  {
1990    char *command = elf_tdata (abfd)->core->command;
1991    int n = strlen (command);
1992
1993    if (0 < n && command[n - 1] == ' ')
1994      command[n - 1] = '\0';
1995  }
1996
1997  return TRUE;
1998}
1999
2000/* Assorted hash table functions.  */
2001
2002/* Initialize an entry in the stub hash table.  */
2003static struct bfd_hash_entry *
2004stub_hash_newfunc (struct bfd_hash_entry *entry,
2005		   struct bfd_hash_table *table,
2006		   const char *string)
2007{
2008  /* Allocate the structure if it has not already been allocated by a
2009     subclass.  */
2010  if (entry == NULL)
2011    {
2012      entry = bfd_hash_allocate (table,
2013				 sizeof (struct elf32_nios2_stub_hash_entry));
2014      if (entry == NULL)
2015	return entry;
2016    }
2017
2018  /* Call the allocation method of the superclass.  */
2019  entry = bfd_hash_newfunc (entry, table, string);
2020  if (entry != NULL)
2021    {
2022      struct elf32_nios2_stub_hash_entry *hsh;
2023
2024      /* Initialize the local fields.  */
2025      hsh = (struct elf32_nios2_stub_hash_entry *) entry;
2026      hsh->stub_sec = NULL;
2027      hsh->stub_offset = 0;
2028      hsh->target_value = 0;
2029      hsh->target_section = NULL;
2030      hsh->stub_type = nios2_stub_none;
2031      hsh->hh = NULL;
2032      hsh->id_sec = NULL;
2033    }
2034
2035  return entry;
2036}
2037
2038/* Create an entry in a Nios II ELF linker hash table.  */
2039static struct bfd_hash_entry *
2040link_hash_newfunc (struct bfd_hash_entry *entry,
2041		   struct bfd_hash_table *table, const char *string)
2042{
2043  /* Allocate the structure if it has not already been allocated by a
2044     subclass.  */
2045  if (entry == NULL)
2046    {
2047      entry = bfd_hash_allocate (table,
2048				 sizeof (struct elf32_nios2_link_hash_entry));
2049      if (entry == NULL)
2050	return entry;
2051    }
2052
2053  /* Call the allocation method of the superclass.  */
2054  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
2055  if (entry)
2056    {
2057      struct elf32_nios2_link_hash_entry *eh;
2058
2059      eh = (struct elf32_nios2_link_hash_entry *) entry;
2060      eh->hsh_cache = NULL;
2061      eh->dyn_relocs = NULL;
2062      eh->tls_type = GOT_UNKNOWN;
2063      eh->got_types_used = 0;
2064    }
2065
2066  return entry;
2067}
2068
2069/* Section name for stubs is the associated section name plus this
2070   string.  */
2071#define STUB_SUFFIX ".stub"
2072
2073/* Build a name for an entry in the stub hash table.  */
2074static char *
2075nios2_stub_name (const asection *input_section,
2076		 const asection *sym_sec,
2077		 const struct elf32_nios2_link_hash_entry *hh,
2078		 const Elf_Internal_Rela *rel,
2079		 enum elf32_nios2_stub_type stub_type)
2080{
2081  char *stub_name;
2082  bfd_size_type len;
2083  char stubpos = (stub_type == nios2_stub_call26_before) ? 'b' : 'a';
2084
2085  if (hh)
2086    {
2087      len = 8 + 1 + 1 + 1+ strlen (hh->root.root.root.string) + 1 + 8 + 1;
2088      stub_name = bfd_malloc (len);
2089      if (stub_name != NULL)
2090	{
2091	  sprintf (stub_name, "%08x_%c_%s+%x",
2092		   input_section->id & 0xffffffff,
2093		   stubpos,
2094		   hh->root.root.root.string,
2095		   (int) rel->r_addend & 0xffffffff);
2096	}
2097    }
2098  else
2099    {
2100      len = 8 + 1 + 1 + 1+ 8 + 1 + 8 + 1 + 8 + 1;
2101      stub_name = bfd_malloc (len);
2102      if (stub_name != NULL)
2103	{
2104	  sprintf (stub_name, "%08x_%c_%x:%x+%x",
2105		   input_section->id & 0xffffffff,
2106		   stubpos,
2107		   sym_sec->id & 0xffffffff,
2108		   (int) ELF32_R_SYM (rel->r_info) & 0xffffffff,
2109		   (int) rel->r_addend & 0xffffffff);
2110	}
2111    }
2112  return stub_name;
2113}
2114
2115/* Look up an entry in the stub hash.  Stub entries are cached because
2116   creating the stub name takes a bit of time.  */
2117static struct elf32_nios2_stub_hash_entry *
2118nios2_get_stub_entry (const asection *input_section,
2119		      const asection *sym_sec,
2120		      struct elf32_nios2_link_hash_entry *hh,
2121		      const Elf_Internal_Rela *rel,
2122		      struct elf32_nios2_link_hash_table *htab,
2123		      enum elf32_nios2_stub_type stub_type)
2124{
2125  struct elf32_nios2_stub_hash_entry *hsh;
2126  const asection *id_sec;
2127
2128  /* If this input section is part of a group of sections sharing one
2129     stub section, then use the id of the first/last section in the group,
2130     depending on the stub section placement relative to the group.
2131     Stub names need to include a section id, as there may well be
2132     more than one stub used to reach say, printf, and we need to
2133     distinguish between them.  */
2134  if (stub_type == nios2_stub_call26_before)
2135    id_sec = htab->stub_group[input_section->id].first_sec;
2136  else
2137    id_sec = htab->stub_group[input_section->id].last_sec;
2138
2139  if (hh != NULL && hh->hsh_cache != NULL
2140      && hh->hsh_cache->hh == hh
2141      && hh->hsh_cache->id_sec == id_sec
2142      && hh->hsh_cache->stub_type == stub_type)
2143    {
2144      hsh = hh->hsh_cache;
2145    }
2146  else
2147    {
2148      char *stub_name;
2149
2150      stub_name = nios2_stub_name (id_sec, sym_sec, hh, rel, stub_type);
2151      if (stub_name == NULL)
2152	return NULL;
2153
2154      hsh = nios2_stub_hash_lookup (&htab->bstab,
2155				    stub_name, FALSE, FALSE);
2156
2157      if (hh != NULL)
2158	hh->hsh_cache = hsh;
2159
2160      free (stub_name);
2161    }
2162
2163  return hsh;
2164}
2165
2166/* Add a new stub entry to the stub hash.  Not all fields of the new
2167   stub entry are initialised.  */
2168static struct elf32_nios2_stub_hash_entry *
2169nios2_add_stub (const char *stub_name,
2170		asection *section,
2171		struct elf32_nios2_link_hash_table *htab,
2172		enum elf32_nios2_stub_type stub_type)
2173{
2174  asection *link_sec;
2175  asection *stub_sec;
2176  asection **secptr, **linkptr;
2177  struct elf32_nios2_stub_hash_entry *hsh;
2178  bfd_boolean afterp;
2179
2180  if (stub_type == nios2_stub_call26_before)
2181    {
2182      link_sec = htab->stub_group[section->id].first_sec;
2183      secptr = &(htab->stub_group[section->id].first_stub_sec);
2184      linkptr = &(htab->stub_group[link_sec->id].first_stub_sec);
2185      afterp = FALSE;
2186    }
2187  else
2188    {
2189      link_sec = htab->stub_group[section->id].last_sec;
2190      secptr = &(htab->stub_group[section->id].last_stub_sec);
2191      linkptr = &(htab->stub_group[link_sec->id].last_stub_sec);
2192      afterp = TRUE;
2193    }
2194  stub_sec = *secptr;
2195  if (stub_sec == NULL)
2196    {
2197      stub_sec = *linkptr;
2198      if (stub_sec == NULL)
2199	{
2200	  size_t namelen;
2201	  bfd_size_type len;
2202	  char *s_name;
2203
2204	  namelen = strlen (link_sec->name);
2205	  len = namelen + sizeof (STUB_SUFFIX);
2206	  s_name = bfd_alloc (htab->stub_bfd, len);
2207	  if (s_name == NULL)
2208	    return NULL;
2209
2210	  memcpy (s_name, link_sec->name, namelen);
2211	  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
2212
2213	  stub_sec = (*htab->add_stub_section) (s_name, link_sec, afterp);
2214	  if (stub_sec == NULL)
2215	    return NULL;
2216	  *linkptr = stub_sec;
2217	}
2218      *secptr = stub_sec;
2219    }
2220
2221  /* Enter this entry into the linker stub hash table.  */
2222  hsh = nios2_stub_hash_lookup (&htab->bstab, stub_name,
2223				TRUE, FALSE);
2224  if (hsh == NULL)
2225    {
2226      /* xgettext:c-format */
2227      _bfd_error_handler (_("%B: cannot create stub entry %s"),
2228			  section->owner,
2229			  stub_name);
2230      return NULL;
2231    }
2232
2233  hsh->stub_sec = stub_sec;
2234  hsh->stub_offset = 0;
2235  hsh->id_sec = link_sec;
2236  return hsh;
2237}
2238
2239/* Set up various things so that we can make a list of input sections
2240   for each output section included in the link.  Returns -1 on error,
2241   0 when no stubs will be needed, and 1 on success.  */
2242int
2243nios2_elf32_setup_section_lists (bfd *output_bfd, struct bfd_link_info *info)
2244{
2245  bfd *input_bfd;
2246  unsigned int bfd_count;
2247  unsigned int top_id, top_index;
2248  asection *section;
2249  asection **input_list, **list;
2250  bfd_size_type amt;
2251  struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
2252
2253  /* Count the number of input BFDs and find the top input section id.  */
2254  for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
2255       input_bfd != NULL;
2256       input_bfd = input_bfd->link.next)
2257    {
2258      bfd_count += 1;
2259      for (section = input_bfd->sections;
2260	   section != NULL;
2261	   section = section->next)
2262	{
2263	  if (top_id < section->id)
2264	    top_id = section->id;
2265	}
2266    }
2267
2268  htab->bfd_count = bfd_count;
2269
2270  amt = sizeof (struct map_stub) * (top_id + 1);
2271  htab->stub_group = bfd_zmalloc (amt);
2272  if (htab->stub_group == NULL)
2273    return -1;
2274
2275  /* We can't use output_bfd->section_count here to find the top output
2276     section index as some sections may have been removed, and
2277     strip_excluded_output_sections doesn't renumber the indices.  */
2278  for (section = output_bfd->sections, top_index = 0;
2279       section != NULL;
2280       section = section->next)
2281    {
2282      if (top_index < section->index)
2283	top_index = section->index;
2284    }
2285
2286  htab->top_index = top_index;
2287  amt = sizeof (asection *) * (top_index + 1);
2288  input_list = bfd_malloc (amt);
2289  htab->input_list = input_list;
2290  if (input_list == NULL)
2291    return -1;
2292
2293  /* For sections we aren't interested in, mark their entries with a
2294     value we can check later.  */
2295  list = input_list + top_index;
2296  do
2297    *list = bfd_abs_section_ptr;
2298  while (list-- != input_list);
2299
2300  for (section = output_bfd->sections;
2301       section != NULL;
2302       section = section->next)
2303    {
2304      /* FIXME: This is a bit of hack. Currently our .ctors and .dtors
2305       * have PC relative relocs in them but no code flag set.  */
2306      if (((section->flags & SEC_CODE) != 0) ||
2307	  strcmp(".ctors", section->name) ||
2308	  strcmp(".dtors", section->name))
2309	input_list[section->index] = NULL;
2310    }
2311
2312  return 1;
2313}
2314
2315/* The linker repeatedly calls this function for each input section,
2316   in the order that input sections are linked into output sections.
2317   Build lists of input sections to determine groupings between which
2318   we may insert linker stubs.  */
2319void
2320nios2_elf32_next_input_section (struct bfd_link_info *info, asection *isec)
2321{
2322  struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
2323
2324  if (isec->output_section->index <= htab->top_index)
2325    {
2326      asection **list = htab->input_list + isec->output_section->index;
2327      if (*list != bfd_abs_section_ptr)
2328	{
2329	  /* Steal the last_sec pointer for our list.
2330	     This happens to make the list in reverse order,
2331	     which is what we want.  */
2332	  htab->stub_group[isec->id].last_sec = *list;
2333	  *list = isec;
2334	}
2335    }
2336}
2337
2338/* Segment mask for CALL26 relocation relaxation.  */
2339#define CALL26_SEGMENT(x) ((x) & 0xf0000000)
2340
2341/* Fudge factor for approximate maximum size of all stubs that might
2342   be inserted by the linker.  This does not actually limit the number
2343   of stubs that might be inserted, and only affects strategy for grouping
2344   and placement of stubs.  Perhaps this should be computed based on number
2345   of relocations seen, or be specifiable on the command line.  */
2346#define MAX_STUB_SECTION_SIZE 0xffff
2347
2348/* See whether we can group stub sections together.  Grouping stub
2349   sections may result in fewer stubs.  More importantly, we need to
2350   put all .init* and .fini* stubs at the end of the .init or
2351   .fini output sections respectively, because glibc splits the
2352   _init and _fini functions into multiple parts.  Putting a stub in
2353   the middle of a function is not a good idea.
2354   Rather than computing groups of a maximum fixed size, for Nios II
2355   CALL26 relaxation it makes more sense to compute the groups based on
2356   sections that fit within a 256MB address segment.  Also do not allow
2357   a group to span more than one output section, since different output
2358   sections might correspond to different memory banks on a bare-metal
2359   target, etc.  */
2360static void
2361group_sections (struct elf32_nios2_link_hash_table *htab)
2362{
2363  asection **list = htab->input_list + htab->top_index;
2364  do
2365    {
2366      /* The list is in reverse order so we'll search backwards looking
2367	 for the first section that begins in the same memory segment,
2368	 marking sections along the way to point at the tail for this
2369	 group.  */
2370      asection *tail = *list;
2371      if (tail == bfd_abs_section_ptr)
2372	continue;
2373      while (tail != NULL)
2374	{
2375	  bfd_vma start = tail->output_section->vma + tail->output_offset;
2376	  bfd_vma end = start + tail->size;
2377	  bfd_vma segment = CALL26_SEGMENT (end);
2378	  asection *prev;
2379
2380	  if (segment != CALL26_SEGMENT (start)
2381	      || segment != CALL26_SEGMENT (end + MAX_STUB_SECTION_SIZE))
2382	    /* This section spans more than one memory segment, or is
2383	       close enough to the end of the segment that adding stub
2384	       sections before it might cause it to move so that it
2385	       spans memory segments, or that stubs added at the end of
2386	       this group might overflow into the next memory segment.
2387	       Put it in a group by itself to localize the effects.  */
2388	    {
2389	      prev = htab->stub_group[tail->id].last_sec;
2390	      htab->stub_group[tail->id].last_sec = tail;
2391	      htab->stub_group[tail->id].first_sec = tail;
2392	    }
2393	  else
2394	    /* Collect more sections for this group.  */
2395	    {
2396	      asection *curr, *first;
2397	      for (curr = tail; ; curr = prev)
2398		{
2399		  prev = htab->stub_group[curr->id].last_sec;
2400		  if (!prev
2401		      || tail->output_section != prev->output_section
2402		      || (CALL26_SEGMENT (prev->output_section->vma
2403					  + prev->output_offset)
2404			  != segment))
2405		    break;
2406		}
2407	      first = curr;
2408	      for (curr = tail; ; curr = prev)
2409		{
2410		  prev = htab->stub_group[curr->id].last_sec;
2411		  htab->stub_group[curr->id].last_sec = tail;
2412		  htab->stub_group[curr->id].first_sec = first;
2413		  if (curr == first)
2414		    break;
2415		}
2416	    }
2417
2418	  /* Reset tail for the next group.  */
2419	  tail = prev;
2420	}
2421    }
2422  while (list-- != htab->input_list);
2423  free (htab->input_list);
2424}
2425
2426/* Determine the type of stub needed, if any, for a call.  */
2427static enum elf32_nios2_stub_type
2428nios2_type_of_stub (asection *input_sec,
2429		    const Elf_Internal_Rela *rel,
2430		    struct elf32_nios2_link_hash_entry *hh,
2431		    struct elf32_nios2_link_hash_table *htab,
2432		    bfd_vma destination,
2433		    struct bfd_link_info *info ATTRIBUTE_UNUSED)
2434{
2435  bfd_vma location, segment, start, end;
2436  asection *s0, *s1, *s;
2437
2438  if (hh != NULL &&
2439      !(hh->root.root.type == bfd_link_hash_defined
2440	|| hh->root.root.type == bfd_link_hash_defweak))
2441    return nios2_stub_none;
2442
2443  /* Determine where the call point is.  */
2444  location = (input_sec->output_section->vma
2445	      + input_sec->output_offset + rel->r_offset);
2446  segment = CALL26_SEGMENT (location);
2447
2448  /* Nios II CALL and JMPI instructions can transfer control to addresses
2449     within the same 256MB segment as the PC.  */
2450  if (segment == CALL26_SEGMENT (destination))
2451    return nios2_stub_none;
2452
2453  /* Find the start and end addresses of the stub group.  Also account for
2454     any already-created stub sections for this group.  Note that for stubs
2455     in the end section, only the first instruction of the last stub
2456     (12 bytes long) needs to be within range.  */
2457  s0 = htab->stub_group[input_sec->id].first_sec;
2458  s = htab->stub_group[s0->id].first_stub_sec;
2459  if (s != NULL && s->size > 0)
2460    start = s->output_section->vma + s->output_offset;
2461  else
2462    start = s0->output_section->vma + s0->output_offset;
2463
2464  s1 = htab->stub_group[input_sec->id].last_sec;
2465  s = htab->stub_group[s1->id].last_stub_sec;
2466  if (s != NULL && s->size > 0)
2467    end = s->output_section->vma + s->output_offset + s->size - 8;
2468  else
2469    end = s1->output_section->vma + s1->output_offset + s1->size;
2470
2471  BFD_ASSERT (start < end);
2472  BFD_ASSERT (start <= location);
2473  BFD_ASSERT (location < end);
2474
2475  /* Put stubs at the end of the group unless that is not a valid
2476     location and the beginning of the group is.  It might be that
2477     neither the beginning nor end works if we have an input section
2478     so large that it spans multiple segment boundaries.  In that
2479     case, punt; the end result will be a relocation overflow error no
2480     matter what we do here.
2481
2482     Note that adding stubs pushes up the addresses of all subsequent
2483     sections, so that stubs allocated on one pass through the
2484     relaxation loop may not be valid on the next pass.  (E.g., we may
2485     allocate a stub at the beginning of the section on one pass and
2486     find that the call site has been bumped into the next memory
2487     segment on the next pass.)  The important thing to note is that
2488     we never try to reclaim the space allocated to such unused stubs,
2489     so code size and section addresses can only increase with each
2490     iteration.  Accounting for the start and end addresses of the
2491     already-created stub sections ensures that when the algorithm
2492     converges, it converges accurately, with the entire appropriate
2493     stub section accessible from the call site and not just the
2494     address at the start or end of the stub group proper.  */
2495
2496  if (segment == CALL26_SEGMENT (end))
2497    return nios2_stub_call26_after;
2498  else if (segment == CALL26_SEGMENT (start))
2499    return nios2_stub_call26_before;
2500  else
2501    /* Perhaps this should be a dedicated error code.  */
2502    return nios2_stub_none;
2503}
2504
2505static bfd_boolean
2506nios2_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
2507{
2508  struct elf32_nios2_stub_hash_entry *hsh
2509    = (struct elf32_nios2_stub_hash_entry *) gen_entry;
2510  asection *stub_sec = hsh->stub_sec;
2511  bfd_vma sym_value;
2512
2513  /* Make a note of the offset within the stubs for this entry.  */
2514  hsh->stub_offset = stub_sec->size;
2515
2516  switch (hsh->stub_type)
2517    {
2518    case nios2_stub_call26_before:
2519    case nios2_stub_call26_after:
2520      /* A call26 stub looks like:
2521	   orhi at, %hiadj(dest)
2522	   addi at, at, %lo(dest)
2523	   jmp at
2524	 Note that call/jmpi instructions can't be used in PIC code
2525	 so there is no reason for the stub to be PIC, either.  */
2526      sym_value = (hsh->target_value
2527		   + hsh->target_section->output_offset
2528		   + hsh->target_section->output_section->vma
2529		   + hsh->addend);
2530
2531      nios2_elf32_install_data (stub_sec, nios2_call26_stub_entry,
2532				hsh->stub_offset, 3);
2533      nios2_elf32_install_imm16 (stub_sec, hsh->stub_offset,
2534				 hiadj (sym_value));
2535      nios2_elf32_install_imm16 (stub_sec, hsh->stub_offset + 4,
2536				 (sym_value & 0xffff));
2537      stub_sec->size += 12;
2538      break;
2539    default:
2540      BFD_FAIL ();
2541      return FALSE;
2542    }
2543
2544  return TRUE;
2545}
2546
2547/* As above, but don't actually build the stub.  Just bump offset so
2548   we know stub section sizes.  */
2549static bfd_boolean
2550nios2_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
2551{
2552  struct elf32_nios2_stub_hash_entry *hsh
2553    = (struct elf32_nios2_stub_hash_entry *) gen_entry;
2554
2555  switch (hsh->stub_type)
2556    {
2557    case nios2_stub_call26_before:
2558    case nios2_stub_call26_after:
2559      hsh->stub_sec->size += 12;
2560      break;
2561    default:
2562      BFD_FAIL ();
2563      return FALSE;
2564    }
2565  return TRUE;
2566}
2567
2568/* Read in all local syms for all input bfds.
2569   Returns -1 on error, 0 otherwise.  */
2570
2571static int
2572get_local_syms (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *input_bfd,
2573		struct bfd_link_info *info)
2574{
2575  unsigned int bfd_indx;
2576  Elf_Internal_Sym *local_syms, **all_local_syms;
2577  struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
2578
2579  /* We want to read in symbol extension records only once.  To do this
2580     we need to read in the local symbols in parallel and save them for
2581     later use; so hold pointers to the local symbols in an array.  */
2582  bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
2583  all_local_syms = bfd_zmalloc (amt);
2584  htab->all_local_syms = all_local_syms;
2585  if (all_local_syms == NULL)
2586    return -1;
2587
2588  /* Walk over all the input BFDs, swapping in local symbols.  */
2589  for (bfd_indx = 0;
2590       input_bfd != NULL;
2591       input_bfd = input_bfd->link.next, bfd_indx++)
2592    {
2593      Elf_Internal_Shdr *symtab_hdr;
2594
2595      /* We'll need the symbol table in a second.  */
2596      symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2597      if (symtab_hdr->sh_info == 0)
2598	continue;
2599
2600      /* We need an array of the local symbols attached to the input bfd.  */
2601      local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
2602      if (local_syms == NULL)
2603	{
2604	  local_syms = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
2605					     symtab_hdr->sh_info, 0,
2606					     NULL, NULL, NULL);
2607	  /* Cache them for elf_link_input_bfd.  */
2608	  symtab_hdr->contents = (unsigned char *) local_syms;
2609	}
2610      if (local_syms == NULL)
2611	return -1;
2612
2613      all_local_syms[bfd_indx] = local_syms;
2614    }
2615
2616  return 0;
2617}
2618
2619/* Determine and set the size of the stub section for a final link.  */
2620bfd_boolean
2621nios2_elf32_size_stubs (bfd *output_bfd, bfd *stub_bfd,
2622			struct bfd_link_info *info,
2623			asection *(*add_stub_section) (const char *,
2624						       asection *, bfd_boolean),
2625			void (*layout_sections_again) (void))
2626{
2627  bfd_boolean stub_changed = FALSE;
2628  struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
2629
2630  /* Stash our params away.  */
2631  htab->stub_bfd = stub_bfd;
2632  htab->add_stub_section = add_stub_section;
2633  htab->layout_sections_again = layout_sections_again;
2634
2635  /* FIXME: We only compute the section groups once.  This could cause
2636     problems if adding a large stub section causes following sections,
2637     or parts of them, to move into another segment.  However, this seems
2638     to be consistent with the way other back ends handle this....  */
2639  group_sections (htab);
2640
2641  if (get_local_syms (output_bfd, info->input_bfds, info))
2642    {
2643      if (htab->all_local_syms)
2644	goto error_ret_free_local;
2645      return FALSE;
2646    }
2647
2648  while (1)
2649    {
2650      bfd *input_bfd;
2651      unsigned int bfd_indx;
2652      asection *stub_sec;
2653
2654      for (input_bfd = info->input_bfds, bfd_indx = 0;
2655	   input_bfd != NULL;
2656	   input_bfd = input_bfd->link.next, bfd_indx++)
2657	{
2658	  Elf_Internal_Shdr *symtab_hdr;
2659	  asection *section;
2660	  Elf_Internal_Sym *local_syms;
2661
2662	  /* We'll need the symbol table in a second.  */
2663	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2664	  if (symtab_hdr->sh_info == 0)
2665	    continue;
2666
2667	  local_syms = htab->all_local_syms[bfd_indx];
2668
2669	  /* Walk over each section attached to the input bfd.  */
2670	  for (section = input_bfd->sections;
2671	       section != NULL;
2672	       section = section->next)
2673	    {
2674	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
2675
2676	      /* If there aren't any relocs, then there's nothing more
2677		 to do.  */
2678	      if ((section->flags & SEC_RELOC) == 0
2679		  || section->reloc_count == 0)
2680		continue;
2681
2682	      /* If this section is a link-once section that will be
2683		 discarded, then don't create any stubs.  */
2684	      if (section->output_section == NULL
2685		  || section->output_section->owner != output_bfd)
2686		continue;
2687
2688	      /* Get the relocs.  */
2689	      internal_relocs
2690		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
2691					     info->keep_memory);
2692	      if (internal_relocs == NULL)
2693		goto error_ret_free_local;
2694
2695	      /* Now examine each relocation.  */
2696	      irela = internal_relocs;
2697	      irelaend = irela + section->reloc_count;
2698	      for (; irela < irelaend; irela++)
2699		{
2700		  unsigned int r_type, r_indx;
2701		  enum elf32_nios2_stub_type stub_type;
2702		  struct elf32_nios2_stub_hash_entry *hsh;
2703		  asection *sym_sec;
2704		  bfd_vma sym_value;
2705		  bfd_vma destination;
2706		  struct elf32_nios2_link_hash_entry *hh;
2707		  char *stub_name;
2708		  const asection *id_sec;
2709
2710		  r_type = ELF32_R_TYPE (irela->r_info);
2711		  r_indx = ELF32_R_SYM (irela->r_info);
2712
2713		  if (r_type >= (unsigned int) R_NIOS2_ILLEGAL)
2714		    {
2715		      bfd_set_error (bfd_error_bad_value);
2716		    error_ret_free_internal:
2717		      if (elf_section_data (section)->relocs == NULL)
2718			free (internal_relocs);
2719		      goto error_ret_free_local;
2720		    }
2721
2722		  /* Only look for stubs on CALL and JMPI instructions.  */
2723		  if (r_type != (unsigned int) R_NIOS2_CALL26)
2724		    continue;
2725
2726		  /* Now determine the call target, its name, value,
2727		     section.  */
2728		  sym_sec = NULL;
2729		  sym_value = 0;
2730		  destination = 0;
2731		  hh = NULL;
2732		  if (r_indx < symtab_hdr->sh_info)
2733		    {
2734		      /* It's a local symbol.  */
2735		      Elf_Internal_Sym *sym;
2736		      Elf_Internal_Shdr *hdr;
2737		      unsigned int shndx;
2738
2739		      sym = local_syms + r_indx;
2740		      if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
2741			sym_value = sym->st_value;
2742		      shndx = sym->st_shndx;
2743		      if (shndx < elf_numsections (input_bfd))
2744			{
2745			  hdr = elf_elfsections (input_bfd)[shndx];
2746			  sym_sec = hdr->bfd_section;
2747			  destination = (sym_value + irela->r_addend
2748					 + sym_sec->output_offset
2749					 + sym_sec->output_section->vma);
2750			}
2751		    }
2752		  else
2753		    {
2754		      /* It's an external symbol.  */
2755		      int e_indx;
2756
2757		      e_indx = r_indx - symtab_hdr->sh_info;
2758		      hh = ((struct elf32_nios2_link_hash_entry *)
2759			    elf_sym_hashes (input_bfd)[e_indx]);
2760
2761		      while (hh->root.root.type == bfd_link_hash_indirect
2762			     || hh->root.root.type == bfd_link_hash_warning)
2763			hh = ((struct elf32_nios2_link_hash_entry *)
2764			      hh->root.root.u.i.link);
2765
2766		      if (hh->root.root.type == bfd_link_hash_defined
2767			  || hh->root.root.type == bfd_link_hash_defweak)
2768			{
2769			  sym_sec = hh->root.root.u.def.section;
2770			  sym_value = hh->root.root.u.def.value;
2771
2772			  if (sym_sec->output_section != NULL)
2773			    destination = (sym_value + irela->r_addend
2774					   + sym_sec->output_offset
2775					   + sym_sec->output_section->vma);
2776			  else
2777			    continue;
2778			}
2779		      else if (hh->root.root.type == bfd_link_hash_undefweak)
2780			{
2781			  if (! bfd_link_pic (info))
2782			    continue;
2783			}
2784		      else if (hh->root.root.type == bfd_link_hash_undefined)
2785			{
2786			  if (! (info->unresolved_syms_in_objects == RM_IGNORE
2787				 && (ELF_ST_VISIBILITY (hh->root.other)
2788				     == STV_DEFAULT)))
2789			    continue;
2790			}
2791		      else
2792			{
2793			  bfd_set_error (bfd_error_bad_value);
2794			  goto error_ret_free_internal;
2795			}
2796		    }
2797
2798		  /* Determine what (if any) linker stub is needed.  */
2799		  stub_type = nios2_type_of_stub (section, irela, hh, htab,
2800						  destination, info);
2801		  if (stub_type == nios2_stub_none)
2802		    continue;
2803
2804		  /* Support for grouping stub sections.  */
2805		  if (stub_type == nios2_stub_call26_before)
2806		    id_sec = htab->stub_group[section->id].first_sec;
2807		  else
2808		    id_sec = htab->stub_group[section->id].last_sec;
2809
2810		  /* Get the name of this stub.  */
2811		  stub_name = nios2_stub_name (id_sec, sym_sec, hh, irela,
2812					       stub_type);
2813		  if (!stub_name)
2814		    goto error_ret_free_internal;
2815
2816		  hsh = nios2_stub_hash_lookup (&htab->bstab,
2817						stub_name,
2818						FALSE, FALSE);
2819		  if (hsh != NULL)
2820		    {
2821		      /* The proper stub has already been created.  */
2822		      free (stub_name);
2823		      continue;
2824		    }
2825
2826		  hsh = nios2_add_stub (stub_name, section, htab, stub_type);
2827		  if (hsh == NULL)
2828		    {
2829		      free (stub_name);
2830		      goto error_ret_free_internal;
2831		    }
2832		  hsh->target_value = sym_value;
2833		  hsh->target_section = sym_sec;
2834		  hsh->stub_type = stub_type;
2835		  hsh->hh = hh;
2836		  hsh->addend = irela->r_addend;
2837		  stub_changed = TRUE;
2838		}
2839
2840	      /* We're done with the internal relocs, free them.  */
2841	      if (elf_section_data (section)->relocs == NULL)
2842		free (internal_relocs);
2843	    }
2844	}
2845
2846      if (!stub_changed)
2847	break;
2848
2849      /* OK, we've added some stubs.  Find out the new size of the
2850	 stub sections.  */
2851      for (stub_sec = htab->stub_bfd->sections;
2852	   stub_sec != NULL;
2853	   stub_sec = stub_sec->next)
2854	stub_sec->size = 0;
2855
2856      bfd_hash_traverse (&htab->bstab, nios2_size_one_stub, htab);
2857
2858      /* Ask the linker to do its stuff.  */
2859      (*htab->layout_sections_again) ();
2860      stub_changed = FALSE;
2861    }
2862
2863  free (htab->all_local_syms);
2864  return TRUE;
2865
2866 error_ret_free_local:
2867  free (htab->all_local_syms);
2868  return FALSE;
2869}
2870
2871/* Build all the stubs associated with the current output file.  The
2872   stubs are kept in a hash table attached to the main linker hash
2873   table.  This function is called via nios2elf_finish in the linker.  */
2874bfd_boolean
2875nios2_elf32_build_stubs (struct bfd_link_info *info)
2876{
2877  asection *stub_sec;
2878  struct bfd_hash_table *table;
2879  struct elf32_nios2_link_hash_table *htab;
2880
2881  htab = elf32_nios2_hash_table (info);
2882
2883  for (stub_sec = htab->stub_bfd->sections;
2884       stub_sec != NULL;
2885       stub_sec = stub_sec->next)
2886    /* The stub_bfd may contain non-stub sections if it is also the
2887       dynobj.  Any such non-stub sections are created with the
2888       SEC_LINKER_CREATED flag set, while stub sections do not
2889       have that flag.  Ignore any non-stub sections here.  */
2890    if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
2891      {
2892	bfd_size_type size;
2893
2894	/* Allocate memory to hold the linker stubs.  */
2895	size = stub_sec->size;
2896	stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
2897	if (stub_sec->contents == NULL && size != 0)
2898	  return FALSE;
2899	stub_sec->size = 0;
2900      }
2901
2902  /* Build the stubs as directed by the stub hash table.  */
2903  table = &htab->bstab;
2904  bfd_hash_traverse (table, nios2_build_one_stub, info);
2905
2906  return TRUE;
2907}
2908
2909
2910#define is_nios2_elf(bfd) \
2911  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
2912   && elf_object_id (bfd) == NIOS2_ELF_DATA)
2913
2914/* Merge backend specific data from an object file to the output
2915   object file when linking.  */
2916
2917static bfd_boolean
2918nios2_elf32_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
2919{
2920  bfd *obfd = info->output_bfd;
2921  flagword old_flags;
2922  flagword new_flags;
2923
2924  if (!is_nios2_elf (ibfd) || !is_nios2_elf (obfd))
2925    return TRUE;
2926
2927  /* Check if we have the same endianness.  */
2928  if (! _bfd_generic_verify_endian_match (ibfd, info))
2929    return FALSE;
2930
2931  new_flags = elf_elfheader (ibfd)->e_flags;
2932  old_flags = elf_elfheader (obfd)->e_flags;
2933  if (!elf_flags_init (obfd))
2934    {
2935      /* First call, no flags set.  */
2936      elf_flags_init (obfd) = TRUE;
2937      elf_elfheader (obfd)->e_flags = new_flags;
2938
2939      switch (new_flags)
2940	{
2941	default:
2942	case EF_NIOS2_ARCH_R1:
2943	  bfd_default_set_arch_mach (obfd, bfd_arch_nios2, bfd_mach_nios2r1);
2944	  break;
2945	case EF_NIOS2_ARCH_R2:
2946	  if (bfd_big_endian (ibfd))
2947	    {
2948	      _bfd_error_handler
2949		(_("error: %B: Big-endian R2 is not supported."), ibfd);
2950	      bfd_set_error (bfd_error_bad_value);
2951	      return FALSE;
2952	    }
2953	  bfd_default_set_arch_mach (obfd, bfd_arch_nios2, bfd_mach_nios2r2);
2954	  break;
2955	}
2956    }
2957
2958  /* Incompatible flags.  */
2959  else if (new_flags != old_flags)
2960    {
2961      /* So far, the only incompatible flags denote incompatible
2962	 architectures.  */
2963      _bfd_error_handler
2964	/* xgettext:c-format */
2965	(_("error: %B: Conflicting CPU architectures %d/%d"),
2966	 ibfd, new_flags, old_flags);
2967      bfd_set_error (bfd_error_bad_value);
2968      return FALSE;
2969    }
2970
2971  /* Merge Tag_compatibility attributes and any common GNU ones.  */
2972  _bfd_elf_merge_object_attributes (ibfd, info);
2973
2974  return TRUE;
2975}
2976
2977
2978/* Implement bfd_elf32_bfd_reloc_type_lookup:
2979   Given a BFD reloc type, return a howto structure.  */
2980static reloc_howto_type *
2981nios2_elf32_bfd_reloc_type_lookup (bfd *abfd,
2982				   bfd_reloc_code_real_type code)
2983{
2984  int i;
2985
2986  for (i = 0;
2987       i < (int) (sizeof (nios2_reloc_map) / sizeof (struct elf_reloc_map));
2988       ++i)
2989    if (nios2_reloc_map[i].bfd_val == code)
2990      return lookup_howto (nios2_reloc_map[i].elf_val, abfd);
2991  return NULL;
2992}
2993
2994/* Implement bfd_elf32_bfd_reloc_name_lookup:
2995   Given a reloc name, return a howto structure.  */
2996static reloc_howto_type *
2997nios2_elf32_bfd_reloc_name_lookup (bfd *abfd,
2998				   const char *r_name)
2999{
3000  int i;
3001  reloc_howto_type *howto_tbl;
3002  int howto_tbl_size;
3003
3004  if (BFD_IS_R2 (abfd))
3005    {
3006      howto_tbl = elf_nios2_r2_howto_table_rel;
3007      howto_tbl_size = (int) (sizeof (elf_nios2_r2_howto_table_rel)
3008			      / sizeof (elf_nios2_r2_howto_table_rel[0]));
3009    }
3010  else
3011    {
3012      howto_tbl = elf_nios2_r1_howto_table_rel;
3013      howto_tbl_size = (int) (sizeof (elf_nios2_r1_howto_table_rel)
3014			      / sizeof (elf_nios2_r1_howto_table_rel[0]));
3015    }
3016
3017  for (i = 0; i < howto_tbl_size; i++)
3018    if (howto_tbl[i].name && strcasecmp (howto_tbl[i].name, r_name) == 0)
3019      return howto_tbl + i;
3020  return NULL;
3021}
3022
3023/* Implement elf_info_to_howto:
3024   Given a ELF32 relocation, fill in a arelent structure.  */
3025static void
3026nios2_elf32_info_to_howto (bfd *abfd, arelent *cache_ptr,
3027			   Elf_Internal_Rela *dst)
3028{
3029  unsigned int r_type;
3030
3031  r_type = ELF32_R_TYPE (dst->r_info);
3032  cache_ptr->howto = lookup_howto (r_type, abfd);
3033}
3034
3035/* Return the base VMA address which should be subtracted from real addresses
3036   when resolving @dtpoff relocation.
3037   This is PT_TLS segment p_vaddr.  */
3038static bfd_vma
3039dtpoff_base (struct bfd_link_info *info)
3040{
3041  /* If tls_sec is NULL, we should have signalled an error already.  */
3042  if (elf_hash_table (info)->tls_sec == NULL)
3043    return 0;
3044  return elf_hash_table (info)->tls_sec->vma;
3045}
3046
3047/* Return the relocation value for @tpoff relocation
3048   if STT_TLS virtual address is ADDRESS.  */
3049static bfd_vma
3050tpoff (struct bfd_link_info *info, bfd_vma address)
3051{
3052  struct elf_link_hash_table *htab = elf_hash_table (info);
3053
3054  /* If tls_sec is NULL, we should have signalled an error already.  */
3055  if (htab->tls_sec == NULL)
3056    return 0;
3057  return address - htab->tls_sec->vma;
3058}
3059
3060/* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
3061   dangerous relocation.  */
3062static bfd_boolean
3063nios2_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp, struct bfd_link_info *info)
3064{
3065
3066  bfd_boolean gp_found;
3067  struct bfd_hash_entry *h;
3068  struct bfd_link_hash_entry *lh;
3069
3070  /* If we've already figured out what GP will be, just return it. */
3071  *pgp = _bfd_get_gp_value (output_bfd);
3072  if (*pgp)
3073    return TRUE;
3074
3075  h = bfd_hash_lookup (&info->hash->table, "_gp", FALSE, FALSE);
3076  lh = (struct bfd_link_hash_entry *) h;
3077lookup:
3078  if (lh)
3079    {
3080      switch (lh->type)
3081	{
3082	case bfd_link_hash_undefined:
3083	case bfd_link_hash_undefweak:
3084	case bfd_link_hash_common:
3085	  gp_found = FALSE;
3086	  break;
3087	case bfd_link_hash_defined:
3088	case bfd_link_hash_defweak:
3089	  gp_found = TRUE;
3090	  {
3091	    asection *sym_sec = lh->u.def.section;
3092	    bfd_vma sym_value = lh->u.def.value;
3093
3094	    if (sym_sec->output_section)
3095	      sym_value = (sym_value + sym_sec->output_offset
3096			   + sym_sec->output_section->vma);
3097	    *pgp = sym_value;
3098	  }
3099	  break;
3100	case bfd_link_hash_indirect:
3101	case bfd_link_hash_warning:
3102	  lh = lh->u.i.link;
3103	  /* @@FIXME  ignoring warning for now */
3104	  goto lookup;
3105	case bfd_link_hash_new:
3106	default:
3107	  abort ();
3108	}
3109    }
3110  else
3111    gp_found = FALSE;
3112
3113  if (!gp_found)
3114    {
3115      /* Only get the error once. */
3116      *pgp = 4;
3117      _bfd_set_gp_value (output_bfd, *pgp);
3118      return FALSE;
3119    }
3120
3121  _bfd_set_gp_value (output_bfd, *pgp);
3122
3123  return TRUE;
3124}
3125
3126/* Retrieve the previously cached _gp pointer, returning bfd_reloc_dangerous
3127   if it's not available as we don't have a link_info pointer available here
3128   to look it up in the output symbol table.  We don't need to adjust the
3129   symbol value for an external symbol if we are producing relocatable
3130   output.  */
3131static bfd_reloc_status_type
3132nios2_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
3133		    char **error_message, bfd_vma *pgp)
3134{
3135  if (bfd_is_und_section (symbol->section) && !relocatable)
3136    {
3137      *pgp = 0;
3138      return bfd_reloc_undefined;
3139    }
3140
3141  *pgp = _bfd_get_gp_value (output_bfd);
3142  if (*pgp == 0 && (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0))
3143    {
3144      if (relocatable)
3145	{
3146	  /* Make up a value.  */
3147	  *pgp = symbol->section->output_section->vma + 0x4000;
3148	  _bfd_set_gp_value (output_bfd, *pgp);
3149	}
3150      else
3151	{
3152	  *error_message
3153	    = (char *) _("global pointer relative relocation when _gp not defined");
3154	  return bfd_reloc_dangerous;
3155	}
3156    }
3157
3158  return bfd_reloc_ok;
3159}
3160
3161/* Do the relocations that require special handling.  */
3162static bfd_reloc_status_type
3163nios2_elf32_do_hi16_relocate (bfd *abfd, reloc_howto_type *howto,
3164			      asection *input_section,
3165			      bfd_byte *data, bfd_vma offset,
3166			      bfd_vma symbol_value, bfd_vma addend)
3167{
3168  symbol_value = symbol_value + addend;
3169  addend = 0;
3170  symbol_value = (symbol_value >> 16) & 0xffff;
3171  return _bfd_final_link_relocate (howto, abfd, input_section,
3172				   data, offset, symbol_value, addend);
3173}
3174
3175static bfd_reloc_status_type
3176nios2_elf32_do_lo16_relocate (bfd *abfd, reloc_howto_type *howto,
3177			      asection *input_section,
3178			      bfd_byte *data, bfd_vma offset,
3179			      bfd_vma symbol_value, bfd_vma addend)
3180{
3181  symbol_value = symbol_value + addend;
3182  addend = 0;
3183  symbol_value = symbol_value & 0xffff;
3184  return _bfd_final_link_relocate (howto, abfd, input_section,
3185				   data, offset, symbol_value, addend);
3186}
3187
3188static bfd_reloc_status_type
3189nios2_elf32_do_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto,
3190				 asection *input_section,
3191				 bfd_byte *data, bfd_vma offset,
3192				 bfd_vma symbol_value, bfd_vma addend)
3193{
3194  symbol_value = symbol_value + addend;
3195  addend = 0;
3196  symbol_value = hiadj(symbol_value);
3197  return _bfd_final_link_relocate (howto, abfd, input_section, data, offset,
3198				   symbol_value, addend);
3199}
3200
3201static bfd_reloc_status_type
3202nios2_elf32_do_pcrel_lo16_relocate (bfd *abfd, reloc_howto_type *howto,
3203				    asection *input_section,
3204				    bfd_byte *data, bfd_vma offset,
3205				    bfd_vma symbol_value, bfd_vma addend)
3206{
3207  symbol_value = symbol_value + addend;
3208  addend = 0;
3209  symbol_value = symbol_value & 0xffff;
3210  return _bfd_final_link_relocate (howto, abfd, input_section,
3211				   data, offset, symbol_value, addend);
3212}
3213
3214static bfd_reloc_status_type
3215nios2_elf32_do_pcrel_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto,
3216				       asection *input_section,
3217				       bfd_byte *data, bfd_vma offset,
3218				       bfd_vma symbol_value, bfd_vma addend)
3219{
3220  symbol_value = symbol_value + addend;
3221  symbol_value -= (input_section->output_section->vma
3222		   + input_section->output_offset);
3223  symbol_value -= offset;
3224  addend = 0;
3225  symbol_value = hiadj(symbol_value);
3226  return _bfd_final_link_relocate (howto, abfd, input_section, data, offset,
3227				   symbol_value, addend);
3228}
3229
3230static bfd_reloc_status_type
3231nios2_elf32_do_pcrel16_relocate (bfd *abfd, reloc_howto_type *howto,
3232				 asection *input_section,
3233				 bfd_byte *data, bfd_vma offset,
3234				 bfd_vma symbol_value, bfd_vma addend)
3235{
3236  /* NIOS2 pc relative relocations are relative to the next 32-bit instruction
3237     so we need to subtract 4 before doing a final_link_relocate. */
3238  symbol_value = symbol_value + addend - 4;
3239  addend = 0;
3240  return _bfd_final_link_relocate (howto, abfd, input_section,
3241				   data, offset, symbol_value, addend);
3242}
3243
3244static bfd_reloc_status_type
3245nios2_elf32_do_call26_relocate (bfd *abfd, reloc_howto_type *howto,
3246				asection *input_section,
3247				bfd_byte *data, bfd_vma offset,
3248				bfd_vma symbol_value, bfd_vma addend)
3249{
3250  /* Check that the relocation is in the same page as the current address.  */
3251  if (CALL26_SEGMENT (symbol_value + addend)
3252      != CALL26_SEGMENT (input_section->output_section->vma
3253			 + input_section->output_offset
3254			 + offset))
3255    return bfd_reloc_overflow;
3256
3257  /* Check that the target address is correctly aligned on a 4-byte
3258     boundary.  */
3259  if ((symbol_value + addend) & 0x3)
3260    return bfd_reloc_overflow;
3261
3262  return _bfd_final_link_relocate (howto, abfd, input_section,
3263				   data, offset, symbol_value, addend);
3264}
3265
3266static bfd_reloc_status_type
3267nios2_elf32_do_gprel_relocate (bfd *abfd, reloc_howto_type *howto,
3268			       asection *input_section,
3269			       bfd_byte *data, bfd_vma offset,
3270			       bfd_vma symbol_value, bfd_vma addend)
3271{
3272  /* Because we need the output_bfd, the special handling is done
3273     in nios2_elf32_relocate_section or in nios2_elf32_gprel_relocate.  */
3274  return _bfd_final_link_relocate (howto, abfd, input_section,
3275				   data, offset, symbol_value, addend);
3276}
3277
3278static bfd_reloc_status_type
3279nios2_elf32_do_ujmp_relocate (bfd *abfd, reloc_howto_type *howto,
3280			      asection *input_section,
3281			      bfd_byte *data, bfd_vma offset,
3282			      bfd_vma symbol_value, bfd_vma addend)
3283{
3284  bfd_vma symbol_lo16, symbol_hi16;
3285  bfd_reloc_status_type r;
3286  symbol_value = symbol_value + addend;
3287  addend = 0;
3288  symbol_hi16 = (symbol_value >> 16) & 0xffff;
3289  symbol_lo16 = symbol_value & 0xffff;
3290
3291  r = _bfd_final_link_relocate (howto, abfd, input_section,
3292				data, offset, symbol_hi16, addend);
3293
3294  if (r == bfd_reloc_ok)
3295    return _bfd_final_link_relocate (howto, abfd, input_section,
3296				     data, offset + 4, symbol_lo16, addend);
3297
3298  return r;
3299}
3300
3301static bfd_reloc_status_type
3302nios2_elf32_do_cjmp_relocate (bfd *abfd, reloc_howto_type *howto,
3303			      asection *input_section,
3304			      bfd_byte *data, bfd_vma offset,
3305			      bfd_vma symbol_value, bfd_vma addend)
3306{
3307  bfd_vma symbol_lo16, symbol_hi16;
3308  bfd_reloc_status_type r;
3309  symbol_value = symbol_value + addend;
3310  addend = 0;
3311  symbol_hi16 = (symbol_value >> 16) & 0xffff;
3312  symbol_lo16 = symbol_value & 0xffff;
3313
3314  r = _bfd_final_link_relocate (howto, abfd, input_section,
3315				data, offset, symbol_hi16, addend);
3316
3317  if (r == bfd_reloc_ok)
3318    return _bfd_final_link_relocate (howto, abfd, input_section,
3319				     data, offset + 4, symbol_lo16, addend);
3320
3321  return r;
3322}
3323
3324static bfd_reloc_status_type
3325nios2_elf32_do_callr_relocate (bfd *abfd, reloc_howto_type *howto,
3326			       asection *input_section,
3327			       bfd_byte *data, bfd_vma offset,
3328			       bfd_vma symbol_value, bfd_vma addend)
3329{
3330  bfd_vma symbol_lo16, symbol_hi16;
3331  bfd_reloc_status_type r;
3332  symbol_value = symbol_value + addend;
3333  addend = 0;
3334  symbol_hi16 = (symbol_value >> 16) & 0xffff;
3335  symbol_lo16 = symbol_value & 0xffff;
3336
3337  r = _bfd_final_link_relocate (howto, abfd, input_section,
3338				data, offset, symbol_hi16, addend);
3339
3340  if (r == bfd_reloc_ok)
3341    return _bfd_final_link_relocate (howto, abfd, input_section,
3342				     data, offset + 4, symbol_lo16, addend);
3343
3344  return r;
3345}
3346
3347/* HOWTO handlers for relocations that require special handling.  */
3348
3349/* This is for relocations used only when relaxing to ensure
3350   changes in size of section don't screw up .align.  */
3351static bfd_reloc_status_type
3352nios2_elf32_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
3353			  asymbol *symbol ATTRIBUTE_UNUSED,
3354			  void *data ATTRIBUTE_UNUSED, asection *input_section,
3355			  bfd *output_bfd,
3356			  char **error_message ATTRIBUTE_UNUSED)
3357{
3358  if (output_bfd != NULL)
3359    reloc_entry->address += input_section->output_offset;
3360  return bfd_reloc_ok;
3361}
3362
3363static bfd_reloc_status_type
3364nios2_elf32_hi16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3365			   void *data, asection *input_section,
3366			   bfd *output_bfd,
3367			   char **error_message ATTRIBUTE_UNUSED)
3368{
3369  /* This part is from bfd_elf_generic_reloc.  */
3370  if (output_bfd != NULL
3371      && (symbol->flags & BSF_SECTION_SYM) == 0
3372      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3373    {
3374      reloc_entry->address += input_section->output_offset;
3375      return bfd_reloc_ok;
3376    }
3377
3378  if (output_bfd != NULL)
3379    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3380    return bfd_reloc_continue;
3381
3382  return nios2_elf32_do_hi16_relocate (abfd, reloc_entry->howto,
3383				       input_section,
3384				       data, reloc_entry->address,
3385				       (symbol->value
3386					+ symbol->section->output_section->vma
3387					+ symbol->section->output_offset),
3388				       reloc_entry->addend);
3389}
3390
3391static bfd_reloc_status_type
3392nios2_elf32_lo16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3393			   void *data, asection *input_section,
3394			   bfd *output_bfd,
3395			   char **error_message ATTRIBUTE_UNUSED)
3396{
3397  /* This part is from bfd_elf_generic_reloc.  */
3398  if (output_bfd != NULL
3399      && (symbol->flags & BSF_SECTION_SYM) == 0
3400      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3401    {
3402      reloc_entry->address += input_section->output_offset;
3403      return bfd_reloc_ok;
3404    }
3405
3406  if (output_bfd != NULL)
3407    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3408    return bfd_reloc_continue;
3409
3410  return nios2_elf32_do_lo16_relocate (abfd, reloc_entry->howto,
3411				       input_section,
3412				       data, reloc_entry->address,
3413				       (symbol->value
3414					+ symbol->section->output_section->vma
3415					+ symbol->section->output_offset),
3416				       reloc_entry->addend);
3417}
3418
3419static bfd_reloc_status_type
3420nios2_elf32_hiadj16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3421			      void *data, asection *input_section,
3422			      bfd *output_bfd,
3423			      char **error_message ATTRIBUTE_UNUSED)
3424{
3425  /* This part is from bfd_elf_generic_reloc.  */
3426  if (output_bfd != NULL
3427      && (symbol->flags & BSF_SECTION_SYM) == 0
3428      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3429    {
3430      reloc_entry->address += input_section->output_offset;
3431      return bfd_reloc_ok;
3432    }
3433
3434  if (output_bfd != NULL)
3435    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3436    return bfd_reloc_continue;
3437
3438  return nios2_elf32_do_hiadj16_relocate (abfd, reloc_entry->howto,
3439					  input_section,
3440					  data, reloc_entry->address,
3441					  (symbol->value
3442					   + symbol->section->output_section->vma
3443					   + symbol->section->output_offset),
3444					  reloc_entry->addend);
3445}
3446
3447static bfd_reloc_status_type
3448nios2_elf32_pcrel_lo16_relocate (bfd *abfd, arelent *reloc_entry,
3449				 asymbol *symbol, void *data,
3450				 asection *input_section, bfd *output_bfd,
3451				 char **error_message ATTRIBUTE_UNUSED)
3452{
3453  /* This part is from bfd_elf_generic_reloc.  */
3454  if (output_bfd != NULL
3455      && (symbol->flags & BSF_SECTION_SYM) == 0
3456      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3457    {
3458      reloc_entry->address += input_section->output_offset;
3459      return bfd_reloc_ok;
3460    }
3461
3462  if (output_bfd != NULL)
3463    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3464    return bfd_reloc_continue;
3465
3466  return nios2_elf32_do_pcrel_lo16_relocate (
3467    abfd, reloc_entry->howto, input_section, data, reloc_entry->address,
3468    (symbol->value + symbol->section->output_section->vma
3469     + symbol->section->output_offset),
3470    reloc_entry->addend);
3471}
3472
3473static bfd_reloc_status_type
3474nios2_elf32_pcrel_hiadj16_relocate (bfd *abfd, arelent *reloc_entry,
3475				    asymbol *symbol, void *data,
3476				    asection *input_section, bfd *output_bfd,
3477				    char **error_message ATTRIBUTE_UNUSED)
3478{
3479  /* This part is from bfd_elf_generic_reloc.  */
3480  if (output_bfd != NULL
3481      && (symbol->flags & BSF_SECTION_SYM) == 0
3482      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3483    {
3484      reloc_entry->address += input_section->output_offset;
3485      return bfd_reloc_ok;
3486    }
3487
3488  if (output_bfd != NULL)
3489    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3490    return bfd_reloc_continue;
3491
3492  return nios2_elf32_do_pcrel_hiadj16_relocate (
3493    abfd, reloc_entry->howto, input_section, data, reloc_entry->address,
3494    (symbol->value + symbol->section->output_section->vma
3495     + symbol->section->output_offset),
3496    reloc_entry->addend);
3497}
3498
3499static bfd_reloc_status_type
3500nios2_elf32_pcrel16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3501			      void *data, asection *input_section,
3502			      bfd *output_bfd,
3503			      char **error_message ATTRIBUTE_UNUSED)
3504{
3505  /* This part is from bfd_elf_generic_reloc.  */
3506  if (output_bfd != NULL
3507      && (symbol->flags & BSF_SECTION_SYM) == 0
3508      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3509    {
3510      reloc_entry->address += input_section->output_offset;
3511      return bfd_reloc_ok;
3512    }
3513
3514  if (output_bfd != NULL)
3515    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3516    return bfd_reloc_continue;
3517
3518  return nios2_elf32_do_pcrel16_relocate (abfd, reloc_entry->howto,
3519					  input_section,
3520					  data, reloc_entry->address,
3521					  (symbol->value
3522					   + symbol->section->output_section->vma
3523					   + symbol->section->output_offset),
3524					  reloc_entry->addend);
3525}
3526
3527static bfd_reloc_status_type
3528nios2_elf32_call26_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3529			     void *data, asection *input_section,
3530			     bfd *output_bfd,
3531			     char **error_message ATTRIBUTE_UNUSED)
3532{
3533  /* This part is from bfd_elf_generic_reloc.  */
3534  if (output_bfd != NULL
3535      && (symbol->flags & BSF_SECTION_SYM) == 0
3536      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3537    {
3538      reloc_entry->address += input_section->output_offset;
3539      return bfd_reloc_ok;
3540    }
3541
3542  if (output_bfd != NULL)
3543    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3544    return bfd_reloc_continue;
3545
3546  return nios2_elf32_do_call26_relocate (abfd, reloc_entry->howto,
3547					 input_section,
3548					 data, reloc_entry->address,
3549					 (symbol->value
3550					  + symbol->section->output_section->vma
3551					  + symbol->section->output_offset),
3552					 reloc_entry->addend);
3553}
3554
3555static bfd_reloc_status_type
3556nios2_elf32_gprel_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3557			    void *data, asection *input_section,
3558			    bfd *output_bfd, char **msg)
3559{
3560  bfd_vma relocation;
3561  bfd_vma gp;
3562  bfd_reloc_status_type r;
3563
3564
3565  /* This part is from bfd_elf_generic_reloc.  */
3566  if (output_bfd != NULL
3567      && (symbol->flags & BSF_SECTION_SYM) == 0
3568      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3569    {
3570      reloc_entry->address += input_section->output_offset;
3571      return bfd_reloc_ok;
3572    }
3573
3574  if (output_bfd != NULL)
3575    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3576    return bfd_reloc_continue;
3577
3578  relocation = (symbol->value
3579		+ symbol->section->output_section->vma
3580		+ symbol->section->output_offset);
3581
3582  /* This assumes we've already cached the _gp symbol.  */
3583  r = nios2_elf_final_gp (abfd, symbol, FALSE, msg, &gp);
3584  if (r == bfd_reloc_ok)
3585    {
3586      relocation = relocation + reloc_entry->addend - gp;
3587      reloc_entry->addend = 0;
3588      if ((signed) relocation < -32768 || (signed) relocation > 32767)
3589	{
3590	  *msg = _("global pointer relative address out of range");
3591	  r = bfd_reloc_outofrange;
3592	}
3593      else
3594	r = nios2_elf32_do_gprel_relocate (abfd, reloc_entry->howto,
3595					   input_section,
3596					   data, reloc_entry->address,
3597					   relocation, reloc_entry->addend);
3598    }
3599
3600  return r;
3601}
3602
3603static bfd_reloc_status_type
3604nios2_elf32_ujmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3605			   void *data, asection *input_section,
3606			   bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
3607{
3608  /* This part is from bfd_elf_generic_reloc.  */
3609  if (output_bfd != NULL
3610      && (symbol->flags & BSF_SECTION_SYM) == 0
3611      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3612    {
3613      reloc_entry->address += input_section->output_offset;
3614      return bfd_reloc_ok;
3615    }
3616
3617  if (output_bfd != NULL)
3618    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3619    return bfd_reloc_continue;
3620
3621  return nios2_elf32_do_ujmp_relocate (abfd, reloc_entry->howto,
3622				       input_section,
3623				       data, reloc_entry->address,
3624				       (symbol->value
3625					+ symbol->section->output_section->vma
3626					+ symbol->section->output_offset),
3627				       reloc_entry->addend);
3628}
3629
3630static bfd_reloc_status_type
3631nios2_elf32_cjmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3632			   void *data, asection *input_section,
3633			   bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
3634{
3635  /* This part is from bfd_elf_generic_reloc.  */
3636  if (output_bfd != NULL
3637      && (symbol->flags & BSF_SECTION_SYM) == 0
3638      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3639    {
3640      reloc_entry->address += input_section->output_offset;
3641      return bfd_reloc_ok;
3642    }
3643
3644  if (output_bfd != NULL)
3645    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3646    return bfd_reloc_continue;
3647
3648  return nios2_elf32_do_cjmp_relocate (abfd, reloc_entry->howto,
3649				       input_section,
3650				       data, reloc_entry->address,
3651				       (symbol->value
3652					+ symbol->section->output_section->vma
3653					+ symbol->section->output_offset),
3654				       reloc_entry->addend);
3655}
3656
3657static bfd_reloc_status_type
3658nios2_elf32_callr_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
3659			    void *data, asection *input_section,
3660			    bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
3661{
3662  /* This part is from bfd_elf_generic_reloc.  */
3663  if (output_bfd != NULL
3664      && (symbol->flags & BSF_SECTION_SYM) == 0
3665      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
3666    {
3667      reloc_entry->address += input_section->output_offset;
3668      return bfd_reloc_ok;
3669    }
3670
3671  if (output_bfd != NULL)
3672    /* FIXME: See bfd_perform_relocation.  Is this right?  */
3673    return bfd_reloc_continue;
3674
3675  return nios2_elf32_do_callr_relocate (abfd, reloc_entry->howto,
3676					input_section,
3677					data, reloc_entry->address,
3678					(symbol->value
3679					 + symbol->section->output_section->vma
3680					 + symbol->section->output_offset),
3681					reloc_entry->addend);
3682}
3683
3684
3685/* Implement elf_backend_relocate_section.  */
3686static bfd_boolean
3687nios2_elf32_relocate_section (bfd *output_bfd,
3688			      struct bfd_link_info *info,
3689			      bfd *input_bfd,
3690			      asection *input_section,
3691			      bfd_byte *contents,
3692			      Elf_Internal_Rela *relocs,
3693			      Elf_Internal_Sym *local_syms,
3694			      asection **local_sections)
3695{
3696  Elf_Internal_Shdr *symtab_hdr;
3697  struct elf_link_hash_entry **sym_hashes;
3698  Elf_Internal_Rela *rel;
3699  Elf_Internal_Rela *relend;
3700  struct elf32_nios2_link_hash_table *htab;
3701  asection *sgot;
3702  asection *splt;
3703  asection *sreloc = NULL;
3704  bfd_vma *local_got_offsets;
3705  bfd_vma got_base;
3706
3707  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3708  sym_hashes = elf_sym_hashes (input_bfd);
3709  relend = relocs + input_section->reloc_count;
3710
3711  htab = elf32_nios2_hash_table (info);
3712  sgot = htab->root.sgot;
3713  splt = htab->root.splt;
3714  local_got_offsets = elf_local_got_offsets (input_bfd);
3715
3716  if (htab->h_gp_got == NULL)
3717    got_base = 0;
3718  else
3719    got_base = htab->h_gp_got->root.u.def.value;
3720
3721  for (rel = relocs; rel < relend; rel++)
3722    {
3723      reloc_howto_type *howto;
3724      unsigned long r_symndx;
3725      Elf_Internal_Sym *sym;
3726      asection *sec;
3727      struct elf_link_hash_entry *h;
3728      struct elf32_nios2_link_hash_entry *eh;
3729      bfd_vma relocation;
3730      bfd_vma gp;
3731      bfd_reloc_status_type r = bfd_reloc_ok;
3732      const char *name = NULL;
3733      int r_type;
3734      const char *format;
3735      char msgbuf[256];
3736      const char* msg = (const char*) NULL;
3737      bfd_boolean unresolved_reloc;
3738      bfd_vma off;
3739      int use_plt;
3740
3741      r_type = ELF32_R_TYPE (rel->r_info);
3742      r_symndx = ELF32_R_SYM (rel->r_info);
3743
3744      howto = lookup_howto ((unsigned) ELF32_R_TYPE (rel->r_info), output_bfd);
3745      h = NULL;
3746      sym = NULL;
3747      sec = NULL;
3748
3749      if (r_symndx < symtab_hdr->sh_info)
3750	{
3751	  sym = local_syms + r_symndx;
3752	  sec = local_sections[r_symndx];
3753	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
3754	}
3755      else
3756	{
3757	  bfd_boolean warned, ignored;
3758
3759	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
3760				   r_symndx, symtab_hdr, sym_hashes,
3761				   h, sec, relocation,
3762				   unresolved_reloc, warned, ignored);
3763	}
3764
3765      if (sec && discarded_section (sec))
3766	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
3767					 rel, 1, relend, howto, 0, contents);
3768
3769      /* Nothing more to do unless this is a final link.  */
3770      if (bfd_link_relocatable (info))
3771	continue;
3772
3773      if (howto)
3774	{
3775	  switch (howto->type)
3776	    {
3777	    case R_NIOS2_HI16:
3778	      r = nios2_elf32_do_hi16_relocate (input_bfd, howto,
3779						input_section,
3780						contents, rel->r_offset,
3781						relocation, rel->r_addend);
3782	      break;
3783	    case R_NIOS2_LO16:
3784	      r = nios2_elf32_do_lo16_relocate (input_bfd, howto,
3785						input_section,
3786						contents, rel->r_offset,
3787						relocation, rel->r_addend);
3788	      break;
3789	    case R_NIOS2_PCREL_LO:
3790	      r = nios2_elf32_do_pcrel_lo16_relocate (input_bfd, howto,
3791						      input_section,
3792						      contents,
3793						      rel->r_offset,
3794						      relocation,
3795						      rel->r_addend);
3796	      break;
3797	    case R_NIOS2_HIADJ16:
3798	      r = nios2_elf32_do_hiadj16_relocate (input_bfd, howto,
3799						   input_section, contents,
3800						   rel->r_offset, relocation,
3801						   rel->r_addend);
3802	      break;
3803	    case R_NIOS2_PCREL_HA:
3804	      r = nios2_elf32_do_pcrel_hiadj16_relocate (input_bfd, howto,
3805							 input_section,
3806							 contents,
3807							 rel->r_offset,
3808							 relocation,
3809							 rel->r_addend);
3810	      break;
3811	    case R_NIOS2_PCREL16:
3812	      r = nios2_elf32_do_pcrel16_relocate (input_bfd, howto,
3813						   input_section, contents,
3814						   rel->r_offset, relocation,
3815						   rel->r_addend);
3816	      break;
3817	    case R_NIOS2_GPREL:
3818	      /* Turns an absolute address into a gp-relative address.  */
3819	      if (!nios2_elf_assign_gp (output_bfd, &gp, info))
3820		{
3821		  bfd_vma reloc_address;
3822
3823		  if (sec && sec->output_section)
3824		    reloc_address = (sec->output_section->vma
3825				     + sec->output_offset
3826				     + rel->r_offset);
3827		  else
3828		    reloc_address = 0;
3829
3830		  format = _("global pointer relative relocation at address "
3831			     "0x%08x when _gp not defined\n");
3832		  sprintf (msgbuf, format, reloc_address);
3833		  msg = msgbuf;
3834		  r = bfd_reloc_dangerous;
3835		}
3836	      else
3837		{
3838		  bfd_vma symbol_address = rel->r_addend + relocation;
3839		  relocation = symbol_address - gp;
3840		  rel->r_addend = 0;
3841		  if (((signed) relocation < -32768
3842		       || (signed) relocation > 32767)
3843		      && (!h
3844			  || h->root.type == bfd_link_hash_defined
3845			  || h->root.type == bfd_link_hash_defweak))
3846		    {
3847		      if (h)
3848			name = h->root.root.string;
3849		      /* xgettext:c-format */
3850		      format = _("Unable to reach %s (at 0x%08x) from the "
3851				 "global pointer (at 0x%08x) because the "
3852				 "offset (%d) is out of the allowed range, "
3853				 "-32678 to 32767.\n" );
3854		      sprintf (msgbuf, format, name, symbol_address, gp,
3855			       (signed)relocation);
3856		      msg = msgbuf;
3857		      r = bfd_reloc_outofrange;
3858		    }
3859		  else
3860		    r =	_bfd_final_link_relocate (howto, input_bfd,
3861						  input_section, contents,
3862						  rel->r_offset, relocation,
3863						  rel->r_addend);
3864		}
3865	      break;
3866	    case R_NIOS2_UJMP:
3867	      r = nios2_elf32_do_ujmp_relocate (input_bfd, howto,
3868						input_section,
3869						contents, rel->r_offset,
3870						relocation, rel->r_addend);
3871	      break;
3872	    case R_NIOS2_CJMP:
3873	      r = nios2_elf32_do_cjmp_relocate (input_bfd, howto,
3874						input_section,
3875						contents, rel->r_offset,
3876						relocation, rel->r_addend);
3877	      break;
3878	    case R_NIOS2_CALLR:
3879	      r = nios2_elf32_do_callr_relocate (input_bfd, howto,
3880						 input_section, contents,
3881						 rel->r_offset, relocation,
3882						 rel->r_addend);
3883	      break;
3884	    case R_NIOS2_CALL26:
3885	    case R_NIOS2_CALL26_NOAT:
3886	      /* If we have a call to an undefined weak symbol, we just want
3887		 to stuff a zero in the bits of the call instruction and
3888		 bypass the normal call26 relocation handling, because it'll
3889		 diagnose an overflow error if address 0 isn't in the same
3890		 256MB segment as the call site.  Presumably the call
3891		 should be guarded by a null check anyway.  */
3892	      if (h != NULL && h->root.type == bfd_link_hash_undefweak)
3893		{
3894		  BFD_ASSERT (relocation == 0 && rel->r_addend == 0);
3895		  r = _bfd_final_link_relocate (howto, input_bfd,
3896						input_section, contents,
3897						rel->r_offset, relocation,
3898						rel->r_addend);
3899		  break;
3900		}
3901	      /* Handle relocations which should use the PLT entry.
3902		 NIOS2_BFD_RELOC_32 relocations will use the symbol's value,
3903		 which may point to a PLT entry, but we don't need to handle
3904		 that here.  If we created a PLT entry, all branches in this
3905		 object should go to it.  */
3906	      if (h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1)
3907		{
3908		  /* If we've created a .plt section, and assigned a PLT entry
3909		     to this function, it should not be known to bind locally.
3910		     If it were, we would have cleared the PLT entry.  */
3911		  BFD_ASSERT (!SYMBOL_CALLS_LOCAL (info, h));
3912
3913		  relocation = (splt->output_section->vma
3914				+ splt->output_offset
3915				+ h->plt.offset);
3916
3917		  unresolved_reloc = FALSE;
3918		}
3919	      /* Detect R_NIOS2_CALL26 relocations that would overflow the
3920		 256MB segment.  Replace the target with a reference to a
3921		 trampoline instead.
3922		 Note that htab->stub_group is null if relaxation has been
3923		 disabled by the --no-relax linker command-line option, so
3924		 we can use that to skip this processing entirely.  */
3925	      if (howto->type == R_NIOS2_CALL26 && htab->stub_group)
3926		{
3927		  bfd_vma dest = relocation + rel->r_addend;
3928		  enum elf32_nios2_stub_type stub_type;
3929
3930		  eh = (struct elf32_nios2_link_hash_entry *)h;
3931		  stub_type = nios2_type_of_stub (input_section, rel, eh,
3932						  htab, dest, NULL);
3933
3934		  if (stub_type != nios2_stub_none)
3935		    {
3936		      struct elf32_nios2_stub_hash_entry *hsh;
3937
3938		      hsh = nios2_get_stub_entry (input_section, sec,
3939						  eh, rel, htab, stub_type);
3940		      if (hsh == NULL)
3941			{
3942			  r = bfd_reloc_undefined;
3943			  break;
3944			}
3945
3946		      dest = (hsh->stub_offset
3947			      + hsh->stub_sec->output_offset
3948			      + hsh->stub_sec->output_section->vma);
3949		      r = nios2_elf32_do_call26_relocate (input_bfd, howto,
3950							  input_section,
3951							  contents,
3952							  rel->r_offset,
3953							  dest, 0);
3954		      break;
3955		    }
3956		}
3957
3958	      /* Normal case.  */
3959	      r = nios2_elf32_do_call26_relocate (input_bfd, howto,
3960						  input_section, contents,
3961						  rel->r_offset, relocation,
3962						  rel->r_addend);
3963	      break;
3964	    case R_NIOS2_ALIGN:
3965	      r = bfd_reloc_ok;
3966	      /* For symmetry this would be
3967		 r = nios2_elf32_do_ignore_reloc (input_bfd, howto,
3968						  input_section, contents,
3969						  rel->r_offset, relocation,
3970						  rel->r_addend);
3971		but do_ignore_reloc would do no more than return
3972		bfd_reloc_ok. */
3973	      break;
3974
3975	    case R_NIOS2_GOT16:
3976	    case R_NIOS2_CALL16:
3977	    case R_NIOS2_GOT_LO:
3978	    case R_NIOS2_GOT_HA:
3979	    case R_NIOS2_CALL_LO:
3980	    case R_NIOS2_CALL_HA:
3981	      /* Relocation is to the entry for this symbol in the
3982		 global offset table.  */
3983	      if (sgot == NULL)
3984		{
3985		  r = bfd_reloc_notsupported;
3986		  break;
3987		}
3988
3989	      use_plt = 0;
3990
3991	      if (h != NULL)
3992		{
3993		  bfd_boolean dyn;
3994
3995		  eh = (struct elf32_nios2_link_hash_entry *)h;
3996		  use_plt = (eh->got_types_used == CALL_USED
3997			     && h->plt.offset != (bfd_vma) -1);
3998
3999		  off = h->got.offset;
4000		  BFD_ASSERT (off != (bfd_vma) -1);
4001		  dyn = htab->root.dynamic_sections_created;
4002		  if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
4003							 bfd_link_pic (info),
4004							 h)
4005		      || (bfd_link_pic (info)
4006			  && SYMBOL_REFERENCES_LOCAL (info, h))
4007		      || (ELF_ST_VISIBILITY (h->other)
4008			  && h->root.type == bfd_link_hash_undefweak))
4009		    {
4010		      /* This is actually a static link, or it is a -Bsymbolic
4011			 link and the symbol is defined locally.  We must
4012			 initialize this entry in the global offset table.
4013			 Since the offset must always be a multiple of 4, we
4014			 use the least significant bit to record whether we
4015			 have initialized it already.
4016
4017			 When doing a dynamic link, we create a .rela.got
4018			 relocation entry to initialize the value.  This is
4019			 done in the finish_dynamic_symbol routine.  */
4020		      if ((off & 1) != 0)
4021			off &= ~1;
4022		      else
4023			{
4024			  bfd_put_32 (output_bfd, relocation,
4025				      sgot->contents + off);
4026			  h->got.offset |= 1;
4027			}
4028		    }
4029		  else
4030		    unresolved_reloc = FALSE;
4031		}
4032	      else
4033		{
4034		  BFD_ASSERT (local_got_offsets != NULL
4035			      && local_got_offsets[r_symndx] != (bfd_vma) -1);
4036
4037		  off = local_got_offsets[r_symndx];
4038
4039		  /* The offset must always be a multiple of 4.  We use the
4040		     least significant bit to record whether we have already
4041		     generated the necessary reloc.  */
4042		  if ((off & 1) != 0)
4043		    off &= ~1;
4044		  else
4045		    {
4046		      bfd_put_32 (output_bfd, relocation,
4047				  sgot->contents + off);
4048
4049		      if (bfd_link_pic (info))
4050			{
4051			  asection *srelgot;
4052			  Elf_Internal_Rela outrel;
4053			  bfd_byte *loc;
4054
4055			  srelgot = htab->root.srelgot;
4056			  BFD_ASSERT (srelgot != NULL);
4057
4058			  outrel.r_addend = relocation;
4059			  outrel.r_offset = (sgot->output_section->vma
4060					     + sgot->output_offset
4061					     + off);
4062			  outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
4063			  loc = srelgot->contents;
4064			  loc += (srelgot->reloc_count++ *
4065				  sizeof (Elf32_External_Rela));
4066			  bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
4067			}
4068
4069		      local_got_offsets[r_symndx] |= 1;
4070		    }
4071		}
4072
4073	      if (use_plt && bfd_link_pic (info))
4074		{
4075		  off = ((h->plt.offset - 24) / 12 + 3) * 4;
4076		  relocation = (htab->root.sgotplt->output_offset + off
4077				- got_base);
4078		}
4079	      else
4080		relocation = sgot->output_offset + off - got_base;
4081
4082	      /* This relocation does not use the addend.  */
4083	      rel->r_addend = 0;
4084
4085	      switch (howto->type)
4086		{
4087		case R_NIOS2_GOT_LO:
4088		case R_NIOS2_CALL_LO:
4089		  r = nios2_elf32_do_lo16_relocate (input_bfd, howto,
4090						    input_section, contents,
4091						    rel->r_offset, relocation,
4092						    rel->r_addend);
4093		  break;
4094		case R_NIOS2_GOT_HA:
4095		case R_NIOS2_CALL_HA:
4096		  r = nios2_elf32_do_hiadj16_relocate (input_bfd, howto,
4097						       input_section, contents,
4098						       rel->r_offset,
4099						       relocation,
4100						       rel->r_addend);
4101		  break;
4102		default:
4103		  r = _bfd_final_link_relocate (howto, input_bfd,
4104						input_section, contents,
4105						rel->r_offset, relocation,
4106						rel->r_addend);
4107		  break;
4108		}
4109	      break;
4110
4111	    case R_NIOS2_GOTOFF_LO:
4112	    case R_NIOS2_GOTOFF_HA:
4113	    case R_NIOS2_GOTOFF:
4114	      /* Relocation is relative to the global offset table pointer.  */
4115
4116	      BFD_ASSERT (sgot != NULL);
4117	      if (sgot == NULL)
4118		{
4119		  r = bfd_reloc_notsupported;
4120		  break;
4121		}
4122
4123	      /* Note that sgot->output_offset is not involved in this
4124		 calculation.  We always want the start of .got.  */
4125	      relocation -= sgot->output_section->vma;
4126
4127	      /* Now we adjust the relocation to be relative to the GOT pointer
4128		 (the _gp_got symbol), which possibly contains the 0x8000 bias.  */
4129	      relocation -= got_base;
4130
4131	      switch (howto->type)
4132		{
4133		case R_NIOS2_GOTOFF_LO:
4134		  r = nios2_elf32_do_lo16_relocate (input_bfd, howto,
4135						    input_section, contents,
4136						    rel->r_offset, relocation,
4137						    rel->r_addend);
4138		  break;
4139		case R_NIOS2_GOTOFF_HA:
4140		  r = nios2_elf32_do_hiadj16_relocate (input_bfd, howto,
4141						       input_section, contents,
4142						       rel->r_offset,
4143						       relocation,
4144						       rel->r_addend);
4145		  break;
4146		default:
4147		  r = _bfd_final_link_relocate (howto, input_bfd,
4148						input_section, contents,
4149						rel->r_offset, relocation,
4150						rel->r_addend);
4151		  break;
4152		}
4153	      break;
4154
4155	    case R_NIOS2_TLS_LDO16:
4156	      relocation -= dtpoff_base (info) + DTP_OFFSET;
4157
4158	      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
4159					    contents, rel->r_offset,
4160					    relocation, rel->r_addend);
4161	      break;
4162	    case R_NIOS2_TLS_LDM16:
4163	      if (htab->root.sgot == NULL)
4164		abort ();
4165
4166	      off = htab->tls_ldm_got.offset;
4167
4168	      if ((off & 1) != 0)
4169		off &= ~1;
4170	      else
4171		{
4172		  /* If we don't know the module number, create a relocation
4173		     for it.  */
4174		  if (bfd_link_pic (info))
4175		    {
4176		      Elf_Internal_Rela outrel;
4177		      bfd_byte *loc;
4178
4179		      if (htab->root.srelgot == NULL)
4180			abort ();
4181
4182		      outrel.r_addend = 0;
4183		      outrel.r_offset = (htab->root.sgot->output_section->vma
4184					 + htab->root.sgot->output_offset
4185					 + off);
4186		      outrel.r_info = ELF32_R_INFO (0, R_NIOS2_TLS_DTPMOD);
4187
4188		      loc = htab->root.srelgot->contents;
4189		      loc += (htab->root.srelgot->reloc_count++
4190			      * sizeof (Elf32_External_Rela));
4191		      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
4192		    }
4193		  else
4194		    bfd_put_32 (output_bfd, 1,
4195				htab->root.sgot->contents + off);
4196
4197		  htab->tls_ldm_got.offset |= 1;
4198		}
4199
4200	      relocation = htab->root.sgot->output_offset + off - got_base;
4201
4202	      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
4203					    contents, rel->r_offset,
4204					    relocation, rel->r_addend);
4205
4206	      break;
4207	    case R_NIOS2_TLS_GD16:
4208	    case R_NIOS2_TLS_IE16:
4209	      {
4210		int indx;
4211		char tls_type;
4212
4213		if (htab->root.sgot == NULL)
4214		  abort ();
4215
4216		indx = 0;
4217		if (h != NULL)
4218		  {
4219		    bfd_boolean dyn;
4220		    dyn = htab->root.dynamic_sections_created;
4221		    if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
4222							 bfd_link_pic (info),
4223							 h)
4224			&& (!bfd_link_pic (info)
4225			    || !SYMBOL_REFERENCES_LOCAL (info, h)))
4226		      {
4227			unresolved_reloc = FALSE;
4228			indx = h->dynindx;
4229		      }
4230		    off = h->got.offset;
4231		    tls_type = (((struct elf32_nios2_link_hash_entry *) h)
4232				->tls_type);
4233		  }
4234		else
4235		  {
4236		    if (local_got_offsets == NULL)
4237		      abort ();
4238		    off = local_got_offsets[r_symndx];
4239		    tls_type = (elf32_nios2_local_got_tls_type (input_bfd)
4240				[r_symndx]);
4241		  }
4242
4243		if (tls_type == GOT_UNKNOWN)
4244		  abort ();
4245
4246		if ((off & 1) != 0)
4247		  off &= ~1;
4248		else
4249		  {
4250		    bfd_boolean need_relocs = FALSE;
4251		    Elf_Internal_Rela outrel;
4252		    bfd_byte *loc = NULL;
4253		    int cur_off = off;
4254
4255		    /* The GOT entries have not been initialized yet.  Do it
4256		       now, and emit any relocations.  If both an IE GOT and a
4257		       GD GOT are necessary, we emit the GD first.  */
4258
4259		    if ((bfd_link_pic (info) || indx != 0)
4260			&& (h == NULL
4261			    || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
4262			    || h->root.type != bfd_link_hash_undefweak))
4263		      {
4264			need_relocs = TRUE;
4265			if (htab->root.srelgot == NULL)
4266			  abort ();
4267			loc = htab->root.srelgot->contents;
4268			loc += (htab->root.srelgot->reloc_count *
4269				sizeof (Elf32_External_Rela));
4270		      }
4271
4272		    if (tls_type & GOT_TLS_GD)
4273		      {
4274			if (need_relocs)
4275			  {
4276			    outrel.r_addend = 0;
4277			    outrel.r_offset = (htab->root.sgot->output_section->vma
4278					       + htab->root.sgot->output_offset
4279					       + cur_off);
4280			    outrel.r_info = ELF32_R_INFO (indx,
4281							  R_NIOS2_TLS_DTPMOD);
4282
4283			    bfd_elf32_swap_reloca_out (output_bfd, &outrel,
4284						       loc);
4285			    htab->root.srelgot->reloc_count++;
4286			    loc += sizeof (Elf32_External_Rela);
4287
4288			    if (indx == 0)
4289			      bfd_put_32 (output_bfd,
4290					  (relocation - dtpoff_base (info) -
4291					   DTP_OFFSET),
4292					  htab->root.sgot->contents + cur_off + 4);
4293			    else
4294			      {
4295				outrel.r_addend = 0;
4296				outrel.r_info = ELF32_R_INFO (indx,
4297				  R_NIOS2_TLS_DTPREL);
4298				outrel.r_offset += 4;
4299
4300				bfd_elf32_swap_reloca_out (output_bfd, &outrel,
4301							   loc);
4302				htab->root.srelgot->reloc_count++;
4303				loc += sizeof (Elf32_External_Rela);
4304			      }
4305			  }
4306			else
4307			  {
4308			    /* If we are not emitting relocations for a
4309			       general dynamic reference, then we must be in a
4310			       static link or an executable link with the
4311			       symbol binding locally.  Mark it as belonging
4312			       to module 1, the executable.  */
4313			    bfd_put_32 (output_bfd, 1,
4314					htab->root.sgot->contents + cur_off);
4315			    bfd_put_32 (output_bfd, (relocation -
4316						     dtpoff_base (info) -
4317						     DTP_OFFSET),
4318					htab->root.sgot->contents + cur_off + 4);
4319			  }
4320
4321			cur_off += 8;
4322		      }
4323
4324		    if (tls_type & GOT_TLS_IE)
4325		      {
4326			if (need_relocs)
4327			  {
4328			    if (indx == 0)
4329			      outrel.r_addend = (relocation -
4330						 dtpoff_base (info));
4331			    else
4332			      outrel.r_addend = 0;
4333			    outrel.r_offset = (htab->root.sgot->output_section->vma
4334					       + htab->root.sgot->output_offset
4335					       + cur_off);
4336			    outrel.r_info = ELF32_R_INFO (indx,
4337							  R_NIOS2_TLS_TPREL);
4338
4339			    bfd_elf32_swap_reloca_out (output_bfd, &outrel,
4340						       loc);
4341			    htab->root.srelgot->reloc_count++;
4342			    loc += sizeof (Elf32_External_Rela);
4343			  }
4344			else
4345			  bfd_put_32 (output_bfd, (tpoff (info, relocation)
4346						   - TP_OFFSET),
4347				      htab->root.sgot->contents + cur_off);
4348			cur_off += 4;
4349		      }
4350
4351		    if (h != NULL)
4352		      h->got.offset |= 1;
4353		    else
4354		      local_got_offsets[r_symndx] |= 1;
4355		  }
4356
4357		if ((tls_type & GOT_TLS_GD) && r_type != R_NIOS2_TLS_GD16)
4358		  off += 8;
4359		relocation = htab->root.sgot->output_offset + off - got_base;
4360
4361		r = _bfd_final_link_relocate (howto, input_bfd, input_section,
4362					      contents, rel->r_offset,
4363					      relocation, rel->r_addend);
4364	      }
4365
4366	      break;
4367	    case R_NIOS2_TLS_LE16:
4368	      if (bfd_link_dll (info))
4369		{
4370		  _bfd_error_handler
4371		    /* xgettext:c-format */
4372		    (_("%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not "
4373		       "permitted in shared object"),
4374		     input_bfd, input_section,
4375		     (long) rel->r_offset, howto->name);
4376		  return FALSE;
4377		}
4378	      else
4379		relocation = tpoff (info, relocation) - TP_OFFSET;
4380
4381	      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
4382					    contents, rel->r_offset,
4383					    relocation, rel->r_addend);
4384	      break;
4385
4386	    case R_NIOS2_BFD_RELOC_32:
4387	      if (bfd_link_pic (info)
4388		  && (input_section->flags & SEC_ALLOC) != 0
4389		  && (h == NULL
4390		      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
4391		      || h->root.type != bfd_link_hash_undefweak))
4392		{
4393		  Elf_Internal_Rela outrel;
4394		  bfd_byte *loc;
4395		  bfd_boolean skip, relocate;
4396
4397		  /* When generating a shared object, these relocations
4398		     are copied into the output file to be resolved at run
4399		     time.  */
4400
4401		  skip = FALSE;
4402		  relocate = FALSE;
4403
4404		  outrel.r_offset
4405		    = _bfd_elf_section_offset (output_bfd, info,
4406					       input_section, rel->r_offset);
4407		  if (outrel.r_offset == (bfd_vma) -1)
4408		    skip = TRUE;
4409		  else if (outrel.r_offset == (bfd_vma) -2)
4410		    skip = TRUE, relocate = TRUE;
4411		  outrel.r_offset += (input_section->output_section->vma
4412				      + input_section->output_offset);
4413
4414		  if (skip)
4415		    memset (&outrel, 0, sizeof outrel);
4416		  else if (h != NULL
4417			   && h->dynindx != -1
4418			   && (!bfd_link_pic (info)
4419			       || !SYMBOLIC_BIND (info, h)
4420			       || !h->def_regular))
4421		    {
4422		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
4423		      outrel.r_addend = rel->r_addend;
4424		    }
4425		  else
4426		    {
4427		      /* This symbol is local, or marked to become local.  */
4428		      outrel.r_addend = relocation + rel->r_addend;
4429		      relocate = TRUE;
4430		      outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
4431		    }
4432
4433		  sreloc = elf_section_data (input_section)->sreloc;
4434		  if (sreloc == NULL)
4435		    abort ();
4436
4437		  loc = sreloc->contents;
4438		  loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
4439		  bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
4440
4441		  /* This reloc will be computed at runtime, so there's no
4442		     need to do anything now, except for R_NIOS2_BFD_RELOC_32
4443		     relocations that have been turned into
4444		     R_NIOS2_RELATIVE.  */
4445		  if (!relocate)
4446		    break;
4447		}
4448
4449	      r = _bfd_final_link_relocate (howto, input_bfd,
4450					    input_section, contents,
4451					    rel->r_offset, relocation,
4452					    rel->r_addend);
4453	      break;
4454
4455	    case R_NIOS2_TLS_DTPREL:
4456	      relocation -= dtpoff_base (info);
4457	      /* Fall through.  */
4458
4459	    default:
4460	      r = _bfd_final_link_relocate (howto, input_bfd,
4461					    input_section, contents,
4462					    rel->r_offset, relocation,
4463					    rel->r_addend);
4464	      break;
4465	    }
4466	}
4467      else
4468	r = bfd_reloc_notsupported;
4469
4470      if (r != bfd_reloc_ok)
4471	{
4472	  if (h != NULL)
4473	    name = h->root.root.string;
4474	  else
4475	    {
4476	      name = bfd_elf_string_from_elf_section (input_bfd,
4477						      symtab_hdr->sh_link,
4478						      sym->st_name);
4479	      if (name == NULL || *name == '\0')
4480		name = bfd_section_name (input_bfd, sec);
4481	    }
4482
4483	  switch (r)
4484	    {
4485	    case bfd_reloc_overflow:
4486	      (*info->callbacks->reloc_overflow) (info, NULL, name,
4487						  howto->name, (bfd_vma) 0,
4488						  input_bfd, input_section,
4489						  rel->r_offset);
4490	      break;
4491
4492	    case bfd_reloc_undefined:
4493	      (*info->callbacks->undefined_symbol) (info, name, input_bfd,
4494						    input_section,
4495						    rel->r_offset, TRUE);
4496	      break;
4497
4498	    case bfd_reloc_outofrange:
4499	      if (msg == NULL)
4500		msg = _("relocation out of range");
4501	      break;
4502
4503	    case bfd_reloc_notsupported:
4504	      if (msg == NULL)
4505		msg = _("unsupported relocation");
4506	      break;
4507
4508	    case bfd_reloc_dangerous:
4509	      if (msg == NULL)
4510		msg = _("dangerous relocation");
4511	      break;
4512
4513	    default:
4514	      if (msg == NULL)
4515		msg = _("unknown error");
4516	      break;
4517	    }
4518
4519	  if (msg)
4520	    {
4521	      (*info->callbacks->warning) (info, msg, name, input_bfd,
4522					   input_section, rel->r_offset);
4523	      return FALSE;
4524	    }
4525	}
4526    }
4527  return TRUE;
4528}
4529
4530/* Implement elf-backend_section_flags:
4531   Convert NIOS2 specific section flags to bfd internal section flags.  */
4532static bfd_boolean
4533nios2_elf32_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr)
4534{
4535  if (hdr->sh_flags & SHF_NIOS2_GPREL)
4536    *flags |= SEC_SMALL_DATA;
4537
4538  return TRUE;
4539}
4540
4541/* Implement elf_backend_fake_sections:
4542   Set the correct type for an NIOS2 ELF section.  We do this by the
4543   section name, which is a hack, but ought to work.  */
4544static bfd_boolean
4545nios2_elf32_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
4546			   Elf_Internal_Shdr *hdr, asection *sec)
4547{
4548  register const char *name = bfd_get_section_name (abfd, sec);
4549
4550  if ((sec->flags & SEC_SMALL_DATA)
4551      || strcmp (name, ".sdata") == 0
4552      || strcmp (name, ".sbss") == 0
4553      || strcmp (name, ".lit4") == 0 || strcmp (name, ".lit8") == 0)
4554    hdr->sh_flags |= SHF_NIOS2_GPREL;
4555
4556  return TRUE;
4557}
4558
4559/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
4560   shortcuts to them in our hash table.  */
4561static bfd_boolean
4562create_got_section (bfd *dynobj, struct bfd_link_info *info)
4563{
4564  struct elf32_nios2_link_hash_table *htab;
4565  struct elf_link_hash_entry *h;
4566
4567  htab = elf32_nios2_hash_table (info);
4568
4569  if (! _bfd_elf_create_got_section (dynobj, info))
4570    return FALSE;
4571
4572  /* In order for the two loads in .PLTresolve to share the same %hiadj,
4573     _GLOBAL_OFFSET_TABLE_ must be aligned to a 16-byte boundary.  */
4574  if (!bfd_set_section_alignment (dynobj, htab->root.sgotplt, 4))
4575    return FALSE;
4576
4577  /* The Nios II ABI specifies that GOT-relative relocations are relative
4578     to the linker-created symbol _gp_got, rather than using
4579     _GLOBAL_OFFSET_TABLE_ directly.  In particular, the latter always
4580     points to the base of the GOT while _gp_got may include a bias.  */
4581  h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.sgotplt,
4582				   "_gp_got");
4583  htab->h_gp_got = h;
4584  if (h == NULL)
4585    return FALSE;
4586
4587  return TRUE;
4588}
4589
4590/* Implement elf_backend_create_dynamic_sections:
4591   Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
4592   .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
4593   hash table.  */
4594static bfd_boolean
4595nios2_elf32_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
4596{
4597  struct elf32_nios2_link_hash_table *htab;
4598
4599  htab = elf32_nios2_hash_table (info);
4600  if (!htab->root.sgot && !create_got_section (dynobj, info))
4601    return FALSE;
4602
4603  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
4604    return FALSE;
4605
4606  /* In order for the two loads in a shared object .PLTresolve to share the
4607     same %hiadj, the start of the PLT (as well as the GOT) must be aligned
4608     to a 16-byte boundary.  This is because the addresses for these loads
4609     include the -(.plt+4) PIC correction.  */
4610  return bfd_set_section_alignment (dynobj, htab->root.splt, 4);
4611}
4612
4613/* Implement elf_backend_copy_indirect_symbol:
4614   Copy the extra info we tack onto an elf_link_hash_entry.  */
4615static void
4616nios2_elf32_copy_indirect_symbol (struct bfd_link_info *info,
4617				  struct elf_link_hash_entry *dir,
4618				  struct elf_link_hash_entry *ind)
4619{
4620  struct elf32_nios2_link_hash_entry *edir, *eind;
4621
4622  edir = (struct elf32_nios2_link_hash_entry *) dir;
4623  eind = (struct elf32_nios2_link_hash_entry *) ind;
4624
4625  if (eind->dyn_relocs != NULL)
4626    {
4627      if (edir->dyn_relocs != NULL)
4628	{
4629	  struct elf32_nios2_dyn_relocs **pp;
4630	  struct elf32_nios2_dyn_relocs *p;
4631
4632	  /* Add reloc counts against the indirect sym to the direct sym
4633	     list.  Merge any entries against the same section.  */
4634	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
4635	    {
4636	      struct elf32_nios2_dyn_relocs *q;
4637
4638	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
4639		if (q->sec == p->sec)
4640		  {
4641		    q->pc_count += p->pc_count;
4642		    q->count += p->count;
4643		    *pp = p->next;
4644		    break;
4645		  }
4646	      if (q == NULL)
4647		pp = &p->next;
4648	    }
4649	  *pp = edir->dyn_relocs;
4650	}
4651
4652      edir->dyn_relocs = eind->dyn_relocs;
4653      eind->dyn_relocs = NULL;
4654    }
4655
4656  if (ind->root.type == bfd_link_hash_indirect
4657      && dir->got.refcount <= 0)
4658    {
4659      edir->tls_type = eind->tls_type;
4660      eind->tls_type = GOT_UNKNOWN;
4661    }
4662
4663  edir->got_types_used |= eind->got_types_used;
4664
4665  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
4666}
4667
4668/* Set the right machine number for a NIOS2 ELF file.  */
4669
4670static bfd_boolean
4671nios2_elf32_object_p (bfd *abfd)
4672{
4673  unsigned long mach;
4674
4675  mach = elf_elfheader (abfd)->e_flags;
4676
4677  switch (mach)
4678    {
4679    default:
4680    case EF_NIOS2_ARCH_R1:
4681      bfd_default_set_arch_mach (abfd, bfd_arch_nios2, bfd_mach_nios2r1);
4682      break;
4683    case EF_NIOS2_ARCH_R2:
4684      bfd_default_set_arch_mach (abfd, bfd_arch_nios2, bfd_mach_nios2r2);
4685      break;
4686    }
4687
4688  return TRUE;
4689}
4690
4691/* Implement elf_backend_check_relocs:
4692   Look through the relocs for a section during the first phase.  */
4693static bfd_boolean
4694nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info,
4695			  asection *sec, const Elf_Internal_Rela *relocs)
4696{
4697  Elf_Internal_Shdr *symtab_hdr;
4698  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
4699  const Elf_Internal_Rela *rel;
4700  const Elf_Internal_Rela *rel_end;
4701  struct elf32_nios2_link_hash_table *htab;
4702  asection *sreloc = NULL;
4703  bfd_signed_vma *local_got_refcounts;
4704
4705  if (bfd_link_relocatable (info))
4706    return TRUE;
4707
4708  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4709  sym_hashes = elf_sym_hashes (abfd);
4710  sym_hashes_end = (sym_hashes
4711		    + symtab_hdr->sh_size / sizeof (Elf32_External_Sym));
4712  if (!elf_bad_symtab (abfd))
4713    sym_hashes_end -= symtab_hdr->sh_info;
4714  local_got_refcounts = elf_local_got_refcounts (abfd);
4715
4716  htab = elf32_nios2_hash_table (info);
4717
4718  rel_end = relocs + sec->reloc_count;
4719  for (rel = relocs; rel < rel_end; rel++)
4720    {
4721      unsigned int r_type;
4722      struct elf_link_hash_entry *h;
4723      unsigned long r_symndx;
4724
4725      r_symndx = ELF32_R_SYM (rel->r_info);
4726      if (r_symndx < symtab_hdr->sh_info)
4727	h = NULL;
4728      else
4729	{
4730	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4731	  while (h->root.type == bfd_link_hash_indirect
4732		 || h->root.type == bfd_link_hash_warning)
4733	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
4734
4735	  /* PR15323, ref flags aren't set for references in the same
4736	     object.  */
4737	  h->root.non_ir_ref = 1;
4738	}
4739
4740      r_type = ELF32_R_TYPE (rel->r_info);
4741
4742      switch (r_type)
4743	{
4744	case R_NIOS2_GOT16:
4745	case R_NIOS2_GOT_LO:
4746	case R_NIOS2_GOT_HA:
4747	case R_NIOS2_CALL16:
4748	case R_NIOS2_CALL_LO:
4749	case R_NIOS2_CALL_HA:
4750	case R_NIOS2_TLS_GD16:
4751	case R_NIOS2_TLS_IE16:
4752	  /* This symbol requires a global offset table entry.  */
4753	  {
4754	    int tls_type, old_tls_type;
4755
4756	    switch (r_type)
4757	      {
4758	      default:
4759	      case R_NIOS2_GOT16:
4760	      case R_NIOS2_GOT_LO:
4761	      case R_NIOS2_GOT_HA:
4762	      case R_NIOS2_CALL16:
4763	      case R_NIOS2_CALL_LO:
4764	      case R_NIOS2_CALL_HA:
4765		tls_type = GOT_NORMAL;
4766		break;
4767	      case R_NIOS2_TLS_GD16:
4768		tls_type = GOT_TLS_GD;
4769		break;
4770	      case R_NIOS2_TLS_IE16:
4771		tls_type = GOT_TLS_IE;
4772		break;
4773	      }
4774
4775	    if (h != NULL)
4776	      {
4777		struct elf32_nios2_link_hash_entry *eh
4778		  = (struct elf32_nios2_link_hash_entry *)h;
4779		h->got.refcount++;
4780		old_tls_type = elf32_nios2_hash_entry(h)->tls_type;
4781		if (r_type == R_NIOS2_CALL16
4782		    || r_type == R_NIOS2_CALL_LO
4783		    || r_type == R_NIOS2_CALL_HA)
4784		  {
4785		    /* Make sure a plt entry is created for this symbol if
4786		       it turns out to be a function defined by a dynamic
4787		       object.  */
4788		    h->plt.refcount++;
4789		    h->needs_plt = 1;
4790		    h->type = STT_FUNC;
4791		    eh->got_types_used |= CALL_USED;
4792		  }
4793		else
4794		  eh->got_types_used |= GOT_USED;
4795	      }
4796	    else
4797	      {
4798		/* This is a global offset table entry for a local symbol.  */
4799		if (local_got_refcounts == NULL)
4800		  {
4801		    bfd_size_type size;
4802
4803		    size = symtab_hdr->sh_info;
4804		    size *= (sizeof (bfd_signed_vma) + sizeof (char));
4805		    local_got_refcounts
4806		      = ((bfd_signed_vma *) bfd_zalloc (abfd, size));
4807		    if (local_got_refcounts == NULL)
4808		      return FALSE;
4809		    elf_local_got_refcounts (abfd) = local_got_refcounts;
4810		    elf32_nios2_local_got_tls_type (abfd)
4811		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
4812		  }
4813		local_got_refcounts[r_symndx]++;
4814		old_tls_type = elf32_nios2_local_got_tls_type (abfd) [r_symndx];
4815	      }
4816
4817	    /* We will already have issued an error message if there is a
4818	       TLS / non-TLS mismatch, based on the symbol type.  We don't
4819	       support any linker relaxations.  So just combine any TLS
4820	       types needed.  */
4821	    if (old_tls_type != GOT_UNKNOWN && old_tls_type != GOT_NORMAL
4822		&& tls_type != GOT_NORMAL)
4823	      tls_type |= old_tls_type;
4824
4825	    if (old_tls_type != tls_type)
4826	      {
4827		if (h != NULL)
4828		  elf32_nios2_hash_entry (h)->tls_type = tls_type;
4829		else
4830		  elf32_nios2_local_got_tls_type (abfd) [r_symndx] = tls_type;
4831	      }
4832	  }
4833	make_got:
4834	  if (htab->root.sgot == NULL)
4835	    {
4836	      if (htab->root.dynobj == NULL)
4837		htab->root.dynobj = abfd;
4838	      if (!create_got_section (htab->root.dynobj, info))
4839		return FALSE;
4840	    }
4841	  break;
4842
4843	case R_NIOS2_TLS_LDM16:
4844	  htab->tls_ldm_got.refcount++;
4845	  goto make_got;
4846
4847	  /* This relocation describes the C++ object vtable hierarchy.
4848	     Reconstruct it for later use during GC.  */
4849	case R_NIOS2_GNU_VTINHERIT:
4850	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4851	    return FALSE;
4852	  break;
4853
4854	  /* This relocation describes which C++ vtable entries are actually
4855	     used.  Record for later use during GC.  */
4856	case R_NIOS2_GNU_VTENTRY:
4857	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4858	    return FALSE;
4859	  break;
4860
4861	case R_NIOS2_BFD_RELOC_32:
4862	case R_NIOS2_CALL26:
4863	case R_NIOS2_CALL26_NOAT:
4864	case R_NIOS2_HIADJ16:
4865	case R_NIOS2_LO16:
4866
4867	  if (h != NULL)
4868	    {
4869	      /* If this reloc is in a read-only section, we might
4870		   need a copy reloc.  We can't check reliably at this
4871		   stage whether the section is read-only, as input
4872		   sections have not yet been mapped to output sections.
4873		   Tentatively set the flag for now, and correct in
4874		   adjust_dynamic_symbol.  */
4875	      if (!bfd_link_pic (info))
4876		h->non_got_ref = 1;
4877
4878	      /* Make sure a plt entry is created for this symbol if it
4879		 turns out to be a function defined by a dynamic object.  */
4880	      h->plt.refcount++;
4881
4882	      if (r_type == R_NIOS2_CALL26 || r_type == R_NIOS2_CALL26_NOAT)
4883		h->needs_plt = 1;
4884	    }
4885
4886	  /* If we are creating a shared library, we need to copy the
4887	     reloc into the shared library.  */
4888	  if (bfd_link_pic (info)
4889	      && (sec->flags & SEC_ALLOC) != 0
4890	      && (r_type == R_NIOS2_BFD_RELOC_32
4891		  || (h != NULL && ! h->needs_plt
4892		      && (! SYMBOLIC_BIND (info, h) || ! h->def_regular))))
4893	    {
4894	      struct elf32_nios2_dyn_relocs *p;
4895	      struct elf32_nios2_dyn_relocs **head;
4896
4897	      /* When creating a shared object, we must copy these
4898		 reloc types into the output file.  We create a reloc
4899		 section in dynobj and make room for this reloc.  */
4900	      if (sreloc == NULL)
4901		{
4902		  if (htab->root.dynobj == NULL)
4903		    htab->root.dynobj = abfd;
4904
4905		  sreloc = _bfd_elf_make_dynamic_reloc_section
4906		    (sec, htab->root.dynobj, 2, abfd, TRUE);
4907		  if (sreloc == NULL)
4908		    return FALSE;
4909		}
4910
4911	      /* If this is a global symbol, we count the number of
4912		 relocations we need for this symbol.  */
4913	      if (h != NULL)
4914		head = &((struct elf32_nios2_link_hash_entry *) h)->dyn_relocs;
4915	      else
4916		{
4917		  /* Track dynamic relocs needed for local syms too.
4918		     We really need local syms available to do this
4919		     easily.  Oh well.  */
4920
4921		  asection *s;
4922		  void *vpp;
4923		  Elf_Internal_Sym *isym;
4924
4925		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4926						abfd, r_symndx);
4927		  if (isym == NULL)
4928		    return FALSE;
4929
4930		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
4931		  if (s == NULL)
4932		    s = sec;
4933
4934		  vpp = &elf_section_data (s)->local_dynrel;
4935		  head = (struct elf32_nios2_dyn_relocs **) vpp;
4936		}
4937
4938	      p = *head;
4939	      if (p == NULL || p->sec != sec)
4940		{
4941		  bfd_size_type amt = sizeof *p;
4942		  p = ((struct elf32_nios2_dyn_relocs *)
4943		       bfd_alloc (htab->root.dynobj, amt));
4944		  if (p == NULL)
4945		    return FALSE;
4946		  p->next = *head;
4947		  *head = p;
4948		  p->sec = sec;
4949		  p->count = 0;
4950		  p->pc_count = 0;
4951		}
4952
4953	      p->count += 1;
4954
4955	    }
4956	  break;
4957	}
4958    }
4959
4960  return TRUE;
4961}
4962
4963
4964/* Implement elf_backend_gc_mark_hook:
4965   Return the section that should be marked against GC for a given
4966   relocation.  */
4967static asection *
4968nios2_elf32_gc_mark_hook (asection *sec,
4969			  struct bfd_link_info *info,
4970			  Elf_Internal_Rela *rel,
4971			  struct elf_link_hash_entry *h,
4972			  Elf_Internal_Sym *sym)
4973{
4974  if (h != NULL)
4975    switch (ELF32_R_TYPE (rel->r_info))
4976      {
4977      case R_NIOS2_GNU_VTINHERIT:
4978      case R_NIOS2_GNU_VTENTRY:
4979	return NULL;
4980      }
4981  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
4982}
4983
4984/* Implement elf_backend_gc_sweep_hook:
4985   Update the got entry reference counts for the section being removed.  */
4986static bfd_boolean
4987nios2_elf32_gc_sweep_hook (bfd *abfd,
4988			   struct bfd_link_info *info,
4989			   asection *sec,
4990			   const Elf_Internal_Rela *relocs)
4991{
4992  Elf_Internal_Shdr *symtab_hdr;
4993  struct elf_link_hash_entry **sym_hashes;
4994  bfd_signed_vma *local_got_refcounts;
4995  const Elf_Internal_Rela *rel, *relend;
4996  bfd *dynobj;
4997
4998  if (bfd_link_relocatable (info))
4999    return TRUE;
5000
5001  elf_section_data (sec)->local_dynrel = NULL;
5002
5003  dynobj = elf_hash_table (info)->dynobj;
5004  if (dynobj == NULL)
5005    return TRUE;
5006
5007  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5008  sym_hashes = elf_sym_hashes (abfd);
5009  local_got_refcounts = elf_local_got_refcounts (abfd);
5010
5011  relend = relocs + sec->reloc_count;
5012  for (rel = relocs; rel < relend; rel++)
5013    {
5014      unsigned long r_symndx;
5015      struct elf_link_hash_entry *h = NULL;
5016      int r_type;
5017
5018      r_symndx = ELF32_R_SYM (rel->r_info);
5019      if (r_symndx >= symtab_hdr->sh_info)
5020	{
5021	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5022	  while (h->root.type == bfd_link_hash_indirect
5023		 || h->root.type == bfd_link_hash_warning)
5024	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5025	}
5026
5027      r_type = ELF32_R_TYPE (rel->r_info);
5028      switch (r_type)
5029	{
5030	case R_NIOS2_GOT16:
5031	case R_NIOS2_GOT_LO:
5032	case R_NIOS2_GOT_HA:
5033	case R_NIOS2_CALL16:
5034	case R_NIOS2_CALL_LO:
5035	case R_NIOS2_CALL_HA:
5036	  if (h != NULL)
5037	    {
5038	      if (h->got.refcount > 0)
5039		--h->got.refcount;
5040	    }
5041	  else if (local_got_refcounts != NULL)
5042	    {
5043	      if (local_got_refcounts[r_symndx] > 0)
5044		--local_got_refcounts[r_symndx];
5045	    }
5046	  break;
5047
5048	case R_NIOS2_PCREL_LO:
5049	case R_NIOS2_PCREL_HA:
5050	case R_NIOS2_BFD_RELOC_32:
5051	case R_NIOS2_CALL26:
5052	case R_NIOS2_CALL26_NOAT:
5053	  if (h != NULL)
5054	    {
5055	      struct elf32_nios2_link_hash_entry *eh;
5056	      struct elf32_nios2_dyn_relocs **pp;
5057	      struct elf32_nios2_dyn_relocs *p;
5058
5059	      eh = (struct elf32_nios2_link_hash_entry *) h;
5060
5061	      if (h->plt.refcount > 0)
5062		--h->plt.refcount;
5063
5064	      if (r_type == R_NIOS2_PCREL_LO || r_type == R_NIOS2_PCREL_HA
5065		  || r_type == R_NIOS2_BFD_RELOC_32)
5066		{
5067		  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;
5068		       pp = &p->next)
5069		    if (p->sec == sec)
5070		      {
5071			p->count -= 1;
5072			if (p->count == 0)
5073			  *pp = p->next;
5074			break;
5075		      }
5076		}
5077	    }
5078	  break;
5079
5080	default:
5081	  break;
5082	}
5083    }
5084
5085  return TRUE;
5086}
5087
5088/* Implement elf_backend_finish_dynamic_symbols:
5089   Finish up dynamic symbol handling.  We set the contents of various
5090   dynamic sections here.  */
5091static bfd_boolean
5092nios2_elf32_finish_dynamic_symbol (bfd *output_bfd,
5093				   struct bfd_link_info *info,
5094				   struct elf_link_hash_entry *h,
5095				   Elf_Internal_Sym *sym)
5096{
5097  struct elf32_nios2_link_hash_table *htab;
5098  struct elf32_nios2_link_hash_entry *eh
5099    = (struct elf32_nios2_link_hash_entry *)h;
5100  int use_plt;
5101
5102  htab = elf32_nios2_hash_table (info);
5103
5104  if (h->plt.offset != (bfd_vma) -1)
5105    {
5106      asection *splt;
5107      asection *sgotplt;
5108      asection *srela;
5109      bfd_vma plt_index;
5110      bfd_vma got_offset;
5111      Elf_Internal_Rela rela;
5112      bfd_byte *loc;
5113      bfd_vma got_address;
5114
5115      /* This symbol has an entry in the procedure linkage table.  Set
5116	 it up.  */
5117      BFD_ASSERT (h->dynindx != -1);
5118      splt = htab->root.splt;
5119      sgotplt = htab->root.sgotplt;
5120      srela = htab->root.srelplt;
5121      BFD_ASSERT (splt != NULL && sgotplt != NULL && srela != NULL);
5122
5123      /* Emit the PLT entry.  */
5124      if (bfd_link_pic (info))
5125	{
5126	  nios2_elf32_install_data (splt, nios2_so_plt_entry, h->plt.offset,
5127				    3);
5128	  plt_index = (h->plt.offset - 24) / 12;
5129	  got_offset = (plt_index + 3) * 4;
5130	  nios2_elf32_install_imm16 (splt, h->plt.offset,
5131				     hiadj(plt_index * 4));
5132	  nios2_elf32_install_imm16 (splt, h->plt.offset + 4,
5133				     (plt_index * 4) & 0xffff);
5134	  nios2_elf32_install_imm16 (splt, h->plt.offset + 8,
5135				     0xfff4 - h->plt.offset);
5136	  got_address = (sgotplt->output_section->vma + sgotplt->output_offset
5137			 + got_offset);
5138
5139	  /* Fill in the entry in the global offset table.  There are no
5140	     res_n slots for a shared object PLT, instead the .got.plt entries
5141	     point to the PLT entries.  */
5142	  bfd_put_32 (output_bfd,
5143		      splt->output_section->vma + splt->output_offset
5144		      + h->plt.offset, sgotplt->contents + got_offset);
5145	}
5146      else
5147	{
5148	  plt_index = (h->plt.offset - 28 - htab->res_n_size) / 12;
5149	  got_offset = (plt_index + 3) * 4;
5150
5151	  nios2_elf32_install_data (splt, nios2_plt_entry, h->plt.offset, 3);
5152	  got_address = (sgotplt->output_section->vma + sgotplt->output_offset
5153			 + got_offset);
5154	  nios2_elf32_install_imm16 (splt, h->plt.offset, hiadj(got_address));
5155	  nios2_elf32_install_imm16 (splt, h->plt.offset + 4,
5156				     got_address & 0xffff);
5157
5158	  /* Fill in the entry in the global offset table.  */
5159	  bfd_put_32 (output_bfd,
5160		      splt->output_section->vma + splt->output_offset
5161		      + plt_index * 4, sgotplt->contents + got_offset);
5162	}
5163
5164      /* Fill in the entry in the .rela.plt section.  */
5165      rela.r_offset = got_address;
5166      rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_JUMP_SLOT);
5167      rela.r_addend = 0;
5168      loc = srela->contents + plt_index * sizeof (Elf32_External_Rela);
5169      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
5170
5171      if (!h->def_regular)
5172	{
5173	  /* Mark the symbol as undefined, rather than as defined in
5174	     the .plt section.  Leave the value alone.  */
5175	  sym->st_shndx = SHN_UNDEF;
5176	  /* If the symbol is weak, we do need to clear the value.
5177	     Otherwise, the PLT entry would provide a definition for
5178	     the symbol even if the symbol wasn't defined anywhere,
5179	     and so the symbol would never be NULL.  */
5180	  if (!h->ref_regular_nonweak)
5181	    sym->st_value = 0;
5182	}
5183    }
5184
5185  use_plt = (eh->got_types_used == CALL_USED
5186	     && h->plt.offset != (bfd_vma) -1);
5187
5188  if (!use_plt && h->got.offset != (bfd_vma) -1
5189      && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_GD) == 0
5190      && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_IE) == 0)
5191    {
5192      asection *sgot;
5193      asection *srela;
5194      Elf_Internal_Rela rela;
5195      bfd_byte *loc;
5196      bfd_vma offset;
5197
5198      /* This symbol has an entry in the global offset table.  Set it
5199	 up.  */
5200      sgot = htab->root.sgot;
5201      srela = htab->root.srelgot;
5202      BFD_ASSERT (sgot != NULL && srela != NULL);
5203
5204      offset = (h->got.offset & ~(bfd_vma) 1);
5205      rela.r_offset = (sgot->output_section->vma
5206		       + sgot->output_offset + offset);
5207
5208      /* If this is a -Bsymbolic link, and the symbol is defined
5209	 locally, we just want to emit a RELATIVE reloc.  Likewise if
5210	 the symbol was forced to be local because of a version file.
5211	 The entry in the global offset table will already have been
5212	 initialized in the relocate_section function.  */
5213
5214      if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
5215	{
5216	  rela.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
5217	  rela.r_addend = bfd_get_signed_32 (output_bfd,
5218					     (sgot->contents + offset));
5219	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + offset);
5220	}
5221      else
5222	{
5223	  bfd_put_32 (output_bfd, (bfd_vma) 0,
5224		      sgot->contents + offset);
5225	  rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_GLOB_DAT);
5226	  rela.r_addend = 0;
5227	}
5228
5229      loc = srela->contents;
5230      loc += srela->reloc_count++ * sizeof (Elf32_External_Rela);
5231      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
5232    }
5233
5234  if (use_plt && h->got.offset != (bfd_vma) -1)
5235    {
5236      bfd_vma offset = (h->got.offset & ~(bfd_vma) 1);
5237      asection *sgot = htab->root.sgot;
5238      asection *splt = htab->root.splt;
5239      bfd_put_32 (output_bfd, (splt->output_section->vma + splt->output_offset
5240			       + h->plt.offset),
5241		  sgot->contents + offset);
5242    }
5243
5244  if (h->needs_copy)
5245    {
5246      asection *s;
5247      Elf_Internal_Rela rela;
5248      bfd_byte *loc;
5249
5250      /* This symbol needs a copy reloc.  Set it up.  */
5251      BFD_ASSERT (h->dynindx != -1
5252		  && (h->root.type == bfd_link_hash_defined
5253		      || h->root.type == bfd_link_hash_defweak));
5254
5255      rela.r_offset = (h->root.u.def.value
5256		       + h->root.u.def.section->output_section->vma
5257		       + h->root.u.def.section->output_offset);
5258      rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_COPY);
5259      rela.r_addend = 0;
5260      if (h->root.u.def.section == htab->root.sdynrelro)
5261	s = htab->root.sreldynrelro;
5262      else
5263	s = htab->root.srelbss;
5264      BFD_ASSERT (s != NULL);
5265      loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5266      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
5267    }
5268
5269  /* Mark _DYNAMIC, _GLOBAL_OFFSET_TABLE_, and _gp_got as absolute.  */
5270  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
5271      || h == htab->root.hgot
5272      || h == htab->h_gp_got)
5273    sym->st_shndx = SHN_ABS;
5274
5275  return TRUE;
5276}
5277
5278/* Implement elf_backend_finish_dynamic_sections.  */
5279static bfd_boolean
5280nios2_elf32_finish_dynamic_sections (bfd *output_bfd,
5281				     struct bfd_link_info *info)
5282{
5283  asection *sgotplt;
5284  asection *sdyn;
5285  struct elf32_nios2_link_hash_table *htab;
5286
5287  htab = elf32_nios2_hash_table (info);
5288  sgotplt = htab->root.sgotplt;
5289  sdyn = NULL;
5290
5291  if (htab->root.dynamic_sections_created)
5292    {
5293      asection *splt;
5294      Elf32_External_Dyn *dyncon, *dynconend;
5295
5296      splt = htab->root.splt;
5297      sdyn = bfd_get_linker_section (htab->root.dynobj, ".dynamic");
5298      BFD_ASSERT (splt != NULL && sdyn != NULL && sgotplt != NULL);
5299
5300      dyncon = (Elf32_External_Dyn *) sdyn->contents;
5301      dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
5302      for (; dyncon < dynconend; dyncon++)
5303	{
5304	  Elf_Internal_Dyn dyn;
5305	  asection *s;
5306
5307	  bfd_elf32_swap_dyn_in (htab->root.dynobj, dyncon, &dyn);
5308
5309	  switch (dyn.d_tag)
5310	    {
5311	    default:
5312	      break;
5313
5314	    case DT_PLTGOT:
5315	      s = htab->root.sgotplt;
5316	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
5317	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5318	      break;
5319
5320	    case DT_JMPREL:
5321	      s = htab->root.srelplt;
5322	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
5323	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5324	      break;
5325
5326	    case DT_PLTRELSZ:
5327	      s = htab->root.srelplt;
5328	      dyn.d_un.d_val = s->size;
5329	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5330	      break;
5331
5332	    case DT_NIOS2_GP:
5333	      s = htab->root.sgotplt;
5334	      dyn.d_un.d_ptr
5335		= s->output_section->vma + s->output_offset + 0x7ff0;
5336	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5337	      break;
5338	    }
5339	}
5340
5341      /* Fill in the first entry in the procedure linkage table.  */
5342      if (splt->size > 0)
5343	{
5344	  bfd_vma got_address = (sgotplt->output_section->vma
5345				 + sgotplt->output_offset);
5346	  if (bfd_link_pic (info))
5347	    {
5348	      bfd_vma got_pcrel = got_address - (splt->output_section->vma
5349						 + splt->output_offset);
5350	      /* Both GOT and PLT must be aligned to a 16-byte boundary
5351		 for the two loads to share the %hiadj part.  The 4-byte
5352		 offset for nextpc is accounted for in the %lo offsets
5353		 on the loads.  */
5354	      BFD_ASSERT ((got_pcrel & 0xf) == 0);
5355	      nios2_elf32_install_data (splt, nios2_so_plt0_entry, 0, 6);
5356	      nios2_elf32_install_imm16 (splt, 4, hiadj (got_pcrel));
5357	      nios2_elf32_install_imm16 (splt, 12, got_pcrel & 0xffff);
5358	      nios2_elf32_install_imm16 (splt, 16, (got_pcrel + 4) & 0xffff);
5359	    }
5360	  else
5361	    {
5362	      /* Divide by 4 here, not 3 because we already corrected for the
5363		 res_N branches.  */
5364	      bfd_vma res_size = (splt->size - 28) / 4;
5365	      bfd_vma res_start = (splt->output_section->vma
5366				   + splt->output_offset);
5367	      bfd_vma res_offset;
5368
5369	      for (res_offset = 0; res_offset < res_size; res_offset += 4)
5370		bfd_put_32 (output_bfd,
5371			    6 | ((res_size - (res_offset + 4)) << 6),
5372			    splt->contents + res_offset);
5373
5374	      /* The GOT must be aligned to a 16-byte boundary for the
5375		 two loads to share the same %hiadj part.  */
5376	      BFD_ASSERT ((got_address & 0xf) == 0);
5377
5378	      nios2_elf32_install_data (splt, nios2_plt0_entry, res_size, 7);
5379	      nios2_elf32_install_imm16 (splt, res_size, hiadj (res_start));
5380	      nios2_elf32_install_imm16 (splt, res_size + 4,
5381					 res_start & 0xffff);
5382	      nios2_elf32_install_imm16 (splt, res_size + 12,
5383					 hiadj (got_address));
5384	      nios2_elf32_install_imm16 (splt, res_size + 16,
5385					 (got_address + 4) & 0xffff);
5386	      nios2_elf32_install_imm16 (splt, res_size + 20,
5387					 (got_address + 8) & 0xffff);
5388	    }
5389	}
5390    }
5391
5392  /* Fill in the first three entries in the global offset table.  */
5393  if (sgotplt != NULL && sgotplt->size > 0)
5394    {
5395      if (sdyn == NULL)
5396	bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents);
5397      else
5398	bfd_put_32 (output_bfd,
5399		    sdyn->output_section->vma + sdyn->output_offset,
5400		    sgotplt->contents);
5401      bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 4);
5402      bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 8);
5403
5404      if (sgotplt->output_section != bfd_abs_section_ptr)
5405	elf_section_data (sgotplt->output_section)->this_hdr.sh_entsize = 4;
5406    }
5407
5408  return TRUE;
5409}
5410
5411/* Implement elf_backend_adjust_dynamic_symbol:
5412   Adjust a symbol defined by a dynamic object and referenced by a
5413   regular object.  The current definition is in some section of the
5414   dynamic object, but we're not including those sections.  We have to
5415   change the definition to something the rest of the link can
5416   understand.  */
5417static bfd_boolean
5418nios2_elf32_adjust_dynamic_symbol (struct bfd_link_info *info,
5419				   struct elf_link_hash_entry *h)
5420{
5421  struct elf32_nios2_link_hash_table *htab;
5422  bfd *dynobj;
5423  asection *s, *srel;
5424  unsigned align2;
5425
5426  htab = elf32_nios2_hash_table (info);
5427  dynobj = htab->root.dynobj;
5428
5429  /* Make sure we know what is going on here.  */
5430  BFD_ASSERT (dynobj != NULL
5431	      && (h->needs_plt
5432		  || h->u.weakdef != NULL
5433		  || (h->def_dynamic
5434		      && h->ref_regular
5435		      && !h->def_regular)));
5436
5437  /* If this is a function, put it in the procedure linkage table.  We
5438     will fill in the contents of the procedure linkage table later,
5439     when we know the address of the .got section.  */
5440  if (h->type == STT_FUNC || h->needs_plt)
5441    {
5442      if (h->plt.refcount <= 0
5443	  || SYMBOL_CALLS_LOCAL (info, h)
5444	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
5445	      && h->root.type == bfd_link_hash_undefweak))
5446	{
5447	  /* This case can occur if we saw a PLT reloc in an input
5448	     file, but the symbol was never referred to by a dynamic
5449	     object, or if all references were garbage collected.  In
5450	     such a case, we don't actually need to build a procedure
5451	     linkage table, and we can just do a PCREL reloc instead.  */
5452	  h->plt.offset = (bfd_vma) -1;
5453	  h->needs_plt = 0;
5454	}
5455
5456      return TRUE;
5457    }
5458
5459  /* Reinitialize the plt offset now that it is not used as a reference
5460     count any more.  */
5461  h->plt.offset = (bfd_vma) -1;
5462
5463  /* If this is a weak symbol, and there is a real definition, the
5464     processor independent code will have arranged for us to see the
5465     real definition first, and we can just use the same value.  */
5466  if (h->u.weakdef != NULL)
5467    {
5468      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
5469		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
5470      h->root.u.def.section = h->u.weakdef->root.u.def.section;
5471      h->root.u.def.value = h->u.weakdef->root.u.def.value;
5472      return TRUE;
5473    }
5474
5475  /* If there are no non-GOT references, we do not need a copy
5476     relocation.  */
5477  if (!h->non_got_ref)
5478    return TRUE;
5479
5480  /* This is a reference to a symbol defined by a dynamic object which
5481     is not a function.
5482     If we are creating a shared library, we must presume that the
5483     only references to the symbol are via the global offset table.
5484     For such cases we need not do anything here; the relocations will
5485     be handled correctly by relocate_section.  */
5486  if (bfd_link_pic (info))
5487    return TRUE;
5488
5489  if (h->size == 0)
5490    {
5491      _bfd_error_handler (_("dynamic variable `%s' is zero size"),
5492			  h->root.root.string);
5493      return TRUE;
5494    }
5495
5496  /* We must allocate the symbol in our .dynbss section, which will
5497     become part of the .bss section of the executable.  There will be
5498     an entry for this symbol in the .dynsym section.  The dynamic
5499     object will contain position independent code, so all references
5500     from the dynamic object to this symbol will go through the global
5501     offset table.  The dynamic linker will use the .dynsym entry to
5502     determine the address it must put in the global offset table, so
5503     both the dynamic object and the regular object will refer to the
5504     same memory location for the variable.  */
5505  /* We must generate a R_NIOS2_COPY reloc to tell the dynamic linker to
5506     copy the initial value out of the dynamic object and into the
5507     runtime process image.  We need to remember the offset into the
5508     .rela.bss section we are going to use.  */
5509  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
5510    {
5511      s = htab->root.sdynrelro;
5512      srel = htab->root.sreldynrelro;
5513    }
5514  else
5515    {
5516      s = htab->root.sdynbss;
5517      srel = htab->root.srelbss;
5518    }
5519  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
5520    {
5521      srel->size += sizeof (Elf32_External_Rela);
5522      h->needs_copy = 1;
5523    }
5524
5525  align2 = bfd_log2 (h->size);
5526  if (align2 > h->root.u.def.section->alignment_power)
5527    align2 = h->root.u.def.section->alignment_power;
5528
5529  /* Align dynbss.  */
5530  s->size = BFD_ALIGN (s->size, (bfd_size_type)1 << align2);
5531  if (align2 > bfd_get_section_alignment (dynobj, s)
5532      && !bfd_set_section_alignment (dynobj, s, align2))
5533    return FALSE;
5534
5535  /* Define the symbol as being at this point in the section.  */
5536  h->root.u.def.section = s;
5537  h->root.u.def.value = s->size;
5538
5539  /* Increment the section size to make room for the symbol.  */
5540  s->size += h->size;
5541
5542  return TRUE;
5543}
5544
5545/* Worker function for nios2_elf32_size_dynamic_sections.  */
5546static bfd_boolean
5547adjust_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
5548{
5549  struct bfd_link_info *info;
5550  struct elf32_nios2_link_hash_table *htab;
5551
5552  if (h->root.type == bfd_link_hash_indirect)
5553    return TRUE;
5554
5555  if (h->root.type == bfd_link_hash_warning)
5556    /* When warning symbols are created, they **replace** the "real"
5557       entry in the hash table, thus we never get to see the real
5558       symbol in a hash traversal.  So look at it now.  */
5559    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5560
5561  info = (struct bfd_link_info *) inf;
5562  htab = elf32_nios2_hash_table (info);
5563
5564  if (h->plt.offset != (bfd_vma)-1)
5565    h->plt.offset += htab->res_n_size;
5566  if (htab->root.splt == h->root.u.def.section)
5567    h->root.u.def.value += htab->res_n_size;
5568
5569  return TRUE;
5570}
5571
5572/* Another worker function for nios2_elf32_size_dynamic_sections.
5573   Allocate space in .plt, .got and associated reloc sections for
5574   dynamic relocs.  */
5575static bfd_boolean
5576allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
5577{
5578  struct bfd_link_info *info;
5579  struct elf32_nios2_link_hash_table *htab;
5580  struct elf32_nios2_link_hash_entry *eh;
5581  struct elf32_nios2_dyn_relocs *p;
5582  int use_plt;
5583
5584  if (h->root.type == bfd_link_hash_indirect)
5585    return TRUE;
5586
5587  if (h->root.type == bfd_link_hash_warning)
5588    /* When warning symbols are created, they **replace** the "real"
5589       entry in the hash table, thus we never get to see the real
5590       symbol in a hash traversal.  So look at it now.  */
5591    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5592
5593  info = (struct bfd_link_info *) inf;
5594  htab = elf32_nios2_hash_table (info);
5595
5596  if (htab->root.dynamic_sections_created
5597      && h->plt.refcount > 0)
5598    {
5599      /* Make sure this symbol is output as a dynamic symbol.
5600	 Undefined weak syms won't yet be marked as dynamic.  */
5601      if (h->dynindx == -1
5602	  && !h->forced_local
5603	  && !bfd_elf_link_record_dynamic_symbol (info, h))
5604	return FALSE;
5605
5606      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
5607	{
5608	  asection *s = htab->root.splt;
5609
5610	  /* Allocate room for the header.  */
5611	  if (s->size == 0)
5612	    {
5613	      if (bfd_link_pic (info))
5614		s->size = 24;
5615	      else
5616		s->size = 28;
5617	    }
5618
5619	  h->plt.offset = s->size;
5620
5621	  /* If this symbol is not defined in a regular file, and we are
5622	     not generating a shared library, then set the symbol to this
5623	     location in the .plt.  This is required to make function
5624	     pointers compare as equal between the normal executable and
5625	     the shared library.  */
5626	  if (! bfd_link_pic (info)
5627	      && !h->def_regular)
5628	    {
5629	      h->root.u.def.section = s;
5630	      h->root.u.def.value = h->plt.offset;
5631	    }
5632
5633	  /* Make room for this entry.  */
5634	  s->size += 12;
5635
5636	  /* We also need to make an entry in the .rela.plt section.  */
5637	  htab->root.srelplt->size += sizeof (Elf32_External_Rela);
5638
5639	  /* And the .got.plt section.  */
5640	  htab->root.sgotplt->size += 4;
5641	}
5642      else
5643	{
5644	  h->plt.offset = (bfd_vma) -1;
5645	  h->needs_plt = 0;
5646	}
5647    }
5648  else
5649    {
5650      h->plt.offset = (bfd_vma) -1;
5651      h->needs_plt = 0;
5652    }
5653
5654  eh = (struct elf32_nios2_link_hash_entry *) h;
5655  use_plt = (eh->got_types_used == CALL_USED
5656	     && h->plt.offset != (bfd_vma) -1);
5657
5658  if (h->got.refcount > 0)
5659    {
5660      asection *s;
5661      bfd_boolean dyn;
5662      int tls_type = eh->tls_type;
5663      int indx;
5664
5665      /* Make sure this symbol is output as a dynamic symbol.
5666	 Undefined weak syms won't yet be marked as dynamic.  */
5667      if (h->dynindx == -1
5668	  && !h->forced_local
5669	  && !bfd_elf_link_record_dynamic_symbol (info, h))
5670	return FALSE;
5671
5672      s = htab->root.sgot;
5673      h->got.offset = s->size;
5674
5675      if (tls_type == GOT_UNKNOWN)
5676	abort ();
5677
5678      if (tls_type == GOT_NORMAL)
5679	/* Non-TLS symbols need one GOT slot.  */
5680	s->size += 4;
5681      else
5682	{
5683	  if (tls_type & GOT_TLS_GD)
5684	    /* R_NIOS2_TLS_GD16 needs 2 consecutive GOT slots.  */
5685	    s->size += 8;
5686	  if (tls_type & GOT_TLS_IE)
5687	    /* R_NIOS2_TLS_IE16 needs one GOT slot.  */
5688	    s->size += 4;
5689	}
5690
5691      dyn = htab->root.dynamic_sections_created;
5692
5693      indx = 0;
5694      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
5695	  && (!bfd_link_pic (info)
5696	      || !SYMBOL_REFERENCES_LOCAL (info, h)))
5697	indx = h->dynindx;
5698
5699      if (tls_type != GOT_NORMAL
5700	  && (bfd_link_pic (info) || indx != 0)
5701	  && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
5702	      || h->root.type != bfd_link_hash_undefweak))
5703	{
5704	  if (tls_type & GOT_TLS_IE)
5705	    htab->root.srelgot->size += sizeof (Elf32_External_Rela);
5706
5707	  if (tls_type & GOT_TLS_GD)
5708	    htab->root.srelgot->size += sizeof (Elf32_External_Rela);
5709
5710	  if ((tls_type & GOT_TLS_GD) && indx != 0)
5711	    htab->root.srelgot->size += sizeof (Elf32_External_Rela);
5712	}
5713      else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
5714		|| h->root.type != bfd_link_hash_undefweak)
5715	       && !use_plt
5716	       && (bfd_link_pic (info)
5717		   || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
5718	htab->root.srelgot->size += sizeof (Elf32_External_Rela);
5719    }
5720  else
5721    h->got.offset = (bfd_vma) -1;
5722
5723  if (eh->dyn_relocs == NULL)
5724    return TRUE;
5725
5726  /* In the shared -Bsymbolic case, discard space allocated for
5727     dynamic pc-relative relocs against symbols which turn out to be
5728     defined in regular objects.  For the normal shared case, discard
5729     space for pc-relative relocs that have become local due to symbol
5730     visibility changes.  */
5731
5732  if (bfd_link_pic (info))
5733    {
5734      if (h->def_regular
5735	  && (h->forced_local || SYMBOLIC_BIND (info, h)))
5736	{
5737	  struct elf32_nios2_dyn_relocs **pp;
5738
5739	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
5740	    {
5741	      p->count -= p->pc_count;
5742	      p->pc_count = 0;
5743	      if (p->count == 0)
5744		*pp = p->next;
5745	      else
5746		pp = &p->next;
5747	    }
5748	}
5749
5750      /* Also discard relocs on undefined weak syms with non-default
5751	 visibility.  */
5752      if (eh->dyn_relocs != NULL
5753	  && h->root.type == bfd_link_hash_undefweak)
5754	{
5755	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
5756	    eh->dyn_relocs = NULL;
5757
5758	  /* Make sure undefined weak symbols are output as a dynamic
5759	     symbol in PIEs.  */
5760	  else if (h->dynindx == -1
5761		   && !h->forced_local
5762		   && !bfd_elf_link_record_dynamic_symbol (info, h))
5763	    return FALSE;
5764	}
5765    }
5766  else
5767    {
5768      /* For the non-shared case, discard space for relocs against
5769	 symbols which turn out to need copy relocs or are not
5770	 dynamic.  */
5771
5772      if (!h->non_got_ref
5773	  && ((h->def_dynamic && !h->def_regular)
5774	      || (htab->root.dynamic_sections_created
5775		  && (h->root.type == bfd_link_hash_undefweak
5776		      || h->root.type == bfd_link_hash_undefined))))
5777	{
5778	  /* Make sure this symbol is output as a dynamic symbol.
5779	     Undefined weak syms won't yet be marked as dynamic.  */
5780	  if (h->dynindx == -1
5781	      && !h->forced_local
5782	      && !bfd_elf_link_record_dynamic_symbol (info, h))
5783	    return FALSE;
5784
5785	  /* If that succeeded, we know we'll be keeping all the
5786	     relocs.  */
5787	  if (h->dynindx != -1)
5788	    goto keep;
5789	}
5790
5791      eh->dyn_relocs = NULL;
5792
5793    keep: ;
5794    }
5795
5796  /* Finally, allocate space.  */
5797  for (p = eh->dyn_relocs; p != NULL; p = p->next)
5798    {
5799      asection *sreloc = elf_section_data (p->sec)->sreloc;
5800      sreloc->size += p->count * sizeof (Elf32_External_Rela);
5801    }
5802
5803  return TRUE;
5804}
5805
5806/* Implement elf_backend_size_dynamic_sections:
5807   Set the sizes of the dynamic sections.  */
5808static bfd_boolean
5809nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
5810				   struct bfd_link_info *info)
5811{
5812  bfd *dynobj;
5813  asection *s;
5814  bfd_boolean relocs;
5815  bfd *ibfd;
5816  struct elf32_nios2_link_hash_table *htab;
5817
5818  htab = elf32_nios2_hash_table (info);
5819  dynobj = htab->root.dynobj;
5820  BFD_ASSERT (dynobj != NULL);
5821
5822  htab->res_n_size = 0;
5823  if (htab->root.dynamic_sections_created)
5824    {
5825      /* Set the contents of the .interp section to the interpreter.  */
5826      if (bfd_link_executable (info) && !info->nointerp)
5827	{
5828	  s = bfd_get_linker_section (dynobj, ".interp");
5829	  BFD_ASSERT (s != NULL);
5830	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
5831	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
5832	}
5833    }
5834  else
5835    {
5836      /* We may have created entries in the .rela.got section.
5837	 However, if we are not creating the dynamic sections, we will
5838	 not actually use these entries.  Reset the size of .rela.got,
5839	 which will cause it to get stripped from the output file
5840	 below.  */
5841      s = htab->root.srelgot;
5842      if (s != NULL)
5843	s->size = 0;
5844    }
5845
5846  /* Set up .got offsets for local syms, and space for local dynamic
5847     relocs.  */
5848  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
5849    {
5850      bfd_signed_vma *local_got;
5851      bfd_signed_vma *end_local_got;
5852      char *local_tls_type;
5853      bfd_size_type locsymcount;
5854      Elf_Internal_Shdr *symtab_hdr;
5855      asection *srel;
5856
5857      if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
5858	continue;
5859
5860      for (s = ibfd->sections; s != NULL; s = s->next)
5861	{
5862	  struct elf32_nios2_dyn_relocs *p;
5863
5864	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
5865	    {
5866	      if (!bfd_is_abs_section (p->sec)
5867		  && bfd_is_abs_section (p->sec->output_section))
5868		{
5869		  /* Input section has been discarded, either because
5870		     it is a copy of a linkonce section or due to
5871		     linker script /DISCARD/, so we'll be discarding
5872		     the relocs too.  */
5873		}
5874	      else if (p->count != 0)
5875		{
5876		  srel = elf_section_data (p->sec)->sreloc;
5877		  srel->size += p->count * sizeof (Elf32_External_Rela);
5878		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
5879		    info->flags |= DF_TEXTREL;
5880		}
5881	    }
5882	}
5883
5884      local_got = elf_local_got_refcounts (ibfd);
5885      if (!local_got)
5886	continue;
5887
5888      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
5889      locsymcount = symtab_hdr->sh_info;
5890      end_local_got = local_got + locsymcount;
5891      local_tls_type = elf32_nios2_local_got_tls_type (ibfd);
5892      s = htab->root.sgot;
5893      srel = htab->root.srelgot;
5894      for (; local_got < end_local_got; ++local_got, ++local_tls_type)
5895	{
5896	  if (*local_got > 0)
5897	    {
5898	      *local_got = s->size;
5899	      if (*local_tls_type & GOT_TLS_GD)
5900		/* TLS_GD relocs need an 8-byte structure in the GOT.  */
5901		s->size += 8;
5902	      if (*local_tls_type & GOT_TLS_IE)
5903		s->size += 4;
5904	      if (*local_tls_type == GOT_NORMAL)
5905		s->size += 4;
5906
5907	      if (bfd_link_pic (info) || *local_tls_type == GOT_TLS_GD)
5908		srel->size += sizeof (Elf32_External_Rela);
5909	    }
5910	  else
5911	    *local_got = (bfd_vma) -1;
5912	}
5913    }
5914
5915  if (htab->tls_ldm_got.refcount > 0)
5916    {
5917      /* Allocate two GOT entries and one dynamic relocation (if necessary)
5918	 for R_NIOS2_TLS_LDM16 relocations.  */
5919      htab->tls_ldm_got.offset = htab->root.sgot->size;
5920      htab->root.sgot->size += 8;
5921      if (bfd_link_pic (info))
5922	htab->root.srelgot->size += sizeof (Elf32_External_Rela);
5923    }
5924  else
5925    htab->tls_ldm_got.offset = -1;
5926
5927  /* Allocate global sym .plt and .got entries, and space for global
5928     sym dynamic relocs.  */
5929  elf_link_hash_traverse (& htab->root, allocate_dynrelocs, info);
5930
5931  if (htab->root.dynamic_sections_created)
5932    {
5933      /* If the .got section is more than 0x8000 bytes, we add
5934	 0x8000 to the value of _gp_got, so that 16-bit relocations
5935	 have a greater chance of working. */
5936      if (htab->root.sgot->size >= 0x8000
5937	  && htab->h_gp_got->root.u.def.value == 0)
5938	htab->h_gp_got->root.u.def.value = 0x8000;
5939    }
5940
5941  /* The check_relocs and adjust_dynamic_symbol entry points have
5942     determined the sizes of the various dynamic sections.  Allocate
5943     memory for them.  */
5944  relocs = FALSE;
5945  for (s = dynobj->sections; s != NULL; s = s->next)
5946    {
5947      const char *name;
5948
5949      if ((s->flags & SEC_LINKER_CREATED) == 0)
5950	continue;
5951
5952      /* It's OK to base decisions on the section name, because none
5953	 of the dynobj section names depend upon the input files.  */
5954      name = bfd_get_section_name (dynobj, s);
5955
5956      if (CONST_STRNEQ (name, ".rela"))
5957	{
5958	  if (s->size != 0)
5959	    {
5960	      if (s != htab->root.srelplt)
5961		relocs = TRUE;
5962
5963	      /* We use the reloc_count field as a counter if we need
5964		 to copy relocs into the output file.  */
5965	      s->reloc_count = 0;
5966	    }
5967	}
5968      else if (s == htab->root.splt)
5969	{
5970	  /* Correct for the number of res_N branches.  */
5971	  if (s->size != 0 && !bfd_link_pic (info))
5972	    {
5973	      htab->res_n_size = (s->size - 28) / 3;
5974	      s->size += htab->res_n_size;
5975	    }
5976	}
5977      else if (s != htab->sbss
5978	       && s != htab->root.sgot
5979	       && s != htab->root.sgotplt
5980	       && s != htab->root.sdynbss
5981	       && s != htab->root.sdynrelro)
5982	/* It's not one of our sections, so don't allocate space.  */
5983	continue;
5984
5985      if (s->size == 0)
5986	{
5987	  s->flags |= SEC_EXCLUDE;
5988	  continue;
5989	}
5990
5991      if ((s->flags & SEC_HAS_CONTENTS) == 0)
5992	continue;
5993
5994      /* Allocate memory for the section contents.  */
5995      s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
5996      if (s->contents == NULL)
5997	return FALSE;
5998    }
5999
6000  /* Adjust dynamic symbols that point to the plt to account for the
6001     now-known number of resN slots.  */
6002  if (htab->res_n_size)
6003    elf_link_hash_traverse (& htab->root, adjust_dynrelocs, info);
6004
6005  if (htab->root.dynamic_sections_created)
6006    {
6007      /* Add some entries to the .dynamic section.  We fill in the
6008	 values later, in elf_nios2_finish_dynamic_sections, but we
6009	 must add the entries now so that we get the correct size for
6010	 the .dynamic section.  The DT_DEBUG entry is filled in by the
6011	 dynamic linker and used by the debugger.  */
6012#define add_dynamic_entry(TAG, VAL) \
6013  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
6014
6015      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_DEBUG, 0))
6016	return FALSE;
6017
6018      if (htab->root.sgotplt->size != 0
6019	  && !add_dynamic_entry (DT_PLTGOT, 0))
6020	return FALSE;
6021
6022      if (htab->root.splt->size != 0
6023	  && (!add_dynamic_entry (DT_PLTRELSZ, 0)
6024	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
6025	      || !add_dynamic_entry (DT_JMPREL, 0)))
6026	return FALSE;
6027
6028      if (relocs
6029	  && (!add_dynamic_entry (DT_RELA, 0)
6030	      || !add_dynamic_entry (DT_RELASZ, 0)
6031	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))))
6032	return FALSE;
6033
6034      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0))
6035	return FALSE;
6036
6037      if ((info->flags & DF_TEXTREL) != 0
6038	  && !add_dynamic_entry (DT_TEXTREL, 0))
6039	return FALSE;
6040    }
6041#undef add_dynamic_entry
6042
6043  return TRUE;
6044}
6045
6046/* Free the derived linker hash table.  */
6047static void
6048nios2_elf32_link_hash_table_free (bfd *obfd)
6049{
6050  struct elf32_nios2_link_hash_table *htab
6051    = (struct elf32_nios2_link_hash_table *) obfd->link.hash;
6052
6053  bfd_hash_table_free (&htab->bstab);
6054  _bfd_elf_link_hash_table_free (obfd);
6055}
6056
6057/* Implement bfd_elf32_bfd_link_hash_table_create.  */
6058static struct bfd_link_hash_table *
6059nios2_elf32_link_hash_table_create (bfd *abfd)
6060{
6061  struct elf32_nios2_link_hash_table *ret;
6062  bfd_size_type amt = sizeof (struct elf32_nios2_link_hash_table);
6063
6064  ret = bfd_zmalloc (amt);
6065  if (ret == NULL)
6066    return NULL;
6067
6068  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
6069				      link_hash_newfunc,
6070				      sizeof (struct
6071					      elf32_nios2_link_hash_entry),
6072				      NIOS2_ELF_DATA))
6073    {
6074      free (ret);
6075      return NULL;
6076    }
6077
6078  /* Init the stub hash table too.  */
6079  if (!bfd_hash_table_init (&ret->bstab, stub_hash_newfunc,
6080			    sizeof (struct elf32_nios2_stub_hash_entry)))
6081    {
6082      _bfd_elf_link_hash_table_free (abfd);
6083      return NULL;
6084    }
6085  ret->root.root.hash_table_free = nios2_elf32_link_hash_table_free;
6086
6087  return &ret->root.root;
6088}
6089
6090/* Implement elf_backend_reloc_type_class.  */
6091static enum elf_reloc_type_class
6092nios2_elf32_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
6093			      const asection *rel_sec ATTRIBUTE_UNUSED,
6094			      const Elf_Internal_Rela *rela)
6095{
6096  switch ((int) ELF32_R_TYPE (rela->r_info))
6097    {
6098    case R_NIOS2_RELATIVE:
6099      return reloc_class_relative;
6100    case R_NIOS2_JUMP_SLOT:
6101      return reloc_class_plt;
6102    case R_NIOS2_COPY:
6103      return reloc_class_copy;
6104    default:
6105      return reloc_class_normal;
6106    }
6107}
6108
6109/* Return 1 if target is one of ours.  */
6110static bfd_boolean
6111is_nios2_elf_target (const struct bfd_target *targ)
6112{
6113  return (targ == &nios2_elf32_le_vec
6114	  || targ == &nios2_elf32_be_vec);
6115}
6116
6117/* Implement elf_backend_add_symbol_hook.
6118   This hook is called by the linker when adding symbols from an object
6119   file.  We use it to put .comm items in .sbss, and not .bss.  */
6120static bfd_boolean
6121nios2_elf_add_symbol_hook (bfd *abfd,
6122			   struct bfd_link_info *info,
6123			   Elf_Internal_Sym *sym,
6124			   const char **namep ATTRIBUTE_UNUSED,
6125			   flagword *flagsp ATTRIBUTE_UNUSED,
6126			   asection **secp,
6127			   bfd_vma *valp)
6128{
6129  if (sym->st_shndx == SHN_COMMON
6130      && !bfd_link_relocatable (info)
6131      && sym->st_size <= elf_gp_size (abfd)
6132      && is_nios2_elf_target (info->output_bfd->xvec))
6133    {
6134      /* Common symbols less than or equal to -G nn bytes are automatically
6135	 put into .sbss.  */
6136      struct elf32_nios2_link_hash_table *htab;
6137
6138      htab = elf32_nios2_hash_table (info);
6139      if (htab->sbss == NULL)
6140	{
6141	  flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED;
6142
6143	  if (htab->root.dynobj == NULL)
6144	    htab->root.dynobj = abfd;
6145
6146	  htab->sbss = bfd_make_section_anyway_with_flags (htab->root.dynobj,
6147							   ".sbss", flags);
6148	  if (htab->sbss == NULL)
6149	    return FALSE;
6150	}
6151
6152      *secp = htab->sbss;
6153      *valp = sym->st_size;
6154    }
6155
6156  return TRUE;
6157}
6158
6159/* Implement elf_backend_can_make_relative_eh_frame:
6160   Decide whether to attempt to turn absptr or lsda encodings in
6161   shared libraries into pcrel within the given input section.  */
6162static bfd_boolean
6163nios2_elf32_can_make_relative_eh_frame (bfd *input_bfd ATTRIBUTE_UNUSED,
6164					struct bfd_link_info *info
6165					ATTRIBUTE_UNUSED,
6166					asection *eh_frame_section
6167					ATTRIBUTE_UNUSED)
6168{
6169  /* We can't use PC-relative encodings in the .eh_frame section.  */
6170  return FALSE;
6171}
6172
6173/* Implement elf_backend_special_sections.  */
6174const struct bfd_elf_special_section elf32_nios2_special_sections[] =
6175{
6176  { STRING_COMMA_LEN (".sbss"),	 -2, SHT_NOBITS,
6177    SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL },
6178  { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,
6179    SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL },
6180  { NULL,		      0,  0, 0,		     0 }
6181};
6182
6183#define ELF_ARCH			bfd_arch_nios2
6184#define ELF_TARGET_ID			NIOS2_ELF_DATA
6185#define ELF_MACHINE_CODE		EM_ALTERA_NIOS2
6186
6187/* The Nios II MMU uses a 4K page size.  */
6188
6189#define ELF_MAXPAGESIZE			0x1000
6190
6191#define bfd_elf32_bfd_link_hash_table_create \
6192					  nios2_elf32_link_hash_table_create
6193
6194#define bfd_elf32_bfd_merge_private_bfd_data \
6195					  nios2_elf32_merge_private_bfd_data
6196
6197/* Relocation table lookup macros.  */
6198
6199#define bfd_elf32_bfd_reloc_type_lookup	  nios2_elf32_bfd_reloc_type_lookup
6200#define bfd_elf32_bfd_reloc_name_lookup	  nios2_elf32_bfd_reloc_name_lookup
6201
6202/* JUMP_TABLE_LINK macros.  */
6203
6204/* elf_info_to_howto (using RELA relocations).  */
6205
6206#define elf_info_to_howto		  nios2_elf32_info_to_howto
6207
6208/* elf backend functions.  */
6209
6210#define elf_backend_can_gc_sections	1
6211#define elf_backend_can_refcount	1
6212#define elf_backend_plt_readonly	1
6213#define elf_backend_want_got_plt	1
6214#define elf_backend_want_dynrelro	1
6215#define elf_backend_rela_normal		1
6216#define elf_backend_dtrel_excludes_plt	1
6217
6218#define elf_backend_relocate_section	  nios2_elf32_relocate_section
6219#define elf_backend_section_flags	  nios2_elf32_section_flags
6220#define elf_backend_fake_sections	  nios2_elf32_fake_sections
6221#define elf_backend_check_relocs	  nios2_elf32_check_relocs
6222
6223#define elf_backend_gc_mark_hook	  nios2_elf32_gc_mark_hook
6224#define elf_backend_gc_sweep_hook	  nios2_elf32_gc_sweep_hook
6225#define elf_backend_create_dynamic_sections \
6226					  nios2_elf32_create_dynamic_sections
6227#define elf_backend_finish_dynamic_symbol nios2_elf32_finish_dynamic_symbol
6228#define elf_backend_finish_dynamic_sections \
6229					  nios2_elf32_finish_dynamic_sections
6230#define elf_backend_adjust_dynamic_symbol nios2_elf32_adjust_dynamic_symbol
6231#define elf_backend_reloc_type_class	  nios2_elf32_reloc_type_class
6232#define elf_backend_size_dynamic_sections nios2_elf32_size_dynamic_sections
6233#define elf_backend_add_symbol_hook	  nios2_elf_add_symbol_hook
6234#define elf_backend_copy_indirect_symbol  nios2_elf32_copy_indirect_symbol
6235#define elf_backend_object_p		  nios2_elf32_object_p
6236
6237#define elf_backend_grok_prstatus	  nios2_grok_prstatus
6238#define elf_backend_grok_psinfo		  nios2_grok_psinfo
6239
6240#undef elf_backend_can_make_relative_eh_frame
6241#define elf_backend_can_make_relative_eh_frame \
6242					  nios2_elf32_can_make_relative_eh_frame
6243
6244#define elf_backend_special_sections	  elf32_nios2_special_sections
6245
6246#define TARGET_LITTLE_SYM		nios2_elf32_le_vec
6247#define TARGET_LITTLE_NAME		"elf32-littlenios2"
6248#define TARGET_BIG_SYM			nios2_elf32_be_vec
6249#define TARGET_BIG_NAME			"elf32-bignios2"
6250
6251#define elf_backend_got_header_size	12
6252#define elf_backend_default_execstack	0
6253
6254#include "elf32-target.h"
6255