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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [bfd/] [reloc.c] - Blame information for rev 404

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* BFD support for handling relocation entries.
2
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
   Written by Cygnus Support.
6
 
7
   This file is part of BFD, the Binary File Descriptor library.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program; if not, write to the Free Software
21
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22
   MA 02110-1301, USA.  */
23
 
24
/*
25
SECTION
26
        Relocations
27
 
28
        BFD maintains relocations in much the same way it maintains
29
        symbols: they are left alone until required, then read in
30
        en-masse and translated into an internal form.  A common
31
        routine <<bfd_perform_relocation>> acts upon the
32
        canonical form to do the fixup.
33
 
34
        Relocations are maintained on a per section basis,
35
        while symbols are maintained on a per BFD basis.
36
 
37
        All that a back end has to do to fit the BFD interface is to create
38
        a <<struct reloc_cache_entry>> for each relocation
39
        in a particular section, and fill in the right bits of the structures.
40
 
41
@menu
42
@* typedef arelent::
43
@* howto manager::
44
@end menu
45
 
46
*/
47
 
48
/* DO compile in the reloc_code name table from libbfd.h.  */
49
#define _BFD_MAKE_TABLE_bfd_reloc_code_real
50
 
51
#include "sysdep.h"
52
#include "bfd.h"
53
#include "bfdlink.h"
54
#include "libbfd.h"
55
/*
56
DOCDD
57
INODE
58
        typedef arelent, howto manager, Relocations, Relocations
59
 
60
SUBSECTION
61
        typedef arelent
62
 
63
        This is the structure of a relocation entry:
64
 
65
CODE_FRAGMENT
66
.
67
.typedef enum bfd_reloc_status
68
.{
69
.  {* No errors detected.  *}
70
.  bfd_reloc_ok,
71
.
72
.  {* The relocation was performed, but there was an overflow.  *}
73
.  bfd_reloc_overflow,
74
.
75
.  {* The address to relocate was not within the section supplied.  *}
76
.  bfd_reloc_outofrange,
77
.
78
.  {* Used by special functions.  *}
79
.  bfd_reloc_continue,
80
.
81
.  {* Unsupported relocation size requested.  *}
82
.  bfd_reloc_notsupported,
83
.
84
.  {* Unused.  *}
85
.  bfd_reloc_other,
86
.
87
.  {* The symbol to relocate against was undefined.  *}
88
.  bfd_reloc_undefined,
89
.
90
.  {* The relocation was performed, but may not be ok - presently
91
.     generated only when linking i960 coff files with i960 b.out
92
.     symbols.  If this type is returned, the error_message argument
93
.     to bfd_perform_relocation will be set.  *}
94
.  bfd_reloc_dangerous
95
. }
96
. bfd_reloc_status_type;
97
.
98
.
99
.typedef struct reloc_cache_entry
100
.{
101
.  {* A pointer into the canonical table of pointers.  *}
102
.  struct bfd_symbol **sym_ptr_ptr;
103
.
104
.  {* offset in section.  *}
105
.  bfd_size_type address;
106
.
107
.  {* addend for relocation value.  *}
108
.  bfd_vma addend;
109
.
110
.  {* Pointer to how to perform the required relocation.  *}
111
.  reloc_howto_type *howto;
112
.
113
.}
114
.arelent;
115
.
116
*/
117
 
118
/*
119
DESCRIPTION
120
 
121
        Here is a description of each of the fields within an <<arelent>>:
122
 
123
        o <<sym_ptr_ptr>>
124
 
125
        The symbol table pointer points to a pointer to the symbol
126
        associated with the relocation request.  It is the pointer
127
        into the table returned by the back end's
128
        <<canonicalize_symtab>> action. @xref{Symbols}. The symbol is
129
        referenced through a pointer to a pointer so that tools like
130
        the linker can fix up all the symbols of the same name by
131
        modifying only one pointer. The relocation routine looks in
132
        the symbol and uses the base of the section the symbol is
133
        attached to and the value of the symbol as the initial
134
        relocation offset. If the symbol pointer is zero, then the
135
        section provided is looked up.
136
 
137
        o <<address>>
138
 
139
        The <<address>> field gives the offset in bytes from the base of
140
        the section data which owns the relocation record to the first
141
        byte of relocatable information. The actual data relocated
142
        will be relative to this point; for example, a relocation
143
        type which modifies the bottom two bytes of a four byte word
144
        would not touch the first byte pointed to in a big endian
145
        world.
146
 
147
        o <<addend>>
148
 
149
        The <<addend>> is a value provided by the back end to be added (!)
150
        to the relocation offset. Its interpretation is dependent upon
151
        the howto. For example, on the 68k the code:
152
 
153
|        char foo[];
154
|        main()
155
|                {
156
|                return foo[0x12345678];
157
|                }
158
 
159
        Could be compiled into:
160
 
161
|        linkw fp,#-4
162
|        moveb @@#12345678,d0
163
|        extbl d0
164
|        unlk fp
165
|        rts
166
 
167
        This could create a reloc pointing to <<foo>>, but leave the
168
        offset in the data, something like:
169
 
170
|RELOCATION RECORDS FOR [.text]:
171
|offset   type      value
172
|00000006 32        _foo
173
|
174
|00000000 4e56 fffc          ; linkw fp,#-4
175
|00000004 1039 1234 5678     ; moveb @@#12345678,d0
176
|0000000a 49c0               ; extbl d0
177
|0000000c 4e5e               ; unlk fp
178
|0000000e 4e75               ; rts
179
 
180
        Using coff and an 88k, some instructions don't have enough
181
        space in them to represent the full address range, and
182
        pointers have to be loaded in two parts. So you'd get something like:
183
 
184
|        or.u     r13,r0,hi16(_foo+0x12345678)
185
|        ld.b     r2,r13,lo16(_foo+0x12345678)
186
|        jmp      r1
187
 
188
        This should create two relocs, both pointing to <<_foo>>, and with
189
        0x12340000 in their addend field. The data would consist of:
190
 
191
|RELOCATION RECORDS FOR [.text]:
192
|offset   type      value
193
|00000002 HVRT16    _foo+0x12340000
194
|00000006 LVRT16    _foo+0x12340000
195
|
196
|00000000 5da05678           ; or.u r13,r0,0x5678
197
|00000004 1c4d5678           ; ld.b r2,r13,0x5678
198
|00000008 f400c001           ; jmp r1
199
 
200
        The relocation routine digs out the value from the data, adds
201
        it to the addend to get the original offset, and then adds the
202
        value of <<_foo>>. Note that all 32 bits have to be kept around
203
        somewhere, to cope with carry from bit 15 to bit 16.
204
 
205
        One further example is the sparc and the a.out format. The
206
        sparc has a similar problem to the 88k, in that some
207
        instructions don't have room for an entire offset, but on the
208
        sparc the parts are created in odd sized lumps. The designers of
209
        the a.out format chose to not use the data within the section
210
        for storing part of the offset; all the offset is kept within
211
        the reloc. Anything in the data should be ignored.
212
 
213
|        save %sp,-112,%sp
214
|        sethi %hi(_foo+0x12345678),%g2
215
|        ldsb [%g2+%lo(_foo+0x12345678)],%i0
216
|        ret
217
|        restore
218
 
219
        Both relocs contain a pointer to <<foo>>, and the offsets
220
        contain junk.
221
 
222
|RELOCATION RECORDS FOR [.text]:
223
|offset   type      value
224
|00000004 HI22      _foo+0x12345678
225
|00000008 LO10      _foo+0x12345678
226
|
227
|00000000 9de3bf90     ; save %sp,-112,%sp
228
|00000004 05000000     ; sethi %hi(_foo+0),%g2
229
|00000008 f048a000     ; ldsb [%g2+%lo(_foo+0)],%i0
230
|0000000c 81c7e008     ; ret
231
|00000010 81e80000     ; restore
232
 
233
        o <<howto>>
234
 
235
        The <<howto>> field can be imagined as a
236
        relocation instruction. It is a pointer to a structure which
237
        contains information on what to do with all of the other
238
        information in the reloc record and data section. A back end
239
        would normally have a relocation instruction set and turn
240
        relocations into pointers to the correct structure on input -
241
        but it would be possible to create each howto field on demand.
242
 
243
*/
244
 
245
/*
246
SUBSUBSECTION
247
        <<enum complain_overflow>>
248
 
249
        Indicates what sort of overflow checking should be done when
250
        performing a relocation.
251
 
252
CODE_FRAGMENT
253
.
254
.enum complain_overflow
255
.{
256
.  {* Do not complain on overflow.  *}
257
.  complain_overflow_dont,
258
.
259
.  {* Complain if the value overflows when considered as a signed
260
.     number one bit larger than the field.  ie. A bitfield of N bits
261
.     is allowed to represent -2**n to 2**n-1.  *}
262
.  complain_overflow_bitfield,
263
.
264
.  {* Complain if the value overflows when considered as a signed
265
.     number.  *}
266
.  complain_overflow_signed,
267
.
268
.  {* Complain if the value overflows when considered as an
269
.     unsigned number.  *}
270
.  complain_overflow_unsigned
271
.};
272
 
273
*/
274
 
275
/*
276
SUBSUBSECTION
277
        <<reloc_howto_type>>
278
 
279
        The <<reloc_howto_type>> is a structure which contains all the
280
        information that libbfd needs to know to tie up a back end's data.
281
 
282
CODE_FRAGMENT
283
.struct bfd_symbol;             {* Forward declaration.  *}
284
.
285
.struct reloc_howto_struct
286
.{
287
.  {*  The type field has mainly a documentary use - the back end can
288
.      do what it wants with it, though normally the back end's
289
.      external idea of what a reloc number is stored
290
.      in this field.  For example, a PC relative word relocation
291
.      in a coff environment has the type 023 - because that's
292
.      what the outside world calls a R_PCRWORD reloc.  *}
293
.  unsigned int type;
294
.
295
.  {*  The value the final relocation is shifted right by.  This drops
296
.      unwanted data from the relocation.  *}
297
.  unsigned int rightshift;
298
.
299
.  {*  The size of the item to be relocated.  This is *not* a
300
.      power-of-two measure.  To get the number of bytes operated
301
.      on by a type of relocation, use bfd_get_reloc_size.  *}
302
.  int size;
303
.
304
.  {*  The number of bits in the item to be relocated.  This is used
305
.      when doing overflow checking.  *}
306
.  unsigned int bitsize;
307
.
308
.  {*  The relocation is relative to the field being relocated.  *}
309
.  bfd_boolean pc_relative;
310
.
311
.  {*  The bit position of the reloc value in the destination.
312
.      The relocated value is left shifted by this amount.  *}
313
.  unsigned int bitpos;
314
.
315
.  {* What type of overflow error should be checked for when
316
.     relocating.  *}
317
.  enum complain_overflow complain_on_overflow;
318
.
319
.  {* If this field is non null, then the supplied function is
320
.     called rather than the normal function.  This allows really
321
.     strange relocation methods to be accommodated (e.g., i960 callj
322
.     instructions).  *}
323
.  bfd_reloc_status_type (*special_function)
324
.    (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
325
.     bfd *, char **);
326
.
327
.  {* The textual name of the relocation type.  *}
328
.  char *name;
329
.
330
.  {* Some formats record a relocation addend in the section contents
331
.     rather than with the relocation.  For ELF formats this is the
332
.     distinction between USE_REL and USE_RELA (though the code checks
333
.     for USE_REL == 1/0).  The value of this field is TRUE if the
334
.     addend is recorded with the section contents; when performing a
335
.     partial link (ld -r) the section contents (the data) will be
336
.     modified.  The value of this field is FALSE if addends are
337
.     recorded with the relocation (in arelent.addend); when performing
338
.     a partial link the relocation will be modified.
339
.     All relocations for all ELF USE_RELA targets should set this field
340
.     to FALSE (values of TRUE should be looked on with suspicion).
341
.     However, the converse is not true: not all relocations of all ELF
342
.     USE_REL targets set this field to TRUE.  Why this is so is peculiar
343
.     to each particular target.  For relocs that aren't used in partial
344
.     links (e.g. GOT stuff) it doesn't matter what this is set to.  *}
345
.  bfd_boolean partial_inplace;
346
.
347
.  {* src_mask selects the part of the instruction (or data) to be used
348
.     in the relocation sum.  If the target relocations don't have an
349
.     addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
350
.     dst_mask to extract the addend from the section contents.  If
351
.     relocations do have an addend in the reloc, eg. ELF USE_RELA, this
352
.     field should be zero.  Non-zero values for ELF USE_RELA targets are
353
.     bogus as in those cases the value in the dst_mask part of the
354
.     section contents should be treated as garbage.  *}
355
.  bfd_vma src_mask;
356
.
357
.  {* dst_mask selects which parts of the instruction (or data) are
358
.     replaced with a relocated value.  *}
359
.  bfd_vma dst_mask;
360
.
361
.  {* When some formats create PC relative instructions, they leave
362
.     the value of the pc of the place being relocated in the offset
363
.     slot of the instruction, so that a PC relative relocation can
364
.     be made just by adding in an ordinary offset (e.g., sun3 a.out).
365
.     Some formats leave the displacement part of an instruction
366
.     empty (e.g., m88k bcs); this flag signals the fact.  *}
367
.  bfd_boolean pcrel_offset;
368
.};
369
.
370
*/
371
 
372
/*
373
FUNCTION
374
        The HOWTO Macro
375
 
376
DESCRIPTION
377
        The HOWTO define is horrible and will go away.
378
 
379
.#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
380
.  { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
381
 
382
DESCRIPTION
383
        And will be replaced with the totally magic way. But for the
384
        moment, we are compatible, so do it this way.
385
 
386
.#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
387
.  HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
388
.         NAME, FALSE, 0, 0, IN)
389
.
390
 
391
DESCRIPTION
392
        This is used to fill in an empty howto entry in an array.
393
 
394
.#define EMPTY_HOWTO(C) \
395
.  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
396
.         NULL, FALSE, 0, 0, FALSE)
397
.
398
 
399
DESCRIPTION
400
        Helper routine to turn a symbol into a relocation value.
401
 
402
.#define HOWTO_PREPARE(relocation, symbol)               \
403
.  {                                                     \
404
.    if (symbol != NULL)                                 \
405
.      {                                                 \
406
.        if (bfd_is_com_section (symbol->section))       \
407
.          {                                             \
408
.            relocation = 0;                             \
409
.          }                                             \
410
.        else                                            \
411
.          {                                             \
412
.            relocation = symbol->value;                 \
413
.          }                                             \
414
.      }                                                 \
415
.  }
416
.
417
*/
418
 
419
/*
420
FUNCTION
421
        bfd_get_reloc_size
422
 
423
SYNOPSIS
424
        unsigned int bfd_get_reloc_size (reloc_howto_type *);
425
 
426
DESCRIPTION
427
        For a reloc_howto_type that operates on a fixed number of bytes,
428
        this returns the number of bytes operated on.
429
 */
430
 
431
unsigned int
432
bfd_get_reloc_size (reloc_howto_type *howto)
433
{
434
  switch (howto->size)
435
    {
436
    case 0: return 1;
437
    case 1: return 2;
438
    case 2: return 4;
439
    case 3: return 0;
440
    case 4: return 8;
441
    case 8: return 16;
442
    case -2: return 4;
443
    default: abort ();
444
    }
445
}
446
 
447
/*
448
TYPEDEF
449
        arelent_chain
450
 
451
DESCRIPTION
452
 
453
        How relocs are tied together in an <<asection>>:
454
 
455
.typedef struct relent_chain
456
.{
457
.  arelent relent;
458
.  struct relent_chain *next;
459
.}
460
.arelent_chain;
461
.
462
*/
463
 
464
/* N_ONES produces N one bits, without overflowing machine arithmetic.  */
465
#define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1)
466
 
467
/*
468
FUNCTION
469
        bfd_check_overflow
470
 
471
SYNOPSIS
472
        bfd_reloc_status_type bfd_check_overflow
473
          (enum complain_overflow how,
474
           unsigned int bitsize,
475
           unsigned int rightshift,
476
           unsigned int addrsize,
477
           bfd_vma relocation);
478
 
479
DESCRIPTION
480
        Perform overflow checking on @var{relocation} which has
481
        @var{bitsize} significant bits and will be shifted right by
482
        @var{rightshift} bits, on a machine with addresses containing
483
        @var{addrsize} significant bits.  The result is either of
484
        @code{bfd_reloc_ok} or @code{bfd_reloc_overflow}.
485
 
486
*/
487
 
488
bfd_reloc_status_type
489
bfd_check_overflow (enum complain_overflow how,
490
                    unsigned int bitsize,
491
                    unsigned int rightshift,
492
                    unsigned int addrsize,
493
                    bfd_vma relocation)
494
{
495
  bfd_vma fieldmask, addrmask, signmask, ss, a;
496
  bfd_reloc_status_type flag = bfd_reloc_ok;
497
 
498
  /* Note: BITSIZE should always be <= ADDRSIZE, but in case it's not,
499
     we'll be permissive: extra bits in the field mask will
500
     automatically extend the address mask for purposes of the
501
     overflow check.  */
502
  fieldmask = N_ONES (bitsize);
503
  signmask = ~fieldmask;
504
  addrmask = N_ONES (addrsize) | (fieldmask << rightshift);
505
  a = (relocation & addrmask) >> rightshift;;
506
 
507
  switch (how)
508
    {
509
    case complain_overflow_dont:
510
      break;
511
 
512
    case complain_overflow_signed:
513
      /* If any sign bits are set, all sign bits must be set.  That
514
         is, A must be a valid negative address after shifting.  */
515
      signmask = ~ (fieldmask >> 1);
516
      /* Fall thru */
517
 
518
    case complain_overflow_bitfield:
519
      /* Bitfields are sometimes signed, sometimes unsigned.  We
520
         explicitly allow an address wrap too, which means a bitfield
521
         of n bits is allowed to store -2**n to 2**n-1.  Thus overflow
522
         if the value has some, but not all, bits set outside the
523
         field.  */
524
      ss = a & signmask;
525
      if (ss != 0 && ss != ((addrmask >> rightshift) & signmask))
526
        flag = bfd_reloc_overflow;
527
      break;
528
 
529
    case complain_overflow_unsigned:
530
      /* We have an overflow if the address does not fit in the field.  */
531
      if ((a & signmask) != 0)
532
        flag = bfd_reloc_overflow;
533
      break;
534
 
535
    default:
536
      abort ();
537
    }
538
 
539
  return flag;
540
}
541
 
542
/*
543
FUNCTION
544
        bfd_perform_relocation
545
 
546
SYNOPSIS
547
        bfd_reloc_status_type bfd_perform_relocation
548
          (bfd *abfd,
549
           arelent *reloc_entry,
550
           void *data,
551
           asection *input_section,
552
           bfd *output_bfd,
553
           char **error_message);
554
 
555
DESCRIPTION
556
        If @var{output_bfd} is supplied to this function, the
557
        generated image will be relocatable; the relocations are
558
        copied to the output file after they have been changed to
559
        reflect the new state of the world. There are two ways of
560
        reflecting the results of partial linkage in an output file:
561
        by modifying the output data in place, and by modifying the
562
        relocation record.  Some native formats (e.g., basic a.out and
563
        basic coff) have no way of specifying an addend in the
564
        relocation type, so the addend has to go in the output data.
565
        This is no big deal since in these formats the output data
566
        slot will always be big enough for the addend. Complex reloc
567
        types with addends were invented to solve just this problem.
568
        The @var{error_message} argument is set to an error message if
569
        this return @code{bfd_reloc_dangerous}.
570
 
571
*/
572
 
573
bfd_reloc_status_type
574
bfd_perform_relocation (bfd *abfd,
575
                        arelent *reloc_entry,
576
                        void *data,
577
                        asection *input_section,
578
                        bfd *output_bfd,
579
                        char **error_message)
580
{
581
  bfd_vma relocation;
582
  bfd_reloc_status_type flag = bfd_reloc_ok;
583
  bfd_size_type octets = reloc_entry->address * bfd_octets_per_byte (abfd);
584
  bfd_vma output_base = 0;
585
  reloc_howto_type *howto = reloc_entry->howto;
586
  asection *reloc_target_output_section;
587
  asymbol *symbol;
588
 
589
  symbol = *(reloc_entry->sym_ptr_ptr);
590
  if (bfd_is_abs_section (symbol->section)
591
      && output_bfd != NULL)
592
    {
593
      reloc_entry->address += input_section->output_offset;
594
      return bfd_reloc_ok;
595
    }
596
 
597
  /* If we are not producing relocatable output, return an error if
598
     the symbol is not defined.  An undefined weak symbol is
599
     considered to have a value of zero (SVR4 ABI, p. 4-27).  */
600
  if (bfd_is_und_section (symbol->section)
601
      && (symbol->flags & BSF_WEAK) == 0
602
      && output_bfd == NULL)
603
    flag = bfd_reloc_undefined;
604
 
605
  /* If there is a function supplied to handle this relocation type,
606
     call it.  It'll return `bfd_reloc_continue' if further processing
607
     can be done.  */
608
  if (howto->special_function)
609
    {
610
      bfd_reloc_status_type cont;
611
      cont = howto->special_function (abfd, reloc_entry, symbol, data,
612
                                      input_section, output_bfd,
613
                                      error_message);
614
      if (cont != bfd_reloc_continue)
615
        return cont;
616
    }
617
 
618
  /* Is the address of the relocation really within the section?  */
619
  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
620
    return bfd_reloc_outofrange;
621
 
622
  /* Work out which section the relocation is targeted at and the
623
     initial relocation command value.  */
624
 
625
  /* Get symbol value.  (Common symbols are special.)  */
626
  if (bfd_is_com_section (symbol->section))
627
    relocation = 0;
628
  else
629
    relocation = symbol->value;
630
 
631
  reloc_target_output_section = symbol->section->output_section;
632
 
633
  /* Convert input-section-relative symbol value to absolute.  */
634
  if ((output_bfd && ! howto->partial_inplace)
635
      || reloc_target_output_section == NULL)
636
    output_base = 0;
637
  else
638
    output_base = reloc_target_output_section->vma;
639
 
640
  relocation += output_base + symbol->section->output_offset;
641
 
642
  /* Add in supplied addend.  */
643
  relocation += reloc_entry->addend;
644
 
645
  /* Here the variable relocation holds the final address of the
646
     symbol we are relocating against, plus any addend.  */
647
 
648
  if (howto->pc_relative)
649
    {
650
      /* This is a PC relative relocation.  We want to set RELOCATION
651
         to the distance between the address of the symbol and the
652
         location.  RELOCATION is already the address of the symbol.
653
 
654
         We start by subtracting the address of the section containing
655
         the location.
656
 
657
         If pcrel_offset is set, we must further subtract the position
658
         of the location within the section.  Some targets arrange for
659
         the addend to be the negative of the position of the location
660
         within the section; for example, i386-aout does this.  For
661
         i386-aout, pcrel_offset is FALSE.  Some other targets do not
662
         include the position of the location; for example, m88kbcs,
663
         or ELF.  For those targets, pcrel_offset is TRUE.
664
 
665
         If we are producing relocatable output, then we must ensure
666
         that this reloc will be correctly computed when the final
667
         relocation is done.  If pcrel_offset is FALSE we want to wind
668
         up with the negative of the location within the section,
669
         which means we must adjust the existing addend by the change
670
         in the location within the section.  If pcrel_offset is TRUE
671
         we do not want to adjust the existing addend at all.
672
 
673
         FIXME: This seems logical to me, but for the case of
674
         producing relocatable output it is not what the code
675
         actually does.  I don't want to change it, because it seems
676
         far too likely that something will break.  */
677
 
678
      relocation -=
679
        input_section->output_section->vma + input_section->output_offset;
680
 
681
      if (howto->pcrel_offset)
682
        relocation -= reloc_entry->address;
683
    }
684
 
685
  if (output_bfd != NULL)
686
    {
687
      if (! howto->partial_inplace)
688
        {
689
          /* This is a partial relocation, and we want to apply the relocation
690
             to the reloc entry rather than the raw data. Modify the reloc
691
             inplace to reflect what we now know.  */
692
          reloc_entry->addend = relocation;
693
          reloc_entry->address += input_section->output_offset;
694
          return flag;
695
        }
696
      else
697
        {
698
          /* This is a partial relocation, but inplace, so modify the
699
             reloc record a bit.
700
 
701
             If we've relocated with a symbol with a section, change
702
             into a ref to the section belonging to the symbol.  */
703
 
704
          reloc_entry->address += input_section->output_offset;
705
 
706
          /* WTF?? */
707
          if (abfd->xvec->flavour == bfd_target_coff_flavour
708
              && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
709
              && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
710
            {
711
              /* For m68k-coff, the addend was being subtracted twice during
712
                 relocation with -r.  Removing the line below this comment
713
                 fixes that problem; see PR 2953.
714
 
715
However, Ian wrote the following, regarding removing the line below,
716
which explains why it is still enabled:  --djm
717
 
718
If you put a patch like that into BFD you need to check all the COFF
719
linkers.  I am fairly certain that patch will break coff-i386 (e.g.,
720
SCO); see coff_i386_reloc in coff-i386.c where I worked around the
721
problem in a different way.  There may very well be a reason that the
722
code works as it does.
723
 
724
Hmmm.  The first obvious point is that bfd_perform_relocation should
725
not have any tests that depend upon the flavour.  It's seem like
726
entirely the wrong place for such a thing.  The second obvious point
727
is that the current code ignores the reloc addend when producing
728
relocatable output for COFF.  That's peculiar.  In fact, I really
729
have no idea what the point of the line you want to remove is.
730
 
731
A typical COFF reloc subtracts the old value of the symbol and adds in
732
the new value to the location in the object file (if it's a pc
733
relative reloc it adds the difference between the symbol value and the
734
location).  When relocating we need to preserve that property.
735
 
736
BFD handles this by setting the addend to the negative of the old
737
value of the symbol.  Unfortunately it handles common symbols in a
738
non-standard way (it doesn't subtract the old value) but that's a
739
different story (we can't change it without losing backward
740
compatibility with old object files) (coff-i386 does subtract the old
741
value, to be compatible with existing coff-i386 targets, like SCO).
742
 
743
So everything works fine when not producing relocatable output.  When
744
we are producing relocatable output, logically we should do exactly
745
what we do when not producing relocatable output.  Therefore, your
746
patch is correct.  In fact, it should probably always just set
747
reloc_entry->addend to 0 for all cases, since it is, in fact, going to
748
add the value into the object file.  This won't hurt the COFF code,
749
which doesn't use the addend; I'm not sure what it will do to other
750
formats (the thing to check for would be whether any formats both use
751
the addend and set partial_inplace).
752
 
753
When I wanted to make coff-i386 produce relocatable output, I ran
754
into the problem that you are running into: I wanted to remove that
755
line.  Rather than risk it, I made the coff-i386 relocs use a special
756
function; it's coff_i386_reloc in coff-i386.c.  The function
757
specifically adds the addend field into the object file, knowing that
758
bfd_perform_relocation is not going to.  If you remove that line, then
759
coff-i386.c will wind up adding the addend field in twice.  It's
760
trivial to fix; it just needs to be done.
761
 
762
The problem with removing the line is just that it may break some
763
working code.  With BFD it's hard to be sure of anything.  The right
764
way to deal with this is simply to build and test at least all the
765
supported COFF targets.  It should be straightforward if time and disk
766
space consuming.  For each target:
767
    1) build the linker
768
    2) generate some executable, and link it using -r (I would
769
       probably use paranoia.o and link against newlib/libc.a, which
770
       for all the supported targets would be available in
771
       /usr/cygnus/progressive/H-host/target/lib/libc.a).
772
    3) make the change to reloc.c
773
    4) rebuild the linker
774
    5) repeat step 2
775
    6) if the resulting object files are the same, you have at least
776
       made it no worse
777
    7) if they are different you have to figure out which version is
778
       right
779
*/
780
              relocation -= reloc_entry->addend;
781
              reloc_entry->addend = 0;
782
            }
783
          else
784
            {
785
              reloc_entry->addend = relocation;
786
            }
787
        }
788
    }
789
  else
790
    {
791
      reloc_entry->addend = 0;
792
    }
793
 
794
  /* FIXME: This overflow checking is incomplete, because the value
795
     might have overflowed before we get here.  For a correct check we
796
     need to compute the value in a size larger than bitsize, but we
797
     can't reasonably do that for a reloc the same size as a host
798
     machine word.
799
     FIXME: We should also do overflow checking on the result after
800
     adding in the value contained in the object file.  */
801
  if (howto->complain_on_overflow != complain_overflow_dont
802
      && flag == bfd_reloc_ok)
803
    flag = bfd_check_overflow (howto->complain_on_overflow,
804
                               howto->bitsize,
805
                               howto->rightshift,
806
                               bfd_arch_bits_per_address (abfd),
807
                               relocation);
808
 
809
  /* Either we are relocating all the way, or we don't want to apply
810
     the relocation to the reloc entry (probably because there isn't
811
     any room in the output format to describe addends to relocs).  */
812
 
813
  /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
814
     (OSF version 1.3, compiler version 3.11).  It miscompiles the
815
     following program:
816
 
817
     struct str
818
     {
819
       unsigned int i0;
820
     } s = { 0 };
821
 
822
     int
823
     main ()
824
     {
825
       unsigned long x;
826
 
827
       x = 0x100000000;
828
       x <<= (unsigned long) s.i0;
829
       if (x == 0)
830
         printf ("failed\n");
831
       else
832
         printf ("succeeded (%lx)\n", x);
833
     }
834
     */
835
 
836
  relocation >>= (bfd_vma) howto->rightshift;
837
 
838
  /* Shift everything up to where it's going to be used.  */
839
  relocation <<= (bfd_vma) howto->bitpos;
840
 
841
  /* Wait for the day when all have the mask in them.  */
842
 
843
  /* What we do:
844
     i instruction to be left alone
845
     o offset within instruction
846
     r relocation offset to apply
847
     S src mask
848
     D dst mask
849
     N ~dst mask
850
     A part 1
851
     B part 2
852
     R result
853
 
854
     Do this:
855
     ((  i i i i i o o o o o  from bfd_get<size>
856
     and           S S S S S) to get the size offset we want
857
     +   r r r r r r r r r r) to get the final value to place
858
     and           D D D D D  to chop to right size
859
     -----------------------
860
     =             A A A A A
861
     And this:
862
     (   i i i i i o o o o o  from bfd_get<size>
863
     and N N N N N          ) get instruction
864
     -----------------------
865
     =   B B B B B
866
 
867
     And then:
868
     (   B B B B B
869
     or            A A A A A)
870
     -----------------------
871
     =   R R R R R R R R R R  put into bfd_put<size>
872
     */
873
 
874
#define DOIT(x) \
875
  x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) +  relocation) & howto->dst_mask))
