| 1 | This is bfd.info, produced by makeinfo version 4.3 from bfd.texinfo.
 | 
|---|
| 2 | 
 | 
|---|
| 3 | START-INFO-DIR-ENTRY
 | 
|---|
| 4 | * Bfd: (bfd).                   The Binary File Descriptor library.
 | 
|---|
| 5 | END-INFO-DIR-ENTRY
 | 
|---|
| 6 | 
 | 
|---|
| 7 |    This file documents the BFD library.
 | 
|---|
| 8 | 
 | 
|---|
| 9 |    Copyright (C) 1991, 2000, 2001, 2003 Free Software Foundation, Inc.
 | 
|---|
| 10 | 
 | 
|---|
| 11 |    Permission is granted to copy, distribute and/or modify this document
 | 
|---|
| 12 |      under the terms of the GNU Free Documentation License, Version 1.1
 | 
|---|
| 13 |      or any later version published by the Free Software Foundation;
 | 
|---|
| 14 |    with no Invariant Sections, with no Front-Cover Texts, and with no
 | 
|---|
| 15 |     Back-Cover Texts.  A copy of the license is included in the
 | 
|---|
| 16 | section entitled "GNU Free Documentation License".
 | 
|---|
| 17 | 
 | 
|---|
| 18 | 
 | 
|---|
| 19 | File: bfd.info,  Node: typedef arelent,  Next: howto manager,  Prev: Relocations,  Up: Relocations
 | 
|---|
| 20 | 
 | 
|---|
| 21 | typedef arelent
 | 
|---|
| 22 | ---------------
 | 
|---|
| 23 | 
 | 
|---|
| 24 |    This is the structure of a relocation entry:
 | 
|---|
| 25 | 
 | 
|---|
| 26 | 
 | 
|---|
| 27 |      typedef enum bfd_reloc_status
 | 
|---|
| 28 |      {
 | 
|---|
| 29 |        /* No errors detected.  */
 | 
|---|
| 30 |        bfd_reloc_ok,
 | 
|---|
| 31 |      
 | 
|---|
| 32 |        /* The relocation was performed, but there was an overflow.  */
 | 
|---|
| 33 |        bfd_reloc_overflow,
 | 
|---|
| 34 |      
 | 
|---|
| 35 |        /* The address to relocate was not within the section supplied.  */
 | 
|---|
| 36 |        bfd_reloc_outofrange,
 | 
|---|
| 37 |      
 | 
|---|
| 38 |        /* Used by special functions.  */
 | 
|---|
| 39 |        bfd_reloc_continue,
 | 
|---|
| 40 |      
 | 
|---|
| 41 |        /* Unsupported relocation size requested.  */
 | 
|---|
| 42 |        bfd_reloc_notsupported,
 | 
|---|
| 43 |      
 | 
|---|
| 44 |        /* Unused.  */
 | 
|---|
| 45 |        bfd_reloc_other,
 | 
|---|
| 46 |      
 | 
|---|
| 47 |        /* The symbol to relocate against was undefined.  */
 | 
|---|
| 48 |        bfd_reloc_undefined,
 | 
|---|
| 49 |      
 | 
|---|
| 50 |        /* The relocation was performed, but may not be ok - presently
 | 
|---|
| 51 |           generated only when linking i960 coff files with i960 b.out
 | 
|---|
| 52 |           symbols.  If this type is returned, the error_message argument
 | 
|---|
| 53 |           to bfd_perform_relocation will be set.  */
 | 
|---|
| 54 |        bfd_reloc_dangerous
 | 
|---|
| 55 |       }
 | 
|---|
| 56 |       bfd_reloc_status_type;
 | 
|---|
| 57 |      
 | 
|---|
| 58 |      
 | 
|---|
| 59 |      typedef struct reloc_cache_entry
 | 
