1 /* Matsushita 10300 specific support for 32-bit ELF
2 Copyright (C) 1996-2017 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 /* xgettext:c-format */
812 _bfd_error_handler (_("%B: unrecognised MN10300 reloc number: %d"),
814 bfd_set_error (bfd_error_bad_value);
815 r_type = R_MN10300_NONE;
817 cache_ptr->howto = elf_mn10300_howto_table + r_type;
821 elf_mn10300_tls_transition (struct bfd_link_info * info,
823 struct elf_link_hash_entry * h,
825 bfd_boolean counting)
827 bfd_boolean is_local;
829 if (r_type == R_MN10300_TLS_GD
831 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
832 return R_MN10300_TLS_GOTIE;
834 if (bfd_link_pic (info))
837 if (! (sec->flags & SEC_CODE))
840 if (! counting && h != NULL && ! elf_hash_table (info)->dynamic_sections_created)
843 is_local = SYMBOL_CALLS_LOCAL (info, h);
845 /* For the main program, these are the transitions we do. */
848 case R_MN10300_TLS_GD: return is_local ? R_MN10300_TLS_LE : R_MN10300_TLS_GOTIE;
849 case R_MN10300_TLS_LD: return R_MN10300_NONE;
850 case R_MN10300_TLS_LDO: return R_MN10300_TLS_LE;
851 case R_MN10300_TLS_IE:
852 case R_MN10300_TLS_GOTIE: return is_local ? R_MN10300_TLS_LE : r_type;
858 /* Return the relocation value for @tpoff relocation
859 if STT_TLS virtual address is ADDRESS. */
862 dtpoff (struct bfd_link_info * info, bfd_vma address)
864 struct elf_link_hash_table *htab = elf_hash_table (info);
866 /* If tls_sec is NULL, we should have signalled an error already. */
867 if (htab->tls_sec == NULL)
869 return address - htab->tls_sec->vma;
872 /* Return the relocation value for @tpoff relocation
873 if STT_TLS virtual address is ADDRESS. */
876 tpoff (struct bfd_link_info * info, bfd_vma address)
878 struct elf_link_hash_table *htab = elf_hash_table (info);
880 /* If tls_sec is NULL, we should have signalled an error already. */
881 if (htab->tls_sec == NULL)
883 return address - (htab->tls_size + htab->tls_sec->vma);
886 /* Returns nonzero if there's a R_MN10300_PLT32 reloc that we now need
887 to skip, after this one. The actual value is the offset between
888 this reloc and the PLT reloc. */
891 mn10300_do_tls_transition (bfd * input_bfd,
893 unsigned int tls_r_type,
897 bfd_byte *op = contents + offset;
900 #define TLS_PAIR(r1,r2) ((r1) * R_MN10300_MAX + (r2))
902 /* This is common to all GD/LD transitions, so break it out. */
903 if (r_type == R_MN10300_TLS_GD
904 || r_type == R_MN10300_TLS_LD)
908 BFD_ASSERT (bfd_get_8 (input_bfd, op) == 0xFC);
909 BFD_ASSERT (bfd_get_8 (input_bfd, op + 1) == 0xCC);
911 BFD_ASSERT (bfd_get_8 (input_bfd, op + 6) == 0xF1);
912 gotreg = (bfd_get_8 (input_bfd, op + 7) & 0x0c) >> 2;
914 BFD_ASSERT (bfd_get_8 (input_bfd, op + 8) == 0xDD);
917 switch (TLS_PAIR (r_type, tls_r_type))
919 case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_GOTIE):
921 /* Keep track of which register we put GOTptr in. */
922 /* mov (_x@indntpoff,a2),a0. */
923 memcpy (op, "\xFC\x20\x00\x00\x00\x00", 6);
926 memcpy (op+6, "\xF9\x78\x28", 3);
927 /* or 0x00000000, d0 - six byte nop. */
928 memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
932 case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_LE):
934 /* Register is *always* a0. */
935 /* mov _x@tpoff,a0. */
936 memcpy (op, "\xFC\xDC\x00\x00\x00\x00", 6);
938 memcpy (op+6, "\xF9\x78\x28", 3);
939 /* or 0x00000000, d0 - six byte nop. */
940 memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
943 case TLS_PAIR (R_MN10300_TLS_LD, R_MN10300_NONE):
945 /* Register is *always* a0. */
947 memcpy (op, "\xF5\x88", 2);
948 /* or 0x00000000, d0 - six byte nop. */
949 memcpy (op+2, "\xFC\xE4\x00\x00\x00\x00", 6);
950 /* or 0x00000000, e2 - seven byte nop. */
951 memcpy (op+8, "\xFE\x19\x22\x00\x00\x00\x00", 7);
955 case TLS_PAIR (R_MN10300_TLS_LDO, R_MN10300_TLS_LE):
956 /* No changes needed, just the reloc change. */
959 /* These are a little tricky, because we have to detect which
960 opcode is being used (they're different sizes, with the reloc
961 at different offsets within the opcode) and convert each
962 accordingly, copying the operands as needed. The conversions
963 we do are as follows (IE,GOTIE,LE):
965 1111 1100 1010 01Dn [-- abs32 --] MOV (x@indntpoff),Dn
966 1111 1100 0000 DnAm [-- abs32 --] MOV (x@gotntpoff,Am),Dn
967 1111 1100 1100 11Dn [-- abs32 --] MOV x@tpoff,Dn
969 1111 1100 1010 00An [-- abs32 --] MOV (x@indntpoff),An
970 1111 1100 0010 AnAm [-- abs32 --] MOV (x@gotntpoff,Am),An
971 1111 1100 1101 11An [-- abs32 --] MOV x@tpoff,An
973 1111 1110 0000 1110 Rnnn Xxxx [-- abs32 --] MOV (x@indntpoff),Rn
974 1111 1110 0000 1010 Rnnn Rmmm [-- abs32 --] MOV (x@indntpoff,Rm),Rn
975 1111 1110 0000 1000 Rnnn Xxxx [-- abs32 --] MOV x@tpoff,Rn
977 Since the GOT pointer is always $a2, we assume the last
978 normally won't happen, but let's be paranoid and plan for the
979 day that GCC optimizes it somewhow. */
981 case TLS_PAIR (R_MN10300_TLS_IE, R_MN10300_TLS_LE):
985 if ((op[1] & 0xFC) == 0xA4) /* Dn */
987 op[1] &= 0x03; /* Leaves Dn. */
992 op[1] &= 0x03; /* Leaves An. */
996 else if (op[-3] == 0xFE)
1002 case TLS_PAIR (R_MN10300_TLS_GOTIE, R_MN10300_TLS_LE):
1006 if ((op[1] & 0xF0) == 0x00) /* Dn */
1008 op[1] &= 0x0C; /* Leaves Dn. */
1014 op[1] &= 0x0C; /* Leaves An. */
1019 else if (op[-3] == 0xFE)
1027 /* xgettext:c-format */
1028 (_("%B: Unsupported transition from %s to %s"),
1030 elf_mn10300_howto_table[r_type].name,
1031 elf_mn10300_howto_table[tls_r_type].name);
1038 /* Look through the relocs for a section during the first phase.
1039 Since we don't do .gots or .plts, we just need to consider the
1040 virtual table relocs for gc. */
1043 mn10300_elf_check_relocs (bfd *abfd,
1044 struct bfd_link_info *info,
1046 const Elf_Internal_Rela *relocs)
1048 struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
1049 bfd_boolean sym_diff_reloc_seen;
1050 Elf_Internal_Shdr *symtab_hdr;
1051 Elf_Internal_Sym * isymbuf = NULL;
1052 struct elf_link_hash_entry **sym_hashes;
1053 const Elf_Internal_Rela *rel;
1054 const Elf_Internal_Rela *rel_end;
1056 bfd_vma * local_got_offsets;
1060 bfd_boolean result = FALSE;
1066 if (bfd_link_relocatable (info))
1069 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1070 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
1071 sym_hashes = elf_sym_hashes (abfd);
1073 dynobj = elf_hash_table (info)->dynobj;
1074 local_got_offsets = elf_local_got_offsets (abfd);
1075 rel_end = relocs + sec->reloc_count;
1076 sym_diff_reloc_seen = FALSE;
1078 for (rel = relocs; rel < rel_end; rel++)
1080 struct elf_link_hash_entry *h;
1081 unsigned long r_symndx;
1082 unsigned int r_type;
1083 int tls_type = GOT_NORMAL;
1085 r_symndx = ELF32_R_SYM (rel->r_info);
1086 if (r_symndx < symtab_hdr->sh_info)
1090 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
1091 while (h->root.type == bfd_link_hash_indirect
1092 || h->root.type == bfd_link_hash_warning)
1093 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1095 /* PR15323, ref flags aren't set for references in the same
1097 h->root.non_ir_ref_regular = 1;
1100 r_type = ELF32_R_TYPE (rel->r_info);
1101 r_type = elf_mn10300_tls_transition (info, r_type, h, sec, TRUE);
1103 /* Some relocs require a global offset table. */
1108 case R_MN10300_GOT32:
1109 case R_MN10300_GOT24:
1110 case R_MN10300_GOT16:
1111 case R_MN10300_GOTOFF32:
1112 case R_MN10300_GOTOFF24:
1113 case R_MN10300_GOTOFF16:
1114 case R_MN10300_GOTPC32:
1115 case R_MN10300_GOTPC16:
1116 case R_MN10300_TLS_GD:
1117 case R_MN10300_TLS_LD:
1118 case R_MN10300_TLS_GOTIE:
1119 case R_MN10300_TLS_IE:
1120 elf_hash_table (info)->dynobj = dynobj = abfd;
1121 if (! _bfd_mn10300_elf_create_got_section (dynobj, info))
1132 /* This relocation describes the C++ object vtable hierarchy.
1133 Reconstruct it for later use during GC. */
1134 case R_MN10300_GNU_VTINHERIT:
1135 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
1139 /* This relocation describes which C++ vtable entries are actually
1140 used. Record for later use during GC. */
1141 case R_MN10300_GNU_VTENTRY:
1142 BFD_ASSERT (h != NULL);
1144 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
1148 case R_MN10300_TLS_LD:
1149 htab->tls_ldm_got.refcount ++;
1150 tls_type = GOT_TLS_LD;
1152 if (htab->tls_ldm_got.got_allocated)
1156 case R_MN10300_TLS_IE:
1157 case R_MN10300_TLS_GOTIE:
1158 if (bfd_link_pic (info))
1159 info->flags |= DF_STATIC_TLS;
1162 case R_MN10300_TLS_GD:
1163 case R_MN10300_GOT32:
1164 case R_MN10300_GOT24:
1165 case R_MN10300_GOT16:
1167 /* This symbol requires a global offset table entry. */
1171 case R_MN10300_TLS_IE:
1172 case R_MN10300_TLS_GOTIE: tls_type = GOT_TLS_IE; break;
1173 case R_MN10300_TLS_GD: tls_type = GOT_TLS_GD; break;
1174 default: tls_type = GOT_NORMAL; break;
1177 sgot = htab->root.sgot;
1178 srelgot = htab->root.srelgot;
1179 BFD_ASSERT (sgot != NULL && srelgot != NULL);
1181 if (r_type == R_MN10300_TLS_LD)
1183 htab->tls_ldm_got.offset = sgot->size;
1184 htab->tls_ldm_got.got_allocated ++;
1188 if (elf_mn10300_hash_entry (h)->tls_type != tls_type
1189 && elf_mn10300_hash_entry (h)->tls_type != GOT_UNKNOWN)
1191 if (tls_type == GOT_TLS_IE
1192 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_GD)
1193 /* No change - this is ok. */;
1194 else if (tls_type == GOT_TLS_GD
1195 && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
1196 /* Transition GD->IE. */
1197 tls_type = GOT_TLS_IE;
1200 /* xgettext:c-format */
1201 (_("%B: %s' accessed both as normal and thread local symbol"),
1202 abfd, h ? h->root.root.string : "<local>");
1205 elf_mn10300_hash_entry (h)->tls_type = tls_type;
1207 if (h->got.offset != (bfd_vma) -1)
1208 /* We have already allocated space in the .got. */
1211 h->got.offset = sgot->size;
1213 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1214 /* Make sure this symbol is output as a dynamic symbol. */
1215 && h->dynindx == -1)
1217 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1221 srelgot->size += sizeof (Elf32_External_Rela);
1222 if (r_type == R_MN10300_TLS_GD)
1223 srelgot->size += sizeof (Elf32_External_Rela);
1227 /* This is a global offset table entry for a local
1229 if (local_got_offsets == NULL)
1234 size = symtab_hdr->sh_info * (sizeof (bfd_vma) + sizeof (char));
1235 local_got_offsets = bfd_alloc (abfd, size);
1237 if (local_got_offsets == NULL)
1240 elf_local_got_offsets (abfd) = local_got_offsets;
1241 elf_mn10300_local_got_tls_type (abfd)
1242 = (char *) (local_got_offsets + symtab_hdr->sh_info);
1244 for (i = 0; i < symtab_hdr->sh_info; i++)
1245 local_got_offsets[i] = (bfd_vma) -1;
1248 if (local_got_offsets[r_symndx] != (bfd_vma) -1)
1249 /* We have already allocated space in the .got. */
1252 local_got_offsets[r_symndx] = sgot->size;
1254 if (bfd_link_pic (info))
1256 /* If we are generating a shared object, we need to
1257 output a R_MN10300_RELATIVE reloc so that the dynamic
1258 linker can adjust this GOT entry. */
1259 srelgot->size += sizeof (Elf32_External_Rela);
1261 if (r_type == R_MN10300_TLS_GD)
1262 /* And a R_MN10300_TLS_DTPOFF reloc as well. */
1263 srelgot->size += sizeof (Elf32_External_Rela);
1266 elf_mn10300_local_got_tls_type (abfd) [r_symndx] = tls_type;
1270 if (r_type == R_MN10300_TLS_GD
1271 || r_type == R_MN10300_TLS_LD)
1274 goto need_shared_relocs;
1276 case R_MN10300_PLT32:
1277 case R_MN10300_PLT16:
1278 /* This symbol requires a procedure linkage table entry. We
1279 actually build the entry in adjust_dynamic_symbol,
1280 because this might be a case of linking PIC code which is
1281 never referenced by a dynamic object, in which case we
1282 don't need to generate a procedure linkage table entry
1285 /* If this is a local symbol, we resolve it directly without
1286 creating a procedure linkage table entry. */
1290 if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
1291 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
1300 case R_MN10300_PCREL32:
1301 case R_MN10300_PCREL16:
1302 case R_MN10300_PCREL8:
1307 case R_MN10300_SYM_DIFF:
1308 sym_diff_reloc_seen = TRUE;
1316 /* If we are creating a shared library, then we
1317 need to copy the reloc into the shared library. */
1318 if (bfd_link_pic (info)
1319 && (sec->flags & SEC_ALLOC) != 0
1320 /* Do not generate a dynamic reloc for a
1321 reloc associated with a SYM_DIFF operation. */
1322 && ! sym_diff_reloc_seen)
1324 asection * sym_section = NULL;
1326 /* Find the section containing the
1327 symbol involved in the relocation. */
1330 Elf_Internal_Sym * isym;
1332 if (isymbuf == NULL)
1333 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
1334 symtab_hdr->sh_info, 0,
1338 isym = isymbuf + r_symndx;
1339 /* All we care about is whether this local symbol is absolute. */
1340 if (isym->st_shndx == SHN_ABS)
1341 sym_section = bfd_abs_section_ptr;
1346 if (h->root.type == bfd_link_hash_defined
1347 || h->root.type == bfd_link_hash_defweak)
1348 sym_section = h->root.u.def.section;
1351 /* If the symbol is absolute then the relocation can
1352 be resolved during linking and there is no need for
1354 if (sym_section != bfd_abs_section_ptr)
1356 /* When creating a shared object, we must copy these
1357 reloc types into the output file. We create a reloc
1358 section in dynobj and make room for this reloc. */
1361 sreloc = _bfd_elf_make_dynamic_reloc_section
1362 (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
1367 sreloc->size += sizeof (Elf32_External_Rela);
1374 if (ELF32_R_TYPE (rel->r_info) != R_MN10300_SYM_DIFF)
1375 sym_diff_reloc_seen = FALSE;
1380 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
1386 /* Return the section that should be marked against GC for a given
1390 mn10300_elf_gc_mark_hook (asection *sec,
1391 struct bfd_link_info *info,
1392 Elf_Internal_Rela *rel,
1393 struct elf_link_hash_entry *h,
1394 Elf_Internal_Sym *sym)
1397 switch (ELF32_R_TYPE (rel->r_info))
1399 case R_MN10300_GNU_VTINHERIT:
1400 case R_MN10300_GNU_VTENTRY:
1404 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
1407 /* Perform a relocation as part of a final link. */
1409 static bfd_reloc_status_type
1410 mn10300_elf_final_link_relocate (reloc_howto_type *howto,
1412 bfd *output_bfd ATTRIBUTE_UNUSED,
1413 asection *input_section,
1418 struct elf_link_hash_entry * h,
1419 unsigned long symndx,
1420 struct bfd_link_info *info,
1421 asection *sym_sec ATTRIBUTE_UNUSED,
1422 int is_local ATTRIBUTE_UNUSED)
1424 struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
1425 static asection * sym_diff_section;
1426 static bfd_vma sym_diff_value;
1427 bfd_boolean is_sym_diff_reloc;
1428 unsigned long r_type = howto->type;
1429 bfd_byte * hit_data = contents + offset;
1435 dynobj = elf_hash_table (info)->dynobj;
1445 case R_MN10300_PCREL8:
1446 case R_MN10300_PCREL16:
1447 case R_MN10300_PCREL32:
1448 case R_MN10300_GOTOFF32:
1449 case R_MN10300_GOTOFF24:
1450 case R_MN10300_GOTOFF16:
1451 if (bfd_link_pic (info)
1452 && (input_section->flags & SEC_ALLOC) != 0
1454 && ! SYMBOL_REFERENCES_LOCAL (info, h))
1455 return bfd_reloc_dangerous;
1457 case R_MN10300_GOT32:
1459 Taking the address of a protected function in a shared library
1460 is illegal. Issue an error message here. */
1461 if (bfd_link_pic (info)
1462 && (input_section->flags & SEC_ALLOC) != 0
1464 && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
1465 && (h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
1466 && ! SYMBOL_REFERENCES_LOCAL (info, h))
1467 return bfd_reloc_dangerous;
1470 is_sym_diff_reloc = FALSE;
1471 if (sym_diff_section != NULL)
1473 BFD_ASSERT (sym_diff_section == input_section);
1481 value -= sym_diff_value;
1482 /* If we are computing a 32-bit value for the location lists
1483 and the result is 0 then we add one to the value. A zero
1484 value can result because of linker relaxation deleteing
1485 prologue instructions and using a value of 1 (for the begin
1486 and end offsets in the location list entry) results in a
1487 nul entry which does not prevent the following entries from
1489 if (r_type == R_MN10300_32
1491 && strcmp (input_section->name, ".debug_loc") == 0)
1493 sym_diff_section = NULL;
1494 is_sym_diff_reloc = TRUE;
1498 sym_diff_section = NULL;
1505 case R_MN10300_SYM_DIFF:
1506 BFD_ASSERT (addend == 0);
1507 /* Cache the input section and value.
1508 The offset is unreliable, since relaxation may
1509 have reduced the following reloc's offset. */
1510 sym_diff_section = input_section;
1511 sym_diff_value = value;
1512 return bfd_reloc_ok;
1514 case R_MN10300_ALIGN:
1515 case R_MN10300_NONE:
1516 return bfd_reloc_ok;
1519 if (bfd_link_pic (info)
1520 /* Do not generate relocs when an R_MN10300_32 has been used
1521 with an R_MN10300_SYM_DIFF to compute a difference of two
1523 && !is_sym_diff_reloc
1524 /* Also, do not generate a reloc when the symbol associated
1525 with the R_MN10300_32 reloc is absolute - there is no
1526 need for a run time computation in this case. */
1527 && sym_sec != bfd_abs_section_ptr
1528 /* If the section is not going to be allocated at load time
1529 then there is no need to generate relocs for it. */
1530 && (input_section->flags & SEC_ALLOC) != 0)
1532 Elf_Internal_Rela outrel;
1533 bfd_boolean skip, relocate;
1535 /* When generating a shared object, these relocations are
1536 copied into the output file to be resolved at run
1540 sreloc = _bfd_elf_get_dynamic_reloc_section
1541 (input_bfd, input_section, /*rela?*/ TRUE);
1548 outrel.r_offset = _bfd_elf_section_offset (input_bfd, info,
1549 input_section, offset);
1550 if (outrel.r_offset == (bfd_vma) -1)
1553 outrel.r_offset += (input_section->output_section->vma
1554 + input_section->output_offset);
1558 memset (&outrel, 0, sizeof outrel);
1563 /* h->dynindx may be -1 if this symbol was marked to
1566 || SYMBOL_REFERENCES_LOCAL (info, h))
1569 outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
1570 outrel.r_addend = value + addend;
1574 BFD_ASSERT (h->dynindx != -1);
1576 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_32);
1577 outrel.r_addend = value + addend;
1581 bfd_elf32_swap_reloca_out (output_bfd, &outrel,
1582 (bfd_byte *) (((Elf32_External_Rela *) sreloc->contents)
1583 + sreloc->reloc_count));
1584 ++sreloc->reloc_count;
1586 /* If this reloc is against an external symbol, we do
1587 not want to fiddle with the addend. Otherwise, we
1588 need to include the symbol value so that it becomes
1589 an addend for the dynamic reloc. */
1591 return bfd_reloc_ok;
1594 bfd_put_32 (input_bfd, value, hit_data);
1595 return bfd_reloc_ok;
1600 if ((long) value > 0x7fffff || (long) value < -0x800000)
1601 return bfd_reloc_overflow;
1603 bfd_put_8 (input_bfd, value & 0xff, hit_data);
1604 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1605 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1606 return bfd_reloc_ok;
1611 if ((long) value > 0x7fff || (long) value < -0x8000)
1612 return bfd_reloc_overflow;
1614 bfd_put_16 (input_bfd, value, hit_data);
1615 return bfd_reloc_ok;
1620 if ((long) value > 0x7f || (long) value < -0x80)
1621 return bfd_reloc_overflow;
1623 bfd_put_8 (input_bfd, value, hit_data);
1624 return bfd_reloc_ok;
1626 case R_MN10300_PCREL8:
1627 value -= (input_section->output_section->vma
1628 + input_section->output_offset);
1632 if ((long) value > 0x7f || (long) value < -0x80)
1633 return bfd_reloc_overflow;
1635 bfd_put_8 (input_bfd, value, hit_data);
1636 return bfd_reloc_ok;
1638 case R_MN10300_PCREL16:
1639 value -= (input_section->output_section->vma
1640 + input_section->output_offset);
1644 if ((long) value > 0x7fff || (long) value < -0x8000)
1645 return bfd_reloc_overflow;
1647 bfd_put_16 (input_bfd, value, hit_data);
1648 return bfd_reloc_ok;
1650 case R_MN10300_PCREL32:
1651 value -= (input_section->output_section->vma
1652 + input_section->output_offset);
1656 bfd_put_32 (input_bfd, value, hit_data);
1657 return bfd_reloc_ok;
1659 case R_MN10300_GNU_VTINHERIT:
1660 case R_MN10300_GNU_VTENTRY:
1661 return bfd_reloc_ok;
1663 case R_MN10300_GOTPC32:
1665 return bfd_reloc_dangerous;
1667 /* Use global offset table as symbol value. */
1668 value = htab->root.sgot->output_section->vma;
1669 value -= (input_section->output_section->vma
1670 + input_section->output_offset);
1674 bfd_put_32 (input_bfd, value, hit_data);
1675 return bfd_reloc_ok;
1677 case R_MN10300_GOTPC16:
1679 return bfd_reloc_dangerous;
1681 /* Use global offset table as symbol value. */
1682 value = htab->root.sgot->output_section->vma;
1683 value -= (input_section->output_section->vma
1684 + input_section->output_offset);
1688 if ((long) value > 0x7fff || (long) value < -0x8000)
1689 return bfd_reloc_overflow;
1691 bfd_put_16 (input_bfd, value, hit_data);
1692 return bfd_reloc_ok;
1694 case R_MN10300_GOTOFF32:
1696 return bfd_reloc_dangerous;
1698 value -= htab->root.sgot->output_section->vma;
1701 bfd_put_32 (input_bfd, value, hit_data);
1702 return bfd_reloc_ok;
1704 case R_MN10300_GOTOFF24:
1706 return bfd_reloc_dangerous;
1708 value -= htab->root.sgot->output_section->vma;
1711 if ((long) value > 0x7fffff || (long) value < -0x800000)
1712 return bfd_reloc_overflow;
1714 bfd_put_8 (input_bfd, value, hit_data);
1715 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1716 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1717 return bfd_reloc_ok;
1719 case R_MN10300_GOTOFF16:
1721 return bfd_reloc_dangerous;
1723 value -= htab->root.sgot->output_section->vma;
1726 if ((long) value > 0x7fff || (long) value < -0x8000)
1727 return bfd_reloc_overflow;
1729 bfd_put_16 (input_bfd, value, hit_data);
1730 return bfd_reloc_ok;
1732 case R_MN10300_PLT32:
1734 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1735 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
1736 && h->plt.offset != (bfd_vma) -1)
1739 return bfd_reloc_dangerous;
1741 splt = htab->root.splt;
1742 value = (splt->output_section->vma
1743 + splt->output_offset
1744 + h->plt.offset) - value;
1747 value -= (input_section->output_section->vma
1748 + input_section->output_offset);
1752 bfd_put_32 (input_bfd, value, hit_data);
1753 return bfd_reloc_ok;
1755 case R_MN10300_PLT16:
1757 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
1758 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
1759 && h->plt.offset != (bfd_vma) -1)
1762 return bfd_reloc_dangerous;
1764 splt = htab->root.splt;
1765 value = (splt->output_section->vma
1766 + splt->output_offset
1767 + h->plt.offset) - value;
1770 value -= (input_section->output_section->vma
1771 + input_section->output_offset);
1775 if ((long) value > 0x7fff || (long) value < -0x8000)
1776 return bfd_reloc_overflow;
1778 bfd_put_16 (input_bfd, value, hit_data);
1779 return bfd_reloc_ok;
1781 case R_MN10300_TLS_LDO:
1782 value = dtpoff (info, value);
1783 bfd_put_32 (input_bfd, value + addend, hit_data);
1784 return bfd_reloc_ok;
1786 case R_MN10300_TLS_LE:
1787 value = tpoff (info, value);
1788 bfd_put_32 (input_bfd, value + addend, hit_data);
1789 return bfd_reloc_ok;
1791 case R_MN10300_TLS_LD:
1793 return bfd_reloc_dangerous;
1795 sgot = htab->root.sgot;
1796 BFD_ASSERT (sgot != NULL);
1797 value = htab->tls_ldm_got.offset + sgot->output_offset;
1798 bfd_put_32 (input_bfd, value, hit_data);
1800 if (!htab->tls_ldm_got.rel_emitted)
1802 asection *srelgot = htab->root.srelgot;
1803 Elf_Internal_Rela rel;
1805 BFD_ASSERT (srelgot != NULL);
1806 htab->tls_ldm_got.rel_emitted ++;
1807 rel.r_offset = (sgot->output_section->vma
1808 + sgot->output_offset
1809 + htab->tls_ldm_got.offset);
1810 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset);
1811 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset+4);
1812 rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
1814 bfd_elf32_swap_reloca_out (output_bfd, & rel,
1815 (bfd_byte *) ((Elf32_External_Rela *) srelgot->contents
1816 + srelgot->reloc_count));
1817 ++ srelgot->reloc_count;
1820 return bfd_reloc_ok;
1822 case R_MN10300_TLS_GOTIE:
1823 value = tpoff (info, value);
1826 case R_MN10300_TLS_GD:
1827 case R_MN10300_TLS_IE:
1828 case R_MN10300_GOT32:
1829 case R_MN10300_GOT24:
1830 case R_MN10300_GOT16:
1832 return bfd_reloc_dangerous;
1834 sgot = htab->root.sgot;
1835 if (r_type == R_MN10300_TLS_GD)
1836 value = dtpoff (info, value);
1842 off = h->got.offset;
1843 /* Offsets in the GOT are allocated in check_relocs
1844 which is not called for shared libraries... */
1845 if (off == (bfd_vma) -1)
1848 if (sgot->contents != NULL
1849 && (! elf_hash_table (info)->dynamic_sections_created
1850 || SYMBOL_REFERENCES_LOCAL (info, h)))
1851 /* This is actually a static link, or it is a
1852 -Bsymbolic link and the symbol is defined
1853 locally, or the symbol was forced to be local
1854 because of a version file. We must initialize
1855 this entry in the global offset table.
1857 When doing a dynamic link, we create a .rela.got
1858 relocation entry to initialize the value. This
1859 is done in the finish_dynamic_symbol routine. */
1860 bfd_put_32 (output_bfd, value,
1861 sgot->contents + off);
1863 value = sgot->output_offset + off;
1869 off = elf_local_got_offsets (input_bfd)[symndx];
1872 bfd_put_32 (output_bfd, value, sgot->contents + (off & ~ 1));
1875 bfd_put_32 (output_bfd, value, sgot->contents + off);
1877 if (bfd_link_pic (info))
1879 asection *srelgot = htab->root.srelgot;;
1880 Elf_Internal_Rela outrel;
1882 BFD_ASSERT (srelgot != NULL);
1884 outrel.r_offset = (sgot->output_section->vma
1885 + sgot->output_offset
1889 case R_MN10300_TLS_GD:
1890 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPOFF);
1891 outrel.r_offset = (sgot->output_section->vma
1892 + sgot->output_offset
1894 bfd_elf32_swap_reloca_out (output_bfd, & outrel,
1895 (bfd_byte *) (((Elf32_External_Rela *)
1897 + srelgot->reloc_count));
1898 ++ srelgot->reloc_count;
1899 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
1901 case R_MN10300_TLS_GOTIE:
1902 case R_MN10300_TLS_IE:
1903 outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
1906 outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
1910 outrel.r_addend = value;
1911 bfd_elf32_swap_reloca_out (output_bfd, &outrel,
1912 (bfd_byte *) (((Elf32_External_Rela *)
1914 + srelgot->reloc_count));
1915 ++ srelgot->reloc_count;
1916 elf_local_got_offsets (input_bfd)[symndx] |= 1;
1919 value = sgot->output_offset + (off & ~(bfd_vma) 1);
1925 if (r_type == R_MN10300_TLS_IE)
1927 value += sgot->output_section->vma;
1928 bfd_put_32 (input_bfd, value, hit_data);
1929 return bfd_reloc_ok;
1931 else if (r_type == R_MN10300_TLS_GOTIE
1932 || r_type == R_MN10300_TLS_GD
1933 || r_type == R_MN10300_TLS_LD)
1935 bfd_put_32 (input_bfd, value, hit_data);
1936 return bfd_reloc_ok;
1938 else if (r_type == R_MN10300_GOT32)
1940 bfd_put_32 (input_bfd, value, hit_data);
1941 return bfd_reloc_ok;
1943 else if (r_type == R_MN10300_GOT24)
1945 if ((long) value > 0x7fffff || (long) value < -0x800000)
1946 return bfd_reloc_overflow;
1948 bfd_put_8 (input_bfd, value & 0xff, hit_data);
1949 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
1950 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
1951 return bfd_reloc_ok;
1953 else if (r_type == R_MN10300_GOT16)
1955 if ((long) value > 0x7fff || (long) value < -0x8000)
1956 return bfd_reloc_overflow;
1958 bfd_put_16 (input_bfd, value, hit_data);
1959 return bfd_reloc_ok;
1964 return bfd_reloc_notsupported;
1968 /* Relocate an MN10300 ELF section. */
1971 mn10300_elf_relocate_section (bfd *output_bfd,
1972 struct bfd_link_info *info,
1974 asection *input_section,
1976 Elf_Internal_Rela *relocs,
1977 Elf_Internal_Sym *local_syms,
1978 asection **local_sections)
1980 Elf_Internal_Shdr *symtab_hdr;
1981 struct elf_link_hash_entry **sym_hashes;
1982 Elf_Internal_Rela *rel, *relend;
1983 Elf_Internal_Rela * trel;
1985 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
1986 sym_hashes = elf_sym_hashes (input_bfd);
1989 relend = relocs + input_section->reloc_count;
1990 for (; rel < relend; rel++)
1993 reloc_howto_type *howto;
1994 unsigned long r_symndx;
1995 Elf_Internal_Sym *sym;
1997 struct elf32_mn10300_link_hash_entry *h;
1999 bfd_reloc_status_type r;
2001 bfd_boolean unresolved_reloc = FALSE;
2002 bfd_boolean warned, ignored;
2003 struct elf_link_hash_entry * hh;
2006 r_symndx = ELF32_R_SYM (rel->r_info);
2007 r_type = ELF32_R_TYPE (rel->r_info);
2008 howto = elf_mn10300_howto_table + r_type;
2010 /* Just skip the vtable gc relocs. */
2011 if (r_type == R_MN10300_GNU_VTINHERIT
2012 || r_type == R_MN10300_GNU_VTENTRY)
2018 if (r_symndx < symtab_hdr->sh_info)
2022 RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
2023 r_symndx, symtab_hdr, sym_hashes,
2024 hh, sec, relocation,
2025 unresolved_reloc, warned, ignored);
2027 h = elf_mn10300_hash_entry (hh);
2029 tls_r_type = elf_mn10300_tls_transition (info, r_type, hh, input_section, 0);
2030 if (tls_r_type != r_type)
2032 bfd_boolean had_plt;
2034 had_plt = mn10300_do_tls_transition (input_bfd, r_type, tls_r_type,
2035 contents, rel->r_offset);
2036 r_type = tls_r_type;
2037 howto = elf_mn10300_howto_table + r_type;
2040 for (trel = rel+1; trel < relend; trel++)
2041 if ((ELF32_R_TYPE (trel->r_info) == R_MN10300_PLT32
2042 || ELF32_R_TYPE (trel->r_info) == R_MN10300_PCREL32)
2043 && rel->r_offset + had_plt == trel->r_offset)
2044 trel->r_info = ELF32_R_INFO (0, R_MN10300_NONE);
2047 if (r_symndx < symtab_hdr->sh_info)
2049 sym = local_syms + r_symndx;
2050 sec = local_sections[r_symndx];
2051 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
2055 if ((h->root.root.type == bfd_link_hash_defined
2056 || h->root.root.type == bfd_link_hash_defweak)
2057 && ( r_type == R_MN10300_GOTPC32
2058 || r_type == R_MN10300_GOTPC16
2059 || (( r_type == R_MN10300_PLT32
2060 || r_type == R_MN10300_PLT16)
2061 && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
2062 && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
2063 && h->root.plt.offset != (bfd_vma) -1)
2064 || (( r_type == R_MN10300_GOT32
2065 || r_type == R_MN10300_GOT24
2066 || r_type == R_MN10300_TLS_GD
2067 || r_type == R_MN10300_TLS_LD
2068 || r_type == R_MN10300_TLS_GOTIE
2069 || r_type == R_MN10300_TLS_IE
2070 || r_type == R_MN10300_GOT16)
2071 && elf_hash_table (info)->dynamic_sections_created
2072 && !SYMBOL_REFERENCES_LOCAL (info, hh))
2073 || (r_type == R_MN10300_32
2074 /* _32 relocs in executables force _COPY relocs,
2075 such that the address of the symbol ends up
2077 && !bfd_link_executable (info)
2078 && !SYMBOL_REFERENCES_LOCAL (info, hh)
2079 && ((input_section->flags & SEC_ALLOC) != 0
2080 /* DWARF will emit R_MN10300_32 relocations
2081 in its sections against symbols defined
2082 externally in shared libraries. We can't
2083 do anything with them here. */
2084 || ((input_section->flags & SEC_DEBUGGING) != 0
2085 && h->root.def_dynamic)))))
2086 /* In these cases, we don't need the relocation
2087 value. We check specially because in some
2088 obscure cases sec->output_section will be NULL. */
2091 else if (!bfd_link_relocatable (info) && unresolved_reloc
2092 && _bfd_elf_section_offset (output_bfd, info, input_section,
2093 rel->r_offset) != (bfd_vma) -1)
2096 /* xgettext:c-format */
2097 (_("%B(%A+%#Lx): unresolvable %s relocation against symbol `%s'"),
2102 h->root.root.root.string);
2105 if (sec != NULL && discarded_section (sec))
2106 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
2107 rel, 1, relend, howto, 0, contents);
2109 if (bfd_link_relocatable (info))
2112 r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
2114 contents, rel->r_offset,
2115 relocation, rel->r_addend,
2116 (struct elf_link_hash_entry *) h,
2118 info, sec, h == NULL);
2120 if (r != bfd_reloc_ok)
2123 const char *msg = NULL;
2126 name = h->root.root.root.string;
2129 name = (bfd_elf_string_from_elf_section
2130 (input_bfd, symtab_hdr->sh_link, sym->st_name));
2131 if (name == NULL || *name == '\0')
2132 name = bfd_section_name (input_bfd, sec);
2137 case bfd_reloc_overflow:
2138 (*info->callbacks->reloc_overflow)
2139 (info, (h ? &h->root.root : NULL), name, howto->name,
2140 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
2143 case bfd_reloc_undefined:
2144 (*info->callbacks->undefined_symbol)
2145 (info, name, input_bfd, input_section, rel->r_offset, TRUE);
2148 case bfd_reloc_outofrange:
2149 msg = _("internal error: out of range error");
2152 case bfd_reloc_notsupported:
2153 msg = _("internal error: unsupported relocation error");
2156 case bfd_reloc_dangerous:
2157 if (r_type == R_MN10300_PCREL32)
2158 msg = _("error: inappropriate relocation type for shared"
2159 " library (did you forget -fpic?)");
2160 else if (r_type == R_MN10300_GOT32)
2161 /* xgettext:c-format */
2162 msg = _("%B: taking the address of protected function"
2163 " '%s' cannot be done when making a shared library");
2165 msg = _("internal error: suspicious relocation type used"
2166 " in shared library");
2170 msg = _("internal error: unknown error");
2174 _bfd_error_handler (msg, input_bfd, name);
2175 bfd_set_error (bfd_error_bad_value);
2184 /* Finish initializing one hash table entry. */
2187 elf32_mn10300_finish_hash_table_entry (struct bfd_hash_entry *gen_entry,
2190 struct elf32_mn10300_link_hash_entry *entry;
2191 struct bfd_link_info *link_info = (struct bfd_link_info *) in_args;
2192 unsigned int byte_count = 0;
2194 entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
2196 /* If we already know we want to convert "call" to "calls" for calls
2197 to this symbol, then return now. */
2198 if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
2201 /* If there are no named calls to this symbol, or there's nothing we
2202 can move from the function itself into the "call" instruction,
2203 then note that all "call" instructions should be converted into
2204 "calls" instructions and return. If a symbol is available for
2205 dynamic symbol resolution (overridable or overriding), avoid
2206 custom calling conventions. */
2207 if (entry->direct_calls == 0
2208 || (entry->stack_size == 0 && entry->movm_args == 0)
2209 || (elf_hash_table (link_info)->dynamic_sections_created
2210 && ELF_ST_VISIBILITY (entry->root.other) != STV_INTERNAL
2211 && ELF_ST_VISIBILITY (entry->root.other) != STV_HIDDEN))
2213 /* Make a note that we should convert "call" instructions to "calls"
2214 instructions for calls to this symbol. */
2215 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2219 /* We may be able to move some instructions from the function itself into
2220 the "call" instruction. Count how many bytes we might be able to
2221 eliminate in the function itself. */
2223 /* A movm instruction is two bytes. */
2224 if (entry->movm_args)
2227 /* Count the insn to allocate stack space too. */
2228 if (entry->stack_size > 0)
2230 if (entry->stack_size <= 128)
2236 /* If using "call" will result in larger code, then turn all
2237 the associated "call" instructions into "calls" instructions. */
2238 if (byte_count < entry->direct_calls)
2239 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2241 /* This routine never fails. */
2245 /* Used to count hash table entries. */
2248 elf32_mn10300_count_hash_table_entries (struct bfd_hash_entry *gen_entry ATTRIBUTE_UNUSED,
2251 int *count = (int *) in_args;
2257 /* Used to enumerate hash table entries into a linear array. */
2260 elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry,
2263 struct bfd_hash_entry ***ptr = (struct bfd_hash_entry ***) in_args;
2270 /* Used to sort the array created by the above. */
2273 sort_by_value (const void *va, const void *vb)
2275 struct elf32_mn10300_link_hash_entry *a
2276 = *(struct elf32_mn10300_link_hash_entry **) va;
2277 struct elf32_mn10300_link_hash_entry *b
2278 = *(struct elf32_mn10300_link_hash_entry **) vb;
2280 return a->value - b->value;
2283 /* Compute the stack size and movm arguments for the function
2284 referred to by HASH at address ADDR in section with
2285 contents CONTENTS, store the information in the hash table. */
2288 compute_function_info (bfd *abfd,
2289 struct elf32_mn10300_link_hash_entry *hash,
2291 unsigned char *contents)
2293 unsigned char byte1, byte2;
2294 /* We only care about a very small subset of the possible prologue
2295 sequences here. Basically we look for:
2297 movm [d2,d3,a2,a3],sp (optional)
2298 add <size>,sp (optional, and only for sizes which fit in an unsigned
2301 If we find anything else, we quit. */
2303 /* Look for movm [regs],sp. */
2304 byte1 = bfd_get_8 (abfd, contents + addr);
2305 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2309 hash->movm_args = byte2;
2311 byte1 = bfd_get_8 (abfd, contents + addr);
2312 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2315 /* Now figure out how much stack space will be allocated by the movm
2316 instruction. We need this kept separate from the function's normal
2318 if (hash->movm_args)
2321 if (hash->movm_args & 0x80)
2322 hash->movm_stack_size += 4;
2325 if (hash->movm_args & 0x40)
2326 hash->movm_stack_size += 4;
2329 if (hash->movm_args & 0x20)
2330 hash->movm_stack_size += 4;
2333 if (hash->movm_args & 0x10)
2334 hash->movm_stack_size += 4;
2336 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2337 if (hash->movm_args & 0x08)
2338 hash->movm_stack_size += 8 * 4;
2340 if (bfd_get_mach (abfd) == bfd_mach_am33
2341 || bfd_get_mach (abfd) == bfd_mach_am33_2)
2343 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2344 if (hash->movm_args & 0x1)
2345 hash->movm_stack_size += 6 * 4;
2347 /* exreg1 space. e4, e5, e6, e7 */
2348 if (hash->movm_args & 0x2)
2349 hash->movm_stack_size += 4 * 4;
2351 /* exreg0 space. e2, e3 */
2352 if (hash->movm_args & 0x4)
2353 hash->movm_stack_size += 2 * 4;
2357 /* Now look for the two stack adjustment variants. */
2358 if (byte1 == 0xf8 && byte2 == 0xfe)
2360 int temp = bfd_get_8 (abfd, contents + addr + 2);
2361 temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
2363 hash->stack_size = -temp;
2365 else if (byte1 == 0xfa && byte2 == 0xfe)
2367 int temp = bfd_get_16 (abfd, contents + addr + 2);
2368 temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
2372 hash->stack_size = temp;
2375 /* If the total stack to be allocated by the call instruction is more
2376 than 255 bytes, then we can't remove the stack adjustment by using
2377 "call" (we might still be able to remove the "movm" instruction. */
2378 if (hash->stack_size + hash->movm_stack_size > 255)
2379 hash->stack_size = 0;
2382 /* Delete some bytes from a section while relaxing. */
2385 mn10300_elf_relax_delete_bytes (bfd *abfd,
2390 Elf_Internal_Shdr *symtab_hdr;
2391 unsigned int sec_shndx;
2393 Elf_Internal_Rela *irel, *irelend;
2394 Elf_Internal_Rela *irelalign;
2396 Elf_Internal_Sym *isym, *isymend;
2397 struct elf_link_hash_entry **sym_hashes;
2398 struct elf_link_hash_entry **end_hashes;
2399 unsigned int symcount;
2401 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2403 contents = elf_section_data (sec)->this_hdr.contents;
2408 irel = elf_section_data (sec)->relocs;
2409 irelend = irel + sec->reloc_count;
2411 if (sec->reloc_count > 0)
2413 /* If there is an align reloc at the end of the section ignore it.
2414 GAS creates these relocs for reasons of its own, and they just
2415 serve to keep the section artifically inflated. */
2416 if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN)
2419 /* The deletion must stop at the next ALIGN reloc for an alignment
2420 power larger than, or not a multiple of, the number of bytes we
2422 for (; irel < irelend; irel++)
2424 int alignment = 1 << irel->r_addend;
2426 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
2427 && irel->r_offset > addr
2428 && irel->r_offset < toaddr
2429 && (count < alignment
2430 || alignment % count != 0))
2433 toaddr = irel->r_offset;
2439 /* Actually delete the bytes. */
2440 memmove (contents + addr, contents + addr + count,
2441 (size_t) (toaddr - addr - count));
2443 /* Adjust the section's size if we are shrinking it, or else
2444 pad the bytes between the end of the shrunken region and
2445 the start of the next region with NOP codes. */
2446 if (irelalign == NULL)
2449 /* Include symbols at the end of the section, but
2450 not at the end of a sub-region of the section. */
2457 #define NOP_OPCODE 0xcb
2459 for (i = 0; i < count; i ++)
2460 bfd_put_8 (abfd, (bfd_vma) NOP_OPCODE, contents + toaddr - count + i);
2463 /* Adjust all the relocs. */
2464 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
2466 /* Get the new reloc address. */
2467 if ((irel->r_offset > addr
2468 && irel->r_offset < toaddr)
2469 || (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
2470 && irel->r_offset == toaddr))
2471 irel->r_offset -= count;
2474 /* Adjust the local symbols in the section, reducing their value
2475 by the number of bytes deleted. Note - symbols within the deleted
2476 region are moved to the address of the start of the region, which
2477 actually means that they will address the byte beyond the end of
2478 the region once the deletion has been completed. */
2479 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2480 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
2481 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2483 if (isym->st_shndx == sec_shndx
2484 && isym->st_value > addr
2485 && isym->st_value < toaddr)
2487 if (isym->st_value < addr + count)
2488 isym->st_value = addr;
2490 isym->st_value -= count;
2492 /* Adjust the function symbol's size as well. */
2493 else if (isym->st_shndx == sec_shndx
2494 && ELF_ST_TYPE (isym->st_info) == STT_FUNC
2495 && isym->st_value + isym->st_size > addr
2496 && isym->st_value + isym->st_size < toaddr)
2497 isym->st_size -= count;
2500 /* Now adjust the global symbols defined in this section. */
2501 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2502 - symtab_hdr->sh_info);
2503 sym_hashes = elf_sym_hashes (abfd);
2504 end_hashes = sym_hashes + symcount;
2505 for (; sym_hashes < end_hashes; sym_hashes++)
2507 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2509 if ((sym_hash->root.type == bfd_link_hash_defined
2510 || sym_hash->root.type == bfd_link_hash_defweak)
2511 && sym_hash->root.u.def.section == sec
2512 && sym_hash->root.u.def.value > addr
2513 && sym_hash->root.u.def.value < toaddr)
2515 if (sym_hash->root.u.def.value < addr + count)
2516 sym_hash->root.u.def.value = addr;
2518 sym_hash->root.u.def.value -= count;
2520 /* Adjust the function symbol's size as well. */
2521 else if (sym_hash->root.type == bfd_link_hash_defined
2522 && sym_hash->root.u.def.section == sec
2523 && sym_hash->type == STT_FUNC
2524 && sym_hash->root.u.def.value + sym_hash->size > addr
2525 && sym_hash->root.u.def.value + sym_hash->size < toaddr)
2526 sym_hash->size -= count;
2529 /* See if we can move the ALIGN reloc forward.
2530 We have adjusted r_offset for it already. */
2531 if (irelalign != NULL)
2533 bfd_vma alignto, alignaddr;
2535 if ((int) irelalign->r_addend > 0)
2537 /* This is the old address. */
2538 alignto = BFD_ALIGN (toaddr, 1 << irelalign->r_addend);
2539 /* This is where the align points to now. */
2540 alignaddr = BFD_ALIGN (irelalign->r_offset,
2541 1 << irelalign->r_addend);
2542 if (alignaddr < alignto)
2543 /* Tail recursion. */
2544 return mn10300_elf_relax_delete_bytes (abfd, sec, alignaddr,
2545 (int) (alignto - alignaddr));
2552 /* Return TRUE if a symbol exists at the given address, else return
2556 mn10300_elf_symbol_address_p (bfd *abfd,
2558 Elf_Internal_Sym *isym,
2561 Elf_Internal_Shdr *symtab_hdr;
2562 unsigned int sec_shndx;
2563 Elf_Internal_Sym *isymend;
2564 struct elf_link_hash_entry **sym_hashes;
2565 struct elf_link_hash_entry **end_hashes;
2566 unsigned int symcount;
2568 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2570 /* Examine all the symbols. */
2571 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2572 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2573 if (isym->st_shndx == sec_shndx
2574 && isym->st_value == addr)
2577 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2578 - symtab_hdr->sh_info);
2579 sym_hashes = elf_sym_hashes (abfd);
2580 end_hashes = sym_hashes + symcount;
2581 for (; sym_hashes < end_hashes; sym_hashes++)
2583 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2585 if ((sym_hash->root.type == bfd_link_hash_defined
2586 || sym_hash->root.type == bfd_link_hash_defweak)
2587 && sym_hash->root.u.def.section == sec
2588 && sym_hash->root.u.def.value == addr)
2595 /* This function handles relaxing for the mn10300.
2597 There are quite a few relaxing opportunities available on the mn10300:
2599 * calls:32 -> calls:16 2 bytes
2600 * call:32 -> call:16 2 bytes
2602 * call:32 -> calls:32 1 byte
2603 * call:16 -> calls:16 1 byte
2604 * These are done anytime using "calls" would result
2605 in smaller code, or when necessary to preserve the
2606 meaning of the program.
2610 * In some circumstances we can move instructions
2611 from a function prologue into a "call" instruction.
2612 This is only done if the resulting code is no larger
2613 than the original code.
2615 * jmp:32 -> jmp:16 2 bytes
2616 * jmp:16 -> bra:8 1 byte
2618 * If the previous instruction is a conditional branch
2619 around the jump/bra, we may be able to reverse its condition
2620 and change its target to the jump's target. The jump/bra
2621 can then be deleted. 2 bytes
2623 * mov abs32 -> mov abs16 1 or 2 bytes
2625 * Most instructions which accept imm32 can relax to imm16 1 or 2 bytes
2626 - Most instructions which accept imm16 can relax to imm8 1 or 2 bytes
2628 * Most instructions which accept d32 can relax to d16 1 or 2 bytes
2629 - Most instructions which accept d16 can relax to d8 1 or 2 bytes
2631 We don't handle imm16->imm8 or d16->d8 as they're very rare
2632 and somewhat more difficult to support. */
2635 mn10300_elf_relax_section (bfd *abfd,
2637 struct bfd_link_info *link_info,
2640 Elf_Internal_Shdr *symtab_hdr;
2641 Elf_Internal_Rela *internal_relocs = NULL;
2642 Elf_Internal_Rela *irel, *irelend;
2643 bfd_byte *contents = NULL;
2644 Elf_Internal_Sym *isymbuf = NULL;
2645 struct elf32_mn10300_link_hash_table *hash_table;
2646 asection *section = sec;
2647 bfd_vma align_gap_adjustment;
2649 if (bfd_link_relocatable (link_info))
2650 (*link_info->callbacks->einfo)
2651 (_("%P%F: --relax and -r may not be used together\n"));
2653 /* Assume nothing changes. */
2656 /* We need a pointer to the mn10300 specific hash table. */
2657 hash_table = elf32_mn10300_hash_table (link_info);
2658 if (hash_table == NULL)
2661 /* Initialize fields in each hash table entry the first time through. */
2662 if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
2666 /* Iterate over all the input bfds. */
2667 for (input_bfd = link_info->input_bfds;
2669 input_bfd = input_bfd->link.next)
2671 /* We're going to need all the symbols for each bfd. */
2672 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2673 if (symtab_hdr->sh_info != 0)
2675 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
2676 if (isymbuf == NULL)
2677 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
2678 symtab_hdr->sh_info, 0,
2680 if (isymbuf == NULL)
2684 /* Iterate over each section in this bfd. */
2685 for (section = input_bfd->sections;
2687 section = section->next)
2689 struct elf32_mn10300_link_hash_entry *hash;
2690 asection *sym_sec = NULL;
2691 const char *sym_name;
2694 /* If there's nothing to do in this section, skip it. */
2695 if (! ((section->flags & SEC_RELOC) != 0
2696 && section->reloc_count != 0))
2698 if ((section->flags & SEC_ALLOC) == 0)
2701 /* Get cached copy of section contents if it exists. */
2702 if (elf_section_data (section)->this_hdr.contents != NULL)
2703 contents = elf_section_data (section)->this_hdr.contents;
2704 else if (section->size != 0)
2706 /* Go get them off disk. */
2707 if (!bfd_malloc_and_get_section (input_bfd, section,
2714 /* If there aren't any relocs, then there's nothing to do. */
2715 if ((section->flags & SEC_RELOC) != 0
2716 && section->reloc_count != 0)
2718 /* Get a copy of the native relocations. */
2719 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
2721 link_info->keep_memory);
2722 if (internal_relocs == NULL)
2725 /* Now examine each relocation. */
2726 irel = internal_relocs;
2727 irelend = irel + section->reloc_count;
2728 for (; irel < irelend; irel++)
2731 unsigned long r_index;
2734 r_type = ELF32_R_TYPE (irel->r_info);
2735 r_index = ELF32_R_SYM (irel->r_info);
2737 if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
2740 /* We need the name and hash table entry of the target
2745 if (r_index < symtab_hdr->sh_info)
2747 /* A local symbol. */
2748 Elf_Internal_Sym *isym;
2749 struct elf_link_hash_table *elftab;
2752 isym = isymbuf + r_index;
2753 if (isym->st_shndx == SHN_UNDEF)
2754 sym_sec = bfd_und_section_ptr;
2755 else if (isym->st_shndx == SHN_ABS)
2756 sym_sec = bfd_abs_section_ptr;
2757 else if (isym->st_shndx == SHN_COMMON)
2758 sym_sec = bfd_com_section_ptr;
2761 = bfd_section_from_elf_index (input_bfd,
2765 = bfd_elf_string_from_elf_section (input_bfd,
2770 /* If it isn't a function, then we don't care
2772 if (ELF_ST_TYPE (isym->st_info) != STT_FUNC)
2775 /* Tack on an ID so we can uniquely identify this
2776 local symbol in the global hash table. */
2777 amt = strlen (sym_name) + 10;
2778 new_name = bfd_malloc (amt);
2779 if (new_name == NULL)
2782 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
2783 sym_name = new_name;
2785 elftab = &hash_table->static_hash_table->root;
2786 hash = ((struct elf32_mn10300_link_hash_entry *)
2787 elf_link_hash_lookup (elftab, sym_name,
2788 TRUE, TRUE, FALSE));
2793 r_index -= symtab_hdr->sh_info;
2794 hash = (struct elf32_mn10300_link_hash_entry *)
2795 elf_sym_hashes (input_bfd)[r_index];
2798 sym_name = hash->root.root.root.string;
2799 if ((section->flags & SEC_CODE) != 0)
2801 /* If this is not a "call" instruction, then we
2802 should convert "call" instructions to "calls"
2804 code = bfd_get_8 (input_bfd,
2805 contents + irel->r_offset - 1);
2806 if (code != 0xdd && code != 0xcd)
2807 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2810 /* If this is a jump/call, then bump the
2811 direct_calls counter. Else force "call" to
2812 "calls" conversions. */
2813 if (r_type == R_MN10300_PCREL32
2814 || r_type == R_MN10300_PLT32
2815 || r_type == R_MN10300_PLT16
2816 || r_type == R_MN10300_PCREL16)
2817 hash->direct_calls++;
2819 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
2823 /* Now look at the actual contents to get the stack size,
2824 and a list of what registers were saved in the prologue
2826 if ((section->flags & SEC_CODE) != 0)
2828 Elf_Internal_Sym *isym, *isymend;
2829 unsigned int sec_shndx;
2830 struct elf_link_hash_entry **hashes;
2831 struct elf_link_hash_entry **end_hashes;
2832 unsigned int symcount;
2834 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
2837 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2838 - symtab_hdr->sh_info);
2839 hashes = elf_sym_hashes (input_bfd);
2840 end_hashes = hashes + symcount;
2842 /* Look at each function defined in this section and
2843 update info for that function. */
2844 isymend = isymbuf + symtab_hdr->sh_info;
2845 for (isym = isymbuf; isym < isymend; isym++)
2847 if (isym->st_shndx == sec_shndx
2848 && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
2850 struct elf_link_hash_table *elftab;
2852 struct elf_link_hash_entry **lhashes = hashes;
2854 /* Skip a local symbol if it aliases a
2856 for (; lhashes < end_hashes; lhashes++)
2858 hash = (struct elf32_mn10300_link_hash_entry *) *lhashes;
2859 if ((hash->root.root.type == bfd_link_hash_defined
2860 || hash->root.root.type == bfd_link_hash_defweak)
2861 && hash->root.root.u.def.section == section
2862 && hash->root.type == STT_FUNC
2863 && hash->root.root.u.def.value == isym->st_value)
2866 if (lhashes != end_hashes)
2869 if (isym->st_shndx == SHN_UNDEF)
2870 sym_sec = bfd_und_section_ptr;
2871 else if (isym->st_shndx == SHN_ABS)
2872 sym_sec = bfd_abs_section_ptr;
2873 else if (isym->st_shndx == SHN_COMMON)
2874 sym_sec = bfd_com_section_ptr;
2877 = bfd_section_from_elf_index (input_bfd,
2880 sym_name = (bfd_elf_string_from_elf_section
2881 (input_bfd, symtab_hdr->sh_link,
2884 /* Tack on an ID so we can uniquely identify this
2885 local symbol in the global hash table. */
2886 amt = strlen (sym_name) + 10;
2887 new_name = bfd_malloc (amt);
2888 if (new_name == NULL)
2891 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
2892 sym_name = new_name;
2894 elftab = &hash_table->static_hash_table->root;
2895 hash = ((struct elf32_mn10300_link_hash_entry *)
2896 elf_link_hash_lookup (elftab, sym_name,
2897 TRUE, TRUE, FALSE));
2899 compute_function_info (input_bfd, hash,
2900 isym->st_value, contents);
2901 hash->value = isym->st_value;
2905 for (; hashes < end_hashes; hashes++)
2907 hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
2908 if ((hash->root.root.type == bfd_link_hash_defined
2909 || hash->root.root.type == bfd_link_hash_defweak)
2910 && hash->root.root.u.def.section == section
2911 && hash->root.type == STT_FUNC)
2912 compute_function_info (input_bfd, hash,
2913 (hash)->root.root.u.def.value,
2918 /* Cache or free any memory we allocated for the relocs. */
2919 if (internal_relocs != NULL
2920 && elf_section_data (section)->relocs != internal_relocs)
2921 free (internal_relocs);
2922 internal_relocs = NULL;
2924 /* Cache or free any memory we allocated for the contents. */
2925 if (contents != NULL
2926 && elf_section_data (section)->this_hdr.contents != contents)
2928 if (! link_info->keep_memory)
2932 /* Cache the section contents for elf_link_input_bfd. */
2933 elf_section_data (section)->this_hdr.contents = contents;
2939 /* Cache or free any memory we allocated for the symbols. */
2941 && symtab_hdr->contents != (unsigned char *) isymbuf)
2943 if (! link_info->keep_memory)
2947 /* Cache the symbols for elf_link_input_bfd. */
2948 symtab_hdr->contents = (unsigned char *) isymbuf;
2954 /* Now iterate on each symbol in the hash table and perform
2955 the final initialization steps on each. */
2956 elf32_mn10300_link_hash_traverse (hash_table,
2957 elf32_mn10300_finish_hash_table_entry,
2959 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2960 elf32_mn10300_finish_hash_table_entry,
2964 /* This section of code collects all our local symbols, sorts
2965 them by value, and looks for multiple symbols referring to
2966 the same address. For those symbols, the flags are merged.
2967 At this point, the only flag that can be set is
2968 MN10300_CONVERT_CALL_TO_CALLS, so we simply OR the flags
2970 int static_count = 0, i;
2971 struct elf32_mn10300_link_hash_entry **entries;
2972 struct elf32_mn10300_link_hash_entry **ptr;
2974 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2975 elf32_mn10300_count_hash_table_entries,
2978 entries = bfd_malloc (static_count * sizeof (* ptr));
2981 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
2982 elf32_mn10300_list_hash_table_entries,
2985 qsort (entries, static_count, sizeof (entries[0]), sort_by_value);
2987 for (i = 0; i < static_count - 1; i++)
2988 if (entries[i]->value && entries[i]->value == entries[i+1]->value)
2990 int v = entries[i]->flags;
2993 for (j = i + 1; j < static_count && entries[j]->value == entries[i]->value; j++)
2994 v |= entries[j]->flags;
2996 for (j = i; j < static_count && entries[j]->value == entries[i]->value; j++)
2997 entries[j]->flags = v;
3003 /* All entries in the hash table are fully initialized. */
3004 hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
3006 /* Now that everything has been initialized, go through each
3007 code section and delete any prologue insns which will be
3008 redundant because their operations will be performed by
3009 a "call" instruction. */
3010 for (input_bfd = link_info->input_bfds;
3012 input_bfd = input_bfd->link.next)
3014 /* We're going to need all the local symbols for each bfd. */
3015 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3016 if (symtab_hdr->sh_info != 0)
3018 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
3019 if (isymbuf == NULL)
3020 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
3021 symtab_hdr->sh_info, 0,
3023 if (isymbuf == NULL)
3027 /* Walk over each section in this bfd. */
3028 for (section = input_bfd->sections;
3030 section = section->next)
3032 unsigned int sec_shndx;
3033 Elf_Internal_Sym *isym, *isymend;
3034 struct elf_link_hash_entry **hashes;
3035 struct elf_link_hash_entry **end_hashes;
3036 unsigned int symcount;
3038 /* Skip non-code sections and empty sections. */
3039 if ((section->flags & SEC_CODE) == 0 || section->size == 0)
3042 if (section->reloc_count != 0)
3044 /* Get a copy of the native relocations. */
3045 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section,
3047 link_info->keep_memory);
3048 if (internal_relocs == NULL)
3052 /* Get cached copy of section contents if it exists. */
3053 if (elf_section_data (section)->this_hdr.contents != NULL)
3054 contents = elf_section_data (section)->this_hdr.contents;
3057 /* Go get them off disk. */
3058 if (!bfd_malloc_and_get_section (input_bfd, section,
3063 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
3066 /* Now look for any function in this section which needs
3067 insns deleted from its prologue. */
3068 isymend = isymbuf + symtab_hdr->sh_info;
3069 for (isym = isymbuf; isym < isymend; isym++)
3071 struct elf32_mn10300_link_hash_entry *sym_hash;
3072 asection *sym_sec = NULL;
3073 const char *sym_name;
3075 struct elf_link_hash_table *elftab;
3078 if (isym->st_shndx != sec_shndx)
3081 if (isym->st_shndx == SHN_UNDEF)
3082 sym_sec = bfd_und_section_ptr;
3083 else if (isym->st_shndx == SHN_ABS)
3084 sym_sec = bfd_abs_section_ptr;
3085 else if (isym->st_shndx == SHN_COMMON)
3086 sym_sec = bfd_com_section_ptr;
3089 = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
3092 = bfd_elf_string_from_elf_section (input_bfd,
3093 symtab_hdr->sh_link,
3096 /* Tack on an ID so we can uniquely identify this
3097 local symbol in the global hash table. */
3098 amt = strlen (sym_name) + 10;
3099 new_name = bfd_malloc (amt);
3100 if (new_name == NULL)
3102 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
3103 sym_name = new_name;
3105 elftab = & hash_table->static_hash_table->root;
3106 sym_hash = (struct elf32_mn10300_link_hash_entry *)
3107 elf_link_hash_lookup (elftab, sym_name,
3108 FALSE, FALSE, FALSE);
3111 if (sym_hash == NULL)
3114 if (! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
3115 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
3119 /* Note that we've changed things. */
3120 elf_section_data (section)->relocs = internal_relocs;
3121 elf_section_data (section)->this_hdr.contents = contents;
3122 symtab_hdr->contents = (unsigned char *) isymbuf;
3124 /* Count how many bytes we're going to delete. */
3125 if (sym_hash->movm_args)
3128 if (sym_hash->stack_size > 0)
3130 if (sym_hash->stack_size <= 128)
3136 /* Note that we've deleted prologue bytes for this
3138 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3140 /* Actually delete the bytes. */
3141 if (!mn10300_elf_relax_delete_bytes (input_bfd,
3147 /* Something changed. Not strictly necessary, but
3148 may lead to more relaxing opportunities. */
3153 /* Look for any global functions in this section which
3154 need insns deleted from their prologues. */
3155 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
3156 - symtab_hdr->sh_info);
3157 hashes = elf_sym_hashes (input_bfd);
3158 end_hashes = hashes + symcount;
3159 for (; hashes < end_hashes; hashes++)
3161 struct elf32_mn10300_link_hash_entry *sym_hash;
3163 sym_hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
3164 if ((sym_hash->root.root.type == bfd_link_hash_defined
3165 || sym_hash->root.root.type == bfd_link_hash_defweak)
3166 && sym_hash->root.root.u.def.section == section
3167 && ! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
3168 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
3172 struct elf_link_hash_entry **hh;
3174 /* Note that we've changed things. */
3175 elf_section_data (section)->relocs = internal_relocs;
3176 elf_section_data (section)->this_hdr.contents = contents;
3177 symtab_hdr->contents = (unsigned char *) isymbuf;
3179 /* Count how many bytes we're going to delete. */
3180 if (sym_hash->movm_args)
3183 if (sym_hash->stack_size > 0)
3185 if (sym_hash->stack_size <= 128)
3191 /* Note that we've deleted prologue bytes for this
3193 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3195 /* Actually delete the bytes. */
3196 symval = sym_hash->root.root.u.def.value;
3197 if (!mn10300_elf_relax_delete_bytes (input_bfd,
3203 /* There may be other C++ functions symbols with the same
3204 address. If so then mark these as having had their
3205 prologue bytes deleted as well. */
3206 for (hh = elf_sym_hashes (input_bfd); hh < end_hashes; hh++)
3208 struct elf32_mn10300_link_hash_entry *h;
3210 h = (struct elf32_mn10300_link_hash_entry *) * hh;
3213 && (h->root.root.type == bfd_link_hash_defined
3214 || h->root.root.type == bfd_link_hash_defweak)
3215 && h->root.root.u.def.section == section
3216 && ! (h->flags & MN10300_CONVERT_CALL_TO_CALLS)
3217 && h->root.root.u.def.value == symval
3218 && h->root.type == STT_FUNC)
3219 h->flags |= MN10300_DELETED_PROLOGUE_BYTES;
3222 /* Something changed. Not strictly necessary, but
3223 may lead to more relaxing opportunities. */
3228 /* Cache or free any memory we allocated for the relocs. */
3229 if (internal_relocs != NULL
3230 && elf_section_data (section)->relocs != internal_relocs)
3231 free (internal_relocs);
3232 internal_relocs = NULL;
3234 /* Cache or free any memory we allocated for the contents. */
3235 if (contents != NULL
3236 && elf_section_data (section)->this_hdr.contents != contents)
3238 if (! link_info->keep_memory)
3241 /* Cache the section contents for elf_link_input_bfd. */
3242 elf_section_data (section)->this_hdr.contents = contents;
3247 /* Cache or free any memory we allocated for the symbols. */
3249 && symtab_hdr->contents != (unsigned char *) isymbuf)
3251 if (! link_info->keep_memory)
3254 /* Cache the symbols for elf_link_input_bfd. */
3255 symtab_hdr->contents = (unsigned char *) isymbuf;
3261 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
3263 internal_relocs = NULL;
3265 /* For error_return. */
3268 /* We don't have to do anything for a relocatable link, if
3269 this section does not have relocs, or if this is not a
3271 if (bfd_link_relocatable (link_info)
3272 || (sec->flags & SEC_RELOC) == 0
3273 || sec->reloc_count == 0
3274 || (sec->flags & SEC_CODE) == 0)
3277 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3279 /* Get a copy of the native relocations. */
3280 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
3281 link_info->keep_memory);
3282 if (internal_relocs == NULL)
3285 /* Scan for worst case alignment gap changes. Note that this logic
3286 is not ideal; what we should do is run this scan for every
3287 opcode/address range and adjust accordingly, but that's
3288 expensive. Worst case is that for an alignment of N bytes, we
3289 move by 2*N-N-1 bytes, assuming we have aligns of 1, 2, 4, 8, etc
3290 all before it. Plus, this still doesn't cover cross-section
3291 jumps with section alignment. */
3292 irelend = internal_relocs + sec->reloc_count;
3293 align_gap_adjustment = 0;
3294 for (irel = internal_relocs; irel < irelend; irel++)
3296 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN)
3298 bfd_vma adj = 1 << irel->r_addend;
3299 bfd_vma aend = irel->r_offset;
3301 aend = BFD_ALIGN (aend, 1 << irel->r_addend);
3302 adj = 2 * adj - adj - 1;
3304 /* Record the biggest adjustmnet. Skip any alignment at the
3305 end of our section. */
3306 if (align_gap_adjustment < adj
3307 && aend < sec->output_section->vma + sec->output_offset + sec->size)
3308 align_gap_adjustment = adj;
3312 /* Walk through them looking for relaxing opportunities. */
3313 irelend = internal_relocs + sec->reloc_count;
3314 for (irel = internal_relocs; irel < irelend; irel++)
3317 bfd_signed_vma jump_offset;
3318 asection *sym_sec = NULL;
3319 struct elf32_mn10300_link_hash_entry *h = NULL;
3321 /* If this isn't something that can be relaxed, then ignore
3323 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_NONE
3324 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_8
3325 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_MAX)
3328 /* Get the section contents if we haven't done so already. */
3329 if (contents == NULL)
3331 /* Get cached copy if it exists. */
3332 if (elf_section_data (sec)->this_hdr.contents != NULL)
3333 contents = elf_section_data (sec)->this_hdr.contents;
3336 /* Go get them off disk. */
3337 if (!bfd_malloc_and_get_section (abfd, sec, &contents))
3342 /* Read this BFD's symbols if we haven't done so already. */
3343 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
3345 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
3346 if (isymbuf == NULL)
3347 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
3348 symtab_hdr->sh_info, 0,
3350 if (isymbuf == NULL)
3354 /* Get the value of the symbol referred to by the reloc. */
3355 if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
3357 Elf_Internal_Sym *isym;
3358 const char *sym_name;
3361 /* A local symbol. */
3362 isym = isymbuf + ELF32_R_SYM (irel->r_info);
3363 if (isym->st_shndx == SHN_UNDEF)
3364 sym_sec = bfd_und_section_ptr;
3365 else if (isym->st_shndx == SHN_ABS)
3366 sym_sec = bfd_abs_section_ptr;
3367 else if (isym->st_shndx == SHN_COMMON)
3368 sym_sec = bfd_com_section_ptr;
3370 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3372 sym_name = bfd_elf_string_from_elf_section (abfd,
3373 symtab_hdr->sh_link,
3376 if ((sym_sec->flags & SEC_MERGE)
3377 && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
3379 symval = isym->st_value;
3381 /* GAS may reduce relocations against symbols in SEC_MERGE
3382 sections to a relocation against the section symbol when
3383 the original addend was zero. When the reloc is against
3384 a section symbol we should include the addend in the
3385 offset passed to _bfd_merged_section_offset, since the
3386 location of interest is the original symbol. On the
3387 other hand, an access to "sym+addend" where "sym" is not
3388 a section symbol should not include the addend; Such an
3389 access is presumed to be an offset from "sym"; The
3390 location of interest is just "sym". */
3391 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
3392 symval += irel->r_addend;
3394 symval = _bfd_merged_section_offset (abfd, & sym_sec,
3395 elf_section_data (sym_sec)->sec_info,
3398 if (ELF_ST_TYPE (isym->st_info) != STT_SECTION)
3399 symval += irel->r_addend;
3401 symval += sym_sec->output_section->vma
3402 + sym_sec->output_offset - irel->r_addend;
3405 symval = (isym->st_value
3406 + sym_sec->output_section->vma
3407 + sym_sec->output_offset);
3409 /* Tack on an ID so we can uniquely identify this
3410 local symbol in the global hash table. */
3411 new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10);
3412 if (new_name == NULL)
3414 sprintf (new_name, "%s_%08x", sym_name, sym_sec->id);
3415 sym_name = new_name;
3417 h = (struct elf32_mn10300_link_hash_entry *)
3418 elf_link_hash_lookup (&hash_table->static_hash_table->root,
3419 sym_name, FALSE, FALSE, FALSE);
3426 /* An external symbol. */
3427 indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
3428 h = (struct elf32_mn10300_link_hash_entry *)
3429 (elf_sym_hashes (abfd)[indx]);
3430 BFD_ASSERT (h != NULL);
3431 if (h->root.root.type != bfd_link_hash_defined
3432 && h->root.root.type != bfd_link_hash_defweak)
3433 /* This appears to be a reference to an undefined
3434 symbol. Just ignore it--it will be caught by the
3435 regular reloc processing. */
3438 /* Check for a reference to a discarded symbol and ignore it. */
3439 if (h->root.root.u.def.section->output_section == NULL)
3442 sym_sec = h->root.root.u.def.section->output_section;
3444 symval = (h->root.root.u.def.value
3445 + h->root.root.u.def.section->output_section->vma
3446 + h->root.root.u.def.section->output_offset);
3449 /* For simplicity of coding, we are going to modify the section
3450 contents, the section relocs, and the BFD symbol table. We
3451 must tell the rest of the code not to free up this
3452 information. It would be possible to instead create a table
3453 of changes which have to be made, as is done in coff-mips.c;
3454 that would be more work, but would require less memory when
3455 the linker is run. */
3457 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
3458 branch/call, also deal with "call" -> "calls" conversions and
3459 insertion of prologue data into "call" instructions. */
3460 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL32
3461 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32)
3463 bfd_vma value = symval;
3465 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PLT32
3467 && ELF_ST_VISIBILITY (h->root.other) != STV_INTERNAL
3468 && ELF_ST_VISIBILITY (h->root.other) != STV_HIDDEN
3469 && h->root.plt.offset != (bfd_vma) -1)
3473 splt = hash_table->root.splt;
3474 value = ((splt->output_section->vma
3475 + splt->output_offset
3476 + h->root.plt.offset)
3477 - (sec->output_section->vma
3478 + sec->output_offset
3482 /* If we've got a "call" instruction that needs to be turned
3483 into a "calls" instruction, do so now. It saves a byte. */
3484 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
3488 /* Get the opcode. */
3489 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3491 /* Make sure we're working with a "call" instruction! */
3494 /* Note that we've changed the relocs, section contents,
3496 elf_section_data (sec)->relocs = internal_relocs;
3497 elf_section_data (sec)->this_hdr.contents = contents;
3498 symtab_hdr->contents = (unsigned char *) isymbuf;
3500 /* Fix the opcode. */
3501 bfd_put_8 (abfd, 0xfc, contents + irel->r_offset - 1);
3502 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
3504 /* Fix irel->r_offset and irel->r_addend. */
3505 irel->r_offset += 1;
3506 irel->r_addend += 1;
3508 /* Delete one byte of data. */
3509 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3510 irel->r_offset + 3, 1))
3513 /* That will change things, so, we should relax again.
3514 Note that this is not required, and it may be slow. */
3520 /* We've got a "call" instruction which needs some data
3521 from target function filled in. */
3524 /* Get the opcode. */
3525 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3527 /* Insert data from the target function into the "call"
3528 instruction if needed. */
3531 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 4);
3532 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
3533 contents + irel->r_offset + 5);
3537 /* Deal with pc-relative gunk. */
3538 value -= (sec->output_section->vma + sec->output_offset);
3539 value -= irel->r_offset;
3540 value += irel->r_addend;
3542 /* See if the value will fit in 16 bits, note the high value is
3543 0x7fff + 2 as the target will be two bytes closer if we are
3544 able to relax, if it's in the same section. */
3545 if (sec->output_section == sym_sec->output_section)
3546 jump_offset = 0x8001;
3548 jump_offset = 0x7fff;
3550 /* Account for jumps across alignment boundaries using
3551 align_gap_adjustment. */
3552 if ((bfd_signed_vma) value < jump_offset - (bfd_signed_vma) align_gap_adjustment
3553 && ((bfd_signed_vma) value > -0x8000 + (bfd_signed_vma) align_gap_adjustment))
3557 /* Get the opcode. */
3558 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3560 if (code != 0xdc && code != 0xdd && code != 0xff)
3563 /* Note that we've changed the relocs, section contents, etc. */
3564 elf_section_data (sec)->relocs = internal_relocs;
3565 elf_section_data (sec)->this_hdr.contents = contents;
3566 symtab_hdr->contents = (unsigned char *) isymbuf;
3568 /* Fix the opcode. */
3570 bfd_put_8 (abfd, 0xcc, contents + irel->r_offset - 1);
3571 else if (code == 0xdd)
3572 bfd_put_8 (abfd, 0xcd, contents + irel->r_offset - 1);
3573 else if (code == 0xff)
3574 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
3576 /* Fix the relocation's type. */
3577 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3578 (ELF32_R_TYPE (irel->r_info)
3579 == (int) R_MN10300_PLT32)
3583 /* Delete two bytes of data. */
3584 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3585 irel->r_offset + 1, 2))
3588 /* That will change things, so, we should relax again.
3589 Note that this is not required, and it may be slow. */
3594 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
3596 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL16)
3598 bfd_vma value = symval;
3600 /* If we've got a "call" instruction that needs to be turned
3601 into a "calls" instruction, do so now. It saves a byte. */
3602 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
3606 /* Get the opcode. */
3607 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3609 /* Make sure we're working with a "call" instruction! */
3612 /* Note that we've changed the relocs, section contents,
3614 elf_section_data (sec)->relocs = internal_relocs;
3615 elf_section_data (sec)->this_hdr.contents = contents;
3616 symtab_hdr->contents = (unsigned char *) isymbuf;
3618 /* Fix the opcode. */
3619 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 1);
3620 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
3622 /* Fix irel->r_offset and irel->r_addend. */
3623 irel->r_offset += 1;
3624 irel->r_addend += 1;
3626 /* Delete one byte of data. */
3627 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3628 irel->r_offset + 1, 1))
3631 /* That will change things, so, we should relax again.
3632 Note that this is not required, and it may be slow. */
3640 /* Get the opcode. */
3641 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3643 /* Insert data from the target function into the "call"
3644 instruction if needed. */
3647 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 2);
3648 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
3649 contents + irel->r_offset + 3);
3653 /* Deal with pc-relative gunk. */
3654 value -= (sec->output_section->vma + sec->output_offset);
3655 value -= irel->r_offset;
3656 value += irel->r_addend;
3658 /* See if the value will fit in 8 bits, note the high value is
3659 0x7f + 1 as the target will be one bytes closer if we are
3661 if ((long) value < 0x80 && (long) value > -0x80)
3665 /* Get the opcode. */
3666 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3671 /* Note that we've changed the relocs, section contents, etc. */
3672 elf_section_data (sec)->relocs = internal_relocs;
3673 elf_section_data (sec)->this_hdr.contents = contents;
3674 symtab_hdr->contents = (unsigned char *) isymbuf;
3676 /* Fix the opcode. */
3677 bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
3679 /* Fix the relocation's type. */
3680 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3683 /* Delete one byte of data. */
3684 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3685 irel->r_offset + 1, 1))
3688 /* That will change things, so, we should relax again.
3689 Note that this is not required, and it may be slow. */
3694 /* Try to eliminate an unconditional 8 bit pc-relative branch
3695 which immediately follows a conditional 8 bit pc-relative
3696 branch around the unconditional branch.
3703 This happens when the bCC can't reach lab2 at assembly time,
3704 but due to other relaxations it can reach at link time. */
3705 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
3707 Elf_Internal_Rela *nrel;
3708 bfd_vma value = symval;
3711 /* Deal with pc-relative gunk. */
3712 value -= (sec->output_section->vma + sec->output_offset);
3713 value -= irel->r_offset;
3714 value += irel->r_addend;
3716 /* Do nothing if this reloc is the last byte in the section. */
3717 if (irel->r_offset == sec->size)
3720 /* See if the next instruction is an unconditional pc-relative
3721 branch, more often than not this test will fail, so we
3722 test it first to speed things up. */
3723 code = bfd_get_8 (abfd, contents + irel->r_offset + 1);
3727 /* Also make sure the next relocation applies to the next
3728 instruction and that it's a pc-relative 8 bit branch. */
3731 || irel->r_offset + 2 != nrel->r_offset
3732 || ELF32_R_TYPE (nrel->r_info) != (int) R_MN10300_PCREL8)
3735 /* Make sure our destination immediately follows the
3736 unconditional branch. */
3737 if (symval != (sec->output_section->vma + sec->output_offset
3738 + irel->r_offset + 3))
3741 /* Now make sure we are a conditional branch. This may not
3742 be necessary, but why take the chance.
3744 Note these checks assume that R_MN10300_PCREL8 relocs
3745 only occur on bCC and bCCx insns. If they occured
3746 elsewhere, we'd need to know the start of this insn
3747 for this check to be accurate. */
3748 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
3749 if (code != 0xc0 && code != 0xc1 && code != 0xc2
3750 && code != 0xc3 && code != 0xc4 && code != 0xc5
3751 && code != 0xc6 && code != 0xc7 && code != 0xc8
3752 && code != 0xc9 && code != 0xe8 && code != 0xe9
3753 && code != 0xea && code != 0xeb)
3756 /* We also have to be sure there is no symbol/label
3757 at the unconditional branch. */
3758 if (mn10300_elf_symbol_address_p (abfd, sec, isymbuf,
3759 irel->r_offset + 1))
3762 /* Note that we've changed the relocs, section contents, etc. */
3763 elf_section_data (sec)->relocs = internal_relocs;
3764 elf_section_data (sec)->this_hdr.contents = contents;
3765 symtab_hdr->contents = (unsigned char *) isymbuf;
3767 /* Reverse the condition of the first branch. */
3813 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
3815 /* Set the reloc type and symbol for the first branch
3816 from the second branch. */
3817 irel->r_info = nrel->r_info;
3819 /* Make the reloc for the second branch a null reloc. */
3820 nrel->r_info = ELF32_R_INFO (ELF32_R_SYM (nrel->r_info),
3823 /* Delete two bytes of data. */
3824 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3825 irel->r_offset + 1, 2))
3828 /* That will change things, so, we should relax again.
3829 Note that this is not required, and it may be slow. */
3833 /* Try to turn a 24 immediate, displacement or absolute address
3834 into a 8 immediate, displacement or absolute address. */
3835 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_24)
3837 bfd_vma value = symval;
3838 value += irel->r_addend;
3840 /* See if the value will fit in 8 bits. */
3841 if ((long) value < 0x7f && (long) value > -0x80)
3845 /* AM33 insns which have 24 operands are 6 bytes long and
3846 will have 0xfd as the first byte. */
3848 /* Get the first opcode. */
3849 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
3853 /* Get the second opcode. */
3854 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
3856 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
3857 equivalent instructions exists. */
3858 if (code != 0x6b && code != 0x7b
3859 && code != 0x8b && code != 0x9b
3860 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
3861 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
3862 || (code & 0x0f) == 0x0e))
3864 /* Not safe if the high bit is on as relaxing may
3865 move the value out of high mem and thus not fit
3866 in a signed 8bit value. This is currently over
3868 if ((value & 0x80) == 0)
3870 /* Note that we've changed the relocation contents,
3872 elf_section_data (sec)->relocs = internal_relocs;
3873 elf_section_data (sec)->this_hdr.contents = contents;
3874 symtab_hdr->contents = (unsigned char *) isymbuf;
3876 /* Fix the opcode. */
3877 bfd_put_8 (abfd, 0xfb, contents + irel->r_offset - 3);
3878 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
3880 /* Fix the relocation's type. */
3882 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3885 /* Delete two bytes of data. */
3886 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3887 irel->r_offset + 1, 2))
3890 /* That will change things, so, we should relax
3891 again. Note that this is not required, and it
3901 /* Try to turn a 32bit immediate, displacement or absolute address
3902 into a 16bit immediate, displacement or absolute address. */
3903 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32
3904 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32
3905 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
3907 bfd_vma value = symval;
3909 if (ELF32_R_TYPE (irel->r_info) != (int) R_MN10300_32)
3913 sgot = hash_table->root.sgot;
3914 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32)
3916 value = sgot->output_offset;
3919 value += h->root.got.offset;
3921 value += (elf_local_got_offsets
3922 (abfd)[ELF32_R_SYM (irel->r_info)]);
3924 else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
3925 value -= sgot->output_section->vma;
3926 else if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTPC32)
3927 value = (sgot->output_section->vma
3928 - (sec->output_section->vma
3929 + sec->output_offset
3935 value += irel->r_addend;
3937 /* See if the value will fit in 24 bits.
3938 We allow any 16bit match here. We prune those we can't
3940 if ((long) value < 0x7fffff && (long) value > -0x800000)
3944 /* AM33 insns which have 32bit operands are 7 bytes long and
3945 will have 0xfe as the first byte. */
3947 /* Get the first opcode. */
3948 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
3952 /* Get the second opcode. */
3953 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
3955 /* All the am33 32 -> 24 relaxing possibilities. */
3956 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
3957 equivalent instructions exists. */
3958 if (code != 0x6b && code != 0x7b
3959 && code != 0x8b && code != 0x9b
3960 && (ELF32_R_TYPE (irel->r_info)
3961 != (int) R_MN10300_GOTPC32)
3962 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
3963 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
3964 || (code & 0x0f) == 0x0e))
3966 /* Not safe if the high bit is on as relaxing may
3967 move the value out of high mem and thus not fit
3968 in a signed 16bit value. This is currently over
3970 if ((value & 0x8000) == 0)
3972 /* Note that we've changed the relocation contents,
3974 elf_section_data (sec)->relocs = internal_relocs;
3975 elf_section_data (sec)->this_hdr.contents = contents;
3976 symtab_hdr->contents = (unsigned char *) isymbuf;
3978 /* Fix the opcode. */
3979 bfd_put_8 (abfd, 0xfd, contents + irel->r_offset - 3);
3980 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
3982 /* Fix the relocation's type. */
3984 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
3985 (ELF32_R_TYPE (irel->r_info)
3986 == (int) R_MN10300_GOTOFF32)
3987 ? R_MN10300_GOTOFF24
3988 : (ELF32_R_TYPE (irel->r_info)
3989 == (int) R_MN10300_GOT32)
3993 /* Delete one byte of data. */
3994 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
3995 irel->r_offset + 3, 1))
3998 /* That will change things, so, we should relax
3999 again. Note that this is not required, and it
4008 /* See if the value will fit in 16 bits.
4009 We allow any 16bit match here. We prune those we can't
4011 if ((long) value < 0x7fff && (long) value > -0x8000)
4015 /* Most insns which have 32bit operands are 6 bytes long;
4016 exceptions are pcrel insns and bit insns.
4018 We handle pcrel insns above. We don't bother trying
4019 to handle the bit insns here.
4021 The first byte of the remaining insns will be 0xfc. */
4023 /* Get the first opcode. */
4024 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
4029 /* Get the second opcode. */
4030 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
4032 if ((code & 0xf0) < 0x80)
4033 switch (code & 0xf0)
4035 /* mov (d32,am),dn -> mov (d32,am),dn
4036 mov dm,(d32,am) -> mov dn,(d32,am)
4037 mov (d32,am),an -> mov (d32,am),an
4038 mov dm,(d32,am) -> mov dn,(d32,am)
4039 movbu (d32,am),dn -> movbu (d32,am),dn
4040 movbu dm,(d32,am) -> movbu dn,(d32,am)
4041 movhu (d32,am),dn -> movhu (d32,am),dn
4042 movhu dm,(d32,am) -> movhu dn,(d32,am) */
4051 /* Not safe if the high bit is on as relaxing may
4052 move the value out of high mem and thus not fit
4053 in a signed 16bit value. */
4055 && (value & 0x8000))
4058 /* Note that we've changed the relocation contents, etc. */
4059 elf_section_data (sec)->relocs = internal_relocs;
4060 elf_section_data (sec)->this_hdr.contents = contents;
4061 symtab_hdr->contents = (unsigned char *) isymbuf;
4063 /* Fix the opcode. */
4064 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4065 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4067 /* Fix the relocation's type. */
4068 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4069 (ELF32_R_TYPE (irel->r_info)
4070 == (int) R_MN10300_GOTOFF32)
4071 ? R_MN10300_GOTOFF16
4072 : (ELF32_R_TYPE (irel->r_info)
4073 == (int) R_MN10300_GOT32)
4075 : (ELF32_R_TYPE (irel->r_info)
4076 == (int) R_MN10300_GOTPC32)
4077 ? R_MN10300_GOTPC16 :
4080 /* Delete two bytes of data. */
4081 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4082 irel->r_offset + 2, 2))
4085 /* That will change things, so, we should relax again.
4086 Note that this is not required, and it may be slow. */
4090 else if ((code & 0xf0) == 0x80
4091 || (code & 0xf0) == 0x90)
4092 switch (code & 0xf3)
4094 /* mov dn,(abs32) -> mov dn,(abs16)
4095 movbu dn,(abs32) -> movbu dn,(abs16)
4096 movhu dn,(abs32) -> movhu dn,(abs16) */
4100 /* Note that we've changed the relocation contents, etc. */
4101 elf_section_data (sec)->relocs = internal_relocs;
4102 elf_section_data (sec)->this_hdr.contents = contents;
4103 symtab_hdr->contents = (unsigned char *) isymbuf;
4105 if ((code & 0xf3) == 0x81)
4106 code = 0x01 + (code & 0x0c);
4107 else if ((code & 0xf3) == 0x82)
4108 code = 0x02 + (code & 0x0c);
4109 else if ((code & 0xf3) == 0x83)
4110 code = 0x03 + (code & 0x0c);
4114 /* Fix the opcode. */
4115 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
4117 /* Fix the relocation's type. */
4118 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4119 (ELF32_R_TYPE (irel->r_info)
4120 == (int) R_MN10300_GOTOFF32)
4121 ? R_MN10300_GOTOFF16
4122 : (ELF32_R_TYPE (irel->r_info)
4123 == (int) R_MN10300_GOT32)
4125 : (ELF32_R_TYPE (irel->r_info)
4126 == (int) R_MN10300_GOTPC32)
4127 ? R_MN10300_GOTPC16 :
4130 /* The opcode got shorter too, so we have to fix the
4131 addend and offset too! */
4132 irel->r_offset -= 1;
4134 /* Delete three bytes of data. */
4135 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4136 irel->r_offset + 1, 3))
4139 /* That will change things, so, we should relax again.
4140 Note that this is not required, and it may be slow. */
4144 /* mov am,(abs32) -> mov am,(abs16)
4145 mov am,(d32,sp) -> mov am,(d16,sp)
4146 mov dm,(d32,sp) -> mov dm,(d32,sp)
4147 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
4148 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
4154 /* sp-based offsets are zero-extended. */
4155 if (code >= 0x90 && code <= 0x93
4156 && (long) value < 0)
4159 /* Note that we've changed the relocation contents, etc. */
4160 elf_section_data (sec)->relocs = internal_relocs;
4161 elf_section_data (sec)->this_hdr.contents = contents;
4162 symtab_hdr->contents = (unsigned char *) isymbuf;
4164 /* Fix the opcode. */
4165 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4166 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4168 /* Fix the relocation's type. */
4169 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4170 (ELF32_R_TYPE (irel->r_info)
4171 == (int) R_MN10300_GOTOFF32)
4172 ? R_MN10300_GOTOFF16
4173 : (ELF32_R_TYPE (irel->r_info)
4174 == (int) R_MN10300_GOT32)
4176 : (ELF32_R_TYPE (irel->r_info)
4177 == (int) R_MN10300_GOTPC32)
4178 ? R_MN10300_GOTPC16 :
4181 /* Delete two bytes of data. */
4182 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4183 irel->r_offset + 2, 2))
4186 /* That will change things, so, we should relax again.
4187 Note that this is not required, and it may be slow. */
4191 else if ((code & 0xf0) < 0xf0)
4192 switch (code & 0xfc)
4194 /* mov imm32,dn -> mov imm16,dn
4195 mov imm32,an -> mov imm16,an
4196 mov (abs32),dn -> mov (abs16),dn
4197 movbu (abs32),dn -> movbu (abs16),dn
4198 movhu (abs32),dn -> movhu (abs16),dn */
4204 /* Not safe if the high bit is on as relaxing may
4205 move the value out of high mem and thus not fit
4206 in a signed 16bit value. */
4208 && (value & 0x8000))
4211 /* "mov imm16, an" zero-extends the immediate. */
4212 if ((code & 0xfc) == 0xdc
4213 && (long) value < 0)
4216 /* Note that we've changed the relocation contents, etc. */
4217 elf_section_data (sec)->relocs = internal_relocs;
4218 elf_section_data (sec)->this_hdr.contents = contents;
4219 symtab_hdr->contents = (unsigned char *) isymbuf;
4221 if ((code & 0xfc) == 0xcc)
4222 code = 0x2c + (code & 0x03);
4223 else if ((code & 0xfc) == 0xdc)
4224 code = 0x24 + (code & 0x03);
4225 else if ((code & 0xfc) == 0xa4)
4226 code = 0x30 + (code & 0x03);
4227 else if ((code & 0xfc) == 0xa8)
4228 code = 0x34 + (code & 0x03);
4229 else if ((code & 0xfc) == 0xac)
4230 code = 0x38 + (code & 0x03);
4234 /* Fix the opcode. */
4235 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
4237 /* Fix the relocation's type. */
4238 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4239 (ELF32_R_TYPE (irel->r_info)
4240 == (int) R_MN10300_GOTOFF32)
4241 ? R_MN10300_GOTOFF16
4242 : (ELF32_R_TYPE (irel->r_info)
4243 == (int) R_MN10300_GOT32)
4245 : (ELF32_R_TYPE (irel->r_info)
4246 == (int) R_MN10300_GOTPC32)
4247 ? R_MN10300_GOTPC16 :
4250 /* The opcode got shorter too, so we have to fix the
4251 addend and offset too! */
4252 irel->r_offset -= 1;
4254 /* Delete three bytes of data. */
4255 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4256 irel->r_offset + 1, 3))
4259 /* That will change things, so, we should relax again.
4260 Note that this is not required, and it may be slow. */
4264 /* mov (abs32),an -> mov (abs16),an
4265 mov (d32,sp),an -> mov (d16,sp),an
4266 mov (d32,sp),dn -> mov (d16,sp),dn
4267 movbu (d32,sp),dn -> movbu (d16,sp),dn
4268 movhu (d32,sp),dn -> movhu (d16,sp),dn
4269 add imm32,dn -> add imm16,dn
4270 cmp imm32,dn -> cmp imm16,dn
4271 add imm32,an -> add imm16,an
4272 cmp imm32,an -> cmp imm16,an
4273 and imm32,dn -> and imm16,dn
4274 or imm32,dn -> or imm16,dn
4275 xor imm32,dn -> xor imm16,dn
4276 btst imm32,dn -> btst imm16,dn */
4292 /* cmp imm16, an zero-extends the immediate. */
4294 && (long) value < 0)
4297 /* So do sp-based offsets. */
4298 if (code >= 0xb0 && code <= 0xb3
4299 && (long) value < 0)
4302 /* Note that we've changed the relocation contents, etc. */
4303 elf_section_data (sec)->relocs = internal_relocs;
4304 elf_section_data (sec)->this_hdr.contents = contents;
4305 symtab_hdr->contents = (unsigned char *) isymbuf;
4307 /* Fix the opcode. */
4308 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4309 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
4311 /* Fix the relocation's type. */
4312 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4313 (ELF32_R_TYPE (irel->r_info)
4314 == (int) R_MN10300_GOTOFF32)
4315 ? R_MN10300_GOTOFF16
4316 : (ELF32_R_TYPE (irel->r_info)
4317 == (int) R_MN10300_GOT32)
4319 : (ELF32_R_TYPE (irel->r_info)
4320 == (int) R_MN10300_GOTPC32)
4321 ? R_MN10300_GOTPC16 :
4324 /* Delete two bytes of data. */
4325 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4326 irel->r_offset + 2, 2))
4329 /* That will change things, so, we should relax again.
4330 Note that this is not required, and it may be slow. */
4334 else if (code == 0xfe)
4336 /* add imm32,sp -> add imm16,sp */
4338 /* Note that we've changed the relocation contents, etc. */
4339 elf_section_data (sec)->relocs = internal_relocs;
4340 elf_section_data (sec)->this_hdr.contents = contents;
4341 symtab_hdr->contents = (unsigned char *) isymbuf;
4343 /* Fix the opcode. */
4344 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
4345 bfd_put_8 (abfd, 0xfe, contents + irel->r_offset - 1);
4347 /* Fix the relocation's type. */
4348 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
4349 (ELF32_R_TYPE (irel->r_info)
4350 == (int) R_MN10300_GOT32)
4352 : (ELF32_R_TYPE (irel->r_info)
4353 == (int) R_MN10300_GOTOFF32)
4354 ? R_MN10300_GOTOFF16
4355 : (ELF32_R_TYPE (irel->r_info)
4356 == (int) R_MN10300_GOTPC32)
4357 ? R_MN10300_GOTPC16 :
4360 /* Delete two bytes of data. */
4361 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
4362 irel->r_offset + 2, 2))
4365 /* That will change things, so, we should relax again.
4366 Note that this is not required, and it may be slow. */
4375 && symtab_hdr->contents != (unsigned char *) isymbuf)
4377 if (! link_info->keep_memory)
4381 /* Cache the symbols for elf_link_input_bfd. */
4382 symtab_hdr->contents = (unsigned char *) isymbuf;
4386 if (contents != NULL
4387 && elf_section_data (sec)->this_hdr.contents != contents)
4389 if (! link_info->keep_memory)
4393 /* Cache the section contents for elf_link_input_bfd. */
4394 elf_section_data (sec)->this_hdr.contents = contents;
4398 if (internal_relocs != NULL
4399 && elf_section_data (sec)->relocs != internal_relocs)
4400 free (internal_relocs);
4406 && symtab_hdr->contents != (unsigned char *) isymbuf)
4408 if (contents != NULL
4409 && elf_section_data (section)->this_hdr.contents != contents)
4411 if (internal_relocs != NULL
4412 && elf_section_data (section)->relocs != internal_relocs)
4413 free (internal_relocs);
4418 /* This is a version of bfd_generic_get_relocated_section_contents
4419 which uses mn10300_elf_relocate_section. */
4422 mn10300_elf_get_relocated_section_contents (bfd *output_bfd,
4423 struct bfd_link_info *link_info,
4424 struct bfd_link_order *link_order,
4426 bfd_boolean relocatable,
4429 Elf_Internal_Shdr *symtab_hdr;
4430 asection *input_section = link_order->u.indirect.section;
4431 bfd *input_bfd = input_section->owner;
4432 asection **sections = NULL;
4433 Elf_Internal_Rela *internal_relocs = NULL;
4434 Elf_Internal_Sym *isymbuf = NULL;
4436 /* We only need to handle the case of relaxing, or of having a
4437 particular set of section contents, specially. */
4439 || elf_section_data (input_section)->this_hdr.contents == NULL)
4440 return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
4445 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4447 memcpy (data, elf_section_data (input_section)->this_hdr.contents,
4448 (size_t) input_section->size);
4450 if ((input_section->flags & SEC_RELOC) != 0
4451 && input_section->reloc_count > 0)
4454 Elf_Internal_Sym *isym, *isymend;
4457 internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
4459 if (internal_relocs == NULL)
4462 if (symtab_hdr->sh_info != 0)
4464 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
4465 if (isymbuf == NULL)
4466 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
4467 symtab_hdr->sh_info, 0,
4469 if (isymbuf == NULL)
4473 amt = symtab_hdr->sh_info;
4474 amt *= sizeof (asection *);
4475 sections = bfd_malloc (amt);
4476 if (sections == NULL && amt != 0)
4479 isymend = isymbuf + symtab_hdr->sh_info;
4480 for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
4484 if (isym->st_shndx == SHN_UNDEF)
4485 isec = bfd_und_section_ptr;
4486 else if (isym->st_shndx == SHN_ABS)
4487 isec = bfd_abs_section_ptr;
4488 else if (isym->st_shndx == SHN_COMMON)
4489 isec = bfd_com_section_ptr;
4491 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
4496 if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd,
4497 input_section, data, internal_relocs,
4501 if (sections != NULL)
4503 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
4505 if (internal_relocs != elf_section_data (input_section)->relocs)
4506 free (internal_relocs);
4512 if (sections != NULL)
4514 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
4516 if (internal_relocs != NULL
4517 && internal_relocs != elf_section_data (input_section)->relocs)
4518 free (internal_relocs);
4522 /* Assorted hash table functions. */
4524 /* Initialize an entry in the link hash table. */
4526 /* Create an entry in an MN10300 ELF linker hash table. */
4528 static struct bfd_hash_entry *
4529 elf32_mn10300_link_hash_newfunc (struct bfd_hash_entry *entry,
4530 struct bfd_hash_table *table,
4533 struct elf32_mn10300_link_hash_entry *ret =
4534 (struct elf32_mn10300_link_hash_entry *) entry;
4536 /* Allocate the structure if it has not already been allocated by a
4539 ret = (struct elf32_mn10300_link_hash_entry *)
4540 bfd_hash_allocate (table, sizeof (* ret));
4542 return (struct bfd_hash_entry *) ret;
4544 /* Call the allocation method of the superclass. */
4545 ret = (struct elf32_mn10300_link_hash_entry *)
4546 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
4550 ret->direct_calls = 0;
4551 ret->stack_size = 0;
4553 ret->movm_stack_size = 0;
4556 ret->tls_type = GOT_UNKNOWN;
4559 return (struct bfd_hash_entry *) ret;
4563 _bfd_mn10300_copy_indirect_symbol (struct bfd_link_info * info,
4564 struct elf_link_hash_entry * dir,
4565 struct elf_link_hash_entry * ind)
4567 struct elf32_mn10300_link_hash_entry * edir;
4568 struct elf32_mn10300_link_hash_entry * eind;
4570 edir = elf_mn10300_hash_entry (dir);
4571 eind = elf_mn10300_hash_entry (ind);
4573 if (ind->root.type == bfd_link_hash_indirect
4574 && dir->got.refcount <= 0)
4576 edir->tls_type = eind->tls_type;
4577 eind->tls_type = GOT_UNKNOWN;
4579 edir->direct_calls = eind->direct_calls;
4580 edir->stack_size = eind->stack_size;
4581 edir->movm_args = eind->movm_args;
4582 edir->movm_stack_size = eind->movm_stack_size;
4583 edir->flags = eind->flags;
4585 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
4588 /* Destroy an mn10300 ELF linker hash table. */
4591 elf32_mn10300_link_hash_table_free (bfd *obfd)
4593 struct elf32_mn10300_link_hash_table *ret
4594 = (struct elf32_mn10300_link_hash_table *) obfd->link.hash;
4596 obfd->link.hash = &ret->static_hash_table->root.root;
4597 _bfd_elf_link_hash_table_free (obfd);
4598 obfd->is_linker_output = TRUE;
4599 obfd->link.hash = &ret->root.root;
4600 _bfd_elf_link_hash_table_free (obfd);
4603 /* Create an mn10300 ELF linker hash table. */
4605 static struct bfd_link_hash_table *
4606 elf32_mn10300_link_hash_table_create (bfd *abfd)
4608 struct elf32_mn10300_link_hash_table *ret;
4609 bfd_size_type amt = sizeof (* ret);
4611 ret = bfd_zmalloc (amt);
4615 amt = sizeof (struct elf_link_hash_table);
4616 ret->static_hash_table = bfd_zmalloc (amt);
4617 if (ret->static_hash_table == NULL)
4623 if (!_bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
4624 elf32_mn10300_link_hash_newfunc,
4625 sizeof (struct elf32_mn10300_link_hash_entry),
4628 free (ret->static_hash_table);
4633 abfd->is_linker_output = FALSE;
4634 abfd->link.hash = NULL;
4635 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
4636 elf32_mn10300_link_hash_newfunc,
4637 sizeof (struct elf32_mn10300_link_hash_entry),
4640 abfd->is_linker_output = TRUE;
4641 abfd->link.hash = &ret->static_hash_table->root.root;
4642 _bfd_elf_link_hash_table_free (abfd);
4646 ret->root.root.hash_table_free = elf32_mn10300_link_hash_table_free;
4648 ret->tls_ldm_got.offset = -1;
4650 return & ret->root.root;
4653 static unsigned long
4654 elf_mn10300_mach (flagword flags)
4656 switch (flags & EF_MN10300_MACH)
4658 case E_MN10300_MACH_MN10300:
4660 return bfd_mach_mn10300;
4662 case E_MN10300_MACH_AM33:
4663 return bfd_mach_am33;
4665 case E_MN10300_MACH_AM33_2:
4666 return bfd_mach_am33_2;
4670 /* The final processing done just before writing out a MN10300 ELF object
4671 file. This gets the MN10300 architecture right based on the machine
4675 _bfd_mn10300_elf_final_write_processing (bfd *abfd,
4676 bfd_boolean linker ATTRIBUTE_UNUSED)
4680 switch (bfd_get_mach (abfd))
4683 case bfd_mach_mn10300:
4684 val = E_MN10300_MACH_MN10300;
4688 val = E_MN10300_MACH_AM33;
4691 case bfd_mach_am33_2:
4692 val = E_MN10300_MACH_AM33_2;
4696 elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
4697 elf_elfheader (abfd)->e_flags |= val;
4701 _bfd_mn10300_elf_object_p (bfd *abfd)
4703 bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
4704 elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
4708 /* Merge backend specific data from an object file to the output
4709 object file when linking. */
4712 _bfd_mn10300_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
4714 bfd *obfd = info->output_bfd;
4716 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4717 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4720 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
4721 && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
4723 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
4724 bfd_get_mach (ibfd)))
4731 #define PLT0_ENTRY_SIZE 15
4732 #define PLT_ENTRY_SIZE 20
4733 #define PIC_PLT_ENTRY_SIZE 24
4735 static const bfd_byte elf_mn10300_plt0_entry[PLT0_ENTRY_SIZE] =
4737 0xfc, 0xa0, 0, 0, 0, 0, /* mov (.got+8),a0 */
4738 0xfe, 0xe, 0x10, 0, 0, 0, 0, /* mov (.got+4),r1 */
4739 0xf0, 0xf4, /* jmp (a0) */
4742 static const bfd_byte elf_mn10300_plt_entry[PLT_ENTRY_SIZE] =
4744 0xfc, 0xa0, 0, 0, 0, 0, /* mov (nameN@GOT + .got),a0 */
4745 0xf0, 0xf4, /* jmp (a0) */
4746 0xfe, 8, 0, 0, 0, 0, 0, /* mov reloc-table-address,r0 */
4747 0xdc, 0, 0, 0, 0, /* jmp .plt0 */
4750 static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] =
4752 0xfc, 0x22, 0, 0, 0, 0, /* mov (nameN@GOT,a2),a0 */
4753 0xf0, 0xf4, /* jmp (a0) */
4754 0xfe, 8, 0, 0, 0, 0, 0, /* mov reloc-table-address,r0 */
4755 0xf8, 0x22, 8, /* mov (8,a2),a0 */
4756 0xfb, 0xa, 0x1a, 4, /* mov (4,a2),r1 */
4757 0xf0, 0xf4, /* jmp (a0) */
4760 /* Return size of the first PLT entry. */
4761 #define elf_mn10300_sizeof_plt0(info) \
4762 (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE)
4764 /* Return size of a PLT entry. */
4765 #define elf_mn10300_sizeof_plt(info) \
4766 (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE)
4768 /* Return offset of the PLT0 address in an absolute PLT entry. */
4769 #define elf_mn10300_plt_plt0_offset(info) 16
4771 /* Return offset of the linker in PLT0 entry. */
4772 #define elf_mn10300_plt0_linker_offset(info) 2
4774 /* Return offset of the GOT id in PLT0 entry. */
4775 #define elf_mn10300_plt0_gotid_offset(info) 9
4777 /* Return offset of the temporary in PLT entry. */
4778 #define elf_mn10300_plt_temp_offset(info) 8
4780 /* Return offset of the symbol in PLT entry. */
4781 #define elf_mn10300_plt_symbol_offset(info) 2
4783 /* Return offset of the relocation in PLT entry. */
4784 #define elf_mn10300_plt_reloc_offset(info) 11
4786 /* The name of the dynamic interpreter. This is put in the .interp
4789 #define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
4791 /* Create dynamic sections when linking against a dynamic object. */
4794 _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
4798 const struct elf_backend_data * bed = get_elf_backend_data (abfd);
4799 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
4802 switch (bed->s->arch_size)
4813 bfd_set_error (bfd_error_bad_value);
4817 /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
4818 .rel[a].bss sections. */
4819 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4820 | SEC_LINKER_CREATED);
4822 s = bfd_make_section_anyway_with_flags (abfd,
4823 (bed->default_use_rela_p
4824 ? ".rela.plt" : ".rel.plt"),
4825 flags | SEC_READONLY);
4826 htab->root.srelplt = s;
4828 || ! bfd_set_section_alignment (abfd, s, ptralign))
4831 if (! _bfd_mn10300_elf_create_got_section (abfd, info))
4834 if (bed->want_dynbss)
4836 /* The .dynbss section is a place to put symbols which are defined
4837 by dynamic objects, are referenced by regular objects, and are
4838 not functions. We must allocate space for them in the process
4839 image and use a R_*_COPY reloc to tell the dynamic linker to
4840 initialize them at run time. The linker script puts the .dynbss
4841 section into the .bss section of the final image. */
4842 s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
4843 SEC_ALLOC | SEC_LINKER_CREATED);
4847 /* The .rel[a].bss section holds copy relocs. This section is not
4848 normally needed. We need to create it here, though, so that the
4849 linker will map it to an output section. We can't just create it
4850 only if we need it, because we will not know whether we need it
4851 until we have seen all the input files, and the first time the
4852 main linker code calls BFD after examining all the input files
4853 (size_dynamic_sections) the input sections have already been
4854 mapped to the output sections. If the section turns out not to
4855 be needed, we can discard it later. We will never need this
4856 section when generating a shared object, since they do not use
4858 if (! bfd_link_pic (info))
4860 s = bfd_make_section_anyway_with_flags (abfd,
4861 (bed->default_use_rela_p
4862 ? ".rela.bss" : ".rel.bss"),
4863 flags | SEC_READONLY);
4865 || ! bfd_set_section_alignment (abfd, s, ptralign))
4873 /* Adjust a symbol defined by a dynamic object and referenced by a
4874 regular object. The current definition is in some section of the
4875 dynamic object, but we're not including those sections. We have to
4876 change the definition to something the rest of the link can
4880 _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
4881 struct elf_link_hash_entry * h)
4883 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
4887 dynobj = htab->root.dynobj;
4889 /* Make sure we know what is going on here. */
4890 BFD_ASSERT (dynobj != NULL
4892 || h->u.weakdef != NULL
4895 && !h->def_regular)));
4897 /* If this is a function, put it in the procedure linkage table. We
4898 will fill in the contents of the procedure linkage table later,
4899 when we know the address of the .got section. */
4900 if (h->type == STT_FUNC
4903 if (! bfd_link_pic (info)
4907 /* This case can occur if we saw a PLT reloc in an input
4908 file, but the symbol was never referred to by a dynamic
4909 object. In such a case, we don't actually need to build
4910 a procedure linkage table, and we can just do a REL32
4912 BFD_ASSERT (h->needs_plt);
4916 /* Make sure this symbol is output as a dynamic symbol. */
4917 if (h->dynindx == -1)
4919 if (! bfd_elf_link_record_dynamic_symbol (info, h))
4923 s = htab->root.splt;
4924 BFD_ASSERT (s != NULL);
4926 /* If this is the first .plt entry, make room for the special
4929 s->size += elf_mn10300_sizeof_plt0 (info);
4931 /* If this symbol is not defined in a regular file, and we are
4932 not generating a shared library, then set the symbol to this
4933 location in the .plt. This is required to make function
4934 pointers compare as equal between the normal executable and
4935 the shared library. */
4936 if (! bfd_link_pic (info)
4939 h->root.u.def.section = s;
4940 h->root.u.def.value = s->size;
4943 h->plt.offset = s->size;
4945 /* Make room for this entry. */
4946 s->size += elf_mn10300_sizeof_plt (info);
4948 /* We also need to make an entry in the .got.plt section, which
4949 will be placed in the .got section by the linker script. */
4950 s = htab->root.sgotplt;
4951 BFD_ASSERT (s != NULL);
4954 /* We also need to make an entry in the .rela.plt section. */
4955 s = htab->root.srelplt;
4956 BFD_ASSERT (s != NULL);
4957 s->size += sizeof (Elf32_External_Rela);
4962 /* If this is a weak symbol, and there is a real definition, the
4963 processor independent code will have arranged for us to see the
4964 real definition first, and we can just use the same value. */
4965 if (h->u.weakdef != NULL)
4967 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
4968 || h->u.weakdef->root.type == bfd_link_hash_defweak);
4969 h->root.u.def.section = h->u.weakdef->root.u.def.section;
4970 h->root.u.def.value = h->u.weakdef->root.u.def.value;
4974 /* This is a reference to a symbol defined by a dynamic object which
4975 is not a function. */
4977 /* If we are creating a shared library, we must presume that the
4978 only references to the symbol are via the global offset table.
4979 For such cases we need not do anything here; the relocations will
4980 be handled correctly by relocate_section. */
4981 if (bfd_link_pic (info))
4984 /* If there are no references to this symbol that do not use the
4985 GOT, we don't need to generate a copy reloc. */
4986 if (!h->non_got_ref)
4989 /* We must allocate the symbol in our .dynbss section, which will
4990 become part of the .bss section of the executable. There will be
4991 an entry for this symbol in the .dynsym section. The dynamic
4992 object will contain position independent code, so all references
4993 from the dynamic object to this symbol will go through the global
4994 offset table. The dynamic linker will use the .dynsym entry to
4995 determine the address it must put in the global offset table, so
4996 both the dynamic object and the regular object will refer to the
4997 same memory location for the variable. */
4999 s = bfd_get_linker_section (dynobj, ".dynbss");
5000 BFD_ASSERT (s != NULL);
5002 /* We must generate a R_MN10300_COPY reloc to tell the dynamic linker to
5003 copy the initial value out of the dynamic object and into the
5004 runtime process image. We need to remember the offset into the
5005 .rela.bss section we are going to use. */
5006 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
5010 srel = bfd_get_linker_section (dynobj, ".rela.bss");
5011 BFD_ASSERT (srel != NULL);
5012 srel->size += sizeof (Elf32_External_Rela);
5016 return _bfd_elf_adjust_dynamic_copy (info, h, s);
5019 /* Set the sizes of the dynamic sections. */
5022 _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
5023 struct bfd_link_info * info)
5025 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5030 bfd_boolean reltext;
5032 dynobj = htab->root.dynobj;
5033 BFD_ASSERT (dynobj != NULL);
5035 if (elf_hash_table (info)->dynamic_sections_created)
5037 /* Set the contents of the .interp section to the interpreter. */
5038 if (bfd_link_executable (info) && !info->nointerp)
5040 s = bfd_get_linker_section (dynobj, ".interp");
5041 BFD_ASSERT (s != NULL);
5042 s->size = sizeof ELF_DYNAMIC_INTERPRETER;
5043 s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
5048 /* We may have created entries in the .rela.got section.
5049 However, if we are not creating the dynamic sections, we will
5050 not actually use these entries. Reset the size of .rela.got,
5051 which will cause it to get stripped from the output file
5053 s = htab->root.sgot;
5058 if (htab->tls_ldm_got.refcount > 0)
5060 s = htab->root.srelgot;
5061 BFD_ASSERT (s != NULL);
5062 s->size += sizeof (Elf32_External_Rela);
5065 /* The check_relocs and adjust_dynamic_symbol entry points have
5066 determined the sizes of the various dynamic sections. Allocate
5071 for (s = dynobj->sections; s != NULL; s = s->next)
5075 if ((s->flags & SEC_LINKER_CREATED) == 0)
5078 /* It's OK to base decisions on the section name, because none
5079 of the dynobj section names depend upon the input files. */
5080 name = bfd_get_section_name (dynobj, s);
5082 if (streq (name, ".plt"))
5084 /* Remember whether there is a PLT. */
5087 else if (CONST_STRNEQ (name, ".rela"))
5093 /* Remember whether there are any reloc sections other
5095 if (! streq (name, ".rela.plt"))
5097 const char * outname;
5101 /* If this relocation section applies to a read only
5102 section, then we probably need a DT_TEXTREL
5103 entry. The entries in the .rela.plt section
5104 really apply to the .got section, which we
5105 created ourselves and so know is not readonly. */
5106 outname = bfd_get_section_name (output_bfd,
5108 target = bfd_get_section_by_name (output_bfd, outname + 5);
5110 && (target->flags & SEC_READONLY) != 0
5111 && (target->flags & SEC_ALLOC) != 0)
5115 /* We use the reloc_count field as a counter if we need
5116 to copy relocs into the output file. */
5120 else if (! CONST_STRNEQ (name, ".got")
5121 && ! streq (name, ".dynbss"))
5122 /* It's not one of our sections, so don't allocate space. */
5127 /* If we don't need this section, strip it from the
5128 output file. This is mostly to handle .rela.bss and
5129 .rela.plt. We must create both sections in
5130 create_dynamic_sections, because they must be created
5131 before the linker maps input sections to output
5132 sections. The linker does that before
5133 adjust_dynamic_symbol is called, and it is that
5134 function which decides whether anything needs to go
5135 into these sections. */
5136 s->flags |= SEC_EXCLUDE;
5140 if ((s->flags & SEC_HAS_CONTENTS) == 0)
5143 /* Allocate memory for the section contents. We use bfd_zalloc
5144 here in case unused entries are not reclaimed before the
5145 section's contents are written out. This should not happen,
5146 but this way if it does, we get a R_MN10300_NONE reloc
5147 instead of garbage. */
5148 s->contents = bfd_zalloc (dynobj, s->size);
5149 if (s->contents == NULL)
5153 if (elf_hash_table (info)->dynamic_sections_created)
5155 /* Add some entries to the .dynamic section. We fill in the
5156 values later, in _bfd_mn10300_elf_finish_dynamic_sections,
5157 but we must add the entries now so that we get the correct
5158 size for the .dynamic section. The DT_DEBUG entry is filled
5159 in by the dynamic linker and used by the debugger. */
5160 if (! bfd_link_pic (info))
5162 if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
5168 if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
5169 || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
5170 || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
5171 || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
5177 if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
5178 || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
5179 || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
5180 sizeof (Elf32_External_Rela)))
5186 if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
5194 /* Finish up dynamic symbol handling. We set the contents of various
5195 dynamic sections here. */
5198 _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
5199 struct bfd_link_info * info,
5200 struct elf_link_hash_entry * h,
5201 Elf_Internal_Sym * sym)
5203 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5206 dynobj = htab->root.dynobj;
5208 if (h->plt.offset != (bfd_vma) -1)
5215 Elf_Internal_Rela rel;
5217 /* This symbol has an entry in the procedure linkage table. Set
5220 BFD_ASSERT (h->dynindx != -1);
5222 splt = htab->root.splt;
5223 sgot = htab->root.sgotplt;
5224 srel = htab->root.srelplt;
5225 BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
5227 /* Get the index in the procedure linkage table which
5228 corresponds to this symbol. This is the index of this symbol
5229 in all the symbols for which we are making plt entries. The
5230 first entry in the procedure linkage table is reserved. */
5231 plt_index = ((h->plt.offset - elf_mn10300_sizeof_plt0 (info))
5232 / elf_mn10300_sizeof_plt (info));
5234 /* Get the offset into the .got table of the entry that
5235 corresponds to this function. Each .got entry is 4 bytes.
5236 The first three are reserved. */
5237 got_offset = (plt_index + 3) * 4;
5239 /* Fill in the entry in the procedure linkage table. */
5240 if (! bfd_link_pic (info))
5242 memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry,
5243 elf_mn10300_sizeof_plt (info));
5244 bfd_put_32 (output_bfd,
5245 (sgot->output_section->vma
5246 + sgot->output_offset
5248 (splt->contents + h->plt.offset
5249 + elf_mn10300_plt_symbol_offset (info)));
5251 bfd_put_32 (output_bfd,
5252 (1 - h->plt.offset - elf_mn10300_plt_plt0_offset (info)),
5253 (splt->contents + h->plt.offset
5254 + elf_mn10300_plt_plt0_offset (info)));
5258 memcpy (splt->contents + h->plt.offset, elf_mn10300_pic_plt_entry,
5259 elf_mn10300_sizeof_plt (info));
5261 bfd_put_32 (output_bfd, got_offset,
5262 (splt->contents + h->plt.offset
5263 + elf_mn10300_plt_symbol_offset (info)));
5266 bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
5267 (splt->contents + h->plt.offset
5268 + elf_mn10300_plt_reloc_offset (info)));
5270 /* Fill in the entry in the global offset table. */
5271 bfd_put_32 (output_bfd,
5272 (splt->output_section->vma
5273 + splt->output_offset
5275 + elf_mn10300_plt_temp_offset (info)),
5276 sgot->contents + got_offset);
5278 /* Fill in the entry in the .rela.plt section. */
5279 rel.r_offset = (sgot->output_section->vma
5280 + sgot->output_offset
5282 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_JMP_SLOT);
5284 bfd_elf32_swap_reloca_out (output_bfd, &rel,
5285 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5288 if (!h->def_regular)
5289 /* Mark the symbol as undefined, rather than as defined in
5290 the .plt section. Leave the value alone. */
5291 sym->st_shndx = SHN_UNDEF;
5294 if (h->got.offset != (bfd_vma) -1)
5298 Elf_Internal_Rela rel;
5300 /* This symbol has an entry in the global offset table. Set it up. */
5301 sgot = htab->root.sgot;
5302 srel = htab->root.srelgot;
5303 BFD_ASSERT (sgot != NULL && srel != NULL);
5305 rel.r_offset = (sgot->output_section->vma
5306 + sgot->output_offset
5307 + (h->got.offset & ~1));
5309 switch (elf_mn10300_hash_entry (h)->tls_type)
5312 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5313 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset + 4);
5314 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPMOD);
5316 bfd_elf32_swap_reloca_out (output_bfd, & rel,
5317 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5318 + srel->reloc_count));
5319 ++ srel->reloc_count;
5320 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPOFF);
5326 /* We originally stored the addend in the GOT, but at this
5327 point, we want to move it to the reloc instead as that's
5328 where the dynamic linker wants it. */
5329 rel.r_addend = bfd_get_32 (output_bfd, sgot->contents + h->got.offset);
5330 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5331 if (h->dynindx == -1)
5332 rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
5334 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_TPOFF);
5338 /* If this is a -Bsymbolic link, and the symbol is defined
5339 locally, we just want to emit a RELATIVE reloc. Likewise if
5340 the symbol was forced to be local because of a version file.
5341 The entry in the global offset table will already have been
5342 initialized in the relocate_section function. */
5343 if (bfd_link_pic (info)
5344 && (info->symbolic || h->dynindx == -1)
5347 rel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
5348 rel.r_addend = (h->root.u.def.value
5349 + h->root.u.def.section->output_section->vma
5350 + h->root.u.def.section->output_offset);
5354 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
5355 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_GLOB_DAT);
5360 if (ELF32_R_TYPE (rel.r_info) != R_MN10300_NONE)
5362 bfd_elf32_swap_reloca_out (output_bfd, &rel,
5363 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
5364 + srel->reloc_count));
5365 ++ srel->reloc_count;
5372 Elf_Internal_Rela rel;
5374 /* This symbol needs a copy reloc. Set it up. */
5375 BFD_ASSERT (h->dynindx != -1
5376 && (h->root.type == bfd_link_hash_defined
5377 || h->root.type == bfd_link_hash_defweak));
5379 s = bfd_get_linker_section (dynobj, ".rela.bss");
5380 BFD_ASSERT (s != NULL);
5382 rel.r_offset = (h->root.u.def.value
5383 + h->root.u.def.section->output_section->vma
5384 + h->root.u.def.section->output_offset);
5385 rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_COPY);
5387 bfd_elf32_swap_reloca_out (output_bfd, & rel,
5388 (bfd_byte *) ((Elf32_External_Rela *) s->contents
5393 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
5394 if (h == elf_hash_table (info)->hdynamic
5395 || h == elf_hash_table (info)->hgot)
5396 sym->st_shndx = SHN_ABS;
5401 /* Finish up the dynamic sections. */
5404 _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
5405 struct bfd_link_info * info)
5410 struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
5412 dynobj = htab->root.dynobj;
5413 sgot = htab->root.sgotplt;
5414 BFD_ASSERT (sgot != NULL);
5415 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
5417 if (elf_hash_table (info)->dynamic_sections_created)
5420 Elf32_External_Dyn * dyncon;
5421 Elf32_External_Dyn * dynconend;
5423 BFD_ASSERT (sdyn != NULL);
5425 dyncon = (Elf32_External_Dyn *) sdyn->contents;
5426 dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
5428 for (; dyncon < dynconend; dyncon++)
5430 Elf_Internal_Dyn dyn;
5433 bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
5441 s = htab->root.sgot;
5445 s = htab->root.srelplt;
5447 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
5448 bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5452 s = htab->root.srelplt;
5453 dyn.d_un.d_val = s->size;
5454 bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
5459 /* Fill in the first entry in the procedure linkage table. */
5460 splt = htab->root.splt;
5461 if (splt && splt->size > 0)
5463 if (bfd_link_pic (info))
5465 memcpy (splt->contents, elf_mn10300_pic_plt_entry,
5466 elf_mn10300_sizeof_plt (info));
5470 memcpy (splt->contents, elf_mn10300_plt0_entry, PLT0_ENTRY_SIZE);
5471 bfd_put_32 (output_bfd,
5472 sgot->output_section->vma + sgot->output_offset + 4,
5473 splt->contents + elf_mn10300_plt0_gotid_offset (info));
5474 bfd_put_32 (output_bfd,
5475 sgot->output_section->vma + sgot->output_offset + 8,
5476 splt->contents + elf_mn10300_plt0_linker_offset (info));
5479 /* UnixWare sets the entsize of .plt to 4, although that doesn't
5480 really seem like the right value. */
5481 elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
5483 /* UnixWare sets the entsize of .plt to 4, but this is incorrect
5484 as it means that the size of the PLT0 section (15 bytes) is not
5485 a multiple of the sh_entsize. Some ELF tools flag this as an
5486 error. We could pad PLT0 to 16 bytes, but that would introduce
5487 compatibilty issues with previous toolchains, so instead we
5488 just set the entry size to 1. */
5489 elf_section_data (splt->output_section)->this_hdr.sh_entsize = 1;
5493 /* Fill in the first three entries in the global offset table. */
5497 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
5499 bfd_put_32 (output_bfd,
5500 sdyn->output_section->vma + sdyn->output_offset,
5502 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
5503 bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
5506 elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
5511 /* Classify relocation types, such that combreloc can sort them
5514 static enum elf_reloc_type_class
5515 _bfd_mn10300_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
5516 const asection *rel_sec ATTRIBUTE_UNUSED,
5517 const Elf_Internal_Rela *rela)
5519 switch ((int) ELF32_R_TYPE (rela->r_info))
5521 case R_MN10300_RELATIVE: return reloc_class_relative;
5522 case R_MN10300_JMP_SLOT: return reloc_class_plt;
5523 case R_MN10300_COPY: return reloc_class_copy;
5524 default: return reloc_class_normal;
5528 /* Allocate space for an MN10300 extension to the bfd elf data structure. */
5531 mn10300_elf_mkobject (bfd *abfd)
5533 return bfd_elf_allocate_object (abfd, sizeof (struct elf_mn10300_obj_tdata),
5537 #define bfd_elf32_mkobject mn10300_elf_mkobject
5540 #define TARGET_LITTLE_SYM mn10300_elf32_vec
5541 #define TARGET_LITTLE_NAME "elf32-mn10300"
5542 #define ELF_ARCH bfd_arch_mn10300
5543 #define ELF_TARGET_ID MN10300_ELF_DATA
5544 #define ELF_MACHINE_CODE EM_MN10300
5545 #define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300
5546 #define ELF_MAXPAGESIZE 0x1000
5549 #define elf_info_to_howto mn10300_info_to_howto
5550 #define elf_info_to_howto_rel 0
5551 #define elf_backend_can_gc_sections 1
5552 #define elf_backend_rela_normal 1
5553 #define elf_backend_check_relocs mn10300_elf_check_relocs
5554 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
5555 #define elf_backend_relocate_section mn10300_elf_relocate_section
5556 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
5557 #define bfd_elf32_bfd_get_relocated_section_contents \
5558 mn10300_elf_get_relocated_section_contents
5559 #define bfd_elf32_bfd_link_hash_table_create \
5560 elf32_mn10300_link_hash_table_create
5562 #ifndef elf_symbol_leading_char
5563 #define elf_symbol_leading_char '_'
5566 /* So we can set bits in e_flags. */
5567 #define elf_backend_final_write_processing \
5568 _bfd_mn10300_elf_final_write_processing
5569 #define elf_backend_object_p _bfd_mn10300_elf_object_p
5571 #define bfd_elf32_bfd_merge_private_bfd_data \
5572 _bfd_mn10300_elf_merge_private_bfd_data
5574 #define elf_backend_can_gc_sections 1
5575 #define elf_backend_create_dynamic_sections \
5576 _bfd_mn10300_elf_create_dynamic_sections
5577 #define elf_backend_adjust_dynamic_symbol \
5578 _bfd_mn10300_elf_adjust_dynamic_symbol
5579 #define elf_backend_size_dynamic_sections \
5580 _bfd_mn10300_elf_size_dynamic_sections
5581 #define elf_backend_omit_section_dynsym \
5582 ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
5583 #define elf_backend_finish_dynamic_symbol \
5584 _bfd_mn10300_elf_finish_dynamic_symbol
5585 #define elf_backend_finish_dynamic_sections \
5586 _bfd_mn10300_elf_finish_dynamic_sections
5587 #define elf_backend_copy_indirect_symbol \
5588 _bfd_mn10300_copy_indirect_symbol
5589 #define elf_backend_reloc_type_class \
5590 _bfd_mn10300_elf_reloc_type_class
5592 #define elf_backend_want_got_plt 1
5593 #define elf_backend_plt_readonly 1
5594 #define elf_backend_want_plt_sym 0
5595 #define elf_backend_got_header_size 12
5596 #define elf_backend_dtrel_excludes_plt 1
5598 #include "elf32-target.h"