OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [tags/] [VER_5_3/] [gdb-5.3/] [bfd/] [elf-m10300.c] - Blame information for rev 1782

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Matsushita 10300 specific support for 32-bit ELF
2
   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
3
   Free Software Foundation, Inc.
4
 
5
This file is part of BFD, the Binary File Descriptor library.
6
 
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.
11
 
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.
16
 
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.  */
20
 
21
#include "bfd.h"
22
#include "sysdep.h"
23
#include "libbfd.h"
24
#include "elf-bfd.h"
25
#include "elf/mn10300.h"
26
 
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));
40
 
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 *));
44
 
45
struct elf32_mn10300_link_hash_entry {
46
  /* The basic elf link hash table entry.  */
47
  struct elf_link_hash_entry root;
48
 
49
  /* For function symbols, the number of times this function is
50
     called directly (ie by name).  */
51
  unsigned int direct_calls;
52
 
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.
56
 
57
     This does not include stack allocated by movm!  */
58
  unsigned char stack_size;
59
 
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;
64
 
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;
69
 
70
/* When set, convert all "call" instructions to this target into "calls"
71
   instructions.  */
72
#define MN10300_CONVERT_CALL_TO_CALLS 0x1
73
 
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;
78
};
79
 
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;
86
 
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;
91
 
92
  /* Random linker state flags.  */
93
#define MN10300_HASH_ENTRIES_INITIALIZED 0x1
94
  char flags;
95
};
96
 
97
/* For MN10300 linker hash table.  */
98
 
99
/* Get the MN10300 ELF linker hash table from a link_info structure.  */
100
 
101
#define elf32_mn10300_hash_table(p) \
102
  ((struct elf32_mn10300_link_hash_table *) ((p)->hash))
103
 
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)))
109
 
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 *));
116
 
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 *));
136
 
137
static reloc_howto_type elf_mn10300_howto_table[] = {
138
  /* Dummy relocation.  Does nothing.  */
139
  HOWTO (R_MN10300_NONE,
140
         0,
141
         2,
142
         16,
143
         false,
144
         0,
145
         complain_overflow_bitfield,
146
         bfd_elf_generic_reloc,
147
         "R_MN10300_NONE",
148
         false,
149
         0,
150
         0,
151
         false),
152
  /* Standard 32 bit reloc.  */
153
  HOWTO (R_MN10300_32,
154
         0,
155
         2,
156
         32,
157
         false,
158
         0,
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,
168
         0,
169
         1,
170
         16,
171
         false,
172
         0,
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,
182
         0,
183
         0,
184
         8,
185
         false,
186
         0,
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,
196
         0,
197
         2,
198
         32,
199
         true,
200
         0,
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,
210
         0,
211
         1,
212
         16,
213
         true,
214
         0,
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,
224
         0,
225
         0,
226
         8,
227
         true,
228
         0,
229
         complain_overflow_bitfield,
230
         bfd_elf_generic_reloc,
231
         "R_MN10300_PCREL8",
232
         false,
233
         0xff,
234
         0xff,
235
         true),
236
 
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 */
251
 
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 */
266
 
267
  /* Standard 24 bit reloc.  */
268
  HOWTO (R_MN10300_24,
269
         0,
270
         2,
271
         24,
272
         false,
273
         0,
274
         complain_overflow_bitfield,
275
         bfd_elf_generic_reloc,
276
         "R_MN10300_24",
277
         false,
278
         0xffffff,
279
         0xffffff,
280
         false),
281
};
282
 
283
struct mn10300_reloc_map {
284
  bfd_reloc_code_real_type bfd_reloc_val;
285
  unsigned char elf_reloc_val;
286
};
287
 
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 },
299
};
300
 
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;
305
{
306
  unsigned int i;
307
 
308
  for (i = 0;
309
       i < sizeof (mn10300_reloc_map) / sizeof (struct mn10300_reloc_map);
310
       i++)
311
    {
312
      if (mn10300_reloc_map[i].bfd_reloc_val == code)
313
        return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val];
314
    }
315
 
316
  return NULL;
317
}
318
 
319
/* Set the howto pointer for an MN10300 ELF reloc.  */
320
 
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;
326
{
327
  unsigned int r_type;
328
 
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];
332
}
333
 
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.  */
337
 
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;
344
{
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;
349
 
350
  if (info->relocateable)
351
    return true;
352
 
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;
358
 
359
  rel_end = relocs + sec->reloc_count;
360
  for (rel = relocs; rel < rel_end; rel++)
361
    {
362
      struct elf_link_hash_entry *h;
363
      unsigned long r_symndx;
364
 
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];
370
 
371
      switch (ELF32_R_TYPE (rel->r_info))
372
        {
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;
379
 
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;
386
        }
387
    }
388
 
389
  return true;
390
}
391
 
392
/* Return the section that should be marked against GC for a given
393
   relocation.  */
