1 /* Matsushita 10300 specific support for 32-bit ELF
2 Copyright (C) 1996-2016 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
25 #include "elf/mn10300.h"
26 #include "libiberty.h"
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. */
34 struct elf32_mn10300_link_hash_entry
36 /* The basic elf link hash table entry. */
37 struct elf_link_hash_entry root;
39 /* For function symbols, the number of times this function is
40 called directly (ie by name). */
41 unsigned int direct_calls;
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.
47 This does not include stack allocated by movm! */
48 unsigned char stack_size;
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;
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;
60 /* When set, convert all "call" instructions to this target into "calls"
62 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
64 /* Used to mark functions which have had redundant parts of their
66 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
69 /* Calculated value. */
77 /* Used to distinguish GOT entries for TLS types from normal GOT entries. */
78 unsigned char tls_type;
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
86 /* The main hash table. */
87 struct elf_link_hash_table root;
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;
94 /* Random linker state flags. */
95 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
99 bfd_signed_vma refcount;
106 #define elf_mn10300_hash_entry(ent) ((struct elf32_mn10300_link_hash_entry *)(ent))
108 struct elf_mn10300_obj_tdata
110 struct elf_obj_tdata root;
112 /* tls_type for each local got entry. */
113 char * local_got_tls_type;
116 #define elf_mn10300_tdata(abfd) \
117 ((struct elf_mn10300_obj_tdata *) (abfd)->tdata.any)
119 #define elf_mn10300_local_got_tls_type(abfd) \
120 (elf_mn10300_tdata (abfd)->local_got_tls_type)
123 #define streq(a, b) (strcmp ((a),(b)) == 0)
126 /* For MN10300 linker hash table. */
128 /* Get the MN10300 ELF linker hash table from a link_info structure. */
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)
134 #define elf32_mn10300_link_hash_traverse(table, func, info) \
135 (elf_link_hash_traverse \
137 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
140 static reloc_howto_type elf_mn10300_howto_table[] =
142 /* Dummy relocation. Does nothing. */
143 HOWTO (R_MN10300_NONE,
149 complain_overflow_dont,
150 bfd_elf_generic_reloc,
156 /* Standard 32 bit reloc. */
163 complain_overflow_bitfield,
164 bfd_elf_generic_reloc,
170 /* Standard 16 bit reloc. */
177 complain_overflow_bitfield,
178 bfd_elf_generic_reloc,
184 /* Standard 8 bit reloc. */
191 complain_overflow_bitfield,
192 bfd_elf_generic_reloc,
198 /* Standard 32bit pc-relative reloc. */
199 HOWTO (R_MN10300_PCREL32,
205 complain_overflow_bitfield,
206 bfd_elf_generic_reloc,
212 /* Standard 16bit pc-relative reloc. */
213 HOWTO (R_MN10300_PCREL16,
219 complain_overflow_bitfield,
220 bfd_elf_generic_reloc,
226 /* Standard 8 pc-relative reloc. */
227 HOWTO (R_MN10300_PCREL8,
233 complain_overflow_bitfield,
234 bfd_elf_generic_reloc,
241 /* GNU extension to record C++ vtable hierarchy. */
242 HOWTO (R_MN10300_GNU_VTINHERIT, /* type */
244 0, /* size (0 = byte, 1 = short, 2 = long) */
246 FALSE, /* pc_relative */
248 complain_overflow_dont, /* complain_on_overflow */
249 NULL, /* special_function */
250 "R_MN10300_GNU_VTINHERIT", /* name */
251 FALSE, /* partial_inplace */
254 FALSE), /* pcrel_offset */
256 /* GNU extension to record C++ vtable member usage */
257 HOWTO (R_MN10300_GNU_VTENTRY, /* type */
259 0, /* size (0 = byte, 1 = short, 2 = long) */
261 FALSE, /* pc_relative */
263 complain_overflow_dont, /* complain_on_overflow */
264 NULL, /* special_function */
265 "R_MN10300_GNU_VTENTRY", /* name */
266 FALSE, /* partial_inplace */
269 FALSE), /* pcrel_offset */
271 /* Standard 24 bit reloc. */
278 complain_overflow_bitfield,
279 bfd_elf_generic_reloc,
285 HOWTO (R_MN10300_GOTPC32, /* type */
287 2, /* size (0 = byte, 1 = short, 2 = long) */
289 TRUE, /* pc_relative */
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 */
299 HOWTO (R_MN10300_GOTPC16, /* type */
301 1, /* size (0 = byte, 1 = short, 2 = long) */
303 TRUE, /* pc_relative */
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 */
313 HOWTO (R_MN10300_GOTOFF32, /* type */
315 2, /* size (0 = byte, 1 = short, 2 = long) */
317 FALSE, /* pc_relative */
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 */
327 HOWTO (R_MN10300_GOTOFF24, /* type */
329 2, /* size (0 = byte, 1 = short, 2 = long) */
331 FALSE, /* pc_relative */
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 */
341 HOWTO (R_MN10300_GOTOFF16, /* type */
343 1, /* size (0 = byte, 1 = short, 2 = long) */
345 FALSE, /* pc_relative */
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 */
355 HOWTO (R_MN10300_PLT32, /* type */
357 2, /* size (0 = byte, 1 = short, 2 = long) */
359 TRUE, /* pc_relative */
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 */
369 HOWTO (R_MN10300_PLT16, /* type */
371 1, /* size (0 = byte, 1 = short, 2 = long) */
373 TRUE, /* pc_relative */
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 */
383 HOWTO (R_MN10300_GOT32, /* type */
385 2, /* size (0 = byte, 1 = short, 2 = long) */
387 FALSE, /* pc_relative */
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 */
397 HOWTO (R_MN10300_GOT24, /* type */
399 2, /* size (0 = byte, 1 = short, 2 = long) */
401 FALSE, /* pc_relative */
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 */
411 HOWTO (R_MN10300_GOT16, /* type */
413 1, /* size (0 = byte, 1 = short, 2 = long) */
415 FALSE, /* pc_relative */
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 */
425 HOWTO (R_MN10300_COPY, /* type */
427 2, /* size (0 = byte, 1 = short, 2 = long) */
429 FALSE, /* pc_relative */
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 */
439 HOWTO (R_MN10300_GLOB_DAT, /* type */
441 2, /* size (0 = byte, 1 = short, 2 = long) */
443 FALSE, /* pc_relative */
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 */
453 HOWTO (R_MN10300_JMP_SLOT, /* type */
455 2, /* size (0 = byte, 1 = short, 2 = long) */
457 FALSE, /* pc_relative */
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 */
467 HOWTO (R_MN10300_RELATIVE, /* type */
469 2, /* size (0 = byte, 1 = short, 2 = long) */
471 FALSE, /* pc_relative */
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 */
481 HOWTO (R_MN10300_TLS_GD, /* type */
483 2, /* size (0 = byte, 1 = short, 2 = long) */
485 FALSE, /* pc_relative */
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 */
495 HOWTO (R_MN10300_TLS_LD, /* type */
497 2, /* size (0 = byte, 1 = short, 2 = long) */
499 FALSE, /* pc_relative */
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 */
509 HOWTO (R_MN10300_TLS_LDO, /* type */
511 2, /* size (0 = byte, 1 = short, 2 = long) */
513 FALSE, /* pc_relative */
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 */
523 HOWTO (R_MN10300_TLS_GOTIE, /* type */
525 2, /* size (0 = byte, 1 = short, 2 = long) */
527 FALSE, /* pc_relative */
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 */
537 HOWTO (R_MN10300_TLS_IE, /* type */
539 2, /* size (0 = byte, 1 = short, 2 = long) */
541 FALSE, /* pc_relative */
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 */
551 HOWTO (R_MN10300_TLS_LE, /* type */
553 2, /* size (0 = byte, 1 = short, 2 = long) */
555 FALSE, /* pc_relative */
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 */
565 HOWTO (R_MN10300_TLS_DTPMOD, /* type */
567 2, /* size (0 = byte, 1 = short, 2 = long) */
569 FALSE, /* pc_relative */
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 */
579 HOWTO (R_MN10300_TLS_DTPOFF, /* type */
581 2, /* size (0 = byte, 1 = short, 2 = long) */
583 FALSE, /* pc_relative */
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 */
593 HOWTO (R_MN10300_TLS_TPOFF, /* type */
595 2, /* size (0 = byte, 1 = short, 2 = long) */
597 FALSE, /* pc_relative */
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 */
607 HOWTO (R_MN10300_SYM_DIFF, /* type */
609 2, /* size (0 = byte, 1 = short, 2 = long) */
611 FALSE, /* pc_relative */
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 */
621 HOWTO (R_MN10300_ALIGN, /* type */
623 0, /* size (0 = byte, 1 = short, 2 = long) */
625 FALSE, /* pc_relative */
627 complain_overflow_dont,/* complain_on_overflow */
628 NULL, /* special handler. */
629 "R_MN10300_ALIGN", /* name */
630 FALSE, /* partial_inplace */
633 FALSE) /* pcrel_offset */
636 struct mn10300_reloc_map
638 bfd_reloc_code_real_type bfd_reloc_val;
639 unsigned char elf_reloc_val;
642 static const struct mn10300_reloc_map mn10300_reloc_map[] =
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 }
681 /* Create the GOT section. */
684 _bfd_mn10300_elf_create_got_section (bfd * abfd,
685 struct bfd_link_info * info)
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;
695 /* This function may be called more than once. */
696 htab = elf_hash_table (info);
697 if (htab->sgot != NULL)
700 switch (bed->s->arch_size)
711 bfd_set_error (bfd_error_bad_value);
715 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
716 | SEC_LINKER_CREATED);
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;
725 s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
728 || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
731 /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
733 if (bed->want_plt_sym)
735 h = _bfd_elf_define_linkage_sym (abfd, info, s,
736 "_PROCEDURE_LINKAGE_TABLE_");
742 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
745 || ! bfd_set_section_alignment (abfd, s, ptralign))
748 if (bed->want_got_plt)
750 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
753 || ! bfd_set_section_alignment (abfd, s, ptralign))
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_");
766 /* The first bit of the global offset table is the header. */
767 s->size += bed->got_header_size;
772 static reloc_howto_type *
773 bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
774 bfd_reloc_code_real_type code)
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];
785 static reloc_howto_type *
786 bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
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;
799 /* Set the howto pointer for an MN10300 ELF reloc. */
802 mn10300_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
804 Elf_Internal_Rela *dst)
808 r_type = ELF32_R_TYPE (dst->r_info);
809 if (r_type >= R_MN10300_MAX)
811 _bfd_error_handler (_("%B: unrecognised MN10300 reloc number: %d"),
813 bfd_set_error (bfd_error_bad_value);
814 r_type = R_MN10300_NONE;
816 cache_ptr->howto = elf_mn10300_howto_table + r_type;
820 elf_mn10300_tls_transition (struct bfd_link_info * info,
822 struct elf_link_hash_entry * h,
824 bfd_boolean counting)
826 bfd_boolean is_local;
828 if (r_type == R_MN10300_TLS_GD
830 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
831 return R_MN10300_TLS_GOTIE;
833 if (bfd_link_pic (info))
836 if (! (sec->flags & SEC_CODE))
839 if (! counting && h != NULL && ! elf_hash_table (info)->dynamic_sections_created)
842 is_local = SYMBOL_CALLS_LOCAL (info, h);
844 /* For the main program, these are the transitions we do. */
847 case R_MN10300_TLS_GD: return is_local ? R_MN10300_TLS_LE : R_MN10300_TLS_GOTIE;
848 case R_MN10300_TLS_LD: return R_MN10300_NONE;
849 case R_MN10300_TLS_LDO: return R_MN10300_TLS_LE;
850 case R_MN10300_TLS_IE:
851 case R_MN10300_TLS_GOTIE: return is_local ? R_MN10300_TLS_LE : r_type;
857 /* Return the relocation value for @tpoff relocation
858 if STT_TLS virtual address is ADDRESS. */
861 dtpoff (struct bfd_link_info * info, bfd_vma address)
863 struct elf_link_hash_table *htab = elf_hash_table (info);
865 /* If tls_sec is NULL, we should have signalled an error already. */
866 if (htab->tls_sec == NULL)
868 return address - htab->tls_sec->vma;
871 /* Return the relocation value for @tpoff relocation
872 if STT_TLS virtual address is ADDRESS. */
875 tpoff (struct bfd_link_info * info, bfd_vma address)
877 struct elf_link_hash_table *htab = elf_hash_table (info);
879 /* If tls_sec is NULL, we should have signalled an error already. */
880 if (htab->tls_sec == NULL)
882 return address - (htab->tls_size + htab->tls_sec->vma);
885 /* Returns nonzero if there's a R_MN10300_PLT32 reloc that we now need
886 to skip, after this one. The actual value is the offset between
887 this reloc and the PLT reloc. */
890 mn10300_do_tls_transition (bfd * input_bfd,
892 unsigned int tls_r_type,
896 bfd_byte *op = contents + offset;
899 #define TLS_PAIR(r1,r2) ((r1) * R_MN10300_MAX + (r2))
901 /* This is common to all GD/LD transitions, so break it out. */
902 if (r_type == R_MN10300_TLS_GD
903 || r_type == R_MN10300_TLS_LD)
907 BFD_ASSERT (bfd_get_8 (input_bfd, op) == 0xFC);
908 BFD_ASSERT (bfd_get_8 (input_bfd, op + 1) == 0xCC);
910 BFD_ASSERT (bfd_get_8 (input_bfd, op + 6) == 0xF1);
911 gotreg = (bfd_get_8 (input_bfd, op + 7) & 0x0c) >> 2;
913 BFD_ASSERT (bfd_get_8 (input_bfd, op + 8) == 0xDD);
916 switch (TLS_PAIR (r_type, tls_r_type))
918 case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_GOTIE):
920 /* Keep track of which register we put GOTptr in. */
921 /* mov (_x@indntpoff,a2),a0. */
922 memcpy (op, "\xFC\x20\x00\x00\x00\x00", 6);
925 memcpy (op+6, "\xF9\x78\x28", 3);
926 /* or 0x00000000, d0 - six byte nop. */
927 memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
931 case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_LE):
933 /* Register is *always* a0. */
934 /* mov _x@tpoff,a0. */
935 memcpy (op, "\xFC\xDC\x00\x00\x00\x00", 6);
937 memcpy (op+6, "\xF9\x78\x28", 3);
938 /* or 0x00000000, d0 - six byte nop. */
939 memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
942 case TLS_PAIR (R_MN10300_TLS_LD, R_MN10300_NONE):
944 /* Register is *always* a0. */
946 memcpy (op, "\xF5\x88", 2);
947 /* or 0x00000000, d0 - six byte nop. */
948 memcpy (op+2, "\xFC\xE4\x00\x00\x00\x00", 6);
949 /* or 0x00000000, e2 - seven byte nop. */
950 memcpy (op+8, "\xFE\x19\x22\x00\x00\x00\x00", 7);
954 case TLS_PAIR (R_MN10300_TLS_LDO, R_MN10300_TLS_LE):
955 /* No changes needed, just the reloc change. */
958 /* These are a little tricky, because we have to detect which
959 opcode is being used (they're different sizes, with the reloc
960 at different offsets within the opcode) and convert each
961 accordingly, copying the operands as needed. The conversions
962 we do are as follows (IE,GOTIE,LE):
964 1111 1100 1010 01Dn [-- abs32 --] MOV (x@indntpoff),Dn
965 1111 1100 0000 DnAm [-- abs32 --] MOV (x@gotntpoff,Am),Dn
966 1111 1100 1100 11Dn [-- abs32 --] MOV x@tpoff,Dn
968 1111 1100 1010 00An [-- abs32 --] MOV (x@indntpoff),An
969 1111 1100 0010 AnAm [-- abs32 --] MOV (x@gotntpoff,Am),An
970 1111 1100 1101 11An [-- abs32 --] MOV x@tpoff,An
972 1111 1110 0000 1110 Rnnn Xxxx [-- abs32 --] MOV (x@indntpoff),Rn
973 1111 1110 0000 1010 Rnnn Rmmm [-- abs32 --] MOV (x@indntpoff,Rm),Rn
974 1111 1110 0000 1000 Rnnn Xxxx [-- abs32 --] MOV x@tpoff,Rn
976 Since the GOT pointer is always $a2, we assume the last
977 normally won't happen, but let's be paranoid and plan for the
978 day that GCC optimizes it somewhow. */
980 case TLS_PAIR (R_MN10300_TLS_IE, R_MN10300_TLS_LE):
984 if ((op[1] & 0xFC) == 0xA4) /* Dn */
986 op[1] &= 0x03; /* Leaves Dn. */
991 op[1] &= 0x03; /* Leaves An. */
995 else if (op[-3] == 0xFE)
1001 case TLS_PAIR (R_MN10300_TLS_GOTIE, R_MN10300_TLS_LE):
1005 if ((op[1] & 0xF0) == 0x00) /* Dn */
1007 op[1] &= 0x0C; /* Leaves Dn. */
1013 op[1] &= 0x0C; /* Leaves An. */
1018 else if (op[-3] == 0xFE)
1026 (_("%s: Unsupported transition from %s to %s"),
1027 bfd_get_filename (input_bfd),
1028 elf_mn10300_howto_table[r_type].name,
1029 elf_mn10300_howto_table[tls_r_type].name);
1036 /* Look through the relocs for a section during the first phase.
1037 Since we don't do .gots or .plts, we just need to consider the
1038 virtual table relocs for gc. */
1041 mn10300_elf_check_relocs (bfd *abfd,
1042 struct bfd_link_info *info,
1044 const Elf_Internal_Rela *relocs)
1046 struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
1047 bfd_boolean sym_diff_reloc_seen;
1048 Elf_Internal_Shdr *symtab_hdr;
1049 Elf_Internal_Sym * isymbuf = NULL;
1050 struct elf_link_hash_entry **sym_hashes;
1051 const Elf_Internal_Rela *rel;
1052 const Elf_Internal_Rela *rel_end;
1054 bfd_vma * local_got_offsets;
1058 bfd_boolean result = FALSE;
1064 if (bfd_link_relocatable (info))
1067 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1068 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
1069 sym_hashes = elf_sym_hashes (abfd);
1071 dynobj = elf_hash_table (info)->dynobj;
1072 local_got_offsets = elf_local_got_offsets (abfd);
1073 rel_end = relocs + sec->reloc_count;
1074 sym_diff_reloc_seen = FALSE;
1076 for (rel = relocs; rel < rel_end; rel++)
1078 struct elf_link_hash_entry *h;
1079 unsigned long r_symndx;
1080 unsigned int r_type;
1081 int tls_type = GOT_NORMAL;
1083 r_symndx = ELF32_R_SYM (rel->r_info);
1084 if (r_symndx < symtab_hdr->sh_info)
1088 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
1089 while (h->root.type == bfd_link_hash_indirect
1090 || h->root.type == bfd_link_hash_warning)
1091 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1093 /* PR15323, ref flags aren't set for references in the same
1095 h->root.non_ir_ref = 1;
1098 r_type = ELF32_R_TYPE (rel->r_info);
1099 r_type = elf_mn10300_tls_transition (info, r_type, h, sec, TRUE);
1101 /* Some relocs require a global offset table. */
1106 case R_MN10300_GOT32:
1107 case R_MN10300_GOT24:
1108 case R_MN10300_GOT16:
1109 case R_MN10300_GOTOFF32:
1110 case R_MN10300_GOTOFF24:
1111 case R_MN10300_GOTOFF16:
1112 case R_MN10300_GOTPC32:
1113 case R_MN10300_GOTPC16:
1114 case R_MN10300_TLS_GD:
1115 case R_MN10300_TLS_LD:
1116 case R_MN10300_TLS_GOTIE:
1117 case R_MN10300_TLS_IE:
1118 elf_hash_table (info)->dynobj = dynobj = abfd;
1119 if (! _bfd_mn10300_elf_create_got_section (dynobj, info))
1130 /* This relocation describes the C++ object vtable hierarchy.
1131 Reconstruct it for later use during GC. */
1132 case R_MN10300_GNU_VTINHERIT:
1133 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
1137 /* This relocation describes which C++ vtable entries are actually
1138 used. Record for later use during GC. */
1139 case R_MN10300_GNU_VTENTRY:
1140 BFD_ASSERT (h != NULL);
1142 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
1146 case R_MN10300_TLS_LD:
1147 htab->tls_ldm_got.refcount ++;
1148 tls_type = GOT_TLS_LD;
1150 if (htab->tls_ldm_got.got_allocated)
1154 case R_MN10300_TLS_IE:
1155 case R_MN10300_TLS_GOTIE:
1156 if (bfd_link_pic (info))
1157 info->flags |= DF_STATIC_TLS;
1160 case R_MN10300_TLS_GD:
1161 case R_MN10300_GOT32:
1162 case R_MN10300_GOT24:
1163 case R_MN10300_GOT16:
1165 /* This symbol requires a global offset table entry. */
1169 case R_MN10300_TLS_IE:
1170 case R_MN10300_TLS_GOTIE: tls_type = GOT_TLS_IE; break;
1171 case R_MN10300_TLS_GD: tls_type = GOT_TLS_GD; break;
1172 default: tls_type = GOT_NORMAL; break;
1177 sgot = htab->root.sgot;
1178 BFD_ASSERT (sgot != NULL);
1182 && (h != NULL || bfd_link_pic (info)))
1184 srelgot = bfd_get_linker_section (dynobj, ".rela.got");
1185 if (srelgot == NULL)
1187 flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
1188 | SEC_IN_MEMORY | SEC_LINKER_CREATED
1190 srelgot = bfd_make_section_anyway_with_flags (dynobj,
1194 || ! bfd_set_section_alignment (dynobj, srelgot, 2))
1199 if (r_type == R_MN10300_TLS_LD)
1201 htab->tls_ldm_got.offset = sgot->size;
1202 htab->tls_ldm_got.got_allocated ++;
1206 if (elf_mn10300_hash_entry (h)->tls_type != tls_type
1207 && elf_mn10300_hash_entry (h)->tls_type != GOT_UNKNOWN)
1209 if (tls_type == GOT_TLS_IE
1210 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_GD)
1211 /* No change - this is ok. */;
1212 else if (tls_type == GOT_TLS_GD
1213 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
1214 /* Transition GD->IE. */
1215 tls_type = GOT_TLS_IE;
1218 (_("%B: %s' accessed both as normal and thread local symbol"),
1219 abfd, h ? h->root.root.string : "<local>");
1222 elf_mn10300_hash_entry (h)->tls_type = tls_type;
1224 if (h->got.offset != (bfd_vma) -1)
1225 /* We have already allocated space in the .got. */
1228 h->got.offset = sgot->size;
1230 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1231 /* Make sure this symbol is output as a dynamic symbol. */
1232 && h->dynindx == -1)
1234 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1238 srelgot->size += sizeof (Elf32_External_Rela);
1239 if (r_type == R_MN10300_TLS_GD)
1240 srelgot->size += sizeof (Elf32_External_Rela);
1244 /* This is a global offset table entry for a local
1246 if (local_got_offsets == NULL)
1251 size = symtab_hdr->sh_info * (sizeof (bfd_vma) + sizeof (char));
1252 local_got_offsets = bfd_alloc (abfd, size);
1254 if (local_got_offsets == NULL)
1257 elf_local_got_offsets (abfd) = local_got_offsets;
1258 elf_mn10300_local_got_tls_type (abfd)
1259 = (char *) (local_got_offsets + symtab_hdr->sh_info);
1261 for (i = 0; i < symtab_hdr->sh_info; i++)
1262 local_got_offsets[i] = (bfd_vma) -1;
1265 if (local_got_offsets[r_symndx] != (bfd_vma) -1)
1266 /* We have already allocated space in the .got. */
1269 local_got_offsets[r_symndx] = sgot->size;
1271 if (bfd_link_pic (info))
1273 /* If we are generating a shared object, we need to
1274 output a R_MN10300_RELATIVE reloc so that the dynamic
1275 linker can adjust this GOT entry. */
1276 srelgot->size += sizeof (Elf32_External_Rela);
1278 if (r_type == R_MN10300_TLS_GD)
1279 /* And a R_MN10300_TLS_DTPOFF reloc as well. */
1280 srelgot->size += sizeof (Elf32_External_Rela);
1283 elf_mn10300_local_got_tls_type (abfd) [r_symndx] = tls_type;
1287 if (r_type == R_MN10300_TLS_GD
1288 || r_type == R_MN10300_TLS_LD)
1291 goto need_shared_relocs;
1293 case R_MN10300_PLT32:
1294 case R_MN10300_PLT16:
1295 /* This symbol requires a procedure linkage table entry. We
1296 actually build the entry in adjust_dynamic_symbol,
1297 because this might be a case of linking PIC code which is
1298 never referenced by a dynamic object, in which case we
1299 don't need to generate a procedure linkage table entry
1302 /* If this is a local symbol, we resolve it directly without
1303 creating a procedure linkage table entry. */
1307 if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
1308 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
1317 case R_MN10300_PCREL32:
1318 case R_MN10300_PCREL16:
1319 case R_MN10300_PCREL8:
1324 case R_MN10300_SYM_DIFF:
1325 sym_diff_reloc_seen = TRUE;
1333 /* If we are creating a shared library, then we
1334 need to copy the reloc into the shared library. */
1335 if (bfd_link_pic (info)
1336 && (sec->flags & SEC_ALLOC) != 0
1337 /* Do not generate a dynamic reloc for a
1338 reloc associated with a SYM_DIFF operation. */
1339 && ! sym_diff_reloc_seen)
1341 asection * sym_section = NULL;
1343 /* Find the section containing the
1344 symbol involved in the relocation. */
1347 Elf_Internal_Sym * isym;
1349 if (isymbuf == NULL)
1350 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
1351 symtab_hdr->sh_info, 0,
1355 isym = isymbuf + r_symndx;
1356 /* All we care about is whether this local symbol is absolute. */
1357 if (isym->st_shndx == SHN_ABS)
1358 sym_section = bfd_abs_section_ptr;
1363 if (h->root.type == bfd_link_hash_defined
1364 || h->root.type == bfd_link_hash_defweak)
1365 sym_section = h->root.u.def.section;
1368 /* If the symbol is absolute then the relocation can
1369 be resolved during linking and there is no need for
1371 if (sym_section != bfd_abs_section_ptr)
1373 /* When creating a shared object, we must copy these
1374 reloc types into the output file. We create a reloc
1375 section in dynobj and make room for this reloc. */
1378 sreloc = _bfd_elf_make_dynamic_reloc_section
1379 (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
1384 sreloc->size += sizeof (Elf32_External_Rela);
1391 if (ELF32_R_TYPE (rel->r_info) != R_MN10300_SYM_DIFF)
1392 sym_diff_reloc_seen = FALSE;
1397 if (isymbuf != NULL)
1403 /* Return the section that should be marked against GC for a given
1407 mn10300_elf_gc_mark_hook (asection *sec,
1408 struct bfd_link_info *info,
1409 Elf_Internal_Rela *rel,
1410 struct elf_link_hash_entry *h,
1411 Elf_Internal_Sym *sym)
1414 switch (ELF32_R_TYPE (rel->r_info))
1416 case R_MN10300_GNU_VTINHERIT:
1417 case R_MN10300_GNU_VTENTRY:
1421 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
1424 /* Perform a relocation as part of a final link. */
1426 static bfd_reloc_status_type
1427 mn10300_elf_final_link_relocate (reloc_howto_type *howto,
1429 bfd *output_bfd ATTRIBUTE_UNUSED,
1430 asection *input_section,
1435 struct elf_link_hash_entry * h,
1436 unsigned long symndx,
1437 struct bfd_link_info *info,
1438 asection *sym_sec ATTRIBUTE_UNUSED,
1439 int is_local ATTRIBUTE_UNUSED)
1441 struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
1442 static asection * sym_diff_section;
1443 static bfd_vma sym_diff_value;
1444 bfd_boolean is_sym_diff_reloc;
1445 unsigned long r_type = howto->type;
1446 bfd_byte * hit_data = contents + offset;
1452 dynobj = elf_hash_table (info)->dynobj;
1462 case R_MN10300_PCREL8:
1463 case R_MN10300_PCREL16:
1464 case R_MN10300_PCREL32:
1465 case R_MN10300_GOTOFF32:
1466 case R_MN10300_GOTOFF24:
1467 case R_MN10300_GOTOFF16:
1468 if (bfd_link_pic (info)
1469 && (input_section->flags & SEC_ALLOC) != 0
1471 && ! SYMBOL_REFERENCES_LOCAL (info, h))
1472 return bfd_reloc_dangerous;
1473 case R_MN10300_GOT32:
1475 Taking the address of a protected function in a shared library
1476 is illegal. Issue an error message here. */
1477 if (bfd_link_pic (info)
1478 && (input_section->flags & SEC_ALLOC) != 0
1480 && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
1481 && (h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
1482 && ! SYMBOL_REFERENCES_LOCAL (info, h))
1483 return bfd_reloc_dangerous;
1486 is_sym_diff_reloc = FALSE;
1487 if (sym_diff_section != NULL)
1489 BFD_ASSERT (sym_diff_section == input_section);
1497 value -= sym_diff_value;
1498 /* If we are computing a 32-bit value for the location lists
1499 and the result is 0 then we add one to the value. A zero
1500 value can result because of linker relaxation deleteing
1501 prologue instructions and using a value of 1 (for the begin
1502 and end offsets in the location list entry) results in a
1503 nul entry which does not prevent the following entries from
1505 if (r_type == R_MN10300_32
1507 && strcmp (input_section->name, ".debug_loc") == 0)
1509 sym_diff_section = NULL;
1510 is_sym_diff_reloc = TRUE;
1514 sym_diff_section = NULL;
1521 case R_MN10300_SYM_DIFF:
1522 BFD_ASSERT (addend == 0);
1523 /* Cache the input section and value.
1524 The offset is unreliable, since relaxation may
1525 have reduced the following reloc's offset. */
1526 sym_diff_section = input_section;
1527 sym_diff_value = value;
1528 return bfd_reloc_ok;
1530 case R_MN10300_ALIGN:
1531 case R_MN10300_NONE:
1532 return bfd_reloc_ok;
1535 if (bfd_link_pic (info)
1536 /* Do not generate relocs when an R_MN10300_32 has been used
1537 with an R_MN10300_SYM_DIFF to compute a difference of two
1539 && is_sym_diff_reloc == FALSE
1540 /* Also, do not generate a reloc when the symbol associated
1541 with the R_MN10300_32 reloc is absolute - there is no
1542 need for a run time computation in this case. */
1543 && sym_sec != bfd_abs_section_ptr
1544 /* If the section is not going to be allocated at load time
1545 then there is no need to generate relocs for it. */
1546 && (input_section->flags & SEC_ALLOC) != 0)
1548 Elf_Internal_Rela outrel;
1549 bfd_boolean skip, relocate;
1551 /* When generating a shared object, these relocations are
1552 copied into the output file to be resolved at run
1556 sreloc = _bfd_elf_get_dynamic_reloc_section
1557 (input_bfd, input_section, /*rela?*/ TRUE);
1564 outrel.r_offset = _bfd_elf_section_offset (input_bfd, info,
1565 input_section, offset);
1566 if (outrel.r_offset == (bfd_vma) -1)
1569 outrel.r_offset += (input_section->output_section->vma
1570 + input_section->output_offset);
1574 memset (&outrel, 0, sizeof outrel);
1579 /* h->dynindx may be -1 if this symbol was marked to
1582 || SYMBOL_REFERENCES_LOCAL (info, h))
1585 outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
1586 outrel.r_addend = value + addend;
1590 BFD_ASSERT (h->dynindx != -1);
1592 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_32);
1593 outrel.r_addend = value + addend;
1597 bfd_elf32_swap_reloca_out (output_bfd, &outrel,
1598 (bfd_byte *) (((Elf32_External_Rela *) sreloc->contents)
1599 + sreloc->reloc_count));
1600 ++sreloc->reloc_count;
1602 /* If this reloc is against an external symbol, we do
1603 not want to fiddle with the addend. Otherwise, we
1604 need to include the symbol value so that it becomes
1605 an addend for the dynamic reloc. */
1607 return bfd_reloc_ok;
1610 bfd_put_32 (input_bfd, value, hit_data);
1611 return bfd_reloc_ok;
1616 if ((long) value > 0x7fffff || (long) value < -0x800000)
1617 return bfd_reloc_overflow;
1619 bfd_put_8 (input_bfd, value & 0xff, hit_data);
1620 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1621 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1622 return bfd_reloc_ok;
1627 if ((long) value > 0x7fff || (long) value < -0x8000)
1628 return bfd_reloc_overflow;
1630 bfd_put_16 (input_bfd, value, hit_data);
1631 return bfd_reloc_ok;
1636 if ((long) value > 0x7f || (long) value < -0x80)
1637 return bfd_reloc_overflow;
1639 bfd_put_8 (input_bfd, value, hit_data);
1640 return bfd_reloc_ok;
1642 case R_MN10300_PCREL8:
1643 value -= (input_section->output_section->vma
1644 + input_section->output_offset);
1648 if ((long) value > 0x7f || (long) value < -0x80)
1649 return bfd_reloc_overflow;
1651 bfd_put_8 (input_bfd, value, hit_data);
1652 return bfd_reloc_ok;
1654 case R_MN10300_PCREL16:
1655 value -= (input_section->output_section->vma
1656 + input_section->output_offset);
1660 if ((long) value > 0x7fff || (long) value < -0x8000)
1661 return bfd_reloc_overflow;
1663 bfd_put_16 (input_bfd, value, hit_data);
1664 return bfd_reloc_ok;
1666 case R_MN10300_PCREL32:
1667 value -= (input_section->output_section->vma
1668 + input_section->output_offset);
1672 bfd_put_32 (input_bfd, value, hit_data);
1673 return bfd_reloc_ok;
1675 case R_MN10300_GNU_VTINHERIT:
1676 case R_MN10300_GNU_VTENTRY:
1677 return bfd_reloc_ok;
1679 case R_MN10300_GOTPC32:
1681 return bfd_reloc_dangerous;
1683 /* Use global offset table as symbol value. */
1684 value = htab->root.sgot->output_section->vma;
1685 value -= (input_section->output_section->vma
1686 + input_section->output_offset);
1690 bfd_put_32 (input_bfd, value, hit_data);
1691 return bfd_reloc_ok;
1693 case R_MN10300_GOTPC16:
1695 return bfd_reloc_dangerous;
1697 /* Use global offset table as symbol value. */
1698 value = htab->root.sgot->output_section->vma;
1699 value -= (input_section->output_section->vma
1700 + input_section->output_offset);
1704 if ((long) value > 0x7fff || (long) value < -0x8000)
1705 return bfd_reloc_overflow;
1707 bfd_put_16 (input_bfd, value, hit_data);
1708 return bfd_reloc_ok;
1710 case R_MN10300_GOTOFF32:
1712 return bfd_reloc_dangerous;
1714 value -= htab->root.sgot->output_section->vma;
1717 bfd_put_32 (input_bfd, value, hit_data);
1718 return bfd_reloc_ok;
1720 case R_MN10300_GOTOFF24:
1722 return bfd_reloc_dangerous;
1724 value -= htab->root.sgot->output_section->vma;
1727 if ((long) value > 0x7fffff || (long) value < -0x800000)
1728 return bfd_reloc_overflow;
1730 bfd_put_8 (input_bfd, value, hit_data);
1731 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1732 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1733 return bfd_reloc_ok;
1735 case R_MN10300_GOTOFF16:
1737 return bfd_reloc_dangerous;
1739 value -= htab->root.sgot->output_section->vma;
1742 if ((long) value > 0x7fff || (long) value < -0x8000)
1743 return bfd_reloc_overflow;
1745 bfd_put_16 (input_bfd, value, hit_data);
1746 return bfd_reloc_ok;
1748 case R_MN10300_PLT32:
1750 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1751 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
1752 && h->plt.offset != (bfd_vma) -1)
1755 return bfd_reloc_dangerous;
1757 splt = htab->root.splt;
1758 value = (splt->output_section->vma
1759 + splt->output_offset
1760 + h->plt.offset) - value;
1763 value -= (input_section->output_section->vma
1764 + input_section->output_offset);
1768 bfd_put_32 (input_bfd, value, hit_data);
1769 return bfd_reloc_ok;
1771 case R_MN10300_PLT16:
1773 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1774 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
1775 && h->plt.offset != (bfd_vma) -1)
1778 return bfd_reloc_dangerous;
1780 splt = htab->root.splt;
1781 value = (splt->output_section->vma
1782 + splt->output_offset
1783 + h->plt.offset) - value;
1786 value -= (input_section->output_section->vma
1787 + input_section->output_offset);
1791 if ((long) value > 0x7fff || (long) value < -0x8000)
1792 return bfd_reloc_overflow;
1794 bfd_put_16 (input_bfd, value, hit_data);
1795 return bfd_reloc_ok;
1797 case R_MN10300_TLS_LDO:
1798 value = dtpoff (info, value);
1799 bfd_put_32 (input_bfd, value + addend, hit_data);
1800 return bfd_reloc_ok;
1802 case R_MN10300_TLS_LE:
1803 value = tpoff (info, value);
1804 bfd_put_32 (input_bfd, value + addend, hit_data);
1805 return bfd_reloc_ok;
1807 case R_MN10300_TLS_LD:
1809 return bfd_reloc_dangerous;
1811 sgot = htab->root.sgot;
1812 BFD_ASSERT (sgot != NULL);
1813 value = htab->tls_ldm_got.offset + sgot->output_offset;
1814 bfd_put_32 (input_bfd, value, hit_data);
1816 if (!htab->tls_ldm_got.rel_emitted)
1818 asection * srelgot = bfd_get_linker_section (dynobj, ".rela.got");
1819 Elf_Internal_Rela rel;
1821 BFD_ASSERT (srelgot != NULL);
1822 htab->tls_ldm_got.rel_emitted ++;
1823 rel.r_offset = (sgot->output_section->vma
1824 + sgot->output_offset
1825 + htab->tls_ldm_got.offset);
1826 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset);
1827 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset+4);
1828 rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
1830 bfd_elf32_swap_reloca_out (output_bfd, & rel,
1831 (bfd_byte *) ((Elf32_External_Rela *) srelgot->contents
1832 + srelgot->reloc_count));
1833 ++ srelgot->reloc_count;
1836 return bfd_reloc_ok;
1838 case R_MN10300_TLS_GOTIE:
1839 value = tpoff (info, value);
1842 case R_MN10300_TLS_GD:
1843 case R_MN10300_TLS_IE:
1844 case R_MN10300_GOT32:
1845 case R_MN10300_GOT24:
1846 case R_MN10300_GOT16:
1848 return bfd_reloc_dangerous;
1850 sgot = htab->root.sgot;
1851 if (r_type == R_MN10300_TLS_GD)
1852 value = dtpoff (info, value);
1858 off = h->got.offset;
1859 /* Offsets in the GOT are allocated in check_relocs
1860 which is not called for shared libraries... */
1861 if (off == (bfd_vma) -1)
1864 if (sgot->contents != NULL
1865 && (! elf_hash_table (info)->dynamic_sections_created
1866 || SYMBOL_REFERENCES_LOCAL (info, h)))
1867 /* This is actually a static link, or it is a
1868 -Bsymbolic link and the symbol is defined
1869 locally, or the symbol was forced to be local
1870 because of a version file. We must initialize
1871 this entry in the global offset table.
1873 When doing a dynamic link, we create a .rela.got
1874 relocation entry to initialize the value. This
1875 is done in the finish_dynamic_symbol routine. */
1876 bfd_put_32 (output_bfd, value,
1877 sgot->contents + off);
1879 value = sgot->output_offset + off;
1885 off = elf_local_got_offsets (input_bfd)[symndx];
1888 bfd_put_32 (output_bfd, value, sgot->contents + (off & ~ 1));
1891 bfd_put_32 (output_bfd, value, sgot->contents + off);
1893 if (bfd_link_pic (info))
1896 Elf_Internal_Rela outrel;
1898 srelgot = bfd_get_linker_section (dynobj, ".rela.got");
1899 BFD_ASSERT (srelgot != NULL);
1901 outrel.r_offset = (sgot->output_section->vma
1902 + sgot->output_offset
1906 case R_MN10300_TLS_GD:
1907 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPOFF);
1908 outrel.r_offset = (sgot->output_section->vma
1909 + sgot->output_offset
1911 bfd_elf32_swap_reloca_out (output_bfd, & outrel,
1912 (bfd_byte *) (((Elf32_External_Rela *)
1914 + srelgot->reloc_count));
1915 ++ srelgot->reloc_count;
1916 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
1918 case R_MN10300_TLS_GOTIE:
1919 case R_MN10300_TLS_IE:
1920 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
1923 outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
1927 outrel.r_addend = value;
1928 bfd_elf32_swap_reloca_out (output_bfd, &outrel,
1929 (bfd_byte *) (((Elf32_External_Rela *)
1931 + srelgot->reloc_count));
1932 ++ srelgot->reloc_count;
1933 elf_local_got_offsets (input_bfd)[symndx] |= 1;
1936 value = sgot->output_offset + (off & ~(bfd_vma) 1);
1942 if (r_type == R_MN10300_TLS_IE)
1944 value += sgot->output_section->vma;
1945 bfd_put_32 (input_bfd, value, hit_data);
1946 return bfd_reloc_ok;
1948 else if (r_type == R_MN10300_TLS_GOTIE
1949 || r_type == R_MN10300_TLS_GD
1950 || r_type == R_MN10300_TLS_LD)
1952 bfd_put_32 (input_bfd, value, hit_data);
1953 return bfd_reloc_ok;
1955 else if (r_type == R_MN10300_GOT32)
1957 bfd_put_32 (input_bfd, value, hit_data);
1958 return bfd_reloc_ok;
1960 else if (r_type == R_MN10300_GOT24)
1962 if ((long) value > 0x7fffff || (long) value < -0x800000)
1963 return bfd_reloc_overflow;
1965 bfd_put_8 (input_bfd, value & 0xff, hit_data);
1966 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1967 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1968 return bfd_reloc_ok;
1970 else if (r_type == R_MN10300_GOT16)
1972 if ((long) value > 0x7fff || (long) value < -0x8000)
1973 return bfd_reloc_overflow;
1975 bfd_put_16 (input_bfd, value, hit_data);
1976 return bfd_reloc_ok;
1981 return bfd_reloc_notsupported;
1985 /* Relocate an MN10300 ELF section. */
1988 mn10300_elf_relocate_section (bfd *output_bfd,
1989 struct bfd_link_info *info,
1991 asection *input_section,
1993 Elf_Internal_Rela *relocs,
1994 Elf_Internal_Sym *local_syms,
1995 asection **local_sections)
1997 Elf_Internal_Shdr *symtab_hdr;
1998 struct elf_link_hash_entry **sym_hashes;
1999 Elf_Internal_Rela *rel, *relend;
2000 Elf_Internal_Rela * trel;
2002 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2003 sym_hashes = elf_sym_hashes (input_bfd);
2006 relend = relocs + input_section->reloc_count;
2007 for (; rel < relend; rel++)
2010 reloc_howto_type *howto;
2011 unsigned long r_symndx;
2012 Elf_Internal_Sym *sym;
2014 struct elf32_mn10300_link_hash_entry *h;
2016 bfd_reloc_status_type r;
2018 bfd_boolean unresolved_reloc = FALSE;
2019 bfd_boolean warned, ignored;
2020 struct elf_link_hash_entry * hh;
2023 r_symndx = ELF32_R_SYM (rel->r_info);
2024 r_type = ELF32_R_TYPE (rel->r_info);
2025 howto = elf_mn10300_howto_table + r_type;
2027 /* Just skip the vtable gc relocs. */
2028 if (r_type == R_MN10300_GNU_VTINHERIT
2029 || r_type == R_MN10300_GNU_VTENTRY)
2035 if (r_symndx < symtab_hdr->sh_info)
2039 RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
2040 r_symndx, symtab_hdr, sym_hashes,
2041 hh, sec, relocation,
2042 unresolved_reloc, warned, ignored);
2044 h = elf_mn10300_hash_entry (hh);
2046 tls_r_type = elf_mn10300_tls_transition (info, r_type, hh, input_section, 0);
2047 if (tls_r_type != r_type)
2049 bfd_boolean had_plt;
2051 had_plt = mn10300_do_tls_transition (input_bfd, r_type, tls_r_type,
2052 contents, rel->r_offset);
2053 r_type = tls_r_type;
2054 howto = elf_mn10300_howto_table + r_type;
2057 for (trel = rel+1; trel < relend; trel++)
2058 if ((ELF32_R_TYPE (trel->r_info) == R_MN10300_PLT32
2059 || ELF32_R_TYPE (trel->r_info) == R_MN10300_PCREL32)
2060 && rel->r_offset + had_plt == trel->r_offset)
2061 trel->r_info = ELF32_R_INFO (0, R_MN10300_NONE);
2064 if (r_symndx < symtab_hdr->sh_info)
2066 sym = local_syms + r_symndx;
2067 sec = local_sections[r_symndx];
2068 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
2072 if ((h->root.root.type == bfd_link_hash_defined
2073 || h->root.root.type == bfd_link_hash_defweak)
2074 && ( r_type == R_MN10300_GOTPC32
2075 || r_type == R_MN10300_GOTPC16
2076 || (( r_type == R_MN10300_PLT32
2077 || r_type == R_MN10300_PLT16)
2078 && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
2079 && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
2080 && h->root.plt.offset != (bfd_vma) -1)
2081 || (( r_type == R_MN10300_GOT32
2082 || r_type == R_MN10300_GOT24
2083 || r_type == R_MN10300_TLS_GD
2084 || r_type == R_MN10300_TLS_LD
2085 || r_type == R_MN10300_TLS_GOTIE
2086 || r_type == R_MN10300_TLS_IE
2087 || r_type == R_MN10300_GOT16)
2088 && elf_hash_table (info)->dynamic_sections_created
2089 && !SYMBOL_REFERENCES_LOCAL (info, hh))
2090 || (r_type == R_MN10300_32
2091 /* _32 relocs in executables force _COPY relocs,
2092 such that the address of the symbol ends up
2094 && !bfd_link_executable (info)
2095 && !SYMBOL_REFERENCES_LOCAL (info, hh)
2096 && ((input_section->flags & SEC_ALLOC) != 0
2097 /* DWARF will emit R_MN10300_32 relocations
2098 in its sections against symbols defined
2099 externally in shared libraries. We can't
2100 do anything with them here. */
2101 || ((input_section->flags & SEC_DEBUGGING) != 0
2102 && h->root.def_dynamic)))))
2103 /* In these cases, we don't need the relocation
2104 value. We check specially because in some
2105 obscure cases sec->output_section will be NULL. */
2108 else if (!bfd_link_relocatable (info) && unresolved_reloc
2109 && _bfd_elf_section_offset (output_bfd, info, input_section,
2110 rel->r_offset) != (bfd_vma) -1)
2113 (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
2116 (long) rel->r_offset,
2118 h->root.root.root.string);
2121 if (sec != NULL && discarded_section (sec))
2122 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
2123 rel, 1, relend, howto, 0, contents);
2125 if (bfd_link_relocatable (info))
2128 r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
2130 contents, rel->r_offset,
2131 relocation, rel->r_addend,
2132 (struct elf_link_hash_entry *) h,
2134 info, sec, h == NULL);
2136 if (r != bfd_reloc_ok)
2139 const char *msg = NULL;
2142 name = h->root.root.root.string;
2145 name = (bfd_elf_string_from_elf_section
2146 (input_bfd, symtab_hdr->sh_link, sym->st_name));
2147 if (name == NULL || *name == '\0')
2148 name = bfd_section_name (input_bfd, sec);
2153 case bfd_reloc_overflow:
2154 (*info->callbacks->reloc_overflow)
2155 (info, (h ? &h->root.root : NULL), name, howto->name,
2156 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
2159 case bfd_reloc_undefined:
2160 (*info->callbacks->undefined_symbol)
2161 (info, name, input_bfd, input_section, rel->r_offset, TRUE);
2164 case bfd_reloc_outofrange:
2165 msg = _("internal error: out of range error");
2168 case bfd_reloc_notsupported:
2169 msg = _("internal error: unsupported relocation error");
2172 case bfd_reloc_dangerous:
2173 if (r_type == R_MN10300_PCREL32)
2174 msg = _("error: inappropriate relocation type for shared"
2175 " library (did you forget -fpic?)");
2176 else if (r_type == R_MN10300_GOT32)
2177 msg = _("%B: taking the address of protected function"
2178 " '%s' cannot be done when making a shared library");
2180 msg = _("internal error: suspicious relocation type used"
2181 " in shared library");
2185 msg = _("internal error: unknown error");
2189 _bfd_error_handler (msg, input_bfd, name);
2190 bfd_set_error (bfd_error_bad_value);
2199 /* Finish initializing one hash table entry. */
2202 elf32_mn10300_finish_hash_table_entry (struct bfd_hash_entry *gen_entry,
2205 struct elf32_mn10300_link_hash_entry *entry;
2206 struct bfd_link_info *link_info = (struct bfd_link_info *) in_args;
2207 unsigned int byte_count = 0;
2209 entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
2211 /* If we already know we want to convert "call" to "calls" for calls
2212 to this symbol, then return now. */
2213 if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
2216 /* If there are no named calls to this symbol, or there's nothing we
2217 can move from the function itself into the "call" instruction,
2218 then note that all "call" instructions should be converted into
2219 "calls" instructions and return. If a symbol is available for
2220 dynamic symbol resolution (overridable or overriding), avoid
2221 custom calling conventions. */
2222 if (entry->direct_calls == 0
2223 || (entry->stack_size == 0 && entry->movm_args == 0)
2224 || (elf_hash_table (link_info)->dynamic_sections_created
2225 && ELF_ST_VISIBILITY (entry->root.other) != STV_INTERNAL
2226 && ELF_ST_VISIBILITY (entry->root.other) != STV_HIDDEN))
2228 /* Make a note that we should convert "call" instructions to "calls"
2229 instructions for calls to this symbol. */
2230 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2234 /* We may be able to move some instructions from the function itself into
2235 the "call" instruction. Count how many bytes we might be able to
2236 eliminate in the function itself. */
2238 /* A movm instruction is two bytes. */
2239 if (entry->movm_args)
2242 /* Count the insn to allocate stack space too. */
2243 if (entry->stack_size > 0)
2245 if (entry->stack_size <= 128)
2251 /* If using "call" will result in larger code, then turn all
2252 the associated "call" instructions into "calls" instructions. */
2253 if (byte_count < entry->direct_calls)
2254 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2256 /* This routine never fails. */
2260 /* Used to count hash table entries. */
2263 elf32_mn10300_count_hash_table_entries (struct bfd_hash_entry *gen_entry ATTRIBUTE_UNUSED,
2266 int *count = (int *) in_args;
2272 /* Used to enumerate hash table entries into a linear array. */
2275 elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry,
2278 struct bfd_hash_entry ***ptr = (struct bfd_hash_entry ***) in_args;
2285 /* Used to sort the array created by the above. */
2288 sort_by_value (const void *va, const void *vb)
2290 struct elf32_mn10300_link_hash_entry *a
2291 = *(struct elf32_mn10300_link_hash_entry **) va;
2292 struct elf32_mn10300_link_hash_entry *b
2293 = *(struct elf32_mn10300_link_hash_entry **) vb;
2295 return a->value - b->value;
2298 /* Compute the stack size and movm arguments for the function
2299 referred to by HASH at address ADDR in section with
2300 contents CONTENTS, store the information in the hash table. */
2303 compute_function_info (bfd *abfd,
2304 struct elf32_mn10300_link_hash_entry *hash,
2306 unsigned char *contents)
2308 unsigned char byte1, byte2;
2309 /* We only care about a very small subset of the possible prologue
2310 sequences here. Basically we look for:
2312 movm [d2,d3,a2,a3],sp (optional)
2313 add <size>,sp (optional, and only for sizes which fit in an unsigned
2316 If we find anything else, we quit. */
2318 /* Look for movm [regs],sp. */
2319 byte1 = bfd_get_8 (abfd, contents + addr);
2320 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2324 hash->movm_args = byte2;
2326 byte1 = bfd_get_8 (abfd, contents + addr);
2327 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2330 /* Now figure out how much stack space will be allocated by the movm
2331 instruction. We need this kept separate from the function's normal
2333 if (hash->movm_args)
2336 if (hash->movm_args & 0x80)
2337 hash->movm_stack_size += 4;
2340 if (hash->movm_args & 0x40)
2341 hash->movm_stack_size += 4;
2344 if (hash->movm_args & 0x20)
2345 hash->movm_stack_size += 4;
2348 if (hash->movm_args & 0x10)
2349 hash->movm_stack_size += 4;
2351 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2352 if (hash->movm_args & 0x08)
2353 hash->movm_stack_size += 8 * 4;
2355 if (bfd_get_mach (abfd) == bfd_mach_am33
2356 || bfd_get_mach (abfd) == bfd_mach_am33_2)
2358 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2359 if (hash->movm_args & 0x1)
2360 hash->movm_stack_size += 6 * 4;
2362 /* exreg1 space. e4, e5, e6, e7 */
2363 if (hash->movm_args & 0x2)
2364 hash->movm_stack_size += 4 * 4;
2366 /* exreg0 space. e2, e3 */
2367 if (hash->movm_args & 0x4)
2368 hash->movm_stack_size += 2 * 4;
2372 /* Now look for the two stack adjustment variants. */
2373 if (byte1 == 0xf8 && byte2 == 0xfe)
2375 int temp = bfd_get_8 (abfd, contents + addr + 2);
2376 temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
2378 hash->stack_size = -temp;
2380 else if (byte1 == 0xfa && byte2 == 0xfe)
2382 int temp = bfd_get_16 (abfd, contents + addr + 2);
2383 temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
2387 hash->stack_size = temp;
2390 /* If the total stack to be allocated by the call instruction is more
2391 than 255 bytes, then we can't remove the stack adjustment by using
2392 "call" (we might still be able to remove the "movm" instruction. */
2393 if (hash->stack_size + hash->movm_stack_size > 255)
2394 hash->stack_size = 0;
2397 /* Delete some bytes from a section while relaxing. */
2400 mn10300_elf_relax_delete_bytes (bfd *abfd,
2405 Elf_Internal_Shdr *symtab_hdr;
2406 unsigned int sec_shndx;
2408 Elf_Internal_Rela *irel, *irelend;
2409 Elf_Internal_Rela *irelalign;
2411 Elf_Internal_Sym *isym, *isymend;
2412 struct elf_link_hash_entry **sym_hashes;
2413 struct elf_link_hash_entry **end_hashes;
2414 unsigned int symcount;
2416 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2418 contents = elf_section_data (sec)->this_hdr.contents;
2423 irel = elf_section_data (sec)->relocs;
2424 irelend = irel + sec->reloc_count;
2426 if (sec->reloc_count > 0)
2428 /* If there is an align reloc at the end of the section ignore it.
2429 GAS creates these relocs for reasons of its own, and they just
2430 serve to keep the section artifically inflated. */
2431 if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN)
2434 /* The deletion must stop at the next ALIGN reloc for an aligment
2435 power larger than, or not a multiple of, the number of bytes we
2437 for (; irel < irelend; irel++)
2439 int alignment = 1 << irel->r_addend;
2441 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
2442 && irel->r_offset > addr
2443 && irel->r_offset < toaddr
2444 && (count < alignment
2445 || alignment % count != 0))
2448 toaddr = irel->r_offset;
2454 /* Actually delete the bytes. */
2455 memmove (contents + addr, contents + addr + count,
2456 (size_t) (toaddr - addr - count));
2458 /* Adjust the section's size if we are shrinking it, or else
2459 pad the bytes between the end of the shrunken region and
2460 the start of the next region with NOP codes. */
2461 if (irelalign == NULL)
2464 /* Include symbols at the end of the section, but
2465 not at the end of a sub-region of the section. */
2472 #define NOP_OPCODE 0xcb
2474 for (i = 0; i < count; i ++)
2475 bfd_put_8 (abfd, (bfd_vma) NOP_OPCODE, contents + toaddr - count + i);
2478 /* Adjust all the relocs. */
2479 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
2481 /* Get the new reloc address. */
2482 if ((irel->r_offset > addr
2483 && irel->r_offset < toaddr)
2484 || (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
2485 && irel->r_offset == toaddr))
2486 irel->r_offset -= count;
2489 /* Adjust the local symbols in the section, reducing their value
2490 by the number of bytes deleted. Note - symbols within the deleted
2491 region are moved to the address of the start of the region, which
2492 actually means that they will address the byte beyond the end of
2493 the region once the deletion has been completed. */
2494 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2495 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
2496 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2498 if (isym->st_shndx == sec_shndx
2499 && isym->st_value > addr
2500 && isym->st_value < toaddr)
2502 if (isym->st_value < addr + count)
2503 isym->st_value = addr;
2505 isym->st_value -= count;
2507 /* Adjust the function symbol's size as well. */
2508 else if (isym->st_shndx == sec_shndx
2509 && ELF_ST_TYPE (isym->st_info) == STT_FUNC
2510 && isym->st_value + isym->st_size > addr
2511 && isym->st_value + isym->st_size < toaddr)
2512 isym->st_size -= count;
2515 /* Now adjust the global symbols defined in this section. */
2516 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2517 - symtab_hdr->sh_info);
2518 sym_hashes = elf_sym_hashes (abfd);
2519 end_hashes = sym_hashes + symcount;
2520 for (; sym_hashes < end_hashes; sym_hashes++)
2522 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2524 if ((sym_hash->root.type == bfd_link_hash_defined
2525 || sym_hash->root.type == bfd_link_hash_defweak)
2526 && sym_hash->root.u.def.section == sec
2527 && sym_hash->root.u.def.value > addr
2528 && sym_hash->root.u.def.value < toaddr)
2530 if (sym_hash->root.u.def.value < addr + count)
2531 sym_hash->root.u.def.value = addr;
2533 sym_hash->root.u.def.value -= count;
2535 /* Adjust the function symbol's size as well. */
2536 else if (sym_hash->root.type == bfd_link_hash_defined
2537 && sym_hash->root.u.def.section == sec
2538 && sym_hash->type == STT_FUNC
2539 && sym_hash->root.u.def.value + sym_hash->size > addr
2540 && sym_hash->root.u.def.value + sym_hash->size < toaddr)
2541 sym_hash->size -= count;
2544 /* See if we can move the ALIGN reloc forward.
2545 We have adjusted r_offset for it already. */
2546 if (irelalign != NULL)
2548 bfd_vma alignto, alignaddr;
2550 if ((int) irelalign->r_addend > 0)
2552 /* This is the old address. */
2553 alignto = BFD_ALIGN (toaddr, 1 << irelalign->r_addend);
2554 /* This is where the align points to now. */
2555 alignaddr = BFD_ALIGN (irelalign->r_offset,
2556 1 << irelalign->r_addend);
2557 if (alignaddr < alignto)
2558 /* Tail recursion. */
2559 return mn10300_elf_relax_delete_bytes (abfd, sec, alignaddr,
2560 (int) (alignto - alignaddr));
2567 /* Return TRUE if a symbol exists at the given address, else return
2571 mn10300_elf_symbol_address_p (bfd *abfd,
2573 Elf_Internal_Sym *isym,
2576 Elf_Internal_Shdr *symtab_hdr;
2577 unsigned int sec_shndx;
2578 Elf_Internal_Sym *isymend;
2579 struct elf_link_hash_entry **sym_hashes;
2580 struct elf_link_hash_entry **end_hashes;
2581 unsigned int symcount;
2583 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2585 /* Examine all the symbols. */
2586 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2587 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2588 if (isym->st_shndx == sec_shndx
2589 && isym->st_value == addr)
2592 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2593 - symtab_hdr->sh_info);
2594 sym_hashes = elf_sym_hashes (abfd);
2595 end_hashes = sym_hashes + symcount;
2596 for (; sym_hashes < end_hashes; sym_hashes++)
2598 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2600 if ((sym_hash->root.type == bfd_link_hash_defined
2601 || sym_hash->root.type == bfd_link_hash_defweak)
2602 && sym_hash->root.u.def.section == sec
2603 && sym_hash->root.u.def.value == addr)
2610 /* This function handles relaxing for the mn10300.
2612 There are quite a few relaxing opportunities available on the mn10300:
2614 * calls:32 -> calls:16 2 bytes
2615 * call:32 -> call:16 2 bytes
2617 * call:32 -> calls:32 1 byte
2618 * call:16 -> calls:16 1 byte
2619 * These are done anytime using "calls" would result
2620 in smaller code, or when necessary to preserve the
2621 meaning of the program.
2625 * In some circumstances we can move instructions
2626 from a function prologue into a "call" instruction.
2627 This is only done if the resulting code is no larger
2628 than the original code.
2630 * jmp:32 -> jmp:16 2 bytes
2631 * jmp:16 -> bra:8 1 byte
2633 * If the previous instruction is a conditional branch
2634 around the jump/bra, we may be able to reverse its condition
2635 and change its target to the jump's target. The jump/bra
2636 can then be deleted. 2 bytes
2638 * mov abs32 -> mov abs16 1 or 2 bytes
2640 * Most instructions which accept imm32 can relax to imm16 1 or 2 bytes
2641 - Most instructions which accept imm16 can relax to imm8 1 or 2 bytes
2643 * Most instructions which accept d32 can relax to d16 1 or 2 bytes
2644 - Most instructions which accept d16 can relax to d8 1 or 2 bytes
2646 We don't handle imm16->imm8 or d16->d8 as they're very rare
2647 and somewhat more difficult to support. */
2650 mn10300_elf_relax_section (bfd *abfd,
2652 struct bfd_link_info *link_info,
2655 Elf_Internal_Shdr *symtab_hdr;
2656 Elf_Internal_Rela *internal_relocs = NULL;
2657 Elf_Internal_Rela *irel, *irelend;
2658 bfd_byte *contents = NULL;
2659 Elf_Internal_Sym *isymbuf = NULL;
2660 struct elf32_mn10300_link_hash_table *hash_table;
2661 asection *section = sec;
2662 bfd_vma align_gap_adjustment;
2664 if (bfd_link_relocatable (link_info))
2665 (*link_info->callbacks->einfo)
2666 (_("%P%F: --relax and -r may not be used together\n"));
2668 /* Assume nothing changes. */
2671 /* We need a pointer to the mn10300 specific hash table. */
2672 hash_table = elf32_mn10300_hash_table (link_info);
2673 if (hash_table == NULL)
2676 /* Initialize fields in each hash table entry the first time through. */
2677 if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
2681 /* Iterate over all the input bfds. */
2682 for (input_bfd = link_info->input_bfds;
2684 input_bfd = input_bfd->link.next)
2686 /* We're going to need all the symbols for each bfd. */
2687 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2688 if (symtab_hdr->sh_info != 0)
2690 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
2691 if (isymbuf == NULL)
2692 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
2693 symtab_hdr->sh_info, 0,
2695 if (isymbuf == NULL)
2699 /* Iterate over each section in this bfd. */
2700 for (section = input_bfd->sections;
2702 section = section->next)
2704 struct elf32_mn10300_link_hash_entry *hash;
2705 asection *sym_sec = NULL;
2706 const char *sym_name;
2709 /* If there's nothing to do in this section, skip it. */
2710 if (! ((section->flags & SEC_RELOC) != 0
2711 && section->reloc_count != 0))
2713 if ((section->flags & SEC_ALLOC) == 0)
2716 /* Get cached copy of section contents if it exists. */
2717 if (elf_section_data (section)->this_hdr.contents != NULL)
2718 contents = elf_section_data (section)->this_hdr.contents;
2719 else if (section->size != 0)
2721 /* Go get them off disk. */
2722 if (!bfd_malloc_and_get_section (input_bfd, section,
2729 /* If there aren't any relocs, then there's nothing to do. */
2730 if ((section->flags & SEC_RELOC) != 0
2731 && section->reloc_count != 0)
2733 /* Get a copy of the native relocations. */
2734 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
2736 link_info->keep_memory);
2737 if (internal_relocs == NULL)
2740 /* Now examine each relocation. */
2741 irel = internal_relocs;
2742 irelend = irel + section->reloc_count;
2743 for (; irel < irelend; irel++)
2746 unsigned long r_index;
2749 r_type = ELF32_R_TYPE (irel->r_info);
2750 r_index = ELF32_R_SYM (irel->r_info);
2752 if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
2755 /* We need the name and hash table entry of the target
2760 if (r_index < symtab_hdr->sh_info)
2762 /* A local symbol. */
2763 Elf_Internal_Sym *isym;
2764 struct elf_link_hash_table *elftab;
2767 isym = isymbuf + r_index;
2768 if (isym->st_shndx == SHN_UNDEF)
2769 sym_sec = bfd_und_section_ptr;
2770 else if (isym->st_shndx == SHN_ABS)
2771 sym_sec = bfd_abs_section_ptr;
2772 else if (isym->st_shndx == SHN_COMMON)
2773 sym_sec = bfd_com_section_ptr;
2776 = bfd_section_from_elf_index (input_bfd,
2780 = bfd_elf_string_from_elf_section (input_bfd,
2785 /* If it isn't a function, then we don't care
2787 if (ELF_ST_TYPE (isym->st_info) != STT_FUNC)
2790 /* Tack on an ID so we can uniquely identify this
2791 local symbol in the global hash table. */
2792 amt = strlen (sym_name) + 10;
2793 new_name = bfd_malloc (amt);
2794 if (new_name == NULL)
2797 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
2798 sym_name = new_name;
2800 elftab = &hash_table->static_hash_table->root;
2801 hash = ((struct elf32_mn10300_link_hash_entry *)
2802 elf_link_hash_lookup (elftab, sym_name,
2803 TRUE, TRUE, FALSE));
2808 r_index -= symtab_hdr->sh_info;
2809 hash = (struct elf32_mn10300_link_hash_entry *)
2810 elf_sym_hashes (input_bfd)[r_index];
2813 sym_name = hash->root.root.root.string;
2814 if ((section->flags & SEC_CODE) != 0)
2816 /* If this is not a "call" instruction, then we
2817 should convert "call" instructions to "calls"
2819 code = bfd_get_8 (input_bfd,
2820 contents + irel->r_offset - 1);
2821 if (code != 0xdd && code != 0xcd)
2822 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2825 /* If this is a jump/call, then bump the
2826 direct_calls counter. Else force "call" to
2827 "calls" conversions. */
2828 if (r_type == R_MN10300_PCREL32
2829 || r_type == R_MN10300_PLT32
2830 || r_type == R_MN10300_PLT16
2831 || r_type == R_MN10300_PCREL16)
2832 hash->direct_calls++;
2834 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2838 /* Now look at the actual contents to get the stack size,
2839 and a list of what registers were saved in the prologue
2841 if ((section->flags & SEC_CODE) != 0)
2843 Elf_Internal_Sym *isym, *isymend;
2844 unsigned int sec_shndx;
2845 struct elf_link_hash_entry **hashes;
2846 struct elf_link_hash_entry **end_hashes;
2847 unsigned int symcount;
2849 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
2852 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2853 - symtab_hdr->sh_info);
2854 hashes = elf_sym_hashes (input_bfd);
2855 end_hashes = hashes + symcount;
2857 /* Look at each function defined in this section and
2858 update info for that function. */
2859 isymend = isymbuf + symtab_hdr->sh_info;
2860 for (isym = isymbuf; isym < isymend; isym++)
2862 if (isym->st_shndx == sec_shndx
2863 && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
2865 struct elf_link_hash_table *elftab;
2867 struct elf_link_hash_entry **lhashes = hashes;
2869 /* Skip a local symbol if it aliases a
2871 for (; lhashes < end_hashes; lhashes++)
2873 hash = (struct elf32_mn10300_link_hash_entry *) *lhashes;
2874 if ((hash->root.root.type == bfd_link_hash_defined
2875 || hash->root.root.type == bfd_link_hash_defweak)
2876 && hash->root.root.u.def.section == section
2877 && hash->root.type == STT_FUNC
2878 && hash->root.root.u.def.value == isym->st_value)
2881 if (lhashes != end_hashes)
2884 if (isym->st_shndx == SHN_UNDEF)
2885 sym_sec = bfd_und_section_ptr;
2886 else if (isym->st_shndx == SHN_ABS)
2887 sym_sec = bfd_abs_section_ptr;
2888 else if (isym->st_shndx == SHN_COMMON)
2889 sym_sec = bfd_com_section_ptr;
2892 = bfd_section_from_elf_index (input_bfd,
2895 sym_name = (bfd_elf_string_from_elf_section
2896 (input_bfd, symtab_hdr->sh_link,
2899 /* Tack on an ID so we can uniquely identify this
2900 local symbol in the global hash table. */
2901 amt = strlen (sym_name) + 10;
2902 new_name = bfd_malloc (amt);
2903 if (new_name == NULL)
2906 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
2907 sym_name = new_name;
2909 elftab = &hash_table->static_hash_table->root;
2910 hash = ((struct elf32_mn10300_link_hash_entry *)
2911 elf_link_hash_lookup (elftab, sym_name,
2912 TRUE, TRUE, FALSE));
2914 compute_function_info (input_bfd, hash,
2915 isym->st_value, contents);
2916 hash->value = isym->st_value;
2920 for (; hashes < end_hashes; hashes++)
2922 hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
2923 if ((hash->root.root.type == bfd_link_hash_defined
2924 || hash->root.root.type == bfd_link_hash_defweak)
2925 && hash->root.root.u.def.section == section
2926 && hash->root.type == STT_FUNC)
2927 compute_function_info (input_bfd, hash,
2928 (hash)->root.root.u.def.value,
2933 /* Cache or free any memory we allocated for the relocs. */
2934 if (internal_relocs != NULL
2935 && elf_section_data (section)->relocs != internal_relocs)
2936 free (internal_relocs);
2937 internal_relocs = NULL;
2939 /* Cache or free any memory we allocated for the contents. */
2940 if (contents != NULL
2941 && elf_section_data (section)->this_hdr.contents != contents)
2943 if (! link_info->keep_memory)
2947 /* Cache the section contents for elf_link_input_bfd. */
2948 elf_section_data (section)->this_hdr.contents = contents;
2954 /* Cache or free any memory we allocated for the symbols. */
2956 && symtab_hdr->contents != (unsigned char *) isymbuf)
2958 if (! link_info->keep_memory)
2962 /* Cache the symbols for elf_link_input_bfd. */
2963 symtab_hdr->contents = (unsigned char *) isymbuf;
2969 /* Now iterate on each symbol in the hash table and perform
2970 the final initialization steps on each. */
2971 elf32_mn10300_link_hash_traverse (hash_table,
2972 elf32_mn10300_finish_hash_table_entry,
2974 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2975 elf32_mn10300_finish_hash_table_entry,
2979 /* This section of code collects all our local symbols, sorts
2980 them by value, and looks for multiple symbols referring to
2981 the same address. For those symbols, the flags are merged.
2982 At this point, the only flag that can be set is
2983 MN10300_CONVERT_CALL_TO_CALLS, so we simply OR the flags
2985 int static_count = 0, i;
2986 struct elf32_mn10300_link_hash_entry **entries;
2987 struct elf32_mn10300_link_hash_entry **ptr;
2989 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2990 elf32_mn10300_count_hash_table_entries,
2993 entries = bfd_malloc (static_count * sizeof (* ptr));
2996 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2997 elf32_mn10300_list_hash_table_entries,
3000 qsort (entries, static_count, sizeof (entries[0]), sort_by_value);
3002 for (i = 0; i < static_count - 1; i++)
3003 if (entries[i]->value && entries[i]->value == entries[i+1]->value)
3005 int v = entries[i]->flags;
3008 for (j = i + 1; j < static_count && entries[j]->value == entries[i]->value; j++)
3009 v |= entries[j]->flags;
3011 for (j = i; j < static_count && entries[j]->value == entries[i]->value; j++)
3012 entries[j]->flags = v;
3018 /* All entries in the hash table are fully initialized. */
3019 hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
3021 /* Now that everything has been initialized, go through each
3022 code section and delete any prologue insns which will be
3023 redundant because their operations will be performed by
3024 a "call" instruction. */
3025 for (input_bfd = link_info->input_bfds;
3027 input_bfd = input_bfd->link.next)
3029 /* We're going to need all the local symbols for each bfd. */
3030 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3031 if (symtab_hdr->sh_info != 0)
3033 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
3034 if (isymbuf == NULL)
3035 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
3036 symtab_hdr->sh_info, 0,
3038 if (isymbuf == NULL)
3042 /* Walk over each section in this bfd. */
3043 for (section = input_bfd->sections;
3045 section = section->next)
3047 unsigned int sec_shndx;
3048 Elf_Internal_Sym *isym, *isymend;
3049 struct elf_link_hash_entry **hashes;
3050 struct elf_link_hash_entry **end_hashes;
3051 unsigned int symcount;
3053 /* Skip non-code sections and empty sections. */
3054 if ((section->flags & SEC_CODE) == 0 || section->size == 0)
3057 if (section->reloc_count != 0)
3059 /* Get a copy of the native relocations. */
3060 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
3062 link_info->keep_memory);
3063 if (internal_relocs == NULL)
3067 /* Get cached copy of section contents if it exists. */
3068 if (elf_section_data (section)->this_hdr.contents != NULL)
3069 contents = elf_section_data (section)->this_hdr.contents;
3072 /* Go get them off disk. */
3073 if (!bfd_malloc_and_get_section (input_bfd, section,
3078 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
3081 /* Now look for any function in this section which needs
3082 insns deleted from its prologue. */
3083 isymend = isymbuf + symtab_hdr->sh_info;
3084 for (isym = isymbuf; isym < isymend; isym++)
3086 struct elf32_mn10300_link_hash_entry *sym_hash;
3087 asection *sym_sec = NULL;
3088 const char *sym_name;
3090 struct elf_link_hash_table *elftab;
3093 if (isym->st_shndx != sec_shndx)
3096 if (isym->st_shndx == SHN_UNDEF)
3097 sym_sec = bfd_und_section_ptr;
3098 else if (isym->st_shndx == SHN_ABS)
3099 sym_sec = bfd_abs_section_ptr;
3100 else if (isym->st_shndx == SHN_COMMON)
3101 sym_sec = bfd_com_section_ptr;
3104 = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
3107 = bfd_elf_string_from_elf_section (input_bfd,
3108 symtab_hdr->sh_link,
3111 /* Tack on an ID so we can uniquely identify this
3112 local symbol in the global hash table. */
3113 amt = strlen (sym_name) + 10;
3114 new_name = bfd_malloc (amt);
3115 if (new_name == NULL)
3117 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
3118 sym_name = new_name;
3120 elftab = & hash_table->static_hash_table->root;
3121 sym_hash = (struct elf32_mn10300_link_hash_entry *)
3122 elf_link_hash_lookup (elftab, sym_name,
3123 FALSE, FALSE, FALSE);
3126 if (sym_hash == NULL)
3129 if (! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
3130 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
3134 /* Note that we've changed things. */
3135 elf_section_data (section)->relocs = internal_relocs;
3136 elf_section_data (section)->this_hdr.contents = contents;
3137 symtab_hdr->contents = (unsigned char *) isymbuf;
3139 /* Count how many bytes we're going to delete. */
3140 if (sym_hash->movm_args)
3143 if (sym_hash->stack_size > 0)
3145 if (sym_hash->stack_size <= 128)
3151 /* Note that we've deleted prologue bytes for this
3153 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3155 /* Actually delete the bytes. */
3156 if (!mn10300_elf_relax_delete_bytes (input_bfd,
3162 /* Something changed. Not strictly necessary, but
3163 may lead to more relaxing opportunities. */
3168 /* Look for any global functions in this section which
3169 need insns deleted from their prologues. */
3170 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
3171 - symtab_hdr->sh_info);
3172 hashes = elf_sym_hashes (input_bfd);
3173 end_hashes = hashes + symcount;
3174 for (; hashes < end_hashes; hashes++)
3176 struct elf32_mn10300_link_hash_entry *sym_hash;
3178 sym_hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
3179 if ((sym_hash->root.root.type == bfd_link_hash_defined
3180 || sym_hash->root.root.type == bfd_link_hash_defweak)
3181 && sym_hash->root.root.u.def.section == section
3182 && ! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
3183 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
3187 struct elf_link_hash_entry **hh;
3189 /* Note that we've changed things. */
3190 elf_section_data (section)->relocs = internal_relocs;
3191 elf_section_data (section)->this_hdr.contents = contents;
3192 symtab_hdr->contents = (unsigned char *) isymbuf;
3194 /* Count how many bytes we're going to delete. */
3195 if (sym_hash->movm_args)
3198 if (sym_hash->stack_size > 0)
3200 if (sym_hash->stack_size <= 128)
3206 /* Note that we've deleted prologue bytes for this
3208 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3210 /* Actually delete the bytes. */
3211 symval = sym_hash->root.root.u.def.value;
3212 if (!mn10300_elf_relax_delete_bytes (input_bfd,
3218 /* There may be other C++ functions symbols with the same
3219 address. If so then mark these as having had their
3220 prologue bytes deleted as well. */
3221 for (hh = elf_sym_hashes (input_bfd); hh < end_hashes; hh++)
3223 struct elf32_mn10300_link_hash_entry *h;
3225 h = (struct elf32_mn10300_link_hash_entry *) * hh;
3228 && (h->root.root.type == bfd_link_hash_defined
3229 || h->root.root.type == bfd_link_hash_defweak)
3230 && h->root.root.u.def.section == section
3231 && ! (h->flags & MN10300_CONVERT_CALL_TO_CALLS)
3232 && h->root.root.u.def.value == symval
3233 && h->root.type == STT_FUNC)
3234 h->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3237 /* Something changed. Not strictly necessary, but
3238 may lead to more relaxing opportunities. */
3243 /* Cache or free any memory we allocated for the relocs. */
3244 if (internal_relocs != NULL
3245 && elf_section_data (section)->relocs != internal_relocs)
3246 free (internal_relocs);
3247 internal_relocs = NULL;
3249 /* Cache or free any memory we allocated for the contents. */
3250 if (contents != NULL
3251 && elf_section_data (section)->this_hdr.contents != contents)
3253 if (! link_info->keep_memory)
3256 /* Cache the section contents for elf_link_input_bfd. */
3257 elf_section_data (section)->this_hdr.contents = contents;
3262 /* Cache or free any memory we allocated for the symbols. */
3264 && symtab_hdr->contents != (unsigned char *) isymbuf)
3266 if (! link_info->keep_memory)
3269 /* Cache the symbols for elf_link_input_bfd. */
3270 symtab_hdr->contents = (unsigned char *) isymbuf;
3276 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
3278 internal_relocs = NULL;
3280 /* For error_return. */
3283 /* We don't have to do anything for a relocatable link, if
3284 this section does not have relocs, or if this is not a
3286 if (bfd_link_relocatable (link_info)
3287 || (sec->flags & SEC_RELOC) == 0
3288 || sec->reloc_count == 0
3289 || (sec->flags & SEC_CODE) == 0)
3292 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3294 /* Get a copy of the native relocations. */
3295 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
3296 link_info->keep_memory);
3297 if (internal_relocs == NULL)
3300 /* Scan for worst case alignment gap changes. Note that this logic
3301 is not ideal; what we should do is run this scan for every
3302 opcode/address range and adjust accordingly, but that's
3303 expensive. Worst case is that for an alignment of N bytes, we
3304 move by 2*N-N-1 bytes, assuming we have aligns of 1, 2, 4, 8, etc
3305 all before it. Plus, this still doesn't cover cross-section
3306 jumps with section alignment. */
3307 irelend = internal_relocs + sec->reloc_count;
3308 align_gap_adjustment = 0;
3309 for (irel = internal_relocs; irel < irelend; irel++)
3311 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN)
3313 bfd_vma adj = 1 << irel->r_addend;
3314 bfd_vma aend = irel->r_offset;
3316 aend = BFD_ALIGN (aend, 1 << irel->r_addend);
3317 adj = 2 * adj - adj - 1;
3319 /* Record the biggest adjustmnet. Skip any alignment at the
3320 end of our section. */
3321 if (align_gap_adjustment < adj
3322 && aend < sec->output_section->vma + sec->output_offset + sec->size)
3323 align_gap_adjustment = adj;
3327 /* Walk through them looking for relaxing opportunities. */
3328 irelend = internal_relocs + sec->reloc_count;
3329 for (irel = internal_relocs; irel < irelend; irel++)
3332 bfd_signed_vma jump_offset;
3333 asection *sym_sec = NULL;
3334 struct elf32_mn10300_link_hash_entry *h = NULL;
3336 /* If this isn't something that can be relaxed, then ignore
3338 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_NONE
3339 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_8
3340 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_MAX)
3343 /* Get the section contents if we haven't done so already. */
3344 if (contents == NULL)
3346 /* Get cached copy if it exists. */
3347 if (elf_section_data (sec)->this_hdr.contents != NULL)
3348 contents = elf_section_data (sec)->this_hdr.contents;
3351 /* Go get them off disk. */
3352 if (!bfd_malloc_and_get_section (abfd, sec, &contents))
3357 /* Read this BFD's symbols if we haven't done so already. */
3358 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
3360 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
3361 if (isymbuf == NULL)
3362 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
3363 symtab_hdr->sh_info, 0,
3365 if (isymbuf == NULL)
3369 /* Get the value of the symbol referred to by the reloc. */
3370 if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
3372 Elf_Internal_Sym *isym;
3373 const char *sym_name;
3376 /* A local symbol. */
3377 isym = isymbuf + ELF32_R_SYM (irel->r_info);
3378 if (isym->st_shndx == SHN_UNDEF)
3379 sym_sec = bfd_und_section_ptr;
3380 else if (isym->st_shndx == SHN_ABS)
3381 sym_sec = bfd_abs_section_ptr;
3382 else if (isym->st_shndx == SHN_COMMON)
3383 sym_sec = bfd_com_section_ptr;
3385 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3387 sym_name = bfd_elf_string_from_elf_section (abfd,
3388 symtab_hdr->sh_link,
3391 if ((sym_sec->flags & SEC_MERGE)
3392 && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
3394 symval = isym->st_value;
3396 /* GAS may reduce relocations against symbols in SEC_MERGE
3397 sections to a relocation against the section symbol when
3398 the original addend was zero. When the reloc is against
3399 a section symbol we should include the addend in the
3400 offset passed to _bfd_merged_section_offset, since the
3401 location of interest is the original symbol. On the
3402 other hand, an access to "sym+addend" where "sym" is not
3403 a section symbol should not include the addend; Such an
3404 access is presumed to be an offset from "sym"; The
3405 location of interest is just "sym". */
3406 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
3407 symval += irel->r_addend;
3409 symval = _bfd_merged_section_offset (abfd, & sym_sec,
3410 elf_section_data (sym_sec)->sec_info,
3413 if (ELF_ST_TYPE (isym->st_info) != STT_SECTION)
3414 symval += irel->r_addend;
3416 symval += sym_sec->output_section->vma
3417 + sym_sec->output_offset - irel->r_addend;
3420 symval = (isym->st_value
3421 + sym_sec->output_section->vma
3422 + sym_sec->output_offset);
3424 /* Tack on an ID so we can uniquely identify this
3425 local symbol in the global hash table. */
3426 new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10);
3427 if (new_name == NULL)
3429 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
3430 sym_name = new_name;
3432 h = (struct elf32_mn10300_link_hash_entry *)
3433 elf_link_hash_lookup (&hash_table->static_hash_table->root,
3434 sym_name, FALSE, FALSE, FALSE);
3441 /* An external symbol. */
3442 indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
3443 h = (struct elf32_mn10300_link_hash_entry *)
3444 (elf_sym_hashes (abfd)[indx]);
3445 BFD_ASSERT (h != NULL);
3446 if (h->root.root.type != bfd_link_hash_defined
3447 && h->root.root.type != bfd_link_hash_defweak)
3448 /* This appears to be a reference to an undefined
3449 symbol. Just ignore it--it will be caught by the
3450 regular reloc processing. */
3453 /* Check for a reference to a discarded symbol and ignore it. */
3454 if (h->root.root.u.def.section->output_section == NULL)
3457 sym_sec = h->root.root.u.def.section->output_section;
3459 symval = (h->root.root.u.def.value
3460 + h->root.root.u.def.section->output_section->vma
3461 + h->root.root.u.def.section->output_offset);
3464 /* For simplicity of coding, we are going to modify the section
3465 contents, the section relocs, and the BFD symbol table. We
3466 must tell the rest of the code not to free up this
3467 information. It would be possible to instead create a table
3468 of changes which have to be made, as is done in coff-mips.c;
3469 that would be more work, but would require less memory when
3470 the linker is run. */
3472 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
3473 branch/call, also deal with "call" -> "calls" conversions and
3474 insertion of prologue data into "call" instructions. */
3475 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL32
3476 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32)
3478 bfd_vma value = symval;
3480 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32
3482 && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
3483 && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
3484 && h->root.plt.offset != (bfd_vma) -1)
3488 splt = hash_table->root.splt;
3489 value = ((splt->output_section->vma
3490 + splt->output_offset
3491 + h->root.plt.offset)
3492 - (sec->output_section->vma
3493 + sec->output_offset
3497 /* If we've got a "call" instruction that needs to be turned
3498 into a "calls" instruction, do so now. It saves a byte. */
3499 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
3503 /* Get the opcode. */
3504 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3506 /* Make sure we're working with a "call" instruction! */
3509 /* Note that we've changed the relocs, section contents,
3511 elf_section_data (sec)->relocs = internal_relocs;
3512 elf_section_data (sec)->this_hdr.contents = contents;
3513 symtab_hdr->contents = (unsigned char *) isymbuf;
3515 /* Fix the opcode. */
3516 bfd_put_8 (abfd, 0xfc, contents + irel->r_offset - 1);
3517 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
3519 /* Fix irel->r_offset and irel->r_addend. */
3520 irel->r_offset += 1;
3521 irel->r_addend += 1;
3523 /* Delete one byte of data. */
3524 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3525 irel->r_offset + 3, 1))
3528 /* That will change things, so, we should relax again.
3529 Note that this is not required, and it may be slow. */
3535 /* We've got a "call" instruction which needs some data
3536 from target function filled in. */
3539 /* Get the opcode. */
3540 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3542 /* Insert data from the target function into the "call"
3543 instruction if needed. */
3546 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 4);
3547 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
3548 contents + irel->r_offset + 5);
3552 /* Deal with pc-relative gunk. */
3553 value -= (sec->output_section->vma + sec->output_offset);
3554 value -= irel->r_offset;
3555 value += irel->r_addend;
3557 /* See if the value will fit in 16 bits, note the high value is
3558 0x7fff + 2 as the target will be two bytes closer if we are
3559 able to relax, if it's in the same section. */
3560 if (sec->output_section == sym_sec->output_section)
3561 jump_offset = 0x8001;
3563 jump_offset = 0x7fff;
3565 /* Account for jumps across alignment boundaries using
3566 align_gap_adjustment. */
3567 if ((bfd_signed_vma) value < jump_offset - (bfd_signed_vma) align_gap_adjustment
3568 && ((bfd_signed_vma) value > -0x8000 + (bfd_signed_vma) align_gap_adjustment))
3572 /* Get the opcode. */
3573 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3575 if (code != 0xdc && code != 0xdd && code != 0xff)
3578 /* Note that we've changed the relocs, section contents, etc. */
3579 elf_section_data (sec)->relocs = internal_relocs;
3580 elf_section_data (sec)->this_hdr.contents = contents;
3581 symtab_hdr->contents = (unsigned char *) isymbuf;
3583 /* Fix the opcode. */
3585 bfd_put_8 (abfd, 0xcc, contents + irel->r_offset - 1);
3586 else if (code == 0xdd)
3587 bfd_put_8 (abfd, 0xcd, contents + irel->r_offset - 1);
3588 else if (code == 0xff)
3589 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
3591 /* Fix the relocation's type. */
3592 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3593 (ELF32_R_TYPE (irel->r_info)
3594 == (int) R_MN10300_PLT32)
3598 /* Delete two bytes of data. */
3599 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3600 irel->r_offset + 1, 2))
3603 /* That will change things, so, we should relax again.
3604 Note that this is not required, and it may be slow. */
3609 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
3611 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL16)
3613 bfd_vma value = symval;
3615 /* If we've got a "call" instruction that needs to be turned
3616 into a "calls" instruction, do so now. It saves a byte. */
3617 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
3621 /* Get the opcode. */
3622 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3624 /* Make sure we're working with a "call" instruction! */
3627 /* Note that we've changed the relocs, section contents,
3629 elf_section_data (sec)->relocs = internal_relocs;
3630 elf_section_data (sec)->this_hdr.contents = contents;
3631 symtab_hdr->contents = (unsigned char *) isymbuf;
3633 /* Fix the opcode. */
3634 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 1);
3635 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
3637 /* Fix irel->r_offset and irel->r_addend. */
3638 irel->r_offset += 1;
3639 irel->r_addend += 1;
3641 /* Delete one byte of data. */
3642 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3643 irel->r_offset + 1, 1))
3646 /* That will change things, so, we should relax again.
3647 Note that this is not required, and it may be slow. */
3655 /* Get the opcode. */
3656 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3658 /* Insert data from the target function into the "call"
3659 instruction if needed. */
3662 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 2);
3663 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
3664 contents + irel->r_offset + 3);
3668 /* Deal with pc-relative gunk. */
3669 value -= (sec->output_section->vma + sec->output_offset);
3670 value -= irel->r_offset;
3671 value += irel->r_addend;
3673 /* See if the value will fit in 8 bits, note the high value is
3674 0x7f + 1 as the target will be one bytes closer if we are
3676 if ((long) value < 0x80 && (long) value > -0x80)
3680 /* Get the opcode. */
3681 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3686 /* Note that we've changed the relocs, section contents, etc. */
3687 elf_section_data (sec)->relocs = internal_relocs;
3688 elf_section_data (sec)->this_hdr.contents = contents;
3689 symtab_hdr->contents = (unsigned char *) isymbuf;
3691 /* Fix the opcode. */
3692 bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
3694 /* Fix the relocation's type. */
3695 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3698 /* Delete one byte of data. */
3699 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3700 irel->r_offset + 1, 1))
3703 /* That will change things, so, we should relax again.
3704 Note that this is not required, and it may be slow. */
3709 /* Try to eliminate an unconditional 8 bit pc-relative branch
3710 which immediately follows a conditional 8 bit pc-relative
3711 branch around the unconditional branch.
3718 This happens when the bCC can't reach lab2 at assembly time,
3719 but due to other relaxations it can reach at link time. */
3720 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
3722 Elf_Internal_Rela *nrel;
3723 bfd_vma value = symval;
3726 /* Deal with pc-relative gunk. */
3727 value -= (sec->output_section->vma + sec->output_offset);
3728 value -= irel->r_offset;
3729 value += irel->r_addend;
3731 /* Do nothing if this reloc is the last byte in the section. */
3732 if (irel->r_offset == sec->size)
3735 /* See if the next instruction is an unconditional pc-relative
3736 branch, more often than not this test will fail, so we
3737 test it first to speed things up. */
3738 code = bfd_get_8 (abfd, contents + irel->r_offset + 1);
3742 /* Also make sure the next relocation applies to the next
3743 instruction and that it's a pc-relative 8 bit branch. */
3746 || irel->r_offset + 2 != nrel->r_offset
3747 || ELF32_R_TYPE (nrel->r_info) != (int) R_MN10300_PCREL8)
3750 /* Make sure our destination immediately follows the
3751 unconditional branch. */
3752 if (symval != (sec->output_section->vma + sec->output_offset
3753 + irel->r_offset + 3))
3756 /* Now make sure we are a conditional branch. This may not
3757 be necessary, but why take the chance.
3759 Note these checks assume that R_MN10300_PCREL8 relocs
3760 only occur on bCC and bCCx insns. If they occured
3761 elsewhere, we'd need to know the start of this insn
3762 for this check to be accurate. */
3763 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3764 if (code != 0xc0 && code != 0xc1 && code != 0xc2
3765 && code != 0xc3 && code != 0xc4 && code != 0xc5
3766 && code != 0xc6 && code != 0xc7 && code != 0xc8
3767 && code != 0xc9 && code != 0xe8 && code != 0xe9
3768 && code != 0xea && code != 0xeb)
3771 /* We also have to be sure there is no symbol/label
3772 at the unconditional branch. */
3773 if (mn10300_elf_symbol_address_p (abfd, sec, isymbuf,
3774 irel->r_offset + 1))
3777 /* Note that we've changed the relocs, section contents, etc. */
3778 elf_section_data (sec)->relocs = internal_relocs;
3779 elf_section_data (sec)->this_hdr.contents = contents;
3780 symtab_hdr->contents = (unsigned char *) isymbuf;
3782 /* Reverse the condition of the first branch. */
3828 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
3830 /* Set the reloc type and symbol for the first branch
3831 from the second branch. */
3832 irel->r_info = nrel->r_info;
3834 /* Make the reloc for the second branch a null reloc. */
3835 nrel->r_info = ELF32_R_INFO (ELF32_R_SYM (nrel->r_info),
3838 /* Delete two bytes of data. */
3839 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3840 irel->r_offset + 1, 2))
3843 /* That will change things, so, we should relax again.
3844 Note that this is not required, and it may be slow. */
3848 /* Try to turn a 24 immediate, displacement or absolute address
3849 into a 8 immediate, displacement or absolute address. */
3850 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_24)
3852 bfd_vma value = symval;
3853 value += irel->r_addend;
3855 /* See if the value will fit in 8 bits. */
3856 if ((long) value < 0x7f && (long) value > -0x80)
3860 /* AM33 insns which have 24 operands are 6 bytes long and
3861 will have 0xfd as the first byte. */
3863 /* Get the first opcode. */
3864 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
3868 /* Get the second opcode. */
3869 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
3871 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
3872 equivalent instructions exists. */
3873 if (code != 0x6b && code != 0x7b
3874 && code != 0x8b && code != 0x9b
3875 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
3876 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
3877 || (code & 0x0f) == 0x0e))
3879 /* Not safe if the high bit is on as relaxing may
3880 move the value out of high mem and thus not fit
3881 in a signed 8bit value. This is currently over
3883 if ((value & 0x80) == 0)
3885 /* Note that we've changed the relocation contents,
3887 elf_section_data (sec)->relocs = internal_relocs;
3888 elf_section_data (sec)->this_hdr.contents = contents;
3889 symtab_hdr->contents = (unsigned char *) isymbuf;
3891 /* Fix the opcode. */
3892 bfd_put_8 (abfd, 0xfb, contents + irel->r_offset - 3);
3893 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
3895 /* Fix the relocation's type. */
3897 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3900 /* Delete two bytes of data. */
3901 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3902 irel->r_offset + 1, 2))
3905 /* That will change things, so, we should relax
3906 again. Note that this is not required, and it
3916 /* Try to turn a 32bit immediate, displacement or absolute address
3917 into a 16bit immediate, displacement or absolute address. */
3918 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32
3919 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32
3920 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
3922 bfd_vma value = symval;
3924 if (ELF32_R_TYPE (irel->r_info) != (int) R_MN10300_32)
3928 sgot = hash_table->root.sgot;
3929 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32)
3931 value = sgot->output_offset;
3934 value += h->root.got.offset;
3936 value += (elf_local_got_offsets
3937 (abfd)[ELF32_R_SYM (irel->r_info)]);
3939 else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
3940 value -= sgot->output_section->vma;
3941 else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTPC32)
3942 value = (sgot->output_section->vma
3943 - (sec->output_section->vma
3944 + sec->output_offset
3950 value += irel->r_addend;
3952 /* See if the value will fit in 24 bits.
3953 We allow any 16bit match here. We prune those we can't
3955 if ((long) value < 0x7fffff && (long) value > -0x800000)
3959 /* AM33 insns which have 32bit operands are 7 bytes long and
3960 will have 0xfe as the first byte. */
3962 /* Get the first opcode. */
3963 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
3967 /* Get the second opcode. */
3968 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
3970 /* All the am33 32 -> 24 relaxing possibilities. */
3971 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
3972 equivalent instructions exists. */
3973 if (code != 0x6b && code != 0x7b
3974 && code != 0x8b && code != 0x9b
3975 && (ELF32_R_TYPE (irel->r_info)
3976 != (int) R_MN10300_GOTPC32)
3977 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
3978 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
3979 || (code & 0x0f) == 0x0e))
3981 /* Not safe if the high bit is on as relaxing may
3982 move the value out of high mem and thus not fit
3983 in a signed 16bit value. This is currently over
3985 if ((value & 0x8000) == 0)
3987 /* Note that we've changed the relocation contents,
3989 elf_section_data (sec)->relocs = internal_relocs;
3990 elf_section_data (sec)->this_hdr.contents = contents;
3991 symtab_hdr->contents = (unsigned char *) isymbuf;
3993 /* Fix the opcode. */
3994 bfd_put_8 (abfd, 0xfd, contents + irel->r_offset - 3);
3995 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
3997 /* Fix the relocation's type. */
3999 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4000 (ELF32_R_TYPE (irel->r_info)
4001 == (int) R_MN10300_GOTOFF32)
4002 ? R_MN10300_GOTOFF24
4003 : (ELF32_R_TYPE (irel->r_info)
4004 == (int) R_MN10300_GOT32)
4008 /* Delete one byte of data. */
4009 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4010 irel->r_offset + 3, 1))
4013 /* That will change things, so, we should relax
4014 again. Note that this is not required, and it
4023 /* See if the value will fit in 16 bits.
4024 We allow any 16bit match here. We prune those we can't
4026 if ((long) value < 0x7fff && (long) value > -0x8000)
4030 /* Most insns which have 32bit operands are 6 bytes long;
4031 exceptions are pcrel insns and bit insns.
4033 We handle pcrel insns above. We don't bother trying
4034 to handle the bit insns here.
4036 The first byte of the remaining insns will be 0xfc. */
4038 /* Get the first opcode. */
4039 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
4044 /* Get the second opcode. */
4045 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
4047 if ((code & 0xf0) < 0x80)
4048 switch (code & 0xf0)
4050 /* mov (d32,am),dn -> mov (d32,am),dn
4051 mov dm,(d32,am) -> mov dn,(d32,am)
4052 mov (d32,am),an -> mov (d32,am),an
4053 mov dm,(d32,am) -> mov dn,(d32,am)
4054 movbu (d32,am),dn -> movbu (d32,am),dn
4055 movbu dm,(d32,am) -> movbu dn,(d32,am)
4056 movhu (d32,am),dn -> movhu (d32,am),dn
4057 movhu dm,(d32,am) -> movhu dn,(d32,am) */
4066 /* Not safe if the high bit is on as relaxing may
4067 move the value out of high mem and thus not fit
4068 in a signed 16bit value. */
4070 && (value & 0x8000))
4073 /* Note that we've changed the relocation contents, etc. */
4074 elf_section_data (sec)->relocs = internal_relocs;
4075 elf_section_data (sec)->this_hdr.contents = contents;
4076 symtab_hdr->contents = (unsigned char *) isymbuf;
4078 /* Fix the opcode. */
4079 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4080 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4082 /* Fix the relocation's type. */
4083 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4084 (ELF32_R_TYPE (irel->r_info)
4085 == (int) R_MN10300_GOTOFF32)
4086 ? R_MN10300_GOTOFF16
4087 : (ELF32_R_TYPE (irel->r_info)
4088 == (int) R_MN10300_GOT32)
4090 : (ELF32_R_TYPE (irel->r_info)
4091 == (int) R_MN10300_GOTPC32)
4092 ? R_MN10300_GOTPC16 :
4095 /* Delete two bytes of data. */
4096 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4097 irel->r_offset + 2, 2))
4100 /* That will change things, so, we should relax again.
4101 Note that this is not required, and it may be slow. */
4105 else if ((code & 0xf0) == 0x80
4106 || (code & 0xf0) == 0x90)
4107 switch (code & 0xf3)
4109 /* mov dn,(abs32) -> mov dn,(abs16)
4110 movbu dn,(abs32) -> movbu dn,(abs16)
4111 movhu dn,(abs32) -> movhu dn,(abs16) */
4115 /* Note that we've changed the relocation contents, etc. */
4116 elf_section_data (sec)->relocs = internal_relocs;
4117 elf_section_data (sec)->this_hdr.contents = contents;
4118 symtab_hdr->contents = (unsigned char *) isymbuf;
4120 if ((code & 0xf3) == 0x81)
4121 code = 0x01 + (code & 0x0c);
4122 else if ((code & 0xf3) == 0x82)
4123 code = 0x02 + (code & 0x0c);
4124 else if ((code & 0xf3) == 0x83)
4125 code = 0x03 + (code & 0x0c);
4129 /* Fix the opcode. */
4130 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
4132 /* Fix the relocation's type. */
4133 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4134 (ELF32_R_TYPE (irel->r_info)
4135 == (int) R_MN10300_GOTOFF32)
4136 ? R_MN10300_GOTOFF16
4137 : (ELF32_R_TYPE (irel->r_info)
4138 == (int) R_MN10300_GOT32)
4140 : (ELF32_R_TYPE (irel->r_info)
4141 == (int) R_MN10300_GOTPC32)
4142 ? R_MN10300_GOTPC16 :
4145 /* The opcode got shorter too, so we have to fix the
4146 addend and offset too! */
4147 irel->r_offset -= 1;
4149 /* Delete three bytes of data. */
4150 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4151 irel->r_offset + 1, 3))
4154 /* That will change things, so, we should relax again.
4155 Note that this is not required, and it may be slow. */
4159 /* mov am,(abs32) -> mov am,(abs16)
4160 mov am,(d32,sp) -> mov am,(d16,sp)
4161 mov dm,(d32,sp) -> mov dm,(d32,sp)
4162 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
4163 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
4169 /* sp-based offsets are zero-extended. */
4170 if (code >= 0x90 && code <= 0x93
4171 && (long) value < 0)
4174 /* Note that we've changed the relocation contents, etc. */
4175 elf_section_data (sec)->relocs = internal_relocs;
4176 elf_section_data (sec)->this_hdr.contents = contents;
4177 symtab_hdr->contents = (unsigned char *) isymbuf;
4179 /* Fix the opcode. */
4180 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4181 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4183 /* Fix the relocation's type. */
4184 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4185 (ELF32_R_TYPE (irel->r_info)
4186 == (int) R_MN10300_GOTOFF32)
4187 ? R_MN10300_GOTOFF16
4188 : (ELF32_R_TYPE (irel->r_info)
4189 == (int) R_MN10300_GOT32)
4191 : (ELF32_R_TYPE (irel->r_info)
4192 == (int) R_MN10300_GOTPC32)
4193 ? R_MN10300_GOTPC16 :
4196 /* Delete two bytes of data. */
4197 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4198 irel->r_offset + 2, 2))
4201 /* That will change things, so, we should relax again.
4202 Note that this is not required, and it may be slow. */
4206 else if ((code & 0xf0) < 0xf0)
4207 switch (code & 0xfc)
4209 /* mov imm32,dn -> mov imm16,dn
4210 mov imm32,an -> mov imm16,an
4211 mov (abs32),dn -> mov (abs16),dn
4212 movbu (abs32),dn -> movbu (abs16),dn
4213 movhu (abs32),dn -> movhu (abs16),dn */
4219 /* Not safe if the high bit is on as relaxing may
4220 move the value out of high mem and thus not fit
4221 in a signed 16bit value. */
4223 && (value & 0x8000))
4226 /* "mov imm16, an" zero-extends the immediate. */
4227 if ((code & 0xfc) == 0xdc
4228 && (long) value < 0)
4231 /* Note that we've changed the relocation contents, etc. */
4232 elf_section_data (sec)->relocs = internal_relocs;
4233 elf_section_data (sec)->this_hdr.contents = contents;
4234 symtab_hdr->contents = (unsigned char *) isymbuf;
4236 if ((code & 0xfc) == 0xcc)
4237 code = 0x2c + (code & 0x03);
4238 else if ((code & 0xfc) == 0xdc)
4239 code = 0x24 + (code & 0x03);
4240 else if ((code & 0xfc) == 0xa4)
4241 code = 0x30 + (code & 0x03);
4242 else if ((code & 0xfc) == 0xa8)
4243 code = 0x34 + (code & 0x03);
4244 else if ((code & 0xfc) == 0xac)
4245 code = 0x38 + (code & 0x03);
4249 /* Fix the opcode. */
4250 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
4252 /* Fix the relocation's type. */
4253 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4254 (ELF32_R_TYPE (irel->r_info)
4255 == (int) R_MN10300_GOTOFF32)
4256 ? R_MN10300_GOTOFF16
4257 : (ELF32_R_TYPE (irel->r_info)
4258 == (int) R_MN10300_GOT32)
4260 : (ELF32_R_TYPE (irel->r_info)
4261 == (int) R_MN10300_GOTPC32)
4262 ? R_MN10300_GOTPC16 :
4265 /* The opcode got shorter too, so we have to fix the
4266 addend and offset too! */
4267 irel->r_offset -= 1;
4269 /* Delete three bytes of data. */
4270 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4271 irel->r_offset + 1, 3))
4274 /* That will change things, so, we should relax again.
4275 Note that this is not required, and it may be slow. */
4279 /* mov (abs32),an -> mov (abs16),an
4280 mov (d32,sp),an -> mov (d16,sp),an
4281 mov (d32,sp),dn -> mov (d16,sp),dn
4282 movbu (d32,sp),dn -> movbu (d16,sp),dn
4283 movhu (d32,sp),dn -> movhu (d16,sp),dn
4284 add imm32,dn -> add imm16,dn
4285 cmp imm32,dn -> cmp imm16,dn
4286 add imm32,an -> add imm16,an
4287 cmp imm32,an -> cmp imm16,an
4288 and imm32,dn -> and imm16,dn
4289 or imm32,dn -> or imm16,dn
4290 xor imm32,dn -> xor imm16,dn
4291 btst imm32,dn -> btst imm16,dn */
4307 /* cmp imm16, an zero-extends the immediate. */
4309 && (long) value < 0)
4312 /* So do sp-based offsets. */
4313 if (code >= 0xb0 && code <= 0xb3
4314 && (long) value < 0)
4317 /* Note that we've changed the relocation contents, etc. */
4318 elf_section_data (sec)->relocs = internal_relocs;
4319 elf_section_data (sec)->this_hdr.contents = contents;
4320 symtab_hdr->contents = (unsigned char *) isymbuf;
4322 /* Fix the opcode. */
4323 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4324 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4326 /* Fix the relocation's type. */
4327 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4328 (ELF32_R_TYPE (irel->r_info)
4329 == (int) R_MN10300_GOTOFF32)
4330 ? R_MN10300_GOTOFF16
4331 : (ELF32_R_TYPE (irel->r_info)
4332 == (int) R_MN10300_GOT32)
4334 : (ELF32_R_TYPE (irel->r_info)
4335 == (int) R_MN10300_GOTPC32)
4336 ? R_MN10300_GOTPC16 :
4339 /* Delete two bytes of data. */
4340 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4341 irel->r_offset + 2, 2))
4344 /* That will change things, so, we should relax again.
4345 Note that this is not required, and it may be slow. */
4349 else if (code == 0xfe)
4351 /* add imm32,sp -> add imm16,sp */
4353 /* Note that we've changed the relocation contents, etc. */
4354 elf_section_data (sec)->relocs = internal_relocs;
4355 elf_section_data (sec)->this_hdr.contents = contents;
4356 symtab_hdr->contents = (unsigned char *) isymbuf;
4358 /* Fix the opcode. */
4359 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4360 bfd_put_8 (abfd, 0xfe, contents + irel->r_offset - 1);
4362 /* Fix the relocation's type. */
4363 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4364 (ELF32_R_TYPE (irel->r_info)
4365 == (int) R_MN10300_GOT32)
4367 : (ELF32_R_TYPE (irel->r_info)
4368 == (int) R_MN10300_GOTOFF32)
4369 ? R_MN10300_GOTOFF16
4370 : (ELF32_R_TYPE (irel->r_info)
4371 == (int) R_MN10300_GOTPC32)
4372 ? R_MN10300_GOTPC16 :
4375 /* Delete two bytes of data. */
4376 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4377 irel->r_offset + 2, 2))
4380 /* That will change things, so, we should relax again.
4381 Note that this is not required, and it may be slow. */
4390 && symtab_hdr->contents != (unsigned char *) isymbuf)
4392 if (! link_info->keep_memory)
4396 /* Cache the symbols for elf_link_input_bfd. */
4397 symtab_hdr->contents = (unsigned char *) isymbuf;
4401 if (contents != NULL
4402 && elf_section_data (sec)->this_hdr.contents != contents)
4404 if (! link_info->keep_memory)
4408 /* Cache the section contents for elf_link_input_bfd. */
4409 elf_section_data (sec)->this_hdr.contents = contents;
4413 if (internal_relocs != NULL
4414 && elf_section_data (sec)->relocs != internal_relocs)
4415 free (internal_relocs);
4421 && symtab_hdr->contents != (unsigned char *) isymbuf)
4423 if (contents != NULL
4424 && elf_section_data (section)->this_hdr.contents != contents)
4426 if (internal_relocs != NULL
4427 && elf_section_data (section)->relocs != internal_relocs)
4428 free (internal_relocs);
4433 /* This is a version of bfd_generic_get_relocated_section_contents
4434 which uses mn10300_elf_relocate_section. */
4437 mn10300_elf_get_relocated_section_contents (bfd *output_bfd,
4438 struct bfd_link_info *link_info,
4439 struct bfd_link_order *link_order,
4441 bfd_boolean relocatable,
4444 Elf_Internal_Shdr *symtab_hdr;
4445 asection *input_section = link_order->u.indirect.section;
4446 bfd *input_bfd = input_section->owner;
4447 asection **sections = NULL;
4448 Elf_Internal_Rela *internal_relocs = NULL;
4449 Elf_Internal_Sym *isymbuf = NULL;
4451 /* We only need to handle the case of relaxing, or of having a
4452 particular set of section contents, specially. */
4454 || elf_section_data (input_section)->this_hdr.contents == NULL)
4455 return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
4460 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4462 memcpy (data, elf_section_data (input_section)->this_hdr.contents,
4463 (size_t) input_section->size);
4465 if ((input_section->flags & SEC_RELOC) != 0
4466 && input_section->reloc_count > 0)
4469 Elf_Internal_Sym *isym, *isymend;
4472 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
4474 if (internal_relocs == NULL)
4477 if (symtab_hdr->sh_info != 0)
4479 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
4480 if (isymbuf == NULL)
4481 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
4482 symtab_hdr->sh_info, 0,
4484 if (isymbuf == NULL)
4488 amt = symtab_hdr->sh_info;
4489 amt *= sizeof (asection *);
4490 sections = bfd_malloc (amt);
4491 if (sections == NULL && amt != 0)
4494 isymend = isymbuf + symtab_hdr->sh_info;
4495 for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
4499 if (isym->st_shndx == SHN_UNDEF)
4500 isec = bfd_und_section_ptr;
4501 else if (isym->st_shndx == SHN_ABS)
4502 isec = bfd_abs_section_ptr;
4503 else if (isym->st_shndx == SHN_COMMON)
4504 isec = bfd_com_section_ptr;
4506 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
4511 if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd,
4512 input_section, data, internal_relocs,
4516 if (sections != NULL)
4518 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
4520 if (internal_relocs != elf_section_data (input_section)->relocs)
4521 free (internal_relocs);
4527 if (sections != NULL)
4529 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
4531 if (internal_relocs != NULL
4532 && internal_relocs != elf_section_data (input_section)->relocs)
4533 free (internal_relocs);
4537 /* Assorted hash table functions. */
4539 /* Initialize an entry in the link hash table. */
4541 /* Create an entry in an MN10300 ELF linker hash table. */
4543 static struct bfd_hash_entry *
4544 elf32_mn10300_link_hash_newfunc (struct bfd_hash_entry *entry,
4545 struct bfd_hash_table *table,
4548 struct elf32_mn10300_link_hash_entry *ret =
4549 (struct elf32_mn10300_link_hash_entry *) entry;
4551 /* Allocate the structure if it has not already been allocated by a
4554 ret = (struct elf32_mn10300_link_hash_entry *)
4555 bfd_hash_allocate (table, sizeof (* ret));
4557 return (struct bfd_hash_entry *) ret;
4559 /* Call the allocation method of the superclass. */
4560 ret = (struct elf32_mn10300_link_hash_entry *)
4561 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
4565 ret->direct_calls = 0;
4566 ret->stack_size = 0;
4568 ret->movm_stack_size = 0;
4571 ret->tls_type = GOT_UNKNOWN;
4574 return (struct bfd_hash_entry *) ret;
4578 _bfd_mn10300_copy_indirect_symbol (struct bfd_link_info * info,
4579 struct elf_link_hash_entry * dir,
4580 struct elf_link_hash_entry * ind)
4582 struct elf32_mn10300_link_hash_entry * edir;
4583 struct elf32_mn10300_link_hash_entry * eind;
4585 edir = elf_mn10300_hash_entry (dir);
4586 eind = elf_mn10300_hash_entry (ind);
4588 if (ind->root.type == bfd_link_hash_indirect
4589 && dir->got.refcount <= 0)
4591 edir->tls_type = eind->tls_type;
4592 eind->tls_type = GOT_UNKNOWN;
4594 edir->direct_calls = eind->direct_calls;
4595 edir->stack_size = eind->stack_size;
4596 edir->movm_args = eind->movm_args;
4597 edir->movm_stack_size = eind->movm_stack_size;
4598 edir->flags = eind->flags;
4600 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
4603 /* Destroy an mn10300 ELF linker hash table. */
4606 elf32_mn10300_link_hash_table_free (bfd *obfd)
4608 struct elf32_mn10300_link_hash_table *ret
4609 = (struct elf32_mn10300_link_hash_table *) obfd->link.hash;
4611 obfd->link.hash = &ret->static_hash_table->root.root;
4612 _bfd_elf_link_hash_table_free (obfd);
4613 obfd->is_linker_output = TRUE;
4614 obfd->link.hash = &ret->root.root;
4615 _bfd_elf_link_hash_table_free (obfd);
4618 /* Create an mn10300 ELF linker hash table. */
4620 static struct bfd_link_hash_table *
4621 elf32_mn10300_link_hash_table_create (bfd *abfd)
4623 struct elf32_mn10300_link_hash_table *ret;
4624 bfd_size_type amt = sizeof (* ret);
4626 ret = bfd_zmalloc (amt);
4630 amt = sizeof (struct elf_link_hash_table);
4631 ret->static_hash_table = bfd_zmalloc (amt);
4632 if (ret->static_hash_table == NULL)
4638 if (!_bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
4639 elf32_mn10300_link_hash_newfunc,
4640 sizeof (struct elf32_mn10300_link_hash_entry),
4643 free (ret->static_hash_table);
4648 abfd->is_linker_output = FALSE;
4649 abfd->link.hash = NULL;
4650 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
4651 elf32_mn10300_link_hash_newfunc,
4652 sizeof (struct elf32_mn10300_link_hash_entry),
4655 abfd->is_linker_output = TRUE;
4656 abfd->link.hash = &ret->static_hash_table->root.root;
4657 _bfd_elf_link_hash_table_free (abfd);
4661 ret->root.root.hash_table_free = elf32_mn10300_link_hash_table_free;
4663 ret->tls_ldm_got.offset = -1;
4665 return & ret->root.root;
4668 static unsigned long
4669 elf_mn10300_mach (flagword flags)
4671 switch (flags & EF_MN10300_MACH)
4673 case E_MN10300_MACH_MN10300:
4675 return bfd_mach_mn10300;
4677 case E_MN10300_MACH_AM33:
4678 return bfd_mach_am33;
4680 case E_MN10300_MACH_AM33_2:
4681 return bfd_mach_am33_2;
4685 /* The final processing done just before writing out a MN10300 ELF object
4686 file. This gets the MN10300 architecture right based on the machine
4690 _bfd_mn10300_elf_final_write_processing (bfd *abfd,
4691 bfd_boolean linker ATTRIBUTE_UNUSED)
4695 switch (bfd_get_mach (abfd))
4698 case bfd_mach_mn10300:
4699 val = E_MN10300_MACH_MN10300;
4703 val = E_MN10300_MACH_AM33;
4706 case bfd_mach_am33_2:
4707 val = E_MN10300_MACH_AM33_2;
4711 elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
4712 elf_elfheader (abfd)->e_flags |= val;
4716 _bfd_mn10300_elf_object_p (bfd *abfd)
4718 bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
4719 elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
4723 /* Merge backend specific data from an object file to the output
4724 object file when linking. */
4727 _bfd_mn10300_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
4729 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4730 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4733 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
4734 && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
4736 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
4737 bfd_get_mach (ibfd)))
4744 #define PLT0_ENTRY_SIZE 15
4745 #define PLT_ENTRY_SIZE 20
4746 #define PIC_PLT_ENTRY_SIZE 24
4748 static const bfd_byte elf_mn10300_plt0_entry[PLT0_ENTRY_SIZE] =
4750 0xfc, 0xa0, 0, 0, 0, 0, /* mov (.got+8),a0 */
4751 0xfe, 0xe, 0x10, 0, 0, 0, 0, /* mov (.got+4),r1 */
4752 0xf0, 0xf4, /* jmp (a0) */
4755 static const bfd_byte elf_mn10300_plt_entry[PLT_ENTRY_SIZE] =
4757 0xfc, 0xa0, 0, 0, 0, 0, /* mov (nameN@GOT + .got),a0 */
4758 0xf0, 0xf4, /* jmp (a0) */
4759 0xfe, 8, 0, 0, 0, 0, 0, /* mov reloc-table-address,r0 */
4760 0xdc, 0, 0, 0, 0, /* jmp .plt0 */
4763 static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] =
4765 0xfc, 0x22, 0, 0, 0, 0, /* mov (nameN@GOT,a2),a0 */
4766 0xf0, 0xf4, /* jmp (a0) */
4767 0xfe, 8, 0, 0, 0, 0, 0, /* mov reloc-table-address,r0 */
4768 0xf8, 0x22, 8, /* mov (8,a2),a0 */
4769 0xfb, 0xa, 0x1a, 4, /* mov (4,a2),r1 */
4770 0xf0, 0xf4, /* jmp (a0) */
4773 /* Return size of the first PLT entry. */
4774 #define elf_mn10300_sizeof_plt0(info) \
4775 (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE)
4777 /* Return size of a PLT entry. */
4778 #define elf_mn10300_sizeof_plt(info) \
4779 (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE)
4781 /* Return offset of the PLT0 address in an absolute PLT entry. */
4782 #define elf_mn10300_plt_plt0_offset(info) 16
4784 /* Return offset of the linker in PLT0 entry. */
4785 #define elf_mn10300_plt0_linker_offset(info) 2
4787 /* Return offset of the GOT id in PLT0 entry. */
4788 #define elf_mn10300_plt0_gotid_offset(info) 9
4790 /* Return offset of the temporary in PLT entry. */
4791 #define elf_mn10300_plt_temp_offset(info) 8
4793 /* Return offset of the symbol in PLT entry. */
4794 #define elf_mn10300_plt_symbol_offset(info) 2
4796 /* Return offset of the relocation in PLT entry. */
4797 #define elf_mn10300_plt_reloc_offset(info) 11
4799 /* The name of the dynamic interpreter. This is put in the .interp
4802 #define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
4804 /* Create dynamic sections when linking against a dynamic object. */
4807 _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
4811 const struct elf_backend_data * bed = get_elf_backend_data (abfd);
4812 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
4815 switch (bed->s->arch_size)
4826 bfd_set_error (bfd_error_bad_value);
4830 /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
4831 .rel[a].bss sections. */
4832 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4833 | SEC_LINKER_CREATED);
4835 s = bfd_make_section_anyway_with_flags (abfd,
4836 (bed->default_use_rela_p
4837 ? ".rela.plt" : ".rel.plt"),
4838 flags | SEC_READONLY);
4839 htab->root.srelplt = s;
4841 || ! bfd_set_section_alignment (abfd, s, ptralign))
4844 if (! _bfd_mn10300_elf_create_got_section (abfd, info))
4847 if (bed->want_dynbss)
4849 /* The .dynbss section is a place to put symbols which are defined
4850 by dynamic objects, are referenced by regular objects, and are
4851 not functions. We must allocate space for them in the process
4852 image and use a R_*_COPY reloc to tell the dynamic linker to
4853 initialize them at run time. The linker script puts the .dynbss
4854 section into the .bss section of the final image. */
4855 s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
4856 SEC_ALLOC | SEC_LINKER_CREATED);
4860 /* The .rel[a].bss section holds copy relocs. This section is not
4861 normally needed. We need to create it here, though, so that the
4862 linker will map it to an output section. We can't just create it
4863 only if we need it, because we will not know whether we need it
4864 until we have seen all the input files, and the first time the
4865 main linker code calls BFD after examining all the input files
4866 (size_dynamic_sections) the input sections have already been
4867 mapped to the output sections. If the section turns out not to
4868 be needed, we can discard it later. We will never need this
4869 section when generating a shared object, since they do not use
4871 if (! bfd_link_pic (info))
4873 s = bfd_make_section_anyway_with_flags (abfd,
4874 (bed->default_use_rela_p
4875 ? ".rela.bss" : ".rel.bss"),
4876 flags | SEC_READONLY);
4878 || ! bfd_set_section_alignment (abfd, s, ptralign))
4886 /* Adjust a symbol defined by a dynamic object and referenced by a
4887 regular object. The current definition is in some section of the
4888 dynamic object, but we're not including those sections. We have to
4889 change the definition to something the rest of the link can
4893 _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
4894 struct elf_link_hash_entry * h)
4896 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
4900 dynobj = htab->root.dynobj;
4902 /* Make sure we know what is going on here. */
4903 BFD_ASSERT (dynobj != NULL
4905 || h->u.weakdef != NULL
4908 && !h->def_regular)));
4910 /* If this is a function, put it in the procedure linkage table. We
4911 will fill in the contents of the procedure linkage table later,
4912 when we know the address of the .got section. */
4913 if (h->type == STT_FUNC
4916 if (! bfd_link_pic (info)
4920 /* This case can occur if we saw a PLT reloc in an input
4921 file, but the symbol was never referred to by a dynamic
4922 object. In such a case, we don't actually need to build
4923 a procedure linkage table, and we can just do a REL32
4925 BFD_ASSERT (h->needs_plt);
4929 /* Make sure this symbol is output as a dynamic symbol. */
4930 if (h->dynindx == -1)
4932 if (! bfd_elf_link_record_dynamic_symbol (info, h))
4936 s = htab->root.splt;
4937 BFD_ASSERT (s != NULL);
4939 /* If this is the first .plt entry, make room for the special
4942 s->size += elf_mn10300_sizeof_plt0 (info);
4944 /* If this symbol is not defined in a regular file, and we are
4945 not generating a shared library, then set the symbol to this
4946 location in the .plt. This is required to make function
4947 pointers compare as equal between the normal executable and
4948 the shared library. */
4949 if (! bfd_link_pic (info)
4952 h->root.u.def.section = s;
4953 h->root.u.def.value = s->size;
4956 h->plt.offset = s->size;
4958 /* Make room for this entry. */
4959 s->size += elf_mn10300_sizeof_plt (info);
4961 /* We also need to make an entry in the .got.plt section, which
4962 will be placed in the .got section by the linker script. */
4963 s = htab->root.sgotplt;
4964 BFD_ASSERT (s != NULL);
4967 /* We also need to make an entry in the .rela.plt section. */
4968 s = bfd_get_linker_section (dynobj, ".rela.plt");
4969 BFD_ASSERT (s != NULL);
4970 s->size += sizeof (Elf32_External_Rela);
4975 /* If this is a weak symbol, and there is a real definition, the
4976 processor independent code will have arranged for us to see the
4977 real definition first, and we can just use the same value. */
4978 if (h->u.weakdef != NULL)
4980 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
4981 || h->u.weakdef->root.type == bfd_link_hash_defweak);
4982 h->root.u.def.section = h->u.weakdef->root.u.def.section;
4983 h->root.u.def.value = h->u.weakdef->root.u.def.value;
4987 /* This is a reference to a symbol defined by a dynamic object which
4988 is not a function. */
4990 /* If we are creating a shared library, we must presume that the
4991 only references to the symbol are via the global offset table.
4992 For such cases we need not do anything here; the relocations will
4993 be handled correctly by relocate_section. */
4994 if (bfd_link_pic (info))
4997 /* If there are no references to this symbol that do not use the
4998 GOT, we don't need to generate a copy reloc. */
4999 if (!h->non_got_ref)
5002 /* We must allocate the symbol in our .dynbss section, which will
5003 become part of the .bss section of the executable. There will be
5004 an entry for this symbol in the .dynsym section. The dynamic
5005 object will contain position independent code, so all references
5006 from the dynamic object to this symbol will go through the global
5007 offset table. The dynamic linker will use the .dynsym entry to
5008 determine the address it must put in the global offset table, so
5009 both the dynamic object and the regular object will refer to the
5010 same memory location for the variable. */
5012 s = bfd_get_linker_section (dynobj, ".dynbss");
5013 BFD_ASSERT (s != NULL);
5015 /* We must generate a R_MN10300_COPY reloc to tell the dynamic linker to
5016 copy the initial value out of the dynamic object and into the
5017 runtime process image. We need to remember the offset into the
5018 .rela.bss section we are going to use. */
5019 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
5023 srel = bfd_get_linker_section (dynobj, ".rela.bss");
5024 BFD_ASSERT (srel != NULL);
5025 srel->size += sizeof (Elf32_External_Rela);
5029 return _bfd_elf_adjust_dynamic_copy (info, h, s);
5032 /* Set the sizes of the dynamic sections. */
5035 _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
5036 struct bfd_link_info * info)
5038 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5043 bfd_boolean reltext;
5045 dynobj = htab->root.dynobj;
5046 BFD_ASSERT (dynobj != NULL);
5048 if (elf_hash_table (info)->dynamic_sections_created)
5050 /* Set the contents of the .interp section to the interpreter. */
5051 if (bfd_link_executable (info))
5053 s = bfd_get_linker_section (dynobj, ".interp");
5054 BFD_ASSERT (s != NULL);
5055 s->size = sizeof ELF_DYNAMIC_INTERPRETER;
5056 s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
5061 /* We may have created entries in the .rela.got section.
5062 However, if we are not creating the dynamic sections, we will
5063 not actually use these entries. Reset the size of .rela.got,
5064 which will cause it to get stripped from the output file
5066 s = htab->root.sgot;
5071 if (htab->tls_ldm_got.refcount > 0)
5073 s = bfd_get_linker_section (dynobj, ".rela.got");
5074 BFD_ASSERT (s != NULL);
5075 s->size += sizeof (Elf32_External_Rela);
5078 /* The check_relocs and adjust_dynamic_symbol entry points have
5079 determined the sizes of the various dynamic sections. Allocate
5084 for (s = dynobj->sections; s != NULL; s = s->next)
5088 if ((s->flags & SEC_LINKER_CREATED) == 0)
5091 /* It's OK to base decisions on the section name, because none
5092 of the dynobj section names depend upon the input files. */
5093 name = bfd_get_section_name (dynobj, s);
5095 if (streq (name, ".plt"))
5097 /* Remember whether there is a PLT. */
5100 else if (CONST_STRNEQ (name, ".rela"))
5106 /* Remember whether there are any reloc sections other
5108 if (! streq (name, ".rela.plt"))
5110 const char * outname;
5114 /* If this relocation section applies to a read only
5115 section, then we probably need a DT_TEXTREL
5116 entry. The entries in the .rela.plt section
5117 really apply to the .got section, which we
5118 created ourselves and so know is not readonly. */
5119 outname = bfd_get_section_name (output_bfd,
5121 target = bfd_get_section_by_name (output_bfd, outname + 5);
5123 && (target->flags & SEC_READONLY) != 0
5124 && (target->flags & SEC_ALLOC) != 0)
5128 /* We use the reloc_count field as a counter if we need
5129 to copy relocs into the output file. */
5133 else if (! CONST_STRNEQ (name, ".got")
5134 && ! streq (name, ".dynbss"))
5135 /* It's not one of our sections, so don't allocate space. */
5140 /* If we don't need this section, strip it from the
5141 output file. This is mostly to handle .rela.bss and
5142 .rela.plt. We must create both sections in
5143 create_dynamic_sections, because they must be created
5144 before the linker maps input sections to output
5145 sections. The linker does that before
5146 adjust_dynamic_symbol is called, and it is that
5147 function which decides whether anything needs to go
5148 into these sections. */
5149 s->flags |= SEC_EXCLUDE;
5153 if ((s->flags & SEC_HAS_CONTENTS) == 0)
5156 /* Allocate memory for the section contents. We use bfd_zalloc
5157 here in case unused entries are not reclaimed before the
5158 section's contents are written out. This should not happen,
5159 but this way if it does, we get a R_MN10300_NONE reloc
5160 instead of garbage. */
5161 s->contents = bfd_zalloc (dynobj, s->size);
5162 if (s->contents == NULL)
5166 if (elf_hash_table (info)->dynamic_sections_created)
5168 /* Add some entries to the .dynamic section. We fill in the
5169 values later, in _bfd_mn10300_elf_finish_dynamic_sections,
5170 but we must add the entries now so that we get the correct
5171 size for the .dynamic section. The DT_DEBUG entry is filled
5172 in by the dynamic linker and used by the debugger. */
5173 if (! bfd_link_pic (info))
5175 if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
5181 if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
5182 || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
5183 || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
5184 || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
5190 if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
5191 || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
5192 || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
5193 sizeof (Elf32_External_Rela)))
5199 if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
5207 /* Finish up dynamic symbol handling. We set the contents of various
5208 dynamic sections here. */
5211 _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
5212 struct bfd_link_info * info,
5213 struct elf_link_hash_entry * h,
5214 Elf_Internal_Sym * sym)
5216 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5219 dynobj = htab->root.dynobj;
5221 if (h->plt.offset != (bfd_vma) -1)
5228 Elf_Internal_Rela rel;
5230 /* This symbol has an entry in the procedure linkage table. Set
5233 BFD_ASSERT (h->dynindx != -1);
5235 splt = htab->root.splt;
5236 sgot = htab->root.sgotplt;
5237 srel = bfd_get_linker_section (dynobj, ".rela.plt");
5238 BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
5240 /* Get the index in the procedure linkage table which
5241 corresponds to this symbol. This is the index of this symbol
5242 in all the symbols for which we are making plt entries. The
5243 first entry in the procedure linkage table is reserved. */
5244 plt_index = ((h->plt.offset - elf_mn10300_sizeof_plt0 (info))
5245 / elf_mn10300_sizeof_plt (info));
5247 /* Get the offset into the .got table of the entry that
5248 corresponds to this function. Each .got entry is 4 bytes.
5249 The first three are reserved. */
5250 got_offset = (plt_index + 3) * 4;
5252 /* Fill in the entry in the procedure linkage table. */
5253 if (! bfd_link_pic (info))
5255 memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry,
5256 elf_mn10300_sizeof_plt (info));
5257 bfd_put_32 (output_bfd,
5258 (sgot->output_section->vma
5259 + sgot->output_offset
5261 (splt->contents + h->plt.offset
5262 + elf_mn10300_plt_symbol_offset (info)));
5264 bfd_put_32 (output_bfd,
5265 (1 - h->plt.offset - elf_mn10300_plt_plt0_offset (info)),
5266 (splt->contents + h->plt.offset
5267 + elf_mn10300_plt_plt0_offset (info)));
5271 memcpy (splt->contents + h->plt.offset, elf_mn10300_pic_plt_entry,
5272 elf_mn10300_sizeof_plt (info));
5274 bfd_put_32 (output_bfd, got_offset,
5275 (splt->contents + h->plt.offset
5276 + elf_mn10300_plt_symbol_offset (info)));
5279 bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
5280 (splt->contents + h->plt.offset
5281 + elf_mn10300_plt_reloc_offset (info)));
5283 /* Fill in the entry in the global offset table. */
5284 bfd_put_32 (output_bfd,
5285 (splt->output_section->vma
5286 + splt->output_offset
5288 + elf_mn10300_plt_temp_offset (info)),
5289 sgot->contents + got_offset);
5291 /* Fill in the entry in the .rela.plt section. */
5292 rel.r_offset = (sgot->output_section->vma
5293 + sgot->output_offset
5295 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_JMP_SLOT);
5297 bfd_elf32_swap_reloca_out (output_bfd, &rel,
5298 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5301 if (!h->def_regular)
5302 /* Mark the symbol as undefined, rather than as defined in
5303 the .plt section. Leave the value alone. */
5304 sym->st_shndx = SHN_UNDEF;
5307 if (h->got.offset != (bfd_vma) -1)
5311 Elf_Internal_Rela rel;
5313 /* This symbol has an entry in the global offset table. Set it up. */
5314 sgot = htab->root.sgot;
5315 srel = bfd_get_linker_section (dynobj, ".rela.got");
5316 BFD_ASSERT (sgot != NULL && srel != NULL);
5318 rel.r_offset = (sgot->output_section->vma
5319 + sgot->output_offset
5320 + (h->got.offset & ~1));
5322 switch (elf_mn10300_hash_entry (h)->tls_type)
5325 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5326 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset + 4);
5327 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPMOD);
5329 bfd_elf32_swap_reloca_out (output_bfd, & rel,
5330 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5331 + srel->reloc_count));
5332 ++ srel->reloc_count;
5333 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPOFF);
5339 /* We originally stored the addend in the GOT, but at this
5340 point, we want to move it to the reloc instead as that's
5341 where the dynamic linker wants it. */
5342 rel.r_addend = bfd_get_32 (output_bfd, sgot->contents + h->got.offset);
5343 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5344 if (h->dynindx == -1)
5345 rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
5347 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_TPOFF);
5351 /* If this is a -Bsymbolic link, and the symbol is defined
5352 locally, we just want to emit a RELATIVE reloc. Likewise if
5353 the symbol was forced to be local because of a version file.
5354 The entry in the global offset table will already have been
5355 initialized in the relocate_section function. */
5356 if (bfd_link_pic (info)
5357 && (info->symbolic || h->dynindx == -1)
5360 rel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
5361 rel.r_addend = (h->root.u.def.value
5362 + h->root.u.def.section->output_section->vma
5363 + h->root.u.def.section->output_offset);
5367 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5368 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_GLOB_DAT);
5373 if (ELF32_R_TYPE (rel.r_info) != R_MN10300_NONE)
5375 bfd_elf32_swap_reloca_out (output_bfd, &rel,
5376 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5377 + srel->reloc_count));
5378 ++ srel->reloc_count;
5385 Elf_Internal_Rela rel;
5387 /* This symbol needs a copy reloc. Set it up. */
5388 BFD_ASSERT (h->dynindx != -1
5389 && (h->root.type == bfd_link_hash_defined
5390 || h->root.type == bfd_link_hash_defweak));
5392 s = bfd_get_linker_section (dynobj, ".rela.bss");
5393 BFD_ASSERT (s != NULL);
5395 rel.r_offset = (h->root.u.def.value
5396 + h->root.u.def.section->output_section->vma
5397 + h->root.u.def.section->output_offset);
5398 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_COPY);
5400 bfd_elf32_swap_reloca_out (output_bfd, & rel,
5401 (bfd_byte *) ((Elf32_External_Rela *) s->contents
5406 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
5407 if (h == elf_hash_table (info)->hdynamic
5408 || h == elf_hash_table (info)->hgot)
5409 sym->st_shndx = SHN_ABS;
5414 /* Finish up the dynamic sections. */
5417 _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
5418 struct bfd_link_info * info)
5423 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5425 dynobj = htab->root.dynobj;
5426 sgot = htab->root.sgotplt;
5427 BFD_ASSERT (sgot != NULL);
5428 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
5430 if (elf_hash_table (info)->dynamic_sections_created)
5433 Elf32_External_Dyn * dyncon;
5434 Elf32_External_Dyn * dynconend;
5436 BFD_ASSERT (sdyn != NULL);
5438 dyncon = (Elf32_External_Dyn *) sdyn->contents;
5439 dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
5441 for (; dyncon < dynconend; dyncon++)
5443 Elf_Internal_Dyn dyn;
5447 bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
5461 s = bfd_get_linker_section (dynobj, name);
5462 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
5463 bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5467 s = bfd_get_linker_section (dynobj, ".rela.plt");
5468 dyn.d_un.d_val = s->size;
5469 bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5473 /* My reading of the SVR4 ABI indicates that the
5474 procedure linkage table relocs (DT_JMPREL) should be
5475 included in the overall relocs (DT_RELA). This is
5476 what Solaris does. However, UnixWare can not handle
5477 that case. Therefore, we override the DT_RELASZ entry
5478 here to make it not include the JMPREL relocs. Since
5479 the linker script arranges for .rela.plt to follow all
5480 other relocation sections, we don't have to worry
5481 about changing the DT_RELA entry. */
5482 s = bfd_get_linker_section (dynobj, ".rela.plt");
5484 dyn.d_un.d_val -= s->size;
5485 bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5490 /* Fill in the first entry in the procedure linkage table. */
5491 splt = htab->root.splt;
5492 if (splt && splt->size > 0)
5494 if (bfd_link_pic (info))
5496 memcpy (splt->contents, elf_mn10300_pic_plt_entry,
5497 elf_mn10300_sizeof_plt (info));
5501 memcpy (splt->contents, elf_mn10300_plt0_entry, PLT0_ENTRY_SIZE);
5502 bfd_put_32 (output_bfd,
5503 sgot->output_section->vma + sgot->output_offset + 4,
5504 splt->contents + elf_mn10300_plt0_gotid_offset (info));
5505 bfd_put_32 (output_bfd,
5506 sgot->output_section->vma + sgot->output_offset + 8,
5507 splt->contents + elf_mn10300_plt0_linker_offset (info));
5510 /* UnixWare sets the entsize of .plt to 4, although that doesn't
5511 really seem like the right value. */
5512 elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
5514 /* UnixWare sets the entsize of .plt to 4, but this is incorrect
5515 as it means that the size of the PLT0 section (15 bytes) is not
5516 a multiple of the sh_entsize. Some ELF tools flag this as an
5517 error. We could pad PLT0 to 16 bytes, but that would introduce
5518 compatibilty issues with previous toolchains, so instead we
5519 just set the entry size to 1. */
5520 elf_section_data (splt->output_section)->this_hdr.sh_entsize = 1;
5524 /* Fill in the first three entries in the global offset table. */
5528 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
5530 bfd_put_32 (output_bfd,
5531 sdyn->output_section->vma + sdyn->output_offset,
5533 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
5534 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
5537 elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
5542 /* Classify relocation types, such that combreloc can sort them
5545 static enum elf_reloc_type_class
5546 _bfd_mn10300_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
5547 const asection *rel_sec ATTRIBUTE_UNUSED,
5548 const Elf_Internal_Rela *rela)
5550 switch ((int) ELF32_R_TYPE (rela->r_info))
5552 case R_MN10300_RELATIVE: return reloc_class_relative;
5553 case R_MN10300_JMP_SLOT: return reloc_class_plt;
5554 case R_MN10300_COPY: return reloc_class_copy;
5555 default: return reloc_class_normal;
5559 /* Allocate space for an MN10300 extension to the bfd elf data structure. */
5562 mn10300_elf_mkobject (bfd *abfd)
5564 return bfd_elf_allocate_object (abfd, sizeof (struct elf_mn10300_obj_tdata),
5568 #define bfd_elf32_mkobject mn10300_elf_mkobject
5571 #define TARGET_LITTLE_SYM mn10300_elf32_vec
5572 #define TARGET_LITTLE_NAME "elf32-mn10300"
5573 #define ELF_ARCH bfd_arch_mn10300
5574 #define ELF_TARGET_ID MN10300_ELF_DATA
5575 #define ELF_MACHINE_CODE EM_MN10300
5576 #define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300
5577 #define ELF_MAXPAGESIZE 0x1000
5580 #define elf_info_to_howto mn10300_info_to_howto
5581 #define elf_info_to_howto_rel 0
5582 #define elf_backend_can_gc_sections 1
5583 #define elf_backend_rela_normal 1
5584 #define elf_backend_check_relocs mn10300_elf_check_relocs
5585 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
5586 #define elf_backend_relocate_section mn10300_elf_relocate_section
5587 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
5588 #define bfd_elf32_bfd_get_relocated_section_contents \
5589 mn10300_elf_get_relocated_section_contents
5590 #define bfd_elf32_bfd_link_hash_table_create \
5591 elf32_mn10300_link_hash_table_create
5593 #ifndef elf_symbol_leading_char
5594 #define elf_symbol_leading_char '_'
5597 /* So we can set bits in e_flags. */
5598 #define elf_backend_final_write_processing \
5599 _bfd_mn10300_elf_final_write_processing
5600 #define elf_backend_object_p _bfd_mn10300_elf_object_p
5602 #define bfd_elf32_bfd_merge_private_bfd_data \
5603 _bfd_mn10300_elf_merge_private_bfd_data
5605 #define elf_backend_can_gc_sections 1
5606 #define elf_backend_create_dynamic_sections \
5607 _bfd_mn10300_elf_create_dynamic_sections
5608 #define elf_backend_adjust_dynamic_symbol \
5609 _bfd_mn10300_elf_adjust_dynamic_symbol
5610 #define elf_backend_size_dynamic_sections \
5611 _bfd_mn10300_elf_size_dynamic_sections
5612 #define elf_backend_omit_section_dynsym \
5613 ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
5614 #define elf_backend_finish_dynamic_symbol \
5615 _bfd_mn10300_elf_finish_dynamic_symbol
5616 #define elf_backend_finish_dynamic_sections \
5617 _bfd_mn10300_elf_finish_dynamic_sections
5618 #define elf_backend_copy_indirect_symbol \
5619 _bfd_mn10300_copy_indirect_symbol
5620 #define elf_backend_reloc_type_class \
5621 _bfd_mn10300_elf_reloc_type_class
5623 #define elf_backend_want_got_plt 1
5624 #define elf_backend_plt_readonly 1
5625 #define elf_backend_want_plt_sym 0
5626 #define elf_backend_got_header_size 12
5628 #include "elf32-target.h"