|---|
| 60 |      {
 | 
|---|
| 61 |        /* A pointer into the canonical table of pointers.  */
 | 
|---|
| 62 |        struct symbol_cache_entry **sym_ptr_ptr;
 | 
|---|
| 63 |      
 | 
|---|
| 64 |        /* offset in section.  */
 | 
|---|
| 65 |        bfd_size_type address;
 | 
|---|
| 66 |      
 | 
|---|
| 67 |        /* addend for relocation value.  */
 | 
|---|
| 68 |        bfd_vma addend;
 | 
|---|
| 69 |      
 | 
|---|
| 70 |        /* Pointer to how to perform the required relocation.  */
 | 
|---|
| 71 |        reloc_howto_type *howto;
 | 
|---|
| 72 |      
 | 
|---|
| 73 |      }
 | 
|---|
| 74 |      arelent;
 | 
|---|
| 75 |    *Description*
 | 
|---|
| 76 | Here is a description of each of the fields within an `arelent':
 | 
|---|
| 77 | 
 | 
|---|
| 78 |    * `sym_ptr_ptr'
 | 
|---|
| 79 |    The symbol table pointer points to a pointer to the symbol
 | 
|---|
| 80 | associated with the relocation request.  It is the pointer into the
 | 
|---|
| 81 | table returned by the back end's `get_symtab' action. *Note Symbols::.
 | 
|---|
| 82 | The symbol is referenced through a pointer to a pointer so that tools
 | 
|---|
| 83 | like the linker can fix up all the symbols of the same name by
 | 
|---|
| 84 | modifying only one pointer. The relocation routine looks in the symbol
 | 
|---|
| 85 | and uses the base of the section the symbol is attached to and the
 | 
|---|
| 86 | value of the symbol as the initial relocation offset. If the symbol
 | 
|---|
| 87 | pointer is zero, then the section provided is looked up.
 | 
|---|
| 88 | 
 | 
|---|
| 89 |    * `address'
 | 
|---|
| 90 |    The `address' field gives the offset in bytes from the base of the
 | 
|---|
| 91 | section data which owns the relocation record to the first byte of
 | 
|---|
| 92 | relocatable information. The actual data relocated will be relative to
 | 
|---|
| 93 | this point; for example, a relocation type which modifies the bottom
 | 
|---|
| 94 | two bytes of a four byte word would not touch the first byte pointed to
 | 
|---|
| 95 | in a big endian world.
 | 
|---|
| 96 | 
 | 
|---|
| 97 |    * `addend'
 | 
|---|
| 98 |    The `addend' is a value provided by the back end to be added (!)  to
 | 
|---|
| 99 | the relocation offset. Its interpretation is dependent upon the howto.
 | 
|---|
| 100 | For example, on the 68k the code:
 | 
|---|
| 101 | 
 | 
|---|
| 102 |              char foo[];
 | 
|---|
| 103 |              main()
 | 
|---|
| 104 |                      {
 | 
|---|
| 105 |                      return foo[0x12345678];
 | 
|---|
| 106 |                      }
 | 
|---|
| 107 | 
 | 
|---|
| 108 |    Could be compiled into:
 | 
|---|
| 109 | 
 | 
|---|
| 110 |              linkw fp,#-4
 | 
|---|
| 111 |              moveb @#12345678,d0
 | 
|---|
| 112 |              extbl d0
 | 
|---|
| 113 |              unlk fp
 | 
|---|
| 114 |              rts
 | 
|---|
| 115 | 
 | 