394
 
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;
402
{
403
  if (h != NULL)
404
    {
405
      switch (ELF32_R_TYPE (rel->r_info))
406
        {
407
        case R_MN10300_GNU_VTINHERIT:
408
        case R_MN10300_GNU_VTENTRY:
409
          break;
410
 
411
        default:
412
          switch (h->root.type)
413
            {
414
            case bfd_link_hash_defined:
415
            case bfd_link_hash_defweak:
416
              return h->root.u.def.section;
417
 
418
            case bfd_link_hash_common:
419
              return h->root.u.c.p->section;
420
 
421
            default:
422
              break;
423
            }
424
        }
425
    }
426
  else
427
    return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
428
 
429
  return NULL;
430
}
431
 
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;
448
{
449
  unsigned long r_type = howto->type;
450
  bfd_byte *hit_data = contents + offset;
451
 
452
  switch (r_type)
453
    {
454
    case R_MN10300_NONE:
455
      return bfd_reloc_ok;
456
 
457
    case R_MN10300_32:
458
      value += addend;
459
      bfd_put_32 (input_bfd, value, hit_data);
460
      return bfd_reloc_ok;
461
 
462
    case R_MN10300_24:
463
      value += addend;
464
 
465
      if ((long) value > 0x7fffff || (long) value < -0x800000)
466
        return bfd_reloc_overflow;
467
 
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;
472
 
473
    case R_MN10300_16:
474
      value += addend;
475
 
476
      if ((long) value > 0x7fff || (long) value < -0x8000)
477
        return bfd_reloc_overflow;
478
 
479
      bfd_put_16 (input_bfd, value, hit_data);
480
      return bfd_reloc_ok;
481
 
482
    case R_MN10300_8:
483
      value += addend;
484
 
485
      if ((long) value > 0x7f || (long) value < -0x80)
486
        return bfd_reloc_overflow;
487
 
488
      bfd_put_8 (input_bfd, value, hit_data);
489
      return bfd_reloc_ok;
490
 
491
    case R_MN10300_PCREL8:
492
      value -= (input_section->output_section->vma
493
                + input_section->output_offset);
494
      value -= offset;
495
      value += addend;
496
 
497
      if ((long) value > 0xff || (long) value < -0x100)
498
        return bfd_reloc_overflow;
499
 
500
      bfd_put_8 (input_bfd, value, hit_data);
501
      return bfd_reloc_ok;
502
 
503
    case R_MN10300_PCREL16:
504
      value -= (input_section->output_section->vma
505
                + input_section->output_offset);
506
      value -= offset;
507
      value += addend;
508
 
509
      if ((long) value > 0xffff || (long) value < -0x10000)
510
        return bfd_reloc_overflow;
511
 
512
      bfd_put_16 (input_bfd, value, hit_data);
513
      return bfd_reloc_ok;
514
 
515
    case R_MN10300_PCREL32:
516
      value -= (input_section->output_section->vma
517
                + input_section->output_offset);
518
      value -= offset;
519
      value += addend;
520
 
521
      bfd_put_32 (input_bfd, value, hit_data);
522
      return bfd_reloc_ok;
523
 
524
    case R_MN10300_GNU_VTINHERIT:
525
    case R_MN10300_GNU_VTENTRY:
526
      return bfd_reloc_ok;
527
 
528
    default:
529
      return bfd_reloc_notsupported;
530
    }
531
}
532
 
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;
545
{
546
  Elf_Internal_Shdr *symtab_hdr;
547
  struct elf32_mn10300_link_hash_entry **sym_hashes;
548
  Elf_Internal_Rela *rel, *relend;
549
 
550
  if (info->relocateable)
551
    return true;
552
 
553
  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
554
  sym_hashes = (struct elf32_mn10300_link_hash_entry **)
555
                 (elf_sym_hashes (input_bfd));
556
 
557
  rel = relocs;
558
  relend = relocs + input_section->reloc_count;
559
  for (; rel < relend; rel++)
560
    {
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;
569
 
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;
573
 
574
      /* Just skip the vtable gc relocs.  */
575
      if (r_type == R_MN10300_GNU_VTINHERIT
576
          || r_type == R_MN10300_GNU_VTENTRY)
577
        continue;
578
 
579
      h = NULL;
580
      sym = NULL;
581
      sec = NULL;
582
      if (r_symndx < symtab_hdr->sh_info)
583
        {
584
          sym = local_syms + r_symndx;
585
          sec = local_sections[r_symndx];
586
          relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
587
        }
588
      else
589
        {
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)
596
            {
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);
601
            }
602
          else if (h->root.root.type == bfd_link_hash_undefweak)
603
            relocation = 0;
604
          else
605
            {
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;
611
            }
612
        }
613
 
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);
619
 
620
      if (r != bfd_reloc_ok)
621
        {
622
          const char *name;
623
          const char *msg = (const char *) 0;
624
 
625
          if (h != NULL)
626
            name = h->root.root.root.string;
627
          else
628
            {
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);
633
            }
634
 
635
          switch (r)
636
            {
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;
643
 
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;
650
 
651
            case bfd_reloc_outofrange:
652
              msg = _("internal error: out of range error");
653
              goto common_error;
654
 
655
            case bfd_reloc_notsupported:
656
              msg = _("internal error: unsupported relocation error");
657
              goto common_error;
658
 
659
            case bfd_reloc_dangerous:
660
              msg = _("internal error: dangerous error");
661
              goto common_error;
662
 
663
            default:
664
              msg = _("internal error: unknown error");
665
              /* fall through */
666
 
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;
673
            }
674
        }
675
    }
676
 
677
  return true;
678
}
679
 
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;
685
{
686
  struct elf32_mn10300_link_hash_entry *entry;
687
  unsigned int byte_count = 0;
688
 
689
  entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
690
 
691
  if (entry->root.root.type == bfd_link_hash_warning)
692
    entry = (struct elf32_mn10300_link_hash_entry *) entry->root.root.u.i.link;
693
 
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;
698
 
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))
705
    {
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;
710
    }
