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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gdb-6.8/] [pre-binutils-2.20.1-sync/] [bfd/] [reloc.c] - Blame information for rev 24

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

Line No. Rev Author Line
1 24 jeremybenn
/* BFD support for handling relocation entries.
2
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
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
ENUMDOC
1769
  These PC-relative relocations are stored as word displacements --
1770
i.e., byte displacements shifted right two bits.  The 30-bit word
1771
displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1772
SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
1773
signed 16-bit displacement is used on the MIPS, and the 23-bit
1774
displacement is used on the Alpha.
1775
 
1776
ENUM
1777
  BFD_RELOC_HI22
1778
ENUMX
1779
  BFD_RELOC_LO10
1780
ENUMDOC
1781
  High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1782
the target word.  These are used on the SPARC.
1783
 
1784
ENUM
1785
  BFD_RELOC_GPREL16
1786
ENUMX
1787
  BFD_RELOC_GPREL32
1788
ENUMDOC
1789
  For systems that allocate a Global Pointer register, these are
1790
displacements off that register.  These relocation types are
1791
handled specially, because the value the register will have is
1792
decided relatively late.
1793
 
1794
ENUM
1795
  BFD_RELOC_I960_CALLJ
1796
ENUMDOC
1797
  Reloc types used for i960/b.out.
1798
 
1799
ENUM
1800
  BFD_RELOC_NONE
1801
ENUMX
1802
  BFD_RELOC_SPARC_WDISP22
1803
ENUMX
1804
  BFD_RELOC_SPARC22
1805
ENUMX
1806
  BFD_RELOC_SPARC13
1807
ENUMX
1808
  BFD_RELOC_SPARC_GOT10
1809
ENUMX
1810
  BFD_RELOC_SPARC_GOT13
1811
ENUMX
1812
  BFD_RELOC_SPARC_GOT22
1813
ENUMX
1814
  BFD_RELOC_SPARC_PC10
1815
ENUMX
1816
  BFD_RELOC_SPARC_PC22
1817
ENUMX
1818
  BFD_RELOC_SPARC_WPLT30
1819
ENUMX
1820
  BFD_RELOC_SPARC_COPY
1821
ENUMX
1822
  BFD_RELOC_SPARC_GLOB_DAT
1823
ENUMX
1824
  BFD_RELOC_SPARC_JMP_SLOT
1825
ENUMX
1826
  BFD_RELOC_SPARC_RELATIVE
1827
ENUMX
1828
  BFD_RELOC_SPARC_UA16
1829
ENUMX
1830
  BFD_RELOC_SPARC_UA32
1831
ENUMX
1832
  BFD_RELOC_SPARC_UA64
1833
ENUMDOC
1834
  SPARC ELF relocations.  There is probably some overlap with other
1835
  relocation types already defined.
1836
 
1837
ENUM
1838
  BFD_RELOC_SPARC_BASE13
1839
ENUMX
1840
  BFD_RELOC_SPARC_BASE22
1841
ENUMDOC
1842
  I think these are specific to SPARC a.out (e.g., Sun 4).
1843
 
1844
ENUMEQ
1845
  BFD_RELOC_SPARC_64
1846
  BFD_RELOC_64
1847
ENUMX
1848
  BFD_RELOC_SPARC_10
1849
ENUMX
1850
  BFD_RELOC_SPARC_11
1851
ENUMX
1852
  BFD_RELOC_SPARC_OLO10
1853
ENUMX
1854
  BFD_RELOC_SPARC_HH22
1855
ENUMX
1856
  BFD_RELOC_SPARC_HM10
1857
ENUMX
1858
  BFD_RELOC_SPARC_LM22
1859
ENUMX
1860
  BFD_RELOC_SPARC_PC_HH22
1861
ENUMX
1862
  BFD_RELOC_SPARC_PC_HM10
1863
ENUMX
1864
  BFD_RELOC_SPARC_PC_LM22
1865
ENUMX
1866
  BFD_RELOC_SPARC_WDISP16
1867
ENUMX
1868
  BFD_RELOC_SPARC_WDISP19
1869
ENUMX
1870
  BFD_RELOC_SPARC_7
1871
ENUMX
1872
  BFD_RELOC_SPARC_6
1873
ENUMX
1874
  BFD_RELOC_SPARC_5
1875
ENUMEQX
1876
  BFD_RELOC_SPARC_DISP64
1877
  BFD_RELOC_64_PCREL
1878
ENUMX
1879
  BFD_RELOC_SPARC_PLT32
1880
ENUMX
1881
  BFD_RELOC_SPARC_PLT64
1882
ENUMX
1883
  BFD_RELOC_SPARC_HIX22
1884
ENUMX
1885
  BFD_RELOC_SPARC_LOX10
1886
ENUMX
1887
  BFD_RELOC_SPARC_H44
1888
ENUMX
1889
  BFD_RELOC_SPARC_M44
1890
ENUMX
1891
  BFD_RELOC_SPARC_L44
1892
ENUMX
1893
  BFD_RELOC_SPARC_REGISTER
1894
ENUMDOC
1895
  SPARC64 relocations
1896
 
1897
ENUM
1898
  BFD_RELOC_SPARC_REV32
1899
ENUMDOC
1900
  SPARC little endian relocation
1901
ENUM
1902
  BFD_RELOC_SPARC_TLS_GD_HI22
1903
ENUMX
1904
  BFD_RELOC_SPARC_TLS_GD_LO10
1905
ENUMX
1906
  BFD_RELOC_SPARC_TLS_GD_ADD
1907
ENUMX
1908
  BFD_RELOC_SPARC_TLS_GD_CALL
1909
ENUMX
1910
  BFD_RELOC_SPARC_TLS_LDM_HI22
1911
ENUMX
1912
  BFD_RELOC_SPARC_TLS_LDM_LO10
1913
ENUMX
1914
  BFD_RELOC_SPARC_TLS_LDM_ADD
1915
ENUMX
1916
  BFD_RELOC_SPARC_TLS_LDM_CALL
1917
ENUMX
1918
  BFD_RELOC_SPARC_TLS_LDO_HIX22
1919
ENUMX
1920
  BFD_RELOC_SPARC_TLS_LDO_LOX10
1921
ENUMX
1922
  BFD_RELOC_SPARC_TLS_LDO_ADD
1923
ENUMX
1924
  BFD_RELOC_SPARC_TLS_IE_HI22
1925
ENUMX
1926
  BFD_RELOC_SPARC_TLS_IE_LO10
1927
ENUMX
1928
  BFD_RELOC_SPARC_TLS_IE_LD
1929
ENUMX
1930
  BFD_RELOC_SPARC_TLS_IE_LDX
1931
ENUMX
1932
  BFD_RELOC_SPARC_TLS_IE_ADD
1933
ENUMX
1934
  BFD_RELOC_SPARC_TLS_LE_HIX22
1935
ENUMX
1936
  BFD_RELOC_SPARC_TLS_LE_LOX10
1937
ENUMX
1938
  BFD_RELOC_SPARC_TLS_DTPMOD32
1939
ENUMX
1940
  BFD_RELOC_SPARC_TLS_DTPMOD64
1941
ENUMX
1942
  BFD_RELOC_SPARC_TLS_DTPOFF32
1943
ENUMX
1944
  BFD_RELOC_SPARC_TLS_DTPOFF64
1945
ENUMX
1946
  BFD_RELOC_SPARC_TLS_TPOFF32
1947
ENUMX
1948
  BFD_RELOC_SPARC_TLS_TPOFF64
1949
ENUMDOC
1950
  SPARC TLS relocations
1951
 
1952
ENUM
1953
  BFD_RELOC_SPU_IMM7
1954
ENUMX
1955
  BFD_RELOC_SPU_IMM8
1956
ENUMX
1957
  BFD_RELOC_SPU_IMM10
1958
ENUMX
1959
  BFD_RELOC_SPU_IMM10W
1960
ENUMX
1961
  BFD_RELOC_SPU_IMM16
1962
ENUMX
1963
  BFD_RELOC_SPU_IMM16W
1964
ENUMX
1965
  BFD_RELOC_SPU_IMM18
1966
ENUMX
1967
  BFD_RELOC_SPU_PCREL9a
1968
ENUMX
1969
  BFD_RELOC_SPU_PCREL9b
1970
ENUMX
1971
  BFD_RELOC_SPU_PCREL16
1972
ENUMX
1973
  BFD_RELOC_SPU_LO16
1974
ENUMX
1975
  BFD_RELOC_SPU_HI16
1976
ENUMX
1977
  BFD_RELOC_SPU_PPU32
1978
ENUMX
1979
  BFD_RELOC_SPU_PPU64
1980
ENUMDOC
1981
  SPU Relocations.
1982
 
1983
ENUM
1984
  BFD_RELOC_ALPHA_GPDISP_HI16
1985
ENUMDOC
1986
  Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
1987
     "addend" in some special way.
1988
  For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
1989
     writing; when reading, it will be the absolute section symbol.  The
1990
     addend is the displacement in bytes of the "lda" instruction from
1991
     the "ldah" instruction (which is at the address of this reloc).
1992
ENUM
1993
  BFD_RELOC_ALPHA_GPDISP_LO16
1994
ENUMDOC
1995
  For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
1996
     with GPDISP_HI16 relocs.  The addend is ignored when writing the
1997
     relocations out, and is filled in with the file's GP value on
1998
     reading, for convenience.
1999
 
2000
ENUM
2001
  BFD_RELOC_ALPHA_GPDISP
2002
ENUMDOC
2003
  The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
2004
     relocation except that there is no accompanying GPDISP_LO16
2005
     relocation.
2006
 
2007
ENUM
2008
  BFD_RELOC_ALPHA_LITERAL
2009
ENUMX
2010
  BFD_RELOC_ALPHA_ELF_LITERAL
2011
ENUMX
2012
  BFD_RELOC_ALPHA_LITUSE
2013
ENUMDOC
2014
  The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
2015
     the assembler turns it into a LDQ instruction to load the address of
2016
     the symbol, and then fills in a register in the real instruction.
2017
 
2018
     The LITERAL reloc, at the LDQ instruction, refers to the .lita
2019
     section symbol.  The addend is ignored when writing, but is filled
2020
     in with the file's GP value on reading, for convenience, as with the
2021
     GPDISP_LO16 reloc.
2022
 
2023
     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
2024
     It should refer to the symbol to be referenced, as with 16_GOTOFF,
2025
     but it generates output not based on the position within the .got
2026
     section, but relative to the GP value chosen for the file during the
2027
     final link stage.
2028
 
2029
     The LITUSE reloc, on the instruction using the loaded address, gives
2030
     information to the linker that it might be able to use to optimize
2031
     away some literal section references.  The symbol is ignored (read
2032
     as the absolute section symbol), and the "addend" indicates the type
2033
     of instruction using the register:
2034
              1 - "memory" fmt insn
2035
              2 - byte-manipulation (byte offset reg)
2036
              3 - jsr (target of branch)
2037
 
2038
ENUM
2039
  BFD_RELOC_ALPHA_HINT
2040
ENUMDOC
2041
  The HINT relocation indicates a value that should be filled into the
2042
     "hint" field of a jmp/jsr/ret instruction, for possible branch-
2043
     prediction logic which may be provided on some processors.
2044
 
2045
ENUM
2046
  BFD_RELOC_ALPHA_LINKAGE
2047
ENUMDOC
2048
  The LINKAGE relocation outputs a linkage pair in the object file,
2049
     which is filled by the linker.
2050
 
2051
ENUM
2052
  BFD_RELOC_ALPHA_CODEADDR
2053
ENUMDOC
2054
  The CODEADDR relocation outputs a STO_CA in the object file,
2055
     which is filled by the linker.
2056
 
2057
ENUM
2058
  BFD_RELOC_ALPHA_GPREL_HI16
2059
ENUMX
2060
  BFD_RELOC_ALPHA_GPREL_LO16
2061
ENUMDOC
2062
  The GPREL_HI/LO relocations together form a 32-bit offset from the
2063
     GP register.
2064
 
2065
ENUM
2066
  BFD_RELOC_ALPHA_BRSGP
2067
ENUMDOC
2068
  Like BFD_RELOC_23_PCREL_S2, except that the source and target must
2069
  share a common GP, and the target address is adjusted for
2070
  STO_ALPHA_STD_GPLOAD.
2071
 
2072
ENUM
2073
  BFD_RELOC_ALPHA_TLSGD
2074
ENUMX
2075
  BFD_RELOC_ALPHA_TLSLDM
2076
ENUMX
2077
  BFD_RELOC_ALPHA_DTPMOD64
2078
ENUMX
2079
  BFD_RELOC_ALPHA_GOTDTPREL16
2080
ENUMX
2081
  BFD_RELOC_ALPHA_DTPREL64
2082
ENUMX
2083
  BFD_RELOC_ALPHA_DTPREL_HI16
2084
ENUMX
2085
  BFD_RELOC_ALPHA_DTPREL_LO16
2086
ENUMX
2087
  BFD_RELOC_ALPHA_DTPREL16
2088
ENUMX
2089
  BFD_RELOC_ALPHA_GOTTPREL16
2090
ENUMX
2091
  BFD_RELOC_ALPHA_TPREL64
2092
ENUMX
2093
  BFD_RELOC_ALPHA_TPREL_HI16
2094
ENUMX
2095
  BFD_RELOC_ALPHA_TPREL_LO16
2096
ENUMX
2097
  BFD_RELOC_ALPHA_TPREL16
2098
ENUMDOC
2099
  Alpha thread-local storage relocations.
2100
 
2101
ENUM
2102
  BFD_RELOC_MIPS_JMP
2103
ENUMDOC
2104
  Bits 27..2 of the relocation address shifted right 2 bits;
2105
     simple reloc otherwise.
2106
 
2107
ENUM
2108
  BFD_RELOC_MIPS16_JMP
2109
ENUMDOC
2110
  The MIPS16 jump instruction.
2111
 
2112
ENUM
2113
  BFD_RELOC_MIPS16_GPREL
2114
ENUMDOC
2115
  MIPS16 GP relative reloc.
2116
 
2117
ENUM
2118
  BFD_RELOC_HI16
2119
ENUMDOC
2120
  High 16 bits of 32-bit value; simple reloc.
2121
ENUM
2122
  BFD_RELOC_HI16_S
2123
ENUMDOC
2124
  High 16 bits of 32-bit value but the low 16 bits will be sign
2125
     extended and added to form the final result.  If the low 16
2126
     bits form a negative number, we need to add one to the high value
2127
     to compensate for the borrow when the low bits are added.
2128
ENUM
2129
  BFD_RELOC_LO16
2130
ENUMDOC
2131
  Low 16 bits.
2132
 
2133
ENUM
2134
  BFD_RELOC_HI16_PCREL
2135
ENUMDOC
2136
  High 16 bits of 32-bit pc-relative value
2137
ENUM
2138
  BFD_RELOC_HI16_S_PCREL
2139
ENUMDOC
2140
  High 16 bits of 32-bit pc-relative value, adjusted
2141
ENUM
2142
  BFD_RELOC_LO16_PCREL
2143
ENUMDOC
2144
  Low 16 bits of pc-relative value
2145
 
2146
ENUM
2147
  BFD_RELOC_MIPS16_HI16
2148
ENUMDOC
2149
  MIPS16 high 16 bits of 32-bit value.
2150
ENUM
2151
  BFD_RELOC_MIPS16_HI16_S
2152
ENUMDOC
2153
  MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
2154
     extended and added to form the final result.  If the low 16
2155
     bits form a negative number, we need to add one to the high value
2156
     to compensate for the borrow when the low bits are added.
2157
ENUM
2158
  BFD_RELOC_MIPS16_LO16
2159
ENUMDOC
2160
  MIPS16 low 16 bits.
2161
 
2162
ENUM
2163
  BFD_RELOC_MIPS_LITERAL
2164
ENUMDOC
2165
  Relocation against a MIPS literal section.
2166
 
2167
ENUM
2168
  BFD_RELOC_MIPS_GOT16
2169
ENUMX
2170
  BFD_RELOC_MIPS_CALL16
2171
ENUMX
2172
  BFD_RELOC_MIPS_GOT_HI16
2173
ENUMX
2174
  BFD_RELOC_MIPS_GOT_LO16
2175
ENUMX
2176
  BFD_RELOC_MIPS_CALL_HI16
2177
ENUMX
2178
  BFD_RELOC_MIPS_CALL_LO16
2179
ENUMX
2180
  BFD_RELOC_MIPS_SUB
2181
ENUMX
2182
  BFD_RELOC_MIPS_GOT_PAGE
2183
ENUMX
2184
  BFD_RELOC_MIPS_GOT_OFST
2185
ENUMX
2186
  BFD_RELOC_MIPS_GOT_DISP
2187
ENUMX
2188
  BFD_RELOC_MIPS_SHIFT5
2189
ENUMX
2190
  BFD_RELOC_MIPS_SHIFT6
2191
ENUMX
2192
  BFD_RELOC_MIPS_INSERT_A
2193
ENUMX
2194
  BFD_RELOC_MIPS_INSERT_B
2195
ENUMX
2196
  BFD_RELOC_MIPS_DELETE
2197
ENUMX
2198
  BFD_RELOC_MIPS_HIGHEST
2199
ENUMX
2200
  BFD_RELOC_MIPS_HIGHER
2201
ENUMX
2202
  BFD_RELOC_MIPS_SCN_DISP
2203
ENUMX
2204
  BFD_RELOC_MIPS_REL16
2205
ENUMX
2206
  BFD_RELOC_MIPS_RELGOT
2207
ENUMX
2208
  BFD_RELOC_MIPS_JALR
2209
ENUMX
2210
  BFD_RELOC_MIPS_TLS_DTPMOD32
2211
ENUMX
2212
  BFD_RELOC_MIPS_TLS_DTPREL32
2213
ENUMX
2214
  BFD_RELOC_MIPS_TLS_DTPMOD64
2215
ENUMX
2216
  BFD_RELOC_MIPS_TLS_DTPREL64
2217
ENUMX
2218
  BFD_RELOC_MIPS_TLS_GD
2219
ENUMX
2220
  BFD_RELOC_MIPS_TLS_LDM
2221
ENUMX
2222
  BFD_RELOC_MIPS_TLS_DTPREL_HI16
2223
ENUMX
2224
  BFD_RELOC_MIPS_TLS_DTPREL_LO16
2225
ENUMX
2226
  BFD_RELOC_MIPS_TLS_GOTTPREL
2227
ENUMX
2228
  BFD_RELOC_MIPS_TLS_TPREL32
2229
ENUMX
2230
  BFD_RELOC_MIPS_TLS_TPREL64
2231
ENUMX
2232
  BFD_RELOC_MIPS_TLS_TPREL_HI16
2233
ENUMX
2234
  BFD_RELOC_MIPS_TLS_TPREL_LO16
2235
ENUMDOC
2236
  MIPS ELF relocations.
2237
COMMENT
2238
 
2239
ENUM
2240
  BFD_RELOC_MIPS_COPY
2241
ENUMX
2242
  BFD_RELOC_MIPS_JUMP_SLOT
2243
ENUMDOC
2244
  MIPS ELF relocations (VxWorks extensions).
2245
COMMENT
2246
 
2247
ENUM
2248
  BFD_RELOC_FRV_LABEL16
2249
ENUMX
2250
  BFD_RELOC_FRV_LABEL24
2251
ENUMX
2252
  BFD_RELOC_FRV_LO16
2253
ENUMX
2254
  BFD_RELOC_FRV_HI16
2255
ENUMX
2256
  BFD_RELOC_FRV_GPREL12
2257
ENUMX
2258
  BFD_RELOC_FRV_GPRELU12
2259
ENUMX
2260
  BFD_RELOC_FRV_GPREL32
2261
ENUMX
2262
  BFD_RELOC_FRV_GPRELHI
2263
ENUMX
2264
  BFD_RELOC_FRV_GPRELLO
2265
ENUMX
2266
  BFD_RELOC_FRV_GOT12
2267
ENUMX
2268
  BFD_RELOC_FRV_GOTHI
2269
ENUMX
2270
  BFD_RELOC_FRV_GOTLO
2271
ENUMX
2272
  BFD_RELOC_FRV_FUNCDESC
2273
ENUMX
2274
  BFD_RELOC_FRV_FUNCDESC_GOT12
2275
ENUMX
2276
  BFD_RELOC_FRV_FUNCDESC_GOTHI
2277
ENUMX
2278
  BFD_RELOC_FRV_FUNCDESC_GOTLO
2279
ENUMX
2280
  BFD_RELOC_FRV_FUNCDESC_VALUE
2281
ENUMX
2282
  BFD_RELOC_FRV_FUNCDESC_GOTOFF12
2283
ENUMX
2284
  BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
2285
ENUMX
2286
  BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
2287
ENUMX
2288
  BFD_RELOC_FRV_GOTOFF12
2289
ENUMX
2290
  BFD_RELOC_FRV_GOTOFFHI
2291
ENUMX
2292
  BFD_RELOC_FRV_GOTOFFLO
2293
ENUMX
2294
  BFD_RELOC_FRV_GETTLSOFF
2295
ENUMX
2296
  BFD_RELOC_FRV_TLSDESC_VALUE
2297
ENUMX
2298
  BFD_RELOC_FRV_GOTTLSDESC12
2299
ENUMX
2300
  BFD_RELOC_FRV_GOTTLSDESCHI
2301
ENUMX
2302
  BFD_RELOC_FRV_GOTTLSDESCLO
2303
ENUMX
2304
  BFD_RELOC_FRV_TLSMOFF12
2305
ENUMX
2306
  BFD_RELOC_FRV_TLSMOFFHI
2307
ENUMX
2308
  BFD_RELOC_FRV_TLSMOFFLO
2309
ENUMX
2310
  BFD_RELOC_FRV_GOTTLSOFF12
2311
ENUMX
2312
  BFD_RELOC_FRV_GOTTLSOFFHI
2313
ENUMX
2314
  BFD_RELOC_FRV_GOTTLSOFFLO
2315
ENUMX
2316
  BFD_RELOC_FRV_TLSOFF
2317
ENUMX
2318
  BFD_RELOC_FRV_TLSDESC_RELAX
2319
ENUMX
2320
  BFD_RELOC_FRV_GETTLSOFF_RELAX
2321
ENUMX
2322
  BFD_RELOC_FRV_TLSOFF_RELAX
2323
ENUMX
2324
  BFD_RELOC_FRV_TLSMOFF
2325
ENUMDOC
2326
  Fujitsu Frv Relocations.
2327
COMMENT
2328
 
2329
ENUM
2330
  BFD_RELOC_MN10300_GOTOFF24
2331
ENUMDOC
2332
  This is a 24bit GOT-relative reloc for the mn10300.
2333
ENUM
2334
  BFD_RELOC_MN10300_GOT32
2335
ENUMDOC
2336
  This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
2337
  in the instruction.
2338
ENUM
2339
  BFD_RELOC_MN10300_GOT24
2340
ENUMDOC
2341
  This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
2342
  in the instruction.
2343
ENUM
2344
  BFD_RELOC_MN10300_GOT16
2345
ENUMDOC
2346
  This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
2347
  in the instruction.
2348
ENUM
2349
  BFD_RELOC_MN10300_COPY
2350
ENUMDOC
2351
  Copy symbol at runtime.
2352
ENUM
2353
  BFD_RELOC_MN10300_GLOB_DAT
2354
ENUMDOC
2355
  Create GOT entry.
2356
ENUM
2357
  BFD_RELOC_MN10300_JMP_SLOT
2358
ENUMDOC
2359
  Create PLT entry.
2360
ENUM
2361
  BFD_RELOC_MN10300_RELATIVE
2362
ENUMDOC
2363
  Adjust by program base.
2364
ENUM
2365
  BFD_RELOC_MN10300_SYM_DIFF
2366
ENUMDOC
2367
  Together with another reloc targeted at the same location,
2368
  allows for a value that is the difference of two symbols
2369
  in the same section.
2370
ENUM
2371
  BFD_RELOC_MN10300_ALIGN
2372
ENUMDOC
2373
  The addend of this reloc is an alignment power that must
2374
  be honoured at the offset's location, regardless of linker
2375
  relaxation.
2376
COMMENT
2377
 
2378
ENUM
2379
  BFD_RELOC_386_GOT32
2380
ENUMX
2381
  BFD_RELOC_386_PLT32
2382
ENUMX
2383
  BFD_RELOC_386_COPY
2384
ENUMX
2385
  BFD_RELOC_386_GLOB_DAT
2386
ENUMX
2387
  BFD_RELOC_386_JUMP_SLOT
2388
ENUMX
2389
  BFD_RELOC_386_RELATIVE
2390
ENUMX
2391
  BFD_RELOC_386_GOTOFF
2392
ENUMX
2393
  BFD_RELOC_386_GOTPC
2394
ENUMX
2395
  BFD_RELOC_386_TLS_TPOFF
2396
ENUMX
2397
  BFD_RELOC_386_TLS_IE
2398
ENUMX
2399
  BFD_RELOC_386_TLS_GOTIE
2400
ENUMX
2401
  BFD_RELOC_386_TLS_LE
2402
ENUMX
2403
  BFD_RELOC_386_TLS_GD
2404
ENUMX
2405
  BFD_RELOC_386_TLS_LDM
2406
ENUMX
2407
  BFD_RELOC_386_TLS_LDO_32
2408
ENUMX
2409
  BFD_RELOC_386_TLS_IE_32
2410
ENUMX
2411
  BFD_RELOC_386_TLS_LE_32
2412
ENUMX
2413
  BFD_RELOC_386_TLS_DTPMOD32
2414
ENUMX
2415
  BFD_RELOC_386_TLS_DTPOFF32
2416
ENUMX
2417
  BFD_RELOC_386_TLS_TPOFF32
2418
ENUMX
2419
  BFD_RELOC_386_TLS_GOTDESC
2420
ENUMX
2421
  BFD_RELOC_386_TLS_DESC_CALL
2422
ENUMX
2423
  BFD_RELOC_386_TLS_DESC
2424
ENUMDOC
2425
  i386/elf relocations
2426
 
2427
ENUM
2428
  BFD_RELOC_X86_64_GOT32
2429
ENUMX
2430
  BFD_RELOC_X86_64_PLT32
2431
ENUMX
2432
  BFD_RELOC_X86_64_COPY
2433
ENUMX
2434
  BFD_RELOC_X86_64_GLOB_DAT
2435
ENUMX
2436
  BFD_RELOC_X86_64_JUMP_SLOT
2437
ENUMX
2438
  BFD_RELOC_X86_64_RELATIVE
2439
ENUMX
2440
  BFD_RELOC_X86_64_GOTPCREL
2441
ENUMX
2442
  BFD_RELOC_X86_64_32S
2443
ENUMX
2444
  BFD_RELOC_X86_64_DTPMOD64
2445
ENUMX
2446
  BFD_RELOC_X86_64_DTPOFF64
2447
ENUMX
2448
  BFD_RELOC_X86_64_TPOFF64
2449
ENUMX
2450
  BFD_RELOC_X86_64_TLSGD
2451
ENUMX
2452
  BFD_RELOC_X86_64_TLSLD
2453
ENUMX
2454
  BFD_RELOC_X86_64_DTPOFF32
2455
ENUMX
2456
  BFD_RELOC_X86_64_GOTTPOFF
2457
ENUMX
2458
  BFD_RELOC_X86_64_TPOFF32
2459
ENUMX
2460
  BFD_RELOC_X86_64_GOTOFF64
2461
ENUMX
2462
  BFD_RELOC_X86_64_GOTPC32
2463
ENUMX
2464
  BFD_RELOC_X86_64_GOT64
2465
ENUMX
2466
  BFD_RELOC_X86_64_GOTPCREL64
2467
ENUMX
2468
  BFD_RELOC_X86_64_GOTPC64
2469
ENUMX
2470
  BFD_RELOC_X86_64_GOTPLT64
2471
ENUMX
2472
  BFD_RELOC_X86_64_PLTOFF64
2473
ENUMX
2474
  BFD_RELOC_X86_64_GOTPC32_TLSDESC
2475
ENUMX
2476
  BFD_RELOC_X86_64_TLSDESC_CALL
2477
ENUMX
2478
  BFD_RELOC_X86_64_TLSDESC
2479
ENUMDOC
2480
  x86-64/elf relocations
2481
 
2482
ENUM
2483
  BFD_RELOC_NS32K_IMM_8
2484
ENUMX
2485
  BFD_RELOC_NS32K_IMM_16
2486
ENUMX
2487
  BFD_RELOC_NS32K_IMM_32
2488
ENUMX
2489
  BFD_RELOC_NS32K_IMM_8_PCREL
2490
ENUMX
2491
  BFD_RELOC_NS32K_IMM_16_PCREL
2492
ENUMX
2493
  BFD_RELOC_NS32K_IMM_32_PCREL
2494
ENUMX
2495
  BFD_RELOC_NS32K_DISP_8
2496
ENUMX
2497
  BFD_RELOC_NS32K_DISP_16
2498
ENUMX
2499
  BFD_RELOC_NS32K_DISP_32
2500
ENUMX
2501
  BFD_RELOC_NS32K_DISP_8_PCREL
2502
ENUMX
2503
  BFD_RELOC_NS32K_DISP_16_PCREL
2504
ENUMX
2505
  BFD_RELOC_NS32K_DISP_32_PCREL
2506
ENUMDOC
2507
  ns32k relocations
2508
 
2509
ENUM
2510
  BFD_RELOC_PDP11_DISP_8_PCREL
2511
ENUMX
2512
  BFD_RELOC_PDP11_DISP_6_PCREL
2513
ENUMDOC
2514
  PDP11 relocations
2515
 
2516
ENUM
2517
  BFD_RELOC_PJ_CODE_HI16
2518
ENUMX
2519
  BFD_RELOC_PJ_CODE_LO16
2520
ENUMX
2521
  BFD_RELOC_PJ_CODE_DIR16
2522
ENUMX
2523
  BFD_RELOC_PJ_CODE_DIR32
2524
ENUMX
2525
  BFD_RELOC_PJ_CODE_REL16
2526
ENUMX
2527
  BFD_RELOC_PJ_CODE_REL32
2528
ENUMDOC
2529
  Picojava relocs.  Not all of these appear in object files.
2530
 
2531
ENUM
2532
  BFD_RELOC_PPC_B26
2533
ENUMX
2534
  BFD_RELOC_PPC_BA26
2535
ENUMX
2536
  BFD_RELOC_PPC_TOC16
2537
ENUMX
2538
  BFD_RELOC_PPC_B16
2539
ENUMX
2540
  BFD_RELOC_PPC_B16_BRTAKEN
2541
ENUMX
2542
  BFD_RELOC_PPC_B16_BRNTAKEN
2543
ENUMX
2544
  BFD_RELOC_PPC_BA16
2545
ENUMX
2546
  BFD_RELOC_PPC_BA16_BRTAKEN
2547
ENUMX
2548
  BFD_RELOC_PPC_BA16_BRNTAKEN
2549
ENUMX
2550
  BFD_RELOC_PPC_COPY
2551
ENUMX
2552
  BFD_RELOC_PPC_GLOB_DAT
2553
ENUMX
2554
  BFD_RELOC_PPC_JMP_SLOT
2555
ENUMX
2556
  BFD_RELOC_PPC_RELATIVE
2557
ENUMX
2558
  BFD_RELOC_PPC_LOCAL24PC
2559
ENUMX
2560
  BFD_RELOC_PPC_EMB_NADDR32
2561
ENUMX
2562
  BFD_RELOC_PPC_EMB_NADDR16
2563
ENUMX
2564
  BFD_RELOC_PPC_EMB_NADDR16_LO
2565
ENUMX
2566
  BFD_RELOC_PPC_EMB_NADDR16_HI
2567
ENUMX
2568
  BFD_RELOC_PPC_EMB_NADDR16_HA
2569
ENUMX
2570
  BFD_RELOC_PPC_EMB_SDAI16
2571
ENUMX
2572
  BFD_RELOC_PPC_EMB_SDA2I16
2573
ENUMX
2574
  BFD_RELOC_PPC_EMB_SDA2REL
2575
ENUMX
2576
  BFD_RELOC_PPC_EMB_SDA21
2577
ENUMX
2578
  BFD_RELOC_PPC_EMB_MRKREF
2579
ENUMX
2580
  BFD_RELOC_PPC_EMB_RELSEC16
2581
ENUMX
2582
  BFD_RELOC_PPC_EMB_RELST_LO
2583
ENUMX
2584
  BFD_RELOC_PPC_EMB_RELST_HI
2585
ENUMX
2586
  BFD_RELOC_PPC_EMB_RELST_HA
2587
ENUMX
2588
  BFD_RELOC_PPC_EMB_BIT_FLD
2589
ENUMX
2590
  BFD_RELOC_PPC_EMB_RELSDA
2591
ENUMX
2592
  BFD_RELOC_PPC64_HIGHER
2593
ENUMX
2594
  BFD_RELOC_PPC64_HIGHER_S
2595
ENUMX
2596
  BFD_RELOC_PPC64_HIGHEST
2597
ENUMX
2598
  BFD_RELOC_PPC64_HIGHEST_S
2599
ENUMX
2600
  BFD_RELOC_PPC64_TOC16_LO
2601
ENUMX
2602
  BFD_RELOC_PPC64_TOC16_HI
2603
ENUMX
2604
  BFD_RELOC_PPC64_TOC16_HA
2605
ENUMX
2606
  BFD_RELOC_PPC64_TOC
2607
ENUMX
2608
  BFD_RELOC_PPC64_PLTGOT16
2609
ENUMX
2610
  BFD_RELOC_PPC64_PLTGOT16_LO
2611
ENUMX
2612
  BFD_RELOC_PPC64_PLTGOT16_HI
2613
ENUMX
2614
  BFD_RELOC_PPC64_PLTGOT16_HA
2615
ENUMX
2616
  BFD_RELOC_PPC64_ADDR16_DS
2617
ENUMX
2618
  BFD_RELOC_PPC64_ADDR16_LO_DS
2619
ENUMX
2620
  BFD_RELOC_PPC64_GOT16_DS
2621
ENUMX
2622
  BFD_RELOC_PPC64_GOT16_LO_DS
2623
ENUMX
2624
  BFD_RELOC_PPC64_PLT16_LO_DS
2625
ENUMX
2626
  BFD_RELOC_PPC64_SECTOFF_DS
2627
ENUMX
2628
  BFD_RELOC_PPC64_SECTOFF_LO_DS
2629
ENUMX
2630
  BFD_RELOC_PPC64_TOC16_DS
2631
ENUMX
2632
  BFD_RELOC_PPC64_TOC16_LO_DS
2633
ENUMX
2634
  BFD_RELOC_PPC64_PLTGOT16_DS
2635
ENUMX
2636
  BFD_RELOC_PPC64_PLTGOT16_LO_DS
2637
ENUMDOC
2638
  Power(rs6000) and PowerPC relocations.
2639
 
2640
ENUM
2641
  BFD_RELOC_PPC_TLS
2642
ENUMX
2643
  BFD_RELOC_PPC_DTPMOD
2644
ENUMX
2645
  BFD_RELOC_PPC_TPREL16
2646
ENUMX
2647
  BFD_RELOC_PPC_TPREL16_LO
2648
ENUMX
2649
  BFD_RELOC_PPC_TPREL16_HI
2650
ENUMX
2651
  BFD_RELOC_PPC_TPREL16_HA
2652
ENUMX
2653
  BFD_RELOC_PPC_TPREL
2654
ENUMX
2655
  BFD_RELOC_PPC_DTPREL16
2656
ENUMX
2657
  BFD_RELOC_PPC_DTPREL16_LO
2658
ENUMX
2659
  BFD_RELOC_PPC_DTPREL16_HI
2660
ENUMX
2661
  BFD_RELOC_PPC_DTPREL16_HA
2662
ENUMX
2663
  BFD_RELOC_PPC_DTPREL
2664
ENUMX
2665
  BFD_RELOC_PPC_GOT_TLSGD16
2666
ENUMX
2667
  BFD_RELOC_PPC_GOT_TLSGD16_LO
2668
ENUMX
2669
  BFD_RELOC_PPC_GOT_TLSGD16_HI
2670
ENUMX
2671
  BFD_RELOC_PPC_GOT_TLSGD16_HA
2672
ENUMX
2673
  BFD_RELOC_PPC_GOT_TLSLD16
2674
ENUMX
2675
  BFD_RELOC_PPC_GOT_TLSLD16_LO
2676
ENUMX
2677
  BFD_RELOC_PPC_GOT_TLSLD16_HI
2678
ENUMX
2679
  BFD_RELOC_PPC_GOT_TLSLD16_HA
2680
ENUMX
2681
  BFD_RELOC_PPC_GOT_TPREL16
2682
ENUMX
2683
  BFD_RELOC_PPC_GOT_TPREL16_LO
2684
ENUMX
2685
  BFD_RELOC_PPC_GOT_TPREL16_HI
2686
ENUMX
2687
  BFD_RELOC_PPC_GOT_TPREL16_HA
2688
ENUMX
2689
  BFD_RELOC_PPC_GOT_DTPREL16
2690
ENUMX
2691
  BFD_RELOC_PPC_GOT_DTPREL16_LO
2692
ENUMX
2693
  BFD_RELOC_PPC_GOT_DTPREL16_HI
2694
ENUMX
2695
  BFD_RELOC_PPC_GOT_DTPREL16_HA
2696
ENUMX
2697
  BFD_RELOC_PPC64_TPREL16_DS
2698
ENUMX
2699
  BFD_RELOC_PPC64_TPREL16_LO_DS
2700
ENUMX
2701
  BFD_RELOC_PPC64_TPREL16_HIGHER
2702
ENUMX
2703
  BFD_RELOC_PPC64_TPREL16_HIGHERA
2704
ENUMX
2705
  BFD_RELOC_PPC64_TPREL16_HIGHEST
2706
ENUMX
2707
  BFD_RELOC_PPC64_TPREL16_HIGHESTA
2708
ENUMX
2709
  BFD_RELOC_PPC64_DTPREL16_DS
2710
ENUMX
2711
  BFD_RELOC_PPC64_DTPREL16_LO_DS
2712
ENUMX
2713
  BFD_RELOC_PPC64_DTPREL16_HIGHER
2714
ENUMX
2715
  BFD_RELOC_PPC64_DTPREL16_HIGHERA
2716
ENUMX
2717
  BFD_RELOC_PPC64_DTPREL16_HIGHEST
2718
ENUMX
2719
  BFD_RELOC_PPC64_DTPREL16_HIGHESTA
2720
ENUMDOC
2721
  PowerPC and PowerPC64 thread-local storage relocations.
2722
 
2723
ENUM
2724
  BFD_RELOC_I370_D12
2725
ENUMDOC
2726
  IBM 370/390 relocations
2727
 
2728
ENUM
2729
  BFD_RELOC_CTOR
2730
ENUMDOC
2731
  The type of reloc used to build a constructor table - at the moment
2732
  probably a 32 bit wide absolute relocation, but the target can choose.
2733
  It generally does map to one of the other relocation types.
2734
 
2735
ENUM
2736
  BFD_RELOC_ARM_PCREL_BRANCH
2737
ENUMDOC
2738
  ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
2739
  not stored in the instruction.
2740
ENUM
2741
  BFD_RELOC_ARM_PCREL_BLX
2742
ENUMDOC
2743
  ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
2744
  not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2745
  field in the instruction.
2746
ENUM
2747
  BFD_RELOC_THUMB_PCREL_BLX
2748
ENUMDOC
2749
  Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
2750
  not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2751
  field in the instruction.
2752
ENUM
2753
  BFD_RELOC_ARM_PCREL_CALL
2754
ENUMDOC
2755
  ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
2756
ENUM
2757
  BFD_RELOC_ARM_PCREL_JUMP
2758
ENUMDOC
2759
  ARM 26-bit pc-relative branch for B or conditional BL instruction.
2760
 
2761
ENUM
2762
  BFD_RELOC_THUMB_PCREL_BRANCH7
2763
ENUMX
2764
  BFD_RELOC_THUMB_PCREL_BRANCH9
2765
ENUMX
2766
  BFD_RELOC_THUMB_PCREL_BRANCH12
2767
ENUMX
2768
  BFD_RELOC_THUMB_PCREL_BRANCH20
2769
ENUMX
2770
  BFD_RELOC_THUMB_PCREL_BRANCH23
2771
ENUMX
2772
  BFD_RELOC_THUMB_PCREL_BRANCH25
2773
ENUMDOC
2774
  Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
2775
  The lowest bit must be zero and is not stored in the instruction.
2776
  Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
2777
  "nn" one smaller in all cases.  Note further that BRANCH23
2778
  corresponds to R_ARM_THM_CALL.
2779
 
2780
ENUM
2781
  BFD_RELOC_ARM_OFFSET_IMM
2782
ENUMDOC
2783
  12-bit immediate offset, used in ARM-format ldr and str instructions.
2784
 
2785
ENUM
2786
  BFD_RELOC_ARM_THUMB_OFFSET
2787
ENUMDOC
2788
  5-bit immediate offset, used in Thumb-format ldr and str instructions.
2789
 
2790
ENUM
2791
  BFD_RELOC_ARM_TARGET1
2792
ENUMDOC
2793
  Pc-relative or absolute relocation depending on target.  Used for
2794
  entries in .init_array sections.
2795
ENUM
2796
  BFD_RELOC_ARM_ROSEGREL32
2797
ENUMDOC
2798
  Read-only segment base relative address.
2799
ENUM
2800
  BFD_RELOC_ARM_SBREL32
2801
ENUMDOC
2802
  Data segment base relative address.
2803
ENUM
2804
  BFD_RELOC_ARM_TARGET2
2805
ENUMDOC
2806
  This reloc is used for references to RTTI data from exception handling
2807
  tables.  The actual definition depends on the target.  It may be a
2808
  pc-relative or some form of GOT-indirect relocation.
2809
ENUM
2810
  BFD_RELOC_ARM_PREL31
2811
ENUMDOC
2812
  31-bit PC relative address.
2813
ENUM
2814
  BFD_RELOC_ARM_MOVW
2815
ENUMX
2816
  BFD_RELOC_ARM_MOVT
2817
ENUMX
2818
  BFD_RELOC_ARM_MOVW_PCREL
2819
ENUMX
2820
  BFD_RELOC_ARM_MOVT_PCREL
2821
ENUMX
2822
  BFD_RELOC_ARM_THUMB_MOVW
2823
ENUMX
2824
  BFD_RELOC_ARM_THUMB_MOVT
2825
ENUMX
2826
  BFD_RELOC_ARM_THUMB_MOVW_PCREL
2827
ENUMX
2828
  BFD_RELOC_ARM_THUMB_MOVT_PCREL
2829
ENUMDOC
2830
  Low and High halfword relocations for MOVW and MOVT instructions.
2831
 
2832
ENUM
2833
  BFD_RELOC_ARM_JUMP_SLOT
2834
ENUMX
2835
  BFD_RELOC_ARM_GLOB_DAT
2836
ENUMX
2837
  BFD_RELOC_ARM_GOT32
2838
ENUMX
2839
  BFD_RELOC_ARM_PLT32
2840
ENUMX
2841
  BFD_RELOC_ARM_RELATIVE
2842
ENUMX
2843
  BFD_RELOC_ARM_GOTOFF
2844
ENUMX
2845
  BFD_RELOC_ARM_GOTPC
2846
ENUMDOC
2847
  Relocations for setting up GOTs and PLTs for shared libraries.
2848
 
2849
ENUM
2850
  BFD_RELOC_ARM_TLS_GD32
2851
ENUMX
2852
  BFD_RELOC_ARM_TLS_LDO32
2853
ENUMX
2854
  BFD_RELOC_ARM_TLS_LDM32
2855
ENUMX
2856
  BFD_RELOC_ARM_TLS_DTPOFF32
2857
ENUMX
2858
  BFD_RELOC_ARM_TLS_DTPMOD32
2859
ENUMX
2860
  BFD_RELOC_ARM_TLS_TPOFF32
2861
ENUMX
2862
  BFD_RELOC_ARM_TLS_IE32
2863
ENUMX
2864
  BFD_RELOC_ARM_TLS_LE32
2865
ENUMDOC
2866
  ARM thread-local storage relocations.
2867
 
2868
ENUM
2869
  BFD_RELOC_ARM_ALU_PC_G0_NC
2870
ENUMX
2871
  BFD_RELOC_ARM_ALU_PC_G0
2872
ENUMX
2873
  BFD_RELOC_ARM_ALU_PC_G1_NC
2874
ENUMX
2875
  BFD_RELOC_ARM_ALU_PC_G1
2876
ENUMX
2877
  BFD_RELOC_ARM_ALU_PC_G2
2878
ENUMX
2879
  BFD_RELOC_ARM_LDR_PC_G0
2880
ENUMX
2881
  BFD_RELOC_ARM_LDR_PC_G1
2882
ENUMX
2883
  BFD_RELOC_ARM_LDR_PC_G2
2884
ENUMX
2885
  BFD_RELOC_ARM_LDRS_PC_G0
2886
ENUMX
2887
  BFD_RELOC_ARM_LDRS_PC_G1
2888
ENUMX
2889
  BFD_RELOC_ARM_LDRS_PC_G2
2890
ENUMX
2891
  BFD_RELOC_ARM_LDC_PC_G0
2892
ENUMX
2893
  BFD_RELOC_ARM_LDC_PC_G1
2894
ENUMX
2895
  BFD_RELOC_ARM_LDC_PC_G2
2896
ENUMX
2897
  BFD_RELOC_ARM_ALU_SB_G0_NC
2898
ENUMX
2899
  BFD_RELOC_ARM_ALU_SB_G0
2900
ENUMX
2901
  BFD_RELOC_ARM_ALU_SB_G1_NC
2902
ENUMX
2903
  BFD_RELOC_ARM_ALU_SB_G1
2904
ENUMX
2905
  BFD_RELOC_ARM_ALU_SB_G2
2906
ENUMX
2907
  BFD_RELOC_ARM_LDR_SB_G0
2908
ENUMX
2909
  BFD_RELOC_ARM_LDR_SB_G1
2910
ENUMX
2911
  BFD_RELOC_ARM_LDR_SB_G2
2912
ENUMX
2913
  BFD_RELOC_ARM_LDRS_SB_G0
2914
ENUMX
2915
  BFD_RELOC_ARM_LDRS_SB_G1
2916
ENUMX
2917
  BFD_RELOC_ARM_LDRS_SB_G2
2918
ENUMX
2919
  BFD_RELOC_ARM_LDC_SB_G0
2920
ENUMX
2921
  BFD_RELOC_ARM_LDC_SB_G1
2922
ENUMX
2923
  BFD_RELOC_ARM_LDC_SB_G2
2924
ENUMDOC
2925
  ARM group relocations.
2926
 
2927
ENUM
2928
  BFD_RELOC_ARM_V4BX
2929
ENUMDOC
2930
  Annotation of BX instructions.
2931
 
2932
ENUM
2933
  BFD_RELOC_ARM_IMMEDIATE
2934
ENUMX
2935
  BFD_RELOC_ARM_ADRL_IMMEDIATE
2936
ENUMX
2937
  BFD_RELOC_ARM_T32_IMMEDIATE
2938
ENUMX
2939
  BFD_RELOC_ARM_T32_ADD_IMM
2940
ENUMX
2941
  BFD_RELOC_ARM_T32_IMM12
2942
ENUMX
2943
  BFD_RELOC_ARM_T32_ADD_PC12
2944
ENUMX
2945
  BFD_RELOC_ARM_SHIFT_IMM
2946
ENUMX
2947
  BFD_RELOC_ARM_SMC
2948
ENUMX
2949
  BFD_RELOC_ARM_SWI
2950
ENUMX
2951
  BFD_RELOC_ARM_MULTI
2952
ENUMX
2953
  BFD_RELOC_ARM_CP_OFF_IMM
2954
ENUMX
2955
  BFD_RELOC_ARM_CP_OFF_IMM_S2
2956
ENUMX
2957
  BFD_RELOC_ARM_T32_CP_OFF_IMM
2958
ENUMX
2959
  BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
2960
ENUMX
2961
  BFD_RELOC_ARM_ADR_IMM
2962
ENUMX
2963
  BFD_RELOC_ARM_LDR_IMM
2964
ENUMX
2965
  BFD_RELOC_ARM_LITERAL
2966
ENUMX
2967
  BFD_RELOC_ARM_IN_POOL
2968
ENUMX
2969
  BFD_RELOC_ARM_OFFSET_IMM8
2970
ENUMX
2971
  BFD_RELOC_ARM_T32_OFFSET_U8
2972
ENUMX
2973
  BFD_RELOC_ARM_T32_OFFSET_IMM
2974
ENUMX
2975
  BFD_RELOC_ARM_HWLITERAL
2976
ENUMX
2977
  BFD_RELOC_ARM_THUMB_ADD
2978
ENUMX
2979
  BFD_RELOC_ARM_THUMB_IMM
2980
ENUMX
2981
  BFD_RELOC_ARM_THUMB_SHIFT
2982
ENUMDOC
2983
  These relocs are only used within the ARM assembler.  They are not
2984
  (at present) written to any object files.
2985
 
2986
ENUM
2987
  BFD_RELOC_SH_PCDISP8BY2
2988
ENUMX
2989
  BFD_RELOC_SH_PCDISP12BY2
2990
ENUMX
2991
  BFD_RELOC_SH_IMM3
2992
ENUMX
2993
  BFD_RELOC_SH_IMM3U
2994
ENUMX
2995
  BFD_RELOC_SH_DISP12
2996
ENUMX
2997
  BFD_RELOC_SH_DISP12BY2
2998
ENUMX
2999
  BFD_RELOC_SH_DISP12BY4
3000
ENUMX
3001
  BFD_RELOC_SH_DISP12BY8
3002
ENUMX
3003
  BFD_RELOC_SH_DISP20
3004
ENUMX
3005
  BFD_RELOC_SH_DISP20BY8
3006
ENUMX
3007
  BFD_RELOC_SH_IMM4
3008
ENUMX
3009
  BFD_RELOC_SH_IMM4BY2
3010
ENUMX
3011
  BFD_RELOC_SH_IMM4BY4
3012
ENUMX
3013
  BFD_RELOC_SH_IMM8
3014
ENUMX
3015
  BFD_RELOC_SH_IMM8BY2
3016
ENUMX
3017
  BFD_RELOC_SH_IMM8BY4
3018
ENUMX
3019
  BFD_RELOC_SH_PCRELIMM8BY2
3020
ENUMX
3021
  BFD_RELOC_SH_PCRELIMM8BY4
3022
ENUMX
3023
  BFD_RELOC_SH_SWITCH16
3024
ENUMX
3025
  BFD_RELOC_SH_SWITCH32
3026
ENUMX
3027
  BFD_RELOC_SH_USES
3028
ENUMX
3029
  BFD_RELOC_SH_COUNT
3030
ENUMX
3031
  BFD_RELOC_SH_ALIGN
3032
ENUMX
3033
  BFD_RELOC_SH_CODE
3034
ENUMX
3035
  BFD_RELOC_SH_DATA
3036
ENUMX
3037
  BFD_RELOC_SH_LABEL
3038
ENUMX
3039
  BFD_RELOC_SH_LOOP_START
3040
ENUMX
3041
  BFD_RELOC_SH_LOOP_END
3042
ENUMX
3043
  BFD_RELOC_SH_COPY
3044
ENUMX
3045
  BFD_RELOC_SH_GLOB_DAT
3046
ENUMX
3047
  BFD_RELOC_SH_JMP_SLOT
3048
ENUMX
3049
  BFD_RELOC_SH_RELATIVE
3050
ENUMX
3051
  BFD_RELOC_SH_GOTPC
3052
ENUMX
3053
  BFD_RELOC_SH_GOT_LOW16
3054
ENUMX
3055
  BFD_RELOC_SH_GOT_MEDLOW16
3056
ENUMX
3057
  BFD_RELOC_SH_GOT_MEDHI16
3058
ENUMX
3059
  BFD_RELOC_SH_GOT_HI16
3060
ENUMX
3061
  BFD_RELOC_SH_GOTPLT_LOW16
3062
ENUMX
3063
  BFD_RELOC_SH_GOTPLT_MEDLOW16
3064
ENUMX
3065
  BFD_RELOC_SH_GOTPLT_MEDHI16
3066
ENUMX
3067
  BFD_RELOC_SH_GOTPLT_HI16
3068
ENUMX
3069
  BFD_RELOC_SH_PLT_LOW16
3070
ENUMX
3071
  BFD_RELOC_SH_PLT_MEDLOW16
3072
ENUMX
3073
  BFD_RELOC_SH_PLT_MEDHI16
3074
ENUMX
3075
  BFD_RELOC_SH_PLT_HI16
3076
ENUMX
3077
  BFD_RELOC_SH_GOTOFF_LOW16
3078
ENUMX
3079
  BFD_RELOC_SH_GOTOFF_MEDLOW16
3080
ENUMX
3081
  BFD_RELOC_SH_GOTOFF_MEDHI16
3082
ENUMX
3083
  BFD_RELOC_SH_GOTOFF_HI16
3084
ENUMX
3085
  BFD_RELOC_SH_GOTPC_LOW16
3086
ENUMX
3087
  BFD_RELOC_SH_GOTPC_MEDLOW16
3088
ENUMX
3089
  BFD_RELOC_SH_GOTPC_MEDHI16
3090
ENUMX
3091
  BFD_RELOC_SH_GOTPC_HI16
3092
ENUMX
3093
  BFD_RELOC_SH_COPY64
3094
ENUMX
3095
  BFD_RELOC_SH_GLOB_DAT64
3096
ENUMX
3097
  BFD_RELOC_SH_JMP_SLOT64
3098
ENUMX
3099
  BFD_RELOC_SH_RELATIVE64
3100
ENUMX
3101
  BFD_RELOC_SH_GOT10BY4
3102
ENUMX
3103
  BFD_RELOC_SH_GOT10BY8
3104
ENUMX
3105
  BFD_RELOC_SH_GOTPLT10BY4
3106
ENUMX
3107
  BFD_RELOC_SH_GOTPLT10BY8
3108
ENUMX
3109
  BFD_RELOC_SH_GOTPLT32
3110
ENUMX
3111
  BFD_RELOC_SH_SHMEDIA_CODE
3112
ENUMX
3113
  BFD_RELOC_SH_IMMU5
3114
ENUMX
3115
  BFD_RELOC_SH_IMMS6
3116
ENUMX
3117
  BFD_RELOC_SH_IMMS6BY32
3118
ENUMX
3119
  BFD_RELOC_SH_IMMU6
3120
ENUMX
3121
  BFD_RELOC_SH_IMMS10
3122
ENUMX
3123
  BFD_RELOC_SH_IMMS10BY2
3124
ENUMX
3125
  BFD_RELOC_SH_IMMS10BY4
3126
ENUMX
3127
  BFD_RELOC_SH_IMMS10BY8
3128
ENUMX
3129
  BFD_RELOC_SH_IMMS16
3130
ENUMX
3131
  BFD_RELOC_SH_IMMU16
3132
ENUMX
3133
  BFD_RELOC_SH_IMM_LOW16
3134
ENUMX
3135
  BFD_RELOC_SH_IMM_LOW16_PCREL
3136
ENUMX
3137
  BFD_RELOC_SH_IMM_MEDLOW16
3138
ENUMX
3139
  BFD_RELOC_SH_IMM_MEDLOW16_PCREL
3140
ENUMX
3141
  BFD_RELOC_SH_IMM_MEDHI16
3142
ENUMX
3143
  BFD_RELOC_SH_IMM_MEDHI16_PCREL
3144
ENUMX
3145
  BFD_RELOC_SH_IMM_HI16
3146
ENUMX
3147
  BFD_RELOC_SH_IMM_HI16_PCREL
3148
ENUMX
3149
  BFD_RELOC_SH_PT_16
3150
ENUMX
3151
  BFD_RELOC_SH_TLS_GD_32
3152
ENUMX
3153
  BFD_RELOC_SH_TLS_LD_32
3154
ENUMX
3155
  BFD_RELOC_SH_TLS_LDO_32
3156
ENUMX
3157
  BFD_RELOC_SH_TLS_IE_32
3158
ENUMX
3159
  BFD_RELOC_SH_TLS_LE_32
3160
ENUMX
3161
  BFD_RELOC_SH_TLS_DTPMOD32
3162
ENUMX
3163
  BFD_RELOC_SH_TLS_DTPOFF32
3164
ENUMX
3165
  BFD_RELOC_SH_TLS_TPOFF32
3166
ENUMDOC
3167
  Renesas / SuperH SH relocs.  Not all of these appear in object files.
3168
 
3169
ENUM
3170
  BFD_RELOC_ARC_B22_PCREL
3171
ENUMDOC
3172
  ARC Cores relocs.
3173
  ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
3174
  not stored in the instruction.  The high 20 bits are installed in bits 26
3175
  through 7 of the instruction.
3176
ENUM
3177
  BFD_RELOC_ARC_B26
3178
ENUMDOC
3179
  ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
3180
  stored in the instruction.  The high 24 bits are installed in bits 23
3181
  through 0.
3182
 
3183
ENUM
3184
  BFD_RELOC_BFIN_16_IMM
3185
ENUMDOC
3186
  ADI Blackfin 16 bit immediate absolute reloc.
3187
ENUM
3188
  BFD_RELOC_BFIN_16_HIGH
3189
ENUMDOC
3190
  ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
3191
ENUM
3192
  BFD_RELOC_BFIN_4_PCREL
3193
ENUMDOC
3194
  ADI Blackfin 'a' part of LSETUP.
3195
ENUM
3196
  BFD_RELOC_BFIN_5_PCREL
3197
ENUMDOC
3198
  ADI Blackfin.
3199
ENUM
3200
  BFD_RELOC_BFIN_16_LOW
3201
ENUMDOC
3202
  ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
3203
ENUM
3204
  BFD_RELOC_BFIN_10_PCREL
3205
ENUMDOC
3206
  ADI Blackfin.
3207
ENUM
3208
  BFD_RELOC_BFIN_11_PCREL
3209
ENUMDOC
3210
  ADI Blackfin 'b' part of LSETUP.
3211
ENUM
3212
  BFD_RELOC_BFIN_12_PCREL_JUMP
3213
ENUMDOC
3214
  ADI Blackfin.
3215
ENUM
3216
  BFD_RELOC_BFIN_12_PCREL_JUMP_S
3217
ENUMDOC
3218
  ADI Blackfin Short jump, pcrel.
3219
ENUM
3220
  BFD_RELOC_BFIN_24_PCREL_CALL_X
3221
ENUMDOC
3222
  ADI Blackfin Call.x not implemented.
3223
ENUM
3224
  BFD_RELOC_BFIN_24_PCREL_JUMP_L
3225
ENUMDOC
3226
  ADI Blackfin Long Jump pcrel.
3227
ENUM
3228
  BFD_RELOC_BFIN_GOT17M4
3229
ENUMX
3230
  BFD_RELOC_BFIN_GOTHI
3231
ENUMX
3232
  BFD_RELOC_BFIN_GOTLO
3233
ENUMX
3234
  BFD_RELOC_BFIN_FUNCDESC
3235
ENUMX
3236
  BFD_RELOC_BFIN_FUNCDESC_GOT17M4
3237
ENUMX
3238
  BFD_RELOC_BFIN_FUNCDESC_GOTHI
3239
ENUMX
3240
  BFD_RELOC_BFIN_FUNCDESC_GOTLO
3241
ENUMX
3242
  BFD_RELOC_BFIN_FUNCDESC_VALUE
3243
ENUMX
3244
  BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
3245
ENUMX
3246
  BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
3247
ENUMX
3248
  BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
3249
ENUMX
3250
  BFD_RELOC_BFIN_GOTOFF17M4
3251
ENUMX
3252
  BFD_RELOC_BFIN_GOTOFFHI
3253
ENUMX
3254
  BFD_RELOC_BFIN_GOTOFFLO
3255
ENUMDOC
3256
  ADI Blackfin FD-PIC relocations.
3257
ENUM
3258
  BFD_RELOC_BFIN_GOT
3259
ENUMDOC
3260
  ADI Blackfin GOT relocation.
3261
ENUM
3262
  BFD_RELOC_BFIN_PLTPC
3263
ENUMDOC
3264
  ADI Blackfin PLTPC relocation.
3265
ENUM
3266
  BFD_ARELOC_BFIN_PUSH
3267
ENUMDOC
3268
  ADI Blackfin arithmetic relocation.
3269
ENUM
3270
  BFD_ARELOC_BFIN_CONST
3271
ENUMDOC
3272
  ADI Blackfin arithmetic relocation.
3273
ENUM
3274
  BFD_ARELOC_BFIN_ADD
3275
ENUMDOC
3276
  ADI Blackfin arithmetic relocation.
3277
ENUM
3278
  BFD_ARELOC_BFIN_SUB
3279
ENUMDOC
3280
  ADI Blackfin arithmetic relocation.
3281
ENUM
3282
  BFD_ARELOC_BFIN_MULT
3283
ENUMDOC
3284
  ADI Blackfin arithmetic relocation.
3285
ENUM
3286
  BFD_ARELOC_BFIN_DIV
3287
ENUMDOC
3288
  ADI Blackfin arithmetic relocation.
3289
ENUM
3290
  BFD_ARELOC_BFIN_MOD
3291
ENUMDOC
3292
  ADI Blackfin arithmetic relocation.
3293
ENUM
3294
  BFD_ARELOC_BFIN_LSHIFT
3295
ENUMDOC
3296
  ADI Blackfin arithmetic relocation.
3297
ENUM
3298
  BFD_ARELOC_BFIN_RSHIFT
3299
ENUMDOC
3300
  ADI Blackfin arithmetic relocation.
3301
ENUM
3302
  BFD_ARELOC_BFIN_AND
3303
ENUMDOC
3304
  ADI Blackfin arithmetic relocation.
3305
ENUM
3306
  BFD_ARELOC_BFIN_OR
3307
ENUMDOC
3308
  ADI Blackfin arithmetic relocation.
3309
ENUM
3310
  BFD_ARELOC_BFIN_XOR
3311
ENUMDOC
3312
  ADI Blackfin arithmetic relocation.
3313
ENUM
3314
  BFD_ARELOC_BFIN_LAND
3315
ENUMDOC
3316
  ADI Blackfin arithmetic relocation.
3317
ENUM
3318
  BFD_ARELOC_BFIN_LOR
3319
ENUMDOC
3320
  ADI Blackfin arithmetic relocation.
3321
ENUM
3322
  BFD_ARELOC_BFIN_LEN
3323
ENUMDOC
3324
  ADI Blackfin arithmetic relocation.
3325
ENUM
3326
  BFD_ARELOC_BFIN_NEG
3327
ENUMDOC
3328
  ADI Blackfin arithmetic relocation.
3329
ENUM
3330
  BFD_ARELOC_BFIN_COMP
3331
ENUMDOC
3332
  ADI Blackfin arithmetic relocation.
3333
ENUM
3334
  BFD_ARELOC_BFIN_PAGE
3335
ENUMDOC
3336
  ADI Blackfin arithmetic relocation.
3337
ENUM
3338
  BFD_ARELOC_BFIN_HWPAGE
3339
ENUMDOC
3340
  ADI Blackfin arithmetic relocation.
3341
ENUM
3342
  BFD_ARELOC_BFIN_ADDR
3343
ENUMDOC
3344
  ADI Blackfin arithmetic relocation.
3345
 
3346
ENUM
3347
  BFD_RELOC_D10V_10_PCREL_R
3348
ENUMDOC
3349
  Mitsubishi D10V relocs.
3350
  This is a 10-bit reloc with the right 2 bits
3351
  assumed to be 0.
3352
ENUM
3353
  BFD_RELOC_D10V_10_PCREL_L
3354
ENUMDOC
3355
  Mitsubishi D10V relocs.
3356
  This is a 10-bit reloc with the right 2 bits
3357
  assumed to be 0.  This is the same as the previous reloc
3358
  except it is in the left container, i.e.,
3359
  shifted left 15 bits.
3360
ENUM
3361
  BFD_RELOC_D10V_18
3362
ENUMDOC
3363
  This is an 18-bit reloc with the right 2 bits
3364
  assumed to be 0.
3365
ENUM
3366
  BFD_RELOC_D10V_18_PCREL
3367
ENUMDOC
3368
  This is an 18-bit reloc with the right 2 bits
3369
  assumed to be 0.
3370
 
3371
ENUM
3372
  BFD_RELOC_D30V_6
3373
ENUMDOC
3374
  Mitsubishi D30V relocs.
3375
  This is a 6-bit absolute reloc.
3376
ENUM
3377
  BFD_RELOC_D30V_9_PCREL
3378
ENUMDOC
3379
  This is a 6-bit pc-relative reloc with
3380
  the right 3 bits assumed to be 0.
3381
ENUM
3382
  BFD_RELOC_D30V_9_PCREL_R
3383
ENUMDOC
3384
  This is a 6-bit pc-relative reloc with
3385
  the right 3 bits assumed to be 0. Same
3386
  as the previous reloc but on the right side
3387
  of the container.
3388
ENUM
3389
  BFD_RELOC_D30V_15
3390
ENUMDOC
3391
  This is a 12-bit absolute reloc with the
3392
  right 3 bitsassumed to be 0.
3393
ENUM
3394
  BFD_RELOC_D30V_15_PCREL
3395
ENUMDOC
3396
  This is a 12-bit pc-relative reloc with
3397
  the right 3 bits assumed to be 0.
3398
ENUM
3399
  BFD_RELOC_D30V_15_PCREL_R
3400
ENUMDOC
3401
  This is a 12-bit pc-relative reloc with
3402
  the right 3 bits assumed to be 0. Same
3403
  as the previous reloc but on the right side
3404
  of the container.
3405
ENUM
3406
  BFD_RELOC_D30V_21
3407
ENUMDOC
3408
  This is an 18-bit absolute reloc with
3409
  the right 3 bits assumed to be 0.
3410
ENUM
3411
  BFD_RELOC_D30V_21_PCREL
3412
ENUMDOC
3413
  This is an 18-bit pc-relative reloc with
3414
  the right 3 bits assumed to be 0.
3415
ENUM
3416
  BFD_RELOC_D30V_21_PCREL_R
3417
ENUMDOC
3418
  This is an 18-bit pc-relative reloc with
3419
  the right 3 bits assumed to be 0. Same
3420
  as the previous reloc but on the right side
3421
  of the container.
3422
ENUM
3423
  BFD_RELOC_D30V_32
3424
ENUMDOC
3425
  This is a 32-bit absolute reloc.
3426
ENUM
3427
  BFD_RELOC_D30V_32_PCREL
3428
ENUMDOC
3429
  This is a 32-bit pc-relative reloc.
3430
 
3431
ENUM
3432
  BFD_RELOC_DLX_HI16_S
3433
ENUMDOC
3434
  DLX relocs
3435
ENUM
3436
  BFD_RELOC_DLX_LO16
3437
ENUMDOC
3438
  DLX relocs
3439
ENUM
3440
  BFD_RELOC_DLX_JMP26
3441
ENUMDOC
3442
  DLX relocs
3443
 
3444
ENUM
3445
  BFD_RELOC_M32C_HI8
3446
ENUMX
3447
  BFD_RELOC_M32C_RL_JUMP
3448
ENUMX
3449
  BFD_RELOC_M32C_RL_1ADDR
3450
ENUMX
3451
  BFD_RELOC_M32C_RL_2ADDR
3452
ENUMDOC
3453
  Renesas M16C/M32C Relocations.
3454
 
3455
ENUM
3456
  BFD_RELOC_M32R_24
3457
ENUMDOC
3458
  Renesas M32R (formerly Mitsubishi M32R) relocs.
3459
  This is a 24 bit absolute address.
3460
ENUM
3461
  BFD_RELOC_M32R_10_PCREL
3462
ENUMDOC
3463
  This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
3464
ENUM
3465
  BFD_RELOC_M32R_18_PCREL
3466
ENUMDOC
3467
  This is an 18-bit reloc with the right 2 bits assumed to be 0.
3468
ENUM
3469
  BFD_RELOC_M32R_26_PCREL
3470
ENUMDOC
3471
  This is a 26-bit reloc with the right 2 bits assumed to be 0.
3472
ENUM
3473
  BFD_RELOC_M32R_HI16_ULO
3474
ENUMDOC
3475
  This is a 16-bit reloc containing the high 16 bits of an address
3476
  used when the lower 16 bits are treated as unsigned.
3477
ENUM
3478
  BFD_RELOC_M32R_HI16_SLO
3479
ENUMDOC
3480
  This is a 16-bit reloc containing the high 16 bits of an address
3481
  used when the lower 16 bits are treated as signed.
3482
ENUM
3483
  BFD_RELOC_M32R_LO16
3484
ENUMDOC
3485
  This is a 16-bit reloc containing the lower 16 bits of an address.
3486
ENUM
3487
  BFD_RELOC_M32R_SDA16
3488
ENUMDOC
3489
  This is a 16-bit reloc containing the small data area offset for use in
3490
  add3, load, and store instructions.
3491
ENUM
3492
  BFD_RELOC_M32R_GOT24
3493
ENUMX
3494
  BFD_RELOC_M32R_26_PLTREL
3495
ENUMX
3496
  BFD_RELOC_M32R_COPY
3497
ENUMX
3498
  BFD_RELOC_M32R_GLOB_DAT
3499
ENUMX
3500
  BFD_RELOC_M32R_JMP_SLOT
3501
ENUMX
3502
  BFD_RELOC_M32R_RELATIVE
3503
ENUMX
3504
  BFD_RELOC_M32R_GOTOFF
3505
ENUMX
3506
  BFD_RELOC_M32R_GOTOFF_HI_ULO
3507
ENUMX
3508
  BFD_RELOC_M32R_GOTOFF_HI_SLO
3509
ENUMX
3510
  BFD_RELOC_M32R_GOTOFF_LO
3511
ENUMX
3512
  BFD_RELOC_M32R_GOTPC24
3513
ENUMX
3514
  BFD_RELOC_M32R_GOT16_HI_ULO
3515
ENUMX
3516
  BFD_RELOC_M32R_GOT16_HI_SLO
3517
ENUMX
3518
  BFD_RELOC_M32R_GOT16_LO
3519
ENUMX
3520
  BFD_RELOC_M32R_GOTPC_HI_ULO
3521
ENUMX
3522
  BFD_RELOC_M32R_GOTPC_HI_SLO
3523
ENUMX
3524
  BFD_RELOC_M32R_GOTPC_LO
3525
ENUMDOC
3526
  For PIC.
3527
 
3528
 
3529
ENUM
3530
  BFD_RELOC_V850_9_PCREL
3531
ENUMDOC
3532
  This is a 9-bit reloc
3533
ENUM
3534
  BFD_RELOC_V850_22_PCREL
3535
ENUMDOC
3536
  This is a 22-bit reloc
3537
 
3538
ENUM
3539
  BFD_RELOC_V850_SDA_16_16_OFFSET
3540
ENUMDOC
3541
  This is a 16 bit offset from the short data area pointer.
3542
ENUM
3543
  BFD_RELOC_V850_SDA_15_16_OFFSET
3544
ENUMDOC
3545
  This is a 16 bit offset (of which only 15 bits are used) from the
3546
  short data area pointer.
3547
ENUM
3548
  BFD_RELOC_V850_ZDA_16_16_OFFSET
3549
ENUMDOC
3550
  This is a 16 bit offset from the zero data area pointer.
3551
ENUM
3552
  BFD_RELOC_V850_ZDA_15_16_OFFSET
3553
ENUMDOC
3554
  This is a 16 bit offset (of which only 15 bits are used) from the
3555
  zero data area pointer.
3556
ENUM
3557
  BFD_RELOC_V850_TDA_6_8_OFFSET
3558
ENUMDOC
3559
  This is an 8 bit offset (of which only 6 bits are used) from the
3560
  tiny data area pointer.
3561
ENUM
3562
  BFD_RELOC_V850_TDA_7_8_OFFSET
3563
ENUMDOC
3564
  This is an 8bit offset (of which only 7 bits are used) from the tiny
3565
  data area pointer.
3566
ENUM
3567
  BFD_RELOC_V850_TDA_7_7_OFFSET
3568
ENUMDOC
3569
  This is a 7 bit offset from the tiny data area pointer.
3570
ENUM
3571
  BFD_RELOC_V850_TDA_16_16_OFFSET
3572
ENUMDOC
3573
  This is a 16 bit offset from the tiny data area pointer.
3574
COMMENT
3575
ENUM
3576
  BFD_RELOC_V850_TDA_4_5_OFFSET
3577
ENUMDOC
3578
  This is a 5 bit offset (of which only 4 bits are used) from the tiny
3579
  data area pointer.
3580
ENUM
3581
  BFD_RELOC_V850_TDA_4_4_OFFSET
3582
ENUMDOC
3583
  This is a 4 bit offset from the tiny data area pointer.
3584
ENUM
3585
  BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
3586
ENUMDOC
3587
  This is a 16 bit offset from the short data area pointer, with the
3588
  bits placed non-contiguously in the instruction.
3589
ENUM
3590
  BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
3591
ENUMDOC
3592
  This is a 16 bit offset from the zero data area pointer, with the
3593
  bits placed non-contiguously in the instruction.
3594
ENUM
3595
  BFD_RELOC_V850_CALLT_6_7_OFFSET
3596
ENUMDOC
3597
  This is a 6 bit offset from the call table base pointer.
3598
ENUM
3599
  BFD_RELOC_V850_CALLT_16_16_OFFSET
3600
ENUMDOC
3601
  This is a 16 bit offset from the call table base pointer.
3602
ENUM
3603
  BFD_RELOC_V850_LONGCALL
3604
ENUMDOC
3605
  Used for relaxing indirect function calls.
3606
ENUM
3607
  BFD_RELOC_V850_LONGJUMP
3608
ENUMDOC
3609
  Used for relaxing indirect jumps.
3610
ENUM
3611
  BFD_RELOC_V850_ALIGN
3612
ENUMDOC
3613
  Used to maintain alignment whilst relaxing.
3614
ENUM
3615
  BFD_RELOC_V850_LO16_SPLIT_OFFSET
3616
ENUMDOC
3617
  This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
3618
  instructions.
3619
ENUM
3620
  BFD_RELOC_MN10300_32_PCREL
3621
ENUMDOC
3622
  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
3623
  instruction.
3624
ENUM
3625
  BFD_RELOC_MN10300_16_PCREL
3626
ENUMDOC
3627
  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
3628
  instruction.
3629
 
3630
ENUM
3631
  BFD_RELOC_TIC30_LDP
3632
ENUMDOC
3633
  This is a 8bit DP reloc for the tms320c30, where the most
3634
  significant 8 bits of a 24 bit word are placed into the least
3635
  significant 8 bits of the opcode.
3636
 
3637
ENUM
3638
  BFD_RELOC_TIC54X_PARTLS7
3639
ENUMDOC
3640
  This is a 7bit reloc for the tms320c54x, where the least
3641
  significant 7 bits of a 16 bit word are placed into the least
3642
  significant 7 bits of the opcode.
3643
 
3644
ENUM
3645
  BFD_RELOC_TIC54X_PARTMS9
3646
ENUMDOC
3647
  This is a 9bit DP reloc for the tms320c54x, where the most
3648
  significant 9 bits of a 16 bit word are placed into the least
3649
  significant 9 bits of the opcode.
3650
 
3651
ENUM
3652
  BFD_RELOC_TIC54X_23
3653
ENUMDOC
3654
  This is an extended address 23-bit reloc for the tms320c54x.
3655
 
3656
ENUM
3657
  BFD_RELOC_TIC54X_16_OF_23
3658
ENUMDOC
3659
  This is a 16-bit reloc for the tms320c54x, where the least
3660
  significant 16 bits of a 23-bit extended address are placed into
3661
  the opcode.
3662
 
3663
ENUM
3664
  BFD_RELOC_TIC54X_MS7_OF_23
3665
ENUMDOC
3666
  This is a reloc for the tms320c54x, where the most
3667
  significant 7 bits of a 23-bit extended address are placed into
3668
  the opcode.
3669
 
3670
ENUM
3671
  BFD_RELOC_FR30_48
3672
ENUMDOC
3673
  This is a 48 bit reloc for the FR30 that stores 32 bits.
3674
ENUM
3675
  BFD_RELOC_FR30_20
3676
ENUMDOC
3677
  This is a 32 bit reloc for the FR30 that stores 20 bits split up into
3678
  two sections.
3679
ENUM
3680
  BFD_RELOC_FR30_6_IN_4
3681
ENUMDOC
3682
  This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
3683
  4 bits.
3684
ENUM
3685
  BFD_RELOC_FR30_8_IN_8
3686
ENUMDOC
3687
  This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
3688
  into 8 bits.
3689
ENUM
3690
  BFD_RELOC_FR30_9_IN_8
3691
ENUMDOC
3692
  This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
3693
  into 8 bits.
3694
ENUM
3695
  BFD_RELOC_FR30_10_IN_8
3696
ENUMDOC
3697
  This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
3698
  into 8 bits.
3699
ENUM
3700
  BFD_RELOC_FR30_9_PCREL
3701
ENUMDOC
3702
  This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
3703
  short offset into 8 bits.
3704
ENUM
3705
  BFD_RELOC_FR30_12_PCREL
3706
ENUMDOC
3707
  This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
3708
  short offset into 11 bits.
3709
 
3710
ENUM
3711
  BFD_RELOC_MCORE_PCREL_IMM8BY4
3712
ENUMX
3713
  BFD_RELOC_MCORE_PCREL_IMM11BY2
3714
ENUMX
3715
  BFD_RELOC_MCORE_PCREL_IMM4BY2
3716
ENUMX
3717
  BFD_RELOC_MCORE_PCREL_32
3718
ENUMX
3719
  BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
3720
ENUMX
3721
  BFD_RELOC_MCORE_RVA
3722
ENUMDOC
3723
  Motorola Mcore relocations.
3724
 
3725
ENUM
3726
  BFD_RELOC_MEP_8
3727
ENUMX
3728
  BFD_RELOC_MEP_16
3729
ENUMX
3730
  BFD_RELOC_MEP_32
3731
ENUMX
3732
  BFD_RELOC_MEP_PCREL8A2
3733
ENUMX
3734
  BFD_RELOC_MEP_PCREL12A2
3735
ENUMX
3736
  BFD_RELOC_MEP_PCREL17A2
3737
ENUMX
3738
  BFD_RELOC_MEP_PCREL24A2
3739
ENUMX
3740
  BFD_RELOC_MEP_PCABS24A2
3741
ENUMX
3742
  BFD_RELOC_MEP_LOW16
3743
ENUMX
3744
  BFD_RELOC_MEP_HI16U
3745
ENUMX
3746
  BFD_RELOC_MEP_HI16S
3747
ENUMX
3748
  BFD_RELOC_MEP_GPREL
3749
ENUMX
3750
  BFD_RELOC_MEP_TPREL
3751
ENUMX
3752
  BFD_RELOC_MEP_TPREL7
3753
ENUMX
3754
  BFD_RELOC_MEP_TPREL7A2
3755
ENUMX
3756
  BFD_RELOC_MEP_TPREL7A4
3757
ENUMX
3758
  BFD_RELOC_MEP_UIMM24
3759
ENUMX
3760
  BFD_RELOC_MEP_ADDR24A4
3761
ENUMX
3762
  BFD_RELOC_MEP_GNU_VTINHERIT
3763
ENUMX
3764
  BFD_RELOC_MEP_GNU_VTENTRY
3765
ENUMDOC
3766
  Toshiba Media Processor Relocations.
3767
COMMENT
3768
 
3769
ENUM
3770
  BFD_RELOC_MMIX_GETA
3771
ENUMX
3772
  BFD_RELOC_MMIX_GETA_1
3773
ENUMX
3774
  BFD_RELOC_MMIX_GETA_2
3775
ENUMX
3776
  BFD_RELOC_MMIX_GETA_3
3777
ENUMDOC
3778
  These are relocations for the GETA instruction.
3779
ENUM
3780
  BFD_RELOC_MMIX_CBRANCH
3781
ENUMX
3782
  BFD_RELOC_MMIX_CBRANCH_J
3783
ENUMX
3784
  BFD_RELOC_MMIX_CBRANCH_1
3785
ENUMX
3786
  BFD_RELOC_MMIX_CBRANCH_2
3787
ENUMX
3788
  BFD_RELOC_MMIX_CBRANCH_3
3789
ENUMDOC
3790
  These are relocations for a conditional branch instruction.
3791
ENUM
3792
  BFD_RELOC_MMIX_PUSHJ
3793
ENUMX
3794
  BFD_RELOC_MMIX_PUSHJ_1
3795
ENUMX
3796
  BFD_RELOC_MMIX_PUSHJ_2
3797
ENUMX
3798
  BFD_RELOC_MMIX_PUSHJ_3
3799
ENUMX
3800
  BFD_RELOC_MMIX_PUSHJ_STUBBABLE
3801
ENUMDOC
3802
  These are relocations for the PUSHJ instruction.
3803
ENUM
3804
  BFD_RELOC_MMIX_JMP
3805
ENUMX
3806
  BFD_RELOC_MMIX_JMP_1
3807
ENUMX
3808
  BFD_RELOC_MMIX_JMP_2
3809
ENUMX
3810
  BFD_RELOC_MMIX_JMP_3
3811
ENUMDOC
3812
  These are relocations for the JMP instruction.
3813
ENUM
3814
  BFD_RELOC_MMIX_ADDR19
3815
ENUMDOC
3816
  This is a relocation for a relative address as in a GETA instruction or
3817
  a branch.
3818
ENUM
3819
  BFD_RELOC_MMIX_ADDR27
3820
ENUMDOC
3821
  This is a relocation for a relative address as in a JMP instruction.
3822
ENUM
3823
  BFD_RELOC_MMIX_REG_OR_BYTE
3824
ENUMDOC
3825
  This is a relocation for an instruction field that may be a general
3826
  register or a value 0..255.
3827
ENUM
3828
  BFD_RELOC_MMIX_REG
3829
ENUMDOC
3830
  This is a relocation for an instruction field that may be a general
3831
  register.
3832
ENUM
3833
  BFD_RELOC_MMIX_BASE_PLUS_OFFSET
3834
ENUMDOC
3835
  This is a relocation for two instruction fields holding a register and
3836
  an offset, the equivalent of the relocation.
3837
ENUM
3838
  BFD_RELOC_MMIX_LOCAL
3839
ENUMDOC
3840
  This relocation is an assertion that the expression is not allocated as
3841
  a global register.  It does not modify contents.
3842
 
3843
ENUM
3844
  BFD_RELOC_AVR_7_PCREL
3845
ENUMDOC
3846
  This is a 16 bit reloc for the AVR that stores 8 bit pc relative
3847
  short offset into 7 bits.
3848
ENUM
3849
  BFD_RELOC_AVR_13_PCREL
3850
ENUMDOC
3851
  This is a 16 bit reloc for the AVR that stores 13 bit pc relative
3852
  short offset into 12 bits.
3853
ENUM
3854
  BFD_RELOC_AVR_16_PM
3855
ENUMDOC
3856
  This is a 16 bit reloc for the AVR that stores 17 bit value (usually
3857
  program memory address) into 16 bits.
3858
ENUM
3859
  BFD_RELOC_AVR_LO8_LDI
3860
ENUMDOC
3861
  This is a 16 bit reloc for the AVR that stores 8 bit value (usually
3862
  data memory address) into 8 bit immediate value of LDI insn.
3863
ENUM
3864
  BFD_RELOC_AVR_HI8_LDI
3865
ENUMDOC
3866
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3867
  of data memory address) into 8 bit immediate value of LDI insn.
3868
ENUM
3869
  BFD_RELOC_AVR_HH8_LDI
3870
ENUMDOC
3871
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3872
  of program memory address) into 8 bit immediate value of LDI insn.
3873
ENUM
3874
  BFD_RELOC_AVR_MS8_LDI
3875
ENUMDOC
3876
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3877
  of 32 bit value) into 8 bit immediate value of LDI insn.
3878
ENUM
3879
  BFD_RELOC_AVR_LO8_LDI_NEG
3880
ENUMDOC
3881
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3882
  (usually data memory address) into 8 bit immediate value of SUBI insn.
3883
ENUM
3884
  BFD_RELOC_AVR_HI8_LDI_NEG
3885
ENUMDOC
3886
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3887
  (high 8 bit of data memory address) into 8 bit immediate value of
3888
  SUBI insn.
3889
ENUM
3890
  BFD_RELOC_AVR_HH8_LDI_NEG
3891
ENUMDOC
3892
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3893
  (most high 8 bit of program memory address) into 8 bit immediate value
3894
  of LDI or SUBI insn.
3895
ENUM
3896
  BFD_RELOC_AVR_MS8_LDI_NEG
3897
ENUMDOC
3898
  This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
3899
  of 32 bit value) into 8 bit immediate value of LDI insn.
3900
ENUM
3901
  BFD_RELOC_AVR_LO8_LDI_PM
3902
ENUMDOC
3903
  This is a 16 bit reloc for the AVR that stores 8 bit value (usually
3904
  command address) into 8 bit immediate value of LDI insn.
3905
ENUM
3906
  BFD_RELOC_AVR_LO8_LDI_GS
3907
ENUMDOC
3908
  This is a 16 bit reloc for the AVR that stores 8 bit value
3909
  (command address) into 8 bit immediate value of LDI insn. If the address
3910
  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
3911
  in the lower 128k.
3912
ENUM
3913
  BFD_RELOC_AVR_HI8_LDI_PM
3914
ENUMDOC
3915
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3916
  of command address) into 8 bit immediate value of LDI insn.
3917
ENUM
3918
  BFD_RELOC_AVR_HI8_LDI_GS
3919
ENUMDOC
3920
  This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3921
  of command address) into 8 bit immediate value of LDI insn.  If the address
3922
  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
3923
  below 128k.
3924
ENUM
3925
  BFD_RELOC_AVR_HH8_LDI_PM
3926
ENUMDOC
3927
  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3928
  of command address) into 8 bit immediate value of LDI insn.
3929
ENUM
3930
  BFD_RELOC_AVR_LO8_LDI_PM_NEG
3931
ENUMDOC
3932
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3933
  (usually command address) into 8 bit immediate value of SUBI insn.
3934
ENUM
3935
  BFD_RELOC_AVR_HI8_LDI_PM_NEG
3936
ENUMDOC
3937
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3938
  (high 8 bit of 16 bit command address) into 8 bit immediate value
3939
  of SUBI insn.
3940
ENUM
3941
  BFD_RELOC_AVR_HH8_LDI_PM_NEG
3942
ENUMDOC
3943
  This is a 16 bit reloc for the AVR that stores negated 8 bit value
3944
  (high 6 bit of 22 bit command address) into 8 bit immediate
3945
  value of SUBI insn.
3946
ENUM
3947
  BFD_RELOC_AVR_CALL
3948
ENUMDOC
3949
  This is a 32 bit reloc for the AVR that stores 23 bit value
3950
  into 22 bits.
3951
ENUM
3952
  BFD_RELOC_AVR_LDI
3953
ENUMDOC
3954
  This is a 16 bit reloc for the AVR that stores all needed bits
3955
  for absolute addressing with ldi with overflow check to linktime
3956
ENUM
3957
  BFD_RELOC_AVR_6
3958
ENUMDOC
3959
  This is a 6 bit reloc for the AVR that stores offset for ldd/std
3960
  instructions
3961
ENUM
3962
  BFD_RELOC_AVR_6_ADIW
3963
ENUMDOC
3964
  This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
3965
  instructions
3966
 
3967
ENUM
3968
  BFD_RELOC_390_12
3969
ENUMDOC
3970
   Direct 12 bit.
3971
ENUM
3972
  BFD_RELOC_390_GOT12
3973
ENUMDOC
3974
  12 bit GOT offset.
3975
ENUM
3976
  BFD_RELOC_390_PLT32
3977
ENUMDOC
3978
  32 bit PC relative PLT address.
3979
ENUM
3980
  BFD_RELOC_390_COPY
3981
ENUMDOC
3982
  Copy symbol at runtime.
3983
ENUM
3984
  BFD_RELOC_390_GLOB_DAT
3985
ENUMDOC
3986
  Create GOT entry.
3987
ENUM
3988
  BFD_RELOC_390_JMP_SLOT
3989
ENUMDOC
3990
  Create PLT entry.
3991
ENUM
3992
  BFD_RELOC_390_RELATIVE
3993
ENUMDOC
3994
  Adjust by program base.
3995
ENUM
3996
  BFD_RELOC_390_GOTPC
3997
ENUMDOC
3998
  32 bit PC relative offset to GOT.
3999
ENUM
4000
  BFD_RELOC_390_GOT16
4001
ENUMDOC
4002
  16 bit GOT offset.
4003
ENUM
4004
  BFD_RELOC_390_PC16DBL
4005
ENUMDOC
4006
  PC relative 16 bit shifted by 1.
4007
ENUM
4008
  BFD_RELOC_390_PLT16DBL
4009
ENUMDOC
4010
  16 bit PC rel. PLT shifted by 1.
4011
ENUM
4012
  BFD_RELOC_390_PC32DBL
4013
ENUMDOC
4014
  PC relative 32 bit shifted by 1.
4015
ENUM
4016
  BFD_RELOC_390_PLT32DBL
4017
ENUMDOC
4018
  32 bit PC rel. PLT shifted by 1.
4019
ENUM
4020
  BFD_RELOC_390_GOTPCDBL
4021
ENUMDOC
4022
  32 bit PC rel. GOT shifted by 1.
4023
ENUM
4024
  BFD_RELOC_390_GOT64
4025
ENUMDOC
4026
  64 bit GOT offset.
4027
ENUM
4028
  BFD_RELOC_390_PLT64
4029
ENUMDOC
4030
  64 bit PC relative PLT address.
4031
ENUM
4032
  BFD_RELOC_390_GOTENT
4033
ENUMDOC
4034
  32 bit rel. offset to GOT entry.
4035
ENUM
4036
  BFD_RELOC_390_GOTOFF64
4037
ENUMDOC
4038
  64 bit offset to GOT.
4039
ENUM
4040
  BFD_RELOC_390_GOTPLT12
4041
ENUMDOC
4042
  12-bit offset to symbol-entry within GOT, with PLT handling.
4043
ENUM
4044
  BFD_RELOC_390_GOTPLT16
4045
ENUMDOC
4046
  16-bit offset to symbol-entry within GOT, with PLT handling.
4047
ENUM
4048
  BFD_RELOC_390_GOTPLT32
4049
ENUMDOC
4050
  32-bit offset to symbol-entry within GOT, with PLT handling.
4051
ENUM
4052
  BFD_RELOC_390_GOTPLT64
4053
ENUMDOC
4054
  64-bit offset to symbol-entry within GOT, with PLT handling.
4055
ENUM
4056
  BFD_RELOC_390_GOTPLTENT
4057
ENUMDOC
4058
  32-bit rel. offset to symbol-entry within GOT, with PLT handling.
4059
ENUM
4060
  BFD_RELOC_390_PLTOFF16
4061
ENUMDOC
4062
  16-bit rel. offset from the GOT to a PLT entry.
4063
ENUM
4064
  BFD_RELOC_390_PLTOFF32
4065
ENUMDOC
4066
  32-bit rel. offset from the GOT to a PLT entry.
4067
ENUM
4068
  BFD_RELOC_390_PLTOFF64
4069
ENUMDOC
4070
  64-bit rel. offset from the GOT to a PLT entry.
4071
 
4072
ENUM
4073
  BFD_RELOC_390_TLS_LOAD
4074
ENUMX
4075
  BFD_RELOC_390_TLS_GDCALL
4076
ENUMX
4077
  BFD_RELOC_390_TLS_LDCALL
4078
ENUMX
4079
  BFD_RELOC_390_TLS_GD32
4080
ENUMX
4081
  BFD_RELOC_390_TLS_GD64
4082
ENUMX
4083
  BFD_RELOC_390_TLS_GOTIE12
4084
ENUMX
4085
  BFD_RELOC_390_TLS_GOTIE32
4086
ENUMX
4087
  BFD_RELOC_390_TLS_GOTIE64
4088
ENUMX
4089
  BFD_RELOC_390_TLS_LDM32
4090
ENUMX
4091
  BFD_RELOC_390_TLS_LDM64
4092
ENUMX
4093
  BFD_RELOC_390_TLS_IE32
4094
ENUMX
4095
  BFD_RELOC_390_TLS_IE64
4096
ENUMX
4097
  BFD_RELOC_390_TLS_IEENT
4098
ENUMX
4099
  BFD_RELOC_390_TLS_LE32
4100
ENUMX
4101
  BFD_RELOC_390_TLS_LE64
4102
ENUMX
4103
  BFD_RELOC_390_TLS_LDO32
4104
ENUMX
4105
  BFD_RELOC_390_TLS_LDO64
4106
ENUMX
4107
  BFD_RELOC_390_TLS_DTPMOD
4108
ENUMX
4109
  BFD_RELOC_390_TLS_DTPOFF
4110
ENUMX
4111
  BFD_RELOC_390_TLS_TPOFF
4112
ENUMDOC
4113
  s390 tls relocations.
4114
 
4115
ENUM
4116
  BFD_RELOC_390_20
4117
ENUMX
4118
  BFD_RELOC_390_GOT20
4119
ENUMX
4120
  BFD_RELOC_390_GOTPLT20
4121
ENUMX
4122
  BFD_RELOC_390_TLS_GOTIE20
4123
ENUMDOC
4124
  Long displacement extension.
4125
 
4126
ENUM
4127
  BFD_RELOC_SCORE_DUMMY1
4128
ENUMDOC
4129
  Score relocations
4130
ENUM
4131
  BFD_RELOC_SCORE_GPREL15
4132
ENUMDOC
4133
  Low 16 bit for load/store
4134
ENUM
4135
  BFD_RELOC_SCORE_DUMMY2
4136
ENUMX
4137
  BFD_RELOC_SCORE_JMP
4138
ENUMDOC
4139
  This is a 24-bit reloc with the right 1 bit assumed to be 0
4140
ENUM
4141
  BFD_RELOC_SCORE_BRANCH
4142
ENUMDOC
4143
  This is a 19-bit reloc with the right 1 bit assumed to be 0
4144
ENUM
4145
  BFD_RELOC_SCORE16_JMP
4146
ENUMDOC
4147
  This is a 11-bit reloc with the right 1 bit assumed to be 0
4148
ENUM
4149
  BFD_RELOC_SCORE16_BRANCH
4150
ENUMDOC
4151
  This is a 8-bit reloc with the right 1 bit assumed to be 0
4152
ENUM
4153
  BFD_RELOC_SCORE_GOT15
4154
ENUMX
4155
  BFD_RELOC_SCORE_GOT_LO16
4156
ENUMX
4157
  BFD_RELOC_SCORE_CALL15
4158
ENUMX
4159
  BFD_RELOC_SCORE_DUMMY_HI16
4160
ENUMDOC
4161
  Undocumented Score relocs
4162
 
4163
ENUM
4164
  BFD_RELOC_IP2K_FR9
4165
ENUMDOC
4166
  Scenix IP2K - 9-bit register number / data address
4167
ENUM
4168
  BFD_RELOC_IP2K_BANK
4169
ENUMDOC
4170
  Scenix IP2K - 4-bit register/data bank number
4171
ENUM
4172
  BFD_RELOC_IP2K_ADDR16CJP
4173
ENUMDOC
4174
  Scenix IP2K - low 13 bits of instruction word address
4175
ENUM
4176
  BFD_RELOC_IP2K_PAGE3
4177
ENUMDOC
4178
  Scenix IP2K - high 3 bits of instruction word address
4179
ENUM
4180
  BFD_RELOC_IP2K_LO8DATA
4181
ENUMX
4182
  BFD_RELOC_IP2K_HI8DATA
4183
ENUMX
4184
  BFD_RELOC_IP2K_EX8DATA
4185
ENUMDOC
4186
  Scenix IP2K - ext/low/high 8 bits of data address
4187
ENUM
4188
  BFD_RELOC_IP2K_LO8INSN
4189
ENUMX
4190
  BFD_RELOC_IP2K_HI8INSN
4191
ENUMDOC
4192
  Scenix IP2K - low/high 8 bits of instruction word address
4193
ENUM
4194
  BFD_RELOC_IP2K_PC_SKIP
4195
ENUMDOC
4196
  Scenix IP2K - even/odd PC modifier to modify snb pcl.0
4197
ENUM
4198
  BFD_RELOC_IP2K_TEXT
4199
ENUMDOC
4200
  Scenix IP2K - 16 bit word address in text section.
4201
ENUM
4202
  BFD_RELOC_IP2K_FR_OFFSET
4203
ENUMDOC
4204
  Scenix IP2K - 7-bit sp or dp offset
4205
ENUM
4206
  BFD_RELOC_VPE4KMATH_DATA
4207
ENUMX
4208
  BFD_RELOC_VPE4KMATH_INSN
4209
ENUMDOC
4210
  Scenix VPE4K coprocessor - data/insn-space addressing
4211
 
4212
ENUM
4213
  BFD_RELOC_VTABLE_INHERIT
4214
ENUMX
4215
  BFD_RELOC_VTABLE_ENTRY
4216
ENUMDOC
4217
  These two relocations are used by the linker to determine which of
4218
  the entries in a C++ virtual function table are actually used.  When
4219
  the --gc-sections option is given, the linker will zero out the entries
4220
  that are not used, so that the code for those functions need not be
4221
  included in the output.
4222
 
4223
  VTABLE_INHERIT is a zero-space relocation used to describe to the
4224
  linker the inheritance tree of a C++ virtual function table.  The
4225
  relocation's symbol should be the parent class' vtable, and the
4226
  relocation should be located at the child vtable.
4227
 
4228
  VTABLE_ENTRY is a zero-space relocation that describes the use of a
4229
  virtual function table entry.  The reloc's symbol should refer to the
4230
  table of the class mentioned in the code.  Off of that base, an offset
4231
  describes the entry that is being used.  For Rela hosts, this offset
4232
  is stored in the reloc's addend.  For Rel hosts, we are forced to put
4233
  this offset in the reloc's section offset.
4234
 
4235
ENUM
4236
  BFD_RELOC_IA64_IMM14
4237
ENUMX
4238
  BFD_RELOC_IA64_IMM22
4239
ENUMX
4240
  BFD_RELOC_IA64_IMM64
4241
ENUMX
4242
  BFD_RELOC_IA64_DIR32MSB
4243
ENUMX
4244
  BFD_RELOC_IA64_DIR32LSB
4245
ENUMX
4246
  BFD_RELOC_IA64_DIR64MSB
4247
ENUMX
4248
  BFD_RELOC_IA64_DIR64LSB
4249
ENUMX
4250
  BFD_RELOC_IA64_GPREL22
4251
ENUMX
4252
  BFD_RELOC_IA64_GPREL64I
4253
ENUMX
4254
  BFD_RELOC_IA64_GPREL32MSB
4255
ENUMX
4256
  BFD_RELOC_IA64_GPREL32LSB
4257
ENUMX
4258
  BFD_RELOC_IA64_GPREL64MSB
4259
ENUMX
4260
  BFD_RELOC_IA64_GPREL64LSB
4261
ENUMX
4262
  BFD_RELOC_IA64_LTOFF22
4263
ENUMX
4264
  BFD_RELOC_IA64_LTOFF64I
4265
ENUMX
4266
  BFD_RELOC_IA64_PLTOFF22
4267
ENUMX
4268
  BFD_RELOC_IA64_PLTOFF64I
4269
ENUMX
4270
  BFD_RELOC_IA64_PLTOFF64MSB
4271
ENUMX
4272
  BFD_RELOC_IA64_PLTOFF64LSB
4273
ENUMX
4274
  BFD_RELOC_IA64_FPTR64I
4275
ENUMX
4276
  BFD_RELOC_IA64_FPTR32MSB
4277
ENUMX
4278
  BFD_RELOC_IA64_FPTR32LSB
4279
ENUMX
4280
  BFD_RELOC_IA64_FPTR64MSB
4281
ENUMX
4282
  BFD_RELOC_IA64_FPTR64LSB
4283
ENUMX
4284
  BFD_RELOC_IA64_PCREL21B
4285
ENUMX
4286
  BFD_RELOC_IA64_PCREL21BI
4287
ENUMX
4288
  BFD_RELOC_IA64_PCREL21M
4289
ENUMX
4290
  BFD_RELOC_IA64_PCREL21F
4291
ENUMX
4292
  BFD_RELOC_IA64_PCREL22
4293
ENUMX
4294
  BFD_RELOC_IA64_PCREL60B
4295
ENUMX
4296
  BFD_RELOC_IA64_PCREL64I
4297
ENUMX
4298
  BFD_RELOC_IA64_PCREL32MSB
4299
ENUMX
4300
  BFD_RELOC_IA64_PCREL32LSB
4301
ENUMX
4302
  BFD_RELOC_IA64_PCREL64MSB
4303
ENUMX
4304
  BFD_RELOC_IA64_PCREL64LSB
4305
ENUMX
4306
  BFD_RELOC_IA64_LTOFF_FPTR22
4307
ENUMX
4308
  BFD_RELOC_IA64_LTOFF_FPTR64I
4309
ENUMX
4310
  BFD_RELOC_IA64_LTOFF_FPTR32MSB
4311
ENUMX
4312
  BFD_RELOC_IA64_LTOFF_FPTR32LSB
4313
ENUMX
4314
  BFD_RELOC_IA64_LTOFF_FPTR64MSB
4315
ENUMX
4316
  BFD_RELOC_IA64_LTOFF_FPTR64LSB
4317
ENUMX
4318
  BFD_RELOC_IA64_SEGREL32MSB
4319
ENUMX
4320
  BFD_RELOC_IA64_SEGREL32LSB
4321
ENUMX
4322
  BFD_RELOC_IA64_SEGREL64MSB
4323
ENUMX
4324
  BFD_RELOC_IA64_SEGREL64LSB
4325
ENUMX
4326
  BFD_RELOC_IA64_SECREL32MSB
4327
ENUMX
4328
  BFD_RELOC_IA64_SECREL32LSB
4329
ENUMX
4330
  BFD_RELOC_IA64_SECREL64MSB
4331
ENUMX
4332
  BFD_RELOC_IA64_SECREL64LSB
4333
ENUMX
4334
  BFD_RELOC_IA64_REL32MSB
4335
ENUMX
4336
  BFD_RELOC_IA64_REL32LSB
4337
ENUMX
4338
  BFD_RELOC_IA64_REL64MSB
4339
ENUMX
4340
  BFD_RELOC_IA64_REL64LSB
4341
ENUMX
4342
  BFD_RELOC_IA64_LTV32MSB
4343
ENUMX
4344
  BFD_RELOC_IA64_LTV32LSB
4345
ENUMX
4346
  BFD_RELOC_IA64_LTV64MSB
4347
ENUMX
4348
  BFD_RELOC_IA64_LTV64LSB
4349
ENUMX
4350
  BFD_RELOC_IA64_IPLTMSB
4351
ENUMX
4352
  BFD_RELOC_IA64_IPLTLSB
4353
ENUMX
4354
  BFD_RELOC_IA64_COPY
4355
ENUMX
4356
  BFD_RELOC_IA64_LTOFF22X
4357
ENUMX
4358
  BFD_RELOC_IA64_LDXMOV
4359
ENUMX
4360
  BFD_RELOC_IA64_TPREL14
4361
ENUMX
4362
  BFD_RELOC_IA64_TPREL22
4363
ENUMX
4364
  BFD_RELOC_IA64_TPREL64I
4365
ENUMX
4366
  BFD_RELOC_IA64_TPREL64MSB
4367
ENUMX
4368
  BFD_RELOC_IA64_TPREL64LSB
4369
ENUMX
4370
  BFD_RELOC_IA64_LTOFF_TPREL22
4371
ENUMX
4372
  BFD_RELOC_IA64_DTPMOD64MSB
4373
ENUMX
4374
  BFD_RELOC_IA64_DTPMOD64LSB
4375
ENUMX
4376
  BFD_RELOC_IA64_LTOFF_DTPMOD22
4377
ENUMX
4378
  BFD_RELOC_IA64_DTPREL14
4379
ENUMX
4380
  BFD_RELOC_IA64_DTPREL22
4381
ENUMX
4382
  BFD_RELOC_IA64_DTPREL64I
4383
ENUMX
4384
  BFD_RELOC_IA64_DTPREL32MSB
4385
ENUMX
4386
  BFD_RELOC_IA64_DTPREL32LSB
4387
ENUMX
4388
  BFD_RELOC_IA64_DTPREL64MSB
4389
ENUMX
4390
  BFD_RELOC_IA64_DTPREL64LSB
4391
ENUMX
4392
  BFD_RELOC_IA64_LTOFF_DTPREL22
4393
ENUMDOC
4394
  Intel IA64 Relocations.
4395
 
4396
ENUM
4397
  BFD_RELOC_M68HC11_HI8
4398
ENUMDOC
4399
  Motorola 68HC11 reloc.
4400
  This is the 8 bit high part of an absolute address.
4401
ENUM
4402
  BFD_RELOC_M68HC11_LO8
4403
ENUMDOC
4404
  Motorola 68HC11 reloc.
4405
  This is the 8 bit low part of an absolute address.
4406
ENUM
4407
  BFD_RELOC_M68HC11_3B
4408
ENUMDOC
4409
  Motorola 68HC11 reloc.
4410
  This is the 3 bit of a value.
4411
ENUM
4412
  BFD_RELOC_M68HC11_RL_JUMP
4413
ENUMDOC
4414
  Motorola 68HC11 reloc.
4415
  This reloc marks the beginning of a jump/call instruction.
4416
  It is used for linker relaxation to correctly identify beginning
4417
  of instruction and change some branches to use PC-relative
4418
  addressing mode.
4419
ENUM
4420
  BFD_RELOC_M68HC11_RL_GROUP
4421
ENUMDOC
4422
  Motorola 68HC11 reloc.
4423
  This reloc marks a group of several instructions that gcc generates
4424
  and for which the linker relaxation pass can modify and/or remove
4425
  some of them.
4426
ENUM
4427
  BFD_RELOC_M68HC11_LO16
4428
ENUMDOC
4429
  Motorola 68HC11 reloc.
4430
  This is the 16-bit lower part of an address.  It is used for 'call'
4431
  instruction to specify the symbol address without any special
4432
  transformation (due to memory bank window).
4433
ENUM
4434
  BFD_RELOC_M68HC11_PAGE
4435
ENUMDOC
4436
  Motorola 68HC11 reloc.
4437
  This is a 8-bit reloc that specifies the page number of an address.
4438
  It is used by 'call' instruction to specify the page number of
4439
  the symbol.
4440
ENUM
4441
  BFD_RELOC_M68HC11_24
4442
ENUMDOC
4443
  Motorola 68HC11 reloc.
4444
  This is a 24-bit reloc that represents the address with a 16-bit
4445
  value and a 8-bit page number.  The symbol address is transformed
4446
  to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
4447
ENUM
4448
  BFD_RELOC_M68HC12_5B
4449
ENUMDOC
4450
  Motorola 68HC12 reloc.
4451
  This is the 5 bits of a value.
4452
 
4453
ENUM
4454
  BFD_RELOC_16C_NUM08
4455
ENUMX
4456
  BFD_RELOC_16C_NUM08_C
4457
ENUMX
4458
  BFD_RELOC_16C_NUM16
4459
ENUMX
4460
  BFD_RELOC_16C_NUM16_C
4461
ENUMX
4462
  BFD_RELOC_16C_NUM32
4463
ENUMX
4464
  BFD_RELOC_16C_NUM32_C
4465
ENUMX
4466
  BFD_RELOC_16C_DISP04
4467
ENUMX
4468
  BFD_RELOC_16C_DISP04_C
4469
ENUMX
4470
  BFD_RELOC_16C_DISP08
4471
ENUMX
4472
  BFD_RELOC_16C_DISP08_C
4473
ENUMX
4474
  BFD_RELOC_16C_DISP16
4475
ENUMX
4476
  BFD_RELOC_16C_DISP16_C
4477
ENUMX
4478
  BFD_RELOC_16C_DISP24
4479
ENUMX
4480
  BFD_RELOC_16C_DISP24_C
4481
ENUMX
4482
  BFD_RELOC_16C_DISP24a
4483
ENUMX
4484
  BFD_RELOC_16C_DISP24a_C
4485
ENUMX
4486
  BFD_RELOC_16C_REG04
4487
ENUMX
4488
  BFD_RELOC_16C_REG04_C
4489
ENUMX
4490
  BFD_RELOC_16C_REG04a
4491
ENUMX
4492
  BFD_RELOC_16C_REG04a_C
4493
ENUMX
4494
  BFD_RELOC_16C_REG14
4495
ENUMX
4496
  BFD_RELOC_16C_REG14_C
4497
ENUMX
4498
  BFD_RELOC_16C_REG16
4499
ENUMX
4500
  BFD_RELOC_16C_REG16_C
4501
ENUMX
4502
  BFD_RELOC_16C_REG20
4503
ENUMX
4504
  BFD_RELOC_16C_REG20_C
4505
ENUMX
4506
  BFD_RELOC_16C_ABS20
4507
ENUMX
4508
  BFD_RELOC_16C_ABS20_C
4509
ENUMX
4510
  BFD_RELOC_16C_ABS24
4511
ENUMX
4512
  BFD_RELOC_16C_ABS24_C
4513
ENUMX
4514
  BFD_RELOC_16C_IMM04
4515
ENUMX
4516
  BFD_RELOC_16C_IMM04_C
4517
ENUMX
4518
  BFD_RELOC_16C_IMM16
4519
ENUMX
4520
  BFD_RELOC_16C_IMM16_C
4521
ENUMX
4522
  BFD_RELOC_16C_IMM20
4523
ENUMX
4524
  BFD_RELOC_16C_IMM20_C
4525
ENUMX
4526
  BFD_RELOC_16C_IMM24
4527
ENUMX
4528
  BFD_RELOC_16C_IMM24_C
4529
ENUMX
4530
  BFD_RELOC_16C_IMM32
4531
ENUMX
4532
  BFD_RELOC_16C_IMM32_C
4533
ENUMDOC
4534
  NS CR16C Relocations.
4535
 
4536
ENUM
4537
  BFD_RELOC_CR16_NUM8
4538
ENUMX
4539
  BFD_RELOC_CR16_NUM16
4540
ENUMX
4541
  BFD_RELOC_CR16_NUM32
4542
ENUMX
4543
  BFD_RELOC_CR16_NUM32a
4544
ENUMX
4545
  BFD_RELOC_CR16_REGREL0
4546
ENUMX
4547
  BFD_RELOC_CR16_REGREL4
4548
ENUMX
4549
  BFD_RELOC_CR16_REGREL4a
4550
ENUMX
4551
  BFD_RELOC_CR16_REGREL14
4552
ENUMX
4553
  BFD_RELOC_CR16_REGREL14a
4554
ENUMX
4555
  BFD_RELOC_CR16_REGREL16
4556
ENUMX
4557
  BFD_RELOC_CR16_REGREL20
4558
ENUMX
4559
  BFD_RELOC_CR16_REGREL20a
4560
ENUMX
4561
  BFD_RELOC_CR16_ABS20
4562
ENUMX
4563
  BFD_RELOC_CR16_ABS24
4564
ENUMX
4565
  BFD_RELOC_CR16_IMM4
4566
ENUMX
4567
  BFD_RELOC_CR16_IMM8
4568
ENUMX
4569
  BFD_RELOC_CR16_IMM16
4570
ENUMX
4571
  BFD_RELOC_CR16_IMM20
4572
ENUMX
4573
  BFD_RELOC_CR16_IMM24
4574
ENUMX
4575
  BFD_RELOC_CR16_IMM32
4576
ENUMX
4577
  BFD_RELOC_CR16_IMM32a
4578
ENUMX
4579
  BFD_RELOC_CR16_DISP4
4580
ENUMX
4581
  BFD_RELOC_CR16_DISP8
4582
ENUMX
4583
  BFD_RELOC_CR16_DISP16
4584
ENUMX
4585
  BFD_RELOC_CR16_DISP20
4586
ENUMX
4587
  BFD_RELOC_CR16_DISP24
4588
ENUMX
4589
  BFD_RELOC_CR16_DISP24a
4590
ENUMX
4591
  BFD_RELOC_CR16_SWITCH8
4592
ENUMX
4593
  BFD_RELOC_CR16_SWITCH16
4594
ENUMX
4595
  BFD_RELOC_CR16_SWITCH32
4596
ENUMDOC
4597
  NS CR16 Relocations.
4598
 
4599
ENUM
4600
  BFD_RELOC_CRX_REL4
4601
ENUMX
4602
  BFD_RELOC_CRX_REL8
4603
ENUMX
4604
  BFD_RELOC_CRX_REL8_CMP
4605
ENUMX
4606
  BFD_RELOC_CRX_REL16
4607
ENUMX
4608
  BFD_RELOC_CRX_REL24
4609
ENUMX
4610
  BFD_RELOC_CRX_REL32
4611
ENUMX
4612
  BFD_RELOC_CRX_REGREL12
4613
ENUMX
4614
  BFD_RELOC_CRX_REGREL22
4615
ENUMX
4616
  BFD_RELOC_CRX_REGREL28
4617
ENUMX
4618
  BFD_RELOC_CRX_REGREL32
4619
ENUMX
4620
  BFD_RELOC_CRX_ABS16
4621
ENUMX
4622
  BFD_RELOC_CRX_ABS32
4623
ENUMX
4624
  BFD_RELOC_CRX_NUM8
4625
ENUMX
4626
  BFD_RELOC_CRX_NUM16
4627
ENUMX
4628
  BFD_RELOC_CRX_NUM32
4629
ENUMX
4630
  BFD_RELOC_CRX_IMM16
4631
ENUMX
4632
  BFD_RELOC_CRX_IMM32
4633
ENUMX
4634
  BFD_RELOC_CRX_SWITCH8
4635
ENUMX
4636
  BFD_RELOC_CRX_SWITCH16
4637
ENUMX
4638
  BFD_RELOC_CRX_SWITCH32
4639
ENUMDOC
4640
  NS CRX Relocations.
4641
 
4642
ENUM
4643
  BFD_RELOC_CRIS_BDISP8
4644
ENUMX
4645
  BFD_RELOC_CRIS_UNSIGNED_5
4646
ENUMX
4647
  BFD_RELOC_CRIS_SIGNED_6
4648
ENUMX
4649
  BFD_RELOC_CRIS_UNSIGNED_6
4650
ENUMX
4651
  BFD_RELOC_CRIS_SIGNED_8
4652
ENUMX
4653
  BFD_RELOC_CRIS_UNSIGNED_8
4654
ENUMX
4655
  BFD_RELOC_CRIS_SIGNED_16
4656
ENUMX
4657
  BFD_RELOC_CRIS_UNSIGNED_16
4658
ENUMX
4659
  BFD_RELOC_CRIS_LAPCQ_OFFSET
4660
ENUMX
4661
  BFD_RELOC_CRIS_UNSIGNED_4
4662
ENUMDOC
4663
  These relocs are only used within the CRIS assembler.  They are not
4664
  (at present) written to any object files.
4665
ENUM
4666
  BFD_RELOC_CRIS_COPY
4667
ENUMX
4668
  BFD_RELOC_CRIS_GLOB_DAT
4669
ENUMX
4670
  BFD_RELOC_CRIS_JUMP_SLOT
4671
ENUMX
4672
  BFD_RELOC_CRIS_RELATIVE
4673
ENUMDOC
4674
  Relocs used in ELF shared libraries for CRIS.
4675
ENUM
4676
  BFD_RELOC_CRIS_32_GOT
4677
ENUMDOC
4678
  32-bit offset to symbol-entry within GOT.
4679
ENUM
4680
  BFD_RELOC_CRIS_16_GOT
4681
ENUMDOC
4682
  16-bit offset to symbol-entry within GOT.
4683
ENUM
4684
  BFD_RELOC_CRIS_32_GOTPLT
4685
ENUMDOC
4686
  32-bit offset to symbol-entry within GOT, with PLT handling.
4687
ENUM
4688
  BFD_RELOC_CRIS_16_GOTPLT
4689
ENUMDOC
4690
  16-bit offset to symbol-entry within GOT, with PLT handling.
4691
ENUM
4692
  BFD_RELOC_CRIS_32_GOTREL
4693
ENUMDOC
4694
  32-bit offset to symbol, relative to GOT.
4695
ENUM
4696
  BFD_RELOC_CRIS_32_PLT_GOTREL
4697
ENUMDOC
4698
  32-bit offset to symbol with PLT entry, relative to GOT.
4699
ENUM
4700
  BFD_RELOC_CRIS_32_PLT_PCREL
4701
ENUMDOC
4702
  32-bit offset to symbol with PLT entry, relative to this relocation.
4703
 
4704
ENUM
4705
  BFD_RELOC_860_COPY
4706
ENUMX
4707
  BFD_RELOC_860_GLOB_DAT
4708
ENUMX
4709
  BFD_RELOC_860_JUMP_SLOT
4710
ENUMX
4711
  BFD_RELOC_860_RELATIVE
4712
ENUMX
4713
  BFD_RELOC_860_PC26
4714
ENUMX
4715
  BFD_RELOC_860_PLT26
4716
ENUMX
4717
  BFD_RELOC_860_PC16
4718
ENUMX
4719
  BFD_RELOC_860_LOW0
4720
ENUMX
4721
  BFD_RELOC_860_SPLIT0
4722
ENUMX
4723
  BFD_RELOC_860_LOW1
4724
ENUMX
4725
  BFD_RELOC_860_SPLIT1
4726
ENUMX
4727
  BFD_RELOC_860_LOW2
4728
ENUMX
4729
  BFD_RELOC_860_SPLIT2
4730
ENUMX
4731
  BFD_RELOC_860_LOW3
4732
ENUMX
4733
  BFD_RELOC_860_LOGOT0
4734
ENUMX
4735
  BFD_RELOC_860_SPGOT0
4736
ENUMX
4737
  BFD_RELOC_860_LOGOT1
4738
ENUMX
4739
  BFD_RELOC_860_SPGOT1
4740
ENUMX
4741
  BFD_RELOC_860_LOGOTOFF0
4742
ENUMX
4743
  BFD_RELOC_860_SPGOTOFF0
4744
ENUMX
4745
  BFD_RELOC_860_LOGOTOFF1
4746
ENUMX
4747
  BFD_RELOC_860_SPGOTOFF1
4748
ENUMX
4749
  BFD_RELOC_860_LOGOTOFF2
4750
ENUMX
4751
  BFD_RELOC_860_LOGOTOFF3
4752
ENUMX
4753
  BFD_RELOC_860_LOPC
4754
ENUMX
4755
  BFD_RELOC_860_HIGHADJ
4756
ENUMX
4757
  BFD_RELOC_860_HAGOT
4758
ENUMX
4759
  BFD_RELOC_860_HAGOTOFF
4760
ENUMX
4761
  BFD_RELOC_860_HAPC
4762
ENUMX
4763
  BFD_RELOC_860_HIGH
4764
ENUMX
4765
  BFD_RELOC_860_HIGOT
4766
ENUMX
4767
  BFD_RELOC_860_HIGOTOFF
4768
ENUMDOC
4769
  Intel i860 Relocations.
4770
 
4771
ENUM
4772
  BFD_RELOC_OPENRISC_ABS_26
4773
ENUMX
4774
  BFD_RELOC_OPENRISC_REL_26
4775
ENUMDOC
4776
  OpenRISC Relocations.
4777
 
4778
ENUM
4779
  BFD_RELOC_H8_DIR16A8
4780
ENUMX
4781
  BFD_RELOC_H8_DIR16R8
4782
ENUMX
4783
  BFD_RELOC_H8_DIR24A8
4784
ENUMX
4785
  BFD_RELOC_H8_DIR24R8
4786
ENUMX
4787
  BFD_RELOC_H8_DIR32A16
4788
ENUMDOC
4789
  H8 elf Relocations.
4790
 
4791
ENUM
4792
  BFD_RELOC_XSTORMY16_REL_12
4793
ENUMX
4794
  BFD_RELOC_XSTORMY16_12
4795
ENUMX
4796
  BFD_RELOC_XSTORMY16_24
4797
ENUMX
4798
  BFD_RELOC_XSTORMY16_FPTR16
4799
ENUMDOC
4800
  Sony Xstormy16 Relocations.
4801
 
4802
ENUM
4803
  BFD_RELOC_RELC
4804
ENUMDOC
4805
  Self-describing complex relocations.
4806
COMMENT
4807
 
4808
ENUM
4809
  BFD_RELOC_XC16X_PAG
4810
ENUMX
4811
  BFD_RELOC_XC16X_POF
4812
ENUMX
4813
  BFD_RELOC_XC16X_SEG
4814
ENUMX
4815
  BFD_RELOC_XC16X_SOF
4816
ENUMDOC
4817
  Infineon Relocations.
4818
 
4819
ENUM
4820
  BFD_RELOC_VAX_GLOB_DAT
4821
ENUMX
4822
  BFD_RELOC_VAX_JMP_SLOT
4823
ENUMX
4824
  BFD_RELOC_VAX_RELATIVE
4825
ENUMDOC
4826
  Relocations used by VAX ELF.
4827
 
4828
ENUM
4829
  BFD_RELOC_MT_PC16
4830
ENUMDOC
4831
  Morpho MT - 16 bit immediate relocation.
4832
ENUM
4833
  BFD_RELOC_MT_HI16
4834
ENUMDOC
4835
  Morpho MT - Hi 16 bits of an address.
4836
ENUM
4837
  BFD_RELOC_MT_LO16
4838
ENUMDOC
4839
  Morpho MT - Low 16 bits of an address.
4840
ENUM
4841
  BFD_RELOC_MT_GNU_VTINHERIT
4842
ENUMDOC
4843
  Morpho MT - Used to tell the linker which vtable entries are used.
4844
ENUM
4845
  BFD_RELOC_MT_GNU_VTENTRY
4846
ENUMDOC
4847
  Morpho MT - Used to tell the linker which vtable entries are used.
4848
ENUM
4849
  BFD_RELOC_MT_PCINSN8
4850
ENUMDOC
4851
  Morpho MT - 8 bit immediate relocation.
4852
 
4853
ENUM
4854
  BFD_RELOC_MSP430_10_PCREL
4855
ENUMX
4856
  BFD_RELOC_MSP430_16_PCREL
4857
ENUMX
4858
  BFD_RELOC_MSP430_16
4859
ENUMX
4860
  BFD_RELOC_MSP430_16_PCREL_BYTE
4861
ENUMX
4862
  BFD_RELOC_MSP430_16_BYTE
4863
ENUMX
4864
  BFD_RELOC_MSP430_2X_PCREL
4865
ENUMX
4866
  BFD_RELOC_MSP430_RL_PCREL
4867
ENUMDOC
4868
  msp430 specific relocation codes
4869
 
4870
ENUM
4871
  BFD_RELOC_IQ2000_OFFSET_16
4872
ENUMX
4873
  BFD_RELOC_IQ2000_OFFSET_21
4874
ENUMX
4875
  BFD_RELOC_IQ2000_UHI16
4876
ENUMDOC
4877
  IQ2000 Relocations.
4878
 
4879
ENUM
4880
  BFD_RELOC_XTENSA_RTLD
4881
ENUMDOC
4882
  Special Xtensa relocation used only by PLT entries in ELF shared
4883
  objects to indicate that the runtime linker should set the value
4884
  to one of its own internal functions or data structures.
4885
ENUM
4886
  BFD_RELOC_XTENSA_GLOB_DAT
4887
ENUMX
4888
  BFD_RELOC_XTENSA_JMP_SLOT
4889
ENUMX
4890
  BFD_RELOC_XTENSA_RELATIVE
4891
ENUMDOC
4892
  Xtensa relocations for ELF shared objects.
4893
ENUM
4894
  BFD_RELOC_XTENSA_PLT
4895
ENUMDOC
4896
  Xtensa relocation used in ELF object files for symbols that may require
4897
  PLT entries.  Otherwise, this is just a generic 32-bit relocation.
4898
ENUM
4899
  BFD_RELOC_XTENSA_DIFF8
4900
ENUMX
4901
  BFD_RELOC_XTENSA_DIFF16
4902
ENUMX
4903
  BFD_RELOC_XTENSA_DIFF32
4904
ENUMDOC
4905
  Xtensa relocations to mark the difference of two local symbols.
4906
  These are only needed to support linker relaxation and can be ignored
4907
  when not relaxing.  The field is set to the value of the difference
4908
  assuming no relaxation.  The relocation encodes the position of the
4909
  first symbol so the linker can determine whether to adjust the field
4910
  value.
4911
ENUM
4912
  BFD_RELOC_XTENSA_SLOT0_OP
4913
ENUMX
4914
  BFD_RELOC_XTENSA_SLOT1_OP
4915
ENUMX
4916
  BFD_RELOC_XTENSA_SLOT2_OP
4917
ENUMX
4918
  BFD_RELOC_XTENSA_SLOT3_OP
4919
ENUMX
4920
  BFD_RELOC_XTENSA_SLOT4_OP
4921
ENUMX
4922
  BFD_RELOC_XTENSA_SLOT5_OP
4923
ENUMX
4924
  BFD_RELOC_XTENSA_SLOT6_OP
4925
ENUMX
4926
  BFD_RELOC_XTENSA_SLOT7_OP
4927
ENUMX
4928
  BFD_RELOC_XTENSA_SLOT8_OP
4929
ENUMX
4930
  BFD_RELOC_XTENSA_SLOT9_OP
4931
ENUMX
4932
  BFD_RELOC_XTENSA_SLOT10_OP
4933
ENUMX
4934
  BFD_RELOC_XTENSA_SLOT11_OP
4935
ENUMX
4936
  BFD_RELOC_XTENSA_SLOT12_OP
4937
ENUMX
4938
  BFD_RELOC_XTENSA_SLOT13_OP
4939
ENUMX
4940
  BFD_RELOC_XTENSA_SLOT14_OP
4941
ENUMDOC
4942
  Generic Xtensa relocations for instruction operands.  Only the slot
4943
  number is encoded in the relocation.  The relocation applies to the
4944
  last PC-relative immediate operand, or if there are no PC-relative
4945
  immediates, to the last immediate operand.
4946
ENUM
4947
  BFD_RELOC_XTENSA_SLOT0_ALT
4948
ENUMX
4949
  BFD_RELOC_XTENSA_SLOT1_ALT
4950
ENUMX
4951
  BFD_RELOC_XTENSA_SLOT2_ALT
4952
ENUMX
4953
  BFD_RELOC_XTENSA_SLOT3_ALT
4954
ENUMX
4955
  BFD_RELOC_XTENSA_SLOT4_ALT
4956
ENUMX
4957
  BFD_RELOC_XTENSA_SLOT5_ALT
4958
ENUMX
4959
  BFD_RELOC_XTENSA_SLOT6_ALT
4960
ENUMX
4961
  BFD_RELOC_XTENSA_SLOT7_ALT
4962
ENUMX
4963
  BFD_RELOC_XTENSA_SLOT8_ALT
4964
ENUMX
4965
  BFD_RELOC_XTENSA_SLOT9_ALT
4966
ENUMX
4967
  BFD_RELOC_XTENSA_SLOT10_ALT
4968
ENUMX
4969
  BFD_RELOC_XTENSA_SLOT11_ALT
4970
ENUMX
4971
  BFD_RELOC_XTENSA_SLOT12_ALT
4972
ENUMX
4973
  BFD_RELOC_XTENSA_SLOT13_ALT
4974
ENUMX
4975
  BFD_RELOC_XTENSA_SLOT14_ALT
4976
ENUMDOC
4977
  Alternate Xtensa relocations.  Only the slot is encoded in the
4978
  relocation.  The meaning of these relocations is opcode-specific.
4979
ENUM
4980
  BFD_RELOC_XTENSA_OP0
4981
ENUMX
4982
  BFD_RELOC_XTENSA_OP1
4983
ENUMX
4984
  BFD_RELOC_XTENSA_OP2
4985
ENUMDOC
4986
  Xtensa relocations for backward compatibility.  These have all been
4987
  replaced by BFD_RELOC_XTENSA_SLOT0_OP.
4988
ENUM
4989
  BFD_RELOC_XTENSA_ASM_EXPAND
4990
ENUMDOC
4991
  Xtensa relocation to mark that the assembler expanded the
4992
  instructions from an original target.  The expansion size is
4993
  encoded in the reloc size.
4994
ENUM
4995
  BFD_RELOC_XTENSA_ASM_SIMPLIFY
4996
ENUMDOC
4997
  Xtensa relocation to mark that the linker should simplify
4998
  assembler-expanded instructions.  This is commonly used
4999
  internally by the linker after analysis of a
5000
  BFD_RELOC_XTENSA_ASM_EXPAND.
5001
 
5002
ENUM
5003
  BFD_RELOC_Z80_DISP8
5004
ENUMDOC
5005
  8 bit signed offset in (ix+d) or (iy+d).
5006
 
5007
ENUM
5008
  BFD_RELOC_Z8K_DISP7
5009
ENUMDOC
5010
  DJNZ offset.
5011
ENUM
5012
  BFD_RELOC_Z8K_CALLR
5013
ENUMDOC
5014
  CALR offset.
5015
ENUM
5016
  BFD_RELOC_Z8K_IMM4L
5017
ENUMDOC
5018
  4 bit value.
5019
 
5020
ENDSENUM
5021
  BFD_RELOC_UNUSED
5022
CODE_FRAGMENT
5023
.
5024
.typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
5025
*/
5026
 