|---|
| 116 |    This could create a reloc pointing to `foo', but leave the offset in
 | 
|---|
| 117 | the data, something like:
 | 
|---|
| 118 | 
 | 
|---|
| 119 |      RELOCATION RECORDS FOR [.text]:
 | 
|---|
| 120 |      offset   type      value
 | 
|---|
| 121 |      00000006 32        _foo
 | 
|---|
| 122 |      
 | 
|---|
| 123 |      00000000 4e56 fffc          ; linkw fp,#-4
 | 
|---|
| 124 |      00000004 1039 1234 5678     ; moveb @#12345678,d0
 | 
|---|
| 125 |      0000000a 49c0               ; extbl d0
 | 
|---|
| 126 |      0000000c 4e5e               ; unlk fp
 | 
|---|
| 127 |      0000000e 4e75               ; rts
 | 
|---|
| 128 | 
 | 
|---|
| 129 |    Using coff and an 88k, some instructions don't have enough space in
 | 
|---|
| 130 | them to represent the full address range, and pointers have to be
 | 
|---|
| 131 | loaded in two parts. So you'd get something like:
 | 
|---|
| 132 | 
 | 
|---|
| 133 |              or.u     r13,r0,hi16(_foo+0x12345678)
 | 
|---|
| 134 |              ld.b     r2,r13,lo16(_foo+0x12345678)
 | 
|---|
| 135 |              jmp      r1
 | 
|---|
| 136 | 
 | 
|---|
| 137 |    This should create two relocs, both pointing to `_foo', and with
 | 
|---|
| 138 | 0x12340000 in their addend field. The data would consist of:
 | 
|---|
| 139 | 
 | 
|---|
| 140 |      RELOCATION RECORDS FOR [.text]:
 | 
|---|
| 141 |      offset   type      value
 | 
|---|
| 142 |      00000002 HVRT16    _foo+0x12340000
 | 
|---|
| 143 |      00000006 LVRT16    _foo+0x12340000
 | 
|---|
| 144 |      
 | 
|---|
| 145 |      00000000 5da05678           ; or.u r13,r0,0x5678
 | 
|---|
| 146 |      00000004 1c4d5678           ; ld.b r2,r13,0x5678
 | 
|---|
| 147 |      00000008 f400c001           ; jmp r1
 | 
|---|
| 148 | 
 | 
|---|
| 149 |    The relocation routine digs out the value from the data, adds it to
 | 
|---|
| 150 | the addend to get the original offset, and then adds the value of
 | 
|---|
| 151 | `_foo'. Note that all 32 bits have to be kept around somewhere, to cope
 | 
|---|
| 152 | with carry from bit 15 to bit 16.
 | 
|---|
| 153 | 
 | 
|---|
| 154 |    One further example is the sparc and the a.out format. The sparc has
 | 
|---|
| 155 | a similar problem to the 88k, in that some instructions don't have room
 | 
|---|
| 156 | for an entire offset, but on the sparc the parts are created in odd
 | 
|---|
| 157 | sized lumps. The designers of the a.out format chose to not use the
 | 
|---|
| 158 | data within the section for storing part of the offset; all the offset
 | 
|---|
| 159 | is kept within the reloc. Anything in the data should be ignored.
 | 
|---|
| 160 | 
 | 
|---|
| 161 |              save %sp,-112,%sp
 | 
|---|
| 162 |              sethi %hi(_foo+0x12345678),%g2
 | 
|---|
| 163 |              ldsb [%g2+%lo(_foo+0x12345678)],%i0
 | 
|---|
| 164 |              ret
 | 
|---|
| 165 |              restore
 | 
|---|
| 166 | 
 | 
|---|
| 167 |    Both relocs contain a pointer to `foo', and the offsets contain junk.
 | 
|---|
| 168 | 
 | 
|---|
| 169 |      RELOCATION RECORDS FOR [.text]:
 | 
|---|
| 170 |      offset   type      value
 | 
|---|
| 171 |      00000004 HI22      _foo+0x12345678
 | 
|---|
| 172 |      00000008 LO10      _foo+0x12345678
 | 
|---|
| 173 |      
 | 
|---|
| 174 |      00000000 9de3bf90     ; save %sp,-112,%sp
 | 
|---|
| 175 |      00000004 05000000     ; sethi %hi(_foo+0),%g2
 | 
|---|
| 176 |      00000008 f048a000     ; ldsb [%g2+%lo(_foo+0)],%i0
 | 
|---|
| 177 |      0000000c 81c7e008     ; ret
 | 
|---|
| 178 |      00000010 81e80000     ; restore
 | 
|---|
| 179 | 
 | 
|---|
| 180 |    * `howto'
 | 
|---|
| 181 |    The `howto' field can be imagined as a relocation instruction. It is
 | 