711
 
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.  */
715
 
716
  /* A movm instruction is two bytes.  */
717
  if (entry->movm_args)
718
    byte_count += 2;
719
 
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;
725
 
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;
730
 
731
  /* This routine never fails.  */
732
  return true;
733
}
734
 
735
/* This function handles relaxing for the mn10300.
736
 
737
   There's quite a few relaxing opportunites available on the mn10300:
738
 
739
        * calls:32 -> calls:16                                     2 bytes
740
        * call:32  -> call:16                                      2 bytes
741
 
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.
747
 
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.
754
 
755
        * jmp:32 -> jmp:16                                         2 bytes
756
        * jmp:16 -> bra:8                                          1 byte
757
 
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
762
 
763
        * mov abs32 -> mov abs16                                   1 or 2 bytes
764
 
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
767
 
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
770
 
771
        We don't handle imm16->imm8 or d16->d8 as they're very rare
772
        and somewhat more difficult to support.  */
773
 
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;
780
{
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;
788
 
789
  /* Assume nothing changes.  */
790
  *again = false;
791
 
792
  /* We need a pointer to the mn10300 specific hash table.  */
793
  hash_table = elf32_mn10300_hash_table (link_info);
794
 
795
  /* Initialize fields in each hash table entry the first time through.  */
796
  if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
797
    {
798
      bfd *input_bfd;
799
 
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)
804
        {
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)
808
            {
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;
816
            }
817
 
818
          /* Iterate over each section in this bfd.  */
819
          for (section = input_bfd->sections;
820
               section != NULL;
821
               section = section->next)
822
            {
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;
828
 
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;
834
 
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)
839
                {
840
                  /* Go get them off disk.  */
841
                  contents = (bfd_byte *) bfd_malloc (section->_raw_size);
842
                  if (contents == NULL)
843
                    goto error_return;
844
 
845
                  if (!bfd_get_section_contents (input_bfd, section,
846
                                                 contents, (file_ptr) 0,
847
                                                 section->_raw_size))
848
                    goto error_return;
849
                }
850
              else
851
                contents = NULL;
852
 
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)
856
                {
857
 
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;
865
 
866
                  /* Now examine each relocation.  */
867
                  irel = internal_relocs;
868
                  irelend = irel + section->reloc_count;
869
                  for (; irel < irelend; irel++)
870
                    {
871
                      long r_type;
872
                      unsigned long r_index;
873
                      unsigned char code;
874
 
875
                      r_type = ELF32_R_TYPE (irel->r_info);
876
                      r_index = ELF32_R_SYM (irel->r_info);
877
 
878
                      if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
879
                        goto error_return;
880
 
881
                      /* We need the name and hash table entry of the target
882
                         symbol!  */
883
                      hash = NULL;
884
                      sym = NULL;
885
                      sym_sec = NULL;
886
 
887
                      if (r_index < symtab_hdr->sh_info)
888
                        {
889
                          /* A local symbol.  */
890
                          Elf_Internal_Sym *isym;
891
                          struct elf_link_hash_table *elftab;
892
                          bfd_size_type amt;
893
 
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);
905
 
906
                          sym_name
907
                            = bfd_elf_string_from_elf_section (input_bfd,
908
                                                               (symtab_hdr
909
                                                                ->sh_link),
910
                                                               isym->st_name);
911
 
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;
916
 
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;
923
 
924
                          sprintf (new_name, "%s_%08x",
925
                                   sym_name, (int) sym_sec);
926
                          sym_name = new_name;
927
 
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);
933
                        }
934
                      else
935
                        {
936
                          r_index -= symtab_hdr->sh_info;
937
                          hash = (struct elf32_mn10300_link_hash_entry *)
938
                                   elf_sym_hashes (input_bfd)[r_index];
939
                        }
940
 
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;
948
 
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;
957
                    }
958
                }
959
 
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)
964
                {
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;
970
 
971
                  sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
972
                                                                 section);
973
 
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++)
978
                    {
979
                      if (isym->st_shndx == sec_shndx
980
                          && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
981
                        {
982
                          struct elf_link_hash_table *elftab;
983
                          bfd_size_type amt;
984
 
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);
995
 
996
                          sym_name = (bfd_elf_string_from_elf_section
997
                                      (input_bfd, symtab_hdr->sh_link,
998
                                       isym->st_name));
999
 
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;
1006
 
1007
                          sprintf (new_name, "%s_%08x",
1008
                                   sym_name, (int) sym_sec);
1009
                          sym_name = new_name;
1010
 
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);
1018
                        }
1019
                    }
1020
 
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++)
1026
                    {
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);
1035
                    }
1036
                }
1037
 
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;
1043
 
1044
              /* Cache or free any memory we allocated for the contents.  */
1045
              if (contents != NULL
1046
                  && elf_section_data (section)->this_hdr.contents != contents)
1047
                {
1048
                  if (! link_info->keep_memory)
1049
                    free (contents);
1050
                  else
1051
                    {
1052
                      /* Cache the section contents for elf_link_input_bfd.  */
1053
                      elf_section_data (section)->this_hdr.contents = contents;
1054
                    }
1055
                }
1056
              contents = NULL;
1057
            }
1058
 
1059
          /* Cache or free any memory we allocated for the symbols.  */
1060
          if (isymbuf != NULL
1061
              && symtab_hdr->contents != (unsigned char *) isymbuf)
