Home | History | Annotate | Download | only in bfd
      1 /* Matsushita 10300 specific support for 32-bit ELF
      2    Copyright (C) 1996-2016 Free Software Foundation, Inc.
      3 
      4    This file is part of BFD, the Binary File Descriptor library.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software
     18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19    MA 02110-1301, USA.  */
     20 
     21 #include "sysdep.h"
     22 #include "bfd.h"
     23 #include "libbfd.h"
     24 #include "elf-bfd.h"
     25 #include "elf/mn10300.h"
     26 #include "libiberty.h"
     27 
     28 /* The mn10300 linker needs to keep track of the number of relocs that
     29    it decides to copy in check_relocs for each symbol.  This is so
     30    that it can discard PC relative relocs if it doesn't need them when
     31    linking with -Bsymbolic.  We store the information in a field
     32    extending the regular ELF linker hash table.  */
     33 
     34 struct elf32_mn10300_link_hash_entry
     35 {
     36   /* The basic elf link hash table entry.  */
     37   struct elf_link_hash_entry root;
     38 
     39   /* For function symbols, the number of times this function is
     40      called directly (ie by name).  */
     41   unsigned int direct_calls;
     42 
     43   /* For function symbols, the size of this function's stack
     44      (if <= 255 bytes).  We stuff this into "call" instructions
     45      to this target when it's valid and profitable to do so.
     46 
     47      This does not include stack allocated by movm!  */
     48   unsigned char stack_size;
     49 
     50   /* For function symbols, arguments (if any) for movm instruction
     51      in the prologue.  We stuff this value into "call" instructions
     52      to the target when it's valid and profitable to do so.  */
     53   unsigned char movm_args;
     54 
     55   /* For function symbols, the amount of stack space that would be allocated
     56      by the movm instruction.  This is redundant with movm_args, but we
     57      add it to the hash table to avoid computing it over and over.  */
     58   unsigned char movm_stack_size;
     59 
     60 /* When set, convert all "call" instructions to this target into "calls"
     61    instructions.  */
     62 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
     63 
     64 /* Used to mark functions which have had redundant parts of their
     65    prologue deleted.  */
     66 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
     67   unsigned char flags;
     68 
     69   /* Calculated value.  */
     70   bfd_vma value;
     71 
     72 #define GOT_UNKNOWN	0
     73 #define GOT_NORMAL	1
     74 #define GOT_TLS_GD	2
     75 #define GOT_TLS_LD	3
     76 #define GOT_TLS_IE	4
     77   /* Used to distinguish GOT entries for TLS types from normal GOT entries.  */
     78   unsigned char tls_type;
     79 };
     80 
     81 /* We derive a hash table from the main elf linker hash table so
     82    we can store state variables and a secondary hash table without
     83    resorting to global variables.  */
     84 struct elf32_mn10300_link_hash_table
     85 {
     86   /* The main hash table.  */
     87   struct elf_link_hash_table root;
     88 
     89   /* A hash table for static functions.  We could derive a new hash table
     90      instead of using the full elf32_mn10300_link_hash_table if we wanted
     91      to save some memory.  */
     92   struct elf32_mn10300_link_hash_table *static_hash_table;
     93 
     94   /* Random linker state flags.  */
     95 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
     96   char flags;
     97   struct
     98   {
     99     bfd_signed_vma  refcount;
    100     bfd_vma         offset;
    101     char            got_allocated;
    102     char            rel_emitted;
    103   } tls_ldm_got;
    104 };
    105 
    106 #define elf_mn10300_hash_entry(ent) ((struct elf32_mn10300_link_hash_entry *)(ent))
    107 
    108 struct elf_mn10300_obj_tdata
    109 {
    110   struct elf_obj_tdata root;
    111 
    112   /* tls_type for each local got entry.  */
    113   char * local_got_tls_type;
    114 };
    115 
    116 #define elf_mn10300_tdata(abfd) \
    117   ((struct elf_mn10300_obj_tdata *) (abfd)->tdata.any)
    118 
    119 #define elf_mn10300_local_got_tls_type(abfd) \
    120   (elf_mn10300_tdata (abfd)->local_got_tls_type)
    121 
    122 #ifndef streq
    123 #define streq(a, b) (strcmp ((a),(b)) == 0)
    124 #endif
    125 
    126 /* For MN10300 linker hash table.  */
    127 
    128 /* Get the MN10300 ELF linker hash table from a link_info structure.  */
    129 
    130 #define elf32_mn10300_hash_table(p) \
    131   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
    132   == MN10300_ELF_DATA ? ((struct elf32_mn10300_link_hash_table *) ((p)->hash)) : NULL)
    133 
    134 #define elf32_mn10300_link_hash_traverse(table, func, info)		\
    135   (elf_link_hash_traverse						\
    136    (&(table)->root,							\
    137     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
    138     (info)))
    139 
    140 static reloc_howto_type elf_mn10300_howto_table[] =
    141 {
    142   /* Dummy relocation.  Does nothing.  */
    143   HOWTO (R_MN10300_NONE,
    144 	 0,
    145 	 3,
    146 	 0,
    147 	 FALSE,
    148 	 0,
    149 	 complain_overflow_dont,
    150 	 bfd_elf_generic_reloc,
    151 	 "R_MN10300_NONE",
    152 	 FALSE,
    153 	 0,
    154 	 0,
    155 	 FALSE),
    156   /* Standard 32 bit reloc.  */
    157   HOWTO (R_MN10300_32,
    158 	 0,
    159 	 2,
    160 	 32,
    161 	 FALSE,
    162 	 0,
    163 	 complain_overflow_bitfield,
    164 	 bfd_elf_generic_reloc,
    165 	 "R_MN10300_32",
    166 	 FALSE,
    167 	 0xffffffff,
    168 	 0xffffffff,
    169 	 FALSE),
    170   /* Standard 16 bit reloc.  */
    171   HOWTO (R_MN10300_16,
    172 	 0,
    173 	 1,
    174 	 16,
    175 	 FALSE,
    176 	 0,
    177 	 complain_overflow_bitfield,
    178 	 bfd_elf_generic_reloc,
    179 	 "R_MN10300_16",
    180 	 FALSE,
    181 	 0xffff,
    182 	 0xffff,
    183 	 FALSE),
    184   /* Standard 8 bit reloc.  */
    185   HOWTO (R_MN10300_8,
    186 	 0,
    187 	 0,
    188 	 8,
    189 	 FALSE,
    190 	 0,
    191 	 complain_overflow_bitfield,
    192 	 bfd_elf_generic_reloc,
    193 	 "R_MN10300_8",
    194 	 FALSE,
    195 	 0xff,
    196 	 0xff,
    197 	 FALSE),
    198   /* Standard 32bit pc-relative reloc.  */
    199   HOWTO (R_MN10300_PCREL32,
    200 	 0,
    201 	 2,
    202 	 32,
    203 	 TRUE,
    204 	 0,
    205 	 complain_overflow_bitfield,
    206 	 bfd_elf_generic_reloc,
    207 	 "R_MN10300_PCREL32",
    208 	 FALSE,
    209 	 0xffffffff,
    210 	 0xffffffff,
    211 	 TRUE),
    212   /* Standard 16bit pc-relative reloc.  */
    213   HOWTO (R_MN10300_PCREL16,
    214 	 0,
    215 	 1,
    216 	 16,
    217 	 TRUE,
    218 	 0,
    219 	 complain_overflow_bitfield,
    220 	 bfd_elf_generic_reloc,
    221 	 "R_MN10300_PCREL16",
    222 	 FALSE,
    223 	 0xffff,
    224 	 0xffff,
    225 	 TRUE),
    226   /* Standard 8 pc-relative reloc.  */
    227   HOWTO (R_MN10300_PCREL8,
    228 	 0,
    229 	 0,
    230 	 8,
    231 	 TRUE,
    232 	 0,
    233 	 complain_overflow_bitfield,
    234 	 bfd_elf_generic_reloc,
    235 	 "R_MN10300_PCREL8",
    236 	 FALSE,
    237 	 0xff,
    238 	 0xff,
    239 	 TRUE),
    240 
    241   /* GNU extension to record C++ vtable hierarchy.  */
    242   HOWTO (R_MN10300_GNU_VTINHERIT, /* type */
    243 	 0,			/* rightshift */
    244 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    245 	 0,			/* bitsize */
    246 	 FALSE,			/* pc_relative */
    247 	 0,			/* bitpos */
    248 	 complain_overflow_dont, /* complain_on_overflow */
    249 	 NULL,			/* special_function */
    250 	 "R_MN10300_GNU_VTINHERIT", /* name */
    251 	 FALSE,			/* partial_inplace */
    252 	 0,			/* src_mask */
    253 	 0,			/* dst_mask */
    254 	 FALSE),		/* pcrel_offset */
    255 
    256   /* GNU extension to record C++ vtable member usage */
    257   HOWTO (R_MN10300_GNU_VTENTRY,	/* type */
    258 	 0,			/* rightshift */
    259 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    260 	 0,			/* bitsize */
    261 	 FALSE,			/* pc_relative */
    262 	 0,			/* bitpos */
    263 	 complain_overflow_dont, /* complain_on_overflow */
    264 	 NULL,			/* special_function */
    265 	 "R_MN10300_GNU_VTENTRY", /* name */
    266 	 FALSE,			/* partial_inplace */
    267 	 0,			/* src_mask */
    268 	 0,			/* dst_mask */
    269 	 FALSE),		/* pcrel_offset */
    270 
    271   /* Standard 24 bit reloc.  */
    272   HOWTO (R_MN10300_24,
    273 	 0,
    274 	 2,
    275 	 24,
    276 	 FALSE,
    277 	 0,
    278 	 complain_overflow_bitfield,
    279 	 bfd_elf_generic_reloc,
    280 	 "R_MN10300_24",
    281 	 FALSE,
    282 	 0xffffff,
    283 	 0xffffff,
    284 	 FALSE),
    285   HOWTO (R_MN10300_GOTPC32,	/* type */
    286 	 0,			/* rightshift */
    287 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    288 	 32,			/* bitsize */
    289 	 TRUE,			/* pc_relative */
    290 	 0,			/* bitpos */
    291 	 complain_overflow_bitfield, /* complain_on_overflow */
    292 	 bfd_elf_generic_reloc, /* */
    293 	 "R_MN10300_GOTPC32",	/* name */
    294 	 FALSE,			/* partial_inplace */
    295 	 0xffffffff,		/* src_mask */
    296 	 0xffffffff,		/* dst_mask */
    297 	 TRUE),			/* pcrel_offset */
    298 
    299   HOWTO (R_MN10300_GOTPC16,	/* type */
    300 	 0,			/* rightshift */
    301 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    302 	 16,			/* bitsize */
    303 	 TRUE,			/* pc_relative */
    304 	 0,			/* bitpos */
    305 	 complain_overflow_bitfield, /* complain_on_overflow */
    306 	 bfd_elf_generic_reloc, /* */
    307 	 "R_MN10300_GOTPC16",	/* name */
    308 	 FALSE,			/* partial_inplace */
    309 	 0xffff,		/* src_mask */
    310 	 0xffff,		/* dst_mask */
    311 	 TRUE),			/* pcrel_offset */
    312 
    313   HOWTO (R_MN10300_GOTOFF32,	/* type */
    314 	 0,			/* rightshift */
    315 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    316 	 32,			/* bitsize */
    317 	 FALSE,			/* pc_relative */
    318 	 0,			/* bitpos */
    319 	 complain_overflow_bitfield, /* complain_on_overflow */
    320 	 bfd_elf_generic_reloc, /* */
    321 	 "R_MN10300_GOTOFF32",	/* name */
    322 	 FALSE,			/* partial_inplace */
    323 	 0xffffffff,		/* src_mask */
    324 	 0xffffffff,		/* dst_mask */
    325 	 FALSE),		/* pcrel_offset */
    326 
    327   HOWTO (R_MN10300_GOTOFF24,	/* type */
    328 	 0,			/* rightshift */
    329 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    330 	 24,			/* bitsize */
    331 	 FALSE,			/* pc_relative */
    332 	 0,			/* bitpos */
    333 	 complain_overflow_bitfield, /* complain_on_overflow */
    334 	 bfd_elf_generic_reloc, /* */
    335 	 "R_MN10300_GOTOFF24",	/* name */
    336 	 FALSE,			/* partial_inplace */
    337 	 0xffffff,		/* src_mask */
    338 	 0xffffff,		/* dst_mask */
    339 	 FALSE),		/* pcrel_offset */
    340 
    341   HOWTO (R_MN10300_GOTOFF16,	/* type */
    342 	 0,			/* rightshift */
    343 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    344 	 16,			/* bitsize */
    345 	 FALSE,			/* pc_relative */
    346 	 0,			/* bitpos */
    347 	 complain_overflow_bitfield, /* complain_on_overflow */
    348 	 bfd_elf_generic_reloc, /* */
    349 	 "R_MN10300_GOTOFF16",	/* name */
    350 	 FALSE,			/* partial_inplace */
    351 	 0xffff,		/* src_mask */
    352 	 0xffff,		/* dst_mask */
    353 	 FALSE),		/* pcrel_offset */
    354 
    355   HOWTO (R_MN10300_PLT32,	/* type */
    356 	 0,			/* rightshift */
    357 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    358 	 32,			/* bitsize */
    359 	 TRUE,			/* pc_relative */
    360 	 0,			/* bitpos */
    361 	 complain_overflow_bitfield, /* complain_on_overflow */
    362 	 bfd_elf_generic_reloc, /* */
    363 	 "R_MN10300_PLT32",	/* name */
    364 	 FALSE,			/* partial_inplace */
    365 	 0xffffffff,		/* src_mask */
    366 	 0xffffffff,		/* dst_mask */
    367 	 TRUE),			/* pcrel_offset */
    368 
    369   HOWTO (R_MN10300_PLT16,	/* type */
    370 	 0,			/* rightshift */
    371 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    372 	 16,			/* bitsize */
    373 	 TRUE,			/* pc_relative */
    374 	 0,			/* bitpos */
    375 	 complain_overflow_bitfield, /* complain_on_overflow */
    376 	 bfd_elf_generic_reloc, /* */
    377 	 "R_MN10300_PLT16",	/* name */
    378 	 FALSE,			/* partial_inplace */
    379 	 0xffff,		/* src_mask */
    380 	 0xffff,		/* dst_mask */
    381 	 TRUE),			/* pcrel_offset */
    382 
    383   HOWTO (R_MN10300_GOT32,	/* type */
    384 	 0,			/* rightshift */
    385 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    386 	 32,			/* bitsize */
    387 	 FALSE,			/* pc_relative */
    388 	 0,			/* bitpos */
    389 	 complain_overflow_bitfield, /* complain_on_overflow */
    390 	 bfd_elf_generic_reloc, /* */
    391 	 "R_MN10300_GOT32",	/* name */
    392 	 FALSE,			/* partial_inplace */
    393 	 0xffffffff,		/* src_mask */
    394 	 0xffffffff,		/* dst_mask */
    395 	 FALSE),		/* pcrel_offset */
    396 
    397   HOWTO (R_MN10300_GOT24,	/* type */
    398 	 0,			/* rightshift */
    399 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    400 	 24,			/* bitsize */
    401 	 FALSE,			/* pc_relative */
    402 	 0,			/* bitpos */
    403 	 complain_overflow_bitfield, /* complain_on_overflow */
    404 	 bfd_elf_generic_reloc, /* */
    405 	 "R_MN10300_GOT24",	/* name */
    406 	 FALSE,			/* partial_inplace */
    407 	 0xffffffff,		/* src_mask */
    408 	 0xffffffff,		/* dst_mask */
    409 	 FALSE),		/* pcrel_offset */
    410 
    411   HOWTO (R_MN10300_GOT16,	/* type */
    412 	 0,			/* rightshift */
    413 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    414 	 16,			/* bitsize */
    415 	 FALSE,			/* pc_relative */
    416 	 0,			/* bitpos */
    417 	 complain_overflow_bitfield, /* complain_on_overflow */
    418 	 bfd_elf_generic_reloc, /* */
    419 	 "R_MN10300_GOT16",	/* name */
    420 	 FALSE,			/* partial_inplace */
    421 	 0xffffffff,		/* src_mask */
    422 	 0xffffffff,		/* dst_mask */
    423 	 FALSE),		/* pcrel_offset */
    424 
    425   HOWTO (R_MN10300_COPY,	/* type */
    426 	 0,			/* rightshift */
    427 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    428 	 32,			/* bitsize */
    429 	 FALSE,			/* pc_relative */
    430 	 0,			/* bitpos */
    431 	 complain_overflow_bitfield, /* complain_on_overflow */
    432 	 bfd_elf_generic_reloc, /* */
    433 	 "R_MN10300_COPY",		/* name */
    434 	 FALSE,			/* partial_inplace */
    435 	 0xffffffff,		/* src_mask */
    436 	 0xffffffff,		/* dst_mask */
    437 	 FALSE),		/* pcrel_offset */
    438 
    439   HOWTO (R_MN10300_GLOB_DAT,	/* type */
    440 	 0,			/* rightshift */
    441 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    442 	 32,			/* bitsize */
    443 	 FALSE,			/* pc_relative */
    444 	 0,			/* bitpos */
    445 	 complain_overflow_bitfield, /* complain_on_overflow */
    446 	 bfd_elf_generic_reloc, /* */
    447 	 "R_MN10300_GLOB_DAT",	/* name */
    448 	 FALSE,			/* partial_inplace */
    449 	 0xffffffff,		/* src_mask */
    450 	 0xffffffff,		/* dst_mask */
    451 	 FALSE),		/* pcrel_offset */
    452 
    453   HOWTO (R_MN10300_JMP_SLOT,	/* type */
    454 	 0,			/* rightshift */
    455 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    456 	 32,			/* bitsize */
    457 	 FALSE,			/* pc_relative */
    458 	 0,			/* bitpos */
    459 	 complain_overflow_bitfield, /* complain_on_overflow */
    460 	 bfd_elf_generic_reloc, /* */
    461 	 "R_MN10300_JMP_SLOT",	/* name */
    462 	 FALSE,			/* partial_inplace */
    463 	 0xffffffff,		/* src_mask */
    464 	 0xffffffff,		/* dst_mask */
    465 	 FALSE),		/* pcrel_offset */
    466 
    467   HOWTO (R_MN10300_RELATIVE,	/* type */
    468 	 0,			/* rightshift */
    469 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    470 	 32,			/* bitsize */
    471 	 FALSE,			/* pc_relative */
    472 	 0,			/* bitpos */
    473 	 complain_overflow_bitfield, /* complain_on_overflow */
    474 	 bfd_elf_generic_reloc, /* */
    475 	 "R_MN10300_RELATIVE",	/* name */
    476 	 FALSE,			/* partial_inplace */
    477 	 0xffffffff,		/* src_mask */
    478 	 0xffffffff,		/* dst_mask */
    479 	 FALSE),		/* pcrel_offset */
    480 
    481   HOWTO (R_MN10300_TLS_GD,	/* type */
    482 	 0,			/* rightshift */
    483 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    484 	 32,			/* bitsize */
    485 	 FALSE,			/* pc_relative */
    486 	 0,			/* bitpos */
    487 	 complain_overflow_bitfield, /* complain_on_overflow */
    488 	 bfd_elf_generic_reloc, /* */
    489 	 "R_MN10300_TLS_GD",	/* name */
    490 	 FALSE,			/* partial_inplace */
    491 	 0xffffffff,		/* src_mask */
    492 	 0xffffffff,		/* dst_mask */
    493 	 FALSE),		/* pcrel_offset */
    494 
    495   HOWTO (R_MN10300_TLS_LD,	/* type */
    496 	 0,			/* rightshift */
    497 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    498 	 32,			/* bitsize */
    499 	 FALSE,			/* pc_relative */
    500 	 0,			/* bitpos */
    501 	 complain_overflow_bitfield, /* complain_on_overflow */
    502 	 bfd_elf_generic_reloc, /* */
    503 	 "R_MN10300_TLS_LD",	/* name */
    504 	 FALSE,			/* partial_inplace */
    505 	 0xffffffff,		/* src_mask */
    506 	 0xffffffff,		/* dst_mask */
    507 	 FALSE),		/* pcrel_offset */
    508 
    509   HOWTO (R_MN10300_TLS_LDO,	/* type */
    510 	 0,			/* rightshift */
    511 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    512 	 32,			/* bitsize */
    513 	 FALSE,			/* pc_relative */
    514 	 0,			/* bitpos */
    515 	 complain_overflow_bitfield, /* complain_on_overflow */
    516 	 bfd_elf_generic_reloc, /* */
    517 	 "R_MN10300_TLS_LDO",	/* name */
    518 	 FALSE,			/* partial_inplace */
    519 	 0xffffffff,		/* src_mask */
    520 	 0xffffffff,		/* dst_mask */
    521 	 FALSE),		/* pcrel_offset */
    522 
    523   HOWTO (R_MN10300_TLS_GOTIE,	/* type */
    524 	 0,			/* rightshift */
    525 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    526 	 32,			/* bitsize */
    527 	 FALSE,			/* pc_relative */
    528 	 0,			/* bitpos */
    529 	 complain_overflow_bitfield, /* complain_on_overflow */
    530 	 bfd_elf_generic_reloc, /* */
    531 	 "R_MN10300_TLS_GOTIE",	/* name */
    532 	 FALSE,			/* partial_inplace */
    533 	 0xffffffff,		/* src_mask */
    534 	 0xffffffff,		/* dst_mask */
    535 	 FALSE),		/* pcrel_offset */
    536 
    537   HOWTO (R_MN10300_TLS_IE,	/* type */
    538 	 0,			/* rightshift */
    539 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    540 	 32,			/* bitsize */
    541 	 FALSE,			/* pc_relative */
    542 	 0,			/* bitpos */
    543 	 complain_overflow_bitfield, /* complain_on_overflow */
    544 	 bfd_elf_generic_reloc, /* */
    545 	 "R_MN10300_TLS_IE",	/* name */
    546 	 FALSE,			/* partial_inplace */
    547 	 0xffffffff,		/* src_mask */
    548 	 0xffffffff,		/* dst_mask */
    549 	 FALSE),		/* pcrel_offset */
    550 
    551   HOWTO (R_MN10300_TLS_LE,	/* type */
    552 	 0,			/* rightshift */
    553 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    554 	 32,			/* bitsize */
    555 	 FALSE,			/* pc_relative */
    556 	 0,			/* bitpos */
    557 	 complain_overflow_bitfield, /* complain_on_overflow */
    558 	 bfd_elf_generic_reloc, /* */
    559 	 "R_MN10300_TLS_LE",	/* name */
    560 	 FALSE,			/* partial_inplace */
    561 	 0xffffffff,		/* src_mask */
    562 	 0xffffffff,		/* dst_mask */
    563 	 FALSE),		/* pcrel_offset */
    564 
    565   HOWTO (R_MN10300_TLS_DTPMOD,	/* type */
    566 	 0,			/* rightshift */
    567 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    568 	 32,			/* bitsize */
    569 	 FALSE,			/* pc_relative */
    570 	 0,			/* bitpos */
    571 	 complain_overflow_bitfield, /* complain_on_overflow */
    572 	 bfd_elf_generic_reloc, /* */
    573 	 "R_MN10300_TLS_DTPMOD",	/* name */
    574 	 FALSE,			/* partial_inplace */
    575 	 0xffffffff,		/* src_mask */
    576 	 0xffffffff,		/* dst_mask */
    577 	 FALSE),		/* pcrel_offset */
    578 
    579   HOWTO (R_MN10300_TLS_DTPOFF,	/* type */
    580 	 0,			/* rightshift */
    581 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    582 	 32,			/* bitsize */
    583 	 FALSE,			/* pc_relative */
    584 	 0,			/* bitpos */
    585 	 complain_overflow_bitfield, /* complain_on_overflow */
    586 	 bfd_elf_generic_reloc, /* */
    587 	 "R_MN10300_TLS_DTPOFF",	/* name */
    588 	 FALSE,			/* partial_inplace */
    589 	 0xffffffff,		/* src_mask */
    590 	 0xffffffff,		/* dst_mask */
    591 	 FALSE),		/* pcrel_offset */
    592 
    593   HOWTO (R_MN10300_TLS_TPOFF,	/* type */
    594 	 0,			/* rightshift */
    595 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    596 	 32,			/* bitsize */
    597 	 FALSE,			/* pc_relative */
    598 	 0,			/* bitpos */
    599 	 complain_overflow_bitfield, /* complain_on_overflow */
    600 	 bfd_elf_generic_reloc, /* */
    601 	 "R_MN10300_TLS_TPOFF",	/* name */
    602 	 FALSE,			/* partial_inplace */
    603 	 0xffffffff,		/* src_mask */
    604 	 0xffffffff,		/* dst_mask */
    605 	 FALSE),		/* pcrel_offset */
    606 
    607   HOWTO (R_MN10300_SYM_DIFF,	/* type */
    608 	 0,			/* rightshift */
    609 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    610 	 32,			/* bitsize */
    611 	 FALSE,			/* pc_relative */
    612 	 0,			/* bitpos */
    613 	 complain_overflow_dont,/* complain_on_overflow */
    614 	 NULL, 			/* special handler.  */
    615 	 "R_MN10300_SYM_DIFF",	/* name */
    616 	 FALSE,			/* partial_inplace */
    617 	 0xffffffff,		/* src_mask */
    618 	 0xffffffff,		/* dst_mask */
    619 	 FALSE),		/* pcrel_offset */
    620 
    621   HOWTO (R_MN10300_ALIGN,	/* type */
    622 	 0,			/* rightshift */
    623 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    624 	 32,			/* bitsize */
    625 	 FALSE,			/* pc_relative */
    626 	 0,			/* bitpos */
    627 	 complain_overflow_dont,/* complain_on_overflow */
    628 	 NULL, 			/* special handler.  */
    629 	 "R_MN10300_ALIGN",	/* name */
    630 	 FALSE,			/* partial_inplace */
    631 	 0,			/* src_mask */
    632 	 0,			/* dst_mask */
    633 	 FALSE)			/* pcrel_offset */
    634 };
    635 
    636 struct mn10300_reloc_map
    637 {
    638   bfd_reloc_code_real_type bfd_reloc_val;
    639   unsigned char elf_reloc_val;
    640 };
    641 
    642 static const struct mn10300_reloc_map mn10300_reloc_map[] =
    643 {
    644   { BFD_RELOC_NONE, R_MN10300_NONE, },
    645   { BFD_RELOC_32, R_MN10300_32, },
    646   { BFD_RELOC_16, R_MN10300_16, },
    647   { BFD_RELOC_8, R_MN10300_8, },
    648   { BFD_RELOC_32_PCREL, R_MN10300_PCREL32, },
    649   { BFD_RELOC_16_PCREL, R_MN10300_PCREL16, },
    650   { BFD_RELOC_8_PCREL, R_MN10300_PCREL8, },
    651   { BFD_RELOC_24, R_MN10300_24, },
    652   { BFD_RELOC_VTABLE_INHERIT, R_MN10300_GNU_VTINHERIT },
    653   { BFD_RELOC_VTABLE_ENTRY, R_MN10300_GNU_VTENTRY },
    654   { BFD_RELOC_32_GOT_PCREL, R_MN10300_GOTPC32 },
    655   { BFD_RELOC_16_GOT_PCREL, R_MN10300_GOTPC16 },
    656   { BFD_RELOC_32_GOTOFF, R_MN10300_GOTOFF32 },
    657   { BFD_RELOC_MN10300_GOTOFF24, R_MN10300_GOTOFF24 },
    658   { BFD_RELOC_16_GOTOFF, R_MN10300_GOTOFF16 },
    659   { BFD_RELOC_32_PLT_PCREL, R_MN10300_PLT32 },
    660   { BFD_RELOC_16_PLT_PCREL, R_MN10300_PLT16 },
    661   { BFD_RELOC_MN10300_GOT32, R_MN10300_GOT32 },
    662   { BFD_RELOC_MN10300_GOT24, R_MN10300_GOT24 },
    663   { BFD_RELOC_MN10300_GOT16, R_MN10300_GOT16 },
    664   { BFD_RELOC_MN10300_COPY, R_MN10300_COPY },
    665   { BFD_RELOC_MN10300_GLOB_DAT, R_MN10300_GLOB_DAT },
    666   { BFD_RELOC_MN10300_JMP_SLOT, R_MN10300_JMP_SLOT },
    667   { BFD_RELOC_MN10300_RELATIVE, R_MN10300_RELATIVE },
    668   { BFD_RELOC_MN10300_TLS_GD, R_MN10300_TLS_GD },
    669   { BFD_RELOC_MN10300_TLS_LD, R_MN10300_TLS_LD },
    670   { BFD_RELOC_MN10300_TLS_LDO, R_MN10300_TLS_LDO },
    671   { BFD_RELOC_MN10300_TLS_GOTIE, R_MN10300_TLS_GOTIE },
    672   { BFD_RELOC_MN10300_TLS_IE, R_MN10300_TLS_IE },
    673   { BFD_RELOC_MN10300_TLS_LE, R_MN10300_TLS_LE },
    674   { BFD_RELOC_MN10300_TLS_DTPMOD, R_MN10300_TLS_DTPMOD },
    675   { BFD_RELOC_MN10300_TLS_DTPOFF, R_MN10300_TLS_DTPOFF },
    676   { BFD_RELOC_MN10300_TLS_TPOFF, R_MN10300_TLS_TPOFF },
    677   { BFD_RELOC_MN10300_SYM_DIFF, R_MN10300_SYM_DIFF },
    678   { BFD_RELOC_MN10300_ALIGN, R_MN10300_ALIGN }
    679 };
    680 
    681 /* Create the GOT section.  */
    682 
    683 static bfd_boolean
    684 _bfd_mn10300_elf_create_got_section (bfd * abfd,
    685 				     struct bfd_link_info * info)
    686 {
    687   flagword   flags;
    688   flagword   pltflags;
    689   asection * s;
    690   struct elf_link_hash_entry * h;
    691   const struct elf_backend_data * bed = get_elf_backend_data (abfd);
    692   struct elf_link_hash_table *htab;
    693   int ptralign;
    694 
    695   /* This function may be called more than once.  */
    696   htab = elf_hash_table (info);
    697   if (htab->sgot != NULL)
    698     return TRUE;
    699 
    700   switch (bed->s->arch_size)
    701     {
    702     case 32:
    703       ptralign = 2;
    704       break;
    705 
    706     case 64:
    707       ptralign = 3;
    708       break;
    709 
    710     default:
    711       bfd_set_error (bfd_error_bad_value);
    712       return FALSE;
    713     }
    714 
    715   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
    716 	   | SEC_LINKER_CREATED);
    717 
    718   pltflags = flags;
    719   pltflags |= SEC_CODE;
    720   if (bed->plt_not_loaded)
    721     pltflags &= ~ (SEC_LOAD | SEC_HAS_CONTENTS);
    722   if (bed->plt_readonly)
    723     pltflags |= SEC_READONLY;
    724 
    725   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
    726   htab->splt = s;
    727   if (s == NULL
    728       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
    729     return FALSE;
    730 
    731   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
    732      .plt section.  */
    733   if (bed->want_plt_sym)
    734     {
    735       h = _bfd_elf_define_linkage_sym (abfd, info, s,
    736 				       "_PROCEDURE_LINKAGE_TABLE_");
    737       htab->hplt = h;
    738       if (h == NULL)
    739 	return FALSE;
    740     }
    741 
    742   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
    743   htab->sgot = s;
    744   if (s == NULL
    745       || ! bfd_set_section_alignment (abfd, s, ptralign))
    746     return FALSE;
    747 
    748   if (bed->want_got_plt)
    749     {
    750       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
    751       htab->sgotplt = s;
    752       if (s == NULL
    753 	  || ! bfd_set_section_alignment (abfd, s, ptralign))
    754 	return FALSE;
    755     }
    756 
    757   /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
    758      (or .got.plt) section.  We don't do this in the linker script
    759      because we don't want to define the symbol if we are not creating
    760      a global offset table.  */
    761   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
    762   htab->hgot = h;
    763   if (h == NULL)
    764     return FALSE;
    765 
    766   /* The first bit of the global offset table is the header.  */
    767   s->size += bed->got_header_size;
    768 
    769   return TRUE;
    770 }
    771 
    772 static reloc_howto_type *
    773 bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    774 				 bfd_reloc_code_real_type code)
    775 {
    776   unsigned int i;
    777 
    778   for (i = ARRAY_SIZE (mn10300_reloc_map); i--;)
    779     if (mn10300_reloc_map[i].bfd_reloc_val == code)
    780       return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val];
    781 
    782   return NULL;
    783 }
    784 
    785 static reloc_howto_type *
    786 bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    787 				 const char *r_name)
    788 {
    789   unsigned int i;
    790 
    791   for (i = ARRAY_SIZE (elf_mn10300_howto_table); i--;)
    792     if (elf_mn10300_howto_table[i].name != NULL
    793 	&& strcasecmp (elf_mn10300_howto_table[i].name, r_name) == 0)
    794       return elf_mn10300_howto_table + i;
    795 
    796   return NULL;
    797 }
    798 
    799 /* Set the howto pointer for an MN10300 ELF reloc.  */
    800 
    801 static void
    802 mn10300_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
    803 		       arelent *cache_ptr,
    804 		       Elf_Internal_Rela *dst)
    805 {
    806   unsigned int r_type;
    807 
    808   r_type = ELF32_R_TYPE (dst->r_info);
    809   if (r_type >= R_MN10300_MAX)
    810     {
    811       (*_bfd_error_handler) (_("%B: unrecognised MN10300 reloc number: %d"),
    812 			     abfd, r_type);
    813       bfd_set_error (bfd_error_bad_value);
    814       r_type = R_MN10300_NONE;
    815     }
    816   cache_ptr->howto = elf_mn10300_howto_table + r_type;
    817 }
    818 
    819 static int
    820 elf_mn10300_tls_transition (struct bfd_link_info *        info,
    821 			    int                           r_type,
    822 			    struct elf_link_hash_entry *  h,
    823 			    asection *                    sec,
    824 			    bfd_boolean                   counting)
    825 {
    826   bfd_boolean is_local;
    827 
    828   if (r_type == R_MN10300_TLS_GD
    829       && h != NULL
    830       && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
    831     return R_MN10300_TLS_GOTIE;
    832 
    833   if (bfd_link_pic (info))
    834     return r_type;
    835 
    836   if (! (sec->flags & SEC_CODE))
    837     return r_type;
    838 
    839   if (! counting && h != NULL && ! elf_hash_table (info)->dynamic_sections_created)
    840     is_local = TRUE;
    841   else
    842     is_local = SYMBOL_CALLS_LOCAL (info, h);
    843 
    844   /* For the main program, these are the transitions we do.  */
    845   switch (r_type)
    846     {
    847     case R_MN10300_TLS_GD: return is_local ? R_MN10300_TLS_LE : R_MN10300_TLS_GOTIE;
    848     case R_MN10300_TLS_LD: return R_MN10300_NONE;
    849     case R_MN10300_TLS_LDO: return R_MN10300_TLS_LE;
    850     case R_MN10300_TLS_IE:
    851     case R_MN10300_TLS_GOTIE: return is_local ? R_MN10300_TLS_LE : r_type;
    852     }
    853 
    854   return r_type;
    855 }
    856 
    857 /* Return the relocation value for @tpoff relocation
    858    if STT_TLS virtual address is ADDRESS.  */
    859 
    860 static bfd_vma
    861 dtpoff (struct bfd_link_info * info, bfd_vma address)
    862 {
    863   struct elf_link_hash_table *htab = elf_hash_table (info);
    864 
    865   /* If tls_sec is NULL, we should have signalled an error already.  */
    866   if (htab->tls_sec == NULL)
    867     return 0;
    868   return address - htab->tls_sec->vma;
    869 }
    870 
    871 /* Return the relocation value for @tpoff relocation
    872    if STT_TLS virtual address is ADDRESS.  */
    873 
    874 static bfd_vma
    875 tpoff (struct bfd_link_info * info, bfd_vma address)
    876 {
    877   struct elf_link_hash_table *htab = elf_hash_table (info);
    878 
    879   /* If tls_sec is NULL, we should have signalled an error already.  */
    880   if (htab->tls_sec == NULL)
    881     return 0;
    882   return address - (htab->tls_size + htab->tls_sec->vma);
    883 }
    884 
    885 /* Returns nonzero if there's a R_MN10300_PLT32 reloc that we now need
    886    to skip, after this one.  The actual value is the offset between
    887    this reloc and the PLT reloc.  */
    888 
    889 static int
    890 mn10300_do_tls_transition (bfd *         input_bfd,
    891 			   unsigned int  r_type,
    892 			   unsigned int  tls_r_type,
    893 			   bfd_byte *    contents,
    894 			   bfd_vma       offset)
    895 {
    896   bfd_byte *op = contents + offset;
    897   int gotreg = 0;
    898 
    899 #define TLS_PAIR(r1,r2) ((r1) * R_MN10300_MAX + (r2))
    900 
    901   /* This is common to all GD/LD transitions, so break it out.  */
    902   if (r_type == R_MN10300_TLS_GD
    903       || r_type == R_MN10300_TLS_LD)
    904     {
    905       op -= 2;
    906       /* mov imm,d0.  */
    907       BFD_ASSERT (bfd_get_8 (input_bfd, op) == 0xFC);
    908       BFD_ASSERT (bfd_get_8 (input_bfd, op + 1) == 0xCC);
    909       /* add aN,d0.  */
    910       BFD_ASSERT (bfd_get_8 (input_bfd, op + 6) == 0xF1);
    911       gotreg = (bfd_get_8 (input_bfd, op + 7) & 0x0c) >> 2;
    912       /* Call.  */
    913       BFD_ASSERT (bfd_get_8 (input_bfd, op + 8) == 0xDD);
    914     }
    915 
    916   switch (TLS_PAIR (r_type, tls_r_type))
    917     {
    918     case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_GOTIE):
    919       {
    920 	/* Keep track of which register we put GOTptr in.  */
    921 	/* mov (_x@indntpoff,a2),a0.  */
    922 	memcpy (op, "\xFC\x20\x00\x00\x00\x00", 6);
    923 	op[1] |= gotreg;
    924 	/* add e2,a0.  */
    925 	memcpy (op+6, "\xF9\x78\x28", 3);
    926 	/* or  0x00000000, d0 - six byte nop.  */
    927 	memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
    928       }
    929       return 7;
    930 
    931     case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_LE):
    932       {
    933 	/* Register is *always* a0.  */
    934 	/* mov _x@tpoff,a0.  */
    935 	memcpy (op, "\xFC\xDC\x00\x00\x00\x00", 6);
    936 	/* add e2,a0.  */
    937 	memcpy (op+6, "\xF9\x78\x28", 3);
    938 	/* or  0x00000000, d0 - six byte nop.  */
    939 	memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
    940       }
    941       return 7;
    942     case TLS_PAIR (R_MN10300_TLS_LD, R_MN10300_NONE):
    943       {
    944 	/* Register is *always* a0.  */
    945 	/* mov e2,a0.  */
    946 	memcpy (op, "\xF5\x88", 2);
    947 	/* or  0x00000000, d0 - six byte nop.  */
    948 	memcpy (op+2, "\xFC\xE4\x00\x00\x00\x00", 6);
    949 	/* or  0x00000000, e2 - seven byte nop.  */
    950 	memcpy (op+8, "\xFE\x19\x22\x00\x00\x00\x00", 7);
    951       }
    952       return 7;
    953 
    954     case TLS_PAIR (R_MN10300_TLS_LDO, R_MN10300_TLS_LE):
    955       /* No changes needed, just the reloc change.  */
    956       return 0;
    957 
    958     /*  These are a little tricky, because we have to detect which
    959 	opcode is being used (they're different sizes, with the reloc
    960 	at different offsets within the opcode) and convert each
    961 	accordingly, copying the operands as needed.  The conversions
    962 	we do are as follows (IE,GOTIE,LE):
    963 
    964 	           1111 1100  1010 01Dn  [-- abs32 --]  MOV (x@indntpoff),Dn
    965 	           1111 1100  0000 DnAm  [-- abs32 --]  MOV (x@gotntpoff,Am),Dn
    966 	           1111 1100  1100 11Dn  [-- abs32 --]  MOV x@tpoff,Dn
    967 
    968 	           1111 1100  1010 00An  [-- abs32 --]  MOV (x@indntpoff),An
    969 	           1111 1100  0010 AnAm  [-- abs32 --]  MOV (x@gotntpoff,Am),An
    970 	           1111 1100  1101 11An  [-- abs32 --]  MOV x@tpoff,An
    971 
    972 	1111 1110  0000 1110  Rnnn Xxxx  [-- abs32 --]  MOV (x@indntpoff),Rn
    973 	1111 1110  0000 1010  Rnnn Rmmm  [-- abs32 --]  MOV (x@indntpoff,Rm),Rn
    974 	1111 1110  0000 1000  Rnnn Xxxx  [-- abs32 --]  MOV x@tpoff,Rn
    975 
    976 	Since the GOT pointer is always $a2, we assume the last
    977 	normally won't happen, but let's be paranoid and plan for the
    978 	day that GCC optimizes it somewhow.  */
    979 
    980     case TLS_PAIR (R_MN10300_TLS_IE, R_MN10300_TLS_LE):
    981       if (op[-2] == 0xFC)
    982 	{
    983 	  op -= 2;
    984 	  if ((op[1] & 0xFC) == 0xA4) /* Dn */
    985 	    {
    986 	      op[1] &= 0x03; /* Leaves Dn.  */
    987 	      op[1] |= 0xCC;
    988 	    }
    989 	  else /* An */
    990 	    {
    991 	      op[1] &= 0x03; /* Leaves An. */
    992 	      op[1] |= 0xDC;
    993 	    }
    994 	}
    995       else if (op[-3] == 0xFE)
    996 	op[-2] = 0x08;
    997       else
    998 	abort ();
    999       break;
   1000 
   1001     case TLS_PAIR (R_MN10300_TLS_GOTIE, R_MN10300_TLS_LE):
   1002       if (op[-2] == 0xFC)
   1003 	{
   1004 	  op -= 2;
   1005 	  if ((op[1] & 0xF0) == 0x00) /* Dn */
   1006 	    {
   1007 	      op[1] &= 0x0C; /* Leaves Dn.  */
   1008 	      op[1] >>= 2;
   1009 	      op[1] |= 0xCC;
   1010 	    }
   1011 	  else /* An */
   1012 	    {
   1013 	      op[1] &= 0x0C; /* Leaves An.  */
   1014 	      op[1] >>= 2;
   1015 	      op[1] |= 0xDC;
   1016 	    }
   1017 	}
   1018       else if (op[-3] == 0xFE)
   1019 	op[-2] = 0x08;
   1020       else
   1021 	abort ();
   1022       break;
   1023 
   1024     default:
   1025       (*_bfd_error_handler)
   1026 	(_("%s: Unsupported transition from %s to %s"),
   1027 	 bfd_get_filename (input_bfd),
   1028 	 elf_mn10300_howto_table[r_type].name,
   1029 	 elf_mn10300_howto_table[tls_r_type].name);
   1030       break;
   1031     }
   1032 #undef TLS_PAIR
   1033   return 0;
   1034 }
   1035 
   1036 /* Look through the relocs for a section during the first phase.
   1037    Since we don't do .gots or .plts, we just need to consider the
   1038    virtual table relocs for gc.  */
   1039 
   1040 static bfd_boolean
   1041 mn10300_elf_check_relocs (bfd *abfd,
   1042 			  struct bfd_link_info *info,
   1043 			  asection *sec,
   1044 			  const Elf_Internal_Rela *relocs)
   1045 {
   1046   struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
   1047   bfd_boolean sym_diff_reloc_seen;
   1048   Elf_Internal_Shdr *symtab_hdr;
   1049   Elf_Internal_Sym * isymbuf = NULL;
   1050   struct elf_link_hash_entry **sym_hashes;
   1051   const Elf_Internal_Rela *rel;
   1052   const Elf_Internal_Rela *rel_end;
   1053   bfd *      dynobj;
   1054   bfd_vma *  local_got_offsets;
   1055   asection * sgot;
   1056   asection * srelgot;
   1057   asection * sreloc;
   1058   bfd_boolean result = FALSE;
   1059 
   1060   sgot    = NULL;
   1061   srelgot = NULL;
   1062   sreloc  = NULL;
   1063 
   1064   if (bfd_link_relocatable (info))
   1065     return TRUE;
   1066 
   1067   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   1068   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   1069   sym_hashes = elf_sym_hashes (abfd);
   1070 
   1071   dynobj = elf_hash_table (info)->dynobj;
   1072   local_got_offsets = elf_local_got_offsets (abfd);
   1073   rel_end = relocs + sec->reloc_count;
   1074   sym_diff_reloc_seen = FALSE;
   1075 
   1076   for (rel = relocs; rel < rel_end; rel++)
   1077     {
   1078       struct elf_link_hash_entry *h;
   1079       unsigned long r_symndx;
   1080       unsigned int r_type;
   1081       int tls_type = GOT_NORMAL;
   1082 
   1083       r_symndx = ELF32_R_SYM (rel->r_info);
   1084       if (r_symndx < symtab_hdr->sh_info)
   1085 	h = NULL;
   1086       else
   1087 	{
   1088 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   1089 	  while (h->root.type == bfd_link_hash_indirect
   1090 		 || h->root.type == bfd_link_hash_warning)
   1091 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   1092 
   1093 	  /* PR15323, ref flags aren't set for references in the same
   1094 	     object.  */
   1095 	  h->root.non_ir_ref = 1;
   1096 	}
   1097 
   1098       r_type = ELF32_R_TYPE (rel->r_info);
   1099       r_type = elf_mn10300_tls_transition (info, r_type, h, sec, TRUE);
   1100 
   1101       /* Some relocs require a global offset table.  */
   1102       if (dynobj == NULL)
   1103 	{
   1104 	  switch (r_type)
   1105 	    {
   1106 	    case R_MN10300_GOT32:
   1107 	    case R_MN10300_GOT24:
   1108 	    case R_MN10300_GOT16:
   1109 	    case R_MN10300_GOTOFF32:
   1110 	    case R_MN10300_GOTOFF24:
   1111 	    case R_MN10300_GOTOFF16:
   1112 	    case R_MN10300_GOTPC32:
   1113 	    case R_MN10300_GOTPC16:
   1114 	    case R_MN10300_TLS_GD:
   1115 	    case R_MN10300_TLS_LD:
   1116 	    case R_MN10300_TLS_GOTIE:
   1117 	    case R_MN10300_TLS_IE:
   1118 	      elf_hash_table (info)->dynobj = dynobj = abfd;
   1119 	      if (! _bfd_mn10300_elf_create_got_section (dynobj, info))
   1120 		goto fail;
   1121 	      break;
   1122 
   1123 	    default:
   1124 	      break;
   1125 	    }
   1126 	}
   1127 
   1128       switch (r_type)
   1129 	{
   1130 	/* This relocation describes the C++ object vtable hierarchy.
   1131 	   Reconstruct it for later use during GC.  */
   1132 	case R_MN10300_GNU_VTINHERIT:
   1133 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
   1134 	    goto fail;
   1135 	  break;
   1136 
   1137 	/* This relocation describes which C++ vtable entries are actually
   1138 	   used.  Record for later use during GC.  */
   1139 	case R_MN10300_GNU_VTENTRY:
   1140 	  BFD_ASSERT (h != NULL);
   1141 	  if (h != NULL
   1142 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
   1143 	    goto fail;
   1144 	  break;
   1145 
   1146 	case R_MN10300_TLS_LD:
   1147 	  htab->tls_ldm_got.refcount ++;
   1148 	  tls_type = GOT_TLS_LD;
   1149 
   1150 	  if (htab->tls_ldm_got.got_allocated)
   1151 	    break;
   1152 	  goto create_got;
   1153 
   1154 	case R_MN10300_TLS_IE:
   1155 	case R_MN10300_TLS_GOTIE:
   1156 	  if (bfd_link_pic (info))
   1157 	    info->flags |= DF_STATIC_TLS;
   1158 	  /* Fall through */
   1159 
   1160 	case R_MN10300_TLS_GD:
   1161 	case R_MN10300_GOT32:
   1162 	case R_MN10300_GOT24:
   1163 	case R_MN10300_GOT16:
   1164 	create_got:
   1165 	  /* This symbol requires a global offset table entry.  */
   1166 
   1167 	  switch (r_type)
   1168 	    {
   1169 	    case R_MN10300_TLS_IE:
   1170 	    case R_MN10300_TLS_GOTIE: tls_type = GOT_TLS_IE; break;
   1171 	    case R_MN10300_TLS_GD:    tls_type = GOT_TLS_GD; break;
   1172 	    default:                  tls_type = GOT_NORMAL; break;
   1173 	    }
   1174 
   1175 	  if (sgot == NULL)
   1176 	    {
   1177 	      sgot = htab->root.sgot;
   1178 	      BFD_ASSERT (sgot != NULL);
   1179 	    }
   1180 
   1181 	  if (srelgot == NULL
   1182 	      && (h != NULL || bfd_link_pic (info)))
   1183 	    {
   1184 	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   1185 	      if (srelgot == NULL)
   1186 		{
   1187 		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
   1188 				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
   1189 				    | SEC_READONLY);
   1190 		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
   1191 								".rela.got",
   1192 								flags);
   1193 		  if (srelgot == NULL
   1194 		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
   1195 		    goto fail;
   1196 		}
   1197 	    }
   1198 
   1199 	  if (r_type == R_MN10300_TLS_LD)
   1200 	    {
   1201 	      htab->tls_ldm_got.offset = sgot->size;
   1202 	      htab->tls_ldm_got.got_allocated ++;
   1203 	    }
   1204 	  else if (h != NULL)
   1205 	    {
   1206 	      if (elf_mn10300_hash_entry (h)->tls_type != tls_type
   1207 		  && elf_mn10300_hash_entry (h)->tls_type != GOT_UNKNOWN)
   1208 		{
   1209 		  if (tls_type == GOT_TLS_IE
   1210 		      && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_GD)
   1211 		    /* No change - this is ok.  */;
   1212 		  else if (tls_type == GOT_TLS_GD
   1213 		      && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
   1214 		    /* Transition GD->IE.  */
   1215 		    tls_type = GOT_TLS_IE;
   1216 		  else
   1217 		    (*_bfd_error_handler)
   1218 		      (_("%B: %s' accessed both as normal and thread local symbol"),
   1219 		       abfd, h ? h->root.root.string : "<local>");
   1220 		}
   1221 
   1222 	      elf_mn10300_hash_entry (h)->tls_type = tls_type;
   1223 
   1224 	      if (h->got.offset != (bfd_vma) -1)
   1225 		/* We have already allocated space in the .got.  */
   1226 		break;
   1227 
   1228 	      h->got.offset = sgot->size;
   1229 
   1230 	      if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
   1231 		  /* Make sure this symbol is output as a dynamic symbol.  */
   1232 		  && h->dynindx == -1)
   1233 		{
   1234 		  if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1235 		    goto fail;
   1236 		}
   1237 
   1238 	      srelgot->size += sizeof (Elf32_External_Rela);
   1239 	      if (r_type == R_MN10300_TLS_GD)
   1240 		srelgot->size += sizeof (Elf32_External_Rela);
   1241 	    }
   1242 	  else
   1243 	    {
   1244 	      /* This is a global offset table entry for a local
   1245 		 symbol.  */
   1246 	      if (local_got_offsets == NULL)
   1247 		{
   1248 		  size_t       size;
   1249 		  unsigned int i;
   1250 
   1251 		  size = symtab_hdr->sh_info * (sizeof (bfd_vma) + sizeof (char));
   1252 		  local_got_offsets = bfd_alloc (abfd, size);
   1253 
   1254 		  if (local_got_offsets == NULL)
   1255 		    goto fail;
   1256 
   1257 		  elf_local_got_offsets (abfd) = local_got_offsets;
   1258 		  elf_mn10300_local_got_tls_type (abfd)
   1259 		      = (char *) (local_got_offsets + symtab_hdr->sh_info);
   1260 
   1261 		  for (i = 0; i < symtab_hdr->sh_info; i++)
   1262 		    local_got_offsets[i] = (bfd_vma) -1;
   1263 		}
   1264 
   1265 	      if (local_got_offsets[r_symndx] != (bfd_vma) -1)
   1266 		/* We have already allocated space in the .got.  */
   1267 		break;
   1268 
   1269 	      local_got_offsets[r_symndx] = sgot->size;
   1270 
   1271 	      if (bfd_link_pic (info))
   1272 		{
   1273 		  /* If we are generating a shared object, we need to
   1274 		     output a R_MN10300_RELATIVE reloc so that the dynamic
   1275 		     linker can adjust this GOT entry.  */
   1276 		  srelgot->size += sizeof (Elf32_External_Rela);
   1277 
   1278 		  if (r_type == R_MN10300_TLS_GD)
   1279 		    /* And a R_MN10300_TLS_DTPOFF reloc as well.  */
   1280 		    srelgot->size += sizeof (Elf32_External_Rela);
   1281 		}
   1282 
   1283 	      elf_mn10300_local_got_tls_type (abfd) [r_symndx] = tls_type;
   1284 	    }
   1285 
   1286 	  sgot->size += 4;
   1287 	  if (r_type == R_MN10300_TLS_GD
   1288 	      || r_type == R_MN10300_TLS_LD)
   1289 	    sgot->size += 4;
   1290 
   1291 	  goto need_shared_relocs;
   1292 
   1293 	case R_MN10300_PLT32:
   1294 	case R_MN10300_PLT16:
   1295 	  /* This symbol requires a procedure linkage table entry.  We
   1296 	     actually build the entry in adjust_dynamic_symbol,
   1297 	     because this might be a case of linking PIC code which is
   1298 	     never referenced by a dynamic object, in which case we
   1299 	     don't need to generate a procedure linkage table entry
   1300 	     after all.  */
   1301 
   1302 	  /* If this is a local symbol, we resolve it directly without
   1303 	     creating a procedure linkage table entry.  */
   1304 	  if (h == NULL)
   1305 	    continue;
   1306 
   1307 	  if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
   1308 	      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
   1309 	    break;
   1310 
   1311 	  h->needs_plt = 1;
   1312 	  break;
   1313 
   1314 	case R_MN10300_24:
   1315 	case R_MN10300_16:
   1316 	case R_MN10300_8:
   1317 	case R_MN10300_PCREL32:
   1318 	case R_MN10300_PCREL16:
   1319 	case R_MN10300_PCREL8:
   1320 	  if (h != NULL)
   1321 	    h->non_got_ref = 1;
   1322 	  break;
   1323 
   1324 	case R_MN10300_SYM_DIFF:
   1325 	  sym_diff_reloc_seen = TRUE;
   1326 	  break;
   1327 
   1328 	case R_MN10300_32:
   1329 	  if (h != NULL)
   1330 	    h->non_got_ref = 1;
   1331 
   1332 	need_shared_relocs:
   1333 	  /* If we are creating a shared library, then we
   1334 	     need to copy the reloc into the shared library.  */
   1335 	  if (bfd_link_pic (info)
   1336 	      && (sec->flags & SEC_ALLOC) != 0
   1337 	      /* Do not generate a dynamic reloc for a
   1338 		 reloc associated with a SYM_DIFF operation.  */
   1339 	      && ! sym_diff_reloc_seen)
   1340 	    {
   1341 	      asection * sym_section = NULL;
   1342 
   1343 	      /* Find the section containing the
   1344 		 symbol involved in the relocation.  */
   1345 	      if (h == NULL)
   1346 		{
   1347 		  Elf_Internal_Sym * isym;
   1348 
   1349 		  if (isymbuf == NULL)
   1350 		    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
   1351 						    symtab_hdr->sh_info, 0,
   1352 						    NULL, NULL, NULL);
   1353 		  if (isymbuf)
   1354 		    {
   1355 		      isym = isymbuf + r_symndx;
   1356 		      /* All we care about is whether this local symbol is absolute.  */
   1357 		      if (isym->st_shndx == SHN_ABS)
   1358 			sym_section = bfd_abs_section_ptr;
   1359 		    }
   1360 		}
   1361 	      else
   1362 		{
   1363 		  if (h->root.type == bfd_link_hash_defined
   1364 		      || h->root.type == bfd_link_hash_defweak)
   1365 		    sym_section = h->root.u.def.section;
   1366 		}
   1367 
   1368 	      /* If the symbol is absolute then the relocation can
   1369 		 be resolved during linking and there is no need for
   1370 		 a dynamic reloc.  */
   1371 	      if (sym_section != bfd_abs_section_ptr)
   1372 		{
   1373 		  /* When creating a shared object, we must copy these
   1374 		     reloc types into the output file.  We create a reloc
   1375 		     section in dynobj and make room for this reloc.  */
   1376 		  if (sreloc == NULL)
   1377 		    {
   1378 		      sreloc = _bfd_elf_make_dynamic_reloc_section
   1379 			(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
   1380 		      if (sreloc == NULL)
   1381 			goto fail;
   1382 		    }
   1383 
   1384 		  sreloc->size += sizeof (Elf32_External_Rela);
   1385 		}
   1386 	    }
   1387 
   1388 	  break;
   1389 	}
   1390 
   1391       if (ELF32_R_TYPE (rel->r_info) != R_MN10300_SYM_DIFF)
   1392 	sym_diff_reloc_seen = FALSE;
   1393     }
   1394 
   1395   result = TRUE;
   1396  fail:
   1397   if (isymbuf != NULL)
   1398     free (isymbuf);
   1399 
   1400   return result;
   1401 }
   1402 
   1403 /* Return the section that should be marked against GC for a given
   1404    relocation.  */
   1405 
   1406 static asection *
   1407 mn10300_elf_gc_mark_hook (asection *sec,
   1408 			  struct bfd_link_info *info,
   1409 			  Elf_Internal_Rela *rel,
   1410 			  struct elf_link_hash_entry *h,
   1411 			  Elf_Internal_Sym *sym)
   1412 {
   1413   if (h != NULL)
   1414     switch (ELF32_R_TYPE (rel->r_info))
   1415       {
   1416       case R_MN10300_GNU_VTINHERIT:
   1417       case R_MN10300_GNU_VTENTRY:
   1418 	return NULL;
   1419       }
   1420 
   1421   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
   1422 }
   1423 
   1424 /* Perform a relocation as part of a final link.  */
   1425 
   1426 static bfd_reloc_status_type
   1427 mn10300_elf_final_link_relocate (reloc_howto_type *howto,
   1428 				 bfd *input_bfd,
   1429 				 bfd *output_bfd ATTRIBUTE_UNUSED,
   1430 				 asection *input_section,
   1431 				 bfd_byte *contents,
   1432 				 bfd_vma offset,
   1433 				 bfd_vma value,
   1434 				 bfd_vma addend,
   1435 				 struct elf_link_hash_entry * h,
   1436 				 unsigned long symndx,
   1437 				 struct bfd_link_info *info,
   1438 				 asection *sym_sec ATTRIBUTE_UNUSED,
   1439 				 int is_local ATTRIBUTE_UNUSED)
   1440 {
   1441   struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
   1442   static asection *  sym_diff_section;
   1443   static bfd_vma     sym_diff_value;
   1444   bfd_boolean is_sym_diff_reloc;
   1445   unsigned long r_type = howto->type;
   1446   bfd_byte * hit_data = contents + offset;
   1447   bfd *      dynobj;
   1448   asection * sgot;
   1449   asection * splt;
   1450   asection * sreloc;
   1451 
   1452   dynobj = elf_hash_table (info)->dynobj;
   1453   sgot   = NULL;
   1454   splt   = NULL;
   1455   sreloc = NULL;
   1456 
   1457   switch (r_type)
   1458     {
   1459     case R_MN10300_24:
   1460     case R_MN10300_16:
   1461     case R_MN10300_8:
   1462     case R_MN10300_PCREL8:
   1463     case R_MN10300_PCREL16:
   1464     case R_MN10300_PCREL32:
   1465     case R_MN10300_GOTOFF32:
   1466     case R_MN10300_GOTOFF24:
   1467     case R_MN10300_GOTOFF16:
   1468       if (bfd_link_pic (info)
   1469 	  && (input_section->flags & SEC_ALLOC) != 0
   1470 	  && h != NULL
   1471 	  && ! SYMBOL_REFERENCES_LOCAL (info, h))
   1472 	return bfd_reloc_dangerous;
   1473     case R_MN10300_GOT32:
   1474       /* Issue 2052223:
   1475 	 Taking the address of a protected function in a shared library
   1476 	 is illegal.  Issue an error message here.  */
   1477       if (bfd_link_pic (info)
   1478 	  && (input_section->flags & SEC_ALLOC) != 0
   1479 	  && h != NULL
   1480 	  && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
   1481 	  && (h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
   1482 	  && ! SYMBOL_REFERENCES_LOCAL (info, h))
   1483 	return bfd_reloc_dangerous;
   1484     }
   1485 
   1486   is_sym_diff_reloc = FALSE;
   1487   if (sym_diff_section != NULL)
   1488     {
   1489       BFD_ASSERT (sym_diff_section == input_section);
   1490 
   1491       switch (r_type)
   1492 	{
   1493 	case R_MN10300_32:
   1494 	case R_MN10300_24:
   1495 	case R_MN10300_16:
   1496 	case R_MN10300_8:
   1497 	  value -= sym_diff_value;
   1498 	  /* If we are computing a 32-bit value for the location lists
   1499 	     and the result is 0 then we add one to the value.  A zero
   1500 	     value can result because of linker relaxation deleteing
   1501 	     prologue instructions and using a value of 1 (for the begin
   1502 	     and end offsets in the location list entry) results in a
   1503 	     nul entry which does not prevent the following entries from
   1504 	     being parsed.  */
   1505 	  if (r_type == R_MN10300_32
   1506 	      && value == 0
   1507 	      && strcmp (input_section->name, ".debug_loc") == 0)
   1508 	    value = 1;
   1509 	  sym_diff_section = NULL;
   1510 	  is_sym_diff_reloc = TRUE;
   1511 	  break;
   1512 
   1513 	default:
   1514 	  sym_diff_section = NULL;
   1515 	  break;
   1516 	}
   1517     }
   1518 
   1519   switch (r_type)
   1520     {
   1521     case R_MN10300_SYM_DIFF:
   1522       BFD_ASSERT (addend == 0);
   1523       /* Cache the input section and value.
   1524 	 The offset is unreliable, since relaxation may
   1525 	 have reduced the following reloc's offset.  */
   1526       sym_diff_section = input_section;
   1527       sym_diff_value = value;
   1528       return bfd_reloc_ok;
   1529 
   1530     case R_MN10300_ALIGN:
   1531     case R_MN10300_NONE:
   1532       return bfd_reloc_ok;
   1533 
   1534     case R_MN10300_32:
   1535       if (bfd_link_pic (info)
   1536 	  /* Do not generate relocs when an R_MN10300_32 has been used
   1537 	     with an R_MN10300_SYM_DIFF to compute a difference of two
   1538 	     symbols.  */
   1539 	  && is_sym_diff_reloc == FALSE
   1540 	  /* Also, do not generate a reloc when the symbol associated
   1541 	     with the R_MN10300_32 reloc is absolute - there is no
   1542 	     need for a run time computation in this case.  */
   1543 	  && sym_sec != bfd_abs_section_ptr
   1544 	  /* If the section is not going to be allocated at load time
   1545 	     then there is no need to generate relocs for it.  */
   1546 	  && (input_section->flags & SEC_ALLOC) != 0)
   1547 	{
   1548 	  Elf_Internal_Rela outrel;
   1549 	  bfd_boolean skip, relocate;
   1550 
   1551 	  /* When generating a shared object, these relocations are
   1552 	     copied into the output file to be resolved at run
   1553 	     time.  */
   1554 	  if (sreloc == NULL)
   1555 	    {
   1556 	      sreloc = _bfd_elf_get_dynamic_reloc_section
   1557 		(input_bfd, input_section, /*rela?*/ TRUE);
   1558 	      if (sreloc == NULL)
   1559 		return FALSE;
   1560 	    }
   1561 
   1562 	  skip = FALSE;
   1563 
   1564 	  outrel.r_offset = _bfd_elf_section_offset (input_bfd, info,
   1565 						     input_section, offset);
   1566 	  if (outrel.r_offset == (bfd_vma) -1)
   1567 	    skip = TRUE;
   1568 
   1569 	  outrel.r_offset += (input_section->output_section->vma
   1570 			      + input_section->output_offset);
   1571 
   1572 	  if (skip)
   1573 	    {
   1574 	      memset (&outrel, 0, sizeof outrel);
   1575 	      relocate = FALSE;
   1576 	    }
   1577 	  else
   1578 	    {
   1579 	      /* h->dynindx may be -1 if this symbol was marked to
   1580 		 become local.  */
   1581 	      if (h == NULL
   1582 		  || SYMBOL_REFERENCES_LOCAL (info, h))
   1583 		{
   1584 		  relocate = TRUE;
   1585 		  outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
   1586 		  outrel.r_addend = value + addend;
   1587 		}
   1588 	      else
   1589 		{
   1590 		  BFD_ASSERT (h->dynindx != -1);
   1591 		  relocate = FALSE;
   1592 		  outrel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_32);
   1593 		  outrel.r_addend = value + addend;
   1594 		}
   1595 	    }
   1596 
   1597 	  bfd_elf32_swap_reloca_out (output_bfd, &outrel,
   1598 				     (bfd_byte *) (((Elf32_External_Rela *) sreloc->contents)
   1599 						   + sreloc->reloc_count));
   1600 	  ++sreloc->reloc_count;
   1601 
   1602 	  /* If this reloc is against an external symbol, we do
   1603 	     not want to fiddle with the addend.  Otherwise, we
   1604 	     need to include the symbol value so that it becomes
   1605 	     an addend for the dynamic reloc.  */
   1606 	  if (! relocate)
   1607 	    return bfd_reloc_ok;
   1608 	}
   1609       value += addend;
   1610       bfd_put_32 (input_bfd, value, hit_data);
   1611       return bfd_reloc_ok;
   1612 
   1613     case R_MN10300_24:
   1614       value += addend;
   1615 
   1616       if ((long) value > 0x7fffff || (long) value < -0x800000)
   1617 	return bfd_reloc_overflow;
   1618 
   1619       bfd_put_8 (input_bfd, value & 0xff, hit_data);
   1620       bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
   1621       bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
   1622       return bfd_reloc_ok;
   1623 
   1624     case R_MN10300_16:
   1625       value += addend;
   1626 
   1627       if ((long) value > 0x7fff || (long) value < -0x8000)
   1628 	return bfd_reloc_overflow;
   1629 
   1630       bfd_put_16 (input_bfd, value, hit_data);
   1631       return bfd_reloc_ok;
   1632 
   1633     case R_MN10300_8:
   1634       value += addend;
   1635 
   1636       if ((long) value > 0x7f || (long) value < -0x80)
   1637 	return bfd_reloc_overflow;
   1638 
   1639       bfd_put_8 (input_bfd, value, hit_data);
   1640       return bfd_reloc_ok;
   1641 
   1642     case R_MN10300_PCREL8:
   1643       value -= (input_section->output_section->vma
   1644 		+ input_section->output_offset);
   1645       value -= offset;
   1646       value += addend;
   1647 
   1648       if ((long) value > 0x7f || (long) value < -0x80)
   1649 	return bfd_reloc_overflow;
   1650 
   1651       bfd_put_8 (input_bfd, value, hit_data);
   1652       return bfd_reloc_ok;
   1653 
   1654     case R_MN10300_PCREL16:
   1655       value -= (input_section->output_section->vma
   1656 		+ input_section->output_offset);
   1657       value -= offset;
   1658       value += addend;
   1659 
   1660       if ((long) value > 0x7fff || (long) value < -0x8000)
   1661 	return bfd_reloc_overflow;
   1662 
   1663       bfd_put_16 (input_bfd, value, hit_data);
   1664       return bfd_reloc_ok;
   1665 
   1666     case R_MN10300_PCREL32:
   1667       value -= (input_section->output_section->vma
   1668 		+ input_section->output_offset);
   1669       value -= offset;
   1670       value += addend;
   1671 
   1672       bfd_put_32 (input_bfd, value, hit_data);
   1673       return bfd_reloc_ok;
   1674 
   1675     case R_MN10300_GNU_VTINHERIT:
   1676     case R_MN10300_GNU_VTENTRY:
   1677       return bfd_reloc_ok;
   1678 
   1679     case R_MN10300_GOTPC32:
   1680       if (dynobj == NULL)
   1681 	return bfd_reloc_dangerous;
   1682 
   1683       /* Use global offset table as symbol value.  */
   1684       value = htab->root.sgot->output_section->vma;
   1685       value -= (input_section->output_section->vma
   1686 		+ input_section->output_offset);
   1687       value -= offset;
   1688       value += addend;
   1689 
   1690       bfd_put_32 (input_bfd, value, hit_data);
   1691       return bfd_reloc_ok;
   1692 
   1693     case R_MN10300_GOTPC16:
   1694       if (dynobj == NULL)
   1695 	return bfd_reloc_dangerous;
   1696 
   1697       /* Use global offset table as symbol value.  */
   1698       value = htab->root.sgot->output_section->vma;
   1699       value -= (input_section->output_section->vma
   1700 		+ input_section->output_offset);
   1701       value -= offset;
   1702       value += addend;
   1703 
   1704       if ((long) value > 0x7fff || (long) value < -0x8000)
   1705 	return bfd_reloc_overflow;
   1706 
   1707       bfd_put_16 (input_bfd, value, hit_data);
   1708       return bfd_reloc_ok;
   1709 
   1710     case R_MN10300_GOTOFF32:
   1711       if (dynobj == NULL)
   1712 	return bfd_reloc_dangerous;
   1713 
   1714       value -= htab->root.sgot->output_section->vma;
   1715       value += addend;
   1716 
   1717       bfd_put_32 (input_bfd, value, hit_data);
   1718       return bfd_reloc_ok;
   1719 
   1720     case R_MN10300_GOTOFF24:
   1721       if (dynobj == NULL)
   1722 	return bfd_reloc_dangerous;
   1723 
   1724       value -= htab->root.sgot->output_section->vma;
   1725       value += addend;
   1726 
   1727       if ((long) value > 0x7fffff || (long) value < -0x800000)
   1728 	return bfd_reloc_overflow;
   1729 
   1730       bfd_put_8 (input_bfd, value, hit_data);
   1731       bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
   1732       bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
   1733       return bfd_reloc_ok;
   1734 
   1735     case R_MN10300_GOTOFF16:
   1736       if (dynobj == NULL)
   1737 	return bfd_reloc_dangerous;
   1738 
   1739       value -= htab->root.sgot->output_section->vma;
   1740       value += addend;
   1741 
   1742       if ((long) value > 0x7fff || (long) value < -0x8000)
   1743 	return bfd_reloc_overflow;
   1744 
   1745       bfd_put_16 (input_bfd, value, hit_data);
   1746       return bfd_reloc_ok;
   1747 
   1748     case R_MN10300_PLT32:
   1749       if (h != NULL
   1750 	  && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
   1751 	  && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
   1752 	  && h->plt.offset != (bfd_vma) -1)
   1753 	{
   1754 	  if (dynobj == NULL)
   1755 	    return bfd_reloc_dangerous;
   1756 
   1757 	  splt = htab->root.splt;
   1758 	  value = (splt->output_section->vma
   1759 		   + splt->output_offset
   1760 		   + h->plt.offset) - value;
   1761 	}
   1762 
   1763       value -= (input_section->output_section->vma
   1764 		+ input_section->output_offset);
   1765       value -= offset;
   1766       value += addend;
   1767 
   1768       bfd_put_32 (input_bfd, value, hit_data);
   1769       return bfd_reloc_ok;
   1770 
   1771     case R_MN10300_PLT16:
   1772       if (h != NULL
   1773 	  && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
   1774 	  && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
   1775 	  && h->plt.offset != (bfd_vma) -1)
   1776 	{
   1777 	  if (dynobj == NULL)
   1778 	    return bfd_reloc_dangerous;
   1779 
   1780 	  splt = htab->root.splt;
   1781 	  value = (splt->output_section->vma
   1782 		   + splt->output_offset
   1783 		   + h->plt.offset) - value;
   1784 	}
   1785 
   1786       value -= (input_section->output_section->vma
   1787 		+ input_section->output_offset);
   1788       value -= offset;
   1789       value += addend;
   1790 
   1791       if ((long) value > 0x7fff || (long) value < -0x8000)
   1792 	return bfd_reloc_overflow;
   1793 
   1794       bfd_put_16 (input_bfd, value, hit_data);
   1795       return bfd_reloc_ok;
   1796 
   1797     case R_MN10300_TLS_LDO:
   1798       value = dtpoff (info, value);
   1799       bfd_put_32 (input_bfd, value + addend, hit_data);
   1800       return bfd_reloc_ok;
   1801 
   1802     case R_MN10300_TLS_LE:
   1803       value = tpoff (info, value);
   1804       bfd_put_32 (input_bfd, value + addend, hit_data);
   1805       return bfd_reloc_ok;
   1806 
   1807     case R_MN10300_TLS_LD:
   1808       if (dynobj == NULL)
   1809 	return bfd_reloc_dangerous;
   1810 
   1811       sgot = htab->root.sgot;
   1812       BFD_ASSERT (sgot != NULL);
   1813       value = htab->tls_ldm_got.offset + sgot->output_offset;
   1814       bfd_put_32 (input_bfd, value, hit_data);
   1815 
   1816       if (!htab->tls_ldm_got.rel_emitted)
   1817 	{
   1818 	  asection * srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   1819 	  Elf_Internal_Rela rel;
   1820 
   1821 	  BFD_ASSERT (srelgot != NULL);
   1822 	  htab->tls_ldm_got.rel_emitted ++;
   1823 	  rel.r_offset = (sgot->output_section->vma
   1824 			  + sgot->output_offset
   1825 			  + htab->tls_ldm_got.offset);
   1826 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset);
   1827 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset+4);
   1828 	  rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
   1829 	  rel.r_addend = 0;
   1830 	  bfd_elf32_swap_reloca_out (output_bfd, & rel,
   1831 				     (bfd_byte *) ((Elf32_External_Rela *) srelgot->contents
   1832 						   + srelgot->reloc_count));
   1833 	  ++ srelgot->reloc_count;
   1834 	}
   1835 
   1836       return bfd_reloc_ok;
   1837 
   1838     case R_MN10300_TLS_GOTIE:
   1839       value = tpoff (info, value);
   1840       /* Fall Through.  */
   1841 
   1842     case R_MN10300_TLS_GD:
   1843     case R_MN10300_TLS_IE:
   1844     case R_MN10300_GOT32:
   1845     case R_MN10300_GOT24:
   1846     case R_MN10300_GOT16:
   1847       if (dynobj == NULL)
   1848 	return bfd_reloc_dangerous;
   1849 
   1850       sgot = htab->root.sgot;
   1851       if (r_type == R_MN10300_TLS_GD)
   1852 	value = dtpoff (info, value);
   1853 
   1854       if (h != NULL)
   1855 	{
   1856 	  bfd_vma off;
   1857 
   1858 	  off = h->got.offset;
   1859 	  /* Offsets in the GOT are allocated in check_relocs
   1860 	     which is not called for shared libraries... */
   1861 	  if (off == (bfd_vma) -1)
   1862 	    off = 0;
   1863 
   1864 	  if (sgot->contents != NULL
   1865 	      && (! elf_hash_table (info)->dynamic_sections_created
   1866 		  || SYMBOL_REFERENCES_LOCAL (info, h)))
   1867 	    /* This is actually a static link, or it is a
   1868 	       -Bsymbolic link and the symbol is defined
   1869 	       locally, or the symbol was forced to be local
   1870 	       because of a version file.  We must initialize
   1871 	       this entry in the global offset table.
   1872 
   1873 	       When doing a dynamic link, we create a .rela.got
   1874 	       relocation entry to initialize the value.  This
   1875 	       is done in the finish_dynamic_symbol routine.  */
   1876 	    bfd_put_32 (output_bfd, value,
   1877 			sgot->contents + off);
   1878 
   1879 	  value = sgot->output_offset + off;
   1880 	}
   1881       else
   1882 	{
   1883 	  bfd_vma off;
   1884 
   1885 	  off = elf_local_got_offsets (input_bfd)[symndx];
   1886 
   1887 	  if (off & 1)
   1888 	    bfd_put_32 (output_bfd, value, sgot->contents + (off & ~ 1));
   1889 	  else
   1890 	    {
   1891 	      bfd_put_32 (output_bfd, value, sgot->contents + off);
   1892 
   1893 	      if (bfd_link_pic (info))
   1894 		{
   1895 		  asection * srelgot;
   1896 		  Elf_Internal_Rela outrel;
   1897 
   1898 		  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   1899 		  BFD_ASSERT (srelgot != NULL);
   1900 
   1901 		  outrel.r_offset = (sgot->output_section->vma
   1902 				     + sgot->output_offset
   1903 				     + off);
   1904 		  switch (r_type)
   1905 		    {
   1906 		    case R_MN10300_TLS_GD:
   1907 		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPOFF);
   1908 		      outrel.r_offset = (sgot->output_section->vma
   1909 					 + sgot->output_offset
   1910 					 + off + 4);
   1911 		      bfd_elf32_swap_reloca_out (output_bfd, & outrel,
   1912 						 (bfd_byte *) (((Elf32_External_Rela *)
   1913 								srelgot->contents)
   1914 							       + srelgot->reloc_count));
   1915 		      ++ srelgot->reloc_count;
   1916 		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
   1917 		      break;
   1918 		    case R_MN10300_TLS_GOTIE:
   1919 		    case R_MN10300_TLS_IE:
   1920 		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
   1921 		      break;
   1922 		    default:
   1923 		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
   1924 		      break;
   1925 		    }
   1926 
   1927 		  outrel.r_addend = value;
   1928 		  bfd_elf32_swap_reloca_out (output_bfd, &outrel,
   1929 					     (bfd_byte *) (((Elf32_External_Rela *)
   1930 							    srelgot->contents)
   1931 							   + srelgot->reloc_count));
   1932 		  ++ srelgot->reloc_count;
   1933 		  elf_local_got_offsets (input_bfd)[symndx] |= 1;
   1934 		}
   1935 
   1936 	      value = sgot->output_offset + (off & ~(bfd_vma) 1);
   1937 	    }
   1938 	}
   1939 
   1940       value += addend;
   1941 
   1942       if (r_type == R_MN10300_TLS_IE)
   1943 	{
   1944 	  value += sgot->output_section->vma;
   1945 	  bfd_put_32 (input_bfd, value, hit_data);
   1946 	  return bfd_reloc_ok;
   1947 	}
   1948       else if (r_type == R_MN10300_TLS_GOTIE
   1949 	       || r_type == R_MN10300_TLS_GD
   1950 	       || r_type == R_MN10300_TLS_LD)
   1951 	{
   1952 	  bfd_put_32 (input_bfd, value, hit_data);
   1953 	  return bfd_reloc_ok;
   1954 	}
   1955       else if (r_type == R_MN10300_GOT32)
   1956 	{
   1957 	  bfd_put_32 (input_bfd, value, hit_data);
   1958 	  return bfd_reloc_ok;
   1959 	}
   1960       else if (r_type == R_MN10300_GOT24)
   1961 	{
   1962 	  if ((long) value > 0x7fffff || (long) value < -0x800000)
   1963 	    return bfd_reloc_overflow;
   1964 
   1965 	  bfd_put_8 (input_bfd, value & 0xff, hit_data);
   1966 	  bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
   1967 	  bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
   1968 	  return bfd_reloc_ok;
   1969 	}
   1970       else if (r_type == R_MN10300_GOT16)
   1971 	{
   1972 	  if ((long) value > 0x7fff || (long) value < -0x8000)
   1973 	    return bfd_reloc_overflow;
   1974 
   1975 	  bfd_put_16 (input_bfd, value, hit_data);
   1976 	  return bfd_reloc_ok;
   1977 	}
   1978       /* Fall through.  */
   1979 
   1980     default:
   1981       return bfd_reloc_notsupported;
   1982     }
   1983 }
   1984 
   1985 /* Relocate an MN10300 ELF section.  */
   1987 
   1988 static bfd_boolean
   1989 mn10300_elf_relocate_section (bfd *output_bfd,
   1990 			      struct bfd_link_info *info,
   1991 			      bfd *input_bfd,
   1992 			      asection *input_section,
   1993 			      bfd_byte *contents,
   1994 			      Elf_Internal_Rela *relocs,
   1995 			      Elf_Internal_Sym *local_syms,
   1996 			      asection **local_sections)
   1997 {
   1998   Elf_Internal_Shdr *symtab_hdr;
   1999   struct elf_link_hash_entry **sym_hashes;
   2000   Elf_Internal_Rela *rel, *relend;
   2001   Elf_Internal_Rela * trel;
   2002 
   2003   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2004   sym_hashes = elf_sym_hashes (input_bfd);
   2005 
   2006   rel = relocs;
   2007   relend = relocs + input_section->reloc_count;
   2008   for (; rel < relend; rel++)
   2009     {
   2010       int r_type;
   2011       reloc_howto_type *howto;
   2012       unsigned long r_symndx;
   2013       Elf_Internal_Sym *sym;
   2014       asection *sec;
   2015       struct elf32_mn10300_link_hash_entry *h;
   2016       bfd_vma relocation;
   2017       bfd_reloc_status_type r;
   2018       int tls_r_type;
   2019       bfd_boolean unresolved_reloc = FALSE;
   2020       bfd_boolean warned, ignored;
   2021       struct elf_link_hash_entry * hh;
   2022 
   2023       relocation = 0;
   2024       r_symndx = ELF32_R_SYM (rel->r_info);
   2025       r_type = ELF32_R_TYPE (rel->r_info);
   2026       howto = elf_mn10300_howto_table + r_type;
   2027 
   2028       /* Just skip the vtable gc relocs.  */
   2029       if (r_type == R_MN10300_GNU_VTINHERIT
   2030 	  || r_type == R_MN10300_GNU_VTENTRY)
   2031 	continue;
   2032 
   2033       h = NULL;
   2034       sym = NULL;
   2035       sec = NULL;
   2036       if (r_symndx < symtab_hdr->sh_info)
   2037 	hh = NULL;
   2038       else
   2039 	{
   2040 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
   2041 				   r_symndx, symtab_hdr, sym_hashes,
   2042 				   hh, sec, relocation,
   2043 				   unresolved_reloc, warned, ignored);
   2044 	}
   2045       h = elf_mn10300_hash_entry (hh);
   2046 
   2047       tls_r_type = elf_mn10300_tls_transition (info, r_type, hh, input_section, 0);
   2048       if (tls_r_type != r_type)
   2049 	{
   2050 	  bfd_boolean had_plt;
   2051 
   2052 	  had_plt = mn10300_do_tls_transition (input_bfd, r_type, tls_r_type,
   2053 					       contents, rel->r_offset);
   2054 	  r_type = tls_r_type;
   2055 	  howto = elf_mn10300_howto_table + r_type;
   2056 
   2057 	  if (had_plt)
   2058 	    for (trel = rel+1; trel < relend; trel++)
   2059 	      if ((ELF32_R_TYPE (trel->r_info) == R_MN10300_PLT32
   2060 		   || ELF32_R_TYPE (trel->r_info) == R_MN10300_PCREL32)
   2061 		  && rel->r_offset + had_plt == trel->r_offset)
   2062 		trel->r_info = ELF32_R_INFO (0, R_MN10300_NONE);
   2063 	}
   2064 
   2065       if (r_symndx < symtab_hdr->sh_info)
   2066 	{
   2067 	  sym = local_syms + r_symndx;
   2068 	  sec = local_sections[r_symndx];
   2069 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
   2070 	}
   2071       else
   2072 	{
   2073 	  if ((h->root.root.type == bfd_link_hash_defined
   2074 	      || h->root.root.type == bfd_link_hash_defweak)
   2075 	      && (   r_type == R_MN10300_GOTPC32
   2076 		  || r_type == R_MN10300_GOTPC16
   2077 		  || ((   r_type == R_MN10300_PLT32
   2078 		       || r_type == R_MN10300_PLT16)
   2079 		      && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
   2080 		      && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
   2081 		      && h->root.plt.offset != (bfd_vma) -1)
   2082 		  || ((   r_type == R_MN10300_GOT32
   2083 		       || r_type == R_MN10300_GOT24
   2084 		       || r_type == R_MN10300_TLS_GD
   2085 		       || r_type == R_MN10300_TLS_LD
   2086 		       || r_type == R_MN10300_TLS_GOTIE
   2087 		       || r_type == R_MN10300_TLS_IE
   2088 		       || r_type == R_MN10300_GOT16)
   2089 		      && elf_hash_table (info)->dynamic_sections_created
   2090 		      && !SYMBOL_REFERENCES_LOCAL (info, hh))
   2091 		  || (r_type == R_MN10300_32
   2092 		      /* _32 relocs in executables force _COPY relocs,
   2093 			 such that the address of the symbol ends up
   2094 			 being local.  */
   2095 		      && !bfd_link_executable (info)
   2096 		      && !SYMBOL_REFERENCES_LOCAL (info, hh)
   2097 		      && ((input_section->flags & SEC_ALLOC) != 0
   2098 			  /* DWARF will emit R_MN10300_32 relocations
   2099 			     in its sections against symbols defined
   2100 			     externally in shared libraries.  We can't
   2101 			     do anything with them here.  */
   2102 			  || ((input_section->flags & SEC_DEBUGGING) != 0
   2103 			      && h->root.def_dynamic)))))
   2104 	    /* In these cases, we don't need the relocation
   2105 	       value.  We check specially because in some
   2106 	       obscure cases sec->output_section will be NULL.  */
   2107 	    relocation = 0;
   2108 
   2109 	  else if (!bfd_link_relocatable (info) && unresolved_reloc
   2110 		   && _bfd_elf_section_offset (output_bfd, info, input_section,
   2111 					       rel->r_offset) != (bfd_vma) -1)
   2112 
   2113 	    (*_bfd_error_handler)
   2114 	      (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
   2115 	       input_bfd,
   2116 	       input_section,
   2117 	       (long) rel->r_offset,
   2118 	       howto->name,
   2119 	       h->root.root.root.string);
   2120 	}
   2121 
   2122       if (sec != NULL && discarded_section (sec))
   2123 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
   2124 					 rel, 1, relend, howto, 0, contents);
   2125 
   2126       if (bfd_link_relocatable (info))
   2127 	continue;
   2128 
   2129       r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
   2130 					   input_section,
   2131 					   contents, rel->r_offset,
   2132 					   relocation, rel->r_addend,
   2133 					   (struct elf_link_hash_entry *) h,
   2134 					   r_symndx,
   2135 					   info, sec, h == NULL);
   2136 
   2137       if (r != bfd_reloc_ok)
   2138 	{
   2139 	  const char *name;
   2140 	  const char *msg = NULL;
   2141 
   2142 	  if (h != NULL)
   2143 	    name = h->root.root.root.string;
   2144 	  else
   2145 	    {
   2146 	      name = (bfd_elf_string_from_elf_section
   2147 		      (input_bfd, symtab_hdr->sh_link, sym->st_name));
   2148 	      if (name == NULL || *name == '\0')
   2149 		name = bfd_section_name (input_bfd, sec);
   2150 	    }
   2151 
   2152 	  switch (r)
   2153 	    {
   2154 	    case bfd_reloc_overflow:
   2155 	      (*info->callbacks->reloc_overflow)
   2156 		(info, (h ? &h->root.root : NULL), name, howto->name,
   2157 		 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
   2158 	      break;
   2159 
   2160 	    case bfd_reloc_undefined:
   2161 	      (*info->callbacks->undefined_symbol)
   2162 		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
   2163 	      break;
   2164 
   2165 	    case bfd_reloc_outofrange:
   2166 	      msg = _("internal error: out of range error");
   2167 	      goto common_error;
   2168 
   2169 	    case bfd_reloc_notsupported:
   2170 	      msg = _("internal error: unsupported relocation error");
   2171 	      goto common_error;
   2172 
   2173 	    case bfd_reloc_dangerous:
   2174 	      if (r_type == R_MN10300_PCREL32)
   2175 		msg = _("error: inappropriate relocation type for shared"
   2176 			" library (did you forget -fpic?)");
   2177 	      else if (r_type == R_MN10300_GOT32)
   2178 		msg = _("%B: taking the address of protected function"
   2179 			" '%s' cannot be done when making a shared library");
   2180 	      else
   2181 		msg = _("internal error: suspicious relocation type used"
   2182 			" in shared library");
   2183 	      goto common_error;
   2184 
   2185 	    default:
   2186 	      msg = _("internal error: unknown error");
   2187 	      /* Fall through.  */
   2188 
   2189 	    common_error:
   2190 	      _bfd_error_handler (msg, input_bfd, name);
   2191 	      bfd_set_error (bfd_error_bad_value);
   2192 	      return FALSE;
   2193 	    }
   2194 	}
   2195     }
   2196 
   2197   return TRUE;
   2198 }
   2199 
   2200 /* Finish initializing one hash table entry.  */
   2201 
   2202 static bfd_boolean
   2203 elf32_mn10300_finish_hash_table_entry (struct bfd_hash_entry *gen_entry,
   2204 				       void * in_args)
   2205 {
   2206   struct elf32_mn10300_link_hash_entry *entry;
   2207   struct bfd_link_info *link_info = (struct bfd_link_info *) in_args;
   2208   unsigned int byte_count = 0;
   2209 
   2210   entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
   2211 
   2212   /* If we already know we want to convert "call" to "calls" for calls
   2213      to this symbol, then return now.  */
   2214   if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
   2215     return TRUE;
   2216 
   2217   /* If there are no named calls to this symbol, or there's nothing we
   2218      can move from the function itself into the "call" instruction,
   2219      then note that all "call" instructions should be converted into
   2220      "calls" instructions and return.  If a symbol is available for
   2221      dynamic symbol resolution (overridable or overriding), avoid
   2222      custom calling conventions.  */
   2223   if (entry->direct_calls == 0
   2224       || (entry->stack_size == 0 && entry->movm_args == 0)
   2225       || (elf_hash_table (link_info)->dynamic_sections_created
   2226 	  && ELF_ST_VISIBILITY (entry->root.other) != STV_INTERNAL
   2227 	  && ELF_ST_VISIBILITY (entry->root.other) != STV_HIDDEN))
   2228     {
   2229       /* Make a note that we should convert "call" instructions to "calls"
   2230 	 instructions for calls to this symbol.  */
   2231       entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
   2232       return TRUE;
   2233     }
   2234 
   2235   /* We may be able to move some instructions from the function itself into
   2236      the "call" instruction.  Count how many bytes we might be able to
   2237      eliminate in the function itself.  */
   2238 
   2239   /* A movm instruction is two bytes.  */
   2240   if (entry->movm_args)
   2241     byte_count += 2;
   2242 
   2243   /* Count the insn to allocate stack space too.  */
   2244   if (entry->stack_size > 0)
   2245     {
   2246       if (entry->stack_size <= 128)
   2247 	byte_count += 3;
   2248       else
   2249 	byte_count += 4;
   2250     }
   2251 
   2252   /* If using "call" will result in larger code, then turn all
   2253      the associated "call" instructions into "calls" instructions.  */
   2254   if (byte_count < entry->direct_calls)
   2255     entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
   2256 
   2257   /* This routine never fails.  */
   2258   return TRUE;
   2259 }
   2260 
   2261 /* Used to count hash table entries.  */
   2262 
   2263 static bfd_boolean
   2264 elf32_mn10300_count_hash_table_entries (struct bfd_hash_entry *gen_entry ATTRIBUTE_UNUSED,
   2265 					void * in_args)
   2266 {
   2267   int *count = (int *) in_args;
   2268 
   2269   (*count) ++;
   2270   return TRUE;
   2271 }
   2272 
   2273 /* Used to enumerate hash table entries into a linear array.  */
   2274 
   2275 static bfd_boolean
   2276 elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry,
   2277 				       void * in_args)
   2278 {
   2279   struct bfd_hash_entry ***ptr = (struct bfd_hash_entry ***) in_args;
   2280 
   2281   **ptr = gen_entry;
   2282   (*ptr) ++;
   2283   return TRUE;
   2284 }
   2285 
   2286 /* Used to sort the array created by the above.  */
   2287 
   2288 static int
   2289 sort_by_value (const void *va, const void *vb)
   2290 {
   2291   struct elf32_mn10300_link_hash_entry *a
   2292     = *(struct elf32_mn10300_link_hash_entry **) va;
   2293   struct elf32_mn10300_link_hash_entry *b
   2294     = *(struct elf32_mn10300_link_hash_entry **) vb;
   2295 
   2296   return a->value - b->value;
   2297 }
   2298 
   2299 /* Compute the stack size and movm arguments for the function
   2300    referred to by HASH at address ADDR in section with
   2301    contents CONTENTS, store the information in the hash table.  */
   2302 
   2303 static void
   2304 compute_function_info (bfd *abfd,
   2305 		       struct elf32_mn10300_link_hash_entry *hash,
   2306 		       bfd_vma addr,
   2307 		       unsigned char *contents)
   2308 {
   2309   unsigned char byte1, byte2;
   2310   /* We only care about a very small subset of the possible prologue
   2311      sequences here.  Basically we look for:
   2312 
   2313      movm [d2,d3,a2,a3],sp (optional)
   2314      add <size>,sp (optional, and only for sizes which fit in an unsigned
   2315 		    8 bit number)
   2316 
   2317      If we find anything else, we quit.  */
   2318 
   2319   /* Look for movm [regs],sp.  */
   2320   byte1 = bfd_get_8 (abfd, contents + addr);
   2321   byte2 = bfd_get_8 (abfd, contents + addr + 1);
   2322 
   2323   if (byte1 == 0xcf)
   2324     {
   2325       hash->movm_args = byte2;
   2326       addr += 2;
   2327       byte1 = bfd_get_8 (abfd, contents + addr);
   2328       byte2 = bfd_get_8 (abfd, contents + addr + 1);
   2329     }
   2330 
   2331   /* Now figure out how much stack space will be allocated by the movm
   2332      instruction.  We need this kept separate from the function's normal
   2333      stack space.  */
   2334   if (hash->movm_args)
   2335     {
   2336       /* Space for d2.  */
   2337       if (hash->movm_args & 0x80)
   2338 	hash->movm_stack_size += 4;
   2339 
   2340       /* Space for d3.  */
   2341       if (hash->movm_args & 0x40)
   2342 	hash->movm_stack_size += 4;
   2343 
   2344       /* Space for a2.  */
   2345       if (hash->movm_args & 0x20)
   2346 	hash->movm_stack_size += 4;
   2347 
   2348       /* Space for a3.  */
   2349       if (hash->movm_args & 0x10)
   2350 	hash->movm_stack_size += 4;
   2351 
   2352       /* "other" space.  d0, d1, a0, a1, mdr, lir, lar, 4 byte pad.  */
   2353       if (hash->movm_args & 0x08)
   2354 	hash->movm_stack_size += 8 * 4;
   2355 
   2356       if (bfd_get_mach (abfd) == bfd_mach_am33
   2357 	  || bfd_get_mach (abfd) == bfd_mach_am33_2)
   2358 	{
   2359 	  /* "exother" space.  e0, e1, mdrq, mcrh, mcrl, mcvf */
   2360 	  if (hash->movm_args & 0x1)
   2361 	    hash->movm_stack_size += 6 * 4;
   2362 
   2363 	  /* exreg1 space.  e4, e5, e6, e7 */
   2364 	  if (hash->movm_args & 0x2)
   2365 	    hash->movm_stack_size += 4 * 4;
   2366 
   2367 	  /* exreg0 space.  e2, e3  */
   2368 	  if (hash->movm_args & 0x4)
   2369 	    hash->movm_stack_size += 2 * 4;
   2370 	}
   2371     }
   2372 
   2373   /* Now look for the two stack adjustment variants.  */
   2374   if (byte1 == 0xf8 && byte2 == 0xfe)
   2375     {
   2376       int temp = bfd_get_8 (abfd, contents + addr + 2);
   2377       temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
   2378 
   2379       hash->stack_size = -temp;
   2380     }
   2381   else if (byte1 == 0xfa && byte2 == 0xfe)
   2382     {
   2383       int temp = bfd_get_16 (abfd, contents + addr + 2);
   2384       temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
   2385       temp = -temp;
   2386 
   2387       if (temp < 255)
   2388 	hash->stack_size = temp;
   2389     }
   2390 
   2391   /* If the total stack to be allocated by the call instruction is more
   2392      than 255 bytes, then we can't remove the stack adjustment by using
   2393      "call" (we might still be able to remove the "movm" instruction.  */
   2394   if (hash->stack_size + hash->movm_stack_size > 255)
   2395     hash->stack_size = 0;
   2396 }
   2397 
   2398 /* Delete some bytes from a section while relaxing.  */
   2399 
   2400 static bfd_boolean
   2401 mn10300_elf_relax_delete_bytes (bfd *abfd,
   2402 				asection *sec,
   2403 				bfd_vma addr,
   2404 				int count)
   2405 {
   2406   Elf_Internal_Shdr *symtab_hdr;
   2407   unsigned int sec_shndx;
   2408   bfd_byte *contents;
   2409   Elf_Internal_Rela *irel, *irelend;
   2410   Elf_Internal_Rela *irelalign;
   2411   bfd_vma toaddr;
   2412   Elf_Internal_Sym *isym, *isymend;
   2413   struct elf_link_hash_entry **sym_hashes;
   2414   struct elf_link_hash_entry **end_hashes;
   2415   unsigned int symcount;
   2416 
   2417   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
   2418 
   2419   contents = elf_section_data (sec)->this_hdr.contents;
   2420 
   2421   irelalign = NULL;
   2422   toaddr = sec->size;
   2423 
   2424   irel = elf_section_data (sec)->relocs;
   2425   irelend = irel + sec->reloc_count;
   2426 
   2427   if (sec->reloc_count > 0)
   2428     {
   2429       /* If there is an align reloc at the end of the section ignore it.
   2430 	 GAS creates these relocs for reasons of its own, and they just
   2431 	 serve to keep the section artifically inflated.  */
   2432       if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN)
   2433 	--irelend;
   2434 
   2435       /* The deletion must stop at the next ALIGN reloc for an aligment
   2436 	 power larger than, or not a multiple of, the number of bytes we
   2437 	 are deleting.  */
   2438       for (; irel < irelend; irel++)
   2439 	{
   2440 	  int alignment = 1 << irel->r_addend;
   2441 
   2442 	  if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
   2443 	      && irel->r_offset > addr
   2444 	      && irel->r_offset < toaddr
   2445 	      && (count < alignment
   2446 		  || alignment % count != 0))
   2447 	    {
   2448 	      irelalign = irel;
   2449 	      toaddr = irel->r_offset;
   2450 	      break;
   2451 	    }
   2452 	}
   2453     }
   2454 
   2455   /* Actually delete the bytes.  */
   2456   memmove (contents + addr, contents + addr + count,
   2457 	   (size_t) (toaddr - addr - count));
   2458 
   2459   /* Adjust the section's size if we are shrinking it, or else
   2460      pad the bytes between the end of the shrunken region and
   2461      the start of the next region with NOP codes.  */
   2462   if (irelalign == NULL)
   2463     {
   2464       sec->size -= count;
   2465       /* Include symbols at the end of the section, but
   2466 	 not at the end of a sub-region of the section.  */
   2467       toaddr ++;
   2468     }
   2469   else
   2470     {
   2471       int i;
   2472 
   2473 #define NOP_OPCODE 0xcb
   2474 
   2475       for (i = 0; i < count; i ++)
   2476 	bfd_put_8 (abfd, (bfd_vma) NOP_OPCODE, contents + toaddr - count + i);
   2477     }
   2478 
   2479   /* Adjust all the relocs.  */
   2480   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
   2481     {
   2482       /* Get the new reloc address.  */
   2483       if ((irel->r_offset > addr
   2484 	   && irel->r_offset < toaddr)
   2485 	  || (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
   2486 	      && irel->r_offset == toaddr))
   2487 	irel->r_offset -= count;
   2488     }
   2489 
   2490   /* Adjust the local symbols in the section, reducing their value
   2491      by the number of bytes deleted.  Note - symbols within the deleted
   2492      region are moved to the address of the start of the region, which
   2493      actually means that they will address the byte beyond the end of
   2494      the region once the deletion has been completed.  */
   2495   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   2496   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
   2497   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
   2498     {
   2499       if (isym->st_shndx == sec_shndx
   2500 	  && isym->st_value > addr
   2501 	  && isym->st_value < toaddr)
   2502 	{
   2503 	  if (isym->st_value < addr + count)
   2504 	    isym->st_value = addr;
   2505 	  else
   2506 	    isym->st_value -= count;
   2507 	}
   2508       /* Adjust the function symbol's size as well.  */
   2509       else if (isym->st_shndx == sec_shndx
   2510 	       && ELF_ST_TYPE (isym->st_info) == STT_FUNC
   2511 	       && isym->st_value + isym->st_size > addr
   2512 	       && isym->st_value + isym->st_size < toaddr)
   2513 	isym->st_size -= count;
   2514     }
   2515 
   2516   /* Now adjust the global symbols defined in this section.  */
   2517   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
   2518 	      - symtab_hdr->sh_info);
   2519   sym_hashes = elf_sym_hashes (abfd);
   2520   end_hashes = sym_hashes + symcount;
   2521   for (; sym_hashes < end_hashes; sym_hashes++)
   2522     {
   2523       struct elf_link_hash_entry *sym_hash = *sym_hashes;
   2524 
   2525       if ((sym_hash->root.type == bfd_link_hash_defined
   2526 	   || sym_hash->root.type == bfd_link_hash_defweak)
   2527 	  && sym_hash->root.u.def.section == sec
   2528 	  && sym_hash->root.u.def.value > addr
   2529 	  && sym_hash->root.u.def.value < toaddr)
   2530 	{
   2531 	  if (sym_hash->root.u.def.value < addr + count)
   2532 	    sym_hash->root.u.def.value = addr;
   2533 	  else
   2534 	    sym_hash->root.u.def.value -= count;
   2535 	}
   2536       /* Adjust the function symbol's size as well.  */
   2537       else if (sym_hash->root.type == bfd_link_hash_defined
   2538 	       && sym_hash->root.u.def.section == sec
   2539 	       && sym_hash->type == STT_FUNC
   2540 	       && sym_hash->root.u.def.value + sym_hash->size > addr
   2541 	       && sym_hash->root.u.def.value + sym_hash->size < toaddr)
   2542 	sym_hash->size -= count;
   2543     }
   2544 
   2545   /* See if we can move the ALIGN reloc forward.
   2546      We have adjusted r_offset for it already.  */
   2547   if (irelalign != NULL)
   2548     {
   2549       bfd_vma alignto, alignaddr;
   2550 
   2551       if ((int) irelalign->r_addend > 0)
   2552 	{
   2553 	  /* This is the old address.  */
   2554 	  alignto = BFD_ALIGN (toaddr, 1 << irelalign->r_addend);
   2555 	  /* This is where the align points to now.  */
   2556 	  alignaddr = BFD_ALIGN (irelalign->r_offset,
   2557 				 1 << irelalign->r_addend);
   2558 	  if (alignaddr < alignto)
   2559 	    /* Tail recursion.  */
   2560 	    return mn10300_elf_relax_delete_bytes (abfd, sec, alignaddr,
   2561 						   (int) (alignto - alignaddr));
   2562 	}
   2563     }
   2564 
   2565   return TRUE;
   2566 }
   2567 
   2568 /* Return TRUE if a symbol exists at the given address, else return
   2569    FALSE.  */
   2570 
   2571 static bfd_boolean
   2572 mn10300_elf_symbol_address_p (bfd *abfd,
   2573 			      asection *sec,
   2574 			      Elf_Internal_Sym *isym,
   2575 			      bfd_vma addr)
   2576 {
   2577   Elf_Internal_Shdr *symtab_hdr;
   2578   unsigned int sec_shndx;
   2579   Elf_Internal_Sym *isymend;
   2580   struct elf_link_hash_entry **sym_hashes;
   2581   struct elf_link_hash_entry **end_hashes;
   2582   unsigned int symcount;
   2583 
   2584   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
   2585 
   2586   /* Examine all the symbols.  */
   2587   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   2588   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
   2589     if (isym->st_shndx == sec_shndx
   2590 	&& isym->st_value == addr)
   2591       return TRUE;
   2592 
   2593   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
   2594 	      - symtab_hdr->sh_info);
   2595   sym_hashes = elf_sym_hashes (abfd);
   2596   end_hashes = sym_hashes + symcount;
   2597   for (; sym_hashes < end_hashes; sym_hashes++)
   2598     {
   2599       struct elf_link_hash_entry *sym_hash = *sym_hashes;
   2600 
   2601       if ((sym_hash->root.type == bfd_link_hash_defined
   2602 	   || sym_hash->root.type == bfd_link_hash_defweak)
   2603 	  && sym_hash->root.u.def.section == sec
   2604 	  && sym_hash->root.u.def.value == addr)
   2605 	return TRUE;
   2606     }
   2607 
   2608   return FALSE;
   2609 }
   2610 
   2611 /* This function handles relaxing for the mn10300.
   2612 
   2613    There are quite a few relaxing opportunities available on the mn10300:
   2614 
   2615 	* calls:32 -> calls:16 					   2 bytes
   2616 	* call:32  -> call:16					   2 bytes
   2617 
   2618 	* call:32 -> calls:32					   1 byte
   2619 	* call:16 -> calls:16					   1 byte
   2620 		* These are done anytime using "calls" would result
   2621 		in smaller code, or when necessary to preserve the
   2622 		meaning of the program.
   2623 
   2624 	* call:32						   varies
   2625 	* call:16
   2626 		* In some circumstances we can move instructions
   2627 		from a function prologue into a "call" instruction.
   2628 		This is only done if the resulting code is no larger
   2629 		than the original code.
   2630 
   2631 	* jmp:32 -> jmp:16					   2 bytes
   2632 	* jmp:16 -> bra:8					   1 byte
   2633 
   2634 		* If the previous instruction is a conditional branch
   2635 		around the jump/bra, we may be able to reverse its condition
   2636 		and change its target to the jump's target.  The jump/bra
   2637 		can then be deleted.				   2 bytes
   2638 
   2639 	* mov abs32 -> mov abs16				   1 or 2 bytes
   2640 
   2641 	* Most instructions which accept imm32 can relax to imm16  1 or 2 bytes
   2642 	- Most instructions which accept imm16 can relax to imm8   1 or 2 bytes
   2643 
   2644 	* Most instructions which accept d32 can relax to d16	   1 or 2 bytes
   2645 	- Most instructions which accept d16 can relax to d8	   1 or 2 bytes
   2646 
   2647 	We don't handle imm16->imm8 or d16->d8 as they're very rare
   2648 	and somewhat more difficult to support.  */
   2649 
   2650 static bfd_boolean
   2651 mn10300_elf_relax_section (bfd *abfd,
   2652 			   asection *sec,
   2653 			   struct bfd_link_info *link_info,
   2654 			   bfd_boolean *again)
   2655 {
   2656   Elf_Internal_Shdr *symtab_hdr;
   2657   Elf_Internal_Rela *internal_relocs = NULL;
   2658   Elf_Internal_Rela *irel, *irelend;
   2659   bfd_byte *contents = NULL;
   2660   Elf_Internal_Sym *isymbuf = NULL;
   2661   struct elf32_mn10300_link_hash_table *hash_table;
   2662   asection *section = sec;
   2663   bfd_vma align_gap_adjustment;
   2664 
   2665   if (bfd_link_relocatable (link_info))
   2666     (*link_info->callbacks->einfo)
   2667       (_("%P%F: --relax and -r may not be used together\n"));
   2668 
   2669   /* Assume nothing changes.  */
   2670   *again = FALSE;
   2671 
   2672   /* We need a pointer to the mn10300 specific hash table.  */
   2673   hash_table = elf32_mn10300_hash_table (link_info);
   2674   if (hash_table == NULL)
   2675     return FALSE;
   2676 
   2677   /* Initialize fields in each hash table entry the first time through.  */
   2678   if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
   2679     {
   2680       bfd *input_bfd;
   2681 
   2682       /* Iterate over all the input bfds.  */
   2683       for (input_bfd = link_info->input_bfds;
   2684 	   input_bfd != NULL;
   2685 	   input_bfd = input_bfd->link.next)
   2686 	{
   2687 	  /* We're going to need all the symbols for each bfd.  */
   2688 	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2689 	  if (symtab_hdr->sh_info != 0)
   2690 	    {
   2691 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   2692 	      if (isymbuf == NULL)
   2693 		isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
   2694 						symtab_hdr->sh_info, 0,
   2695 						NULL, NULL, NULL);
   2696 	      if (isymbuf == NULL)
   2697 		goto error_return;
   2698 	    }
   2699 
   2700 	  /* Iterate over each section in this bfd.  */
   2701 	  for (section = input_bfd->sections;
   2702 	       section != NULL;
   2703 	       section = section->next)
   2704 	    {
   2705 	      struct elf32_mn10300_link_hash_entry *hash;
   2706 	      asection *sym_sec = NULL;
   2707 	      const char *sym_name;
   2708 	      char *new_name;
   2709 
   2710 	      /* If there's nothing to do in this section, skip it.  */
   2711 	      if (! ((section->flags & SEC_RELOC) != 0
   2712 		     && section->reloc_count != 0))
   2713 		continue;
   2714 	      if ((section->flags & SEC_ALLOC) == 0)
   2715 		continue;
   2716 
   2717 	      /* Get cached copy of section contents if it exists.  */
   2718 	      if (elf_section_data (section)->this_hdr.contents != NULL)
   2719 		contents = elf_section_data (section)->this_hdr.contents;
   2720 	      else if (section->size != 0)
   2721 		{
   2722 		  /* Go get them off disk.  */
   2723 		  if (!bfd_malloc_and_get_section (input_bfd, section,
   2724 						   &contents))
   2725 		    goto error_return;
   2726 		}
   2727 	      else
   2728 		contents = NULL;
   2729 
   2730 	      /* If there aren't any relocs, then there's nothing to do.  */
   2731 	      if ((section->flags & SEC_RELOC) != 0
   2732 		  && section->reloc_count != 0)
   2733 		{
   2734 		  /* Get a copy of the native relocations.  */
   2735 		  internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
   2736 							       NULL, NULL,
   2737 							       link_info->keep_memory);
   2738 		  if (internal_relocs == NULL)
   2739 		    goto error_return;
   2740 
   2741 		  /* Now examine each relocation.  */
   2742 		  irel = internal_relocs;
   2743 		  irelend = irel + section->reloc_count;
   2744 		  for (; irel < irelend; irel++)
   2745 		    {
   2746 		      long r_type;
   2747 		      unsigned long r_index;
   2748 		      unsigned char code;
   2749 
   2750 		      r_type = ELF32_R_TYPE (irel->r_info);
   2751 		      r_index = ELF32_R_SYM (irel->r_info);
   2752 
   2753 		      if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
   2754 			goto error_return;
   2755 
   2756 		      /* We need the name and hash table entry of the target
   2757 			 symbol!  */
   2758 		      hash = NULL;
   2759 		      sym_sec = NULL;
   2760 
   2761 		      if (r_index < symtab_hdr->sh_info)
   2762 			{
   2763 			  /* A local symbol.  */
   2764 			  Elf_Internal_Sym *isym;
   2765 			  struct elf_link_hash_table *elftab;
   2766 			  bfd_size_type amt;
   2767 
   2768 			  isym = isymbuf + r_index;
   2769 			  if (isym->st_shndx == SHN_UNDEF)
   2770 			    sym_sec = bfd_und_section_ptr;
   2771 			  else if (isym->st_shndx == SHN_ABS)
   2772 			    sym_sec = bfd_abs_section_ptr;
   2773 			  else if (isym->st_shndx == SHN_COMMON)
   2774 			    sym_sec = bfd_com_section_ptr;
   2775 			  else
   2776 			    sym_sec
   2777 			      = bfd_section_from_elf_index (input_bfd,
   2778 							    isym->st_shndx);
   2779 
   2780 			  sym_name
   2781 			    = bfd_elf_string_from_elf_section (input_bfd,
   2782 							       (symtab_hdr
   2783 								->sh_link),
   2784 							       isym->st_name);
   2785 
   2786 			  /* If it isn't a function, then we don't care
   2787 			     about it.  */
   2788 			  if (ELF_ST_TYPE (isym->st_info) != STT_FUNC)
   2789 			    continue;
   2790 
   2791 			  /* Tack on an ID so we can uniquely identify this
   2792 			     local symbol in the global hash table.  */
   2793 			  amt = strlen (sym_name) + 10;
   2794 			  new_name = bfd_malloc (amt);
   2795 			  if (new_name == NULL)
   2796 			    goto error_return;
   2797 
   2798 			  sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
   2799 			  sym_name = new_name;
   2800 
   2801 			  elftab = &hash_table->static_hash_table->root;
   2802 			  hash = ((struct elf32_mn10300_link_hash_entry *)
   2803 				  elf_link_hash_lookup (elftab, sym_name,
   2804 							TRUE, TRUE, FALSE));
   2805 			  free (new_name);
   2806 			}
   2807 		      else
   2808 			{
   2809 			  r_index -= symtab_hdr->sh_info;
   2810 			  hash = (struct elf32_mn10300_link_hash_entry *)
   2811 				   elf_sym_hashes (input_bfd)[r_index];
   2812 			}
   2813 
   2814 		      sym_name = hash->root.root.root.string;
   2815 		      if ((section->flags & SEC_CODE) != 0)
   2816 			{
   2817 			  /* If this is not a "call" instruction, then we
   2818 			     should convert "call" instructions to "calls"
   2819 			     instructions.  */
   2820 			  code = bfd_get_8 (input_bfd,
   2821 					    contents + irel->r_offset - 1);
   2822 			  if (code != 0xdd && code != 0xcd)
   2823 			    hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
   2824 			}
   2825 
   2826 		      /* If this is a jump/call, then bump the
   2827 			 direct_calls counter.  Else force "call" to
   2828 			 "calls" conversions.  */
   2829 		      if (r_type == R_MN10300_PCREL32
   2830 			  || r_type == R_MN10300_PLT32
   2831 			  || r_type == R_MN10300_PLT16
   2832 			  || r_type == R_MN10300_PCREL16)
   2833 			hash->direct_calls++;
   2834 		      else
   2835 			hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
   2836 		    }
   2837 		}
   2838 
   2839 	      /* Now look at the actual contents to get the stack size,
   2840 		 and a list of what registers were saved in the prologue
   2841 		 (ie movm_args).  */
   2842 	      if ((section->flags & SEC_CODE) != 0)
   2843 		{
   2844 		  Elf_Internal_Sym *isym, *isymend;
   2845 		  unsigned int sec_shndx;
   2846 		  struct elf_link_hash_entry **hashes;
   2847 		  struct elf_link_hash_entry **end_hashes;
   2848 		  unsigned int symcount;
   2849 
   2850 		  sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
   2851 								 section);
   2852 
   2853 		  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
   2854 			      - symtab_hdr->sh_info);
   2855 		  hashes = elf_sym_hashes (input_bfd);
   2856 		  end_hashes = hashes + symcount;
   2857 
   2858 		  /* Look at each function defined in this section and
   2859 		     update info for that function.  */
   2860 		  isymend = isymbuf + symtab_hdr->sh_info;
   2861 		  for (isym = isymbuf; isym < isymend; isym++)
   2862 		    {
   2863 		      if (isym->st_shndx == sec_shndx
   2864 			  && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
   2865 			{
   2866 			  struct elf_link_hash_table *elftab;
   2867 			  bfd_size_type amt;
   2868 			  struct elf_link_hash_entry **lhashes = hashes;
   2869 
   2870 			  /* Skip a local symbol if it aliases a
   2871 			     global one.  */
   2872 			  for (; lhashes < end_hashes; lhashes++)
   2873 			    {
   2874 			      hash = (struct elf32_mn10300_link_hash_entry *) *lhashes;
   2875 			      if ((hash->root.root.type == bfd_link_hash_defined
   2876 				   || hash->root.root.type == bfd_link_hash_defweak)
   2877 				  && hash->root.root.u.def.section == section
   2878 				  && hash->root.type == STT_FUNC
   2879 				  && hash->root.root.u.def.value == isym->st_value)
   2880 				break;
   2881 			    }
   2882 			  if (lhashes != end_hashes)
   2883 			    continue;
   2884 
   2885 			  if (isym->st_shndx == SHN_UNDEF)
   2886 			    sym_sec = bfd_und_section_ptr;
   2887 			  else if (isym->st_shndx == SHN_ABS)
   2888 			    sym_sec = bfd_abs_section_ptr;
   2889 			  else if (isym->st_shndx == SHN_COMMON)
   2890 			    sym_sec = bfd_com_section_ptr;
   2891 			  else
   2892 			    sym_sec
   2893 			      = bfd_section_from_elf_index (input_bfd,
   2894 							    isym->st_shndx);
   2895 
   2896 			  sym_name = (bfd_elf_string_from_elf_section
   2897 				      (input_bfd, symtab_hdr->sh_link,
   2898 				       isym->st_name));
   2899 
   2900 			  /* Tack on an ID so we can uniquely identify this
   2901 			     local symbol in the global hash table.  */
   2902 			  amt = strlen (sym_name) + 10;
   2903 			  new_name = bfd_malloc (amt);
   2904 			  if (new_name == NULL)
   2905 			    goto error_return;
   2906 
   2907 			  sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
   2908 			  sym_name = new_name;
   2909 
   2910 			  elftab = &hash_table->static_hash_table->root;
   2911 			  hash = ((struct elf32_mn10300_link_hash_entry *)
   2912 				  elf_link_hash_lookup (elftab, sym_name,
   2913 							TRUE, TRUE, FALSE));
   2914 			  free (new_name);
   2915 			  compute_function_info (input_bfd, hash,
   2916 						 isym->st_value, contents);
   2917 			  hash->value = isym->st_value;
   2918 			}
   2919 		    }
   2920 
   2921 		  for (; hashes < end_hashes; hashes++)
   2922 		    {
   2923 		      hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
   2924 		      if ((hash->root.root.type == bfd_link_hash_defined
   2925 			   || hash->root.root.type == bfd_link_hash_defweak)
   2926 			  && hash->root.root.u.def.section == section
   2927 			  && hash->root.type == STT_FUNC)
   2928 			compute_function_info (input_bfd, hash,
   2929 					       (hash)->root.root.u.def.value,
   2930 					       contents);
   2931 		    }
   2932 		}
   2933 
   2934 	      /* Cache or free any memory we allocated for the relocs.  */
   2935 	      if (internal_relocs != NULL
   2936 		  && elf_section_data (section)->relocs != internal_relocs)
   2937 		free (internal_relocs);
   2938 	      internal_relocs = NULL;
   2939 
   2940 	      /* Cache or free any memory we allocated for the contents.  */
   2941 	      if (contents != NULL
   2942 		  && elf_section_data (section)->this_hdr.contents != contents)
   2943 		{
   2944 		  if (! link_info->keep_memory)
   2945 		    free (contents);
   2946 		  else
   2947 		    {
   2948 		      /* Cache the section contents for elf_link_input_bfd.  */
   2949 		      elf_section_data (section)->this_hdr.contents = contents;
   2950 		    }
   2951 		}
   2952 	      contents = NULL;
   2953 	    }
   2954 
   2955 	  /* Cache or free any memory we allocated for the symbols.  */
   2956 	  if (isymbuf != NULL
   2957 	      && symtab_hdr->contents != (unsigned char *) isymbuf)
   2958 	    {
   2959 	      if (! link_info->keep_memory)
   2960 		free (isymbuf);
   2961 	      else
   2962 		{
   2963 		  /* Cache the symbols for elf_link_input_bfd.  */
   2964 		  symtab_hdr->contents = (unsigned char *) isymbuf;
   2965 		}
   2966 	    }
   2967 	  isymbuf = NULL;
   2968 	}
   2969 
   2970       /* Now iterate on each symbol in the hash table and perform
   2971 	 the final initialization steps on each.  */
   2972       elf32_mn10300_link_hash_traverse (hash_table,
   2973 					elf32_mn10300_finish_hash_table_entry,
   2974 					link_info);
   2975       elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
   2976 					elf32_mn10300_finish_hash_table_entry,
   2977 					link_info);
   2978 
   2979       {
   2980 	/* This section of code collects all our local symbols, sorts
   2981 	   them by value, and looks for multiple symbols referring to
   2982 	   the same address.  For those symbols, the flags are merged.
   2983 	   At this point, the only flag that can be set is
   2984 	   MN10300_CONVERT_CALL_TO_CALLS, so we simply OR the flags
   2985 	   together.  */
   2986 	int static_count = 0, i;
   2987 	struct elf32_mn10300_link_hash_entry **entries;
   2988 	struct elf32_mn10300_link_hash_entry **ptr;
   2989 
   2990 	elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
   2991 					  elf32_mn10300_count_hash_table_entries,
   2992 					  &static_count);
   2993 
   2994 	entries = bfd_malloc (static_count * sizeof (* ptr));
   2995 
   2996 	ptr = entries;
   2997 	elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
   2998 					  elf32_mn10300_list_hash_table_entries,
   2999 					  & ptr);
   3000 
   3001 	qsort (entries, static_count, sizeof (entries[0]), sort_by_value);
   3002 
   3003 	for (i = 0; i < static_count - 1; i++)
   3004 	  if (entries[i]->value && entries[i]->value == entries[i+1]->value)
   3005 	    {
   3006 	      int v = entries[i]->flags;
   3007 	      int j;
   3008 
   3009 	      for (j = i + 1; j < static_count && entries[j]->value == entries[i]->value; j++)
   3010 		v |= entries[j]->flags;
   3011 
   3012 	      for (j = i; j < static_count && entries[j]->value == entries[i]->value; j++)
   3013 		entries[j]->flags = v;
   3014 
   3015 	      i = j - 1;
   3016 	    }
   3017       }
   3018 
   3019       /* All entries in the hash table are fully initialized.  */
   3020       hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
   3021 
   3022       /* Now that everything has been initialized, go through each
   3023 	 code section and delete any prologue insns which will be
   3024 	 redundant because their operations will be performed by
   3025 	 a "call" instruction.  */
   3026       for (input_bfd = link_info->input_bfds;
   3027 	   input_bfd != NULL;
   3028 	   input_bfd = input_bfd->link.next)
   3029 	{
   3030 	  /* We're going to need all the local symbols for each bfd.  */
   3031 	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   3032 	  if (symtab_hdr->sh_info != 0)
   3033 	    {
   3034 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   3035 	      if (isymbuf == NULL)
   3036 		isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
   3037 						symtab_hdr->sh_info, 0,
   3038 						NULL, NULL, NULL);
   3039 	      if (isymbuf == NULL)
   3040 		goto error_return;
   3041 	    }
   3042 
   3043 	  /* Walk over each section in this bfd.  */
   3044 	  for (section = input_bfd->sections;
   3045 	       section != NULL;
   3046 	       section = section->next)
   3047 	    {
   3048 	      unsigned int sec_shndx;
   3049 	      Elf_Internal_Sym *isym, *isymend;
   3050 	      struct elf_link_hash_entry **hashes;
   3051 	      struct elf_link_hash_entry **end_hashes;
   3052 	      unsigned int symcount;
   3053 
   3054 	      /* Skip non-code sections and empty sections.  */
   3055 	      if ((section->flags & SEC_CODE) == 0 || section->size == 0)
   3056 		continue;
   3057 
   3058 	      if (section->reloc_count != 0)
   3059 		{
   3060 		  /* Get a copy of the native relocations.  */
   3061 		  internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
   3062 							       NULL, NULL,
   3063 							       link_info->keep_memory);
   3064 		  if (internal_relocs == NULL)
   3065 		    goto error_return;
   3066 		}
   3067 
   3068 	      /* Get cached copy of section contents if it exists.  */
   3069 	      if (elf_section_data (section)->this_hdr.contents != NULL)
   3070 		contents = elf_section_data (section)->this_hdr.contents;
   3071 	      else
   3072 		{
   3073 		  /* Go get them off disk.  */
   3074 		  if (!bfd_malloc_and_get_section (input_bfd, section,
   3075 						   &contents))
   3076 		    goto error_return;
   3077 		}
   3078 
   3079 	      sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
   3080 							     section);
   3081 
   3082 	      /* Now look for any function in this section which needs
   3083 		 insns deleted from its prologue.  */
   3084 	      isymend = isymbuf + symtab_hdr->sh_info;
   3085 	      for (isym = isymbuf; isym < isymend; isym++)
   3086 		{
   3087 		  struct elf32_mn10300_link_hash_entry *sym_hash;
   3088 		  asection *sym_sec = NULL;
   3089 		  const char *sym_name;
   3090 		  char *new_name;
   3091 		  struct elf_link_hash_table *elftab;
   3092 		  bfd_size_type amt;
   3093 
   3094 		  if (isym->st_shndx != sec_shndx)
   3095 		    continue;
   3096 
   3097 		  if (isym->st_shndx == SHN_UNDEF)
   3098 		    sym_sec = bfd_und_section_ptr;
   3099 		  else if (isym->st_shndx == SHN_ABS)
   3100 		    sym_sec = bfd_abs_section_ptr;
   3101 		  else if (isym->st_shndx == SHN_COMMON)
   3102 		    sym_sec = bfd_com_section_ptr;
   3103 		  else
   3104 		    sym_sec
   3105 		      = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
   3106 
   3107 		  sym_name
   3108 		    = bfd_elf_string_from_elf_section (input_bfd,
   3109 						       symtab_hdr->sh_link,
   3110 						       isym->st_name);
   3111 
   3112 		  /* Tack on an ID so we can uniquely identify this
   3113 		     local symbol in the global hash table.  */
   3114 		  amt = strlen (sym_name) + 10;
   3115 		  new_name = bfd_malloc (amt);
   3116 		  if (new_name == NULL)
   3117 		    goto error_return;
   3118 		  sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
   3119 		  sym_name = new_name;
   3120 
   3121 		  elftab = & hash_table->static_hash_table->root;
   3122 		  sym_hash = (struct elf32_mn10300_link_hash_entry *)
   3123 		    elf_link_hash_lookup (elftab, sym_name,
   3124 					  FALSE, FALSE, FALSE);
   3125 
   3126 		  free (new_name);
   3127 		  if (sym_hash == NULL)
   3128 		    continue;
   3129 
   3130 		  if (! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
   3131 		      && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
   3132 		    {
   3133 		      int bytes = 0;
   3134 
   3135 		      /* Note that we've changed things.  */
   3136 		      elf_section_data (section)->relocs = internal_relocs;
   3137 		      elf_section_data (section)->this_hdr.contents = contents;
   3138 		      symtab_hdr->contents = (unsigned char *) isymbuf;
   3139 
   3140 		      /* Count how many bytes we're going to delete.  */
   3141 		      if (sym_hash->movm_args)
   3142 			bytes += 2;
   3143 
   3144 		      if (sym_hash->stack_size > 0)
   3145 			{
   3146 			  if (sym_hash->stack_size <= 128)
   3147 			    bytes += 3;
   3148 			  else
   3149 			    bytes += 4;
   3150 			}
   3151 
   3152 		      /* Note that we've deleted prologue bytes for this
   3153 			 function.  */
   3154 		      sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
   3155 
   3156 		      /* Actually delete the bytes.  */
   3157 		      if (!mn10300_elf_relax_delete_bytes (input_bfd,
   3158 							   section,
   3159 							   isym->st_value,
   3160 							   bytes))
   3161 			goto error_return;
   3162 
   3163 		      /* Something changed.  Not strictly necessary, but
   3164 			 may lead to more relaxing opportunities.  */
   3165 		      *again = TRUE;
   3166 		    }
   3167 		}
   3168 
   3169 	      /* Look for any global functions in this section which
   3170 		 need insns deleted from their prologues.  */
   3171 	      symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
   3172 			  - symtab_hdr->sh_info);
   3173 	      hashes = elf_sym_hashes (input_bfd);
   3174 	      end_hashes = hashes + symcount;
   3175 	      for (; hashes < end_hashes; hashes++)
   3176 		{
   3177 		  struct elf32_mn10300_link_hash_entry *sym_hash;
   3178 
   3179 		  sym_hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
   3180 		  if ((sym_hash->root.root.type == bfd_link_hash_defined
   3181 		       || sym_hash->root.root.type == bfd_link_hash_defweak)
   3182 		      && sym_hash->root.root.u.def.section == section
   3183 		      && ! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
   3184 		      && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
   3185 		    {
   3186 		      int bytes = 0;
   3187 		      bfd_vma symval;
   3188 		      struct elf_link_hash_entry **hh;
   3189 
   3190 		      /* Note that we've changed things.  */
   3191 		      elf_section_data (section)->relocs = internal_relocs;
   3192 		      elf_section_data (section)->this_hdr.contents = contents;
   3193 		      symtab_hdr->contents = (unsigned char *) isymbuf;
   3194 
   3195 		      /* Count how many bytes we're going to delete.  */
   3196 		      if (sym_hash->movm_args)
   3197 			bytes += 2;
   3198 
   3199 		      if (sym_hash->stack_size > 0)
   3200 			{
   3201 			  if (sym_hash->stack_size <= 128)
   3202 			    bytes += 3;
   3203 			  else
   3204 			    bytes += 4;
   3205 			}
   3206 
   3207 		      /* Note that we've deleted prologue bytes for this
   3208 			 function.  */
   3209 		      sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
   3210 
   3211 		      /* Actually delete the bytes.  */
   3212 		      symval = sym_hash->root.root.u.def.value;
   3213 		      if (!mn10300_elf_relax_delete_bytes (input_bfd,
   3214 							   section,
   3215 							   symval,
   3216 							   bytes))
   3217 			goto error_return;
   3218 
   3219 		      /* There may be other C++ functions symbols with the same
   3220 			 address.  If so then mark these as having had their
   3221 			 prologue bytes deleted as well.  */
   3222 		      for (hh = elf_sym_hashes (input_bfd); hh < end_hashes; hh++)
   3223 			{
   3224 			  struct elf32_mn10300_link_hash_entry *h;
   3225 
   3226 			  h = (struct elf32_mn10300_link_hash_entry *) * hh;
   3227 
   3228 			  if (h != sym_hash
   3229 			      && (h->root.root.type == bfd_link_hash_defined
   3230 				  || h->root.root.type == bfd_link_hash_defweak)
   3231 			      && h->root.root.u.def.section == section
   3232 			      && ! (h->flags & MN10300_CONVERT_CALL_TO_CALLS)
   3233 			      && h->root.root.u.def.value == symval
   3234 			      && h->root.type == STT_FUNC)
   3235 			    h->flags |= MN10300_DELETED_PROLOGUE_BYTES;
   3236 			}
   3237 
   3238 		      /* Something changed.  Not strictly necessary, but
   3239 			 may lead to more relaxing opportunities.  */
   3240 		      *again = TRUE;
   3241 		    }
   3242 		}
   3243 
   3244 	      /* Cache or free any memory we allocated for the relocs.  */
   3245 	      if (internal_relocs != NULL
   3246 		  && elf_section_data (section)->relocs != internal_relocs)
   3247 		free (internal_relocs);
   3248 	      internal_relocs = NULL;
   3249 
   3250 	      /* Cache or free any memory we allocated for the contents.  */
   3251 	      if (contents != NULL
   3252 		  && elf_section_data (section)->this_hdr.contents != contents)
   3253 		{
   3254 		  if (! link_info->keep_memory)
   3255 		    free (contents);
   3256 		  else
   3257 		    /* Cache the section contents for elf_link_input_bfd.  */
   3258 		    elf_section_data (section)->this_hdr.contents = contents;
   3259 		}
   3260 	      contents = NULL;
   3261 	    }
   3262 
   3263 	  /* Cache or free any memory we allocated for the symbols.  */
   3264 	  if (isymbuf != NULL
   3265 	      && symtab_hdr->contents != (unsigned char *) isymbuf)
   3266 	    {
   3267 	      if (! link_info->keep_memory)
   3268 		free (isymbuf);
   3269 	      else
   3270 		/* Cache the symbols for elf_link_input_bfd.  */
   3271 		symtab_hdr->contents = (unsigned char *) isymbuf;
   3272 	    }
   3273 	  isymbuf = NULL;
   3274 	}
   3275     }
   3276 
   3277   /* (Re)initialize for the basic instruction shortening/relaxing pass.  */
   3278   contents = NULL;
   3279   internal_relocs = NULL;
   3280   isymbuf = NULL;
   3281   /* For error_return.  */
   3282   section = sec;
   3283 
   3284   /* We don't have to do anything for a relocatable link, if
   3285      this section does not have relocs, or if this is not a
   3286      code section.  */
   3287   if (bfd_link_relocatable (link_info)
   3288       || (sec->flags & SEC_RELOC) == 0
   3289       || sec->reloc_count == 0
   3290       || (sec->flags & SEC_CODE) == 0)
   3291     return TRUE;
   3292 
   3293   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   3294 
   3295   /* Get a copy of the native relocations.  */
   3296   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
   3297 					       link_info->keep_memory);
   3298   if (internal_relocs == NULL)
   3299     goto error_return;
   3300 
   3301   /* Scan for worst case alignment gap changes.  Note that this logic
   3302      is not ideal; what we should do is run this scan for every
   3303      opcode/address range and adjust accordingly, but that's
   3304      expensive.  Worst case is that for an alignment of N bytes, we
   3305      move by 2*N-N-1 bytes, assuming we have aligns of 1, 2, 4, 8, etc
   3306      all before it.  Plus, this still doesn't cover cross-section
   3307      jumps with section alignment.  */
   3308   irelend = internal_relocs + sec->reloc_count;
   3309   align_gap_adjustment = 0;
   3310   for (irel = internal_relocs; irel < irelend; irel++)
   3311     {
   3312       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN)
   3313 	{
   3314 	  bfd_vma adj = 1 << irel->r_addend;
   3315 	  bfd_vma aend = irel->r_offset;
   3316 
   3317 	  aend = BFD_ALIGN (aend, 1 << irel->r_addend);
   3318 	  adj = 2 * adj - adj - 1;
   3319 
   3320 	  /* Record the biggest adjustmnet.  Skip any alignment at the
   3321 	     end of our section.  */
   3322 	  if (align_gap_adjustment < adj
   3323 	      && aend < sec->output_section->vma + sec->output_offset + sec->size)
   3324 	    align_gap_adjustment = adj;
   3325 	}
   3326     }
   3327 
   3328   /* Walk through them looking for relaxing opportunities.  */
   3329   irelend = internal_relocs + sec->reloc_count;
   3330   for (irel = internal_relocs; irel < irelend; irel++)
   3331     {
   3332       bfd_vma symval;
   3333       bfd_signed_vma jump_offset;
   3334       asection *sym_sec = NULL;
   3335       struct elf32_mn10300_link_hash_entry *h = NULL;
   3336 
   3337       /* If this isn't something that can be relaxed, then ignore
   3338 	 this reloc.  */
   3339       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_NONE
   3340 	  || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_8
   3341 	  || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_MAX)
   3342 	continue;
   3343 
   3344       /* Get the section contents if we haven't done so already.  */
   3345       if (contents == NULL)
   3346 	{
   3347 	  /* Get cached copy if it exists.  */
   3348 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
   3349 	    contents = elf_section_data (sec)->this_hdr.contents;
   3350 	  else
   3351 	    {
   3352 	      /* Go get them off disk.  */
   3353 	      if (!bfd_malloc_and_get_section (abfd, sec, &contents))
   3354 		goto error_return;
   3355 	    }
   3356 	}
   3357 
   3358       /* Read this BFD's symbols if we haven't done so already.  */
   3359       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
   3360 	{
   3361 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   3362 	  if (isymbuf == NULL)
   3363 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
   3364 					    symtab_hdr->sh_info, 0,
   3365 					    NULL, NULL, NULL);
   3366 	  if (isymbuf == NULL)
   3367 	    goto error_return;
   3368 	}
   3369 
   3370       /* Get the value of the symbol referred to by the reloc.  */
   3371       if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
   3372 	{
   3373 	  Elf_Internal_Sym *isym;
   3374 	  const char *sym_name;
   3375 	  char *new_name;
   3376 
   3377 	  /* A local symbol.  */
   3378 	  isym = isymbuf + ELF32_R_SYM (irel->r_info);
   3379 	  if (isym->st_shndx == SHN_UNDEF)
   3380 	    sym_sec = bfd_und_section_ptr;
   3381 	  else if (isym->st_shndx == SHN_ABS)
   3382 	    sym_sec = bfd_abs_section_ptr;
   3383 	  else if (isym->st_shndx == SHN_COMMON)
   3384 	    sym_sec = bfd_com_section_ptr;
   3385 	  else
   3386 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
   3387 
   3388 	  sym_name = bfd_elf_string_from_elf_section (abfd,
   3389 						      symtab_hdr->sh_link,
   3390 						      isym->st_name);
   3391 
   3392 	  if ((sym_sec->flags & SEC_MERGE)
   3393 	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
   3394 	    {
   3395 	      symval = isym->st_value;
   3396 
   3397 	      /* GAS may reduce relocations against symbols in SEC_MERGE
   3398 		 sections to a relocation against the section symbol when
   3399 		 the original addend was zero.  When the reloc is against
   3400 		 a section symbol we should include the addend in the
   3401 		 offset passed to _bfd_merged_section_offset, since the
   3402 		 location of interest is the original symbol.  On the
   3403 		 other hand, an access to "sym+addend" where "sym" is not
   3404 		 a section symbol should not include the addend;  Such an
   3405 		 access is presumed to be an offset from "sym";  The
   3406 		 location of interest is just "sym".  */
   3407 	      if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
   3408 		symval += irel->r_addend;
   3409 
   3410 	      symval = _bfd_merged_section_offset (abfd, & sym_sec,
   3411 						   elf_section_data (sym_sec)->sec_info,
   3412 						   symval);
   3413 
   3414 	      if (ELF_ST_TYPE (isym->st_info) != STT_SECTION)
   3415 		symval += irel->r_addend;
   3416 
   3417 	      symval += sym_sec->output_section->vma
   3418 		+ sym_sec->output_offset - irel->r_addend;
   3419 	    }
   3420 	  else
   3421 	    symval = (isym->st_value
   3422 		      + sym_sec->output_section->vma
   3423 		      + sym_sec->output_offset);
   3424 
   3425 	  /* Tack on an ID so we can uniquely identify this
   3426 	     local symbol in the global hash table.  */
   3427 	  new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10);
   3428 	  if (new_name == NULL)
   3429 	    goto error_return;
   3430 	  sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
   3431 	  sym_name = new_name;
   3432 
   3433 	  h = (struct elf32_mn10300_link_hash_entry *)
   3434 		elf_link_hash_lookup (&hash_table->static_hash_table->root,
   3435 				      sym_name, FALSE, FALSE, FALSE);
   3436 	  free (new_name);
   3437 	}
   3438       else
   3439 	{
   3440 	  unsigned long indx;
   3441 
   3442 	  /* An external symbol.  */
   3443 	  indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
   3444 	  h = (struct elf32_mn10300_link_hash_entry *)
   3445 		(elf_sym_hashes (abfd)[indx]);
   3446 	  BFD_ASSERT (h != NULL);
   3447 	  if (h->root.root.type != bfd_link_hash_defined
   3448 	      && h->root.root.type != bfd_link_hash_defweak)
   3449 	    /* This appears to be a reference to an undefined
   3450 	       symbol.  Just ignore it--it will be caught by the
   3451 	       regular reloc processing.  */
   3452 	    continue;
   3453 
   3454 	  /* Check for a reference to a discarded symbol and ignore it.  */
   3455 	  if (h->root.root.u.def.section->output_section == NULL)
   3456 	    continue;
   3457 
   3458 	  sym_sec = h->root.root.u.def.section->output_section;
   3459 
   3460 	  symval = (h->root.root.u.def.value
   3461 		    + h->root.root.u.def.section->output_section->vma
   3462 		    + h->root.root.u.def.section->output_offset);
   3463 	}
   3464 
   3465       /* For simplicity of coding, we are going to modify the section
   3466 	 contents, the section relocs, and the BFD symbol table.  We
   3467 	 must tell the rest of the code not to free up this
   3468 	 information.  It would be possible to instead create a table
   3469 	 of changes which have to be made, as is done in coff-mips.c;
   3470 	 that would be more work, but would require less memory when
   3471 	 the linker is run.  */
   3472 
   3473       /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
   3474 	 branch/call, also deal with "call" -> "calls" conversions and
   3475 	 insertion of prologue data into "call" instructions.  */
   3476       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL32
   3477 	  || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32)
   3478 	{
   3479 	  bfd_vma value = symval;
   3480 
   3481 	  if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32
   3482 	      && h != NULL
   3483 	      && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
   3484 	      && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
   3485 	      && h->root.plt.offset != (bfd_vma) -1)
   3486 	    {
   3487 	      asection * splt;
   3488 
   3489 	      splt = hash_table->root.splt;
   3490 	      value = ((splt->output_section->vma
   3491 			+ splt->output_offset
   3492 			+ h->root.plt.offset)
   3493 		       - (sec->output_section->vma
   3494 			  + sec->output_offset
   3495 			  + irel->r_offset));
   3496 	    }
   3497 
   3498 	  /* If we've got a "call" instruction that needs to be turned
   3499 	     into a "calls" instruction, do so now.  It saves a byte.  */
   3500 	  if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
   3501 	    {
   3502 	      unsigned char code;
   3503 
   3504 	      /* Get the opcode.  */
   3505 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3506 
   3507 	      /* Make sure we're working with a "call" instruction!  */
   3508 	      if (code == 0xdd)
   3509 		{
   3510 		  /* Note that we've changed the relocs, section contents,
   3511 		     etc.  */
   3512 		  elf_section_data (sec)->relocs = internal_relocs;
   3513 		  elf_section_data (sec)->this_hdr.contents = contents;
   3514 		  symtab_hdr->contents = (unsigned char *) isymbuf;
   3515 
   3516 		  /* Fix the opcode.  */
   3517 		  bfd_put_8 (abfd, 0xfc, contents + irel->r_offset - 1);
   3518 		  bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
   3519 
   3520 		  /* Fix irel->r_offset and irel->r_addend.  */
   3521 		  irel->r_offset += 1;
   3522 		  irel->r_addend += 1;
   3523 
   3524 		  /* Delete one byte of data.  */
   3525 		  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3526 						       irel->r_offset + 3, 1))
   3527 		    goto error_return;
   3528 
   3529 		  /* That will change things, so, we should relax again.
   3530 		     Note that this is not required, and it may be slow.  */
   3531 		  *again = TRUE;
   3532 		}
   3533 	    }
   3534 	  else if (h)
   3535 	    {
   3536 	      /* We've got a "call" instruction which needs some data
   3537 		 from target function filled in.  */
   3538 	      unsigned char code;
   3539 
   3540 	      /* Get the opcode.  */
   3541 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3542 
   3543 	      /* Insert data from the target function into the "call"
   3544 		 instruction if needed.  */
   3545 	      if (code == 0xdd)
   3546 		{
   3547 		  bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 4);
   3548 		  bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
   3549 			     contents + irel->r_offset + 5);
   3550 		}
   3551 	    }
   3552 
   3553 	  /* Deal with pc-relative gunk.  */
   3554 	  value -= (sec->output_section->vma + sec->output_offset);
   3555 	  value -= irel->r_offset;
   3556 	  value += irel->r_addend;
   3557 
   3558 	  /* See if the value will fit in 16 bits, note the high value is
   3559 	     0x7fff + 2 as the target will be two bytes closer if we are
   3560 	     able to relax, if it's in the same section.  */
   3561 	  if (sec->output_section == sym_sec->output_section)
   3562 	    jump_offset = 0x8001;
   3563 	  else
   3564 	    jump_offset = 0x7fff;
   3565 
   3566 	  /* Account for jumps across alignment boundaries using
   3567 	     align_gap_adjustment.  */
   3568 	  if ((bfd_signed_vma) value < jump_offset - (bfd_signed_vma) align_gap_adjustment
   3569 	      && ((bfd_signed_vma) value > -0x8000 + (bfd_signed_vma) align_gap_adjustment))
   3570 	    {
   3571 	      unsigned char code;
   3572 
   3573 	      /* Get the opcode.  */
   3574 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3575 
   3576 	      if (code != 0xdc && code != 0xdd && code != 0xff)
   3577 		continue;
   3578 
   3579 	      /* Note that we've changed the relocs, section contents, etc.  */
   3580 	      elf_section_data (sec)->relocs = internal_relocs;
   3581 	      elf_section_data (sec)->this_hdr.contents = contents;
   3582 	      symtab_hdr->contents = (unsigned char *) isymbuf;
   3583 
   3584 	      /* Fix the opcode.  */
   3585 	      if (code == 0xdc)
   3586 		bfd_put_8 (abfd, 0xcc, contents + irel->r_offset - 1);
   3587 	      else if (code == 0xdd)
   3588 		bfd_put_8 (abfd, 0xcd, contents + irel->r_offset - 1);
   3589 	      else if (code == 0xff)
   3590 		bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
   3591 
   3592 	      /* Fix the relocation's type.  */
   3593 	      irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   3594 					   (ELF32_R_TYPE (irel->r_info)
   3595 					    == (int) R_MN10300_PLT32)
   3596 					   ? R_MN10300_PLT16 :
   3597 					   R_MN10300_PCREL16);
   3598 
   3599 	      /* Delete two bytes of data.  */
   3600 	      if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3601 						   irel->r_offset + 1, 2))
   3602 		goto error_return;
   3603 
   3604 	      /* That will change things, so, we should relax again.
   3605 		 Note that this is not required, and it may be slow.  */
   3606 	      *again = TRUE;
   3607 	    }
   3608 	}
   3609 
   3610       /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
   3611 	 branch.  */
   3612       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL16)
   3613 	{
   3614 	  bfd_vma value = symval;
   3615 
   3616 	  /* If we've got a "call" instruction that needs to be turned
   3617 	     into a "calls" instruction, do so now.  It saves a byte.  */
   3618 	  if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
   3619 	    {
   3620 	      unsigned char code;
   3621 
   3622 	      /* Get the opcode.  */
   3623 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3624 
   3625 	      /* Make sure we're working with a "call" instruction!  */
   3626 	      if (code == 0xcd)
   3627 		{
   3628 		  /* Note that we've changed the relocs, section contents,
   3629 		     etc.  */
   3630 		  elf_section_data (sec)->relocs = internal_relocs;
   3631 		  elf_section_data (sec)->this_hdr.contents = contents;
   3632 		  symtab_hdr->contents = (unsigned char *) isymbuf;
   3633 
   3634 		  /* Fix the opcode.  */
   3635 		  bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 1);
   3636 		  bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
   3637 
   3638 		  /* Fix irel->r_offset and irel->r_addend.  */
   3639 		  irel->r_offset += 1;
   3640 		  irel->r_addend += 1;
   3641 
   3642 		  /* Delete one byte of data.  */
   3643 		  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3644 						       irel->r_offset + 1, 1))
   3645 		    goto error_return;
   3646 
   3647 		  /* That will change things, so, we should relax again.
   3648 		     Note that this is not required, and it may be slow.  */
   3649 		  *again = TRUE;
   3650 		}
   3651 	    }
   3652 	  else if (h)
   3653 	    {
   3654 	      unsigned char code;
   3655 
   3656 	      /* Get the opcode.  */
   3657 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3658 
   3659 	      /* Insert data from the target function into the "call"
   3660 		 instruction if needed.  */
   3661 	      if (code == 0xcd)
   3662 		{
   3663 		  bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 2);
   3664 		  bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
   3665 			     contents + irel->r_offset + 3);
   3666 		}
   3667 	    }
   3668 
   3669 	  /* Deal with pc-relative gunk.  */
   3670 	  value -= (sec->output_section->vma + sec->output_offset);
   3671 	  value -= irel->r_offset;
   3672 	  value += irel->r_addend;
   3673 
   3674 	  /* See if the value will fit in 8 bits, note the high value is
   3675 	     0x7f + 1 as the target will be one bytes closer if we are
   3676 	     able to relax.  */
   3677 	  if ((long) value < 0x80 && (long) value > -0x80)
   3678 	    {
   3679 	      unsigned char code;
   3680 
   3681 	      /* Get the opcode.  */
   3682 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3683 
   3684 	      if (code != 0xcc)
   3685 		continue;
   3686 
   3687 	      /* Note that we've changed the relocs, section contents, etc.  */
   3688 	      elf_section_data (sec)->relocs = internal_relocs;
   3689 	      elf_section_data (sec)->this_hdr.contents = contents;
   3690 	      symtab_hdr->contents = (unsigned char *) isymbuf;
   3691 
   3692 	      /* Fix the opcode.  */
   3693 	      bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
   3694 
   3695 	      /* Fix the relocation's type.  */
   3696 	      irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   3697 					   R_MN10300_PCREL8);
   3698 
   3699 	      /* Delete one byte of data.  */
   3700 	      if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3701 						   irel->r_offset + 1, 1))
   3702 		goto error_return;
   3703 
   3704 	      /* That will change things, so, we should relax again.
   3705 		 Note that this is not required, and it may be slow.  */
   3706 	      *again = TRUE;
   3707 	    }
   3708 	}
   3709 
   3710       /* Try to eliminate an unconditional 8 bit pc-relative branch
   3711 	 which immediately follows a conditional 8 bit pc-relative
   3712 	 branch around the unconditional branch.
   3713 
   3714 	    original:		new:
   3715 	    bCC lab1		bCC' lab2
   3716 	    bra lab2
   3717 	   lab1:	       lab1:
   3718 
   3719 	 This happens when the bCC can't reach lab2 at assembly time,
   3720 	 but due to other relaxations it can reach at link time.  */
   3721       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
   3722 	{
   3723 	  Elf_Internal_Rela *nrel;
   3724 	  bfd_vma value = symval;
   3725 	  unsigned char code;
   3726 
   3727 	  /* Deal with pc-relative gunk.  */
   3728 	  value -= (sec->output_section->vma + sec->output_offset);
   3729 	  value -= irel->r_offset;
   3730 	  value += irel->r_addend;
   3731 
   3732 	  /* Do nothing if this reloc is the last byte in the section.  */
   3733 	  if (irel->r_offset == sec->size)
   3734 	    continue;
   3735 
   3736 	  /* See if the next instruction is an unconditional pc-relative
   3737 	     branch, more often than not this test will fail, so we
   3738 	     test it first to speed things up.  */
   3739 	  code = bfd_get_8 (abfd, contents + irel->r_offset + 1);
   3740 	  if (code != 0xca)
   3741 	    continue;
   3742 
   3743 	  /* Also make sure the next relocation applies to the next
   3744 	     instruction and that it's a pc-relative 8 bit branch.  */
   3745 	  nrel = irel + 1;
   3746 	  if (nrel == irelend
   3747 	      || irel->r_offset + 2 != nrel->r_offset
   3748 	      || ELF32_R_TYPE (nrel->r_info) != (int) R_MN10300_PCREL8)
   3749 	    continue;
   3750 
   3751 	  /* Make sure our destination immediately follows the
   3752 	     unconditional branch.  */
   3753 	  if (symval != (sec->output_section->vma + sec->output_offset
   3754 			 + irel->r_offset + 3))
   3755 	    continue;
   3756 
   3757 	  /* Now make sure we are a conditional branch.  This may not
   3758 	     be necessary, but why take the chance.
   3759 
   3760 	     Note these checks assume that R_MN10300_PCREL8 relocs
   3761 	     only occur on bCC and bCCx insns.  If they occured
   3762 	     elsewhere, we'd need to know the start of this insn
   3763 	     for this check to be accurate.  */
   3764 	  code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   3765 	  if (code != 0xc0 && code != 0xc1 && code != 0xc2
   3766 	      && code != 0xc3 && code != 0xc4 && code != 0xc5
   3767 	      && code != 0xc6 && code != 0xc7 && code != 0xc8
   3768 	      && code != 0xc9 && code != 0xe8 && code != 0xe9
   3769 	      && code != 0xea && code != 0xeb)
   3770 	    continue;
   3771 
   3772 	  /* We also have to be sure there is no symbol/label
   3773 	     at the unconditional branch.  */
   3774 	  if (mn10300_elf_symbol_address_p (abfd, sec, isymbuf,
   3775 					    irel->r_offset + 1))
   3776 	    continue;
   3777 
   3778 	  /* Note that we've changed the relocs, section contents, etc.  */
   3779 	  elf_section_data (sec)->relocs = internal_relocs;
   3780 	  elf_section_data (sec)->this_hdr.contents = contents;
   3781 	  symtab_hdr->contents = (unsigned char *) isymbuf;
   3782 
   3783 	  /* Reverse the condition of the first branch.  */
   3784 	  switch (code)
   3785 	    {
   3786 	    case 0xc8:
   3787 	      code = 0xc9;
   3788 	      break;
   3789 	    case 0xc9:
   3790 	      code = 0xc8;
   3791 	      break;
   3792 	    case 0xc0:
   3793 	      code = 0xc2;
   3794 	      break;
   3795 	    case 0xc2:
   3796 	      code = 0xc0;
   3797 	      break;
   3798 	    case 0xc3:
   3799 	      code = 0xc1;
   3800 	      break;
   3801 	    case 0xc1:
   3802 	      code = 0xc3;
   3803 	      break;
   3804 	    case 0xc4:
   3805 	      code = 0xc6;
   3806 	      break;
   3807 	    case 0xc6:
   3808 	      code = 0xc4;
   3809 	      break;
   3810 	    case 0xc7:
   3811 	      code = 0xc5;
   3812 	      break;
   3813 	    case 0xc5:
   3814 	      code = 0xc7;
   3815 	      break;
   3816 	    case 0xe8:
   3817 	      code = 0xe9;
   3818 	      break;
   3819 	    case 0x9d:
   3820 	      code = 0xe8;
   3821 	      break;
   3822 	    case 0xea:
   3823 	      code = 0xeb;
   3824 	      break;
   3825 	    case 0xeb:
   3826 	      code = 0xea;
   3827 	      break;
   3828 	    }
   3829 	  bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
   3830 
   3831 	  /* Set the reloc type and symbol for the first branch
   3832 	     from the second branch.  */
   3833 	  irel->r_info = nrel->r_info;
   3834 
   3835 	  /* Make the reloc for the second branch a null reloc.  */
   3836 	  nrel->r_info = ELF32_R_INFO (ELF32_R_SYM (nrel->r_info),
   3837 				       R_MN10300_NONE);
   3838 
   3839 	  /* Delete two bytes of data.  */
   3840 	  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3841 					       irel->r_offset + 1, 2))
   3842 	    goto error_return;
   3843 
   3844 	  /* That will change things, so, we should relax again.
   3845 	     Note that this is not required, and it may be slow.  */
   3846 	  *again = TRUE;
   3847 	}
   3848 
   3849       /* Try to turn a 24 immediate, displacement or absolute address
   3850 	 into a 8 immediate, displacement or absolute address.  */
   3851       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_24)
   3852 	{
   3853 	  bfd_vma value = symval;
   3854 	  value += irel->r_addend;
   3855 
   3856 	  /* See if the value will fit in 8 bits.  */
   3857 	  if ((long) value < 0x7f && (long) value > -0x80)
   3858 	    {
   3859 	      unsigned char code;
   3860 
   3861 	      /* AM33 insns which have 24 operands are 6 bytes long and
   3862 		 will have 0xfd as the first byte.  */
   3863 
   3864 	      /* Get the first opcode.  */
   3865 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
   3866 
   3867 	      if (code == 0xfd)
   3868 		{
   3869 		  /* Get the second opcode.  */
   3870 		  code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
   3871 
   3872 		  /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
   3873 		     equivalent instructions exists.  */
   3874 		  if (code != 0x6b && code != 0x7b
   3875 		      && code != 0x8b && code != 0x9b
   3876 		      && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
   3877 			  || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
   3878 			  || (code & 0x0f) == 0x0e))
   3879 		    {
   3880 		      /* Not safe if the high bit is on as relaxing may
   3881 			 move the value out of high mem and thus not fit
   3882 			 in a signed 8bit value.  This is currently over
   3883 			 conservative.  */
   3884 		      if ((value & 0x80) == 0)
   3885 			{
   3886 			  /* Note that we've changed the relocation contents,
   3887 			     etc.  */
   3888 			  elf_section_data (sec)->relocs = internal_relocs;
   3889 			  elf_section_data (sec)->this_hdr.contents = contents;
   3890 			  symtab_hdr->contents = (unsigned char *) isymbuf;
   3891 
   3892 			  /* Fix the opcode.  */
   3893 			  bfd_put_8 (abfd, 0xfb, contents + irel->r_offset - 3);
   3894 			  bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
   3895 
   3896 			  /* Fix the relocation's type.  */
   3897 			  irel->r_info =
   3898 			    ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   3899 					  R_MN10300_8);
   3900 
   3901 			  /* Delete two bytes of data.  */
   3902 			  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   3903 							       irel->r_offset + 1, 2))
   3904 			    goto error_return;
   3905 
   3906 			  /* That will change things, so, we should relax
   3907 			     again.  Note that this is not required, and it
   3908 			     may be slow.  */
   3909 			  *again = TRUE;
   3910 			  break;
   3911 			}
   3912 		    }
   3913 		}
   3914 	    }
   3915 	}
   3916 
   3917       /* Try to turn a 32bit immediate, displacement or absolute address
   3918 	 into a 16bit immediate, displacement or absolute address.  */
   3919       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32
   3920 	  || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32
   3921 	  || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
   3922 	{
   3923 	  bfd_vma value = symval;
   3924 
   3925 	  if (ELF32_R_TYPE (irel->r_info) != (int) R_MN10300_32)
   3926 	    {
   3927 	      asection * sgot;
   3928 
   3929 	      sgot = hash_table->root.sgot;
   3930 	      if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32)
   3931 		{
   3932 		  value = sgot->output_offset;
   3933 
   3934 		  if (h)
   3935 		    value += h->root.got.offset;
   3936 		  else
   3937 		    value += (elf_local_got_offsets
   3938 			      (abfd)[ELF32_R_SYM (irel->r_info)]);
   3939 		}
   3940 	      else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
   3941 		value -= sgot->output_section->vma;
   3942 	      else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTPC32)
   3943 		value = (sgot->output_section->vma
   3944 			 - (sec->output_section->vma
   3945 			    + sec->output_offset
   3946 			    + irel->r_offset));
   3947 	      else
   3948 		abort ();
   3949 	    }
   3950 
   3951 	  value += irel->r_addend;
   3952 
   3953 	  /* See if the value will fit in 24 bits.
   3954 	     We allow any 16bit match here.  We prune those we can't
   3955 	     handle below.  */
   3956 	  if ((long) value < 0x7fffff && (long) value > -0x800000)
   3957 	    {
   3958 	      unsigned char code;
   3959 
   3960 	      /* AM33 insns which have 32bit operands are 7 bytes long and
   3961 		 will have 0xfe as the first byte.  */
   3962 
   3963 	      /* Get the first opcode.  */
   3964 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
   3965 
   3966 	      if (code == 0xfe)
   3967 		{
   3968 		  /* Get the second opcode.  */
   3969 		  code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
   3970 
   3971 		  /* All the am33 32 -> 24 relaxing possibilities.  */
   3972 		  /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
   3973 		     equivalent instructions exists.  */
   3974 		  if (code != 0x6b && code != 0x7b
   3975 		      && code != 0x8b && code != 0x9b
   3976 		      && (ELF32_R_TYPE (irel->r_info)
   3977 			  != (int) R_MN10300_GOTPC32)
   3978 		      && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
   3979 			  || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
   3980 			  || (code & 0x0f) == 0x0e))
   3981 		    {
   3982 		      /* Not safe if the high bit is on as relaxing may
   3983 			 move the value out of high mem and thus not fit
   3984 			 in a signed 16bit value.  This is currently over
   3985 			 conservative.  */
   3986 		      if ((value & 0x8000) == 0)
   3987 			{
   3988 			  /* Note that we've changed the relocation contents,
   3989 			     etc.  */
   3990 			  elf_section_data (sec)->relocs = internal_relocs;
   3991 			  elf_section_data (sec)->this_hdr.contents = contents;
   3992 			  symtab_hdr->contents = (unsigned char *) isymbuf;
   3993 
   3994 			  /* Fix the opcode.  */
   3995 			  bfd_put_8 (abfd, 0xfd, contents + irel->r_offset - 3);
   3996 			  bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
   3997 
   3998 			  /* Fix the relocation's type.  */
   3999 			  irel->r_info =
   4000 			    ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4001 					  (ELF32_R_TYPE (irel->r_info)
   4002 					   == (int) R_MN10300_GOTOFF32)
   4003 					  ? R_MN10300_GOTOFF24
   4004 					  : (ELF32_R_TYPE (irel->r_info)
   4005 					     == (int) R_MN10300_GOT32)
   4006 					  ? R_MN10300_GOT24 :
   4007 					  R_MN10300_24);
   4008 
   4009 			  /* Delete one byte of data.  */
   4010 			  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4011 							       irel->r_offset + 3, 1))
   4012 			    goto error_return;
   4013 
   4014 			  /* That will change things, so, we should relax
   4015 			     again.  Note that this is not required, and it
   4016 			     may be slow.  */
   4017 			  *again = TRUE;
   4018 			  break;
   4019 			}
   4020 		    }
   4021 		}
   4022 	    }
   4023 
   4024 	  /* See if the value will fit in 16 bits.
   4025 	     We allow any 16bit match here.  We prune those we can't
   4026 	     handle below.  */
   4027 	  if ((long) value < 0x7fff && (long) value > -0x8000)
   4028 	    {
   4029 	      unsigned char code;
   4030 
   4031 	      /* Most insns which have 32bit operands are 6 bytes long;
   4032 		 exceptions are pcrel insns and bit insns.
   4033 
   4034 		 We handle pcrel insns above.  We don't bother trying
   4035 		 to handle the bit insns here.
   4036 
   4037 		 The first byte of the remaining insns will be 0xfc.  */
   4038 
   4039 	      /* Get the first opcode.  */
   4040 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
   4041 
   4042 	      if (code != 0xfc)
   4043 		continue;
   4044 
   4045 	      /* Get the second opcode.  */
   4046 	      code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
   4047 
   4048 	      if ((code & 0xf0) < 0x80)
   4049 		switch (code & 0xf0)
   4050 		  {
   4051 		  /* mov (d32,am),dn   -> mov (d32,am),dn
   4052 		     mov dm,(d32,am)   -> mov dn,(d32,am)
   4053 		     mov (d32,am),an   -> mov (d32,am),an
   4054 		     mov dm,(d32,am)   -> mov dn,(d32,am)
   4055 		     movbu (d32,am),dn -> movbu (d32,am),dn
   4056 		     movbu dm,(d32,am) -> movbu dn,(d32,am)
   4057 		     movhu (d32,am),dn -> movhu (d32,am),dn
   4058 		     movhu dm,(d32,am) -> movhu dn,(d32,am) */
   4059 		  case 0x00:
   4060 		  case 0x10:
   4061 		  case 0x20:
   4062 		  case 0x30:
   4063 		  case 0x40:
   4064 		  case 0x50:
   4065 		  case 0x60:
   4066 		  case 0x70:
   4067 		    /* Not safe if the high bit is on as relaxing may
   4068 		       move the value out of high mem and thus not fit
   4069 		       in a signed 16bit value.  */
   4070 		    if (code == 0xcc
   4071 			&& (value & 0x8000))
   4072 		      continue;
   4073 
   4074 		    /* Note that we've changed the relocation contents, etc.  */
   4075 		    elf_section_data (sec)->relocs = internal_relocs;
   4076 		    elf_section_data (sec)->this_hdr.contents = contents;
   4077 		    symtab_hdr->contents = (unsigned char *) isymbuf;
   4078 
   4079 		    /* Fix the opcode.  */
   4080 		    bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
   4081 		    bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
   4082 
   4083 		    /* Fix the relocation's type.  */
   4084 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4085 						 (ELF32_R_TYPE (irel->r_info)
   4086 						  == (int) R_MN10300_GOTOFF32)
   4087 						 ? R_MN10300_GOTOFF16
   4088 						 : (ELF32_R_TYPE (irel->r_info)
   4089 						    == (int) R_MN10300_GOT32)
   4090 						 ? R_MN10300_GOT16
   4091 						 : (ELF32_R_TYPE (irel->r_info)
   4092 						    == (int) R_MN10300_GOTPC32)
   4093 						 ? R_MN10300_GOTPC16 :
   4094 						 R_MN10300_16);
   4095 
   4096 		    /* Delete two bytes of data.  */
   4097 		    if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4098 							 irel->r_offset + 2, 2))
   4099 		      goto error_return;
   4100 
   4101 		    /* That will change things, so, we should relax again.
   4102 		       Note that this is not required, and it may be slow.  */
   4103 		    *again = TRUE;
   4104 		    break;
   4105 		  }
   4106 	      else if ((code & 0xf0) == 0x80
   4107 		       || (code & 0xf0) == 0x90)
   4108 		switch (code & 0xf3)
   4109 		  {
   4110 		  /* mov dn,(abs32)   -> mov dn,(abs16)
   4111 		     movbu dn,(abs32) -> movbu dn,(abs16)
   4112 		     movhu dn,(abs32) -> movhu dn,(abs16)  */
   4113 		  case 0x81:
   4114 		  case 0x82:
   4115 		  case 0x83:
   4116 		    /* Note that we've changed the relocation contents, etc.  */
   4117 		    elf_section_data (sec)->relocs = internal_relocs;
   4118 		    elf_section_data (sec)->this_hdr.contents = contents;
   4119 		    symtab_hdr->contents = (unsigned char *) isymbuf;
   4120 
   4121 		    if ((code & 0xf3) == 0x81)
   4122 		      code = 0x01 + (code & 0x0c);
   4123 		    else if ((code & 0xf3) == 0x82)
   4124 		      code = 0x02 + (code & 0x0c);
   4125 		    else if ((code & 0xf3) == 0x83)
   4126 		      code = 0x03 + (code & 0x0c);
   4127 		    else
   4128 		      abort ();
   4129 
   4130 		    /* Fix the opcode.  */
   4131 		    bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
   4132 
   4133 		    /* Fix the relocation's type.  */
   4134 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4135 						 (ELF32_R_TYPE (irel->r_info)
   4136 						  == (int) R_MN10300_GOTOFF32)
   4137 						 ? R_MN10300_GOTOFF16
   4138 						 : (ELF32_R_TYPE (irel->r_info)
   4139 						    == (int) R_MN10300_GOT32)
   4140 						 ? R_MN10300_GOT16
   4141 						 : (ELF32_R_TYPE (irel->r_info)
   4142 						    == (int) R_MN10300_GOTPC32)
   4143 						 ? R_MN10300_GOTPC16 :
   4144 						 R_MN10300_16);
   4145 
   4146 		    /* The opcode got shorter too, so we have to fix the
   4147 		       addend and offset too!  */
   4148 		    irel->r_offset -= 1;
   4149 
   4150 		    /* Delete three bytes of data.  */
   4151 		    if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4152 							 irel->r_offset + 1, 3))
   4153 		      goto error_return;
   4154 
   4155 		    /* That will change things, so, we should relax again.
   4156 		       Note that this is not required, and it may be slow.  */
   4157 		    *again = TRUE;
   4158 		    break;
   4159 
   4160 		  /* mov am,(abs32)    -> mov am,(abs16)
   4161 		     mov am,(d32,sp)   -> mov am,(d16,sp)
   4162 		     mov dm,(d32,sp)   -> mov dm,(d32,sp)
   4163 		     movbu dm,(d32,sp) -> movbu dm,(d32,sp)
   4164 		     movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
   4165 		  case 0x80:
   4166 		  case 0x90:
   4167 		  case 0x91:
   4168 		  case 0x92:
   4169 		  case 0x93:
   4170 		    /* sp-based offsets are zero-extended.  */
   4171 		    if (code >= 0x90 && code <= 0x93
   4172 			&& (long) value < 0)
   4173 		      continue;
   4174 
   4175 		    /* Note that we've changed the relocation contents, etc.  */
   4176 		    elf_section_data (sec)->relocs = internal_relocs;
   4177 		    elf_section_data (sec)->this_hdr.contents = contents;
   4178 		    symtab_hdr->contents = (unsigned char *) isymbuf;
   4179 
   4180 		    /* Fix the opcode.  */
   4181 		    bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
   4182 		    bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
   4183 
   4184 		    /* Fix the relocation's type.  */
   4185 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4186 						 (ELF32_R_TYPE (irel->r_info)
   4187 						  == (int) R_MN10300_GOTOFF32)
   4188 						 ? R_MN10300_GOTOFF16
   4189 						 : (ELF32_R_TYPE (irel->r_info)
   4190 						    == (int) R_MN10300_GOT32)
   4191 						 ? R_MN10300_GOT16
   4192 						 : (ELF32_R_TYPE (irel->r_info)
   4193 						    == (int) R_MN10300_GOTPC32)
   4194 						 ? R_MN10300_GOTPC16 :
   4195 						 R_MN10300_16);
   4196 
   4197 		    /* Delete two bytes of data.  */
   4198 		    if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4199 							 irel->r_offset + 2, 2))
   4200 		      goto error_return;
   4201 
   4202 		    /* That will change things, so, we should relax again.
   4203 		       Note that this is not required, and it may be slow.  */
   4204 		    *again = TRUE;
   4205 		    break;
   4206 		  }
   4207 	      else if ((code & 0xf0) < 0xf0)
   4208 		switch (code & 0xfc)
   4209 		  {
   4210 		  /* mov imm32,dn     -> mov imm16,dn
   4211 		     mov imm32,an     -> mov imm16,an
   4212 		     mov (abs32),dn   -> mov (abs16),dn
   4213 		     movbu (abs32),dn -> movbu (abs16),dn
   4214 		     movhu (abs32),dn -> movhu (abs16),dn  */
   4215 		  case 0xcc:
   4216 		  case 0xdc:
   4217 		  case 0xa4:
   4218 		  case 0xa8:
   4219 		  case 0xac:
   4220 		    /* Not safe if the high bit is on as relaxing may
   4221 		       move the value out of high mem and thus not fit
   4222 		       in a signed 16bit value.  */
   4223 		    if (code == 0xcc
   4224 			&& (value & 0x8000))
   4225 		      continue;
   4226 
   4227 		    /* "mov imm16, an" zero-extends the immediate.  */
   4228 		    if ((code & 0xfc) == 0xdc
   4229 			&& (long) value < 0)
   4230 		      continue;
   4231 
   4232 		    /* Note that we've changed the relocation contents, etc.  */
   4233 		    elf_section_data (sec)->relocs = internal_relocs;
   4234 		    elf_section_data (sec)->this_hdr.contents = contents;
   4235 		    symtab_hdr->contents = (unsigned char *) isymbuf;
   4236 
   4237 		    if ((code & 0xfc) == 0xcc)
   4238 		      code = 0x2c + (code & 0x03);
   4239 		    else if ((code & 0xfc) == 0xdc)
   4240 		      code = 0x24 + (code & 0x03);
   4241 		    else if ((code & 0xfc) == 0xa4)
   4242 		      code = 0x30 + (code & 0x03);
   4243 		    else if ((code & 0xfc) == 0xa8)
   4244 		      code = 0x34 + (code & 0x03);
   4245 		    else if ((code & 0xfc) == 0xac)
   4246 		      code = 0x38 + (code & 0x03);
   4247 		    else
   4248 		      abort ();
   4249 
   4250 		    /* Fix the opcode.  */
   4251 		    bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
   4252 
   4253 		    /* Fix the relocation's type.  */
   4254 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4255 						 (ELF32_R_TYPE (irel->r_info)
   4256 						  == (int) R_MN10300_GOTOFF32)
   4257 						 ? R_MN10300_GOTOFF16
   4258 						 : (ELF32_R_TYPE (irel->r_info)
   4259 						    == (int) R_MN10300_GOT32)
   4260 						 ? R_MN10300_GOT16
   4261 						 : (ELF32_R_TYPE (irel->r_info)
   4262 						    == (int) R_MN10300_GOTPC32)
   4263 						 ? R_MN10300_GOTPC16 :
   4264 						 R_MN10300_16);
   4265 
   4266 		    /* The opcode got shorter too, so we have to fix the
   4267 		       addend and offset too!  */
   4268 		    irel->r_offset -= 1;
   4269 
   4270 		    /* Delete three bytes of data.  */
   4271 		    if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4272 							 irel->r_offset + 1, 3))
   4273 		      goto error_return;
   4274 
   4275 		    /* That will change things, so, we should relax again.
   4276 		       Note that this is not required, and it may be slow.  */
   4277 		    *again = TRUE;
   4278 		    break;
   4279 
   4280 		  /* mov (abs32),an    -> mov (abs16),an
   4281 		     mov (d32,sp),an   -> mov (d16,sp),an
   4282 		     mov (d32,sp),dn   -> mov (d16,sp),dn
   4283 		     movbu (d32,sp),dn -> movbu (d16,sp),dn
   4284 		     movhu (d32,sp),dn -> movhu (d16,sp),dn
   4285 		     add imm32,dn      -> add imm16,dn
   4286 		     cmp imm32,dn      -> cmp imm16,dn
   4287 		     add imm32,an      -> add imm16,an
   4288 		     cmp imm32,an      -> cmp imm16,an
   4289 		     and imm32,dn      -> and imm16,dn
   4290 		     or imm32,dn       -> or imm16,dn
   4291 		     xor imm32,dn      -> xor imm16,dn
   4292 		     btst imm32,dn     -> btst imm16,dn */
   4293 
   4294 		  case 0xa0:
   4295 		  case 0xb0:
   4296 		  case 0xb1:
   4297 		  case 0xb2:
   4298 		  case 0xb3:
   4299 		  case 0xc0:
   4300 		  case 0xc8:
   4301 
   4302 		  case 0xd0:
   4303 		  case 0xd8:
   4304 		  case 0xe0:
   4305 		  case 0xe1:
   4306 		  case 0xe2:
   4307 		  case 0xe3:
   4308 		    /* cmp imm16, an zero-extends the immediate.  */
   4309 		    if (code == 0xdc
   4310 			&& (long) value < 0)
   4311 		      continue;
   4312 
   4313 		    /* So do sp-based offsets.  */
   4314 		    if (code >= 0xb0 && code <= 0xb3
   4315 			&& (long) value < 0)
   4316 		      continue;
   4317 
   4318 		    /* Note that we've changed the relocation contents, etc.  */
   4319 		    elf_section_data (sec)->relocs = internal_relocs;
   4320 		    elf_section_data (sec)->this_hdr.contents = contents;
   4321 		    symtab_hdr->contents = (unsigned char *) isymbuf;
   4322 
   4323 		    /* Fix the opcode.  */
   4324 		    bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
   4325 		    bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
   4326 
   4327 		    /* Fix the relocation's type.  */
   4328 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4329 						 (ELF32_R_TYPE (irel->r_info)
   4330 						  == (int) R_MN10300_GOTOFF32)
   4331 						 ? R_MN10300_GOTOFF16
   4332 						 : (ELF32_R_TYPE (irel->r_info)
   4333 						    == (int) R_MN10300_GOT32)
   4334 						 ? R_MN10300_GOT16
   4335 						 : (ELF32_R_TYPE (irel->r_info)
   4336 						    == (int) R_MN10300_GOTPC32)
   4337 						 ? R_MN10300_GOTPC16 :
   4338 						 R_MN10300_16);
   4339 
   4340 		    /* Delete two bytes of data.  */
   4341 		    if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4342 							 irel->r_offset + 2, 2))
   4343 		      goto error_return;
   4344 
   4345 		    /* That will change things, so, we should relax again.
   4346 		       Note that this is not required, and it may be slow.  */
   4347 		    *again = TRUE;
   4348 		    break;
   4349 		  }
   4350 	      else if (code == 0xfe)
   4351 		{
   4352 		  /* add imm32,sp -> add imm16,sp  */
   4353 
   4354 		  /* Note that we've changed the relocation contents, etc.  */
   4355 		  elf_section_data (sec)->relocs = internal_relocs;
   4356 		  elf_section_data (sec)->this_hdr.contents = contents;
   4357 		  symtab_hdr->contents = (unsigned char *) isymbuf;
   4358 
   4359 		  /* Fix the opcode.  */
   4360 		  bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
   4361 		  bfd_put_8 (abfd, 0xfe, contents + irel->r_offset - 1);
   4362 
   4363 		  /* Fix the relocation's type.  */
   4364 		  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
   4365 					       (ELF32_R_TYPE (irel->r_info)
   4366 						== (int) R_MN10300_GOT32)
   4367 					       ? R_MN10300_GOT16
   4368 					       : (ELF32_R_TYPE (irel->r_info)
   4369 						  == (int) R_MN10300_GOTOFF32)
   4370 					       ? R_MN10300_GOTOFF16
   4371 					       : (ELF32_R_TYPE (irel->r_info)
   4372 						  == (int) R_MN10300_GOTPC32)
   4373 					       ? R_MN10300_GOTPC16 :
   4374 					       R_MN10300_16);
   4375 
   4376 		  /* Delete two bytes of data.  */
   4377 		  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
   4378 						       irel->r_offset + 2, 2))
   4379 		    goto error_return;
   4380 
   4381 		  /* That will change things, so, we should relax again.
   4382 		     Note that this is not required, and it may be slow.  */
   4383 		  *again = TRUE;
   4384 		  break;
   4385 		}
   4386 	    }
   4387 	}
   4388     }
   4389 
   4390   if (isymbuf != NULL
   4391       && symtab_hdr->contents != (unsigned char *) isymbuf)
   4392     {
   4393       if (! link_info->keep_memory)
   4394 	free (isymbuf);
   4395       else
   4396 	{
   4397 	  /* Cache the symbols for elf_link_input_bfd.  */
   4398 	  symtab_hdr->contents = (unsigned char *) isymbuf;
   4399 	}
   4400     }
   4401 
   4402   if (contents != NULL
   4403       && elf_section_data (sec)->this_hdr.contents != contents)
   4404     {
   4405       if (! link_info->keep_memory)
   4406 	free (contents);
   4407       else
   4408 	{
   4409 	  /* Cache the section contents for elf_link_input_bfd.  */
   4410 	  elf_section_data (sec)->this_hdr.contents = contents;
   4411 	}
   4412     }
   4413 
   4414   if (internal_relocs != NULL
   4415       && elf_section_data (sec)->relocs != internal_relocs)
   4416     free (internal_relocs);
   4417 
   4418   return TRUE;
   4419 
   4420  error_return:
   4421   if (isymbuf != NULL
   4422       && symtab_hdr->contents != (unsigned char *) isymbuf)
   4423     free (isymbuf);
   4424   if (contents != NULL
   4425       && elf_section_data (section)->this_hdr.contents != contents)
   4426     free (contents);
   4427   if (internal_relocs != NULL
   4428       && elf_section_data (section)->relocs != internal_relocs)
   4429     free (internal_relocs);
   4430 
   4431   return FALSE;
   4432 }
   4433 
   4434 /* This is a version of bfd_generic_get_relocated_section_contents
   4435    which uses mn10300_elf_relocate_section.  */
   4436 
   4437 static bfd_byte *
   4438 mn10300_elf_get_relocated_section_contents (bfd *output_bfd,
   4439 					    struct bfd_link_info *link_info,
   4440 					    struct bfd_link_order *link_order,
   4441 					    bfd_byte *data,
   4442 					    bfd_boolean relocatable,
   4443 					    asymbol **symbols)
   4444 {
   4445   Elf_Internal_Shdr *symtab_hdr;
   4446   asection *input_section = link_order->u.indirect.section;
   4447   bfd *input_bfd = input_section->owner;
   4448   asection **sections = NULL;
   4449   Elf_Internal_Rela *internal_relocs = NULL;
   4450   Elf_Internal_Sym *isymbuf = NULL;
   4451 
   4452   /* We only need to handle the case of relaxing, or of having a
   4453      particular set of section contents, specially.  */
   4454   if (relocatable
   4455       || elf_section_data (input_section)->this_hdr.contents == NULL)
   4456     return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
   4457 						       link_order, data,
   4458 						       relocatable,
   4459 						       symbols);
   4460 
   4461   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   4462 
   4463   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
   4464 	  (size_t) input_section->size);
   4465 
   4466   if ((input_section->flags & SEC_RELOC) != 0
   4467       && input_section->reloc_count > 0)
   4468     {
   4469       asection **secpp;
   4470       Elf_Internal_Sym *isym, *isymend;
   4471       bfd_size_type amt;
   4472 
   4473       internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
   4474 						   NULL, NULL, FALSE);
   4475       if (internal_relocs == NULL)
   4476 	goto error_return;
   4477 
   4478       if (symtab_hdr->sh_info != 0)
   4479 	{
   4480 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   4481 	  if (isymbuf == NULL)
   4482 	    isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
   4483 					    symtab_hdr->sh_info, 0,
   4484 					    NULL, NULL, NULL);
   4485 	  if (isymbuf == NULL)
   4486 	    goto error_return;
   4487 	}
   4488 
   4489       amt = symtab_hdr->sh_info;
   4490       amt *= sizeof (asection *);
   4491       sections = bfd_malloc (amt);
   4492       if (sections == NULL && amt != 0)
   4493 	goto error_return;
   4494 
   4495       isymend = isymbuf + symtab_hdr->sh_info;
   4496       for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
   4497 	{
   4498 	  asection *isec;
   4499 
   4500 	  if (isym->st_shndx == SHN_UNDEF)
   4501 	    isec = bfd_und_section_ptr;
   4502 	  else if (isym->st_shndx == SHN_ABS)
   4503 	    isec = bfd_abs_section_ptr;
   4504 	  else if (isym->st_shndx == SHN_COMMON)
   4505 	    isec = bfd_com_section_ptr;
   4506 	  else
   4507 	    isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
   4508 
   4509 	  *secpp = isec;
   4510 	}
   4511 
   4512       if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd,
   4513 					  input_section, data, internal_relocs,
   4514 					  isymbuf, sections))
   4515 	goto error_return;
   4516 
   4517       if (sections != NULL)
   4518 	free (sections);
   4519       if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
   4520 	free (isymbuf);
   4521       if (internal_relocs != elf_section_data (input_section)->relocs)
   4522 	free (internal_relocs);
   4523     }
   4524 
   4525   return data;
   4526 
   4527  error_return:
   4528   if (sections != NULL)
   4529     free (sections);
   4530   if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
   4531     free (isymbuf);
   4532   if (internal_relocs != NULL
   4533       && internal_relocs != elf_section_data (input_section)->relocs)
   4534     free (internal_relocs);
   4535   return NULL;
   4536 }
   4537 
   4538 /* Assorted hash table functions.  */
   4539 
   4540 /* Initialize an entry in the link hash table.  */
   4541 
   4542 /* Create an entry in an MN10300 ELF linker hash table.  */
   4543 
   4544 static struct bfd_hash_entry *
   4545 elf32_mn10300_link_hash_newfunc (struct bfd_hash_entry *entry,
   4546 				 struct bfd_hash_table *table,
   4547 				 const char *string)
   4548 {
   4549   struct elf32_mn10300_link_hash_entry *ret =
   4550     (struct elf32_mn10300_link_hash_entry *) entry;
   4551 
   4552   /* Allocate the structure if it has not already been allocated by a
   4553      subclass.  */
   4554   if (ret == NULL)
   4555     ret = (struct elf32_mn10300_link_hash_entry *)
   4556 	   bfd_hash_allocate (table, sizeof (* ret));
   4557   if (ret == NULL)
   4558     return (struct bfd_hash_entry *) ret;
   4559 
   4560   /* Call the allocation method of the superclass.  */
   4561   ret = (struct elf32_mn10300_link_hash_entry *)
   4562 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
   4563 				     table, string);
   4564   if (ret != NULL)
   4565     {
   4566       ret->direct_calls = 0;
   4567       ret->stack_size = 0;
   4568       ret->movm_args = 0;
   4569       ret->movm_stack_size = 0;
   4570       ret->flags = 0;
   4571       ret->value = 0;
   4572       ret->tls_type = GOT_UNKNOWN;
   4573     }
   4574 
   4575   return (struct bfd_hash_entry *) ret;
   4576 }
   4577 
   4578 static void
   4579 _bfd_mn10300_copy_indirect_symbol (struct bfd_link_info *        info,
   4580 				   struct elf_link_hash_entry *  dir,
   4581 				   struct elf_link_hash_entry *  ind)
   4582 {
   4583   struct elf32_mn10300_link_hash_entry * edir;
   4584   struct elf32_mn10300_link_hash_entry * eind;
   4585 
   4586   edir = elf_mn10300_hash_entry (dir);
   4587   eind = elf_mn10300_hash_entry (ind);
   4588 
   4589   if (ind->root.type == bfd_link_hash_indirect
   4590       && dir->got.refcount <= 0)
   4591     {
   4592       edir->tls_type = eind->tls_type;
   4593       eind->tls_type = GOT_UNKNOWN;
   4594     }
   4595   edir->direct_calls = eind->direct_calls;
   4596   edir->stack_size = eind->stack_size;
   4597   edir->movm_args = eind->movm_args;
   4598   edir->movm_stack_size = eind->movm_stack_size;
   4599   edir->flags = eind->flags;
   4600 
   4601   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
   4602 }
   4603 
   4604 /* Destroy an mn10300 ELF linker hash table.  */
   4605 
   4606 static void
   4607 elf32_mn10300_link_hash_table_free (bfd *obfd)
   4608 {
   4609   struct elf32_mn10300_link_hash_table *ret
   4610     = (struct elf32_mn10300_link_hash_table *) obfd->link.hash;
   4611 
   4612   obfd->link.hash = &ret->static_hash_table->root.root;
   4613   _bfd_elf_link_hash_table_free (obfd);
   4614   obfd->is_linker_output = TRUE;
   4615   obfd->link.hash = &ret->root.root;
   4616   _bfd_elf_link_hash_table_free (obfd);
   4617 }
   4618 
   4619 /* Create an mn10300 ELF linker hash table.  */
   4620 
   4621 static struct bfd_link_hash_table *
   4622 elf32_mn10300_link_hash_table_create (bfd *abfd)
   4623 {
   4624   struct elf32_mn10300_link_hash_table *ret;
   4625   bfd_size_type amt = sizeof (* ret);
   4626 
   4627   ret = bfd_zmalloc (amt);
   4628   if (ret == NULL)
   4629     return NULL;
   4630 
   4631   amt = sizeof (struct elf_link_hash_table);
   4632   ret->static_hash_table = bfd_zmalloc (amt);
   4633   if (ret->static_hash_table == NULL)
   4634     {
   4635       free (ret);
   4636       return NULL;
   4637     }
   4638 
   4639   if (!_bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
   4640 				      elf32_mn10300_link_hash_newfunc,
   4641 				      sizeof (struct elf32_mn10300_link_hash_entry),
   4642 				      MN10300_ELF_DATA))
   4643     {
   4644       free (ret->static_hash_table);
   4645       free (ret);
   4646       return NULL;
   4647     }
   4648 
   4649   abfd->is_linker_output = FALSE;
   4650   abfd->link.hash = NULL;
   4651   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
   4652 				      elf32_mn10300_link_hash_newfunc,
   4653 				      sizeof (struct elf32_mn10300_link_hash_entry),
   4654 				      MN10300_ELF_DATA))
   4655     {
   4656       abfd->is_linker_output = TRUE;
   4657       abfd->link.hash = &ret->static_hash_table->root.root;
   4658       _bfd_elf_link_hash_table_free (abfd);
   4659       free (ret);
   4660       return NULL;
   4661     }
   4662   ret->root.root.hash_table_free = elf32_mn10300_link_hash_table_free;
   4663 
   4664   ret->tls_ldm_got.offset = -1;
   4665 
   4666   return & ret->root.root;
   4667 }
   4668 
   4669 static unsigned long
   4670 elf_mn10300_mach (flagword flags)
   4671 {
   4672   switch (flags & EF_MN10300_MACH)
   4673     {
   4674     case E_MN10300_MACH_MN10300:
   4675     default:
   4676       return bfd_mach_mn10300;
   4677 
   4678     case E_MN10300_MACH_AM33:
   4679       return bfd_mach_am33;
   4680 
   4681     case E_MN10300_MACH_AM33_2:
   4682       return bfd_mach_am33_2;
   4683     }
   4684 }
   4685 
   4686 /* The final processing done just before writing out a MN10300 ELF object
   4687    file.  This gets the MN10300 architecture right based on the machine
   4688    number.  */
   4689 
   4690 static void
   4691 _bfd_mn10300_elf_final_write_processing (bfd *abfd,
   4692 					 bfd_boolean linker ATTRIBUTE_UNUSED)
   4693 {
   4694   unsigned long val;
   4695 
   4696   switch (bfd_get_mach (abfd))
   4697     {
   4698     default:
   4699     case bfd_mach_mn10300:
   4700       val = E_MN10300_MACH_MN10300;
   4701       break;
   4702 
   4703     case bfd_mach_am33:
   4704       val = E_MN10300_MACH_AM33;
   4705       break;
   4706 
   4707     case bfd_mach_am33_2:
   4708       val = E_MN10300_MACH_AM33_2;
   4709       break;
   4710     }
   4711 
   4712   elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
   4713   elf_elfheader (abfd)->e_flags |= val;
   4714 }
   4715 
   4716 static bfd_boolean
   4717 _bfd_mn10300_elf_object_p (bfd *abfd)
   4718 {
   4719   bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
   4720 			     elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
   4721   return TRUE;
   4722 }
   4723 
   4724 /* Merge backend specific data from an object file to the output
   4725    object file when linking.  */
   4726 
   4727 static bfd_boolean
   4728 _bfd_mn10300_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   4729 {
   4730   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
   4731       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
   4732     return TRUE;
   4733 
   4734   if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
   4735       && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
   4736     {
   4737       if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
   4738 			       bfd_get_mach (ibfd)))
   4739 	return FALSE;
   4740     }
   4741 
   4742   return TRUE;
   4743 }
   4744 
   4745 #define PLT0_ENTRY_SIZE     15
   4746 #define PLT_ENTRY_SIZE      20
   4747 #define PIC_PLT_ENTRY_SIZE  24
   4748 
   4749 static const bfd_byte elf_mn10300_plt0_entry[PLT0_ENTRY_SIZE] =
   4750 {
   4751   0xfc, 0xa0, 0, 0, 0, 0,	/* mov	(.got+8),a0 */
   4752   0xfe, 0xe, 0x10, 0, 0, 0, 0,	/* mov	(.got+4),r1 */
   4753   0xf0, 0xf4,			/* jmp	(a0) */
   4754 };
   4755 
   4756 static const bfd_byte elf_mn10300_plt_entry[PLT_ENTRY_SIZE] =
   4757 {
   4758   0xfc, 0xa0, 0, 0, 0, 0,	/* mov	(nameN@GOT + .got),a0 */
   4759   0xf0, 0xf4,			/* jmp	(a0) */
   4760   0xfe, 8, 0, 0, 0, 0, 0,	/* mov	reloc-table-address,r0 */
   4761   0xdc, 0, 0, 0, 0,		/* jmp	.plt0 */
   4762 };
   4763 
   4764 static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] =
   4765 {
   4766   0xfc, 0x22, 0, 0, 0, 0,	/* mov	(nameN@GOT,a2),a0 */
   4767   0xf0, 0xf4,			/* jmp	(a0) */
   4768   0xfe, 8, 0, 0, 0, 0, 0,	/* mov	reloc-table-address,r0 */
   4769   0xf8, 0x22, 8,		/* mov	(8,a2),a0 */
   4770   0xfb, 0xa, 0x1a, 4,		/* mov	(4,a2),r1 */
   4771   0xf0, 0xf4,			/* jmp	(a0) */
   4772 };
   4773 
   4774 /* Return size of the first PLT entry.  */
   4775 #define elf_mn10300_sizeof_plt0(info) \
   4776   (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE)
   4777 
   4778 /* Return size of a PLT entry.  */
   4779 #define elf_mn10300_sizeof_plt(info) \
   4780   (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE)
   4781 
   4782 /* Return offset of the PLT0 address in an absolute PLT entry.  */
   4783 #define elf_mn10300_plt_plt0_offset(info) 16
   4784 
   4785 /* Return offset of the linker in PLT0 entry.  */
   4786 #define elf_mn10300_plt0_linker_offset(info) 2
   4787 
   4788 /* Return offset of the GOT id in PLT0 entry.  */
   4789 #define elf_mn10300_plt0_gotid_offset(info) 9
   4790 
   4791 /* Return offset of the temporary in PLT entry.  */
   4792 #define elf_mn10300_plt_temp_offset(info) 8
   4793 
   4794 /* Return offset of the symbol in PLT entry.  */
   4795 #define elf_mn10300_plt_symbol_offset(info) 2
   4796 
   4797 /* Return offset of the relocation in PLT entry.  */
   4798 #define elf_mn10300_plt_reloc_offset(info) 11
   4799 
   4800 /* The name of the dynamic interpreter.  This is put in the .interp
   4801    section.  */
   4802 
   4803 #define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
   4804 
   4805 /* Create dynamic sections when linking against a dynamic object.  */
   4806 
   4807 static bfd_boolean
   4808 _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   4809 {
   4810   flagword   flags;
   4811   asection * s;
   4812   const struct elf_backend_data * bed = get_elf_backend_data (abfd);
   4813   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   4814   int ptralign = 0;
   4815 
   4816   switch (bed->s->arch_size)
   4817     {
   4818     case 32:
   4819       ptralign = 2;
   4820       break;
   4821 
   4822     case 64:
   4823       ptralign = 3;
   4824       break;
   4825 
   4826     default:
   4827       bfd_set_error (bfd_error_bad_value);
   4828       return FALSE;
   4829     }
   4830 
   4831   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
   4832      .rel[a].bss sections.  */
   4833   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
   4834 	   | SEC_LINKER_CREATED);
   4835 
   4836   s = bfd_make_section_anyway_with_flags (abfd,
   4837 					  (bed->default_use_rela_p
   4838 					   ? ".rela.plt" : ".rel.plt"),
   4839 					  flags | SEC_READONLY);
   4840   htab->root.srelplt = s;
   4841   if (s == NULL
   4842       || ! bfd_set_section_alignment (abfd, s, ptralign))
   4843     return FALSE;
   4844 
   4845   if (! _bfd_mn10300_elf_create_got_section (abfd, info))
   4846     return FALSE;
   4847 
   4848   if (bed->want_dynbss)
   4849     {
   4850       /* The .dynbss section is a place to put symbols which are defined
   4851 	 by dynamic objects, are referenced by regular objects, and are
   4852 	 not functions.  We must allocate space for them in the process
   4853 	 image and use a R_*_COPY reloc to tell the dynamic linker to
   4854 	 initialize them at run time.  The linker script puts the .dynbss
   4855 	 section into the .bss section of the final image.  */
   4856       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
   4857 					      SEC_ALLOC | SEC_LINKER_CREATED);
   4858       if (s == NULL)
   4859 	return FALSE;
   4860 
   4861       /* The .rel[a].bss section holds copy relocs.  This section is not
   4862 	 normally needed.  We need to create it here, though, so that the
   4863 	 linker will map it to an output section.  We can't just create it
   4864 	 only if we need it, because we will not know whether we need it
   4865 	 until we have seen all the input files, and the first time the
   4866 	 main linker code calls BFD after examining all the input files
   4867 	 (size_dynamic_sections) the input sections have already been
   4868 	 mapped to the output sections.  If the section turns out not to
   4869 	 be needed, we can discard it later.  We will never need this
   4870 	 section when generating a shared object, since they do not use
   4871 	 copy relocs.  */
   4872       if (! bfd_link_pic (info))
   4873 	{
   4874 	  s = bfd_make_section_anyway_with_flags (abfd,
   4875 						  (bed->default_use_rela_p
   4876 						   ? ".rela.bss" : ".rel.bss"),
   4877 						  flags | SEC_READONLY);
   4878 	  if (s == NULL
   4879 	      || ! bfd_set_section_alignment (abfd, s, ptralign))
   4880 	    return FALSE;
   4881 	}
   4882     }
   4883 
   4884   return TRUE;
   4885 }
   4886 
   4887 /* Adjust a symbol defined by a dynamic object and referenced by a
   4889    regular object.  The current definition is in some section of the
   4890    dynamic object, but we're not including those sections.  We have to
   4891    change the definition to something the rest of the link can
   4892    understand.  */
   4893 
   4894 static bfd_boolean
   4895 _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
   4896 					struct elf_link_hash_entry * h)
   4897 {
   4898   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   4899   bfd * dynobj;
   4900   asection * s;
   4901 
   4902   dynobj = htab->root.dynobj;
   4903 
   4904   /* Make sure we know what is going on here.  */
   4905   BFD_ASSERT (dynobj != NULL
   4906 	      && (h->needs_plt
   4907 		  || h->u.weakdef != NULL
   4908 		  || (h->def_dynamic
   4909 		      && h->ref_regular
   4910 		      && !h->def_regular)));
   4911 
   4912   /* If this is a function, put it in the procedure linkage table.  We
   4913      will fill in the contents of the procedure linkage table later,
   4914      when we know the address of the .got section.  */
   4915   if (h->type == STT_FUNC
   4916       || h->needs_plt)
   4917     {
   4918       if (! bfd_link_pic (info)
   4919 	  && !h->def_dynamic
   4920 	  && !h->ref_dynamic)
   4921 	{
   4922 	  /* This case can occur if we saw a PLT reloc in an input
   4923 	     file, but the symbol was never referred to by a dynamic
   4924 	     object.  In such a case, we don't actually need to build
   4925 	     a procedure linkage table, and we can just do a REL32
   4926 	     reloc instead.  */
   4927 	  BFD_ASSERT (h->needs_plt);
   4928 	  return TRUE;
   4929 	}
   4930 
   4931       /* Make sure this symbol is output as a dynamic symbol.  */
   4932       if (h->dynindx == -1)
   4933 	{
   4934 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
   4935 	    return FALSE;
   4936 	}
   4937 
   4938       s = htab->root.splt;
   4939       BFD_ASSERT (s != NULL);
   4940 
   4941       /* If this is the first .plt entry, make room for the special
   4942 	 first entry.  */
   4943       if (s->size == 0)
   4944 	s->size += elf_mn10300_sizeof_plt0 (info);
   4945 
   4946       /* If this symbol is not defined in a regular file, and we are
   4947 	 not generating a shared library, then set the symbol to this
   4948 	 location in the .plt.  This is required to make function
   4949 	 pointers compare as equal between the normal executable and
   4950 	 the shared library.  */
   4951       if (! bfd_link_pic (info)
   4952 	  && !h->def_regular)
   4953 	{
   4954 	  h->root.u.def.section = s;
   4955 	  h->root.u.def.value = s->size;
   4956 	}
   4957 
   4958       h->plt.offset = s->size;
   4959 
   4960       /* Make room for this entry.  */
   4961       s->size += elf_mn10300_sizeof_plt (info);
   4962 
   4963       /* We also need to make an entry in the .got.plt section, which
   4964 	 will be placed in the .got section by the linker script.  */
   4965       s = htab->root.sgotplt;
   4966       BFD_ASSERT (s != NULL);
   4967       s->size += 4;
   4968 
   4969       /* We also need to make an entry in the .rela.plt section.  */
   4970       s = bfd_get_linker_section (dynobj, ".rela.plt");
   4971       BFD_ASSERT (s != NULL);
   4972       s->size += sizeof (Elf32_External_Rela);
   4973 
   4974       return TRUE;
   4975     }
   4976 
   4977   /* If this is a weak symbol, and there is a real definition, the
   4978      processor independent code will have arranged for us to see the
   4979      real definition first, and we can just use the same value.  */
   4980   if (h->u.weakdef != NULL)
   4981     {
   4982       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
   4983 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
   4984       h->root.u.def.section = h->u.weakdef->root.u.def.section;
   4985       h->root.u.def.value = h->u.weakdef->root.u.def.value;
   4986       return TRUE;
   4987     }
   4988 
   4989   /* This is a reference to a symbol defined by a dynamic object which
   4990      is not a function.  */
   4991 
   4992   /* If we are creating a shared library, we must presume that the
   4993      only references to the symbol are via the global offset table.
   4994      For such cases we need not do anything here; the relocations will
   4995      be handled correctly by relocate_section.  */
   4996   if (bfd_link_pic (info))
   4997     return TRUE;
   4998 
   4999   /* If there are no references to this symbol that do not use the
   5000      GOT, we don't need to generate a copy reloc.  */
   5001   if (!h->non_got_ref)
   5002     return TRUE;
   5003 
   5004   /* We must allocate the symbol in our .dynbss section, which will
   5005      become part of the .bss section of the executable.  There will be
   5006      an entry for this symbol in the .dynsym section.  The dynamic
   5007      object will contain position independent code, so all references
   5008      from the dynamic object to this symbol will go through the global
   5009      offset table.  The dynamic linker will use the .dynsym entry to
   5010      determine the address it must put in the global offset table, so
   5011      both the dynamic object and the regular object will refer to the
   5012      same memory location for the variable.  */
   5013 
   5014   s = bfd_get_linker_section (dynobj, ".dynbss");
   5015   BFD_ASSERT (s != NULL);
   5016 
   5017   /* We must generate a R_MN10300_COPY reloc to tell the dynamic linker to
   5018      copy the initial value out of the dynamic object and into the
   5019      runtime process image.  We need to remember the offset into the
   5020      .rela.bss section we are going to use.  */
   5021   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
   5022     {
   5023       asection * srel;
   5024 
   5025       srel = bfd_get_linker_section (dynobj, ".rela.bss");
   5026       BFD_ASSERT (srel != NULL);
   5027       srel->size += sizeof (Elf32_External_Rela);
   5028       h->needs_copy = 1;
   5029     }
   5030 
   5031   return _bfd_elf_adjust_dynamic_copy (info, h, s);
   5032 }
   5033 
   5034 /* Set the sizes of the dynamic sections.  */
   5035 
   5036 static bfd_boolean
   5037 _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
   5038 					struct bfd_link_info * info)
   5039 {
   5040   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   5041   bfd * dynobj;
   5042   asection * s;
   5043   bfd_boolean plt;
   5044   bfd_boolean relocs;
   5045   bfd_boolean reltext;
   5046 
   5047   dynobj = htab->root.dynobj;
   5048   BFD_ASSERT (dynobj != NULL);
   5049 
   5050   if (elf_hash_table (info)->dynamic_sections_created)
   5051     {
   5052       /* Set the contents of the .interp section to the interpreter.  */
   5053       if (bfd_link_executable (info))
   5054 	{
   5055 	  s = bfd_get_linker_section (dynobj, ".interp");
   5056 	  BFD_ASSERT (s != NULL);
   5057 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
   5058 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
   5059 	}
   5060     }
   5061   else
   5062     {
   5063       /* We may have created entries in the .rela.got section.
   5064 	 However, if we are not creating the dynamic sections, we will
   5065 	 not actually use these entries.  Reset the size of .rela.got,
   5066 	 which will cause it to get stripped from the output file
   5067 	 below.  */
   5068       s = htab->root.sgot;
   5069       if (s != NULL)
   5070 	s->size = 0;
   5071     }
   5072 
   5073   if (htab->tls_ldm_got.refcount > 0)
   5074     {
   5075       s = bfd_get_linker_section (dynobj, ".rela.got");
   5076       BFD_ASSERT (s != NULL);
   5077       s->size += sizeof (Elf32_External_Rela);
   5078     }
   5079 
   5080   /* The check_relocs and adjust_dynamic_symbol entry points have
   5081      determined the sizes of the various dynamic sections.  Allocate
   5082      memory for them.  */
   5083   plt = FALSE;
   5084   relocs = FALSE;
   5085   reltext = FALSE;
   5086   for (s = dynobj->sections; s != NULL; s = s->next)
   5087     {
   5088       const char * name;
   5089 
   5090       if ((s->flags & SEC_LINKER_CREATED) == 0)
   5091 	continue;
   5092 
   5093       /* It's OK to base decisions on the section name, because none
   5094 	 of the dynobj section names depend upon the input files.  */
   5095       name = bfd_get_section_name (dynobj, s);
   5096 
   5097       if (streq (name, ".plt"))
   5098 	{
   5099 	  /* Remember whether there is a PLT.  */
   5100 	  plt = s->size != 0;
   5101 	}
   5102       else if (CONST_STRNEQ (name, ".rela"))
   5103 	{
   5104 	  if (s->size != 0)
   5105 	    {
   5106 	      asection * target;
   5107 
   5108 	      /* Remember whether there are any reloc sections other
   5109 		 than .rela.plt.  */
   5110 	      if (! streq (name, ".rela.plt"))
   5111 		{
   5112 		  const char * outname;
   5113 
   5114 		  relocs = TRUE;
   5115 
   5116 		  /* If this relocation section applies to a read only
   5117 		     section, then we probably need a DT_TEXTREL
   5118 		     entry.  The entries in the .rela.plt section
   5119 		     really apply to the .got section, which we
   5120 		     created ourselves and so know is not readonly.  */
   5121 		  outname = bfd_get_section_name (output_bfd,
   5122 						  s->output_section);
   5123 		  target = bfd_get_section_by_name (output_bfd, outname + 5);
   5124 		  if (target != NULL
   5125 		      && (target->flags & SEC_READONLY) != 0
   5126 		      && (target->flags & SEC_ALLOC) != 0)
   5127 		    reltext = TRUE;
   5128 		}
   5129 
   5130 	      /* We use the reloc_count field as a counter if we need
   5131 		 to copy relocs into the output file.  */
   5132 	      s->reloc_count = 0;
   5133 	    }
   5134 	}
   5135       else if (! CONST_STRNEQ (name, ".got")
   5136 	       && ! streq (name, ".dynbss"))
   5137 	/* It's not one of our sections, so don't allocate space.  */
   5138 	continue;
   5139 
   5140       if (s->size == 0)
   5141 	{
   5142 	  /* If we don't need this section, strip it from the
   5143 	     output file.  This is mostly to handle .rela.bss and
   5144 	     .rela.plt.  We must create both sections in
   5145 	     create_dynamic_sections, because they must be created
   5146 	     before the linker maps input sections to output
   5147 	     sections.  The linker does that before
   5148 	     adjust_dynamic_symbol is called, and it is that
   5149 	     function which decides whether anything needs to go
   5150 	     into these sections.  */
   5151 	  s->flags |= SEC_EXCLUDE;
   5152 	  continue;
   5153 	}
   5154 
   5155 	if ((s->flags & SEC_HAS_CONTENTS) == 0)
   5156 	  continue;
   5157 
   5158       /* Allocate memory for the section contents.  We use bfd_zalloc
   5159 	 here in case unused entries are not reclaimed before the
   5160 	 section's contents are written out.  This should not happen,
   5161 	 but this way if it does, we get a R_MN10300_NONE reloc
   5162 	 instead of garbage.  */
   5163       s->contents = bfd_zalloc (dynobj, s->size);
   5164       if (s->contents == NULL)
   5165 	return FALSE;
   5166     }
   5167 
   5168   if (elf_hash_table (info)->dynamic_sections_created)
   5169     {
   5170       /* Add some entries to the .dynamic section.  We fill in the
   5171 	 values later, in _bfd_mn10300_elf_finish_dynamic_sections,
   5172 	 but we must add the entries now so that we get the correct
   5173 	 size for the .dynamic section.  The DT_DEBUG entry is filled
   5174 	 in by the dynamic linker and used by the debugger.  */
   5175       if (! bfd_link_pic (info))
   5176 	{
   5177 	  if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
   5178 	    return FALSE;
   5179 	}
   5180 
   5181       if (plt)
   5182 	{
   5183 	  if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
   5184 	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
   5185 	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
   5186 	      || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
   5187 	    return FALSE;
   5188 	}
   5189 
   5190       if (relocs)
   5191 	{
   5192 	  if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
   5193 	      || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
   5194 	      || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
   5195 					      sizeof (Elf32_External_Rela)))
   5196 	    return FALSE;
   5197 	}
   5198 
   5199       if (reltext)
   5200 	{
   5201 	  if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
   5202 	    return FALSE;
   5203 	}
   5204     }
   5205 
   5206   return TRUE;
   5207 }
   5208 
   5209 /* Finish up dynamic symbol handling.  We set the contents of various
   5210    dynamic sections here.  */
   5211 
   5212 static bfd_boolean
   5213 _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
   5214 					struct bfd_link_info * info,
   5215 					struct elf_link_hash_entry * h,
   5216 					Elf_Internal_Sym * sym)
   5217 {
   5218   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   5219   bfd * dynobj;
   5220 
   5221   dynobj = htab->root.dynobj;
   5222 
   5223   if (h->plt.offset != (bfd_vma) -1)
   5224     {
   5225       asection *        splt;
   5226       asection *        sgot;
   5227       asection *        srel;
   5228       bfd_vma           plt_index;
   5229       bfd_vma           got_offset;
   5230       Elf_Internal_Rela rel;
   5231 
   5232       /* This symbol has an entry in the procedure linkage table.  Set
   5233 	 it up.  */
   5234 
   5235       BFD_ASSERT (h->dynindx != -1);
   5236 
   5237       splt = htab->root.splt;
   5238       sgot = htab->root.sgotplt;
   5239       srel = bfd_get_linker_section (dynobj, ".rela.plt");
   5240       BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
   5241 
   5242       /* Get the index in the procedure linkage table which
   5243 	 corresponds to this symbol.  This is the index of this symbol
   5244 	 in all the symbols for which we are making plt entries.  The
   5245 	 first entry in the procedure linkage table is reserved.  */
   5246       plt_index = ((h->plt.offset - elf_mn10300_sizeof_plt0 (info))
   5247 		   / elf_mn10300_sizeof_plt (info));
   5248 
   5249       /* Get the offset into the .got table of the entry that
   5250 	 corresponds to this function.  Each .got entry is 4 bytes.
   5251 	 The first three are reserved.  */
   5252       got_offset = (plt_index + 3) * 4;
   5253 
   5254       /* Fill in the entry in the procedure linkage table.  */
   5255       if (! bfd_link_pic (info))
   5256 	{
   5257 	  memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry,
   5258 		  elf_mn10300_sizeof_plt (info));
   5259 	  bfd_put_32 (output_bfd,
   5260 		      (sgot->output_section->vma
   5261 		       + sgot->output_offset
   5262 		       + got_offset),
   5263 		      (splt->contents + h->plt.offset
   5264 		       + elf_mn10300_plt_symbol_offset (info)));
   5265 
   5266 	  bfd_put_32 (output_bfd,
   5267 		      (1 - h->plt.offset - elf_mn10300_plt_plt0_offset (info)),
   5268 		      (splt->contents + h->plt.offset
   5269 		       + elf_mn10300_plt_plt0_offset (info)));
   5270 	}
   5271       else
   5272 	{
   5273 	  memcpy (splt->contents + h->plt.offset, elf_mn10300_pic_plt_entry,
   5274 		  elf_mn10300_sizeof_plt (info));
   5275 
   5276 	  bfd_put_32 (output_bfd, got_offset,
   5277 		      (splt->contents + h->plt.offset
   5278 		       + elf_mn10300_plt_symbol_offset (info)));
   5279 	}
   5280 
   5281       bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
   5282 		  (splt->contents + h->plt.offset
   5283 		   + elf_mn10300_plt_reloc_offset (info)));
   5284 
   5285       /* Fill in the entry in the global offset table.  */
   5286       bfd_put_32 (output_bfd,
   5287 		  (splt->output_section->vma
   5288 		   + splt->output_offset
   5289 		   + h->plt.offset
   5290 		   + elf_mn10300_plt_temp_offset (info)),
   5291 		  sgot->contents + got_offset);
   5292 
   5293       /* Fill in the entry in the .rela.plt section.  */
   5294       rel.r_offset = (sgot->output_section->vma
   5295 		      + sgot->output_offset
   5296 		      + got_offset);
   5297       rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_JMP_SLOT);
   5298       rel.r_addend = 0;
   5299       bfd_elf32_swap_reloca_out (output_bfd, &rel,
   5300 				 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
   5301 					       + plt_index));
   5302 
   5303       if (!h->def_regular)
   5304 	/* Mark the symbol as undefined, rather than as defined in
   5305 	   the .plt section.  Leave the value alone.  */
   5306 	sym->st_shndx = SHN_UNDEF;
   5307     }
   5308 
   5309   if (h->got.offset != (bfd_vma) -1)
   5310     {
   5311       asection *        sgot;
   5312       asection *        srel;
   5313       Elf_Internal_Rela rel;
   5314 
   5315       /* This symbol has an entry in the global offset table.  Set it up.  */
   5316       sgot = htab->root.sgot;
   5317       srel = bfd_get_linker_section (dynobj, ".rela.got");
   5318       BFD_ASSERT (sgot != NULL && srel != NULL);
   5319 
   5320       rel.r_offset = (sgot->output_section->vma
   5321 		      + sgot->output_offset
   5322 		      + (h->got.offset & ~1));
   5323 
   5324       switch (elf_mn10300_hash_entry (h)->tls_type)
   5325 	{
   5326 	case GOT_TLS_GD:
   5327 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
   5328 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset + 4);
   5329 	  rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPMOD);
   5330 	  rel.r_addend = 0;
   5331 	  bfd_elf32_swap_reloca_out (output_bfd, & rel,
   5332 				     (bfd_byte *) ((Elf32_External_Rela *) srel->contents
   5333 						   + srel->reloc_count));
   5334 	  ++ srel->reloc_count;
   5335 	  rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPOFF);
   5336 	  rel.r_offset += 4;
   5337 	  rel.r_addend = 0;
   5338 	  break;
   5339 
   5340 	case GOT_TLS_IE:
   5341 	  /* We originally stored the addend in the GOT, but at this
   5342 	     point, we want to move it to the reloc instead as that's
   5343 	     where the dynamic linker wants it.  */
   5344 	  rel.r_addend = bfd_get_32 (output_bfd, sgot->contents + h->got.offset);
   5345 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
   5346 	  if (h->dynindx == -1)
   5347 	    rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
   5348 	  else
   5349 	    rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_TPOFF);
   5350 	  break;
   5351 
   5352 	default:
   5353 	  /* If this is a -Bsymbolic link, and the symbol is defined
   5354 	     locally, we just want to emit a RELATIVE reloc.  Likewise if
   5355 	     the symbol was forced to be local because of a version file.
   5356 	     The entry in the global offset table will already have been
   5357 	     initialized in the relocate_section function.  */
   5358 	  if (bfd_link_pic (info)
   5359 	      && (info->symbolic || h->dynindx == -1)
   5360 	      && h->def_regular)
   5361 	    {
   5362 	      rel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
   5363 	      rel.r_addend = (h->root.u.def.value
   5364 			      + h->root.u.def.section->output_section->vma
   5365 			      + h->root.u.def.section->output_offset);
   5366 	    }
   5367 	  else
   5368 	    {
   5369 	      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
   5370 	      rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_GLOB_DAT);
   5371 	      rel.r_addend = 0;
   5372 	    }
   5373 	}
   5374 
   5375       if (ELF32_R_TYPE (rel.r_info) != R_MN10300_NONE)
   5376 	{
   5377 	  bfd_elf32_swap_reloca_out (output_bfd, &rel,
   5378 				     (bfd_byte *) ((Elf32_External_Rela *) srel->contents
   5379 						   + srel->reloc_count));
   5380 	  ++ srel->reloc_count;
   5381 	}
   5382     }
   5383 
   5384   if (h->needs_copy)
   5385     {
   5386       asection *        s;
   5387       Elf_Internal_Rela rel;
   5388 
   5389       /* This symbol needs a copy reloc.  Set it up.  */
   5390       BFD_ASSERT (h->dynindx != -1
   5391 		  && (h->root.type == bfd_link_hash_defined
   5392 		      || h->root.type == bfd_link_hash_defweak));
   5393 
   5394       s = bfd_get_linker_section (dynobj, ".rela.bss");
   5395       BFD_ASSERT (s != NULL);
   5396 
   5397       rel.r_offset = (h->root.u.def.value
   5398 		      + h->root.u.def.section->output_section->vma
   5399 		      + h->root.u.def.section->output_offset);
   5400       rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_COPY);
   5401       rel.r_addend = 0;
   5402       bfd_elf32_swap_reloca_out (output_bfd, & rel,
   5403 				 (bfd_byte *) ((Elf32_External_Rela *) s->contents
   5404 					       + s->reloc_count));
   5405       ++ s->reloc_count;
   5406     }
   5407 
   5408   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
   5409   if (h == elf_hash_table (info)->hdynamic
   5410       || h == elf_hash_table (info)->hgot)
   5411     sym->st_shndx = SHN_ABS;
   5412 
   5413   return TRUE;
   5414 }
   5415 
   5416 /* Finish up the dynamic sections.  */
   5417 
   5418 static bfd_boolean
   5419 _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
   5420 					  struct bfd_link_info * info)
   5421 {
   5422   bfd *      dynobj;
   5423   asection * sgot;
   5424   asection * sdyn;
   5425   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   5426 
   5427   dynobj = htab->root.dynobj;
   5428   sgot = htab->root.sgotplt;
   5429   BFD_ASSERT (sgot != NULL);
   5430   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   5431 
   5432   if (elf_hash_table (info)->dynamic_sections_created)
   5433     {
   5434       asection *           splt;
   5435       Elf32_External_Dyn * dyncon;
   5436       Elf32_External_Dyn * dynconend;
   5437 
   5438       BFD_ASSERT (sdyn != NULL);
   5439 
   5440       dyncon = (Elf32_External_Dyn *) sdyn->contents;
   5441       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
   5442 
   5443       for (; dyncon < dynconend; dyncon++)
   5444 	{
   5445 	  Elf_Internal_Dyn dyn;
   5446 	  const char * name;
   5447 	  asection * s;
   5448 
   5449 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
   5450 
   5451 	  switch (dyn.d_tag)
   5452 	    {
   5453 	    default:
   5454 	      break;
   5455 
   5456 	    case DT_PLTGOT:
   5457 	      name = ".got";
   5458 	      goto get_vma;
   5459 
   5460 	    case DT_JMPREL:
   5461 	      name = ".rela.plt";
   5462 	    get_vma:
   5463 	      s = bfd_get_linker_section (dynobj, name);
   5464 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
   5465 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   5466 	      break;
   5467 
   5468 	    case DT_PLTRELSZ:
   5469 	      s = bfd_get_linker_section (dynobj, ".rela.plt");
   5470 	      dyn.d_un.d_val = s->size;
   5471 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   5472 	      break;
   5473 
   5474 	    case DT_RELASZ:
   5475 	      /* My reading of the SVR4 ABI indicates that the
   5476 		 procedure linkage table relocs (DT_JMPREL) should be
   5477 		 included in the overall relocs (DT_RELA).  This is
   5478 		 what Solaris does.  However, UnixWare can not handle
   5479 		 that case.  Therefore, we override the DT_RELASZ entry
   5480 		 here to make it not include the JMPREL relocs.  Since
   5481 		 the linker script arranges for .rela.plt to follow all
   5482 		 other relocation sections, we don't have to worry
   5483 		 about changing the DT_RELA entry.  */
   5484 	      s = bfd_get_linker_section (dynobj, ".rela.plt");
   5485 	      if (s != NULL)
   5486 		dyn.d_un.d_val -= s->size;
   5487 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   5488 	      break;
   5489 	    }
   5490 	}
   5491 
   5492       /* Fill in the first entry in the procedure linkage table.  */
   5493       splt = htab->root.splt;
   5494       if (splt && splt->size > 0)
   5495 	{
   5496 	  if (bfd_link_pic (info))
   5497 	    {
   5498 	      memcpy (splt->contents, elf_mn10300_pic_plt_entry,
   5499 		      elf_mn10300_sizeof_plt (info));
   5500 	    }
   5501 	  else
   5502 	    {
   5503 	      memcpy (splt->contents, elf_mn10300_plt0_entry, PLT0_ENTRY_SIZE);
   5504 	      bfd_put_32 (output_bfd,
   5505 			  sgot->output_section->vma + sgot->output_offset + 4,
   5506 			  splt->contents + elf_mn10300_plt0_gotid_offset (info));
   5507 	      bfd_put_32 (output_bfd,
   5508 			  sgot->output_section->vma + sgot->output_offset + 8,
   5509 			  splt->contents + elf_mn10300_plt0_linker_offset (info));
   5510 	    }
   5511 
   5512 	  /* UnixWare sets the entsize of .plt to 4, although that doesn't
   5513 	     really seem like the right value.  */
   5514 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
   5515 
   5516 	  /* UnixWare sets the entsize of .plt to 4, but this is incorrect
   5517 	     as it means that the size of the PLT0 section (15 bytes) is not
   5518 	     a multiple of the sh_entsize.  Some ELF tools flag this as an
   5519 	     error.  We could pad PLT0 to 16 bytes, but that would introduce
   5520 	     compatibilty issues with previous toolchains, so instead we
   5521 	     just set the entry size to 1.  */
   5522 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 1;
   5523 	}
   5524     }
   5525 
   5526   /* Fill in the first three entries in the global offset table.  */
   5527   if (sgot->size > 0)
   5528     {
   5529       if (sdyn == NULL)
   5530 	bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
   5531       else
   5532 	bfd_put_32 (output_bfd,
   5533 		    sdyn->output_section->vma + sdyn->output_offset,
   5534 		    sgot->contents);
   5535       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
   5536       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
   5537     }
   5538 
   5539   elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
   5540 
   5541   return TRUE;
   5542 }
   5543 
   5544 /* Classify relocation types, such that combreloc can sort them
   5545    properly.  */
   5546 
   5547 static enum elf_reloc_type_class
   5548 _bfd_mn10300_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
   5549 				   const asection *rel_sec ATTRIBUTE_UNUSED,
   5550 				   const Elf_Internal_Rela *rela)
   5551 {
   5552   switch ((int) ELF32_R_TYPE (rela->r_info))
   5553     {
   5554     case R_MN10300_RELATIVE:	return reloc_class_relative;
   5555     case R_MN10300_JMP_SLOT:	return reloc_class_plt;
   5556     case R_MN10300_COPY:	return reloc_class_copy;
   5557     default:			return reloc_class_normal;
   5558     }
   5559 }
   5560 
   5561 /* Allocate space for an MN10300 extension to the bfd elf data structure.  */
   5562 
   5563 static bfd_boolean
   5564 mn10300_elf_mkobject (bfd *abfd)
   5565 {
   5566   return bfd_elf_allocate_object (abfd, sizeof (struct elf_mn10300_obj_tdata),
   5567 				  MN10300_ELF_DATA);
   5568 }
   5569 
   5570 #define bfd_elf32_mkobject	mn10300_elf_mkobject
   5571 
   5572 #ifndef ELF_ARCH
   5573 #define TARGET_LITTLE_SYM	mn10300_elf32_vec
   5574 #define TARGET_LITTLE_NAME	"elf32-mn10300"
   5575 #define ELF_ARCH		bfd_arch_mn10300
   5576 #define ELF_TARGET_ID		MN10300_ELF_DATA
   5577 #define ELF_MACHINE_CODE	EM_MN10300
   5578 #define ELF_MACHINE_ALT1	EM_CYGNUS_MN10300
   5579 #define ELF_MAXPAGESIZE		0x1000
   5580 #endif
   5581 
   5582 #define elf_info_to_howto		mn10300_info_to_howto
   5583 #define elf_info_to_howto_rel		0
   5584 #define elf_backend_can_gc_sections	1
   5585 #define elf_backend_rela_normal		1
   5586 #define elf_backend_check_relocs	mn10300_elf_check_relocs
   5587 #define elf_backend_gc_mark_hook	mn10300_elf_gc_mark_hook
   5588 #define elf_backend_relocate_section	mn10300_elf_relocate_section
   5589 #define bfd_elf32_bfd_relax_section	mn10300_elf_relax_section
   5590 #define bfd_elf32_bfd_get_relocated_section_contents \
   5591 				mn10300_elf_get_relocated_section_contents
   5592 #define bfd_elf32_bfd_link_hash_table_create \
   5593 				elf32_mn10300_link_hash_table_create
   5594 
   5595 #ifndef elf_symbol_leading_char
   5596 #define elf_symbol_leading_char '_'
   5597 #endif
   5598 
   5599 /* So we can set bits in e_flags.  */
   5600 #define elf_backend_final_write_processing \
   5601 					_bfd_mn10300_elf_final_write_processing
   5602 #define elf_backend_object_p		_bfd_mn10300_elf_object_p
   5603 
   5604 #define bfd_elf32_bfd_merge_private_bfd_data \
   5605 					_bfd_mn10300_elf_merge_private_bfd_data
   5606 
   5607 #define elf_backend_can_gc_sections	1
   5608 #define elf_backend_create_dynamic_sections \
   5609   _bfd_mn10300_elf_create_dynamic_sections
   5610 #define elf_backend_adjust_dynamic_symbol \
   5611   _bfd_mn10300_elf_adjust_dynamic_symbol
   5612 #define elf_backend_size_dynamic_sections \
   5613   _bfd_mn10300_elf_size_dynamic_sections
   5614 #define elf_backend_omit_section_dynsym \
   5615   ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
   5616 #define elf_backend_finish_dynamic_symbol \
   5617   _bfd_mn10300_elf_finish_dynamic_symbol
   5618 #define elf_backend_finish_dynamic_sections \
   5619   _bfd_mn10300_elf_finish_dynamic_sections
   5620 #define elf_backend_copy_indirect_symbol \
   5621   _bfd_mn10300_copy_indirect_symbol
   5622 #define elf_backend_reloc_type_class \
   5623   _bfd_mn10300_elf_reloc_type_class
   5624 
   5625 #define elf_backend_want_got_plt	1
   5626 #define elf_backend_plt_readonly	1
   5627 #define elf_backend_want_plt_sym	0
   5628 #define elf_backend_got_header_size	12
   5629 
   5630 #include "elf32-target.h"
   5631