876
 
877
  switch (howto->size)
878
    {
879
    case 0:
880
      {
881
        char x = bfd_get_8 (abfd, (char *) data + octets);
882
        DOIT (x);
883
        bfd_put_8 (abfd, x, (unsigned char *) data + octets);
884
      }
885
      break;
886
 
887
    case 1:
888
      {
889
        short x = bfd_get_16 (abfd, (bfd_byte *) data + octets);
890
        DOIT (x);
891
        bfd_put_16 (abfd, (bfd_vma) x, (unsigned char *) data + octets);
892
      }
893
      break;
894
    case 2:
895
      {
896
        long x = bfd_get_32 (abfd, (bfd_byte *) data + octets);
897
        DOIT (x);
898
        bfd_put_32 (abfd, (bfd_vma) x, (bfd_byte *) data + octets);
899
      }
900
      break;
901
    case -2:
902
      {
903
        long x = bfd_get_32 (abfd, (bfd_byte *) data + octets);
904
        relocation = -relocation;
905
        DOIT (x);
906
        bfd_put_32 (abfd, (bfd_vma) x, (bfd_byte *) data + octets);
907
      }
908
      break;
909
 
910
    case -1:
911
      {
912
        long x = bfd_get_16 (abfd, (bfd_byte *) data + octets);
913
        relocation = -relocation;
914
        DOIT (x);
915
        bfd_put_16 (abfd, (bfd_vma) x, (bfd_byte *) data + octets);
916
      }
917
      break;
918
 
919
    case 3:
920
      /* Do nothing */
921
      break;
922
 
923
    case 4:
924
#ifdef BFD64
925
      {
926
        bfd_vma x = bfd_get_64 (abfd, (bfd_byte *) data + octets);
927
        DOIT (x);
928
        bfd_put_64 (abfd, x, (bfd_byte *) data + octets);
929
      }
930
#else
931
      abort ();
932
#endif
933
      break;
934
    default:
935
      return bfd_reloc_other;
936
    }
937
 
938
  return flag;
939
}
940
 
941
/*
942
FUNCTION
943
        bfd_install_relocation
944
 
945
SYNOPSIS
946
        bfd_reloc_status_type bfd_install_relocation
947
          (bfd *abfd,
948
           arelent *reloc_entry,
949
           void *data, bfd_vma data_start,
950
           asection *input_section,
951
           char **error_message);
952
 
953
DESCRIPTION
954
        This looks remarkably like <<bfd_perform_relocation>>, except it
955
        does not expect that the section contents have been filled in.
956
        I.e., it's suitable for use when creating, rather than applying
957
        a relocation.
958
 
959
        For now, this function should be considered reserved for the
960
        assembler.
961
*/
962
 
963
bfd_reloc_status_type
964
bfd_install_relocation (bfd *abfd,
965
                        arelent *reloc_entry,
966
                        void *data_start,
967
                        bfd_vma data_start_offset,
968
                        asection *input_section,
969
                        char **error_message)
970
{
971
  bfd_vma relocation;
972
  bfd_reloc_status_type flag = bfd_reloc_ok;
973
  bfd_size_type octets = reloc_entry->address * bfd_octets_per_byte (abfd);
974
  bfd_vma output_base = 0;
975
  reloc_howto_type *howto = reloc_entry->howto;
976
  asection *reloc_target_output_section;
977
  asymbol *symbol;
978
  bfd_byte *data;
979
 
980
  symbol = *(reloc_entry->sym_ptr_ptr);
981
  if (bfd_is_abs_section (symbol->section))
982
    {
983
      reloc_entry->address += input_section->output_offset;
984
      return bfd_reloc_ok;
985
    }
986
 
987
  /* If there is a function supplied to handle this relocation type,
988
     call it.  It'll return `bfd_reloc_continue' if further processing
989
     can be done.  */
990
  if (howto->special_function)
991
    {
992
      bfd_reloc_status_type cont;
993
 
994
      /* XXX - The special_function calls haven't been fixed up to deal
995
         with creating new relocations and section contents.  */
996
      cont = howto->special_function (abfd, reloc_entry, symbol,
997
                                      /* XXX - Non-portable! */
998
                                      ((bfd_byte *) data_start
999
                                       - data_start_offset),
1000
                                      input_section, abfd, error_message);
1001
      if (cont != bfd_reloc_continue)
1002
        return cont;
1003
    }
1004
 
1005
  /* Is the address of the relocation really within the section?  */
1006
  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
1007
    return bfd_reloc_outofrange;
1008
 
1009
  /* Work out which section the relocation is targeted at and the
1010
     initial relocation command value.  */
1011
 
1012
  /* Get symbol value.  (Common symbols are special.)  */
1013
  if (bfd_is_com_section (symbol->section))
1014
    relocation = 0;
1015
  else
1016
    relocation = symbol->value;
1017
 
1018
  reloc_target_output_section = symbol->section->output_section;
1019
 
1020
  /* Convert input-section-relative symbol value to absolute.  */
1021
  if (! howto->partial_inplace)
1022
    output_base = 0;
1023
  else
1024
    output_base = reloc_target_output_section->vma;
1025
 
1026
  relocation += output_base + symbol->section->output_offset;
1027
 
1028
  /* Add in supplied addend.  */
1029
  relocation += reloc_entry->addend;
1030
 
1031
  /* Here the variable relocation holds the final address of the
1032
     symbol we are relocating against, plus any addend.  */
1033
 
1034
  if (howto->pc_relative)
1035
    {
1036
      /* This is a PC relative relocation.  We want to set RELOCATION
1037
         to the distance between the address of the symbol and the
1038
         location.  RELOCATION is already the address of the symbol.
1039
 
1040
         We start by subtracting the address of the section containing
1041
         the location.
1042
 
1043
         If pcrel_offset is set, we must further subtract the position
1044
         of the location within the section.  Some targets arrange for
1045
         the addend to be the negative of the position of the location
1046
         within the section; for example, i386-aout does this.  For
1047
         i386-aout, pcrel_offset is FALSE.  Some other targets do not
1048
         include the position of the location; for example, m88kbcs,
1049
         or ELF.  For those targets, pcrel_offset is TRUE.
1050
 
1051
         If we are producing relocatable output, then we must ensure
1052
         that this reloc will be correctly computed when the final
1053
         relocation is done.  If pcrel_offset is FALSE we want to wind
1054
         up with the negative of the location within the section,
1055
         which means we must adjust the existing addend by the change
1056
         in the location within the section.  If pcrel_offset is TRUE
1057
         we do not want to adjust the existing addend at all.
1058
 
1059
         FIXME: This seems logical to me, but for the case of
1060
         producing relocatable output it is not what the code
1061
         actually does.  I don't want to change it, because it seems
1062
         far too likely that something will break.  */
1063
 
1064
      relocation -=
1065
        input_section->output_section->vma + input_section->output_offset;
1066
 
1067
      if (howto->pcrel_offset && howto->partial_inplace)
1068
        relocation -= reloc_entry->address;
1069
    }
1070
 
1071
  if (! howto->partial_inplace)
1072
    {
1073
      /* This is a partial relocation, and we want to apply the relocation
1074
         to the reloc entry rather than the raw data. Modify the reloc
1075
         inplace to reflect what we now know.  */
1076
      reloc_entry->addend = relocation;
1077
      reloc_entry->address += input_section->output_offset;
1078
      return flag;
1079
    }
1080
  else
1081
    {
1082
      /* This is a partial relocation, but inplace, so modify the
1083
         reloc record a bit.
1084
 
1085
         If we've relocated with a symbol with a section, change
1086
         into a ref to the section belonging to the symbol.  */
1087
      reloc_entry->address += input_section->output_offset;
1088
 
1089
      /* WTF?? */
1090
      if (abfd->xvec->flavour == bfd_target_coff_flavour
1091
          && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
1092
          && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
1093
        {
1094
 
1095
          /* For m68k-coff, the addend was being subtracted twice during
1096
             relocation with -r.  Removing the line below this comment
1097
             fixes that problem; see PR 2953.
1098
 
1099
However, Ian wrote the following, regarding removing the line below,
1100
which explains why it is still enabled:  --djm
1101
 
1102
If you put a patch like that into BFD you need to check all the COFF
1103
linkers.  I am fairly certain that patch will break coff-i386 (e.g.,
1104
SCO); see coff_i386_reloc in coff-i386.c where I worked around the
1105
problem in a different way.  There may very well be a reason that the
1106
code works as it does.
1107
 
1108
Hmmm.  The first obvious point is that bfd_install_relocation should
1109
not have any tests that depend upon the flavour.  It's seem like
1110
entirely the wrong place for such a thing.  The second obvious point
1111
is that the current code ignores the reloc addend when producing
1112
relocatable output for COFF.  That's peculiar.  In fact, I really
1113
have no idea what the point of the line you want to remove is.
1114
 
1115
A typical COFF reloc subtracts the old value of the symbol and adds in
1116
the new value to the location in the object file (if it's a pc
1117
relative reloc it adds the difference between the symbol value and the
1118
location).  When relocating we need to preserve that property.
1119
 
1120
BFD handles this by setting the addend to the negative of the old
1121
value of the symbol.  Unfortunately it handles common symbols in a
1122
non-standard way (it doesn't subtract the old value) but that's a
1123
different story (we can't change it without losing backward
1124
compatibility with old object files) (coff-i386 does subtract the old
1125
value, to be compatible with existing coff-i386 targets, like SCO).
1126
 
1127
So everything works fine when not producing relocatable output.  When
1128
we are producing relocatable output, logically we should do exactly
1129
what we do when not producing relocatable output.  Therefore, your
1130
patch is correct.  In fact, it should probably always just set
1131
reloc_entry->addend to 0 for all cases, since it is, in fact, going to
1132
add the value into the object file.  This won't hurt the COFF code,
1133
which doesn't use the addend; I'm not sure what it will do to other
1134
formats (the thing to check for would be whether any formats both use
1135
the addend and set partial_inplace).
1136
 
1137
When I wanted to make coff-i386 produce relocatable output, I ran
1138
into the problem that you are running into: I wanted to remove that
1139
line.  Rather than risk it, I made the coff-i386 relocs use a special
1140
function; it's coff_i386_reloc in coff-i386.c.  The function
1141
specifically adds the addend field into the object file, knowing that
1142
bfd_install_relocation is not going to.  If you remove that line, then
1143
coff-i386.c will wind up adding the addend field in twice.  It's
1144
trivial to fix; it just needs to be done.
1145
 
1146
The problem with removing the line is just that it may break some
1147
working code.  With BFD it's hard to be sure of anything.  The right
1148
way to deal with this is simply to build and test at least all the
1149
supported COFF targets.  It should be straightforward if time and disk
1150
space consuming.  For each target:
1151
    1) build the linker
1152
    2) generate some executable, and link it using -r (I would
1153
       probably use paranoia.o and link against newlib/libc.a, which
1154
       for all the supported targets would be available in
1155
       /usr/cygnus/progressive/H-host/target/lib/libc.a).
1156
    3) make the change to reloc.c
1157
    4) rebuild the linker
1158
    5) repeat step 2
1159
    6) if the resulting object files are the same, you have at least
1160
       made it no worse
1161
    7) if they are different you have to figure out which version is
1162
       right.  */
1163
          relocation -= reloc_entry->addend;
1164
          /* FIXME: There should be no target specific code here...  */
1165
          if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
1166
            reloc_entry->addend = 0;
1167
        }
1168
      else
1169
        {
1170
          reloc_entry->addend = relocation;
1171
        }
1172
    }
1173
 
1174
  /* FIXME: This overflow checking is incomplete, because the value
1175
     might have overflowed before we get here.  For a correct check we
1176
     need to compute the value in a size larger than bitsize, but we
1177
     can't reasonably do that for a reloc the same size as a host
1178
     machine word.
1179
     FIXME: We should also do overflow checking on the result after
1180
     adding in the value contained in the object file.  */
1181
  if (howto->complain_on_overflow != complain_overflow_dont)
1182
    flag = bfd_check_overflow (howto->complain_on_overflow,
1183
                               howto->bitsize,
1184
                               howto->rightshift,
1185
                               bfd_arch_bits_per_address (abfd),
1186
                               relocation);
1187
 
1188
  /* Either we are relocating all the way, or we don't want to apply
1189
     the relocation to the reloc entry (probably because there isn't
1190
     any room in the output format to describe addends to relocs).  */
1191
 
1192
  /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
1193
     (OSF version 1.3, compiler version 3.11).  It miscompiles the
1194
     following program:
1195
 
1196
     struct str
1197
     {
1198
       unsigned int i0;
1199
     } s = { 0 };
1200
 
1201
     int
1202
     main ()
1203
     {
1204
       unsigned long x;
1205
 
1206
       x = 0x100000000;
1207
       x <<= (unsigned long) s.i0;
1208
       if (x == 0)
1209
         printf ("failed\n");
1210
       else
1211
         printf ("succeeded (%lx)\n", x);
1212
     }
1213
     */
1214
 
1215
  relocation >>= (bfd_vma) howto->rightshift;
1216
 
1217
  /* Shift everything up to where it's going to be used.  */
1218
  relocation <<= (bfd_vma) howto->bitpos;
1219
 
1220
  /* Wait for the day when all have the mask in them.  */
1221
 
1222
  /* What we do:
1223
     i instruction to be left alone
1224
     o offset within instruction
1225
     r relocation offset to apply
1226
     S src mask
1227
     D dst mask
1228
     N ~dst mask
1229
     A part 1
1230
     B part 2
1231
     R result
1232
 
1233
     Do this:
1234
     ((  i i i i i o o o o o  from bfd_get<size>
1235
     and           S S S S S) to get the size offset we want
1236
     +   r r r r r r r r r r) to get the final value to place
1237
     and           D D D D D  to chop to right size
1238
     -----------------------
1239
     =             A A A A A
1240
     And this:
1241
     (   i i i i i o o o o o  from bfd_get<size>
1242
     and N N N N N          ) get instruction
1243
     -----------------------
1244
     =   B B B B B
1245
 
1246
     And then:
1247
     (   B B B B B
1248
     or            A A A A A)
1249
     -----------------------
1250
     =   R R R R R R R R R R  put into bfd_put<size>
1251
     */
1252
 
1253
#define DOIT(x) \
1254
  x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) +  relocation) & howto->dst_mask))
1255
 
1256
  data = (bfd_byte *) data_start + (octets - data_start_offset);
1257
 
1258
  switch (howto->size)
1259
    {
1260
    case 0:
1261
      {
1262
        char x = bfd_get_8 (abfd, data);
1263
        DOIT (x);
1264
        bfd_put_8 (abfd, x, data);
1265
      }
1266
      break;
1267
 
1268
    case 1:
1269
      {
1270
        short x = bfd_get_16 (abfd, data);
1271
        DOIT (x);
1272
        bfd_put_16 (abfd, (bfd_vma) x, data);
1273
      }
1274
      break;
1275
    case 2:
1276
      {
1277
        long x = bfd_get_32 (abfd, data);
1278
        DOIT (x);
1279
        bfd_put_32 (abfd, (bfd_vma) x, data);
1280
      }
1281
      break;
1282
    case -2:
1283
      {
1284
        long x = bfd_get_32 (abfd, data);
1285
        relocation = -relocation;
1286
        DOIT (x);
1287
        bfd_put_32 (abfd, (bfd_vma) x, data);
1288
      }
1289
      break;
1290
 
1291
    case 3:
1292
      /* Do nothing */
1293
      break;
1294
 
1295
    case 4:
1296
      {
1297
        bfd_vma x = bfd_get_64 (abfd, data);
1298
        DOIT (x);
1299
        bfd_put_64 (abfd, x, data);
1300
      }
1301
      break;
1302
    default:
1303
      return bfd_reloc_other;
1304
    }
1305
 
1306
  return flag;
1307
}
1308
 
1309
/* This relocation routine is used by some of the backend linkers.
1310
   They do not construct asymbol or arelent structures, so there is no
1311
   reason for them to use bfd_perform_relocation.  Also,
1312
   bfd_perform_relocation is so hacked up it is easier to write a new
1313
   function than to try to deal with it.
1314
 
1315
   This routine does a final relocation.  Whether it is useful for a
1316
   relocatable link depends upon how the object format defines
1317
   relocations.
1318
 
1319
   FIXME: This routine ignores any special_function in the HOWTO,
1320
   since the existing special_function values have been written for
1321
   bfd_perform_relocation.
1322
 
1323
   HOWTO is the reloc howto information.
1324
   INPUT_BFD is the BFD which the reloc applies to.
1325
   INPUT_SECTION is the section which the reloc applies to.
1326
   CONTENTS is the contents of the section.
1327
   ADDRESS is the address of the reloc within INPUT_SECTION.
1328
   VALUE is the value of the symbol the reloc refers to.
1329
   ADDEND is the addend of the reloc.  */
1330
 
1331
bfd_reloc_status_type
1332
_bfd_final_link_relocate (reloc_howto_type *howto,
1333
                          bfd *input_bfd,
1334
                          asection *input_section,
1335
                          bfd_byte *contents,
1336
                          bfd_vma address,
1337
                          bfd_vma value,
1338
                          bfd_vma addend)
1339
{
1340
  bfd_vma relocation;
1341
 
1342
  /* Sanity check the address.  */
1343
  if (address > bfd_get_section_limit (input_bfd, input_section))
1344
    return bfd_reloc_outofrange;
1345
 
1346
  /* This function assumes that we are dealing with a basic relocation
1347
     against a symbol.  We want to compute the value of the symbol to
1348
     relocate to.  This is just VALUE, the value of the symbol, plus
1349
     ADDEND, any addend associated with the reloc.  */
1350
  relocation = value + addend;
1351
 
1352
  /* If the relocation is PC relative, we want to set RELOCATION to
1353
     the distance between the symbol (currently in RELOCATION) and the
1354
     location we are relocating.  Some targets (e.g., i386-aout)
1355
     arrange for the contents of the section to be the negative of the
1356
     offset of the location within the section; for such targets
1357
     pcrel_offset is FALSE.  Other targets (e.g., m88kbcs or ELF)
1358
     simply leave the contents of the section as zero; for such
1359
     targets pcrel_offset is TRUE.  If pcrel_offset is FALSE we do not
1360
     need to subtract out the offset of the location within the
1361
     section (which is just ADDRESS).  */
1362
  if (howto->pc_relative)
1363
    {
1364
      relocation -= (input_section->output_section->vma
1365
                     + input_section->output_offset);
1366
      if (howto->pcrel_offset)
1367
        relocation -= address;
1368
    }
1369
 
1370
  return _bfd_relocate_contents (howto, input_bfd, relocation,
1371
                                 contents + address);
1372
}
1373
 
1374
/* Relocate a given location using a given value and howto.  */
1375
 
1376
bfd_reloc_status_type
1377
_bfd_relocate_contents (reloc_howto_type *howto,
1378
                        bfd *input_bfd,
1379
                        bfd_vma relocation,
1380
                        bfd_byte *location)
1381
{
1382
  int size;
1383
  bfd_vma x = 0;
1384
  bfd_reloc_status_type flag;
1385
  unsigned int rightshift = howto->rightshift;
1386
  unsigned int bitpos = howto->bitpos;
1387
 
1388
  /* If the size is negative, negate RELOCATION.  This isn't very
1389
     general.  */
1390
  if (howto->size < 0)
1391
    relocation = -relocation;
1392
 
1393
  /* Get the value we are going to relocate.  */
1394
  size = bfd_get_reloc_size (howto);
1395
  switch (size)
1396
    {
1397
    default:
1398
    case 0:
1399
      abort ();
1400
    case 1:
1401
      x = bfd_get_8 (input_bfd, location);
1402
      break;
1403
    case 2:
1404
      x = bfd_get_16 (input_bfd, location);
1405
      break;
1406
    case 4:
1407
      x = bfd_get_32 (input_bfd, location);
1408
      break;
1409
    case 8:
1410
#ifdef BFD64
1411
      x = bfd_get_64 (input_bfd, location);
1412
#else
1413
      abort ();
1414
#endif
1415
      break;
1416
    }
1417
 
1418
  /* Check for overflow.  FIXME: We may drop bits during the addition
1419
     which we don't check for.  We must either check at every single
1420
     operation, which would be tedious, or we must do the computations
1421
     in a type larger than bfd_vma, which would be inefficient.  */
1422
  flag = bfd_reloc_ok;
1423
  if (howto->complain_on_overflow != complain_overflow_dont)
1424
    {
1425
      bfd_vma addrmask, fieldmask, signmask, ss;
1426
      bfd_vma a, b, sum;
1427
 
1428
      /* Get the values to be added together.  For signed and unsigned
1429
         relocations, we assume that all values should be truncated to
1430
         the size of an address.  For bitfields, all the bits matter.
1431
         See also bfd_check_overflow.  */
1432
      fieldmask = N_ONES (howto->bitsize);
1433
      signmask = ~fieldmask;
1434
      addrmask = (N_ONES (bfd_arch_bits_per_address (input_bfd))
1435
                  | (fieldmask << rightshift));
1436
      a = (relocation & addrmask) >> rightshift;
1437
      b = (x & howto->src_mask & addrmask) >> bitpos;
1438
      addrmask >>= rightshift;
1439
 
1440
      switch (howto->complain_on_overflow)
1441
        {
1442
        case complain_overflow_signed:
1443
          /* If any sign bits are set, all sign bits must be set.
1444
             That is, A must be a valid negative address after
1445
             shifting.  */
1446
          signmask = ~(fieldmask >> 1);
1447
          /* Fall thru */
1448
 
1449
        case complain_overflow_bitfield:
1450
          /* Much like the signed check, but for a field one bit
1451
             wider.  We allow a bitfield to represent numbers in the
1452
             range -2**n to 2**n-1, where n is the number of bits in the
1453
             field.  Note that when bfd_vma is 32 bits, a 32-bit reloc
1454
             can't overflow, which is exactly what we want.  */
1455
          ss = a & signmask;
1456
          if (ss != 0 && ss != (addrmask & signmask))
1457
            flag = bfd_reloc_overflow;
1458
 
1459
          /* We only need this next bit of code if the sign bit of B
1460
             is below the sign bit of A.  This would only happen if
1461
             SRC_MASK had fewer bits than BITSIZE.  Note that if
1462
             SRC_MASK has more bits than BITSIZE, we can get into
1463
             trouble; we would need to verify that B is in range, as
1464
             we do for A above.  */
1465
          ss = ((~howto->src_mask) >> 1) & howto->src_mask;
1466
          ss >>= bitpos;
1467
 
1468
          /* Set all the bits above the sign bit.  */
1469
          b = (b ^ ss) - ss;
1470
 
1471
          /* Now we can do the addition.  */
1472
          sum = a + b;
1473
 
1474
          /* See if the result has the correct sign.  Bits above the
1475
             sign bit are junk now; ignore them.  If the sum is
1476
             positive, make sure we did not have all negative inputs;
1477
             if the sum is negative, make sure we did not have all
1478
             positive inputs.  The test below looks only at the sign
1479
             bits, and it really just
1480
                 SIGN (A) == SIGN (B) && SIGN (A) != SIGN (SUM)
1481
 
1482
             We mask with addrmask here to explicitly allow an address
1483
             wrap-around.  The Linux kernel relies on it, and it is
1484
             the only way to write assembler code which can run when
1485
             loaded at a location 0x80000000 away from the location at
1486
             which it is linked.  */
1487
          if (((~(a ^ b)) & (a ^ sum)) & signmask & addrmask)
1488
            flag = bfd_reloc_overflow;
1489
          break;
1490
 
1491
        case complain_overflow_unsigned:
1492
          /* Checking for an unsigned overflow is relatively easy:
1493
             trim the addresses and add, and trim the result as well.
1494
             Overflow is normally indicated when the result does not
1495
             fit in the field.  However, we also need to consider the
1496
             case when, e.g., fieldmask is 0x7fffffff or smaller, an
1497
             input is 0x80000000, and bfd_vma is only 32 bits; then we
1498
             will get sum == 0, but there is an overflow, since the
1499
             inputs did not fit in the field.  Instead of doing a
1500
             separate test, we can check for this by or-ing in the
1501
             operands when testing for the sum overflowing its final
1502
             field.  */
1503
          sum = (a + b) & addrmask;
1504
          if ((a | b | sum) & signmask)
1505
            flag = bfd_reloc_overflow;
1506
          break;
1507
 
1508
        default:
1509
          abort ();
1510
        }
1511
    }
1512
 
1513
  /* Put RELOCATION in the right bits.  */
1514
  relocation >>= (bfd_vma) rightshift;
1515
  relocation <<= (bfd_vma) bitpos;
1516
 
1517
  /* Add RELOCATION to the right bits of X.  */
1518
  x = ((x & ~howto->dst_mask)
1519
       | (((x & howto->src_mask) + relocation) & howto->dst_mask));
1520
 
1521
  /* Put the relocated value back in the object file.  */
1522
  switch (size)
1523
    {
1524
    default:
1525
      abort ();
1526
    case 1:
1527
      bfd_put_8 (input_bfd, x, location);
1528
      break;
1529
    case 2:
1530
      bfd_put_16 (input_bfd, x, location);
1531
      break;
1532
    case 4:
1533
      bfd_put_32 (input_bfd, x, location);
1534
      break;
1535
    case 8:
1536
#ifdef BFD64
1537
      bfd_put_64 (input_bfd, x, location);
1538
#else
1539
      abort ();
1540
#endif
1541
      break;
1542
    }
1543
 
1544
  return flag;
1545
}
1546
 