|---|
| 182 | a pointer to a structure which contains information on what to do with
 | 
|---|
| 183 | all of the other information in the reloc record and data section. A
 | 
|---|
| 184 | back end would normally have a relocation instruction set and turn
 | 
|---|
| 185 | relocations into pointers to the correct structure on input - but it
 | 
|---|
| 186 | would be possible to create each howto field on demand.
 | 
|---|
| 187 | 
 | 
|---|
| 188 | `enum complain_overflow'
 | 
|---|
| 189 | ........................
 | 
|---|
| 190 | 
 | 
|---|
| 191 |    Indicates what sort of overflow checking should be done when
 | 
|---|
| 192 | performing a relocation.
 | 
|---|
| 193 | 
 | 
|---|
| 194 | 
 | 
|---|
| 195 |      enum complain_overflow
 | 
|---|
| 196 |      {
 | 
|---|
| 197 |        /* Do not complain on overflow.  */
 | 
|---|
| 198 |        complain_overflow_dont,
 | 
|---|
| 199 |      
 | 
|---|
| 200 |        /* Complain if the bitfield overflows, whether it is considered
 | 
|---|
| 201 |           as signed or unsigned.  */
 | 
|---|
| 202 |        complain_overflow_bitfield,
 | 
|---|
| 203 |      
 | 
|---|
| 204 |        /* Complain if the value overflows when considered as signed
 | 
|---|
| 205 |           number.  */
 | 
|---|
| 206 |        complain_overflow_signed,
 | 
|---|
| 207 |      
 | 
|---|
| 208 |        /* Complain if the value overflows when considered as an
 | 
|---|
| 209 |           unsigned number.  */
 | 
|---|
| 210 |        complain_overflow_unsigned
 | 
|---|
| 211 |      };
 | 
|---|
| 212 | 
 | 
|---|
| 213 | `reloc_howto_type'
 | 
|---|
| 214 | ..................
 | 
|---|
| 215 | 
 | 
