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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.18.50/] [bfd/] [reloc.c] - Blame information for rev 179

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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