1547
/* Clear a given location using a given howto, by applying a relocation value
1548
   of zero and discarding any in-place addend.  This is used for fixed-up
1549
   relocations against discarded symbols, to make ignorable debug or unwind
1550
   information more obvious.  */
1551
 
1552
void
1553
_bfd_clear_contents (reloc_howto_type *howto,
1554
                     bfd *input_bfd,
1555
                     bfd_byte *location)
1556
{
1557
  int size;
1558
  bfd_vma x = 0;
1559
 
1560
  /* Get the value we are going to relocate.  */
1561
  size = bfd_get_reloc_size (howto);
1562
  switch (size)
1563
    {
1564
    default:
1565
    case 0:
1566
      abort ();
1567
    case 1:
1568
      x = bfd_get_8 (input_bfd, location);
1569
      break;
1570
    case 2:
1571
      x = bfd_get_16 (input_bfd, location);
1572
      break;
1573
    case 4:
1574
      x = bfd_get_32 (input_bfd, location);
1575
      break;
1576
    case 8:
1577
#ifdef BFD64
1578
      x = bfd_get_64 (input_bfd, location);
1579
#else
1580
      abort ();
1581
#endif
1582
      break;
1583
    }
1584
 
1585
  /* Zero out the unwanted bits of X.  */
1586
  x &= ~howto->dst_mask;
1587
 
1588
  /* Put the relocated value back in the object file.  */
1589
  switch (size)
1590
    {
1591
    default:
1592
    case 0:
1593
      abort ();
1594
    case 1:
1595
      bfd_put_8 (input_bfd, x, location);
1596
      break;
1597
    case 2:
1598
      bfd_put_16 (input_bfd, x, location);
1599
      break;
1600
    case 4:
1601
      bfd_put_32 (input_bfd, x, location);
1602
      break;
1603
    case 8:
1604
#ifdef BFD64
1605
      bfd_put_64 (input_bfd, x, location);
1606
#else
1607
      abort ();
1608
#endif
1609
      break;
1610
    }
1611
}
1612
 
1613
/*
1614
DOCDD
1615
INODE
1616
        howto manager,  , typedef arelent, Relocations
1617
 
1618
SUBSECTION
1619
        The howto manager
1620
 
1621
        When an application wants to create a relocation, but doesn't
1622
        know what the target machine might call it, it can find out by
1623
        using this bit of code.
1624
 
1625
*/
1626
 