5027
/*
5028
FUNCTION
5029
        bfd_reloc_type_lookup
5030
        bfd_reloc_name_lookup
5031
 
5032
SYNOPSIS
5033
        reloc_howto_type *bfd_reloc_type_lookup
5034
          (bfd *abfd, bfd_reloc_code_real_type code);
5035
        reloc_howto_type *bfd_reloc_name_lookup
5036
          (bfd *abfd, const char *reloc_name);
5037
 
5038
DESCRIPTION
5039
        Return a pointer to a howto structure which, when
5040
        invoked, will perform the relocation @var{code} on data from the
5041
        architecture noted.
5042
 
5043
*/
5044
 
5045
reloc_howto_type *
5046
bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
5047
{
5048
  return BFD_SEND (abfd, reloc_type_lookup, (abfd, code));
5049
}
5050
 
5051
reloc_howto_type *
5052
bfd_reloc_name_lookup (bfd *abfd, const char *reloc_name)
5053
{
5054
  return BFD_SEND (abfd, reloc_name_lookup, (abfd, reloc_name));
5055
}
5056
 
5057
static reloc_howto_type bfd_howto_32 =
5058
HOWTO (0, 00, 2, 32, FALSE, 0, complain_overflow_dont, 0, "VRT32", FALSE, 0xffffffff, 0xffffffff, TRUE);
5059
 
