Note that if '@' is a comment character then another symbol is used to prefix
[binutils.git] / bfd / elf-m10300.c
blob374e55e7037a060e8ac20eabe34825d716f8fde1
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. */
21 #include "bfd.h"
22 #include "sysdep.h"
23 #include "libbfd.h"
24 #include "elf-bfd.h"
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 *,
30 asection *, int));
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"
71 instructions. */
72 #define MN10300_CONVERT_CALL_TO_CALLS 0x1
74 /* Used to mark functions which have had redundant parts of their
75 prologue deleted. */
76 #define MN10300_DELETED_PROLOGUE_BYTES 0x2
77 unsigned char flags;
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
94 char flags;
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 \
106 (&(table)->root, \
107 (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
108 (info)))
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
113 PARAMS ((bfd *));
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 ((asection *, 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 *, Elf_Internal_Sym *, 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 static reloc_howto_type elf_mn10300_howto_table[] = {
138 /* Dummy relocation. Does nothing. */
139 HOWTO (R_MN10300_NONE,
143 false,
145 complain_overflow_bitfield,
146 bfd_elf_generic_reloc,
147 "R_MN10300_NONE",
148 false,
151 false),
152 /* Standard 32 bit reloc. */
153 HOWTO (R_MN10300_32,
157 false,
159 complain_overflow_bitfield,
160 bfd_elf_generic_reloc,
161 "R_MN10300_32",
162 false,
163 0xffffffff,
164 0xffffffff,
165 false),
166 /* Standard 16 bit reloc. */
167 HOWTO (R_MN10300_16,
171 false,
173 complain_overflow_bitfield,
174 bfd_elf_generic_reloc,
175 "R_MN10300_16",
176 false,
177 0xffff,
178 0xffff,
179 false),
180 /* Standard 8 bit reloc. */
181 HOWTO (R_MN10300_8,
185 false,
187 complain_overflow_bitfield,
188 bfd_elf_generic_reloc,
189 "R_MN10300_8",
190 false,
191 0xff,
192 0xff,
193 false),
194 /* Standard 32bit pc-relative reloc. */
195 HOWTO (R_MN10300_PCREL32,
199 true,
201 complain_overflow_bitfield,
202 bfd_elf_generic_reloc,
203 "R_MN10300_PCREL32",
204 false,
205 0xffffffff,
206 0xffffffff,
207 true),
208 /* Standard 16bit pc-relative reloc. */
209 HOWTO (R_MN10300_PCREL16,
213 true,
215 complain_overflow_bitfield,
216 bfd_elf_generic_reloc,
217 "R_MN10300_PCREL16",
218 false,
219 0xffff,
220 0xffff,
221 true),
222 /* Standard 8 pc-relative reloc. */
223 HOWTO (R_MN10300_PCREL8,
227 true,
229 complain_overflow_bitfield,
230 bfd_elf_generic_reloc,
231 "R_MN10300_PCREL8",
232 false,
233 0xff,
234 0xff,
235 true),
237 /* GNU extension to record C++ vtable hierarchy */
238 HOWTO (R_MN10300_GNU_VTINHERIT, /* type */
239 0, /* rightshift */
240 0, /* size (0 = byte, 1 = short, 2 = long) */
241 0, /* bitsize */
242 false, /* pc_relative */
243 0, /* bitpos */
244 complain_overflow_dont, /* complain_on_overflow */
245 NULL, /* special_function */
246 "R_MN10300_GNU_VTINHERIT", /* name */
247 false, /* partial_inplace */
248 0, /* src_mask */
249 0, /* dst_mask */
250 false), /* pcrel_offset */
252 /* GNU extension to record C++ vtable member usage */
253 HOWTO (R_MN10300_GNU_VTENTRY, /* type */
254 0, /* rightshift */
255 0, /* size (0 = byte, 1 = short, 2 = long) */
256 0, /* bitsize */
257 false, /* pc_relative */
258 0, /* bitpos */
259 complain_overflow_dont, /* complain_on_overflow */
260 NULL, /* special_function */
261 "R_MN10300_GNU_VTENTRY", /* name */
262 false, /* partial_inplace */
263 0, /* src_mask */
264 0, /* dst_mask */
265 false), /* pcrel_offset */
267 /* Standard 24 bit reloc. */
268 HOWTO (R_MN10300_24,
272 false,
274 complain_overflow_bitfield,
275 bfd_elf_generic_reloc,
276 "R_MN10300_24",
277 false,
278 0xffffff,
279 0xffffff,
280 false),
283 struct mn10300_reloc_map {
284 bfd_reloc_code_real_type bfd_reloc_val;
285 unsigned char elf_reloc_val;
288 static const struct mn10300_reloc_map mn10300_reloc_map[] = {
289 { BFD_RELOC_NONE, R_MN10300_NONE, },
290 { BFD_RELOC_32, R_MN10300_32, },
291 { BFD_RELOC_16, R_MN10300_16, },
292 { BFD_RELOC_8, R_MN10300_8, },
293 { BFD_RELOC_32_PCREL, R_MN10300_PCREL32, },
294 { BFD_RELOC_16_PCREL, R_MN10300_PCREL16, },
295 { BFD_RELOC_8_PCREL, R_MN10300_PCREL8, },
296 { BFD_RELOC_24, R_MN10300_24, },
297 { BFD_RELOC_VTABLE_INHERIT, R_MN10300_GNU_VTINHERIT },
298 { BFD_RELOC_VTABLE_ENTRY, R_MN10300_GNU_VTENTRY },
301 static reloc_howto_type *
302 bfd_elf32_bfd_reloc_type_lookup (abfd, code)
303 bfd *abfd ATTRIBUTE_UNUSED;
304 bfd_reloc_code_real_type code;
306 unsigned int i;
308 for (i = 0;
309 i < sizeof (mn10300_reloc_map) / sizeof (struct mn10300_reloc_map);
310 i++)
312 if (mn10300_reloc_map[i].bfd_reloc_val == code)
313 return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val];
316 return NULL;
319 /* Set the howto pointer for an MN10300 ELF reloc. */
321 static void
322 mn10300_info_to_howto (abfd, cache_ptr, dst)
323 bfd *abfd ATTRIBUTE_UNUSED;
324 arelent *cache_ptr;
325 Elf32_Internal_Rela *dst;
327 unsigned int r_type;
329 r_type = ELF32_R_TYPE (dst->r_info);
330 BFD_ASSERT (r_type < (unsigned int) R_MN10300_MAX);
331 cache_ptr->howto = &elf_mn10300_howto_table[r_type];
334 /* Look through the relocs for a section during the first phase.
335 Since we don't do .gots or .plts, we just need to consider the
336 virtual table relocs for gc. */
338 static boolean
339 mn10300_elf_check_relocs (abfd, info, sec, relocs)
340 bfd *abfd;
341 struct bfd_link_info *info;
342 asection *sec;
343 const Elf_Internal_Rela *relocs;
345 Elf_Internal_Shdr *symtab_hdr;
346 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
347 const Elf_Internal_Rela *rel;
348 const Elf_Internal_Rela *rel_end;
350 if (info->relocateable)
351 return true;
353 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
354 sym_hashes = elf_sym_hashes (abfd);
355 sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
356 if (!elf_bad_symtab (abfd))
357 sym_hashes_end -= symtab_hdr->sh_info;
359 rel_end = relocs + sec->reloc_count;
360 for (rel = relocs; rel < rel_end; rel++)
362 struct elf_link_hash_entry *h;
363 unsigned long r_symndx;
365 r_symndx = ELF32_R_SYM (rel->r_info);
366 if (r_symndx < symtab_hdr->sh_info)
367 h = NULL;
368 else
369 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
371 switch (ELF32_R_TYPE (rel->r_info))
373 /* This relocation describes the C++ object vtable hierarchy.
374 Reconstruct it for later use during GC. */
375 case R_MN10300_GNU_VTINHERIT:
376 if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
377 return false;
378 break;
380 /* This relocation describes which C++ vtable entries are actually
381 used. Record for later use during GC. */
382 case R_MN10300_GNU_VTENTRY:
383 if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
384 return false;
385 break;
389 return true;
392 /* Return the section that should be marked against GC for a given
393 relocation. */
395 static asection *
396 mn10300_elf_gc_mark_hook (sec, info, rel, h, sym)
397 asection *sec;
398 struct bfd_link_info *info ATTRIBUTE_UNUSED;
399 Elf_Internal_Rela *rel;
400 struct elf_link_hash_entry *h;
401 Elf_Internal_Sym *sym;
403 if (h != NULL)
405 switch (ELF32_R_TYPE (rel->r_info))
407 case R_MN10300_GNU_VTINHERIT:
408 case R_MN10300_GNU_VTENTRY:
409 break;
411 default:
412 switch (h->root.type)
414 case bfd_link_hash_defined:
415 case bfd_link_hash_defweak:
416 return h->root.u.def.section;
418 case bfd_link_hash_common:
419 return h->root.u.c.p->section;
421 default:
422 break;
426 else
427 return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
429 return NULL;
432 /* Perform a relocation as part of a final link. */
433 static bfd_reloc_status_type
434 mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
435 input_section, contents, offset, value,
436 addend, info, sym_sec, is_local)
437 reloc_howto_type *howto;
438 bfd *input_bfd;
439 bfd *output_bfd ATTRIBUTE_UNUSED;
440 asection *input_section;
441 bfd_byte *contents;
442 bfd_vma offset;
443 bfd_vma value;
444 bfd_vma addend;
445 struct bfd_link_info *info ATTRIBUTE_UNUSED;
446 asection *sym_sec ATTRIBUTE_UNUSED;
447 int is_local ATTRIBUTE_UNUSED;
449 unsigned long r_type = howto->type;
450 bfd_byte *hit_data = contents + offset;
452 switch (r_type)
454 case R_MN10300_NONE:
455 return bfd_reloc_ok;
457 case R_MN10300_32:
458 value += addend;
459 bfd_put_32 (input_bfd, value, hit_data);
460 return bfd_reloc_ok;
462 case R_MN10300_24:
463 value += addend;
465 if ((long) value > 0x7fffff || (long) value < -0x800000)
466 return bfd_reloc_overflow;
468 bfd_put_8 (input_bfd, value & 0xff, hit_data);
469 bfd_put_8 (input_bfd, (value >> 8) & 0xff, hit_data + 1);
470 bfd_put_8 (input_bfd, (value >> 16) & 0xff, hit_data + 2);
471 return bfd_reloc_ok;
473 case R_MN10300_16:
474 value += addend;
476 if ((long) value > 0x7fff || (long) value < -0x8000)
477 return bfd_reloc_overflow;
479 bfd_put_16 (input_bfd, value, hit_data);
480 return bfd_reloc_ok;
482 case R_MN10300_8:
483 value += addend;
485 if ((long) value > 0x7f || (long) value < -0x80)
486 return bfd_reloc_overflow;
488 bfd_put_8 (input_bfd, value, hit_data);
489 return bfd_reloc_ok;
491 case R_MN10300_PCREL8:
492 value -= (input_section->output_section->vma
493 + input_section->output_offset);
494 value -= offset;
495 value += addend;
497 if ((long) value > 0xff || (long) value < -0x100)
498 return bfd_reloc_overflow;
500 bfd_put_8 (input_bfd, value, hit_data);
501 return bfd_reloc_ok;
503 case R_MN10300_PCREL16:
504 value -= (input_section->output_section->vma
505 + input_section->output_offset);
506 value -= offset;
507 value += addend;
509 if ((long) value > 0xffff || (long) value < -0x10000)
510 return bfd_reloc_overflow;
512 bfd_put_16 (input_bfd, value, hit_data);
513 return bfd_reloc_ok;
515 case R_MN10300_PCREL32:
516 value -= (input_section->output_section->vma
517 + input_section->output_offset);
518 value -= offset;
519 value += addend;
521 bfd_put_32 (input_bfd, value, hit_data);
522 return bfd_reloc_ok;
524 case R_MN10300_GNU_VTINHERIT:
525 case R_MN10300_GNU_VTENTRY:
526 return bfd_reloc_ok;
528 default:
529 return bfd_reloc_notsupported;
533 /* Relocate an MN10300 ELF section. */
534 static boolean
535 mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
536 contents, relocs, local_syms, local_sections)
537 bfd *output_bfd;
538 struct bfd_link_info *info;
539 bfd *input_bfd;
540 asection *input_section;
541 bfd_byte *contents;
542 Elf_Internal_Rela *relocs;
543 Elf_Internal_Sym *local_syms;
544 asection **local_sections;
546 Elf_Internal_Shdr *symtab_hdr;
547 struct elf32_mn10300_link_hash_entry **sym_hashes;
548 Elf_Internal_Rela *rel, *relend;
550 if (info->relocateable)
551 return true;
553 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
554 sym_hashes = (struct elf32_mn10300_link_hash_entry **)
555 (elf_sym_hashes (input_bfd));
557 rel = relocs;
558 relend = relocs + input_section->reloc_count;
559 for (; rel < relend; rel++)
561 int r_type;
562 reloc_howto_type *howto;
563 unsigned long r_symndx;
564 Elf_Internal_Sym *sym;
565 asection *sec;
566 struct elf32_mn10300_link_hash_entry *h;
567 bfd_vma relocation;
568 bfd_reloc_status_type r;
570 r_symndx = ELF32_R_SYM (rel->r_info);
571 r_type = ELF32_R_TYPE (rel->r_info);
572 howto = elf_mn10300_howto_table + r_type;
574 /* Just skip the vtable gc relocs. */
575 if (r_type == R_MN10300_GNU_VTINHERIT
576 || r_type == R_MN10300_GNU_VTENTRY)
577 continue;
579 h = NULL;
580 sym = NULL;
581 sec = NULL;
582 if (r_symndx < symtab_hdr->sh_info)
584 sym = local_syms + r_symndx;
585 sec = local_sections[r_symndx];
586 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
588 else
590 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
591 while (h->root.root.type == bfd_link_hash_indirect
592 || h->root.root.type == bfd_link_hash_warning)
593 h = (struct elf32_mn10300_link_hash_entry *) h->root.root.u.i.link;
594 if (h->root.root.type == bfd_link_hash_defined
595 || h->root.root.type == bfd_link_hash_defweak)
597 sec = h->root.root.u.def.section;
598 relocation = (h->root.root.u.def.value
599 + sec->output_section->vma
600 + sec->output_offset);
602 else if (h->root.root.type == bfd_link_hash_undefweak)
603 relocation = 0;
604 else
606 if (! ((*info->callbacks->undefined_symbol)
607 (info, h->root.root.root.string, input_bfd,
608 input_section, rel->r_offset, true)))
609 return false;
610 relocation = 0;
614 r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
615 input_section,
616 contents, rel->r_offset,
617 relocation, rel->r_addend,
618 info, sec, h == NULL);
620 if (r != bfd_reloc_ok)
622 const char *name;
623 const char *msg = (const char *) 0;
625 if (h != NULL)
626 name = h->root.root.root.string;
627 else
629 name = (bfd_elf_string_from_elf_section
630 (input_bfd, symtab_hdr->sh_link, sym->st_name));
631 if (name == NULL || *name == '\0')
632 name = bfd_section_name (input_bfd, sec);
635 switch (r)
637 case bfd_reloc_overflow:
638 if (! ((*info->callbacks->reloc_overflow)
639 (info, name, howto->name, (bfd_vma) 0,
640 input_bfd, input_section, rel->r_offset)))
641 return false;
642 break;
644 case bfd_reloc_undefined:
645 if (! ((*info->callbacks->undefined_symbol)
646 (info, name, input_bfd, input_section,
647 rel->r_offset, true)))
648 return false;
649 break;
651 case bfd_reloc_outofrange:
652 msg = _("internal error: out of range error");
653 goto common_error;
655 case bfd_reloc_notsupported:
656 msg = _("internal error: unsupported relocation error");
657 goto common_error;
659 case bfd_reloc_dangerous:
660 msg = _("internal error: dangerous error");
661 goto common_error;
663 default:
664 msg = _("internal error: unknown error");
665 /* fall through */
667 common_error:
668 if (!((*info->callbacks->warning)
669 (info, msg, name, input_bfd, input_section,
670 rel->r_offset)))
671 return false;
672 break;
677 return true;
680 /* Finish initializing one hash table entry. */
681 static boolean
682 elf32_mn10300_finish_hash_table_entry (gen_entry, in_args)
683 struct bfd_hash_entry *gen_entry;
684 PTR in_args ATTRIBUTE_UNUSED;
686 struct elf32_mn10300_link_hash_entry *entry;
687 unsigned int byte_count = 0;
689 entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
691 if (entry->root.root.type == bfd_link_hash_warning)
692 entry = (struct elf32_mn10300_link_hash_entry *) entry->root.root.u.i.link;
694 /* If we already know we want to convert "call" to "calls" for calls
695 to this symbol, then return now. */
696 if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
697 return true;
699 /* If there are no named calls to this symbol, or there's nothing we
700 can move from the function itself into the "call" instruction, then
701 note that all "call" instructions should be converted into "calls"
702 instructions and return. */
703 if (entry->direct_calls == 0
704 || (entry->stack_size == 0 && entry->movm_args == 0))
706 /* Make a note that we should convert "call" instructions to "calls"
707 instructions for calls to this symbol. */
708 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
709 return true;
712 /* We may be able to move some instructions from the function itself into
713 the "call" instruction. Count how many bytes we might be able to
714 eliminate in the function itself. */
716 /* A movm instruction is two bytes. */
717 if (entry->movm_args)
718 byte_count += 2;
720 /* Count the insn to allocate stack space too. */
721 if (entry->stack_size > 0 && entry->stack_size <= 128)
722 byte_count += 3;
723 else if (entry->stack_size > 0 && entry->stack_size < 256)
724 byte_count += 4;
726 /* If using "call" will result in larger code, then turn all
727 the associated "call" instructions into "calls" instrutions. */
728 if (byte_count < entry->direct_calls)
729 entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
731 /* This routine never fails. */
732 return true;
735 /* This function handles relaxing for the mn10300.
737 There's quite a few relaxing opportunites available on the mn10300:
739 * calls:32 -> calls:16 2 bytes
740 * call:32 -> call:16 2 bytes
742 * call:32 -> calls:32 1 byte
743 * call:16 -> calls:16 1 byte
744 * These are done anytime using "calls" would result
745 in smaller code, or when necessary to preserve the
746 meaning of the program.
748 * call:32 varies
749 * call:16
750 * In some circumstances we can move instructions
751 from a function prologue into a "call" instruction.
752 This is only done if the resulting code is no larger
753 than the original code.
755 * jmp:32 -> jmp:16 2 bytes
756 * jmp:16 -> bra:8 1 byte
758 * If the previous instruction is a conditional branch
759 around the jump/bra, we may be able to reverse its condition
760 and change its target to the jump's target. The jump/bra
761 can then be deleted. 2 bytes
763 * mov abs32 -> mov abs16 1 or 2 bytes
765 * Most instructions which accept imm32 can relax to imm16 1 or 2 bytes
766 - Most instructions which accept imm16 can relax to imm8 1 or 2 bytes
768 * Most instructions which accept d32 can relax to d16 1 or 2 bytes
769 - Most instructions which accept d16 can relax to d8 1 or 2 bytes
771 We don't handle imm16->imm8 or d16->d8 as they're very rare
772 and somewhat more difficult to support. */
774 static boolean
775 mn10300_elf_relax_section (abfd, sec, link_info, again)
776 bfd *abfd;
777 asection *sec;
778 struct bfd_link_info *link_info;
779 boolean *again;
781 Elf_Internal_Shdr *symtab_hdr;
782 Elf_Internal_Rela *internal_relocs = NULL;
783 Elf_Internal_Rela *irel, *irelend;
784 bfd_byte *contents = NULL;
785 Elf_Internal_Sym *isymbuf = NULL;
786 struct elf32_mn10300_link_hash_table *hash_table;
787 asection *section = sec;
789 /* Assume nothing changes. */
790 *again = false;
792 /* We need a pointer to the mn10300 specific hash table. */
793 hash_table = elf32_mn10300_hash_table (link_info);
795 /* Initialize fields in each hash table entry the first time through. */
796 if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
798 bfd *input_bfd;
800 /* Iterate over all the input bfds. */
801 for (input_bfd = link_info->input_bfds;
802 input_bfd != NULL;
803 input_bfd = input_bfd->link_next)
805 /* We're going to need all the symbols for each bfd. */
806 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
807 if (symtab_hdr->sh_info != 0)
809 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
810 if (isymbuf == NULL)
811 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
812 symtab_hdr->sh_info, 0,
813 NULL, NULL, NULL);
814 if (isymbuf == NULL)
815 goto error_return;
818 /* Iterate over each section in this bfd. */
819 for (section = input_bfd->sections;
820 section != NULL;
821 section = section->next)
823 struct elf32_mn10300_link_hash_entry *hash;
824 Elf_Internal_Sym *sym;
825 asection *sym_sec = NULL;
826 const char *sym_name;
827 char *new_name;
829 /* If there's nothing to do in this section, skip it. */
830 if (! (((section->flags & SEC_RELOC) != 0
831 && section->reloc_count != 0)
832 || (section->flags & SEC_CODE) != 0))
833 continue;
835 /* Get cached copy of section contents if it exists. */
836 if (elf_section_data (section)->this_hdr.contents != NULL)
837 contents = elf_section_data (section)->this_hdr.contents;
838 else if (section->_raw_size != 0)
840 /* Go get them off disk. */
841 contents = (bfd_byte *) bfd_malloc (section->_raw_size);
842 if (contents == NULL)
843 goto error_return;
845 if (!bfd_get_section_contents (input_bfd, section,
846 contents, (file_ptr) 0,
847 section->_raw_size))
848 goto error_return;
850 else
851 contents = NULL;
853 /* If there aren't any relocs, then there's nothing to do. */
854 if ((section->flags & SEC_RELOC) != 0
855 && section->reloc_count != 0)
858 /* Get a copy of the native relocations. */
859 internal_relocs = (_bfd_elf32_link_read_relocs
860 (input_bfd, section, (PTR) NULL,
861 (Elf_Internal_Rela *) NULL,
862 link_info->keep_memory));
863 if (internal_relocs == NULL)
864 goto error_return;
866 /* Now examine each relocation. */
867 irel = internal_relocs;
868 irelend = irel + section->reloc_count;
869 for (; irel < irelend; irel++)
871 long r_type;
872 unsigned long r_index;
873 unsigned char code;
875 r_type = ELF32_R_TYPE (irel->r_info);
876 r_index = ELF32_R_SYM (irel->r_info);
878 if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
879 goto error_return;
881 /* We need the name and hash table entry of the target
882 symbol! */
883 hash = NULL;
884 sym = NULL;
885 sym_sec = NULL;
887 if (r_index < symtab_hdr->sh_info)
889 /* A local symbol. */
890 Elf_Internal_Sym *isym;
891 struct elf_link_hash_table *elftab;
892 bfd_size_type amt;
894 isym = isymbuf + r_index;
895 if (isym->st_shndx == SHN_UNDEF)
896 sym_sec = bfd_und_section_ptr;
897 else if (isym->st_shndx == SHN_ABS)
898 sym_sec = bfd_abs_section_ptr;
899 else if (isym->st_shndx == SHN_COMMON)
900 sym_sec = bfd_com_section_ptr;
901 else
902 sym_sec
903 = bfd_section_from_elf_index (input_bfd,
904 isym->st_shndx);
906 sym_name
907 = bfd_elf_string_from_elf_section (input_bfd,
908 (symtab_hdr
909 ->sh_link),
910 isym->st_name);
912 /* If it isn't a function, then we don't care
913 about it. */
914 if (ELF_ST_TYPE (isym->st_info) != STT_FUNC)
915 continue;
917 /* Tack on an ID so we can uniquely identify this
918 local symbol in the global hash table. */
919 amt = strlen (sym_name) + 10;
920 new_name = bfd_malloc (amt);
921 if (new_name == 0)
922 goto error_return;
924 sprintf (new_name, "%s_%08x",
925 sym_name, (int) sym_sec);
926 sym_name = new_name;
928 elftab = &hash_table->static_hash_table->root;
929 hash = ((struct elf32_mn10300_link_hash_entry *)
930 elf_link_hash_lookup (elftab, sym_name,
931 true, true, false));
932 free (new_name);
934 else
936 r_index -= symtab_hdr->sh_info;
937 hash = (struct elf32_mn10300_link_hash_entry *)
938 elf_sym_hashes (input_bfd)[r_index];
941 /* If this is not a "call" instruction, then we
942 should convert "call" instructions to "calls"
943 instructions. */
944 code = bfd_get_8 (input_bfd,
945 contents + irel->r_offset - 1);
946 if (code != 0xdd && code != 0xcd)
947 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
949 /* If this is a jump/call, then bump the
950 direct_calls counter. Else force "call" to
951 "calls" conversions. */
952 if (r_type == R_MN10300_PCREL32
953 || r_type == R_MN10300_PCREL16)
954 hash->direct_calls++;
955 else
956 hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
960 /* Now look at the actual contents to get the stack size,
961 and a list of what registers were saved in the prologue
962 (ie movm_args). */
963 if ((section->flags & SEC_CODE) != 0)
965 Elf_Internal_Sym *isym, *isymend;
966 unsigned int sec_shndx;
967 struct elf_link_hash_entry **hashes;
968 struct elf_link_hash_entry **end_hashes;
969 unsigned int symcount;
971 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
972 section);
974 /* Look at each function defined in this section and
975 update info for that function. */
976 isymend = isymbuf + symtab_hdr->sh_info;
977 for (isym = isymbuf; isym < isymend; isym++)
979 if (isym->st_shndx == sec_shndx
980 && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
982 struct elf_link_hash_table *elftab;
983 bfd_size_type amt;
985 if (isym->st_shndx == SHN_UNDEF)
986 sym_sec = bfd_und_section_ptr;
987 else if (isym->st_shndx == SHN_ABS)
988 sym_sec = bfd_abs_section_ptr;
989 else if (isym->st_shndx == SHN_COMMON)
990 sym_sec = bfd_com_section_ptr;
991 else
992 sym_sec
993 = bfd_section_from_elf_index (input_bfd,
994 isym->st_shndx);
996 sym_name = (bfd_elf_string_from_elf_section
997 (input_bfd, symtab_hdr->sh_link,
998 isym->st_name));
1000 /* Tack on an ID so we can uniquely identify this
1001 local symbol in the global hash table. */
1002 amt = strlen (sym_name) + 10;
1003 new_name = bfd_malloc (amt);
1004 if (new_name == 0)
1005 goto error_return;
1007 sprintf (new_name, "%s_%08x",
1008 sym_name, (int) sym_sec);
1009 sym_name = new_name;
1011 elftab = &hash_table->static_hash_table->root;
1012 hash = ((struct elf32_mn10300_link_hash_entry *)
1013 elf_link_hash_lookup (elftab, sym_name,
1014 true, true, false));
1015 free (new_name);
1016 compute_function_info (input_bfd, hash,
1017 isym->st_value, contents);
1021 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
1022 - symtab_hdr->sh_info);
1023 hashes = elf_sym_hashes (abfd);
1024 end_hashes = hashes + symcount;
1025 for (; hashes < end_hashes; hashes++)
1027 hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
1028 if ((hash->root.root.type == bfd_link_hash_defined
1029 || hash->root.root.type == bfd_link_hash_defweak)
1030 && hash->root.root.u.def.section == section
1031 && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
1032 compute_function_info (input_bfd, hash,
1033 (hash)->root.root.u.def.value,
1034 contents);
1038 /* Cache or free any memory we allocated for the relocs. */
1039 if (internal_relocs != NULL
1040 && elf_section_data (section)->relocs != internal_relocs)
1041 free (internal_relocs);
1042 internal_relocs = NULL;
1044 /* Cache or free any memory we allocated for the contents. */
1045 if (contents != NULL
1046 && elf_section_data (section)->this_hdr.contents != contents)
1048 if (! link_info->keep_memory)
1049 free (contents);
1050 else
1052 /* Cache the section contents for elf_link_input_bfd. */
1053 elf_section_data (section)->this_hdr.contents = contents;
1056 contents = NULL;
1059 /* Cache or free any memory we allocated for the symbols. */
1060 if (isymbuf != NULL
1061 && symtab_hdr->contents != (unsigned char *) isymbuf)
1063 if (! link_info->keep_memory)
1064 free (isymbuf);
1065 else
1067 /* Cache the symbols for elf_link_input_bfd. */
1068 symtab_hdr->contents = (unsigned char *) isymbuf;
1071 isymbuf = NULL;
1074 /* Now iterate on each symbol in the hash table and perform
1075 the final initialization steps on each. */
1076 elf32_mn10300_link_hash_traverse (hash_table,
1077 elf32_mn10300_finish_hash_table_entry,
1078 NULL);
1079 elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
1080 elf32_mn10300_finish_hash_table_entry,
1081 NULL);
1083 /* All entries in the hash table are fully initialized. */
1084 hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
1086 /* Now that everything has been initialized, go through each
1087 code section and delete any prologue insns which will be
1088 redundant because their operations will be performed by
1089 a "call" instruction. */
1090 for (input_bfd = link_info->input_bfds;
1091 input_bfd != NULL;
1092 input_bfd = input_bfd->link_next)
1094 /* We're going to need all the local symbols for each bfd. */
1095 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
1096 if (symtab_hdr->sh_info != 0)
1098 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
1099 if (isymbuf == NULL)
1100 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
1101 symtab_hdr->sh_info, 0,
1102 NULL, NULL, NULL);
1103 if (isymbuf == NULL)
1104 goto error_return;
1107 /* Walk over each section in this bfd. */
1108 for (section = input_bfd->sections;
1109 section != NULL;
1110 section = section->next)
1112 unsigned int sec_shndx;
1113 Elf_Internal_Sym *isym, *isymend;
1114 struct elf_link_hash_entry **hashes;
1115 struct elf_link_hash_entry **end_hashes;
1116 unsigned int symcount;
1118 /* Skip non-code sections and empty sections. */
1119 if ((section->flags & SEC_CODE) == 0 || section->_raw_size == 0)
1120 continue;
1122 if (section->reloc_count != 0)
1124 /* Get a copy of the native relocations. */
1125 internal_relocs = (_bfd_elf32_link_read_relocs
1126 (input_bfd, section, (PTR) NULL,
1127 (Elf_Internal_Rela *) NULL,
1128 link_info->keep_memory));
1129 if (internal_relocs == NULL)
1130 goto error_return;
1133 /* Get cached copy of section contents if it exists. */
1134 if (elf_section_data (section)->this_hdr.contents != NULL)
1135 contents = elf_section_data (section)->this_hdr.contents;
1136 else
1138 /* Go get them off disk. */
1139 contents = (bfd_byte *) bfd_malloc (section->_raw_size);
1140 if (contents == NULL)
1141 goto error_return;
1143 if (!bfd_get_section_contents (input_bfd, section,
1144 contents, (file_ptr) 0,
1145 section->_raw_size))
1146 goto error_return;
1149 sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
1150 section);
1152 /* Now look for any function in this section which needs
1153 insns deleted from its prologue. */
1154 isymend = isymbuf + symtab_hdr->sh_info;
1155 for (isym = isymbuf; isym < isymend; isym++)
1157 struct elf32_mn10300_link_hash_entry *sym_hash;
1158 asection *sym_sec = NULL;
1159 const char *sym_name;
1160 char *new_name;
1161 struct elf_link_hash_table *elftab;
1162 bfd_size_type amt;
1164 if (isym->st_shndx != sec_shndx)
1165 continue;
1167 if (isym->st_shndx == SHN_UNDEF)
1168 sym_sec = bfd_und_section_ptr;
1169 else if (isym->st_shndx == SHN_ABS)
1170 sym_sec = bfd_abs_section_ptr;
1171 else if (isym->st_shndx == SHN_COMMON)
1172 sym_sec = bfd_com_section_ptr;
1173 else
1174 sym_sec
1175 = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
1177 sym_name
1178 = bfd_elf_string_from_elf_section (input_bfd,
1179 symtab_hdr->sh_link,
1180 isym->st_name);
1182 /* Tack on an ID so we can uniquely identify this
1183 local symbol in the global hash table. */
1184 amt = strlen (sym_name) + 10;
1185 new_name = bfd_malloc (amt);
1186 if (new_name == 0)
1187 goto error_return;
1188 sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
1189 sym_name = new_name;
1191 elftab = &hash_table->static_hash_table->root;
1192 sym_hash = ((struct elf32_mn10300_link_hash_entry *)
1193 elf_link_hash_lookup (elftab, sym_name,
1194 false, false, false));
1196 free (new_name);
1197 if (sym_hash == NULL)
1198 continue;
1200 if (! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
1201 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
1203 int bytes = 0;
1205 /* Note that we've changed things. */
1206 elf_section_data (section)->relocs = internal_relocs;
1207 elf_section_data (section)->this_hdr.contents = contents;
1208 symtab_hdr->contents = (unsigned char *) isymbuf;
1210 /* Count how many bytes we're going to delete. */
1211 if (sym_hash->movm_args)
1212 bytes += 2;
1214 if (sym_hash->stack_size && sym_hash->stack_size <= 128)
1215 bytes += 3;
1216 else if (sym_hash->stack_size
1217 && sym_hash->stack_size < 256)
1218 bytes += 4;
1220 /* Note that we've deleted prologue bytes for this
1221 function. */
1222 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1224 /* Actually delete the bytes. */
1225 if (!mn10300_elf_relax_delete_bytes (input_bfd,
1226 section,
1227 isym->st_value,
1228 bytes))
1229 goto error_return;
1231 /* Something changed. Not strictly necessary, but
1232 may lead to more relaxing opportunities. */
1233 *again = true;
1237 /* Look for any global functions in this section which
1238 need insns deleted from their prologues. */
1239 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
1240 - symtab_hdr->sh_info);
1241 hashes = elf_sym_hashes (abfd);
1242 end_hashes = hashes + symcount;
1243 for (; hashes < end_hashes; hashes++)
1245 struct elf32_mn10300_link_hash_entry *sym_hash;
1247 sym_hash = (struct elf32_mn10300_link_hash_entry *) *hashes;
1248 if ((sym_hash->root.root.type == bfd_link_hash_defined
1249 || sym_hash->root.root.type == bfd_link_hash_defweak)
1250 && sym_hash->root.root.u.def.section == section
1251 && ! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
1252 && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
1254 int bytes = 0;
1255 bfd_vma symval;
1257 /* Note that we've changed things. */
1258 elf_section_data (section)->relocs = internal_relocs;
1259 elf_section_data (section)->this_hdr.contents = contents;
1260 symtab_hdr->contents = (unsigned char *) isymbuf;
1262 /* Count how many bytes we're going to delete. */
1263 if (sym_hash->movm_args)
1264 bytes += 2;
1266 if (sym_hash->stack_size && sym_hash->stack_size <= 128)
1267 bytes += 3;
1268 else if (sym_hash->stack_size
1269 && sym_hash->stack_size < 256)
1270 bytes += 4;
1272 /* Note that we've deleted prologue bytes for this
1273 function. */
1274 sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1276 /* Actually delete the bytes. */
1277 symval = sym_hash->root.root.u.def.value;
1278 if (!mn10300_elf_relax_delete_bytes (input_bfd,
1279 section,
1280 symval,
1281 bytes))
1282 goto error_return;
1284 /* Something changed. Not strictly necessary, but
1285 may lead to more relaxing opportunities. */
1286 *again = true;
1290 /* Cache or free any memory we allocated for the relocs. */
1291 if (internal_relocs != NULL
1292 && elf_section_data (section)->relocs != internal_relocs)
1293 free (internal_relocs);
1294 internal_relocs = NULL;
1296 /* Cache or free any memory we allocated for the contents. */
1297 if (contents != NULL
1298 && elf_section_data (section)->this_hdr.contents != contents)
1300 if (! link_info->keep_memory)
1301 free (contents);
1302 else
1304 /* Cache the section contents for elf_link_input_bfd. */
1305 elf_section_data (section)->this_hdr.contents = contents;
1308 contents = NULL;
1311 /* Cache or free any memory we allocated for the symbols. */
1312 if (isymbuf != NULL
1313 && symtab_hdr->contents != (unsigned char *) isymbuf)
1315 if (! link_info->keep_memory)
1316 free (isymbuf);
1317 else
1319 /* Cache the symbols for elf_link_input_bfd. */
1320 symtab_hdr->contents = (unsigned char *) isymbuf;
1323 isymbuf = NULL;
1327 /* (Re)initialize for the basic instruction shortening/relaxing pass. */
1328 contents = NULL;
1329 internal_relocs = NULL;
1330 isymbuf = NULL;
1331 /* For error_return. */
1332 section = sec;
1334 /* We don't have to do anything for a relocateable link, if
1335 this section does not have relocs, or if this is not a
1336 code section. */
1337 if (link_info->relocateable
1338 || (sec->flags & SEC_RELOC) == 0
1339 || sec->reloc_count == 0
1340 || (sec->flags & SEC_CODE) == 0)
1341 return true;
1343 /* If this is the first time we have been called for this section,
1344 initialize the cooked size. */
1345 if (sec->_cooked_size == 0)
1346 sec->_cooked_size = sec->_raw_size;
1348 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1350 /* Get a copy of the native relocations. */
1351 internal_relocs = (_bfd_elf32_link_read_relocs
1352 (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
1353 link_info->keep_memory));
1354 if (internal_relocs == NULL)
1355 goto error_return;
1357 /* Walk through them looking for relaxing opportunities. */
1358 irelend = internal_relocs + sec->reloc_count;
1359 for (irel = internal_relocs; irel < irelend; irel++)
1361 bfd_vma symval;
1362 struct elf32_mn10300_link_hash_entry *h = NULL;
1364 /* If this isn't something that can be relaxed, then ignore
1365 this reloc. */
1366 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_NONE
1367 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_8
1368 || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_MAX)
1369 continue;
1371 /* Get the section contents if we haven't done so already. */
1372 if (contents == NULL)
1374 /* Get cached copy if it exists. */
1375 if (elf_section_data (sec)->this_hdr.contents != NULL)
1376 contents = elf_section_data (sec)->this_hdr.contents;
1377 else
1379 /* Go get them off disk. */
1380 contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
1381 if (contents == NULL)
1382 goto error_return;
1384 if (! bfd_get_section_contents (abfd, sec, contents,
1385 (file_ptr) 0, sec->_raw_size))
1386 goto error_return;
1390 /* Read this BFD's symbols if we haven't done so already. */
1391 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
1393 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
1394 if (isymbuf == NULL)
1395 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
1396 symtab_hdr->sh_info, 0,
1397 NULL, NULL, NULL);
1398 if (isymbuf == NULL)
1399 goto error_return;
1402 /* Get the value of the symbol referred to by the reloc. */
1403 if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
1405 Elf_Internal_Sym *isym;
1406 asection *sym_sec = NULL;
1407 const char *sym_name;
1408 char *new_name;
1410 /* A local symbol. */
1411 isym = isymbuf + ELF32_R_SYM (irel->r_info);
1412 if (isym->st_shndx == SHN_UNDEF)
1413 sym_sec = bfd_und_section_ptr;
1414 else if (isym->st_shndx == SHN_ABS)
1415 sym_sec = bfd_abs_section_ptr;
1416 else if (isym->st_shndx == SHN_COMMON)
1417 sym_sec = bfd_com_section_ptr;
1418 else
1419 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
1421 symval = (isym->st_value
1422 + sym_sec->output_section->vma
1423 + sym_sec->output_offset);
1424 sym_name = bfd_elf_string_from_elf_section (abfd,
1425 symtab_hdr->sh_link,
1426 isym->st_name);
1428 /* Tack on an ID so we can uniquely identify this
1429 local symbol in the global hash table. */
1430 new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10);
1431 if (new_name == 0)
1432 goto error_return;
1433 sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
1434 sym_name = new_name;
1436 h = (struct elf32_mn10300_link_hash_entry *)
1437 elf_link_hash_lookup (&hash_table->static_hash_table->root,
1438 sym_name, false, false, false);
1439 free (new_name);
1441 else
1443 unsigned long indx;
1445 /* An external symbol. */
1446 indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
1447 h = (struct elf32_mn10300_link_hash_entry *)
1448 (elf_sym_hashes (abfd)[indx]);
1449 BFD_ASSERT (h != NULL);
1450 if (h->root.root.type != bfd_link_hash_defined
1451 && h->root.root.type != bfd_link_hash_defweak)
1453 /* This appears to be a reference to an undefined
1454 symbol. Just ignore it--it will be caught by the
1455 regular reloc processing. */
1456 continue;
1459 symval = (h->root.root.u.def.value
1460 + h->root.root.u.def.section->output_section->vma
1461 + h->root.root.u.def.section->output_offset);
1464 /* For simplicity of coding, we are going to modify the section
1465 contents, the section relocs, and the BFD symbol table. We
1466 must tell the rest of the code not to free up this
1467 information. It would be possible to instead create a table
1468 of changes which have to be made, as is done in coff-mips.c;
1469 that would be more work, but would require less memory when
1470 the linker is run. */
1472 /* Try to turn a 32bit pc-relative branch/call into a 16bit pc-relative
1473 branch/call, also deal with "call" -> "calls" conversions and
1474 insertion of prologue data into "call" instructions. */
1475 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL32)
1477 bfd_vma value = symval;
1479 /* If we've got a "call" instruction that needs to be turned
1480 into a "calls" instruction, do so now. It saves a byte. */
1481 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
1483 unsigned char code;
1485 /* Get the opcode. */
1486 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1488 /* Make sure we're working with a "call" instruction! */
1489 if (code == 0xdd)
1491 /* Note that we've changed the relocs, section contents,
1492 etc. */
1493 elf_section_data (sec)->relocs = internal_relocs;
1494 elf_section_data (sec)->this_hdr.contents = contents;
1495 symtab_hdr->contents = (unsigned char *) isymbuf;
1497 /* Fix the opcode. */
1498 bfd_put_8 (abfd, 0xfc, contents + irel->r_offset - 1);
1499 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
1501 /* Fix irel->r_offset and irel->r_addend. */
1502 irel->r_offset += 1;
1503 irel->r_addend += 1;
1505 /* Delete one byte of data. */
1506 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1507 irel->r_offset + 3, 1))
1508 goto error_return;
1510 /* That will change things, so, we should relax again.
1511 Note that this is not required, and it may be slow. */
1512 *again = true;
1515 else if (h)
1517 /* We've got a "call" instruction which needs some data
1518 from target function filled in. */
1519 unsigned char code;
1521 /* Get the opcode. */
1522 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1524 /* Insert data from the target function into the "call"
1525 instruction if needed. */
1526 if (code == 0xdd)
1528 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 4);
1529 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
1530 contents + irel->r_offset + 5);
1534 /* Deal with pc-relative gunk. */
1535 value -= (sec->output_section->vma + sec->output_offset);
1536 value -= irel->r_offset;
1537 value += irel->r_addend;
1539 /* See if the value will fit in 16 bits, note the high value is
1540 0x7fff + 2 as the target will be two bytes closer if we are
1541 able to relax. */
1542 if ((long) value < 0x8001 && (long) value > -0x8000)
1544 unsigned char code;
1546 /* Get the opcode. */
1547 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1549 if (code != 0xdc && code != 0xdd && code != 0xff)
1550 continue;
1552 /* Note that we've changed the relocs, section contents, etc. */
1553 elf_section_data (sec)->relocs = internal_relocs;
1554 elf_section_data (sec)->this_hdr.contents = contents;
1555 symtab_hdr->contents = (unsigned char *) isymbuf;
1557 /* Fix the opcode. */
1558 if (code == 0xdc)
1559 bfd_put_8 (abfd, 0xcc, contents + irel->r_offset - 1);
1560 else if (code == 0xdd)
1561 bfd_put_8 (abfd, 0xcd, contents + irel->r_offset - 1);
1562 else if (code == 0xff)
1563 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
1565 /* Fix the relocation's type. */
1566 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1567 R_MN10300_PCREL16);
1569 /* Delete two bytes of data. */
1570 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1571 irel->r_offset + 1, 2))
1572 goto error_return;
1574 /* That will change things, so, we should relax again.
1575 Note that this is not required, and it may be slow. */
1576 *again = true;
1580 /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
1581 branch. */
1582 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL16)
1584 bfd_vma value = symval;
1586 /* If we've got a "call" instruction that needs to be turned
1587 into a "calls" instruction, do so now. It saves a byte. */
1588 if (h && (h->flags & MN10300_CONVERT_CALL_TO_CALLS))
1590 unsigned char code;
1592 /* Get the opcode. */
1593 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1595 /* Make sure we're working with a "call" instruction! */
1596 if (code == 0xcd)
1598 /* Note that we've changed the relocs, section contents,
1599 etc. */
1600 elf_section_data (sec)->relocs = internal_relocs;
1601 elf_section_data (sec)->this_hdr.contents = contents;
1602 symtab_hdr->contents = (unsigned char *) isymbuf;
1604 /* Fix the opcode. */
1605 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 1);
1606 bfd_put_8 (abfd, 0xff, contents + irel->r_offset);
1608 /* Fix irel->r_offset and irel->r_addend. */
1609 irel->r_offset += 1;
1610 irel->r_addend += 1;
1612 /* Delete one byte of data. */
1613 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1614 irel->r_offset + 1, 1))
1615 goto error_return;
1617 /* That will change things, so, we should relax again.
1618 Note that this is not required, and it may be slow. */
1619 *again = true;
1622 else if (h)
1624 unsigned char code;
1626 /* Get the opcode. */
1627 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1629 /* Insert data from the target function into the "call"
1630 instruction if needed. */
1631 if (code == 0xcd)
1633 bfd_put_8 (abfd, h->movm_args, contents + irel->r_offset + 2);
1634 bfd_put_8 (abfd, h->stack_size + h->movm_stack_size,
1635 contents + irel->r_offset + 3);
1639 /* Deal with pc-relative gunk. */
1640 value -= (sec->output_section->vma + sec->output_offset);
1641 value -= irel->r_offset;
1642 value += irel->r_addend;
1644 /* See if the value will fit in 8 bits, note the high value is
1645 0x7f + 1 as the target will be one bytes closer if we are
1646 able to relax. */
1647 if ((long) value < 0x80 && (long) value > -0x80)
1649 unsigned char code;
1651 /* Get the opcode. */
1652 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1654 if (code != 0xcc)
1655 continue;
1657 /* Note that we've changed the relocs, section contents, etc. */
1658 elf_section_data (sec)->relocs = internal_relocs;
1659 elf_section_data (sec)->this_hdr.contents = contents;
1660 symtab_hdr->contents = (unsigned char *) isymbuf;
1662 /* Fix the opcode. */
1663 bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
1665 /* Fix the relocation's type. */
1666 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1667 R_MN10300_PCREL8);
1669 /* Delete one byte of data. */
1670 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1671 irel->r_offset + 1, 1))
1672 goto error_return;
1674 /* That will change things, so, we should relax again.
1675 Note that this is not required, and it may be slow. */
1676 *again = true;
1680 /* Try to eliminate an unconditional 8 bit pc-relative branch
1681 which immediately follows a conditional 8 bit pc-relative
1682 branch around the unconditional branch.
1684 original: new:
1685 bCC lab1 bCC' lab2
1686 bra lab2
1687 lab1: lab1:
1689 This happens when the bCC can't reach lab2 at assembly time,
1690 but due to other relaxations it can reach at link time. */
1691 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
1693 Elf_Internal_Rela *nrel;
1694 bfd_vma value = symval;
1695 unsigned char code;
1697 /* Deal with pc-relative gunk. */
1698 value -= (sec->output_section->vma + sec->output_offset);
1699 value -= irel->r_offset;
1700 value += irel->r_addend;
1702 /* Do nothing if this reloc is the last byte in the section. */
1703 if (irel->r_offset == sec->_cooked_size)
1704 continue;
1706 /* See if the next instruction is an unconditional pc-relative
1707 branch, more often than not this test will fail, so we
1708 test it first to speed things up. */
1709 code = bfd_get_8 (abfd, contents + irel->r_offset + 1);
1710 if (code != 0xca)
1711 continue;
1713 /* Also make sure the next relocation applies to the next
1714 instruction and that it's a pc-relative 8 bit branch. */
1715 nrel = irel + 1;
1716 if (nrel == irelend
1717 || irel->r_offset + 2 != nrel->r_offset
1718 || ELF32_R_TYPE (nrel->r_info) != (int) R_MN10300_PCREL8)
1719 continue;
1721 /* Make sure our destination immediately follows the
1722 unconditional branch. */
1723 if (symval != (sec->output_section->vma + sec->output_offset
1724 + irel->r_offset + 3))
1725 continue;
1727 /* Now make sure we are a conditional branch. This may not
1728 be necessary, but why take the chance.
1730 Note these checks assume that R_MN10300_PCREL8 relocs
1731 only occur on bCC and bCCx insns. If they occured
1732 elsewhere, we'd need to know the start of this insn
1733 for this check to be accurate. */
1734 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1735 if (code != 0xc0 && code != 0xc1 && code != 0xc2
1736 && code != 0xc3 && code != 0xc4 && code != 0xc5
1737 && code != 0xc6 && code != 0xc7 && code != 0xc8
1738 && code != 0xc9 && code != 0xe8 && code != 0xe9
1739 && code != 0xea && code != 0xeb)
1740 continue;
1742 /* We also have to be sure there is no symbol/label
1743 at the unconditional branch. */
1744 if (mn10300_elf_symbol_address_p (abfd, sec, isymbuf,
1745 irel->r_offset + 1))
1746 continue;
1748 /* Note that we've changed the relocs, section contents, etc. */
1749 elf_section_data (sec)->relocs = internal_relocs;
1750 elf_section_data (sec)->this_hdr.contents = contents;
1751 symtab_hdr->contents = (unsigned char *) isymbuf;
1753 /* Reverse the condition of the first branch. */
1754 switch (code)
1756 case 0xc8:
1757 code = 0xc9;
1758 break;
1759 case 0xc9:
1760 code = 0xc8;
1761 break;
1762 case 0xc0:
1763 code = 0xc2;
1764 break;
1765 case 0xc2:
1766 code = 0xc0;
1767 break;
1768 case 0xc3:
1769 code = 0xc1;
1770 break;
1771 case 0xc1:
1772 code = 0xc3;
1773 break;
1774 case 0xc4:
1775 code = 0xc6;
1776 break;
1777 case 0xc6:
1778 code = 0xc4;
1779 break;
1780 case 0xc7:
1781 code = 0xc5;
1782 break;
1783 case 0xc5:
1784 code = 0xc7;
1785 break;
1786 case 0xe8:
1787 code = 0xe9;
1788 break;
1789 case 0x9d:
1790 code = 0xe8;
1791 break;
1792 case 0xea:
1793 code = 0xeb;
1794 break;
1795 case 0xeb:
1796 code = 0xea;
1797 break;
1799 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
1801 /* Set the reloc type and symbol for the first branch
1802 from the second branch. */
1803 irel->r_info = nrel->r_info;
1805 /* Make the reloc for the second branch a null reloc. */
1806 nrel->r_info = ELF32_R_INFO (ELF32_R_SYM (nrel->r_info),
1807 R_MN10300_NONE);
1809 /* Delete two bytes of data. */
1810 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1811 irel->r_offset + 1, 2))
1812 goto error_return;
1814 /* That will change things, so, we should relax again.
1815 Note that this is not required, and it may be slow. */
1816 *again = true;
1819 /* Try to turn a 24 immediate, displacement or absolute address
1820 into a 8 immediate, displacement or absolute address. */
1821 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_24)
1823 bfd_vma value = symval;
1824 value += irel->r_addend;
1826 /* See if the value will fit in 8 bits. */
1827 if ((long) value < 0x7f && (long) value > -0x80)
1829 unsigned char code;
1831 /* AM33 insns which have 24 operands are 6 bytes long and
1832 will have 0xfd as the first byte. */
1834 /* Get the first opcode. */
1835 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1837 if (code == 0xfd)
1839 /* Get the second opcode. */
1840 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1842 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
1843 equivalent instructions exists. */
1844 if (code != 0x6b && code != 0x7b
1845 && code != 0x8b && code != 0x9b
1846 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
1847 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
1848 || (code & 0x0f) == 0x0e))
1850 /* Not safe if the high bit is on as relaxing may
1851 move the value out of high mem and thus not fit
1852 in a signed 8bit value. This is currently over
1853 conservative. */
1854 if ((value & 0x80) == 0)
1856 /* Note that we've changed the relocation contents,
1857 etc. */
1858 elf_section_data (sec)->relocs = internal_relocs;
1859 elf_section_data (sec)->this_hdr.contents = contents;
1860 symtab_hdr->contents = (unsigned char *) isymbuf;
1862 /* Fix the opcode. */
1863 bfd_put_8 (abfd, 0xfb, contents + irel->r_offset - 3);
1864 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
1866 /* Fix the relocation's type. */
1867 irel->r_info =
1868 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1869 R_MN10300_8);
1871 /* Delete two bytes of data. */
1872 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1873 irel->r_offset + 1, 2))
1874 goto error_return;
1876 /* That will change things, so, we should relax
1877 again. Note that this is not required, and it
1878 may be slow. */
1879 *again = true;
1880 break;
1887 /* Try to turn a 32bit immediate, displacement or absolute address
1888 into a 16bit immediate, displacement or absolute address. */
1889 if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32)
1891 bfd_vma value = symval;
1892 value += irel->r_addend;
1894 /* See if the value will fit in 24 bits.
1895 We allow any 16bit match here. We prune those we can't
1896 handle below. */
1897 if ((long) value < 0x7fffff && (long) value > -0x800000)
1899 unsigned char code;
1901 /* AM33 insns which have 32bit operands are 7 bytes long and
1902 will have 0xfe as the first byte. */
1904 /* Get the first opcode. */
1905 code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1907 if (code == 0xfe)
1909 /* Get the second opcode. */
1910 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1912 /* All the am33 32 -> 24 relaxing possibilities. */
1913 /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
1914 equivalent instructions exists. */
1915 if (code != 0x6b && code != 0x7b
1916 && code != 0x8b && code != 0x9b
1917 && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
1918 || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
1919 || (code & 0x0f) == 0x0e))
1921 /* Not safe if the high bit is on as relaxing may
1922 move the value out of high mem and thus not fit
1923 in a signed 16bit value. This is currently over
1924 conservative. */
1925 if ((value & 0x8000) == 0)
1927 /* Note that we've changed the relocation contents,
1928 etc. */
1929 elf_section_data (sec)->relocs = internal_relocs;
1930 elf_section_data (sec)->this_hdr.contents = contents;
1931 symtab_hdr->contents = (unsigned char *) isymbuf;
1933 /* Fix the opcode. */
1934 bfd_put_8 (abfd, 0xfd, contents + irel->r_offset - 3);
1935 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
1937 /* Fix the relocation's type. */
1938 irel->r_info =
1939 ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1940 R_MN10300_24);
1942 /* Delete one byte of data. */
1943 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
1944 irel->r_offset + 3, 1))
1945 goto error_return;
1947 /* That will change things, so, we should relax
1948 again. Note that this is not required, and it
1949 may be slow. */
1950 *again = true;
1951 break;
1957 /* See if the value will fit in 16 bits.
1958 We allow any 16bit match here. We prune those we can't
1959 handle below. */
1960 if ((long) value < 0x7fff && (long) value > -0x8000)
1962 unsigned char code;
1964 /* Most insns which have 32bit operands are 6 bytes long;
1965 exceptions are pcrel insns and bit insns.
1967 We handle pcrel insns above. We don't bother trying
1968 to handle the bit insns here.
1970 The first byte of the remaining insns will be 0xfc. */
1972 /* Get the first opcode. */
1973 code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1975 if (code != 0xfc)
1976 continue;
1978 /* Get the second opcode. */
1979 code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1981 if ((code & 0xf0) < 0x80)
1982 switch (code & 0xf0)
1984 /* mov (d32,am),dn -> mov (d32,am),dn
1985 mov dm,(d32,am) -> mov dn,(d32,am)
1986 mov (d32,am),an -> mov (d32,am),an
1987 mov dm,(d32,am) -> mov dn,(d32,am)
1988 movbu (d32,am),dn -> movbu (d32,am),dn
1989 movbu dm,(d32,am) -> movbu dn,(d32,am)
1990 movhu (d32,am),dn -> movhu (d32,am),dn
1991 movhu dm,(d32,am) -> movhu dn,(d32,am) */
1992 case 0x00:
1993 case 0x10:
1994 case 0x20:
1995 case 0x30:
1996 case 0x40:
1997 case 0x50:
1998 case 0x60:
1999 case 0x70:
2000 /* Not safe if the high bit is on as relaxing may
2001 move the value out of high mem and thus not fit
2002 in a signed 16bit value. */
2003 if (code == 0xcc
2004 && (value & 0x8000))
2005 continue;
2007 /* Note that we've changed the relocation contents, etc. */
2008 elf_section_data (sec)->relocs = internal_relocs;
2009 elf_section_data (sec)->this_hdr.contents = contents;
2010 symtab_hdr->contents = (unsigned char *) isymbuf;
2012 /* Fix the opcode. */
2013 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2014 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2016 /* Fix the relocation's type. */
2017 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2018 R_MN10300_16);
2020 /* Delete two bytes of data. */
2021 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2022 irel->r_offset + 2, 2))
2023 goto error_return;
2025 /* That will change things, so, we should relax again.
2026 Note that this is not required, and it may be slow. */
2027 *again = true;
2028 break;
2030 else if ((code & 0xf0) == 0x80
2031 || (code & 0xf0) == 0x90)
2032 switch (code & 0xf3)
2034 /* mov dn,(abs32) -> mov dn,(abs16)
2035 movbu dn,(abs32) -> movbu dn,(abs16)
2036 movhu dn,(abs32) -> movhu dn,(abs16) */
2037 case 0x81:
2038 case 0x82:
2039 case 0x83:
2040 /* Note that we've changed the relocation contents, etc. */
2041 elf_section_data (sec)->relocs = internal_relocs;
2042 elf_section_data (sec)->this_hdr.contents = contents;
2043 symtab_hdr->contents = (unsigned char *) isymbuf;
2045 if ((code & 0xf3) == 0x81)
2046 code = 0x01 + (code & 0x0c);
2047 else if ((code & 0xf3) == 0x82)
2048 code = 0x02 + (code & 0x0c);
2049 else if ((code & 0xf3) == 0x83)
2050 code = 0x03 + (code & 0x0c);
2051 else
2052 abort ();
2054 /* Fix the opcode. */
2055 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2057 /* Fix the relocation's type. */
2058 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2059 R_MN10300_16);
2061 /* The opcode got shorter too, so we have to fix the
2062 addend and offset too! */
2063 irel->r_offset -= 1;
2065 /* Delete three bytes of data. */
2066 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2067 irel->r_offset + 1, 3))
2068 goto error_return;
2070 /* That will change things, so, we should relax again.
2071 Note that this is not required, and it may be slow. */
2072 *again = true;
2073 break;
2075 /* mov am,(abs32) -> mov am,(abs16)
2076 mov am,(d32,sp) -> mov am,(d16,sp)
2077 mov dm,(d32,sp) -> mov dm,(d32,sp)
2078 movbu dm,(d32,sp) -> movbu dm,(d32,sp)
2079 movhu dm,(d32,sp) -> movhu dm,(d32,sp) */
2080 case 0x80:
2081 case 0x90:
2082 case 0x91:
2083 case 0x92:
2084 case 0x93:
2085 /* sp-based offsets are zero-extended. */
2086 if (code >= 0x90 && code <= 0x93
2087 && (long)value < 0)
2088 continue;
2090 /* Note that we've changed the relocation contents, etc. */
2091 elf_section_data (sec)->relocs = internal_relocs;
2092 elf_section_data (sec)->this_hdr.contents = contents;
2093 symtab_hdr->contents = (unsigned char *) isymbuf;
2095 /* Fix the opcode. */
2096 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2097 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2099 /* Fix the relocation's type. */
2100 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2101 R_MN10300_16);
2103 /* Delete two bytes of data. */
2104 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2105 irel->r_offset + 2, 2))
2106 goto error_return;
2108 /* That will change things, so, we should relax again.
2109 Note that this is not required, and it may be slow. */
2110 *again = true;
2111 break;
2113 else if ((code & 0xf0) < 0xf0)
2114 switch (code & 0xfc)
2116 /* mov imm32,dn -> mov imm16,dn
2117 mov imm32,an -> mov imm16,an
2118 mov (abs32),dn -> mov (abs16),dn
2119 movbu (abs32),dn -> movbu (abs16),dn
2120 movhu (abs32),dn -> movhu (abs16),dn */
2121 case 0xcc:
2122 case 0xdc:
2123 case 0xa4:
2124 case 0xa8:
2125 case 0xac:
2126 /* Not safe if the high bit is on as relaxing may
2127 move the value out of high mem and thus not fit
2128 in a signed 16bit value. */
2129 if (code == 0xcc
2130 && (value & 0x8000))
2131 continue;
2133 /* mov imm16, an zero-extends the immediate. */
2134 if (code == 0xdc
2135 && (long)value < 0)
2136 continue;
2138 /* Note that we've changed the relocation contents, etc. */
2139 elf_section_data (sec)->relocs = internal_relocs;
2140 elf_section_data (sec)->this_hdr.contents = contents;
2141 symtab_hdr->contents = (unsigned char *) isymbuf;
2143 if ((code & 0xfc) == 0xcc)
2144 code = 0x2c + (code & 0x03);
2145 else if ((code & 0xfc) == 0xdc)
2146 code = 0x24 + (code & 0x03);
2147 else if ((code & 0xfc) == 0xa4)
2148 code = 0x30 + (code & 0x03);
2149 else if ((code & 0xfc) == 0xa8)
2150 code = 0x34 + (code & 0x03);
2151 else if ((code & 0xfc) == 0xac)
2152 code = 0x38 + (code & 0x03);
2153 else
2154 abort ();
2156 /* Fix the opcode. */
2157 bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2159 /* Fix the relocation's type. */
2160 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2161 R_MN10300_16);
2163 /* The opcode got shorter too, so we have to fix the
2164 addend and offset too! */
2165 irel->r_offset -= 1;
2167 /* Delete three bytes of data. */
2168 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2169 irel->r_offset + 1, 3))
2170 goto error_return;
2172 /* That will change things, so, we should relax again.
2173 Note that this is not required, and it may be slow. */
2174 *again = true;
2175 break;
2177 /* mov (abs32),an -> mov (abs16),an
2178 mov (d32,sp),an -> mov (d16,sp),an
2179 mov (d32,sp),dn -> mov (d16,sp),dn
2180 movbu (d32,sp),dn -> movbu (d16,sp),dn
2181 movhu (d32,sp),dn -> movhu (d16,sp),dn
2182 add imm32,dn -> add imm16,dn
2183 cmp imm32,dn -> cmp imm16,dn
2184 add imm32,an -> add imm16,an
2185 cmp imm32,an -> cmp imm16,an
2186 and imm32,dn -> and imm16,dn
2187 or imm32,dn -> or imm16,dn
2188 xor imm32,dn -> xor imm16,dn
2189 btst imm32,dn -> btst imm16,dn */
2191 case 0xa0:
2192 case 0xb0:
2193 case 0xb1:
2194 case 0xb2:
2195 case 0xb3:
2196 case 0xc0:
2197 case 0xc8:
2199 case 0xd0:
2200 case 0xd8:
2201 case 0xe0:
2202 case 0xe1:
2203 case 0xe2:
2204 case 0xe3:
2205 /* cmp imm16, an zero-extends the immediate. */
2206 if (code == 0xdc
2207 && (long)value < 0)
2208 continue;
2210 /* So do sp-based offsets. */
2211 if (code >= 0xb0 && code <= 0xb3
2212 && (long)value < 0)
2213 continue;
2215 /* Note that we've changed the relocation contents, etc. */
2216 elf_section_data (sec)->relocs = internal_relocs;
2217 elf_section_data (sec)->this_hdr.contents = contents;
2218 symtab_hdr->contents = (unsigned char *) isymbuf;
2220 /* Fix the opcode. */
2221 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2222 bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
2224 /* Fix the relocation's type. */
2225 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2226 R_MN10300_16);
2228 /* Delete two bytes of data. */
2229 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2230 irel->r_offset + 2, 2))
2231 goto error_return;
2233 /* That will change things, so, we should relax again.
2234 Note that this is not required, and it may be slow. */
2235 *again = true;
2236 break;
2238 else if (code == 0xfe)
2240 /* add imm32,sp -> add imm16,sp */
2242 /* Note that we've changed the relocation contents, etc. */
2243 elf_section_data (sec)->relocs = internal_relocs;
2244 elf_section_data (sec)->this_hdr.contents = contents;
2245 symtab_hdr->contents = (unsigned char *) isymbuf;
2247 /* Fix the opcode. */
2248 bfd_put_8 (abfd, 0xfa, contents + irel->r_offset - 2);
2249 bfd_put_8 (abfd, 0xfe, contents + irel->r_offset - 1);
2251 /* Fix the relocation's type. */
2252 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2253 R_MN10300_16);
2255 /* Delete two bytes of data. */
2256 if (!mn10300_elf_relax_delete_bytes (abfd, sec,
2257 irel->r_offset + 2, 2))
2258 goto error_return;
2260 /* That will change things, so, we should relax again.
2261 Note that this is not required, and it may be slow. */
2262 *again = true;
2263 break;
2269 if (isymbuf != NULL
2270 && symtab_hdr->contents != (unsigned char *) isymbuf)
2272 if (! link_info->keep_memory)
2273 free (isymbuf);
2274 else
2276 /* Cache the symbols for elf_link_input_bfd. */
2277 symtab_hdr->contents = (unsigned char *) isymbuf;
2281 if (contents != NULL
2282 && elf_section_data (sec)->this_hdr.contents != contents)
2284 if (! link_info->keep_memory)
2285 free (contents);
2286 else
2288 /* Cache the section contents for elf_link_input_bfd. */
2289 elf_section_data (sec)->this_hdr.contents = contents;
2293 if (internal_relocs != NULL
2294 && elf_section_data (sec)->relocs != internal_relocs)
2295 free (internal_relocs);
2297 return true;
2299 error_return:
2300 if (isymbuf != NULL
2301 && symtab_hdr->contents != (unsigned char *) isymbuf)
2302 free (isymbuf);
2303 if (contents != NULL
2304 && elf_section_data (section)->this_hdr.contents != contents)
2305 free (contents);
2306 if (internal_relocs != NULL
2307 && elf_section_data (section)->relocs != internal_relocs)
2308 free (internal_relocs);
2310 return false;
2313 /* Compute the stack size and movm arguments for the function
2314 referred to by HASH at address ADDR in section with
2315 contents CONTENTS, store the information in the hash table. */
2316 static void
2317 compute_function_info (abfd, hash, addr, contents)
2318 bfd *abfd;
2319 struct elf32_mn10300_link_hash_entry *hash;
2320 bfd_vma addr;
2321 unsigned char *contents;
2323 unsigned char byte1, byte2;
2324 /* We only care about a very small subset of the possible prologue
2325 sequences here. Basically we look for:
2327 movm [d2,d3,a2,a3],sp (optional)
2328 add <size>,sp (optional, and only for sizes which fit in an unsigned
2329 8 bit number)
2331 If we find anything else, we quit. */
2333 /* Look for movm [regs],sp */
2334 byte1 = bfd_get_8 (abfd, contents + addr);
2335 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2337 if (byte1 == 0xcf)
2339 hash->movm_args = byte2;
2340 addr += 2;
2341 byte1 = bfd_get_8 (abfd, contents + addr);
2342 byte2 = bfd_get_8 (abfd, contents + addr + 1);
2345 /* Now figure out how much stack space will be allocated by the movm
2346 instruction. We need this kept separate from the funtion's normal
2347 stack space. */
2348 if (hash->movm_args)
2350 /* Space for d2. */
2351 if (hash->movm_args & 0x80)
2352 hash->movm_stack_size += 4;
2354 /* Space for d3. */
2355 if (hash->movm_args & 0x40)
2356 hash->movm_stack_size += 4;
2358 /* Space for a2. */
2359 if (hash->movm_args & 0x20)
2360 hash->movm_stack_size += 4;
2362 /* Space for a3. */
2363 if (hash->movm_args & 0x10)
2364 hash->movm_stack_size += 4;
2366 /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */
2367 if (hash->movm_args & 0x08)
2368 hash->movm_stack_size += 8 * 4;
2370 if (bfd_get_mach (abfd) == bfd_mach_am33)
2372 /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */
2373 if (hash->movm_args & 0x1)
2374 hash->movm_stack_size += 6 * 4;
2376 /* exreg1 space. e4, e5, e6, e7 */
2377 if (hash->movm_args & 0x2)
2378 hash->movm_stack_size += 4 * 4;
2380 /* exreg0 space. e2, e3 */
2381 if (hash->movm_args & 0x4)
2382 hash->movm_stack_size += 2 * 4;
2386 /* Now look for the two stack adjustment variants. */
2387 if (byte1 == 0xf8 && byte2 == 0xfe)
2389 int temp = bfd_get_8 (abfd, contents + addr + 2);
2390 temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
2392 hash->stack_size = -temp;
2394 else if (byte1 == 0xfa && byte2 == 0xfe)
2396 int temp = bfd_get_16 (abfd, contents + addr + 2);
2397 temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
2398 temp = -temp;
2400 if (temp < 255)
2401 hash->stack_size = temp;
2404 /* If the total stack to be allocated by the call instruction is more
2405 than 255 bytes, then we can't remove the stack adjustment by using
2406 "call" (we might still be able to remove the "movm" instruction. */
2407 if (hash->stack_size + hash->movm_stack_size > 255)
2408 hash->stack_size = 0;
2410 return;
2413 /* Delete some bytes from a section while relaxing. */
2415 static boolean
2416 mn10300_elf_relax_delete_bytes (abfd, sec, addr, count)
2417 bfd *abfd;
2418 asection *sec;
2419 bfd_vma addr;
2420 int count;
2422 Elf_Internal_Shdr *symtab_hdr;
2423 unsigned int sec_shndx;
2424 bfd_byte *contents;
2425 Elf_Internal_Rela *irel, *irelend;
2426 Elf_Internal_Rela *irelalign;
2427 bfd_vma toaddr;
2428 Elf_Internal_Sym *isym, *isymend;
2429 struct elf_link_hash_entry **sym_hashes;
2430 struct elf_link_hash_entry **end_hashes;
2431 unsigned int symcount;
2433 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2435 contents = elf_section_data (sec)->this_hdr.contents;
2437 /* The deletion must stop at the next ALIGN reloc for an aligment
2438 power larger than the number of bytes we are deleting. */
2440 irelalign = NULL;
2441 toaddr = sec->_cooked_size;
2443 irel = elf_section_data (sec)->relocs;
2444 irelend = irel + sec->reloc_count;
2446 /* Actually delete the bytes. */
2447 memmove (contents + addr, contents + addr + count,
2448 (size_t) (toaddr - addr - count));
2449 sec->_cooked_size -= count;
2451 /* Adjust all the relocs. */
2452 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
2454 /* Get the new reloc address. */
2455 if ((irel->r_offset > addr
2456 && irel->r_offset < toaddr))
2457 irel->r_offset -= count;
2460 /* Adjust the local symbols defined in this section. */
2461 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2462 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
2463 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2465 if (isym->st_shndx == sec_shndx
2466 && isym->st_value > addr
2467 && isym->st_value < toaddr)
2468 isym->st_value -= count;
2471 /* Now adjust the global symbols defined in this section. */
2472 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2473 - symtab_hdr->sh_info);
2474 sym_hashes = elf_sym_hashes (abfd);
2475 end_hashes = sym_hashes + symcount;
2476 for (; sym_hashes < end_hashes; sym_hashes++)
2478 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2479 if ((sym_hash->root.type == bfd_link_hash_defined
2480 || sym_hash->root.type == bfd_link_hash_defweak)
2481 && sym_hash->root.u.def.section == sec
2482 && sym_hash->root.u.def.value > addr
2483 && sym_hash->root.u.def.value < toaddr)
2485 sym_hash->root.u.def.value -= count;
2489 return true;
2492 /* Return true if a symbol exists at the given address, else return
2493 false. */
2494 static boolean
2495 mn10300_elf_symbol_address_p (abfd, sec, isym, addr)
2496 bfd *abfd;
2497 asection *sec;
2498 Elf_Internal_Sym *isym;
2499 bfd_vma addr;
2501 Elf_Internal_Shdr *symtab_hdr;
2502 unsigned int sec_shndx;
2503 Elf_Internal_Sym *isymend;
2504 struct elf_link_hash_entry **sym_hashes;
2505 struct elf_link_hash_entry **end_hashes;
2506 unsigned int symcount;
2508 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2510 /* Examine all the symbols. */
2511 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2512 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2514 if (isym->st_shndx == sec_shndx
2515 && isym->st_value == addr)
2516 return true;
2519 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
2520 - symtab_hdr->sh_info);
2521 sym_hashes = elf_sym_hashes (abfd);
2522 end_hashes = sym_hashes + symcount;
2523 for (; sym_hashes < end_hashes; sym_hashes++)
2525 struct elf_link_hash_entry *sym_hash = *sym_hashes;
2526 if ((sym_hash->root.type == bfd_link_hash_defined
2527 || sym_hash->root.type == bfd_link_hash_defweak)
2528 && sym_hash->root.u.def.section == sec
2529 && sym_hash->root.u.def.value == addr)
2530 return true;
2533 return false;
2536 /* This is a version of bfd_generic_get_relocated_section_contents
2537 which uses mn10300_elf_relocate_section. */
2539 static bfd_byte *
2540 mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order,
2541 data, relocateable, symbols)
2542 bfd *output_bfd;
2543 struct bfd_link_info *link_info;
2544 struct bfd_link_order *link_order;
2545 bfd_byte *data;
2546 boolean relocateable;
2547 asymbol **symbols;
2549 Elf_Internal_Shdr *symtab_hdr;
2550 asection *input_section = link_order->u.indirect.section;
2551 bfd *input_bfd = input_section->owner;
2552 asection **sections = NULL;
2553 Elf_Internal_Rela *internal_relocs = NULL;
2554 Elf_Internal_Sym *isymbuf = NULL;
2556 /* We only need to handle the case of relaxing, or of having a
2557 particular set of section contents, specially. */
2558 if (relocateable
2559 || elf_section_data (input_section)->this_hdr.contents == NULL)
2560 return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
2561 link_order, data,
2562 relocateable,
2563 symbols);
2565 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2567 memcpy (data, elf_section_data (input_section)->this_hdr.contents,
2568 (size_t) input_section->_raw_size);
2570 if ((input_section->flags & SEC_RELOC) != 0
2571 && input_section->reloc_count > 0)
2573 asection **secpp;
2574 Elf_Internal_Sym *isym, *isymend;
2575 bfd_size_type amt;
2577 internal_relocs = (_bfd_elf32_link_read_relocs
2578 (input_bfd, input_section, (PTR) NULL,
2579 (Elf_Internal_Rela *) NULL, false));
2580 if (internal_relocs == NULL)
2581 goto error_return;
2583 if (symtab_hdr->sh_info != 0)
2585 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
2586 if (isymbuf == NULL)
2587 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
2588 symtab_hdr->sh_info, 0,
2589 NULL, NULL, NULL);
2590 if (isymbuf == NULL)
2591 goto error_return;
2594 amt = symtab_hdr->sh_info;
2595 amt *= sizeof (asection *);
2596 sections = (asection **) bfd_malloc (amt);
2597 if (sections == NULL && amt != 0)
2598 goto error_return;
2600 isymend = isymbuf + symtab_hdr->sh_info;
2601 for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
2603 asection *isec;
2605 if (isym->st_shndx == SHN_UNDEF)
2606 isec = bfd_und_section_ptr;
2607 else if (isym->st_shndx == SHN_ABS)
2608 isec = bfd_abs_section_ptr;
2609 else if (isym->st_shndx == SHN_COMMON)
2610 isec = bfd_com_section_ptr;
2611 else
2612 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
2614 *secpp = isec;
2617 if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd,
2618 input_section, data, internal_relocs,
2619 isymbuf, sections))
2620 goto error_return;
2622 if (sections != NULL)
2623 free (sections);
2624 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
2625 free (isymbuf);
2626 if (internal_relocs != elf_section_data (input_section)->relocs)
2627 free (internal_relocs);
2630 return data;
2632 error_return:
2633 if (sections != NULL)
2634 free (sections);
2635 if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
2636 free (isymbuf);
2637 if (internal_relocs != NULL
2638 && internal_relocs != elf_section_data (input_section)->relocs)
2639 free (internal_relocs);
2640 return NULL;
2643 /* Assorted hash table functions. */
2645 /* Initialize an entry in the link hash table. */
2647 /* Create an entry in an MN10300 ELF linker hash table. */
2649 static struct bfd_hash_entry *
2650 elf32_mn10300_link_hash_newfunc (entry, table, string)
2651 struct bfd_hash_entry *entry;
2652 struct bfd_hash_table *table;
2653 const char *string;
2655 struct elf32_mn10300_link_hash_entry *ret =
2656 (struct elf32_mn10300_link_hash_entry *) entry;
2658 /* Allocate the structure if it has not already been allocated by a
2659 subclass. */
2660 if (ret == (struct elf32_mn10300_link_hash_entry *) NULL)
2661 ret = ((struct elf32_mn10300_link_hash_entry *)
2662 bfd_hash_allocate (table,
2663 sizeof (struct elf32_mn10300_link_hash_entry)));
2664 if (ret == (struct elf32_mn10300_link_hash_entry *) NULL)
2665 return (struct bfd_hash_entry *) ret;
2667 /* Call the allocation method of the superclass. */
2668 ret = ((struct elf32_mn10300_link_hash_entry *)
2669 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
2670 table, string));
2671 if (ret != (struct elf32_mn10300_link_hash_entry *) NULL)
2673 ret->direct_calls = 0;
2674 ret->stack_size = 0;
2675 ret->movm_stack_size = 0;
2676 ret->flags = 0;
2677 ret->movm_args = 0;
2680 return (struct bfd_hash_entry *) ret;
2683 /* Create an mn10300 ELF linker hash table. */
2685 static struct bfd_link_hash_table *
2686 elf32_mn10300_link_hash_table_create (abfd)
2687 bfd *abfd;
2689 struct elf32_mn10300_link_hash_table *ret;
2690 bfd_size_type amt = sizeof (struct elf32_mn10300_link_hash_table);
2692 ret = (struct elf32_mn10300_link_hash_table *) bfd_malloc (amt);
2693 if (ret == (struct elf32_mn10300_link_hash_table *) NULL)
2694 return NULL;
2696 if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
2697 elf32_mn10300_link_hash_newfunc))
2699 free (ret);
2700 return NULL;
2703 ret->flags = 0;
2704 amt = sizeof (struct elf_link_hash_table);
2705 ret->static_hash_table
2706 = (struct elf32_mn10300_link_hash_table *) bfd_malloc (amt);
2707 if (ret->static_hash_table == NULL)
2709 free (ret);
2710 return NULL;
2713 if (! _bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
2714 elf32_mn10300_link_hash_newfunc))
2716 free (ret->static_hash_table);
2717 free (ret);
2718 return NULL;
2720 return &ret->root.root;
2723 /* Free an mn10300 ELF linker hash table. */
2725 static void
2726 elf32_mn10300_link_hash_table_free (hash)
2727 struct bfd_link_hash_table *hash;
2729 struct elf32_mn10300_link_hash_table *ret
2730 = (struct elf32_mn10300_link_hash_table *) hash;
2732 _bfd_generic_link_hash_table_free
2733 ((struct bfd_link_hash_table *) ret->static_hash_table);
2734 _bfd_generic_link_hash_table_free
2735 ((struct bfd_link_hash_table *) ret);
2738 static unsigned long
2739 elf_mn10300_mach (flags)
2740 flagword flags;
2742 switch (flags & EF_MN10300_MACH)
2744 case E_MN10300_MACH_MN10300:
2745 default:
2746 return bfd_mach_mn10300;
2748 case E_MN10300_MACH_AM33:
2749 return bfd_mach_am33;
2753 /* The final processing done just before writing out a MN10300 ELF object
2754 file. This gets the MN10300 architecture right based on the machine
2755 number. */
2757 void
2758 _bfd_mn10300_elf_final_write_processing (abfd, linker)
2759 bfd *abfd;
2760 boolean linker ATTRIBUTE_UNUSED;
2762 unsigned long val;
2764 switch (bfd_get_mach (abfd))
2766 default:
2767 case bfd_mach_mn10300:
2768 val = E_MN10300_MACH_MN10300;
2769 break;
2771 case bfd_mach_am33:
2772 val = E_MN10300_MACH_AM33;
2773 break;
2776 elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
2777 elf_elfheader (abfd)->e_flags |= val;
2780 boolean
2781 _bfd_mn10300_elf_object_p (abfd)
2782 bfd *abfd;
2784 bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
2785 elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
2786 return true;
2789 /* Merge backend specific data from an object file to the output
2790 object file when linking. */
2792 boolean
2793 _bfd_mn10300_elf_merge_private_bfd_data (ibfd, obfd)
2794 bfd *ibfd;
2795 bfd *obfd;
2797 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2798 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2799 return true;
2801 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
2802 && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
2804 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
2805 bfd_get_mach (ibfd)))
2806 return false;
2809 return true;
2812 #define TARGET_LITTLE_SYM bfd_elf32_mn10300_vec
2813 #define TARGET_LITTLE_NAME "elf32-mn10300"
2814 #define ELF_ARCH bfd_arch_mn10300
2815 #define ELF_MACHINE_CODE EM_MN10300
2816 #define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300
2817 #define ELF_MAXPAGESIZE 0x1000
2819 #define elf_info_to_howto mn10300_info_to_howto
2820 #define elf_info_to_howto_rel 0
2821 #define elf_backend_can_gc_sections 1
2822 #define elf_backend_rela_normal 1
2823 #define elf_backend_check_relocs mn10300_elf_check_relocs
2824 #define elf_backend_gc_mark_hook mn10300_elf_gc_mark_hook
2825 #define elf_backend_relocate_section mn10300_elf_relocate_section
2826 #define bfd_elf32_bfd_relax_section mn10300_elf_relax_section
2827 #define bfd_elf32_bfd_get_relocated_section_contents \
2828 mn10300_elf_get_relocated_section_contents
2829 #define bfd_elf32_bfd_link_hash_table_create \
2830 elf32_mn10300_link_hash_table_create
2831 #define bfd_elf32_bfd_link_hash_table_free \
2832 elf32_mn10300_link_hash_table_free
2834 #define elf_symbol_leading_char '_'
2836 /* So we can set bits in e_flags. */
2837 #define elf_backend_final_write_processing \
2838 _bfd_mn10300_elf_final_write_processing
2839 #define elf_backend_object_p _bfd_mn10300_elf_object_p
2841 #define bfd_elf32_bfd_merge_private_bfd_data \
2842 _bfd_mn10300_elf_merge_private_bfd_data
2844 #include "elf32-target.h"