1627
/*
1628
TYPEDEF
1629
        bfd_reloc_code_type
1630
 
1631
DESCRIPTION
1632
        The insides of a reloc code.  The idea is that, eventually, there
1633
        will be one enumerator for every type of relocation we ever do.
1634
        Pass one of these values to <<bfd_reloc_type_lookup>>, and it'll
1635
        return a howto pointer.
1636
 
1637
        This does mean that the application must determine the correct
1638
        enumerator value; you can't get a howto pointer from a random set
1639
        of attributes.
1640
 
1641
SENUM
1642
   bfd_reloc_code_real
1643
 
1644
ENUM
1645
  BFD_RELOC_64
1646
ENUMX
1647
  BFD_RELOC_32
1648
ENUMX
1649
  BFD_RELOC_26
1650
ENUMX
1651
  BFD_RELOC_24
1652
ENUMX
1653
  BFD_RELOC_16
1654
ENUMX
1655
  BFD_RELOC_14
1656
ENUMX
1657
  BFD_RELOC_8
1658
ENUMDOC
1659
  Basic absolute relocations of N bits.
1660
 
1661
ENUM
1662
  BFD_RELOC_64_PCREL
1663
ENUMX
1664
  BFD_RELOC_32_PCREL
1665
ENUMX
1666
  BFD_RELOC_24_PCREL
1667
ENUMX
1668
  BFD_RELOC_16_PCREL
1669
ENUMX
1670
  BFD_RELOC_12_PCREL
1671
ENUMX
1672
  BFD_RELOC_8_PCREL
1673
ENUMDOC
1674
  PC-relative relocations.  Sometimes these are relative to the address
1675
of the relocation itself; sometimes they are relative to the start of
1676
the section containing the relocation.  It depends on the specific target.
1677
 
1678
The 24-bit relocation is used in some Intel 960 configurations.
1679
 
1680
ENUM
1681
  BFD_RELOC_32_SECREL
1682
ENUMDOC
1683
  Section relative relocations.  Some targets need this for DWARF2.
1684
 
1685
ENUM
1686
  BFD_RELOC_32_GOT_PCREL
1687
ENUMX
1688
  BFD_RELOC_16_GOT_PCREL
1689
ENUMX
1690
  BFD_RELOC_8_GOT_PCREL
1691
ENUMX
1692
  BFD_RELOC_32_GOTOFF
1693
ENUMX
1694
  BFD_RELOC_16_GOTOFF
1695
ENUMX
1696
  BFD_RELOC_LO16_GOTOFF
1697
ENUMX
1698
  BFD_RELOC_HI16_GOTOFF
1699
ENUMX
1700
  BFD_RELOC_HI16_S_GOTOFF
1701
ENUMX
1702
  BFD_RELOC_8_GOTOFF
1703
ENUMX
1704
  BFD_RELOC_64_PLT_PCREL
1705
ENUMX
1706
  BFD_RELOC_32_PLT_PCREL
1707
ENUMX
1708
  BFD_RELOC_24_PLT_PCREL
1709
ENUMX
1710
  BFD_RELOC_16_PLT_PCREL
1711
ENUMX
1712
  BFD_RELOC_8_PLT_PCREL
1713
ENUMX
1714
  BFD_RELOC_64_PLTOFF
1715
ENUMX
1716
  BFD_RELOC_32_PLTOFF
1717
ENUMX
1718
  BFD_RELOC_16_PLTOFF
1719
ENUMX
1720
  BFD_RELOC_LO16_PLTOFF
1721
ENUMX
1722
  BFD_RELOC_HI16_PLTOFF
1723
ENUMX
1724
  BFD_RELOC_HI16_S_PLTOFF
1725
ENUMX
1726
  BFD_RELOC_8_PLTOFF
1727
ENUMDOC
1728
  For ELF.
1729
 
1730
ENUM
1731
  BFD_RELOC_68K_GLOB_DAT
1732
ENUMX
1733
  BFD_RELOC_68K_JMP_SLOT
1734
ENUMX
1735
  BFD_RELOC_68K_RELATIVE
1736
ENUMX
1737
  BFD_RELOC_68K_TLS_GD32
1738
ENUMX
1739
  BFD_RELOC_68K_TLS_GD16
1740
ENUMX
1741
  BFD_RELOC_68K_TLS_GD8
1742
ENUMX
1743
  BFD_RELOC_68K_TLS_LDM32
1744
ENUMX
1745
  BFD_RELOC_68K_TLS_LDM16
1746
ENUMX
1747
  BFD_RELOC_68K_TLS_LDM8
1748
ENUMX
1749
  BFD_RELOC_68K_TLS_LDO32
1750
ENUMX
1751
  BFD_RELOC_68K_TLS_LDO16
1752
ENUMX
1753
  BFD_RELOC_68K_TLS_LDO8
1754
ENUMX
1755
  BFD_RELOC_68K_TLS_IE32
1756
ENUMX
1757
  BFD_RELOC_68K_TLS_IE16
1758
ENUMX
1759
  BFD_RELOC_68K_TLS_IE8
1760
ENUMX
1761
  BFD_RELOC_68K_TLS_LE32
1762
ENUMX
1763
  BFD_RELOC_68K_TLS_LE16
1764
ENUMX
1765
  BFD_RELOC_68K_TLS_LE8
1766
ENUMDOC
1767
  Relocations used by 68K ELF.
1768
 
1769
ENUM
1770
  BFD_RELOC_32_BASEREL
1771
ENUMX
1772
  BFD_RELOC_16_BASEREL
1773
ENUMX
1774
  BFD_RELOC_LO16_BASEREL
1775
ENUMX
1776
  BFD_RELOC_HI16_BASEREL
1777
ENUMX
1778
  BFD_RELOC_HI16_S_BASEREL
1779
ENUMX
1780
  BFD_RELOC_8_BASEREL
1781
ENUMX
1782
  BFD_RELOC_RVA
1783
ENUMDOC
1784
  Linkage-table relative.
1785
 
1786
ENUM
1787
  BFD_RELOC_8_FFnn
1788
ENUMDOC
1789
  Absolute 8-bit relocation, but used to form an address like 0xFFnn.
1790
 
1791
ENUM
1792
  BFD_RELOC_32_PCREL_S2
1793
ENUMX
1794
  BFD_RELOC_16_PCREL_S2
1795
ENUMX
1796
  BFD_RELOC_23_PCREL_S2
1797 404 jeremybenn
ENUMX
1798
  BFD_RELOC_28_PCREL_S2
1799 330 jeremybenn
ENUMDOC
1800
  These PC-relative relocations are stored as word displacements --
1801
i.e., byte displacements shifted right two bits.  The 30-bit word
1802
displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1803
SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
1804
signed 16-bit displacement is used on the MIPS, and the 23-bit
1805
displacement is used on the Alpha.
1806
 
1807
ENUM
1808
  BFD_RELOC_HI22
1809
ENUMX
1810
  BFD_RELOC_LO10
1811
ENUMDOC
1812
  High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1813
the target word.  These are used on the SPARC.
1814
 
1815
ENUM
1816
  BFD_RELOC_GPREL16
1817
ENUMX
1818
  BFD_RELOC_GPREL32
1819
ENUMDOC
1820
  For systems that allocate a Global Pointer register, these are
1821
displacements off that register.  These relocation types are
1822
handled specially, because the value the register will have is
1823
decided relatively late.
1824
 
1825
ENUM
1826
  BFD_RELOC_I960_CALLJ
1827
ENUMDOC
1828
  Reloc types used for i960/b.out.
1829
 
1830
ENUM
1831
  BFD_RELOC_NONE
1832
ENUMX
1833
  BFD_RELOC_SPARC_WDISP22
1834
ENUMX
1835
  BFD_RELOC_SPARC22
1836
ENUMX
1837
  BFD_RELOC_SPARC13
1838
ENUMX
1839
  BFD_RELOC_SPARC_GOT10
1840
ENUMX
1841
  BFD_RELOC_SPARC_GOT13
1842
ENUMX
1843
  BFD_RELOC_SPARC_GOT22
1844
ENUMX
1845
  BFD_RELOC_SPARC_PC10
1846
ENUMX
1847
  BFD_RELOC_SPARC_PC22
1848
ENUMX
1849
  BFD_RELOC_SPARC_WPLT30
1850
ENUMX
1851
  BFD_RELOC_SPARC_COPY
1852
ENUMX
1853
  BFD_RELOC_SPARC_GLOB_DAT
1854
ENUMX
1855
  BFD_RELOC_SPARC_JMP_SLOT
1856
ENUMX
1857
  BFD_RELOC_SPARC_RELATIVE
1858
ENUMX
1859
  BFD_RELOC_SPARC_UA16
1860
ENUMX
1861
  BFD_RELOC_SPARC_UA32
1862
ENUMX
1863
  BFD_RELOC_SPARC_UA64
1864
ENUMX
1865
  BFD_RELOC_SPARC_GOTDATA_HIX22
1866
ENUMX
1867
  BFD_RELOC_SPARC_GOTDATA_LOX10
1868
ENUMX
1869
  BFD_RELOC_SPARC_GOTDATA_OP_HIX22
1870
ENUMX
1871
  BFD_RELOC_SPARC_GOTDATA_OP_LOX10
1872
ENUMX
1873
  BFD_RELOC_SPARC_GOTDATA_OP
1874
ENUMX
1875
  BFD_RELOC_SPARC_JMP_IREL
1876
ENUMX
1877
  BFD_RELOC_SPARC_IRELATIVE
1878
ENUMDOC
1879
  SPARC ELF relocations.  There is probably some overlap with other
1880
  relocation types already defined.
1881
 
1882
ENUM
1883
  BFD_RELOC_SPARC_BASE13
1884
ENUMX
1885
  BFD_RELOC_SPARC_BASE22
1886
ENUMDOC
1887
  I think these are specific to SPARC a.out (e.g., Sun 4).
1888
 
1889
ENUMEQ
1890
  BFD_RELOC_SPARC_64
1891
  BFD_RELOC_64
1892
ENUMX
1893
  BFD_RELOC_SPARC_10
1894
ENUMX
1895
  BFD_RELOC_SPARC_11
1896
ENUMX
1897
  BFD_RELOC_SPARC_OLO10
1898
ENUMX
1899
  BFD_RELOC_SPARC_HH22
1900
ENUMX
1901
  BFD_RELOC_SPARC_HM10
1902
ENUMX
1903
  BFD_RELOC_SPARC_LM22
1904
ENUMX
1905
  BFD_RELOC_SPARC_PC_HH22
1906
ENUMX
1907
  BFD_RELOC_SPARC_PC_HM10
1908
ENUMX
1909
  BFD_RELOC_SPARC_PC_LM22
1910
ENUMX
1911
  BFD_RELOC_SPARC_WDISP16
1912
ENUMX
1913
  BFD_RELOC_SPARC_WDISP19
1914
ENUMX
1915
  BFD_RELOC_SPARC_7
1916
ENUMX
1917
  BFD_RELOC_SPARC_6
1918
ENUMX
1919
  BFD_RELOC_SPARC_5
1920
ENUMEQX
1921
  BFD_RELOC_SPARC_DISP64
1922
  BFD_RELOC_64_PCREL
1923
ENUMX
1924
  BFD_RELOC_SPARC_PLT32
1925
ENUMX
1926
  BFD_RELOC_SPARC_PLT64
1927
ENUMX
1928
  BFD_RELOC_SPARC_HIX22
1929
ENUMX
1930
  BFD_RELOC_SPARC_LOX10
1931
ENUMX
1932
  BFD_RELOC_SPARC_H44
1933
ENUMX
1934
  BFD_RELOC_SPARC_M44
1935
ENUMX
1936
  BFD_RELOC_SPARC_L44
1937
ENUMX
1938
  BFD_RELOC_SPARC_REGISTER
1939
ENUMDOC
1940
  SPARC64 relocations
1941
 
1942
ENUM
1943
  BFD_RELOC_SPARC_REV32
1944
ENUMDOC
1945
  SPARC little endian relocation
1946
ENUM
1947
  BFD_RELOC_SPARC_TLS_GD_HI22
1948
ENUMX
1949
  BFD_RELOC_SPARC_TLS_GD_LO10
1950
ENUMX
1951
  BFD_RELOC_SPARC_TLS_GD_ADD
1952
ENUMX
1953
  BFD_RELOC_SPARC_TLS_GD_CALL
1954
ENUMX
1955
  BFD_RELOC_SPARC_TLS_LDM_HI22
1956
ENUMX
1957
  BFD_RELOC_SPARC_TLS_LDM_LO10
1958
ENUMX
1959
  BFD_RELOC_SPARC_TLS_LDM_ADD
1960
ENUMX
1961
  BFD_RELOC_SPARC_TLS_LDM_CALL
1962
ENUMX
1963
  BFD_RELOC_SPARC_TLS_LDO_HIX22
1964
ENUMX
1965
  BFD_RELOC_SPARC_TLS_LDO_LOX10
1966
ENUMX
1967
  BFD_RELOC_SPARC_TLS_LDO_ADD
1968
ENUMX
1969
  BFD_RELOC_SPARC_TLS_IE_HI22
1970
ENUMX
1971
  BFD_RELOC_SPARC_TLS_IE_LO10
1972
ENUMX
1973
  BFD_RELOC_SPARC_TLS_IE_LD
1974
ENUMX
1975
  BFD_RELOC_SPARC_TLS_IE_LDX
1976
ENUMX
1977
  BFD_RELOC_SPARC_TLS_IE_ADD
1978
ENUMX
1979
  BFD_RELOC_SPARC_TLS_LE_HIX22
1980
ENUMX
1981
  BFD_RELOC_SPARC_TLS_LE_LOX10
1982
ENUMX
1983
  BFD_RELOC_SPARC_TLS_DTPMOD32
1984
ENUMX
1985
  BFD_RELOC_SPARC_TLS_DTPMOD64
1986
ENUMX
1987
  BFD_RELOC_SPARC_TLS_DTPOFF32
1988
ENUMX
1989
  BFD_RELOC_SPARC_TLS_DTPOFF64
1990
ENUMX
1991
  BFD_RELOC_SPARC_TLS_TPOFF32
1992
ENUMX
1993
  BFD_RELOC_SPARC_TLS_TPOFF64
1994
ENUMDOC
1995
  SPARC TLS relocations
1996
 
1997
ENUM
1998
  BFD_RELOC_SPU_IMM7
1999
ENUMX
2000
  BFD_RELOC_SPU_IMM8
2001
ENUMX
2002
  BFD_RELOC_SPU_IMM10
2003
ENUMX
2004
  BFD_RELOC_SPU_IMM10W
2005
ENUMX
2006
  BFD_RELOC_SPU_IMM16
2007
ENUMX
2008
  BFD_RELOC_SPU_IMM16W
2009
ENUMX
2010
  BFD_RELOC_SPU_IMM18
2011
ENUMX
2012
  BFD_RELOC_SPU_PCREL9a
2013
ENUMX
2014
  BFD_RELOC_SPU_PCREL9b
2015
ENUMX
2016
  BFD_RELOC_SPU_PCREL16
2017
ENUMX
2018
  BFD_RELOC_SPU_LO16
2019
ENUMX
2020
  BFD_RELOC_SPU_HI16
2021
ENUMX
2022
  BFD_RELOC_SPU_PPU32
2023
ENUMX
2024
  BFD_RELOC_SPU_PPU64
2025
ENUMX
2026
  BFD_RELOC_SPU_ADD_PIC
2027
ENUMDOC
2028
  SPU Relocations.
2029
 
2030
ENUM
2031
  BFD_RELOC_ALPHA_GPDISP_HI16
2032
ENUMDOC
2033
  Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
2034
     "addend" in some special way.
2035
  For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
2036
     writing; when reading, it will be the absolute section symbol.  The
2037
     addend is the displacement in bytes of the "lda" instruction from
2038
     the "ldah" instruction (which is at the address of this reloc).
2039
ENUM
2040
  BFD_RELOC_ALPHA_GPDISP_LO16
2041
ENUMDOC
2042
  For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
2043
     with GPDISP_HI16 relocs.  The addend is ignored when writing the
2044
     relocations out, and is filled in with the file's GP value on
2045
     reading, for convenience.
2046
 
2047
ENUM
2048
  BFD_RELOC_ALPHA_GPDISP
2049
ENUMDOC
2050
  The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
2051
     relocation except that there is no accompanying GPDISP_LO16
2052
     relocation.
2053
 
2054
ENUM
2055
  BFD_RELOC_ALPHA_LITERAL
2056
ENUMX
2057
  BFD_RELOC_ALPHA_ELF_LITERAL
2058
ENUMX
2059
  BFD_RELOC_ALPHA_LITUSE
2060
ENUMDOC
2061
  The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
2062
     the assembler turns it into a LDQ instruction to load the address of
2063
     the symbol, and then fills in a register in the real instruction.
2064
 
2065
     The LITERAL reloc, at the LDQ instruction, refers to the .lita
2066
     section symbol.  The addend is ignored when writing, but is filled
2067
     in with the file's GP value on reading, for convenience, as with the
2068
     GPDISP_LO16 reloc.
2069
 
2070
     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
2071
     It should refer to the symbol to be referenced, as with 16_GOTOFF,
2072
     but it generates output not based on the position within the .got
2073
     section, but relative to the GP value chosen for the file during the
2074
     final link stage.
2075
 
2076
     The LITUSE reloc, on the instruction using the loaded address, gives
2077
     information to the linker that it might be able to use to optimize
2078
     away some literal section references.  The symbol is ignored (read
2079
     as the absolute section symbol), and the "addend" indicates the type
2080
     of instruction using the register:
2081
              1 - "memory" fmt insn
2082
              2 - byte-manipulation (byte offset reg)
2083
              3 - jsr (target of branch)
2084
 
2085
ENUM
2086
  BFD_RELOC_ALPHA_HINT
2087
ENUMDOC
2088
  The HINT relocation indicates a value that should be filled into the
2089
     "hint" field of a jmp/jsr/ret instruction, for possible branch-
2090
     prediction logic which may be provided on some processors.
2091
 
2092
ENUM
2093
  BFD_RELOC_ALPHA_LINKAGE
2094
ENUMDOC
2095
  The LINKAGE relocation outputs a linkage pair in the object file,
2096
     which is filled by the linker.
2097
 
2098
ENUM
2099
  BFD_RELOC_ALPHA_CODEADDR
2100
ENUMDOC
2101
  The CODEADDR relocation outputs a STO_CA in the object file,
2102
     which is filled by the linker.
2103
 
2104
ENUM
2105
  BFD_RELOC_ALPHA_GPREL_HI16
2106
ENUMX
2107
  BFD_RELOC_ALPHA_GPREL_LO16
2108
ENUMDOC
2109
  The GPREL_HI/LO relocations together form a 32-bit offset from the
2110
     GP register.
2111
 
2112
ENUM
2113
  BFD_RELOC_ALPHA_BRSGP
2114
ENUMDOC
2115
  Like BFD_RELOC_23_PCREL_S2, except that the source and target must
2116
  share a common GP, and the target address is adjusted for
2117
  STO_ALPHA_STD_GPLOAD.
2118
 
2119
ENUM
2120
  BFD_RELOC_ALPHA_NOP
2121
ENUMDOC
2122
  The NOP relocation outputs a NOP if the longword displacement
2123
     between two procedure entry points is < 2^21.
2124
 
2125
ENUM
2126
  BFD_RELOC_ALPHA_BSR
2127
ENUMDOC
2128
  The BSR relocation outputs a BSR if the longword displacement
2129
     between two procedure entry points is < 2^21.
2130
 
2131
ENUM
2132
  BFD_RELOC_ALPHA_LDA
2133
ENUMDOC
2134
  The LDA relocation outputs a LDA if the longword displacement
2135
     between two procedure entry points is < 2^16.
2136
 
2137
ENUM
2138
  BFD_RELOC_ALPHA_BOH
2139
ENUMDOC
2140
  The BOH relocation outputs a BSR if the longword displacement
2141
     between two procedure entry points is < 2^21, or else a hint.
2142
 
2143
ENUM
2144
  BFD_RELOC_ALPHA_TLSGD
2145
ENUMX
2146
  BFD_RELOC_ALPHA_TLSLDM
2147
ENUMX
2148
  BFD_RELOC_ALPHA_DTPMOD64
2149
ENUMX
2150
  BFD_RELOC_ALPHA_GOTDTPREL16
2151
ENUMX
2152
  BFD_RELOC_ALPHA_DTPREL64
2153
ENUMX
2154
  BFD_RELOC_ALPHA_DTPREL_HI16
2155
ENUMX
2156
  BFD_RELOC_ALPHA_DTPREL_LO16
2157
ENUMX
2158
  BFD_RELOC_ALPHA_DTPREL16
2159
ENUMX
2160
  BFD_RELOC_ALPHA_GOTTPREL16
2161
ENUMX
2162
  BFD_RELOC_ALPHA_TPREL64
2163
ENUMX
2164
  BFD_RELOC_ALPHA_TPREL_HI16
2165
ENUMX
2166
  BFD_RELOC_ALPHA_TPREL_LO16
2167
ENUMX
2168
  BFD_RELOC_ALPHA_TPREL16
2169
ENUMDOC
2170
  Alpha thread-local storage relocations.
2171
 
2172
ENUM
2173
  BFD_RELOC_MIPS_JMP
2174
ENUMDOC
2175
  Bits 27..2 of the relocation address shifted right 2 bits;
2176
     simple reloc otherwise.
2177
 
2178
ENUM
2179
  BFD_RELOC_MIPS16_JMP
2180
ENUMDOC
2181
  The MIPS16 jump instruction.
2182
 
2183
ENUM
2184
  BFD_RELOC_MIPS16_GPREL
2185
ENUMDOC
2186
  MIPS16 GP relative reloc.
2187
 
2188
ENUM
2189
  BFD_RELOC_HI16
2190
ENUMDOC
2191
  High 16 bits of 32-bit value; simple reloc.
2192
ENUM
2193
  BFD_RELOC_HI16_S
2194
ENUMDOC
2195
  High 16 bits of 32-bit value but the low 16 bits will be sign
2196
     extended and added to form the final result.  If the low 16
2197
     bits form a negative number, we need to add one to the high value
2198
     to compensate for the borrow when the low bits are added.
2199
ENUM
2200
  BFD_RELOC_LO16
2201
ENUMDOC
2202
  Low 16 bits.
2203
 
2204
ENUM
2205
  BFD_RELOC_HI16_PCREL
2206
ENUMDOC
2207
  High 16 bits of 32-bit pc-relative value
2208
ENUM
2209
  BFD_RELOC_HI16_S_PCREL
2210
ENUMDOC
2211
  High 16 bits of 32-bit pc-relative value, adjusted
2212
ENUM
2213
  BFD_RELOC_LO16_PCREL
2214
ENUMDOC
2215
  Low 16 bits of pc-relative value
2216
 
2217
ENUM
2218
  BFD_RELOC_MIPS16_GOT16
2219
ENUMX
2220
  BFD_RELOC_MIPS16_CALL16
2221
ENUMDOC
2222
  Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
2223
     16-bit immediate fields
2224
ENUM
2225
  BFD_RELOC_MIPS16_HI16
2226
ENUMDOC
2227
  MIPS16 high 16 bits of 32-bit value.
2228
ENUM
2229
  BFD_RELOC_MIPS16_HI16_S
2230
ENUMDOC
2231
  MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
2232
     extended and added to form the final result.  If the low 16
2233
     bits form a negative number, we need to add one to the high value
2234
     to compensate for the borrow when the low bits are added.
2235
ENUM
2236
  BFD_RELOC_MIPS16_LO16
2237
ENUMDOC
2238
  MIPS16 low 16 bits.
2239
 
2240
ENUM
2241
  BFD_RELOC_MIPS_LITERAL
2242
ENUMDOC
2243
  Relocation against a MIPS literal section.
2244
 
2245
ENUM
2246
  BFD_RELOC_MIPS_GOT16
2247
ENUMX
2248
  BFD_RELOC_MIPS_CALL16
2249
ENUMX
2250
  BFD_RELOC_MIPS_GOT_HI16
2251
ENUMX
2252
  BFD_RELOC_MIPS_GOT_LO16
2253
ENUMX
2254
  BFD_RELOC_MIPS_CALL_HI16
2255
ENUMX
2256
  BFD_RELOC_MIPS_CALL_LO16
2257
ENUMX
2258
  BFD_RELOC_MIPS_SUB
2259
ENUMX
2260
  BFD_RELOC_MIPS_GOT_PAGE
2261
ENUMX
2262
  BFD_RELOC_MIPS_GOT_OFST
2263
ENUMX
2264
  BFD_RELOC_MIPS_GOT_DISP
2265
ENUMX
2266
  BFD_RELOC_MIPS_SHIFT5
2267
ENUMX
2268
  BFD_RELOC_MIPS_SHIFT6
2269
ENUMX
2270
  BFD_RELOC_MIPS_INSERT_A
2271
ENUMX
2272
  BFD_RELOC_MIPS_INSERT_B
2273
ENUMX
2274
  BFD_RELOC_MIPS_DELETE
2275
ENUMX
2276
  BFD_RELOC_MIPS_HIGHEST
2277
ENUMX
2278
  BFD_RELOC_MIPS_HIGHER
2279
ENUMX
2280
  BFD_RELOC_MIPS_SCN_DISP
2281
ENUMX
2282
  BFD_RELOC_MIPS_REL16
2283
ENUMX
2284
  BFD_RELOC_MIPS_RELGOT
2285
ENUMX
2286
  BFD_RELOC_MIPS_JALR
2287
ENUMX
2288
  BFD_RELOC_MIPS_TLS_DTPMOD32
2289
ENUMX
2290
  BFD_RELOC_MIPS_TLS_DTPREL32
2291
ENUMX
2292
  BFD_RELOC_MIPS_TLS_DTPMOD64
2293
ENUMX
2294
  BFD_RELOC_MIPS_TLS_DTPREL64
2295
ENUMX
2296
  BFD_RELOC_MIPS_TLS_GD
2297
ENUMX
2298
  BFD_RELOC_MIPS_TLS_LDM
2299
ENUMX
2300
  BFD_RELOC_MIPS_TLS_DTPREL_HI16
2301
ENUMX
2302
  BFD_RELOC_MIPS_TLS_DTPREL_LO16
2303
ENUMX
2304
  BFD_RELOC_MIPS_TLS_GOTTPREL
2305
ENUMX
2306
  BFD_RELOC_MIPS_TLS_TPREL32
2307
ENUMX
2308
  BFD_RELOC_MIPS_TLS_TPREL64
2309
ENUMX
2310
  BFD_RELOC_MIPS_TLS_TPREL_HI16
2311
ENUMX
2312
  BFD_RELOC_MIPS_TLS_TPREL_LO16
2313
ENUMDOC
2314
  MIPS ELF relocations.
2315
COMMENT
2316
 
2317
ENUM
2318
  BFD_RELOC_MIPS_COPY
2319
ENUMX
2320
  BFD_RELOC_MIPS_JUMP_SLOT
2321
ENUMDOC
2322
  MIPS ELF relocations (VxWorks and PLT extensions).
2323
COMMENT
2324
 
2325
ENUM
2326
  BFD_RELOC_MOXIE_10_PCREL
2327
ENUMDOC
2328
  Moxie ELF relocations.
2329
COMMENT
2330
 
2331
ENUM
2332
  BFD_RELOC_FRV_LABEL16
2333
ENUMX
2334
  BFD_RELOC_FRV_LABEL24
2335
ENUMX
2336
  BFD_RELOC_FRV_LO16
2337
ENUMX
2338
  BFD_RELOC_FRV_HI16
2339
ENUMX
2340
  BFD_RELOC_FRV_GPREL12
2341
ENUMX
2342
  BFD_RELOC_FRV_GPRELU12
2343
ENUMX
2344
  BFD_RELOC_FRV_GPREL32
2345
ENUMX
2346
  BFD_RELOC_FRV_GPRELHI
2347
ENUMX
2348
  BFD_RELOC_FRV_GPRELLO
2349
ENUMX
2350
  BFD_RELOC_FRV_GOT12
2351
ENUMX
2352
  BFD_RELOC_FRV_GOTHI
2353
ENUMX
2354
  BFD_RELOC_FRV_GOTLO
2355
ENUMX
2356
  BFD_RELOC_FRV_FUNCDESC
2357
ENUMX
2358
  BFD_RELOC_FRV_FUNCDESC_GOT12
2359
ENUMX
2360
  BFD_RELOC_FRV_FUNCDESC_GOTHI
2361
ENUMX
2362
  BFD_RELOC_FRV_FUNCDESC_GOTLO
2363
ENUMX
2364
  BFD_RELOC_FRV_FUNCDESC_VALUE
2365
ENUMX
2366
  BFD_RELOC_FRV_FUNCDESC_GOTOFF12
2367
ENUMX
2368
  BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
2369
ENUMX
2370
  BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
2371
ENUMX
2372
  BFD_RELOC_FRV_GOTOFF12
2373
ENUMX
2374
  BFD_RELOC_FRV_GOTOFFHI
2375
ENUMX
2376
  BFD_RELOC_FRV_GOTOFFLO
2377
ENUMX
2378
  BFD_RELOC_FRV_GETTLSOFF
2379
ENUMX
2380
  BFD_RELOC_FRV_TLSDESC_VALUE
2381
ENUMX
2382
  BFD_RELOC_FRV_GOTTLSDESC12
2383
ENUMX
2384
  BFD_RELOC_FRV_GOTTLSDESCHI
2385
ENUMX
2386
  BFD_RELOC_FRV_GOTTLSDESCLO
2387
ENUMX
2388
  BFD_RELOC_FRV_TLSMOFF12
2389
ENUMX
2390
  BFD_RELOC_FRV_TLSMOFFHI
2391
ENUMX
2392
  BFD_RELOC_FRV_TLSMOFFLO
2393
ENUMX
2394
  BFD_RELOC_FRV_GOTTLSOFF12
2395
ENUMX
2396
  BFD_RELOC_FRV_GOTTLSOFFHI
2397
ENUMX
2398
  BFD_RELOC_FRV_GOTTLSOFFLO
2399
ENUMX
2400
  BFD_RELOC_FRV_TLSOFF
2401
ENUMX
2402
  BFD_RELOC_FRV_TLSDESC_RELAX
2403
ENUMX
2404
  BFD_RELOC_FRV_GETTLSOFF_RELAX
2405
ENUMX
2406
  BFD_RELOC_FRV_TLSOFF_RELAX
2407
ENUMX
2408
  BFD_RELOC_FRV_TLSMOFF
2409
ENUMDOC
2410
  Fujitsu Frv Relocations.
2411
COMMENT
2412
 
2413
ENUM
2414
  BFD_RELOC_MN10300_GOTOFF24
2415
ENUMDOC
2416
  This is a 24bit GOT-relative reloc for the mn10300.
2417
ENUM
2418
  BFD_RELOC_MN10300_GOT32
2419
ENUMDOC
2420
  This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
2421
  in the instruction.
2422
ENUM
2423
  BFD_RELOC_MN10300_GOT24
2424
ENUMDOC
2425
  This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
2426
  in the instruction.
2427
ENUM
2428
  BFD_RELOC_MN10300_GOT16
2429
ENUMDOC
2430
  This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
2431
  in the instruction.
2432
ENUM
2433
  BFD_RELOC_MN10300_COPY
2434
ENUMDOC
2435
  Copy symbol at runtime.
2436
ENUM
2437
  BFD_RELOC_MN10300_GLOB_DAT
2438
ENUMDOC
2439
  Create GOT entry.
2440
ENUM
2441
  BFD_RELOC_MN10300_JMP_SLOT
2442
ENUMDOC
2443
  Create PLT entry.
2444
ENUM
2445
  BFD_RELOC_MN10300_RELATIVE
2446
ENUMDOC
2447
  Adjust by program base.
2448
ENUM
2449
  BFD_RELOC_MN10300_SYM_DIFF
2450
ENUMDOC
2451
  Together with another reloc targeted at the same location,
2452
  allows for a value that is the difference of two symbols
2453
  in the same section.
2454
ENUM
2455
  BFD_RELOC_MN10300_ALIGN
2456
ENUMDOC
2457
  The addend of this reloc is an alignment power that must
2458
  be honoured at the offset's location, regardless of linker
2459
  relaxation.
2460
COMMENT
2461
 
2462
ENUM
2463
  BFD_RELOC_386_GOT32
2464
ENUMX
2465
  BFD_RELOC_386_PLT32
2466
ENUMX
2467
  BFD_RELOC_386_COPY
2468
ENUMX
2469
  BFD_RELOC_386_GLOB_DAT
2470
ENUMX
2471
  BFD_RELOC_386_JUMP_SLOT
2472
ENUMX
2473
  BFD_RELOC_386_RELATIVE
2474
ENUMX
2475
  BFD_RELOC_386_GOTOFF
2476
ENUMX
2477
  BFD_RELOC_386_GOTPC
2478
ENUMX
2479
  BFD_RELOC_386_TLS_TPOFF
2480
ENUMX
2481
  BFD_RELOC_386_TLS_IE
2482
ENUMX
2483
  BFD_RELOC_386_TLS_GOTIE
2484
ENUMX
2485
  BFD_RELOC_386_TLS_LE
2486
ENUMX
2487
  BFD_RELOC_386_TLS_GD
2488
ENUMX
2489
  BFD_RELOC_386_TLS_LDM
2490
ENUMX
2491
  BFD_RELOC_386_TLS_LDO_32
2492
ENUMX
2493
  BFD_RELOC_386_TLS_IE_32
2494
ENUMX
2495
  BFD_RELOC_386_TLS_LE_32
2496
ENUMX
2497
  BFD_RELOC_386_TLS_DTPMOD32
2498
ENUMX
2499
  BFD_RELOC_386_TLS_DTPOFF32
2500
ENUMX
2501
  BFD_RELOC_386_TLS_TPOFF32
2502
ENUMX
2503
  BFD_RELOC_386_TLS_GOTDESC
2504
ENUMX
2505
  BFD_RELOC_386_TLS_DESC_CALL
2506
ENUMX
2507
  BFD_RELOC_386_TLS_DESC
2508
ENUMX
2509
  BFD_RELOC_386_IRELATIVE
2510
ENUMDOC
2511
  i386/elf relocations
2512
 
2513
ENUM
2514
  BFD_RELOC_X86_64_GOT32
2515
ENUMX
2516
  BFD_RELOC_X86_64_PLT32
2517
ENUMX
2518
  BFD_RELOC_X86_64_COPY
2519
ENUMX
2520
  BFD_RELOC_X86_64_GLOB_DAT
2521
ENUMX
2522
  BFD_RELOC_X86_64_JUMP_SLOT
2523
ENUMX
2524
  BFD_RELOC_X86_64_RELATIVE
2525
ENUMX
2526
  BFD_RELOC_X86_64_GOTPCREL
2527
ENUMX
2528
  BFD_RELOC_X86_64_32S
2529
ENUMX
2530
  BFD_RELOC_X86_64_DTPMOD64
2531
ENUMX
2532
  BFD_RELOC_X86_64_DTPOFF64
2533
ENUMX
2534
  BFD_RELOC_X86_64_TPOFF64
2535
ENUMX
2536
  BFD_RELOC_X86_64_TLSGD
2537
ENUMX
2538
  BFD_RELOC_X86_64_TLSLD
2539
ENUMX
2540
  BFD_RELOC_X86_64_DTPOFF32
2541
ENUMX
2542
  BFD_RELOC_X86_64_GOTTPOFF
2543
ENUMX
2544
  BFD_RELOC_X86_64_TPOFF32
2545
ENUMX
2546
  BFD_RELOC_X86_64_GOTOFF64
2547
ENUMX
2548
  BFD_RELOC_X86_64_GOTPC32
2549
ENUMX
2550
  BFD_RELOC_X86_64_GOT64
2551
ENUMX
2552
  BFD_RELOC_X86_64_GOTPCREL64
2553
ENUMX
2554
  BFD_RELOC_X86_64_GOTPC64
2555
ENUMX
2556
  BFD_RELOC_X86_64_GOTPLT64
2557
ENUMX
2558
  BFD_RELOC_X86_64_PLTOFF64
2559
ENUMX
2560
  BFD_RELOC_X86_64_GOTPC32_TLSDESC
2561
ENUMX
2562
  BFD_RELOC_X86_64_TLSDESC_CALL
2563
ENUMX
2564
  BFD_RELOC_X86_64_TLSDESC
2565
ENUMX
2566
  BFD_RELOC_X86_64_IRELATIVE
2567
ENUMDOC
2568
  x86-64/elf relocations
2569
 
2570
ENUM
2571
  BFD_RELOC_NS32K_IMM_8
2572
ENUMX
2573
  BFD_RELOC_NS32K_IMM_16
2574
ENUMX
2575
  BFD_RELOC_NS32K_IMM_32
2576
ENUMX
2577
  BFD_RELOC_NS32K_IMM_8_PCREL
2578
ENUMX
2579
  BFD_RELOC_NS32K_IMM_16_PCREL
2580
ENUMX
2581
  BFD_RELOC_NS32K_IMM_32_PCREL
2582
ENUMX
2583
  BFD_RELOC_NS32K_DISP_8
2584
ENUMX
2585
  BFD_RELOC_NS32K_DISP_16
2586
ENUMX
2587
  BFD_RELOC_NS32K_DISP_32
2588
ENUMX
2589
  BFD_RELOC_NS32K_DISP_8_PCREL
2590
ENUMX
2591
  BFD_RELOC_NS32K_DISP_16_PCREL
2592
ENUMX
2593
  BFD_RELOC_NS32K_DISP_32_PCREL
2594
ENUMDOC
2595
  ns32k relocations
2596
 
2597
ENUM
2598
  BFD_RELOC_PDP11_DISP_8_PCREL
2599
ENUMX
2600
  BFD_RELOC_PDP11_DISP_6_PCREL
2601
ENUMDOC
2602
  PDP11 relocations
2603
 
2604
ENUM
2605
  BFD_RELOC_PJ_CODE_HI16
2606
ENUMX
2607
  BFD_RELOC_PJ_CODE_LO16
2608
ENUMX
2609
  BFD_RELOC_PJ_CODE_DIR16
2610
ENUMX
2611
  BFD_RELOC_PJ_CODE_DIR32
2612
ENUMX
2613
  BFD_RELOC_PJ_CODE_REL16
2614
ENUMX
2615
  BFD_RELOC_PJ_CODE_REL32
2616
ENUMDOC
2617
  Picojava relocs.  Not all of these appear in object files.
2618
 
2619
ENUM
2620
  BFD_RELOC_PPC_B26
2621
ENUMX
2622
  BFD_RELOC_PPC_BA26
2623
ENUMX
2624
  BFD_RELOC_PPC_TOC16
2625
ENUMX
2626
  BFD_RELOC_PPC_B16
2627
ENUMX
2628
  BFD_RELOC_PPC_B16_BRTAKEN
2629
ENUMX
2630
  BFD_RELOC_PPC_B16_BRNTAKEN
2631
ENUMX
2632
  BFD_RELOC_PPC_BA16
2633
ENUMX
2634
  BFD_RELOC_PPC_BA16_BRTAKEN
2635
ENUMX
2636
  BFD_RELOC_PPC_BA16_BRNTAKEN
2637
ENUMX
2638
  BFD_RELOC_PPC_COPY
2639
ENUMX
2640
  BFD_RELOC_PPC_GLOB_DAT
2641
ENUMX
2642
  BFD_RELOC_PPC_JMP_SLOT
2643
ENUMX
2644
  BFD_RELOC_PPC_RELATIVE
2645
ENUMX
2646
  BFD_RELOC_PPC_LOCAL24PC
2647
ENUMX
2648
  BFD_RELOC_PPC_EMB_NADDR32
2649
ENUMX
2650
  BFD_RELOC_PPC_EMB_NADDR16
2651
ENUMX
2652
  BFD_RELOC_PPC_EMB_NADDR16_LO
2653
ENUMX
2654
  BFD_RELOC_PPC_EMB_NADDR16_HI
2655
ENUMX
2656
  BFD_RELOC_PPC_EMB_NADDR16_HA
2657
ENUMX
2658
  BFD_RELOC_PPC_EMB_SDAI16
2659
ENUMX
2660
  BFD_RELOC_PPC_EMB_SDA2I16
2661
ENUMX
2662
  BFD_RELOC_PPC_EMB_SDA2REL
2663
ENUMX
2664
  BFD_RELOC_PPC_EMB_SDA21
2665
ENUMX
2666
  BFD_RELOC_PPC_EMB_MRKREF
2667
ENUMX
2668
  BFD_RELOC_PPC_EMB_RELSEC16
2669
ENUMX
2670
  BFD_RELOC_PPC_EMB_RELST_LO
2671
ENUMX
2672
  BFD_RELOC_PPC_EMB_RELST_HI
2673
ENUMX
2674
  BFD_RELOC_PPC_EMB_RELST_HA
2675
ENUMX
2676
  BFD_RELOC_PPC_EMB_BIT_FLD
2677
ENUMX
2678
  BFD_RELOC_PPC_EMB_RELSDA
2679
ENUMX
2680
  BFD_RELOC_PPC64_HIGHER
2681
ENUMX
2682
  BFD_RELOC_PPC64_HIGHER_S
2683
ENUMX
2684
  BFD_RELOC_PPC64_HIGHEST
2685
ENUMX
2686
  BFD_RELOC_PPC64_HIGHEST_S
2687
ENUMX
2688
  BFD_RELOC_PPC64_TOC16_LO
2689
ENUMX
2690
  BFD_RELOC_PPC64_TOC16_HI
2691
ENUMX
2692
  BFD_RELOC_PPC64_TOC16_HA
2693
ENUMX
2694
  BFD_RELOC_PPC64_TOC
2695
ENUMX
2696
  BFD_RELOC_PPC64_PLTGOT16
2697
ENUMX
2698
  BFD_RELOC_PPC64_PLTGOT16_LO
2699
ENUMX
2700
  BFD_RELOC_PPC64_PLTGOT16_HI
2701
ENUMX
2702
  BFD_RELOC_PPC64_PLTGOT16_HA
2703
ENUMX
2704
  BFD_RELOC_PPC64_ADDR16_DS
2705
ENUMX
2706
  BFD_RELOC_PPC64_ADDR16_LO_DS
2707
ENUMX
2708
  BFD_RELOC_PPC64_GOT16_DS
2709
ENUMX
2710
  BFD_RELOC_PPC64_GOT16_LO_DS
2711
ENUMX
2712
  BFD_RELOC_PPC64_PLT16_LO_DS
2713
ENUMX
2714
  BFD_RELOC_PPC64_SECTOFF_DS
2715
ENUMX
2716
  BFD_RELOC_PPC64_SECTOFF_LO_DS
2717
ENUMX
2718
  BFD_RELOC_PPC64_TOC16_DS
2719
ENUMX
2720
  BFD_RELOC_PPC64_TOC16_LO_DS
2721
ENUMX
2722
  BFD_RELOC_PPC64_PLTGOT16_DS
2723
ENUMX
2724
  BFD_RELOC_PPC64_PLTGOT16_LO_DS
2725
ENUMDOC
2726
  Power(rs6000) and PowerPC relocations.
2727
 
2728
ENUM
2729
  BFD_RELOC_PPC_TLS
2730
ENUMX
2731
  BFD_RELOC_PPC_TLSGD
2732
ENUMX
2733
  BFD_RELOC_PPC_TLSLD
2734
ENUMX
2735
  BFD_RELOC_PPC_DTPMOD
2736
ENUMX
2737
  BFD_RELOC_PPC_TPREL16
2738
ENUMX
2739
  BFD_RELOC_PPC_TPREL16_LO
2740
ENUMX
2741
  BFD_RELOC_PPC_TPREL16_HI
2742
ENUMX
2743
  BFD_RELOC_PPC_TPREL16_HA
2744
ENUMX
2745
  BFD_RELOC_PPC_TPREL
2746
ENUMX
2747
  BFD_RELOC_PPC_DTPREL16
2748
ENUMX
2749
  BFD_RELOC_PPC_DTPREL16_LO
2750
ENUMX
2751
  BFD_RELOC_PPC_DTPREL16_HI
2752
ENUMX
2753
  BFD_RELOC_PPC_DTPREL16_HA
2754
ENUMX
2755
  BFD_RELOC_PPC_DTPREL
2756
ENUMX
2757
  BFD_RELOC_PPC_GOT_TLSGD16
2758
ENUMX
2759
  BFD_RELOC_PPC_GOT_TLSGD16_LO
2760
ENUMX
2761
  BFD_RELOC_PPC_GOT_TLSGD16_HI
2762
ENUMX
2763
  BFD_RELOC_PPC_GOT_TLSGD16_HA
2764
ENUMX
2765
  BFD_RELOC_PPC_GOT_TLSLD16
2766
ENUMX
2767
  BFD_RELOC_PPC_GOT_TLSLD16_LO
2768
ENUMX
2769
  BFD_RELOC_PPC_GOT_TLSLD16_HI
2770
ENUMX
2771
  BFD_RELOC_PPC_GOT_TLSLD16_HA
2772
ENUMX
2773
  BFD_RELOC_PPC_GOT_TPREL16
2774
ENUMX
2775
  BFD_RELOC_PPC_GOT_TPREL16_LO
2776
ENUMX
2777
  BFD_RELOC_PPC_GOT_TPREL16_HI
2778
ENUMX
2779
  BFD_RELOC_PPC_GOT_TPREL16_HA
2780
ENUMX
2781
  BFD_RELOC_PPC_GOT_DTPREL16
2782
ENUMX
2783
  BFD_RELOC_PPC_GOT_DTPREL16_LO
2784
ENUMX
2785
  BFD_RELOC_PPC_GOT_DTPREL16_HI
2786
ENUMX
2787
  BFD_RELOC_PPC_GOT_DTPREL16_HA
2788
ENUMX
2789
  BFD_RELOC_PPC64_TPREL16_DS
2790
ENUMX
2791
  BFD_RELOC_PPC64_TPREL16_LO_DS
2792
ENUMX
2793
  BFD_RELOC_PPC64_TPREL16_HIGHER
2794
ENUMX
2795
  BFD_RELOC_PPC64_TPREL16_HIGHERA
2796
ENUMX
2797
  BFD_RELOC_PPC64_TPREL16_HIGHEST
2798
ENUMX
2799
  BFD_RELOC_PPC64_TPREL16_HIGHESTA
2800
ENUMX
2801
  BFD_RELOC_PPC64_DTPREL16_DS
2802
ENUMX
2803
  BFD_RELOC_PPC64_DTPREL16_LO_DS
2804
ENUMX
2805
  BFD_RELOC_PPC64_DTPREL16_HIGHER
2806
ENUMX
2807
  BFD_RELOC_PPC64_DTPREL16_HIGHERA
2808
ENUMX
2809
  BFD_RELOC_PPC64_DTPREL16_HIGHEST
2810
ENUMX
2811
  BFD_RELOC_PPC64_DTPREL16_HIGHESTA
2812
ENUMDOC
2813
  PowerPC and PowerPC64 thread-local storage relocations.
2814
 
2815
ENUM
2816
  BFD_RELOC_I370_D12
2817
ENUMDOC
2818
  IBM 370/390 relocations
2819
 
2820
ENUM
2821
  BFD_RELOC_CTOR
2822
ENUMDOC
2823
  The type of reloc used to build a constructor table - at the moment
2824
  probably a 32 bit wide absolute relocation, but the target can choose.
2825
  It generally does map to one of the other relocation types.
2826
 
2827
ENUM
2828
  BFD_RELOC_ARM_PCREL_BRANCH
2829
ENUMDOC
2830
  ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
2831
  not stored in the instruction.
2832
ENUM
2833
  BFD_RELOC_ARM_PCREL_BLX
2834
ENUMDOC
2835
  ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
2836
  not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2837
  field in the instruction.
2838
ENUM
2839
  BFD_RELOC_THUMB_PCREL_BLX
2840
ENUMDOC
2841
  Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
2842
  not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2843
  field in the instruction.
2844
ENUM
2845
  BFD_RELOC_ARM_PCREL_CALL
2846
ENUMDOC
2847
  ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
2848
ENUM
2849
  BFD_RELOC_ARM_PCREL_JUMP
2850
ENUMDOC
2851
  ARM 26-bit pc-relative branch for B or conditional BL instruction.
2852
 
2853
ENUM
2854
  BFD_RELOC_THUMB_PCREL_BRANCH7
2855
ENUMX
2856
  BFD_RELOC_THUMB_PCREL_BRANCH9
2857
ENUMX
2858
  BFD_RELOC_THUMB_PCREL_BRANCH12
2859
ENUMX
2860
  BFD_RELOC_THUMB_PCREL_BRANCH20
2861
ENUMX
2862
  BFD_RELOC_THUMB_PCREL_BRANCH23
2863
ENUMX
2864
  BFD_RELOC_THUMB_PCREL_BRANCH25
2865
ENUMDOC
2866
  Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
2867
  The lowest bit must be zero and is not stored in the instruction.
2868
  Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
2869
  "nn" one smaller in all cases.  Note further that BRANCH23
2870
  corresponds to R_ARM_THM_CALL.
2871
 
2872
ENUM
2873
  BFD_RELOC_ARM_OFFSET_IMM
2874
ENUMDOC
2875
  12-bit immediate offset, used in ARM-format ldr and str instructions.
2876
 
2877
ENUM
2878
  BFD_RELOC_ARM_THUMB_OFFSET
2879
ENUMDOC
2880
  5-bit immediate offset, used in Thumb-format ldr and str instructions.
2881
 
2882
ENUM
2883
  BFD_RELOC_ARM_TARGET1
2884
ENUMDOC
2885
  Pc-relative or absolute relocation depending on target.  Used for
2886
  entries in .init_array sections.
2887
ENUM
2888
  BFD_RELOC_ARM_ROSEGREL32
2889
ENUMDOC
2890
  Read-only segment base relative address.
2891
ENUM
2892
  BFD_RELOC_ARM_SBREL32
2893
ENUMDOC
2894
  Data segment base relative address.
2895
ENUM
2896
  BFD_RELOC_ARM_TARGET2
2897
ENUMDOC
2898
  This reloc is used for references to RTTI data from exception handling
2899
  tables.  The actual definition depends on the target.  It may be a
2900
  pc-relative or some form of GOT-indirect relocation.
2901
ENUM
2902
  BFD_RELOC_ARM_PREL31
2903
ENUMDOC
2904
  31-bit PC relative address.
2905
ENUM
2906
  BFD_RELOC_ARM_MOVW
2907
ENUMX
2908
  BFD_RELOC_ARM_MOVT
2909
ENUMX
2910
  BFD_RELOC_ARM_MOVW_PCREL
2911
ENUMX
2912
  BFD_RELOC_ARM_MOVT_PCREL
2913
ENUMX
2914
  BFD_RELOC_ARM_THUMB_MOVW
2915
ENUMX
2916
  BFD_RELOC_ARM_THUMB_MOVT
2917
ENUMX
2918
  BFD_RELOC_ARM_THUMB_MOVW_PCREL
2919
ENUMX
2920
  BFD_RELOC_ARM_THUMB_MOVT_PCREL
2921
ENUMDOC
2922
  Low and High halfword relocations for MOVW and MOVT instructions.
2923
 
2924
ENUM
2925
  BFD_RELOC_ARM_JUMP_SLOT
2926
ENUMX
2927
  BFD_RELOC_ARM_GLOB_DAT
2928
ENUMX
2929
  BFD_RELOC_ARM_GOT32
2930
ENUMX
2931
  BFD_RELOC_ARM_PLT32
2932
ENUMX
2933
  BFD_RELOC_ARM_RELATIVE
2934
ENUMX
2935
  BFD_RELOC_ARM_GOTOFF
2936
ENUMX
2937
  BFD_RELOC_ARM_GOTPC
2938
ENUMX
2939
  BFD_RELOC_ARM_GOT_PREL
2940
ENUMDOC
2941
  Relocations for setting up GOTs and PLTs for shared libraries.
2942
 
2943
ENUM
2944
  BFD_RELOC_ARM_TLS_GD32
2945
ENUMX
2946
  BFD_RELOC_ARM_TLS_LDO32
2947
ENUMX
2948
  BFD_RELOC_ARM_TLS_LDM32
2949
ENUMX
2950
  BFD_RELOC_ARM_TLS_DTPOFF32
2951
ENUMX
2952
  BFD_RELOC_ARM_TLS_DTPMOD32
2953
ENUMX
2954
  BFD_RELOC_ARM_TLS_TPOFF32
2955
ENUMX
2956
  BFD_RELOC_ARM_TLS_IE32
2957
ENUMX
2958
  BFD_RELOC_ARM_TLS_LE32
2959
ENUMDOC
2960
  ARM thread-local storage relocations.
2961
 
2962
ENUM
2963
  BFD_RELOC_ARM_ALU_PC_G0_NC
2964
ENUMX
2965
  BFD_RELOC_ARM_ALU_PC_G0
2966
ENUMX
2967
  BFD_RELOC_ARM_ALU_PC_G1_NC
2968
ENUMX
2969
  BFD_RELOC_ARM_ALU_PC_G1
2970
ENUMX
2971
  BFD_RELOC_ARM_ALU_PC_G2
2972
ENUMX
2973
  BFD_RELOC_ARM_LDR_PC_G0
2974
ENUMX
2975
  BFD_RELOC_ARM_LDR_PC_G1
2976
ENUMX
2977
  BFD_RELOC_ARM_LDR_PC_G2
2978
ENUMX
2979
  BFD_RELOC_ARM_LDRS_PC_G0
2980
ENUMX
2981
  BFD_RELOC_ARM_LDRS_PC_G1
2982
ENUMX
2983
  BFD_RELOC_ARM_LDRS_PC_G2
2984
ENUMX
2985
  BFD_RELOC_ARM_LDC_PC_G0
2986
ENUMX
2987
  BFD_RELOC_ARM_LDC_PC_G1
2988
ENUMX
2989
  BFD_RELOC_ARM_LDC_PC_G2
2990
ENUMX
2991
  BFD_RELOC_ARM_ALU_SB_G0_NC
2992
ENUMX
2993
  BFD_RELOC_ARM_ALU_SB_G0
2994
ENUMX
2995
  BFD_RELOC_ARM_ALU_SB_G1_NC
2996
ENUMX
2997
  BFD_RELOC_ARM_ALU_SB_G1
2998
ENUMX
2999
  BFD_RELOC_ARM_ALU_SB_G2
3000
ENUMX
3001
  BFD_RELOC_ARM_LDR_SB_G0
3002
ENUMX
3003
  BFD_RELOC_ARM_LDR_SB_G1
3004
ENUMX
3005
  BFD_RELOC_ARM_LDR_SB_G2
3006
ENUMX
3007
  BFD_RELOC_ARM_LDRS_SB_G0
3008
ENUMX
3009
  BFD_RELOC_ARM_LDRS_SB_G1
3010
ENUMX
3011
  BFD_RELOC_ARM_LDRS_SB_G2
3012
ENUMX
3013
  BFD_RELOC_ARM_LDC_SB_G0
3014
ENUMX
3015
  BFD_RELOC_ARM_LDC_SB_G1
3016
ENUMX
3017
  BFD_RELOC_ARM_LDC_SB_G2
3018
ENUMDOC
3019
  ARM group relocations.
3020
 
3021
ENUM
3022
  BFD_RELOC_ARM_V4BX
3023
ENUMDOC
3024
  Annotation of BX instructions.
3025
 
3026
ENUM
3027
  BFD_RELOC_ARM_IMMEDIATE
3028
ENUMX
3029
  BFD_RELOC_ARM_ADRL_IMMEDIATE
3030
ENUMX
3031
  BFD_RELOC_ARM_T32_IMMEDIATE
3032
ENUMX
3033
  BFD_RELOC_ARM_T32_ADD_IMM
3034
ENUMX
3035
  BFD_RELOC_ARM_T32_IMM12
3036
ENUMX
3037
  BFD_RELOC_ARM_T32_ADD_PC12
3038
ENUMX
3039
  BFD_RELOC_ARM_SHIFT_IMM
3040
ENUMX
3041
  BFD_RELOC_ARM_SMC
3042
ENUMX
3043
  BFD_RELOC_ARM_SWI
3044
ENUMX
3045
  BFD_RELOC_ARM_MULTI
3046
ENUMX
3047
  BFD_RELOC_ARM_CP_OFF_IMM
3048
ENUMX
3049
  BFD_RELOC_ARM_CP_OFF_IMM_S2
3050
ENUMX
3051
  BFD_RELOC_ARM_T32_CP_OFF_IMM
3052
ENUMX
3053
  BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
3054
ENUMX
3055
  BFD_RELOC_ARM_ADR_IMM
3056
ENUMX
3057
  BFD_RELOC_ARM_LDR_IMM
3058
ENUMX
3059
  BFD_RELOC_ARM_LITERAL
3060
ENUMX
3061
  BFD_RELOC_ARM_IN_POOL
3062
ENUMX
3063
  BFD_RELOC_ARM_OFFSET_IMM8
3064
ENUMX
3065
  BFD_RELOC_ARM_T32_OFFSET_U8
3066
ENUMX
3067
  BFD_RELOC_ARM_T32_OFFSET_IMM
3068
ENUMX
3069
  BFD_RELOC_ARM_HWLITERAL
3070
ENUMX
3071
  BFD_RELOC_ARM_THUMB_ADD
3072
ENUMX
3073
  BFD_RELOC_ARM_THUMB_IMM
3074
ENUMX
3075
  BFD_RELOC_ARM_THUMB_SHIFT
3076
ENUMDOC
3077
  These relocs are only used within the ARM assembler.  They are not
3078
  (at present) written to any object files.
3079
 
3080
ENUM
3081
  BFD_RELOC_SH_PCDISP8BY2
3082
ENUMX
3083
  BFD_RELOC_SH_PCDISP12BY2
3084
ENUMX
3085
  BFD_RELOC_SH_IMM3
3086
ENUMX
3087
  BFD_RELOC_SH_IMM3U
3088
ENUMX
3089
  BFD_RELOC_SH_DISP12
3090
ENUMX
3091
  BFD_RELOC_SH_DISP12BY2
3092
ENUMX
3093
  BFD_RELOC_SH_DISP12BY4
3094
ENUMX
3095
  BFD_RELOC_SH_DISP12BY8
3096
ENUMX
3097
  BFD_RELOC_SH_DISP20
3098
ENUMX
3099
  BFD_RELOC_SH_DISP20BY8
3100
ENUMX
3101
  BFD_RELOC_SH_IMM4
3102
ENUMX
3103
  BFD_RELOC_SH_IMM4BY2
3104
ENUMX
3105
  BFD_RELOC_SH_IMM4BY4
3106
ENUMX
3107
  BFD_RELOC_SH_IMM8
3108
ENUMX
3109
  BFD_RELOC_SH_IMM8BY2
3110
ENUMX
3111
  BFD_RELOC_SH_IMM8BY4
3112
ENUMX
3113
  BFD_RELOC_SH_PCRELIMM8BY2
3114
ENUMX
3115
  BFD_RELOC_SH_PCRELIMM8BY4
3116
ENUMX
3117
  BFD_RELOC_SH_SWITCH16
3118
ENUMX
3119
  BFD_RELOC_SH_SWITCH32
3120
ENUMX
3121
  BFD_RELOC_SH_USES
3122
ENUMX
3123
  BFD_RELOC_SH_COUNT
3124
ENUMX
3125
  BFD_RELOC_SH_ALIGN
3126
ENUMX
3127
  BFD_RELOC_SH_CODE
3128
ENUMX
3129
  BFD_RELOC_SH_DATA
3130
ENUMX
3131
  BFD_RELOC_SH_LABEL
3132
ENUMX
3133
  BFD_RELOC_SH_LOOP_START
3134
ENUMX
3135
  BFD_RELOC_SH_LOOP_END
3136
ENUMX
3137
  BFD_RELOC_SH_COPY
3138
ENUMX
3139
  BFD_RELOC_SH_GLOB_DAT
3140
ENUMX
3141
  BFD_RELOC_SH_JMP_SLOT
3142
ENUMX
3143
  BFD_RELOC_SH_RELATIVE
3144
ENUMX
3145
  BFD_RELOC_SH_GOTPC
3146
ENUMX
3147
  BFD_RELOC_SH_GOT_LOW16
3148
ENUMX
3149
  BFD_RELOC_SH_GOT_MEDLOW16
3150
ENUMX
3151
  BFD_RELOC_SH_GOT_MEDHI16
3152
ENUMX
3153
  BFD_RELOC_SH_GOT_HI16
3154
ENUMX
3155
  BFD_RELOC_SH_GOTPLT_LOW16
3156
ENUMX
3157
  BFD_RELOC_SH_GOTPLT_MEDLOW16
3158
ENUMX
3159
  BFD_RELOC_SH_GOTPLT_MEDHI16
3160
ENUMX
3161
  BFD_RELOC_SH_GOTPLT_HI16
3162
ENUMX
3163
  BFD_RELOC_SH_PLT_LOW16
3164
ENUMX
3165
  BFD_RELOC_SH_PLT_MEDLOW16
3166
ENUMX
3167
  BFD_RELOC_SH_PLT_MEDHI16
3168
ENUMX
3169
  BFD_RELOC_SH_PLT_HI16
3170
ENUMX
3171
  BFD_RELOC_SH_GOTOFF_LOW16
3172
ENUMX
3173
  BFD_RELOC_SH_GOTOFF_MEDLOW16
3174
ENUMX
3175
  BFD_RELOC_SH_GOTOFF_MEDHI16
3176
ENUMX
3177
  BFD_RELOC_SH_GOTOFF_HI16
3178
ENUMX
3179
  BFD_RELOC_SH_GOTPC_LOW16
3180
ENUMX
3181
  BFD_RELOC_SH_GOTPC_MEDLOW16
3182
ENUMX
3183
  BFD_RELOC_SH_GOTPC_MEDHI16
3184
ENUMX
3185
  BFD_RELOC_SH_GOTPC_HI16
3186
ENUMX
3187
  BFD_RELOC_SH_COPY64
3188
ENUMX
3189
  BFD_RELOC_SH_GLOB_DAT64
3190
ENUMX
3191
  BFD_RELOC_SH_JMP_SLOT64
3192
ENUMX
3193
  BFD_RELOC_SH_RELATIVE64
3194
ENUMX
3195
  BFD_RELOC_SH_GOT10BY4
3196
ENUMX
3197
  BFD_RELOC_SH_GOT10BY8
3198
ENUMX
3199
  BFD_RELOC_SH_GOTPLT10BY4
3200
ENUMX
3201
  BFD_RELOC_SH_GOTPLT10BY8
3202
ENUMX
3203
  BFD_RELOC_SH_GOTPLT32
3204
ENUMX
3205
  BFD_RELOC_SH_SHMEDIA_CODE
3206
ENUMX
3207
  BFD_RELOC_SH_IMMU5
3208
ENUMX
3209
  BFD_RELOC_SH_IMMS6
3210
ENUMX
3211
  BFD_RELOC_SH_IMMS6BY32
3212
ENUMX
3213
  BFD_RELOC_SH_IMMU6
3214
ENUMX
3215
  BFD_RELOC_SH_IMMS10
3216
ENUMX
3217
  BFD_RELOC_SH_IMMS10BY2
3218
ENUMX
3219
  BFD_RELOC_SH_IMMS10BY4
3220
ENUMX
3221
  BFD_RELOC_SH_IMMS10BY8
3222
ENUMX
3223
  BFD_RELOC_SH_IMMS16
3224
ENUMX
3225
  BFD_RELOC_SH_IMMU16
3226
ENUMX
3227
  BFD_RELOC_SH_IMM_LOW16
3228
ENUMX
3229
  BFD_RELOC_SH_IMM_LOW16_PCREL
3230
ENUMX
3231
  BFD_RELOC_SH_IMM_MEDLOW16
3232
ENUMX
3233
  BFD_RELOC_SH_IMM_MEDLOW16_PCREL
3234
ENUMX
3235
  BFD_RELOC_SH_IMM_MEDHI16
3236
ENUMX
3237
  BFD_RELOC_SH_IMM_MEDHI16_PCREL
3238
ENUMX
3239
  BFD_RELOC_SH_IMM_HI16
3240
ENUMX
3241
  BFD_RELOC_SH_IMM_HI16_PCREL
3242
ENUMX
3243
  BFD_RELOC_SH_PT_16
3244
ENUMX
3245
  BFD_RELOC_SH_TLS_GD_32
3246
ENUMX
3247
  BFD_RELOC_SH_TLS_LD_32
3248
ENUMX
3249
  BFD_RELOC_SH_TLS_LDO_32
3250
ENUMX
3251
  BFD_RELOC_SH_TLS_IE_32
3252
ENUMX
3253
  BFD_RELOC_SH_TLS_LE_32
3254
ENUMX
3255
  BFD_RELOC_SH_TLS_DTPMOD32
3256
ENUMX
3257
  BFD_RELOC_SH_TLS_DTPOFF32
3258
ENUMX
3259
  BFD_RELOC_SH_TLS_TPOFF32
3260
ENUMX
3261
  BFD_RELOC_SH_GOT20
3262
ENUMX
3263
  BFD_RELOC_SH_GOTOFF20
3264
ENUMX
3265
  BFD_RELOC_SH_GOTFUNCDESC
3266
ENUMX
3267
  BFD_RELOC_SH_GOTFUNCDESC20
3268
ENUMX
3269
  BFD_RELOC_SH_GOTOFFFUNCDESC
3270
ENUMX
3271
  BFD_RELOC_SH_GOTOFFFUNCDESC20
3272
ENUMX
3273
  BFD_RELOC_SH_FUNCDESC
3274
ENUMDOC
3275
  Renesas / SuperH SH relocs.  Not all of these appear in object files.
3276
 
3277
ENUM
3278
  BFD_RELOC_ARC_B22_PCREL
3279
ENUMDOC
3280
  ARC Cores relocs.
3281
  ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
3282
  not stored in the instruction.  The high 20 bits are installed in bits 26
3283
  through 7 of the instruction.
3284
ENUM
3285
  BFD_RELOC_ARC_B26
3286
ENUMDOC
3287
  ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
3288
  stored in the instruction.  The high 24 bits are installed in bits 23
3289
  through 0.
3290
 
3291
ENUM
3292
  BFD_RELOC_BFIN_16_IMM
3293
ENUMDOC
3294
  ADI Blackfin 16 bit immediate absolute reloc.
3295
ENUM
3296
  BFD_RELOC_BFIN_16_HIGH
3297
ENUMDOC
3298
  ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
3299
ENUM
3300
  BFD_RELOC_BFIN_4_PCREL
3301
ENUMDOC
3302
  ADI Blackfin 'a' part of LSETUP.
3303
ENUM
3304
  BFD_RELOC_BFIN_5_PCREL
3305
ENUMDOC
3306
  ADI Blackfin.
3307
ENUM
3308
  BFD_RELOC_BFIN_16_LOW
3309
ENUMDOC
3310
  ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
3311
ENUM
3312
  BFD_RELOC_BFIN_10_PCREL
3313
ENUMDOC
3314
  ADI Blackfin.
3315
ENUM
3316
  BFD_RELOC_BFIN_11_PCREL
3317
ENUMDOC
3318
  ADI Blackfin 'b' part of LSETUP.
3319
ENUM
3320
  BFD_RELOC_BFIN_12_PCREL_JUMP
3321
ENUMDOC
3322
  ADI Blackfin.
3323
ENUM
3324
  BFD_RELOC_BFIN_12_PCREL_JUMP_S
3325
ENUMDOC
3326
  ADI Blackfin Short jump, pcrel.
3327
ENUM
3328
  BFD_RELOC_BFIN_24_PCREL_CALL_X
3329
ENUMDOC
3330
  ADI Blackfin Call.x not implemented.
3331
ENUM
3332
  BFD_RELOC_BFIN_24_PCREL_JUMP_L
3333
ENUMDOC
3334
  ADI Blackfin Long Jump pcrel.
3335
ENUM
3336
  BFD_RELOC_BFIN_GOT17M4
3337
ENUMX
3338
  BFD_RELOC_BFIN_GOTHI
3339
ENUMX
3340
  BFD_RELOC_BFIN_GOTLO
3341
ENUMX
3342
  BFD_RELOC_BFIN_FUNCDESC
3343
ENUMX
3344
  BFD_RELOC_BFIN_FUNCDESC_GOT17M4
3345
ENUMX
3346
  BFD_RELOC_BFIN_FUNCDESC_GOTHI
3347
ENUMX
3348
  BFD_RELOC_BFIN_FUNCDESC_GOTLO
3349
ENUMX
3350
  BFD_RELOC_BFIN_FUNCDESC_VALUE
3351
ENUMX
3352
  BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
3353
ENUMX
3354
  BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
3355
ENUMX
3356
  BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
3357
ENUMX
3358
  BFD_RELOC_BFIN_GOTOFF17M4
3359
ENUMX
3360
  BFD_RELOC_BFIN_GOTOFFHI
3361
ENUMX
3362
  BFD_RELOC_BFIN_GOTOFFLO
3363
ENUMDOC
3364
  ADI Blackfin FD-PIC relocations.
3365
ENUM
3366
  BFD_RELOC_BFIN_GOT
3367
ENUMDOC
3368
  ADI Blackfin GOT relocation.
3369
ENUM
3370
  BFD_RELOC_BFIN_PLTPC
3371
ENUMDOC
3372
  ADI Blackfin PLTPC relocation.
3373
ENUM
3374
  BFD_ARELOC_BFIN_PUSH
3375
ENUMDOC
3376
  ADI Blackfin arithmetic relocation.
3377
ENUM
3378
  BFD_ARELOC_BFIN_CONST
3379
ENUMDOC
3380
  ADI Blackfin arithmetic relocation.
3381
ENUM
3382
  BFD_ARELOC_BFIN_ADD
3383
ENUMDOC
3384
  ADI Blackfin arithmetic relocation.
3385
ENUM
3386
  BFD_ARELOC_BFIN_SUB
3387
ENUMDOC
3388
  ADI Blackfin arithmetic relocation.
3389
ENUM
3390
  BFD_ARELOC_BFIN_MULT
3391
ENUMDOC
3392
  ADI Blackfin arithmetic relocation.
3393
ENUM
3394
  BFD_ARELOC_BFIN_DIV
3395
ENUMDOC
3396
  ADI Blackfin arithmetic relocation.
3397
ENUM
3398
  BFD_ARELOC_BFIN_MOD
3399
ENUMDOC
3400
  ADI Blackfin arithmetic relocation.
3401
ENUM
3402
  BFD_ARELOC_BFIN_LSHIFT
3403
ENUMDOC
3404
  ADI Blackfin arithmetic relocation.
3405
ENUM
3406
  BFD_ARELOC_BFIN_RSHIFT
3407
ENUMDOC
3408
  ADI Blackfin arithmetic relocation.
3409
ENUM
3410
  BFD_ARELOC_BFIN_AND
3411
ENUMDOC
3412
  ADI Blackfin arithmetic relocation.
3413
ENUM
3414
  BFD_ARELOC_BFIN_OR
3415
ENUMDOC
3416
  ADI Blackfin arithmetic relocation.
3417
ENUM
3418
  BFD_ARELOC_BFIN_XOR
3419
ENUMDOC
3420
  ADI Blackfin arithmetic relocation.
3421
ENUM
3422
  BFD_ARELOC_BFIN_LAND
3423
ENUMDOC
3424
  ADI Blackfin arithmetic relocation.
3425
ENUM
3426
  BFD_ARELOC_BFIN_LOR
3427
ENUMDOC
3428
  ADI Blackfin arithmetic relocation.
3429
ENUM
3430
  BFD_ARELOC_BFIN_LEN
3431
ENUMDOC
3432
  ADI Blackfin arithmetic relocation.
3433
ENUM
3434
  BFD_ARELOC_BFIN_NEG
3435
ENUMDOC
3436
  ADI Blackfin arithmetic relocation.
3437
ENUM
3438
  BFD_ARELOC_BFIN_COMP
3439
ENUMDOC
3440
  ADI Blackfin arithmetic relocation.
3441
ENUM
3442
  BFD_ARELOC_BFIN_PAGE
3443
ENUMDOC
3444
  ADI Blackfin arithmetic relocation.
3445
ENUM
3446
  BFD_ARELOC_BFIN_HWPAGE
3447
ENUMDOC
3448
  ADI Blackfin arithmetic relocation.
3449
ENUM
3450
  BFD_ARELOC_BFIN_ADDR
3451
ENUMDOC
3452
  ADI Blackfin arithmetic relocation.
3453
 
3454
ENUM
3455
  BFD_RELOC_D10V_10_PCREL_R
3456
ENUMDOC
3457
  Mitsubishi D10V relocs.
3458
  This is a 10-bit reloc with the right 2 bits
3459
  assumed to be 0.
3460
ENUM
3461
  BFD_RELOC_D10V_10_PCREL_L
3462
ENUMDOC
3463
  Mitsubishi D10V relocs.
3464
  This is a 10-bit reloc with the right 2 bits
3465
  assumed to be 0.  This is the same as the previous reloc
3466
  except it is in the left container, i.e.,
3467
  shifted left 15 bits.
3468
ENUM
3469
  BFD_RELOC_D10V_18
3470
ENUMDOC
3471
  This is an 18-bit reloc with the right 2 bits
3472
  assumed to be 0.
3473
ENUM
3474
  BFD_RELOC_D10V_18_PCREL
3475
ENUMDOC
3476
  This is an 18-bit reloc with the right 2 bits
3477
  assumed to be 0.
3478
 
3479
ENUM
3480
  BFD_RELOC_D30V_6
3481
ENUMDOC
3482
  Mitsubishi D30V relocs.
3483
  This is a 6-bit absolute reloc.
3484
ENUM
3485
  BFD_RELOC_D30V_9_PCREL
3486
ENUMDOC
3487
  This is a 6-bit pc-relative reloc with
3488
  the right 3 bits assumed to be 0.
3489
ENUM
3490
  BFD_RELOC_D30V_9_PCREL_R
3491
ENUMDOC
3492
  This is a 6-bit pc-relative reloc with
3493
  the right 3 bits assumed to be 0. Same
3494
  as the previous reloc but on the right side
3495
  of the container.
3496
ENUM
3497
  BFD_RELOC_D30V_15
3498
ENUMDOC
3499
  This is a 12-bit absolute reloc with the
3500
  right 3 bitsassumed to be 0.
3501
ENUM
3502
  BFD_RELOC_D30V_15_PCREL
3503
ENUMDOC
3504
  This is a 12-bit pc-relative reloc with
3505
  the right 3 bits assumed to be 0.
3506
ENUM
3507
  BFD_RELOC_D30V_15_PCREL_R
3508
ENUMDOC
3509
  This is a 12-bit pc-relative reloc with
3510
  the right 3 bits assumed to be 0. Same
3511
  as the previous reloc but on the right side
3512
  of the container.
3513
ENUM
3514
  BFD_RELOC_D30V_21
3515
ENUMDOC
3516
  This is an 18-bit absolute reloc with
3517
  the right 3 bits assumed to be 0.
3518
ENUM
3519
  BFD_RELOC_D30V_21_PCREL
3520
ENUMDOC
3521
  This is an 18-bit pc-relative reloc with
3522
  the right 3 bits assumed to be 0.
3523
ENUM
3524
  BFD_RELOC_D30V_21_PCREL_R
3525
ENUMDOC
3526
  This is an 18-bit pc-relative reloc with
3527
  the right 3 bits assumed to be 0. Same
3528
  as the previous reloc but on the right side
3529
  of the container.
3530
ENUM
3531
  BFD_RELOC_D30V_32
3532
ENUMDOC
3533
  This is a 32-bit absolute reloc.
3534
ENUM
3535
  BFD_RELOC_D30V_32_PCREL
3536
ENUMDOC
3537
  This is a 32-bit pc-relative reloc.
3538
 
3539
ENUM
3540
  BFD_RELOC_DLX_HI16_S
3541
ENUMDOC
3542
  DLX relocs
3543
ENUM
3544
  BFD_RELOC_DLX_LO16
3545
ENUMDOC
3546
  DLX relocs
3547
ENUM
3548
  BFD_RELOC_DLX_JMP26
3549
ENUMDOC
3550
  DLX relocs
3551
 
3552
ENUM
3553
  BFD_RELOC_M32C_HI8
3554
ENUMX
3555
  BFD_RELOC_M32C_RL_JUMP
3556
ENUMX
3557
  BFD_RELOC_M32C_RL_1ADDR
3558
ENUMX
3559
  BFD_RELOC_M32C_RL_2ADDR
3560
ENUMDOC
3561
  Renesas M16C/M32C Relocations.
3562
 
3563
ENUM
3564
  BFD_RELOC_M32R_24
3565
ENUMDOC
3566
  Renesas M32R (formerly Mitsubishi M32R) relocs.
3567
  This is a 24 bit absolute address.
3568
ENUM
3569
  BFD_RELOC_M32R_10_PCREL
3570
ENUMDOC
3571
  This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
3572
ENUM
3573
  BFD_RELOC_M32R_18_PCREL
3574
ENUMDOC
3575
  This is an 18-bit reloc with the right 2 bits assumed to be 0.
3576
ENUM
3577
  BFD_RELOC_M32R_26_PCREL
3578
ENUMDOC
3579
  This is a 26-bit reloc with the right 2 bits assumed to be 0.
3580
ENUM
3581
  BFD_RELOC_M32R_HI16_ULO
3582
ENUMDOC
3583
  This is a 16-bit reloc containing the high 16 bits of an address
3584
  used when the lower 16 bits are treated as unsigned.
3585
ENUM
3586
  BFD_RELOC_M32R_HI16_SLO
3587
ENUMDOC
3588
  This is a 16-bit reloc containing the high 16 bits of an address
3589
  used when the lower 16 bits are treated as signed.
3590
ENUM
3591
  BFD_RELOC_M32R_LO16
3592
ENUMDOC
3593
  This is a 16-bit reloc containing the lower 16 bits of an address.
3594
ENUM
3595
  BFD_RELOC_M32R_SDA16
3596
ENUMDOC
3597
  This is a 16-bit reloc containing the small data area offset for use in
3598
  add3, load, and store instructions.
3599
ENUM
3600
  BFD_RELOC_M32R_GOT24
3601
ENUMX
3602
  BFD_RELOC_M32R_26_PLTREL
3603
ENUMX
3604
  BFD_RELOC_M32R_COPY
3605
ENUMX
3606
  BFD_RELOC_M32R_GLOB_DAT
3607
ENUMX
3608
  BFD_RELOC_M32R_JMP_SLOT
3609
ENUMX
3610
  BFD_RELOC_M32R_RELATIVE
3611
ENUMX
3612
  BFD_RELOC_M32R_GOTOFF
3613
ENUMX
3614
  BFD_RELOC_M32R_GOTOFF_HI_ULO
3615
ENUMX
3616
  BFD_RELOC_M32R_GOTOFF_HI_SLO
3617
ENUMX
3618
  BFD_RELOC_M32R_GOTOFF_LO
3619
ENUMX
3620
  BFD_RELOC_M32R_GOTPC24
3621
ENUMX
3622
  BFD_RELOC_M32R_GOT16_HI_ULO
3623
ENUMX
3624
  BFD_RELOC_M32R_GOT16_HI_SLO
3625
ENUMX
3626
  BFD_RELOC_M32R_GOT16_LO
3627
ENUMX
3628
  BFD_RELOC_M32R_GOTPC_HI_ULO
3629
ENUMX
3630
  BFD_RELOC_M32R_GOTPC_HI_SLO
3631
ENUMX
3632
  BFD_RELOC_M32R_GOTPC_LO
3633
ENUMDOC
3634
  For PIC.
3635
 
3636
 
3637
ENUM
3638
  BFD_RELOC_V850_9_PCREL
3639
ENUMDOC
3640
  This is a 9-bit reloc
3641
ENUM
3642
  BFD_RELOC_V850_22_PCREL
3643
ENUMDOC
3644
  This is a 22-bit reloc
3645
 
3646
ENUM
3647
  BFD_RELOC_V850_SDA_16_16_OFFSET
3648
ENUMDOC
3649
  This is a 16 bit offset from the short data area pointer.
3650
ENUM
3651
  BFD_RELOC_V850_SDA_15_16_OFFSET
3652
ENUMDOC
3653
  This is a 16 bit offset (of which only 15 bits are used) from the
3654
  short data area pointer.
3655
ENUM
3656
  BFD_RELOC_V850_ZDA_16_16_OFFSET
3657
ENUMDOC
3658
  This is a 16 bit offset from the zero data area pointer.
3659
ENUM
3660
  BFD_RELOC_V850_ZDA_15_16_OFFSET
3661
ENUMDOC
3662
  This is a 16 bit offset (of which only 15 bits are used) from the
3663
  zero data area pointer.
3664
ENUM
3665
  BFD_RELOC_V850_TDA_6_8_OFFSET
3666
ENUMDOC
3667
  This is an 8 bit offset (of which only 6 bits are used) from the
3668
  tiny data area pointer.
3669
ENUM
3670
  BFD_RELOC_V850_TDA_7_8_OFFSET
3671
ENUMDOC
3672
  This is an 8bit offset (of which only 7 bits are used) from the tiny
3673
  data area pointer.
3674
ENUM
3675
  BFD_RELOC_V850_TDA_7_7_OFFSET
3676
ENUMDOC
3677
  This is a 7 bit offset from the tiny data area pointer.
3678
ENUM
3679
  BFD_RELOC_V850_TDA_16_16_OFFSET
3680
ENUMDOC
3681
  This is a 16 bit offset from the tiny data area pointer.
3682
COMMENT
3683
ENUM
3684
  BFD_RELOC_V850_TDA_4_5_OFFSET
3685
ENUMDOC
3686
  This is a 5 bit offset (of which only 4 bits are used) from the tiny
3687
  data area pointer.
3688
ENUM
3689
  BFD_RELOC_V850_TDA_4_4_OFFSET
3690
ENUMDOC
3691
  This is a 4 bit offset from the tiny data area pointer.
3692
ENUM
3693
  BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
3694
ENUMDOC
3695
  This is a 16 bit offset from the short data area pointer, with the
3696
  bits placed non-contiguously in the instruction.
3697
ENUM
3698
  BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
3699
ENUMDOC
3700
  This is a 16 bit offset from the zero data area pointer, with the
3701
  bits placed non-contiguously in the instruction.
3702
ENUM
3703
  BFD_RELOC_V850_CALLT_6_7_OFFSET
3704
ENUMDOC
3705
  This is a 6 bit offset from the call table base pointer.
3706
ENUM
3707
  BFD_RELOC_V850_CALLT_16_16_OFFSET
3708
ENUMDOC
3709
  This is a 16 bit offset from the call table base pointer.
3710
ENUM
3711
  BFD_RELOC_V850_LONGCALL
3712
ENUMDOC
3713
  Used for relaxing indirect function calls.
3714
ENUM
3715
  BFD_RELOC_V850_LONGJUMP
3716
ENUMDOC
3717
  Used for relaxing indirect jumps.
3718
ENUM
3719
  BFD_RELOC_V850_ALIGN
3720
ENUMDOC
3721
  Used to maintain alignment whilst relaxing.
3722
ENUM
3723
  BFD_RELOC_V850_LO16_SPLIT_OFFSET
3724
ENUMDOC
3725
  This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
3726
  instructions.
3727
ENUM
3728
  BFD_RELOC_MN10300_32_PCREL
3729
ENUMDOC
3730
  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
3731
  instruction.
3732
ENUM
3733
  BFD_RELOC_MN10300_16_PCREL
3734
ENUMDOC
3735
  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
3736
  instruction.
3737
 
3738
ENUM
3739
  BFD_RELOC_TIC30_LDP
3740
ENUMDOC
3741
  This is a 8bit DP reloc for the tms320c30, where the most
3742
  significant 8 bits of a 24 bit word are placed into the least
3743
  significant 8 bits of the opcode.
3744
 
3745
ENUM
3746
  BFD_RELOC_TIC54X_PARTLS7
3747
ENUMDOC
3748
  This is a 7bit reloc for the tms320c54x, where the least
3749
  significant 7 bits of a 16 bit word are placed into the least
3750
  significant 7 bits of the opcode.
3751
 
3752
ENUM
3753
  BFD_RELOC_TIC54X_PARTMS9
3754
ENUMDOC
3755
  This is a 9bit DP reloc for the tms320c54x, where the most
3756
  significant 9 bits of a 16 bit word are placed into the least
3757
  significant 9 bits of the opcode.
3758
 
3759
ENUM
3760
  BFD_RELOC_TIC54X_23
3761
ENUMDOC
3762
  This is an extended address 23-bit reloc for the tms320c54x.
3763
 
3764
ENUM
3765
  BFD_RELOC_TIC54X_16_OF_23
3766
ENUMDOC
3767
  This is a 16-bit reloc for the tms320c54x, where the least
3768
  significant 16 bits of a 23-bit extended address are placed into
3769
  the opcode.
3770
 
3771
ENUM
3772
  BFD_RELOC_TIC54X_MS7_OF_23
3773
ENUMDOC
3774
  This is a reloc for the tms320c54x, where the most
3775
  significant 7 bits of a 23-bit extended address are placed into
3776
  the opcode.
3777
 
3778
ENUM
3779
  BFD_RELOC_C6000_PCR_S21
3780
ENUMX
3781
  BFD_RELOC_C6000_PCR_S12
3782
ENUMX
3783
  BFD_RELOC_C6000_PCR_S10
3784
ENUMX
3785
  BFD_RELOC_C6000_PCR_S7
3786
ENUMX
3787
  BFD_RELOC_C6000_ABS_S16
3788
ENUMX
3789
  BFD_RELOC_C6000_ABS_L16
3790
ENUMX
3791
  BFD_RELOC_C6000_ABS_H16
3792
ENUMX
3793
  BFD_RELOC_C6000_SBR_U15_B
3794
ENUMX
3795
  BFD_RELOC_C6000_SBR_U15_H
3796
ENUMX
3797
  BFD_RELOC_C6000_SBR_U15_W
3798
ENUMX
3799
  BFD_RELOC_C6000_SBR_S16
3800
ENUMX
3801
  BFD_RELOC_C6000_SBR_L16_B
3802
ENUMX
3803
  BFD_RELOC_C6000_SBR_L16_H
3804
ENUMX
3805
  BFD_RELOC_C6000_SBR_L16_W
3806
ENUMX
3807
  BFD_RELOC_C6000_SBR_H16_B
3808
ENUMX
3809
  BFD_RELOC_C6000_SBR_H16_H
3810
ENUMX
3811
  BFD_RELOC_C6000_SBR_H16_W
3812
ENUMX
3813
  BFD_RELOC_C6000_SBR_GOT_U15_W
3814
ENUMX
3815
  BFD_RELOC_C6000_SBR_GOT_L16_W
3816
ENUMX
3817
  BFD_RELOC_C6000_SBR_GOT_H16_W
3818
ENUMX
3819
  BFD_RELOC_C6000_DSBT_INDEX
3820
ENUMX
3821
  BFD_RELOC_C6000_PREL31
3822
ENUMX
3823
  BFD_RELOC_C6000_COPY
3824
ENUMX
3825
  BFD_RELOC_C6000_ALIGN
3826
ENUMX
3827
  BFD_RELOC_C6000_FPHEAD
3828
ENUMX
3829
  BFD_RELOC_C6000_NOCMP
3830
ENUMDOC
3831
  TMS320C6000 relocations.
3832
 
3833
ENUM
3834
  BFD_RELOC_FR30_48
3835
ENUMDOC
3836
  This is a 48 bit reloc for the FR30 that stores 32 bits.
3837
ENUM
3838
  BFD_RELOC_FR30_20
3839
ENUMDOC
3840
  This is a 32 bit reloc for the FR30 that stores 20 bits split up into
3841
  two sections.
3842
ENUM
3843
  BFD_RELOC_FR30_6_IN_4
3844
ENUMDOC
3845
  This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
3846
  4 bits.
3847
ENUM
3848
  BFD_RELOC_FR30_8_IN_8
3849
ENUMDOC
3850
  This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
3851
  into 8 bits.
3852
ENUM
3853
  BFD_RELOC_FR30_9_IN_8
3854
ENUMDOC
3855
  This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
3856
  into 8 bits.
3857
ENUM
3858
  BFD_RELOC_FR30_10_IN_8
3859
ENUMDOC
3860
  This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
3861
  into 8 bits.
3862
ENUM
3863
  BFD_RELOC_FR30_9_PCREL
3864
ENUMDOC
3865
  This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
3866
  short offset into 8 bits.
3867
ENUM
3868
  BFD_RELOC_FR30_12_PCREL
3869
ENUMDOC
3870
  This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
3871
  short offset into 11 bits.
3872
 
3873
ENUM
3874
  BFD_RELOC_MCORE_PCREL_IMM8BY4
3875
ENUMX
3876
  BFD_RELOC_MCORE_PCREL_IMM11BY2
3877
ENUMX
3878
  BFD_RELOC_MCORE_PCREL_IMM4BY2
3879
ENUMX
3880
  BFD_RELOC_MCORE_PCREL_32
3881
ENUMX
3882
  BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
3883
ENUMX
3884
  BFD_RELOC_MCORE_RVA
3885
ENUMDOC
3886
  Motorola Mcore relocations.
3887
 
3888
ENUM
3889
  BFD_RELOC_MEP_8
3890
ENUMX
3891
  BFD_RELOC_MEP_16
3892
ENUMX
3893
  BFD_RELOC_MEP_32
3894
ENUMX
3895
  BFD_RELOC_MEP_PCREL8A2
3896
ENUMX
3897
  BFD_RELOC_MEP_PCREL12A2
3898
ENUMX
3899
  BFD_RELOC_MEP_PCREL17A2
3900
ENUMX
3901
  BFD_RELOC_MEP_PCREL24A2
3902
ENUMX
3903
  BFD_RELOC_MEP_PCABS24A2
3904
ENUMX
3905
  BFD_RELOC_MEP_LOW16
3906
ENUMX
3907
  BFD_RELOC_MEP_HI16U
3908
ENUMX
3909
  BFD_RELOC_MEP_HI16S
3910
ENUMX
3911
  BFD_RELOC_MEP_GPREL
3912
ENUMX
3913
  BFD_RELOC_MEP_TPREL
3914
ENUMX
3915
  BFD_RELOC_MEP_TPREL7
3916
ENUMX
3917
  BFD_RELOC_MEP_TPREL7A2
3918
ENUMX
3919
  BFD_RELOC_MEP_TPREL7A4
3920
ENUMX
3921
  BFD_RELOC_MEP_UIMM24
3922
ENUMX
3923
  BFD_RELOC_MEP_ADDR24A4
3924
ENUMX
3925
  BFD_RELOC_MEP_GNU_VTINHERIT
3926
ENUMX
3927
  BFD_RELOC_MEP_GNU_VTENTRY
3928
ENUMDOC
3929
  Toshiba Media Processor Relocations.
3930
COMMENT
3931
 
3932
ENUM
3933
  BFD_RELOC_MMIX_GETA
3934
ENUMX
3935
  BFD_RELOC_MMIX_GETA_1
3936
ENUMX
3937
  BFD_RELOC_MMIX_GETA_2
3938
ENUMX
3939
  BFD_RELOC_MMIX_GETA_3
3940
ENUMDOC
3941
  These are relocations for the GETA instruction.
3942
ENUM
3943
  BFD_RELOC_MMIX_CBRANCH
3944
ENUMX
3945
  BFD_RELOC_MMIX_CBRANCH_J
3946
ENUMX
3947
  BFD_RELOC_MMIX_CBRANCH_1
3948
ENUMX
3949
  BFD_RELOC_MMIX_CBRANCH_2
3950
ENUMX
3951
  BFD_RELOC_MMIX_CBRANCH_3
3952
ENUMDOC
3953
  These are relocations for a conditional branch instruction.
3954
ENUM
3955
  BFD_RELOC_MMIX_PUSHJ
3956
ENUMX
3957
  BFD_RELOC_MMIX_PUSHJ_1
3958
ENUMX
3959
  BFD_RELOC_MMIX_PUSHJ_2
3960
ENUMX
3961
  BFD_RELOC_MMIX_PUSHJ_3
3962
ENUMX
3963
  BFD_RELOC_MMIX_PUSHJ_STUBBABLE
3964
ENUMDOC
3965
  These are relocations for the PUSHJ instruction.
3966
ENUM
3967
  BFD_RELOC_MMIX_JMP
3968
ENUMX
3969
  BFD_RELOC_MMIX_JMP_1
3970
ENUMX
3971
  BFD_RELOC_MMIX_JMP_2
3972
ENUMX
3973
  BFD_RELOC_MMIX_JMP_3
3974
ENUMDOC
3975
  These are relocations for the JMP instruction.
3976
ENUM
3977
  BFD_RELOC_MMIX_ADDR19
3978
ENUMDOC
3979
  This is a relocation for a relative address as in a GETA instruction or
3980
  a branch.
3981
ENUM
3982
  BFD_RELOC_MMIX_ADDR27
3983
ENUMDOC
3984
  This is a relocation for a relative address as in a JMP instruction.
3985
ENUM
3986
  BFD_RELOC_MMIX_REG_OR_BYTE
3987
ENUMDOC
3988
  This is a relocation for an instruction field that may be a general
3989
  register or a value 0..255.
3990
ENUM
3991
  BFD_RELOC_MMIX_REG
3992
ENUMDOC
3993
  This is a relocation for an instruction field that may be a general
3994
  register.
3995
ENUM
3996
  BFD_RELOC_MMIX_BASE_PLUS_OFFSET
3997
ENUMDOC
3998
  This is a relocation for two instruction fields holding a register and
3999
  an offset, the equivalent of the relocation.
4000
ENUM
4001
  BFD_RELOC_MMIX_LOCAL
4002
ENUMDOC
4003
  This relocation is an assertion that the expression is not allocated as
4004
  a global register.  It does not modify contents.
4005
 
4006
ENUM
4007
  BFD_RELOC_AVR_7_PCREL
4008
ENUMDOC
4009
  This is a 16 bit reloc for the AVR that stores 8 bit pc relative
4010
  short offset into 7 bits.
4011
ENUM
4012
  BFD_RELOC_AVR_13_PCREL
4013
ENUMDOC
4014
  This is a 16 bit reloc for the AVR that stores 13 bit pc relative
4015
  short offset into 12 bits.
4016
ENUM
4017
  BFD_RELOC_AVR_16_PM
4018
ENUMDOC
4019
  This is a 16 bit reloc for the AVR that stores 17 bit value (usually
4020
  program memory address) into 16 bits.
4021
ENUM
4022
  BFD_RELOC_AVR_LO8_LDI
4023
ENUMDOC
4024
  This is a 16 bit reloc for the AVR that stores 8 bit value (usually
4025
  data memory address) into 8 bit immediate value of LDI insn.
4026
ENUM
4027
  BFD_RELOC_AVR_HI8_LDI
4028
ENUMDOC
4029
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4030
  of data memory address) into 8 bit immediate value of LDI insn.
4031
ENUM
4032
  BFD_RELOC_AVR_HH8_LDI
4033
ENUMDOC
4034
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4035
  of program memory address) into 8 bit immediate value of LDI insn.
4036
ENUM
4037
  BFD_RELOC_AVR_MS8_LDI
4038
ENUMDOC
4039
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4040
  of 32 bit value) into 8 bit immediate value of LDI insn.
4041
ENUM
4042
  BFD_RELOC_AVR_LO8_LDI_NEG
4043
ENUMDOC
4044
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4045
  (usually data memory address) into 8 bit immediate value of SUBI insn.
4046
ENUM
4047
  BFD_RELOC_AVR_HI8_LDI_NEG
4048
ENUMDOC
4049
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4050
  (high 8 bit of data memory address) into 8 bit immediate value of
4051
  SUBI insn.
4052
ENUM
4053
  BFD_RELOC_AVR_HH8_LDI_NEG
4054
ENUMDOC
4055
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4056
  (most high 8 bit of program memory address) into 8 bit immediate value
4057
  of LDI or SUBI insn.
4058
ENUM
4059
  BFD_RELOC_AVR_MS8_LDI_NEG
4060
ENUMDOC
4061
  This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
4062
  of 32 bit value) into 8 bit immediate value of LDI insn.
4063
ENUM
4064
  BFD_RELOC_AVR_LO8_LDI_PM
4065
ENUMDOC
4066
  This is a 16 bit reloc for the AVR that stores 8 bit value (usually
4067
  command address) into 8 bit immediate value of LDI insn.
4068
ENUM
4069
  BFD_RELOC_AVR_LO8_LDI_GS
4070
ENUMDOC
4071
  This is a 16 bit reloc for the AVR that stores 8 bit value
4072
  (command address) into 8 bit immediate value of LDI insn. If the address
4073
  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
4074
  in the lower 128k.
4075
ENUM
4076
  BFD_RELOC_AVR_HI8_LDI_PM
4077
ENUMDOC
4078
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4079
  of command address) into 8 bit immediate value of LDI insn.
4080
ENUM
4081
  BFD_RELOC_AVR_HI8_LDI_GS
4082
ENUMDOC
4083
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4084
  of command address) into 8 bit immediate value of LDI insn.  If the address
4085
  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
4086
  below 128k.
4087
ENUM
4088
  BFD_RELOC_AVR_HH8_LDI_PM
4089
ENUMDOC
4090
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4091
  of command address) into 8 bit immediate value of LDI insn.
4092
ENUM
4093
  BFD_RELOC_AVR_LO8_LDI_PM_NEG
4094
ENUMDOC
4095
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4096
  (usually command address) into 8 bit immediate value of SUBI insn.
4097
ENUM
4098
  BFD_RELOC_AVR_HI8_LDI_PM_NEG
4099
ENUMDOC
4100
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4101
  (high 8 bit of 16 bit command address) into 8 bit immediate value
4102
  of SUBI insn.
4103
ENUM
4104
  BFD_RELOC_AVR_HH8_LDI_PM_NEG
4105
ENUMDOC
4106
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
4107
  (high 6 bit of 22 bit command address) into 8 bit immediate
4108
  value of SUBI insn.
4109
ENUM
4110
  BFD_RELOC_AVR_CALL
4111
ENUMDOC
4112
  This is a 32 bit reloc for the AVR that stores 23 bit value
4113
  into 22 bits.
4114
ENUM
4115
  BFD_RELOC_AVR_LDI
4116
ENUMDOC
4117
  This is a 16 bit reloc for the AVR that stores all needed bits
4118
  for absolute addressing with ldi with overflow check to linktime
4119
ENUM
4120
  BFD_RELOC_AVR_6
4121
ENUMDOC
4122
  This is a 6 bit reloc for the AVR that stores offset for ldd/std
4123
  instructions
4124
ENUM
4125
  BFD_RELOC_AVR_6_ADIW
4126
ENUMDOC
4127
  This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
4128
  instructions
4129
 
4130
ENUM
4131
  BFD_RELOC_RX_NEG8
4132
ENUMX
4133
  BFD_RELOC_RX_NEG16
4134
ENUMX
4135
  BFD_RELOC_RX_NEG24
4136
ENUMX
4137
  BFD_RELOC_RX_NEG32
4138
ENUMX
4139
  BFD_RELOC_RX_16_OP
4140
ENUMX
4141
  BFD_RELOC_RX_24_OP
4142
ENUMX
4143
  BFD_RELOC_RX_32_OP
4144
ENUMX
4145
  BFD_RELOC_RX_8U
4146
ENUMX
4147
  BFD_RELOC_RX_16U
4148
ENUMX
4149
  BFD_RELOC_RX_24U
4150
ENUMX
4151
  BFD_RELOC_RX_DIR3U_PCREL
4152
ENUMX
4153
  BFD_RELOC_RX_DIFF
4154
ENUMX
4155
  BFD_RELOC_RX_GPRELB
4156
ENUMX
4157
  BFD_RELOC_RX_GPRELW
4158
ENUMX
4159
  BFD_RELOC_RX_GPRELL
4160
ENUMX
4161
  BFD_RELOC_RX_SYM
4162
ENUMX
4163
  BFD_RELOC_RX_OP_SUBTRACT
4164
ENUMX
4165
  BFD_RELOC_RX_ABS8
4166
ENUMX
4167
  BFD_RELOC_RX_ABS16
4168
ENUMX
4169
  BFD_RELOC_RX_ABS32
4170
ENUMX
4171
  BFD_RELOC_RX_ABS16U
4172
ENUMX
4173
  BFD_RELOC_RX_ABS16UW
4174
ENUMX
4175
  BFD_RELOC_RX_ABS16UL
4176
ENUMX
4177
  BFD_RELOC_RX_RELAX
4178
ENUMDOC
4179
  Renesas RX Relocations.
4180
 
4181
ENUM
4182
  BFD_RELOC_390_12
4183
ENUMDOC
4184
   Direct 12 bit.
4185
ENUM
4186
  BFD_RELOC_390_GOT12
4187
ENUMDOC
4188
  12 bit GOT offset.
4189
ENUM
4190
  BFD_RELOC_390_PLT32
4191
ENUMDOC
4192
  32 bit PC relative PLT address.
4193
ENUM
4194
  BFD_RELOC_390_COPY
4195
ENUMDOC
4196
  Copy symbol at runtime.
4197
ENUM
4198
  BFD_RELOC_390_GLOB_DAT
4199
ENUMDOC
4200
  Create GOT entry.
4201
ENUM
4202
  BFD_RELOC_390_JMP_SLOT
4203
ENUMDOC
4204
  Create PLT entry.
4205
ENUM
4206
  BFD_RELOC_390_RELATIVE
4207
ENUMDOC
4208
  Adjust by program base.
4209
ENUM
4210
  BFD_RELOC_390_GOTPC
4211
ENUMDOC
4212
  32 bit PC relative offset to GOT.
4213
ENUM
4214
  BFD_RELOC_390_GOT16
4215
ENUMDOC
4216
  16 bit GOT offset.
4217
ENUM
4218
  BFD_RELOC_390_PC16DBL
4219
ENUMDOC
4220
  PC relative 16 bit shifted by 1.
4221
ENUM
4222
  BFD_RELOC_390_PLT16DBL
4223
ENUMDOC
4224
  16 bit PC rel. PLT shifted by 1.
4225
ENUM
4226
  BFD_RELOC_390_PC32DBL
4227
ENUMDOC
4228
  PC relative 32 bit shifted by 1.
4229
ENUM
4230
  BFD_RELOC_390_PLT32DBL
4231
ENUMDOC
4232
  32 bit PC rel. PLT shifted by 1.
4233
ENUM
4234
  BFD_RELOC_390_GOTPCDBL
4235
ENUMDOC
4236
  32 bit PC rel. GOT shifted by 1.
4237
ENUM
4238
  BFD_RELOC_390_GOT64
4239
ENUMDOC
4240
  64 bit GOT offset.
4241
ENUM
4242
  BFD_RELOC_390_PLT64
4243
ENUMDOC
4244
  64 bit PC relative PLT address.
4245
ENUM
4246
  BFD_RELOC_390_GOTENT
4247
ENUMDOC
4248
  32 bit rel. offset to GOT entry.
4249
ENUM
4250
  BFD_RELOC_390_GOTOFF64
4251
ENUMDOC
4252
  64 bit offset to GOT.
4253
ENUM
4254
  BFD_RELOC_390_GOTPLT12
4255
ENUMDOC
4256
  12-bit offset to symbol-entry within GOT, with PLT handling.
4257
ENUM
4258
  BFD_RELOC_390_GOTPLT16
4259
ENUMDOC
4260
  16-bit offset to symbol-entry within GOT, with PLT handling.
4261
ENUM
4262
  BFD_RELOC_390_GOTPLT32
4263
ENUMDOC
4264
  32-bit offset to symbol-entry within GOT, with PLT handling.
4265
ENUM
4266
  BFD_RELOC_390_GOTPLT64
4267
ENUMDOC
4268
  64-bit offset to symbol-entry within GOT, with PLT handling.
4269
ENUM
4270
  BFD_RELOC_390_GOTPLTENT
4271
ENUMDOC
4272
  32-bit rel. offset to symbol-entry within GOT, with PLT handling.
4273
ENUM
4274
  BFD_RELOC_390_PLTOFF16
4275
ENUMDOC
4276
  16-bit rel. offset from the GOT to a PLT entry.
4277
ENUM
4278
  BFD_RELOC_390_PLTOFF32
4279
ENUMDOC
4280
  32-bit rel. offset from the GOT to a PLT entry.
4281
ENUM
4282
  BFD_RELOC_390_PLTOFF64
4283
ENUMDOC
4284
  64-bit rel. offset from the GOT to a PLT entry.
4285
 
4286
ENUM
4287
  BFD_RELOC_390_TLS_LOAD
4288
ENUMX
4289
  BFD_RELOC_390_TLS_GDCALL
4290
ENUMX
4291
  BFD_RELOC_390_TLS_LDCALL
4292
ENUMX
4293
  BFD_RELOC_390_TLS_GD32
4294
ENUMX
4295
  BFD_RELOC_390_TLS_GD64
4296
ENUMX
4297
  BFD_RELOC_390_TLS_GOTIE12
4298
ENUMX
4299
  BFD_RELOC_390_TLS_GOTIE32
4300
ENUMX
4301
  BFD_RELOC_390_TLS_GOTIE64
4302
ENUMX
4303
  BFD_RELOC_390_TLS_LDM32
4304
ENUMX
4305
  BFD_RELOC_390_TLS_LDM64
4306
ENUMX
4307
  BFD_RELOC_390_TLS_IE32
4308
ENUMX
4309
  BFD_RELOC_390_TLS_IE64
4310
ENUMX
4311
  BFD_RELOC_390_TLS_IEENT
4312
ENUMX
4313
  BFD_RELOC_390_TLS_LE32
4314
ENUMX
4315
  BFD_RELOC_390_TLS_LE64
4316
ENUMX
4317
  BFD_RELOC_390_TLS_LDO32
4318
ENUMX
4319
  BFD_RELOC_390_TLS_LDO64
4320
ENUMX
4321
  BFD_RELOC_390_TLS_DTPMOD
4322
ENUMX
4323
  BFD_RELOC_390_TLS_DTPOFF
4324
ENUMX
4325
  BFD_RELOC_390_TLS_TPOFF
4326
ENUMDOC
4327
  s390 tls relocations.
4328
 
4329
ENUM
4330
  BFD_RELOC_390_20
4331
ENUMX
4332
  BFD_RELOC_390_GOT20
4333
ENUMX
4334
  BFD_RELOC_390_GOTPLT20
4335
ENUMX
4336
  BFD_RELOC_390_TLS_GOTIE20
4337
ENUMDOC
4338
  Long displacement extension.
4339
 
4340
ENUM
4341
  BFD_RELOC_SCORE_GPREL15
4342
ENUMDOC
4343
  Score relocations
4344
  Low 16 bit for load/store
4345
ENUM
4346
  BFD_RELOC_SCORE_DUMMY2
4347
ENUMX
4348
  BFD_RELOC_SCORE_JMP
4349
ENUMDOC
4350
  This is a 24-bit reloc with the right 1 bit assumed to be 0
4351
ENUM
4352
  BFD_RELOC_SCORE_BRANCH
4353
ENUMDOC
4354
  This is a 19-bit reloc with the right 1 bit assumed to be 0
4355
ENUM
4356
  BFD_RELOC_SCORE_IMM30
4357
ENUMDOC
4358
  This is a 32-bit reloc for 48-bit instructions.
4359
ENUM
4360
  BFD_RELOC_SCORE_IMM32
4361
ENUMDOC
4362
  This is a 32-bit reloc for 48-bit instructions.
4363
ENUM
4364
  BFD_RELOC_SCORE16_JMP
4365
ENUMDOC
4366
  This is a 11-bit reloc with the right 1 bit assumed to be 0
4367
ENUM
4368
  BFD_RELOC_SCORE16_BRANCH
4369
ENUMDOC
4370
  This is a 8-bit reloc with the right 1 bit assumed to be 0
4371
ENUM
4372
  BFD_RELOC_SCORE_BCMP
4373
ENUMDOC
4374
   This is a 9-bit reloc with the right 1 bit assumed to be 0
4375
ENUM
4376
  BFD_RELOC_SCORE_GOT15
4377
ENUMX
4378
  BFD_RELOC_SCORE_GOT_LO16
4379
ENUMX
4380
  BFD_RELOC_SCORE_CALL15
4381
ENUMX
4382
  BFD_RELOC_SCORE_DUMMY_HI16
4383
ENUMDOC
4384
  Undocumented Score relocs
4385
 
4386
ENUM
4387
  BFD_RELOC_IP2K_FR9
4388
ENUMDOC
4389
  Scenix IP2K - 9-bit register number / data address
4390
ENUM
4391
  BFD_RELOC_IP2K_BANK
4392
ENUMDOC
4393
  Scenix IP2K - 4-bit register/data bank number
4394
ENUM
4395
  BFD_RELOC_IP2K_ADDR16CJP
4396
ENUMDOC
4397
  Scenix IP2K - low 13 bits of instruction word address
4398
ENUM
4399
  BFD_RELOC_IP2K_PAGE3
4400
ENUMDOC
4401
  Scenix IP2K - high 3 bits of instruction word address
4402
ENUM
4403
  BFD_RELOC_IP2K_LO8DATA
4404
ENUMX
4405
  BFD_RELOC_IP2K_HI8DATA
4406
ENUMX
4407
  BFD_RELOC_IP2K_EX8DATA
4408
ENUMDOC
4409
  Scenix IP2K - ext/low/high 8 bits of data address
4410
ENUM
4411
  BFD_RELOC_IP2K_LO8INSN
4412
ENUMX
4413
  BFD_RELOC_IP2K_HI8INSN
4414
ENUMDOC
4415
  Scenix IP2K - low/high 8 bits of instruction word address
4416
ENUM
4417
  BFD_RELOC_IP2K_PC_SKIP
4418
ENUMDOC
4419
  Scenix IP2K - even/odd PC modifier to modify snb pcl.0
4420
ENUM
4421
  BFD_RELOC_IP2K_TEXT
4422
ENUMDOC
4423
  Scenix IP2K - 16 bit word address in text section.
4424
ENUM
4425
  BFD_RELOC_IP2K_FR_OFFSET
4426
ENUMDOC
4427
  Scenix IP2K - 7-bit sp or dp offset
4428
ENUM
4429
  BFD_RELOC_VPE4KMATH_DATA
4430
ENUMX
4431
  BFD_RELOC_VPE4KMATH_INSN
4432
ENUMDOC
4433
  Scenix VPE4K coprocessor - data/insn-space addressing
4434
 
4435
ENUM
4436
  BFD_RELOC_VTABLE_INHERIT
4437
ENUMX
4438
  BFD_RELOC_VTABLE_ENTRY
4439
ENUMDOC
4440
  These two relocations are used by the linker to determine which of
4441
  the entries in a C++ virtual function table are actually used.  When
4442
  the --gc-sections option is given, the linker will zero out the entries
4443
  that are not used, so that the code for those functions need not be
4444
  included in the output.
4445
 
4446
  VTABLE_INHERIT is a zero-space relocation used to describe to the
4447
  linker the inheritance tree of a C++ virtual function table.  The
4448
  relocation's symbol should be the parent class' vtable, and the
4449
  relocation should be located at the child vtable.
4450
 
4451
  VTABLE_ENTRY is a zero-space relocation that describes the use of a
4452
  virtual function table entry.  The reloc's symbol should refer to the
4453
  table of the class mentioned in the code.  Off of that base, an offset
4454
  describes the entry that is being used.  For Rela hosts, this offset
4455
  is stored in the reloc's addend.  For Rel hosts, we are forced to put
4456
  this offset in the reloc's section offset.
4457
 
4458
ENUM
4459
  BFD_RELOC_IA64_IMM14
4460
ENUMX
4461
  BFD_RELOC_IA64_IMM22
4462
ENUMX
4463
  BFD_RELOC_IA64_IMM64
4464
ENUMX
4465
  BFD_RELOC_IA64_DIR32MSB
4466
ENUMX
4467
  BFD_RELOC_IA64_DIR32LSB
4468
ENUMX
4469
  BFD_RELOC_IA64_DIR64MSB
4470
ENUMX
4471
  BFD_RELOC_IA64_DIR64LSB
4472
ENUMX
4473
  BFD_RELOC_IA64_GPREL22
4474
ENUMX
4475
  BFD_RELOC_IA64_GPREL64I
4476
ENUMX
4477
  BFD_RELOC_IA64_GPREL32MSB
4478
ENUMX
4479
  BFD_RELOC_IA64_GPREL32LSB
4480
ENUMX
4481
  BFD_RELOC_IA64_GPREL64MSB
4482
ENUMX
4483
  BFD_RELOC_IA64_GPREL64LSB
4484
ENUMX
4485
  BFD_RELOC_IA64_LTOFF22
4486
ENUMX
4487
  BFD_RELOC_IA64_LTOFF64I
4488
ENUMX
4489
  BFD_RELOC_IA64_PLTOFF22
4490
ENUMX
4491
  BFD_RELOC_IA64_PLTOFF64I
4492
ENUMX
4493
  BFD_RELOC_IA64_PLTOFF64MSB
4494
ENUMX
4495
  BFD_RELOC_IA64_PLTOFF64LSB
4496
ENUMX
4497
  BFD_RELOC_IA64_FPTR64I
4498
ENUMX
4499
  BFD_RELOC_IA64_FPTR32MSB
4500
ENUMX
4501
  BFD_RELOC_IA64_FPTR32LSB
4502
ENUMX
4503
  BFD_RELOC_IA64_FPTR64MSB
4504
ENUMX
4505
  BFD_RELOC_IA64_FPTR64LSB
4506
ENUMX
4507
  BFD_RELOC_IA64_PCREL21B
4508
ENUMX
4509
  BFD_RELOC_IA64_PCREL21BI
4510
ENUMX
4511
  BFD_RELOC_IA64_PCREL21M
4512
ENUMX
4513
  BFD_RELOC_IA64_PCREL21F
4514
ENUMX
4515
  BFD_RELOC_IA64_PCREL22
4516
ENUMX
4517
  BFD_RELOC_IA64_PCREL60B
4518
ENUMX
4519
  BFD_RELOC_IA64_PCREL64I
4520
ENUMX
4521
  BFD_RELOC_IA64_PCREL32MSB
4522
ENUMX
4523
  BFD_RELOC_IA64_PCREL32LSB
4524
ENUMX
4525
  BFD_RELOC_IA64_PCREL64MSB
4526
ENUMX
4527
  BFD_RELOC_IA64_PCREL64LSB
4528
ENUMX
4529
  BFD_RELOC_IA64_LTOFF_FPTR22
4530
ENUMX
4531
  BFD_RELOC_IA64_LTOFF_FPTR64I
4532
ENUMX
4533
  BFD_RELOC_IA64_LTOFF_FPTR32MSB
4534
ENUMX
4535
  BFD_RELOC_IA64_LTOFF_FPTR32LSB
4536
ENUMX
4537
  BFD_RELOC_IA64_LTOFF_FPTR64MSB
4538
ENUMX
4539
  BFD_RELOC_IA64_LTOFF_FPTR64LSB
4540
ENUMX
4541
  BFD_RELOC_IA64_SEGREL32MSB
4542
ENUMX
4543
  BFD_RELOC_IA64_SEGREL32LSB
4544
ENUMX
4545
  BFD_RELOC_IA64_SEGREL64MSB
4546
ENUMX
4547
  BFD_RELOC_IA64_SEGREL64LSB
4548
ENUMX
4549
  BFD_RELOC_IA64_SECREL32MSB
4550
ENUMX
4551
  BFD_RELOC_IA64_SECREL32LSB
4552
ENUMX
4553
  BFD_RELOC_IA64_SECREL64MSB
4554
ENUMX
4555
  BFD_RELOC_IA64_SECREL64LSB
4556
ENUMX
4557
  BFD_RELOC_IA64_REL32MSB
4558
ENUMX
4559
  BFD_RELOC_IA64_REL32LSB
4560
ENUMX
4561
  BFD_RELOC_IA64_REL64MSB
4562
ENUMX
4563
  BFD_RELOC_IA64_REL64LSB
4564
ENUMX
4565
  BFD_RELOC_IA64_LTV32MSB
4566
ENUMX
4567
  BFD_RELOC_IA64_LTV32LSB
4568
ENUMX
4569
  BFD_RELOC_IA64_LTV64MSB
4570
ENUMX
4571
  BFD_RELOC_IA64_LTV64LSB
4572
ENUMX
4573
  BFD_RELOC_IA64_IPLTMSB
4574
ENUMX
4575
  BFD_RELOC_IA64_IPLTLSB
4576
ENUMX
4577
  BFD_RELOC_IA64_COPY
4578
ENUMX
4579
  BFD_RELOC_IA64_LTOFF22X
4580
ENUMX
4581
  BFD_RELOC_IA64_LDXMOV
4582
ENUMX
4583
  BFD_RELOC_IA64_TPREL14
4584
ENUMX
4585
  BFD_RELOC_IA64_TPREL22
4586
ENUMX
4587
  BFD_RELOC_IA64_TPREL64I
4588
ENUMX
4589
  BFD_RELOC_IA64_TPREL64MSB
4590
ENUMX
4591
  BFD_RELOC_IA64_TPREL64LSB
4592
ENUMX
4593
  BFD_RELOC_IA64_LTOFF_TPREL22
4594
ENUMX
4595
  BFD_RELOC_IA64_DTPMOD64MSB
4596
ENUMX
4597
  BFD_RELOC_IA64_DTPMOD64LSB
4598
ENUMX
4599
  BFD_RELOC_IA64_LTOFF_DTPMOD22
4600
ENUMX
4601
  BFD_RELOC_IA64_DTPREL14
4602
ENUMX
4603
  BFD_RELOC_IA64_DTPREL22
4604
ENUMX
4605
  BFD_RELOC_IA64_DTPREL64I
4606
ENUMX
4607
  BFD_RELOC_IA64_DTPREL32MSB
4608
ENUMX
4609
  BFD_RELOC_IA64_DTPREL32LSB
4610
ENUMX
4611
  BFD_RELOC_IA64_DTPREL64MSB
4612
ENUMX
4613
  BFD_RELOC_IA64_DTPREL64LSB
4614
ENUMX
4615
  BFD_RELOC_IA64_LTOFF_DTPREL22
4616
ENUMDOC
4617
  Intel IA64 Relocations.
4618
 
4619
ENUM
4620
  BFD_RELOC_M68HC11_HI8
4621
ENUMDOC
4622
  Motorola 68HC11 reloc.
4623
  This is the 8 bit high part of an absolute address.
4624
ENUM
4625
  BFD_RELOC_M68HC11_LO8
4626
ENUMDOC
4627
  Motorola 68HC11 reloc.
4628
  This is the 8 bit low part of an absolute address.
4629
ENUM
4630
  BFD_RELOC_M68HC11_3B
4631
ENUMDOC
4632
  Motorola 68HC11 reloc.
4633
  This is the 3 bit of a value.
4634
ENUM
4635
  BFD_RELOC_M68HC11_RL_JUMP
4636
ENUMDOC
4637
  Motorola 68HC11 reloc.
4638
  This reloc marks the beginning of a jump/call instruction.
4639
  It is used for linker relaxation to correctly identify beginning
4640
  of instruction and change some branches to use PC-relative
4641
  addressing mode.
4642
ENUM
4643
  BFD_RELOC_M68HC11_RL_GROUP
4644
ENUMDOC
4645
  Motorola 68HC11 reloc.
4646
  This reloc marks a group of several instructions that gcc generates
4647
  and for which the linker relaxation pass can modify and/or remove
4648
  some of them.
4649
ENUM
4650
  BFD_RELOC_M68HC11_LO16
4651
ENUMDOC
4652
  Motorola 68HC11 reloc.
4653
  This is the 16-bit lower part of an address.  It is used for 'call'
4654
  instruction to specify the symbol address without any special
4655
  transformation (due to memory bank window).
4656
ENUM
4657
  BFD_RELOC_M68HC11_PAGE
4658
ENUMDOC
4659
  Motorola 68HC11 reloc.
4660
  This is a 8-bit reloc that specifies the page number of an address.
4661
  It is used by 'call' instruction to specify the page number of
4662
  the symbol.
4663
ENUM
4664
  BFD_RELOC_M68HC11_24
4665
ENUMDOC
4666
  Motorola 68HC11 reloc.
4667
  This is a 24-bit reloc that represents the address with a 16-bit
4668
  value and a 8-bit page number.  The symbol address is transformed
4669
  to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
4670
ENUM
4671
  BFD_RELOC_M68HC12_5B
4672
ENUMDOC
4673
  Motorola 68HC12 reloc.
4674
  This is the 5 bits of a value.
4675
 
4676
ENUM
4677
  BFD_RELOC_16C_NUM08
4678
ENUMX
4679
  BFD_RELOC_16C_NUM08_C
4680
ENUMX
4681
  BFD_RELOC_16C_NUM16
4682
ENUMX
4683
  BFD_RELOC_16C_NUM16_C
4684
ENUMX
4685
  BFD_RELOC_16C_NUM32
4686
ENUMX
4687
  BFD_RELOC_16C_NUM32_C
4688
ENUMX
4689
  BFD_RELOC_16C_DISP04
4690
ENUMX
4691
  BFD_RELOC_16C_DISP04_C
4692
ENUMX
4693
  BFD_RELOC_16C_DISP08
4694
ENUMX
4695
  BFD_RELOC_16C_DISP08_C
4696
ENUMX
4697
  BFD_RELOC_16C_DISP16
4698
ENUMX
4699
  BFD_RELOC_16C_DISP16_C
4700
ENUMX
4701
  BFD_RELOC_16C_DISP24
4702
ENUMX
4703
  BFD_RELOC_16C_DISP24_C
4704
ENUMX
4705
  BFD_RELOC_16C_DISP24a
4706
ENUMX
4707
  BFD_RELOC_16C_DISP24a_C
4708
ENUMX
4709
  BFD_RELOC_16C_REG04
4710
ENUMX
4711
  BFD_RELOC_16C_REG04_C
4712
ENUMX
4713
  BFD_RELOC_16C_REG04a
4714
ENUMX
4715
  BFD_RELOC_16C_REG04a_C
4716
ENUMX
4717
  BFD_RELOC_16C_REG14
4718
ENUMX
4719
  BFD_RELOC_16C_REG14_C
4720
ENUMX
4721
  BFD_RELOC_16C_REG16
4722
ENUMX
4723
  BFD_RELOC_16C_REG16_C
4724
ENUMX
4725
  BFD_RELOC_16C_REG20
4726
ENUMX
4727
  BFD_RELOC_16C_REG20_C
4728
ENUMX
4729
  BFD_RELOC_16C_ABS20
4730
ENUMX
4731
  BFD_RELOC_16C_ABS20_C
4732
ENUMX
4733
  BFD_RELOC_16C_ABS24
4734
ENUMX
4735
  BFD_RELOC_16C_ABS24_C
4736
ENUMX
4737
  BFD_RELOC_16C_IMM04
4738
ENUMX
4739
  BFD_RELOC_16C_IMM04_C
4740
ENUMX
4741
  BFD_RELOC_16C_IMM16
4742
ENUMX
4743
  BFD_RELOC_16C_IMM16_C
4744
ENUMX
4745
  BFD_RELOC_16C_IMM20
4746
ENUMX
4747
  BFD_RELOC_16C_IMM20_C
4748
ENUMX
4749
  BFD_RELOC_16C_IMM24
4750
ENUMX
4751
  BFD_RELOC_16C_IMM24_C
4752
ENUMX
4753
  BFD_RELOC_16C_IMM32
4754
ENUMX
4755
  BFD_RELOC_16C_IMM32_C
4756
ENUMDOC
4757
  NS CR16C Relocations.
4758
 
4759
ENUM
4760
  BFD_RELOC_CR16_NUM8
4761
ENUMX
4762
  BFD_RELOC_CR16_NUM16
4763
ENUMX
4764
  BFD_RELOC_CR16_NUM32
4765
ENUMX
4766
  BFD_RELOC_CR16_NUM32a
4767
ENUMX
4768
  BFD_RELOC_CR16_REGREL0
4769
ENUMX
4770
  BFD_RELOC_CR16_REGREL4
4771
ENUMX
4772
  BFD_RELOC_CR16_REGREL4a
4773
ENUMX
4774
  BFD_RELOC_CR16_REGREL14
4775
ENUMX
4776
  BFD_RELOC_CR16_REGREL14a
4777
ENUMX
4778
  BFD_RELOC_CR16_REGREL16
4779
ENUMX
4780
  BFD_RELOC_CR16_REGREL20
4781
ENUMX
4782
  BFD_RELOC_CR16_REGREL20a
4783
ENUMX
4784
  BFD_RELOC_CR16_ABS20
4785
ENUMX
4786
  BFD_RELOC_CR16_ABS24
4787
ENUMX
4788
  BFD_RELOC_CR16_IMM4
4789
ENUMX
4790
  BFD_RELOC_CR16_IMM8
4791
ENUMX
4792
  BFD_RELOC_CR16_IMM16
4793
ENUMX
4794
  BFD_RELOC_CR16_IMM20
4795
ENUMX
4796
  BFD_RELOC_CR16_IMM24
4797
ENUMX
4798
  BFD_RELOC_CR16_IMM32
4799
ENUMX
4800
  BFD_RELOC_CR16_IMM32a
4801
ENUMX
4802
  BFD_RELOC_CR16_DISP4
4803
ENUMX
4804
  BFD_RELOC_CR16_DISP8
4805
ENUMX
4806
  BFD_RELOC_CR16_DISP16
4807
ENUMX
4808
  BFD_RELOC_CR16_DISP20
4809
ENUMX
4810
  BFD_RELOC_CR16_DISP24
4811
ENUMX
4812
  BFD_RELOC_CR16_DISP24a
4813
ENUMX
4814
  BFD_RELOC_CR16_SWITCH8
4815
ENUMX
4816
  BFD_RELOC_CR16_SWITCH16
4817
ENUMX
4818
  BFD_RELOC_CR16_SWITCH32
4819
ENUMX
4820
  BFD_RELOC_CR16_GOT_REGREL20
4821
ENUMX
4822
  BFD_RELOC_CR16_GOTC_REGREL20
4823
ENUMX
4824
  BFD_RELOC_CR16_GLOB_DAT
4825
ENUMDOC
4826
  NS CR16 Relocations.
4827
 
4828
ENUM
4829
  BFD_RELOC_CRX_REL4
4830
ENUMX
4831
  BFD_RELOC_CRX_REL8
4832
ENUMX
4833
  BFD_RELOC_CRX_REL8_CMP
4834
ENUMX
4835
  BFD_RELOC_CRX_REL16
4836
ENUMX
4837
  BFD_RELOC_CRX_REL24
4838
ENUMX
4839
  BFD_RELOC_CRX_REL32
4840
ENUMX
4841
  BFD_RELOC_CRX_REGREL12
4842
ENUMX
4843
  BFD_RELOC_CRX_REGREL22
4844
ENUMX
4845
  BFD_RELOC_CRX_REGREL28
4846
ENUMX
4847
  BFD_RELOC_CRX_REGREL32
4848
ENUMX
4849
  BFD_RELOC_CRX_ABS16
4850
ENUMX
4851
  BFD_RELOC_CRX_ABS32
4852
ENUMX
4853
  BFD_RELOC_CRX_NUM8
4854
ENUMX
4855
  BFD_RELOC_CRX_NUM16
4856
ENUMX
4857
  BFD_RELOC_CRX_NUM32
4858
ENUMX
4859
  BFD_RELOC_CRX_IMM16
4860
ENUMX
4861
  BFD_RELOC_CRX_IMM32
4862
ENUMX
4863
  BFD_RELOC_CRX_SWITCH8
4864
ENUMX
4865
  BFD_RELOC_CRX_SWITCH16
4866
ENUMX
4867
  BFD_RELOC_CRX_SWITCH32
4868
ENUMDOC
4869
  NS CRX Relocations.
4870
 
4871
ENUM
4872
  BFD_RELOC_CRIS_BDISP8
4873
ENUMX
4874
  BFD_RELOC_CRIS_UNSIGNED_5
4875
ENUMX
4876
  BFD_RELOC_CRIS_SIGNED_6
4877
ENUMX
4878
  BFD_RELOC_CRIS_UNSIGNED_6
4879
ENUMX
4880
  BFD_RELOC_CRIS_SIGNED_8
4881
ENUMX
4882
  BFD_RELOC_CRIS_UNSIGNED_8
4883
ENUMX
4884
  BFD_RELOC_CRIS_SIGNED_16
4885
ENUMX
4886
  BFD_RELOC_CRIS_UNSIGNED_16
4887
ENUMX
4888
  BFD_RELOC_CRIS_LAPCQ_OFFSET
4889
ENUMX
4890
  BFD_RELOC_CRIS_UNSIGNED_4
4891
ENUMDOC
4892
  These relocs are only used within the CRIS assembler.  They are not
4893
  (at present) written to any object files.
4894
ENUM
4895
  BFD_RELOC_CRIS_COPY
4896
ENUMX
4897
  BFD_RELOC_CRIS_GLOB_DAT
4898
ENUMX
4899
  BFD_RELOC_CRIS_JUMP_SLOT
4900
ENUMX
4901
  BFD_RELOC_CRIS_RELATIVE
4902
ENUMDOC
4903
  Relocs used in ELF shared libraries for CRIS.
4904
ENUM
4905
  BFD_RELOC_CRIS_32_GOT
4906
ENUMDOC
4907
  32-bit offset to symbol-entry within GOT.
4908
ENUM
4909
  BFD_RELOC_CRIS_16_GOT
4910
ENUMDOC
4911
  16-bit offset to symbol-entry within GOT.
4912
ENUM
4913
  BFD_RELOC_CRIS_32_GOTPLT
4914
ENUMDOC
4915
  32-bit offset to symbol-entry within GOT, with PLT handling.
4916
ENUM
4917
  BFD_RELOC_CRIS_16_GOTPLT
4918
ENUMDOC
4919
  16-bit offset to symbol-entry within GOT, with PLT handling.
4920
ENUM
4921
  BFD_RELOC_CRIS_32_GOTREL
4922
ENUMDOC
4923
  32-bit offset to symbol, relative to GOT.
4924
ENUM
4925
  BFD_RELOC_CRIS_32_PLT_GOTREL
4926
ENUMDOC
4927
  32-bit offset to symbol with PLT entry, relative to GOT.
4928
ENUM
4929
  BFD_RELOC_CRIS_32_PLT_PCREL
4930
ENUMDOC
4931
  32-bit offset to symbol with PLT entry, relative to this relocation.
4932
 
4933
ENUM
4934
  BFD_RELOC_CRIS_32_GOT_GD
4935
ENUMX
4936
  BFD_RELOC_CRIS_16_GOT_GD
4937
ENUMX
4938
  BFD_RELOC_CRIS_32_GD
4939
ENUMX
4940
  BFD_RELOC_CRIS_DTP
4941
ENUMX
4942
  BFD_RELOC_CRIS_32_DTPREL
4943
ENUMX
4944
  BFD_RELOC_CRIS_16_DTPREL
4945
ENUMX
4946
  BFD_RELOC_CRIS_32_GOT_TPREL
4947
ENUMX
4948
  BFD_RELOC_CRIS_16_GOT_TPREL
4949
ENUMX
4950
  BFD_RELOC_CRIS_32_TPREL
4951
ENUMX
4952
  BFD_RELOC_CRIS_16_TPREL
4953
ENUMX
4954
  BFD_RELOC_CRIS_DTPMOD
4955
ENUMX
4956
  BFD_RELOC_CRIS_32_IE
4957
ENUMDOC
4958
  Relocs used in TLS code for CRIS.
4959
 
4960
ENUM
4961
  BFD_RELOC_860_COPY
4962
ENUMX
4963
  BFD_RELOC_860_GLOB_DAT
4964
ENUMX
4965
  BFD_RELOC_860_JUMP_SLOT
4966
ENUMX
4967
  BFD_RELOC_860_RELATIVE
4968
ENUMX
4969
  BFD_RELOC_860_PC26
4970
ENUMX
4971
  BFD_RELOC_860_PLT26
4972
ENUMX
4973
  BFD_RELOC_860_PC16
4974
ENUMX
4975
  BFD_RELOC_860_LOW0
4976
ENUMX
4977
  BFD_RELOC_860_SPLIT0
4978
ENUMX
4979
  BFD_RELOC_860_LOW1
4980
ENUMX
4981
  BFD_RELOC_860_SPLIT1
4982
ENUMX
4983
  BFD_RELOC_860_LOW2
4984
ENUMX
4985
  BFD_RELOC_860_SPLIT2
4986
ENUMX
4987
  BFD_RELOC_860_LOW3
4988
ENUMX
4989
  BFD_RELOC_860_LOGOT0
4990
ENUMX
4991
  BFD_RELOC_860_SPGOT0
4992
ENUMX
4993
  BFD_RELOC_860_LOGOT1
4994
ENUMX
4995
  BFD_RELOC_860_SPGOT1
4996
ENUMX
4997
  BFD_RELOC_860_LOGOTOFF0
4998
ENUMX
4999
  BFD_RELOC_860_SPGOTOFF0
5000
ENUMX
5001
  BFD_RELOC_860_LOGOTOFF1
5002
ENUMX
5003
  BFD_RELOC_860_SPGOTOFF1
5004
ENUMX
5005
  BFD_RELOC_860_LOGOTOFF2
5006
ENUMX
5007
  BFD_RELOC_860_LOGOTOFF3
5008
ENUMX
5009
  BFD_RELOC_860_LOPC
5010
ENUMX
5011
  BFD_RELOC_860_HIGHADJ
5012
ENUMX
5013
  BFD_RELOC_860_HAGOT
5014
ENUMX
5015
  BFD_RELOC_860_HAGOTOFF
5016
ENUMX
5017
  BFD_RELOC_860_HAPC
5018
ENUMX
5019
  BFD_RELOC_860_HIGH
5020
ENUMX
5021
  BFD_RELOC_860_HIGOT
5022
ENUMX
5023
  BFD_RELOC_860_HIGOTOFF
5024
ENUMDOC
5025
  Intel i860 Relocations.
5026
 
5027
ENUM
5028
  BFD_RELOC_OPENRISC_ABS_26
5029
ENUMX
5030
  BFD_RELOC_OPENRISC_REL_26
5031
ENUMDOC
5032
  OpenRISC Relocations.
5033
 
5034
ENUM
5035
  BFD_RELOC_H8_DIR16A8
5036
ENUMX
5037
  BFD_RELOC_H8_DIR16R8
5038
ENUMX
5039
  BFD_RELOC_H8_DIR24A8
5040
ENUMX
5041
  BFD_RELOC_H8_DIR24R8
5042
ENUMX
5043
  BFD_RELOC_H8_DIR32A16
5044
ENUMDOC
5045
  H8 elf Relocations.
5046
 
5047
ENUM
5048
  BFD_RELOC_XSTORMY16_REL_12
5049
ENUMX
5050
  BFD_RELOC_XSTORMY16_12
5051
ENUMX
5052
  BFD_RELOC_XSTORMY16_24
5053
ENUMX
5054
  BFD_RELOC_XSTORMY16_FPTR16
5055
ENUMDOC
5056
  Sony Xstormy16 Relocations.
5057
 
5058
ENUM
5059
  BFD_RELOC_RELC
5060
ENUMDOC
5061
  Self-describing complex relocations.
5062
COMMENT
5063
 
5064
ENUM
5065
  BFD_RELOC_XC16X_PAG
5066
ENUMX
5067
  BFD_RELOC_XC16X_POF
5068
ENUMX
5069
  BFD_RELOC_XC16X_SEG
5070
ENUMX
5071
  BFD_RELOC_XC16X_SOF
5072
ENUMDOC
5073
  Infineon Relocations.
5074
 
5075
ENUM
5076
  BFD_RELOC_VAX_GLOB_DAT
5077
ENUMX
5078
  BFD_RELOC_VAX_JMP_SLOT
5079
ENUMX
5080
  BFD_RELOC_VAX_RELATIVE
5081
ENUMDOC
5082
  Relocations used by VAX ELF.
5083
 
5084
ENUM
5085
  BFD_RELOC_MT_PC16
5086
ENUMDOC
5087
  Morpho MT - 16 bit immediate relocation.
5088
ENUM
5089
  BFD_RELOC_MT_HI16
5090
ENUMDOC
5091
  Morpho MT - Hi 16 bits of an address.
5092
ENUM
5093
  BFD_RELOC_MT_LO16
5094
ENUMDOC
5095
  Morpho MT - Low 16 bits of an address.
5096
ENUM
5097
  BFD_RELOC_MT_GNU_VTINHERIT
5098
ENUMDOC
5099
  Morpho MT - Used to tell the linker which vtable entries are used.
5100
ENUM
5101
  BFD_RELOC_MT_GNU_VTENTRY
5102
ENUMDOC
5103
  Morpho MT - Used to tell the linker which vtable entries are used.
5104
ENUM
5105
  BFD_RELOC_MT_PCINSN8
5106
ENUMDOC
5107
  Morpho MT - 8 bit immediate relocation.
5108
 
5109
ENUM
5110
  BFD_RELOC_MSP430_10_PCREL
5111
ENUMX
5112
  BFD_RELOC_MSP430_16_PCREL
5113
ENUMX
5114
  BFD_RELOC_MSP430_16
5115
ENUMX
5116
  BFD_RELOC_MSP430_16_PCREL_BYTE
5117
ENUMX
5118
  BFD_RELOC_MSP430_16_BYTE
5119
ENUMX
5120
  BFD_RELOC_MSP430_2X_PCREL
5121
ENUMX
5122
  BFD_RELOC_MSP430_RL_PCREL
5123
ENUMDOC
5124
  msp430 specific relocation codes
5125
 
5126
ENUM
5127
  BFD_RELOC_IQ2000_OFFSET_16
5128
ENUMX
5129
  BFD_RELOC_IQ2000_OFFSET_21
5130
ENUMX
5131
  BFD_RELOC_IQ2000_UHI16
5132
ENUMDOC
5133
  IQ2000 Relocations.
5134
 
5135
ENUM
5136
  BFD_RELOC_XTENSA_RTLD
5137
ENUMDOC
5138
  Special Xtensa relocation used only by PLT entries in ELF shared
5139
  objects to indicate that the runtime linker should set the value
5140
  to one of its own internal functions or data structures.
5141
ENUM
5142
  BFD_RELOC_XTENSA_GLOB_DAT
5143
ENUMX
5144
  BFD_RELOC_XTENSA_JMP_SLOT
5145
ENUMX
5146
  BFD_RELOC_XTENSA_RELATIVE
5147
ENUMDOC
5148
  Xtensa relocations for ELF shared objects.
5149
ENUM
5150
  BFD_RELOC_XTENSA_PLT
5151
ENUMDOC
5152
  Xtensa relocation used in ELF object files for symbols that may require
5153
  PLT entries.  Otherwise, this is just a generic 32-bit relocation.
5154
ENUM
5155
  BFD_RELOC_XTENSA_DIFF8
5156
ENUMX
5157
  BFD_RELOC_XTENSA_DIFF16
5158
ENUMX
5159
  BFD_RELOC_XTENSA_DIFF32
5160
ENUMDOC
5161
  Xtensa relocations to mark the difference of two local symbols.
5162
  These are only needed to support linker relaxation and can be ignored
5163
  when not relaxing.  The field is set to the value of the difference
5164
  assuming no relaxation.  The relocation encodes the position of the
5165
  first symbol so the linker can determine whether to adjust the field
5166
  value.
5167
ENUM
5168
  BFD_RELOC_XTENSA_SLOT0_OP
5169
ENUMX
5170
  BFD_RELOC_XTENSA_SLOT1_OP
5171
ENUMX
5172
  BFD_RELOC_XTENSA_SLOT2_OP
5173
ENUMX
5174
  BFD_RELOC_XTENSA_SLOT3_OP
5175
ENUMX
5176
  BFD_RELOC_XTENSA_SLOT4_OP
5177
ENUMX
5178
  BFD_RELOC_XTENSA_SLOT5_OP
5179
ENUMX
5180
  BFD_RELOC_XTENSA_SLOT6_OP
5181
ENUMX
5182
  BFD_RELOC_XTENSA_SLOT7_OP
5183
ENUMX
5184
  BFD_RELOC_XTENSA_SLOT8_OP
5185
ENUMX
5186
  BFD_RELOC_XTENSA_SLOT9_OP
5187
ENUMX
5188
  BFD_RELOC_XTENSA_SLOT10_OP
5189
ENUMX
5190
  BFD_RELOC_XTENSA_SLOT11_OP
5191
ENUMX
5192
  BFD_RELOC_XTENSA_SLOT12_OP
5193
ENUMX
5194
  BFD_RELOC_XTENSA_SLOT13_OP
5195
ENUMX
5196
  BFD_RELOC_XTENSA_SLOT14_OP
5197
ENUMDOC
5198
  Generic Xtensa relocations for instruction operands.  Only the slot
5199
  number is encoded in the relocation.  The relocation applies to the
5200
  last PC-relative immediate operand, or if there are no PC-relative
5201
  immediates, to the last immediate operand.
5202
ENUM
5203
  BFD_RELOC_XTENSA_SLOT0_ALT
5204
ENUMX
5205
  BFD_RELOC_XTENSA_SLOT1_ALT
5206
ENUMX
5207
  BFD_RELOC_XTENSA_SLOT2_ALT
5208
ENUMX
5209
  BFD_RELOC_XTENSA_SLOT3_ALT
5210
ENUMX
5211
  BFD_RELOC_XTENSA_SLOT4_ALT
5212
ENUMX
5213
  BFD_RELOC_XTENSA_SLOT5_ALT
5214
ENUMX
5215
  BFD_RELOC_XTENSA_SLOT6_ALT
5216
ENUMX
5217
  BFD_RELOC_XTENSA_SLOT7_ALT
5218
ENUMX
5219
  BFD_RELOC_XTENSA_SLOT8_ALT
5220
ENUMX
5221
  BFD_RELOC_XTENSA_SLOT9_ALT
5222
ENUMX
5223
  BFD_RELOC_XTENSA_SLOT10_ALT
5224
ENUMX
5225
  BFD_RELOC_XTENSA_SLOT11_ALT
5226
ENUMX
5227
  BFD_RELOC_XTENSA_SLOT12_ALT
5228
ENUMX
5229
  BFD_RELOC_XTENSA_SLOT13_ALT
5230
ENUMX
5231
  BFD_RELOC_XTENSA_SLOT14_ALT
5232
ENUMDOC
5233
  Alternate Xtensa relocations.  Only the slot is encoded in the
5234
  relocation.  The meaning of these relocations is opcode-specific.
5235
ENUM
5236
  BFD_RELOC_XTENSA_OP0
5237
ENUMX
5238
  BFD_RELOC_XTENSA_OP1
5239
ENUMX
5240
  BFD_RELOC_XTENSA_OP2
5241
ENUMDOC
5242
  Xtensa relocations for backward compatibility.  These have all been
5243
  replaced by BFD_RELOC_XTENSA_SLOT0_OP.
5244
ENUM
5245
  BFD_RELOC_XTENSA_ASM_EXPAND
5246
ENUMDOC
5247
  Xtensa relocation to mark that the assembler expanded the
5248
  instructions from an original target.  The expansion size is
5249
  encoded in the reloc size.
5250
ENUM
5251
  BFD_RELOC_XTENSA_ASM_SIMPLIFY
5252
ENUMDOC
5253
  Xtensa relocation to mark that the linker should simplify
5254
  assembler-expanded instructions.  This is commonly used
5255
  internally by the linker after analysis of a
5256
  BFD_RELOC_XTENSA_ASM_EXPAND.
5257
ENUM
5258
  BFD_RELOC_XTENSA_TLSDESC_FN
5259
ENUMX
5260
  BFD_RELOC_XTENSA_TLSDESC_ARG
5261
ENUMX
5262
  BFD_RELOC_XTENSA_TLS_DTPOFF
5263
ENUMX
5264
  BFD_RELOC_XTENSA_TLS_TPOFF
5265
ENUMX
5266
  BFD_RELOC_XTENSA_TLS_FUNC
5267
ENUMX
5268
  BFD_RELOC_XTENSA_TLS_ARG
5269
ENUMX
5270
  BFD_RELOC_XTENSA_TLS_CALL
5271
ENUMDOC
5272
  Xtensa TLS relocations.
5273
 
5274
ENUM
5275
  BFD_RELOC_Z80_DISP8
5276
ENUMDOC
5277
  8 bit signed offset in (ix+d) or (iy+d).
5278
 
5279
ENUM
5280
  BFD_RELOC_Z8K_DISP7
5281
ENUMDOC
5282
  DJNZ offset.
5283
ENUM
5284
  BFD_RELOC_Z8K_CALLR
5285
ENUMDOC
5286
  CALR offset.
5287
ENUM
5288
  BFD_RELOC_Z8K_IMM4L
5289
ENUMDOC
5290
  4 bit value.
5291
 
5292
ENUM
5293
   BFD_RELOC_LM32_CALL
5294
ENUMX
5295
   BFD_RELOC_LM32_BRANCH
5296
ENUMX
5297
   BFD_RELOC_LM32_16_GOT
5298
ENUMX
5299
   BFD_RELOC_LM32_GOTOFF_HI16
5300
ENUMX
5301
   BFD_RELOC_LM32_GOTOFF_LO16
5302
ENUMX
5303
   BFD_RELOC_LM32_COPY
5304
ENUMX
5305
   BFD_RELOC_LM32_GLOB_DAT
5306
ENUMX
5307
   BFD_RELOC_LM32_JMP_SLOT
5308
ENUMX
5309
   BFD_RELOC_LM32_RELATIVE
5310
ENUMDOC
5311
 Lattice Mico32 relocations.
5312
 
5313
ENUM
5314
  BFD_RELOC_MACH_O_SECTDIFF
5315
ENUMDOC
5316
  Difference between two section addreses.  Must be followed by a
5317
  BFD_RELOC_MACH_O_PAIR.
5318
ENUM
5319
  BFD_RELOC_MACH_O_PAIR
5320
ENUMDOC
5321
  Pair of relocation.  Contains the first symbol.
5322
 
5323
ENUM
5324
  BFD_RELOC_MACH_O_X86_64_BRANCH32
5325
ENUMX
5326
  BFD_RELOC_MACH_O_X86_64_BRANCH8
5327
ENUMDOC
5328
  PCREL relocations.  They are marked as branch to create PLT entry if
5329
  required.
5330
ENUM
5331
  BFD_RELOC_MACH_O_X86_64_GOT
5332
ENUMDOC
5333
  Used when referencing a GOT entry.
5334
ENUM
5335
  BFD_RELOC_MACH_O_X86_64_GOT_LOAD
5336
ENUMDOC
5337
  Used when loading a GOT entry with movq.  It is specially marked so that
5338
  the linker could optimize the movq to a leaq if possible.
5339
ENUM
5340
  BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32
5341
ENUMDOC
5342
  Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
5343
ENUM
5344
  BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64
5345
ENUMDOC
5346
  Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
5347
ENUM
5348
  BFD_RELOC_MACH_O_X86_64_PCREL32_1
5349
ENUMDOC
5350
  Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.
5351
ENUM
5352
  BFD_RELOC_MACH_O_X86_64_PCREL32_2
5353
ENUMDOC
5354
  Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.
5355
ENUM
5356
  BFD_RELOC_MACH_O_X86_64_PCREL32_4
5357
ENUMDOC
5358
  Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.
5359
 
5360
ENUM
5361
  BFD_RELOC_MICROBLAZE_32_LO
5362
ENUMDOC
5363
  This is a 32 bit reloc for the microblaze that stores the
5364
  low 16 bits of a value
5365
ENUM
5366
  BFD_RELOC_MICROBLAZE_32_LO_PCREL
5367
ENUMDOC
5368
  This is a 32 bit pc-relative reloc for the microblaze that
5369
  stores the low 16 bits of a value
5370
ENUM
5371
  BFD_RELOC_MICROBLAZE_32_ROSDA
5372
ENUMDOC
5373
  This is a 32 bit reloc for the microblaze that stores a
5374
  value relative to the read-only small data area anchor
5375
ENUM
5376
  BFD_RELOC_MICROBLAZE_32_RWSDA
5377
ENUMDOC
5378
  This is a 32 bit reloc for the microblaze that stores a
5379
  value relative to the read-write small data area anchor
5380
ENUM
5381
  BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
5382
ENUMDOC
5383
  This is a 32 bit reloc for the microblaze to handle
5384
  expressions of the form "Symbol Op Symbol"
5385
ENUM
5386
  BFD_RELOC_MICROBLAZE_64_NONE
5387
ENUMDOC
5388
  This is a 64 bit reloc that stores the 32 bit pc relative
5389
  value in two words (with an imm instruction).  No relocation is
5390
  done here - only used for relaxing
5391
ENUM
5392
  BFD_RELOC_MICROBLAZE_64_GOTPC
5393
ENUMDOC
5394
  This is a 64 bit reloc that stores the 32 bit pc relative
5395
  value in two words (with an imm instruction).  The relocation is
5396
  PC-relative GOT offset
5397
ENUM
5398
  BFD_RELOC_MICROBLAZE_64_GOT
5399
ENUMDOC
5400
  This is a 64 bit reloc that stores the 32 bit pc relative
5401
  value in two words (with an imm instruction).  The relocation is
5402
  GOT offset
5403
ENUM
5404
  BFD_RELOC_MICROBLAZE_64_PLT
5405
ENUMDOC
5406
  This is a 64 bit reloc that stores the 32 bit pc relative
5407
  value in two words (with an imm instruction).  The relocation is
5408
  PC-relative offset into PLT
5409
ENUM
5410
  BFD_RELOC_MICROBLAZE_64_GOTOFF
5411
ENUMDOC
5412
  This is a 64 bit reloc that stores the 32 bit GOT relative
5413
  value in two words (with an imm instruction).  The relocation is
5414
  relative offset from _GLOBAL_OFFSET_TABLE_
5415
ENUM
5416
  BFD_RELOC_MICROBLAZE_32_GOTOFF
5417
ENUMDOC
5418
  This is a 32 bit reloc that stores the 32 bit GOT relative
5419
  value in a word.  The relocation is relative offset from
5420
  _GLOBAL_OFFSET_TABLE_
5421
ENUM
5422
  BFD_RELOC_MICROBLAZE_COPY
5423
ENUMDOC
5424
  This is used to tell the dynamic linker to copy the value out of
5425
  the dynamic object into the runtime process image.
5426
 
5427
 
5428
ENDSENUM
5429
  BFD_RELOC_UNUSED
5430
CODE_FRAGMENT
5431
.
5432
.typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
5433
*/
5434
 