5060
/*
5061
INTERNAL_FUNCTION
5062
        bfd_default_reloc_type_lookup
5063
 
5064
SYNOPSIS
5065
        reloc_howto_type *bfd_default_reloc_type_lookup
5066
          (bfd *abfd, bfd_reloc_code_real_type  code);
5067
 
5068
DESCRIPTION
5069
        Provides a default relocation lookup routine for any architecture.
5070
 
5071
*/
5072
 
5073
reloc_howto_type *
5074
bfd_default_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
5075
{
5076
  switch (code)
5077
    {
5078
    case BFD_RELOC_CTOR:
5079
      /* The type of reloc used in a ctor, which will be as wide as the
5080
         address - so either a 64, 32, or 16 bitter.  */
5081
      switch (bfd_get_arch_info (abfd)->bits_per_address)
5082
        {
5083
        case 64:
5084
          BFD_FAIL ();
5085
        case 32:
5086
          return &bfd_howto_32;
5087
        case 16:
5088
          BFD_FAIL ();
5089
        default:
5090
          BFD_FAIL ();
5091
        }
5092
    default:
5093
      BFD_FAIL ();
5094
    }
5095
  return NULL;
5096
}
5097
 
5098
/*
5099
FUNCTION
5100
        bfd_get_reloc_code_name
5101
 
5102
SYNOPSIS
5103
        const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
5104
 
5105
DESCRIPTION
5106
        Provides a printable name for the supplied relocation code.
5107
        Useful mainly for printing error messages.
5108
*/
5109
 
