* elf-m10300.c (mn10300_elf_relax_section): Don't relax
[platform/upstream/binutils.git] / bfd / elf-m10300.c
1 /* Matsushita 10300 specific support for 32-bit ELF
2    Copyright 1996, 1997, 1998, 1999, 2000, 2001
3    Free Software Foundation, Inc.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "bfd.h"
22 #include "sysdep.h"
23 #include "libbfd.h"
24 #include "elf-bfd.h"
25 #include "elf/mn10300.h"
26
27 struct elf32_mn10300_link_hash_entry {
28   /* The basic elf link hash table entry.  */
29   struct elf_link_hash_entry root;
30
31   /* For function symbols, the number of times this function is
32      called directly (ie by name).  */
33   unsigned int direct_calls;
34
35   /* For function symbols, the size of this function's stack
36      (if <= 255 bytes).  We stuff this into "call" instructions
37      to this target when it's valid and profitable to do so.
38
39      This does not include stack allocated by movm!  */
40   unsigned char stack_size;
41
42   /* For function symbols, arguments (if any) for movm instruction
43      in the prologue.  We stuff this value into "call" instructions
44      to the target when it's valid and profitable to do so.  */
45   unsigned char movm_args;
46
47   /* For funtion symbols, the amount of stack space that would be allocated
48      by the movm instruction.  This is redundant with movm_args, but we
49      add it to the hash table to avoid computing it over and over.  */
50   unsigned char movm_stack_size;
51
52 /* When set, convert all "call" instructions to this target into "calls"
53    instructions.  */
54 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
55
56 /* Used to mark functions which have had redundant parts of their
57    prologue deleted.  */
58 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
59   unsigned char flags;
60 };
61
62 /* We derive a hash table from the main elf linker hash table so
63    we can store state variables and a secondary hash table without
64    resorting to global variables.  */
65 struct elf32_mn10300_link_hash_table {
66   /* The main hash table.  */
67   struct elf_link_hash_table root;
68
69   /* A hash table for static functions.  We could derive a new hash table
70      instead of using the full elf32_mn10300_link_hash_table if we wanted
71      to save some memory.  */
72   struct elf32_mn10300_link_hash_table *static_hash_table;
73
74   /* Random linker state flags.  */
75 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
76   char flags;
77 };
78
79 /* For MN10300 linker hash table.  */
80
81 /* Get the MN10300 ELF linker hash table from a link_info structure.  */
82
83 #define elf32_mn10300_hash_table(p) \
84   ((struct elf32_mn10300_link_hash_table *) ((p)->hash))
85
86 #define elf32_mn10300_link_hash_traverse(table, func, info)             \
87   (elf_link_hash_traverse                                               \
88    (&(table)->root,                                                     \
89     (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func),  \
90     (info)))
91
92 static struct bfd_hash_entry *elf32_mn10300_link_hash_newfunc
93   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
94 static struct bfd_link_hash_table *elf32_mn10300_link_hash_table_create
95   PARAMS ((bfd *));
96
97 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
98   PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
99 static void mn10300_info_to_howto
100   PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *));
101 static boolean mn10300_elf_check_relocs
102   PARAMS ((bfd *, struct bfd_link_info *, asection *,
103            const Elf_Internal_Rela *));
104 static asection *mn10300_elf_gc_mark_hook
105   PARAMS ((bfd *, struct bfd_link_info *info, Elf_Internal_Rela *,
106            struct elf_link_hash_entry *, Elf_Internal_Sym *));
107 static boolean mn10300_elf_relax_delete_bytes
108   PARAMS ((bfd *, asection *, bfd_vma, int));
109 static boolean mn10300_elf_symbol_address_p
110   PARAMS ((bfd *, asection *, Elf32_External_Sym *, bfd_vma));
111 static boolean elf32_mn10300_finish_hash_table_entry
112   PARAMS ((struct bfd_hash_entry *, PTR));
113 static void compute_function_info
114   PARAMS ((bfd *, struct elf32_mn10300_link_hash_entry *,
115            bfd_vma, unsigned char *));
116
117 /* We have to use RELA instructions since md_apply_fix3 in the assembler
118    does absolutely nothing.  */
119 #define USE_RELA
120
121 static reloc_howto_type elf_mn10300_howto_table[] = {
122   /* Dummy relocation.  Does nothing.  */
123   HOWTO (R_MN10300_NONE,
124          0,
125          2,
126          16,
127          false,
128          0,
129          complain_overflow_bitfield,
130          bfd_elf_generic_reloc,
131          "R_MN10300_NONE",
132          false,
133          0,
134          0,
135          false),
136   /* Standard 32 bit reloc.  */
137   HOWTO (R_MN10300_32,
138          0,
139          2,
140          32,
141          false,
142          0,
143          complain_overflow_bitfield,
144          bfd_elf_generic_reloc,
145          "R_MN10300_32",
146          false,
147          0xffffffff,
148          0xffffffff,
149          false),
150   /* Standard 16 bit reloc.  */
151   HOWTO (R_MN10300_16,
152          0,
153          1,
154          16,
155          false,
156          0,
157          complain_overflow_bitfield,
158          bfd_elf_generic_reloc,
159          "R_MN10300_16",
160          false,
161          0xffff,
162          0xffff,
163          false),
164   /* Standard 8 bit reloc.  */
165   HOWTO (R_MN10300_8,
166          0,
167          0,
168          8,
169          false,
170          0,
171          complain_overflow_bitfield,
172          bfd_elf_generic_reloc,
173          "R_MN10300_8",
174          false,
175          0xff,
176          0xff,
177          false),
178   /* Standard 32bit pc-relative reloc.  */
179   HOWTO (R_MN10300_PCREL32,
180          0,
181          2,
182          32,
183          true,
184          0,
185          complain_overflow_bitfield,
186          bfd_elf_generic_reloc,
187          "R_MN10300_PCREL32",
188          false,
189          0xffffffff,
190          0xffffffff,
191          true),
192   /* Standard 16bit pc-relative reloc.  */
193   HOWTO (R_MN10300_PCREL16,
194          0,
195          1,
196          16,
197          true,
198          0,
199          complain_overflow_bitfield,
200          bfd_elf_generic_reloc,
201          "R_MN10300_PCREL16",
202          false,
203          0xffff,
204          0xffff,
205          true),
206   /* Standard 8 pc-relative reloc.  */
207   HOWTO (R_MN10300_PCREL8,
208          0,
209          0,
210          8,
211          true,
212          0,
213          complain_overflow_bitfield,
214          bfd_elf_generic_reloc,
215          "R_MN10300_PCREL8",
216          false,
217          0xff,
218          0xff,
219          true),
220
221   /* GNU extension to record C++ vtable hierarchy */
222   HOWTO (R_MN10300_GNU_VTINHERIT, /* type */
223          0,                     /* rightshift */
224          0,                     /* size (0 = byte, 1 = short, 2 = long) */
225          0,                     /* bitsize */
226          false,                 /* pc_relative */
227          0,                     /* bitpos */
228          complain_overflow_dont, /* complain_on_overflow */
229          NULL,                  /* special_function */
230          "R_MN10300_GNU_VTINHERIT", /* name */
231          false,                 /* partial_inplace */
232          0,                     /* src_mask */
233          0,                     /* dst_mask */
234          false),                /* pcrel_offset */
235
236   /* GNU extension to record C++ vtable member usage */
237   HOWTO (R_MN10300_GNU_VTENTRY, /* type */
238          0,                     /* rightshift */
239          0,                     /* size (0 = byte, 1 = short, 2 = long) */
240          0,                     /* bitsize */
241          false,                 /* pc_relative */
242          0,                     /* bitpos */
243          complain_overflow_dont, /* complain_on_overflow */
244          NULL,                  /* special_function */
245          "R_MN10300_GNU_VTENTRY", /* name */
246          false,                 /* partial_inplace */
247          0,                     /* src_mask */
248          0,                     /* dst_mask */
249          false),                /* pcrel_offset */
250
251   /* Standard 24 bit reloc.  */
252   HOWTO (R_MN10300_24,
253          0,
254          2,
255          24,
256          false,
257          0,
258          complain_overflow_bitfield,
259          bfd_elf_generic_reloc,
260          "R_MN10300_24",
261          false,
262          0xffffff,
263          0xffffff,
264          false),
265 };
266
267 struct mn10300_reloc_map {
268   bfd_reloc_code_real_type bfd_reloc_val;
269   unsigned char elf_reloc_val;
270 };
271
272 static const struct mn10300_reloc_map mn10300_reloc_map[] = {
273   { BFD_RELOC_NONE, R_MN10300_NONE, },
274   { BFD_RELOC_32, R_MN10300_32, },
275   { BFD_RELOC_16, R_MN10300_16, },
276   { BFD_RELOC_8, R_MN10300_8, },
277   { BFD_RELOC_32_PCREL, R_MN10300_PCREL32, },
278   { BFD_RELOC_16_PCREL, R_MN10300_PCREL16, },
279   { BFD_RELOC_8_PCREL, R_MN10300_PCREL8, },
280   { BFD_RELOC_24, R_MN10300_24, },
281   { BFD_RELOC_VTABLE_INHERIT, R_MN10300_GNU_VTINHERIT },
282   { BFD_RELOC_VTABLE_ENTRY, R_MN10300_GNU_VTENTRY },
283 };
284
285 static reloc_howto_type *
286 bfd_elf32_bfd_reloc_type_lookup (abfd, code)
287      bfd *abfd ATTRIBUTE_UNUSED;
288      bfd_reloc_code_real_type code;
289 {
290   unsigned int i;
291
292   for (i = 0;
293        i < sizeof (mn10300_reloc_map) / sizeof (struct mn10300_reloc_map);
294        i++)
295     {
296       if (mn10300_reloc_map[i].bfd_reloc_val == code)
297         return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val];
298     }
299
300   return NULL;
301 }
302
303 /* Set the howto pointer for an MN10300 ELF reloc.  */
304
305 static void
306 mn10300_info_to_howto (abfd, cache_ptr, dst)
307      bfd *abfd ATTRIBUTE_UNUSED;
308      arelent *cache_ptr;
309      Elf32_Internal_Rela *dst;
310 {
311   unsigned int r_type;
312
313   r_type = ELF32_R_TYPE (dst->r_info);
314   BFD_ASSERT (r_type < (unsigned int) R_MN10300_MAX);
315   cache_ptr->howto = &elf_mn10300_howto_table[r_type];
316 }
317
318 /* Look through the relocs for a section during the first phase.
319    Since we don't do .gots or .plts, we just need to consider the
320    virtual table relocs for gc.  */
321
322 static boolean
323 mn10300_elf_check_relocs (abfd, info, sec, relocs)
324      bfd *abfd;
325      struct bfd_link_info *info;
326      asection *sec;
327      const Elf_Internal_Rela *relocs;
328 {
329   Elf_Internal_Shdr *symtab_hdr;
330   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
331   const Elf_Internal_Rela *rel;
332   const Elf_Internal_Rela *rel_end;
333
334   if (info->relocateable)
335     return true;
336
337   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
338   sym_hashes = elf_sym_hashes (abfd);
339   sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
340   if (!elf_bad_symtab (abfd))
341     sym_hashes_end -= symtab_hdr->sh_info;
342
343   rel_end = relocs + sec->reloc_count;
344   for (rel = relocs; rel < rel_end; rel++)
345     {
346       struct elf_link_hash_entry *h;
347       unsigned long r_symndx;
348
349       r_symndx = ELF32_R_SYM (rel->r_info);
350       if (r_symndx < symtab_hdr->sh_info)
351         h = NULL;
352       else
353         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
354
355       switch (ELF32_R_TYPE (rel->r_info))
356         {
357         /* This relocation describes the C++ object vtable hierarchy.
358            Reconstruct it for later use during GC.  */
359         case R_MN10300_GNU_VTINHERIT:
360           if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
361             return false;
362           break;
363
364         /* This relocation describes which C++ vtable entries are actually
365            used.  Record for later use during GC.  */
366         case R_MN10300_GNU_VTENTRY:
367           if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
368             return false;
369           break;
370         }
371     }
372
373   return true;
374 }
375
376 /* Return the section that should be marked against GC for a given
377    relocation.  */
378
379 static asection *
380 mn10300_elf_gc_mark_hook (abfd, info, rel, h, sym)
381      bfd *abfd;
382      struct bfd_link_info *info ATTRIBUTE_UNUSED;
383      Elf_Internal_Rela *rel;
384      struct elf_link_hash_entry *h;
385      Elf_Internal_Sym *sym;
386 {
387   if (h != NULL)
388     {
389       switch (ELF32_R_TYPE (rel->r_info))
390         {
391         case R_MN10300_GNU_VTINHERIT:
392         case R_MN10300_GNU_VTENTRY:
393           break;
394
395         default:
396           switch (h->root.type)
397             {
398             case bfd_link_hash_defined:
399             case bfd_link_hash_defweak:
400               return h->root.u.def.section;
401
402             case bfd_link_hash_common:
403               return h->root.u.c.p->section;
404
405             default:
406               break;
407             }
408         }
409     }
410   else
411     {
412       if (!(elf_bad_symtab (abfd)
413             && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
414           && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
415                 && sym->st_shndx != SHN_COMMON))
416         {
417           return bfd_section_from_elf_index (abfd, sym->st_shndx);
418         }
419     }
420
421   return NULL;
422 }
423
424 /* Perform a relocation as part of a final link.  */
425 static bfd_reloc_status_type
426 mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
427                                  input_section, contents, offset, value,
428                                  addend, info, sym_sec, is_local)
429      reloc_howto_type *howto;
430      bfd *input_bfd;
431      bfd *output_bfd ATTRIBUTE_UNUSED;
432      asection *input_section;
433      bfd_byte *contents;
434      bfd_vma offset;
435      bfd_vma value;
436      bfd_vma addend;
437      struct bfd_link_info *info ATTRIBUTE_UNUSED;
438      asection *sym_sec ATTRIBUTE_UNUSED;
439      int is_local ATTRIBUTE_UNUSED;
440 {
441   unsigned long r_type = howto->type;
442   bfd_byte *hit_data = contents + offset;
443
444   switch (r_type)
445     {
446     case R_MN10300_NONE:
447       return bfd_reloc_ok;
448
449     case R_MN10300_32:
450       value += addend;
451       bfd_put_32 (input_bfd, value, hit_data);
452       return bfd_reloc_ok;
453
454     case R_MN10300_24:
455       value += addend;
456
457       if ((long) value > 0x7fffff || (long) value < -0x800000)
458         return bfd_reloc_overflow;
459
460       bfd_put_8 (input_bfd, value & 0xff, hit_data);
461       bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
462       bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
463       return bfd_reloc_ok;
464
465     case R_MN10300_16:
466       value += addend;
467
468       if ((long) value > 0x7fff || (long) value < -0x8000)
469         return bfd_reloc_overflow;
470
471       bfd_put_16 (input_bfd, value, hit_data);
472       return bfd_reloc_ok;
473
474     case R_MN10300_8:
475       value += addend;
476
477       if ((long) value > 0x7f || (long) value < -0x80)
478         return bfd_reloc_overflow;
479
480       bfd_put_8 (input_bfd, value, hit_data);
481       return bfd_reloc_ok;
482
483     case R_MN10300_PCREL8:
484       value -= (input_section->output_section->vma
485                 + input_section->output_offset);
486       value -= offset;
487       value += addend;
488
489       if ((long) value > 0xff || (long) value < -0x100)
490         return bfd_reloc_overflow;
491
492       bfd_put_8 (input_bfd, value, hit_data);
493       return bfd_reloc_ok;
494
495     case R_MN10300_PCREL16:
496       value -= (input_section->output_section->vma
497                 + input_section->output_offset);
498       value -= offset;
499       value += addend;
500
501       if ((long) value > 0xffff || (long) value < -0x10000)
502         return bfd_reloc_overflow;
503
504       bfd_put_16 (input_bfd, value, hit_data);
505       return bfd_reloc_ok;
506
507     case R_MN10300_PCREL32:
508       value -= (input_section->output_section->vma
509                 + input_section->output_offset);
510       value -= offset;
511       value += addend;
512
513       bfd_put_32 (input_bfd, value, hit_data);
514       return bfd_reloc_ok;
515
516     case R_MN10300_GNU_VTINHERIT:
517     case R_MN10300_GNU_VTENTRY:
518       return bfd_reloc_ok;
519
520     default:
521       return bfd_reloc_notsupported;
522     }
523 }
524 \f
525 /* Relocate an MN10300 ELF section.  */
526 static boolean
527 mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
528                               contents, relocs, local_syms, local_sections)
529      bfd *output_bfd;
530      struct bfd_link_info *info;
531      bfd *input_bfd;
532      asection *input_section;
533      bfd_byte *contents;
534      Elf_Internal_Rela *relocs;
535      Elf_Internal_Sym *local_syms;
536      asection **local_sections;
537 {
538   Elf_Internal_Shdr *symtab_hdr;
539   struct elf32_mn10300_link_hash_entry **sym_hashes;
540   Elf_Internal_Rela *rel, *relend;
541
542   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
543   sym_hashes = (struct elf32_mn10300_link_hash_entry **)
544                  (elf_sym_hashes (input_bfd));
545
546   rel = relocs;
547   relend = relocs + input_section->reloc_count;
548   for (; rel < relend; rel++)
549     {
550       int r_type;
551       reloc_howto_type *howto;
552       unsigned long r_symndx;
553       Elf_Internal_Sym *sym;
554       asection *sec;
555       struct elf32_mn10300_link_hash_entry *h;
556       bfd_vma relocation;
557       bfd_reloc_status_type r;
558
559       r_symndx = ELF32_R_SYM (rel->r_info);
560       r_type = ELF32_R_TYPE (rel->r_info);
561       howto = elf_mn10300_howto_table + r_type;
562
563       /* Just skip the vtable gc relocs.  */
564       if (r_type == R_MN10300_GNU_VTINHERIT
565           || r_type == R_MN10300_GNU_VTENTRY)
566         continue;
567
568       if (info->relocateable)
569         {
570           /* This is a relocateable link.  We don't have to change
571              anything, unless the reloc is against a section symbol,
572              in which case we have to adjust according to where the
573              section symbol winds up in the output section.  */
574           if (r_symndx < symtab_hdr->sh_info)
575             {
576               sym = local_syms + r_symndx;
577               if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
578                 {
579                   sec = local_sections[r_symndx];
580                   rel->r_addend += sec->output_offset + sym->st_value;
581                 }
582             }
583
584           continue;
585         }
586
587       /* This is a final link.  */
588       h = NULL;
589       sym = NULL;
590       sec = NULL;
591       if (r_symndx < symtab_hdr->sh_info)
592         {
593           sym = local_syms + r_symndx;
594           sec = local_sections[r_symndx];
595           relocation = (sec->output_section->vma
596                         + sec->output_offset
597                         + sym->st_value);
598         }
599       else
600         {
601           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
602           while (h->root.type == bfd_link_hash_indirect
603                  || h->root.type == bfd_link_hash_warning)
604             h = (struct elf32_mn10300_link_hash_entry *) h->root.root.u.i.link;
605           if (h->root.root.type == bfd_link_hash_defined
606               || h->root.root.type == bfd_link_hash_defweak)
607             {
608               sec = h->root.root.u.def.section;
609               relocation = (h->root.root.u.def.value
610                             + sec->output_section->vma
611                             + sec->output_offset);
612             }
613           else if (h->root.root.type == bfd_link_hash_undefweak)
614             relocation = 0;
615           else
616             {
617               if (! ((*info->callbacks->undefined_symbol)
618                      (info, h->root.root.root.string, input_bfd,
619                       input_section, rel->r_offset, true)))
620                 return false;
621               relocation = 0;
622             }
623         }
624
625       r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
626                                            input_section,
627                                            contents, rel->r_offset,
628                                            relocation, rel->r_addend,
629                                            info, sec, h == NULL);
630
631       if (r != bfd_reloc_ok)
632         {
633           const char *name;
634           const char *msg = (const char *) 0;
635
636           if (h != NULL)
637             name = h->root.root.root.string;
638           else
639             {
640               name = (bfd_elf_string_from_elf_section
641                       (input_bfd, symtab_hdr->sh_link, sym->st_name));
642               if (name == NULL || *name == '\0')
643                 name = bfd_section_name (input_bfd, sec);
644             }
645
646           switch (r)
647             {
648             case bfd_reloc_overflow:
649               if (! ((*info->callbacks->reloc_overflow)
650                      (info, name, howto->name, (bfd_vma) 0,
651                       input_bfd, input_section, rel->r_offset)))
652                 return false;
653               break;
654
655             case bfd_reloc_undefined:
656               if (! ((*info->callbacks->undefined_symbol)
657                      (info, name, input_bfd, input_section,
658                       rel->r_offset, true)))
659                 return false;
660               break;
661
662             case bfd_reloc_outofrange:
663               msg = _("internal error: out of range error");
664               goto common_error;
665
666             case bfd_reloc_notsupported:
667               msg = _("internal error: unsupported relocation error");
668               goto common_error;
669
670             case bfd_reloc_dangerous:
671               msg = _("internal error: dangerous error");
672               goto common_error;
673
674             default:
675               msg = _("internal error: unknown error");
676               /* fall through */
677
678             common_error:
679               if (!((*info->callbacks->warning)
680                     (info, msg, name, input_bfd, input_section,
681                      rel->r_offset)))
682                 return false;
683               break;
684             }
685         }
686     }
687
688   return true;
689 }
690
691 /* Finish initializing one hash table entry.  */
692 static boolean
693 elf32_mn10300_finish_hash_table_entry (gen_entry, in_args)
694      struct bfd_hash_entry *gen_entry;
695      PTR in_args ATTRIBUTE_UNUSED;
696 {
697   struct elf32_mn10300_link_hash_entry *entry;
698   unsigned int byte_count = 0;
699
700   entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
701
702   /* If we already know we want to convert "call" to "calls" for calls
703      to this symbol, then return now.  */
704   if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
705     return true;
706
707   /* If there are no named calls to this symbol, or there's nothing we
708      can move from the function itself into the "call" instruction, then
709      note that all "call" instructions should be converted into "calls"
710      instructions and return.  */
711   if (entry->direct_calls == 0
712       || (entry->stack_size == 0 && entry->movm_args == 0))
713     {
714       /* Make a note that we should convert "call" instructions to "calls"
715          instructions for calls to this symbol.  */
716       entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
717       return true;
718     }
719
720   /* We may be able to move some instructions from the function itself into
721      the "call" instruction.  Count how many bytes we might be able to
722      eliminate in the function itself.  */
723
724   /* A movm instruction is two bytes.  */
725   if (entry->movm_args)
726     byte_count += 2;
727
728   /* Count the insn to allocate stack space too.  */
729   if (entry->stack_size > 0 && entry->stack_size <= 128)
730     byte_count += 3;
731   else if (entry->stack_size > 0 && entry->stack_size < 256)
732     byte_count += 4;
733
734   /* If using "call" will result in larger code, then turn all
735      the associated "call" instructions into "calls" instrutions.  */
736   if (byte_count < entry->direct_calls)
737     entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
738
739   /* This routine never fails.  */
740   return true;
741 }
742
743 /* This function handles relaxing for the mn10300.
744
745    There's quite a few relaxing opportunites available on the mn10300:
746
747         * calls:32 -> calls:16                                     2 bytes
748         * call:32  -> call:16                                      2 bytes
749
750         * call:32 -> calls:32                                      1 byte
751         * call:16 -> calls:16                                      1 byte
752                 * These are done anytime using "calls" would result
753                 in smaller code, or when necessary to preserve the
754                 meaning of the program.
755
756         * call:32                                                  varies
757         * call:16
758                 * In some circumstances we can move instructions
759                 from a function prologue into a "call" instruction.
760                 This is only done if the resulting code is no larger
761                 than the original code.
762
763         * jmp:32 -> jmp:16                                         2 bytes
764         * jmp:16 -> bra:8                                          1 byte
765
766                 * If the previous instruction is a conditional branch
767                 around the jump/bra, we may be able to reverse its condition
768                 and change its target to the jump's target.  The jump/bra
769                 can then be deleted.                               2 bytes
770
771         * mov abs32 -> mov abs16                                   1 or 2 bytes
772
773         * Most instructions which accept imm32 can relax to imm16  1 or 2 bytes
774         - Most instructions which accept imm16 can relax to imm8   1 or 2 bytes
775
776         * Most instructions which accept d32 can relax to d16      1 or 2 bytes
777         - Most instructions which accept d16 can relax to d8       1 or 2 bytes
778
779         We don't handle imm16->imm8 or d16->d8 as they're very rare
780         and somewhat more difficult to support.  */
781
782 static boolean
783 mn10300_elf_relax_section (abfd, sec, link_info, again)
784      bfd *abfd;
785      asection *sec;
786      struct bfd_link_info *link_info;
787      boolean *again;
788 {
789   Elf_Internal_Shdr *symtab_hdr;
790   Elf_Internal_Rela *internal_relocs = NULL;
791   Elf_Internal_Rela *free_relocs = NULL;
792   Elf_Internal_Rela *irel, *irelend;
793   bfd_byte *contents = NULL;
794   bfd_byte *free_contents = NULL;
795   Elf32_External_Sym *extsyms = NULL;
796   Elf32_External_Sym *free_extsyms = NULL;
797   struct elf32_mn10300_link_hash_table *hash_table;
798
799   /* Assume nothing changes.  */
800   *again = false;
801
802   /* We need a pointer to the mn10300 specific hash table.  */
803   hash_table = elf32_mn10300_hash_table (link_info);
804
805   /* Initialize fields in each hash table entry the first time through.  */
806   if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
807     {
808       bfd *input_bfd;
809
810       /* Iterate over all the input bfds.  */
811       for (input_bfd = link_info->input_bfds;
812            input_bfd != NULL;
813            input_bfd = input_bfd->link_next)
814         {
815           asection *section;
816
817           /* We're going to need all the symbols for each bfd.  */
818           symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
819
820           /* Get cached copy if it exists.  */
821           if (symtab_hdr->contents != NULL)
822             extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
823           else
824             {
825               /* Go get them off disk.  */
826               extsyms = ((Elf32_External_Sym *)
827                          bfd_malloc (symtab_hdr->sh_size));
828               if (extsyms == NULL)
829                 goto error_return;
830               free_extsyms = extsyms;
831               if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
832                   || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
833                       != symtab_hdr->sh_size))
834                 goto error_return;
835             }
836
837           /* Iterate over each section in this bfd.  */
838           for (section = input_bfd->sections;
839                section != NULL;
840                section = section->next)
841             {
842               struct elf32_mn10300_link_hash_entry *hash;
843               Elf_Internal_Sym *sym;
844               asection *sym_sec = NULL;
845               const char *sym_name;
846               char *new_name;
847
848               /* Get cached copy of section contents if it exists.  */
849               if (elf_section_data (section)->this_hdr.contents != NULL)
850                 contents = elf_section_data (section)->this_hdr.contents;
851               else if (section->_raw_size != 0)
852                 {
853                   /* Go get them off disk.  */
854                   contents = (bfd_byte *) bfd_malloc (section->_raw_size);
855                   if (contents == NULL)
856                     goto error_return;
857                   free_contents = contents;
858
859                   if (!bfd_get_section_contents (input_bfd, section,
860                                                  contents, (file_ptr) 0,
861                                                  section->_raw_size))
862                     goto error_return;
863                 }
864               else
865                 {
866                   contents = NULL;
867                   free_contents = NULL;
868                 }
869
870               /* If there aren't any relocs, then there's nothing to do.  */
871               if ((section->flags & SEC_RELOC) != 0
872                   && section->reloc_count != 0)
873                 {
874
875                   /* Get a copy of the native relocations.  */
876                   internal_relocs = (_bfd_elf32_link_read_relocs
877                                      (input_bfd, section, (PTR) NULL,
878                                       (Elf_Internal_Rela *) NULL,
879                                       link_info->keep_memory));
880                   if (internal_relocs == NULL)
881                     goto error_return;
882                   if (! link_info->keep_memory)
883                     free_relocs = internal_relocs;
884
885                   /* Now examine each relocation.  */
886                   irel = internal_relocs;
887                   irelend = irel + section->reloc_count;
888                   for (; irel < irelend; irel++)
889                     {
890                       long r_type;
891                       unsigned long r_index;
892                       unsigned char code;
893
894                       r_type = ELF32_R_TYPE (irel->r_info);
895                       r_index = ELF32_R_SYM (irel->r_info);
896
897                       if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
898                         goto error_return;
899
900                       /* We need the name and hash table entry of the target
901                          symbol!  */
902                       hash = NULL;
903                       sym = NULL;
904                       sym_sec = NULL;
905
906                       if (r_index < symtab_hdr->sh_info)
907                         {
908                           /* A local symbol.  */
909                           Elf_Internal_Sym isym;
910
911                           bfd_elf32_swap_symbol_in (input_bfd,
912                                                     extsyms + r_index, &isym);
913
914                           if (isym.st_shndx == SHN_UNDEF)
915                             sym_sec = bfd_und_section_ptr;
916                           else if (isym.st_shndx > 0
917                                    && isym.st_shndx < SHN_LORESERVE)
918                             sym_sec
919                               = bfd_section_from_elf_index (input_bfd,
920                                                             isym.st_shndx);
921                           else if (isym.st_shndx == SHN_ABS)
922                             sym_sec = bfd_abs_section_ptr;
923                           else if (isym.st_shndx == SHN_COMMON)
924                             sym_sec = bfd_com_section_ptr;
925
926                           sym_name = bfd_elf_string_from_elf_section (input_bfd,
927                                                            symtab_hdr->sh_link,
928                                                            isym.st_name);
929
930                           /* If it isn't a function, then we don't care
931                              about it.  */
932                           if (r_index < symtab_hdr->sh_info
933                               && ELF_ST_TYPE (isym.st_info) != STT_FUNC)
934                             continue;
935
936                           /* Tack on an ID so we can uniquely identify this
937                              local symbol in the global hash table.  */
938                           new_name = bfd_malloc (strlen (sym_name) + 10);
939                           if (new_name == 0)
940                             goto error_return;
941
942                           sprintf (new_name, "%s_%08x",
943                                    sym_name, (int) sym_sec);
944                           sym_name = new_name;
945
946                           hash = (struct elf32_mn10300_link_hash_entry *)
947                                    elf_link_hash_lookup (&hash_table->static_hash_table->root,
948                                                          sym_name, true,
949                                                          true, false);
950                           free (new_name);
951                         }
952                       else
953                         {
954                           r_index -= symtab_hdr->sh_info;
955                           hash = (struct elf32_mn10300_link_hash_entry *)
956                                    elf_sym_hashes (input_bfd)[r_index];
957                         }
958
959                       /* If this is not a "call" instruction, then we
960                          should convert "call" instructions to "calls"
961                          instructions.  */
962                       code = bfd_get_8 (input_bfd,
963                                         contents + irel->r_offset - 1);
964                       if (code != 0xdd && code != 0xcd)
965                         hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
966
967                       /* If this is a jump/call, then bump the direct_calls
968                          counter.  Else force "call" to "calls" conversions.  */
969                       if (r_type == R_MN10300_PCREL32
970                           || r_type == R_MN10300_PCREL16)
971                         hash->direct_calls++;
972                       else
973                         hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
974                     }
975                 }
976
977               /* Now look at the actual contents to get the stack size,
978                  and a list of what registers were saved in the prologue
979                  (ie movm_args).  */
980               if ((section->flags & SEC_CODE) != 0)
981                 {
982
983                   Elf32_External_Sym *esym, *esymend;
984                   int idx, shndx;
985
986                   shndx = _bfd_elf_section_from_bfd_section (input_bfd,
987                                                              section);
988
989                   /* Look at each function defined in this section and
990                      update info for that function.  */
991                   esym = extsyms;
992                   esymend = esym + symtab_hdr->sh_info;
993                   for (; esym < esymend; esym++)
994                     {
995                       Elf_Internal_Sym isym;
996
997                       bfd_elf32_swap_symbol_in (input_bfd, esym, &isym);
998                       if (isym.st_shndx == shndx
999                           && ELF_ST_TYPE (isym.st_info) == STT_FUNC)
1000                         {
1001                           if (isym.st_shndx == SHN_UNDEF)
1002                             sym_sec = bfd_und_section_ptr;
1003                           else if (isym.st_shndx > 0
1004                                    && isym.st_shndx < SHN_LORESERVE)
1005                             sym_sec
1006                               = bfd_section_from_elf_index (input_bfd,
1007                                                             isym.st_shndx);
1008                           else if (isym.st_shndx == SHN_ABS)
1009                             sym_sec = bfd_abs_section_ptr;
1010                           else if (isym.st_shndx == SHN_COMMON)
1011                             sym_sec = bfd_com_section_ptr;
1012
1013                           sym_name = bfd_elf_string_from_elf_section (input_bfd,
1014                                                         symtab_hdr->sh_link,
1015                                                         isym.st_name);
1016
1017                           /* Tack on an ID so we can uniquely identify this
1018                              local symbol in the global hash table.  */
1019                           new_name = bfd_malloc (strlen (sym_name) + 10);
1020                           if (new_name == 0)
1021                             goto error_return;
1022
1023                           sprintf (new_name, "%s_%08x",
1024                                    sym_name, (int) sym_sec);
1025                           sym_name = new_name;
1026
1027                           hash = (struct elf32_mn10300_link_hash_entry *)
1028                                     elf_link_hash_lookup (&hash_table->static_hash_table->root,
1029                                                           sym_name, true,
1030                                                           true, false);
1031                           free (new_name);
1032                           compute_function_info (input_bfd, hash,
1033                                                  isym.st_value, contents);
1034                         }
1035                     }
1036
1037                   esym = extsyms + symtab_hdr->sh_info;
1038                   esymend = extsyms + (symtab_hdr->sh_size
1039                                        / sizeof (Elf32_External_Sym));
1040                   for (idx = 0; esym < esymend; esym++, idx++)
1041                     {
1042                       Elf_Internal_Sym isym;
1043
1044                       bfd_elf32_swap_symbol_in (input_bfd, esym, &isym);
1045                       hash = (struct elf32_mn10300_link_hash_entry *)
1046                                elf_sym_hashes (input_bfd)[idx];
1047                       if (isym.st_shndx == shndx
1048                           && ELF_ST_TYPE (isym.st_info) == STT_FUNC
1049                           && (hash)->root.root.u.def.section == section
1050                           && ((hash)->root.root.type == bfd_link_hash_defined
1051                               || (hash)->root.root.type == bfd_link_hash_defweak))
1052                         compute_function_info (input_bfd, hash,
1053                                                (hash)->root.root.u.def.value,
1054                                                contents);
1055                     }
1056                 }
1057
1058               /* Cache or free any memory we allocated for the relocs.  */
1059               if (free_relocs != NULL)
1060                 {
1061                   free (free_relocs);
1062                   free_relocs = NULL;
1063                 }
1064
1065               /* Cache or free any memory we allocated for the contents.  */
1066               if (free_contents != NULL)
1067                 {
1068                   if (! link_info->keep_memory)
1069                     free (free_contents);
1070                   else
1071                     {
1072                       /* Cache the section contents for elf_link_input_bfd.  */
1073                       elf_section_data (section)->this_hdr.contents = contents;
1074                     }
1075                   free_contents = NULL;
1076                 }
1077             }
1078
1079           /* Cache or free any memory we allocated for the symbols.  */
1080           if (free_extsyms != NULL)
1081             {
1082               if (! link_info->keep_memory)
1083                 free (free_extsyms);
1084               else
1085                 {
1086                   /* Cache the symbols for elf_link_input_bfd.  */
1087                   symtab_hdr->contents = extsyms;
1088                 }
1089               free_extsyms = NULL;
1090             }
1091         }
1092
1093       /* Now iterate on each symbol in the hash table and perform
1094          the final initialization steps on each.  */
1095       elf32_mn10300_link_hash_traverse (hash_table,
1096                                         elf32_mn10300_finish_hash_table_entry,
1097                                         NULL);
1098       elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
1099                                         elf32_mn10300_finish_hash_table_entry,
1100                                         NULL);
1101
1102       /* All entries in the hash table are fully initialized.  */
1103       hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
1104
1105       /* Now that everything has been initialized, go through each
1106          code section and delete any prologue insns which will be
1107          redundant because their operations will be performed by
1108          a "call" instruction.  */
1109       for (input_bfd = link_info->input_bfds;
1110            input_bfd != NULL;
1111            input_bfd = input_bfd->link_next)
1112         {
1113           asection *section;
1114
1115           /* We're going to need all the symbols for each bfd.  */
1116           symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
1117
1118           /* Get cached copy if it exists.  */
1119           if (symtab_hdr->contents != NULL)
1120             extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
1121           else
1122             {
1123               /* Go get them off disk.  */
1124               extsyms = ((Elf32_External_Sym *)
1125                          bfd_malloc (symtab_hdr->sh_size));
1126               if (extsyms == NULL)
1127                 goto error_return;
1128               free_extsyms = extsyms;
1129               if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
1130                   || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
1131                       != symtab_hdr->sh_size))
1132                 goto error_return;
1133             }
1134
1135           /* Walk over each section in this bfd.  */
1136           for (section = input_bfd->sections;
1137                section != NULL;
1138                section = section->next)
1139             {
1140               int shndx;
1141               Elf32_External_Sym *esym, *esymend;
1142               int idx;
1143
1144               /* Skip non-code sections and empty sections.  */
1145               if ((section->flags & SEC_CODE) == 0 || section->_raw_size == 0)
1146                 continue;
1147
1148               if (section->reloc_count != 0)
1149                 {
1150                   /* Get a copy of the native relocations.  */
1151                   internal_relocs = (_bfd_elf32_link_read_relocs
1152                                      (input_bfd, section, (PTR) NULL,
1153                                       (Elf_Internal_Rela *) NULL,
1154                                       link_info->keep_memory));
1155                   if (internal_relocs == NULL)
1156                     goto error_return;
1157                   if (! link_info->keep_memory)
1158                     free_relocs = internal_relocs;
1159                 }
1160
1161               /* Get cached copy of section contents if it exists.  */
1162               if (elf_section_data (section)->this_hdr.contents != NULL)
1163                 contents = elf_section_data (section)->this_hdr.contents;
1164               else
1165                 {
1166                   /* Go get them off disk.  */
1167                   contents = (bfd_byte *) bfd_malloc (section->_raw_size);
1168                   if (contents == NULL)
1169                     goto error_return;
1170                   free_contents = contents;
1171
1172                   if (!bfd_get_section_contents (input_bfd, section,
1173                                                  contents, (file_ptr) 0,
1174                                                  section->_raw_size))
1175                     goto error_return;
1176                 }
1177
1178               shndx = _bfd_elf_section_from_bfd_section (input_bfd, section);
1179
1180               /* Now look for any function in this section which needs
1181                  insns deleted from its prologue.  */
1182               esym = extsyms;
1183               esymend = esym + symtab_hdr->sh_info;
1184               for (; esym < esymend; esym++)
1185                 {
1186                   Elf_Internal_Sym isym;
1187                   struct elf32_mn10300_link_hash_entry *sym_hash;
1188                   asection *sym_sec = NULL;
1189                   const char *sym_name;
1190                   char *new_name;
1191
1192                   bfd_elf32_swap_symbol_in (input_bfd, esym, &isym);
1193
1194                   if (isym.st_shndx != shndx)
1195                     continue;
1196
1197                   if (isym.st_shndx == SHN_UNDEF)
1198                     sym_sec = bfd_und_section_ptr;
1199                   else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
1200                     sym_sec
1201                       = bfd_section_from_elf_index (input_bfd, isym.st_shndx);
1202                   else if (isym.st_shndx == SHN_ABS)
1203                     sym_sec = bfd_abs_section_ptr;
1204                   else if (isym.st_shndx == SHN_COMMON)
1205                     sym_sec = bfd_com_section_ptr;
1206                   else
1207                     abort ();
1208
1209                   sym_name = bfd_elf_string_from_elf_section (input_bfd,
1210                                                         symtab_hdr->sh_link,
1211                                                         isym.st_name);
1212
1213                   /* Tack on an ID so we can uniquely identify this
1214                      local symbol in the global hash table.  */
1215                   new_name = bfd_malloc (strlen (sym_name) + 10);
1216                   if (new_name == 0)
1217                     goto error_return;
1218                   sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
1219                   sym_name = new_name;
1220
1221                   sym_hash = (struct elf32_mn10300_link_hash_entry *)
1222                             elf_link_hash_lookup (&hash_table->static_hash_table->root,
1223                                                   sym_name, false,
1224                                                   false, false);
1225
1226                   free (new_name);
1227                   if (sym_hash == NULL)
1228                     continue;
1229
1230                   if (! ((sym_hash)->flags & MN10300_CONVERT_CALL_TO_CALLS)
1231                       && ! ((sym_hash)->flags & MN10300_DELETED_PROLOGUE_BYTES))
1232                     {
1233                       int bytes = 0;
1234
1235                       /* Note that we've changed things.  */
1236                       elf_section_data (section)->relocs = internal_relocs;
1237                       free_relocs = NULL;
1238
1239                       elf_section_data (section)->this_hdr.contents = contents;
1240                       free_contents = NULL;
1241
1242                       symtab_hdr->contents = (bfd_byte *) extsyms;
1243                       free_extsyms = NULL;
1244
1245                       /* Count how many bytes we're going to delete.  */
1246                       if (sym_hash->movm_args)
1247                         bytes += 2;
1248
1249                       if (sym_hash->stack_size && sym_hash->stack_size <= 128)
1250                         bytes += 3;
1251                       else if (sym_hash->stack_size
1252                                && sym_hash->stack_size < 256)
1253                         bytes += 4;
1254
1255                       /* Note that we've deleted prologue bytes for this
1256                          function.  */
1257                       sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1258
1259                       /* Actually delete the bytes.  */
1260                       if (!mn10300_elf_relax_delete_bytes (input_bfd,
1261                                                            section,
1262                                                            isym.st_value,
1263                                                            bytes))
1264                         goto error_return;
1265
1266                       /* Something changed.  Not strictly necessary, but
1267                          may lead to more relaxing opportunities.  */
1268                       *again = true;
1269                     }
1270                 }
1271
1272               /* Look for any global functions in this section which
1273                  need insns deleted from their prologues.  */
1274               esym = extsyms + symtab_hdr->sh_info;
1275               esymend = extsyms + (symtab_hdr->sh_size
1276                                    / sizeof (Elf32_External_Sym));
1277               for (idx = 0; esym < esymend; esym++, idx++)
1278                 {
1279                   Elf_Internal_Sym isym;
1280                   struct elf32_mn10300_link_hash_entry *sym_hash;
1281
1282                   bfd_elf32_swap_symbol_in (input_bfd, esym, &isym);
1283                   sym_hash = (struct elf32_mn10300_link_hash_entry *)
1284                                (elf_sym_hashes (input_bfd)[idx]);
1285                   if (isym.st_shndx == shndx
1286                       && (sym_hash)->root.root.u.def.section == section
1287                       && ! ((sym_hash)->flags & MN10300_CONVERT_CALL_TO_CALLS)
1288                       && ! ((sym_hash)->flags & MN10300_DELETED_PROLOGUE_BYTES))
1289                     {
1290                       int bytes = 0;
1291
1292                       /* Note that we've changed things.  */
1293                       elf_section_data (section)->relocs = internal_relocs;
1294                       free_relocs = NULL;
1295
1296                       elf_section_data (section)->this_hdr.contents = contents;
1297                       free_contents = NULL;
1298
1299                       symtab_hdr->contents = (bfd_byte *) extsyms;
1300                       free_extsyms = NULL;
1301
1302                       /* Count how many bytes we're going to delete.  */
1303                       if (sym_hash->movm_args)
1304                         bytes += 2;
1305
1306                       if (sym_hash->stack_size && sym_hash->stack_size <= 128)
1307                         bytes += 3;
1308                       else if (sym_hash->stack_size
1309                                && sym_hash->stack_size < 256)
1310                         bytes += 4;
1311
1312                       /* Note that we've deleted prologue bytes for this
1313                          function.  */
1314                       sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1315
1316                       /* Actually delete the bytes.  */
1317                       if (!mn10300_elf_relax_delete_bytes (input_bfd,
1318                                                            section,
1319                                                            (sym_hash)->root.root.u.def.value,
1320                                                            bytes))
1321                         goto error_return;
1322
1323                       /* Something changed.  Not strictly necessary, but
1324                          may lead to more relaxing opportunities.  */
1325                       *again = true;
1326                     }
1327                 }
1328
1329               /* Cache or free any memory we allocated for the relocs.  */
1330               if (free_relocs != NULL)
1331                 {
1332                   free (free_relocs);
1333                   free_relocs = NULL;
1334                 }
1335
1336               /* Cache or free any memory we allocated for the contents.  */
1337               if (free_contents != NULL)
1338                 {
1339                   if (! link_info->keep_memory)
1340                     free (free_contents);
1341                   else
1342                     {
1343                       /* Cache the section contents for elf_link_input_bfd.  */
1344                       elf_section_data (section)->this_hdr.contents = contents;
1345                     }
1346                   free_contents = NULL;
1347                 }
1348             }
1349
1350           /* Cache or free any memory we allocated for the symbols.  */
1351           if (free_extsyms != NULL)
1352             {
1353               if (! link_info->keep_memory)
1354                 free (free_extsyms);
1355               else
1356                 {
1357                   /* Cache the symbols for elf_link_input_bfd.  */
1358                   symtab_hdr->contents = extsyms;
1359                 }
1360               free_extsyms = NULL;
1361             }
1362         }
1363     }
1364
1365   /* (Re)initialize for the basic instruction shortening/relaxing pass.  */
1366   contents = NULL;
1367   extsyms = NULL;
1368   internal_relocs = NULL;
1369   free_relocs = NULL;
1370   free_contents = NULL;
1371   free_extsyms = NULL;
1372
1373   /* We don't have to do anything for a relocateable link, if
1374      this section does not have relocs, or if this is not a
1375      code section.  */
1376   if (link_info->relocateable
1377       || (sec->flags & SEC_RELOC) == 0
1378       || sec->reloc_count == 0
1379       || (sec->flags & SEC_CODE) == 0)
1380     return true;
1381
1382   /* If this is the first time we have been called for this section,
1383      initialize the cooked size.  */
1384   if (sec->_cooked_size == 0)
1385     sec->_cooked_size = sec->_raw_size;
1386
1387   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1388
1389   /* Get a copy of the native relocations.  */
1390   internal_relocs = (_bfd_elf32_link_read_relocs
1391                      (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
1392                       link_info->keep_memory));
1393   if (internal_relocs == NULL)
1394     goto error_return;
1395   if (! link_info->keep_memory)
1396     free_relocs = internal_relocs;
1397
1398   /* Walk through them looking for relaxing opportunities.  */
1399   irelend = internal_relocs + sec->reloc_count;
1400   for (irel = internal_relocs; irel < irelend; irel++)
1401     {
1402       bfd_vma symval;
1403       struct elf32_mn10300_link_hash_entry *h = NULL;
1404
1405       /* If this isn't something that can be relaxed, then ignore
1406          this reloc.  */
1407       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_NONE
1408           || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_8
1409           || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_MAX)
1410         continue;
1411
1412       /* Get the section contents if we haven't done so already.  */
1413       if (contents == NULL)
1414         {
1415           /* Get cached copy if it exists.  */
1416           if (elf_section_data (sec)->this_hdr.contents != NULL)
1417             contents = elf_section_data (sec)->this_hdr.contents;
1418           else
1419             {
1420               /* Go get them off disk.  */
1421               contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
1422               if (contents == NULL)
1423                 goto error_return;
1424               free_contents = contents;
1425
1426               if (! bfd_get_section_contents (abfd, sec, contents,
1427                                               (file_ptr) 0, sec->_raw_size))
1428                 goto error_return;
1429             }
1430         }
1431
1432       /* Read this BFD's symbols if we haven't done so already.  */
1433       if (extsyms == NULL)
1434         {
1435           /* Get cached copy if it exists.  */
1436           if (symtab_hdr->contents != NULL)
1437             extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
1438           else
1439             {
1440               /* Go get them off disk.  */
1441               extsyms = ((Elf32_External_Sym *)
1442                          bfd_malloc (symtab_hdr->sh_size));
1443               if (extsyms == NULL)
1444                 goto error_return;
1445               free_extsyms = extsyms;
1446               if (bfd_seek (abfd, symtab_hdr->sh_offset, SEEK_SET) != 0
1447                   || (bfd_read (extsyms, 1, symtab_hdr->sh_size, abfd)
1448                       != symtab_hdr->sh_size))
1449                 goto error_return;
1450             }
1451         }
1452
1453       /* Get the value of the symbol referred to by the reloc.  */
1454       if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
1455         {
1456           Elf_Internal_Sym isym;
1457           asection *sym_sec = NULL;
1458           const char *sym_name;
1459           char *new_name;
1460
1461           /* A local symbol.  */
1462           bfd_elf32_swap_symbol_in (abfd,
1463                                     extsyms + ELF32_R_SYM (irel->r_info),
1464                                     &isym);
1465
1466           if (isym.st_shndx == SHN_UNDEF)
1467             sym_sec = bfd_und_section_ptr;
1468           else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
1469             sym_sec = bfd_section_from_elf_index (abfd, isym.st_shndx);
1470           else if (isym.st_shndx == SHN_ABS)
1471             sym_sec = bfd_abs_section_ptr;
1472           else if (isym.st_shndx == SHN_COMMON)
1473             sym_sec = bfd_com_section_ptr;
1474           else
1475             abort ();
1476
1477           symval = (isym.st_value
1478                     + sym_sec->output_section->vma
1479                     + sym_sec->output_offset);
1480           sym_name = bfd_elf_string_from_elf_section (abfd,
1481                                                       symtab_hdr->sh_link,
1482                                                       isym.st_name);
1483
1484           /* Tack on an ID so we can uniquely identify this
1485              local symbol in the global hash table.  */
1486           new_name = bfd_malloc (strlen (sym_name) + 10);
1487           if (new_name == 0)
1488             goto error_return;
1489           sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
1490           sym_name = new_name;
1491
1492           h = (struct elf32_mn10300_link_hash_entry *)
1493                 elf_link_hash_lookup (&hash_table->static_hash_table->root,
1494                                       sym_name, false, false, false);
1495           free (new_name);
1496         }
1497       else
1498         {
1499           unsigned long indx;
1500
1501           /* An external symbol.  */
1502           indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
1503           h = (struct elf32_mn10300_link_hash_entry *)
1504                 (elf_sym_hashes (abfd)[indx]);
1505           BFD_ASSERT (h != NULL);
1506           if (h->root.root.type != bfd_link_hash_defined
1507               && h->root.root.type != bfd_link_hash_defweak)
1508             {
1509               /* This appears to be a reference to an undefined
1510                 symbol.  Just ignore it--it will be caught by the
1511                 regular reloc processing.  */
1512               continue;
1513             }
1514
1515           symval = (h->root.root.u.def.value
1516                     + h->root.root.u.def.section->output_section->vma
1517                     + h->root.root.u.def.section->output_offset);
1518         }
1519
1520       /* For simplicity of coding, we are going to modify the section
1521          contents, the section relocs, and the BFD symbol table.  We
1522          must tell the rest of the code not to free up this
1523          information.  It would be possible to instead create a table
1524          of changes which have to be made, as is done in coff-mips.c;
1525          that would be more work, but would require less memory when
1526          the linker is run.  */
1527
1528       /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
1529          branch/call, also deal with "call" -> "calls" conversions and
1530          insertion of prologue data into "call" instructions.  */
1531       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL32)
1532         {
1533           bfd_vma value = symval;
1534
1535           /* If we've got a "call" instruction that needs to be turned
1536              into a "calls" instruction, do so now.  It saves a byte.  */
1537           if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
1538             {
1539               unsigned char code;
1540
1541               /* Get the opcode.  */
1542               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1543
1544               /* Make sure we're working with a "call" instruction!  */
1545               if (code == 0xdd)
1546                 {
1547                   /* Note that we've changed the relocs, section contents,
1548                      etc.  */
1549                   elf_section_data (sec)->relocs = internal_relocs;
1550                   free_relocs = NULL;
1551
1552                   elf_section_data (sec)->this_hdr.contents = contents;
1553                   free_contents = NULL;
1554
1555                   symtab_hdr->contents = (bfd_byte *) extsyms;
1556                   free_extsyms = NULL;
1557
1558                   /* Fix the opcode.  */
1559                   bfd_put_8 (abfd, 0xfc, contents + irel->r_offset - 1);
1560                   bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
1561
1562                   /* Fix irel->r_offset and irel->r_addend.  */
1563                   irel->r_offset += 1;
1564                   irel->r_addend += 1;
1565
1566                   /* Delete one byte of data.  */
1567                   if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1568                                                        irel->r_offset + 3, 1))
1569                     goto error_return;
1570
1571                   /* That will change things, so, we should relax again.
1572                      Note that this is not required, and it may be slow.  */
1573                   *again = true;
1574                 }
1575             }
1576           else if (h)
1577             {
1578               /* We've got a "call" instruction which needs some data
1579                  from target function filled in.  */
1580               unsigned char code;
1581
1582               /* Get the opcode.  */
1583               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1584
1585               /* Insert data from the target function into the "call"
1586                  instruction if needed.  */
1587               if (code == 0xdd)
1588                 {
1589                   bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 4);
1590                   bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
1591                              contents + irel->r_offset + 5);
1592                 }
1593             }
1594
1595           /* Deal with pc-relative gunk.  */
1596           value -= (sec->output_section->vma + sec->output_offset);
1597           value -= irel->r_offset;
1598           value += irel->r_addend;
1599
1600           /* See if the value will fit in 16 bits, note the high value is
1601              0x7fff + 2 as the target will be two bytes closer if we are
1602              able to relax.  */
1603           if ((long) value < 0x8001 && (long) value > -0x8000)
1604             {
1605               unsigned char code;
1606
1607               /* Get the opcode.  */
1608               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1609
1610               if (code != 0xdc && code != 0xdd && code != 0xff)
1611                 continue;
1612
1613               /* Note that we've changed the relocs, section contents, etc.  */
1614               elf_section_data (sec)->relocs = internal_relocs;
1615               free_relocs = NULL;
1616
1617               elf_section_data (sec)->this_hdr.contents = contents;
1618               free_contents = NULL;
1619
1620               symtab_hdr->contents = (bfd_byte *) extsyms;
1621               free_extsyms = NULL;
1622
1623               /* Fix the opcode.  */
1624               if (code == 0xdc)
1625                 bfd_put_8 (abfd, 0xcc, contents + irel->r_offset - 1);
1626               else if (code == 0xdd)
1627                 bfd_put_8 (abfd, 0xcd, contents + irel->r_offset - 1);
1628               else if (code == 0xff)
1629                 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
1630
1631               /* Fix the relocation's type.  */
1632               irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1633                                            R_MN10300_PCREL16);
1634
1635               /* Delete two bytes of data.  */
1636               if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1637                                                    irel->r_offset + 1, 2))
1638                 goto error_return;
1639
1640               /* That will change things, so, we should relax again.
1641                  Note that this is not required, and it may be slow.  */
1642               *again = true;
1643             }
1644         }
1645
1646       /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
1647          branch.  */
1648       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL16)
1649         {
1650           bfd_vma value = symval;
1651
1652           /* If we've got a "call" instruction that needs to be turned
1653              into a "calls" instruction, do so now.  It saves a byte.  */
1654           if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
1655             {
1656               unsigned char code;
1657
1658               /* Get the opcode.  */
1659               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1660
1661               /* Make sure we're working with a "call" instruction!  */
1662               if (code == 0xcd)
1663                 {
1664                   /* Note that we've changed the relocs, section contents,
1665                      etc.  */
1666                   elf_section_data (sec)->relocs = internal_relocs;
1667                   free_relocs = NULL;
1668
1669                   elf_section_data (sec)->this_hdr.contents = contents;
1670                   free_contents = NULL;
1671
1672                   symtab_hdr->contents = (bfd_byte *) extsyms;
1673                   free_extsyms = NULL;
1674
1675                   /* Fix the opcode.  */
1676                   bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 1);
1677                   bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
1678
1679                   /* Fix irel->r_offset and irel->r_addend.  */
1680                   irel->r_offset += 1;
1681                   irel->r_addend += 1;
1682
1683                   /* Delete one byte of data.  */
1684                   if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1685                                                        irel->r_offset + 1, 1))
1686                     goto error_return;
1687
1688                   /* That will change things, so, we should relax again.
1689                      Note that this is not required, and it may be slow.  */
1690                   *again = true;
1691                 }
1692             }
1693           else if (h)
1694             {
1695               unsigned char code;
1696
1697               /* Get the opcode.  */
1698               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1699
1700               /* Insert data from the target function into the "call"
1701                  instruction if needed.  */
1702               if (code == 0xcd)
1703                 {
1704                   bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 2);
1705                   bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
1706                              contents + irel->r_offset + 3);
1707                 }
1708             }
1709
1710           /* Deal with pc-relative gunk.  */
1711           value -= (sec->output_section->vma + sec->output_offset);
1712           value -= irel->r_offset;
1713           value += irel->r_addend;
1714
1715           /* See if the value will fit in 8 bits, note the high value is
1716              0x7f + 1 as the target will be one bytes closer if we are
1717              able to relax.  */
1718           if ((long) value < 0x80 && (long) value > -0x80)
1719             {
1720               unsigned char code;
1721
1722               /* Get the opcode.  */
1723               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1724
1725               if (code != 0xcc)
1726                 continue;
1727
1728               /* Note that we've changed the relocs, section contents, etc.  */
1729               elf_section_data (sec)->relocs = internal_relocs;
1730               free_relocs = NULL;
1731
1732               elf_section_data (sec)->this_hdr.contents = contents;
1733               free_contents = NULL;
1734
1735               symtab_hdr->contents = (bfd_byte *) extsyms;
1736               free_extsyms = NULL;
1737
1738               /* Fix the opcode.  */
1739               bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
1740
1741               /* Fix the relocation's type.  */
1742               irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1743                                            R_MN10300_PCREL8);
1744
1745               /* Delete one byte of data.  */
1746               if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1747                                                    irel->r_offset + 1, 1))
1748                 goto error_return;
1749
1750               /* That will change things, so, we should relax again.
1751                  Note that this is not required, and it may be slow.  */
1752               *again = true;
1753             }
1754         }
1755
1756       /* Try to eliminate an unconditional 8 bit pc-relative branch
1757          which immediately follows a conditional 8 bit pc-relative
1758          branch around the unconditional branch.
1759
1760             original:           new:
1761             bCC lab1            bCC' lab2
1762             bra lab2
1763            lab1:               lab1:
1764
1765          This happens when the bCC can't reach lab2 at assembly time,
1766          but due to other relaxations it can reach at link time.  */
1767       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
1768         {
1769           Elf_Internal_Rela *nrel;
1770           bfd_vma value = symval;
1771           unsigned char code;
1772
1773           /* Deal with pc-relative gunk.  */
1774           value -= (sec->output_section->vma + sec->output_offset);
1775           value -= irel->r_offset;
1776           value += irel->r_addend;
1777
1778           /* Do nothing if this reloc is the last byte in the section.  */
1779           if (irel->r_offset == sec->_cooked_size)
1780             continue;
1781
1782           /* See if the next instruction is an unconditional pc-relative
1783              branch, more often than not this test will fail, so we
1784              test it first to speed things up.  */
1785           code = bfd_get_8 (abfd, contents + irel->r_offset + 1);
1786           if (code != 0xca)
1787             continue;
1788
1789           /* Also make sure the next relocation applies to the next
1790              instruction and that it's a pc-relative 8 bit branch.  */
1791           nrel = irel + 1;
1792           if (nrel == irelend
1793               || irel->r_offset + 2 != nrel->r_offset
1794               || ELF32_R_TYPE (nrel->r_info) != (int) R_MN10300_PCREL8)
1795             continue;
1796
1797           /* Make sure our destination immediately follows the
1798              unconditional branch.  */
1799           if (symval != (sec->output_section->vma + sec->output_offset
1800                          + irel->r_offset + 3))
1801             continue;
1802
1803           /* Now make sure we are a conditional branch.  This may not
1804              be necessary, but why take the chance.
1805
1806              Note these checks assume that R_MN10300_PCREL8 relocs
1807              only occur on bCC and bCCx insns.  If they occured
1808              elsewhere, we'd need to know the start of this insn
1809              for this check to be accurate.  */
1810           code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1811           if (code != 0xc0 && code != 0xc1 && code != 0xc2
1812               && code != 0xc3 && code != 0xc4 && code != 0xc5
1813               && code != 0xc6 && code != 0xc7 && code != 0xc8
1814               && code != 0xc9 && code != 0xe8 && code != 0xe9
1815               && code != 0xea && code != 0xeb)
1816             continue;
1817
1818           /* We also have to be sure there is no symbol/label
1819              at the unconditional branch.  */
1820           if (mn10300_elf_symbol_address_p (abfd, sec, extsyms,
1821                                             irel->r_offset + 1))
1822             continue;
1823
1824           /* Note that we've changed the relocs, section contents, etc.  */
1825           elf_section_data (sec)->relocs = internal_relocs;
1826           free_relocs = NULL;
1827
1828           elf_section_data (sec)->this_hdr.contents = contents;
1829           free_contents = NULL;
1830
1831           symtab_hdr->contents = (bfd_byte *) extsyms;
1832           free_extsyms = NULL;
1833
1834           /* Reverse the condition of the first branch.  */
1835           switch (code)
1836             {
1837             case 0xc8:
1838               code = 0xc9;
1839               break;
1840             case 0xc9:
1841               code = 0xc8;
1842               break;
1843             case 0xc0:
1844               code = 0xc2;
1845               break;
1846             case 0xc2:
1847               code = 0xc0;
1848               break;
1849             case 0xc3:
1850               code = 0xc1;
1851               break;
1852             case 0xc1:
1853               code = 0xc3;
1854               break;
1855             case 0xc4:
1856               code = 0xc6;
1857               break;
1858             case 0xc6:
1859               code = 0xc4;
1860               break;
1861             case 0xc7:
1862               code = 0xc5;
1863               break;
1864             case 0xc5:
1865               code = 0xc7;
1866               break;
1867             case 0xe8:
1868               code = 0xe9;
1869               break;
1870             case 0x9d:
1871               code = 0xe8;
1872               break;
1873             case 0xea:
1874               code = 0xeb;
1875               break;
1876             case 0xeb:
1877               code = 0xea;
1878               break;
1879             }
1880           bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
1881
1882           /* Set the reloc type and symbol for the first branch
1883              from the second branch.  */
1884           irel->r_info = nrel->r_info;
1885
1886           /* Make the reloc for the second branch a null reloc.  */
1887           nrel->r_info = ELF32_R_INFO (ELF32_R_SYM (nrel->r_info),
1888                                        R_MN10300_NONE);
1889
1890           /* Delete two bytes of data.  */
1891           if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1892                                                irel->r_offset + 1, 2))
1893             goto error_return;
1894
1895           /* That will change things, so, we should relax again.
1896              Note that this is not required, and it may be slow.  */
1897           *again = true;
1898         }
1899
1900       /* Try to turn a 24 immediate, displacement or absolute address
1901          into a 8 immediate, displacement or absolute address.  */
1902       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_24)
1903         {
1904           bfd_vma value = symval;
1905           value += irel->r_addend;
1906
1907           /* See if the value will fit in 8 bits.  */
1908           if ((long) value < 0x7f && (long) value > -0x80)
1909             {
1910               unsigned char code;
1911
1912               /* AM33 insns which have 24 operands are 6 bytes long and
1913                  will have 0xfd as the first byte.  */
1914
1915               /* Get the first opcode.  */
1916               code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1917
1918               if (code == 0xfd)
1919                 {
1920                   /* Get the second opcode.  */
1921                   code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1922
1923                   /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
1924                      equivalent instructions exists.  */
1925                   if (code != 0x6b && code != 0x7b
1926                       && code != 0x8b && code != 0x9b
1927                       && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
1928                           || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
1929                           || (code & 0x0f) == 0x0e))
1930                     {
1931                       /* Not safe if the high bit is on as relaxing may
1932                          move the value out of high mem and thus not fit
1933                          in a signed 8bit value.  This is currently over
1934                          conservative.  */
1935                       if ((value & 0x80) == 0)
1936                         {
1937                           /* Note that we've changed the relocation contents,
1938                              etc.  */
1939                           elf_section_data (sec)->relocs = internal_relocs;
1940                           free_relocs = NULL;
1941
1942                           elf_section_data (sec)->this_hdr.contents = contents;
1943                           free_contents = NULL;
1944
1945                           symtab_hdr->contents = (bfd_byte *) extsyms;
1946                           free_extsyms = NULL;
1947
1948                           /* Fix the opcode.  */
1949                           bfd_put_8 (abfd, 0xfb, contents + irel->r_offset - 3);
1950                           bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
1951
1952                           /* Fix the relocation's type.  */
1953                           irel->r_info =
1954                             ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1955                                           R_MN10300_8);
1956
1957                           /* Delete two bytes of data.  */
1958                           if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1959                                                                irel->r_offset + 1, 2))
1960                             goto error_return;
1961
1962                           /* That will change things, so, we should relax
1963                              again.  Note that this is not required, and it
1964                              may be slow.  */
1965                           *again = true;
1966                           break;
1967                         }
1968                     }
1969                 }
1970             }
1971         }
1972
1973       /* Try to turn a 32bit immediate, displacement or absolute address
1974          into a 16bit immediate, displacement or absolute address.  */
1975       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32)
1976         {
1977           bfd_vma value = symval;
1978           value += irel->r_addend;
1979
1980           /* See if the value will fit in 24 bits.
1981              We allow any 16bit match here.  We prune those we can't
1982              handle below.  */
1983           if ((long) value < 0x7fffff && (long) value > -0x800000)
1984             {
1985               unsigned char code;
1986
1987               /* AM33 insns which have 32bit operands are 7 bytes long and
1988                  will have 0xfe as the first byte.  */
1989
1990               /* Get the first opcode.  */
1991               code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1992
1993               if (code == 0xfe)
1994                 {
1995                   /* Get the second opcode.  */
1996                   code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1997
1998                   /* All the am33 32 -> 24 relaxing possibilities.  */
1999                   /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
2000                      equivalent instructions exists.  */
2001                   if (code != 0x6b && code != 0x7b
2002                       && code != 0x8b && code != 0x9b
2003                       && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
2004                           || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
2005                           || (code & 0x0f) == 0x0e))
2006                     {
2007                       /* Not safe if the high bit is on as relaxing may
2008                          move the value out of high mem and thus not fit
2009                          in a signed 16bit value.  This is currently over
2010                          conservative.  */
2011                       if ((value & 0x8000) == 0)
2012                         {
2013                           /* Note that we've changed the relocation contents,
2014                              etc.  */
2015                           elf_section_data (sec)->relocs = internal_relocs;
2016                           free_relocs = NULL;
2017
2018                           elf_section_data (sec)->this_hdr.contents = contents;
2019                           free_contents = NULL;
2020
2021                           symtab_hdr->contents = (bfd_byte *) extsyms;
2022                           free_extsyms = NULL;
2023
2024                           /* Fix the opcode.  */
2025                           bfd_put_8 (abfd, 0xfd, contents + irel->r_offset - 3);
2026                           bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2027
2028                           /* Fix the relocation's type.  */
2029                           irel->r_info =
2030                             ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2031                                           R_MN10300_24);
2032
2033                           /* Delete one byte of data.  */
2034                           if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2035                                                                irel->r_offset + 3, 1))
2036                             goto error_return;
2037
2038                           /* That will change things, so, we should relax
2039                              again.  Note that this is not required, and it
2040                              may be slow.  */
2041                           *again = true;
2042                           break;
2043                         }
2044                     }
2045                 }
2046             }
2047
2048           /* See if the value will fit in 16 bits.
2049              We allow any 16bit match here.  We prune those we can't
2050              handle below.  */
2051           if ((long) value < 0x7fff && (long) value > -0x8000)
2052             {
2053               unsigned char code;
2054
2055               /* Most insns which have 32bit operands are 6 bytes long;
2056                  exceptions are pcrel insns and bit insns.
2057
2058                  We handle pcrel insns above.  We don't bother trying
2059                  to handle the bit insns here.
2060
2061                  The first byte of the remaining insns will be 0xfc.  */
2062
2063               /* Get the first opcode.  */
2064               code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
2065
2066               if (code != 0xfc)
2067                 continue;
2068
2069               /* Get the second opcode.  */
2070               code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
2071
2072               if ((code & 0xf0) < 0x80)
2073                 switch (code & 0xf0)
2074                   {
2075                   /* mov (d32,am),dn   -> mov (d32,am),dn
2076                      mov dm,(d32,am)   -> mov dn,(d32,am)
2077                      mov (d32,am),an   -> mov (d32,am),an
2078                      mov dm,(d32,am)   -> mov dn,(d32,am)
2079                      movbu (d32,am),dn -> movbu (d32,am),dn
2080                      movbu dm,(d32,am) -> movbu dn,(d32,am)
2081                      movhu (d32,am),dn -> movhu (d32,am),dn
2082                      movhu dm,(d32,am) -> movhu dn,(d32,am) */
2083                   case 0x00:
2084                   case 0x10:
2085                   case 0x20:
2086                   case 0x30:
2087                   case 0x40:
2088                   case 0x50:
2089                   case 0x60:
2090                   case 0x70:
2091                     /* Not safe if the high bit is on as relaxing may
2092                        move the value out of high mem and thus not fit
2093                        in a signed 16bit value.  */
2094                     if (code == 0xcc
2095                         && (value & 0x8000))
2096                       continue;
2097
2098                     /* Note that we've changed the relocation contents, etc.  */
2099                     elf_section_data (sec)->relocs = internal_relocs;
2100                     free_relocs = NULL;
2101
2102                     elf_section_data (sec)->this_hdr.contents = contents;
2103                     free_contents = NULL;
2104
2105                     symtab_hdr->contents = (bfd_byte *) extsyms;
2106                     free_extsyms = NULL;
2107
2108                     /* Fix the opcode.  */
2109                     bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2110                     bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2111
2112                     /* Fix the relocation's type.  */
2113                     irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2114                                                  R_MN10300_16);
2115
2116                     /* Delete two bytes of data.  */
2117                     if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2118                                                          irel->r_offset + 2, 2))
2119                       goto error_return;
2120
2121                     /* That will change things, so, we should relax again.
2122                        Note that this is not required, and it may be slow.  */
2123                     *again = true;
2124                     break;
2125                   }
2126               else if ((code & 0xf0) == 0x80
2127                        || (code & 0xf0) == 0x90)
2128                 switch (code & 0xf3)
2129                   {
2130                   /* mov dn,(abs32)   -> mov dn,(abs16)
2131                      movbu dn,(abs32) -> movbu dn,(abs16)
2132                      movhu dn,(abs32) -> movhu dn,(abs16)  */
2133                   case 0x81:
2134                   case 0x82:
2135                   case 0x83:
2136                     /* Note that we've changed the relocation contents, etc.  */
2137                     elf_section_data (sec)->relocs = internal_relocs;
2138                     free_relocs = NULL;
2139
2140                     elf_section_data (sec)->this_hdr.contents = contents;
2141                     free_contents = NULL;
2142
2143                     symtab_hdr->contents = (bfd_byte *) extsyms;
2144                     free_extsyms = NULL;
2145
2146                     if ((code & 0xf3) == 0x81)
2147                       code = 0x01 + (code & 0x0c);
2148                     else if ((code & 0xf3) == 0x82)
2149                       code = 0x02 + (code & 0x0c);
2150                     else if ((code & 0xf3) == 0x83)
2151                       code = 0x03 + (code & 0x0c);
2152                     else
2153                       abort ();
2154
2155                     /* Fix the opcode.  */
2156                     bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2157
2158                     /* Fix the relocation's type.  */
2159                     irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2160                                                  R_MN10300_16);
2161
2162                     /* The opcode got shorter too, so we have to fix the
2163                        addend and offset too!  */
2164                     irel->r_offset -= 1;
2165
2166                     /* Delete three bytes of data.  */
2167                     if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2168                                                          irel->r_offset + 1, 3))
2169                       goto error_return;
2170
2171                     /* That will change things, so, we should relax again.
2172                        Note that this is not required, and it may be slow.  */
2173                     *again = true;
2174                     break;
2175
2176                   /* mov am,(abs32)    -> mov am,(abs16)
2177                      mov am,(d32,sp)   -> mov am,(d16,sp)
2178                      mov dm,(d32,sp)   -> mov dm,(d32,sp)
2179                      movbu dm,(d32,sp) -> movbu dm,(d32,sp)
2180                      movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
2181                   case 0x80:
2182                   case 0x90:
2183                   case 0x91:
2184                   case 0x92:
2185                   case 0x93:
2186                     /* sp-based offsets are zero-extended.  */
2187                     if (code >= 0x90 && code <= 0x93
2188                         && (long)value < 0)
2189                       continue;
2190
2191                     /* Note that we've changed the relocation contents, etc.  */
2192                     elf_section_data (sec)->relocs = internal_relocs;
2193                     free_relocs = NULL;
2194
2195                     elf_section_data (sec)->this_hdr.contents = contents;
2196                     free_contents = NULL;
2197
2198                     symtab_hdr->contents = (bfd_byte *) extsyms;
2199                     free_extsyms = NULL;
2200
2201                     /* Fix the opcode.  */
2202                     bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2203                     bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2204
2205                     /* Fix the relocation's type.  */
2206                     irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2207                                                  R_MN10300_16);
2208
2209                     /* Delete two bytes of data.  */
2210                     if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2211                                                          irel->r_offset + 2, 2))
2212                       goto error_return;
2213
2214                     /* That will change things, so, we should relax again.
2215                        Note that this is not required, and it may be slow.  */
2216                     *again = true;
2217                     break;
2218                   }
2219               else if ((code & 0xf0) < 0xf0)
2220                 switch (code & 0xfc)
2221                   {
2222                   /* mov imm32,dn     -> mov imm16,dn
2223                      mov imm32,an     -> mov imm16,an
2224                      mov (abs32),dn   -> mov (abs16),dn
2225                      movbu (abs32),dn -> movbu (abs16),dn
2226                      movhu (abs32),dn -> movhu (abs16),dn  */
2227                   case 0xcc:
2228                   case 0xdc:
2229                   case 0xa4:
2230                   case 0xa8:
2231                   case 0xac:
2232                     /* Not safe if the high bit is on as relaxing may
2233                        move the value out of high mem and thus not fit
2234                        in a signed 16bit value.  */
2235                     if (code == 0xcc
2236                         && (value & 0x8000))
2237                       continue;
2238
2239                     /* mov imm16, an zero-extends the immediate.  */
2240                     if (code == 0xdc
2241                         && (long)value < 0)
2242                       continue;
2243
2244                     /* Note that we've changed the relocation contents, etc.  */
2245                     elf_section_data (sec)->relocs = internal_relocs;
2246                     free_relocs = NULL;
2247
2248                     elf_section_data (sec)->this_hdr.contents = contents;
2249                     free_contents = NULL;
2250
2251                     symtab_hdr->contents = (bfd_byte *) extsyms;
2252                     free_extsyms = NULL;
2253
2254                     if ((code & 0xfc) == 0xcc)
2255                       code = 0x2c + (code & 0x03);
2256                     else if ((code & 0xfc) == 0xdc)
2257                       code = 0x24 + (code & 0x03);
2258                     else if ((code & 0xfc) == 0xa4)
2259                       code = 0x30 + (code & 0x03);
2260                     else if ((code & 0xfc) == 0xa8)
2261                       code = 0x34 + (code & 0x03);
2262                     else if ((code & 0xfc) == 0xac)
2263                       code = 0x38 + (code & 0x03);
2264                     else
2265                       abort ();
2266
2267                     /* Fix the opcode.  */
2268                     bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2269
2270                     /* Fix the relocation's type.  */
2271                     irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2272                                                  R_MN10300_16);
2273
2274                     /* The opcode got shorter too, so we have to fix the
2275                        addend and offset too!  */
2276                     irel->r_offset -= 1;
2277
2278                     /* Delete three bytes of data.  */
2279                     if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2280                                                          irel->r_offset + 1, 3))
2281                       goto error_return;
2282
2283                     /* That will change things, so, we should relax again.
2284                        Note that this is not required, and it may be slow.  */
2285                     *again = true;
2286                     break;
2287
2288                   /* mov (abs32),an    -> mov (abs16),an
2289                      mov (d32,sp),an   -> mov (d16,sp),an
2290                      mov (d32,sp),dn   -> mov (d16,sp),dn
2291                      movbu (d32,sp),dn -> movbu (d16,sp),dn
2292                      movhu (d32,sp),dn -> movhu (d16,sp),dn
2293                      add imm32,dn      -> add imm16,dn
2294                      cmp imm32,dn      -> cmp imm16,dn
2295                      add imm32,an      -> add imm16,an
2296                      cmp imm32,an      -> cmp imm16,an
2297                      and imm32,dn      -> and imm16,dn
2298                      or imm32,dn       -> or imm16,dn
2299                      xor imm32,dn      -> xor imm16,dn
2300                      btst imm32,dn     -> btst imm16,dn */
2301
2302                   case 0xa0:
2303                   case 0xb0:
2304                   case 0xb1:
2305                   case 0xb2:
2306                   case 0xb3:
2307                   case 0xc0:
2308                   case 0xc8:
2309
2310                   case 0xd0:
2311                   case 0xd8:
2312                   case 0xe0:
2313                   case 0xe1:
2314                   case 0xe2:
2315                   case 0xe3:
2316                     /* cmp imm16, an zero-extends the immediate.  */
2317                     if (code == 0xdc
2318                         && (long)value < 0)
2319                       continue;
2320
2321                     /* So do sp-based offsets.  */
2322                     if (code >= 0xb0 && code <= 0xb3
2323                         && (long)value < 0)
2324                       continue;
2325
2326                     /* Note that we've changed the relocation contents, etc.  */
2327                     elf_section_data (sec)->relocs = internal_relocs;
2328                     free_relocs = NULL;
2329
2330                     elf_section_data (sec)->this_hdr.contents = contents;
2331                     free_contents = NULL;
2332
2333                     symtab_hdr->contents = (bfd_byte *) extsyms;
2334                     free_extsyms = NULL;
2335
2336                     /* Fix the opcode.  */
2337                     bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2338                     bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2339
2340                     /* Fix the relocation's type.  */
2341                     irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2342                                                  R_MN10300_16);
2343
2344                     /* Delete two bytes of data.  */
2345                     if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2346                                                          irel->r_offset + 2, 2))
2347                       goto error_return;
2348
2349                     /* That will change things, so, we should relax again.
2350                        Note that this is not required, and it may be slow.  */
2351                     *again = true;
2352                     break;
2353                   }
2354               else if (code == 0xfe)
2355                 {
2356                   /* add imm32,sp -> add imm16,sp  */
2357
2358                   /* Note that we've changed the relocation contents, etc.  */
2359                   elf_section_data (sec)->relocs = internal_relocs;
2360                   free_relocs = NULL;
2361
2362                   elf_section_data (sec)->this_hdr.contents = contents;
2363                   free_contents = NULL;
2364
2365                   symtab_hdr->contents = (bfd_byte *) extsyms;
2366                   free_extsyms = NULL;
2367
2368                   /* Fix the opcode.  */
2369                   bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2370                   bfd_put_8 (abfd, 0xfe, contents + irel->r_offset - 1);
2371
2372                   /* Fix the relocation's type.  */
2373                   irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2374                                                R_MN10300_16);
2375
2376                   /* Delete two bytes of data.  */
2377                   if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2378                                                        irel->r_offset + 2, 2))
2379                     goto error_return;
2380
2381                   /* That will change things, so, we should relax again.
2382                      Note that this is not required, and it may be slow.  */
2383                   *again = true;
2384                   break;
2385                 }
2386             }
2387         }
2388     }
2389
2390   if (free_relocs != NULL)
2391     {
2392       free (free_relocs);
2393       free_relocs = NULL;
2394     }
2395
2396   if (free_contents != NULL)
2397     {
2398       if (! link_info->keep_memory)
2399         free (free_contents);
2400       else
2401         {
2402           /* Cache the section contents for elf_link_input_bfd.  */
2403           elf_section_data (sec)->this_hdr.contents = contents;
2404         }
2405       free_contents = NULL;
2406     }
2407
2408   if (free_extsyms != NULL)
2409     {
2410       if (! link_info->keep_memory)
2411         free (free_extsyms);
2412       else
2413         {
2414           /* Cache the symbols for elf_link_input_bfd.  */
2415           symtab_hdr->contents = extsyms;
2416         }
2417       free_extsyms = NULL;
2418     }
2419
2420   return true;
2421
2422  error_return:
2423   if (free_relocs != NULL)
2424     free (free_relocs);
2425   if (free_contents != NULL)
2426     free (free_contents);
2427   if (free_extsyms != NULL)
2428     free (free_extsyms);
2429   return false;
2430 }
2431
2432 /* Compute the stack size and movm arguments for the function
2433    referred to by HASH at address ADDR in section with
2434    contents CONTENTS, store the information in the hash table.  */
2435 static void
2436 compute_function_info (abfd, hash, addr, contents)
2437      bfd *abfd;
2438      struct elf32_mn10300_link_hash_entry *hash;
2439      bfd_vma addr;
2440      unsigned char *contents;
2441 {
2442   unsigned char byte1, byte2;
2443   /* We only care about a very small subset of the possible prologue
2444      sequences here.  Basically we look for:
2445
2446      movm [d2,d3,a2,a3],sp (optional)
2447      add <size>,sp (optional, and only for sizes which fit in an unsigned
2448                     8 bit number)
2449
2450      If we find anything else, we quit.  */
2451
2452   /* Look for movm [regs],sp */
2453   byte1 = bfd_get_8 (abfd, contents + addr);
2454   byte2 = bfd_get_8 (abfd, contents + addr + 1);
2455
2456   if (byte1 == 0xcf)
2457     {
2458       hash->movm_args = byte2;
2459       addr += 2;
2460       byte1 = bfd_get_8 (abfd, contents + addr);
2461       byte2 = bfd_get_8 (abfd, contents + addr + 1);
2462     }
2463
2464   /* Now figure out how much stack space will be allocated by the movm
2465      instruction.  We need this kept separate from the funtion's normal
2466      stack space.  */
2467   if (hash->movm_args)
2468     {
2469       /* Space for d2.  */
2470       if (hash->movm_args & 0x80)
2471         hash->movm_stack_size += 4;
2472
2473       /* Space for d3.  */
2474       if (hash->movm_args & 0x40)
2475         hash->movm_stack_size += 4;
2476
2477       /* Space for a2.  */
2478       if (hash->movm_args & 0x20)
2479         hash->movm_stack_size += 4;
2480
2481       /* Space for a3.  */
2482       if (hash->movm_args & 0x10)
2483         hash->movm_stack_size += 4;
2484
2485       /* "other" space.  d0, d1, a0, a1, mdr, lir, lar, 4 byte pad.  */
2486       if (hash->movm_args & 0x08)
2487         hash->movm_stack_size += 8 * 4;
2488
2489       if (bfd_get_mach (abfd) == bfd_mach_am33)
2490         {
2491           /* "exother" space.  e0, e1, mdrq, mcrh, mcrl, mcvf */
2492           if (hash->movm_args & 0x1)
2493             hash->movm_stack_size += 6 * 4;
2494
2495           /* exreg1 space.  e4, e5, e6, e7 */
2496           if (hash->movm_args & 0x2)
2497             hash->movm_stack_size += 4 * 4;
2498
2499           /* exreg0 space.  e2, e3  */
2500           if (hash->movm_args & 0x4)
2501             hash->movm_stack_size += 2 * 4;
2502         }
2503     }
2504
2505   /* Now look for the two stack adjustment variants.  */
2506   if (byte1 == 0xf8 && byte2 == 0xfe)
2507     {
2508       int temp = bfd_get_8 (abfd, contents + addr + 2);
2509       temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
2510
2511       hash->stack_size = -temp;
2512     }
2513   else if (byte1 == 0xfa && byte2 == 0xfe)
2514     {
2515       int temp = bfd_get_16 (abfd, contents + addr + 2);
2516       temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
2517       temp = -temp;
2518
2519       if (temp < 255)
2520         hash->stack_size = temp;
2521     }
2522
2523   /* If the total stack to be allocated by the call instruction is more
2524      than 255 bytes, then we can't remove the stack adjustment by using
2525      "call" (we might still be able to remove the "movm" instruction.  */
2526   if (hash->stack_size + hash->movm_stack_size > 255)
2527     hash->stack_size = 0;
2528
2529   return;
2530 }
2531
2532 /* Delete some bytes from a section while relaxing.  */
2533
2534 static boolean
2535 mn10300_elf_relax_delete_bytes (abfd, sec, addr, count)
2536      bfd *abfd;
2537      asection *sec;
2538      bfd_vma addr;
2539      int count;
2540 {
2541   Elf_Internal_Shdr *symtab_hdr;
2542   Elf32_External_Sym *extsyms;
2543   int shndx, index;
2544   bfd_byte *contents;
2545   Elf_Internal_Rela *irel, *irelend;
2546   Elf_Internal_Rela *irelalign;
2547   bfd_vma toaddr;
2548   Elf32_External_Sym *esym, *esymend;
2549   struct elf32_mn10300_link_hash_entry *sym_hash;
2550
2551   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2552   extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
2553
2554   shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2555
2556   contents = elf_section_data (sec)->this_hdr.contents;
2557
2558   /* The deletion must stop at the next ALIGN reloc for an aligment
2559      power larger than the number of bytes we are deleting.  */
2560
2561   irelalign = NULL;
2562   toaddr = sec->_cooked_size;
2563
2564   irel = elf_section_data (sec)->relocs;
2565   irelend = irel + sec->reloc_count;
2566
2567   /* Actually delete the bytes.  */
2568   memmove (contents + addr, contents + addr + count, toaddr - addr - count);
2569   sec->_cooked_size -= count;
2570
2571   /* Adjust all the relocs.  */
2572   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
2573     {
2574       /* Get the new reloc address.  */
2575       if ((irel->r_offset > addr
2576            && irel->r_offset < toaddr))
2577         irel->r_offset -= count;
2578     }
2579
2580   /* Adjust the local symbols defined in this section.  */
2581   esym = extsyms;
2582   esymend = esym + symtab_hdr->sh_info;
2583   for (; esym < esymend; esym++)
2584     {
2585       Elf_Internal_Sym isym;
2586
2587       bfd_elf32_swap_symbol_in (abfd, esym, &isym);
2588
2589       if (isym.st_shndx == shndx
2590           && isym.st_value > addr
2591           && isym.st_value < toaddr)
2592         {
2593           isym.st_value -= count;
2594           bfd_elf32_swap_symbol_out (abfd, &isym, esym);
2595         }
2596     }
2597
2598   /* Now adjust the global symbols defined in this section.  */
2599   esym = extsyms + symtab_hdr->sh_info;
2600   esymend = extsyms + (symtab_hdr->sh_size / sizeof (Elf32_External_Sym));
2601   for (index = 0; esym < esymend; esym++, index++)
2602     {
2603       Elf_Internal_Sym isym;
2604
2605       bfd_elf32_swap_symbol_in (abfd, esym, &isym);
2606       sym_hash = (struct elf32_mn10300_link_hash_entry *)
2607                    (elf_sym_hashes (abfd)[index]);
2608       if (isym.st_shndx == shndx
2609           && ((sym_hash)->root.root.type == bfd_link_hash_defined
2610               || (sym_hash)->root.root.type == bfd_link_hash_defweak)
2611           && (sym_hash)->root.root.u.def.section == sec
2612           && (sym_hash)->root.root.u.def.value > addr
2613           && (sym_hash)->root.root.u.def.value < toaddr)
2614         {
2615           (sym_hash)->root.root.u.def.value -= count;
2616         }
2617     }
2618
2619   return true;
2620 }
2621
2622 /* Return true if a symbol exists at the given address, else return
2623    false.  */
2624 static boolean
2625 mn10300_elf_symbol_address_p (abfd, sec, extsyms, addr)
2626      bfd *abfd;
2627      asection *sec;
2628      Elf32_External_Sym *extsyms;
2629      bfd_vma addr;
2630 {
2631   Elf_Internal_Shdr *symtab_hdr;
2632   int shndx;
2633   Elf32_External_Sym *esym, *esymend;
2634   struct elf32_mn10300_link_hash_entry **sym_hash, **sym_hash_end;
2635
2636   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2637   shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2638
2639   /* Examine all the symbols.  */
2640   esym = extsyms;
2641   esymend = esym + symtab_hdr->sh_info;
2642   for (; esym < esymend; esym++)
2643     {
2644       Elf_Internal_Sym isym;
2645
2646       bfd_elf32_swap_symbol_in (abfd, esym, &isym);
2647
2648       if (isym.st_shndx == shndx
2649           && isym.st_value == addr)
2650         return true;
2651     }
2652
2653   sym_hash = (struct elf32_mn10300_link_hash_entry **) (elf_sym_hashes (abfd));
2654   sym_hash_end = (sym_hash
2655                   + (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2656                      - symtab_hdr->sh_info));
2657   for (; sym_hash < sym_hash_end; sym_hash++)
2658     {
2659       if (((*sym_hash)->root.root.type == bfd_link_hash_defined
2660            || (*sym_hash)->root.root.type == bfd_link_hash_defweak)
2661           && (*sym_hash)->root.root.u.def.section == sec
2662           && (*sym_hash)->root.root.u.def.value == addr)
2663         return true;
2664     }
2665   return false;
2666 }
2667
2668 /* This is a version of bfd_generic_get_relocated_section_contents
2669    which uses mn10300_elf_relocate_section.  */
2670
2671 static bfd_byte *
2672 mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order,
2673                                             data, relocateable, symbols)
2674      bfd *output_bfd;
2675      struct bfd_link_info *link_info;
2676      struct bfd_link_order *link_order;
2677      bfd_byte *data;
2678      boolean relocateable;
2679      asymbol **symbols;
2680 {
2681   Elf_Internal_Shdr *symtab_hdr;
2682   asection *input_section = link_order->u.indirect.section;
2683   bfd *input_bfd = input_section->owner;
2684   asection **sections = NULL;
2685   Elf_Internal_Rela *internal_relocs = NULL;
2686   Elf32_External_Sym *external_syms = NULL;
2687   Elf_Internal_Sym *internal_syms = NULL;
2688
2689   /* We only need to handle the case of relaxing, or of having a
2690      particular set of section contents, specially.  */
2691   if (relocateable
2692       || elf_section_data (input_section)->this_hdr.contents == NULL)
2693     return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
2694                                                        link_order, data,
2695                                                        relocateable,
2696                                                        symbols);
2697
2698   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2699
2700   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
2701           input_section->_raw_size);
2702
2703   if ((input_section->flags & SEC_RELOC) != 0
2704       && input_section->reloc_count > 0)
2705     {
2706       Elf_Internal_Sym *isymp;
2707       asection **secpp;
2708       Elf32_External_Sym *esym, *esymend;
2709
2710       if (symtab_hdr->contents != NULL)
2711         external_syms = (Elf32_External_Sym *) symtab_hdr->contents;
2712       else
2713         {
2714           external_syms = ((Elf32_External_Sym *)
2715                            bfd_malloc (symtab_hdr->sh_info
2716                                        * sizeof (Elf32_External_Sym)));
2717           if (external_syms == NULL && symtab_hdr->sh_info > 0)
2718             goto error_return;
2719           if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2720               || (bfd_read (external_syms, sizeof (Elf32_External_Sym),
2721                             symtab_hdr->sh_info, input_bfd)
2722                   != (symtab_hdr->sh_info * sizeof (Elf32_External_Sym))))
2723             goto error_return;
2724         }
2725
2726       internal_relocs = (_bfd_elf32_link_read_relocs
2727                          (input_bfd, input_section, (PTR) NULL,
2728                           (Elf_Internal_Rela *) NULL, false));
2729       if (internal_relocs == NULL)
2730         goto error_return;
2731
2732       internal_syms = ((Elf_Internal_Sym *)
2733                        bfd_malloc (symtab_hdr->sh_info
2734                                    * sizeof (Elf_Internal_Sym)));
2735       if (internal_syms == NULL && symtab_hdr->sh_info > 0)
2736         goto error_return;
2737
2738       sections = (asection **) bfd_malloc (symtab_hdr->sh_info
2739                                            * sizeof (asection *));
2740       if (sections == NULL && symtab_hdr->sh_info > 0)
2741         goto error_return;
2742
2743       isymp = internal_syms;
2744       secpp = sections;
2745       esym = external_syms;
2746       esymend = esym + symtab_hdr->sh_info;
2747       for (; esym < esymend; ++esym, ++isymp, ++secpp)
2748         {
2749           asection *isec;
2750
2751           bfd_elf32_swap_symbol_in (input_bfd, esym, isymp);
2752
2753           if (isymp->st_shndx == SHN_UNDEF)
2754             isec = bfd_und_section_ptr;
2755           else if (isymp->st_shndx > 0 && isymp->st_shndx < SHN_LORESERVE)
2756             isec = bfd_section_from_elf_index (input_bfd, isymp->st_shndx);
2757           else if (isymp->st_shndx == SHN_ABS)
2758             isec = bfd_abs_section_ptr;
2759           else if (isymp->st_shndx == SHN_COMMON)
2760             isec = bfd_com_section_ptr;
2761           else
2762             {
2763               /* Who knows?  */
2764               isec = NULL;
2765             }
2766
2767           *secpp = isec;
2768         }
2769
2770       if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd,
2771                                      input_section, data, internal_relocs,
2772                                      internal_syms, sections))
2773         goto error_return;
2774
2775       if (sections != NULL)
2776         free (sections);
2777       sections = NULL;
2778       if (internal_syms != NULL)
2779         free (internal_syms);
2780       internal_syms = NULL;
2781       if (external_syms != NULL && symtab_hdr->contents == NULL)
2782         free (external_syms);
2783       external_syms = NULL;
2784       if (internal_relocs != elf_section_data (input_section)->relocs)
2785         free (internal_relocs);
2786       internal_relocs = NULL;
2787     }
2788
2789   return data;
2790
2791  error_return:
2792   if (internal_relocs != NULL
2793       && internal_relocs != elf_section_data (input_section)->relocs)
2794     free (internal_relocs);
2795   if (external_syms != NULL && symtab_hdr->contents == NULL)
2796     free (external_syms);
2797   if (internal_syms != NULL)
2798     free (internal_syms);
2799   if (sections != NULL)
2800     free (sections);
2801   return NULL;
2802 }
2803
2804 /* Assorted hash table functions.  */
2805
2806 /* Initialize an entry in the link hash table.  */
2807
2808 /* Create an entry in an MN10300 ELF linker hash table.  */
2809
2810 static struct bfd_hash_entry *
2811 elf32_mn10300_link_hash_newfunc (entry, table, string)
2812      struct bfd_hash_entry *entry;
2813      struct bfd_hash_table *table;
2814      const char *string;
2815 {
2816   struct elf32_mn10300_link_hash_entry *ret =
2817     (struct elf32_mn10300_link_hash_entry *) entry;
2818
2819   /* Allocate the structure if it has not already been allocated by a
2820      subclass.  */
2821   if (ret == (struct elf32_mn10300_link_hash_entry *) NULL)
2822     ret = ((struct elf32_mn10300_link_hash_entry *)
2823            bfd_hash_allocate (table,
2824                               sizeof (struct elf32_mn10300_link_hash_entry)));
2825   if (ret == (struct elf32_mn10300_link_hash_entry *) NULL)
2826     return (struct bfd_hash_entry *) ret;
2827
2828   /* Call the allocation method of the superclass.  */
2829   ret = ((struct elf32_mn10300_link_hash_entry *)
2830          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
2831                                      table, string));
2832   if (ret != (struct elf32_mn10300_link_hash_entry *) NULL)
2833     {
2834       ret->direct_calls = 0;
2835       ret->stack_size = 0;
2836       ret->movm_stack_size = 0;
2837       ret->flags = 0;
2838       ret->movm_args = 0;
2839     }
2840
2841   return (struct bfd_hash_entry *) ret;
2842 }
2843
2844 /* Create an mn10300 ELF linker hash table.  */
2845
2846 static struct bfd_link_hash_table *
2847 elf32_mn10300_link_hash_table_create (abfd)
2848      bfd *abfd;
2849 {
2850   struct elf32_mn10300_link_hash_table *ret;
2851
2852   ret = ((struct elf32_mn10300_link_hash_table *)
2853          bfd_alloc (abfd, sizeof (struct elf32_mn10300_link_hash_table)));
2854   if (ret == (struct elf32_mn10300_link_hash_table *) NULL)
2855     return NULL;
2856
2857   if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
2858                                        elf32_mn10300_link_hash_newfunc))
2859     {
2860       bfd_release (abfd, ret);
2861       return NULL;
2862     }
2863
2864   ret->flags = 0;
2865   ret->static_hash_table
2866     = ((struct elf32_mn10300_link_hash_table *)
2867        bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
2868   if (ret->static_hash_table == NULL)
2869     {
2870       bfd_release (abfd, ret);
2871       return NULL;
2872     }
2873
2874   if (! _bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
2875                                        elf32_mn10300_link_hash_newfunc))
2876     {
2877       bfd_release (abfd, ret->static_hash_table);
2878       bfd_release (abfd, ret);
2879       return NULL;
2880     }
2881   return &ret->root.root;
2882 }
2883
2884 static int
2885 elf_mn10300_mach (flags)
2886      flagword flags;
2887 {
2888   switch (flags & EF_MN10300_MACH)
2889     {
2890     case E_MN10300_MACH_MN10300:
2891     default:
2892       return bfd_mach_mn10300;
2893
2894     case E_MN10300_MACH_AM33:
2895       return bfd_mach_am33;
2896     }
2897 }
2898
2899 /* The final processing done just before writing out a MN10300 ELF object
2900    file.  This gets the MN10300 architecture right based on the machine
2901    number.  */
2902
2903 void
2904 _bfd_mn10300_elf_final_write_processing (abfd, linker)
2905      bfd *abfd;
2906      boolean linker ATTRIBUTE_UNUSED;
2907 {
2908   unsigned long val;
2909
2910   switch (bfd_get_mach (abfd))
2911     {
2912     default:
2913     case bfd_mach_mn10300:
2914       val = E_MN10300_MACH_MN10300;
2915       break;
2916
2917     case bfd_mach_am33:
2918       val = E_MN10300_MACH_AM33;
2919       break;
2920     }
2921
2922   elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
2923   elf_elfheader (abfd)->e_flags |= val;
2924 }
2925
2926 boolean
2927 _bfd_mn10300_elf_object_p (abfd)
2928      bfd *abfd;
2929 {
2930   bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
2931                              elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
2932   return true;
2933 }
2934
2935 /* Merge backend specific data from an object file to the output
2936    object file when linking.  */
2937
2938 boolean
2939 _bfd_mn10300_elf_merge_private_bfd_data (ibfd, obfd)
2940      bfd *ibfd;
2941      bfd *obfd;
2942 {
2943   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2944       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2945     return true;
2946
2947   if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
2948       && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
2949     {
2950       if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
2951                                bfd_get_mach (ibfd)))
2952         return false;
2953     }
2954
2955   return true;
2956 }
2957
2958 #define TARGET_LITTLE_SYM       bfd_elf32_mn10300_vec
2959 #define TARGET_LITTLE_NAME      "elf32-mn10300"
2960 #define ELF_ARCH                bfd_arch_mn10300
2961 #define ELF_MACHINE_CODE        EM_CYGNUS_MN10300
2962 #define ELF_MAXPAGESIZE         0x1000
2963
2964 #define elf_info_to_howto               mn10300_info_to_howto
2965 #define elf_info_to_howto_rel           0
2966 #define elf_backend_can_gc_sections     1
2967 #define elf_backend_check_relocs        mn10300_elf_check_relocs
2968 #define elf_backend_gc_mark_hook        mn10300_elf_gc_mark_hook
2969 #define elf_backend_relocate_section    mn10300_elf_relocate_section
2970 #define bfd_elf32_bfd_relax_section     mn10300_elf_relax_section
2971 #define bfd_elf32_bfd_get_relocated_section_contents \
2972                                 mn10300_elf_get_relocated_section_contents
2973 #define bfd_elf32_bfd_link_hash_table_create \
2974                                 elf32_mn10300_link_hash_table_create
2975
2976 #define elf_symbol_leading_char '_'
2977
2978 /* So we can set bits in e_flags.  */
2979 #define elf_backend_final_write_processing \
2980                                         _bfd_mn10300_elf_final_write_processing
2981 #define elf_backend_object_p            _bfd_mn10300_elf_object_p
2982
2983 #define bfd_elf32_bfd_merge_private_bfd_data \
2984                                         _bfd_mn10300_elf_merge_private_bfd_data
2985
2986 #include "elf32-target.h"