|---|
| 216 |    The `reloc_howto_type' is a structure which contains all the
 | 
|---|
| 217 | information that libbfd needs to know to tie up a back end's data.
 | 
|---|
| 218 | 
 | 
|---|
| 219 |      struct symbol_cache_entry;             /* Forward declaration.  */
 | 
|---|
| 220 |      
 | 
|---|
| 221 |      struct reloc_howto_struct
 | 
|---|
| 222 |      {
 | 
|---|
| 223 |        /*  The type field has mainly a documentary use - the back end can
 | 
|---|
| 224 |            do what it wants with it, though normally the back end's
 | 
|---|
| 225 |            external idea of what a reloc number is stored
 | 
|---|
| 226 |            in this field.  For example, a PC relative word relocation
 | 
|---|
| 227 |            in a coff environment has the type 023 - because that's
 | 
|---|
| 228 |            what the outside world calls a R_PCRWORD reloc.  */
 | 
|---|
| 229 |        unsigned int type;
 | 
|---|
| 230 |      
 | 
|---|
| 231 |        /*  The value the final relocation is shifted right by.  This drops
 | 
|---|
| 232 |            unwanted data from the relocation.  */
 | 
|---|
| 233 |        unsigned int rightshift;
 | 
|---|
| 234 |      
 | 
|---|
| 235 |        /*  The size of the item to be relocated.  This is *not* a
 | 
|---|
| 236 |            power-of-two measure.  To get the number of bytes operated
 | 
|---|
| 237 |            on by a type of relocation, use bfd_get_reloc_size.  */
 | 
|---|
| 238 |        int size;
 | 
|---|
| 239 |      
 | 
|---|
| 240 |        /*  The number of bits in the item to be relocated.  This is used
 | 
|---|
| 241 |            when doing overflow checking.  */
 | 
|---|
| 242 |        unsigned int bitsize;
 | 
|---|
| 243 |      
 | 
|---|
| 244 |        /*  Notes that the relocation is relative to the location in the
 | 
|---|
| 245 |            data section of the addend.  The relocation function will
 | 
|---|
| 246 |            subtract from the relocation value the address of the location
 | 
|---|
| 247 |            being relocated.  */
 | 
|---|
| 248 |        bfd_boolean pc_relative;
 | 
|---|
| 249 |      
 | 
|---|
| 250 |        /*  The bit position of the reloc value in the destination.
 | 
|---|
| 251 |            The relocated value is left shifted by this amount.  */
 | 
|---|
| 252 |        unsigned int bitpos;
 | 
|---|
| 253 |      
 | 
|---|
| 254 |        /* What type of overflow error should be checked for when
 | 
|---|
| 255 |           relocating.  */
 | 
|---|
| 256 |        enum complain_overflow complain_on_overflow;
 | 
|---|
| 257 |      
 | 
|---|
| 258 |        /* If this field is non null, then the supplied function is
 | 
|---|
| 259 |           called rather than the normal function.  This allows really
 | 
|---|
| 260 |           strange relocation methods to be accomodated (e.g., i960 callj
 | 
|---|
| 261 |           instructions).  */
 | 
|---|
| 262 |        bfd_reloc_status_type (*special_function)
 | 
|---|
| 263 |          PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR, asection *,
 | 
|---|
| 264 |                   bfd *, char **));
 | 
|---|
| 265 |      
 | 
|---|
| 266 |        /* The textual name of the relocation type.  */
 | 
|---|
| 267 |        char *name;
 | 
|---|
| 268 |      
 | 
|---|
| 269 |        /* Some formats record a relocation addend in the section contents
 | 
|---|
| 270 |           rather than with the relocation.  For ELF formats this is the
 | 
|---|
| 271 |           distinction between USE_REL and USE_RELA (though the code checks
 | 
|---|
| 272 |           for USE_REL == 1/0).  The value of this field is TRUE if the
 | 
|---|
| 273 |           addend is recorded with the section contents; when performing a
 | 
|---|
| 274 |           partial link (ld -r) the section contents (the data) will be
 | 
|---|
| 275 |           modified.  The value of this field is FALSE if addends are
 | 
|---|
| 276 |           recorded with the relocation (in arelent.addend); when performing
 | 
|---|
| 277 |           a partial link the relocation will be modified.
 | 
|---|
| 278 |           All relocations for all ELF USE_RELA targets should set this field
 | 
|---|
| 279 |           to FALSE (values of TRUE should be looked on with suspicion).
 | 
|---|
| 280 |           However, the converse is not true: not all relocations of all ELF
 | 
|---|
| 281 |           USE_REL targets set this field to TRUE.  Why this is so is peculiar
 | 
|---|
| 282 |           to each particular target.  For relocs that aren't used in partial
 | 
|---|
| 283 |           links (e.g. GOT stuff) it doesn't matter what this is set to.  */
 | 
|---|
| 284 |        bfd_boolean partial_inplace;
 | 
|---|
| 285 |      
 | 
|---|
| 286 |        /* src_mask selects the part of the instruction (or data) to be used
 | 
|---|
| 287 |           in the relocation sum.  If the target relocations don't have an
 | 
|---|
| 288 |           addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
 | 
|---|
| 289 |           dst_mask to extract the addend from the section contents.  If
 | 
|---|
| 290 |           relocations do have an addend in the reloc, eg. ELF USE_RELA, this
 | 
|---|
| 291 |           field should be zero.  Non-zero values for ELF USE_RELA targets are
 | 
|---|
| 292 |           bogus as in those cases the value in the dst_mask part of the
 | 
|---|
| 293 |           section contents should be treated as garbage.  */
 | 
|---|
| 294 |        bfd_vma src_mask;
 | 
|---|
| 295 |      
 | 
|---|
| 296 |        /* dst_mask selects which parts of the instruction (or data) are
 | 
|---|
| 297 |           replaced with a relocated value.  */
 | 
|---|
| 298 |        bfd_vma dst_mask;
 | 
|---|
| 299 |      
 | 
|---|
| 300 |        /* When some formats create PC relative instructions, they leave
 | 
|---|
| 301 |           the value of the pc of the place being relocated in the offset
 | 
|---|
| 302 |           slot of the instruction, so that a PC relative relocation can
 | 
|---|
| 303 |           be made just by adding in an ordinary offset (e.g., sun3 a.out).
 | 
|---|
| 304 |           Some formats leave the displacement part of an instruction
 | 
|---|
| 305 |           empty (e.g., m88k bcs); this flag signals the fact.  */
 | 
|---|
| 306 |        bfd_boolean pcrel_offset;
 | 
|---|
| 307 |      };
 | 
|---|
| 308 | 
 | 
|---|
| 309 | `The HOWTO Macro'
 | 