5110
const char *
5111
bfd_get_reloc_code_name (bfd_reloc_code_real_type code)
5112
{
5113
  if (code > BFD_RELOC_UNUSED)
5114
    return 0;
5115
  return bfd_reloc_code_real_names[code];
5116
}
5117
 
5118
/*
5119
INTERNAL_FUNCTION
5120
        bfd_generic_relax_section
5121
 
5122
SYNOPSIS
5123
        bfd_boolean bfd_generic_relax_section
5124
          (bfd *abfd,
5125
           asection *section,
5126
           struct bfd_link_info *,
5127
           bfd_boolean *);
5128
 
5129
DESCRIPTION
5130
        Provides default handling for relaxing for back ends which
5131
        don't do relaxing.
5132
*/
5133
 
5134
bfd_boolean
5135
bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
5136
                           asection *section ATTRIBUTE_UNUSED,
5137
                           struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
5138
                           bfd_boolean *again)
5139
{
5140
  *again = FALSE;
5141
  return TRUE;
5142
}
5143
 
5144
/*
5145
INTERNAL_FUNCTION
5146
        bfd_generic_gc_sections
5147
 
5148
SYNOPSIS
5149
        bfd_boolean bfd_generic_gc_sections
5150
          (bfd *, struct bfd_link_info *);
5151
 
5152
DESCRIPTION
5153
        Provides default handling for relaxing for back ends which
5154
        don't do section gc -- i.e., does nothing.
5155
*/
5156
 
