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