5435
/*
5436
FUNCTION
5437
        bfd_reloc_type_lookup
5438
        bfd_reloc_name_lookup
5439
 
5440
SYNOPSIS
5441
        reloc_howto_type *bfd_reloc_type_lookup
5442
          (bfd *abfd, bfd_reloc_code_real_type code);
5443
        reloc_howto_type *bfd_reloc_name_lookup
5444
          (bfd *abfd, const char *reloc_name);
5445
 
5446
DESCRIPTION
5447
        Return a pointer to a howto structure which, when
5448
        invoked, will perform the relocation @var{code} on data from the
5449
        architecture noted.
5450
 
5451
*/
5452
 
5453
reloc_howto_type *
5454
bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
5455
{
5456
  return BFD_SEND (abfd, reloc_type_lookup, (abfd, code));
5457
}
5458
 
5459
reloc_howto_type *
5460
bfd_reloc_name_lookup (bfd *abfd, const char *reloc_name)
5461
{
5462
  return BFD_SEND (abfd, reloc_name_lookup, (abfd, reloc_name));
5463
}
5464
 
5465
static reloc_howto_type bfd_howto_32 =
5466
HOWTO (0, 00, 2, 32, FALSE, 0, complain_overflow_dont, 0, "VRT32", FALSE, 0xffffffff, 0xffffffff, TRUE);
5467
 