|---|
| 310 | .................
 | 
|---|
| 311 | 
 | 
|---|
| 312 |    *Description*
 | 
|---|
| 313 | The HOWTO define is horrible and will go away.
 | 
|---|
| 314 |      #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
 | 
|---|
| 315 |        { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
 | 
|---|
| 316 | 
 | 
|---|
| 317 |    *Description*
 | 
|---|
| 318 | And will be replaced with the totally magic way. But for the moment, we
 | 
|---|
| 319 | are compatible, so do it this way.
 | 
|---|
| 320 |      #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
 | 
|---|
| 321 |        HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
 | 
|---|
| 322 |               NAME, FALSE, 0, 0, IN)
 | 
|---|
| 323 | 
 | 
|---|
| 324 |    *Description*
 | 
|---|
| 325 | This is used to fill in an empty howto entry in an array.
 | 
|---|
| 326 |      #define EMPTY_HOWTO(C) \
 | 
|---|
| 327 |        HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
 | 
|---|
| 328 |               NULL, FALSE, 0, 0, FALSE)
 | 
|---|
| 329 | 
 | 
|---|
| 330 |    *Description*
 | 
|---|
| 331 | Helper routine to turn a symbol into a relocation value.
 | 
|---|
| 332 |      #define HOWTO_PREPARE(relocation, symbol)               \
 | 
|---|
| 333 |        {                                                     \
 | 
|---|
| 334 |          if (symbol != (asymbol *) NULL)                     \
 | 
|---|
| 335 |            {                                                 \
 | 
|---|
| 336 |              if (bfd_is_com_section (symbol->section))       \
 | 
|---|
| 337 |                {                                             \
 | 
|---|
| 338 |                  relocation = 0;                             \
 | 
|---|
| 339 |                }                                             \
 | 
|---|
| 340 |              else                                            \
 | 
|---|
| 341 |                {                                             \
 | 
|---|
| 342 |                  relocation = symbol->value;                 \
 | 
|---|
| 343 |                }                                             \
 | 
|---|
| 344 |            }                                                 \
 | 
|---|
| 345 |        }
 | 
|---|
| 346 | 
 | 
|---|
| 347 | `bfd_get_reloc_size'
 | 
|---|
| 348 | ....................
 | 
|---|
| 349 | 
 | 
|---|
| 350 |    *Synopsis*
 | 
|---|
| 351 |      unsigned int bfd_get_reloc_size (reloc_howto_type *);
 | 
|---|
| 352 |    *Description*
 | 
|---|
| 353 | For a reloc_howto_type that operates on a fixed number of bytes, this
 | 
|---|
| 354 | returns the number of bytes operated on.
 | 
|---|
| 355 | 
 | 
|---|
| 356 | `arelent_chain'
 | 
|---|
| 357 | ...............
 | 
|---|
| 358 | 
 | 
|---|
| 359 |    *Description*
 | 
|---|
| 360 | How relocs are tied together in an `asection':
 | 
|---|
| 361 |      typedef struct relent_chain
 | 
|---|
| 362 |      {
 | 
|---|
| 363 |        arelent relent;
 | 
|---|
| 364 |        struct relent_chain *next;
 | 
|---|
| 365 |      }
 | 
|---|
| 366 |      arelent_chain;
 | 
|---|
| 367 | 
 | 
|---|
| 368 | `bfd_check_overflow'
 | 
