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
, esym
, shndx
,
943 if (isym
.st_shndx
== SHN_UNDEF
)
944 sym_sec
= bfd_und_section_ptr
;
945 else if (isym
.st_shndx
== SHN_ABS
)
946 sym_sec
= bfd_abs_section_ptr
;
947 else if (isym
.st_shndx
== SHN_COMMON
)
948 sym_sec
= bfd_com_section_ptr
;
951 = bfd_section_from_elf_index (input_bfd
,
955 = bfd_elf_string_from_elf_section (input_bfd
,
960 /* If it isn't a function, then we don't care
962 if (r_index
< symtab_hdr
->sh_info
963 && ELF_ST_TYPE (isym
.st_info
) != STT_FUNC
)
966 /* Tack on an ID so we can uniquely identify this
967 local symbol in the global hash table. */
968 amt
= strlen (sym_name
) + 10;
969 new_name
= bfd_malloc (amt
);
973 sprintf (new_name
, "%s_%08x",
974 sym_name
, (int) sym_sec
);
977 elftab
= &hash_table
->static_hash_table
->root
;
978 hash
= ((struct elf32_mn10300_link_hash_entry
*)
979 elf_link_hash_lookup (elftab
, sym_name
,
985 r_index
-= symtab_hdr
->sh_info
;
986 hash
= (struct elf32_mn10300_link_hash_entry
*)
987 elf_sym_hashes (input_bfd
)[r_index
];
990 /* If this is not a "call" instruction, then we
991 should convert "call" instructions to "calls"
993 code
= bfd_get_8 (input_bfd
,
994 contents
+ irel
->r_offset
- 1);
995 if (code
!= 0xdd && code
!= 0xcd)
996 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
998 /* If this is a jump/call, then bump the direct_calls
999 counter. Else force "call" to "calls" conversions. */
1000 if (r_type
== R_MN10300_PCREL32
1001 || r_type
== R_MN10300_PCREL16
)
1002 hash
->direct_calls
++;
1004 hash
->flags
|= MN10300_CONVERT_CALL_TO_CALLS
;
1008 /* Now look at the actual contents to get the stack size,
1009 and a list of what registers were saved in the prologue
1011 if ((section
->flags
& SEC_CODE
) != 0)
1014 Elf32_External_Sym
*esym
, *esymend
;
1015 Elf_External_Sym_Shndx
*shndx
;
1017 unsigned int sec_shndx
;
1019 sec_shndx
= _bfd_elf_section_from_bfd_section (input_bfd
,
1022 /* Look at each function defined in this section and
1023 update info for that function. */
1024 for (esym
= extsyms
, esymend
= esym
+ symtab_hdr
->sh_info
,
1027 esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
1029 Elf_Internal_Sym isym
;
1031 bfd_elf32_swap_symbol_in (input_bfd
, esym
, shndx
, &isym
);
1032 if (isym
.st_shndx
== sec_shndx
1033 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
)
1035 struct elf_link_hash_table
*elftab
;
1038 if (isym
.st_shndx
== SHN_UNDEF
)
1039 sym_sec
= bfd_und_section_ptr
;
1040 else if (isym
.st_shndx
== SHN_ABS
)
1041 sym_sec
= bfd_abs_section_ptr
;
1042 else if (isym
.st_shndx
== SHN_COMMON
)
1043 sym_sec
= bfd_com_section_ptr
;
1046 = bfd_section_from_elf_index (input_bfd
,
1049 sym_name
= (bfd_elf_string_from_elf_section
1050 (input_bfd
, symtab_hdr
->sh_link
,
1053 /* Tack on an ID so we can uniquely identify this
1054 local symbol in the global hash table. */
1055 amt
= strlen (sym_name
) + 10;
1056 new_name
= bfd_malloc (amt
);
1060 sprintf (new_name
, "%s_%08x",
1061 sym_name
, (int) sym_sec
);
1062 sym_name
= new_name
;
1064 elftab
= &hash_table
->static_hash_table
->root
;
1065 hash
= ((struct elf32_mn10300_link_hash_entry
*)
1066 elf_link_hash_lookup (elftab
, sym_name
,
1067 true, true, false));
1069 compute_function_info (input_bfd
, hash
,
1070 isym
.st_value
, contents
);
1074 esym
= extsyms
+ symtab_hdr
->sh_info
;
1075 esymend
= extsyms
+ (symtab_hdr
->sh_size
1076 / sizeof (Elf32_External_Sym
));
1077 for (idx
= 0; esym
< esymend
; esym
++, idx
++)
1079 Elf_Internal_Sym isym
;
1081 hash
= (struct elf32_mn10300_link_hash_entry
*)
1082 elf_sym_hashes (input_bfd
)[idx
];
1083 if ((hash
->root
.root
.type
== bfd_link_hash_defined
1084 || hash
->root
.root
.type
== bfd_link_hash_defweak
)
1085 && hash
->root
.root
.u
.def
.section
== section
1086 && ELF_ST_TYPE (isym
.st_info
) == STT_FUNC
)
1087 compute_function_info (input_bfd
, hash
,
1088 (hash
)->root
.root
.u
.def
.value
,
1093 /* Cache or free any memory we allocated for the relocs. */
1094 if (free_relocs
!= NULL
)
1100 /* Cache or free any memory we allocated for the contents. */
1101 if (free_contents
!= NULL
)
1103 if (! link_info
->keep_memory
)
1104 free (free_contents
);
1107 /* Cache the section contents for elf_link_input_bfd. */
1108 elf_section_data (section
)->this_hdr
.contents
= contents
;
1110 free_contents
= NULL
;
1114 if (shndx_buf
!= NULL
)
1120 /* Cache or free any memory we allocated for the symbols. */
1121 if (free_extsyms
!= NULL
)
1123 if (! link_info
->keep_memory
)
1124 free (free_extsyms
);
1127 /* Cache the symbols for elf_link_input_bfd. */
1128 symtab_hdr
->contents
= (unsigned char *) extsyms
;
1130 free_extsyms
= NULL
;
1134 /* Now iterate on each symbol in the hash table and perform
1135 the final initialization steps on each. */
1136 elf32_mn10300_link_hash_traverse (hash_table
,
1137 elf32_mn10300_finish_hash_table_entry
,
1139 elf32_mn10300_link_hash_traverse (hash_table
->static_hash_table
,
1140 elf32_mn10300_finish_hash_table_entry
,
1143 /* All entries in the hash table are fully initialized. */
1144 hash_table
->flags
|= MN10300_HASH_ENTRIES_INITIALIZED
;
1146 /* Now that everything has been initialized, go through each
1147 code section and delete any prologue insns which will be
1148 redundant because their operations will be performed by
1149 a "call" instruction. */
1150 for (input_bfd
= link_info
->input_bfds
;
1152 input_bfd
= input_bfd
->link_next
)
1156 /* We're going to need all the local symbols for each bfd. */
1157 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
1158 shndx_hdr
= &elf_tdata (input_bfd
)->symtab_shndx_hdr
;
1160 /* Get cached copy if it exists. */
1161 if (symtab_hdr
->contents
!= NULL
)
1162 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1165 /* Go get them off disk. */
1168 amt
= symtab_hdr
->sh_info
;
1169 amt
*= sizeof (Elf32_External_Sym
);
1170 extsyms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
1171 if (extsyms
== NULL
)
1173 free_extsyms
= extsyms
;
1174 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1175 || bfd_bread ((PTR
) extsyms
, amt
, input_bfd
) != amt
)
1177 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1180 if (shndx_hdr
->sh_size
!= 0)
1184 amt
= symtab_hdr
->sh_info
;
1185 amt
*= sizeof (Elf_External_Sym_Shndx
);
1186 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
1187 if (shndx_buf
== NULL
)
1189 if (bfd_seek (input_bfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
1190 || bfd_bread ((PTR
) shndx_buf
, amt
, input_bfd
) != amt
)
1192 shndx_hdr
->contents
= (bfd_byte
*) shndx_buf
;
1195 /* Walk over each section in this bfd. */
1196 for (section
= input_bfd
->sections
;
1198 section
= section
->next
)
1200 unsigned int sec_shndx
;
1201 Elf32_External_Sym
*esym
, *esymend
;
1202 Elf_External_Sym_Shndx
*shndx
;
1205 /* Skip non-code sections and empty sections. */
1206 if ((section
->flags
& SEC_CODE
) == 0 || section
->_raw_size
== 0)
1209 if (section
->reloc_count
!= 0)
1211 /* Get a copy of the native relocations. */
1212 internal_relocs
= (_bfd_elf32_link_read_relocs
1213 (input_bfd
, section
, (PTR
) NULL
,
1214 (Elf_Internal_Rela
*) NULL
,
1215 link_info
->keep_memory
));
1216 if (internal_relocs
== NULL
)
1218 if (! link_info
->keep_memory
)
1219 free_relocs
= internal_relocs
;
1222 /* Get cached copy of section contents if it exists. */
1223 if (elf_section_data (section
)->this_hdr
.contents
!= NULL
)
1224 contents
= elf_section_data (section
)->this_hdr
.contents
;
1227 /* Go get them off disk. */
1228 contents
= (bfd_byte
*) bfd_malloc (section
->_raw_size
);
1229 if (contents
== NULL
)
1231 free_contents
= contents
;
1233 if (!bfd_get_section_contents (input_bfd
, section
,
1234 contents
, (file_ptr
) 0,
1235 section
->_raw_size
))
1239 sec_shndx
= _bfd_elf_section_from_bfd_section (input_bfd
,
1242 /* Now look for any function in this section which needs
1243 insns deleted from its prologue. */
1244 for (esym
= extsyms
, esymend
= esym
+ symtab_hdr
->sh_info
,
1247 esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
1249 Elf_Internal_Sym isym
;
1250 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1251 asection
*sym_sec
= NULL
;
1252 const char *sym_name
;
1254 struct elf_link_hash_table
*elftab
;
1257 bfd_elf32_swap_symbol_in (input_bfd
, esym
, shndx
, &isym
);
1259 if (isym
.st_shndx
!= sec_shndx
)
1262 if (isym
.st_shndx
== SHN_UNDEF
)
1263 sym_sec
= bfd_und_section_ptr
;
1264 else if (isym
.st_shndx
== SHN_ABS
)
1265 sym_sec
= bfd_abs_section_ptr
;
1266 else if (isym
.st_shndx
== SHN_COMMON
)
1267 sym_sec
= bfd_com_section_ptr
;
1270 = bfd_section_from_elf_index (input_bfd
, isym
.st_shndx
);
1273 = bfd_elf_string_from_elf_section (input_bfd
,
1274 symtab_hdr
->sh_link
,
1277 /* Tack on an ID so we can uniquely identify this
1278 local symbol in the global hash table. */
1279 amt
= strlen (sym_name
) + 10;
1280 new_name
= bfd_malloc (amt
);
1283 sprintf (new_name
, "%s_%08x", sym_name
, (int) sym_sec
);
1284 sym_name
= new_name
;
1286 elftab
= &hash_table
->static_hash_table
->root
;
1287 sym_hash
= ((struct elf32_mn10300_link_hash_entry
*)
1288 elf_link_hash_lookup (elftab
, sym_name
,
1289 false, false, false));
1292 if (sym_hash
== NULL
)
1295 if (! (sym_hash
->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1296 && ! (sym_hash
->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1300 /* Note that we've changed things. */
1301 elf_section_data (section
)->relocs
= internal_relocs
;
1304 elf_section_data (section
)->this_hdr
.contents
= contents
;
1305 free_contents
= NULL
;
1307 free_extsyms
= NULL
;
1309 /* Count how many bytes we're going to delete. */
1310 if (sym_hash
->movm_args
)
1313 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1315 else if (sym_hash
->stack_size
1316 && sym_hash
->stack_size
< 256)
1319 /* Note that we've deleted prologue bytes for this
1321 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1323 /* Actually delete the bytes. */
1324 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1330 /* Something changed. Not strictly necessary, but
1331 may lead to more relaxing opportunities. */
1336 /* Look for any global functions in this section which
1337 need insns deleted from their prologues. */
1339 idx
< (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
1340 - symtab_hdr
->sh_info
);
1343 struct elf32_mn10300_link_hash_entry
*sym_hash
;
1345 sym_hash
= (struct elf32_mn10300_link_hash_entry
*)
1346 (elf_sym_hashes (input_bfd
)[idx
]);
1347 if ((sym_hash
->root
.root
.type
== bfd_link_hash_defined
1348 || sym_hash
->root
.root
.type
== bfd_link_hash_defweak
)
1349 && sym_hash
->root
.root
.u
.def
.section
== section
1350 && ! (sym_hash
->flags
& MN10300_CONVERT_CALL_TO_CALLS
)
1351 && ! (sym_hash
->flags
& MN10300_DELETED_PROLOGUE_BYTES
))
1356 /* Note that we've changed things. */
1357 elf_section_data (section
)->relocs
= internal_relocs
;
1360 elf_section_data (section
)->this_hdr
.contents
= contents
;
1361 free_contents
= NULL
;
1363 free_extsyms
= NULL
;
1365 /* Count how many bytes we're going to delete. */
1366 if (sym_hash
->movm_args
)
1369 if (sym_hash
->stack_size
&& sym_hash
->stack_size
<= 128)
1371 else if (sym_hash
->stack_size
1372 && sym_hash
->stack_size
< 256)
1375 /* Note that we've deleted prologue bytes for this
1377 sym_hash
->flags
|= MN10300_DELETED_PROLOGUE_BYTES
;
1379 /* Actually delete the bytes. */
1380 symval
= sym_hash
->root
.root
.u
.def
.value
;
1381 if (!mn10300_elf_relax_delete_bytes (input_bfd
,
1387 /* Something changed. Not strictly necessary, but
1388 may lead to more relaxing opportunities. */
1393 /* Cache or free any memory we allocated for the relocs. */
1394 if (free_relocs
!= NULL
)
1400 /* Cache or free any memory we allocated for the contents. */
1401 if (free_contents
!= NULL
)
1403 if (! link_info
->keep_memory
)
1404 free (free_contents
);
1407 /* Cache the section contents for elf_link_input_bfd. */
1408 elf_section_data (section
)->this_hdr
.contents
= contents
;
1410 free_contents
= NULL
;
1414 if (shndx_buf
!= NULL
)
1416 shndx_hdr
->contents
= NULL
;
1421 /* Cache or free any memory we allocated for the symbols. */
1422 if (free_extsyms
!= NULL
)
1424 if (! link_info
->keep_memory
)
1426 symtab_hdr
->contents
= NULL
;
1427 free (free_extsyms
);
1429 free_extsyms
= NULL
;
1434 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
1437 internal_relocs
= NULL
;
1439 free_contents
= NULL
;
1440 free_extsyms
= NULL
;
1442 /* We don't have to do anything for a relocateable link, if
1443 this section does not have relocs, or if this is not a
1445 if (link_info
->relocateable
1446 || (sec
->flags
& SEC_RELOC
) == 0
1447 || sec
->reloc_count
== 0
1448 || (sec
->flags
& SEC_CODE
) == 0)
1451 /* If this is the first time we have been called for this section,
1452 initialize the cooked size. */
1453 if (sec
->_cooked_size
== 0)
1454 sec
->_cooked_size
= sec
->_raw_size
;
1456 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1457 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
1459 /* Get a copy of the native relocations. */
1460 internal_relocs
= (_bfd_elf32_link_read_relocs
1461 (abfd
, sec
, (PTR
) NULL
, (Elf_Internal_Rela
*) NULL
,
1462 link_info
->keep_memory
));
1463 if (internal_relocs
== NULL
)
1465 if (! link_info
->keep_memory
)
1466 free_relocs
= internal_relocs
;
1468 /* Walk through them looking for relaxing opportunities. */
1469 irelend
= internal_relocs
+ sec
->reloc_count
;
1470 for (irel
= internal_relocs
; irel
< irelend
; irel
++)
1473 struct elf32_mn10300_link_hash_entry
*h
= NULL
;
1475 /* If this isn't something that can be relaxed, then ignore
1477 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_NONE
1478 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_8
1479 || ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_MAX
)
1482 /* Get the section contents if we haven't done so already. */
1483 if (contents
== NULL
)
1485 /* Get cached copy if it exists. */
1486 if (elf_section_data (sec
)->this_hdr
.contents
!= NULL
)
1487 contents
= elf_section_data (sec
)->this_hdr
.contents
;
1490 /* Go get them off disk. */
1491 contents
= (bfd_byte
*) bfd_malloc (sec
->_raw_size
);
1492 if (contents
== NULL
)
1494 free_contents
= contents
;
1496 if (! bfd_get_section_contents (abfd
, sec
, contents
,
1497 (file_ptr
) 0, sec
->_raw_size
))
1502 /* Read this BFD's symbols if we haven't done so already. */
1503 if (extsyms
== NULL
)
1505 /* Get cached copy if it exists. */
1506 if (symtab_hdr
->contents
!= NULL
)
1507 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
1510 /* Go get them off disk. */
1513 amt
= symtab_hdr
->sh_info
;
1514 amt
*= sizeof (Elf32_External_Sym
);
1515 extsyms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
1516 if (extsyms
== NULL
)
1518 free_extsyms
= extsyms
;
1519 if (bfd_seek (abfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
1520 || bfd_bread ((PTR
) extsyms
, amt
, abfd
) != amt
)
1522 symtab_hdr
->contents
= (bfd_byte
*) extsyms
;
1525 if (shndx_hdr
->sh_size
!= 0)
1529 amt
= symtab_hdr
->sh_info
;
1530 amt
*= sizeof (Elf_External_Sym_Shndx
);
1531 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
1532 if (shndx_buf
== NULL
)
1534 if (bfd_seek (abfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
1535 || bfd_bread ((PTR
) shndx_buf
, amt
, abfd
) != amt
)
1537 shndx_hdr
->contents
= (bfd_byte
*) shndx_buf
;
1541 /* Get the value of the symbol referred to by the reloc. */
1542 if (ELF32_R_SYM (irel
->r_info
) < symtab_hdr
->sh_info
)
1544 Elf32_External_Sym
*esym
;
1545 Elf_External_Sym_Shndx
*shndx
;
1546 Elf_Internal_Sym isym
;
1547 asection
*sym_sec
= NULL
;
1548 const char *sym_name
;
1551 /* A local symbol. */
1552 esym
= extsyms
+ ELF32_R_SYM (irel
->r_info
);
1553 shndx
= shndx_buf
+ (shndx_buf
? ELF32_R_SYM (irel
->r_info
) : 0);
1554 bfd_elf32_swap_symbol_in (abfd
, esym
, shndx
, &isym
);
1556 if (isym
.st_shndx
== SHN_UNDEF
)
1557 sym_sec
= bfd_und_section_ptr
;
1558 else if (isym
.st_shndx
== SHN_ABS
)
1559 sym_sec
= bfd_abs_section_ptr
;
1560 else if (isym
.st_shndx
== SHN_COMMON
)
1561 sym_sec
= bfd_com_section_ptr
;
1563 sym_sec
= bfd_section_from_elf_index (abfd
, isym
.st_shndx
);
1565 symval
= (isym
.st_value
1566 + sym_sec
->output_section
->vma
1567 + sym_sec
->output_offset
);
1568 sym_name
= bfd_elf_string_from_elf_section (abfd
,
1569 symtab_hdr
->sh_link
,
1572 /* Tack on an ID so we can uniquely identify this
1573 local symbol in the global hash table. */
1574 new_name
= bfd_malloc ((bfd_size_type
) strlen (sym_name
) + 10);
1577 sprintf (new_name
, "%s_%08x", sym_name
, (int) sym_sec
);
1578 sym_name
= new_name
;
1580 h
= (struct elf32_mn10300_link_hash_entry
*)
1581 elf_link_hash_lookup (&hash_table
->static_hash_table
->root
,
1582 sym_name
, false, false, false);
1589 /* An external symbol. */
1590 indx
= ELF32_R_SYM (irel
->r_info
) - symtab_hdr
->sh_info
;
1591 h
= (struct elf32_mn10300_link_hash_entry
*)
1592 (elf_sym_hashes (abfd
)[indx
]);
1593 BFD_ASSERT (h
!= NULL
);
1594 if (h
->root
.root
.type
!= bfd_link_hash_defined
1595 && h
->root
.root
.type
!= bfd_link_hash_defweak
)
1597 /* This appears to be a reference to an undefined
1598 symbol. Just ignore it--it will be caught by the
1599 regular reloc processing. */
1603 symval
= (h
->root
.root
.u
.def
.value
1604 + h
->root
.root
.u
.def
.section
->output_section
->vma
1605 + h
->root
.root
.u
.def
.section
->output_offset
);
1608 /* For simplicity of coding, we are going to modify the section
1609 contents, the section relocs, and the BFD symbol table. We
1610 must tell the rest of the code not to free up this
1611 information. It would be possible to instead create a table
1612 of changes which have to be made, as is done in coff-mips.c;
1613 that would be more work, but would require less memory when
1614 the linker is run. */
1616 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
1617 branch/call, also deal with "call" -> "calls" conversions and
1618 insertion of prologue data into "call" instructions. */
1619 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL32
)
1621 bfd_vma value
= symval
;
1623 /* If we've got a "call" instruction that needs to be turned
1624 into a "calls" instruction, do so now. It saves a byte. */
1625 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1629 /* Get the opcode. */
1630 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1632 /* Make sure we're working with a "call" instruction! */
1635 /* Note that we've changed the relocs, section contents,
1637 elf_section_data (sec
)->relocs
= internal_relocs
;
1640 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1641 free_contents
= NULL
;
1643 free_extsyms
= NULL
;
1645 /* Fix the opcode. */
1646 bfd_put_8 (abfd
, 0xfc, contents
+ irel
->r_offset
- 1);
1647 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1649 /* Fix irel->r_offset and irel->r_addend. */
1650 irel
->r_offset
+= 1;
1651 irel
->r_addend
+= 1;
1653 /* Delete one byte of data. */
1654 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1655 irel
->r_offset
+ 3, 1))
1658 /* That will change things, so, we should relax again.
1659 Note that this is not required, and it may be slow. */
1665 /* We've got a "call" instruction which needs some data
1666 from target function filled in. */
1669 /* Get the opcode. */
1670 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1672 /* Insert data from the target function into the "call"
1673 instruction if needed. */
1676 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 4);
1677 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1678 contents
+ irel
->r_offset
+ 5);
1682 /* Deal with pc-relative gunk. */
1683 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1684 value
-= irel
->r_offset
;
1685 value
+= irel
->r_addend
;
1687 /* See if the value will fit in 16 bits, note the high value is
1688 0x7fff + 2 as the target will be two bytes closer if we are
1690 if ((long) value
< 0x8001 && (long) value
> -0x8000)
1694 /* Get the opcode. */
1695 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1697 if (code
!= 0xdc && code
!= 0xdd && code
!= 0xff)
1700 /* Note that we've changed the relocs, section contents, etc. */
1701 elf_section_data (sec
)->relocs
= internal_relocs
;
1704 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1705 free_contents
= NULL
;
1707 free_extsyms
= NULL
;
1709 /* Fix the opcode. */
1711 bfd_put_8 (abfd
, 0xcc, contents
+ irel
->r_offset
- 1);
1712 else if (code
== 0xdd)
1713 bfd_put_8 (abfd
, 0xcd, contents
+ irel
->r_offset
- 1);
1714 else if (code
== 0xff)
1715 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
1717 /* Fix the relocation's type. */
1718 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1721 /* Delete two bytes of data. */
1722 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1723 irel
->r_offset
+ 1, 2))
1726 /* That will change things, so, we should relax again.
1727 Note that this is not required, and it may be slow. */
1732 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
1734 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL16
)
1736 bfd_vma value
= symval
;
1738 /* If we've got a "call" instruction that needs to be turned
1739 into a "calls" instruction, do so now. It saves a byte. */
1740 if (h
&& (h
->flags
& MN10300_CONVERT_CALL_TO_CALLS
))
1744 /* Get the opcode. */
1745 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1747 /* Make sure we're working with a "call" instruction! */
1750 /* Note that we've changed the relocs, section contents,
1752 elf_section_data (sec
)->relocs
= internal_relocs
;
1755 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1756 free_contents
= NULL
;
1758 free_extsyms
= NULL
;
1760 /* Fix the opcode. */
1761 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 1);
1762 bfd_put_8 (abfd
, 0xff, contents
+ irel
->r_offset
);
1764 /* Fix irel->r_offset and irel->r_addend. */
1765 irel
->r_offset
+= 1;
1766 irel
->r_addend
+= 1;
1768 /* Delete one byte of data. */
1769 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1770 irel
->r_offset
+ 1, 1))
1773 /* That will change things, so, we should relax again.
1774 Note that this is not required, and it may be slow. */
1782 /* Get the opcode. */
1783 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1785 /* Insert data from the target function into the "call"
1786 instruction if needed. */
1789 bfd_put_8 (abfd
, h
->movm_args
, contents
+ irel
->r_offset
+ 2);
1790 bfd_put_8 (abfd
, h
->stack_size
+ h
->movm_stack_size
,
1791 contents
+ irel
->r_offset
+ 3);
1795 /* Deal with pc-relative gunk. */
1796 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1797 value
-= irel
->r_offset
;
1798 value
+= irel
->r_addend
;
1800 /* See if the value will fit in 8 bits, note the high value is
1801 0x7f + 1 as the target will be one bytes closer if we are
1803 if ((long) value
< 0x80 && (long) value
> -0x80)
1807 /* Get the opcode. */
1808 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1813 /* Note that we've changed the relocs, section contents, etc. */
1814 elf_section_data (sec
)->relocs
= internal_relocs
;
1817 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1818 free_contents
= NULL
;
1820 free_extsyms
= NULL
;
1822 /* Fix the opcode. */
1823 bfd_put_8 (abfd
, 0xca, contents
+ irel
->r_offset
- 1);
1825 /* Fix the relocation's type. */
1826 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
1829 /* Delete one byte of data. */
1830 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1831 irel
->r_offset
+ 1, 1))
1834 /* That will change things, so, we should relax again.
1835 Note that this is not required, and it may be slow. */
1840 /* Try to eliminate an unconditional 8 bit pc-relative branch
1841 which immediately follows a conditional 8 bit pc-relative
1842 branch around the unconditional branch.
1849 This happens when the bCC can't reach lab2 at assembly time,
1850 but due to other relaxations it can reach at link time. */
1851 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_PCREL8
)
1853 Elf_Internal_Rela
*nrel
;
1854 bfd_vma value
= symval
;
1857 /* Deal with pc-relative gunk. */
1858 value
-= (sec
->output_section
->vma
+ sec
->output_offset
);
1859 value
-= irel
->r_offset
;
1860 value
+= irel
->r_addend
;
1862 /* Do nothing if this reloc is the last byte in the section. */
1863 if (irel
->r_offset
== sec
->_cooked_size
)
1866 /* See if the next instruction is an unconditional pc-relative
1867 branch, more often than not this test will fail, so we
1868 test it first to speed things up. */
1869 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
+ 1);
1873 /* Also make sure the next relocation applies to the next
1874 instruction and that it's a pc-relative 8 bit branch. */
1877 || irel
->r_offset
+ 2 != nrel
->r_offset
1878 || ELF32_R_TYPE (nrel
->r_info
) != (int) R_MN10300_PCREL8
)
1881 /* Make sure our destination immediately follows the
1882 unconditional branch. */
1883 if (symval
!= (sec
->output_section
->vma
+ sec
->output_offset
1884 + irel
->r_offset
+ 3))
1887 /* Now make sure we are a conditional branch. This may not
1888 be necessary, but why take the chance.
1890 Note these checks assume that R_MN10300_PCREL8 relocs
1891 only occur on bCC and bCCx insns. If they occured
1892 elsewhere, we'd need to know the start of this insn
1893 for this check to be accurate. */
1894 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
1895 if (code
!= 0xc0 && code
!= 0xc1 && code
!= 0xc2
1896 && code
!= 0xc3 && code
!= 0xc4 && code
!= 0xc5
1897 && code
!= 0xc6 && code
!= 0xc7 && code
!= 0xc8
1898 && code
!= 0xc9 && code
!= 0xe8 && code
!= 0xe9
1899 && code
!= 0xea && code
!= 0xeb)
1902 /* We also have to be sure there is no symbol/label
1903 at the unconditional branch. */
1904 if (mn10300_elf_symbol_address_p (abfd
, sec
, irel
->r_offset
+ 1))
1907 /* Note that we've changed the relocs, section contents, etc. */
1908 elf_section_data (sec
)->relocs
= internal_relocs
;
1911 elf_section_data (sec
)->this_hdr
.contents
= contents
;
1912 free_contents
= NULL
;
1914 free_extsyms
= NULL
;
1916 /* Reverse the condition of the first branch. */
1962 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
1964 /* Set the reloc type and symbol for the first branch
1965 from the second branch. */
1966 irel
->r_info
= nrel
->r_info
;
1968 /* Make the reloc for the second branch a null reloc. */
1969 nrel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (nrel
->r_info
),
1972 /* Delete two bytes of data. */
1973 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
1974 irel
->r_offset
+ 1, 2))
1977 /* That will change things, so, we should relax again.
1978 Note that this is not required, and it may be slow. */
1982 /* Try to turn a 24 immediate, displacement or absolute address
1983 into a 8 immediate, displacement or absolute address. */
1984 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_24
)
1986 bfd_vma value
= symval
;
1987 value
+= irel
->r_addend
;
1989 /* See if the value will fit in 8 bits. */
1990 if ((long) value
< 0x7f && (long) value
> -0x80)
1994 /* AM33 insns which have 24 operands are 6 bytes long and
1995 will have 0xfd as the first byte. */
1997 /* Get the first opcode. */
1998 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
2002 /* Get the second opcode. */
2003 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2005 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
2006 equivalent instructions exists. */
2007 if (code
!= 0x6b && code
!= 0x7b
2008 && code
!= 0x8b && code
!= 0x9b
2009 && ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
2010 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
2011 || (code
& 0x0f) == 0x0e))
2013 /* Not safe if the high bit is on as relaxing may
2014 move the value out of high mem and thus not fit
2015 in a signed 8bit value. This is currently over
2017 if ((value
& 0x80) == 0)
2019 /* Note that we've changed the relocation contents,
2021 elf_section_data (sec
)->relocs
= internal_relocs
;
2024 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2025 free_contents
= NULL
;
2027 free_extsyms
= NULL
;
2029 /* Fix the opcode. */
2030 bfd_put_8 (abfd
, 0xfb, contents
+ irel
->r_offset
- 3);
2031 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2033 /* Fix the relocation's type. */
2035 ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2038 /* Delete two bytes of data. */
2039 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2040 irel
->r_offset
+ 1, 2))
2043 /* That will change things, so, we should relax
2044 again. Note that this is not required, and it
2054 /* Try to turn a 32bit immediate, displacement or absolute address
2055 into a 16bit immediate, displacement or absolute address. */
2056 if (ELF32_R_TYPE (irel
->r_info
) == (int) R_MN10300_32
)
2058 bfd_vma value
= symval
;
2059 value
+= irel
->r_addend
;
2061 /* See if the value will fit in 24 bits.
2062 We allow any 16bit match here. We prune those we can't
2064 if ((long) value
< 0x7fffff && (long) value
> -0x800000)
2068 /* AM33 insns which have 32bit operands are 7 bytes long and
2069 will have 0xfe as the first byte. */
2071 /* Get the first opcode. */
2072 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 3);
2076 /* Get the second opcode. */
2077 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2079 /* All the am33 32 -> 24 relaxing possibilities. */
2080 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
2081 equivalent instructions exists. */
2082 if (code
!= 0x6b && code
!= 0x7b
2083 && code
!= 0x8b && code
!= 0x9b
2084 && ((code
& 0x0f) == 0x09 || (code
& 0x0f) == 0x08
2085 || (code
& 0x0f) == 0x0a || (code
& 0x0f) == 0x0b
2086 || (code
& 0x0f) == 0x0e))
2088 /* Not safe if the high bit is on as relaxing may
2089 move the value out of high mem and thus not fit
2090 in a signed 16bit value. This is currently over
2092 if ((value
& 0x8000) == 0)
2094 /* Note that we've changed the relocation contents,
2096 elf_section_data (sec
)->relocs
= internal_relocs
;
2099 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2100 free_contents
= NULL
;
2102 free_extsyms
= NULL
;
2104 /* Fix the opcode. */
2105 bfd_put_8 (abfd
, 0xfd, contents
+ irel
->r_offset
- 3);
2106 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2108 /* Fix the relocation's type. */
2110 ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2113 /* Delete one byte of data. */
2114 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2115 irel
->r_offset
+ 3, 1))
2118 /* That will change things, so, we should relax
2119 again. Note that this is not required, and it
2128 /* See if the value will fit in 16 bits.
2129 We allow any 16bit match here. We prune those we can't
2131 if ((long) value
< 0x7fff && (long) value
> -0x8000)
2135 /* Most insns which have 32bit operands are 6 bytes long;
2136 exceptions are pcrel insns and bit insns.
2138 We handle pcrel insns above. We don't bother trying
2139 to handle the bit insns here.
2141 The first byte of the remaining insns will be 0xfc. */
2143 /* Get the first opcode. */
2144 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 2);
2149 /* Get the second opcode. */
2150 code
= bfd_get_8 (abfd
, contents
+ irel
->r_offset
- 1);
2152 if ((code
& 0xf0) < 0x80)
2153 switch (code
& 0xf0)
2155 /* mov (d32,am),dn -> mov (d32,am),dn
2156 mov dm,(d32,am) -> mov dn,(d32,am)
2157 mov (d32,am),an -> mov (d32,am),an
2158 mov dm,(d32,am) -> mov dn,(d32,am)
2159 movbu (d32,am),dn -> movbu (d32,am),dn
2160 movbu dm,(d32,am) -> movbu dn,(d32,am)
2161 movhu (d32,am),dn -> movhu (d32,am),dn
2162 movhu dm,(d32,am) -> movhu dn,(d32,am) */
2171 /* Not safe if the high bit is on as relaxing may
2172 move the value out of high mem and thus not fit
2173 in a signed 16bit value. */
2175 && (value
& 0x8000))
2178 /* Note that we've changed the relocation contents, etc. */
2179 elf_section_data (sec
)->relocs
= internal_relocs
;
2182 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2183 free_contents
= NULL
;
2185 free_extsyms
= NULL
;
2187 /* Fix the opcode. */
2188 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2189 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2191 /* Fix the relocation's type. */
2192 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2195 /* Delete two bytes of data. */
2196 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2197 irel
->r_offset
+ 2, 2))
2200 /* That will change things, so, we should relax again.
2201 Note that this is not required, and it may be slow. */
2205 else if ((code
& 0xf0) == 0x80
2206 || (code
& 0xf0) == 0x90)
2207 switch (code
& 0xf3)
2209 /* mov dn,(abs32) -> mov dn,(abs16)
2210 movbu dn,(abs32) -> movbu dn,(abs16)
2211 movhu dn,(abs32) -> movhu dn,(abs16) */
2215 /* Note that we've changed the relocation contents, etc. */
2216 elf_section_data (sec
)->relocs
= internal_relocs
;
2219 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2220 free_contents
= NULL
;
2222 free_extsyms
= NULL
;
2224 if ((code
& 0xf3) == 0x81)
2225 code
= 0x01 + (code
& 0x0c);
2226 else if ((code
& 0xf3) == 0x82)
2227 code
= 0x02 + (code
& 0x0c);
2228 else if ((code
& 0xf3) == 0x83)
2229 code
= 0x03 + (code
& 0x0c);
2233 /* Fix the opcode. */
2234 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2236 /* Fix the relocation's type. */
2237 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2240 /* The opcode got shorter too, so we have to fix the
2241 addend and offset too! */
2242 irel
->r_offset
-= 1;
2244 /* Delete three bytes of data. */
2245 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2246 irel
->r_offset
+ 1, 3))
2249 /* That will change things, so, we should relax again.
2250 Note that this is not required, and it may be slow. */
2254 /* mov am,(abs32) -> mov am,(abs16)
2255 mov am,(d32,sp) -> mov am,(d16,sp)
2256 mov dm,(d32,sp) -> mov dm,(d32,sp)
2257 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
2258 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
2264 /* sp-based offsets are zero-extended. */
2265 if (code
>= 0x90 && code
<= 0x93
2269 /* Note that we've changed the relocation contents, etc. */
2270 elf_section_data (sec
)->relocs
= internal_relocs
;
2273 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2274 free_contents
= NULL
;
2276 free_extsyms
= NULL
;
2278 /* Fix the opcode. */
2279 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2280 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2282 /* Fix the relocation's type. */
2283 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2286 /* Delete two bytes of data. */
2287 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2288 irel
->r_offset
+ 2, 2))
2291 /* That will change things, so, we should relax again.
2292 Note that this is not required, and it may be slow. */
2296 else if ((code
& 0xf0) < 0xf0)
2297 switch (code
& 0xfc)
2299 /* mov imm32,dn -> mov imm16,dn
2300 mov imm32,an -> mov imm16,an
2301 mov (abs32),dn -> mov (abs16),dn
2302 movbu (abs32),dn -> movbu (abs16),dn
2303 movhu (abs32),dn -> movhu (abs16),dn */
2309 /* Not safe if the high bit is on as relaxing may
2310 move the value out of high mem and thus not fit
2311 in a signed 16bit value. */
2313 && (value
& 0x8000))
2316 /* mov imm16, an zero-extends the immediate. */
2321 /* Note that we've changed the relocation contents, etc. */
2322 elf_section_data (sec
)->relocs
= internal_relocs
;
2325 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2326 free_contents
= NULL
;
2328 free_extsyms
= NULL
;
2330 if ((code
& 0xfc) == 0xcc)
2331 code
= 0x2c + (code
& 0x03);
2332 else if ((code
& 0xfc) == 0xdc)
2333 code
= 0x24 + (code
& 0x03);
2334 else if ((code
& 0xfc) == 0xa4)
2335 code
= 0x30 + (code
& 0x03);
2336 else if ((code
& 0xfc) == 0xa8)
2337 code
= 0x34 + (code
& 0x03);
2338 else if ((code
& 0xfc) == 0xac)
2339 code
= 0x38 + (code
& 0x03);
2343 /* Fix the opcode. */
2344 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 2);
2346 /* Fix the relocation's type. */
2347 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2350 /* The opcode got shorter too, so we have to fix the
2351 addend and offset too! */
2352 irel
->r_offset
-= 1;
2354 /* Delete three bytes of data. */
2355 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2356 irel
->r_offset
+ 1, 3))
2359 /* That will change things, so, we should relax again.
2360 Note that this is not required, and it may be slow. */
2364 /* mov (abs32),an -> mov (abs16),an
2365 mov (d32,sp),an -> mov (d16,sp),an
2366 mov (d32,sp),dn -> mov (d16,sp),dn
2367 movbu (d32,sp),dn -> movbu (d16,sp),dn
2368 movhu (d32,sp),dn -> movhu (d16,sp),dn
2369 add imm32,dn -> add imm16,dn
2370 cmp imm32,dn -> cmp imm16,dn
2371 add imm32,an -> add imm16,an
2372 cmp imm32,an -> cmp imm16,an
2373 and imm32,dn -> and imm16,dn
2374 or imm32,dn -> or imm16,dn
2375 xor imm32,dn -> xor imm16,dn
2376 btst imm32,dn -> btst imm16,dn */
2392 /* cmp imm16, an zero-extends the immediate. */
2397 /* So do sp-based offsets. */
2398 if (code
>= 0xb0 && code
<= 0xb3
2402 /* Note that we've changed the relocation contents, etc. */
2403 elf_section_data (sec
)->relocs
= internal_relocs
;
2406 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2407 free_contents
= NULL
;
2409 free_extsyms
= NULL
;
2411 /* Fix the opcode. */
2412 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2413 bfd_put_8 (abfd
, code
, contents
+ irel
->r_offset
- 1);
2415 /* Fix the relocation's type. */
2416 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2419 /* Delete two bytes of data. */
2420 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2421 irel
->r_offset
+ 2, 2))
2424 /* That will change things, so, we should relax again.
2425 Note that this is not required, and it may be slow. */
2429 else if (code
== 0xfe)
2431 /* add imm32,sp -> add imm16,sp */
2433 /* Note that we've changed the relocation contents, etc. */
2434 elf_section_data (sec
)->relocs
= internal_relocs
;
2437 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2438 free_contents
= NULL
;
2440 free_extsyms
= NULL
;
2442 /* Fix the opcode. */
2443 bfd_put_8 (abfd
, 0xfa, contents
+ irel
->r_offset
- 2);
2444 bfd_put_8 (abfd
, 0xfe, contents
+ irel
->r_offset
- 1);
2446 /* Fix the relocation's type. */
2447 irel
->r_info
= ELF32_R_INFO (ELF32_R_SYM (irel
->r_info
),
2450 /* Delete two bytes of data. */
2451 if (!mn10300_elf_relax_delete_bytes (abfd
, sec
,
2452 irel
->r_offset
+ 2, 2))
2455 /* That will change things, so, we should relax again.
2456 Note that this is not required, and it may be slow. */
2464 if (free_relocs
!= NULL
)
2467 if (free_contents
!= NULL
)
2469 if (! link_info
->keep_memory
)
2470 free (free_contents
);
2473 /* Cache the section contents for elf_link_input_bfd. */
2474 elf_section_data (sec
)->this_hdr
.contents
= contents
;
2478 if (shndx_buf
!= NULL
)
2480 shndx_hdr
->contents
= NULL
;
2484 if (free_extsyms
!= NULL
)
2486 if (! link_info
->keep_memory
)
2488 symtab_hdr
->contents
= NULL
;
2489 free (free_extsyms
);
2496 if (free_relocs
!= NULL
)
2498 if (free_contents
!= NULL
)
2499 free (free_contents
);
2500 if (shndx_buf
!= NULL
)
2502 shndx_hdr
->contents
= NULL
;
2505 if (free_extsyms
!= NULL
)
2507 symtab_hdr
->contents
= NULL
;
2508 free (free_extsyms
);
2514 /* Compute the stack size and movm arguments for the function
2515 referred to by HASH at address ADDR in section with
2516 contents CONTENTS, store the information in the hash table. */
2518 compute_function_info (abfd
, hash
, addr
, contents
)
2520 struct elf32_mn10300_link_hash_entry
*hash
;
2522 unsigned char *contents
;
2524 unsigned char byte1
, byte2
;
2525 /* We only care about a very small subset of the possible prologue
2526 sequences here. Basically we look for:
2528 movm [d2,d3,a2,a3],sp (optional)
2529 add <size>,sp (optional, and only for sizes which fit in an unsigned
2532 If we find anything else, we quit. */
2534 /* Look for movm [regs],sp */
2535 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2536 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2540 hash
->movm_args
= byte2
;
2542 byte1
= bfd_get_8 (abfd
, contents
+ addr
);
2543 byte2
= bfd_get_8 (abfd
, contents
+ addr
+ 1);
2546 /* Now figure out how much stack space will be allocated by the movm
2547 instruction. We need this kept separate from the funtion's normal
2549 if (hash
->movm_args
)
2552 if (hash
->movm_args
& 0x80)
2553 hash
->movm_stack_size
+= 4;
2556 if (hash
->movm_args
& 0x40)
2557 hash
->movm_stack_size
+= 4;
2560 if (hash
->movm_args
& 0x20)
2561 hash
->movm_stack_size
+= 4;
2564 if (hash
->movm_args
& 0x10)
2565 hash
->movm_stack_size
+= 4;
2567 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2568 if (hash
->movm_args
& 0x08)
2569 hash
->movm_stack_size
+= 8 * 4;
2571 if (bfd_get_mach (abfd
) == bfd_mach_am33
)
2573 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2574 if (hash
->movm_args
& 0x1)
2575 hash
->movm_stack_size
+= 6 * 4;
2577 /* exreg1 space. e4, e5, e6, e7 */
2578 if (hash
->movm_args
& 0x2)
2579 hash
->movm_stack_size
+= 4 * 4;
2581 /* exreg0 space. e2, e3 */
2582 if (hash
->movm_args
& 0x4)
2583 hash
->movm_stack_size
+= 2 * 4;
2587 /* Now look for the two stack adjustment variants. */
2588 if (byte1
== 0xf8 && byte2
== 0xfe)
2590 int temp
= bfd_get_8 (abfd
, contents
+ addr
+ 2);
2591 temp
= ((temp
& 0xff) ^ (~0x7f)) + 0x80;
2593 hash
->stack_size
= -temp
;
2595 else if (byte1
== 0xfa && byte2
== 0xfe)
2597 int temp
= bfd_get_16 (abfd
, contents
+ addr
+ 2);
2598 temp
= ((temp
& 0xffff) ^ (~0x7fff)) + 0x8000;
2602 hash
->stack_size
= temp
;
2605 /* If the total stack to be allocated by the call instruction is more
2606 than 255 bytes, then we can't remove the stack adjustment by using
2607 "call" (we might still be able to remove the "movm" instruction. */
2608 if (hash
->stack_size
+ hash
->movm_stack_size
> 255)
2609 hash
->stack_size
= 0;
2614 /* Delete some bytes from a section while relaxing. */
2617 mn10300_elf_relax_delete_bytes (abfd
, sec
, addr
, count
)
2623 Elf_Internal_Shdr
*symtab_hdr
;
2624 Elf_Internal_Shdr
*shndx_hdr
;
2625 Elf32_External_Sym
*extsyms
;
2626 unsigned int sec_shndx
;
2628 Elf_Internal_Rela
*irel
, *irelend
;
2629 Elf_Internal_Rela
*irelalign
;
2631 Elf32_External_Sym
*esym
, *esymend
;
2632 Elf_External_Sym_Shndx
*shndx
;
2633 struct elf_link_hash_entry
**sym_hashes
;
2634 struct elf_link_hash_entry
**end_hashes
;
2635 unsigned int symcount
;
2637 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2638 extsyms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2640 sec_shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2642 contents
= elf_section_data (sec
)->this_hdr
.contents
;
2644 /* The deletion must stop at the next ALIGN reloc for an aligment
2645 power larger than the number of bytes we are deleting. */
2648 toaddr
= sec
->_cooked_size
;
2650 irel
= elf_section_data (sec
)->relocs
;
2651 irelend
= irel
+ sec
->reloc_count
;
2653 /* Actually delete the bytes. */
2654 memmove (contents
+ addr
, contents
+ addr
+ count
,
2655 (size_t) (toaddr
- addr
- count
));
2656 sec
->_cooked_size
-= count
;
2658 /* Adjust all the relocs. */
2659 for (irel
= elf_section_data (sec
)->relocs
; irel
< irelend
; irel
++)
2661 /* Get the new reloc address. */
2662 if ((irel
->r_offset
> addr
2663 && irel
->r_offset
< toaddr
))
2664 irel
->r_offset
-= count
;
2667 /* Adjust the local symbols defined in this section. */
2668 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
2669 shndx
= (Elf_External_Sym_Shndx
*) shndx_hdr
->contents
;
2671 esymend
= esym
+ symtab_hdr
->sh_info
;
2672 for (; esym
< esymend
; esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
2674 Elf_Internal_Sym isym
;
2675 Elf_External_Sym_Shndx dummy
;
2677 bfd_elf32_swap_symbol_in (abfd
, esym
, shndx
, &isym
);
2679 if (isym
.st_shndx
== sec_shndx
2680 && isym
.st_value
> addr
2681 && isym
.st_value
< toaddr
)
2683 isym
.st_value
-= count
;
2684 bfd_elf32_swap_symbol_out (abfd
, &isym
, (PTR
) esym
, (PTR
) &dummy
);
2688 /* Now adjust the global symbols defined in this section. */
2689 symcount
= (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
2690 - symtab_hdr
->sh_info
);
2691 sym_hashes
= elf_sym_hashes (abfd
);
2692 end_hashes
= sym_hashes
+ symcount
;
2693 for (; sym_hashes
< end_hashes
; sym_hashes
++)
2695 struct elf_link_hash_entry
*sym_hash
= *sym_hashes
;
2696 if ((sym_hash
->root
.type
== bfd_link_hash_defined
2697 || sym_hash
->root
.type
== bfd_link_hash_defweak
)
2698 && sym_hash
->root
.u
.def
.section
== sec
2699 && sym_hash
->root
.u
.def
.value
> addr
2700 && sym_hash
->root
.u
.def
.value
< toaddr
)
2702 sym_hash
->root
.u
.def
.value
-= count
;
2709 /* Return true if a symbol exists at the given address, else return
2712 mn10300_elf_symbol_address_p (abfd
, sec
, addr
)
2717 Elf_Internal_Shdr
*symtab_hdr
;
2718 Elf_Internal_Shdr
*shndx_hdr
;
2719 unsigned int sec_shndx
;
2720 Elf32_External_Sym
*esym
, *esymend
;
2721 Elf_External_Sym_Shndx
*shndx
;
2722 struct elf_link_hash_entry
**sym_hashes
;
2723 struct elf_link_hash_entry
**end_hashes
;
2724 unsigned int symcount
;
2726 sec_shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
2728 /* Examine all the symbols. */
2729 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2730 shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
2731 shndx
= (Elf_External_Sym_Shndx
*) shndx_hdr
->contents
;
2732 esym
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2733 esymend
= esym
+ symtab_hdr
->sh_info
;
2734 for (; esym
< esymend
; esym
++, shndx
= (shndx
? shndx
+ 1 : NULL
))
2736 Elf_Internal_Sym isym
;
2738 bfd_elf32_swap_symbol_in (abfd
, esym
, shndx
, &isym
);
2740 if (isym
.st_shndx
== sec_shndx
2741 && isym
.st_value
== addr
)
2745 symcount
= (symtab_hdr
->sh_size
/ sizeof (Elf32_External_Sym
)
2746 - symtab_hdr
->sh_info
);
2747 sym_hashes
= elf_sym_hashes (abfd
);
2748 end_hashes
= sym_hashes
+ symcount
;
2749 for (; sym_hashes
< end_hashes
; sym_hashes
++)
2751 struct elf_link_hash_entry
*sym_hash
= *sym_hashes
;
2752 if ((sym_hash
->root
.type
== bfd_link_hash_defined
2753 || sym_hash
->root
.type
== bfd_link_hash_defweak
)
2754 && sym_hash
->root
.u
.def
.section
== sec
2755 && sym_hash
->root
.u
.def
.value
== addr
)
2762 /* This is a version of bfd_generic_get_relocated_section_contents
2763 which uses mn10300_elf_relocate_section. */
2766 mn10300_elf_get_relocated_section_contents (output_bfd
, link_info
, link_order
,
2767 data
, relocateable
, symbols
)
2769 struct bfd_link_info
*link_info
;
2770 struct bfd_link_order
*link_order
;
2772 boolean relocateable
;
2775 Elf_Internal_Shdr
*symtab_hdr
;
2776 Elf_Internal_Shdr
*shndx_hdr
;
2777 asection
*input_section
= link_order
->u
.indirect
.section
;
2778 bfd
*input_bfd
= input_section
->owner
;
2779 asection
**sections
= NULL
;
2780 Elf_Internal_Rela
*internal_relocs
= NULL
;
2781 Elf32_External_Sym
*external_syms
= NULL
;
2782 Elf_External_Sym_Shndx
*shndx_buf
= NULL
;
2783 Elf_External_Sym_Shndx
*shndx
;
2784 Elf_Internal_Sym
*internal_syms
= NULL
;
2786 /* We only need to handle the case of relaxing, or of having a
2787 particular set of section contents, specially. */
2789 || elf_section_data (input_section
)->this_hdr
.contents
== NULL
)
2790 return bfd_generic_get_relocated_section_contents (output_bfd
, link_info
,
2795 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
2796 shndx_hdr
= &elf_tdata (input_bfd
)->symtab_shndx_hdr
;
2798 memcpy (data
, elf_section_data (input_section
)->this_hdr
.contents
,
2799 (size_t) input_section
->_raw_size
);
2801 if ((input_section
->flags
& SEC_RELOC
) != 0
2802 && input_section
->reloc_count
> 0)
2804 Elf_Internal_Sym
*isymp
;
2806 Elf32_External_Sym
*esym
, *esymend
;
2809 if (symtab_hdr
->contents
!= NULL
)
2810 external_syms
= (Elf32_External_Sym
*) symtab_hdr
->contents
;
2811 else if (symtab_hdr
->sh_info
!= 0)
2813 amt
= symtab_hdr
->sh_info
;
2814 amt
*= sizeof (Elf32_External_Sym
);
2815 external_syms
= (Elf32_External_Sym
*) bfd_malloc (amt
);
2816 if (external_syms
== NULL
)
2818 if (bfd_seek (input_bfd
, symtab_hdr
->sh_offset
, SEEK_SET
) != 0
2819 || bfd_bread ((PTR
) external_syms
, amt
, input_bfd
) != amt
)
2823 if (symtab_hdr
->sh_info
!= 0 && shndx_hdr
->sh_size
!= 0)
2825 amt
= symtab_hdr
->sh_info
;
2826 amt
*= sizeof (Elf_External_Sym_Shndx
);
2827 shndx_buf
= (Elf_External_Sym_Shndx
*) bfd_malloc (amt
);
2828 if (shndx_buf
== NULL
)
2830 if (bfd_seek (input_bfd
, shndx_hdr
->sh_offset
, SEEK_SET
) != 0
2831 || bfd_bread ((PTR
) shndx_buf
, amt
, input_bfd
) != amt
)
2835 internal_relocs
= (_bfd_elf32_link_read_relocs
2836 (input_bfd
, input_section
, (PTR
) NULL
,
2837 (Elf_Internal_Rela
*) NULL
, false));
2838 if (internal_relocs
== NULL
)
2841 amt
= symtab_hdr
->sh_info
;
2842 amt
*= sizeof (Elf_Internal_Sym
);
2843 internal_syms
= (Elf_Internal_Sym
*) bfd_malloc (amt
);
2844 if (internal_syms
== NULL
&& amt
!= 0)
2847 amt
= symtab_hdr
->sh_info
;
2848 amt
*= sizeof (asection
*);
2849 sections
= (asection
**) bfd_malloc (amt
);
2850 if (sections
== NULL
&& amt
!= 0)
2853 for (isymp
= internal_syms
, secpp
= sections
, shndx
= shndx_buf
,
2854 esym
= external_syms
, esymend
= esym
+ symtab_hdr
->sh_info
;
2856 ++esym
, ++isymp
, ++secpp
, shndx
= (shndx
? shndx
+ 1 : NULL
))
2860 bfd_elf32_swap_symbol_in (input_bfd
, esym
, shndx
, isymp
);
2862 if (isymp
->st_shndx
== SHN_UNDEF
)
2863 isec
= bfd_und_section_ptr
;
2864 else if (isymp
->st_shndx
== SHN_ABS
)
2865 isec
= bfd_abs_section_ptr
;
2866 else if (isymp
->st_shndx
== SHN_COMMON
)
2867 isec
= bfd_com_section_ptr
;
2869 isec
= bfd_section_from_elf_index (input_bfd
, isymp
->st_shndx
);
2874 if (! mn10300_elf_relocate_section (output_bfd
, link_info
, input_bfd
,
2875 input_section
, data
, internal_relocs
,
2876 internal_syms
, sections
))
2879 if (sections
!= NULL
)
2881 if (internal_syms
!= NULL
)
2882 free (internal_syms
);
2883 if (shndx_buf
!= NULL
)
2885 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2886 free (external_syms
);
2887 if (internal_relocs
!= elf_section_data (input_section
)->relocs
)
2888 free (internal_relocs
);
2894 if (internal_relocs
!= NULL
2895 && internal_relocs
!= elf_section_data (input_section
)->relocs
)
2896 free (internal_relocs
);
2897 if (shndx_buf
!= NULL
)
2899 if (external_syms
!= NULL
&& symtab_hdr
->contents
== NULL
)
2900 free (external_syms
);
2901 if (internal_syms
!= NULL
)
2902 free (internal_syms
);
2903 if (sections
!= NULL
)
2908 /* Assorted hash table functions. */
2910 /* Initialize an entry in the link hash table. */
2912 /* Create an entry in an MN10300 ELF linker hash table. */
2914 static struct bfd_hash_entry
*
2915 elf32_mn10300_link_hash_newfunc (entry
, table
, string
)
2916 struct bfd_hash_entry
*entry
;
2917 struct bfd_hash_table
*table
;
2920 struct elf32_mn10300_link_hash_entry
*ret
=
2921 (struct elf32_mn10300_link_hash_entry
*) entry
;
2923 /* Allocate the structure if it has not already been allocated by a
2925 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2926 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2927 bfd_hash_allocate (table
,
2928 sizeof (struct elf32_mn10300_link_hash_entry
)));
2929 if (ret
== (struct elf32_mn10300_link_hash_entry
*) NULL
)
2930 return (struct bfd_hash_entry
*) ret
;
2932 /* Call the allocation method of the superclass. */
2933 ret
= ((struct elf32_mn10300_link_hash_entry
*)
2934 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry
*) ret
,
2936 if (ret
!= (struct elf32_mn10300_link_hash_entry
*) NULL
)
2938 ret
->direct_calls
= 0;
2939 ret
->stack_size
= 0;
2940 ret
->movm_stack_size
= 0;
2945 return (struct bfd_hash_entry
*) ret
;
2948 /* Create an mn10300 ELF linker hash table. */
2950 static struct bfd_link_hash_table
*
2951 elf32_mn10300_link_hash_table_create (abfd
)
2954 struct elf32_mn10300_link_hash_table
*ret
;
2955 bfd_size_type amt
= sizeof (struct elf32_mn10300_link_hash_table
);
2957 ret
= (struct elf32_mn10300_link_hash_table
*) bfd_malloc (amt
);
2958 if (ret
== (struct elf32_mn10300_link_hash_table
*) NULL
)
2961 if (! _bfd_elf_link_hash_table_init (&ret
->root
, abfd
,
2962 elf32_mn10300_link_hash_newfunc
))
2969 amt
= sizeof (struct elf_link_hash_table
);
2970 ret
->static_hash_table
2971 = (struct elf32_mn10300_link_hash_table
*) bfd_malloc (amt
);
2972 if (ret
->static_hash_table
== NULL
)
2978 if (! _bfd_elf_link_hash_table_init (&ret
->static_hash_table
->root
, abfd
,
2979 elf32_mn10300_link_hash_newfunc
))
2981 free (ret
->static_hash_table
);
2985 return &ret
->root
.root
;
2988 /* Free an mn10300 ELF linker hash table. */
2991 elf32_mn10300_link_hash_table_free (hash
)
2992 struct bfd_link_hash_table
*hash
;
2994 struct elf32_mn10300_link_hash_table
*ret
2995 = (struct elf32_mn10300_link_hash_table
*) hash
;
2997 _bfd_generic_link_hash_table_free
2998 ((struct bfd_link_hash_table
*) ret
->static_hash_table
);
2999 _bfd_generic_link_hash_table_free
3000 ((struct bfd_link_hash_table
*) ret
);
3003 static unsigned long
3004 elf_mn10300_mach (flags
)
3007 switch (flags
& EF_MN10300_MACH
)
3009 case E_MN10300_MACH_MN10300
:
3011 return bfd_mach_mn10300
;
3013 case E_MN10300_MACH_AM33
:
3014 return bfd_mach_am33
;
3018 /* The final processing done just before writing out a MN10300 ELF object
3019 file. This gets the MN10300 architecture right based on the machine
3023 _bfd_mn10300_elf_final_write_processing (abfd
, linker
)
3025 boolean linker ATTRIBUTE_UNUSED
;
3029 switch (bfd_get_mach (abfd
))
3032 case bfd_mach_mn10300
:
3033 val
= E_MN10300_MACH_MN10300
;
3037 val
= E_MN10300_MACH_AM33
;
3041 elf_elfheader (abfd
)->e_flags
&= ~ (EF_MN10300_MACH
);
3042 elf_elfheader (abfd
)->e_flags
|= val
;
3046 _bfd_mn10300_elf_object_p (abfd
)
3049 bfd_default_set_arch_mach (abfd
, bfd_arch_mn10300
,
3050 elf_mn10300_mach (elf_elfheader (abfd
)->e_flags
));
3054 /* Merge backend specific data from an object file to the output
3055 object file when linking. */
3058 _bfd_mn10300_elf_merge_private_bfd_data (ibfd
, obfd
)
3062 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
3063 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
3066 if (bfd_get_arch (obfd
) == bfd_get_arch (ibfd
)
3067 && bfd_get_mach (obfd
) < bfd_get_mach (ibfd
))
3069 if (! bfd_set_arch_mach (obfd
, bfd_get_arch (ibfd
),
3070 bfd_get_mach (ibfd
)))
3077 #define TARGET_LITTLE_SYM bfd_elf32_mn10300_vec
3078 #define TARGET_LITTLE_NAME "elf32-mn10300"
3079 #define ELF_ARCH bfd_arch_mn10300
3080 #define ELF_MACHINE_CODE EM_MN10300
3081 #define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300
3082 #define ELF_MAXPAGESIZE 0x1000
3084 #define elf_info_to_howto mn10300_info_to_howto
3085 #define elf_info_to_howto_rel 0
3086 #define elf_backend_can_gc_sections 1
3087 #define elf_backend_rela_normal 1
3088 #define elf_backend_check_relocs mn10300_elf_check_relocs
3089 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
3090 #define elf_backend_relocate_section mn10300_elf_relocate_section
3091 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
3092 #define bfd_elf32_bfd_get_relocated_section_contents \
3093 mn10300_elf_get_relocated_section_contents
3094 #define bfd_elf32_bfd_link_hash_table_create \
3095 elf32_mn10300_link_hash_table_create
3096 #define bfd_elf32_bfd_link_hash_table_free \
3097 elf32_mn10300_link_hash_table_free
3099 #define elf_symbol_leading_char '_'
3101 /* So we can set bits in e_flags. */
3102 #define elf_backend_final_write_processing \
3103 _bfd_mn10300_elf_final_write_processing
3104 #define elf_backend_object_p _bfd_mn10300_elf_object_p
3106 #define bfd_elf32_bfd_merge_private_bfd_data \
3107 _bfd_mn10300_elf_merge_private_bfd_data
3109 #include "elf32-target.h"