1062
            {
1063
              if (! link_info->keep_memory)
1064
                free (isymbuf);
1065
              else
1066
                {
1067
                  /* Cache the symbols for elf_link_input_bfd.  */
1068
                  symtab_hdr->contents = (unsigned char *) isymbuf;
1069
                }
1070
            }
1071
          isymbuf = NULL;
1072
        }
1073
 
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);
1082
 
1083
      /* All entries in the hash table are fully initialized.  */
1084
      hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
1085
 
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)
1093
        {
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)
1097
            {
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;
1105
            }
1106
 
1107
          /* Walk over each section in this bfd.  */
1108
          for (section = input_bfd->sections;
1109
               section != NULL;
1110
               section = section->next)
1111
            {
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;
1117
 
1118
              /* Skip non-code sections and empty sections.  */
1119
              if ((section->flags & SEC_CODE) == 0 || section->_raw_size == 0)
1120
                continue;
1121
 
1122
              if (section->reloc_count != 0)
1123
                {
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;
1131
                }
1132
 
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
1137
                {
1138
                  /* Go get them off disk.  */
1139
                  contents = (bfd_byte *) bfd_malloc (section->_raw_size);
1140
                  if (contents == NULL)
1141
                    goto error_return;
1142
 
1143
                  if (!bfd_get_section_contents (input_bfd, section,
1144
                                                 contents, (file_ptr) 0,
1145
                                                 section->_raw_size))
1146
                    goto error_return;
1147
                }
1148
 
1149
              sec_shndx = _bfd_elf_section_from_bfd_section (input_bfd,
1150
                                                             section);
1151
 
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++)
1156
                {
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;
1163
 
1164
                  if (isym->st_shndx != sec_shndx)
1165
                    continue;
1166
 
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);
1176
 
1177
                  sym_name
1178
                    = bfd_elf_string_from_elf_section (input_bfd,
1179
                                                       symtab_hdr->sh_link,
1180
                                                       isym->st_name);
1181
 
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;
1190
 
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));
1195
 
1196
                  free (new_name);
1197
                  if (sym_hash == NULL)
1198
                    continue;
1199
 
1200
                  if (! (sym_hash->flags & MN10300_CONVERT_CALL_TO_CALLS)
1201
                      && ! (sym_hash->flags & MN10300_DELETED_PROLOGUE_BYTES))
1202
                    {
1203
                      int bytes = 0;
1204
 
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;
1209
 
1210
                      /* Count how many bytes we're going to delete.  */
1211
                      if (sym_hash->movm_args)
1212
                        bytes += 2;
1213
 
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;
1219
 
1220
                      /* Note that we've deleted prologue bytes for this
1221
                         function.  */
1222
                      sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1223
 
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;
1230
 
1231
                      /* Something changed.  Not strictly necessary, but
1232
                         may lead to more relaxing opportunities.  */
1233
                      *again = true;
1234
                    }
1235
                }
1236
 
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++)
1244
                {
1245
                  struct elf32_mn10300_link_hash_entry *sym_hash;
1246
 
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))
1253
                    {
1254
                      int bytes = 0;
1255
                      bfd_vma symval;
1256
 
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;
1261
 
1262
                      /* Count how many bytes we're going to delete.  */
1263
                      if (sym_hash->movm_args)
1264
                        bytes += 2;
1265
 
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;
1271
 
1272
                      /* Note that we've deleted prologue bytes for this
1273
                         function.  */
1274
                      sym_hash->flags |= MN10300_DELETED_PROLOGUE_BYTES;
1275
 
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;
1283
 
1284
                      /* Something changed.  Not strictly necessary, but
1285
                         may lead to more relaxing opportunities.  */
1286
                      *again = true;
1287
                    }
1288
                }
1289
 
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;
1295
 
1296
              /* Cache or free any memory we allocated for the contents.  */
1297
              if (contents != NULL
1298
                  && elf_section_data (section)->this_hdr.contents != contents)
1299
                {
1300
                  if (! link_info->keep_memory)
1301
                    free (contents);
1302
                  else
1303
                    {
1304
                      /* Cache the section contents for elf_link_input_bfd.  */
1305
                      elf_section_data (section)->this_hdr.contents = contents;
1306
                    }
1307
                }
1308
              contents = NULL;
1309
            }
1310
 
1311
          /* Cache or free any memory we allocated for the symbols.  */
1312
          if (isymbuf != NULL
1313
              && symtab_hdr->contents != (unsigned char *) isymbuf)
1314
            {
1315
              if (! link_info->keep_memory)
1316
                free (isymbuf);
1317
              else
1318
                {
1319
                  /* Cache the symbols for elf_link_input_bfd.  */
1320
                  symtab_hdr->contents = (unsigned char *) isymbuf;
1321
                }
1322
            }
1323
          isymbuf = NULL;
1324
        }
1325
    }
1326
 
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;
1333
 
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;
1342
 
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;
1347
 
1348
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1349
 
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;
1356
 
1357
  /* Walk through them looking for relaxing opportunities.  */
1358
  irelend = internal_relocs + sec->reloc_count;
1359
  for (irel = internal_relocs; irel < irelend; irel++)