5157
bfd_boolean
5158
bfd_generic_gc_sections (bfd *abfd ATTRIBUTE_UNUSED,
5159
                         struct bfd_link_info *info ATTRIBUTE_UNUSED)
5160
{
5161
  return TRUE;
5162
}
5163
 
5164
/*
5165
INTERNAL_FUNCTION
5166
        bfd_generic_merge_sections
5167
 
5168
SYNOPSIS
5169
        bfd_boolean bfd_generic_merge_sections
5170
          (bfd *, struct bfd_link_info *);
5171
 
5172
DESCRIPTION
5173
        Provides default handling for SEC_MERGE section merging for back ends
5174
        which don't have SEC_MERGE support -- i.e., does nothing.
5175
*/
5176
 
5177
bfd_boolean
5178
bfd_generic_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
5179
                            struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
5180
{
5181
  return TRUE;
5182
}
5183
 
5184
/*
5185
INTERNAL_FUNCTION
5186
        bfd_generic_get_relocated_section_contents
5187
 
5188
SYNOPSIS
5189
        bfd_byte *bfd_generic_get_relocated_section_contents
5190
          (bfd *abfd,
5191
           struct bfd_link_info *link_info,
5192
           struct bfd_link_order *link_order,
5193
           bfd_byte *data,
5194
           bfd_boolean relocatable,
5195
           asymbol **symbols);
5196
 
5197
DESCRIPTION
5198
        Provides default handling of relocation effort for back ends
5199
        which can't be bothered to do it efficiently.
5200
 
5201
*/
5202
 