5468
/*
5469
INTERNAL_FUNCTION
5470
        bfd_default_reloc_type_lookup
5471
 
5472
SYNOPSIS
5473
        reloc_howto_type *bfd_default_reloc_type_lookup
5474
          (bfd *abfd, bfd_reloc_code_real_type  code);
5475
 
5476
DESCRIPTION
5477
        Provides a default relocation lookup routine for any architecture.
5478
 
5479
*/
5480
 
5481
reloc_howto_type *
5482
bfd_default_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
5483
{
5484
  switch (code)
5485
    {
5486
    case BFD_RELOC_CTOR:
5487
      /* The type of reloc used in a ctor, which will be as wide as the
5488
         address - so either a 64, 32, or 16 bitter.  */
5489
      switch (bfd_get_arch_info (abfd)->bits_per_address)
5490
        {
5491
        case 64:
5492
          BFD_FAIL ();
5493
        case 32:
5494
          return &bfd_howto_32;
5495
        case 16:
5496
          BFD_FAIL ();
5497
        default:
5498
          BFD_FAIL ();
5499
        }
5500
    default:
5501
      BFD_FAIL ();
5502
    }
5503
  return NULL;
5504
}
5505
 
5506
/*
5507
FUNCTION
5508
        bfd_get_reloc_code_name
5509
 
5510
SYNOPSIS
5511
        const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
5512
 
5513
DESCRIPTION
5514
        Provides a printable name for the supplied relocation code.
5515
        Useful mainly for printing error messages.
5516
*/
5517
 
