1 /* Matsushita 10300 specific support for 32-bit ELF
2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 This file is part of BFD, the Binary File Descriptor library.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 #include "elf/mn10300.h"
27 static bfd_reloc_status_type mn10300_elf_final_link_relocate
28 PARAMS ((reloc_howto_type
*, bfd
*, bfd
*, asection
*, bfd_byte
*,
29 bfd_vma
, bfd_vma
, bfd_vma
, struct bfd_link_info
*,
31 static boolean mn10300_elf_relocate_section
32 PARAMS ((bfd
*, struct bfd_link_info
*, bfd
*, asection
*, bfd_byte
*,
33 Elf_Internal_Rela
*, Elf_Internal_Sym
*, asection
**));
34 static boolean mn10300_elf_relax_section
35 PARAMS ((bfd
*, asection
*, struct bfd_link_info
*, boolean
*));
36 static bfd_byte
* mn10300_elf_get_relocated_section_contents
37 PARAMS ((bfd
*, struct bfd_link_info
*, struct bfd_link_order
*,
38 bfd_byte
*, boolean
, asymbol
**));
39 static unsigned long elf_mn10300_mach
PARAMS ((flagword
));
41 void _bfd_mn10300_elf_final_write_processing
PARAMS ((bfd
*, boolean
));
42 boolean _bfd_mn10300_elf_object_p
PARAMS ((bfd
*));
43 boolean _bfd_mn10300_elf_merge_private_bfd_data
PARAMS ((bfd
*,bfd
*));
45 struct elf32_mn10300_link_hash_entry
{
46 /* The basic elf link hash table entry. */
47 struct elf_link_hash_entry root
;
49 /* For function symbols, the number of times this function is
50 called directly (ie by name). */
51 unsigned int direct_calls
;
53 /* For function symbols, the size of this function's stack
54 (if <= 255 bytes). We stuff this into "call" instructions
55 to this target when it's valid and profitable to do so.
57 This does not include stack allocated by movm! */
58 unsigned char stack_size
;
60 /* For function symbols, arguments (if any) for movm instruction
61 in the prologue. We stuff this value into "call" instructions
62 to the target when it's valid and profitable to do so. */
63 unsigned char movm_args
;
65 /* For funtion symbols, the amount of stack space that would be allocated
66 by the movm instruction. This is redundant with movm_args, but we
67 add it to the hash table to avoid computing it over and over. */
68 unsigned char movm_stack_size
;
70 /* When set, convert all "call" instructions to this target into "calls"
72 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
74 /* Used to mark functions which have had redundant parts of their
76 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
80 /* We derive a hash table from the main elf linker hash table so
81 we can store state variables and a secondary hash table without
82 resorting to global variables. */
83 struct elf32_mn10300_link_hash_table
{
84 /* The main hash table. */
85 struct elf_link_hash_table root
;
87 /* A hash table for static functions. We could derive a new hash table
88 instead of using the full elf32_mn10300_link_hash_table if we wanted
89 to save some memory. */
90 struct elf32_mn10300_link_hash_table
*static_hash_table
;
92 /* Random linker state flags. */
93 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
97 /* For MN10300 linker hash table. */
99 /* Get the MN10300 ELF linker hash table from a link_info structure. */
101 #define elf32_mn10300_hash_table(p) \
102 ((struct elf32_mn10300_link_hash_table *) ((p)->hash))
104 #define elf32_mn10300_link_hash_traverse(table, func, info) \
105 (elf_link_hash_traverse \
107 (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
110 static struct bfd_hash_entry
*elf32_mn10300_link_hash_newfunc
111 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
112 static struct bfd_link_hash_table
*elf32_mn10300_link_hash_table_create
114 static void elf32_mn10300_link_hash_table_free
115 PARAMS ((struct bfd_link_hash_table
*));
117 static reloc_howto_type
*bfd_elf32_bfd_reloc_type_lookup
118 PARAMS ((bfd
*abfd
, bfd_reloc_code_real_type code
));
119 static void mn10300_info_to_howto
120 PARAMS ((bfd
*, arelent
*, Elf32_Internal_Rela
*));
121 static boolean mn10300_elf_check_relocs
122 PARAMS ((bfd
*, struct bfd_link_info
*, asection
*,
123 const Elf_Internal_Rela
*));
124 static asection
*mn10300_elf_gc_mark_hook
125 PARAMS ((bfd
*, struct bfd_link_info
*info
, Elf_Internal_Rela
*,
126 struct elf_link_hash_entry
*, Elf_Internal_Sym
*));
127 static boolean mn10300_elf_relax_delete_bytes
128 PARAMS ((bfd
*, asection
*, bfd_vma
, int));
129 static boolean mn10300_elf_symbol_address_p
130 PARAMS ((bfd
*, asection
*, bfd_vma
));
131 static boolean elf32_mn10300_finish_hash_table_entry
132 PARAMS ((struct bfd_hash_entry
*, PTR
));
133 static void compute_function_info
134 PARAMS ((bfd
*, struct elf32_mn10300_link_hash_entry
*,
135 bfd_vma
, unsigned char *));
137 /* We have to use RELA instructions since md_apply_fix3 in the assembler
138 does absolutely nothing. */
141 static reloc_howto_type elf_mn10300_howto_table
[] = {
142 /* Dummy relocation. Does nothing. */
143 HOWTO (R_MN10300_NONE
,
149 complain_overflow_bitfield
,
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
,
287 struct mn10300_reloc_map
{
288 bfd_reloc_code_real_type bfd_reloc_val
;
289 unsigned char elf_reloc_val
;
292 static const struct mn10300_reloc_map mn10300_reloc_map
[] = {
293 { BFD_RELOC_NONE
, R_MN10300_NONE
, },
294 { BFD_RELOC_32
, R_MN10300_32
, },
295 { BFD_RELOC_16
, R_MN10300_16
, },
296 { BFD_RELOC_8
, R_MN10300_8
, },
297 { BFD_RELOC_32_PCREL
, R_MN10300_PCREL32
, },
298 { BFD_RELOC_16_PCREL
, R_MN10300_PCREL16
, },
299 { BFD_RELOC_8_PCREL
, R_MN10300_PCREL8
, },
300 { BFD_RELOC_24
, R_MN10300_24
, },
301 { BFD_RELOC_VTABLE_INHERIT
, R_MN10300_GNU_VTINHERIT
},
302 { BFD_RELOC_VTABLE_ENTRY
, R_MN10300_GNU_VTENTRY
},
305 static reloc_howto_type
*
306 bfd_elf32_bfd_reloc_type_lookup (abfd
, code
)
307 bfd
*abfd ATTRIBUTE_UNUSED
;
308 bfd_reloc_code_real_type code
;
313 i
< sizeof (mn10300_reloc_map
) / sizeof (struct mn10300_reloc_map
);
316 if (mn10300_reloc_map
[i
].bfd_reloc_val
== code
)
317 return &elf_mn10300_howto_table
[mn10300_reloc_map
[i
].elf_reloc_val
];
323 /* Set the howto pointer for an MN10300 ELF reloc. */
326 mn10300_info_to_howto (abfd
, cache_ptr
, dst
)
327 bfd
*abfd ATTRIBUTE_UNUSED
;
329 Elf32_Internal_Rela
*dst
;
333 r_type
= ELF32_R_TYPE (dst
->r_info
);
334 BFD_ASSERT (r_type
< (unsigned int) R_MN10300_MAX
);
335 cache_ptr
->howto
= &elf_mn10300_howto_table
[r_type
];
338 /* Look through the relocs for a section during the first phase.
339 Since we don't do .gots or .plts, we just need to consider the
340 virtual table relocs for gc. */
343 mn10300_elf_check_relocs (abfd
, info
, sec
, relocs
)
345 struct bfd_link_info
*info
;
347 const Elf_Internal_Rela
*relocs
;
349 Elf_Internal_Shdr
*symtab_hdr
;
350 struct elf_link_hash_entry
**sym_hashes
, **sym_hashes_end
;
351 const Elf_Internal_Rela
*rel
;
352 const Elf_Internal_Rela
*rel_end
;
354 if (info
->relocateable
)
357 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
358 sym_hashes
= elf_sym_hashes (abfd
);
359 sym_hashes_end
= sym_hashes
+ symtab_hdr
->sh_size
/sizeof (Elf32_External_Sym
);
360 if (!elf_bad_symtab (abfd
))
361 sym_hashes_end
-= symtab_hdr
->sh_info
;
363 rel_end
= relocs
+ sec
->reloc_count
;
364 for (rel
= relocs
; rel
< rel_end
; rel
++)
366 struct elf_link_hash_entry
*h
;
367 unsigned long r_symndx
;
369 r_symndx
= ELF32_R_SYM (rel
->r_info
);
370 if (r_symndx
< symtab_hdr
->sh_info
)
373 h
= sym_hashes
[r_symndx
- symtab_hdr
->sh_info
];
375 switch (ELF32_R_TYPE (rel
->r_info
))
377 /* This relocation describes the C++ object vtable hierarchy.
378 Reconstruct it for later use during GC. */
379 case R_MN10300_GNU_VTINHERIT
:
380 if (!_bfd_elf32_gc_record_vtinherit (abfd
, sec
, h
, rel
->r_offset
))
384 /* This relocation describes which C++ vtable entries are actually
385 used. Record for later use during GC. */
386 case R_MN10300_GNU_VTENTRY
:
387 if (!_bfd_elf32_gc_record_vtentry (abfd
, sec
, h
, rel
->r_addend
))
396 /* Return the section that should be marked against GC for a given
400 mn10300_elf_gc_mark_hook (abfd
, info
, rel
, h
, sym
)
402 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
403 Elf_Internal_Rela
*rel
;
404 struct elf_link_hash_entry
*h
;
405 Elf_Internal_Sym
*sym
;
409 switch (ELF32_R_TYPE (rel
->r_info
))
411 case R_MN10300_GNU_VTINHERIT
:
412 case R_MN10300_GNU_VTENTRY
:
416 switch (h
->root
.type
)
418 case bfd_link_hash_defined
:
419 case bfd_link_hash_defweak
:
420 return h
->root
.u
.def
.section
;
422 case bfd_link_hash_common
:
423 return h
->root
.u
.c
.p
->section
;
432 return bfd_section_from_elf_index (abfd
, sym
->st_shndx
);
438 /* Perform a relocation as part of a final link. */
439 static bfd_reloc_status_type
440 mn10300_elf_final_link_relocate (howto
, input_bfd
, output_bfd
,
441 input_section
, contents
, offset
, value
,
442 addend
, info
, sym_sec
, is_local
)
443 reloc_howto_type
*howto
;
445 bfd
*output_bfd ATTRIBUTE_UNUSED
;
446 asection
*input_section
;
451 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
452 asection
*sym_sec ATTRIBUTE_UNUSED
;
453 int is_local ATTRIBUTE_UNUSED
;
455 unsigned long r_type
= howto
->type
;
456 bfd_byte
*hit_data
= contents
+ offset
;
465 bfd_put_32 (input_bfd
, value
, hit_data
);
471 if ((long) value
> 0x7fffff || (long) value
< -0x800000)
472 return bfd_reloc_overflow
;
474 bfd_put_8 (input_bfd
, value
& 0xff, hit_data
);
475 bfd_put_8 (input_bfd
, (value
>> 8) & 0xff, hit_data
+ 1);
476 bfd_put_8 (input_bfd
, (value
>> 16) & 0xff, hit_data
+ 2);
482 if ((long) value
> 0x7fff || (long) value
< -0x8000)
483 return bfd_reloc_overflow
;
485 bfd_put_16 (input_bfd
, value
, hit_data
);
491 if ((long) value
> 0x7f || (long) value
< -0x80)
492 return bfd_reloc_overflow
;
494 bfd_put_8 (input_bfd
, value
, hit_data
);
497 case R_MN10300_PCREL8
:
498 value
-= (input_section
->output_section
->vma
499 + input_section
->output_offset
);
503 if ((long) value
> 0xff || (long) value
< -0x100)
504 return bfd_reloc_overflow
;
506 bfd_put_8 (input_bfd
, value
, hit_data
);
509 case R_MN10300_PCREL16
:
510 value
-= (input_section
->output_section
->vma
511 + input_section
->output_offset
);
515 if ((long) value
> 0xffff || (long) value
< -0x10000)
516 return bfd_reloc_overflow
;
518 bfd_put_16 (input_bfd
, value
, hit_data
);
521 case R_MN10300_PCREL32
:
522 value
-= (input_section
->output_section
->vma
523 + input_section
->output_offset
);
527 bfd_put_32 (input_bfd
, value
, hit_data
);
530 case R_MN10300_GNU_VTINHERIT
:
531 case R_MN10300_GNU_VTENTRY
:
535 return bfd_reloc_notsupported
;
539 /* Relocate an MN10300 ELF section. */
541 mn10300_elf_relocate_section (output_bfd
, info
, input_bfd
, input_section
,
542 contents
, relocs
, local_syms
, local_sections
)
544 struct bfd_link_info
*info
;
546 asection
*input_section
;
548 Elf_Internal_Rela
*relocs
;
549 Elf_Internal_Sym
*local_syms
;
550 asection
**local_sections
;
552 Elf_Internal_Shdr
*symtab_hdr
;
553 struct elf32_mn10300_link_hash_entry
**sym_hashes
;
554 Elf_Internal_Rela
*rel
, *relend
;
556 if (info
->relocateable
)
559 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
560 sym_hashes
= (struct elf32_mn10300_link_hash_entry
**)
561 (elf_sym_hashes (input_bfd
));
564 relend
= relocs
+ input_section
->reloc_count
;
565 for (; rel
< relend
; rel
++)
568 reloc_howto_type
*howto
;
569 unsigned long r_symndx
;
570 Elf_Internal_Sym
*sym
;
572 struct elf32_mn10300_link_hash_entry
*h
;
574 bfd_reloc_status_type r
;
576 r_symndx
= ELF32_R_SYM (rel
->r_info
);
577 r_type
= ELF32_R_TYPE (rel
->r_info
);
578 howto
= elf_mn10300_howto_table
+ r_type
;
580 /* Just skip the vtable gc relocs. */
581 if (r_type
== R_MN10300_GNU_VTINHERIT
582 || r_type
== R_MN10300_GNU_VTENTRY
)
588 if (r_symndx
< symtab_hdr
->sh_info
)
590 sym
= local_syms
+ r_symndx
;
591 sec
= local_sections
[r_symndx
];
592 relocation
= _bfd_elf_rela_local_sym (output_bfd
, sym
, sec
, rel
);
596 h
= sym_hashes
[r_symndx
- symtab_hdr
->sh_info
];
597 while (h
->root
.root
.type
== bfd_link_hash_indirect
598 || h
->root
.root
.type
== bfd_link_hash_warning
)
599 h
= (struct elf32_mn10300_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
600 if (h
->root
.root
.type
== bfd_link_hash_defined
601 || h
->root
.root
.type
== bfd_link_hash_defweak
)
603 sec
= h
->root
.root
.u
.def
.section
;
604 relocation
= (h
->root
.root
.u
.def
.value
605 + sec
->output_section
->vma
606 + sec
->output_offset
);
608 else if (h
->root
.root
.type
== bfd_link_hash_undefweak
)
612 if (! ((*info
->callbacks
->undefined_symbol
)
613 (info
, h
->root
.root
.root
.string
, input_bfd
,
614 input_section
, rel
->r_offset
, true)))
620 r
= mn10300_elf_final_link_relocate (howto
, input_bfd
, output_bfd
,
622 contents
, rel
->r_offset
,
623 relocation
, rel
->r_addend
,
624 info
, sec
, h
== NULL
);
626 if (r
!= bfd_reloc_ok
)
629 const char *msg
= (const char *) 0;
632 name
= h
->root
.root
.root
.string
;
635 name
= (bfd_elf_string_from_elf_section
636 (input_bfd
, symtab_hdr
->sh_link
, sym
->st_name
));
637 if (name
== NULL
|| *name
== '\0')
638 name
= bfd_section_name (input_bfd
, sec
);
643 case bfd_reloc_overflow
:
644 if (! ((*info
->callbacks
->reloc_overflow
)
645 (info
, name
, howto
->name
, (bfd_vma
) 0,
646 input_bfd
, input_section
, rel
->r_offset
)))
650 case bfd_reloc_undefined
:
651 if (! ((*info
->callbacks
->undefined_symbol
)
652 (info
, name
, input_bfd
, input_section
,
653 rel
->r_offset
, true)))
657 case bfd_reloc_outofrange
:
658 msg
= _("internal error: out of range error");
661 case bfd_reloc_notsupported
:
662 msg
= _("internal error: unsupported relocation error");
665 case bfd_reloc_dangerous
:
666 msg
= _("internal error: dangerous error");
670 msg
= _("internal error: unknown error");
674 if (!((*info
->callbacks
->warning
)
675 (info
, msg
, name
, input_bfd
, input_section
,
686 /* Finish initializing one hash table entry. */
688 elf32_mn10300_finish_hash_table_entry (gen_entry
, in_args
)
689 struct bfd_hash_entry
*gen_entry
;
690 PTR in_args ATTRIBUTE_UNUSED
;
692 struct elf32_mn10300_link_hash_entry
*entry
;
693 unsigned int byte_count
= 0;
695 entry
= (struct elf32_mn10300_link_hash_entry
*) gen_entry
;
697 if (entry
->root
.root
.type
== bfd_link_hash_warning
)
698 entry
= (struct elf32_mn10300_link_hash_entry
*) entry
->root
.root
.u
.i
.link
;
700 /* If we already know we want to convert "call" to "calls" for calls
701 to this symbol, then return now. */
702 if (entry
->flags
== MN10300_CONVERT_CALL_TO_CALLS
)
705 /* If there are no named calls to this symbol, or there's nothing we
706 can move from the function itself into the "call" instruction, then
707 note that all "call" instructions should be converted into "calls"
708 instructions and return. */
709 if (entry
->direct_calls
== 0
710 || (entry
->stack_size
== 0 && entry
->movm_args
== 0))
712 /* Make a note that we should convert "call" instructions to "calls"
713 instructions for calls to this symbol. */
714 entry
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
718 /* We may be able to move some instructions from the function itself into
719 the "call" instruction. Count how many bytes we might be able to
720 eliminate in the function itself. */
722 /* A movm instruction is two bytes. */
723 if (entry
->movm_args
)
726 /* Count the insn to allocate stack space too. */
727 if (entry
->stack_size
> 0 && entry
->stack_size
<= 128)
729 else if (entry
->stack_size
> 0 && entry
->stack_size
< 256)
732 /* If using "call" will result in larger code, then turn all
733 the associated "call" instructions into "calls" instrutions. */
734 if (byte_count
< entry
->direct_calls
)
735 entry
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
737 /* This routine never fails. */
741 /* This function handles relaxing for the mn10300.
743 There's quite a few relaxing opportunites available on the mn10300:
745 * calls:32 -> calls:16 2 bytes
746 * call:32 -> call:16 2 bytes
748 * call:32 -> calls:32 1 byte
749 * call:16 -> calls:16 1 byte
750 * These are done anytime using "calls" would result
751 in smaller code, or when necessary to preserve the
752 meaning of the program.
756 * In some circumstances we can move instructions
757 from a function prologue into a "call" instruction.
758 This is only done if the resulting code is no larger
759 than the original code.
761 * jmp:32 -> jmp:16 2 bytes
762 * jmp:16 -> bra:8 1 byte
764 * If the previous instruction is a conditional branch
765 around the jump/bra, we may be able to reverse its condition
766 and change its target to the jump's target. The jump/bra
767 can then be deleted. 2 bytes
769 * mov abs32 -> mov abs16 1 or 2 bytes
771 * Most instructions which accept imm32 can relax to imm16 1 or 2 bytes
772 - Most instructions which accept imm16 can relax to imm8 1 or 2 bytes
774 * Most instructions which accept d32 can relax to d16 1 or 2 bytes
775 - Most instructions which accept d16 can relax to d8 1 or 2 bytes
777 We don't handle imm16->imm8 or d16->d8 as they're very rare
778 and somewhat more difficult to support. */
781 mn10300_elf_relax_section (abfd
, sec
, link_info
, again
)
784 struct bfd_link_info
*link_info
;
787 Elf_Internal_Shdr
*symtab_hdr
;
788 Elf_Internal_Shdr
*shndx_hdr
;
789 Elf_Internal_Rela
*internal_relocs
= NULL
;
790 Elf_Internal_Rela
*free_relocs
= NULL
;
791 Elf_Internal_Rela
*irel
, *irelend
;
792 bfd_byte
*contents
= NULL
;
793 bfd_byte
*free_contents
= NULL
;
794 Elf32_External_Sym
*extsyms
= NULL
;
795 Elf32_External_Sym
*free_extsyms
= NULL
;
796 Elf_External_Sym_Shndx
*shndx_buf
= NULL
;
797 struct elf32_mn10300_link_hash_table
*hash_table
;
799 /* Assume nothing changes. */
802 /* We need a pointer to the mn10300 specific hash table. */
803 hash_table
= elf32_mn10300_hash_table (link_info
);
805 /* Initialize fields in each hash table entry the first time through. */
806 if ((hash_table
->flags
& MN10300_HASH_ENTRIES_INITIALIZED
) == 0)
810 /* Iterate over all the input bfds. */
811 for (input_bfd
= link_info
->input_bfds
;
813 input_bfd
= input_bfd
->link_next
)
817 /* We're going to need all the symbols for each bfd. */
818 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
819 shndx_hdr
= &elf_tdata (input_bfd
)->symtab_shndx_hdr
;
821 /* Get cached copy if it exists. */
822 if (symtab_hdr
->contents
!= NULL
)
823 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
826 /* Go get them off disk. */
829 amt
= symtab_hdr
->sh_info
;
830 amt
*= sizeof (Elf32_External_Sym
);
831 extsyms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
834 free_extsyms
= extsyms
;
835 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
836 || bfd_bread ((PTR
) extsyms
, amt
, input_bfd
) != amt
)
840 if (shndx_hdr
->sh_size
!= 0)
844 amt
= symtab_hdr
->sh_info
;
845 amt
*= sizeof (Elf_External_Sym_Shndx
);
846 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
847 if (shndx_buf
== NULL
)
849 if (bfd_seek (input_bfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
850 || bfd_bread ((PTR
) shndx_buf
, amt
, input_bfd
) != amt
)
854 /* Iterate over each section in this bfd. */
855 for (section
= input_bfd
->sections
;
857 section
= section
->next
)
859 struct elf32_mn10300_link_hash_entry
*hash
;
860 Elf_Internal_Sym
*sym
;
861 asection
*sym_sec
= NULL
;
862 const char *sym_name
;
865 /* If there's nothing to do in this section, skip it. */
866 if (! (((section
->flags
& SEC_RELOC
) != 0
867 && section
->reloc_count
!= 0)
868 || (section
->flags
& SEC_CODE
) != 0))
871 /* Get cached copy of section contents if it exists. */
872 if (elf_section_data (section
)->this_hdr
.contents
!= NULL
)
873 contents
= elf_section_data (section
)->this_hdr
.contents
;
874 else if (section
->_raw_size
!= 0)
876 /* Go get them off disk. */
877 contents
= (bfd_byte
*) bfd_malloc (section
->_raw_size
);
878 if (contents
== NULL
)
880 free_contents
= contents
;
882 if (!bfd_get_section_contents (input_bfd
, section
,
883 contents
, (file_ptr
) 0,
890 free_contents
= NULL
;
893 /* If there aren't any relocs, then there's nothing to do. */
894 if ((section
->flags
& SEC_RELOC
) != 0
895 && section
->reloc_count
!= 0)
898 /* Get a copy of the native relocations. */
899 internal_relocs
= (_bfd_elf32_link_read_relocs
900 (input_bfd
, section
, (PTR
) NULL
,
901 (Elf_Internal_Rela
*) NULL
,
902 link_info
->keep_memory
));
903 if (internal_relocs
== NULL
)
905 if (! link_info
->keep_memory
)
906 free_relocs
= internal_relocs
;
908 /* Now examine each relocation. */
909 irel
= internal_relocs
;
910 irelend
= irel
+ section
->reloc_count
;
911 for (; irel
< irelend
; irel
++)
914 unsigned long r_index
;
917 r_type
= ELF32_R_TYPE (irel
->r_info
);
918 r_index
= ELF32_R_SYM (irel
->r_info
);
920 if (r_type
< 0 || r_type
>= (int) R_MN10300_MAX
)
923 /* We need the name and hash table entry of the target
929 if (r_index
< symtab_hdr
->sh_info
)
931 /* A local symbol. */
932 Elf32_External_Sym
*esym
;
933 Elf_External_Sym_Shndx
*shndx
;
934 Elf_Internal_Sym isym
;
935 struct elf_link_hash_table
*elftab
;
938 esym
= extsyms
+ r_index
;
939 shndx
= shndx_buf
+ (shndx_buf
? r_index
: 0);
940 bfd_elf32_swap_symbol_in (input_bfd
,
945 if (isym
.st_shndx
== SHN_UNDEF
)
946 sym_sec
= bfd_und_section_ptr
;
947 else if (isym
.st_shndx
== SHN_ABS
)
948 sym_sec
= bfd_abs_section_ptr
;
949 else if (isym
.st_shndx
== SHN_COMMON
)
950 sym_sec
= bfd_com_section_ptr
;
953 = bfd_section_from_elf_index (input_bfd
,
957 = bfd_elf_string_from_elf_section (input_bfd
,
962 /* If it isn't a function, then we don't care
964 if (r_index
< symtab_hdr
->sh_info
965 && ELF_ST_TYPE (isym
.st_info
) != STT_FUNC
)
968 /* Tack on an ID so we can uniquely identify this
969 local symbol in the global hash table. */
970 amt
= strlen (sym_name
) + 10;
971 new_name
= bfd_malloc (amt
);
975 sprintf (new_name
, "%s_%08x",
976 sym_name
, (int) sym_sec
);
979 elftab
= &hash_table
->static_hash_table
->root
;
980 hash
= ((struct elf32_mn10300_link_hash_entry
*)
981 elf_link_hash_lookup (elftab
, sym_name
,
987 r_index
-= symtab_hdr
->sh_info
;
988 hash
= (struct elf32_mn10300_link_hash_entry
*)
989 elf_sym_hashes (input_bfd
)[r_index
];
992 /* If this is not a "call" instruction, then we
993 should convert "call" instructions to "calls"
995 code
= bfd_get_8 (input_bfd
,
996 contents
+ irel
->r_offset
- 1);
997 if (code
!= 0xdd && code
!= 0xcd)
998 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
1000 /* If this is a jump/call, then bump the direct_calls
1001 counter. Else force "call" to "calls" conversions. */
1002 if (r_type
== R_MN10300_PCREL32
1003 || r_type
== R_MN10300_PCREL16
)
1004 hash
->direct_calls
++;
1006 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
1010 /* Now look at the actual contents to get the stack size,
1011 and a list of what registers were saved in the prologue
1013 if ((section
->flags
& SEC_CODE
) != 0)
1016 Elf32_External_Sym
*esym
, *esymend
;
1017 Elf_External_Sym_Shndx
*shndx
;
1019 unsigned int sec_shndx
;
1021 sec_shndx
= _bfd_elf_section_from_bfd_section (input_bfd
,
1024 /* Look at each function defined in this section and
1025 update info for that function. */
1026 for (esym
= extsyms
, esymend
= esym
+ symtab_hdr
->sh_info
,
1029 esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
1031 Elf_Internal_Sym isym
;
1033 bfd_elf32_swap_symbol_in (input_bfd
, (const PTR
) esym
,
1034 (const PTR
) shndx
, &isym
);
1035 if (isym
.st_shndx
== sec_shndx
1036 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
)
1038 struct elf_link_hash_table
*elftab
;
1041 if (isym
.st_shndx
== SHN_UNDEF
)
1042 sym_sec
= bfd_und_section_ptr
;
1043 else if (isym
.st_shndx
== SHN_ABS
)
1044 sym_sec
= bfd_abs_section_ptr
;
1045 else if (isym
.st_shndx
== SHN_COMMON
)
1046 sym_sec
= bfd_com_section_ptr
;
1049 = bfd_section_from_elf_index (input_bfd
,
1052 sym_name
= (bfd_elf_string_from_elf_section
1053 (input_bfd
, symtab_hdr
->sh_link
,
1056 /* Tack on an ID so we can uniquely identify this
1057 local symbol in the global hash table. */
1058 amt
= strlen (sym_name
) + 10;
1059 new_name
= bfd_malloc (amt
);
1063 sprintf (new_name
, "%s_%08x",
1064 sym_name
, (int) sym_sec
);
1065 sym_name
= new_name
;
1067 elftab
= &hash_table
->static_hash_table
->root
;
1068 hash
= ((struct elf32_mn10300_link_hash_entry
*)
1069 elf_link_hash_lookup (elftab
, sym_name
,
1070 true, true, false));
1072 compute_function_info (input_bfd
, hash
,
1073 isym
.st_value
, contents
);
1077 esym
= extsyms
+ symtab_hdr
->sh_info
;
1078 esymend
= extsyms
+ (symtab_hdr
->sh_size
1079 / sizeof (Elf32_External_Sym
));
1080 for (idx
= 0; esym
< esymend
; esym
++, idx
++)
1082 Elf_Internal_Sym isym
;
1084 hash
= (struct elf32_mn10300_link_hash_entry
*)
1085 elf_sym_hashes (input_bfd
)[idx
];
1086 if ((hash
->root
.root
.type
== bfd_link_hash_defined
1087 || hash
->root
.root
.type
== bfd_link_hash_defweak
)
1088 && hash
->root
.root
.u
.def
.section
== section
1089 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
)
1090 compute_function_info (input_bfd
, hash
,
1091 (hash
)->root
.root
.u
.def
.value
,
1096 /* Cache or free any memory we allocated for the relocs. */
1097 if (free_relocs
!= NULL
)
1103 /* Cache or free any memory we allocated for the contents. */
1104 if (free_contents
!= NULL
)
1106 if (! link_info
->keep_memory
)
1107 free (free_contents
);
1110 /* Cache the section contents for elf_link_input_bfd. */
1111 elf_section_data (section
)->this_hdr
.contents
= contents
;
1113 free_contents
= NULL
;
1117 if (shndx_buf
!= NULL
)
1123 /* Cache or free any memory we allocated for the symbols. */
1124 if (free_extsyms
!= NULL
)
1126 if (! link_info
->keep_memory
)
1127 free (free_extsyms
);
1130 /* Cache the symbols for elf_link_input_bfd. */
1131 symtab_hdr
->contents
= (unsigned char *) extsyms
;
1133 free_extsyms
= NULL
;
1137 /* Now iterate on each symbol in the hash table and perform
1138 the final initialization steps on each. */
1139 elf32_mn10300_link_hash_traverse (hash_table
,
1140 elf32_mn10300_finish_hash_table_entry
,
1142 elf32_mn10300_link_hash_traverse (hash_table
->static_hash_table
,
1143 elf32_mn10300_finish_hash_table_entry
,
1146 /* All entries in the hash table are fully initialized. */
1147 hash_table
->flags
|= MN10300_HASH_ENTRIES_INITIALIZED
;
1149 /* Now that everything has been initialized, go through each
1150 code section and delete any prologue insns which will be
1151 redundant because their operations will be performed by
1152 a "call" instruction. */
1153 for (input_bfd
= link_info
->input_bfds
;
1155 input_bfd
= input_bfd
->link_next
)
1159 /* We're going to need all the local symbols for each bfd. */
1160 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
1161 shndx_hdr
= &elf_tdata (input_bfd
)->symtab_shndx_hdr
;
1163 /* Get cached copy if it exists. */
1164 if (symtab_hdr
->contents
!= NULL
)
1165 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1168 /* Go get them off disk. */
1171 amt
= symtab_hdr
->sh_info
;
1172 amt
*= sizeof (Elf32_External_Sym
);
1173 extsyms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
1174 if (extsyms
== NULL
)
1176 free_extsyms
= extsyms
;
1177 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1178 || bfd_bread ((PTR
) extsyms
, amt
, input_bfd
) != amt
)
1180 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1183 if (shndx_hdr
->sh_size
!= 0)
1187 amt
= symtab_hdr
->sh_info
;
1188 amt
*= sizeof (Elf_External_Sym_Shndx
);
1189 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
1190 if (shndx_buf
== NULL
)
1192 if (bfd_seek (input_bfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
1193 || bfd_bread ((PTR
) shndx_buf
, amt
, input_bfd
) != amt
)
1195 shndx_hdr
->contents
= (bfd_byte
*) shndx_buf
;
1198 /* Walk over each section in this bfd. */
1199 for (section
= input_bfd
->sections
;
1201 section
= section
->next
)
1203 unsigned int sec_shndx
;
1204 Elf32_External_Sym
*esym
, *esymend
;
1205 Elf_External_Sym_Shndx
*shndx
;
1208 /* Skip non-code sections and empty sections. */
1209 if ((section
->flags
& SEC_CODE
) == 0 || section
->_raw_size
== 0)
1212 if (section
->reloc_count
!= 0)
1214 /* Get a copy of the native relocations. */
1215 internal_relocs
= (_bfd_elf32_link_read_relocs
1216 (input_bfd
, section
, (PTR
) NULL
,
1217 (Elf_Internal_Rela
*) NULL
,
1218 link_info
->keep_memory
));
1219 if (internal_relocs
== NULL
)
1221 if (! link_info
->keep_memory
)
1222 free_relocs
= internal_relocs
;
1225 /* Get cached copy of section contents if it exists. */
1226 if (elf_section_data (section
)->this_hdr
.contents
!= NULL
)
1227 contents
= elf_section_data (section
)->this_hdr
.contents
;
1230 /* Go get them off disk. */
1231 contents
= (bfd_byte
*) bfd_malloc (section
->_raw_size
);
1232 if (contents
== NULL
)
1234 free_contents
= contents
;
1236 if (!bfd_get_section_contents (input_bfd
, section
,
1237 contents
, (file_ptr
) 0,
1238 section
->_raw_size
))
1242 sec_shndx
= _bfd_elf_section_from_bfd_section (input_bfd
,
1245 /* Now look for any function in this section which needs
1246 insns deleted from its prologue. */
1247 for (esym
= extsyms
, esymend
= esym
+ symtab_hdr
->sh_info
,
1250 esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
1252 Elf_Internal_Sym isym
;
1253 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1254 asection
*sym_sec
= NULL
;
1255 const char *sym_name
;
1257 struct elf_link_hash_table
*elftab
;
1260 bfd_elf32_swap_symbol_in (input_bfd
, (const PTR
) esym
,
1261 (const PTR
) shndx
, &isym
);
1263 if (isym
.st_shndx
!= sec_shndx
)
1266 if (isym
.st_shndx
== SHN_UNDEF
)
1267 sym_sec
= bfd_und_section_ptr
;
1268 else if (isym
.st_shndx
== SHN_ABS
)
1269 sym_sec
= bfd_abs_section_ptr
;
1270 else if (isym
.st_shndx
== SHN_COMMON
)
1271 sym_sec
= bfd_com_section_ptr
;
1274 = bfd_section_from_elf_index (input_bfd
, isym
.st_shndx
);
1277 = bfd_elf_string_from_elf_section (input_bfd
,
1278 symtab_hdr
->sh_link
,
1281 /* Tack on an ID so we can uniquely identify this
1282 local symbol in the global hash table. */
1283 amt
= strlen (sym_name
) + 10;
1284 new_name
= bfd_malloc (amt
);
1287 sprintf (new_name
, "%s_%08x", sym_name
, (int) sym_sec
);
1288 sym_name
= new_name
;
1290 elftab
= &hash_table
->static_hash_table
->root
;
1291 sym_hash
= ((struct elf32_mn10300_link_hash_entry
*)
1292 elf_link_hash_lookup (elftab
, sym_name
,
1293 false, false, false));
1296 if (sym_hash
== NULL
)
1299 if (! (sym_hash
->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1300 && ! (sym_hash
->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1304 /* Note that we've changed things. */
1305 elf_section_data (section
)->relocs
= internal_relocs
;
1308 elf_section_data (section
)->this_hdr
.contents
= contents
;
1309 free_contents
= NULL
;
1311 free_extsyms
= NULL
;
1313 /* Count how many bytes we're going to delete. */
1314 if (sym_hash
->movm_args
)
1317 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1319 else if (sym_hash
->stack_size
1320 && sym_hash
->stack_size
< 256)
1323 /* Note that we've deleted prologue bytes for this
1325 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1327 /* Actually delete the bytes. */
1328 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1334 /* Something changed. Not strictly necessary, but
1335 may lead to more relaxing opportunities. */
1340 /* Look for any global functions in this section which
1341 need insns deleted from their prologues. */
1343 idx
< (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
1344 - symtab_hdr
->sh_info
);
1347 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1349 sym_hash
= (struct elf32_mn10300_link_hash_entry
*)
1350 (elf_sym_hashes (input_bfd
)[idx
]);
1351 if ((sym_hash
->root
.root
.type
== bfd_link_hash_defined
1352 || sym_hash
->root
.root
.type
== bfd_link_hash_defweak
)
1353 && sym_hash
->root
.root
.u
.def
.section
== section
1354 && ! (sym_hash
->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1355 && ! (sym_hash
->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1360 /* Note that we've changed things. */
1361 elf_section_data (section
)->relocs
= internal_relocs
;
1364 elf_section_data (section
)->this_hdr
.contents
= contents
;
1365 free_contents
= NULL
;
1367 free_extsyms
= NULL
;
1369 /* Count how many bytes we're going to delete. */
1370 if (sym_hash
->movm_args
)
1373 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1375 else if (sym_hash
->stack_size
1376 && sym_hash
->stack_size
< 256)
1379 /* Note that we've deleted prologue bytes for this
1381 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1383 /* Actually delete the bytes. */
1384 symval
= sym_hash
->root
.root
.u
.def
.value
;
1385 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1391 /* Something changed. Not strictly necessary, but
1392 may lead to more relaxing opportunities. */
1397 /* Cache or free any memory we allocated for the relocs. */
1398 if (free_relocs
!= NULL
)
1404 /* Cache or free any memory we allocated for the contents. */
1405 if (free_contents
!= NULL
)
1407 if (! link_info
->keep_memory
)
1408 free (free_contents
);
1411 /* Cache the section contents for elf_link_input_bfd. */
1412 elf_section_data (section
)->this_hdr
.contents
= contents
;
1414 free_contents
= NULL
;
1418 if (shndx_buf
!= NULL
)
1420 shndx_hdr
->contents
= NULL
;
1425 /* Cache or free any memory we allocated for the symbols. */
1426 if (free_extsyms
!= NULL
)
1428 if (! link_info
->keep_memory
)
1430 symtab_hdr
->contents
= NULL
;
1431 free (free_extsyms
);
1433 free_extsyms
= NULL
;
1438 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
1441 internal_relocs
= NULL
;
1443 free_contents
= NULL
;
1444 free_extsyms
= NULL
;
1446 /* We don't have to do anything for a relocateable link, if
1447 this section does not have relocs, or if this is not a
1449 if (link_info
->relocateable
1450 || (sec
->flags
& SEC_RELOC
) == 0
1451 || sec
->reloc_count
== 0
1452 || (sec
->flags
& SEC_CODE
) == 0)
1455 /* If this is the first time we have been called for this section,
1456 initialize the cooked size. */
1457 if (sec
->_cooked_size
== 0)
1458 sec
->_cooked_size
= sec
->_raw_size
;
1460 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1461 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
1463 /* Get a copy of the native relocations. */
1464 internal_relocs
= (_bfd_elf32_link_read_relocs
1465 (abfd
, sec
, (PTR
) NULL
, (Elf_Internal_Rela
*) NULL
,
1466 link_info
->keep_memory
));
1467 if (internal_relocs
== NULL
)
1469 if (! link_info
->keep_memory
)
1470 free_relocs
= internal_relocs
;
1472 /* Walk through them looking for relaxing opportunities. */
1473 irelend
= internal_relocs
+ sec
->reloc_count
;
1474 for (irel
= internal_relocs
; irel
< irelend
; irel
++)
1477 struct elf32_mn10300_link_hash_entry
*h
= NULL
;
1479 /* If this isn't something that can be relaxed, then ignore
1481 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_NONE
1482 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_8
1483 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_MAX
)
1486 /* Get the section contents if we haven't done so already. */
1487 if (contents
== NULL
)
1489 /* Get cached copy if it exists. */
1490 if (elf_section_data (sec
)->this_hdr
.contents
!= NULL
)
1491 contents
= elf_section_data (sec
)->this_hdr
.contents
;
1494 /* Go get them off disk. */
1495 contents
= (bfd_byte
*) bfd_malloc (sec
->_raw_size
);
1496 if (contents
== NULL
)
1498 free_contents
= contents
;
1500 if (! bfd_get_section_contents (abfd
, sec
, contents
,
1501 (file_ptr
) 0, sec
->_raw_size
))
1506 /* Read this BFD's symbols if we haven't done so already. */
1507 if (extsyms
== NULL
)
1509 /* Get cached copy if it exists. */
1510 if (symtab_hdr
->contents
!= NULL
)
1511 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1514 /* Go get them off disk. */
1517 amt
= symtab_hdr
->sh_info
;
1518 amt
*= sizeof (Elf32_External_Sym
);
1519 extsyms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
1520 if (extsyms
== NULL
)
1522 free_extsyms
= extsyms
;
1523 if (bfd_seek (abfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1524 || bfd_bread ((PTR
) extsyms
, amt
, abfd
) != amt
)
1526 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1529 if (shndx_hdr
->sh_size
!= 0)
1533 amt
= symtab_hdr
->sh_info
;
1534 amt
*= sizeof (Elf_External_Sym_Shndx
);
1535 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
1536 if (shndx_buf
== NULL
)
1538 if (bfd_seek (abfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
1539 || bfd_bread ((PTR
) shndx_buf
, amt
, abfd
) != amt
)
1541 shndx_hdr
->contents
= (bfd_byte
*) shndx_buf
;
1545 /* Get the value of the symbol referred to by the reloc. */
1546 if (ELF32_R_SYM (irel
->r_info
) < symtab_hdr
->sh_info
)
1548 Elf32_External_Sym
*esym
;
1549 Elf_External_Sym_Shndx
*shndx
;
1550 Elf_Internal_Sym isym
;
1551 asection
*sym_sec
= NULL
;
1552 const char *sym_name
;
1555 /* A local symbol. */
1556 esym
= extsyms
+ ELF32_R_SYM (irel
->r_info
);
1557 shndx
= shndx_buf
+ (shndx_buf
? ELF32_R_SYM (irel
->r_info
) : 0);
1558 bfd_elf32_swap_symbol_in (abfd
, (const PTR
) esym
,
1559 (const PTR
) shndx
, &isym
);
1561 if (isym
.st_shndx
== SHN_UNDEF
)
1562 sym_sec
= bfd_und_section_ptr
;
1563 else if (isym
.st_shndx
== SHN_ABS
)
1564 sym_sec
= bfd_abs_section_ptr
;
1565 else if (isym
.st_shndx
== SHN_COMMON
)
1566 sym_sec
= bfd_com_section_ptr
;
1568 sym_sec
= bfd_section_from_elf_index (abfd
, isym
.st_shndx
);
1570 symval
= (isym
.st_value
1571 + sym_sec
->output_section
->vma
1572 + sym_sec
->output_offset
);
1573 sym_name
= bfd_elf_string_from_elf_section (abfd
,
1574 symtab_hdr
->sh_link
,
1577 /* Tack on an ID so we can uniquely identify this
1578 local symbol in the global hash table. */
1579 new_name
= bfd_malloc ((bfd_size_type
) strlen (sym_name
) + 10);
1582 sprintf (new_name
, "%s_%08x", sym_name
, (int) sym_sec
);
1583 sym_name
= new_name
;
1585 h
= (struct elf32_mn10300_link_hash_entry
*)
1586 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
1587 sym_name
, false, false, false);
1594 /* An external symbol. */
1595 indx
= ELF32_R_SYM (irel
->r_info
) - symtab_hdr
->sh_info
;
1596 h
= (struct elf32_mn10300_link_hash_entry
*)
1597 (elf_sym_hashes (abfd
)[indx
]);
1598 BFD_ASSERT (h
!= NULL
);
1599 if (h
->root
.root
.type
!= bfd_link_hash_defined
1600 && h
->root
.root
.type
!= bfd_link_hash_defweak
)
1602 /* This appears to be a reference to an undefined
1603 symbol. Just ignore it--it will be caught by the
1604 regular reloc processing. */
1608 symval
= (h
->root
.root
.u
.def
.value
1609 + h
->root
.root
.u
.def
.section
->output_section
->vma
1610 + h
->root
.root
.u
.def
.section
->output_offset
);
1613 /* For simplicity of coding, we are going to modify the section
1614 contents, the section relocs, and the BFD symbol table. We
1615 must tell the rest of the code not to free up this
1616 information. It would be possible to instead create a table
1617 of changes which have to be made, as is done in coff-mips.c;
1618 that would be more work, but would require less memory when
1619 the linker is run. */
1621 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
1622 branch/call, also deal with "call" -> "calls" conversions and
1623 insertion of prologue data into "call" instructions. */
1624 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL32
)
1626 bfd_vma value
= symval
;
1628 /* If we've got a "call" instruction that needs to be turned
1629 into a "calls" instruction, do so now. It saves a byte. */
1630 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1634 /* Get the opcode. */
1635 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1637 /* Make sure we're working with a "call" instruction! */
1640 /* Note that we've changed the relocs, section contents,
1642 elf_section_data (sec
)->relocs
= internal_relocs
;
1645 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1646 free_contents
= NULL
;
1648 free_extsyms
= NULL
;
1650 /* Fix the opcode. */
1651 bfd_put_8 (abfd
, 0xfc, contents
+ irel
->r_offset
- 1);
1652 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1654 /* Fix irel->r_offset and irel->r_addend. */
1655 irel
->r_offset
+= 1;
1656 irel
->r_addend
+= 1;
1658 /* Delete one byte of data. */
1659 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1660 irel
->r_offset
+ 3, 1))
1663 /* That will change things, so, we should relax again.
1664 Note that this is not required, and it may be slow. */
1670 /* We've got a "call" instruction which needs some data
1671 from target function filled in. */
1674 /* Get the opcode. */
1675 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1677 /* Insert data from the target function into the "call"
1678 instruction if needed. */
1681 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 4);
1682 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1683 contents
+ irel
->r_offset
+ 5);
1687 /* Deal with pc-relative gunk. */
1688 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1689 value
-= irel
->r_offset
;
1690 value
+= irel
->r_addend
;
1692 /* See if the value will fit in 16 bits, note the high value is
1693 0x7fff + 2 as the target will be two bytes closer if we are
1695 if ((long) value
< 0x8001 && (long) value
> -0x8000)
1699 /* Get the opcode. */
1700 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1702 if (code
!= 0xdc && code
!= 0xdd && code
!= 0xff)
1705 /* Note that we've changed the relocs, section contents, etc. */
1706 elf_section_data (sec
)->relocs
= internal_relocs
;
1709 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1710 free_contents
= NULL
;
1712 free_extsyms
= NULL
;
1714 /* Fix the opcode. */
1716 bfd_put_8 (abfd
, 0xcc, contents
+ irel
->r_offset
- 1);
1717 else if (code
== 0xdd)
1718 bfd_put_8 (abfd
, 0xcd, contents
+ irel
->r_offset
- 1);
1719 else if (code
== 0xff)
1720 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
1722 /* Fix the relocation's type. */
1723 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1726 /* Delete two bytes of data. */
1727 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1728 irel
->r_offset
+ 1, 2))
1731 /* That will change things, so, we should relax again.
1732 Note that this is not required, and it may be slow. */
1737 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
1739 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL16
)
1741 bfd_vma value
= symval
;
1743 /* If we've got a "call" instruction that needs to be turned
1744 into a "calls" instruction, do so now. It saves a byte. */
1745 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1749 /* Get the opcode. */
1750 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1752 /* Make sure we're working with a "call" instruction! */
1755 /* Note that we've changed the relocs, section contents,
1757 elf_section_data (sec
)->relocs
= internal_relocs
;
1760 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1761 free_contents
= NULL
;
1763 free_extsyms
= NULL
;
1765 /* Fix the opcode. */
1766 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 1);
1767 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1769 /* Fix irel->r_offset and irel->r_addend. */
1770 irel
->r_offset
+= 1;
1771 irel
->r_addend
+= 1;
1773 /* Delete one byte of data. */
1774 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1775 irel
->r_offset
+ 1, 1))
1778 /* That will change things, so, we should relax again.
1779 Note that this is not required, and it may be slow. */
1787 /* Get the opcode. */
1788 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1790 /* Insert data from the target function into the "call"
1791 instruction if needed. */
1794 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 2);
1795 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1796 contents
+ irel
->r_offset
+ 3);
1800 /* Deal with pc-relative gunk. */
1801 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1802 value
-= irel
->r_offset
;
1803 value
+= irel
->r_addend
;
1805 /* See if the value will fit in 8 bits, note the high value is
1806 0x7f + 1 as the target will be one bytes closer if we are
1808 if ((long) value
< 0x80 && (long) value
> -0x80)
1812 /* Get the opcode. */
1813 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1818 /* Note that we've changed the relocs, section contents, etc. */
1819 elf_section_data (sec
)->relocs
= internal_relocs
;
1822 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1823 free_contents
= NULL
;
1825 free_extsyms
= NULL
;
1827 /* Fix the opcode. */
1828 bfd_put_8 (abfd
, 0xca, contents
+ irel
->r_offset
- 1);
1830 /* Fix the relocation's type. */
1831 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1834 /* Delete one byte of data. */
1835 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1836 irel
->r_offset
+ 1, 1))
1839 /* That will change things, so, we should relax again.
1840 Note that this is not required, and it may be slow. */
1845 /* Try to eliminate an unconditional 8 bit pc-relative branch
1846 which immediately follows a conditional 8 bit pc-relative
1847 branch around the unconditional branch.
1854 This happens when the bCC can't reach lab2 at assembly time,
1855 but due to other relaxations it can reach at link time. */
1856 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL8
)
1858 Elf_Internal_Rela
*nrel
;
1859 bfd_vma value
= symval
;
1862 /* Deal with pc-relative gunk. */
1863 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1864 value
-= irel
->r_offset
;
1865 value
+= irel
->r_addend
;
1867 /* Do nothing if this reloc is the last byte in the section. */
1868 if (irel
->r_offset
== sec
->_cooked_size
)
1871 /* See if the next instruction is an unconditional pc-relative
1872 branch, more often than not this test will fail, so we
1873 test it first to speed things up. */
1874 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
+ 1);
1878 /* Also make sure the next relocation applies to the next
1879 instruction and that it's a pc-relative 8 bit branch. */
1882 || irel
->r_offset
+ 2 != nrel
->r_offset
1883 || ELF32_R_TYPE (nrel
->r_info
) != (int) R_MN10300_PCREL8
)
1886 /* Make sure our destination immediately follows the
1887 unconditional branch. */
1888 if (symval
!= (sec
->output_section
->vma
+ sec
->output_offset
1889 + irel
->r_offset
+ 3))
1892 /* Now make sure we are a conditional branch. This may not
1893 be necessary, but why take the chance.
1895 Note these checks assume that R_MN10300_PCREL8 relocs
1896 only occur on bCC and bCCx insns. If they occured
1897 elsewhere, we'd need to know the start of this insn
1898 for this check to be accurate. */
1899 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1900 if (code
!= 0xc0 && code
!= 0xc1 && code
!= 0xc2
1901 && code
!= 0xc3 && code
!= 0xc4 && code
!= 0xc5
1902 && code
!= 0xc6 && code
!= 0xc7 && code
!= 0xc8
1903 && code
!= 0xc9 && code
!= 0xe8 && code
!= 0xe9
1904 && code
!= 0xea && code
!= 0xeb)
1907 /* We also have to be sure there is no symbol/label
1908 at the unconditional branch. */
1909 if (mn10300_elf_symbol_address_p (abfd
, sec
, irel
->r_offset
+ 1))
1912 /* Note that we've changed the relocs, section contents, etc. */
1913 elf_section_data (sec
)->relocs
= internal_relocs
;
1916 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1917 free_contents
= NULL
;
1919 free_extsyms
= NULL
;
1921 /* Reverse the condition of the first branch. */
1967 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
1969 /* Set the reloc type and symbol for the first branch
1970 from the second branch. */
1971 irel
->r_info
= nrel
->r_info
;
1973 /* Make the reloc for the second branch a null reloc. */
1974 nrel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (nrel
->r_info
),
1977 /* Delete two bytes of data. */
1978 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1979 irel
->r_offset
+ 1, 2))
1982 /* That will change things, so, we should relax again.
1983 Note that this is not required, and it may be slow. */
1987 /* Try to turn a 24 immediate, displacement or absolute address
1988 into a 8 immediate, displacement or absolute address. */
1989 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_24
)
1991 bfd_vma value
= symval
;
1992 value
+= irel
->r_addend
;
1994 /* See if the value will fit in 8 bits. */
1995 if ((long) value
< 0x7f && (long) value
> -0x80)
1999 /* AM33 insns which have 24 operands are 6 bytes long and
2000 will have 0xfd as the first byte. */
2002 /* Get the first opcode. */
2003 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
2007 /* Get the second opcode. */
2008 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2010 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
2011 equivalent instructions exists. */
2012 if (code
!= 0x6b && code
!= 0x7b
2013 && code
!= 0x8b && code
!= 0x9b
2014 && ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
2015 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
2016 || (code
& 0x0f) == 0x0e))
2018 /* Not safe if the high bit is on as relaxing may
2019 move the value out of high mem and thus not fit
2020 in a signed 8bit value. This is currently over
2022 if ((value
& 0x80) == 0)
2024 /* Note that we've changed the relocation contents,
2026 elf_section_data (sec
)->relocs
= internal_relocs
;
2029 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2030 free_contents
= NULL
;
2032 free_extsyms
= NULL
;
2034 /* Fix the opcode. */
2035 bfd_put_8 (abfd
, 0xfb, contents
+ irel
->r_offset
- 3);
2036 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2038 /* Fix the relocation's type. */
2040 ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2043 /* Delete two bytes of data. */
2044 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2045 irel
->r_offset
+ 1, 2))
2048 /* That will change things, so, we should relax
2049 again. Note that this is not required, and it
2059 /* Try to turn a 32bit immediate, displacement or absolute address
2060 into a 16bit immediate, displacement or absolute address. */
2061 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_32
)
2063 bfd_vma value
= symval
;
2064 value
+= irel
->r_addend
;
2066 /* See if the value will fit in 24 bits.
2067 We allow any 16bit match here. We prune those we can't
2069 if ((long) value
< 0x7fffff && (long) value
> -0x800000)
2073 /* AM33 insns which have 32bit operands are 7 bytes long and
2074 will have 0xfe as the first byte. */
2076 /* Get the first opcode. */
2077 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
2081 /* Get the second opcode. */
2082 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2084 /* All the am33 32 -> 24 relaxing possibilities. */
2085 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
2086 equivalent instructions exists. */
2087 if (code
!= 0x6b && code
!= 0x7b
2088 && code
!= 0x8b && code
!= 0x9b
2089 && ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
2090 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
2091 || (code
& 0x0f) == 0x0e))
2093 /* Not safe if the high bit is on as relaxing may
2094 move the value out of high mem and thus not fit
2095 in a signed 16bit value. This is currently over
2097 if ((value
& 0x8000) == 0)
2099 /* Note that we've changed the relocation contents,
2101 elf_section_data (sec
)->relocs
= internal_relocs
;
2104 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2105 free_contents
= NULL
;
2107 free_extsyms
= NULL
;
2109 /* Fix the opcode. */
2110 bfd_put_8 (abfd
, 0xfd, contents
+ irel
->r_offset
- 3);
2111 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2113 /* Fix the relocation's type. */
2115 ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2118 /* Delete one byte of data. */
2119 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2120 irel
->r_offset
+ 3, 1))
2123 /* That will change things, so, we should relax
2124 again. Note that this is not required, and it
2133 /* See if the value will fit in 16 bits.
2134 We allow any 16bit match here. We prune those we can't
2136 if ((long) value
< 0x7fff && (long) value
> -0x8000)
2140 /* Most insns which have 32bit operands are 6 bytes long;
2141 exceptions are pcrel insns and bit insns.
2143 We handle pcrel insns above. We don't bother trying
2144 to handle the bit insns here.
2146 The first byte of the remaining insns will be 0xfc. */
2148 /* Get the first opcode. */
2149 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2154 /* Get the second opcode. */
2155 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
2157 if ((code
& 0xf0) < 0x80)
2158 switch (code
& 0xf0)
2160 /* mov (d32,am),dn -> mov (d32,am),dn
2161 mov dm,(d32,am) -> mov dn,(d32,am)
2162 mov (d32,am),an -> mov (d32,am),an
2163 mov dm,(d32,am) -> mov dn,(d32,am)
2164 movbu (d32,am),dn -> movbu (d32,am),dn
2165 movbu dm,(d32,am) -> movbu dn,(d32,am)
2166 movhu (d32,am),dn -> movhu (d32,am),dn
2167 movhu dm,(d32,am) -> movhu dn,(d32,am) */
2176 /* Not safe if the high bit is on as relaxing may
2177 move the value out of high mem and thus not fit
2178 in a signed 16bit value. */
2180 && (value
& 0x8000))
2183 /* Note that we've changed the relocation contents, etc. */
2184 elf_section_data (sec
)->relocs
= internal_relocs
;
2187 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2188 free_contents
= NULL
;
2190 free_extsyms
= NULL
;
2192 /* Fix the opcode. */
2193 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2194 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2196 /* Fix the relocation's type. */
2197 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2200 /* Delete two bytes of data. */
2201 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2202 irel
->r_offset
+ 2, 2))
2205 /* That will change things, so, we should relax again.
2206 Note that this is not required, and it may be slow. */
2210 else if ((code
& 0xf0) == 0x80
2211 || (code
& 0xf0) == 0x90)
2212 switch (code
& 0xf3)
2214 /* mov dn,(abs32) -> mov dn,(abs16)
2215 movbu dn,(abs32) -> movbu dn,(abs16)
2216 movhu dn,(abs32) -> movhu dn,(abs16) */
2220 /* Note that we've changed the relocation contents, etc. */
2221 elf_section_data (sec
)->relocs
= internal_relocs
;
2224 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2225 free_contents
= NULL
;
2227 free_extsyms
= NULL
;
2229 if ((code
& 0xf3) == 0x81)
2230 code
= 0x01 + (code
& 0x0c);
2231 else if ((code
& 0xf3) == 0x82)
2232 code
= 0x02 + (code
& 0x0c);
2233 else if ((code
& 0xf3) == 0x83)
2234 code
= 0x03 + (code
& 0x0c);
2238 /* Fix the opcode. */
2239 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2241 /* Fix the relocation's type. */
2242 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2245 /* The opcode got shorter too, so we have to fix the
2246 addend and offset too! */
2247 irel
->r_offset
-= 1;
2249 /* Delete three bytes of data. */
2250 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2251 irel
->r_offset
+ 1, 3))
2254 /* That will change things, so, we should relax again.
2255 Note that this is not required, and it may be slow. */
2259 /* mov am,(abs32) -> mov am,(abs16)
2260 mov am,(d32,sp) -> mov am,(d16,sp)
2261 mov dm,(d32,sp) -> mov dm,(d32,sp)
2262 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
2263 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
2269 /* sp-based offsets are zero-extended. */
2270 if (code
>= 0x90 && code
<= 0x93
2274 /* Note that we've changed the relocation contents, etc. */
2275 elf_section_data (sec
)->relocs
= internal_relocs
;
2278 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2279 free_contents
= NULL
;
2281 free_extsyms
= NULL
;
2283 /* Fix the opcode. */
2284 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2285 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2287 /* Fix the relocation's type. */
2288 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2291 /* Delete two bytes of data. */
2292 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2293 irel
->r_offset
+ 2, 2))
2296 /* That will change things, so, we should relax again.
2297 Note that this is not required, and it may be slow. */
2301 else if ((code
& 0xf0) < 0xf0)
2302 switch (code
& 0xfc)
2304 /* mov imm32,dn -> mov imm16,dn
2305 mov imm32,an -> mov imm16,an
2306 mov (abs32),dn -> mov (abs16),dn
2307 movbu (abs32),dn -> movbu (abs16),dn
2308 movhu (abs32),dn -> movhu (abs16),dn */
2314 /* Not safe if the high bit is on as relaxing may
2315 move the value out of high mem and thus not fit
2316 in a signed 16bit value. */
2318 && (value
& 0x8000))
2321 /* mov imm16, an zero-extends the immediate. */
2326 /* Note that we've changed the relocation contents, etc. */
2327 elf_section_data (sec
)->relocs
= internal_relocs
;
2330 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2331 free_contents
= NULL
;
2333 free_extsyms
= NULL
;
2335 if ((code
& 0xfc) == 0xcc)
2336 code
= 0x2c + (code
& 0x03);
2337 else if ((code
& 0xfc) == 0xdc)
2338 code
= 0x24 + (code
& 0x03);
2339 else if ((code
& 0xfc) == 0xa4)
2340 code
= 0x30 + (code
& 0x03);
2341 else if ((code
& 0xfc) == 0xa8)
2342 code
= 0x34 + (code
& 0x03);
2343 else if ((code
& 0xfc) == 0xac)
2344 code
= 0x38 + (code
& 0x03);
2348 /* Fix the opcode. */
2349 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2351 /* Fix the relocation's type. */
2352 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2355 /* The opcode got shorter too, so we have to fix the
2356 addend and offset too! */
2357 irel
->r_offset
-= 1;
2359 /* Delete three bytes of data. */
2360 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2361 irel
->r_offset
+ 1, 3))
2364 /* That will change things, so, we should relax again.
2365 Note that this is not required, and it may be slow. */
2369 /* mov (abs32),an -> mov (abs16),an
2370 mov (d32,sp),an -> mov (d16,sp),an
2371 mov (d32,sp),dn -> mov (d16,sp),dn
2372 movbu (d32,sp),dn -> movbu (d16,sp),dn
2373 movhu (d32,sp),dn -> movhu (d16,sp),dn
2374 add imm32,dn -> add imm16,dn
2375 cmp imm32,dn -> cmp imm16,dn
2376 add imm32,an -> add imm16,an
2377 cmp imm32,an -> cmp imm16,an
2378 and imm32,dn -> and imm16,dn
2379 or imm32,dn -> or imm16,dn
2380 xor imm32,dn -> xor imm16,dn
2381 btst imm32,dn -> btst imm16,dn */
2397 /* cmp imm16, an zero-extends the immediate. */
2402 /* So do sp-based offsets. */
2403 if (code
>= 0xb0 && code
<= 0xb3
2407 /* Note that we've changed the relocation contents, etc. */
2408 elf_section_data (sec
)->relocs
= internal_relocs
;
2411 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2412 free_contents
= NULL
;
2414 free_extsyms
= NULL
;
2416 /* Fix the opcode. */
2417 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2418 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2420 /* Fix the relocation's type. */
2421 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2424 /* Delete two bytes of data. */
2425 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2426 irel
->r_offset
+ 2, 2))
2429 /* That will change things, so, we should relax again.
2430 Note that this is not required, and it may be slow. */
2434 else if (code
== 0xfe)
2436 /* add imm32,sp -> add imm16,sp */
2438 /* Note that we've changed the relocation contents, etc. */
2439 elf_section_data (sec
)->relocs
= internal_relocs
;
2442 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2443 free_contents
= NULL
;
2445 free_extsyms
= NULL
;
2447 /* Fix the opcode. */
2448 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2449 bfd_put_8 (abfd
, 0xfe, contents
+ irel
->r_offset
- 1);
2451 /* Fix the relocation's type. */
2452 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2455 /* Delete two bytes of data. */
2456 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2457 irel
->r_offset
+ 2, 2))
2460 /* That will change things, so, we should relax again.
2461 Note that this is not required, and it may be slow. */
2469 if (free_relocs
!= NULL
)
2472 if (free_contents
!= NULL
)
2474 if (! link_info
->keep_memory
)
2475 free (free_contents
);
2478 /* Cache the section contents for elf_link_input_bfd. */
2479 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2483 if (shndx_buf
!= NULL
)
2485 shndx_hdr
->contents
= NULL
;
2489 if (free_extsyms
!= NULL
)
2491 if (! link_info
->keep_memory
)
2493 symtab_hdr
->contents
= NULL
;
2494 free (free_extsyms
);
2501 if (free_relocs
!= NULL
)
2503 if (free_contents
!= NULL
)
2504 free (free_contents
);
2505 if (shndx_buf
!= NULL
)
2507 shndx_hdr
->contents
= NULL
;
2510 if (free_extsyms
!= NULL
)
2512 symtab_hdr
->contents
= NULL
;
2513 free (free_extsyms
);
2519 /* Compute the stack size and movm arguments for the function
2520 referred to by HASH at address ADDR in section with
2521 contents CONTENTS, store the information in the hash table. */
2523 compute_function_info (abfd
, hash
, addr
, contents
)
2525 struct elf32_mn10300_link_hash_entry
*hash
;
2527 unsigned char *contents
;
2529 unsigned char byte1
, byte2
;
2530 /* We only care about a very small subset of the possible prologue
2531 sequences here. Basically we look for:
2533 movm [d2,d3,a2,a3],sp (optional)
2534 add <size>,sp (optional, and only for sizes which fit in an unsigned
2537 If we find anything else, we quit. */
2539 /* Look for movm [regs],sp */
2540 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2541 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2545 hash
->movm_args
= byte2
;
2547 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2548 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2551 /* Now figure out how much stack space will be allocated by the movm
2552 instruction. We need this kept separate from the funtion's normal
2554 if (hash
->movm_args
)
2557 if (hash
->movm_args
& 0x80)
2558 hash
->movm_stack_size
+= 4;
2561 if (hash
->movm_args
& 0x40)
2562 hash
->movm_stack_size
+= 4;
2565 if (hash
->movm_args
& 0x20)
2566 hash
->movm_stack_size
+= 4;
2569 if (hash
->movm_args
& 0x10)
2570 hash
->movm_stack_size
+= 4;
2572 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2573 if (hash
->movm_args
& 0x08)
2574 hash
->movm_stack_size
+= 8 * 4;
2576 if (bfd_get_mach (abfd
) == bfd_mach_am33
)
2578 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2579 if (hash
->movm_args
& 0x1)
2580 hash
->movm_stack_size
+= 6 * 4;
2582 /* exreg1 space. e4, e5, e6, e7 */
2583 if (hash
->movm_args
& 0x2)
2584 hash
->movm_stack_size
+= 4 * 4;
2586 /* exreg0 space. e2, e3 */
2587 if (hash
->movm_args
& 0x4)
2588 hash
->movm_stack_size
+= 2 * 4;
2592 /* Now look for the two stack adjustment variants. */
2593 if (byte1
== 0xf8 && byte2
== 0xfe)
2595 int temp
= bfd_get_8 (abfd
, contents
+ addr
+ 2);
2596 temp
= ((temp
& 0xff) ^ (~0x7f)) + 0x80;
2598 hash
->stack_size
= -temp
;
2600 else if (byte1
== 0xfa && byte2
== 0xfe)
2602 int temp
= bfd_get_16 (abfd
, contents
+ addr
+ 2);
2603 temp
= ((temp
& 0xffff) ^ (~0x7fff)) + 0x8000;
2607 hash
->stack_size
= temp
;
2610 /* If the total stack to be allocated by the call instruction is more
2611 than 255 bytes, then we can't remove the stack adjustment by using
2612 "call" (we might still be able to remove the "movm" instruction. */
2613 if (hash
->stack_size
+ hash
->movm_stack_size
> 255)
2614 hash
->stack_size
= 0;
2619 /* Delete some bytes from a section while relaxing. */
2622 mn10300_elf_relax_delete_bytes (abfd
, sec
, addr
, count
)
2628 Elf_Internal_Shdr
*symtab_hdr
;
2629 Elf_Internal_Shdr
*shndx_hdr
;
2630 Elf32_External_Sym
*extsyms
;
2631 unsigned int sec_shndx
;
2633 Elf_Internal_Rela
*irel
, *irelend
;
2634 Elf_Internal_Rela
*irelalign
;
2636 Elf32_External_Sym
*esym
, *esymend
;
2637 Elf_External_Sym_Shndx
*shndx
;
2638 struct elf_link_hash_entry
**sym_hashes
;
2639 struct elf_link_hash_entry
**end_hashes
;
2640 unsigned int symcount
;
2642 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2643 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2645 sec_shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2647 contents
= elf_section_data (sec
)->this_hdr
.contents
;
2649 /* The deletion must stop at the next ALIGN reloc for an aligment
2650 power larger than the number of bytes we are deleting. */
2653 toaddr
= sec
->_cooked_size
;
2655 irel
= elf_section_data (sec
)->relocs
;
2656 irelend
= irel
+ sec
->reloc_count
;
2658 /* Actually delete the bytes. */
2659 memmove (contents
+ addr
, contents
+ addr
+ count
,
2660 (size_t) (toaddr
- addr
- count
));
2661 sec
->_cooked_size
-= count
;
2663 /* Adjust all the relocs. */
2664 for (irel
= elf_section_data (sec
)->relocs
; irel
< irelend
; irel
++)
2666 /* Get the new reloc address. */
2667 if ((irel
->r_offset
> addr
2668 && irel
->r_offset
< toaddr
))
2669 irel
->r_offset
-= count
;
2672 /* Adjust the local symbols defined in this section. */
2673 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
2674 shndx
= (Elf_External_Sym_Shndx
*) shndx_hdr
->contents
;
2676 esymend
= esym
+ symtab_hdr
->sh_info
;
2677 for (; esym
< esymend
; esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
2679 Elf_Internal_Sym isym
;
2680 Elf_External_Sym_Shndx dummy
;
2682 bfd_elf32_swap_symbol_in (abfd
, (const PTR
) esym
, (const PTR
) shndx
,
2685 if (isym
.st_shndx
== sec_shndx
2686 && isym
.st_value
> addr
2687 && isym
.st_value
< toaddr
)
2689 isym
.st_value
-= count
;
2690 bfd_elf32_swap_symbol_out (abfd
, &isym
, (PTR
) esym
, (PTR
) &dummy
);
2694 /* Now adjust the global symbols defined in this section. */
2695 symcount
= (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
2696 - symtab_hdr
->sh_info
);
2697 sym_hashes
= elf_sym_hashes (abfd
);
2698 end_hashes
= sym_hashes
+ symcount
;
2699 for (; sym_hashes
< end_hashes
; sym_hashes
++)
2701 struct elf_link_hash_entry
*sym_hash
= *sym_hashes
;
2702 if ((sym_hash
->root
.type
== bfd_link_hash_defined
2703 || sym_hash
->root
.type
== bfd_link_hash_defweak
)
2704 && sym_hash
->root
.u
.def
.section
== sec
2705 && sym_hash
->root
.u
.def
.value
> addr
2706 && sym_hash
->root
.u
.def
.value
< toaddr
)
2708 sym_hash
->root
.u
.def
.value
-= count
;
2715 /* Return true if a symbol exists at the given address, else return
2718 mn10300_elf_symbol_address_p (abfd
, sec
, addr
)
2723 Elf_Internal_Shdr
*symtab_hdr
;
2724 Elf_Internal_Shdr
*shndx_hdr
;
2725 unsigned int sec_shndx
;
2726 Elf32_External_Sym
*esym
, *esymend
;
2727 Elf_External_Sym_Shndx
*shndx
;
2728 struct elf_link_hash_entry
**sym_hashes
;
2729 struct elf_link_hash_entry
**end_hashes
;
2730 unsigned int symcount
;
2732 sec_shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2734 /* Examine all the symbols. */
2735 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2736 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
2737 shndx
= (Elf_External_Sym_Shndx
*) shndx_hdr
->contents
;
2738 esym
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2739 esymend
= esym
+ symtab_hdr
->sh_info
;
2740 for (; esym
< esymend
; esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
2742 Elf_Internal_Sym isym
;
2744 bfd_elf32_swap_symbol_in (abfd
, (const PTR
) esym
, (const PTR
) shndx
,
2747 if (isym
.st_shndx
== sec_shndx
2748 && isym
.st_value
== addr
)
2752 symcount
= (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
2753 - symtab_hdr
->sh_info
);
2754 sym_hashes
= elf_sym_hashes (abfd
);
2755 end_hashes
= sym_hashes
+ symcount
;
2756 for (; sym_hashes
< end_hashes
; sym_hashes
++)
2758 struct elf_link_hash_entry
*sym_hash
= *sym_hashes
;
2759 if ((sym_hash
->root
.type
== bfd_link_hash_defined
2760 || sym_hash
->root
.type
== bfd_link_hash_defweak
)
2761 && sym_hash
->root
.u
.def
.section
== sec
2762 && sym_hash
->root
.u
.def
.value
== addr
)
2769 /* This is a version of bfd_generic_get_relocated_section_contents
2770 which uses mn10300_elf_relocate_section. */
2773 mn10300_elf_get_relocated_section_contents (output_bfd
, link_info
, link_order
,
2774 data
, relocateable
, symbols
)
2776 struct bfd_link_info
*link_info
;
2777 struct bfd_link_order
*link_order
;
2779 boolean relocateable
;
2782 Elf_Internal_Shdr
*symtab_hdr
;
2783 Elf_Internal_Shdr
*shndx_hdr
;
2784 asection
*input_section
= link_order
->u
.indirect
.section
;
2785 bfd
*input_bfd
= input_section
->owner
;
2786 asection
**sections
= NULL
;
2787 Elf_Internal_Rela
*internal_relocs
= NULL
;
2788 Elf32_External_Sym
*external_syms
= NULL
;
2789 Elf_External_Sym_Shndx
*shndx_buf
= NULL
;
2790 Elf_External_Sym_Shndx
*shndx
;
2791 Elf_Internal_Sym
*internal_syms
= NULL
;
2793 /* We only need to handle the case of relaxing, or of having a
2794 particular set of section contents, specially. */
2796 || elf_section_data (input_section
)->this_hdr
.contents
== NULL
)
2797 return bfd_generic_get_relocated_section_contents (output_bfd
, link_info
,
2802 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
2803 shndx_hdr
= &elf_tdata (input_bfd
)->symtab_shndx_hdr
;
2805 memcpy (data
, elf_section_data (input_section
)->this_hdr
.contents
,
2806 (size_t) input_section
->_raw_size
);
2808 if ((input_section
->flags
& SEC_RELOC
) != 0
2809 && input_section
->reloc_count
> 0)
2811 Elf_Internal_Sym
*isymp
;
2813 Elf32_External_Sym
*esym
, *esymend
;
2816 if (symtab_hdr
->contents
!= NULL
)
2817 external_syms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2818 else if (symtab_hdr
->sh_info
!= 0)
2820 amt
= symtab_hdr
->sh_info
;
2821 amt
*= sizeof (Elf32_External_Sym
);
2822 external_syms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
2823 if (external_syms
== NULL
)
2825 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
2826 || bfd_bread ((PTR
) external_syms
, amt
, input_bfd
) != amt
)
2830 if (symtab_hdr
->sh_info
!= 0 && shndx_hdr
->sh_size
!= 0)
2832 amt
= symtab_hdr
->sh_info
;
2833 amt
*= sizeof (Elf_External_Sym_Shndx
);
2834 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
2835 if (shndx_buf
== NULL
)
2837 if (bfd_seek (input_bfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
2838 || bfd_bread ((PTR
) shndx_buf
, amt
, input_bfd
) != amt
)
2842 internal_relocs
= (_bfd_elf32_link_read_relocs
2843 (input_bfd
, input_section
, (PTR
) NULL
,
2844 (Elf_Internal_Rela
*) NULL
, false));
2845 if (internal_relocs
== NULL
)
2848 amt
= symtab_hdr
->sh_info
;
2849 amt
*= sizeof (Elf_Internal_Sym
);
2850 internal_syms
= (Elf_Internal_Sym
*) bfd_malloc (amt
);
2851 if (internal_syms
== NULL
&& amt
!= 0)
2854 amt
= symtab_hdr
->sh_info
;
2855 amt
*= sizeof (asection
*);
2856 sections
= (asection
**) bfd_malloc (amt
);
2857 if (sections
== NULL
&& amt
!= 0)
2860 for (isymp
= internal_syms
, secpp
= sections
, shndx
= shndx_buf
,
2861 esym
= external_syms
, esymend
= esym
+ symtab_hdr
->sh_info
;
2863 ++esym
, ++isymp
, ++secpp
, shndx
= (shndx
? shndx
+ 1 : NULL
))
2867 bfd_elf32_swap_symbol_in (input_bfd
, (const PTR
) esym
,
2868 (const PTR
) shndx
, isymp
);
2870 if (isymp
->st_shndx
== SHN_UNDEF
)
2871 isec
= bfd_und_section_ptr
;
2872 else if (isymp
->st_shndx
== SHN_ABS
)
2873 isec
= bfd_abs_section_ptr
;
2874 else if (isymp
->st_shndx
== SHN_COMMON
)
2875 isec
= bfd_com_section_ptr
;
2877 isec
= bfd_section_from_elf_index (input_bfd
, isymp
->st_shndx
);
2882 if (! mn10300_elf_relocate_section (output_bfd
, link_info
, input_bfd
,
2883 input_section
, data
, internal_relocs
,
2884 internal_syms
, sections
))
2887 if (sections
!= NULL
)
2889 if (internal_syms
!= NULL
)
2890 free (internal_syms
);
2891 if (shndx_buf
!= NULL
)
2893 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2894 free (external_syms
);
2895 if (internal_relocs
!= elf_section_data (input_section
)->relocs
)
2896 free (internal_relocs
);
2902 if (internal_relocs
!= NULL
2903 && internal_relocs
!= elf_section_data (input_section
)->relocs
)
2904 free (internal_relocs
);
2905 if (shndx_buf
!= NULL
)
2907 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2908 free (external_syms
);
2909 if (internal_syms
!= NULL
)
2910 free (internal_syms
);
2911 if (sections
!= NULL
)
2916 /* Assorted hash table functions. */
2918 /* Initialize an entry in the link hash table. */
2920 /* Create an entry in an MN10300 ELF linker hash table. */
2922 static struct bfd_hash_entry
*
2923 elf32_mn10300_link_hash_newfunc (entry
, table
, string
)
2924 struct bfd_hash_entry
*entry
;
2925 struct bfd_hash_table
*table
;
2928 struct elf32_mn10300_link_hash_entry
*ret
=
2929 (struct elf32_mn10300_link_hash_entry
*) entry
;
2931 /* Allocate the structure if it has not already been allocated by a
2933 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2934 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2935 bfd_hash_allocate (table
,
2936 sizeof (struct elf32_mn10300_link_hash_entry
)));
2937 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2938 return (struct bfd_hash_entry
*) ret
;
2940 /* Call the allocation method of the superclass. */
2941 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2942 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry
*) ret
,
2944 if (ret
!= (struct elf32_mn10300_link_hash_entry
*) NULL
)
2946 ret
->direct_calls
= 0;
2947 ret
->stack_size
= 0;
2948 ret
->movm_stack_size
= 0;
2953 return (struct bfd_hash_entry
*) ret
;
2956 /* Create an mn10300 ELF linker hash table. */
2958 static struct bfd_link_hash_table
*
2959 elf32_mn10300_link_hash_table_create (abfd
)
2962 struct elf32_mn10300_link_hash_table
*ret
;
2963 bfd_size_type amt
= sizeof (struct elf32_mn10300_link_hash_table
);
2965 ret
= (struct elf32_mn10300_link_hash_table
*) bfd_malloc (amt
);
2966 if (ret
== (struct elf32_mn10300_link_hash_table
*) NULL
)
2969 if (! _bfd_elf_link_hash_table_init (&ret
->root
, abfd
,
2970 elf32_mn10300_link_hash_newfunc
))
2977 amt
= sizeof (struct elf_link_hash_table
);
2978 ret
->static_hash_table
2979 = (struct elf32_mn10300_link_hash_table
*) bfd_malloc (amt
);
2980 if (ret
->static_hash_table
== NULL
)
2986 if (! _bfd_elf_link_hash_table_init (&ret
->static_hash_table
->root
, abfd
,
2987 elf32_mn10300_link_hash_newfunc
))
2989 free (ret
->static_hash_table
);
2993 return &ret
->root
.root
;
2996 /* Free an mn10300 ELF linker hash table. */
2999 elf32_mn10300_link_hash_table_free (hash
)
3000 struct bfd_link_hash_table
*hash
;
3002 struct elf32_mn10300_link_hash_table
*ret
3003 = (struct elf32_mn10300_link_hash_table
*) hash
;
3005 _bfd_generic_link_hash_table_free
3006 ((struct bfd_link_hash_table
*) ret
->static_hash_table
);
3007 _bfd_generic_link_hash_table_free
3008 ((struct bfd_link_hash_table
*) ret
);
3011 static unsigned long
3012 elf_mn10300_mach (flags
)
3015 switch (flags
& EF_MN10300_MACH
)
3017 case E_MN10300_MACH_MN10300
:
3019 return bfd_mach_mn10300
;
3021 case E_MN10300_MACH_AM33
:
3022 return bfd_mach_am33
;
3026 /* The final processing done just before writing out a MN10300 ELF object
3027 file. This gets the MN10300 architecture right based on the machine
3031 _bfd_mn10300_elf_final_write_processing (abfd
, linker
)
3033 boolean linker ATTRIBUTE_UNUSED
;
3037 switch (bfd_get_mach (abfd
))
3040 case bfd_mach_mn10300
:
3041 val
= E_MN10300_MACH_MN10300
;
3045 val
= E_MN10300_MACH_AM33
;
3049 elf_elfheader (abfd
)->e_flags
&= ~ (EF_MN10300_MACH
);
3050 elf_elfheader (abfd
)->e_flags
|= val
;
3054 _bfd_mn10300_elf_object_p (abfd
)
3057 bfd_default_set_arch_mach (abfd
, bfd_arch_mn10300
,
3058 elf_mn10300_mach (elf_elfheader (abfd
)->e_flags
));
3062 /* Merge backend specific data from an object file to the output
3063 object file when linking. */
3066 _bfd_mn10300_elf_merge_private_bfd_data (ibfd
, obfd
)
3070 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
3071 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
3074 if (bfd_get_arch (obfd
) == bfd_get_arch (ibfd
)
3075 && bfd_get_mach (obfd
) < bfd_get_mach (ibfd
))
3077 if (! bfd_set_arch_mach (obfd
, bfd_get_arch (ibfd
),
3078 bfd_get_mach (ibfd
)))
3085 #define TARGET_LITTLE_SYM bfd_elf32_mn10300_vec
3086 #define TARGET_LITTLE_NAME "elf32-mn10300"
3087 #define ELF_ARCH bfd_arch_mn10300
3088 #define ELF_MACHINE_CODE EM_MN10300
3089 #define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300
3090 #define ELF_MAXPAGESIZE 0x1000
3092 #define elf_info_to_howto mn10300_info_to_howto
3093 #define elf_info_to_howto_rel 0
3094 #define elf_backend_can_gc_sections 1
3095 #define elf_backend_rela_normal 1
3096 #define elf_backend_check_relocs mn10300_elf_check_relocs
3097 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
3098 #define elf_backend_relocate_section mn10300_elf_relocate_section
3099 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
3100 #define bfd_elf32_bfd_get_relocated_section_contents \
3101 mn10300_elf_get_relocated_section_contents
3102 #define bfd_elf32_bfd_link_hash_table_create \
3103 elf32_mn10300_link_hash_table_create
3104 #define bfd_elf32_bfd_link_hash_table_free \
3105 elf32_mn10300_link_hash_table_free
3107 #define elf_symbol_leading_char '_'
3109 /* So we can set bits in e_flags. */
3110 #define elf_backend_final_write_processing \
3111 _bfd_mn10300_elf_final_write_processing
3112 #define elf_backend_object_p _bfd_mn10300_elf_object_p
3114 #define bfd_elf32_bfd_merge_private_bfd_data \
3115 _bfd_mn10300_elf_merge_private_bfd_data
3117 #include "elf32-target.h"