5203
bfd_byte *
5204
bfd_generic_get_relocated_section_contents (bfd *abfd,
5205
                                            struct bfd_link_info *link_info,
5206
                                            struct bfd_link_order *link_order,
5207
                                            bfd_byte *data,
5208
                                            bfd_boolean relocatable,
5209
                                            asymbol **symbols)
5210
{
5211
  bfd *input_bfd = link_order->u.indirect.section->owner;
5212
  asection *input_section = link_order->u.indirect.section;
5213
  long reloc_size;
5214
  arelent **reloc_vector;
5215
  long reloc_count;
5216
  bfd_size_type sz;
5217
 
5218
  reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
5219
  if (reloc_size < 0)
5220
    return NULL;
5221
 
5222
  /* Read in the section.  */
5223
  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
5224
  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
5225
    return NULL;
5226
 
5227
  if (reloc_size == 0)
5228
    return data;
5229
 
5230
  reloc_vector = bfd_malloc (reloc_size);
5231
  if (reloc_vector == NULL)
5232
    return NULL;
5233
 
5234
  reloc_count = bfd_canonicalize_reloc (input_bfd,
5235
                                        input_section,
5236
                                        reloc_vector,
5237
                                        symbols);
5238
  if (reloc_count < 0)
5239
    goto error_return;
5240
 
5241
  if (reloc_count > 0)
5242
    {
5243
      arelent **parent;
5244
      for (parent = reloc_vector; *parent != NULL; parent++)
5245
        {
5246
          char *error_message = NULL;
5247
          asymbol *symbol;
5248
          bfd_reloc_status_type r;
5249
 
5250
          symbol = *(*parent)->sym_ptr_ptr;
5251
          if (symbol->section && elf_discarded_section (symbol->section))
5252
            {
5253
              bfd_byte *p;
5254
              static reloc_howto_type none_howto
5255
                = HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
5256
                         "unused", FALSE, 0, 0, FALSE);
5257
 
5258
              p = data + (*parent)->address * bfd_octets_per_byte (input_bfd);
5259
              _bfd_clear_contents ((*parent)->howto, input_bfd, p);
5260
              (*parent)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
5261
              (*parent)->addend = 0;
5262
              (*parent)->howto = &none_howto;
5263
              r = bfd_reloc_ok;
5264
            }
5265
          else
5266
            r = bfd_perform_relocation (input_bfd,
5267
                                        *parent,
5268
                                        data,
5269
                                        input_section,
5270
                                        relocatable ? abfd : NULL,
5271
                                        &error_message);
5272
 
5273
          if (relocatable)
5274
            {
5275
              asection *os = input_section->output_section;
5276
 
5277
              /* A partial link, so keep the relocs.  */
5278
              os->orelocation[os->reloc_count] = *parent;
5279
              os->reloc_count++;
5280
            }
5281
 
5282
          if (r != bfd_reloc_ok)
5283
            {
5284
              switch (r)
5285
                {
5286
                case bfd_reloc_undefined:
5287
                  if (!((*link_info->callbacks->undefined_symbol)
5288
                        (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5289
                         input_bfd, input_section, (*parent)->address,
5290
                         TRUE)))
5291
                    goto error_return;
5292
                  break;
5293
                case bfd_reloc_dangerous:
5294
                  BFD_ASSERT (error_message != NULL);
5295
                  if (!((*link_info->callbacks->reloc_dangerous)
5296
                        (link_info, error_message, input_bfd, input_section,
5297
                         (*parent)->address)))
5298
                    goto error_return;
5299
                  break;
5300
                case bfd_reloc_overflow:
5301
                  if (!((*link_info->callbacks->reloc_overflow)
5302
                        (link_info, NULL,
5303
                         bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5304
                         (*parent)->howto->name, (*parent)->addend,
5305
                         input_bfd, input_section, (*parent)->address)))
5306
                    goto error_return;
5307
                  break;
5308
                case bfd_reloc_outofrange:
5309
                default:
5310
                  abort ();
5311
                  break;
5312
                }
5313
 
5314
            }
5315
        }
5316
    }
5317
 
5318
  free (reloc_vector);
5319
  return data;
5320
 
5321
error_return:
5322
  free (reloc_vector);
5323
  return NULL;
5324
}

powered by: WebSVN 2.1.0

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