1360
    {
1361
      bfd_vma symval;
1362
      struct elf32_mn10300_link_hash_entry *h = NULL;
1363
 
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;
1370
 
1371
      /* Get the section contents if we haven't done so already.  */
1372
      if (contents == NULL)
1373
        {
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
1378
            {
1379
              /* Go get them off disk.  */
1380
              contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
1381
              if (contents == NULL)
1382
                goto error_return;
1383
 
1384
              if (! bfd_get_section_contents (abfd, sec, contents,
1385
                                              (file_ptr) 0, sec->_raw_size))
1386
                goto error_return;
1387
            }
1388
        }
1389
 
1390
      /* Read this BFD's symbols if we haven't done so already.  */
1391
      if (isymbuf == NULL && symtab_hdr->sh_info != 0)
1392
        {
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;
1400
        }
1401
 
1402
      /* Get the value of the symbol referred to by the reloc.  */
1403
      if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
1404
        {
1405
          Elf_Internal_Sym *isym;
1406
          asection *sym_sec = NULL;
1407
          const char *sym_name;
1408
          char *new_name;
1409
 
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);
1420
 
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);
1427
 
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;
1435
 
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);
1440
        }
1441
      else
1442
        {
1443
          unsigned long indx;
1444
 
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)
1452
            {
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;
1457
            }
1458
 
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);
1462
        }
1463
 
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.  */
1471
 
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)
1476
        {
1477
          bfd_vma value = symval;
1478
 
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))
1482
            {
1483
              unsigned char code;
1484
 
1485
              /* Get the opcode.  */
1486
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1487
 
1488
              /* Make sure we're working with a "call" instruction!  */
1489
              if (code == 0xdd)
1490
                {
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;
1496
 
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);
1500
 
1501
                  /* Fix irel->r_offset and irel->r_addend.  */
1502
                  irel->r_offset += 1;
1503
                  irel->r_addend += 1;
1504
 
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;
1509
 
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;
1513
                }
1514
            }
1515
          else if (h)
1516
            {
1517
              /* We've got a "call" instruction which needs some data
1518
                 from target function filled in.  */
1519
              unsigned char code;
1520
 
1521
              /* Get the opcode.  */
1522
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1523
 
1524
              /* Insert data from the target function into the "call"
1525
                 instruction if needed.  */
1526
              if (code == 0xdd)
1527
                {
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);
1531
                }
1532
            }
1533
 
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;
1538
 
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)
1543
            {
1544
              unsigned char code;
1545
 
1546
              /* Get the opcode.  */
1547
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1548
 
1549
              if (code != 0xdc && code != 0xdd && code != 0xff)
1550
                continue;
1551
 
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;
1556
 
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);
1564
 
1565
              /* Fix the relocation's type.  */
1566
              irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1567
                                           R_MN10300_PCREL16);
1568
 
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;
1573
 
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;
1577
            }
1578
        }
1579
 
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)
1583
        {
1584
          bfd_vma value = symval;
1585
 
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))
1589
            {
1590
              unsigned char code;
1591
 
1592
              /* Get the opcode.  */
1593
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1594
 
1595
              /* Make sure we're working with a "call" instruction!  */
1596
              if (code == 0xcd)
1597
                {
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;
1603
 
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);
1607
 
1608
                  /* Fix irel->r_offset and irel->r_addend.  */
1609
                  irel->r_offset += 1;
1610
                  irel->r_addend += 1;
1611
 
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;
1616
 
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;
1620
                }
1621
            }
1622
          else if (h)
1623
            {
1624
              unsigned char code;
1625
 
1626
              /* Get the opcode.  */
1627
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1628
 
1629
              /* Insert data from the target function into the "call"
1630
                 instruction if needed.  */
1631
              if (code == 0xcd)
1632
                {
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);
1636
                }
1637
            }
1638
 
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;
1643
 
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)
1648
            {
1649
              unsigned char code;
1650
 
1651
              /* Get the opcode.  */
1652
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1653
 
1654
              if (code != 0xcc)
1655
                continue;
1656
 
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;
1661
 
1662
              /* Fix the opcode.  */
1663
              bfd_put_8 (abfd, 0xca, contents + irel->r_offset - 1);
1664
 
1665
              /* Fix the relocation's type.  */
1666
              irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1667
                                           R_MN10300_PCREL8);
1668
 
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;
1673
 
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;
1677
            }
1678
        }
1679
 
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.
1683
 
1684
            original:           new:
1685
            bCC lab1            bCC' lab2
1686
            bra lab2
1687
           lab1:               lab1:
1688
 
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)
1692
        {
1693
          Elf_Internal_Rela *nrel;
1694
          bfd_vma value = symval;
1695
          unsigned char code;
1696
 
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;
1701
 
1702
          /* Do nothing if this reloc is the last byte in the section.  */
1703
          if (irel->r_offset == sec->_cooked_size)
1704
            continue;
1705
 
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;
1712
 
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;
1720
 
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;
1726
 
1727
          /* Now make sure we are a conditional branch.  This may not
1728
             be necessary, but why take the chance.
1729
 
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;
1741
 
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;
1747
 
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;
1752
 
1753
          /* Reverse the condition of the first branch.  */
1754
          switch (code)
1755
            {
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;
1798
            }
1799
          bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
1800
 
1801
          /* Set the reloc type and symbol for the first branch
1802
             from the second branch.  */
1803
          irel->r_info = nrel->r_info;
1804
 
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);
1808
 
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;
1813
 
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;
1817
        }
