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