5518
const char *
5519
bfd_get_reloc_code_name (bfd_reloc_code_real_type code)
5520
{
5521
  if (code > BFD_RELOC_UNUSED)
5522
    return 0;
5523
  return bfd_reloc_code_real_names[code];
5524
}
5525
 
5526
/*
5527
INTERNAL_FUNCTION
5528
        bfd_generic_relax_section
5529
 
5530
SYNOPSIS
5531
        bfd_boolean bfd_generic_relax_section
5532
          (bfd *abfd,
5533
           asection *section,
5534
           struct bfd_link_info *,
5535
           bfd_boolean *);
5536
 
5537
DESCRIPTION
5538
        Provides default handling for relaxing for back ends which
5539
        don't do relaxing.
5540
*/
5541
 
5542
bfd_boolean
5543
bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
5544
                           asection *section ATTRIBUTE_UNUSED,
5545
                           struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
5546
                           bfd_boolean *again)
5547
{
5548
  if (link_info->relocatable)
5549
    (*link_info->callbacks->einfo)
5550
      (_("%P%F: --relax and -r may not be used together\n"));
5551
 
5552
  *again = FALSE;
5553
  return TRUE;
5554
}
5555
 
5556
/*
5557
INTERNAL_FUNCTION
5558
        bfd_generic_gc_sections
5559
 
5560
SYNOPSIS
5561
        bfd_boolean bfd_generic_gc_sections
5562
          (bfd *, struct bfd_link_info *);
5563
 
5564
DESCRIPTION
5565
        Provides default handling for relaxing for back ends which
5566
        don't do section gc -- i.e., does nothing.
5567
*/
5568
 
