1 /* BFD support for handling relocation entries.
2 Copyright (C) 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
3 Written by Cygnus Support.
5 This file is part of BFD, the Binary File Descriptor library.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 BFD maintains relocations in much the same way it maintains
26 symbols: they are left alone until required, then read in
27 en-mass and translated into an internal form. A common
28 routine <<bfd_perform_relocation>> acts upon the
29 canonical form to do the fixup.
31 Relocations are maintained on a per section basis,
32 while symbols are maintained on a per BFD basis.
34 All that a back end has to do to fit the BFD interface is to create
35 a <<struct reloc_cache_entry>> for each relocation
36 in a particular section, and fill in the right bits of the structures.
45 /* DO compile in the reloc_code name table from libbfd.h. */
46 #define _BFD_MAKE_TABLE_bfd_reloc_code_real
55 typedef arelent, howto manager, Relocations, Relocations
60 This is the structure of a relocation entry:
64 .typedef enum bfd_reloc_status
66 . {* No errors detected *}
69 . {* The relocation was performed, but there was an overflow. *}
72 . {* The address to relocate was not within the section supplied. *}
73 . bfd_reloc_outofrange,
75 . {* Used by special functions *}
78 . {* Unsupported relocation size requested. *}
79 . bfd_reloc_notsupported,
84 . {* The symbol to relocate against was undefined. *}
85 . bfd_reloc_undefined,
87 . {* The relocation was performed, but may not be ok - presently
88 . generated only when linking i960 coff files with i960 b.out
89 . symbols. If this type is returned, the error_message argument
90 . to bfd_perform_relocation will be set. *}
93 . bfd_reloc_status_type;
96 .typedef struct reloc_cache_entry
98 . {* A pointer into the canonical table of pointers *}
99 . struct symbol_cache_entry **sym_ptr_ptr;
101 . {* offset in section *}
102 . bfd_size_type address;
104 . {* addend for relocation value *}
107 . {* Pointer to how to perform the required relocation *}
108 . reloc_howto_type *howto;
117 Here is a description of each of the fields within an <<arelent>>:
121 The symbol table pointer points to a pointer to the symbol
122 associated with the relocation request. It is
123 the pointer into the table returned by the back end's
124 <<get_symtab>> action. @xref{Symbols}. The symbol is referenced
125 through a pointer to a pointer so that tools like the linker
126 can fix up all the symbols of the same name by modifying only
127 one pointer. The relocation routine looks in the symbol and
128 uses the base of the section the symbol is attached to and the
129 value of the symbol as the initial relocation offset. If the
130 symbol pointer is zero, then the section provided is looked up.
134 The <<address>> field gives the offset in bytes from the base of
135 the section data which owns the relocation record to the first
136 byte of relocatable information. The actual data relocated
137 will be relative to this point; for example, a relocation
138 type which modifies the bottom two bytes of a four byte word
139 would not touch the first byte pointed to in a big endian
144 The <<addend>> is a value provided by the back end to be added (!)
145 to the relocation offset. Its interpretation is dependent upon
146 the howto. For example, on the 68k the code:
152 | return foo[0x12345678];
155 Could be compiled into:
158 | moveb @@#12345678,d0
164 This could create a reloc pointing to <<foo>>, but leave the
165 offset in the data, something like:
168 |RELOCATION RECORDS FOR [.text]:
172 |00000000 4e56 fffc ; linkw fp,#-4
173 |00000004 1039 1234 5678 ; moveb @@#12345678,d0
174 |0000000a 49c0 ; extbl d0
175 |0000000c 4e5e ; unlk fp
179 Using coff and an 88k, some instructions don't have enough
180 space in them to represent the full address range, and
181 pointers have to be loaded in two parts. So you'd get something like:
184 | or.u r13,r0,hi16(_foo+0x12345678)
185 | ld.b r2,r13,lo16(_foo+0x12345678)
189 This should create two relocs, both pointing to <<_foo>>, and with
190 0x12340000 in their addend field. The data would consist of:
193 |RELOCATION RECORDS FOR [.text]:
195 |00000002 HVRT16 _foo+0x12340000
196 |00000006 LVRT16 _foo+0x12340000
198 |00000000 5da05678 ; or.u r13,r0,0x5678
199 |00000004 1c4d5678 ; ld.b r2,r13,0x5678
200 |00000008 f400c001 ; jmp r1
203 The relocation routine digs out the value from the data, adds
204 it to the addend to get the original offset, and then adds the
205 value of <<_foo>>. Note that all 32 bits have to be kept around
206 somewhere, to cope with carry from bit 15 to bit 16.
208 One further example is the sparc and the a.out format. The
209 sparc has a similar problem to the 88k, in that some
210 instructions don't have room for an entire offset, but on the
211 sparc the parts are created in odd sized lumps. The designers of
212 the a.out format chose to not use the data within the section
213 for storing part of the offset; all the offset is kept within
214 the reloc. Anything in the data should be ignored.
217 | sethi %hi(_foo+0x12345678),%g2
218 | ldsb [%g2+%lo(_foo+0x12345678)],%i0
222 Both relocs contain a pointer to <<foo>>, and the offsets
226 |RELOCATION RECORDS FOR [.text]:
228 |00000004 HI22 _foo+0x12345678
229 |00000008 LO10 _foo+0x12345678
231 |00000000 9de3bf90 ; save %sp,-112,%sp
232 |00000004 05000000 ; sethi %hi(_foo+0),%g2
233 |00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0
234 |0000000c 81c7e008 ; ret
235 |00000010 81e80000 ; restore
240 The <<howto>> field can be imagined as a
241 relocation instruction. It is a pointer to a structure which
242 contains information on what to do with all of the other
243 information in the reloc record and data section. A back end
244 would normally have a relocation instruction set and turn
245 relocations into pointers to the correct structure on input -
246 but it would be possible to create each howto field on demand.
252 <<enum complain_overflow>>
254 Indicates what sort of overflow checking should be done when
255 performing a relocation.
259 .enum complain_overflow
261 . {* Do not complain on overflow. *}
262 . complain_overflow_dont,
264 . {* Complain if the bitfield overflows, whether it is considered
265 . as signed or unsigned. *}
266 . complain_overflow_bitfield,
268 . {* Complain if the value overflows when considered as signed
270 . complain_overflow_signed,
272 . {* Complain if the value overflows when considered as an
273 . unsigned number. *}
274 . complain_overflow_unsigned
283 The <<reloc_howto_type>> is a structure which contains all the
284 information that libbfd needs to know to tie up a back end's data.
287 .struct symbol_cache_entry; {* Forward declaration *}
289 .struct reloc_howto_struct
291 . {* The type field has mainly a documetary use - the back end can
292 . do what it wants with it, though normally the back end's
293 . external idea of what a reloc number is stored
294 . in this field. For example, a PC relative word relocation
295 . in a coff environment has the type 023 - because that's
296 . what the outside world calls a R_PCRWORD reloc. *}
299 . {* The value the final relocation is shifted right by. This drops
300 . unwanted data from the relocation. *}
301 . unsigned int rightshift;
303 . {* The size of the item to be relocated. This is *not* a
304 . power-of-two measure. To get the number of bytes operated
305 . on by a type of relocation, use bfd_get_reloc_size. *}
308 . {* The number of bits in the item to be relocated. This is used
309 . when doing overflow checking. *}
310 . unsigned int bitsize;
312 . {* Notes that the relocation is relative to the location in the
313 . data section of the addend. The relocation function will
314 . subtract from the relocation value the address of the location
315 . being relocated. *}
316 . boolean pc_relative;
318 . {* The bit position of the reloc value in the destination.
319 . The relocated value is left shifted by this amount. *}
320 . unsigned int bitpos;
322 . {* What type of overflow error should be checked for when
324 . enum complain_overflow complain_on_overflow;
326 . {* If this field is non null, then the supplied function is
327 . called rather than the normal function. This allows really
328 . strange relocation methods to be accomodated (e.g., i960 callj
330 . bfd_reloc_status_type (*special_function)
331 . PARAMS ((bfd *abfd,
332 . arelent *reloc_entry,
333 . struct symbol_cache_entry *symbol,
335 . asection *input_section,
337 . char **error_message));
339 . {* The textual name of the relocation type. *}
342 . {* When performing a partial link, some formats must modify the
343 . relocations rather than the data - this flag signals this.*}
344 . boolean partial_inplace;
346 . {* The src_mask selects which parts of the read in data
347 . are to be used in the relocation sum. E.g., if this was an 8 bit
348 . bit of data which we read and relocated, this would be
349 . 0x000000ff. When we have relocs which have an addend, such as
350 . sun4 extended relocs, the value in the offset part of a
351 . relocating field is garbage so we never use it. In this case
352 . the mask would be 0x00000000. *}
355 . {* The dst_mask selects which parts of the instruction are replaced
356 . into the instruction. In most cases src_mask == dst_mask,
357 . except in the above special case, where dst_mask would be
358 . 0x000000ff, and src_mask would be 0x00000000. *}
361 . {* When some formats create PC relative instructions, they leave
362 . the value of the pc of the place being relocated in the offset
363 . slot of the instruction, so that a PC relative relocation can
364 . be made just by adding in an ordinary offset (e.g., sun3 a.out).
365 . Some formats leave the displacement part of an instruction
366 . empty (e.g., m88k bcs); this flag signals the fact.*}
367 . boolean pcrel_offset;
378 The HOWTO define is horrible and will go away.
381 .#define HOWTO(C, R,S,B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
382 . {(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
385 And will be replaced with the totally magic way. But for the
386 moment, we are compatible, so do it this way.
389 .#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
392 Helper routine to turn a symbol into a relocation value.
394 .#define HOWTO_PREPARE(relocation, symbol) \
396 . if (symbol != (asymbol *)NULL) { \
397 . if (bfd_is_com_section (symbol->section)) { \
401 . relocation = symbol->value; \
413 int bfd_get_reloc_size (reloc_howto_type *);
416 For a reloc_howto_type that operates on a fixed number of bytes,
417 this returns the number of bytes operated on.
421 bfd_get_reloc_size (howto
)
422 reloc_howto_type
*howto
;
442 How relocs are tied together in an <<asection>>:
444 .typedef struct relent_chain {
446 . struct relent_chain *next;
455 bfd_perform_relocation
458 bfd_reloc_status_type
459 bfd_perform_relocation
461 arelent *reloc_entry,
463 asection *input_section,
465 char **error_message);
468 If @var{output_bfd} is supplied to this function, the
469 generated image will be relocatable; the relocations are
470 copied to the output file after they have been changed to
471 reflect the new state of the world. There are two ways of
472 reflecting the results of partial linkage in an output file:
473 by modifying the output data in place, and by modifying the
474 relocation record. Some native formats (e.g., basic a.out and
475 basic coff) have no way of specifying an addend in the
476 relocation type, so the addend has to go in the output data.
477 This is no big deal since in these formats the output data
478 slot will always be big enough for the addend. Complex reloc
479 types with addends were invented to solve just this problem.
480 The @var{error_message} argument is set to an error message if
481 this return @code{bfd_reloc_dangerous}.
486 bfd_reloc_status_type
487 bfd_perform_relocation (abfd
, reloc_entry
, data
, input_section
, output_bfd
,
490 arelent
*reloc_entry
;
492 asection
*input_section
;
494 char **error_message
;
497 bfd_reloc_status_type flag
= bfd_reloc_ok
;
498 bfd_size_type addr
= reloc_entry
->address
;
499 bfd_vma output_base
= 0;
500 reloc_howto_type
*howto
= reloc_entry
->howto
;
501 asection
*reloc_target_output_section
;
504 symbol
= *(reloc_entry
->sym_ptr_ptr
);
505 if (bfd_is_abs_section (symbol
->section
)
506 && output_bfd
!= (bfd
*) NULL
)
508 reloc_entry
->address
+= input_section
->output_offset
;
512 /* If we are not producing relocateable output, return an error if
513 the symbol is not defined. An undefined weak symbol is
514 considered to have a value of zero (SVR4 ABI, p. 4-27). */
515 if (bfd_is_und_section (symbol
->section
)
516 && (symbol
->flags
& BSF_WEAK
) == 0
517 && output_bfd
== (bfd
*) NULL
)
518 flag
= bfd_reloc_undefined
;
520 /* If there is a function supplied to handle this relocation type,
521 call it. It'll return `bfd_reloc_continue' if further processing
523 if (howto
->special_function
)
525 bfd_reloc_status_type cont
;
526 cont
= howto
->special_function (abfd
, reloc_entry
, symbol
, data
,
527 input_section
, output_bfd
,
529 if (cont
!= bfd_reloc_continue
)
533 /* Is the address of the relocation really within the section? */
534 if (reloc_entry
->address
> input_section
->_cooked_size
)
535 return bfd_reloc_outofrange
;
537 /* Work out which section the relocation is targetted at and the
538 initial relocation command value. */
540 /* Get symbol value. (Common symbols are special.) */
541 if (bfd_is_com_section (symbol
->section
))
544 relocation
= symbol
->value
;
547 reloc_target_output_section
= symbol
->section
->output_section
;
549 /* Convert input-section-relative symbol value to absolute. */
550 if (output_bfd
&& howto
->partial_inplace
== false)
553 output_base
= reloc_target_output_section
->vma
;
555 relocation
+= output_base
+ symbol
->section
->output_offset
;
557 /* Add in supplied addend. */
558 relocation
+= reloc_entry
->addend
;
560 /* Here the variable relocation holds the final address of the
561 symbol we are relocating against, plus any addend. */
563 if (howto
->pc_relative
== true)
565 /* This is a PC relative relocation. We want to set RELOCATION
566 to the distance between the address of the symbol and the
567 location. RELOCATION is already the address of the symbol.
569 We start by subtracting the address of the section containing
572 If pcrel_offset is set, we must further subtract the position
573 of the location within the section. Some targets arrange for
574 the addend to be the negative of the position of the location
575 within the section; for example, i386-aout does this. For
576 i386-aout, pcrel_offset is false. Some other targets do not
577 include the position of the location; for example, m88kbcs,
578 or ELF. For those targets, pcrel_offset is true.
580 If we are producing relocateable output, then we must ensure
581 that this reloc will be correctly computed when the final
582 relocation is done. If pcrel_offset is false we want to wind
583 up with the negative of the location within the section,
584 which means we must adjust the existing addend by the change
585 in the location within the section. If pcrel_offset is true
586 we do not want to adjust the existing addend at all.
588 FIXME: This seems logical to me, but for the case of
589 producing relocateable output it is not what the code
590 actually does. I don't want to change it, because it seems
591 far too likely that something will break. */
594 input_section
->output_section
->vma
+ input_section
->output_offset
;
596 if (howto
->pcrel_offset
== true)
597 relocation
-= reloc_entry
->address
;
600 if (output_bfd
!= (bfd
*) NULL
)
602 if (howto
->partial_inplace
== false)
604 /* This is a partial relocation, and we want to apply the relocation
605 to the reloc entry rather than the raw data. Modify the reloc
606 inplace to reflect what we now know. */
607 reloc_entry
->addend
= relocation
;
608 reloc_entry
->address
+= input_section
->output_offset
;
613 /* This is a partial relocation, but inplace, so modify the
616 If we've relocated with a symbol with a section, change
617 into a ref to the section belonging to the symbol. */
619 reloc_entry
->address
+= input_section
->output_offset
;
622 if (abfd
->xvec
->flavour
== bfd_target_coff_flavour
623 && strcmp (abfd
->xvec
->name
, "aixcoff-rs6000") != 0
624 && strcmp (abfd
->xvec
->name
, "coff-Intel-little") != 0
625 && strcmp (abfd
->xvec
->name
, "coff-Intel-big") != 0)
628 /* For m68k-coff, the addend was being subtracted twice during
629 relocation with -r. Removing the line below this comment
630 fixes that problem; see PR 2953.
632 However, Ian wrote the following, regarding removing the line below,
633 which explains why it is still enabled: --djm
635 If you put a patch like that into BFD you need to check all the COFF
636 linkers. I am fairly certain that patch will break coff-i386 (e.g.,
637 SCO); see coff_i386_reloc in coff-i386.c where I worked around the
638 problem in a different way. There may very well be a reason that the
639 code works as it does.
641 Hmmm. The first obvious point is that bfd_perform_relocation should
642 not have any tests that depend upon the flavour. It's seem like
643 entirely the wrong place for such a thing. The second obvious point
644 is that the current code ignores the reloc addend when producing
645 relocateable output for COFF. That's peculiar. In fact, I really
646 have no idea what the point of the line you want to remove is.
648 A typical COFF reloc subtracts the old value of the symbol and adds in
649 the new value to the location in the object file (if it's a pc
650 relative reloc it adds the difference between the symbol value and the
651 location). When relocating we need to preserve that property.
653 BFD handles this by setting the addend to the negative of the old
654 value of the symbol. Unfortunately it handles common symbols in a
655 non-standard way (it doesn't subtract the old value) but that's a
656 different story (we can't change it without losing backward
657 compatibility with old object files) (coff-i386 does subtract the old
658 value, to be compatible with existing coff-i386 targets, like SCO).
660 So everything works fine when not producing relocateable output. When
661 we are producing relocateable output, logically we should do exactly
662 what we do when not producing relocateable output. Therefore, your
663 patch is correct. In fact, it should probably always just set
664 reloc_entry->addend to 0 for all cases, since it is, in fact, going to
665 add the value into the object file. This won't hurt the COFF code,
666 which doesn't use the addend; I'm not sure what it will do to other
667 formats (the thing to check for would be whether any formats both use
668 the addend and set partial_inplace).
670 When I wanted to make coff-i386 produce relocateable output, I ran
671 into the problem that you are running into: I wanted to remove that
672 line. Rather than risk it, I made the coff-i386 relocs use a special
673 function; it's coff_i386_reloc in coff-i386.c. The function
674 specifically adds the addend field into the object file, knowing that
675 bfd_perform_relocation is not going to. If you remove that line, then
676 coff-i386.c will wind up adding the addend field in twice. It's
677 trivial to fix; it just needs to be done.
679 The problem with removing the line is just that it may break some
680 working code. With BFD it's hard to be sure of anything. The right
681 way to deal with this is simply to build and test at least all the
682 supported COFF targets. It should be straightforward if time and disk
683 space consuming. For each target:
685 2) generate some executable, and link it using -r (I would
686 probably use paranoia.o and link against newlib/libc.a, which
687 for all the supported targets would be available in
688 /usr/cygnus/progressive/H-host/target/lib/libc.a).
689 3) make the change to reloc.c
690 4) rebuild the linker
692 6) if the resulting object files are the same, you have at least
694 7) if they are different you have to figure out which version is
697 relocation
-= reloc_entry
->addend
;
699 reloc_entry
->addend
= 0;
703 reloc_entry
->addend
= relocation
;
709 reloc_entry
->addend
= 0;
712 /* FIXME: This overflow checking is incomplete, because the value
713 might have overflowed before we get here. For a correct check we
714 need to compute the value in a size larger than bitsize, but we
715 can't reasonably do that for a reloc the same size as a host
717 FIXME: We should also do overflow checking on the result after
718 adding in the value contained in the object file. */
719 if (howto
->complain_on_overflow
!= complain_overflow_dont
720 && flag
== bfd_reloc_ok
)
724 /* Get the value that will be used for the relocation, but
725 starting at bit position zero. */
726 check
= relocation
>> howto
->rightshift
;
727 switch (howto
->complain_on_overflow
)
729 case complain_overflow_signed
:
731 /* Assumes two's complement. */
732 bfd_signed_vma reloc_signed_max
= (1 << (howto
->bitsize
- 1)) - 1;
733 bfd_signed_vma reloc_signed_min
= ~reloc_signed_max
;
735 /* The above right shift is incorrect for a signed value.
736 Fix it up by forcing on the upper bits. */
737 if (howto
->rightshift
> 0
738 && (bfd_signed_vma
) relocation
< 0)
739 check
|= ((bfd_vma
) - 1
741 >> howto
->rightshift
));
742 if ((bfd_signed_vma
) check
> reloc_signed_max
743 || (bfd_signed_vma
) check
< reloc_signed_min
)
744 flag
= bfd_reloc_overflow
;
747 case complain_overflow_unsigned
:
749 /* Assumes two's complement. This expression avoids
750 overflow if howto->bitsize is the number of bits in
752 bfd_vma reloc_unsigned_max
=
753 (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
755 if ((bfd_vma
) check
> reloc_unsigned_max
)
756 flag
= bfd_reloc_overflow
;
759 case complain_overflow_bitfield
:
761 /* Assumes two's complement. This expression avoids
762 overflow if howto->bitsize is the number of bits in
764 bfd_vma reloc_bits
= (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
766 if (((bfd_vma
) check
& ~reloc_bits
) != 0
767 && ((bfd_vma
) check
& ~reloc_bits
) != (-1 & ~reloc_bits
))
769 /* The above right shift is incorrect for a signed
770 value. See if turning on the upper bits fixes the
772 if (howto
->rightshift
> 0
773 && (bfd_signed_vma
) relocation
< 0)
775 check
|= ((bfd_vma
) - 1
777 >> howto
->rightshift
));
778 if (((bfd_vma
) check
& ~reloc_bits
) != (-1 & ~reloc_bits
))
779 flag
= bfd_reloc_overflow
;
782 flag
= bfd_reloc_overflow
;
792 Either we are relocating all the way, or we don't want to apply
793 the relocation to the reloc entry (probably because there isn't
794 any room in the output format to describe addends to relocs)
797 /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
798 (OSF version 1.3, compiler version 3.11). It miscompiles the
812 x <<= (unsigned long) s.i0;
816 printf ("succeeded (%lx)\n", x);
820 relocation
>>= (bfd_vma
) howto
->rightshift
;
822 /* Shift everything up to where it's going to be used */
824 relocation
<<= (bfd_vma
) howto
->bitpos
;
826 /* Wait for the day when all have the mask in them */
829 i instruction to be left alone
830 o offset within instruction
831 r relocation offset to apply
840 i i i i i o o o o o from bfd_get<size>
841 and S S S S S to get the size offset we want
842 + r r r r r r r r r r to get the final value to place
843 and D D D D D to chop to right size
844 -----------------------
847 ... i i i i i o o o o o from bfd_get<size>
848 and N N N N N get instruction
849 -----------------------
855 -----------------------
856 R R R R R R R R R R put into bfd_put<size>
860 x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask))
866 char x
= bfd_get_8 (abfd
, (char *) data
+ addr
);
868 bfd_put_8 (abfd
, x
, (unsigned char *) data
+ addr
);
875 short x
= bfd_get_16 (abfd
, (bfd_byte
*) data
+ addr
);
877 bfd_put_16 (abfd
, x
, (unsigned char *) data
+ addr
);
883 long x
= bfd_get_32 (abfd
, (bfd_byte
*) data
+ addr
);
885 bfd_put_32 (abfd
, x
, (bfd_byte
*) data
+ addr
);
890 long x
= bfd_get_32 (abfd
, (bfd_byte
*) data
+ addr
);
891 relocation
= -relocation
;
893 bfd_put_32 (abfd
, x
, (bfd_byte
*) data
+ addr
);
899 long x
= bfd_get_16 (abfd
, (bfd_byte
*) data
+ addr
);
900 relocation
= -relocation
;
902 bfd_put_16 (abfd
, x
, (bfd_byte
*) data
+ addr
);
914 bfd_vma x
= bfd_get_64 (abfd
, (bfd_byte
*) data
+ addr
);
916 bfd_put_64 (abfd
, x
, (bfd_byte
*) data
+ addr
);
923 return bfd_reloc_other
;
931 bfd_install_relocation
934 bfd_reloc_status_type
935 bfd_install_relocation
937 arelent *reloc_entry,
938 PTR data, bfd_vma data_start,
939 asection *input_section,
940 char **error_message);
943 This looks remarkably like <<bfd_perform_relocation>>, except it
944 does not expect that the section contents have been filled in.
945 I.e., it's suitable for use when creating, rather than applying
948 For now, this function should be considered reserved for the
954 bfd_reloc_status_type
955 bfd_install_relocation (abfd
, reloc_entry
, data_start
, data_start_offset
,
956 input_section
, error_message
)
958 arelent
*reloc_entry
;
960 bfd_vma data_start_offset
;
961 asection
*input_section
;
962 char **error_message
;
965 bfd_reloc_status_type flag
= bfd_reloc_ok
;
966 bfd_size_type addr
= reloc_entry
->address
;
967 bfd_vma output_base
= 0;
968 reloc_howto_type
*howto
= reloc_entry
->howto
;
969 asection
*reloc_target_output_section
;
973 symbol
= *(reloc_entry
->sym_ptr_ptr
);
974 if (bfd_is_abs_section (symbol
->section
))
976 reloc_entry
->address
+= input_section
->output_offset
;
980 /* If there is a function supplied to handle this relocation type,
981 call it. It'll return `bfd_reloc_continue' if further processing
983 if (howto
->special_function
)
985 bfd_reloc_status_type cont
;
986 /* XXX - The special_function calls haven't been fixed up to deal
987 with creating new relocations and section contents. */
988 cont
= howto
->special_function (abfd
, reloc_entry
, symbol
,
989 /* XXX - Non-portable! */
990 ((bfd_byte
*) data_start
991 - data_start_offset
),
992 input_section
, abfd
, error_message
);
993 if (cont
!= bfd_reloc_continue
)
997 /* Is the address of the relocation really within the section? */
998 if (reloc_entry
->address
> input_section
->_cooked_size
)
999 return bfd_reloc_outofrange
;
1001 /* Work out which section the relocation is targetted at and the
1002 initial relocation command value. */
1004 /* Get symbol value. (Common symbols are special.) */
1005 if (bfd_is_com_section (symbol
->section
))
1008 relocation
= symbol
->value
;
1011 reloc_target_output_section
= symbol
->section
->output_section
;
1013 /* Convert input-section-relative symbol value to absolute. */
1014 if (howto
->partial_inplace
== false)
1017 output_base
= reloc_target_output_section
->vma
;
1019 relocation
+= output_base
+ symbol
->section
->output_offset
;
1021 /* Add in supplied addend. */
1022 relocation
+= reloc_entry
->addend
;
1024 /* Here the variable relocation holds the final address of the
1025 symbol we are relocating against, plus any addend. */
1027 if (howto
->pc_relative
== true)
1029 /* This is a PC relative relocation. We want to set RELOCATION
1030 to the distance between the address of the symbol and the
1031 location. RELOCATION is already the address of the symbol.
1033 We start by subtracting the address of the section containing
1036 If pcrel_offset is set, we must further subtract the position
1037 of the location within the section. Some targets arrange for
1038 the addend to be the negative of the position of the location
1039 within the section; for example, i386-aout does this. For
1040 i386-aout, pcrel_offset is false. Some other targets do not
1041 include the position of the location; for example, m88kbcs,
1042 or ELF. For those targets, pcrel_offset is true.
1044 If we are producing relocateable output, then we must ensure
1045 that this reloc will be correctly computed when the final
1046 relocation is done. If pcrel_offset is false we want to wind
1047 up with the negative of the location within the section,
1048 which means we must adjust the existing addend by the change
1049 in the location within the section. If pcrel_offset is true
1050 we do not want to adjust the existing addend at all.
1052 FIXME: This seems logical to me, but for the case of
1053 producing relocateable output it is not what the code
1054 actually does. I don't want to change it, because it seems
1055 far too likely that something will break. */
1058 input_section
->output_section
->vma
+ input_section
->output_offset
;
1060 if (howto
->pcrel_offset
== true && howto
->partial_inplace
== true)
1061 relocation
-= reloc_entry
->address
;
1064 if (howto
->partial_inplace
== false)
1066 /* This is a partial relocation, and we want to apply the relocation
1067 to the reloc entry rather than the raw data. Modify the reloc
1068 inplace to reflect what we now know. */
1069 reloc_entry
->addend
= relocation
;
1070 reloc_entry
->address
+= input_section
->output_offset
;
1075 /* This is a partial relocation, but inplace, so modify the
1078 If we've relocated with a symbol with a section, change
1079 into a ref to the section belonging to the symbol. */
1081 reloc_entry
->address
+= input_section
->output_offset
;
1084 if (abfd
->xvec
->flavour
== bfd_target_coff_flavour
1085 && strcmp (abfd
->xvec
->name
, "aixcoff-rs6000") != 0
1086 && strcmp (abfd
->xvec
->name
, "coff-Intel-little") != 0
1087 && strcmp (abfd
->xvec
->name
, "coff-Intel-big") != 0)
1090 /* For m68k-coff, the addend was being subtracted twice during
1091 relocation with -r. Removing the line below this comment
1092 fixes that problem; see PR 2953.
1094 However, Ian wrote the following, regarding removing the line below,
1095 which explains why it is still enabled: --djm
1097 If you put a patch like that into BFD you need to check all the COFF
1098 linkers. I am fairly certain that patch will break coff-i386 (e.g.,
1099 SCO); see coff_i386_reloc in coff-i386.c where I worked around the
1100 problem in a different way. There may very well be a reason that the
1101 code works as it does.
1103 Hmmm. The first obvious point is that bfd_install_relocation should
1104 not have any tests that depend upon the flavour. It's seem like
1105 entirely the wrong place for such a thing. The second obvious point
1106 is that the current code ignores the reloc addend when producing
1107 relocateable output for COFF. That's peculiar. In fact, I really
1108 have no idea what the point of the line you want to remove is.
1110 A typical COFF reloc subtracts the old value of the symbol and adds in
1111 the new value to the location in the object file (if it's a pc
1112 relative reloc it adds the difference between the symbol value and the
1113 location). When relocating we need to preserve that property.
1115 BFD handles this by setting the addend to the negative of the old
1116 value of the symbol. Unfortunately it handles common symbols in a
1117 non-standard way (it doesn't subtract the old value) but that's a
1118 different story (we can't change it without losing backward
1119 compatibility with old object files) (coff-i386 does subtract the old
1120 value, to be compatible with existing coff-i386 targets, like SCO).
1122 So everything works fine when not producing relocateable output. When
1123 we are producing relocateable output, logically we should do exactly
1124 what we do when not producing relocateable output. Therefore, your
1125 patch is correct. In fact, it should probably always just set
1126 reloc_entry->addend to 0 for all cases, since it is, in fact, going to
1127 add the value into the object file. This won't hurt the COFF code,
1128 which doesn't use the addend; I'm not sure what it will do to other
1129 formats (the thing to check for would be whether any formats both use
1130 the addend and set partial_inplace).
1132 When I wanted to make coff-i386 produce relocateable output, I ran
1133 into the problem that you are running into: I wanted to remove that
1134 line. Rather than risk it, I made the coff-i386 relocs use a special
1135 function; it's coff_i386_reloc in coff-i386.c. The function
1136 specifically adds the addend field into the object file, knowing that
1137 bfd_install_relocation is not going to. If you remove that line, then
1138 coff-i386.c will wind up adding the addend field in twice. It's
1139 trivial to fix; it just needs to be done.
1141 The problem with removing the line is just that it may break some
1142 working code. With BFD it's hard to be sure of anything. The right
1143 way to deal with this is simply to build and test at least all the
1144 supported COFF targets. It should be straightforward if time and disk
1145 space consuming. For each target:
1147 2) generate some executable, and link it using -r (I would
1148 probably use paranoia.o and link against newlib/libc.a, which
1149 for all the supported targets would be available in
1150 /usr/cygnus/progressive/H-host/target/lib/libc.a).
1151 3) make the change to reloc.c
1152 4) rebuild the linker
1154 6) if the resulting object files are the same, you have at least
1156 7) if they are different you have to figure out which version is
1159 relocation
-= reloc_entry
->addend
;
1161 reloc_entry
->addend
= 0;
1165 reloc_entry
->addend
= relocation
;
1169 /* FIXME: This overflow checking is incomplete, because the value
1170 might have overflowed before we get here. For a correct check we
1171 need to compute the value in a size larger than bitsize, but we
1172 can't reasonably do that for a reloc the same size as a host
1175 FIXME: We should also do overflow checking on the result after
1176 adding in the value contained in the object file. */
1177 if (howto
->complain_on_overflow
!= complain_overflow_dont
)
1181 /* Get the value that will be used for the relocation, but
1182 starting at bit position zero. */
1183 check
= relocation
>> howto
->rightshift
;
1184 switch (howto
->complain_on_overflow
)
1186 case complain_overflow_signed
:
1188 /* Assumes two's complement. */
1189 bfd_signed_vma reloc_signed_max
= (1 << (howto
->bitsize
- 1)) - 1;
1190 bfd_signed_vma reloc_signed_min
= ~reloc_signed_max
;
1192 /* The above right shift is incorrect for a signed value.
1193 Fix it up by forcing on the upper bits. */
1194 if (howto
->rightshift
> 0
1195 && (bfd_signed_vma
) relocation
< 0)
1196 check
|= ((bfd_vma
) - 1
1198 >> howto
->rightshift
));
1199 if ((bfd_signed_vma
) check
> reloc_signed_max
1200 || (bfd_signed_vma
) check
< reloc_signed_min
)
1201 flag
= bfd_reloc_overflow
;
1204 case complain_overflow_unsigned
:
1206 /* Assumes two's complement. This expression avoids
1207 overflow if howto->bitsize is the number of bits in
1209 bfd_vma reloc_unsigned_max
=
1210 (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
1212 if ((bfd_vma
) check
> reloc_unsigned_max
)
1213 flag
= bfd_reloc_overflow
;
1216 case complain_overflow_bitfield
:
1218 /* Assumes two's complement. This expression avoids
1219 overflow if howto->bitsize is the number of bits in
1221 bfd_vma reloc_bits
= (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
1223 if (((bfd_vma
) check
& ~reloc_bits
) != 0
1224 && ((bfd_vma
) check
& ~reloc_bits
) != (-1 & ~reloc_bits
))
1226 /* The above right shift is incorrect for a signed
1227 value. See if turning on the upper bits fixes the
1229 if (howto
->rightshift
> 0
1230 && (bfd_signed_vma
) relocation
< 0)
1232 check
|= ((bfd_vma
) - 1
1234 >> howto
->rightshift
));
1235 if (((bfd_vma
) check
& ~reloc_bits
) != (-1 & ~reloc_bits
))
1236 flag
= bfd_reloc_overflow
;
1239 flag
= bfd_reloc_overflow
;
1249 Either we are relocating all the way, or we don't want to apply
1250 the relocation to the reloc entry (probably because there isn't
1251 any room in the output format to describe addends to relocs)
1254 /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
1255 (OSF version 1.3, compiler version 3.11). It miscompiles the
1269 x <<= (unsigned long) s.i0;
1271 printf ("failed\n");
1273 printf ("succeeded (%lx)\n", x);
1277 relocation
>>= (bfd_vma
) howto
->rightshift
;
1279 /* Shift everything up to where it's going to be used */
1281 relocation
<<= (bfd_vma
) howto
->bitpos
;
1283 /* Wait for the day when all have the mask in them */
1286 i instruction to be left alone
1287 o offset within instruction
1288 r relocation offset to apply
1297 i i i i i o o o o o from bfd_get<size>
1298 and S S S S S to get the size offset we want
1299 + r r r r r r r r r r to get the final value to place
1300 and D D D D D to chop to right size
1301 -----------------------
1304 ... i i i i i o o o o o from bfd_get<size>
1305 and N N N N N get instruction
1306 -----------------------
1312 -----------------------
1313 R R R R R R R R R R put into bfd_put<size>
1317 x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask))
1319 data
= (bfd_byte
*) data_start
+ (addr
- data_start_offset
);
1321 switch (howto
->size
)
1325 char x
= bfd_get_8 (abfd
, (char *) data
);
1327 bfd_put_8 (abfd
, x
, (unsigned char *) data
);
1334 short x
= bfd_get_16 (abfd
, (bfd_byte
*) data
);
1336 bfd_put_16 (abfd
, x
, (unsigned char *) data
);
1342 long x
= bfd_get_32 (abfd
, (bfd_byte
*) data
);
1344 bfd_put_32 (abfd
, x
, (bfd_byte
*) data
);
1349 long x
= bfd_get_32 (abfd
, (bfd_byte
*) data
);
1350 relocation
= -relocation
;
1352 bfd_put_32 (abfd
, x
, (bfd_byte
*) data
);
1363 bfd_vma x
= bfd_get_64 (abfd
, (bfd_byte
*) data
);
1365 bfd_put_64 (abfd
, x
, (bfd_byte
*) data
);
1369 return bfd_reloc_other
;
1375 /* This relocation routine is used by some of the backend linkers.
1376 They do not construct asymbol or arelent structures, so there is no
1377 reason for them to use bfd_perform_relocation. Also,
1378 bfd_perform_relocation is so hacked up it is easier to write a new
1379 function than to try to deal with it.
1381 This routine does a final relocation. It should not be used when
1382 generating relocateable output.
1384 FIXME: This routine ignores any special_function in the HOWTO,
1385 since the existing special_function values have been written for
1386 bfd_perform_relocation.
1388 HOWTO is the reloc howto information.
1389 INPUT_BFD is the BFD which the reloc applies to.
1390 INPUT_SECTION is the section which the reloc applies to.
1391 CONTENTS is the contents of the section.
1392 ADDRESS is the address of the reloc within INPUT_SECTION.
1393 VALUE is the value of the symbol the reloc refers to.
1394 ADDEND is the addend of the reloc. */
1396 bfd_reloc_status_type
1397 _bfd_final_link_relocate (howto
, input_bfd
, input_section
, contents
, address
,
1399 reloc_howto_type
*howto
;
1401 asection
*input_section
;
1409 /* Sanity check the address. */
1410 if (address
> input_section
->_cooked_size
)
1411 return bfd_reloc_outofrange
;
1413 /* This function assumes that we are dealing with a basic relocation
1414 against a symbol. We want to compute the value of the symbol to
1415 relocate to. This is just VALUE, the value of the symbol, plus
1416 ADDEND, any addend associated with the reloc. */
1417 relocation
= value
+ addend
;
1419 /* If the relocation is PC relative, we want to set RELOCATION to
1420 the distance between the symbol (currently in RELOCATION) and the
1421 location we are relocating. Some targets (e.g., i386-aout)
1422 arrange for the contents of the section to be the negative of the
1423 offset of the location within the section; for such targets
1424 pcrel_offset is false. Other targets (e.g., m88kbcs or ELF)
1425 simply leave the contents of the section as zero; for such
1426 targets pcrel_offset is true. If pcrel_offset is false we do not
1427 need to subtract out the offset of the location within the
1428 section (which is just ADDRESS). */
1429 if (howto
->pc_relative
)
1431 relocation
-= (input_section
->output_section
->vma
1432 + input_section
->output_offset
);
1433 if (howto
->pcrel_offset
)
1434 relocation
-= address
;
1437 return _bfd_relocate_contents (howto
, input_bfd
, relocation
,
1438 contents
+ address
);
1441 /* Relocate a given location using a given value and howto. */
1443 bfd_reloc_status_type
1444 _bfd_relocate_contents (howto
, input_bfd
, relocation
, location
)
1445 reloc_howto_type
*howto
;
1454 /* If the size is negative, negate RELOCATION. This isn't very
1456 if (howto
->size
< 0)
1457 relocation
= -relocation
;
1459 /* Get the value we are going to relocate. */
1460 size
= bfd_get_reloc_size (howto
);
1467 x
= bfd_get_8 (input_bfd
, location
);
1470 x
= bfd_get_16 (input_bfd
, location
);
1473 x
= bfd_get_32 (input_bfd
, location
);
1477 x
= bfd_get_64 (input_bfd
, location
);
1484 /* Check for overflow. FIXME: We may drop bits during the addition
1485 which we don't check for. We must either check at every single
1486 operation, which would be tedious, or we must do the computations
1487 in a type larger than bfd_vma, which would be inefficient. */
1489 if (howto
->complain_on_overflow
!= complain_overflow_dont
)
1492 bfd_signed_vma signed_check
;
1494 bfd_signed_vma signed_add
;
1496 if (howto
->rightshift
== 0)
1499 signed_check
= (bfd_signed_vma
) relocation
;
1503 /* Drop unwanted bits from the value we are relocating to. */
1504 check
= relocation
>> howto
->rightshift
;
1506 /* If this is a signed value, the rightshift just dropped
1507 leading 1 bits (assuming twos complement). */
1508 if ((bfd_signed_vma
) relocation
>= 0)
1509 signed_check
= check
;
1511 signed_check
= (check
1513 & ~((bfd_vma
) - 1 >> howto
->rightshift
)));
1516 /* Get the value from the object file. */
1517 add
= x
& howto
->src_mask
;
1519 /* Get the value from the object file with an appropriate sign.
1520 The expression involving howto->src_mask isolates the upper
1521 bit of src_mask. If that bit is set in the value we are
1522 adding, it is negative, and we subtract out that number times
1523 two. If src_mask includes the highest possible bit, then we
1524 can not get the upper bit, but that does not matter since
1525 signed_add needs no adjustment to become negative in that
1528 if ((add
& (((~howto
->src_mask
) >> 1) & howto
->src_mask
)) != 0)
1529 signed_add
-= (((~howto
->src_mask
) >> 1) & howto
->src_mask
) << 1;
1531 /* Add the value from the object file, shifted so that it is a
1533 if (howto
->bitpos
== 0)
1536 signed_check
+= signed_add
;
1540 check
+= add
>> howto
->bitpos
;
1542 /* For the signed case we use ADD, rather than SIGNED_ADD,
1543 to avoid warnings from SVR4 cc. This is OK since we
1544 explictly handle the sign bits. */
1545 if (signed_add
>= 0)
1546 signed_check
+= add
>> howto
->bitpos
;
1548 signed_check
+= ((add
>> howto
->bitpos
)
1550 & ~((bfd_vma
) - 1 >> howto
->bitpos
)));
1553 switch (howto
->complain_on_overflow
)
1555 case complain_overflow_signed
:
1557 /* Assumes two's complement. */
1558 bfd_signed_vma reloc_signed_max
= (1 << (howto
->bitsize
- 1)) - 1;
1559 bfd_signed_vma reloc_signed_min
= ~reloc_signed_max
;
1561 if (signed_check
> reloc_signed_max
1562 || signed_check
< reloc_signed_min
)
1566 case complain_overflow_unsigned
:
1568 /* Assumes two's complement. This expression avoids
1569 overflow if howto->bitsize is the number of bits in
1571 bfd_vma reloc_unsigned_max
=
1572 (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
1574 if (check
> reloc_unsigned_max
)
1578 case complain_overflow_bitfield
:
1580 /* Assumes two's complement. This expression avoids
1581 overflow if howto->bitsize is the number of bits in
1583 bfd_vma reloc_bits
= (((1 << (howto
->bitsize
- 1)) - 1) << 1) | 1;
1585 if ((check
& ~reloc_bits
) != 0
1586 && (((bfd_vma
) signed_check
& ~reloc_bits
)
1587 != (-1 & ~reloc_bits
)))
1596 /* Put RELOCATION in the right bits. */
1597 relocation
>>= (bfd_vma
) howto
->rightshift
;
1598 relocation
<<= (bfd_vma
) howto
->bitpos
;
1600 /* Add RELOCATION to the right bits of X. */
1601 x
= ((x
& ~howto
->dst_mask
)
1602 | (((x
& howto
->src_mask
) + relocation
) & howto
->dst_mask
));
1604 /* Put the relocated value back in the object file. */
1611 bfd_put_8 (input_bfd
, x
, location
);
1614 bfd_put_16 (input_bfd
, x
, location
);
1617 bfd_put_32 (input_bfd
, x
, location
);
1621 bfd_put_64 (input_bfd
, x
, location
);
1628 return overflow
? bfd_reloc_overflow
: bfd_reloc_ok
;
1634 howto manager, , typedef arelent, Relocations
1639 When an application wants to create a relocation, but doesn't
1640 know what the target machine might call it, it can find out by
1641 using this bit of code.
1650 The insides of a reloc code. The idea is that, eventually, there
1651 will be one enumerator for every type of relocation we ever do.
1652 Pass one of these values to <<bfd_reloc_type_lookup>>, and it'll
1653 return a howto pointer.
1655 This does mean that the application must determine the correct
1656 enumerator value; you can't get a howto pointer from a random set
1675 Basic absolute relocations of N bits.
1690 PC-relative relocations. Sometimes these are relative to the address
1691 of the relocation itself; sometimes they are relative to the start of
1692 the section containing the relocation. It depends on the specific target.
1694 The 24-bit relocation is used in some Intel 960 configurations.
1697 BFD_RELOC_32_GOT_PCREL
1699 BFD_RELOC_16_GOT_PCREL
1701 BFD_RELOC_8_GOT_PCREL
1707 BFD_RELOC_LO16_GOTOFF
1709 BFD_RELOC_HI16_GOTOFF
1711 BFD_RELOC_HI16_S_GOTOFF
1715 BFD_RELOC_32_PLT_PCREL
1717 BFD_RELOC_24_PLT_PCREL
1719 BFD_RELOC_16_PLT_PCREL
1721 BFD_RELOC_8_PLT_PCREL
1727 BFD_RELOC_LO16_PLTOFF
1729 BFD_RELOC_HI16_PLTOFF
1731 BFD_RELOC_HI16_S_PLTOFF
1738 BFD_RELOC_68K_GLOB_DAT
1740 BFD_RELOC_68K_JMP_SLOT
1742 BFD_RELOC_68K_RELATIVE
1744 Relocations used by 68K ELF.
1747 BFD_RELOC_32_BASEREL
1749 BFD_RELOC_16_BASEREL
1751 BFD_RELOC_LO16_BASEREL
1753 BFD_RELOC_HI16_BASEREL
1755 BFD_RELOC_HI16_S_BASEREL
1761 Linkage-table relative.
1766 Absolute 8-bit relocation, but used to form an address like 0xFFnn.
1769 BFD_RELOC_32_PCREL_S2
1771 BFD_RELOC_16_PCREL_S2
1773 BFD_RELOC_23_PCREL_S2
1775 These PC-relative relocations are stored as word displacements --
1776 i.e., byte displacements shifted right two bits. The 30-bit word
1777 displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1778 SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
1779 signed 16-bit displacement is used on the MIPS, and the 23-bit
1780 displacement is used on the Alpha.
1787 High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1788 the target word. These are used on the SPARC.
1795 For systems that allocate a Global Pointer register, these are
1796 displacements off that register. These relocation types are
1797 handled specially, because the value the register will have is
1798 decided relatively late.
1802 BFD_RELOC_I960_CALLJ
1804 Reloc types used for i960/b.out.
1809 BFD_RELOC_SPARC_WDISP22
1815 BFD_RELOC_SPARC_GOT10
1817 BFD_RELOC_SPARC_GOT13
1819 BFD_RELOC_SPARC_GOT22
1821 BFD_RELOC_SPARC_PC10
1823 BFD_RELOC_SPARC_PC22
1825 BFD_RELOC_SPARC_WPLT30
1827 BFD_RELOC_SPARC_COPY
1829 BFD_RELOC_SPARC_GLOB_DAT
1831 BFD_RELOC_SPARC_JMP_SLOT
1833 BFD_RELOC_SPARC_RELATIVE
1835 BFD_RELOC_SPARC_UA32
1837 SPARC ELF relocations. There is probably some overlap with other
1838 relocation types already defined.
1841 BFD_RELOC_SPARC_BASE13
1843 BFD_RELOC_SPARC_BASE22
1845 I think these are specific to SPARC a.out (e.g., Sun 4).
1855 BFD_RELOC_SPARC_OLO10
1857 BFD_RELOC_SPARC_HH22
1859 BFD_RELOC_SPARC_HM10
1861 BFD_RELOC_SPARC_LM22
1863 BFD_RELOC_SPARC_PC_HH22
1865 BFD_RELOC_SPARC_PC_HM10
1867 BFD_RELOC_SPARC_PC_LM22
1869 BFD_RELOC_SPARC_WDISP16
1871 BFD_RELOC_SPARC_WDISP19
1873 BFD_RELOC_SPARC_GLOB_JMP
1881 Some relocations we're using for SPARC V9 -- subject to change.
1884 BFD_RELOC_ALPHA_GPDISP_HI16
1886 Alpha ECOFF relocations. Some of these treat the symbol or "addend"
1887 in some special way.
1888 For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
1889 writing; when reading, it will be the absolute section symbol. The
1890 addend is the displacement in bytes of the "lda" instruction from
1891 the "ldah" instruction (which is at the address of this reloc).
1893 BFD_RELOC_ALPHA_GPDISP_LO16
1895 For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
1896 with GPDISP_HI16 relocs. The addend is ignored when writing the
1897 relocations out, and is filled in with the file's GP value on
1898 reading, for convenience.
1901 BFD_RELOC_ALPHA_LITERAL
1903 BFD_RELOC_ALPHA_LITUSE
1905 The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
1906 the assembler turns it into a LDQ instruction to load the address of
1907 the symbol, and then fills in a register in the real instruction.
1909 The LITERAL reloc, at the LDQ instruction, refers to the .lita
1910 section symbol. The addend is ignored when writing, but is filled
1911 in with the file's GP value on reading, for convenience, as with the
1914 The LITUSE reloc, on the instruction using the loaded address, gives
1915 information to the linker that it might be able to use to optimize
1916 away some literal section references. The symbol is ignored (read
1917 as the absolute section symbol), and the "addend" indicates the type
1918 of instruction using the register:
1919 1 - "memory" fmt insn
1920 2 - byte-manipulation (byte offset reg)
1921 3 - jsr (target of branch)
1923 The GNU linker currently doesn't do any of this optimizing.
1926 BFD_RELOC_ALPHA_HINT
1928 The HINT relocation indicates a value that should be filled into the
1929 "hint" field of a jmp/jsr/ret instruction, for possible branch-
1930 prediction logic which may be provided on some processors.
1935 Bits 27..2 of the relocation address shifted right 2 bits;
1936 simple reloc otherwise.
1941 High 16 bits of 32-bit value; simple reloc.
1945 High 16 bits of 32-bit value but the low 16 bits will be sign
1946 extended and added to form the final result. If the low 16
1947 bits form a negative number, we need to add one to the high value
1948 to compensate for the borrow when the low bits are added.
1954 BFD_RELOC_PCREL_HI16_S
1956 Like BFD_RELOC_HI16_S, but PC relative.
1958 BFD_RELOC_PCREL_LO16
1960 Like BFD_RELOC_LO16, but PC relative.
1963 BFD_RELOC_MIPS_GPREL
1966 Relocation relative to the global pointer.
1969 BFD_RELOC_MIPS_LITERAL
1971 Relocation against a MIPS literal section.
1974 BFD_RELOC_MIPS_GOT16
1976 BFD_RELOC_MIPS_CALL16
1978 BFD_RELOC_MIPS_GPREL32
1981 BFD_RELOC_MIPS_GOT_HI16
1983 BFD_RELOC_MIPS_GOT_LO16
1985 MIPS ELF relocations.
1994 BFD_RELOC_386_GLOB_DAT
1996 BFD_RELOC_386_JUMP_SLOT
1998 BFD_RELOC_386_RELATIVE
2000 BFD_RELOC_386_GOTOFF
2004 i386/elf relocations
2007 BFD_RELOC_NS32K_IMM_8
2009 BFD_RELOC_NS32K_IMM_16
2011 BFD_RELOC_NS32K_IMM_32
2013 BFD_RELOC_NS32K_IMM_8_PCREL
2015 BFD_RELOC_NS32K_IMM_16_PCREL
2017 BFD_RELOC_NS32K_IMM_32_PCREL
2019 BFD_RELOC_NS32K_DISP_8
2021 BFD_RELOC_NS32K_DISP_16
2023 BFD_RELOC_NS32K_DISP_32
2025 BFD_RELOC_NS32K_DISP_8_PCREL
2027 BFD_RELOC_NS32K_DISP_16_PCREL
2029 BFD_RELOC_NS32K_DISP_32_PCREL
2042 BFD_RELOC_PPC_B16_BRTAKEN
2044 BFD_RELOC_PPC_B16_BRNTAKEN
2048 BFD_RELOC_PPC_BA16_BRTAKEN
2050 BFD_RELOC_PPC_BA16_BRNTAKEN
2054 BFD_RELOC_PPC_GLOB_DAT
2056 BFD_RELOC_PPC_JMP_SLOT
2058 BFD_RELOC_PPC_RELATIVE
2060 BFD_RELOC_PPC_LOCAL24PC
2062 BFD_RELOC_PPC_EMB_NADDR32
2064 BFD_RELOC_PPC_EMB_NADDR16
2066 BFD_RELOC_PPC_EMB_NADDR16_LO
2068 BFD_RELOC_PPC_EMB_NADDR16_HI
2070 BFD_RELOC_PPC_EMB_NADDR16_HA
2072 BFD_RELOC_PPC_EMB_SDAI16
2074 BFD_RELOC_PPC_EMB_SDA2I16
2076 BFD_RELOC_PPC_EMB_SDA2REL
2078 BFD_RELOC_PPC_EMB_SDA21
2080 BFD_RELOC_PPC_EMB_MRKREF
2082 BFD_RELOC_PPC_EMB_RELSEC16
2084 BFD_RELOC_PPC_EMB_RELST_LO
2086 BFD_RELOC_PPC_EMB_RELST_HI
2088 BFD_RELOC_PPC_EMB_RELST_HA
2090 BFD_RELOC_PPC_EMB_BIT_FLD
2092 BFD_RELOC_PPC_EMB_RELSDA
2094 Power(rs6000) and PowerPC relocations.
2099 The type of reloc used to build a contructor table - at the moment
2100 probably a 32 bit wide absolute relocation, but the target can choose.
2101 It generally does map to one of the other relocation types.
2104 BFD_RELOC_ARM_PCREL_BRANCH
2106 ARM 26 bit pc-relative branch. The lowest two bits must be zero and are
2107 not stored in the instruction.
2109 BFD_RELOC_ARM_IMMEDIATE
2111 BFD_RELOC_ARM_OFFSET_IMM
2113 BFD_RELOC_ARM_SHIFT_IMM
2119 BFD_RELOC_ARM_CP_OFF_IMM
2121 BFD_RELOC_ARM_ADR_IMM
2123 BFD_RELOC_ARM_LDR_IMM
2125 BFD_RELOC_ARM_LITERAL
2127 BFD_RELOC_ARM_IN_POOL
2129 These relocs are only used within the ARM assembler. They are not
2130 (at present) written to any object files.
2133 {* start-sanitize-arc *}
2135 BFD_RELOC_ARC_B22_PCREL
2137 Argonaut RISC Core (ARC) relocs.
2138 ARC 22 bit pc-relative branch. The lowest two bits must be zero and are
2139 not stored in the instruction. The high 20 bits are installed in bits 26
2140 through 7 of the instruction.
2144 ARC 26 bit absolute branch. The lowest two bits must be zero and are not
2145 stored in the instruction. The high 24 bits are installed in bits 23
2148 {* end-sanitize-arc *}
2153 .typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
2159 bfd_reloc_type_lookup
2163 bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);
2166 Return a pointer to a howto structure which, when
2167 invoked, will perform the relocation @var{code} on data from the
2174 bfd_reloc_type_lookup (abfd
, code
)
2176 bfd_reloc_code_real_type code
;
2178 return BFD_SEND (abfd
, reloc_type_lookup
, (abfd
, code
));
2181 static reloc_howto_type bfd_howto_32
=
2182 HOWTO (0, 00, 2, 32, false, 0, complain_overflow_bitfield
, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
2187 bfd_default_reloc_type_lookup
2190 reloc_howto_type *bfd_default_reloc_type_lookup
2191 (bfd *abfd, bfd_reloc_code_real_type code);
2194 Provides a default relocation lookup routine for any architecture.
2200 bfd_default_reloc_type_lookup (abfd
, code
)
2202 bfd_reloc_code_real_type code
;
2206 case BFD_RELOC_CTOR
:
2207 /* The type of reloc used in a ctor, which will be as wide as the
2208 address - so either a 64, 32, or 16 bitter. */
2209 switch (bfd_get_arch_info (abfd
)->bits_per_address
)
2214 return &bfd_howto_32
;
2223 return (reloc_howto_type
*) NULL
;
2228 bfd_get_reloc_code_name
2231 const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
2234 Provides a printable name for the supplied relocation code.
2235 Useful mainly for printing error messages.
2239 bfd_get_reloc_code_name (code
)
2240 bfd_reloc_code_real_type code
;
2242 if (code
> BFD_RELOC_UNUSED
)
2244 return bfd_reloc_code_real_names
[(int)code
];
2249 bfd_generic_relax_section
2252 boolean bfd_generic_relax_section
2255 struct bfd_link_info *,
2259 Provides default handling for relaxing for back ends which
2260 don't do relaxing -- i.e., does nothing.
2265 bfd_generic_relax_section (abfd
, section
, link_info
, again
)
2268 struct bfd_link_info
*link_info
;
2277 bfd_generic_get_relocated_section_contents
2281 bfd_generic_get_relocated_section_contents (bfd *abfd,
2282 struct bfd_link_info *link_info,
2283 struct bfd_link_order *link_order,
2285 boolean relocateable,
2289 Provides default handling of relocation effort for back ends
2290 which can't be bothered to do it efficiently.
2295 bfd_generic_get_relocated_section_contents (abfd
, link_info
, link_order
, data
,
2296 relocateable
, symbols
)
2298 struct bfd_link_info
*link_info
;
2299 struct bfd_link_order
*link_order
;
2301 boolean relocateable
;
2304 /* Get enough memory to hold the stuff */
2305 bfd
*input_bfd
= link_order
->u
.indirect
.section
->owner
;
2306 asection
*input_section
= link_order
->u
.indirect
.section
;
2308 long reloc_size
= bfd_get_reloc_upper_bound (input_bfd
, input_section
);
2309 arelent
**reloc_vector
= NULL
;
2315 reloc_vector
= (arelent
**) bfd_malloc ((size_t) reloc_size
);
2316 if (reloc_vector
== NULL
&& reloc_size
!= 0)
2319 /* read in the section */
2320 if (!bfd_get_section_contents (input_bfd
,
2324 input_section
->_raw_size
))
2327 /* We're not relaxing the section, so just copy the size info */
2328 input_section
->_cooked_size
= input_section
->_raw_size
;
2329 input_section
->reloc_done
= true;
2331 reloc_count
= bfd_canonicalize_reloc (input_bfd
,
2335 if (reloc_count
< 0)
2338 if (reloc_count
> 0)
2341 for (parent
= reloc_vector
; *parent
!= (arelent
*) NULL
;
2344 char *error_message
= (char *) NULL
;
2345 bfd_reloc_status_type r
=
2346 bfd_perform_relocation (input_bfd
,
2350 relocateable
? abfd
: (bfd
*) NULL
,
2355 asection
*os
= input_section
->output_section
;
2357 /* A partial link, so keep the relocs */
2358 os
->orelocation
[os
->reloc_count
] = *parent
;
2362 if (r
!= bfd_reloc_ok
)
2366 case bfd_reloc_undefined
:
2367 if (!((*link_info
->callbacks
->undefined_symbol
)
2368 (link_info
, bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
2369 input_bfd
, input_section
, (*parent
)->address
)))
2372 case bfd_reloc_dangerous
:
2373 BFD_ASSERT (error_message
!= (char *) NULL
);
2374 if (!((*link_info
->callbacks
->reloc_dangerous
)
2375 (link_info
, error_message
, input_bfd
, input_section
,
2376 (*parent
)->address
)))
2379 case bfd_reloc_overflow
:
2380 if (!((*link_info
->callbacks
->reloc_overflow
)
2381 (link_info
, bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
2382 (*parent
)->howto
->name
, (*parent
)->addend
,
2383 input_bfd
, input_section
, (*parent
)->address
)))
2386 case bfd_reloc_outofrange
:
2395 if (reloc_vector
!= NULL
)
2396 free (reloc_vector
);
2400 if (reloc_vector
!= NULL
)
2401 free (reloc_vector
);