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