blob: a187afe9b5629b7d48d0e3c95c0a510efc1f3875 [file] [log] [blame]
/* BFD support for handling relocation entries.
Copyright (C) 1990-2024 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
/*
SECTION
Relocations
BFD maintains relocations in much the same way it maintains
symbols: they are left alone until required, then read in
en-masse and translated into an internal form. A common
routine <<bfd_perform_relocation>> acts upon the
canonical form to do the fixup.
Relocations are maintained on a per section basis,
while symbols are maintained on a per BFD basis.
All that a back end has to do to fit the BFD interface is to create
a <<struct reloc_cache_entry>> for each relocation
in a particular section, and fill in the right bits of the structures.
@menu
@* typedef arelent::
@* howto manager::
@end menu
*/
/* DO compile in the reloc_code name table from libbfd.h. */
#define _BFD_MAKE_TABLE_bfd_reloc_code_real
#include "sysdep.h"
#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "bfdver.h"
/*
DOCDD
INODE
typedef arelent, howto manager, Relocations, Relocations
SUBSECTION
typedef arelent
This is the structure of a relocation entry:
EXTERNAL
.typedef enum bfd_reloc_status
.{
. {* No errors detected. Note - the value 2 is used so that it
. will not be mistaken for the boolean TRUE or FALSE values. *}
. bfd_reloc_ok = 2,
.
. {* The relocation was performed, but there was an overflow. *}
. bfd_reloc_overflow,
.
. {* The address to relocate was not within the section supplied. *}
. bfd_reloc_outofrange,
.
. {* Used by special functions. *}
. bfd_reloc_continue,
.
. {* Unsupported relocation size requested. *}
. bfd_reloc_notsupported,
.
. {* Target specific meaning. *}
. bfd_reloc_other,
.
. {* The symbol to relocate against was undefined. *}
. bfd_reloc_undefined,
.
. {* The relocation was performed, but may not be ok. If this type is
. returned, the error_message argument to bfd_perform_relocation
. will be set. *}
. bfd_reloc_dangerous
. }
. bfd_reloc_status_type;
.
.typedef const struct reloc_howto_struct reloc_howto_type;
.
CODE_FRAGMENT
.struct reloc_cache_entry
.{
. {* A pointer into the canonical table of pointers. *}
. struct bfd_symbol **sym_ptr_ptr;
.
. {* offset in section. *}
. bfd_size_type address;
.
. {* addend for relocation value. *}
. bfd_vma addend;
.
. {* Pointer to how to perform the required relocation. *}
. reloc_howto_type *howto;
.
.};
.
*/
/*
DESCRIPTION
Here is a description of each of the fields within an <<arelent>>:
o <<sym_ptr_ptr>>
The symbol table pointer points to a pointer to the symbol
associated with the relocation request. It is the pointer
into the table returned by the back end's
<<canonicalize_symtab>> action. @xref{Symbols}. The symbol is
referenced through a pointer to a pointer so that tools like
the linker can fix up all the symbols of the same name by
modifying only one pointer. The relocation routine looks in
the symbol and uses the base of the section the symbol is
attached to and the value of the symbol as the initial
relocation offset. If the symbol pointer is zero, then the
section provided is looked up.
o <<address>>
The <<address>> field gives the offset in bytes from the base of
the section data which owns the relocation record to the first
byte of relocatable information. The actual data relocated
will be relative to this point; for example, a relocation
type which modifies the bottom two bytes of a four byte word
would not touch the first byte pointed to in a big endian
world.
o <<addend>>
The <<addend>> is a value provided by the back end to be added (!)
to the relocation offset. Its interpretation is dependent upon
the howto. For example, on the 68k the code:
| char foo[];
| main()
| {
| return foo[0x12345678];
| }
Could be compiled into:
| linkw fp,#-4
| moveb @@#12345678,d0
| extbl d0
| unlk fp
| rts
This could create a reloc pointing to <<foo>>, but leave the
offset in the data, something like:
|RELOCATION RECORDS FOR [.text]:
|offset type value
|00000006 32 _foo
|
|00000000 4e56 fffc ; linkw fp,#-4
|00000004 1039 1234 5678 ; moveb @@#12345678,d0
|0000000a 49c0 ; extbl d0
|0000000c 4e5e ; unlk fp
|0000000e 4e75 ; rts
Using coff and an 88k, some instructions don't have enough
space in them to represent the full address range, and
pointers have to be loaded in two parts. So you'd get something like:
| or.u r13,r0,hi16(_foo+0x12345678)
| ld.b r2,r13,lo16(_foo+0x12345678)
| jmp r1
This should create two relocs, both pointing to <<_foo>>, and with
0x12340000 in their addend field. The data would consist of:
|RELOCATION RECORDS FOR [.text]:
|offset type value
|00000002 HVRT16 _foo+0x12340000
|00000006 LVRT16 _foo+0x12340000
|
|00000000 5da05678 ; or.u r13,r0,0x5678
|00000004 1c4d5678 ; ld.b r2,r13,0x5678
|00000008 f400c001 ; jmp r1
The relocation routine digs out the value from the data, adds
it to the addend to get the original offset, and then adds the
value of <<_foo>>. Note that all 32 bits have to be kept around
somewhere, to cope with carry from bit 15 to bit 16.
One further example is the sparc and the a.out format. The
sparc has a similar problem to the 88k, in that some
instructions don't have room for an entire offset, but on the
sparc the parts are created in odd sized lumps. The designers of
the a.out format chose to not use the data within the section
for storing part of the offset; all the offset is kept within
the reloc. Anything in the data should be ignored.
| save %sp,-112,%sp
| sethi %hi(_foo+0x12345678),%g2
| ldsb [%g2+%lo(_foo+0x12345678)],%i0
| ret
| restore
Both relocs contain a pointer to <<foo>>, and the offsets
contain junk.
|RELOCATION RECORDS FOR [.text]:
|offset type value
|00000004 HI22 _foo+0x12345678
|00000008 LO10 _foo+0x12345678
|
|00000000 9de3bf90 ; save %sp,-112,%sp
|00000004 05000000 ; sethi %hi(_foo+0),%g2
|00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0
|0000000c 81c7e008 ; ret
|00000010 81e80000 ; restore
o <<howto>>
The <<howto>> field can be imagined as a
relocation instruction. It is a pointer to a structure which
contains information on what to do with all of the other
information in the reloc record and data section. A back end
would normally have a relocation instruction set and turn
relocations into pointers to the correct structure on input -
but it would be possible to create each howto field on demand.
*/
/*
SUBSUBSECTION
<<enum complain_overflow>>
Indicates what sort of overflow checking should be done when
performing a relocation.
CODE_FRAGMENT
.enum complain_overflow
.{
. {* Do not complain on overflow. *}
. complain_overflow_dont,
.
. {* Complain if the value overflows when considered as a signed
. number one bit larger than the field. ie. A bitfield of N bits
. is allowed to represent -2**n to 2**n-1. *}
. complain_overflow_bitfield,
.
. {* Complain if the value overflows when considered as a signed
. number. *}
. complain_overflow_signed,
.
. {* Complain if the value overflows when considered as an
. unsigned number. *}
. complain_overflow_unsigned
.};
.
*/
/*
SUBSUBSECTION
<<reloc_howto_type>>
The <<reloc_howto_type>> is a structure which contains all the
information that libbfd needs to know to tie up a back end's data.
CODE_FRAGMENT
.struct reloc_howto_struct
.{
. {* The type field has mainly a documentary use - the back end can
. do what it wants with it, though normally the back end's idea of
. an external reloc number is stored in this field. *}
. unsigned int type;
.
. {* The size of the item to be relocated in bytes. *}
. unsigned int size:4;
.
. {* The number of bits in the field to be relocated. This is used
. when doing overflow checking. *}
. unsigned int bitsize:7;
.
. {* The value the final relocation is shifted right by. This drops
. unwanted data from the relocation. *}
. unsigned int rightshift:6;
.
. {* The bit position of the reloc value in the destination.
. The relocated value is left shifted by this amount. *}
. unsigned int bitpos:6;
.
. {* What type of overflow error should be checked for when
. relocating. *}
. ENUM_BITFIELD (complain_overflow) complain_on_overflow:2;
.
. {* The relocation value should be negated before applying. *}
. unsigned int negate:1;
.
. {* The relocation is relative to the item being relocated. *}
. unsigned int pc_relative:1;
.
. {* Some formats record a relocation addend in the section contents
. rather than with the relocation. For ELF formats this is the
. distinction between USE_REL and USE_RELA (though the code checks
. for USE_REL == 1/0). The value of this field is TRUE if the
. addend is recorded with the section contents; when performing a
. partial link (ld -r) the section contents (the data) will be
. modified. The value of this field is FALSE if addends are
. recorded with the relocation (in arelent.addend); when performing
. a partial link the relocation will be modified.
. All relocations for all ELF USE_RELA targets should set this field
. to FALSE (values of TRUE should be looked on with suspicion).
. However, the converse is not true: not all relocations of all ELF
. USE_REL targets set this field to TRUE. Why this is so is peculiar
. to each particular target. For relocs that aren't used in partial
. links (e.g. GOT stuff) it doesn't matter what this is set to. *}
. unsigned int partial_inplace:1;
.
. {* When some formats create PC relative instructions, they leave
. the value of the pc of the place being relocated in the offset
. slot of the instruction, so that a PC relative relocation can
. be made just by adding in an ordinary offset (e.g., sun3 a.out).
. Some formats leave the displacement part of an instruction
. empty (e.g., ELF); this flag signals the fact. *}
. unsigned int pcrel_offset:1;
.
. {* Whether bfd_install_relocation should just install the addend,
. or should follow the practice of some older object formats and
. install a value including the symbol. *}
. unsigned int install_addend:1;
.
. {* src_mask selects the part of the instruction (or data) to be used
. in the relocation sum. If the target relocations don't have an
. addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
. dst_mask to extract the addend from the section contents. If
. relocations do have an addend in the reloc, eg. ELF USE_RELA, this
. field should normally be zero. Non-zero values for ELF USE_RELA
. targets should be viewed with suspicion as normally the value in
. the dst_mask part of the section contents should be ignored. *}
. bfd_vma src_mask;
.
. {* dst_mask selects which parts of the instruction (or data) are
. replaced with a relocated value. *}
. bfd_vma dst_mask;
.
. {* If this field is non null, then the supplied function is
. called rather than the normal function. This allows really
. strange relocation methods to be accommodated. *}
. bfd_reloc_status_type (*special_function)
. (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
. bfd *, char **);
.
. {* The textual name of the relocation type. *}
. const char *name;
.};
.
*/
/*
FUNCTION
The HOWTO Macro
DESCRIPTION
The HOWTO macro fills in a reloc_howto_type (a typedef for
const struct reloc_howto_struct).
.#define HOWTO_INSTALL_ADDEND 0
.#define HOWTO_RSIZE(sz) ((sz) < 0 ? -(sz) : (sz))
.#define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name, \
. inplace, src_mask, dst_mask, pcrel_off) \
. { (unsigned) type, HOWTO_RSIZE (size), bits, right, left, ovf, \
. size < 0, pcrel, inplace, pcrel_off, HOWTO_INSTALL_ADDEND, \
. src_mask, dst_mask, func, name }
DESCRIPTION
This is used to fill in an empty howto entry in an array.
.#define EMPTY_HOWTO(C) \
. HOWTO ((C), 0, 1, 0, false, 0, complain_overflow_dont, NULL, \
. NULL, false, 0, 0, false)
.
.static inline unsigned int
.bfd_get_reloc_size (reloc_howto_type *howto)
.{
. return howto->size;
.}
.
*/
/*
DEFINITION
arelent_chain
DESCRIPTION
How relocs are tied together in an <<asection>>:
.typedef struct relent_chain
.{
. arelent relent;
. struct relent_chain *next;
.}
.arelent_chain;
.
*/
/* N_ONES produces N one bits, without undefined behaviour for N
between zero and the number of bits in a bfd_vma. */
#define N_ONES(n) ((n) == 0 ? 0 : ((bfd_vma) 1 << ((n) - 1) << 1) - 1)
/*
FUNCTION
bfd_check_overflow
SYNOPSIS
bfd_reloc_status_type bfd_check_overflow
(enum complain_overflow how,
unsigned int bitsize,
unsigned int rightshift,
unsigned int addrsize,
bfd_vma relocation);
DESCRIPTION
Perform overflow checking on @var{relocation} which has
@var{bitsize} significant bits and will be shifted right by
@var{rightshift} bits, on a machine with addresses containing
@var{addrsize} significant bits. The result is either of
@code{bfd_reloc_ok} or @code{bfd_reloc_overflow}.
*/
bfd_reloc_status_type
bfd_check_overflow (enum complain_overflow how,
unsigned int bitsize,
unsigned int rightshift,
unsigned int addrsize,
bfd_vma relocation)
{
bfd_vma fieldmask, addrmask, signmask, ss, a;
bfd_reloc_status_type flag = bfd_reloc_ok;
if (bitsize == 0)
return flag;
/* Note: BITSIZE should always be <= ADDRSIZE, but in case it's not,
we'll be permissive: extra bits in the field mask will
automatically extend the address mask for purposes of the
overflow check. */
fieldmask = N_ONES (bitsize);
signmask = ~fieldmask;
addrmask = N_ONES (addrsize) | (fieldmask << rightshift);
a = (relocation & addrmask) >> rightshift;
switch (how)
{
case complain_overflow_dont:
break;
case complain_overflow_signed:
/* If any sign bits are set, all sign bits must be set. That
is, A must be a valid negative address after shifting. */
signmask = ~ (fieldmask >> 1);
/* Fall thru */
case complain_overflow_bitfield:
/* Bitfields are sometimes signed, sometimes unsigned. We
explicitly allow an address wrap too, which means a bitfield
of n bits is allowed to store -2**n to 2**n-1. Thus overflow
if the value has some, but not all, bits set outside the
field. */
ss = a & signmask;
if (ss != 0 && ss != ((addrmask >> rightshift) & signmask))
flag = bfd_reloc_overflow;
break;
case complain_overflow_unsigned:
/* We have an overflow if the address does not fit in the field. */
if ((a & signmask) != 0)
flag = bfd_reloc_overflow;
break;
default:
abort ();
}
return flag;
}
/*
FUNCTION
bfd_reloc_offset_in_range
SYNOPSIS
bool bfd_reloc_offset_in_range
(reloc_howto_type *howto,
bfd *abfd,
asection *section,
bfd_size_type offset);
DESCRIPTION
Returns TRUE if the reloc described by @var{HOWTO} can be
applied at @var{OFFSET} octets in @var{SECTION}.
*/
/* HOWTO describes a relocation, at offset OCTET. Return whether the
relocation field is within SECTION of ABFD. */
bool
bfd_reloc_offset_in_range (reloc_howto_type *howto,
bfd *abfd,
asection *section,
bfd_size_type octet)
{
bfd_size_type octet_end = bfd_get_section_limit_octets (abfd, section);
bfd_size_type reloc_size = bfd_get_reloc_size (howto);
/* The reloc field must be contained entirely within the section.
Allow zero length fields (marker relocs or NONE relocs where no
relocation will be performed) at the end of the section. */
return octet <= octet_end && reloc_size <= octet_end - octet;
}
/* Read and return the section contents at DATA converted to a host
integer (bfd_vma). The number of bytes read is given by the HOWTO. */
static bfd_vma
read_reloc (bfd *abfd, bfd_byte *data, reloc_howto_type *howto)
{
switch (bfd_get_reloc_size (howto))
{
case 0:
break;
case 1:
return bfd_get_8 (abfd, data);
case 2:
return bfd_get_16 (abfd, data);
case 3:
return bfd_get_24 (abfd, data);
case 4:
return bfd_get_32 (abfd, data);
#ifdef BFD64
case 8:
return bfd_get_64 (abfd, data);
#endif
default:
abort ();
}
return 0;
}
/* Convert VAL to target format and write to DATA. The number of
bytes written is given by the HOWTO. */
static void
write_reloc (bfd *abfd, bfd_vma val, bfd_byte *data, reloc_howto_type *howto)
{
switch (bfd_get_reloc_size (howto))
{
case 0:
break;
case 1:
bfd_put_8 (abfd, val, data);
break;
case 2:
bfd_put_16 (abfd, val, data);
break;
case 3:
bfd_put_24 (abfd, val, data);
break;
case 4:
bfd_put_32 (abfd, val, data);
break;
#ifdef BFD64
case 8:
bfd_put_64 (abfd, val, data);
break;
#endif
default:
abort ();
}
}
/* Apply RELOCATION value to target bytes at DATA, according to
HOWTO. */
static void
apply_reloc (bfd *abfd, bfd_byte *data, reloc_howto_type *howto,
bfd_vma relocation)
{
bfd_vma val = read_reloc (abfd, data, howto);
if (howto->negate)
relocation = -relocation;
val = ((val & ~howto->dst_mask)
| (((val & howto->src_mask) + relocation) & howto->dst_mask));
write_reloc (abfd, val, data, howto);
}
/*
FUNCTION
bfd_perform_relocation
SYNOPSIS
bfd_reloc_status_type bfd_perform_relocation
(bfd *abfd,
arelent *reloc_entry,
void *data,
asection *input_section,
bfd *output_bfd,
char **error_message);
DESCRIPTION
If @var{output_bfd} is supplied to this function, the
generated image will be relocatable; the relocations are
copied to the output file after they have been changed to
reflect the new state of the world. There are two ways of
reflecting the results of partial linkage in an output file:
by modifying the output data in place, and by modifying the
relocation record. Some native formats (e.g., basic a.out and
basic coff) have no way of specifying an addend in the
relocation type, so the addend has to go in the output data.
This is no big deal since in these formats the output data
slot will always be big enough for the addend. Complex reloc
types with addends were invented to solve just this problem.
The @var{error_message} argument is set to an error message if
this return @code{bfd_reloc_dangerous}.
*/
bfd_reloc_status_type
bfd_perform_relocation (bfd *abfd,
arelent *reloc_entry,
void *data,
asection *input_section,
bfd *output_bfd,
char **error_message)
{
bfd_vma relocation;
bfd_reloc_status_type flag = bfd_reloc_ok;
bfd_size_type octets;
bfd_vma output_base = 0;
reloc_howto_type *howto = reloc_entry->howto;
asection *reloc_target_output_section;
asymbol *symbol;
symbol = *(reloc_entry->sym_ptr_ptr);
/* If we are not producing relocatable output, return an error if
the symbol is not defined. An undefined weak symbol is
considered to have a value of zero (SVR4 ABI, p. 4-27). */
if (bfd_is_und_section (symbol->section)
&& (symbol->flags & BSF_WEAK) == 0
&& output_bfd == NULL)
flag = bfd_reloc_undefined;
/* If there is a function supplied to handle this relocation type,
call it. It'll return `bfd_reloc_continue' if further processing
can be done. */
if (howto && howto->special_function)
{
bfd_reloc_status_type cont;
/* Note - we do not call bfd_reloc_offset_in_range here as the
reloc_entry->address field might actually be valid for the
backend concerned. It is up to the special_function itself
to call bfd_reloc_offset_in_range if needed. */
cont = howto->special_function (abfd, reloc_entry, symbol, data,
input_section, output_bfd,
error_message);
if (cont != bfd_reloc_continue)
return cont;
}
if (bfd_is_abs_section (symbol->section)
&& output_bfd != NULL)
{
reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
/* PR 17512: file: 0f67f69d. */
if (howto == NULL)
return bfd_reloc_undefined;
/* Is the address of the relocation really within the section? */
octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
return bfd_reloc_outofrange;
/* Work out which section the relocation is targeted at and the
initial relocation command value. */
/* Get symbol value. (Common symbols are special.) */
if (bfd_is_com_section (symbol->section))
relocation = 0;
else
relocation = symbol->value;
reloc_target_output_section = symbol->section->output_section;
/* Convert input-section-relative symbol value to absolute. */
if ((output_bfd && ! howto->partial_inplace)
|| reloc_target_output_section == NULL)
output_base = 0;
else
output_base = reloc_target_output_section->vma;
output_base += symbol->section->output_offset;
/* If symbol addresses are in octets, convert to bytes. */
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& (symbol->section->flags & SEC_ELF_OCTETS))
output_base *= bfd_octets_per_byte (abfd, input_section);
relocation += output_base;
/* Add in supplied addend. */
relocation += reloc_entry->addend;
/* Here the variable relocation holds the final address of the
symbol we are relocating against, plus any addend. */
if (howto->pc_relative)
{
/* This is a PC relative relocation. We want to set RELOCATION
to the distance between the address of the symbol and the
location. RELOCATION is already the address of the symbol.
We start by subtracting the address of the section containing
the location.
If pcrel_offset is set, we must further subtract the position
of the location within the section. Some targets arrange for
the addend to be the negative of the position of the location
within the section; for example, i386-aout does this. For
i386-aout, pcrel_offset is FALSE. Some other targets do not
include the position of the location; for example, ELF.
For those targets, pcrel_offset is TRUE.
If we are producing relocatable output, then we must ensure
that this reloc will be correctly computed when the final
relocation is done. If pcrel_offset is FALSE we want to wind
up with the negative of the location within the section,
which means we must adjust the existing addend by the change
in the location within the section. If pcrel_offset is TRUE
we do not want to adjust the existing addend at all.
FIXME: This seems logical to me, but for the case of
producing relocatable output it is not what the code
actually does. I don't want to change it, because it seems
far too likely that something will break. */
relocation -=
input_section->output_section->vma + input_section->output_offset;
if (howto->pcrel_offset)
relocation -= reloc_entry->address;
}
if (output_bfd != NULL)
{
if (! howto->partial_inplace)
{
/* This is a partial relocation, and we want to apply the relocation
to the reloc entry rather than the raw data. Modify the reloc
inplace to reflect what we now know. */
reloc_entry->addend = relocation;
reloc_entry->address += input_section->output_offset;
return flag;
}
else
{
/* This is a partial relocation, but inplace, so modify the
reloc record a bit.
If we've relocated with a symbol with a section, change
into a ref to the section belonging to the symbol. */
reloc_entry->address += input_section->output_offset;
/* WTF?? */
if (abfd->xvec->flavour == bfd_target_coff_flavour)
{
/* For m68k-coff, the addend was being subtracted twice during
relocation with -r. Removing the line below this comment
fixes that problem; see PR 2953.
However, Ian wrote the following, regarding removing the line below,
which explains why it is still enabled: --djm
If you put a patch like that into BFD you need to check all the COFF
linkers. I am fairly certain that patch will break coff-i386 (e.g.,
SCO); see coff_i386_reloc in coff-i386.c where I worked around the
problem in a different way. There may very well be a reason that the
code works as it does.
Hmmm. The first obvious point is that bfd_perform_relocation should
not have any tests that depend upon the flavour. It's seem like
entirely the wrong place for such a thing. The second obvious point
is that the current code ignores the reloc addend when producing
relocatable output for COFF. That's peculiar. In fact, I really
have no idea what the point of the line you want to remove is.
A typical COFF reloc subtracts the old value of the symbol and adds in
the new value to the location in the object file (if it's a pc
relative reloc it adds the difference between the symbol value and the
location). When relocating we need to preserve that property.
BFD handles this by setting the addend to the negative of the old
value of the symbol. Unfortunately it handles common symbols in a
non-standard way (it doesn't subtract the old value) but that's a
different story (we can't change it without losing backward
compatibility with old object files) (coff-i386 does subtract the old
value, to be compatible with existing coff-i386 targets, like SCO).
So everything works fine when not producing relocatable output. When
we are producing relocatable output, logically we should do exactly
what we do when not producing relocatable output. Therefore, your
patch is correct. In fact, it should probably always just set
reloc_entry->addend to 0 for all cases, since it is, in fact, going to
add the value into the object file. This won't hurt the COFF code,
which doesn't use the addend; I'm not sure what it will do to other
formats (the thing to check for would be whether any formats both use
the addend and set partial_inplace).
When I wanted to make coff-i386 produce relocatable output, I ran
into the problem that you are running into: I wanted to remove that
line. Rather than risk it, I made the coff-i386 relocs use a special
function; it's coff_i386_reloc in coff-i386.c. The function
specifically adds the addend field into the object file, knowing that
bfd_perform_relocation is not going to. If you remove that line, then
coff-i386.c will wind up adding the addend field in twice. It's
trivial to fix; it just needs to be done.
The problem with removing the line is just that it may break some
working code. With BFD it's hard to be sure of anything. The right
way to deal with this is simply to build and test at least all the
supported COFF targets. It should be straightforward if time and disk
space consuming. For each target:
1) build the linker
2) generate some executable, and link it using -r (I would
probably use paranoia.o and link against newlib/libc.a, which
for all the supported targets would be available in
/usr/cygnus/progressive/H-host/target/lib/libc.a).
3) make the change to reloc.c
4) rebuild the linker
5) repeat step 2
6) if the resulting object files are the same, you have at least
made it no worse
7) if they are different you have to figure out which version is
right
*/
relocation -= reloc_entry->addend;
reloc_entry->addend = 0;
}
else
{
reloc_entry->addend = relocation;
}
}
}
/* FIXME: This overflow checking is incomplete, because the value
might have overflowed before we get here. For a correct check we
need to compute the value in a size larger than bitsize, but we
can't reasonably do that for a reloc the same size as a host
machine word.
FIXME: We should also do overflow checking on the result after
adding in the value contained in the object file. */
if (howto->complain_on_overflow != complain_overflow_dont
&& flag == bfd_reloc_ok)
flag = bfd_check_overflow (howto->complain_on_overflow,
howto->bitsize,
howto->rightshift,
bfd_arch_bits_per_address (abfd),
relocation);
/* Either we are relocating all the way, or we don't want to apply
the relocation to the reloc entry (probably because there isn't
any room in the output format to describe addends to relocs). */
/* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
(OSF version 1.3, compiler version 3.11). It miscompiles the
following program:
struct str
{
unsigned int i0;
} s = { 0 };
int
main ()
{
unsigned long x;
x = 0x100000000;
x <<= (unsigned long) s.i0;
if (x == 0)
printf ("failed\n");
else
printf ("succeeded (%lx)\n", x);
}
*/
relocation >>= (bfd_vma) howto->rightshift;
/* Shift everything up to where it's going to be used. */
relocation <<= (bfd_vma) howto->bitpos;
/* Wait for the day when all have the mask in them. */
/* What we do:
i instruction to be left alone
o offset within instruction
r relocation offset to apply
S src mask
D dst mask
N ~dst mask
A part 1
B part 2
R result
Do this:
(( i i i i i o o o o o from bfd_get<size>
and S S S S S) to get the size offset we want
+ r r r r r r r r r r) to get the final value to place
and D D D D D to chop to right size
-----------------------
= A A A A A
And this:
( i i i i i o o o o o from bfd_get<size>
and N N N N N ) get instruction
-----------------------
= B B B B B
And then:
( B B B B B
or A A A A A)
-----------------------
= R R R R R R R R R R put into bfd_put<size>
*/
data = (bfd_byte *) data + octets;
apply_reloc (abfd, data, howto, relocation);
return flag;
}
/*
FUNCTION
bfd_install_relocation
SYNOPSIS
bfd_reloc_status_type bfd_install_relocation
(bfd *abfd,
arelent *reloc_entry,
void *data, bfd_vma data_start,
asection *input_section,
char **error_message);
DESCRIPTION
This looks remarkably like <<bfd_perform_relocation>>, except it
does not expect that the section contents have been filled in.
I.e., it's suitable for use when creating, rather than applying
a relocation.
For now, this function should be considered reserved for the
assembler.
*/
bfd_reloc_status_type
bfd_install_relocation (bfd *abfd,
arelent *reloc_entry,
void *data_start,
bfd_vma data_start_offset,
asection *input_section,
char **error_message)
{
bfd_vma relocation;
bfd_reloc_status_type flag = bfd_reloc_ok;
bfd_size_type octets;
bfd_vma output_base = 0;
reloc_howto_type *howto = reloc_entry->howto;
asection *reloc_target_output_section;
asymbol *symbol;
bfd_byte *data;
symbol = *(reloc_entry->sym_ptr_ptr);
/* If there is a function supplied to handle this relocation type,
call it. It'll return `bfd_reloc_continue' if further processing
can be done. */
if (howto && howto->special_function)
{
bfd_reloc_status_type cont;
/* Note - we do not call bfd_reloc_offset_in_range here as the
reloc_entry->address field might actually be valid for the
backend concerned. It is up to the special_function itself
to call bfd_reloc_offset_in_range if needed. */
cont = howto->special_function (abfd, reloc_entry, symbol,
/* XXX - Non-portable! */
((bfd_byte *) data_start
- data_start_offset),
input_section, abfd, error_message);
if (cont != bfd_reloc_continue)
return cont;
}
if (howto->install_addend)
relocation = reloc_entry->addend;
else
{
if (bfd_is_abs_section (symbol->section))
return bfd_reloc_ok;
/* Work out which section the relocation is targeted at and the
initial relocation command value. */
/* Get symbol value. (Common symbols are special.) */
if (bfd_is_com_section (symbol->section))
relocation = 0;
else
relocation = symbol->value;
reloc_target_output_section = symbol->section;
/* Convert input-section-relative symbol value to absolute. */
if (! howto->partial_inplace)
output_base = 0;
else
output_base = reloc_target_output_section->vma;
/* If symbol addresses are in octets, convert to bytes. */
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& (symbol->section->flags & SEC_ELF_OCTETS))
output_base *= bfd_octets_per_byte (abfd, input_section);
relocation += output_base;
/* Add in supplied addend. */
relocation += reloc_entry->addend;
/* Here the variable relocation holds the final address of the
symbol we are relocating against, plus any addend. */
if (howto->pc_relative)
{
relocation -= input_section->vma;
if (howto->pcrel_offset && howto->partial_inplace)
relocation -= reloc_entry->address;
}
}
if (!howto->partial_inplace)
{
reloc_entry->addend = relocation;
return flag;
}
if (!howto->install_addend
&& abfd->xvec->flavour == bfd_target_coff_flavour)
{
/* This is just weird. We're subtracting out the original
addend, so that for COFF the addend is ignored??? */
relocation -= reloc_entry->addend;
/* FIXME: There should be no target specific code here... */
if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
reloc_entry->addend = 0;
}
else
reloc_entry->addend = relocation;
/* Is the address of the relocation really within the section? */
octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
return bfd_reloc_outofrange;
/* FIXME: This overflow checking is incomplete, because the value
might have overflowed before we get here. For a correct check we
need to compute the value in a size larger than bitsize, but we
can't reasonably do that for a reloc the same size as a host
machine word. */
if (howto->complain_on_overflow != complain_overflow_dont)
flag = bfd_check_overflow (howto->complain_on_overflow,
howto->bitsize,
howto->rightshift,
bfd_arch_bits_per_address (abfd),
relocation);
relocation >>= (bfd_vma) howto->rightshift;
/* Shift everything up to where it's going to be used. */
relocation <<= (bfd_vma) howto->bitpos;
data = (bfd_byte *) data_start + (octets - data_start_offset);
apply_reloc (abfd, data, howto, relocation);
return flag;
}
/* This relocation routine is used by some of the backend linkers.
They do not construct asymbol or arelent structures, so there is no
reason for them to use bfd_perform_relocation. Also,
bfd_perform_relocation is so hacked up it is easier to write a new
function than to try to deal with it.
This routine does a final relocation. Whether it is useful for a
relocatable link depends upon how the object format defines
relocations.
FIXME: This routine ignores any special_function in the HOWTO,
since the existing special_function values have been written for
bfd_perform_relocation.
HOWTO is the reloc howto information.
INPUT_BFD is the BFD which the reloc applies to.
INPUT_SECTION is the section which the reloc applies to.
CONTENTS is the contents of the section.
ADDRESS is the address of the reloc within INPUT_SECTION.
VALUE is the value of the symbol the reloc refers to.
ADDEND is the addend of the reloc. */
bfd_reloc_status_type
_bfd_final_link_relocate (reloc_howto_type *howto,
bfd *input_bfd,
asection *input_section,
bfd_byte *contents,
bfd_vma address,
bfd_vma value,
bfd_vma addend)
{
bfd_vma relocation;
bfd_size_type octets = (address
* bfd_octets_per_byte (input_bfd, input_section));
/* Sanity check the address. */
if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, octets))
return bfd_reloc_outofrange;
/* This function assumes that we are dealing with a basic relocation
against a symbol. We want to compute the value of the symbol to
relocate to. This is just VALUE, the value of the symbol, plus
ADDEND, any addend associated with the reloc. */
relocation = value + addend;
/* If the relocation is PC relative, we want to set RELOCATION to
the distance between the symbol (currently in RELOCATION) and the
location we are relocating. Some targets (e.g., i386-aout)
arrange for the contents of the section to be the negative of the
offset of the location within the section; for such targets
pcrel_offset is FALSE. Other targets (e.g., ELF) simply leave
the contents of the section as zero; for such targets
pcrel_offset is TRUE. If pcrel_offset is FALSE we do not need to
subtract out the offset of the location within the section (which
is just ADDRESS). */
if (howto->pc_relative)
{
relocation -= (input_section->output_section->vma
+ input_section->output_offset);
if (howto->pcrel_offset)
relocation -= address;
}
return _bfd_relocate_contents (howto, input_bfd, relocation,
contents + octets);
}
/* Relocate a given location using a given value and howto. */
bfd_reloc_status_type
_bfd_relocate_contents (reloc_howto_type *howto,
bfd *input_bfd,
bfd_vma relocation,
bfd_byte *location)
{
bfd_vma x;
bfd_reloc_status_type flag;
unsigned int rightshift = howto->rightshift;
unsigned int bitpos = howto->bitpos;
if (howto->negate)
relocation = -relocation;
/* Get the value we are going to relocate. */
x = read_reloc (input_bfd, location, howto);
/* Check for overflow. FIXME: We may drop bits during the addition
which we don't check for. We must either check at every single
operation, which would be tedious, or we must do the computations
in a type larger than bfd_vma, which would be inefficient. */
flag = bfd_reloc_ok;
if (howto->complain_on_overflow != complain_overflow_dont)
{
bfd_vma addrmask, fieldmask, signmask, ss;
bfd_vma a, b, sum;
/* Get the values to be added together. For signed and unsigned
relocations, we assume that all values should be truncated to
the size of an address. For bitfields, all the bits matter.
See also bfd_check_overflow. */
fieldmask = N_ONES (howto->bitsize);
signmask = ~fieldmask;
addrmask = (N_ONES (bfd_arch_bits_per_address (input_bfd))
| (fieldmask << rightshift));
a = (relocation & addrmask) >> rightshift;
b = (x & howto->src_mask & addrmask) >> bitpos;
addrmask >>= rightshift;
switch (howto->complain_on_overflow)
{
case complain_overflow_signed:
/* If any sign bits are set, all sign bits must be set.
That is, A must be a valid negative address after
shifting. */
signmask = ~(fieldmask >> 1);
/* Fall thru */
case complain_overflow_bitfield:
/* Much like the signed check, but for a field one bit
wider. We allow a bitfield to represent numbers in the
range -2**n to 2**n-1, where n is the number of bits in the
field. Note that when bfd_vma is 32 bits, a 32-bit reloc
can't overflow, which is exactly what we want. */
ss = a & signmask;
if (ss != 0 && ss != (addrmask & signmask))
flag = bfd_reloc_overflow;
/* We only need this next bit of code if the sign bit of B
is below the sign bit of A. This would only happen if
SRC_MASK had fewer bits than BITSIZE. Note that if
SRC_MASK has more bits than BITSIZE, we can get into
trouble; we would need to verify that B is in range, as
we do for A above. */
ss = ((~howto->src_mask) >> 1) & howto->src_mask;
ss >>= bitpos;
/* Set all the bits above the sign bit. */
b = (b ^ ss) - ss;
/* Now we can do the addition. */
sum = a + b;
/* See if the result has the correct sign. Bits above the
sign bit are junk now; ignore them. If the sum is
positive, make sure we did not have all negative inputs;
if the sum is negative, make sure we did not have all
positive inputs. The test below looks only at the sign
bits, and it really just
SIGN (A) == SIGN (B) && SIGN (A) != SIGN (SUM)
We mask with addrmask here to explicitly allow an address
wrap-around. The Linux kernel relies on it, and it is
the only way to write assembler code which can run when
loaded at a location 0x80000000 away from the location at
which it is linked. */
if (((~(a ^ b)) & (a ^ sum)) & signmask & addrmask)
flag = bfd_reloc_overflow;
break;
case complain_overflow_unsigned:
/* Checking for an unsigned overflow is relatively easy:
trim the addresses and add, and trim the result as well.
Overflow is normally indicated when the result does not
fit in the field. However, we also need to consider the
case when, e.g., fieldmask is 0x7fffffff or smaller, an
input is 0x80000000, and bfd_vma is only 32 bits; then we
will get sum == 0, but there is an overflow, since the
inputs did not fit in the field. Instead of doing a
separate test, we can check for this by or-ing in the
operands when testing for the sum overflowing its final
field. */
sum = (a + b) & addrmask;
if ((a | b | sum) & signmask)
flag = bfd_reloc_overflow;
break;
default:
abort ();
}
}
/* Put RELOCATION in the right bits. */
relocation >>= (bfd_vma) rightshift;
relocation <<= (bfd_vma) bitpos;
/* Add RELOCATION to the right bits of X. */
x = ((x & ~howto->dst_mask)
| (((x & howto->src_mask) + relocation) & howto->dst_mask));
/* Put the relocated value back in the object file. */
write_reloc (input_bfd, x, location, howto);
return flag;
}
/* Clear a given location using a given howto, by applying a fixed relocation
value and discarding any in-place addend. This is used for fixed-up
relocations against discarded symbols, to make ignorable debug or unwind
information more obvious. */
bfd_reloc_status_type
_bfd_clear_contents (reloc_howto_type *howto,
bfd *input_bfd,
asection *input_section,
bfd_byte *buf,
bfd_vma off)
{
bfd_vma x;
bfd_byte *location;
if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, off))
return bfd_reloc_outofrange;
/* Get the value we are going to relocate. */
location = buf + off;
x = read_reloc (input_bfd, location, howto);
/* Zero out the unwanted bits of X. */
x &= ~howto->dst_mask;
/* For a range list, use 1 instead of 0 as placeholder. 0
would terminate the list, hiding any later entries. */
if (strcmp (bfd_section_name (input_section), ".debug_ranges") == 0
&& (howto->dst_mask & 1) != 0)
x |= 1;
/* Put the relocated value back in the object file. */
write_reloc (input_bfd, x, location, howto);
return bfd_reloc_ok;
}
/*
DOCDD
INODE
howto manager, , typedef arelent, Relocations
SUBSECTION
The howto manager
When an application wants to create a relocation, but doesn't
know what the target machine might call it, it can find out by
using this bit of code.
*/
/*
DEFINITION
bfd_reloc_code_real_type
DESCRIPTION
The insides of a reloc code. The idea is that, eventually, there
will be one enumerator for every type of relocation we ever do.
Pass one of these values to <<bfd_reloc_type_lookup>>, and it'll
return a howto pointer.
This does mean that the application must determine the correct
enumerator value; you can't get a howto pointer from a random set
of attributes.
SENUM
bfd_reloc_code_real
ENUM
BFD_RELOC_64
ENUMX
BFD_RELOC_32
ENUMX
BFD_RELOC_26
ENUMX
BFD_RELOC_24
ENUMX
BFD_RELOC_16
ENUMX
BFD_RELOC_14
ENUMX
BFD_RELOC_8
ENUMDOC
Basic absolute relocations of N bits.
ENUM
BFD_RELOC_64_PCREL
ENUMX
BFD_RELOC_32_PCREL
ENUMX
BFD_RELOC_24_PCREL
ENUMX
BFD_RELOC_16_PCREL
ENUMX
BFD_RELOC_12_PCREL
ENUMX
BFD_RELOC_8_PCREL
ENUMDOC
PC-relative relocations. Sometimes these are relative to the
address of the relocation itself; sometimes they are relative to the
start of the section containing the relocation. It depends on the
specific target.
ENUM
BFD_RELOC_32_SECREL
ENUMX
BFD_RELOC_16_SECIDX
ENUMDOC
Section relative relocations. Some targets need this for DWARF2.
ENUM
BFD_RELOC_32_GOT_PCREL
ENUMX
BFD_RELOC_16_GOT_PCREL
ENUMX
BFD_RELOC_8_GOT_PCREL
ENUMX
BFD_RELOC_32_GOTOFF
ENUMX
BFD_RELOC_16_GOTOFF
ENUMX
BFD_RELOC_LO16_GOTOFF
ENUMX
BFD_RELOC_HI16_GOTOFF
ENUMX
BFD_RELOC_HI16_S_GOTOFF
ENUMX
BFD_RELOC_8_GOTOFF
ENUMX
BFD_RELOC_64_PLT_PCREL
ENUMX
BFD_RELOC_32_PLT_PCREL
ENUMX
BFD_RELOC_24_PLT_PCREL
ENUMX
BFD_RELOC_16_PLT_PCREL
ENUMX
BFD_RELOC_8_PLT_PCREL
ENUMX
BFD_RELOC_64_PLTOFF
ENUMX
BFD_RELOC_32_PLTOFF
ENUMX
BFD_RELOC_16_PLTOFF
ENUMX
BFD_RELOC_LO16_PLTOFF
ENUMX
BFD_RELOC_HI16_PLTOFF
ENUMX
BFD_RELOC_HI16_S_PLTOFF
ENUMX
BFD_RELOC_8_PLTOFF
ENUMDOC
For ELF.
ENUM
BFD_RELOC_SIZE32
ENUMX
BFD_RELOC_SIZE64
ENUMDOC
Size relocations.
ENUM
BFD_RELOC_68K_GLOB_DAT
ENUMX
BFD_RELOC_68K_JMP_SLOT
ENUMX
BFD_RELOC_68K_RELATIVE
ENUMX
BFD_RELOC_68K_TLS_GD32
ENUMX
BFD_RELOC_68K_TLS_GD16
ENUMX
BFD_RELOC_68K_TLS_GD8
ENUMX
BFD_RELOC_68K_TLS_LDM32
ENUMX
BFD_RELOC_68K_TLS_LDM16
ENUMX
BFD_RELOC_68K_TLS_LDM8
ENUMX
BFD_RELOC_68K_TLS_LDO32
ENUMX
BFD_RELOC_68K_TLS_LDO16
ENUMX
BFD_RELOC_68K_TLS_LDO8
ENUMX
BFD_RELOC_68K_TLS_IE32
ENUMX
BFD_RELOC_68K_TLS_IE16
ENUMX
BFD_RELOC_68K_TLS_IE8
ENUMX
BFD_RELOC_68K_TLS_LE32
ENUMX
BFD_RELOC_68K_TLS_LE16
ENUMX
BFD_RELOC_68K_TLS_LE8
ENUMDOC
Relocations used by 68K ELF.
ENUM
BFD_RELOC_32_BASEREL
ENUMX
BFD_RELOC_16_BASEREL
ENUMX
BFD_RELOC_LO16_BASEREL
ENUMX
BFD_RELOC_HI16_BASEREL
ENUMX
BFD_RELOC_HI16_S_BASEREL
ENUMX
BFD_RELOC_8_BASEREL
ENUMX
BFD_RELOC_RVA
ENUMDOC
Linkage-table relative.
ENUM
BFD_RELOC_8_FFnn
ENUMDOC
Absolute 8-bit relocation, but used to form an address like 0xFFnn.
ENUM
BFD_RELOC_32_PCREL_S2
ENUMX
BFD_RELOC_16_PCREL_S2
ENUMX
BFD_RELOC_23_PCREL_S2
ENUMDOC
These PC-relative relocations are stored as word displacements --
i.e., byte displacements shifted right two bits. The 30-bit word
displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
signed 16-bit displacement is used on the MIPS, and the 23-bit
displacement is used on the Alpha.
ENUM
BFD_RELOC_HI22
ENUMX
BFD_RELOC_LO10
ENUMDOC
High 22 bits and low 10 bits of 32-bit value, placed into lower bits
of the target word. These are used on the SPARC.
ENUM
BFD_RELOC_GPREL16
ENUMX
BFD_RELOC_GPREL32
ENUMDOC
For systems that allocate a Global Pointer register, these are
displacements off that register. These relocation types are
handled specially, because the value the register will have is
decided relatively late.
ENUM
BFD_RELOC_NONE
ENUMX
BFD_RELOC_SPARC_WDISP22
ENUMX
BFD_RELOC_SPARC22
ENUMX
BFD_RELOC_SPARC13
ENUMX
BFD_RELOC_SPARC_GOT10
ENUMX
BFD_RELOC_SPARC_GOT13
ENUMX
BFD_RELOC_SPARC_GOT22
ENUMX
BFD_RELOC_SPARC_PC10
ENUMX
BFD_RELOC_SPARC_PC22
ENUMX
BFD_RELOC_SPARC_WPLT30
ENUMX
BFD_RELOC_SPARC_COPY
ENUMX
BFD_RELOC_SPARC_GLOB_DAT
ENUMX
BFD_RELOC_SPARC_JMP_SLOT
ENUMX
BFD_RELOC_SPARC_RELATIVE
ENUMX
BFD_RELOC_SPARC_UA16
ENUMX
BFD_RELOC_SPARC_UA32
ENUMX
BFD_RELOC_SPARC_UA64
ENUMX
BFD_RELOC_SPARC_GOTDATA_HIX22
ENUMX
BFD_RELOC_SPARC_GOTDATA_LOX10
ENUMX
BFD_RELOC_SPARC_GOTDATA_OP_HIX22
ENUMX
BFD_RELOC_SPARC_GOTDATA_OP_LOX10
ENUMX
BFD_RELOC_SPARC_GOTDATA_OP
ENUMX
BFD_RELOC_SPARC_JMP_IREL
ENUMX
BFD_RELOC_SPARC_IRELATIVE
ENUMDOC
SPARC ELF relocations. There is probably some overlap with other
relocation types already defined.
ENUM
BFD_RELOC_SPARC_BASE13
ENUMX
BFD_RELOC_SPARC_BASE22
ENUMDOC
I think these are specific to SPARC a.out (e.g., Sun 4).
ENUMEQ
BFD_RELOC_SPARC_64
BFD_RELOC_64
ENUMX
BFD_RELOC_SPARC_10
ENUMX
BFD_RELOC_SPARC_11
ENUMX
BFD_RELOC_SPARC_OLO10
ENUMX
BFD_RELOC_SPARC_HH22
ENUMX
BFD_RELOC_SPARC_HM10
ENUMX
BFD_RELOC_SPARC_LM22
ENUMX
BFD_RELOC_SPARC_PC_HH22
ENUMX
BFD_RELOC_SPARC_PC_HM10
ENUMX
BFD_RELOC_SPARC_PC_LM22
ENUMX
BFD_RELOC_SPARC_WDISP16
ENUMX
BFD_RELOC_SPARC_WDISP19
ENUMX
BFD_RELOC_SPARC_7
ENUMX
BFD_RELOC_SPARC_6
ENUMX
BFD_RELOC_SPARC_5
ENUMEQX
BFD_RELOC_SPARC_DISP64
BFD_RELOC_64_PCREL
ENUMX
BFD_RELOC_SPARC_PLT32
ENUMX
BFD_RELOC_SPARC_PLT64
ENUMX
BFD_RELOC_SPARC_HIX22
ENUMX
BFD_RELOC_SPARC_LOX10
ENUMX
BFD_RELOC_SPARC_H44
ENUMX
BFD_RELOC_SPARC_M44
ENUMX
BFD_RELOC_SPARC_L44
ENUMX
BFD_RELOC_SPARC_REGISTER
ENUMX
BFD_RELOC_SPARC_H34
ENUMX
BFD_RELOC_SPARC_SIZE32
ENUMX
BFD_RELOC_SPARC_SIZE64
ENUMX
BFD_RELOC_SPARC_WDISP10
ENUMDOC
SPARC64 relocations.
ENUM
BFD_RELOC_SPARC_REV32
ENUMDOC
SPARC little endian relocation.
ENUM
BFD_RELOC_SPARC_TLS_GD_HI22
ENUMX
BFD_RELOC_SPARC_TLS_GD_LO10
ENUMX
BFD_RELOC_SPARC_TLS_GD_ADD
ENUMX
BFD_RELOC_SPARC_TLS_GD_CALL
ENUMX
BFD_RELOC_SPARC_TLS_LDM_HI22
ENUMX
BFD_RELOC_SPARC_TLS_LDM_LO10
ENUMX
BFD_RELOC_SPARC_TLS_LDM_ADD
ENUMX
BFD_RELOC_SPARC_TLS_LDM_CALL
ENUMX
BFD_RELOC_SPARC_TLS_LDO_HIX22
ENUMX
BFD_RELOC_SPARC_TLS_LDO_LOX10
ENUMX
BFD_RELOC_SPARC_TLS_LDO_ADD
ENUMX
BFD_RELOC_SPARC_TLS_IE_HI22
ENUMX
BFD_RELOC_SPARC_TLS_IE_LO10
ENUMX
BFD_RELOC_SPARC_TLS_IE_LD
ENUMX
BFD_RELOC_SPARC_TLS_IE_LDX
ENUMX
BFD_RELOC_SPARC_TLS_IE_ADD
ENUMX
BFD_RELOC_SPARC_TLS_LE_HIX22
ENUMX
BFD_RELOC_SPARC_TLS_LE_LOX10
ENUMX
BFD_RELOC_SPARC_TLS_DTPMOD32
ENUMX
BFD_RELOC_SPARC_TLS_DTPMOD64
ENUMX
BFD_RELOC_SPARC_TLS_DTPOFF32
ENUMX
BFD_RELOC_SPARC_TLS_DTPOFF64
ENUMX
BFD_RELOC_SPARC_TLS_TPOFF32
ENUMX
BFD_RELOC_SPARC_TLS_TPOFF64
ENUMDOC
SPARC TLS relocations.
ENUM
BFD_RELOC_SPU_IMM7
ENUMX
BFD_RELOC_SPU_IMM8
ENUMX
BFD_RELOC_SPU_IMM10
ENUMX
BFD_RELOC_SPU_IMM10W
ENUMX
BFD_RELOC_SPU_IMM16
ENUMX
BFD_RELOC_SPU_IMM16W
ENUMX
BFD_RELOC_SPU_IMM18
ENUMX
BFD_RELOC_SPU_PCREL9a
ENUMX
BFD_RELOC_SPU_PCREL9b
ENUMX
BFD_RELOC_SPU_PCREL16
ENUMX
BFD_RELOC_SPU_LO16
ENUMX
BFD_RELOC_SPU_HI16
ENUMX
BFD_RELOC_SPU_PPU32
ENUMX
BFD_RELOC_SPU_PPU64
ENUMX
BFD_RELOC_SPU_ADD_PIC
ENUMDOC
SPU Relocations.
ENUM
BFD_RELOC_ALPHA_GPDISP_HI16
ENUMDOC
Alpha ECOFF and ELF relocations. Some of these treat the symbol or
"addend" in some special way.
For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
writing; when reading, it will be the absolute section symbol. The
addend is the displacement in bytes of the "lda" instruction from
the "ldah" instruction (which is at the address of this reloc).
ENUM
BFD_RELOC_ALPHA_GPDISP_LO16
ENUMDOC
For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
with GPDISP_HI16 relocs. The addend is ignored when writing the
relocations out, and is filled in with the file's GP value on
reading, for convenience.
ENUM
BFD_RELOC_ALPHA_GPDISP
ENUMDOC
The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
relocation except that there is no accompanying GPDISP_LO16
relocation.
ENUM
BFD_RELOC_ALPHA_LITERAL
ENUMX
BFD_RELOC_ALPHA_ELF_LITERAL
ENUMX
BFD_RELOC_ALPHA_LITUSE
ENUMDOC
The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
the assembler turns it into a LDQ instruction to load the address of
the symbol, and then fills in a register in the real instruction.
The LITERAL reloc, at the LDQ instruction, refers to the .lita
section symbol. The addend is ignored when writing, but is filled
in with the file's GP value on reading, for convenience, as with the
GPDISP_LO16 reloc.
The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
It should refer to the symbol to be referenced, as with 16_GOTOFF,
but it generates output not based on the position within the .got
section, but relative to the GP value chosen for the file during the
final link stage.
The LITUSE reloc, on the instruction using the loaded address, gives
information to the linker that it might be able to use to optimize
away some literal section references. The symbol is ignored (read
as the absolute section symbol), and the "addend" indicates the type
of instruction using the register:
1 - "memory" fmt insn
2 - byte-manipulation (byte offset reg)
3 - jsr (target of branch)
ENUM
BFD_RELOC_ALPHA_HINT
ENUMDOC
The HINT relocation indicates a value that should be filled into the
"hint" field of a jmp/jsr/ret instruction, for possible branch-
prediction logic which may be provided on some processors.
ENUM
BFD_RELOC_ALPHA_LINKAGE
ENUMDOC
The LINKAGE relocation outputs a linkage pair in the object file,
which is filled by the linker.
ENUM
BFD_RELOC_ALPHA_CODEADDR
ENUMDOC
The CODEADDR relocation outputs a STO_CA in the object file,
which is filled by the linker.
ENUM
BFD_RELOC_ALPHA_GPREL_HI16
ENUMX
BFD_RELOC_ALPHA_GPREL_LO16
ENUMDOC
The GPREL_HI/LO relocations together form a 32-bit offset from the
GP register.
ENUM
BFD_RELOC_ALPHA_BRSGP
ENUMDOC
Like BFD_RELOC_23_PCREL_S2, except that the source and target must
share a common GP, and the target address is adjusted for
STO_ALPHA_STD_GPLOAD.
ENUM
BFD_RELOC_ALPHA_NOP
ENUMDOC
The NOP relocation outputs a NOP if the longword displacement
between two procedure entry points is < 2^21.
ENUM
BFD_RELOC_ALPHA_BSR
ENUMDOC
The BSR relocation outputs a BSR if the longword displacement
between two procedure entry points is < 2^21.
ENUM
BFD_RELOC_ALPHA_LDA
ENUMDOC
The LDA relocation outputs a LDA if the longword displacement
between two procedure entry points is < 2^16.
ENUM
BFD_RELOC_ALPHA_BOH
ENUMDOC
The BOH relocation outputs a BSR if the longword displacement
between two procedure entry points is < 2^21, or else a hint.
ENUM
BFD_RELOC_ALPHA_TLSGD
ENUMX
BFD_RELOC_ALPHA_TLSLDM
ENUMX
BFD_RELOC_ALPHA_DTPMOD64
ENUMX
BFD_RELOC_ALPHA_GOTDTPREL16
ENUMX
BFD_RELOC_ALPHA_DTPREL64
ENUMX
BFD_RELOC_ALPHA_DTPREL_HI16
ENUMX
BFD_RELOC_ALPHA_DTPREL_LO16
ENUMX
BFD_RELOC_ALPHA_DTPREL16
ENUMX
BFD_RELOC_ALPHA_GOTTPREL16
ENUMX
BFD_RELOC_ALPHA_TPREL64
ENUMX
BFD_RELOC_ALPHA_TPREL_HI16
ENUMX
BFD_RELOC_ALPHA_TPREL_LO16
ENUMX
BFD_RELOC_ALPHA_TPREL16
ENUMDOC
Alpha thread-local storage relocations.
ENUM
BFD_RELOC_MIPS_JMP
ENUMX
BFD_RELOC_MICROMIPS_JMP
ENUMDOC
The MIPS jump instruction.
ENUM
BFD_RELOC_MIPS16_JMP
ENUMDOC
The MIPS16 jump instruction.
ENUM
BFD_RELOC_MIPS16_GPREL
ENUMDOC
MIPS16 GP relative reloc.
ENUM
BFD_RELOC_HI16
ENUMDOC
High 16 bits of 32-bit value; simple reloc.
ENUM
BFD_RELOC_HI16_S
ENUMDOC
High 16 bits of 32-bit value but the low 16 bits will be sign
extended and added to form the final result. If the low 16
bits form a negative number, we need to add one to the high value
to compensate for the borrow when the low bits are added.
ENUM
BFD_RELOC_LO16
ENUMDOC
Low 16 bits.
ENUM
BFD_RELOC_HI16_PCREL
ENUMDOC
High 16 bits of 32-bit pc-relative value.
ENUM
BFD_RELOC_HI16_S_PCREL
ENUMDOC
High 16 bits of 32-bit pc-relative value, adjusted.
ENUM
BFD_RELOC_LO16_PCREL
ENUMDOC
Low 16 bits of pc-relative value.
ENUM
BFD_RELOC_MIPS16_GOT16
ENUMX
BFD_RELOC_MIPS16_CALL16
ENUMDOC
Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
16-bit immediate fields.
ENUM
BFD_RELOC_MIPS16_HI16
ENUMDOC
MIPS16 high 16 bits of 32-bit value.
ENUM
BFD_RELOC_MIPS16_HI16_S
ENUMDOC
MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
extended and added to form the final result. If the low 16
bits form a negative number, we need to add one to the high value
to compensate for the borrow when the low bits are added.
ENUM
BFD_RELOC_MIPS16_LO16
ENUMDOC
MIPS16 low 16 bits.
ENUM
BFD_RELOC_MIPS16_TLS_GD
ENUMX
BFD_RELOC_MIPS16_TLS_LDM
ENUMX
BFD_RELOC_MIPS16_TLS_DTPREL_HI16
ENUMX
BFD_RELOC_MIPS16_TLS_DTPREL_LO16
ENUMX
BFD_RELOC_MIPS16_TLS_GOTTPREL
ENUMX
BFD_RELOC_MIPS16_TLS_TPREL_HI16
ENUMX
BFD_RELOC_MIPS16_TLS_TPREL_LO16
ENUMDOC
MIPS16 TLS relocations.
ENUM
BFD_RELOC_MIPS_LITERAL
ENUMX
BFD_RELOC_MICROMIPS_LITERAL
ENUMDOC
Relocation against a MIPS literal section.
ENUM
BFD_RELOC_MICROMIPS_7_PCREL_S1
ENUMX
BFD_RELOC_MICROMIPS_10_PCREL_S1
ENUMX
BFD_RELOC_MICROMIPS_16_PCREL_S1
ENUMDOC
microMIPS PC-relative relocations.
ENUM
BFD_RELOC_MIPS16_16_PCREL_S1
ENUMDOC
MIPS16 PC-relative relocation.
ENUM
BFD_RELOC_MIPS_21_PCREL_S2
ENUMX
BFD_RELOC_MIPS_26_PCREL_S2
ENUMX
BFD_RELOC_MIPS_18_PCREL_S3
ENUMX
BFD_RELOC_MIPS_19_PCREL_S2
ENUMDOC
MIPS PC-relative relocations.
ENUM
BFD_RELOC_MICROMIPS_GPREL16
ENUMX
BFD_RELOC_MICROMIPS_HI16
ENUMX
BFD_RELOC_MICROMIPS_HI16_S
ENUMX
BFD_RELOC_MICROMIPS_LO16
ENUMDOC
microMIPS versions of generic BFD relocs.
ENUM
BFD_RELOC_MIPS_GOT16
ENUMX
BFD_RELOC_MICROMIPS_GOT16
ENUMX
BFD_RELOC_MIPS_CALL16
ENUMX
BFD_RELOC_MICROMIPS_CALL16
ENUMX
BFD_RELOC_MIPS_GOT_HI16
ENUMX
BFD_RELOC_MICROMIPS_GOT_HI16
ENUMX
BFD_RELOC_MIPS_GOT_LO16
ENUMX
BFD_RELOC_MICROMIPS_GOT_LO16
ENUMX
BFD_RELOC_MIPS_CALL_HI16
ENUMX
BFD_RELOC_MICROMIPS_CALL_HI16
ENUMX
BFD_RELOC_MIPS_CALL_LO16
ENUMX
BFD_RELOC_MICROMIPS_CALL_LO16
ENUMX
BFD_RELOC_MIPS_SUB
ENUMX
BFD_RELOC_MICROMIPS_SUB
ENUMX
BFD_RELOC_MIPS_GOT_PAGE
ENUMX
BFD_RELOC_MICROMIPS_GOT_PAGE
ENUMX
BFD_RELOC_MIPS_GOT_OFST
ENUMX
BFD_RELOC_MICROMIPS_GOT_OFST
ENUMX
BFD_RELOC_MIPS_GOT_DISP
ENUMX
BFD_RELOC_MICROMIPS_GOT_DISP
ENUMX
BFD_RELOC_MIPS_SHIFT5
ENUMX
BFD_RELOC_MIPS_SHIFT6
ENUMX
BFD_RELOC_MIPS_INSERT_A
ENUMX
BFD_RELOC_MIPS_INSERT_B
ENUMX
BFD_RELOC_MIPS_DELETE
ENUMX
BFD_RELOC_MIPS_HIGHEST
ENUMX
BFD_RELOC_MICROMIPS_HIGHEST
ENUMX
BFD_RELOC_MIPS_HIGHER
ENUMX
BFD_RELOC_MICROMIPS_HIGHER
ENUMX
BFD_RELOC_MIPS_SCN_DISP
ENUMX
BFD_RELOC_MICROMIPS_SCN_DISP
ENUMX
BFD_RELOC_MIPS_16
ENUMX
BFD_RELOC_MIPS_RELGOT
ENUMX
BFD_RELOC_MIPS_JALR
ENUMX
BFD_RELOC_MICROMIPS_JALR
ENUMX
BFD_RELOC_MIPS_TLS_DTPMOD32
ENUMX
BFD_RELOC_MIPS_TLS_DTPREL32
ENUMX
BFD_RELOC_MIPS_TLS_DTPMOD64
ENUMX
BFD_RELOC_MIPS_TLS_DTPREL64
ENUMX
BFD_RELOC_MIPS_TLS_GD
ENUMX
BFD_RELOC_MICROMIPS_TLS_GD
ENUMX
BFD_RELOC_MIPS_TLS_LDM
ENUMX
BFD_RELOC_MICROMIPS_TLS_LDM
ENUMX
BFD_RELOC_MIPS_TLS_DTPREL_HI16
ENUMX
BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16
ENUMX
BFD_RELOC_MIPS_TLS_DTPREL_LO16
ENUMX
BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16
ENUMX
BFD_RELOC_MIPS_TLS_GOTTPREL
ENUMX
BFD_RELOC_MICROMIPS_TLS_GOTTPREL
ENUMX
BFD_RELOC_MIPS_TLS_TPREL32
ENUMX
BFD_RELOC_MIPS_TLS_TPREL64
ENUMX
BFD_RELOC_MIPS_TLS_TPREL_HI16
ENUMX
BFD_RELOC_MICROMIPS_TLS_TPREL_HI16
ENUMX
BFD_RELOC_MIPS_TLS_TPREL_LO16
ENUMX
BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
ENUMX
BFD_RELOC_MIPS_EH
ENUMDOC
MIPS ELF relocations.
ENUM
BFD_RELOC_MIPS_COPY
ENUMX
BFD_RELOC_MIPS_JUMP_SLOT
ENUMDOC
MIPS ELF relocations (VxWorks and PLT extensions).
ENUM
BFD_RELOC_MOXIE_10_PCREL
ENUMDOC
Moxie ELF relocations.
ENUM
BFD_RELOC_FT32_10
ENUMX
BFD_RELOC_FT32_20
ENUMX
BFD_RELOC_FT32_17
ENUMX
BFD_RELOC_FT32_18
ENUMX
BFD_RELOC_FT32_RELAX
ENUMX
BFD_RELOC_FT32_SC0
ENUMX
BFD_RELOC_FT32_SC1
ENUMX
BFD_RELOC_FT32_15
ENUMX
BFD_RELOC_FT32_DIFF32
ENUMDOC
FT32 ELF relocations.
ENUM
BFD_RELOC_FRV_LABEL16
ENUMX
BFD_RELOC_FRV_LABEL24
ENUMX
BFD_RELOC_FRV_LO16
ENUMX
BFD_RELOC_FRV_HI16
ENUMX
BFD_RELOC_FRV_GPREL12
ENUMX
BFD_RELOC_FRV_GPRELU12
ENUMX
BFD_RELOC_FRV_GPREL32
ENUMX
BFD_RELOC_FRV_GPRELHI
ENUMX
BFD_RELOC_FRV_GPRELLO
ENUMX
BFD_RELOC_FRV_GOT12
ENUMX
BFD_RELOC_FRV_GOTHI
ENUMX
BFD_RELOC_FRV_GOTLO
ENUMX
BFD_RELOC_FRV_FUNCDESC
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOT12
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOTHI
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOTLO
ENUMX
BFD_RELOC_FRV_FUNCDESC_VALUE
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOTOFF12
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
ENUMX
BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
ENUMX
BFD_RELOC_FRV_GOTOFF12
ENUMX
BFD_RELOC_FRV_GOTOFFHI
ENUMX
BFD_RELOC_FRV_GOTOFFLO
ENUMX
BFD_RELOC_FRV_GETTLSOFF
ENUMX
BFD_RELOC_FRV_TLSDESC_VALUE
ENUMX
BFD_RELOC_FRV_GOTTLSDESC12
ENUMX
BFD_RELOC_FRV_GOTTLSDESCHI
ENUMX
BFD_RELOC_FRV_GOTTLSDESCLO
ENUMX
BFD_RELOC_FRV_TLSMOFF12
ENUMX
BFD_RELOC_FRV_TLSMOFFHI
ENUMX
BFD_RELOC_FRV_TLSMOFFLO
ENUMX
BFD_RELOC_FRV_GOTTLSOFF12
ENUMX
BFD_RELOC_FRV_GOTTLSOFFHI
ENUMX
BFD_RELOC_FRV_GOTTLSOFFLO
ENUMX
BFD_RELOC_FRV_TLSOFF
ENUMX
BFD_RELOC_FRV_TLSDESC_RELAX
ENUMX
BFD_RELOC_FRV_GETTLSOFF_RELAX
ENUMX
BFD_RELOC_FRV_TLSOFF_RELAX
ENUMX
BFD_RELOC_FRV_TLSMOFF
ENUMDOC
Fujitsu Frv Relocations.
ENUM
BFD_RELOC_MN10300_GOTOFF24
ENUMDOC
This is a 24bit GOT-relative reloc for the mn10300.
ENUM
BFD_RELOC_MN10300_GOT32
ENUMDOC
This is a 32bit GOT-relative reloc for the mn10300, offset by two
bytes in the instruction.
ENUM
BFD_RELOC_MN10300_GOT24
ENUMDOC
This is a 24bit GOT-relative reloc for the mn10300, offset by two
bytes in the instruction.
ENUM
BFD_RELOC_MN10300_GOT16
ENUMDOC
This is a 16bit GOT-relative reloc for the mn10300, offset by two
bytes in the instruction.
ENUM
BFD_RELOC_MN10300_COPY
ENUMDOC
Copy symbol at runtime.
ENUM
BFD_RELOC_MN10300_GLOB_DAT
ENUMDOC
Create GOT entry.
ENUM
BFD_RELOC_MN10300_JMP_SLOT
ENUMDOC
Create PLT entry.
ENUM
BFD_RELOC_MN10300_RELATIVE
ENUMDOC
Adjust by program base.
ENUM
BFD_RELOC_MN10300_SYM_DIFF
ENUMDOC
Together with another reloc targeted at the same location, allows
for a value that is the difference of two symbols in the same
section.
ENUM
BFD_RELOC_MN10300_ALIGN
ENUMDOC
The addend of this reloc is an alignment power that must be honoured
at the offset's location, regardless of linker relaxation.
ENUM
BFD_RELOC_MN10300_TLS_GD
ENUMX
BFD_RELOC_MN10300_TLS_LD
ENUMX
BFD_RELOC_MN10300_TLS_LDO
ENUMX
BFD_RELOC_MN10300_TLS_GOTIE
ENUMX
BFD_RELOC_MN10300_TLS_IE
ENUMX
BFD_RELOC_MN10300_TLS_LE
ENUMX
BFD_RELOC_MN10300_TLS_DTPMOD
ENUMX
BFD_RELOC_MN10300_TLS_DTPOFF
ENUMX
BFD_RELOC_MN10300_TLS_TPOFF
ENUMDOC
Various TLS-related relocations.
ENUM
BFD_RELOC_MN10300_32_PCREL
ENUMDOC
This is a 32bit pcrel reloc for the mn10300, offset by two bytes in
the instruction.
ENUM
BFD_RELOC_MN10300_16_PCREL
ENUMDOC
This is a 16bit pcrel reloc for the mn10300, offset by two bytes in
the instruction.
ENUM
BFD_RELOC_386_GOT32
ENUMX
BFD_RELOC_386_PLT32
ENUMX
BFD_RELOC_386_COPY
ENUMX
BFD_RELOC_386_GLOB_DAT
ENUMX
BFD_RELOC_386_JUMP_SLOT
ENUMX
BFD_RELOC_386_RELATIVE
ENUMX
BFD_RELOC_386_GOTOFF
ENUMX
BFD_RELOC_386_GOTPC
ENUMX
BFD_RELOC_386_TLS_TPOFF
ENUMX
BFD_RELOC_386_TLS_IE
ENUMX
BFD_RELOC_386_TLS_GOTIE
ENUMX
BFD_RELOC_386_TLS_LE
ENUMX
BFD_RELOC_386_TLS_GD
ENUMX
BFD_RELOC_386_TLS_LDM
ENUMX
BFD_RELOC_386_TLS_LDO_32
ENUMX
BFD_RELOC_386_TLS_IE_32
ENUMX
BFD_RELOC_386_TLS_LE_32
ENUMX
BFD_RELOC_386_TLS_DTPMOD32
ENUMX
BFD_RELOC_386_TLS_DTPOFF32
ENUMX
BFD_RELOC_386_TLS_TPOFF32
ENUMX
BFD_RELOC_386_TLS_GOTDESC
ENUMX
BFD_RELOC_386_TLS_DESC_CALL
ENUMX
BFD_RELOC_386_TLS_DESC
ENUMX
BFD_RELOC_386_IRELATIVE
ENUMX
BFD_RELOC_386_GOT32X
ENUMDOC
i386/elf relocations.
ENUM
BFD_RELOC_X86_64_GOT32
ENUMX
BFD_RELOC_X86_64_PLT32
ENUMX
BFD_RELOC_X86_64_COPY
ENUMX
BFD_RELOC_X86_64_GLOB_DAT
ENUMX
BFD_RELOC_X86_64_JUMP_SLOT
ENUMX
BFD_RELOC_X86_64_RELATIVE
ENUMX
BFD_RELOC_X86_64_GOTPCREL
ENUMX
BFD_RELOC_X86_64_32S
ENUMX
BFD_RELOC_X86_64_DTPMOD64
ENUMX
BFD_RELOC_X86_64_DTPOFF64
ENUMX
BFD_RELOC_X86_64_TPOFF64
ENUMX
BFD_RELOC_X86_64_TLSGD
ENUMX
BFD_RELOC_X86_64_TLSLD
ENUMX
BFD_RELOC_X86_64_DTPOFF32
ENUMX
BFD_RELOC_X86_64_GOTTPOFF
ENUMX
BFD_RELOC_X86_64_TPOFF32
ENUMX
BFD_RELOC_X86_64_GOTOFF64
ENUMX
BFD_RELOC_X86_64_GOTPC32
ENUMX
BFD_RELOC_X86_64_GOT64
ENUMX
BFD_RELOC_X86_64_GOTPCREL64
ENUMX
BFD_RELOC_X86_64_GOTPC64
ENUMX
BFD_RELOC_X86_64_GOTPLT64
ENUMX
BFD_RELOC_X86_64_PLTOFF64
ENUMX
BFD_RELOC_X86_64_GOTPC32_TLSDESC
ENUMX
BFD_RELOC_X86_64_TLSDESC_CALL
ENUMX
BFD_RELOC_X86_64_TLSDESC
ENUMX
BFD_RELOC_X86_64_IRELATIVE
ENUMX
BFD_RELOC_X86_64_PC32_BND
ENUMX
BFD_RELOC_X86_64_PLT32_BND
ENUMX
BFD_RELOC_X86_64_GOTPCRELX
ENUMX
BFD_RELOC_X86_64_REX_GOTPCRELX
ENUMX
BFD_RELOC_X86_64_CODE_4_GOTPCRELX
ENUMX
BFD_RELOC_X86_64_CODE_4_GOTTPOFF
ENUMX
BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC
ENUMX
BFD_RELOC_X86_64_CODE_5_GOTPCRELX
ENUMX
BFD_RELOC_X86_64_CODE_5_GOTTPOFF
ENUMX
BFD_RELOC_X86_64_CODE_5_GOTPC32_TLSDESC
ENUMX
BFD_RELOC_X86_64_CODE_6_GOTPCRELX
ENUMX
BFD_RELOC_X86_64_CODE_6_GOTTPOFF
ENUMX
BFD_RELOC_X86_64_CODE_6_GOTPC32_TLSDESC
ENUMDOC
x86-64/elf relocations.
ENUM
BFD_RELOC_NS32K_IMM_8
ENUMX
BFD_RELOC_NS32K_IMM_16
ENUMX
BFD_RELOC_NS32K_IMM_32
ENUMX
BFD_RELOC_NS32K_IMM_8_PCREL
ENUMX
BFD_RELOC_NS32K_IMM_16_PCREL
ENUMX
BFD_RELOC_NS32K_IMM_32_PCREL
ENUMX
BFD_RELOC_NS32K_DISP_8
ENUMX
BFD_RELOC_NS32K_DISP_16
ENUMX
BFD_RELOC_NS32K_DISP_32
ENUMX
BFD_RELOC_NS32K_DISP_8_PCREL
ENUMX
BFD_RELOC_NS32K_DISP_16_PCREL
ENUMX
BFD_RELOC_NS32K_DISP_32_PCREL
ENUMDOC
ns32k relocations.
ENUM
BFD_RELOC_PDP11_DISP_8_PCREL
ENUMX
BFD_RELOC_PDP11_DISP_6_PCREL
ENUMDOC
PDP11 relocations.
ENUM
BFD_RELOC_PJ_CODE_HI16
ENUMX
BFD_RELOC_PJ_CODE_LO16
ENUMX
BFD_RELOC_PJ_CODE_DIR16
ENUMX
BFD_RELOC_PJ_CODE_DIR32
ENUMX
BFD_RELOC_PJ_CODE_REL16
ENUMX
BFD_RELOC_PJ_CODE_REL32
ENUMDOC
Picojava relocs. Not all of these appear in object files.
ENUM
BFD_RELOC_PPC_B26
ENUMX
BFD_RELOC_PPC_BA26
ENUMX
BFD_RELOC_PPC_TOC16
ENUMX
BFD_RELOC_PPC_TOC16_LO
ENUMX
BFD_RELOC_PPC_TOC16_HI
ENUMX
BFD_RELOC_PPC_B16
ENUMX
BFD_RELOC_PPC_B16_BRTAKEN
ENUMX
BFD_RELOC_PPC_B16_BRNTAKEN
ENUMX
BFD_RELOC_PPC_BA16
ENUMX
BFD_RELOC_PPC_BA16_BRTAKEN
ENUMX
BFD_RELOC_PPC_BA16_BRNTAKEN
ENUMX
BFD_RELOC_PPC_COPY
ENUMX
BFD_RELOC_PPC_GLOB_DAT
ENUMX
BFD_RELOC_PPC_JMP_SLOT
ENUMX
BFD_RELOC_PPC_RELATIVE
ENUMX
BFD_RELOC_PPC_LOCAL24PC
ENUMX
BFD_RELOC_PPC_EMB_NADDR32
ENUMX
BFD_RELOC_PPC_EMB_NADDR16
ENUMX
BFD_RELOC_PPC_EMB_NADDR16_LO
ENUMX
BFD_RELOC_PPC_EMB_NADDR16_HI
ENUMX
BFD_RELOC_PPC_EMB_NADDR16_HA
ENUMX
BFD_RELOC_PPC_EMB_SDAI16
ENUMX
BFD_RELOC_PPC_EMB_SDA2I16
ENUMX
BFD_RELOC_PPC_EMB_SDA2REL
ENUMX
BFD_RELOC_PPC_EMB_SDA21
ENUMX
BFD_RELOC_PPC_EMB_MRKREF
ENUMX
BFD_RELOC_PPC_EMB_RELSEC16
ENUMX
BFD_RELOC_PPC_EMB_RELST_LO
ENUMX
BFD_RELOC_PPC_EMB_RELST_HI
ENUMX
BFD_RELOC_PPC_EMB_RELST_HA
ENUMX
BFD_RELOC_PPC_EMB_BIT_FLD
ENUMX
BFD_RELOC_PPC_EMB_RELSDA
ENUMX
BFD_RELOC_PPC_VLE_REL8
ENUMX
BFD_RELOC_PPC_VLE_REL15
ENUMX
BFD_RELOC_PPC_VLE_REL24
ENUMX
BFD_RELOC_PPC_VLE_LO16A
ENUMX
BFD_RELOC_PPC_VLE_LO16D
ENUMX
BFD_RELOC_PPC_VLE_HI16A
ENUMX
BFD_RELOC_PPC_VLE_HI16D
ENUMX
BFD_RELOC_PPC_VLE_HA16A
ENUMX
BFD_RELOC_PPC_VLE_HA16D
ENUMX
BFD_RELOC_PPC_VLE_SDA21
ENUMX
BFD_RELOC_PPC_VLE_SDA21_LO
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_LO16A
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_LO16D
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_HI16A
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_HI16D
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_HA16A
ENUMX
BFD_RELOC_PPC_VLE_SDAREL_HA16D
ENUMX
BFD_RELOC_PPC_16DX_HA
ENUMX
BFD_RELOC_PPC_REL16DX_HA
ENUMX
BFD_RELOC_PPC_NEG
ENUMX
BFD_RELOC_PPC64_HIGHER
ENUMX
BFD_RELOC_PPC64_HIGHER_S
ENUMX
BFD_RELOC_PPC64_HIGHEST
ENUMX
BFD_RELOC_PPC64_HIGHEST_S
ENUMX
BFD_RELOC_PPC64_TOC16_LO
ENUMX
BFD_RELOC_PPC64_TOC16_HI
ENUMX
BFD_RELOC_PPC64_TOC16_HA
ENUMX
BFD_RELOC_PPC64_TOC
ENUMX
BFD_RELOC_PPC64_PLTGOT16
ENUMX
BFD_RELOC_PPC64_PLTGOT16_LO
ENUMX
BFD_RELOC_PPC64_PLTGOT16_HI
ENUMX
BFD_RELOC_PPC64_PLTGOT16_HA
ENUMX
BFD_RELOC_PPC64_ADDR16_DS
ENUMX
BFD_RELOC_PPC64_ADDR16_LO_DS
ENUMX
BFD_RELOC_PPC64_GOT16_DS
ENUMX
BFD_RELOC_PPC64_GOT16_LO_DS
ENUMX
BFD_RELOC_PPC64_PLT16_LO_DS
ENUMX
BFD_RELOC_PPC64_SECTOFF_DS
ENUMX
BFD_RELOC_PPC64_SECTOFF_LO_DS
ENUMX
BFD_RELOC_PPC64_TOC16_DS
ENUMX
BFD_RELOC_PPC64_TOC16_LO_DS
ENUMX
BFD_RELOC_PPC64_PLTGOT16_DS
ENUMX
BFD_RELOC_PPC64_PLTGOT16_LO_DS
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGH
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGHA
ENUMX
BFD_RELOC_PPC64_REL16_HIGH
ENUMX
BFD_RELOC_PPC64_REL16_HIGHA
ENUMX
BFD_RELOC_PPC64_REL16_HIGHER
ENUMX
BFD_RELOC_PPC64_REL16_HIGHERA
ENUMX
BFD_RELOC_PPC64_REL16_HIGHEST
ENUMX
BFD_RELOC_PPC64_REL16_HIGHESTA
ENUMX
BFD_RELOC_PPC64_ADDR64_LOCAL
ENUMX
BFD_RELOC_PPC64_ENTRY
ENUMX
BFD_RELOC_PPC64_REL24_NOTOC
ENUMX
BFD_RELOC_PPC64_REL24_P9NOTOC
ENUMX
BFD_RELOC_PPC64_D34
ENUMX
BFD_RELOC_PPC64_D34_LO
ENUMX
BFD_RELOC_PPC64_D34_HI30
ENUMX
BFD_RELOC_PPC64_D34_HA30
ENUMX
BFD_RELOC_PPC64_PCREL34
ENUMX
BFD_RELOC_PPC64_GOT_PCREL34
ENUMX
BFD_RELOC_PPC64_PLT_PCREL34
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGHER34
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGHERA34
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGHEST34
ENUMX
BFD_RELOC_PPC64_ADDR16_HIGHESTA34
ENUMX
BFD_RELOC_PPC64_REL16_HIGHER34
ENUMX
BFD_RELOC_PPC64_REL16_HIGHERA34
ENUMX
BFD_RELOC_PPC64_REL16_HIGHEST34
ENUMX
BFD_RELOC_PPC64_REL16_HIGHESTA34
ENUMX
BFD_RELOC_PPC64_D28
ENUMX
BFD_RELOC_PPC64_PCREL28
ENUMDOC
Power(rs6000) and PowerPC relocations.
ENUM
BFD_RELOC_PPC_TLS
ENUMX
BFD_RELOC_PPC_TLSGD
ENUMX
BFD_RELOC_PPC_TLSLD
ENUMX
BFD_RELOC_PPC_TLSLE
ENUMX
BFD_RELOC_PPC_TLSIE
ENUMX
BFD_RELOC_PPC_TLSM
ENUMX
BFD_RELOC_PPC_TLSML
ENUMX
BFD_RELOC_PPC_DTPMOD
ENUMX
BFD_RELOC_PPC_TPREL16
ENUMX
BFD_RELOC_PPC_TPREL16_LO
ENUMX
BFD_RELOC_PPC_TPREL16_HI
ENUMX
BFD_RELOC_PPC_TPREL16_HA
ENUMX
BFD_RELOC_PPC_TPREL
ENUMX
BFD_RELOC_PPC_DTPREL16
ENUMX
BFD_RELOC_PPC_DTPREL16_LO
ENUMX
BFD_RELOC_PPC_DTPREL16_HI
ENUMX
BFD_RELOC_PPC_DTPREL16_HA
ENUMX
BFD_RELOC_PPC_DTPREL
ENUMX
BFD_RELOC_PPC_GOT_TLSGD16
ENUMX
BFD_RELOC_PPC_GOT_TLSGD16_LO
ENUMX
BFD_RELOC_PPC_GOT_TLSGD16_HI
ENUMX
BFD_RELOC_PPC_GOT_TLSGD16_HA
ENUMX
BFD_RELOC_PPC_GOT_TLSLD16
ENUMX
BFD_RELOC_PPC_GOT_TLSLD16_LO
ENUMX
BFD_RELOC_PPC_GOT_TLSLD16_HI
ENUMX
BFD_RELOC_PPC_GOT_TLSLD16_HA
ENUMX
BFD_RELOC_PPC_GOT_TPREL16
ENUMX
BFD_RELOC_PPC_GOT_TPREL16_LO
ENUMX
BFD_RELOC_PPC_GOT_TPREL16_HI
ENUMX
BFD_RELOC_PPC_GOT_TPREL16_HA
ENUMX
BFD_RELOC_PPC_GOT_DTPREL16
ENUMX
BFD_RELOC_PPC_GOT_DTPREL16_LO
ENUMX
BFD_RELOC_PPC_GOT_DTPREL16_HI
ENUMX
BFD_RELOC_PPC_GOT_DTPREL16_HA
ENUMX
BFD_RELOC_PPC64_TLSGD
ENUMX
BFD_RELOC_PPC64_TLSLD
ENUMX
BFD_RELOC_PPC64_TLSLE
ENUMX
BFD_RELOC_PPC64_TLSIE
ENUMX
BFD_RELOC_PPC64_TLSM
ENUMX
BFD_RELOC_PPC64_TLSML
ENUMX
BFD_RELOC_PPC64_TPREL16_DS
ENUMX
BFD_RELOC_PPC64_TPREL16_LO_DS
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGH
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGHA
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGHER
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGHERA
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGHEST
ENUMX
BFD_RELOC_PPC64_TPREL16_HIGHESTA
ENUMX
BFD_RELOC_PPC64_DTPREL16_DS
ENUMX
BFD_RELOC_PPC64_DTPREL16_LO_DS
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGH
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGHA
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGHER
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGHERA
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGHEST
ENUMX
BFD_RELOC_PPC64_DTPREL16_HIGHESTA
ENUMX
BFD_RELOC_PPC64_TPREL34
ENUMX
BFD_RELOC_PPC64_DTPREL34
ENUMX
BFD_RELOC_PPC64_GOT_TLSGD_PCREL34
ENUMX
BFD_RELOC_PPC64_GOT_TLSLD_PCREL34
ENUMX
BFD_RELOC_PPC64_GOT_TPREL_PCREL34
ENUMX
BFD_RELOC_PPC64_GOT_DTPREL_PCREL34
ENUMX
BFD_RELOC_PPC64_TLS_PCREL
ENUMDOC
PowerPC and PowerPC64 thread-local storage relocations.
ENUM
BFD_RELOC_I370_D12
ENUMDOC
IBM 370/390 relocations.
ENUM
BFD_RELOC_CTOR
ENUMDOC
The type of reloc used to build a constructor table - at the moment
probably a 32 bit wide absolute relocation, but the target can choose.
It generally does map to one of the other relocation types.
ENUM
BFD_RELOC_ARM_PCREL_BRANCH
ENUMDOC
ARM 26 bit pc-relative branch. The lowest two bits must be zero and
are not stored in the instruction.
ENUM
BFD_RELOC_ARM_PCREL_BLX
ENUMDOC
ARM 26 bit pc-relative branch. The lowest bit must be zero and is
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
field in the instruction.
ENUM
BFD_RELOC_THUMB_PCREL_BLX
ENUMDOC
Thumb 22 bit pc-relative branch. The lowest bit must be zero and is
not stored in the instruction. The 2nd lowest bit comes from a 1 bit
field in the instruction.
ENUM
BFD_RELOC_ARM_PCREL_CALL
ENUMDOC
ARM 26-bit pc-relative branch for an unconditional BL or BLX
instruction.
ENUM
BFD_RELOC_ARM_PCREL_JUMP
ENUMDOC
ARM 26-bit pc-relative branch for B or conditional BL instruction.
ENUM
BFD_RELOC_THUMB_PCREL_BRANCH5
ENUMDOC
ARM 5-bit pc-relative branch for Branch Future instructions.
ENUM
BFD_RELOC_THUMB_PCREL_BFCSEL
ENUMDOC
ARM 6-bit pc-relative branch for BFCSEL instruction.
ENUM
BFD_RELOC_ARM_THUMB_BF17
ENUMDOC
ARM 17-bit pc-relative branch for Branch Future instructions.
ENUM
BFD_RELOC_ARM_THUMB_BF13
ENUMDOC
ARM 13-bit pc-relative branch for BFCSEL instruction.
ENUM
BFD_RELOC_ARM_THUMB_BF19
ENUMDOC
ARM 19-bit pc-relative branch for Branch Future Link instruction.
ENUM
BFD_RELOC_ARM_THUMB_LOOP12
ENUMDOC
ARM 12-bit pc-relative branch for Low Overhead Loop instructions.
ENUM
BFD_RELOC_THUMB_PCREL_BRANCH7
ENUMX
BFD_RELOC_THUMB_PCREL_BRANCH9
ENUMX
BFD_RELOC_THUMB_PCREL_BRANCH12
ENUMX
BFD_RELOC_THUMB_PCREL_BRANCH20
ENUMX
BFD_RELOC_THUMB_PCREL_BRANCH23
ENUMX
BFD_RELOC_THUMB_PCREL_BRANCH25
ENUMDOC
Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
The lowest bit must be zero and is not stored in the instruction.
Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
"nn" one smaller in all cases. Note further that BRANCH23
corresponds to R_ARM_THM_CALL.
ENUM
BFD_RELOC_ARM_OFFSET_IMM
ENUMDOC
12-bit immediate offset, used in ARM-format ldr and str instructions.
ENUM
BFD_RELOC_ARM_THUMB_OFFSET
ENUMDOC
5-bit immediate offset, used in Thumb-format ldr and str instructions.
ENUM
BFD_RELOC_ARM_TARGET1
ENUMDOC
Pc-relative or absolute relocation depending on target. Used for
entries in .init_array sections.
ENUM
BFD_RELOC_ARM_ROSEGREL32
ENUMDOC
Read-only segment base relative address.
ENUM
BFD_RELOC_ARM_SBREL32
ENUMDOC
Data segment base relative address.
ENUM
BFD_RELOC_ARM_TARGET2
ENUMDOC
This reloc is used for references to RTTI data from exception
handling tables. The actual definition depends on the target. It
may be a pc-relative or some form of GOT-indirect relocation.
ENUM
BFD_RELOC_ARM_PREL31
ENUMDOC
31-bit PC relative address.
ENUM
BFD_RELOC_ARM_MOVW
ENUMX
BFD_RELOC_ARM_MOVT
ENUMX
BFD_RELOC_ARM_MOVW_PCREL
ENUMX
BFD_RELOC_ARM_MOVT_PCREL
ENUMX
BFD_RELOC_ARM_THUMB_MOVW
ENUMX
BFD_RELOC_ARM_THUMB_MOVT
ENUMX
BFD_RELOC_ARM_THUMB_MOVW_PCREL
ENUMX
BFD_RELOC_ARM_THUMB_MOVT_PCREL
ENUMDOC
Low and High halfword relocations for MOVW and MOVT instructions.
ENUM
BFD_RELOC_ARM_GOTFUNCDESC
ENUMX
BFD_RELOC_ARM_GOTOFFFUNCDESC
ENUMX
BFD_RELOC_ARM_FUNCDESC
ENUMX
BFD_RELOC_ARM_FUNCDESC_VALUE
ENUMX
BFD_RELOC_ARM_TLS_GD32_FDPIC
ENUMX
BFD_RELOC_ARM_TLS_LDM32_FDPIC
ENUMX
BFD_RELOC_ARM_TLS_IE32_FDPIC
ENUMDOC
ARM FDPIC specific relocations.
ENUM
BFD_RELOC_ARM_JUMP_SLOT
ENUMX
BFD_RELOC_ARM_GLOB_DAT
ENUMX
BFD_RELOC_ARM_GOT32
ENUMX
BFD_RELOC_ARM_PLT32
ENUMX
BFD_RELOC_ARM_RELATIVE
ENUMX
BFD_RELOC_ARM_GOTOFF
ENUMX
BFD_RELOC_ARM_GOTPC
ENUMX
BFD_RELOC_ARM_GOT_PREL
ENUMDOC
Relocations for setting up GOTs and PLTs for shared libraries.
ENUM
BFD_RELOC_ARM_TLS_GD32
ENUMX
BFD_RELOC_ARM_TLS_LDO32
ENUMX
BFD_RELOC_ARM_TLS_LDM32
ENUMX
BFD_RELOC_ARM_TLS_DTPOFF32
ENUMX
BFD_RELOC_ARM_TLS_DTPMOD32
ENUMX
BFD_RELOC_ARM_TLS_TPOFF32
ENUMX
BFD_RELOC_ARM_TLS_IE32
ENUMX
BFD_RELOC_ARM_TLS_LE32
ENUMX
BFD_RELOC_ARM_TLS_GOTDESC
ENUMX
BFD_RELOC_ARM_TLS_CALL
ENUMX
BFD_RELOC_ARM_THM_TLS_CALL
ENUMX
BFD_RELOC_ARM_TLS_DESCSEQ
ENUMX
BFD_RELOC_ARM_THM_TLS_DESCSEQ
ENUMX
BFD_RELOC_ARM_TLS_DESC
ENUMDOC
ARM thread-local storage relocations.
ENUM
BFD_RELOC_ARM_ALU_PC_G0_NC
ENUMX
BFD_RELOC_ARM_ALU_PC_G0
ENUMX
BFD_RELOC_ARM_ALU_PC_G1_NC
ENUMX
BFD_RELOC_ARM_ALU_PC_G1
ENUMX
BFD_RELOC_ARM_ALU_PC_G2
ENUMX
BFD_RELOC_ARM_LDR_PC_G0
ENUMX
BFD_RELOC_ARM_LDR_PC_G1
ENUMX
BFD_RELOC_ARM_LDR_PC_G2
ENUMX
BFD_RELOC_ARM_LDRS_PC_G0
ENUMX
BFD_RELOC_ARM_LDRS_PC_G1
ENUMX
BFD_RELOC_ARM_LDRS_PC_G2
ENUMX
BFD_RELOC_ARM_LDC_PC_G0
ENUMX
BFD_RELOC_ARM_LDC_PC_G1
ENUMX
BFD_RELOC_ARM_LDC_PC_G2
ENUMX
BFD_RELOC_ARM_ALU_SB_G0_NC
ENUMX
BFD_RELOC_ARM_ALU_SB_G0
ENUMX
BFD_RELOC_ARM_ALU_SB_G1_NC
ENUMX
BFD_RELOC_ARM_ALU_SB_G1
ENUMX
BFD_RELOC_ARM_ALU_SB_G2
ENUMX
BFD_RELOC_ARM_LDR_SB_G0
ENUMX
BFD_RELOC_ARM_LDR_SB_G1
ENUMX
BFD_RELOC_ARM_LDR_SB_G2
ENUMX
BFD_RELOC_ARM_LDRS_SB_G0
ENUMX
BFD_RELOC_ARM_LDRS_SB_G1
ENUMX
BFD_RELOC_ARM_LDRS_SB_G2
ENUMX
BFD_RELOC_ARM_LDC_SB_G0
ENUMX
BFD_RELOC_ARM_LDC_SB_G1
ENUMX
BFD_RELOC_ARM_LDC_SB_G2
ENUMDOC
ARM group relocations.
ENUM
BFD_RELOC_ARM_V4BX
ENUMDOC
Annotation of BX instructions.
ENUM
BFD_RELOC_ARM_IRELATIVE
ENUMDOC
ARM support for STT_GNU_IFUNC.
ENUM
BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC
ENUMX
BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC
ENUMX
BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC
ENUMX
BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC
ENUMDOC
Thumb1 relocations to support execute-only code.
ENUM
BFD_RELOC_ARM_IMMEDIATE
ENUMX
BFD_RELOC_ARM_ADRL_IMMEDIATE
ENUMX
BFD_RELOC_ARM_T32_IMMEDIATE
ENUMX
BFD_RELOC_ARM_T32_ADD_IMM
ENUMX
BFD_RELOC_ARM_T32_IMM12
ENUMX
BFD_RELOC_ARM_T32_ADD_PC12
ENUMX
BFD_RELOC_ARM_SHIFT_IMM
ENUMX
BFD_RELOC_ARM_SMC
ENUMX
BFD_RELOC_ARM_HVC
ENUMX
BFD_RELOC_ARM_SWI
ENUMX
BFD_RELOC_ARM_MULTI
ENUMX
BFD_RELOC_ARM_CP_OFF_IMM
ENUMX
BFD_RELOC_ARM_CP_OFF_IMM_S2
ENUMX
BFD_RELOC_ARM_T32_CP_OFF_IMM
ENUMX
BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
ENUMX
BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM
ENUMX
BFD_RELOC_ARM_ADR_IMM
ENUMX
BFD_RELOC_ARM_LDR_IMM
ENUMX
BFD_RELOC_ARM_LITERAL
ENUMX
BFD_RELOC_ARM_IN_POOL
ENUMX
BFD_RELOC_ARM_OFFSET_IMM8
ENUMX
BFD_RELOC_ARM_T32_OFFSET_U8
ENUMX
BFD_RELOC_ARM_T32_OFFSET_IMM
ENUMX
BFD_RELOC_ARM_HWLITERAL
ENUMX
BFD_RELOC_ARM_THUMB_ADD
ENUMX
BFD_RELOC_ARM_THUMB_IMM
ENUMX
BFD_RELOC_ARM_THUMB_SHIFT
ENUMDOC
These relocs are only used within the ARM assembler. They are not
(at present) written to any object files.
ENUM
BFD_RELOC_SH_PCDISP8BY2
ENUMX
BFD_RELOC_SH_PCDISP12BY2
ENUMX
BFD_RELOC_SH_IMM3
ENUMX
BFD_RELOC_SH_IMM3U
ENUMX
BFD_RELOC_SH_DISP12
ENUMX
BFD_RELOC_SH_DISP12BY2
ENUMX
BFD_RELOC_SH_DISP12BY4
ENUMX
BFD_RELOC_SH_DISP12BY8
ENUMX
BFD_RELOC_SH_DISP20
ENUMX
BFD_RELOC_SH_DISP20BY8
ENUMX
BFD_RELOC_SH_IMM4
ENUMX
BFD_RELOC_SH_IMM4BY2
ENUMX
BFD_RELOC_SH_IMM4BY4
ENUMX
BFD_RELOC_SH_IMM8
ENUMX
BFD_RELOC_SH_IMM8BY2
ENUMX
BFD_RELOC_SH_IMM8BY4
ENUMX
BFD_RELOC_SH_PCRELIMM8BY2
ENUMX
BFD_RELOC_SH_PCRELIMM8BY4
ENUMX
BFD_RELOC_SH_SWITCH16
ENUMX
BFD_RELOC_SH_SWITCH32
ENUMX
BFD_RELOC_SH_USES
ENUMX
BFD_RELOC_SH_COUNT
ENUMX
BFD_RELOC_SH_ALIGN
ENUMX
BFD_RELOC_SH_CODE
ENUMX
BFD_RELOC_SH_DATA
ENUMX
BFD_RELOC_SH_LABEL
ENUMX
BFD_RELOC_SH_LOOP_START
ENUMX
BFD_RELOC_SH_LOOP_END
ENUMX
BFD_RELOC_SH_COPY
ENUMX
BFD_RELOC_SH_GLOB_DAT
ENUMX
BFD_RELOC_SH_JMP_SLOT
ENUMX
BFD_RELOC_SH_RELATIVE
ENUMX
BFD_RELOC_SH_GOTPC
ENUMX
BFD_RELOC_SH_GOT_LOW16
ENUMX
BFD_RELOC_SH_GOT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOT_MEDHI16
ENUMX
BFD_RELOC_SH_GOT_HI16
ENUMX
BFD_RELOC_SH_GOTPLT_LOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPLT_HI16
ENUMX
BFD_RELOC_SH_PLT_LOW16
ENUMX
BFD_RELOC_SH_PLT_MEDLOW16
ENUMX
BFD_RELOC_SH_PLT_MEDHI16
ENUMX
BFD_RELOC_SH_PLT_HI16
ENUMX
BFD_RELOC_SH_GOTOFF_LOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDHI16
ENUMX
BFD_RELOC_SH_GOTOFF_HI16
ENUMX
BFD_RELOC_SH_GOTPC_LOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPC_HI16
ENUMX
BFD_RELOC_SH_COPY64
ENUMX
BFD_RELOC_SH_GLOB_DAT64
ENUMX
BFD_RELOC_SH_JMP_SLOT64
ENUMX
BFD_RELOC_SH_RELATIVE64
ENUMX
BFD_RELOC_SH_GOT10BY4
ENUMX
BFD_RELOC_SH_GOT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT10BY4
ENUMX
BFD_RELOC_SH_GOTPLT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT32
ENUMX
BFD_RELOC_SH_SHMEDIA_CODE
ENUMX
BFD_RELOC_SH_IMMU5
ENUMX
BFD_RELOC_SH_IMMS6
ENUMX
BFD_RELOC_SH_IMMS6BY32
ENUMX
BFD_RELOC_SH_IMMU6
ENUMX
BFD_RELOC_SH_IMMS10
ENUMX
BFD_RELOC_SH_IMMS10BY2
ENUMX
BFD_RELOC_SH_IMMS10BY4
ENUMX
BFD_RELOC_SH_IMMS10BY8
ENUMX
BFD_RELOC_SH_IMMS16
ENUMX
BFD_RELOC_SH_IMMU16
ENUMX
BFD_RELOC_SH_IMM_LOW16
ENUMX
BFD_RELOC_SH_IMM_LOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDHI16
ENUMX
BFD_RELOC_SH_IMM_MEDHI16_PCREL
ENUMX
BFD_RELOC_SH_IMM_HI16
ENUMX
BFD_RELOC_SH_IMM_HI16_PCREL
ENUMX
BFD_RELOC_SH_PT_16
ENUMX
BFD_RELOC_SH_TLS_GD_32
ENUMX
BFD_RELOC_SH_TLS_LD_32
ENUMX
BFD_RELOC_SH_TLS_LDO_32
ENUMX
BFD_RELOC_SH_TLS_IE_32
ENUMX
BFD_RELOC_SH_TLS_LE_32
ENUMX
BFD_RELOC_SH_TLS_DTPMOD32
ENUMX
BFD_RELOC_SH_TLS_DTPOFF32
ENUMX
BFD_RELOC_SH_TLS_TPOFF32
ENUMX
BFD_RELOC_SH_GOT20
ENUMX
BFD_RELOC_SH_GOTOFF20
ENUMX
BFD_RELOC_SH_GOTFUNCDESC
ENUMX
BFD_RELOC_SH_GOTFUNCDESC20
ENUMX
BFD_RELOC_SH_GOTOFFFUNCDESC
ENUMX
BFD_RELOC_SH_GOTOFFFUNCDESC20
ENUMX
BFD_RELOC_SH_FUNCDESC
ENUMDOC
Renesas / SuperH SH relocs. Not all of these appear in object files.
ENUM
BFD_RELOC_ARC_NONE
ENUMX
BFD_RELOC_ARC_8
ENUMX
BFD_RELOC_ARC_16
ENUMX
BFD_RELOC_ARC_24
ENUMX
BFD_RELOC_ARC_32
ENUMX
BFD_RELOC_ARC_N8
ENUMX
BFD_RELOC_ARC_N16
ENUMX
BFD_RELOC_ARC_N24
ENUMX
BFD_RELOC_ARC_N32
ENUMX
BFD_RELOC_ARC_SDA
ENUMX
BFD_RELOC_ARC_SECTOFF
ENUMX
BFD_RELOC_ARC_S21H_PCREL
ENUMX
BFD_RELOC_ARC_S21W_PCREL
ENUMX
BFD_RELOC_ARC_S25H_PCREL
ENUMX
BFD_RELOC_ARC_S25W_PCREL
ENUMX
BFD_RELOC_ARC_SDA32
ENUMX
BFD_RELOC_ARC_SDA_LDST
ENUMX
BFD_RELOC_ARC_SDA_LDST1
ENUMX
BFD_RELOC_ARC_SDA_LDST2
ENUMX
BFD_RELOC_ARC_SDA16_LD
ENUMX
BFD_RELOC_ARC_SDA16_LD1
ENUMX
BFD_RELOC_ARC_SDA16_LD2
ENUMX
BFD_RELOC_ARC_S13_PCREL
ENUMX
BFD_RELOC_ARC_W
ENUMX
BFD_RELOC_ARC_32_ME
ENUMX
BFD_RELOC_ARC_32_ME_S
ENUMX
BFD_RELOC_ARC_N32_ME
ENUMX
BFD_RELOC_ARC_SECTOFF_ME
ENUMX
BFD_RELOC_ARC_SDA32_ME
ENUMX
BFD_RELOC_ARC_W_ME
ENUMX
BFD_RELOC_AC_SECTOFF_U8
ENUMX
BFD_RELOC_AC_SECTOFF_U8_1
ENUMX
BFD_RELOC_AC_SECTOFF_U8_2
ENUMX
BFD_RELOC_AC_SECTOFF_S9
ENUMX
BFD_RELOC_AC_SECTOFF_S9_1
ENUMX
BFD_RELOC_AC_SECTOFF_S9_2
ENUMX
BFD_RELOC_ARC_SECTOFF_ME_1
ENUMX
BFD_RELOC_ARC_SECTOFF_ME_2
ENUMX
BFD_RELOC_ARC_SECTOFF_1
ENUMX
BFD_RELOC_ARC_SECTOFF_2
ENUMX
BFD_RELOC_ARC_SDA_12
ENUMX
BFD_RELOC_ARC_SDA16_ST2
ENUMX
BFD_RELOC_ARC_32_PCREL
ENUMX
BFD_RELOC_ARC_PC32
ENUMX
BFD_RELOC_ARC_GOT32
ENUMX
BFD_RELOC_ARC_GOTPC32
ENUMX
BFD_RELOC_ARC_PLT32
ENUMX
BFD_RELOC_ARC_COPY
ENUMX
BFD_RELOC_ARC_GLOB_DAT
ENUMX
BFD_RELOC_ARC_JMP_SLOT
ENUMX
BFD_RELOC_ARC_RELATIVE
ENUMX
BFD_RELOC_ARC_GOTOFF
ENUMX
BFD_RELOC_ARC_GOTPC
ENUMX
BFD_RELOC_ARC_S21W_PCREL_PLT
ENUMX
BFD_RELOC_ARC_S25H_PCREL_PLT
ENUMX
BFD_RELOC_ARC_TLS_DTPMOD
ENUMX
BFD_RELOC_ARC_TLS_TPOFF
ENUMX
BFD_RELOC_ARC_TLS_GD_GOT
ENUMX
BFD_RELOC_ARC_TLS_GD_LD
ENUMX
BFD_RELOC_ARC_TLS_GD_CALL
ENUMX
BFD_RELOC_ARC_TLS_IE_GOT
ENUMX
BFD_RELOC_ARC_TLS_DTPOFF
ENUMX
BFD_RELOC_ARC_TLS_DTPOFF_S9
ENUMX
BFD_RELOC_ARC_TLS_LE_S9
ENUMX
BFD_RELOC_ARC_TLS_LE_32
ENUMX
BFD_RELOC_ARC_S25W_PCREL_PLT
ENUMX
BFD_RELOC_ARC_S21H_PCREL_PLT
ENUMX
BFD_RELOC_ARC_NPS_CMEM16
ENUMX
BFD_RELOC_ARC_JLI_SECTOFF
ENUMDOC
ARC relocs.
ENUM
BFD_RELOC_BFIN_16_IMM
ENUMDOC
ADI Blackfin 16 bit immediate absolute reloc.
ENUM
BFD_RELOC_BFIN_16_HIGH
ENUMDOC
ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
ENUM
BFD_RELOC_BFIN_4_PCREL
ENUMDOC
ADI Blackfin 'a' part of LSETUP.
ENUM
BFD_RELOC_BFIN_5_PCREL
ENUMDOC
ADI Blackfin.
ENUM
BFD_RELOC_BFIN_16_LOW
ENUMDOC
ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
ENUM
BFD_RELOC_BFIN_10_PCREL
ENUMDOC
ADI Blackfin.
ENUM
BFD_RELOC_BFIN_11_PCREL
ENUMDOC
ADI Blackfin 'b' part of LSETUP.
ENUM
BFD_RELOC_BFIN_12_PCREL_JUMP
ENUMDOC
ADI Blackfin.
ENUM
BFD_RELOC_BFIN_12_PCREL_JUMP_S
ENUMDOC
ADI Blackfin Short jump, pcrel.
ENUM
BFD_RELOC_BFIN_24_PCREL_CALL_X
ENUMDOC
ADI Blackfin Call.x not implemented.
ENUM
BFD_RELOC_BFIN_24_PCREL_JUMP_L
ENUMDOC
ADI Blackfin Long Jump pcrel.
ENUM
BFD_RELOC_BFIN_GOT17M4
ENUMX
BFD_RELOC_BFIN_GOTHI
ENUMX
BFD_RELOC_BFIN_GOTLO
ENUMX
BFD_RELOC_BFIN_FUNCDESC
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOT17M4
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOTHI
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOTLO
ENUMX
BFD_RELOC_BFIN_FUNCDESC_VALUE
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
ENUMX
BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
ENUMX
BFD_RELOC_BFIN_GOTOFF17M4
ENUMX
BFD_RELOC_BFIN_GOTOFFHI
ENUMX
BFD_RELOC_BFIN_GOTOFFLO
ENUMDOC
ADI Blackfin FD-PIC relocations.
ENUM
BFD_RELOC_BFIN_GOT
ENUMDOC
ADI Blackfin GOT relocation.
ENUM
BFD_RELOC_BFIN_PLTPC
ENUMDOC
ADI Blackfin PLTPC relocation.
ENUM
BFD_ARELOC_BFIN_PUSH
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_CONST
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_ADD
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_SUB
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_MULT
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_DIV
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_MOD
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_LSHIFT
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_RSHIFT
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_AND
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_OR
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_XOR
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_LAND
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_LOR
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_LEN
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_NEG
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_COMP
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_PAGE
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_HWPAGE
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_ARELOC_BFIN_ADDR
ENUMDOC
ADI Blackfin arithmetic relocation.
ENUM
BFD_RELOC_D10V_10_PCREL_R
ENUMDOC
Mitsubishi D10V relocs.
This is a 10-bit reloc with the right 2 bits assumed to be 0.
ENUM
BFD_RELOC_D10V_10_PCREL_L
ENUMDOC
Mitsubishi D10V relocs.
This is a 10-bit reloc with the right 2 bits assumed to be 0. This
is the same as the previous reloc except it is in the left
container, i.e., shifted left 15 bits.
ENUM
BFD_RELOC_D10V_18
ENUMDOC
This is an 18-bit reloc with the right 2 bits assumed to be 0.
ENUM
BFD_RELOC_D10V_18_PCREL
ENUMDOC
This is an 18-bit reloc with the right 2 bits assumed to be 0.
ENUM
BFD_RELOC_D30V_6
ENUMDOC
Mitsubishi D30V relocs.
This is a 6-bit absolute reloc.
ENUM
BFD_RELOC_D30V_9_PCREL
ENUMDOC
This is a 6-bit pc-relative reloc with the right 3 bits assumed to
be 0.
ENUM
BFD_RELOC_D30V_9_PCREL_R
ENUMDOC
This is a 6-bit pc-relative reloc with the right 3 bits assumed to
be 0. Same as the previous reloc but on the right side of the
container.
ENUM
BFD_RELOC_D30V_15
ENUMDOC
This is a 12-bit absolute reloc with the right 3 bitsassumed to
be 0.
ENUM
BFD_RELOC_D30V_15_PCREL
ENUMDOC
This is a 12-bit pc-relative reloc with the right 3 bits assumed to
be 0.
ENUM
BFD_RELOC_D30V_15_PCREL_R
ENUMDOC
This is a 12-bit pc-relative reloc with the right 3 bits assumed to
be 0. Same as the previous reloc but on the right side of the
container.
ENUM
BFD_RELOC_D30V_21
ENUMDOC
This is an 18-bit absolute reloc with the right 3 bits assumed to
be 0.
ENUM
BFD_RELOC_D30V_21_PCREL
ENUMDOC
This is an 18-bit pc-relative reloc with the right 3 bits assumed to
be 0.
ENUM
BFD_RELOC_D30V_21_PCREL_R
ENUMDOC
This is an 18-bit pc-relative reloc with the right 3 bits assumed to
be 0. Same as the previous reloc but on the right side of the
container.
ENUM
BFD_RELOC_D30V_32
ENUMDOC
This is a 32-bit absolute reloc.
ENUM
BFD_RELOC_D30V_32_PCREL
ENUMDOC
This is a 32-bit pc-relative reloc.
ENUM
BFD_RELOC_DLX_HI16_S
ENUMX
BFD_RELOC_DLX_LO16
ENUMX
BFD_RELOC_DLX_JMP26
ENUMDOC
DLX relocs.
ENUM
BFD_RELOC_M32C_HI8
ENUMX
BFD_RELOC_M32C_RL_JUMP
ENUMX
BFD_RELOC_M32C_RL_1ADDR
ENUMX
BFD_RELOC_M32C_RL_2ADDR
ENUMDOC
Renesas M16C/M32C Relocations.
ENUM
BFD_RELOC_M32R_24
ENUMDOC
Renesas M32R (formerly Mitsubishi M32R) relocs.
This is a 24 bit absolute address.
ENUM
BFD_RELOC_M32R_10_PCREL
ENUMDOC
This is a 10-bit pc-relative reloc with the right 2 bits assumed to
be 0.
ENUM
BFD_RELOC_M32R_18_PCREL
ENUMDOC
This is an 18-bit reloc with the right 2 bits assumed to be 0.
ENUM
BFD_RELOC_M32R_26_PCREL
ENUMDOC
This is a 26-bit reloc with the right 2 bits assumed to be 0.
ENUM
BFD_RELOC_M32R_HI16_ULO
ENUMDOC
This is a 16-bit reloc containing the high 16 bits of an address
used when the lower 16 bits are treated as unsigned.
ENUM
BFD_RELOC_M32R_HI16_SLO
ENUMDOC
This is a 16-bit reloc containing the high 16 bits of an address
used when the lower 16 bits are treated as signed.
ENUM
BFD_RELOC_M32R_LO16
ENUMDOC
This is a 16-bit reloc containing the lower 16 bits of an address.
ENUM
BFD_RELOC_M32R_SDA16
ENUMDOC
This is a 16-bit reloc containing the small data area offset for use
in add3, load, and store instructions.
ENUM
BFD_RELOC_M32R_GOT24
ENUMX
BFD_RELOC_M32R_26_PLTREL
ENUMX
BFD_RELOC_M32R_COPY
ENUMX
BFD_RELOC_M32R_GLOB_DAT
ENUMX
BFD_RELOC_M32R_JMP_SLOT
ENUMX
BFD_RELOC_M32R_RELATIVE
ENUMX
BFD_RELOC_M32R_GOTOFF
ENUMX
BFD_RELOC_M32R_GOTOFF_HI_ULO
ENUMX
BFD_RELOC_M32R_GOTOFF_HI_SLO
ENUMX
BFD_RELOC_M32R_GOTOFF_LO
ENUMX
BFD_RELOC_M32R_GOTPC24
ENUMX
BFD_RELOC_M32R_GOT16_HI_ULO
ENUMX
BFD_RELOC_M32R_GOT16_HI_SLO
ENUMX
BFD_RELOC_M32R_GOT16_LO
ENUMX
BFD_RELOC_M32R_GOTPC_HI_ULO
ENUMX
BFD_RELOC_M32R_GOTPC_HI_SLO
ENUMX
BFD_RELOC_M32R_GOTPC_LO
ENUMDOC
For PIC.
ENUM
BFD_RELOC_NDS32_20
ENUMDOC
NDS32 relocs.
This is a 20 bit absolute address.
ENUM
BFD_RELOC_NDS32_9_PCREL
ENUMDOC
This is a 9-bit pc-relative reloc with the right 1 bit assumed to
be 0.
ENUM
BFD_RELOC_NDS32_WORD_9_PCREL
ENUMDOC
This is a 9-bit pc-relative reloc with the right 1 bit assumed to
be 0.
ENUM
BFD_RELOC_NDS32_15_PCREL
ENUMDOC
This is an 15-bit reloc with the right 1 bit assumed to be 0.
ENUM
BFD_RELOC_NDS32_17_PCREL
ENUMDOC
This is an 17-bit reloc with the right 1 bit assumed to be 0.
ENUM
BFD_RELOC_NDS32_25_PCREL
ENUMDOC
This is a 25-bit reloc with the right 1 bit assumed to be 0.
ENUM
BFD_RELOC_NDS32_HI20
ENUMDOC
This is a 20-bit reloc containing the high 20 bits of an address
used with the lower 12 bits.
ENUM
BFD_RELOC_NDS32_LO12S3
ENUMDOC
This is a 12-bit reloc containing the lower 12 bits of an address
then shift right by 3. This is used with ldi,sdi.
ENUM
BFD_RELOC_NDS32_LO12S2
ENUMDOC
This is a 12-bit reloc containing the lower 12 bits of an address
then shift left by 2. This is used with lwi,swi.
ENUM
BFD_RELOC_NDS32_LO12S1
ENUMDOC
This is a 12-bit reloc containing the lower 12 bits of an address
then shift left by 1. This is used with lhi,shi.
ENUM
BFD_RELOC_NDS32_LO12S0
ENUMDOC
This is a 12-bit reloc containing the lower 12 bits of an address
then shift left by 0. This is used with lbisbi.
ENUM
BFD_RELOC_NDS32_LO12S0_ORI
ENUMDOC
This is a 12-bit reloc containing the lower 12 bits of an address
then shift left by 0. This is only used with branch relaxations.
ENUM
BFD_RELOC_NDS32_SDA15S3
ENUMDOC
This is a 15-bit reloc containing the small data area 18-bit signed
offset and shift left by 3 for use in ldi, sdi.
ENUM
BFD_RELOC_NDS32_SDA15S2
ENUMDOC
This is a 15-bit reloc containing the small data area 17-bit signed
offset and shift left by 2 for use in lwi, swi.
ENUM
BFD_RELOC_NDS32_SDA15S1
ENUMDOC
This is a 15-bit reloc containing the small data area 16-bit signed
offset and shift left by 1 for use in lhi, shi.
ENUM
BFD_RELOC_NDS32_SDA15S0
ENUMDOC
This is a 15-bit reloc containing the small data area 15-bit signed
offset and shift left by 0 for use in lbi, sbi.
ENUM
BFD_RELOC_NDS32_SDA16S3
ENUMDOC
This is a 16-bit reloc containing the small data area 16-bit signed
offset and shift left by 3.
ENUM
BFD_RELOC_NDS32_SDA17S2
ENUMDOC
This is a 17-bit reloc containing the small data area 17-bit signed
offset and shift left by 2 for use in lwi.gp, swi.gp.
ENUM
BFD_RELOC_NDS32_SDA18S1
ENUMDOC
This is a 18-bit reloc containing the small data area 18-bit signed
offset and shift left by 1 for use in lhi.gp, shi.gp.
ENUM
BFD_RELOC_NDS32_SDA19S0
ENUMDOC
This is a 19-bit reloc containing the small data area 19-bit signed
offset and shift left by 0 for use in lbi.gp, sbi.gp.
ENUM
BFD_RELOC_NDS32_GOT20
ENUMX
BFD_RELOC_NDS32_9_PLTREL
ENUMX
BFD_RELOC_NDS32_25_PLTREL
ENUMX
BFD_RELOC_NDS32_COPY
ENUMX
BFD_RELOC_NDS32_GLOB_DAT
ENUMX
BFD_RELOC_NDS32_JMP_SLOT
ENUMX
BFD_RELOC_NDS32_RELATIVE
ENUMX
BFD_RELOC_NDS32_GOTOFF
ENUMX
BFD_RELOC_NDS32_GOTOFF_HI20
ENUMX
BFD_RELOC_NDS32_GOTOFF_LO12
ENUMX
BFD_RELOC_NDS32_GOTPC20
ENUMX
BFD_RELOC_NDS32_GOT_HI20
ENUMX
BFD_RELOC_NDS32_GOT_LO12
ENUMX
BFD_RELOC_NDS32_GOTPC_HI20
ENUMX
BFD_RELOC_NDS32_GOTPC_LO12
ENUMDOC
For PIC.
ENUM
BFD_RELOC_NDS32_INSN16
ENUMX
BFD_RELOC_NDS32_LABEL
ENUMX
BFD_RELOC_NDS32_LONGCALL1
ENUMX
BFD_RELOC_NDS32_LONGCALL2
ENUMX
BFD_RELOC_NDS32_LONGCALL3
ENUMX
BFD_RELOC_NDS32_LONGJUMP1
ENUMX
BFD_RELOC_NDS32_LONGJUMP2
ENUMX
BFD_RELOC_NDS32_LONGJUMP3
ENUMX
BFD_RELOC_NDS32_LOADSTORE
ENUMX
BFD_RELOC_NDS32_9_FIXED
ENUMX
BFD_RELOC_NDS32_15_FIXED
ENUMX
BFD_RELOC_NDS32_17_FIXED
ENUMX
BFD_RELOC_NDS32_25_FIXED
ENUMX
BFD_RELOC_NDS32_LONGCALL4
ENUMX
BFD_RELOC_NDS32_LONGCALL5
ENUMX
BFD_RELOC_NDS32_LONGCALL6
ENUMX
BFD_RELOC_NDS32_LONGJUMP4
ENUMX
BFD_RELOC_NDS32_LONGJUMP5
ENUMX
BFD_RELOC_NDS32_LONGJUMP6
ENUMX
BFD_RELOC_NDS32_LONGJUMP7
ENUMDOC
For relax.
ENUM
BFD_RELOC_NDS32_PLTREL_HI20
ENUMX
BFD_RELOC_NDS32_PLTREL_LO12
ENUMX
BFD_RELOC_NDS32_PLT_GOTREL_HI20
ENUMX
BFD_RELOC_NDS32_PLT_GOTREL_LO12
ENUMDOC
For PIC.
ENUM
BFD_RELOC_NDS32_SDA12S2_DP
ENUMX
BFD_RELOC_NDS32_SDA12S2_SP
ENUMX
BFD_RELOC_NDS32_LO12S2_DP
ENUMX
BFD_RELOC_NDS32_LO12S2_SP
ENUMDOC
For floating point.
ENUM
BFD_RELOC_NDS32_DWARF2_OP1
ENUMX
BFD_RELOC_NDS32_DWARF2_OP2
ENUMX
BFD_RELOC_NDS32_DWARF2_LEB
ENUMDOC
For dwarf2 debug_line.
ENUM
BFD_RELOC_NDS32_UPDATE_TA
ENUMDOC
For eliminating 16-bit instructions.
ENUM
BFD_RELOC_NDS32_PLT_GOTREL_LO20
ENUMX
BFD_RELOC_NDS32_PLT_GOTREL_LO15
ENUMX
BFD_RELOC_NDS32_PLT_GOTREL_LO19
ENUMX
BFD_RELOC_NDS32_GOT_LO15
ENUMX
BFD_RELOC_NDS32_GOT_LO19
ENUMX
BFD_RELOC_NDS32_GOTOFF_LO15
ENUMX
BFD_RELOC_NDS32_GOTOFF_LO19
ENUMX
BFD_RELOC_NDS32_GOT15S2
ENUMX
BFD_RELOC_NDS32_GOT17S2
ENUMDOC
For PIC object relaxation.
ENUM
BFD_RELOC_NDS32_5
ENUMDOC
NDS32 relocs.
This is a 5 bit absolute address.
ENUM
BFD_RELOC_NDS32_10_UPCREL
ENUMDOC
This is a 10-bit unsigned pc-relative reloc with the right 1 bit
assumed to be 0.
ENUM
BFD_RELOC_NDS32_SDA_FP7U2_RELA
ENUMDOC
If fp were omitted, fp can used as another gp.
ENUM
BFD_RELOC_NDS32_RELAX_ENTRY
ENUMX
BFD_RELOC_NDS32_GOT_SUFF
ENUMX
BFD_RELOC_NDS32_GOTOFF_SUFF
ENUMX
BFD_RELOC_NDS32_PLT_GOT_SUFF
ENUMX
BFD_RELOC_NDS32_MULCALL_SUFF
ENUMX
BFD_RELOC_NDS32_PTR
ENUMX
BFD_RELOC_NDS32_PTR_COUNT
ENUMX
BFD_RELOC_NDS32_PTR_RESOLVED
ENUMX
BFD_RELOC_NDS32_PLTBLOCK
ENUMX
BFD_RELOC_NDS32_RELAX_REGION_BEGIN
ENUMX
BFD_RELOC_NDS32_RELAX_REGION_END
ENUMX
BFD_RELOC_NDS32_MINUEND
ENUMX
BFD_RELOC_NDS32_SUBTRAHEND
ENUMX
BFD_RELOC_NDS32_DIFF8
ENUMX
BFD_RELOC_NDS32_DIFF16
ENUMX
BFD_RELOC_NDS32_DIFF32
ENUMX
BFD_RELOC_NDS32_DIFF_ULEB128
ENUMX
BFD_RELOC_NDS32_EMPTY
ENUMDOC
Relaxation relative relocation types.
ENUM
BFD_RELOC_NDS32_25_ABS
ENUMDOC
This is a 25 bit absolute address.
ENUM
BFD_RELOC_NDS32_DATA
ENUMX
BFD_RELOC_NDS32_TRAN
ENUMX
BFD_RELOC_NDS32_17IFC_PCREL
ENUMX
BFD_RELOC_NDS32_10IFCU_PCREL
ENUMDOC
For ex9 and ifc using.
ENUM
BFD_RELOC_NDS32_TPOFF
ENUMX
BFD_RELOC_NDS32_GOTTPOFF
ENUMX
BFD_RELOC_NDS32_TLS_LE_HI20
ENUMX
BFD_RELOC_NDS32_TLS_LE_LO12
ENUMX
BFD_RELOC_NDS32_TLS_LE_20
ENUMX
BFD_RELOC_NDS32_TLS_LE_15S0
ENUMX
BFD_RELOC_NDS32_TLS_LE_15S1
ENUMX
BFD_RELOC_NDS32_TLS_LE_15S2
ENUMX
BFD_RELOC_NDS32_TLS_LE_ADD
ENUMX
BFD_RELOC_NDS32_TLS_LE_LS
ENUMX
BFD_RELOC_NDS32_TLS_IE_HI20
ENUMX
BFD_RELOC_NDS32_TLS_IE_LO12
ENUMX
BFD_RELOC_NDS32_TLS_IE_LO12S2
ENUMX
BFD_RELOC_NDS32_TLS_IEGP_HI20
ENUMX
BFD_RELOC_NDS32_TLS_IEGP_LO12
ENUMX
BFD_RELOC_NDS32_TLS_IEGP_LO12S2
ENUMX
BFD_RELOC_NDS32_TLS_IEGP_LW
ENUMX
BFD_RELOC_NDS32_TLS_DESC
ENUMX
BFD_RELOC_NDS32_TLS_DESC_HI20
ENUMX
BFD_RELOC_NDS32_TLS_DESC_LO12
ENUMX
BFD_RELOC_NDS32_TLS_DESC_20
ENUMX
BFD_RELOC_NDS32_TLS_DESC_SDA17S2
ENUMX
BFD_RELOC_NDS32_TLS_DESC_ADD
ENUMX
BFD_RELOC_NDS32_TLS_DESC_FUNC
ENUMX
BFD_RELOC_NDS32_TLS_DESC_CALL
ENUMX
BFD_RELOC_NDS32_TLS_DESC_MEM
ENUMX
BFD_RELOC_NDS32_REMOVE
ENUMX
BFD_RELOC_NDS32_GROUP
ENUMDOC
For TLS.
ENUM
BFD_RELOC_NDS32_LSI
ENUMDOC
For floating load store relaxation.