1818
 
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)
1822
        {
1823
          bfd_vma value = symval;
1824
          value += irel->r_addend;
1825
 
1826
          /* See if the value will fit in 8 bits.  */
1827
          if ((long) value < 0x7f && (long) value > -0x80)
1828
            {
1829
              unsigned char code;
1830
 
1831
              /* AM33 insns which have 24 operands are 6 bytes long and
1832
                 will have 0xfd as the first byte.  */
1833
 
1834
              /* Get the first opcode.  */
1835
              code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1836
 
1837
              if (code == 0xfd)
1838
                {
1839
                  /* Get the second opcode.  */
1840
                  code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1841
 
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))
1849
                    {
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)
1855
                        {
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;
1861
 
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);
1865
 
1866
                          /* Fix the relocation's type.  */
1867
                          irel->r_info =
1868
                            ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1869
                                          R_MN10300_8);
1870
 
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;
1875
 
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;
1881
                        }
1882
                    }
1883
                }
1884
            }
1885
        }
1886
 
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)
1890
        {
1891
          bfd_vma value = symval;
1892
          value += irel->r_addend;
1893
 
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)
1898
            {
1899
              unsigned char code;
1900
 
1901
              /* AM33 insns which have 32bit operands are 7 bytes long and
1902
                 will have 0xfe as the first byte.  */
1903
 
1904
              /* Get the first opcode.  */
1905
              code = bfd_get_8 (abfd, contents + irel->r_offset - 3);
1906
 
1907
              if (code == 0xfe)
1908
                {
1909
                  /* Get the second opcode.  */
1910
                  code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1911
 
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))
1920
                    {
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)
1926
                        {
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;
1932
 
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);
1936
 
1937
                          /* Fix the relocation's type.  */
1938
                          irel->r_info =
1939
                            ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
1940
                                          R_MN10300_24);
1941
 
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;
1946
 
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;
1952
                        }
1953
                    }
1954
                }
1955
            }
1956
 
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)
1961
            {
1962
              unsigned char code;
1963
 
1964
              /* Most insns which have 32bit operands are 6 bytes long;
1965
                 exceptions are pcrel insns and bit insns.
1966
 
1967
                 We handle pcrel insns above.  We don't bother trying
1968
                 to handle the bit insns here.
1969
 
1970
                 The first byte of the remaining insns will be 0xfc.  */
1971
 
1972
              /* Get the first opcode.  */
1973
              code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
1974
 
1975
              if (code != 0xfc)
1976
                continue;
1977
 
1978
              /* Get the second opcode.  */
1979
              code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
1980
 
1981
              if ((code & 0xf0) < 0x80)
1982
                switch (code & 0xf0)
1983
                  {
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;
2006
 
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;
2011
 
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);
2015
 
2016
                    /* Fix the relocation's type.  */
2017
                    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2018
                                                 R_MN10300_16);
2019
 
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;
2024
 
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;
2029
                  }
2030
              else if ((code & 0xf0) == 0x80
2031
                       || (code & 0xf0) == 0x90)
2032
                switch (code & 0xf3)
2033
                  {
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;
2044
 
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 ();
2053
 
2054
                    /* Fix the opcode.  */
2055
                    bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2056
 
2057
                    /* Fix the relocation's type.  */
2058
                    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2059
                                                 R_MN10300_16);
2060
 
2061
                    /* The opcode got shorter too, so we have to fix the
2062
                       addend and offset too!  */
2063
                    irel->r_offset -= 1;
2064
 
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;
2069
 
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;
2074
 
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;
2089
 
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;
2094
 
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);
2098
 
2099
                    /* Fix the relocation's type.  */
2100
                    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2101
                                                 R_MN10300_16);
2102
 
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;
2107
 
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;
2112
                  }
2113
              else if ((code & 0xf0) < 0xf0)
2114
                switch (code & 0xfc)
2115
                  {
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;
2132
 
2133
                    /* mov imm16, an zero-extends the immediate.  */
2134
                    if (code == 0xdc
2135
                        && (long)value < 0)
2136
                      continue;
2137
 
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;
2142
 
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 ();
2155
 
2156
                    /* Fix the opcode.  */
2157
                    bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
2158
 
2159
                    /* Fix the relocation's type.  */
2160
                    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2161
                                                 R_MN10300_16);
2162
 
2163
                    /* The opcode got shorter too, so we have to fix the
2164
                       addend and offset too!  */
2165
                    irel->r_offset -= 1;
2166
 
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;
2171
 
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;
2176
 
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 */
2190
 
2191
                  case 0xa0:
2192
                  case 0xb0:
2193
                  case 0xb1:
2194
                  case 0xb2:
2195
                  case 0xb3:
2196
                  case 0xc0:
2197
                  case 0xc8:
2198
 
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;
2209
 
2210
                    /* So do sp-based offsets.  */
2211
                    if (code >= 0xb0 && code <= 0xb3
2212
                        && (long)value < 0)
2213
                      continue;
2214
 
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;
2219
 
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);
2223
 
2224
                    /* Fix the relocation's type.  */
2225
                    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2226
                                                 R_MN10300_16);
2227
 
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;
2232
 
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;
2237
                  }
2238
              else if (code == 0xfe)
2239
                {
2240
                  /* add imm32,sp -> add imm16,sp  */
2241
 
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;
2246
 
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);
2250
 
2251
                  /* Fix the relocation's type.  */
2252
                  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
2253
                                               R_MN10300_16);
2254
 
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;
2259
 
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;
2264
                }
2265
            }
2266
        }
2267
    }
2268
 
2269
  if (isymbuf != NULL
2270
      && symtab_hdr->contents != (unsigned char *) isymbuf)
