1 /* Matsushita 10300 specific support for 32-bit ELF
2 Copyright (C) 1996, 1997, 1998 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
24 #include "elf/mn10300.h"
26 struct elf32_mn10300_link_hash_entry
28 /* The basic elf link hash table entry. */
29 struct elf_link_hash_entry root
;
31 /* For function symbols, the number of times this function is
32 called directly (ie by name). */
33 unsigned int direct_calls
;
35 /* For function symbols, the size of this function's stack
36 (if <= 255 bytes). We stuff this into "call" instructions
37 to this target when it's valid and profitable to do so.
39 This does not include stack allocated by movm! */
40 unsigned char stack_size
;
42 /* For function symbols, arguments (if any) for movm instruction
43 in the prologue. We stuff this value into "call" instructions
44 to the target when it's valid and profitable to do so. */
45 unsigned char movm_args
;
47 /* For funtion symbols, the amount of stack space that would be allocated
48 by the movm instruction. This is redundant with movm_args, but we
49 add it to the hash table to avoid computing it over and over. */
50 unsigned char movm_stack_size
;
52 /* When set, convert all "call" instructions to this target into "calls"
54 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
56 /* Used to mark functions which have had redundant parts of their
58 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
62 /* We derive a hash table from the main elf linker hash table so
63 we can store state variables and a secondary hash table without
64 resorting to global variables. */
65 struct elf32_mn10300_link_hash_table
67 /* The main hash table. */
68 struct elf_link_hash_table root
;
70 /* A hash table for static functions. We could derive a new hash table
71 instead of using the full elf32_mn10300_link_hash_table if we wanted
72 to save some memory. */
73 struct elf32_mn10300_link_hash_table
*static_hash_table
;
75 /* Random linker state flags. */
76 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
80 /* For MN10300 linker hash table. */
82 /* Get the MN10300 ELF linker hash table from a link_info structure. */
84 #define elf32_mn10300_hash_table(p) \
85 ((struct elf32_mn10300_link_hash_table *) ((p)->hash))
87 #define elf32_mn10300_link_hash_traverse(table, func, info) \
88 (elf_link_hash_traverse \
90 (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
93 static struct bfd_hash_entry
*elf32_mn10300_link_hash_newfunc
94 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
95 static struct bfd_link_hash_table
*elf32_mn10300_link_hash_table_create
98 static reloc_howto_type
*bfd_elf32_bfd_reloc_type_lookup
99 PARAMS ((bfd
*abfd
, bfd_reloc_code_real_type code
));
100 static void mn10300_info_to_howto
101 PARAMS ((bfd
*, arelent
*, Elf32_Internal_Rela
*));
102 static boolean mn10300_elf_check_relocs
103 PARAMS ((bfd
*, struct bfd_link_info
*, asection
*,
104 const Elf_Internal_Rela
*));
105 static asection
*mn10300_elf_gc_mark_hook
106 PARAMS ((bfd
*, struct bfd_link_info
*info
, Elf_Internal_Rela
*,
107 struct elf_link_hash_entry
*, Elf_Internal_Sym
*));
108 static boolean mn10300_elf_relax_delete_bytes
109 PARAMS ((bfd
*, asection
*, bfd_vma
, int));
110 static boolean mn10300_elf_symbol_address_p
111 PARAMS ((bfd
*, asection
*, Elf32_External_Sym
*, bfd_vma
));
112 static boolean elf32_mn10300_finish_hash_table_entry
113 PARAMS ((struct bfd_hash_entry
*, PTR
));
114 static void compute_function_info
115 PARAMS ((bfd
*, struct elf32_mn10300_link_hash_entry
*,
116 bfd_vma
, unsigned char *));
118 /* We have to use RELA instructions since md_apply_fix3 in the assembler
119 does absolutely nothing. */
123 static reloc_howto_type elf_mn10300_howto_table
[] =
125 /* Dummy relocation. Does nothing. */
126 HOWTO (R_MN10300_NONE
,
132 complain_overflow_bitfield
,
133 bfd_elf_generic_reloc
,
139 /* Standard 32 bit reloc. */
146 complain_overflow_bitfield
,
147 bfd_elf_generic_reloc
,
153 /* Standard 16 bit reloc. */
160 complain_overflow_bitfield
,
161 bfd_elf_generic_reloc
,
167 /* Standard 8 bit reloc. */
174 complain_overflow_bitfield
,
175 bfd_elf_generic_reloc
,
181 /* Standard 32bit pc-relative reloc. */
182 HOWTO (R_MN10300_PCREL32
,
188 complain_overflow_bitfield
,
189 bfd_elf_generic_reloc
,
195 /* Standard 16bit pc-relative reloc. */
196 HOWTO (R_MN10300_PCREL16
,
202 complain_overflow_bitfield
,
203 bfd_elf_generic_reloc
,
209 /* Standard 8 pc-relative reloc. */
210 HOWTO (R_MN10300_PCREL8
,
216 complain_overflow_bitfield
,
217 bfd_elf_generic_reloc
,
224 /* GNU extension to record C++ vtable hierarchy */
225 HOWTO (R_MN10300_GNU_VTINHERIT
, /* type */
227 0, /* size (0 = byte, 1 = short, 2 = long) */
229 false, /* pc_relative */
231 complain_overflow_dont
, /* complain_on_overflow */
232 NULL
, /* special_function */
233 "R_MN10300_GNU_VTINHERIT", /* name */
234 false, /* partial_inplace */
237 false), /* pcrel_offset */
239 /* GNU extension to record C++ vtable member usage */
240 HOWTO (R_MN10300_GNU_VTENTRY
, /* type */
242 0, /* size (0 = byte, 1 = short, 2 = long) */
244 false, /* pc_relative */
246 complain_overflow_dont
, /* complain_on_overflow */
247 NULL
, /* special_function */
248 "R_MN10300_GNU_VTENTRY", /* name */
249 false, /* partial_inplace */
252 false), /* pcrel_offset */
254 /* Standard 24 bit reloc. */
261 complain_overflow_bitfield
,
262 bfd_elf_generic_reloc
,
271 struct mn10300_reloc_map
273 unsigned char bfd_reloc_val
;
274 unsigned char elf_reloc_val
;
277 static const struct mn10300_reloc_map mn10300_reloc_map
[] =
279 { BFD_RELOC_NONE
, R_MN10300_NONE
, },
280 { BFD_RELOC_32
, R_MN10300_32
, },
281 { BFD_RELOC_16
, R_MN10300_16
, },
282 { BFD_RELOC_8
, R_MN10300_8
, },
283 { BFD_RELOC_32_PCREL
, R_MN10300_PCREL32
, },
284 { BFD_RELOC_16_PCREL
, R_MN10300_PCREL16
, },
285 { BFD_RELOC_8_PCREL
, R_MN10300_PCREL8
, },
286 { BFD_RELOC_24
, R_MN10300_24
, },
287 { BFD_RELOC_VTABLE_INHERIT
, R_MN10300_GNU_VTINHERIT
},
288 { BFD_RELOC_VTABLE_ENTRY
, R_MN10300_GNU_VTENTRY
},
291 static reloc_howto_type
*
292 bfd_elf32_bfd_reloc_type_lookup (abfd
, code
)
294 bfd_reloc_code_real_type code
;
299 i
< sizeof (mn10300_reloc_map
) / sizeof (struct mn10300_reloc_map
);
302 if (mn10300_reloc_map
[i
].bfd_reloc_val
== code
)
303 return &elf_mn10300_howto_table
[mn10300_reloc_map
[i
].elf_reloc_val
];
309 /* Set the howto pointer for an MN10300 ELF reloc. */
312 mn10300_info_to_howto (abfd
, cache_ptr
, dst
)
315 Elf32_Internal_Rela
*dst
;
319 r_type
= ELF32_R_TYPE (dst
->r_info
);
320 BFD_ASSERT (r_type
< (unsigned int) R_MN10300_MAX
);
321 cache_ptr
->howto
= &elf_mn10300_howto_table
[r_type
];
324 /* Look through the relocs for a section during the first phase.
325 Since we don't do .gots or .plts, we just need to consider the
326 virtual table relocs for gc. */
329 mn10300_elf_check_relocs (abfd
, info
, sec
, relocs
)
331 struct bfd_link_info
*info
;
333 const Elf_Internal_Rela
*relocs
;
335 Elf_Internal_Shdr
*symtab_hdr
;
336 struct elf_link_hash_entry
**sym_hashes
, **sym_hashes_end
;
337 const Elf_Internal_Rela
*rel
;
338 const Elf_Internal_Rela
*rel_end
;
340 if (info
->relocateable
)
343 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
344 sym_hashes
= elf_sym_hashes (abfd
);
345 sym_hashes_end
= sym_hashes
+ symtab_hdr
->sh_size
/sizeof(Elf32_External_Sym
);
346 if (!elf_bad_symtab (abfd
))
347 sym_hashes_end
-= symtab_hdr
->sh_info
;
349 rel_end
= relocs
+ sec
->reloc_count
;
350 for (rel
= relocs
; rel
< rel_end
; rel
++)
352 struct elf_link_hash_entry
*h
;
353 unsigned long r_symndx
;
355 r_symndx
= ELF32_R_SYM (rel
->r_info
);
356 if (r_symndx
< symtab_hdr
->sh_info
)
359 h
= sym_hashes
[r_symndx
- symtab_hdr
->sh_info
];
361 switch (ELF32_R_TYPE (rel
->r_info
))
363 /* This relocation describes the C++ object vtable hierarchy.
364 Reconstruct it for later use during GC. */
365 case R_MN10300_GNU_VTINHERIT
:
366 if (!_bfd_elf32_gc_record_vtinherit (abfd
, sec
, h
, rel
->r_offset
))
370 /* This relocation describes which C++ vtable entries are actually
371 used. Record for later use during GC. */
372 case R_MN10300_GNU_VTENTRY
:
373 if (!_bfd_elf32_gc_record_vtentry (abfd
, sec
, h
, rel
->r_addend
))
382 /* Return the section that should be marked against GC for a given
386 mn10300_elf_gc_mark_hook (abfd
, info
, rel
, h
, sym
)
388 struct bfd_link_info
*info
;
389 Elf_Internal_Rela
*rel
;
390 struct elf_link_hash_entry
*h
;
391 Elf_Internal_Sym
*sym
;
395 switch (ELF32_R_TYPE (rel
->r_info
))
397 case R_MN10300_GNU_VTINHERIT
:
398 case R_MN10300_GNU_VTENTRY
:
402 switch (h
->root
.type
)
404 case bfd_link_hash_defined
:
405 case bfd_link_hash_defweak
:
406 return h
->root
.u
.def
.section
;
408 case bfd_link_hash_common
:
409 return h
->root
.u
.c
.p
->section
;
415 if (!(elf_bad_symtab (abfd
)
416 && ELF_ST_BIND (sym
->st_info
) != STB_LOCAL
)
417 && ! ((sym
->st_shndx
<= 0 || sym
->st_shndx
>= SHN_LORESERVE
)
418 && sym
->st_shndx
!= SHN_COMMON
))
420 return bfd_section_from_elf_index (abfd
, sym
->st_shndx
);
427 /* Perform a relocation as part of a final link. */
428 static bfd_reloc_status_type
429 mn10300_elf_final_link_relocate (howto
, input_bfd
, output_bfd
,
430 input_section
, contents
, offset
, value
,
431 addend
, info
, sym_sec
, is_local
)
432 reloc_howto_type
*howto
;
435 asection
*input_section
;
440 struct bfd_link_info
*info
;
444 unsigned long r_type
= howto
->type
;
445 bfd_byte
*hit_data
= contents
+ offset
;
454 bfd_put_32 (input_bfd
, value
, hit_data
);
460 if ((long)value
> 0x7fffff || (long)value
< -0x800000)
461 return bfd_reloc_overflow
;
463 bfd_put_8 (input_bfd
, value
& 0xff, hit_data
);
464 bfd_put_8 (input_bfd
, (value
>> 8) & 0xff, hit_data
+ 1);
465 bfd_put_8 (input_bfd
, (value
>> 16) & 0xff, hit_data
+ 2);
471 if ((long)value
> 0x7fff || (long)value
< -0x8000)
472 return bfd_reloc_overflow
;
474 bfd_put_16 (input_bfd
, value
, hit_data
);
480 if ((long)value
> 0x7f || (long)value
< -0x80)
481 return bfd_reloc_overflow
;
483 bfd_put_8 (input_bfd
, value
, hit_data
);
486 case R_MN10300_PCREL8
:
487 value
-= (input_section
->output_section
->vma
488 + input_section
->output_offset
);
492 if ((long)value
> 0xff || (long)value
< -0x100)
493 return bfd_reloc_overflow
;
495 bfd_put_8 (input_bfd
, value
, hit_data
);
498 case R_MN10300_PCREL16
:
499 value
-= (input_section
->output_section
->vma
500 + input_section
->output_offset
);
504 if ((long)value
> 0xffff || (long)value
< -0x10000)
505 return bfd_reloc_overflow
;
507 bfd_put_16 (input_bfd
, value
, hit_data
);
510 case R_MN10300_PCREL32
:
511 value
-= (input_section
->output_section
->vma
512 + input_section
->output_offset
);
516 bfd_put_32 (input_bfd
, value
, hit_data
);
519 case R_MN10300_GNU_VTINHERIT
:
520 case R_MN10300_GNU_VTENTRY
:
524 return bfd_reloc_notsupported
;
529 /* Relocate an MN10300 ELF section. */
531 mn10300_elf_relocate_section (output_bfd
, info
, input_bfd
, input_section
,
532 contents
, relocs
, local_syms
, local_sections
)
534 struct bfd_link_info
*info
;
536 asection
*input_section
;
538 Elf_Internal_Rela
*relocs
;
539 Elf_Internal_Sym
*local_syms
;
540 asection
**local_sections
;
542 Elf_Internal_Shdr
*symtab_hdr
;
543 struct elf32_mn10300_link_hash_entry
**sym_hashes
;
544 Elf_Internal_Rela
*rel
, *relend
;
546 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
547 sym_hashes
= (struct elf32_mn10300_link_hash_entry
**)
548 (elf_sym_hashes (input_bfd
));
551 relend
= relocs
+ input_section
->reloc_count
;
552 for (; rel
< relend
; rel
++)
555 reloc_howto_type
*howto
;
556 unsigned long r_symndx
;
557 Elf_Internal_Sym
*sym
;
559 struct elf32_mn10300_link_hash_entry
*h
;
561 bfd_reloc_status_type r
;
563 r_symndx
= ELF32_R_SYM (rel
->r_info
);
564 r_type
= ELF32_R_TYPE (rel
->r_info
);
565 howto
= elf_mn10300_howto_table
+ r_type
;
567 /* Just skip the vtable gc relocs. */
568 if (r_type
== R_MN10300_GNU_VTINHERIT
569 || r_type
== R_MN10300_GNU_VTENTRY
)
572 if (info
->relocateable
)
574 /* This is a relocateable link. We don't have to change
575 anything, unless the reloc is against a section symbol,
576 in which case we have to adjust according to where the
577 section symbol winds up in the output section. */
578 if (r_symndx
< symtab_hdr
->sh_info
)
580 sym
= local_syms
+ r_symndx
;
581 if (ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
)
583 sec
= local_sections
[r_symndx
];
584 rel
->r_addend
+= sec
->output_offset
+ sym
->st_value
;
591 /* This is a final link. */
595 if (r_symndx
< symtab_hdr
->sh_info
)
597 sym
= local_syms
+ r_symndx
;
598 sec
= local_sections
[r_symndx
];
599 relocation
= (sec
->output_section
->vma
605 h
= sym_hashes
[r_symndx
- symtab_hdr
->sh_info
];
606 while (h
->root
.type
== bfd_link_hash_indirect
607 || h
->root
.type
== bfd_link_hash_warning
)
608 h
= (struct elf32_mn10300_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
609 if (h
->root
.root
.type
== bfd_link_hash_defined
610 || h
->root
.root
.type
== bfd_link_hash_defweak
)
612 sec
= h
->root
.root
.u
.def
.section
;
613 relocation
= (h
->root
.root
.u
.def
.value
614 + sec
->output_section
->vma
615 + sec
->output_offset
);
617 else if (h
->root
.root
.type
== bfd_link_hash_undefweak
)
621 if (! ((*info
->callbacks
->undefined_symbol
)
622 (info
, h
->root
.root
.root
.string
, input_bfd
,
623 input_section
, rel
->r_offset
)))
629 r
= mn10300_elf_final_link_relocate (howto
, input_bfd
, output_bfd
,
631 contents
, rel
->r_offset
,
632 relocation
, rel
->r_addend
,
633 info
, sec
, h
== NULL
);
635 if (r
!= bfd_reloc_ok
)
638 const char *msg
= (const char *)0;
641 name
= h
->root
.root
.root
.string
;
644 name
= (bfd_elf_string_from_elf_section
645 (input_bfd
, symtab_hdr
->sh_link
, sym
->st_name
));
646 if (name
== NULL
|| *name
== '\0')
647 name
= bfd_section_name (input_bfd
, sec
);
652 case bfd_reloc_overflow
:
653 if (! ((*info
->callbacks
->reloc_overflow
)
654 (info
, name
, howto
->name
, (bfd_vma
) 0,
655 input_bfd
, input_section
, rel
->r_offset
)))
659 case bfd_reloc_undefined
:
660 if (! ((*info
->callbacks
->undefined_symbol
)
661 (info
, name
, input_bfd
, input_section
,
666 case bfd_reloc_outofrange
:
667 msg
= _("internal error: out of range error");
670 case bfd_reloc_notsupported
:
671 msg
= _("internal error: unsupported relocation error");
674 case bfd_reloc_dangerous
:
675 msg
= _("internal error: dangerous error");
679 msg
= _("internal error: unknown error");
683 if (!((*info
->callbacks
->warning
)
684 (info
, msg
, name
, input_bfd
, input_section
,
695 /* Finish initializing one hash table entry. */
697 elf32_mn10300_finish_hash_table_entry (gen_entry
, in_args
)
698 struct bfd_hash_entry
*gen_entry
;
701 struct elf32_mn10300_link_hash_entry
*entry
;
702 unsigned int byte_count
= 0;
704 entry
= (struct elf32_mn10300_link_hash_entry
*)gen_entry
;
706 /* If we already know we want to convert "call" to "calls" for calls
707 to this symbol, then return now. */
708 if (entry
->flags
== MN10300_CONVERT_CALL_TO_CALLS
)
711 /* If there are no named calls to this symbol, or there's nothing we
712 can move from the function itself into the "call" instruction, then
713 note that all "call" instructions should be converted into "calls"
714 instructions and return. */
715 if (entry
->direct_calls
== 0
716 || (entry
->stack_size
== 0 && entry
->movm_args
== 0))
718 /* Make a note that we should convert "call" instructions to "calls"
719 instructions for calls to this symbol. */
720 entry
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
724 /* We may be able to move some instructions from the function itself into
725 the "call" instruction. Count how many bytes we might be able to
726 eliminate in the function itself. */
728 /* A movm instruction is two bytes. */
729 if (entry
->movm_args
)
732 /* Count the insn to allocate stack space too. */
733 if (entry
->stack_size
> 0 && entry
->stack_size
<= 128)
735 else if (entry
->stack_size
> 0 && entry
->stack_size
< 256)
738 /* If using "call" will result in larger code, then turn all
739 the associated "call" instructions into "calls" instrutions. */
740 if (byte_count
< entry
->direct_calls
)
741 entry
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
743 /* This routine never fails. */
747 /* This function handles relaxing for the mn10300.
749 There's quite a few relaxing opportunites available on the mn10300:
751 * calls:32 -> calls:16 2 bytes
752 * call:32 -> call:16 2 bytes
754 * call:32 -> calls:32 1 byte
755 * call:16 -> calls:16 1 byte
756 * These are done anytime using "calls" would result
757 in smaller code, or when necessary to preserve the
758 meaning of the program.
762 * In some circumstances we can move instructions
763 from a function prologue into a "call" instruction.
764 This is only done if the resulting code is no larger
765 than the original code.
768 * jmp:32 -> jmp:16 2 bytes
769 * jmp:16 -> bra:8 1 byte
771 * If the previous instruction is a conditional branch
772 around the jump/bra, we may be able to reverse its condition
773 and change its target to the jump's target. The jump/bra
774 can then be deleted. 2 bytes
776 * mov abs32 -> mov abs16 1 or 2 bytes
778 * Most instructions which accept imm32 can relax to imm16 1 or 2 bytes
779 - Most instructions which accept imm16 can relax to imm8 1 or 2 bytes
781 * Most instructions which accept d32 can relax to d16 1 or 2 bytes
782 - Most instructions which accept d16 can relax to d8 1 or 2 bytes
784 We don't handle imm16->imm8 or d16->d8 as they're very rare
785 and somewhat more difficult to support. */
788 mn10300_elf_relax_section (abfd
, sec
, link_info
, again
)
791 struct bfd_link_info
*link_info
;
794 Elf_Internal_Shdr
*symtab_hdr
;
795 Elf_Internal_Rela
*internal_relocs
= NULL
;
796 Elf_Internal_Rela
*free_relocs
= NULL
;
797 Elf_Internal_Rela
*irel
, *irelend
;
798 bfd_byte
*contents
= NULL
;
799 bfd_byte
*free_contents
= NULL
;
800 Elf32_External_Sym
*extsyms
= NULL
;
801 Elf32_External_Sym
*free_extsyms
= NULL
;
802 struct elf32_mn10300_link_hash_table
*hash_table
;
804 /* Assume nothing changes. */
807 /* We need a pointer to the mn10300 specific hash table. */
808 hash_table
= elf32_mn10300_hash_table (link_info
);
810 /* Initialize fields in each hash table entry the first time through. */
811 if ((hash_table
->flags
& MN10300_HASH_ENTRIES_INITIALIZED
) == 0)
815 /* Iterate over all the input bfds. */
816 for (input_bfd
= link_info
->input_bfds
;
818 input_bfd
= input_bfd
->link_next
)
822 /* We're going to need all the symbols for each bfd. */
823 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
825 /* Get cached copy if it exists. */
826 if (symtab_hdr
->contents
!= NULL
)
827 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
830 /* Go get them off disk. */
831 extsyms
= ((Elf32_External_Sym
*)
832 bfd_malloc (symtab_hdr
->sh_size
));
835 free_extsyms
= extsyms
;
836 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
837 || (bfd_read (extsyms
, 1, symtab_hdr
->sh_size
, input_bfd
)
838 != symtab_hdr
->sh_size
))
842 /* Iterate over each section in this bfd. */
843 for (section
= input_bfd
->sections
;
845 section
= section
->next
)
847 struct elf32_mn10300_link_hash_entry
*hash
;
848 Elf_Internal_Sym
*sym
;
850 const char *sym_name
;
852 Elf_Internal_Shdr
*hdr
;
854 /* Get cached copy of section contents if it exists. */
855 if (elf_section_data (section
)->this_hdr
.contents
!= NULL
)
856 contents
= elf_section_data (section
)->this_hdr
.contents
;
857 else if (section
->_raw_size
!= 0)
859 /* Go get them off disk. */
860 contents
= (bfd_byte
*)bfd_malloc (section
->_raw_size
);
861 if (contents
== NULL
)
863 free_contents
= contents
;
865 if (!bfd_get_section_contents (input_bfd
, section
,
866 contents
, (file_ptr
) 0,
873 free_contents
= NULL
;
876 /* If there aren't any relocs, then there's nothing to do. */
877 if ((section
->flags
& SEC_RELOC
) != 0
878 && section
->reloc_count
!= 0)
881 /* Get a copy of the native relocations. */
882 internal_relocs
= (_bfd_elf32_link_read_relocs
883 (input_bfd
, section
, (PTR
) NULL
,
884 (Elf_Internal_Rela
*) NULL
,
885 link_info
->keep_memory
));
886 if (internal_relocs
== NULL
)
888 if (! link_info
->keep_memory
)
889 free_relocs
= internal_relocs
;
891 /* Now examine each relocation. */
892 irel
= internal_relocs
;
893 irelend
= irel
+ section
->reloc_count
;
894 for (; irel
< irelend
; irel
++)
897 unsigned long r_index
;
900 r_type
= ELF32_R_TYPE (irel
->r_info
);
901 r_index
= ELF32_R_SYM (irel
->r_info
);
903 if (r_type
< 0 || r_type
>= (int)R_MN10300_MAX
)
906 /* We need the name and hash table entry of the target
912 if (r_index
< symtab_hdr
->sh_info
)
914 /* A local symbol. */
915 Elf_Internal_Sym isym
;
917 bfd_elf32_swap_symbol_in (input_bfd
,
918 extsyms
+ r_index
, &isym
);
920 if (isym
.st_shndx
== SHN_UNDEF
)
921 sym_sec
= bfd_und_section_ptr
;
922 else if (isym
.st_shndx
> 0
923 && isym
.st_shndx
< SHN_LORESERVE
)
925 = bfd_section_from_elf_index (input_bfd
,
927 else if (isym
.st_shndx
== SHN_ABS
)
928 sym_sec
= bfd_abs_section_ptr
;
929 else if (isym
.st_shndx
== SHN_COMMON
)
930 sym_sec
= bfd_com_section_ptr
;
932 sym_name
= bfd_elf_string_from_elf_section (input_bfd
,
936 /* If it isn't a function, then we don't care
938 if (r_index
< symtab_hdr
->sh_info
939 && ELF_ST_TYPE (isym
.st_info
) != STT_FUNC
)
942 /* Tack on an ID so we can uniquely identify this
943 local symbol in the global hash table. */
944 new_name
= alloca (strlen (sym_name
) + 10);
945 sprintf (new_name
, "%s_%08x", sym_name
, (int)sym_sec
);
948 hash
= (struct elf32_mn10300_link_hash_entry
*)
949 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
955 r_index
-= symtab_hdr
->sh_info
;
956 hash
= (struct elf32_mn10300_link_hash_entry
*)
957 elf_sym_hashes (input_bfd
)[r_index
];
960 /* If this is not a "call" instruction, then we
961 should convert "call" instructions to "calls"
963 code
= bfd_get_8 (input_bfd
,
964 contents
+ irel
->r_offset
- 1);
965 if (code
!= 0xdd && code
!= 0xcd)
966 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
968 /* If this is a jump/call, then bump the direct_calls
969 counter. Else force "call" to "calls" conversions. */
970 if (r_type
== R_MN10300_PCREL32
971 || r_type
== R_MN10300_PCREL16
)
972 hash
->direct_calls
++;
974 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
978 /* Now look at the actual contents to get the stack size,
979 and a list of what registers were saved in the prologue
981 if ((section
->flags
& SEC_CODE
) != 0)
984 Elf32_External_Sym
*esym
, *esymend
;
987 shndx
= _bfd_elf_section_from_bfd_section (input_bfd
,
991 /* Look at each function defined in this section and
992 update info for that function. */
994 esymend
= esym
+ symtab_hdr
->sh_info
;
995 for (; esym
< esymend
; esym
++)
997 Elf_Internal_Sym isym
;
999 bfd_elf32_swap_symbol_in (input_bfd
, esym
, &isym
);
1000 if (isym
.st_shndx
== shndx
1001 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
)
1003 if (isym
.st_shndx
== SHN_UNDEF
)
1004 sym_sec
= bfd_und_section_ptr
;
1005 else if (isym
.st_shndx
> 0
1006 && isym
.st_shndx
< SHN_LORESERVE
)
1008 = bfd_section_from_elf_index (input_bfd
,
1010 else if (isym
.st_shndx
== SHN_ABS
)
1011 sym_sec
= bfd_abs_section_ptr
;
1012 else if (isym
.st_shndx
== SHN_COMMON
)
1013 sym_sec
= bfd_com_section_ptr
;
1015 sym_name
= bfd_elf_string_from_elf_section (input_bfd
,
1016 symtab_hdr
->sh_link
,
1019 /* Tack on an ID so we can uniquely identify this
1020 local symbol in the global hash table. */
1021 new_name
= alloca (strlen (sym_name
) + 10);
1022 sprintf (new_name
, "%s_%08x", sym_name
, (int)sym_sec
);
1023 sym_name
= new_name
;
1025 hash
= (struct elf32_mn10300_link_hash_entry
*)
1026 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
1029 compute_function_info (input_bfd
, hash
,
1030 isym
.st_value
, contents
);
1034 esym
= extsyms
+ symtab_hdr
->sh_info
;
1035 esymend
= extsyms
+ (symtab_hdr
->sh_size
1036 / sizeof (Elf32_External_Sym
));
1037 for (idx
= 0; esym
< esymend
; esym
++, idx
++)
1039 Elf_Internal_Sym isym
;
1041 bfd_elf32_swap_symbol_in (input_bfd
, esym
, &isym
);
1042 hash
= (struct elf32_mn10300_link_hash_entry
*)
1043 elf_sym_hashes (input_bfd
)[idx
];
1044 if (isym
.st_shndx
== shndx
1045 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
1046 && (hash
)->root
.root
.u
.def
.section
== section
1047 && ((hash
)->root
.root
.type
== bfd_link_hash_defined
1048 || (hash
)->root
.root
.type
== bfd_link_hash_defweak
))
1049 compute_function_info (input_bfd
, hash
,
1050 (hash
)->root
.root
.u
.def
.value
,
1055 /* Cache or free any memory we allocated for the relocs. */
1056 if (free_relocs
!= NULL
)
1062 /* Cache or free any memory we allocated for the contents. */
1063 if (free_contents
!= NULL
)
1065 if (! link_info
->keep_memory
)
1066 free (free_contents
);
1069 /* Cache the section contents for elf_link_input_bfd. */
1070 elf_section_data (section
)->this_hdr
.contents
= contents
;
1072 free_contents
= NULL
;
1076 /* Cache or free any memory we allocated for the symbols. */
1077 if (free_extsyms
!= NULL
)
1079 if (! link_info
->keep_memory
)
1080 free (free_extsyms
);
1083 /* Cache the symbols for elf_link_input_bfd. */
1084 symtab_hdr
->contents
= extsyms
;
1086 free_extsyms
= NULL
;
1090 /* Now iterate on each symbol in the hash table and perform
1091 the final initialization steps on each. */
1092 elf32_mn10300_link_hash_traverse (hash_table
,
1093 elf32_mn10300_finish_hash_table_entry
,
1095 elf32_mn10300_link_hash_traverse (hash_table
->static_hash_table
,
1096 elf32_mn10300_finish_hash_table_entry
,
1099 /* All entries in the hash table are fully initialized. */
1100 hash_table
->flags
|= MN10300_HASH_ENTRIES_INITIALIZED
;
1102 /* Now that everything has been initialized, go through each
1103 code section and delete any prologue insns which will be
1104 redundant because their operations will be performed by
1105 a "call" instruction. */
1106 for (input_bfd
= link_info
->input_bfds
;
1108 input_bfd
= input_bfd
->link_next
)
1112 /* We're going to need all the symbols for each bfd. */
1113 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
1115 /* Get cached copy if it exists. */
1116 if (symtab_hdr
->contents
!= NULL
)
1117 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1120 /* Go get them off disk. */
1121 extsyms
= ((Elf32_External_Sym
*)
1122 bfd_malloc (symtab_hdr
->sh_size
));
1123 if (extsyms
== NULL
)
1125 free_extsyms
= extsyms
;
1126 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1127 || (bfd_read (extsyms
, 1, symtab_hdr
->sh_size
, input_bfd
)
1128 != symtab_hdr
->sh_size
))
1132 /* Walk over each section in this bfd. */
1133 for (section
= input_bfd
->sections
;
1135 section
= section
->next
)
1138 Elf32_External_Sym
*esym
, *esymend
;
1141 /* Skip non-code sections and empty sections. */
1142 if ((section
->flags
& SEC_CODE
) == 0 || section
->_raw_size
== 0)
1145 if (section
->reloc_count
!= 0)
1147 /* Get a copy of the native relocations. */
1148 internal_relocs
= (_bfd_elf32_link_read_relocs
1149 (input_bfd
, section
, (PTR
) NULL
,
1150 (Elf_Internal_Rela
*) NULL
,
1151 link_info
->keep_memory
));
1152 if (internal_relocs
== NULL
)
1154 if (! link_info
->keep_memory
)
1155 free_relocs
= internal_relocs
;
1158 /* Get cached copy of section contents if it exists. */
1159 if (elf_section_data (section
)->this_hdr
.contents
!= NULL
)
1160 contents
= elf_section_data (section
)->this_hdr
.contents
;
1163 /* Go get them off disk. */
1164 contents
= (bfd_byte
*)bfd_malloc (section
->_raw_size
);
1165 if (contents
== NULL
)
1167 free_contents
= contents
;
1169 if (!bfd_get_section_contents (input_bfd
, section
,
1170 contents
, (file_ptr
) 0,
1171 section
->_raw_size
))
1176 shndx
= _bfd_elf_section_from_bfd_section (input_bfd
, section
);
1178 /* Now look for any function in this section which needs
1179 insns deleted from its prologue. */
1181 esymend
= esym
+ symtab_hdr
->sh_info
;
1182 for (; esym
< esymend
; esym
++)
1184 Elf_Internal_Sym isym
;
1185 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1187 const char *sym_name
;
1188 Elf_Internal_Shdr
*hdr
;
1191 bfd_elf32_swap_symbol_in (input_bfd
, esym
, &isym
);
1193 if (isym
.st_shndx
!= shndx
)
1196 if (isym
.st_shndx
== SHN_UNDEF
)
1197 sym_sec
= bfd_und_section_ptr
;
1198 else if (isym
.st_shndx
> 0 && isym
.st_shndx
< SHN_LORESERVE
)
1200 = bfd_section_from_elf_index (input_bfd
, isym
.st_shndx
);
1201 else if (isym
.st_shndx
== SHN_ABS
)
1202 sym_sec
= bfd_abs_section_ptr
;
1203 else if (isym
.st_shndx
== SHN_COMMON
)
1204 sym_sec
= bfd_com_section_ptr
;
1206 sym_name
= bfd_elf_string_from_elf_section (input_bfd
,
1207 symtab_hdr
->sh_link
,
1210 /* Tack on an ID so we can uniquely identify this
1211 local symbol in the global hash table. */
1212 new_name
= alloca (strlen (sym_name
) + 10);
1213 sprintf (new_name
, "%s_%08x", sym_name
, (int)sym_sec
);
1214 sym_name
= new_name
;
1216 sym_hash
= (struct elf32_mn10300_link_hash_entry
*)
1217 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
1221 if (sym_hash
== NULL
)
1224 if (! ((sym_hash
)->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1225 && ! ((sym_hash
)->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1229 /* Note that we've changed things. */
1230 elf_section_data (section
)->relocs
= internal_relocs
;
1233 elf_section_data (section
)->this_hdr
.contents
= contents
;
1234 free_contents
= NULL
;
1236 symtab_hdr
->contents
= (bfd_byte
*)extsyms
;
1237 free_extsyms
= NULL
;
1239 /* Count how many bytes we're going to delete. */
1240 if (sym_hash
->movm_args
)
1243 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1245 else if (sym_hash
->stack_size
1246 && sym_hash
->stack_size
< 256)
1249 /* Note that we've deleted prologue bytes for this
1251 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1253 /* Actually delete the bytes. */
1254 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1260 /* Something changed. Not strictly necessary, but
1261 may lead to more relaxing opportunities. */
1266 /* Look for any global functions in this section which
1267 need insns deleted from their prologues. */
1268 esym
= extsyms
+ symtab_hdr
->sh_info
;
1269 esymend
= extsyms
+ (symtab_hdr
->sh_size
1270 / sizeof (Elf32_External_Sym
));
1271 for (idx
= 0; esym
< esymend
; esym
++, idx
++)
1273 Elf_Internal_Sym isym
;
1274 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1276 bfd_elf32_swap_symbol_in (input_bfd
, esym
, &isym
);
1277 sym_hash
= (struct elf32_mn10300_link_hash_entry
*)
1278 (elf_sym_hashes (input_bfd
)[idx
]);
1279 if (isym
.st_shndx
== shndx
1280 && (sym_hash
)->root
.root
.u
.def
.section
== section
1281 && ! ((sym_hash
)->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1282 && ! ((sym_hash
)->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1286 /* Note that we've changed things. */
1287 elf_section_data (section
)->relocs
= internal_relocs
;
1290 elf_section_data (section
)->this_hdr
.contents
= contents
;
1291 free_contents
= NULL
;
1293 symtab_hdr
->contents
= (bfd_byte
*)extsyms
;
1294 free_extsyms
= NULL
;
1296 /* Count how many bytes we're going to delete. */
1297 if (sym_hash
->movm_args
)
1300 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1302 else if (sym_hash
->stack_size
1303 && sym_hash
->stack_size
< 256)
1306 /* Note that we've deleted prologue bytes for this
1308 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1310 /* Actually delete the bytes. */
1311 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1313 (sym_hash
)->root
.root
.u
.def
.value
,
1317 /* Something changed. Not strictly necessary, but
1318 may lead to more relaxing opportunities. */
1323 /* Cache or free any memory we allocated for the relocs. */
1324 if (free_relocs
!= NULL
)
1330 /* Cache or free any memory we allocated for the contents. */
1331 if (free_contents
!= NULL
)
1333 if (! link_info
->keep_memory
)
1334 free (free_contents
);
1337 /* Cache the section contents for elf_link_input_bfd. */
1338 elf_section_data (section
)->this_hdr
.contents
= contents
;
1340 free_contents
= NULL
;
1344 /* Cache or free any memory we allocated for the symbols. */
1345 if (free_extsyms
!= NULL
)
1347 if (! link_info
->keep_memory
)
1348 free (free_extsyms
);
1351 /* Cache the symbols for elf_link_input_bfd. */
1352 symtab_hdr
->contents
= extsyms
;
1354 free_extsyms
= NULL
;
1360 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
1363 internal_relocs
= NULL
;
1365 free_contents
= NULL
;
1366 free_extsyms
= NULL
;
1368 /* We don't have to do anything for a relocateable link, if
1369 this section does not have relocs, or if this is not a
1371 if (link_info
->relocateable
1372 || (sec
->flags
& SEC_RELOC
) == 0
1373 || sec
->reloc_count
== 0
1374 || (sec
->flags
& SEC_CODE
) == 0)
1377 /* If this is the first time we have been called for this section,
1378 initialize the cooked size. */
1379 if (sec
->_cooked_size
== 0)
1380 sec
->_cooked_size
= sec
->_raw_size
;
1382 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1384 /* Get a copy of the native relocations. */
1385 internal_relocs
= (_bfd_elf32_link_read_relocs
1386 (abfd
, sec
, (PTR
) NULL
, (Elf_Internal_Rela
*) NULL
,
1387 link_info
->keep_memory
));
1388 if (internal_relocs
== NULL
)
1390 if (! link_info
->keep_memory
)
1391 free_relocs
= internal_relocs
;
1393 /* Walk through them looking for relaxing opportunities. */
1394 irelend
= internal_relocs
+ sec
->reloc_count
;
1395 for (irel
= internal_relocs
; irel
< irelend
; irel
++)
1398 struct elf32_mn10300_link_hash_entry
*h
= NULL
;
1400 /* If this isn't something that can be relaxed, then ignore
1402 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_NONE
1403 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_8
1404 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_MAX
)
1407 /* Get the section contents if we haven't done so already. */
1408 if (contents
== NULL
)
1410 /* Get cached copy if it exists. */
1411 if (elf_section_data (sec
)->this_hdr
.contents
!= NULL
)
1412 contents
= elf_section_data (sec
)->this_hdr
.contents
;
1415 /* Go get them off disk. */
1416 contents
= (bfd_byte
*) bfd_malloc (sec
->_raw_size
);
1417 if (contents
== NULL
)
1419 free_contents
= contents
;
1421 if (! bfd_get_section_contents (abfd
, sec
, contents
,
1422 (file_ptr
) 0, sec
->_raw_size
))
1427 /* Read this BFD's symbols if we haven't done so already. */
1428 if (extsyms
== NULL
)
1430 /* Get cached copy if it exists. */
1431 if (symtab_hdr
->contents
!= NULL
)
1432 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1435 /* Go get them off disk. */
1436 extsyms
= ((Elf32_External_Sym
*)
1437 bfd_malloc (symtab_hdr
->sh_size
));
1438 if (extsyms
== NULL
)
1440 free_extsyms
= extsyms
;
1441 if (bfd_seek (abfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1442 || (bfd_read (extsyms
, 1, symtab_hdr
->sh_size
, abfd
)
1443 != symtab_hdr
->sh_size
))
1448 /* Get the value of the symbol referred to by the reloc. */
1449 if (ELF32_R_SYM (irel
->r_info
) < symtab_hdr
->sh_info
)
1451 Elf_Internal_Sym isym
;
1453 Elf_Internal_Shdr
*hdr
;
1454 const char *sym_name
;
1457 /* A local symbol. */
1458 bfd_elf32_swap_symbol_in (abfd
,
1459 extsyms
+ ELF32_R_SYM (irel
->r_info
),
1462 if (isym
.st_shndx
== SHN_UNDEF
)
1463 sym_sec
= bfd_und_section_ptr
;
1464 else if (isym
.st_shndx
> 0 && isym
.st_shndx
< SHN_LORESERVE
)
1465 sym_sec
= bfd_section_from_elf_index (abfd
, isym
.st_shndx
);
1466 else if (isym
.st_shndx
== SHN_ABS
)
1467 sym_sec
= bfd_abs_section_ptr
;
1468 else if (isym
.st_shndx
== SHN_COMMON
)
1469 sym_sec
= bfd_com_section_ptr
;
1471 symval
= (isym
.st_value
1472 + sym_sec
->output_section
->vma
1473 + sym_sec
->output_offset
);
1474 sym_name
= bfd_elf_string_from_elf_section (abfd
,
1475 symtab_hdr
->sh_link
,
1478 /* Tack on an ID so we can uniquely identify this
1479 local symbol in the global hash table. */
1480 new_name
= alloca (strlen (sym_name
) + 10);
1481 sprintf (new_name
, "%s_%08x", sym_name
, (int)sym_sec
);
1482 sym_name
= new_name
;
1484 h
= (struct elf32_mn10300_link_hash_entry
*)
1485 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
1486 sym_name
, false, false, false);
1492 /* An external symbol. */
1493 indx
= ELF32_R_SYM (irel
->r_info
) - symtab_hdr
->sh_info
;
1494 h
= (struct elf32_mn10300_link_hash_entry
*)
1495 (elf_sym_hashes (abfd
)[indx
]);
1496 BFD_ASSERT (h
!= NULL
);
1497 if (h
->root
.root
.type
!= bfd_link_hash_defined
1498 && h
->root
.root
.type
!= bfd_link_hash_defweak
)
1500 /* This appears to be a reference to an undefined
1501 symbol. Just ignore it--it will be caught by the
1502 regular reloc processing. */
1506 symval
= (h
->root
.root
.u
.def
.value
1507 + h
->root
.root
.u
.def
.section
->output_section
->vma
1508 + h
->root
.root
.u
.def
.section
->output_offset
);
1511 /* For simplicity of coding, we are going to modify the section
1512 contents, the section relocs, and the BFD symbol table. We
1513 must tell the rest of the code not to free up this
1514 information. It would be possible to instead create a table
1515 of changes which have to be made, as is done in coff-mips.c;
1516 that would be more work, but would require less memory when
1517 the linker is run. */
1519 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
1520 branch/call, also deal with "call" -> "calls" conversions and
1521 insertion of prologue data into "call" instructions. */
1522 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL32
)
1524 bfd_vma value
= symval
;
1526 /* If we've got a "call" instruction that needs to be turned
1527 into a "calls" instruction, do so now. It saves a byte. */
1528 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1532 /* Get the opcode. */
1533 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1535 /* Make sure we're working with a "call" instruction! */
1538 /* Note that we've changed the relocs, section contents,
1540 elf_section_data (sec
)->relocs
= internal_relocs
;
1543 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1544 free_contents
= NULL
;
1546 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1547 free_extsyms
= NULL
;
1549 /* Fix the opcode. */
1550 bfd_put_8 (abfd
, 0xfc, contents
+ irel
->r_offset
- 1);
1551 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1553 /* Fix irel->r_offset and irel->r_addend. */
1554 irel
->r_offset
+= 1;
1555 irel
->r_addend
+= 1;
1557 /* Delete one byte of data. */
1558 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1559 irel
->r_offset
+ 3, 1))
1562 /* That will change things, so, we should relax again.
1563 Note that this is not required, and it may be slow. */
1569 /* We've got a "call" instruction which needs some data
1570 from target function filled in. */
1573 /* Get the opcode. */
1574 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1576 /* Insert data from the target function into the "call"
1577 instruction if needed. */
1580 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 4);
1581 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1582 contents
+ irel
->r_offset
+ 5);
1586 /* Deal with pc-relative gunk. */
1587 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1588 value
-= irel
->r_offset
;
1589 value
+= irel
->r_addend
;
1591 /* See if the value will fit in 16 bits, note the high value is
1592 0x7fff + 2 as the target will be two bytes closer if we are
1594 if ((long)value
< 0x8001 && (long)value
> -0x8000)
1598 /* Get the opcode. */
1599 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1601 if (code
!= 0xdc && code
!= 0xdd && code
!= 0xff)
1604 /* Note that we've changed the relocs, section contents, etc. */
1605 elf_section_data (sec
)->relocs
= internal_relocs
;
1608 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1609 free_contents
= NULL
;
1611 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1612 free_extsyms
= NULL
;
1614 /* Fix the opcode. */
1616 bfd_put_8 (abfd
, 0xcc, contents
+ irel
->r_offset
- 1);
1617 else if (code
== 0xdd)
1618 bfd_put_8 (abfd
, 0xcd, contents
+ irel
->r_offset
- 1);
1619 else if (code
== 0xff)
1620 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
1622 /* Fix the relocation's type. */
1623 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1626 /* Delete two bytes of data. */
1627 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1628 irel
->r_offset
+ 1, 2))
1631 /* That will change things, so, we should relax again.
1632 Note that this is not required, and it may be slow. */
1637 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
1639 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL16
)
1641 bfd_vma value
= symval
;
1643 /* If we've got a "call" instruction that needs to be turned
1644 into a "calls" instruction, do so now. It saves a byte. */
1645 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1649 /* Get the opcode. */
1650 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1652 /* Make sure we're working with a "call" instruction! */
1655 /* Note that we've changed the relocs, section contents,
1657 elf_section_data (sec
)->relocs
= internal_relocs
;
1660 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1661 free_contents
= NULL
;
1663 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1664 free_extsyms
= NULL
;
1666 /* Fix the opcode. */
1667 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 1);
1668 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1670 /* Fix irel->r_offset and irel->r_addend. */
1671 irel
->r_offset
+= 1;
1672 irel
->r_addend
+= 1;
1674 /* Delete one byte of data. */
1675 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1676 irel
->r_offset
+ 1, 1))
1679 /* That will change things, so, we should relax again.
1680 Note that this is not required, and it may be slow. */
1688 /* Get the opcode. */
1689 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1691 /* Insert data from the target function into the "call"
1692 instruction if needed. */
1695 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 2);
1696 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1697 contents
+ irel
->r_offset
+ 3);
1701 /* Deal with pc-relative gunk. */
1702 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1703 value
-= irel
->r_offset
;
1704 value
+= irel
->r_addend
;
1706 /* See if the value will fit in 8 bits, note the high value is
1707 0x7f + 1 as the target will be one bytes closer if we are
1709 if ((long)value
< 0x80 && (long)value
> -0x80)
1713 /* Get the opcode. */
1714 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1719 /* Note that we've changed the relocs, section contents, etc. */
1720 elf_section_data (sec
)->relocs
= internal_relocs
;
1723 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1724 free_contents
= NULL
;
1726 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1727 free_extsyms
= NULL
;
1729 /* Fix the opcode. */
1730 bfd_put_8 (abfd
, 0xca, contents
+ irel
->r_offset
- 1);
1732 /* Fix the relocation's type. */
1733 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1736 /* Delete one byte of data. */
1737 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1738 irel
->r_offset
+ 1, 1))
1741 /* That will change things, so, we should relax again.
1742 Note that this is not required, and it may be slow. */
1747 /* Try to eliminate an unconditional 8 bit pc-relative branch
1748 which immediately follows a conditional 8 bit pc-relative
1749 branch around the unconditional branch.
1757 This happens when the bCC can't reach lab2 at assembly time,
1758 but due to other relaxations it can reach at link time. */
1759 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL8
)
1761 Elf_Internal_Rela
*nrel
;
1762 bfd_vma value
= symval
;
1765 /* Deal with pc-relative gunk. */
1766 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1767 value
-= irel
->r_offset
;
1768 value
+= irel
->r_addend
;
1770 /* Do nothing if this reloc is the last byte in the section. */
1771 if (irel
->r_offset
== sec
->_cooked_size
)
1774 /* See if the next instruction is an unconditional pc-relative
1775 branch, more often than not this test will fail, so we
1776 test it first to speed things up. */
1777 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
+ 1);
1781 /* Also make sure the next relocation applies to the next
1782 instruction and that it's a pc-relative 8 bit branch. */
1785 || irel
->r_offset
+ 2 != nrel
->r_offset
1786 || ELF32_R_TYPE (nrel
->r_info
) != (int) R_MN10300_PCREL8
)
1789 /* Make sure our destination immediately follows the
1790 unconditional branch. */
1791 if (symval
!= (sec
->output_section
->vma
+ sec
->output_offset
1792 + irel
->r_offset
+ 3))
1795 /* Now make sure we are a conditional branch. This may not
1796 be necessary, but why take the chance.
1798 Note these checks assume that R_MN10300_PCREL8 relocs
1799 only occur on bCC and bCCx insns. If they occured
1800 elsewhere, we'd need to know the start of this insn
1801 for this check to be accurate. */
1802 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1803 if (code
!= 0xc0 && code
!= 0xc1 && code
!= 0xc2
1804 && code
!= 0xc3 && code
!= 0xc4 && code
!= 0xc5
1805 && code
!= 0xc6 && code
!= 0xc7 && code
!= 0xc8
1806 && code
!= 0xc9 && code
!= 0xe8 && code
!= 0xe9
1807 && code
!= 0xea && code
!= 0xeb)
1810 /* We also have to be sure there is no symbol/label
1811 at the unconditional branch. */
1812 if (mn10300_elf_symbol_address_p (abfd
, sec
, extsyms
,
1813 irel
->r_offset
+ 1))
1816 /* Note that we've changed the relocs, section contents, etc. */
1817 elf_section_data (sec
)->relocs
= internal_relocs
;
1820 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1821 free_contents
= NULL
;
1823 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1824 free_extsyms
= NULL
;
1826 /* Reverse the condition of the first branch. */
1872 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
1874 /* Set the reloc type and symbol for the first branch
1875 from the second branch. */
1876 irel
->r_info
= nrel
->r_info
;
1878 /* Make the reloc for the second branch a null reloc. */
1879 nrel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (nrel
->r_info
),
1882 /* Delete two bytes of data. */
1883 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1884 irel
->r_offset
+ 1, 2))
1887 /* That will change things, so, we should relax again.
1888 Note that this is not required, and it may be slow. */
1892 /* start-sanitize-am33 */
1893 /* Try to turn a 24 immediate, displacement or absolute address
1894 into a 8 immediate, displacement or absolute address. */
1895 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_24
)
1897 bfd_vma value
= symval
;
1898 value
+= irel
->r_addend
;
1900 /* See if the value will fit in 8 bits.
1901 if ((long)value < 0x7f && (long)value > -0x80)
1905 /* AM33 insns which have 24 operands are 6 bytes long and
1906 will have 0xfd as the first byte. */
1908 /* Get the first opcode. */
1909 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
1913 /* Get the second opcode. */
1914 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
1916 if ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
1917 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
1918 || (code
& 0x0f) == 0x0e)
1920 /* Not safe if the high bit is on as relaxing may
1921 move the value out of high mem and thus not fit
1922 in a signed 8bit value. This is currently over
1924 if ((value
& 0x80) == 0)
1926 /* Note that we've changed the relocation contents,
1928 elf_section_data (sec
)->relocs
= internal_relocs
;
1931 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1932 free_contents
= NULL
;
1934 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1935 free_extsyms
= NULL
;
1937 /* Fix the opcode. */
1938 bfd_put_8 (abfd
, 0xfb, contents
+ irel
->r_offset
- 3);
1939 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
1941 /* Fix the relocation's type. */
1943 = ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1946 /* Delete two bytes of data. */
1947 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1948 irel
->r_offset
+ 3, 2))
1951 /* That will change things, so, we should relax
1952 again. Note that this is not required, and it
1962 /* end-sanitize-am33 */
1964 /* Try to turn a 32bit immediate, displacement or absolute address
1965 into a 16bit immediate, displacement or absolute address. */
1966 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_32
)
1968 bfd_vma value
= symval
;
1969 value
+= irel
->r_addend
;
1971 /* start-sanitize-am33 */
1972 /* See if the value will fit in 24 bits.
1973 We allow any 16bit match here. We prune those we can't
1975 if ((long)value
< 0x7fffff && (long)value
> -0x800000)
1979 /* AM33 insns which have 32bit operands are 7 bytes long and
1980 will have 0xfe as the first byte. */
1982 /* Get the first opcode. */
1983 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
1987 /* Get the second opcode. */
1988 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
1990 /* All the am33 32 -> 24 relaxing possibilities. */
1991 if ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
1992 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
1993 || (code
& 0x0f) == 0x0e)
1995 /* Not safe if the high bit is on as relaxing may
1996 move the value out of high mem and thus not fit
1997 in a signed 16bit value. This is currently over
1999 if ((value
& 0x8000) == 0)
2001 /* Note that we've changed the relocation contents,
2003 elf_section_data (sec
)->relocs
= internal_relocs
;
2006 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2007 free_contents
= NULL
;
2009 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2010 free_extsyms
= NULL
;
2012 /* Fix the opcode. */
2013 bfd_put_8 (abfd
, 0xfd, contents
+ irel
->r_offset
- 3);
2014 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2016 /* Fix the relocation's type. */
2018 = ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2021 /* Delete one byte of data. */
2022 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2023 irel
->r_offset
+ 3, 1))
2026 /* That will change things, so, we should relax
2027 again. Note that this is not required, and it
2036 /* end-sanitize-am33 */
2038 /* See if the value will fit in 16 bits.
2039 We allow any 16bit match here. We prune those we can't
2041 if ((long)value
< 0x7fff && (long)value
> -0x8000)
2045 /* Most insns which have 32bit operands are 6 bytes long;
2046 exceptions are pcrel insns and bit insns.
2048 We handle pcrel insns above. We don't bother trying
2049 to handle the bit insns here.
2051 The first byte of the remaining insns will be 0xfc. */
2053 /* Get the first opcode. */
2054 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2059 /* Get the second opcode. */
2060 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
2062 if ((code
& 0xf0) < 0x80)
2063 switch (code
& 0xf0)
2065 /* mov (d32,am),dn -> mov (d32,am),dn
2066 mov dm,(d32,am) -> mov dn,(d32,am)
2067 mov (d32,am),an -> mov (d32,am),an
2068 mov dm,(d32,am) -> mov dn,(d32,am)
2069 movbu (d32,am),dn -> movbu (d32,am),dn
2070 movbu dm,(d32,am) -> movbu dn,(d32,am)
2071 movhu (d32,am),dn -> movhu (d32,am),dn
2072 movhu dm,(d32,am) -> movhu dn,(d32,am) */
2081 /* Not safe if the high bit is on as relaxing may
2082 move the value out of high mem and thus not fit
2083 in a signed 16bit value. */
2085 && (value
& 0x8000))
2088 /* Note that we've changed the relocation contents, etc. */
2089 elf_section_data (sec
)->relocs
= internal_relocs
;
2092 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2093 free_contents
= NULL
;
2095 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2096 free_extsyms
= NULL
;
2098 /* Fix the opcode. */
2099 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2100 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2102 /* Fix the relocation's type. */
2103 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2106 /* Delete two bytes of data. */
2107 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2108 irel
->r_offset
+ 2, 2))
2111 /* That will change things, so, we should relax again.
2112 Note that this is not required, and it may be slow. */
2116 else if ((code
& 0xf0) == 0x80
2117 || (code
& 0xf0) == 0x90)
2118 switch (code
& 0xf3)
2120 /* mov dn,(abs32) -> mov dn,(abs16)
2121 movbu dn,(abs32) -> movbu dn,(abs16)
2122 movhu dn,(abs32) -> movhu dn,(abs16) */
2126 /* Note that we've changed the relocation contents, etc. */
2127 elf_section_data (sec
)->relocs
= internal_relocs
;
2130 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2131 free_contents
= NULL
;
2133 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2134 free_extsyms
= NULL
;
2136 if ((code
& 0xf3) == 0x81)
2137 code
= 0x01 + (code
& 0x0c);
2138 else if ((code
& 0xf3) == 0x82)
2139 code
= 0x02 + (code
& 0x0c);
2140 else if ((code
& 0xf3) == 0x83)
2141 code
= 0x03 + (code
& 0x0c);
2145 /* Fix the opcode. */
2146 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2148 /* Fix the relocation's type. */
2149 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2152 /* The opcode got shorter too, so we have to fix the
2153 addend and offset too! */
2154 irel
->r_offset
-= 1;
2156 /* Delete three bytes of data. */
2157 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2158 irel
->r_offset
+ 1, 3))
2161 /* That will change things, so, we should relax again.
2162 Note that this is not required, and it may be slow. */
2166 /* mov am,(abs32) -> mov am,(abs16)
2167 mov am,(d32,sp) -> mov am,(d16,sp)
2168 mov dm,(d32,sp) -> mov dm,(d32,sp)
2169 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
2170 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
2176 /* Note that we've changed the relocation contents, etc. */
2177 elf_section_data (sec
)->relocs
= internal_relocs
;
2180 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2181 free_contents
= NULL
;
2183 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2184 free_extsyms
= NULL
;
2186 /* Fix the opcode. */
2187 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2188 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2190 /* Fix the relocation's type. */
2191 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2194 /* Delete two bytes of data. */
2195 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2196 irel
->r_offset
+ 2, 2))
2199 /* That will change things, so, we should relax again.
2200 Note that this is not required, and it may be slow. */
2204 else if ((code
& 0xf0) < 0xf0)
2205 switch (code
& 0xfc)
2207 /* mov imm32,dn -> mov imm16,dn
2208 mov imm32,an -> mov imm16,an
2209 mov (abs32),dn -> mov (abs16),dn
2210 movbu (abs32),dn -> movbu (abs16),dn
2211 movhu (abs32),dn -> movhu (abs16),dn */
2217 /* Not safe if the high bit is on as relaxing may
2218 move the value out of high mem and thus not fit
2219 in a signed 16bit value. */
2221 && (value
& 0x8000))
2224 /* Note that we've changed the relocation contents, etc. */
2225 elf_section_data (sec
)->relocs
= internal_relocs
;
2228 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2229 free_contents
= NULL
;
2231 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2232 free_extsyms
= NULL
;
2234 if ((code
& 0xfc) == 0xcc)
2235 code
= 0x2c + (code
& 0x03);
2236 else if ((code
& 0xfc) == 0xdc)
2237 code
= 0x24 + (code
& 0x03);
2238 else if ((code
& 0xfc) == 0xa4)
2239 code
= 0x30 + (code
& 0x03);
2240 else if ((code
& 0xfc) == 0xa8)
2241 code
= 0x34 + (code
& 0x03);
2242 else if ((code
& 0xfc) == 0xac)
2243 code
= 0x38 + (code
& 0x03);
2247 /* Fix the opcode. */
2248 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2250 /* Fix the relocation's type. */
2251 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2254 /* The opcode got shorter too, so we have to fix the
2255 addend and offset too! */
2256 irel
->r_offset
-= 1;
2258 /* Delete three bytes of data. */
2259 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2260 irel
->r_offset
+ 1, 3))
2263 /* That will change things, so, we should relax again.
2264 Note that this is not required, and it may be slow. */
2268 /* mov (abs32),an -> mov (abs16),an
2269 mov (d32,sp),an -> mov (d32,sp),an
2270 mov (d32,sp),dn -> mov (d32,sp),dn
2271 movbu (d32,sp),dn -> movbu (d32,sp),dn
2272 movhu (d32,sp),dn -> movhu (d32,sp),dn
2273 add imm32,dn -> add imm16,dn
2274 cmp imm32,dn -> cmp imm16,dn
2275 add imm32,an -> add imm16,an
2276 cmp imm32,an -> cmp imm16,an
2277 and imm32,dn -> and imm32,dn
2278 or imm32,dn -> or imm32,dn
2279 xor imm32,dn -> xor imm32,dn
2280 btst imm32,dn -> btst imm32,dn */
2296 /* Note that we've changed the relocation contents, etc. */
2297 elf_section_data (sec
)->relocs
= internal_relocs
;
2300 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2301 free_contents
= NULL
;
2303 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2304 free_extsyms
= NULL
;
2306 /* Fix the opcode. */
2307 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2308 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2310 /* Fix the relocation's type. */
2311 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2314 /* Delete two bytes of data. */
2315 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2316 irel
->r_offset
+ 2, 2))
2319 /* That will change things, so, we should relax again.
2320 Note that this is not required, and it may be slow. */
2324 else if (code
== 0xfe)
2326 /* add imm32,sp -> add imm16,sp */
2328 /* Note that we've changed the relocation contents, etc. */
2329 elf_section_data (sec
)->relocs
= internal_relocs
;
2332 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2333 free_contents
= NULL
;
2335 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
2336 free_extsyms
= NULL
;
2338 /* Fix the opcode. */
2339 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2340 bfd_put_8 (abfd
, 0xfe, contents
+ irel
->r_offset
- 1);
2342 /* Fix the relocation's type. */
2343 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2346 /* Delete two bytes of data. */
2347 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2348 irel
->r_offset
+ 2, 2))
2351 /* That will change things, so, we should relax again.
2352 Note that this is not required, and it may be slow. */
2360 if (free_relocs
!= NULL
)
2366 if (free_contents
!= NULL
)
2368 if (! link_info
->keep_memory
)
2369 free (free_contents
);
2372 /* Cache the section contents for elf_link_input_bfd. */
2373 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2375 free_contents
= NULL
;
2378 if (free_extsyms
!= NULL
)
2380 if (! link_info
->keep_memory
)
2381 free (free_extsyms
);
2384 /* Cache the symbols for elf_link_input_bfd. */
2385 symtab_hdr
->contents
= extsyms
;
2387 free_extsyms
= NULL
;
2393 if (free_relocs
!= NULL
)
2395 if (free_contents
!= NULL
)
2396 free (free_contents
);
2397 if (free_extsyms
!= NULL
)
2398 free (free_extsyms
);
2402 /* Compute the stack size and movm arguments for the function
2403 referred to by HASH at address ADDR in section with
2404 contents CONTENTS, store the information in the hash table. */
2406 compute_function_info (abfd
, hash
, addr
, contents
)
2408 struct elf32_mn10300_link_hash_entry
*hash
;
2410 unsigned char *contents
;
2412 unsigned char byte1
, byte2
;
2413 /* We only care about a very small subset of the possible prologue
2414 sequences here. Basically we look for:
2416 movm [d2,d3,a2,a3],sp (optional)
2417 add <size>,sp (optional, and only for sizes which fit in an unsigned
2420 If we find anything else, we quit. */
2422 /* Look for movm [regs],sp */
2423 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2424 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2428 hash
->movm_args
= byte2
;
2430 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2431 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2434 /* Now figure out how much stack space will be allocated by the movm
2435 instruction. We need this kept separate from the funtion's normal
2437 if (hash
->movm_args
)
2440 if (hash
->movm_args
& 0x80)
2441 hash
->movm_stack_size
+= 4;
2444 if (hash
->movm_args
& 0x40)
2445 hash
->movm_stack_size
+= 4;
2448 if (hash
->movm_args
& 0x20)
2449 hash
->movm_stack_size
+= 4;
2452 if (hash
->movm_args
& 0x10)
2453 hash
->movm_stack_size
+= 4;
2455 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2456 if (hash
->movm_args
& 0x08)
2457 hash
->movm_stack_size
+= 8 * 4;
2459 /* start-sanitize-am33 */
2460 if (bfd_get_mach (abfd
) == bfd_mach_am33
)
2462 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2463 if (hash
->movm_args
& 0x1)
2464 hash
->movm_stack_size
+= 6 * 4;
2466 /* exreg1 space. e4, e5, e6, e7 */
2467 if (hash
->movm_args
& 0x2)
2468 hash
->movm_stack_size
+= 4 * 4;
2470 /* exreg0 space. e2, e3 */
2471 if (hash
->movm_args
& 0x4)
2472 hash
->movm_stack_size
+= 2 * 4;
2474 /* end-sanitize-am33 */
2477 /* Now look for the two stack adjustment variants. */
2478 if (byte1
== 0xf8 && byte2
== 0xfe)
2480 int temp
= bfd_get_8 (abfd
, contents
+ addr
+ 2);
2481 temp
= ((temp
& 0xff) ^ (~0x7f)) + 0x80;
2483 hash
->stack_size
= -temp
;
2485 else if (byte1
== 0xfa && byte2
== 0xfe)
2487 int temp
= bfd_get_16 (abfd
, contents
+ addr
+ 2);
2488 temp
= ((temp
& 0xffff) ^ (~0x7fff)) + 0x8000;
2492 hash
->stack_size
= temp
;
2495 /* If the total stack to be allocated by the call instruction is more
2496 than 255 bytes, then we can't remove the stack adjustment by using
2497 "call" (we might still be able to remove the "movm" instruction. */
2498 if (hash
->stack_size
+ hash
->movm_stack_size
> 255)
2499 hash
->stack_size
= 0;
2504 /* Delete some bytes from a section while relaxing. */
2507 mn10300_elf_relax_delete_bytes (abfd
, sec
, addr
, count
)
2513 Elf_Internal_Shdr
*symtab_hdr
;
2514 Elf32_External_Sym
*extsyms
;
2517 Elf_Internal_Rela
*irel
, *irelend
;
2518 Elf_Internal_Rela
*irelalign
;
2520 Elf32_External_Sym
*esym
, *esymend
;
2521 struct elf32_mn10300_link_hash_entry
*sym_hash
;
2523 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2524 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2526 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2528 contents
= elf_section_data (sec
)->this_hdr
.contents
;
2530 /* The deletion must stop at the next ALIGN reloc for an aligment
2531 power larger than the number of bytes we are deleting. */
2534 toaddr
= sec
->_cooked_size
;
2536 irel
= elf_section_data (sec
)->relocs
;
2537 irelend
= irel
+ sec
->reloc_count
;
2539 /* Actually delete the bytes. */
2540 memmove (contents
+ addr
, contents
+ addr
+ count
, toaddr
- addr
- count
);
2541 sec
->_cooked_size
-= count
;
2543 /* Adjust all the relocs. */
2544 for (irel
= elf_section_data (sec
)->relocs
; irel
< irelend
; irel
++)
2546 /* Get the new reloc address. */
2547 if ((irel
->r_offset
> addr
2548 && irel
->r_offset
< toaddr
))
2549 irel
->r_offset
-= count
;
2552 /* Adjust the local symbols defined in this section. */
2554 esymend
= esym
+ symtab_hdr
->sh_info
;
2555 for (; esym
< esymend
; esym
++)
2557 Elf_Internal_Sym isym
;
2559 bfd_elf32_swap_symbol_in (abfd
, esym
, &isym
);
2561 if (isym
.st_shndx
== shndx
2562 && isym
.st_value
> addr
2563 && isym
.st_value
< toaddr
)
2565 isym
.st_value
-= count
;
2566 bfd_elf32_swap_symbol_out (abfd
, &isym
, esym
);
2570 /* Now adjust the global symbols defined in this section. */
2571 esym
= extsyms
+ symtab_hdr
->sh_info
;
2572 esymend
= extsyms
+ (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
));
2573 for (index
= 0; esym
< esymend
; esym
++, index
++)
2575 Elf_Internal_Sym isym
;
2577 bfd_elf32_swap_symbol_in (abfd
, esym
, &isym
);
2578 sym_hash
= (struct elf32_mn10300_link_hash_entry
*)
2579 (elf_sym_hashes (abfd
)[index
]);
2580 if (isym
.st_shndx
== shndx
2581 && ((sym_hash
)->root
.root
.type
== bfd_link_hash_defined
2582 || (sym_hash
)->root
.root
.type
== bfd_link_hash_defweak
)
2583 && (sym_hash
)->root
.root
.u
.def
.section
== sec
2584 && (sym_hash
)->root
.root
.u
.def
.value
> addr
2585 && (sym_hash
)->root
.root
.u
.def
.value
< toaddr
)
2587 (sym_hash
)->root
.root
.u
.def
.value
-= count
;
2594 /* Return true if a symbol exists at the given address, else return
2597 mn10300_elf_symbol_address_p (abfd
, sec
, extsyms
, addr
)
2600 Elf32_External_Sym
*extsyms
;
2603 Elf_Internal_Shdr
*symtab_hdr
;
2605 Elf32_External_Sym
*esym
, *esymend
;
2606 struct elf32_mn10300_link_hash_entry
**sym_hash
, **sym_hash_end
;
2608 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2609 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2611 /* Examine all the symbols. */
2613 esymend
= esym
+ symtab_hdr
->sh_info
;
2614 for (; esym
< esymend
; esym
++)
2616 Elf_Internal_Sym isym
;
2618 bfd_elf32_swap_symbol_in (abfd
, esym
, &isym
);
2620 if (isym
.st_shndx
== shndx
2621 && isym
.st_value
== addr
)
2625 sym_hash
= (struct elf32_mn10300_link_hash_entry
**)(elf_sym_hashes (abfd
));
2626 sym_hash_end
= (sym_hash
2627 + (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
2628 - symtab_hdr
->sh_info
));
2629 for (; sym_hash
< sym_hash_end
; sym_hash
++)
2631 if (((*sym_hash
)->root
.root
.type
== bfd_link_hash_defined
2632 || (*sym_hash
)->root
.root
.type
== bfd_link_hash_defweak
)
2633 && (*sym_hash
)->root
.root
.u
.def
.section
== sec
2634 && (*sym_hash
)->root
.root
.u
.def
.value
== addr
)
2640 /* This is a version of bfd_generic_get_relocated_section_contents
2641 which uses mn10300_elf_relocate_section. */
2644 mn10300_elf_get_relocated_section_contents (output_bfd
, link_info
, link_order
,
2645 data
, relocateable
, symbols
)
2647 struct bfd_link_info
*link_info
;
2648 struct bfd_link_order
*link_order
;
2650 boolean relocateable
;
2653 Elf_Internal_Shdr
*symtab_hdr
;
2654 asection
*input_section
= link_order
->u
.indirect
.section
;
2655 bfd
*input_bfd
= input_section
->owner
;
2656 asection
**sections
= NULL
;
2657 Elf_Internal_Rela
*internal_relocs
= NULL
;
2658 Elf32_External_Sym
*external_syms
= NULL
;
2659 Elf_Internal_Sym
*internal_syms
= NULL
;
2661 /* We only need to handle the case of relaxing, or of having a
2662 particular set of section contents, specially. */
2664 || elf_section_data (input_section
)->this_hdr
.contents
== NULL
)
2665 return bfd_generic_get_relocated_section_contents (output_bfd
, link_info
,
2670 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
2672 memcpy (data
, elf_section_data (input_section
)->this_hdr
.contents
,
2673 input_section
->_raw_size
);
2675 if ((input_section
->flags
& SEC_RELOC
) != 0
2676 && input_section
->reloc_count
> 0)
2678 Elf_Internal_Sym
*isymp
;
2680 Elf32_External_Sym
*esym
, *esymend
;
2682 if (symtab_hdr
->contents
!= NULL
)
2683 external_syms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2686 external_syms
= ((Elf32_External_Sym
*)
2687 bfd_malloc (symtab_hdr
->sh_info
2688 * sizeof (Elf32_External_Sym
)));
2689 if (external_syms
== NULL
&& symtab_hdr
->sh_info
> 0)
2691 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
2692 || (bfd_read (external_syms
, sizeof (Elf32_External_Sym
),
2693 symtab_hdr
->sh_info
, input_bfd
)
2694 != (symtab_hdr
->sh_info
* sizeof (Elf32_External_Sym
))))
2698 internal_relocs
= (_bfd_elf32_link_read_relocs
2699 (input_bfd
, input_section
, (PTR
) NULL
,
2700 (Elf_Internal_Rela
*) NULL
, false));
2701 if (internal_relocs
== NULL
)
2704 internal_syms
= ((Elf_Internal_Sym
*)
2705 bfd_malloc (symtab_hdr
->sh_info
2706 * sizeof (Elf_Internal_Sym
)));
2707 if (internal_syms
== NULL
&& symtab_hdr
->sh_info
> 0)
2710 sections
= (asection
**) bfd_malloc (symtab_hdr
->sh_info
2711 * sizeof (asection
*));
2712 if (sections
== NULL
&& symtab_hdr
->sh_info
> 0)
2715 isymp
= internal_syms
;
2717 esym
= external_syms
;
2718 esymend
= esym
+ symtab_hdr
->sh_info
;
2719 for (; esym
< esymend
; ++esym
, ++isymp
, ++secpp
)
2723 bfd_elf32_swap_symbol_in (input_bfd
, esym
, isymp
);
2725 if (isymp
->st_shndx
== SHN_UNDEF
)
2726 isec
= bfd_und_section_ptr
;
2727 else if (isymp
->st_shndx
> 0 && isymp
->st_shndx
< SHN_LORESERVE
)
2728 isec
= bfd_section_from_elf_index (input_bfd
, isymp
->st_shndx
);
2729 else if (isymp
->st_shndx
== SHN_ABS
)
2730 isec
= bfd_abs_section_ptr
;
2731 else if (isymp
->st_shndx
== SHN_COMMON
)
2732 isec
= bfd_com_section_ptr
;
2742 if (! mn10300_elf_relocate_section (output_bfd
, link_info
, input_bfd
,
2743 input_section
, data
, internal_relocs
,
2744 internal_syms
, sections
))
2747 if (sections
!= NULL
)
2750 if (internal_syms
!= NULL
)
2751 free (internal_syms
);
2752 internal_syms
= NULL
;
2753 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2754 free (external_syms
);
2755 external_syms
= NULL
;
2756 if (internal_relocs
!= elf_section_data (input_section
)->relocs
)
2757 free (internal_relocs
);
2758 internal_relocs
= NULL
;
2764 if (internal_relocs
!= NULL
2765 && internal_relocs
!= elf_section_data (input_section
)->relocs
)
2766 free (internal_relocs
);
2767 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2768 free (external_syms
);
2769 if (internal_syms
!= NULL
)
2770 free (internal_syms
);
2771 if (sections
!= NULL
)
2776 /* Assorted hash table functions. */
2778 /* Initialize an entry in the link hash table. */
2780 /* Create an entry in an MN10300 ELF linker hash table. */
2782 static struct bfd_hash_entry
*
2783 elf32_mn10300_link_hash_newfunc (entry
, table
, string
)
2784 struct bfd_hash_entry
*entry
;
2785 struct bfd_hash_table
*table
;
2788 struct elf32_mn10300_link_hash_entry
*ret
=
2789 (struct elf32_mn10300_link_hash_entry
*) entry
;
2791 /* Allocate the structure if it has not already been allocated by a
2793 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2794 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2795 bfd_hash_allocate (table
,
2796 sizeof (struct elf32_mn10300_link_hash_entry
)));
2797 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2798 return (struct bfd_hash_entry
*) ret
;
2800 /* Call the allocation method of the superclass. */
2801 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2802 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry
*) ret
,
2804 if (ret
!= (struct elf32_mn10300_link_hash_entry
*) NULL
)
2806 ret
->direct_calls
= 0;
2807 ret
->stack_size
= 0;
2808 ret
->movm_stack_size
= 0;
2813 return (struct bfd_hash_entry
*) ret
;
2816 /* Create an mn10300 ELF linker hash table. */
2818 static struct bfd_link_hash_table
*
2819 elf32_mn10300_link_hash_table_create (abfd
)
2822 struct elf32_mn10300_link_hash_table
*ret
;
2824 ret
= ((struct elf32_mn10300_link_hash_table
*)
2825 bfd_alloc (abfd
, sizeof (struct elf32_mn10300_link_hash_table
)));
2826 if (ret
== (struct elf32_mn10300_link_hash_table
*) NULL
)
2829 if (! _bfd_elf_link_hash_table_init (&ret
->root
, abfd
,
2830 elf32_mn10300_link_hash_newfunc
))
2832 bfd_release (abfd
, ret
);
2837 ret
->static_hash_table
2838 = ((struct elf32_mn10300_link_hash_table
*)
2839 bfd_alloc (abfd
, sizeof (struct elf_link_hash_table
)));
2840 if (ret
->static_hash_table
== NULL
)
2842 bfd_release (abfd
, ret
);
2846 if (! _bfd_elf_link_hash_table_init (&ret
->static_hash_table
->root
, abfd
,
2847 elf32_mn10300_link_hash_newfunc
))
2849 bfd_release (abfd
, ret
->static_hash_table
);
2850 bfd_release (abfd
, ret
);
2853 return &ret
->root
.root
;
2857 elf_mn10300_mach (flags
)
2860 switch (flags
& EF_MN10300_MACH
)
2862 case E_MN10300_MACH_MN10300
:
2864 return bfd_mach_mn10300
;
2866 /* start-sanitize-am33 */
2867 case E_MN10300_MACH_AM33
:
2868 return bfd_mach_am33
;
2869 /* end-sanitize-am33 */
2873 /* The final processing done just before writing out a MN10300 ELF object
2874 file. This gets the MN10300 architecture right based on the machine
2879 _bfd_mn10300_elf_final_write_processing (abfd
, linker
)
2885 Elf_Internal_Shdr
**hdrpp
;
2889 switch (bfd_get_mach (abfd
))
2892 case bfd_mach_mn10300
:
2893 val
= E_MN10300_MACH_MN10300
;
2896 /* start-sanitize-am33 */
2898 val
= E_MN10300_MACH_AM33
;
2900 /* end-sanitize-am33 */
2903 elf_elfheader (abfd
)->e_flags
&= ~ (EF_MN10300_MACH
);
2904 elf_elfheader (abfd
)->e_flags
|= val
;
2908 _bfd_mn10300_elf_object_p (abfd
)
2911 bfd_default_set_arch_mach (abfd
, bfd_arch_mn10300
,
2912 elf_mn10300_mach (elf_elfheader (abfd
)->e_flags
));
2916 /* Merge backend specific data from an object file to the output
2917 object file when linking. */
2920 _bfd_mn10300_elf_merge_private_bfd_data (ibfd
, obfd
)
2924 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
2925 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
2928 if (bfd_get_arch (obfd
) == bfd_get_arch (ibfd
)
2929 && bfd_get_mach (obfd
) < bfd_get_mach (ibfd
))
2931 if (! bfd_set_arch_mach (obfd
, bfd_get_arch (ibfd
),
2932 bfd_get_mach (ibfd
)))
2940 #define TARGET_LITTLE_SYM bfd_elf32_mn10300_vec
2941 #define TARGET_LITTLE_NAME "elf32-mn10300"
2942 #define ELF_ARCH bfd_arch_mn10300
2943 #define ELF_MACHINE_CODE EM_CYGNUS_MN10300
2944 #define ELF_MAXPAGESIZE 0x1000
2946 #define elf_info_to_howto mn10300_info_to_howto
2947 #define elf_info_to_howto_rel 0
2948 #define elf_backend_can_gc_sections 1
2949 #define elf_backend_check_relocs mn10300_elf_check_relocs
2950 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
2951 #define elf_backend_relocate_section mn10300_elf_relocate_section
2952 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
2953 #define bfd_elf32_bfd_get_relocated_section_contents \
2954 mn10300_elf_get_relocated_section_contents
2955 #define bfd_elf32_bfd_link_hash_table_create \
2956 elf32_mn10300_link_hash_table_create
2958 #define elf_symbol_leading_char '_'
2960 /* So we can set bits in e_flags. */
2961 #define elf_backend_final_write_processing \
2962 _bfd_mn10300_elf_final_write_processing
2963 #define elf_backend_object_p _bfd_mn10300_elf_object_p
2965 #define bfd_elf32_bfd_merge_private_bfd_data \
2966 _bfd_mn10300_elf_merge_private_bfd_data
2969 #include "elf32-target.h"