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