2271
    {
2272
      if (! link_info->keep_memory)
2273
        free (isymbuf);
2274
      else
2275
        {
2276
          /* Cache the symbols for elf_link_input_bfd.  */
2277
          symtab_hdr->contents = (unsigned char *) isymbuf;
2278
        }
2279
    }
2280
 
2281
  if (contents != NULL
2282
      && elf_section_data (sec)->this_hdr.contents != contents)
2283
    {
2284
      if (! link_info->keep_memory)
2285
        free (contents);
2286
      else
2287
        {
2288
          /* Cache the section contents for elf_link_input_bfd.  */
2289
          elf_section_data (sec)->this_hdr.contents = contents;
2290
        }
2291
    }
2292
 
2293
  if (internal_relocs != NULL
2294
      && elf_section_data (sec)->relocs != internal_relocs)
2295
    free (internal_relocs);
2296
 
2297
  return true;
2298
 
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);
2309
 
2310
  return false;
2311
}
2312
 
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;
2322
{
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:
2326
 
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)
2330
 
2331
     If we find anything else, we quit.  */
2332
 
2333
  /* Look for movm [regs],sp */
2334
  byte1 = bfd_get_8 (abfd, contents + addr);
2335
  byte2 = bfd_get_8 (abfd, contents + addr + 1);
2336
 
2337
  if (byte1 == 0xcf)
2338
    {
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);
2343
    }
2344
 
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)
2349
    {
2350
      /* Space for d2.  */
2351
      if (hash->movm_args & 0x80)
2352
        hash->movm_stack_size += 4;
2353
 
2354
      /* Space for d3.  */
2355
      if (hash->movm_args & 0x40)
2356
        hash->movm_stack_size += 4;
2357
 
2358
      /* Space for a2.  */
2359
      if (hash->movm_args & 0x20)
2360
        hash->movm_stack_size += 4;
2361
 
2362
      /* Space for a3.  */
2363
      if (hash->movm_args & 0x10)
2364
        hash->movm_stack_size += 4;
2365
 
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;
2369
 
2370
      if (bfd_get_mach (abfd) == bfd_mach_am33)
2371
        {
2372
          /* "exother" space.  e0, e1, mdrq, mcrh, mcrl, mcvf */
2373
          if (hash->movm_args & 0x1)
2374
            hash->movm_stack_size += 6 * 4;
2375
 
2376
          /* exreg1 space.  e4, e5, e6, e7 */
2377
          if (hash->movm_args & 0x2)
2378
            hash->movm_stack_size += 4 * 4;
2379
 
2380
          /* exreg0 space.  e2, e3  */
2381
          if (hash->movm_args & 0x4)
2382
            hash->movm_stack_size += 2 * 4;
2383
        }
2384
    }
2385
 
2386
  /* Now look for the two stack adjustment variants.  */
2387
  if (byte1 == 0xf8 && byte2 == 0xfe)
2388
    {
2389
      int temp = bfd_get_8 (abfd, contents + addr + 2);
2390
      temp = ((temp & 0xff) ^ (~0x7f)) + 0x80;
2391
 
2392
      hash->stack_size = -temp;
2393
    }
2394
  else if (byte1 == 0xfa && byte2 == 0xfe)
2395
    {
2396
      int temp = bfd_get_16 (abfd, contents + addr + 2);
2397
      temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000;
2398
      temp = -temp;
2399
 
2400
      if (temp < 255)
2401
        hash->stack_size = temp;
2402
    }
2403
 
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;
2409
 
2410
  return;
2411
}
2412
 
2413
/* Delete some bytes from a section while relaxing.  */
2414
 
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;
2421
{
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;
2432
 
2433
  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2434
 
2435
  contents = elf_section_data (sec)->this_hdr.contents;
2436
 
2437
  /* The deletion must stop at the next ALIGN reloc for an aligment
2438
     power larger than the number of bytes we are deleting.  */
2439
 
2440
  irelalign = NULL;
2441
  toaddr = sec->_cooked_size;
2442
 
2443
  irel = elf_section_data (sec)->relocs;
2444
  irelend = irel + sec->reloc_count;
2445
 
2446
  /* Actually delete the bytes.  */
2447
  memmove (contents + addr, contents + addr + count,
2448
           (size_t) (toaddr - addr - count));
2449
  sec->_cooked_size -= count;
2450
 
2451
  /* Adjust all the relocs.  */
2452
  for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
2453
    {
2454
      /* Get the new reloc address.  */
2455
      if ((irel->r_offset > addr
2456
           && irel->r_offset < toaddr))
2457
        irel->r_offset -= count;
2458
    }
2459
 
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++)
2464
    {
2465
      if (isym->st_shndx == sec_shndx
2466
          && isym->st_value > addr
2467
          && isym->st_value < toaddr)
2468
        isym->st_value -= count;
2469
    }
2470
 
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++)
2477
    {
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)
2484
        {
2485
          sym_hash->root.u.def.value -= count;
2486
        }
2487
    }
2488
 
2489
  return true;
2490
}
2491
 
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;
2500
{
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;
2507
 
2508
  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2509
 
2510
  /* Examine all the symbols.  */
2511
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2512
  for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2513
    {
2514
      if (isym->st_shndx == sec_shndx
2515
          && isym->st_value == addr)
2516
        return true;
2517
    }
2518
 
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++)
2524
    {
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;
2531
    }
2532
 
2533
  return false;
2534
}
2535
 
2536
/* This is a version of bfd_generic_get_relocated_section_contents
2537
   which uses mn10300_elf_relocate_section.  */