5569
bfd_boolean
5570
bfd_generic_gc_sections (bfd *abfd ATTRIBUTE_UNUSED,
5571
                         struct bfd_link_info *info ATTRIBUTE_UNUSED)
5572
{
5573
  return TRUE;
5574
}
5575
 
5576
/*
5577
INTERNAL_FUNCTION
5578
        bfd_generic_merge_sections
5579
 
5580
SYNOPSIS
5581
        bfd_boolean bfd_generic_merge_sections
5582
          (bfd *, struct bfd_link_info *);
5583
 
5584
DESCRIPTION
5585
        Provides default handling for SEC_MERGE section merging for back ends
5586
        which don't have SEC_MERGE support -- i.e., does nothing.
5587
*/
5588
 
5589
bfd_boolean
5590
bfd_generic_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
5591
                            struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
5592
{
5593
  return TRUE;
5594
}
5595
 
5596
/*
5597
INTERNAL_FUNCTION
5598
        bfd_generic_get_relocated_section_contents
5599
 
5600
SYNOPSIS
5601
        bfd_byte *bfd_generic_get_relocated_section_contents
5602
          (bfd *abfd,
5603
           struct bfd_link_info *link_info,
5604
           struct bfd_link_order *link_order,
5605
           bfd_byte *data,
5606
           bfd_boolean relocatable,
5607
           asymbol **symbols);
5608
 
5609
DESCRIPTION
5610
        Provides default handling of relocation effort for back ends
5611
        which can't be bothered to do it efficiently.
5612
 
5613
*/
5614
 
5615
bfd_byte *
5616
bfd_generic_get_relocated_section_contents (bfd *abfd,
5617
                                            struct bfd_link_info *link_info,
5618
                                            struct bfd_link_order *link_order,
5619
                                            bfd_byte *data,
5620
                                            bfd_boolean relocatable,
5621
                                            asymbol **symbols)
5622
{
5623
  bfd *input_bfd = link_order->u.indirect.section->owner;
5624
  asection *input_section = link_order->u.indirect.section;
5625
  long reloc_size;
5626
  arelent **reloc_vector;
5627
  long reloc_count;
5628
  bfd_size_type sz;
5629
 
5630
  reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
5631
  if (reloc_size < 0)
5632
    return NULL;
5633
 
5634
  /* Read in the section.  */
5635
  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
5636
  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
5637
    return NULL;
5638
 
5639
  if (reloc_size == 0)
5640
    return data;
5641
 
5642
  reloc_vector = (arelent **) bfd_malloc (reloc_size);
5643
  if (reloc_vector == NULL)
5644
    return NULL;
5645
 
5646
  reloc_count = bfd_canonicalize_reloc (input_bfd,
5647
                                        input_section,
5648
                                        reloc_vector,
5649
                                        symbols);
5650
  if (reloc_count < 0)
5651
    goto error_return;
5652
 
5653
  if (reloc_count > 0)
5654
    {
5655
      arelent **parent;
5656
      for (parent = reloc_vector; *parent != NULL; parent++)
5657
        {
5658
          char *error_message = NULL;
5659
          asymbol *symbol;
5660
          bfd_reloc_status_type r;
5661
 
5662
          symbol = *(*parent)->sym_ptr_ptr;
5663
          if (symbol->section && elf_discarded_section (symbol->section))
5664
            {
5665
              bfd_byte *p;
5666
              static reloc_howto_type none_howto
5667
                = HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
5668
                         "unused", FALSE, 0, 0, FALSE);
5669
 
5670
              p = data + (*parent)->address * bfd_octets_per_byte (input_bfd);
5671
              _bfd_clear_contents ((*parent)->howto, input_bfd, p);
5672
              (*parent)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
5673
              (*parent)->addend = 0;
5674
              (*parent)->howto = &none_howto;
5675
              r = bfd_reloc_ok;
5676
            }
5677
          else
5678
            r = bfd_perform_relocation (input_bfd,
5679
                                        *parent,
5680
                                        data,
5681
                                        input_section,
5682
                                        relocatable ? abfd : NULL,
5683
                                        &error_message);
5684
 
5685
          if (relocatable)
5686
            {
5687
              asection *os = input_section->output_section;
5688
 
5689
              /* A partial link, so keep the relocs.  */
5690
              os->orelocation[os->reloc_count] = *parent;
5691
              os->reloc_count++;
5692
            }
5693
 
5694
          if (r != bfd_reloc_ok)
5695
            {
5696
              switch (r)
5697
                {
5698
                case bfd_reloc_undefined:
5699
                  if (!((*link_info->callbacks->undefined_symbol)
5700
                        (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5701
                         input_bfd, input_section, (*parent)->address,
5702
                         TRUE)))
5703
                    goto error_return;
5704
                  break;
5705
                case bfd_reloc_dangerous:
5706
                  BFD_ASSERT (error_message != NULL);
5707
                  if (!((*link_info->callbacks->reloc_dangerous)
5708
                        (link_info, error_message, input_bfd, input_section,
5709
                         (*parent)->address)))
5710
                    goto error_return;
5711
                  break;
5712
                case bfd_reloc_overflow:
5713
                  if (!((*link_info->callbacks->reloc_overflow)
5714
                        (link_info, NULL,
5715
                         bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5716
                         (*parent)->howto->name, (*parent)->addend,
5717
                         input_bfd, input_section, (*parent)->address)))
5718
                    goto error_return;
5719
                  break;
5720
                case bfd_reloc_outofrange:
5721
                default:
5722
                  abort ();
5723
                  break;
5724
                }
5725
 
5726
            }
5727
        }
5728
    }
5729
 
5730
  free (reloc_vector);
5731
  return data;
5732
 
5733
error_return:
5734
  free (reloc_vector);
5735
  return NULL;
5736
}

powered by: WebSVN 2.1.0

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