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