2538
 
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;
2548
{
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;
2555
 
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);
2564
 
2565
  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2566
 
2567
  memcpy (data, elf_section_data (input_section)->this_hdr.contents,
2568
          (size_t) input_section->_raw_size);
2569
 
2570
  if ((input_section->flags & SEC_RELOC) != 0
2571
      && input_section->reloc_count > 0)
2572
    {
2573
      asection **secpp;
2574
      Elf_Internal_Sym *isym, *isymend;
2575
      bfd_size_type amt;
2576
 
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;
2582
 
2583
      if (symtab_hdr->sh_info != 0)
2584
        {
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;
2592
        }
2593
 
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;
2599
 
2600
      isymend = isymbuf + symtab_hdr->sh_info;
2601
      for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
2602
        {
2603
          asection *isec;
2604
 
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);
2613
 
2614
          *secpp = isec;
2615
        }
2616
 
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;
2621
 
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);
2628
    }
2629
 
2630
  return data;
2631
 
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;
2641
}
2642
 
2643
/* Assorted hash table functions.  */
2644
 
2645
/* Initialize an entry in the link hash table.  */
2646
 
2647
/* Create an entry in an MN10300 ELF linker hash table.  */
2648
 
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;
2654
{
2655
  struct elf32_mn10300_link_hash_entry *ret =
2656
    (struct elf32_mn10300_link_hash_entry *) entry;
2657
 
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;
2666
 
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)
2672
    {
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;
2678
    }
2679
 
2680
  return (struct bfd_hash_entry *) ret;
2681
}
2682
 
2683
/* Create an mn10300 ELF linker hash table.  */
2684
 
2685
static struct bfd_link_hash_table *
2686
elf32_mn10300_link_hash_table_create (abfd)
2687
     bfd *abfd;
2688
{
2689
  struct elf32_mn10300_link_hash_table *ret;
2690
  bfd_size_type amt = sizeof (struct elf32_mn10300_link_hash_table);
2691
 
2692
  ret = (struct elf32_mn10300_link_hash_table *) bfd_malloc (amt);
2693
  if (ret == (struct elf32_mn10300_link_hash_table *) NULL)
2694
    return NULL;
2695
 
2696
  if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
2697
                                       elf32_mn10300_link_hash_newfunc))
2698
    {
2699
      free (ret);
2700
      return NULL;
2701
    }
2702
 
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)
2708
    {
2709
      free (ret);
2710
      return NULL;
2711
    }
2712
 
2713
  if (! _bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd,
2714
                                       elf32_mn10300_link_hash_newfunc))
2715
    {
2716
      free (ret->static_hash_table);
2717
      free (ret);
2718
      return NULL;
2719
    }
2720
  return &ret->root.root;
2721
}
2722
 
2723
/* Free an mn10300 ELF linker hash table.  */
2724
 
2725
static void
2726
elf32_mn10300_link_hash_table_free (hash)
2727
     struct bfd_link_hash_table *hash;
2728
{
2729
  struct elf32_mn10300_link_hash_table *ret
2730
    = (struct elf32_mn10300_link_hash_table *) hash;
2731
 
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);
2736
}
2737
 
2738
static unsigned long
2739
elf_mn10300_mach (flags)
2740
     flagword flags;
2741
{
2742
  switch (flags & EF_MN10300_MACH)
2743
    {
2744
    case E_MN10300_MACH_MN10300:
2745
    default:
2746
      return bfd_mach_mn10300;
2747
 
2748
    case E_MN10300_MACH_AM33:
2749
      return bfd_mach_am33;
2750
    }
2751
}
2752
 
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.  */
2756
 
2757
void
2758
_bfd_mn10300_elf_final_write_processing (abfd, linker)
2759
     bfd *abfd;
2760
     boolean linker ATTRIBUTE_UNUSED;
2761
{
2762
  unsigned long val;
2763
 
2764
  switch (bfd_get_mach (abfd))
2765
    {
2766
    default:
2767
    case bfd_mach_mn10300:
2768
      val = E_MN10300_MACH_MN10300;
2769
      break;
2770
 
2771
    case bfd_mach_am33:
2772
      val = E_MN10300_MACH_AM33;
2773
      break;
2774
    }
2775
 
2776
  elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
2777
  elf_elfheader (abfd)->e_flags |= val;
2778
}
2779
 
2780
boolean
2781
_bfd_mn10300_elf_object_p (abfd)
2782
     bfd *abfd;
2783
{
2784
  bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
2785
                             elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
2786
  return true;
2787
}
2788
 
2789
/* Merge backend specific data from an object file to the output
2790
   object file when linking.  */
2791
 
2792
boolean
2793
_bfd_mn10300_elf_merge_private_bfd_data (ibfd, obfd)
2794
     bfd *ibfd;
2795
     bfd *obfd;
2796
{
2797
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2798
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2799
    return true;
2800
 
2801
  if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
2802
      && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
2803
    {
2804
      if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
2805
                               bfd_get_mach (ibfd)))
2806
        return false;
2807
    }
2808
 
2809
  return true;
2810
}
2811
 
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
2818
 
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
2833
 
2834
#define elf_symbol_leading_char '_'
2835
 
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
2840
 
2841
#define bfd_elf32_bfd_merge_private_bfd_data \
2842
                                        _bfd_mn10300_elf_merge_private_bfd_data
2843
 
2844
#include "elf32-target.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.