|---|
| 369 | ....................
 | 
|---|
| 370 | 
 | 
|---|
| 371 |    *Synopsis*
 | 
|---|
| 372 |      bfd_reloc_status_type
 | 
|---|
| 373 |      bfd_check_overflow
 | 
|---|
| 374 |         (enum complain_overflow how,
 | 
|---|
| 375 |          unsigned int bitsize,
 | 
|---|
| 376 |          unsigned int rightshift,
 | 
|---|
| 377 |          unsigned int addrsize,
 | 
|---|
| 378 |          bfd_vma relocation);
 | 
|---|
| 379 |    *Description*
 | 
|---|
| 380 | Perform overflow checking on RELOCATION which has BITSIZE significant
 | 
|---|
| 381 | bits and will be shifted right by RIGHTSHIFT bits, on a machine with
 | 
|---|
| 382 | addresses containing ADDRSIZE significant bits.  The result is either of
 | 
|---|
| 383 | `bfd_reloc_ok' or `bfd_reloc_overflow'.
 | 
|---|
| 384 | 
 | 
|---|
| 385 | `bfd_perform_relocation'
 | 
|---|
| 386 | ........................
 | 
|---|
| 387 | 
 | 
|---|
| 388 |    *Synopsis*
 | 
|---|
| 389 |      bfd_reloc_status_type
 | 
|---|
| 390 |      bfd_perform_relocation
 | 
|---|
| 391 |         (bfd *abfd,
 | 
|---|
| 392 |          arelent *reloc_entry,
 | 
|---|
| 393 |          PTR data,
 | 
|---|
| 394 |          asection *input_section,
 | 
|---|
| 395 |          bfd *output_bfd,
 | 
|---|
| 396 |          char **error_message);
 | 
|---|
| 397 |    *Description*
 | 
|---|
| 398 | If OUTPUT_BFD is supplied to this function, the generated image will be
 | 
|---|
| 399 | relocatable; the relocations are copied to the output file after they
 | 
|---|
| 400 | have been changed to reflect the new state of the world. There are two
 | 
|---|
| 401 | ways of reflecting the results of partial linkage in an output file: by
 | 
|---|
| 402 | modifying the output data in place, and by modifying the relocation
 | 
|---|
| 403 | record.  Some native formats (e.g., basic a.out and basic coff) have no
 | 
|---|
| 404 | way of specifying an addend in the relocation type, so the addend has
 | 
|---|
| 405 | to go in the output data.  This is no big deal since in these formats
 | 
|---|
| 406 | the output data slot will always be big enough for the addend. Complex
 | 
|---|
| 407 | reloc types with addends were invented to solve just this problem.  The
 | 
|---|
| 408 | ERROR_MESSAGE argument is set to an error message if this return
 | 
|---|
| 409 | `bfd_reloc_dangerous'.
 | 
|---|
| 410 | 
 | 
|---|
| 411 | `bfd_install_relocation'
 | 
|---|
| 412 | ........................
 | 
|---|
| 413 | 
 | 
|---|
| 414 |    *Synopsis*
 | 
|---|
| 415 |      bfd_reloc_status_type
 | 
|---|
| 416 |      bfd_install_relocation
 | 
|---|
| 417 |         (bfd *abfd,
 | 
|---|
| 418 |          arelent *reloc_entry,
 | 
|---|
| 419 |          PTR data, bfd_vma data_start,
 | 
|---|
| 420 |          asection *input_section,
 | 
|---|
| 421 |          char **error_message);
 | 
|---|
| 422 |    *Description*
 | 
|---|
| 423 | This looks remarkably like `bfd_perform_relocation', except it does not
 | 
|---|
| 424 | expect that the section contents have been filled in.  I.e., it's
 | 
|---|
| 425 | suitable for use when creating, rather than applying a relocation.
 | 
|---|
| 426 | 
 | 
|---|
| 427 |    For now, this function should be considered reserved for the
 | 
|---|
| 428 | assembler.
 | 
|---|
| 429 | 
 | 
|---|