* elf32-v850.c (enum reloc_type): Add R_V850_SDA_OFFSET,
[external/binutils.git] / bfd / reloc.c
1 /* BFD support for handling relocation entries.
2    Copyright (C) 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
3    Written by Cygnus Support.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
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.
11
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.
16
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.  */
20
21 /*
22 SECTION
23         Relocations
24
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.
30
31         Relocations are maintained on a per section basis,
32         while symbols are maintained on a per BFD basis.
33
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.
37
38 @menu
39 @* typedef arelent::
40 @* howto manager::
41 @end menu
42
43 */
44
45 /* DO compile in the reloc_code name table from libbfd.h.  */
46 #define _BFD_MAKE_TABLE_bfd_reloc_code_real
47
48 #include "bfd.h"
49 #include "sysdep.h"
50 #include "bfdlink.h"
51 #include "libbfd.h"
52 /*
53 DOCDD
54 INODE
55         typedef arelent, howto manager, Relocations, Relocations
56
57 SUBSECTION
58         typedef arelent
59
60         This is the structure of a relocation entry:
61
62 CODE_FRAGMENT
63 .
64 .typedef enum bfd_reloc_status
65 .{
66 .       {* No errors detected *}
67 .  bfd_reloc_ok,
68 .
69 .       {* The relocation was performed, but there was an overflow. *}
70 .  bfd_reloc_overflow,
71 .
72 .       {* The address to relocate was not within the section supplied. *}
73 .  bfd_reloc_outofrange,
74 .
75 .       {* Used by special functions *}
76 .  bfd_reloc_continue,
77 .
78 .       {* Unsupported relocation size requested. *}
79 .  bfd_reloc_notsupported,
80 .
81 .       {* Unused *}
82 .  bfd_reloc_other,
83 .
84 .       {* The symbol to relocate against was undefined. *}
85 .  bfd_reloc_undefined,
86 .
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.  *}
91 .  bfd_reloc_dangerous
92 . }
93 . bfd_reloc_status_type;
94 .
95 .
96 .typedef struct reloc_cache_entry
97 .{
98 .       {* A pointer into the canonical table of pointers  *}
99 .  struct symbol_cache_entry **sym_ptr_ptr;
100 .
101 .       {* offset in section *}
102 .  bfd_size_type address;
103 .
104 .       {* addend for relocation value *}
105 .  bfd_vma addend;
106 .
107 .       {* Pointer to how to perform the required relocation *}
108 .  reloc_howto_type *howto;
109 .
110 .} arelent;
111
112 */
113
114 /*
115 DESCRIPTION
116
117         Here is a description of each of the fields within an <<arelent>>:
118
119         o <<sym_ptr_ptr>>
120
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.
131
132         o <<address>>
133
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
140         world.
141
142         o <<addend>>
143
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:
147
148
149 |        char foo[];
150 |        main()
151 |                {
152 |                return foo[0x12345678];
153 |                }
154
155         Could be compiled into:
156
157 |        linkw fp,#-4
158 |        moveb @@#12345678,d0
159 |        extbl d0
160 |        unlk fp
161 |        rts
162
163
164         This could create a reloc pointing to <<foo>>, but leave the
165         offset in the data, something like:
166
167
168 |RELOCATION RECORDS FOR [.text]:
169 |offset   type      value
170 |00000006 32        _foo
171 |
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
176 |0000000e 4e75               ; rts
177
178
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:
182
183
184 |        or.u     r13,r0,hi16(_foo+0x12345678)
185 |        ld.b     r2,r13,lo16(_foo+0x12345678)
186 |        jmp      r1
187
188
189         This should create two relocs, both pointing to <<_foo>>, and with
190         0x12340000 in their addend field. The data would consist of:
191
192
193 |RELOCATION RECORDS FOR [.text]:
194 |offset   type      value
195 |00000002 HVRT16    _foo+0x12340000
196 |00000006 LVRT16    _foo+0x12340000
197 |
198 |00000000 5da05678           ; or.u r13,r0,0x5678
199 |00000004 1c4d5678           ; ld.b r2,r13,0x5678
200 |00000008 f400c001           ; jmp r1
201
202
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.
207
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.
215
216 |        save %sp,-112,%sp
217 |        sethi %hi(_foo+0x12345678),%g2
218 |        ldsb [%g2+%lo(_foo+0x12345678)],%i0
219 |        ret
220 |        restore
221
222         Both relocs contain a pointer to <<foo>>, and the offsets
223         contain junk.
224
225
226 |RELOCATION RECORDS FOR [.text]:
227 |offset   type      value
228 |00000004 HI22      _foo+0x12345678
229 |00000008 LO10      _foo+0x12345678
230 |
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
236
237
238         o <<howto>>
239
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.
247
248 */
249
250 /*
251 SUBSUBSECTION
252         <<enum complain_overflow>>
253
254         Indicates what sort of overflow checking should be done when
255         performing a relocation.
256
257 CODE_FRAGMENT
258 .
259 .enum complain_overflow
260 .{
261 .       {* Do not complain on overflow. *}
262 .  complain_overflow_dont,
263 .
264 .       {* Complain if the bitfield overflows, whether it is considered
265 .          as signed or unsigned. *}
266 .  complain_overflow_bitfield,
267 .
268 .       {* Complain if the value overflows when considered as signed
269 .          number. *}
270 .  complain_overflow_signed,
271 .
272 .       {* Complain if the value overflows when considered as an
273 .          unsigned number. *}
274 .  complain_overflow_unsigned
275 .};
276
277 */
278
279 /*
280 SUBSUBSECTION
281         <<reloc_howto_type>>
282
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.
285
286 CODE_FRAGMENT
287 .struct symbol_cache_entry;             {* Forward declaration *}
288 .
289 .struct reloc_howto_struct
290 .{
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. *}
297 .  unsigned int type;
298 .
299 .       {*  The value the final relocation is shifted right by. This drops
300 .           unwanted data from the relocation.  *}
301 .  unsigned int rightshift;
302 .
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.  *}
306 .  int size;
307 .
308 .       {*  The number of bits in the item to be relocated.  This is used
309 .           when doing overflow checking.  *}
310 .  unsigned int bitsize;
311 .
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;
317 .
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;
321 .
322 .       {* What type of overflow error should be checked for when
323 .          relocating. *}
324 .  enum complain_overflow complain_on_overflow;
325 .
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
329 .          instructions). *}
330 .  bfd_reloc_status_type (*special_function)
331 .                                   PARAMS ((bfd *abfd,
332 .                                            arelent *reloc_entry,
333 .                                            struct symbol_cache_entry *symbol,
334 .                                            PTR data,
335 .                                            asection *input_section,
336 .                                            bfd *output_bfd,
337 .                                            char **error_message));
338 .
339 .       {* The textual name of the relocation type. *}
340 .  char *name;
341 .
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;
345 .
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. *}
353 .  bfd_vma src_mask;
354 .
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.   *}
359 .  bfd_vma dst_mask;
360 .
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;
368 .
369 .};
370
371 */
372
373 /*
374 FUNCTION
375         The HOWTO Macro
376
377 DESCRIPTION
378         The HOWTO define is horrible and will go away.
379
380
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}
383
384 DESCRIPTION
385         And will be replaced with the totally magic way. But for the
386         moment, we are compatible, so do it this way.
387
388
389 .#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
390 .
391 DESCRIPTION
392         Helper routine to turn a symbol into a relocation value.
393
394 .#define HOWTO_PREPARE(relocation, symbol)      \
395 .  {                                            \
396 .  if (symbol != (asymbol *)NULL) {             \
397 .    if (bfd_is_com_section (symbol->section)) { \
398 .      relocation = 0;                          \
399 .    }                                          \
400 .    else {                                     \
401 .      relocation = symbol->value;              \
402 .    }                                          \
403 .  }                                            \
404 .}
405
406 */
407
408 /*
409 FUNCTION
410         bfd_get_reloc_size
411
412 SYNOPSIS
413         int bfd_get_reloc_size (reloc_howto_type *);
414
415 DESCRIPTION
416         For a reloc_howto_type that operates on a fixed number of bytes,
417         this returns the number of bytes operated on.
418  */
419
420 int
421 bfd_get_reloc_size (howto)
422      reloc_howto_type *howto;
423 {
424   switch (howto->size)
425     {
426     case 0: return 1;
427     case 1: return 2;
428     case 2: return 4;
429     case 3: return 0;
430     case 4: return 8;
431     case 8: return 16;
432     case -2: return 4;
433     default: abort ();
434     }
435 }
436
437 /*
438 TYPEDEF
439         arelent_chain
440
441 DESCRIPTION
442
443         How relocs are tied together in an <<asection>>:
444
445 .typedef struct relent_chain {
446 .  arelent relent;
447 .  struct   relent_chain *next;
448 .} arelent_chain;
449
450 */
451
452
453
454 /*
455 FUNCTION
456         bfd_perform_relocation
457
458 SYNOPSIS
459         bfd_reloc_status_type
460                 bfd_perform_relocation
461                         (bfd *abfd,
462                          arelent *reloc_entry,
463                          PTR data,
464                          asection *input_section,
465                          bfd *output_bfd,
466                          char **error_message);
467
468 DESCRIPTION
469         If @var{output_bfd} is supplied to this function, the
470         generated image will be relocatable; the relocations are
471         copied to the output file after they have been changed to
472         reflect the new state of the world. There are two ways of
473         reflecting the results of partial linkage in an output file:
474         by modifying the output data in place, and by modifying the
475         relocation record.  Some native formats (e.g., basic a.out and
476         basic coff) have no way of specifying an addend in the
477         relocation type, so the addend has to go in the output data.
478         This is no big deal since in these formats the output data
479         slot will always be big enough for the addend. Complex reloc
480         types with addends were invented to solve just this problem.
481         The @var{error_message} argument is set to an error message if
482         this return @code{bfd_reloc_dangerous}.
483
484 */
485
486
487 bfd_reloc_status_type
488 bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
489                         error_message)
490      bfd *abfd;
491      arelent *reloc_entry;
492      PTR data;
493      asection *input_section;
494      bfd *output_bfd;
495      char **error_message;
496 {
497   bfd_vma relocation;
498   bfd_reloc_status_type flag = bfd_reloc_ok;
499   bfd_size_type addr = reloc_entry->address;
500   bfd_vma output_base = 0;
501   reloc_howto_type *howto = reloc_entry->howto;
502   asection *reloc_target_output_section;
503   asymbol *symbol;
504
505   symbol = *(reloc_entry->sym_ptr_ptr);
506   if (bfd_is_abs_section (symbol->section)
507       && output_bfd != (bfd *) NULL)
508     {
509       reloc_entry->address += input_section->output_offset;
510       return bfd_reloc_ok;
511     }
512
513   /* If we are not producing relocateable output, return an error if
514      the symbol is not defined.  An undefined weak symbol is
515      considered to have a value of zero (SVR4 ABI, p. 4-27).  */
516   if (bfd_is_und_section (symbol->section)
517       && (symbol->flags & BSF_WEAK) == 0
518       && output_bfd == (bfd *) NULL)
519     flag = bfd_reloc_undefined;
520
521   /* If there is a function supplied to handle this relocation type,
522      call it.  It'll return `bfd_reloc_continue' if further processing
523      can be done.  */
524   if (howto->special_function)
525     {
526       bfd_reloc_status_type cont;
527       cont = howto->special_function (abfd, reloc_entry, symbol, data,
528                                       input_section, output_bfd,
529                                       error_message);
530       if (cont != bfd_reloc_continue)
531         return cont;
532     }
533
534   /* Is the address of the relocation really within the section?  */
535   if (reloc_entry->address > input_section->_cooked_size)
536     return bfd_reloc_outofrange;
537
538   /* Work out which section the relocation is targetted at and the
539      initial relocation command value.  */
540
541   /* Get symbol value.  (Common symbols are special.)  */
542   if (bfd_is_com_section (symbol->section))
543     relocation = 0;
544   else
545     relocation = symbol->value;
546
547
548   reloc_target_output_section = symbol->section->output_section;
549
550   /* Convert input-section-relative symbol value to absolute.  */
551   if (output_bfd && howto->partial_inplace == false)
552     output_base = 0;
553   else
554     output_base = reloc_target_output_section->vma;
555
556   relocation += output_base + symbol->section->output_offset;
557
558   /* Add in supplied addend.  */
559   relocation += reloc_entry->addend;
560
561   /* Here the variable relocation holds the final address of the
562      symbol we are relocating against, plus any addend.  */
563
564   if (howto->pc_relative == true)
565     {
566       /* This is a PC relative relocation.  We want to set RELOCATION
567          to the distance between the address of the symbol and the
568          location.  RELOCATION is already the address of the symbol.
569
570          We start by subtracting the address of the section containing
571          the location.
572
573          If pcrel_offset is set, we must further subtract the position
574          of the location within the section.  Some targets arrange for
575          the addend to be the negative of the position of the location
576          within the section; for example, i386-aout does this.  For
577          i386-aout, pcrel_offset is false.  Some other targets do not
578          include the position of the location; for example, m88kbcs,
579          or ELF.  For those targets, pcrel_offset is true.
580
581          If we are producing relocateable output, then we must ensure
582          that this reloc will be correctly computed when the final
583          relocation is done.  If pcrel_offset is false we want to wind
584          up with the negative of the location within the section,
585          which means we must adjust the existing addend by the change
586          in the location within the section.  If pcrel_offset is true
587          we do not want to adjust the existing addend at all.
588
589          FIXME: This seems logical to me, but for the case of
590          producing relocateable output it is not what the code
591          actually does.  I don't want to change it, because it seems
592          far too likely that something will break.  */
593
594       relocation -=
595         input_section->output_section->vma + input_section->output_offset;
596
597       if (howto->pcrel_offset == true)
598         relocation -= reloc_entry->address;
599     }
600
601   if (output_bfd != (bfd *) NULL)
602     {
603       if (howto->partial_inplace == false)
604         {
605           /* This is a partial relocation, and we want to apply the relocation
606              to the reloc entry rather than the raw data. Modify the reloc
607              inplace to reflect what we now know.  */
608           reloc_entry->addend = relocation;
609           reloc_entry->address += input_section->output_offset;
610           return flag;
611         }
612       else
613         {
614           /* This is a partial relocation, but inplace, so modify the
615              reloc record a bit.
616
617              If we've relocated with a symbol with a section, change
618              into a ref to the section belonging to the symbol.  */
619
620           reloc_entry->address += input_section->output_offset;
621
622           /* WTF?? */
623           if (abfd->xvec->flavour == bfd_target_coff_flavour
624               && strcmp (abfd->xvec->name, "aixcoff-rs6000") != 0
625               && strcmp (abfd->xvec->name, "xcoff-powermac") != 0
626               && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
627               && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
628             {
629 #if 1
630               /* For m68k-coff, the addend was being subtracted twice during
631                  relocation with -r.  Removing the line below this comment
632                  fixes that problem; see PR 2953.
633
634 However, Ian wrote the following, regarding removing the line below,
635 which explains why it is still enabled:  --djm
636
637 If you put a patch like that into BFD you need to check all the COFF
638 linkers.  I am fairly certain that patch will break coff-i386 (e.g.,
639 SCO); see coff_i386_reloc in coff-i386.c where I worked around the
640 problem in a different way.  There may very well be a reason that the
641 code works as it does.
642
643 Hmmm.  The first obvious point is that bfd_perform_relocation should
644 not have any tests that depend upon the flavour.  It's seem like
645 entirely the wrong place for such a thing.  The second obvious point
646 is that the current code ignores the reloc addend when producing
647 relocateable output for COFF.  That's peculiar.  In fact, I really
648 have no idea what the point of the line you want to remove is.
649
650 A typical COFF reloc subtracts the old value of the symbol and adds in
651 the new value to the location in the object file (if it's a pc
652 relative reloc it adds the difference between the symbol value and the
653 location).  When relocating we need to preserve that property.
654
655 BFD handles this by setting the addend to the negative of the old
656 value of the symbol.  Unfortunately it handles common symbols in a
657 non-standard way (it doesn't subtract the old value) but that's a
658 different story (we can't change it without losing backward
659 compatibility with old object files) (coff-i386 does subtract the old
660 value, to be compatible with existing coff-i386 targets, like SCO).
661
662 So everything works fine when not producing relocateable output.  When
663 we are producing relocateable output, logically we should do exactly
664 what we do when not producing relocateable output.  Therefore, your
665 patch is correct.  In fact, it should probably always just set
666 reloc_entry->addend to 0 for all cases, since it is, in fact, going to
667 add the value into the object file.  This won't hurt the COFF code,
668 which doesn't use the addend; I'm not sure what it will do to other
669 formats (the thing to check for would be whether any formats both use
670 the addend and set partial_inplace).
671
672 When I wanted to make coff-i386 produce relocateable output, I ran
673 into the problem that you are running into: I wanted to remove that
674 line.  Rather than risk it, I made the coff-i386 relocs use a special
675 function; it's coff_i386_reloc in coff-i386.c.  The function
676 specifically adds the addend field into the object file, knowing that
677 bfd_perform_relocation is not going to.  If you remove that line, then
678 coff-i386.c will wind up adding the addend field in twice.  It's
679 trivial to fix; it just needs to be done.
680
681 The problem with removing the line is just that it may break some
682 working code.  With BFD it's hard to be sure of anything.  The right
683 way to deal with this is simply to build and test at least all the
684 supported COFF targets.  It should be straightforward if time and disk
685 space consuming.  For each target:
686     1) build the linker
687     2) generate some executable, and link it using -r (I would
688        probably use paranoia.o and link against newlib/libc.a, which
689        for all the supported targets would be available in
690        /usr/cygnus/progressive/H-host/target/lib/libc.a).
691     3) make the change to reloc.c
692     4) rebuild the linker
693     5) repeat step 2
694     6) if the resulting object files are the same, you have at least
695        made it no worse
696     7) if they are different you have to figure out which version is
697        right
698 */
699               relocation -= reloc_entry->addend;
700 #endif
701               reloc_entry->addend = 0;
702             }
703           else
704             {
705               reloc_entry->addend = relocation;
706             }
707         }
708     }
709   else
710     {
711       reloc_entry->addend = 0;
712     }
713
714   /* FIXME: This overflow checking is incomplete, because the value
715      might have overflowed before we get here.  For a correct check we
716      need to compute the value in a size larger than bitsize, but we
717      can't reasonably do that for a reloc the same size as a host
718      machine word.
719      FIXME: We should also do overflow checking on the result after
720      adding in the value contained in the object file.  */
721   if (howto->complain_on_overflow != complain_overflow_dont
722       && flag == bfd_reloc_ok)
723     {
724       bfd_vma check;
725
726       /* Get the value that will be used for the relocation, but
727          starting at bit position zero.  */
728       check = relocation >> howto->rightshift;
729       switch (howto->complain_on_overflow)
730         {
731         case complain_overflow_signed:
732           {
733             /* Assumes two's complement.  */
734             bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
735             bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
736
737             /* The above right shift is incorrect for a signed value.
738                Fix it up by forcing on the upper bits.  */
739             if (howto->rightshift > 0
740                 && (bfd_signed_vma) relocation < 0)
741               check |= ((bfd_vma) - 1
742                         & ~((bfd_vma) - 1
743                             >> howto->rightshift));
744             if ((bfd_signed_vma) check > reloc_signed_max
745                 || (bfd_signed_vma) check < reloc_signed_min)
746               flag = bfd_reloc_overflow;
747           }
748           break;
749         case complain_overflow_unsigned:
750           {
751             /* Assumes two's complement.  This expression avoids
752                overflow if howto->bitsize is the number of bits in
753                bfd_vma.  */
754             bfd_vma reloc_unsigned_max =
755             (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
756
757             if ((bfd_vma) check > reloc_unsigned_max)
758               flag = bfd_reloc_overflow;
759           }
760           break;
761         case complain_overflow_bitfield:
762           {
763             /* Assumes two's complement.  This expression avoids
764                overflow if howto->bitsize is the number of bits in
765                bfd_vma.  */
766             bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
767
768             if (((bfd_vma) check & ~reloc_bits) != 0
769                 && ((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
770               {
771                 /* The above right shift is incorrect for a signed
772                    value.  See if turning on the upper bits fixes the
773                    overflow.  */
774                 if (howto->rightshift > 0
775                     && (bfd_signed_vma) relocation < 0)
776                   {
777                     check |= ((bfd_vma) - 1
778                               & ~((bfd_vma) - 1
779                                   >> howto->rightshift));
780                     if (((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
781                       flag = bfd_reloc_overflow;
782                   }
783                 else
784                   flag = bfd_reloc_overflow;
785               }
786           }
787           break;
788         default:
789           abort ();
790         }
791     }
792
793   /*
794     Either we are relocating all the way, or we don't want to apply
795     the relocation to the reloc entry (probably because there isn't
796     any room in the output format to describe addends to relocs)
797     */
798
799   /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
800      (OSF version 1.3, compiler version 3.11).  It miscompiles the
801      following program:
802
803      struct str
804      {
805        unsigned int i0;
806      } s = { 0 };
807
808      int
809      main ()
810      {
811        unsigned long x;
812
813        x = 0x100000000;
814        x <<= (unsigned long) s.i0;
815        if (x == 0)
816          printf ("failed\n");
817        else
818          printf ("succeeded (%lx)\n", x);
819      }
820      */
821
822   relocation >>= (bfd_vma) howto->rightshift;
823
824   /* Shift everything up to where it's going to be used */
825
826   relocation <<= (bfd_vma) howto->bitpos;
827
828   /* Wait for the day when all have the mask in them */
829
830   /* What we do:
831      i instruction to be left alone
832      o offset within instruction
833      r relocation offset to apply
834      S src mask
835      D dst mask
836      N ~dst mask
837      A part 1
838      B part 2
839      R result
840
841      Do this:
842      i i i i i o o o o o        from bfd_get<size>
843      and           S S S S S    to get the size offset we want
844      +   r r r r r r r r r r  to get the final value to place
845      and           D D D D D  to chop to right size
846      -----------------------
847      A A A A A
848      And this:
849      ...   i i i i i o o o o o  from bfd_get<size>
850      and   N N N N N            get instruction
851      -----------------------
852      ...   B B B B B
853
854      And then:
855      B B B B B
856      or              A A A A A
857      -----------------------
858      R R R R R R R R R R        put into bfd_put<size>
859      */
860
861 #define DOIT(x) \
862   x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) +  relocation) & howto->dst_mask))
863
864   switch (howto->size)
865     {
866     case 0:
867       {
868         char x = bfd_get_8 (abfd, (char *) data + addr);
869         DOIT (x);
870         bfd_put_8 (abfd, x, (unsigned char *) data + addr);
871       }
872       break;
873
874     case 1:
875       {
876         short x = bfd_get_16 (abfd, (bfd_byte *) data + addr);
877         DOIT (x);
878         bfd_put_16 (abfd, x, (unsigned char *) data + addr);
879       }
880       break;
881     case 2:
882       {
883         long x = bfd_get_32 (abfd, (bfd_byte *) data + addr);
884         DOIT (x);
885         bfd_put_32 (abfd, x, (bfd_byte *) data + addr);
886       }
887       break;
888     case -2:
889       {
890         long x = bfd_get_32 (abfd, (bfd_byte *) data + addr);
891         relocation = -relocation;
892         DOIT (x);
893         bfd_put_32 (abfd, x, (bfd_byte *) data + addr);
894       }
895       break;
896
897     case -1:
898       {
899         long x = bfd_get_16 (abfd, (bfd_byte *) data + addr);
900         relocation = -relocation;
901         DOIT (x);
902         bfd_put_16 (abfd, x, (bfd_byte *) data + addr);
903       }
904       break;
905
906     case 3:
907       /* Do nothing */
908       break;
909
910     case 4:
911 #ifdef BFD64
912       {
913         bfd_vma x = bfd_get_64 (abfd, (bfd_byte *) data + addr);
914         DOIT (x);
915         bfd_put_64 (abfd, x, (bfd_byte *) data + addr);
916       }
917 #else
918       abort ();
919 #endif
920       break;
921     default:
922       return bfd_reloc_other;
923     }
924
925   return flag;
926 }
927
928 /*
929 FUNCTION
930         bfd_install_relocation
931
932 SYNOPSIS
933         bfd_reloc_status_type
934                 bfd_install_relocation
935                         (bfd *abfd,
936                          arelent *reloc_entry,
937                          PTR data, bfd_vma data_start,
938                          asection *input_section,
939                          char **error_message);
940
941 DESCRIPTION
942         This looks remarkably like <<bfd_perform_relocation>>, except it
943         does not expect that the section contents have been filled in.
944         I.e., it's suitable for use when creating, rather than applying
945         a relocation.
946
947         For now, this function should be considered reserved for the
948         assembler.
949
950 */
951
952
953 bfd_reloc_status_type
954 bfd_install_relocation (abfd, reloc_entry, data_start, data_start_offset,
955                         input_section, error_message)
956      bfd *abfd;
957      arelent *reloc_entry;
958      PTR data_start;
959      bfd_vma data_start_offset;
960      asection *input_section;
961      char **error_message;
962 {
963   bfd_vma relocation;
964   bfd_reloc_status_type flag = bfd_reloc_ok;
965   bfd_size_type addr = reloc_entry->address;
966   bfd_vma output_base = 0;
967   reloc_howto_type *howto = reloc_entry->howto;
968   asection *reloc_target_output_section;
969   asymbol *symbol;
970   bfd_byte *data;
971
972   symbol = *(reloc_entry->sym_ptr_ptr);
973   if (bfd_is_abs_section (symbol->section))
974     {
975       reloc_entry->address += input_section->output_offset;
976       return bfd_reloc_ok;
977     }
978
979   /* If there is a function supplied to handle this relocation type,
980      call it.  It'll return `bfd_reloc_continue' if further processing
981      can be done.  */
982   if (howto->special_function)
983     {
984       bfd_reloc_status_type cont;
985       /* XXX - The special_function calls haven't been fixed up to deal
986          with creating new relocations and section contents.  */
987       cont = howto->special_function (abfd, reloc_entry, symbol,
988                                       /* XXX - Non-portable! */
989                                       ((bfd_byte *) data_start
990                                        - data_start_offset),
991                                       input_section, abfd, error_message);
992       if (cont != bfd_reloc_continue)
993         return cont;
994     }
995
996   /* Is the address of the relocation really within the section?  */
997   if (reloc_entry->address > input_section->_cooked_size)
998     return bfd_reloc_outofrange;
999
1000   /* Work out which section the relocation is targetted at and the
1001      initial relocation command value.  */
1002
1003   /* Get symbol value.  (Common symbols are special.)  */
1004   if (bfd_is_com_section (symbol->section))
1005     relocation = 0;
1006   else
1007     relocation = symbol->value;
1008
1009
1010   reloc_target_output_section = symbol->section->output_section;
1011
1012   /* Convert input-section-relative symbol value to absolute.  */
1013   if (howto->partial_inplace == false)
1014     output_base = 0;
1015   else
1016     output_base = reloc_target_output_section->vma;
1017
1018   relocation += output_base + symbol->section->output_offset;
1019
1020   /* Add in supplied addend.  */
1021   relocation += reloc_entry->addend;
1022
1023   /* Here the variable relocation holds the final address of the
1024      symbol we are relocating against, plus any addend.  */
1025
1026   if (howto->pc_relative == true)
1027     {
1028       /* This is a PC relative relocation.  We want to set RELOCATION
1029          to the distance between the address of the symbol and the
1030          location.  RELOCATION is already the address of the symbol.
1031
1032          We start by subtracting the address of the section containing
1033          the location.
1034
1035          If pcrel_offset is set, we must further subtract the position
1036          of the location within the section.  Some targets arrange for
1037          the addend to be the negative of the position of the location
1038          within the section; for example, i386-aout does this.  For
1039          i386-aout, pcrel_offset is false.  Some other targets do not
1040          include the position of the location; for example, m88kbcs,
1041          or ELF.  For those targets, pcrel_offset is true.
1042
1043          If we are producing relocateable output, then we must ensure
1044          that this reloc will be correctly computed when the final
1045          relocation is done.  If pcrel_offset is false we want to wind
1046          up with the negative of the location within the section,
1047          which means we must adjust the existing addend by the change
1048          in the location within the section.  If pcrel_offset is true
1049          we do not want to adjust the existing addend at all.
1050
1051          FIXME: This seems logical to me, but for the case of
1052          producing relocateable output it is not what the code
1053          actually does.  I don't want to change it, because it seems
1054          far too likely that something will break.  */
1055
1056       relocation -=
1057         input_section->output_section->vma + input_section->output_offset;
1058
1059       if (howto->pcrel_offset == true && howto->partial_inplace == true)
1060         relocation -= reloc_entry->address;
1061     }
1062
1063   if (howto->partial_inplace == false)
1064     {
1065       /* This is a partial relocation, and we want to apply the relocation
1066          to the reloc entry rather than the raw data. Modify the reloc
1067          inplace to reflect what we now know.  */
1068       reloc_entry->addend = relocation;
1069       reloc_entry->address += input_section->output_offset;
1070       return flag;
1071     }
1072   else
1073     {
1074       /* This is a partial relocation, but inplace, so modify the
1075          reloc record a bit.
1076
1077          If we've relocated with a symbol with a section, change
1078          into a ref to the section belonging to the symbol.  */
1079
1080       reloc_entry->address += input_section->output_offset;
1081
1082       /* WTF?? */
1083       if (abfd->xvec->flavour == bfd_target_coff_flavour
1084           && strcmp (abfd->xvec->name, "aixcoff-rs6000") != 0
1085           && strcmp (abfd->xvec->name, "xcoff-powermac") != 0
1086           && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
1087           && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
1088         {
1089 #if 1
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.
1093
1094 However, Ian wrote the following, regarding removing the line below,
1095 which explains why it is still enabled:  --djm
1096
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.
1102
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.
1109
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.
1114
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).
1121
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).
1131
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.
1140
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:
1146     1) build the linker
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
1153     5) repeat step 2
1154     6) if the resulting object files are the same, you have at least
1155        made it no worse
1156     7) if they are different you have to figure out which version is
1157        right
1158 */
1159           relocation -= reloc_entry->addend;
1160 #endif
1161           reloc_entry->addend = 0;
1162         }
1163       else
1164         {
1165           reloc_entry->addend = relocation;
1166         }
1167     }
1168
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
1173      machine word.
1174
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)
1178     {
1179       bfd_vma check;
1180
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)
1185         {
1186         case complain_overflow_signed:
1187           {
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;
1191
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
1197                         & ~((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;
1202           }
1203           break;
1204         case complain_overflow_unsigned:
1205           {
1206             /* Assumes two's complement.  This expression avoids
1207                overflow if howto->bitsize is the number of bits in
1208                bfd_vma.  */
1209             bfd_vma reloc_unsigned_max =
1210             (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
1211
1212             if ((bfd_vma) check > reloc_unsigned_max)
1213               flag = bfd_reloc_overflow;
1214           }
1215           break;
1216         case complain_overflow_bitfield:
1217           {
1218             /* Assumes two's complement.  This expression avoids
1219                overflow if howto->bitsize is the number of bits in
1220                bfd_vma.  */
1221             bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
1222
1223             if (((bfd_vma) check & ~reloc_bits) != 0
1224                 && ((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
1225               {
1226                 /* The above right shift is incorrect for a signed
1227                    value.  See if turning on the upper bits fixes the
1228                    overflow.  */
1229                 if (howto->rightshift > 0
1230                     && (bfd_signed_vma) relocation < 0)
1231                   {
1232                     check |= ((bfd_vma) - 1
1233                               & ~((bfd_vma) - 1
1234                                   >> howto->rightshift));
1235                     if (((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
1236                       flag = bfd_reloc_overflow;
1237                   }
1238                 else
1239                   flag = bfd_reloc_overflow;
1240               }
1241           }
1242           break;
1243         default:
1244           abort ();
1245         }
1246     }
1247
1248   /*
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)
1252     */
1253
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
1256      following program:
1257
1258      struct str
1259      {
1260        unsigned int i0;
1261      } s = { 0 };
1262
1263      int
1264      main ()
1265      {
1266        unsigned long x;
1267
1268        x = 0x100000000;
1269        x <<= (unsigned long) s.i0;
1270        if (x == 0)
1271          printf ("failed\n");
1272        else
1273          printf ("succeeded (%lx)\n", x);
1274      }
1275      */
1276
1277   relocation >>= (bfd_vma) howto->rightshift;
1278
1279   /* Shift everything up to where it's going to be used */
1280
1281   relocation <<= (bfd_vma) howto->bitpos;
1282
1283   /* Wait for the day when all have the mask in them */
1284
1285   /* What we do:
1286      i instruction to be left alone
1287      o offset within instruction
1288      r relocation offset to apply
1289      S src mask
1290      D dst mask
1291      N ~dst mask
1292      A part 1
1293      B part 2
1294      R result
1295
1296      Do this:
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      -----------------------
1302      A A A A A
1303      And this:
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      -----------------------
1307      ...   B B B B B
1308
1309      And then:
1310      B B B B B
1311      or              A A A A A
1312      -----------------------
1313      R R R R R R R R R R        put into bfd_put<size>
1314      */
1315
1316 #define DOIT(x) \
1317   x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) +  relocation) & howto->dst_mask))
1318
1319   data = (bfd_byte *) data_start + (addr - data_start_offset);
1320
1321   switch (howto->size)
1322     {
1323     case 0:
1324       {
1325         char x = bfd_get_8 (abfd, (char *) data);
1326         DOIT (x);
1327         bfd_put_8 (abfd, x, (unsigned char *) data);
1328       }
1329       break;
1330
1331     case 1:
1332       {
1333         short x = bfd_get_16 (abfd, (bfd_byte *) data);
1334         DOIT (x);
1335         bfd_put_16 (abfd, x, (unsigned char *) data);
1336       }
1337       break;
1338     case 2:
1339       {
1340         long x = bfd_get_32 (abfd, (bfd_byte *) data);
1341         DOIT (x);
1342         bfd_put_32 (abfd, x, (bfd_byte *) data);
1343       }
1344       break;
1345     case -2:
1346       {
1347         long x = bfd_get_32 (abfd, (bfd_byte *) data);
1348         relocation = -relocation;
1349         DOIT (x);
1350         bfd_put_32 (abfd, x, (bfd_byte *) data);
1351       }
1352       break;
1353
1354     case 3:
1355       /* Do nothing */
1356       break;
1357
1358     case 4:
1359       {
1360         bfd_vma x = bfd_get_64 (abfd, (bfd_byte *) data);
1361         DOIT (x);
1362         bfd_put_64 (abfd, x, (bfd_byte *) data);
1363       }
1364       break;
1365     default:
1366       return bfd_reloc_other;
1367     }
1368
1369   return flag;
1370 }
1371
1372 /* This relocation routine is used by some of the backend linkers.
1373    They do not construct asymbol or arelent structures, so there is no
1374    reason for them to use bfd_perform_relocation.  Also,
1375    bfd_perform_relocation is so hacked up it is easier to write a new
1376    function than to try to deal with it.
1377
1378    This routine does a final relocation.  It should not be used when
1379    generating relocateable output.
1380
1381    FIXME: This routine ignores any special_function in the HOWTO,
1382    since the existing special_function values have been written for
1383    bfd_perform_relocation.
1384
1385    HOWTO is the reloc howto information.
1386    INPUT_BFD is the BFD which the reloc applies to.
1387    INPUT_SECTION is the section which the reloc applies to.
1388    CONTENTS is the contents of the section.
1389    ADDRESS is the address of the reloc within INPUT_SECTION.
1390    VALUE is the value of the symbol the reloc refers to.
1391    ADDEND is the addend of the reloc.  */
1392
1393 bfd_reloc_status_type
1394 _bfd_final_link_relocate (howto, input_bfd, input_section, contents, address,
1395                           value, addend)
1396      reloc_howto_type *howto;
1397      bfd *input_bfd;
1398      asection *input_section;
1399      bfd_byte *contents;
1400      bfd_vma address;
1401      bfd_vma value;
1402      bfd_vma addend;
1403 {
1404   bfd_vma relocation;
1405
1406   /* Sanity check the address.  */
1407   if (address > input_section->_raw_size)
1408     return bfd_reloc_outofrange;
1409
1410   /* This function assumes that we are dealing with a basic relocation
1411      against a symbol.  We want to compute the value of the symbol to
1412      relocate to.  This is just VALUE, the value of the symbol, plus
1413      ADDEND, any addend associated with the reloc.  */
1414   relocation = value + addend;
1415
1416   /* If the relocation is PC relative, we want to set RELOCATION to
1417      the distance between the symbol (currently in RELOCATION) and the
1418      location we are relocating.  Some targets (e.g., i386-aout)
1419      arrange for the contents of the section to be the negative of the
1420      offset of the location within the section; for such targets
1421      pcrel_offset is false.  Other targets (e.g., m88kbcs or ELF)
1422      simply leave the contents of the section as zero; for such
1423      targets pcrel_offset is true.  If pcrel_offset is false we do not
1424      need to subtract out the offset of the location within the
1425      section (which is just ADDRESS).  */
1426   if (howto->pc_relative)
1427     {
1428       relocation -= (input_section->output_section->vma
1429                      + input_section->output_offset);
1430       if (howto->pcrel_offset)
1431         relocation -= address;
1432     }
1433
1434   return _bfd_relocate_contents (howto, input_bfd, relocation,
1435                                  contents + address);
1436 }
1437
1438 /* Relocate a given location using a given value and howto.  */
1439
1440 bfd_reloc_status_type
1441 _bfd_relocate_contents (howto, input_bfd, relocation, location)
1442      reloc_howto_type *howto;
1443      bfd *input_bfd;
1444      bfd_vma relocation;
1445      bfd_byte *location;
1446 {
1447   int size;
1448   bfd_vma x;
1449   boolean overflow;
1450
1451   /* If the size is negative, negate RELOCATION.  This isn't very
1452      general.  */
1453   if (howto->size < 0)
1454     relocation = -relocation;
1455
1456   /* Get the value we are going to relocate.  */
1457   size = bfd_get_reloc_size (howto);
1458   switch (size)
1459     {
1460     default:
1461     case 0:
1462       abort ();
1463     case 1:
1464       x = bfd_get_8 (input_bfd, location);
1465       break;
1466     case 2:
1467       x = bfd_get_16 (input_bfd, location);
1468       break;
1469     case 4:
1470       x = bfd_get_32 (input_bfd, location);
1471       break;
1472     case 8:
1473 #ifdef BFD64
1474       x = bfd_get_64 (input_bfd, location);
1475 #else
1476       abort ();
1477 #endif
1478       break;
1479     }
1480
1481   /* Check for overflow.  FIXME: We may drop bits during the addition
1482      which we don't check for.  We must either check at every single
1483      operation, which would be tedious, or we must do the computations
1484      in a type larger than bfd_vma, which would be inefficient.  */
1485   overflow = false;
1486   if (howto->complain_on_overflow != complain_overflow_dont)
1487     {
1488       bfd_vma check;
1489       bfd_signed_vma signed_check;
1490       bfd_vma add;
1491       bfd_signed_vma signed_add;
1492
1493       if (howto->rightshift == 0)
1494         {
1495           check = relocation;
1496           signed_check = (bfd_signed_vma) relocation;
1497         }
1498       else
1499         {
1500           /* Drop unwanted bits from the value we are relocating to.  */
1501           check = relocation >> howto->rightshift;
1502
1503           /* If this is a signed value, the rightshift just dropped
1504              leading 1 bits (assuming twos complement).  */
1505           if ((bfd_signed_vma) relocation >= 0)
1506             signed_check = check;
1507           else
1508             signed_check = (check
1509                             | ((bfd_vma) - 1
1510                                & ~((bfd_vma) - 1 >> howto->rightshift)));
1511         }
1512
1513       /* Get the value from the object file.  */
1514       add = x & howto->src_mask;
1515
1516       /* Get the value from the object file with an appropriate sign.
1517          The expression involving howto->src_mask isolates the upper
1518          bit of src_mask.  If that bit is set in the value we are
1519          adding, it is negative, and we subtract out that number times
1520          two.  If src_mask includes the highest possible bit, then we
1521          can not get the upper bit, but that does not matter since
1522          signed_add needs no adjustment to become negative in that
1523          case.  */
1524       signed_add = add;
1525       if ((add & (((~howto->src_mask) >> 1) & howto->src_mask)) != 0)
1526         signed_add -= (((~howto->src_mask) >> 1) & howto->src_mask) << 1;
1527
1528       /* Add the value from the object file, shifted so that it is a
1529          straight number.  */
1530       if (howto->bitpos == 0)
1531         {
1532           check += add;
1533           signed_check += signed_add;
1534         }
1535       else
1536         {
1537           check += add >> howto->bitpos;
1538
1539           /* For the signed case we use ADD, rather than SIGNED_ADD,
1540              to avoid warnings from SVR4 cc.  This is OK since we
1541              explictly handle the sign bits.  */
1542           if (signed_add >= 0)
1543             signed_check += add >> howto->bitpos;
1544           else
1545             signed_check += ((add >> howto->bitpos)
1546                              | ((bfd_vma) - 1
1547                                 & ~((bfd_vma) - 1 >> howto->bitpos)));
1548         }
1549
1550       switch (howto->complain_on_overflow)
1551         {
1552         case complain_overflow_signed:
1553           {
1554             /* Assumes two's complement.  */
1555             bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
1556             bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
1557
1558             if (signed_check > reloc_signed_max
1559                 || signed_check < reloc_signed_min)
1560               overflow = true;
1561           }
1562           break;
1563         case complain_overflow_unsigned:
1564           {
1565             /* Assumes two's complement.  This expression avoids
1566                overflow if howto->bitsize is the number of bits in
1567                bfd_vma.  */
1568             bfd_vma reloc_unsigned_max =
1569             (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
1570
1571             if (check > reloc_unsigned_max)
1572               overflow = true;
1573           }
1574           break;
1575         case complain_overflow_bitfield:
1576           {
1577             /* Assumes two's complement.  This expression avoids
1578                overflow if howto->bitsize is the number of bits in
1579                bfd_vma.  */
1580             bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
1581
1582             if ((check & ~reloc_bits) != 0
1583                 && (((bfd_vma) signed_check & ~reloc_bits)
1584                     != (-1 & ~reloc_bits)))
1585               overflow = true;
1586           }
1587           break;
1588         default:
1589           abort ();
1590         }
1591     }
1592
1593   /* Put RELOCATION in the right bits.  */
1594   relocation >>= (bfd_vma) howto->rightshift;
1595   relocation <<= (bfd_vma) howto->bitpos;
1596
1597   /* Add RELOCATION to the right bits of X.  */
1598   x = ((x & ~howto->dst_mask)
1599        | (((x & howto->src_mask) + relocation) & howto->dst_mask));
1600
1601   /* Put the relocated value back in the object file.  */
1602   switch (size)
1603     {
1604     default:
1605     case 0:
1606       abort ();
1607     case 1:
1608       bfd_put_8 (input_bfd, x, location);
1609       break;
1610     case 2:
1611       bfd_put_16 (input_bfd, x, location);
1612       break;
1613     case 4:
1614       bfd_put_32 (input_bfd, x, location);
1615       break;
1616     case 8:
1617 #ifdef BFD64
1618       bfd_put_64 (input_bfd, x, location);
1619 #else
1620       abort ();
1621 #endif
1622       break;
1623     }
1624
1625   return overflow ? bfd_reloc_overflow : bfd_reloc_ok;
1626 }
1627
1628 /*
1629 DOCDD
1630 INODE
1631         howto manager,  , typedef arelent, Relocations
1632
1633 SECTION
1634         The howto manager
1635
1636         When an application wants to create a relocation, but doesn't
1637         know what the target machine might call it, it can find out by
1638         using this bit of code.
1639
1640 */
1641
1642 /*
1643 TYPEDEF
1644         bfd_reloc_code_type
1645
1646 DESCRIPTION
1647         The insides of a reloc code.  The idea is that, eventually, there
1648         will be one enumerator for every type of relocation we ever do.
1649         Pass one of these values to <<bfd_reloc_type_lookup>>, and it'll
1650         return a howto pointer.
1651
1652         This does mean that the application must determine the correct
1653         enumerator value; you can't get a howto pointer from a random set
1654         of attributes.
1655
1656 SENUM
1657    bfd_reloc_code_real
1658
1659 ENUM
1660   BFD_RELOC_64
1661 ENUMX
1662   BFD_RELOC_32
1663 ENUMX
1664   BFD_RELOC_26
1665 ENUMX
1666   BFD_RELOC_16
1667 ENUMX
1668   BFD_RELOC_14
1669 ENUMX
1670   BFD_RELOC_8
1671 ENUMDOC
1672   Basic absolute relocations of N bits.
1673
1674 ENUM
1675   BFD_RELOC_64_PCREL
1676 ENUMX
1677   BFD_RELOC_32_PCREL
1678 ENUMX
1679   BFD_RELOC_24_PCREL
1680 ENUMX
1681   BFD_RELOC_16_PCREL
1682 ENUMX
1683   BFD_RELOC_12_PCREL
1684 ENUMX
1685   BFD_RELOC_8_PCREL
1686 ENUMDOC
1687   PC-relative relocations.  Sometimes these are relative to the address
1688 of the relocation itself; sometimes they are relative to the start of
1689 the section containing the relocation.  It depends on the specific target.
1690
1691 The 24-bit relocation is used in some Intel 960 configurations.
1692
1693 ENUM
1694   BFD_RELOC_32_GOT_PCREL
1695 ENUMX
1696   BFD_RELOC_16_GOT_PCREL
1697 ENUMX
1698   BFD_RELOC_8_GOT_PCREL
1699 ENUMX
1700   BFD_RELOC_32_GOTOFF
1701 ENUMX
1702   BFD_RELOC_16_GOTOFF
1703 ENUMX
1704   BFD_RELOC_LO16_GOTOFF
1705 ENUMX
1706   BFD_RELOC_HI16_GOTOFF
1707 ENUMX
1708   BFD_RELOC_HI16_S_GOTOFF
1709 ENUMX
1710   BFD_RELOC_8_GOTOFF
1711 ENUMX
1712   BFD_RELOC_32_PLT_PCREL
1713 ENUMX
1714   BFD_RELOC_24_PLT_PCREL
1715 ENUMX
1716   BFD_RELOC_16_PLT_PCREL
1717 ENUMX
1718   BFD_RELOC_8_PLT_PCREL
1719 ENUMX
1720   BFD_RELOC_32_PLTOFF
1721 ENUMX
1722   BFD_RELOC_16_PLTOFF
1723 ENUMX
1724   BFD_RELOC_LO16_PLTOFF
1725 ENUMX
1726   BFD_RELOC_HI16_PLTOFF
1727 ENUMX
1728   BFD_RELOC_HI16_S_PLTOFF
1729 ENUMX
1730   BFD_RELOC_8_PLTOFF
1731 ENUMDOC
1732   For ELF.
1733
1734 ENUM
1735   BFD_RELOC_68K_GLOB_DAT
1736 ENUMX
1737   BFD_RELOC_68K_JMP_SLOT
1738 ENUMX
1739   BFD_RELOC_68K_RELATIVE
1740 ENUMDOC
1741   Relocations used by 68K ELF.
1742
1743 ENUM
1744   BFD_RELOC_32_BASEREL
1745 ENUMX
1746   BFD_RELOC_16_BASEREL
1747 ENUMX
1748   BFD_RELOC_LO16_BASEREL
1749 ENUMX
1750   BFD_RELOC_HI16_BASEREL
1751 ENUMX
1752   BFD_RELOC_HI16_S_BASEREL
1753 ENUMX
1754   BFD_RELOC_8_BASEREL
1755 ENUMX
1756   BFD_RELOC_RVA
1757 ENUMDOC
1758   Linkage-table relative.
1759
1760 ENUM
1761   BFD_RELOC_8_FFnn
1762 ENUMDOC
1763   Absolute 8-bit relocation, but used to form an address like 0xFFnn.
1764
1765 ENUM
1766   BFD_RELOC_32_PCREL_S2
1767 ENUMX
1768   BFD_RELOC_16_PCREL_S2
1769 ENUMX
1770   BFD_RELOC_23_PCREL_S2
1771 ENUMDOC
1772   These PC-relative relocations are stored as word displacements --
1773 i.e., byte displacements shifted right two bits.  The 30-bit word
1774 displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1775 SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
1776 signed 16-bit displacement is used on the MIPS, and the 23-bit
1777 displacement is used on the Alpha.
1778
1779 ENUM
1780   BFD_RELOC_HI22
1781 ENUMX
1782   BFD_RELOC_LO10
1783 ENUMDOC
1784   High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1785 the target word.  These are used on the SPARC.
1786
1787 ENUM
1788   BFD_RELOC_GPREL16
1789 ENUMX
1790   BFD_RELOC_GPREL32
1791 ENUMDOC
1792   For systems that allocate a Global Pointer register, these are
1793 displacements off that register.  These relocation types are
1794 handled specially, because the value the register will have is
1795 decided relatively late.
1796
1797
1798 ENUM
1799   BFD_RELOC_I960_CALLJ
1800 ENUMDOC
1801   Reloc types used for i960/b.out.
1802
1803 ENUM
1804   BFD_RELOC_NONE
1805 ENUMX
1806   BFD_RELOC_SPARC_WDISP22
1807 ENUMX
1808   BFD_RELOC_SPARC22
1809 ENUMX
1810   BFD_RELOC_SPARC13
1811 ENUMX
1812   BFD_RELOC_SPARC_GOT10
1813 ENUMX
1814   BFD_RELOC_SPARC_GOT13
1815 ENUMX
1816   BFD_RELOC_SPARC_GOT22
1817 ENUMX
1818   BFD_RELOC_SPARC_PC10
1819 ENUMX
1820   BFD_RELOC_SPARC_PC22
1821 ENUMX
1822   BFD_RELOC_SPARC_WPLT30
1823 ENUMX
1824   BFD_RELOC_SPARC_COPY
1825 ENUMX
1826   BFD_RELOC_SPARC_GLOB_DAT
1827 ENUMX
1828   BFD_RELOC_SPARC_JMP_SLOT
1829 ENUMX
1830   BFD_RELOC_SPARC_RELATIVE
1831 ENUMX
1832   BFD_RELOC_SPARC_UA32
1833 ENUMDOC
1834   SPARC ELF relocations.  There is probably some overlap with other
1835   relocation types already defined.
1836
1837 ENUM
1838   BFD_RELOC_SPARC_BASE13
1839 ENUMX
1840   BFD_RELOC_SPARC_BASE22
1841 ENUMDOC
1842   I think these are specific to SPARC a.out (e.g., Sun 4).
1843
1844 ENUMEQ
1845   BFD_RELOC_SPARC_64
1846   BFD_RELOC_64
1847 ENUMX
1848   BFD_RELOC_SPARC_10
1849 ENUMX
1850   BFD_RELOC_SPARC_11
1851 ENUMX
1852   BFD_RELOC_SPARC_OLO10
1853 ENUMX
1854   BFD_RELOC_SPARC_HH22
1855 ENUMX
1856   BFD_RELOC_SPARC_HM10
1857 ENUMX
1858   BFD_RELOC_SPARC_LM22
1859 ENUMX
1860   BFD_RELOC_SPARC_PC_HH22
1861 ENUMX
1862   BFD_RELOC_SPARC_PC_HM10
1863 ENUMX
1864   BFD_RELOC_SPARC_PC_LM22
1865 ENUMX
1866   BFD_RELOC_SPARC_WDISP16
1867 ENUMX
1868   BFD_RELOC_SPARC_WDISP19
1869 ENUMX
1870   BFD_RELOC_SPARC_GLOB_JMP
1871 ENUMX
1872   BFD_RELOC_SPARC_7
1873 ENUMX
1874   BFD_RELOC_SPARC_6
1875 ENUMX
1876   BFD_RELOC_SPARC_5
1877 ENUMDOC
1878   Some relocations we're using for SPARC V9 -- subject to change.
1879
1880 ENUM
1881   BFD_RELOC_ALPHA_GPDISP_HI16
1882 ENUMDOC
1883   Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
1884      "addend" in some special way.
1885   For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
1886      writing; when reading, it will be the absolute section symbol.  The
1887      addend is the displacement in bytes of the "lda" instruction from
1888      the "ldah" instruction (which is at the address of this reloc).
1889 ENUM
1890   BFD_RELOC_ALPHA_GPDISP_LO16
1891 ENUMDOC
1892   For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
1893      with GPDISP_HI16 relocs.  The addend is ignored when writing the
1894      relocations out, and is filled in with the file's GP value on
1895      reading, for convenience.
1896
1897 ENUM
1898   BFD_RELOC_ALPHA_GPDISP
1899 ENUMDOC
1900   The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
1901      relocation except that there is no accompanying GPDISP_LO16
1902      relocation.
1903
1904 ENUM
1905   BFD_RELOC_ALPHA_LITERAL
1906 ENUMX
1907   BFD_RELOC_ALPHA_ELF_LITERAL
1908 ENUMX
1909   BFD_RELOC_ALPHA_LITUSE
1910 ENUMDOC
1911   The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
1912      the assembler turns it into a LDQ instruction to load the address of
1913      the symbol, and then fills in a register in the real instruction.
1914
1915      The LITERAL reloc, at the LDQ instruction, refers to the .lita
1916      section symbol.  The addend is ignored when writing, but is filled
1917      in with the file's GP value on reading, for convenience, as with the
1918      GPDISP_LO16 reloc.
1919
1920      The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
1921      It should refer to the symbol to be referenced, as with 16_GOTOFF,
1922      but it generates output not based on the position within the .got
1923      section, but relative to the GP value chosen for the file during the
1924      final link stage.
1925
1926      The LITUSE reloc, on the instruction using the loaded address, gives
1927      information to the linker that it might be able to use to optimize
1928      away some literal section references.  The symbol is ignored (read
1929      as the absolute section symbol), and the "addend" indicates the type
1930      of instruction using the register:
1931               1 - "memory" fmt insn
1932               2 - byte-manipulation (byte offset reg)
1933               3 - jsr (target of branch)
1934
1935      The GNU linker currently doesn't do any of this optimizing.
1936
1937 ENUM
1938   BFD_RELOC_ALPHA_HINT
1939 ENUMDOC
1940   The HINT relocation indicates a value that should be filled into the
1941      "hint" field of a jmp/jsr/ret instruction, for possible branch-
1942      prediction logic which may be provided on some processors.
1943
1944 ENUM
1945   BFD_RELOC_ALPHA_LINKAGE
1946 ENUMDOC
1947   The LINKAGE relocation outputs a linkage pair in the object file,
1948      which is filled by the linker.
1949
1950 ENUM
1951   BFD_RELOC_MIPS_JMP
1952 ENUMDOC
1953   Bits 27..2 of the relocation address shifted right 2 bits;
1954      simple reloc otherwise.
1955
1956 ENUM
1957   BFD_RELOC_HI16
1958 ENUMDOC
1959   High 16 bits of 32-bit value; simple reloc.
1960 ENUM
1961   BFD_RELOC_HI16_S
1962 ENUMDOC
1963   High 16 bits of 32-bit value but the low 16 bits will be sign
1964      extended and added to form the final result.  If the low 16
1965      bits form a negative number, we need to add one to the high value
1966      to compensate for the borrow when the low bits are added.
1967 ENUM
1968   BFD_RELOC_LO16
1969 ENUMDOC
1970   Low 16 bits.
1971 ENUM
1972   BFD_RELOC_PCREL_HI16_S
1973 ENUMDOC
1974   Like BFD_RELOC_HI16_S, but PC relative.
1975 ENUM
1976   BFD_RELOC_PCREL_LO16
1977 ENUMDOC
1978   Like BFD_RELOC_LO16, but PC relative.
1979
1980 ENUMEQ
1981   BFD_RELOC_MIPS_GPREL
1982   BFD_RELOC_GPREL16
1983 ENUMDOC
1984   Relocation relative to the global pointer.
1985
1986 ENUM
1987   BFD_RELOC_MIPS_LITERAL
1988 ENUMDOC
1989   Relocation against a MIPS literal section.
1990
1991 ENUM
1992   BFD_RELOC_MIPS_GOT16
1993 ENUMX
1994   BFD_RELOC_MIPS_CALL16
1995 ENUMEQX
1996   BFD_RELOC_MIPS_GPREL32
1997   BFD_RELOC_GPREL32
1998 ENUMX
1999   BFD_RELOC_MIPS_GOT_HI16
2000 ENUMX
2001   BFD_RELOC_MIPS_GOT_LO16
2002 ENUMX
2003   BFD_RELOC_MIPS_CALL_HI16
2004 ENUMX
2005   BFD_RELOC_MIPS_CALL_LO16
2006 ENUMDOC
2007   MIPS ELF relocations.
2008
2009 ENUM
2010   BFD_RELOC_386_GOT32
2011 ENUMX
2012   BFD_RELOC_386_PLT32
2013 ENUMX
2014   BFD_RELOC_386_COPY
2015 ENUMX
2016   BFD_RELOC_386_GLOB_DAT
2017 ENUMX
2018   BFD_RELOC_386_JUMP_SLOT
2019 ENUMX
2020   BFD_RELOC_386_RELATIVE
2021 ENUMX
2022   BFD_RELOC_386_GOTOFF
2023 ENUMX
2024   BFD_RELOC_386_GOTPC
2025 ENUMDOC
2026   i386/elf relocations
2027
2028 ENUM
2029   BFD_RELOC_NS32K_IMM_8
2030 ENUMX
2031   BFD_RELOC_NS32K_IMM_16
2032 ENUMX
2033   BFD_RELOC_NS32K_IMM_32
2034 ENUMX
2035   BFD_RELOC_NS32K_IMM_8_PCREL
2036 ENUMX
2037   BFD_RELOC_NS32K_IMM_16_PCREL
2038 ENUMX
2039   BFD_RELOC_NS32K_IMM_32_PCREL
2040 ENUMX
2041   BFD_RELOC_NS32K_DISP_8
2042 ENUMX
2043   BFD_RELOC_NS32K_DISP_16
2044 ENUMX
2045   BFD_RELOC_NS32K_DISP_32
2046 ENUMX
2047   BFD_RELOC_NS32K_DISP_8_PCREL
2048 ENUMX
2049   BFD_RELOC_NS32K_DISP_16_PCREL
2050 ENUMX
2051   BFD_RELOC_NS32K_DISP_32_PCREL
2052 ENUMDOC
2053   ns32k relocations
2054
2055 ENUM
2056   BFD_RELOC_PPC_B26
2057 ENUMX
2058   BFD_RELOC_PPC_BA26
2059 ENUMX
2060   BFD_RELOC_PPC_TOC16
2061 ENUMX
2062   BFD_RELOC_PPC_B16
2063 ENUMX
2064   BFD_RELOC_PPC_B16_BRTAKEN
2065 ENUMX
2066   BFD_RELOC_PPC_B16_BRNTAKEN
2067 ENUMX
2068   BFD_RELOC_PPC_BA16
2069 ENUMX
2070   BFD_RELOC_PPC_BA16_BRTAKEN
2071 ENUMX
2072   BFD_RELOC_PPC_BA16_BRNTAKEN
2073 ENUMX
2074   BFD_RELOC_PPC_COPY
2075 ENUMX
2076   BFD_RELOC_PPC_GLOB_DAT
2077 ENUMX
2078   BFD_RELOC_PPC_JMP_SLOT
2079 ENUMX
2080   BFD_RELOC_PPC_RELATIVE
2081 ENUMX
2082   BFD_RELOC_PPC_LOCAL24PC
2083 ENUMX
2084   BFD_RELOC_PPC_EMB_NADDR32
2085 ENUMX
2086   BFD_RELOC_PPC_EMB_NADDR16
2087 ENUMX
2088   BFD_RELOC_PPC_EMB_NADDR16_LO
2089 ENUMX
2090   BFD_RELOC_PPC_EMB_NADDR16_HI
2091 ENUMX
2092   BFD_RELOC_PPC_EMB_NADDR16_HA
2093 ENUMX
2094   BFD_RELOC_PPC_EMB_SDAI16
2095 ENUMX
2096   BFD_RELOC_PPC_EMB_SDA2I16
2097 ENUMX
2098   BFD_RELOC_PPC_EMB_SDA2REL
2099 ENUMX
2100   BFD_RELOC_PPC_EMB_SDA21
2101 ENUMX
2102   BFD_RELOC_PPC_EMB_MRKREF
2103 ENUMX
2104   BFD_RELOC_PPC_EMB_RELSEC16
2105 ENUMX
2106   BFD_RELOC_PPC_EMB_RELST_LO
2107 ENUMX
2108   BFD_RELOC_PPC_EMB_RELST_HI
2109 ENUMX
2110   BFD_RELOC_PPC_EMB_RELST_HA
2111 ENUMX
2112   BFD_RELOC_PPC_EMB_BIT_FLD
2113 ENUMX
2114   BFD_RELOC_PPC_EMB_RELSDA
2115 ENUMDOC
2116   Power(rs6000) and PowerPC relocations.
2117
2118 ENUM
2119   BFD_RELOC_CTOR
2120 ENUMDOC
2121   The type of reloc used to build a contructor table - at the moment
2122   probably a 32 bit wide absolute relocation, but the target can choose.
2123   It generally does map to one of the other relocation types.
2124
2125 ENUM
2126   BFD_RELOC_ARM_PCREL_BRANCH
2127 ENUMDOC
2128   ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
2129   not stored in the instruction.
2130 ENUM
2131   BFD_RELOC_ARM_IMMEDIATE
2132 ENUMX
2133   BFD_RELOC_ARM_OFFSET_IMM
2134 ENUMX
2135   BFD_RELOC_ARM_SHIFT_IMM
2136 ENUMX
2137   BFD_RELOC_ARM_SWI
2138 ENUMX
2139   BFD_RELOC_ARM_MULTI
2140 ENUMX
2141   BFD_RELOC_ARM_CP_OFF_IMM
2142 ENUMX
2143   BFD_RELOC_ARM_ADR_IMM
2144 ENUMX
2145   BFD_RELOC_ARM_LDR_IMM
2146 ENUMX
2147   BFD_RELOC_ARM_LITERAL
2148 ENUMX
2149   BFD_RELOC_ARM_IN_POOL
2150 ENUMX
2151   BFD_RELOC_ARM_OFFSET_IMM8
2152 ENUMX
2153   BFD_RELOC_ARM_HWLITERAL
2154 ENUMX
2155   BFD_RELOC_ARM_THUMB_ADD
2156 ENUMX
2157   BFD_RELOC_ARM_THUMB_IMM
2158 ENUMX
2159   BFD_RELOC_ARM_THUMB_SHIFT
2160 ENUMX
2161   BFD_RELOC_ARM_THUMB_OFFSET
2162 ENUMDOC
2163   These relocs are only used within the ARM assembler.  They are not
2164   (at present) written to any object files.
2165
2166 ENUM
2167   BFD_RELOC_SH_PCDISP8BY2
2168 ENUMX
2169   BFD_RELOC_SH_PCDISP12BY2
2170 ENUMX
2171   BFD_RELOC_SH_IMM4
2172 ENUMX
2173   BFD_RELOC_SH_IMM4BY2
2174 ENUMX
2175   BFD_RELOC_SH_IMM4BY4
2176 ENUMX
2177   BFD_RELOC_SH_IMM8
2178 ENUMX
2179   BFD_RELOC_SH_IMM8BY2
2180 ENUMX
2181   BFD_RELOC_SH_IMM8BY4
2182 ENUMX
2183   BFD_RELOC_SH_PCRELIMM8BY2
2184 ENUMX
2185   BFD_RELOC_SH_PCRELIMM8BY4
2186 ENUMX
2187   BFD_RELOC_SH_SWITCH16
2188 ENUMX
2189   BFD_RELOC_SH_SWITCH32
2190 ENUMX
2191   BFD_RELOC_SH_USES
2192 ENUMX
2193   BFD_RELOC_SH_COUNT
2194 ENUMX
2195   BFD_RELOC_SH_ALIGN
2196 ENUMX
2197   BFD_RELOC_SH_CODE
2198 ENUMX
2199   BFD_RELOC_SH_DATA
2200 ENUMX
2201   BFD_RELOC_SH_LABEL
2202 ENUMDOC
2203   Hitachi SH relocs.  Not all of these appear in object files.
2204
2205 COMMENT
2206 {* start-sanitize-arc *}
2207 ENUM
2208   BFD_RELOC_ARC_B22_PCREL
2209 ENUMDOC
2210   Argonaut RISC Core (ARC) relocs.
2211   ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
2212   not stored in the instruction.  The high 20 bits are installed in bits 26
2213   through 7 of the instruction.
2214 ENUM
2215   BFD_RELOC_ARC_B26
2216 ENUMDOC
2217   ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
2218   stored in the instruction.  The high 24 bits are installed in bits 23
2219   through 0.
2220 COMMENT
2221 {* end-sanitize-arc *}
2222
2223 COMMENT
2224 {* start-sanitize-d10v *}
2225 ENUM
2226   BFD_RELOC_D10V_10_PCREL_R
2227 ENUMDOC
2228   Mitsubishi D10V relocs.
2229   This is a 10-bit reloc with the right 2 bits
2230   assumed to be 0.
2231 ENUM
2232   BFD_RELOC_D10V_10_PCREL_L
2233 ENUMDOC
2234   Mitsubishi D10V relocs.
2235   This is a 10-bit reloc with the right 2 bits
2236   assumed to be 0.  This is the same as the previous reloc
2237   except it is in the left container, i.e.,
2238   shifted left 15 bits.
2239 ENUM
2240   BFD_RELOC_D10V_18
2241 ENUMDOC
2242   This is an 18-bit reloc with the right 2 bits
2243   assumed to be 0.
2244 ENUM
2245   BFD_RELOC_D10V_18_PCREL
2246 ENUMDOC
2247   This is an 18-bit reloc with the right 2 bits
2248   assumed to be 0.
2249 COMMENT
2250 {* end-sanitize-d10v *}
2251
2252 COMMENT
2253 {* start-sanitize-m32r *}
2254 ENUM
2255   BFD_RELOC_M32R_UIMM24
2256 ENUMDOC
2257   Mitsubishi M32R relocs.
2258   This is a 24 bit address.
2259 ENUM
2260   BFD_RELOC_M32R_DISP8
2261 ENUMDOC
2262   This is a 10-bit reloc with the right 2 bits assumed to be 0.
2263 ENUM
2264   BFD_RELOC_M32R_DISP16
2265 ENUMDOC
2266   This is an 18-bit reloc with the right 2 bits assumed to be 0.
2267 ENUM
2268   BFD_RELOC_M32R_DISP24
2269 ENUMDOC
2270   This is an 26-bit reloc with the right 2 bits assumed to be 0.
2271 COMMENT
2272 {* end-sanitize-m32r *}
2273
2274 COMMENT
2275 {* start-sanitize-v850 *}
2276 ENUM
2277   BFD_RELOC_V850_9_PCREL
2278 ENUMDOC
2279   This is a 9-bit reloc
2280 ENUM
2281   BFD_RELOC_V850_22_PCREL
2282 ENUMDOC
2283   This is a 22-bit reloc
2284 ENUM
2285   BFD_RELOC_V850_SDA_OFFSET
2286 ENUMDOC
2287   This is an offset from the short data area pointer..
2288 ENUM
2289   BFD_RELOC_V850_ZDA_OFFSET
2290 ENUMDOC
2291   This is an offset from the zero data area pointer..
2292 ENUM
2293   BFD_RELOC_V850_TDA_OFFSET
2294 ENUMDOC
2295   This is an offset from the tiny data area pointer..
2296 COMMENT
2297 {* end-sanitize-v850 *}
2298
2299 ENDSENUM
2300   BFD_RELOC_UNUSED
2301 CODE_FRAGMENT
2302 .
2303 .typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
2304 */
2305
2306
2307 /*
2308 FUNCTION
2309         bfd_reloc_type_lookup
2310
2311 SYNOPSIS
2312         reloc_howto_type *
2313         bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);
2314
2315 DESCRIPTION
2316         Return a pointer to a howto structure which, when
2317         invoked, will perform the relocation @var{code} on data from the
2318         architecture noted.
2319
2320 */
2321
2322
2323 reloc_howto_type *
2324 bfd_reloc_type_lookup (abfd, code)
2325      bfd *abfd;
2326      bfd_reloc_code_real_type code;
2327 {
2328   return BFD_SEND (abfd, reloc_type_lookup, (abfd, code));
2329 }
2330
2331 static reloc_howto_type bfd_howto_32 =
2332 HOWTO (0, 00, 2, 32, false, 0, complain_overflow_bitfield, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
2333
2334
2335 /*
2336 INTERNAL_FUNCTION
2337         bfd_default_reloc_type_lookup
2338
2339 SYNOPSIS
2340         reloc_howto_type *bfd_default_reloc_type_lookup
2341         (bfd *abfd, bfd_reloc_code_real_type  code);
2342
2343 DESCRIPTION
2344         Provides a default relocation lookup routine for any architecture.
2345
2346
2347 */
2348
2349 reloc_howto_type *
2350 bfd_default_reloc_type_lookup (abfd, code)
2351      bfd *abfd;
2352      bfd_reloc_code_real_type code;
2353 {
2354   switch (code)
2355     {
2356     case BFD_RELOC_CTOR:
2357       /* The type of reloc used in a ctor, which will be as wide as the
2358          address - so either a 64, 32, or 16 bitter.  */
2359       switch (bfd_get_arch_info (abfd)->bits_per_address)
2360         {
2361         case 64:
2362           BFD_FAIL ();
2363         case 32:
2364           return &bfd_howto_32;
2365         case 16:
2366           BFD_FAIL ();
2367         default:
2368           BFD_FAIL ();
2369         }
2370     default:
2371       BFD_FAIL ();
2372     }
2373   return (reloc_howto_type *) NULL;
2374 }
2375
2376 /*
2377 FUNCTION
2378         bfd_get_reloc_code_name
2379
2380 SYNOPSIS
2381         const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
2382
2383 DESCRIPTION
2384         Provides a printable name for the supplied relocation code.
2385         Useful mainly for printing error messages.
2386 */
2387
2388 const char *
2389 bfd_get_reloc_code_name (code)
2390      bfd_reloc_code_real_type code;
2391 {
2392   if (code > BFD_RELOC_UNUSED)
2393     return 0;
2394   return bfd_reloc_code_real_names[(int)code];
2395 }
2396
2397 /*
2398 INTERNAL_FUNCTION
2399         bfd_generic_relax_section
2400
2401 SYNOPSIS
2402         boolean bfd_generic_relax_section
2403          (bfd *abfd,
2404           asection *section,
2405           struct bfd_link_info *,
2406           boolean *);
2407
2408 DESCRIPTION
2409         Provides default handling for relaxing for back ends which
2410         don't do relaxing -- i.e., does nothing.
2411 */
2412
2413 /*ARGSUSED*/
2414 boolean
2415 bfd_generic_relax_section (abfd, section, link_info, again)
2416      bfd *abfd;
2417      asection *section;
2418      struct bfd_link_info *link_info;
2419      boolean *again;
2420 {
2421   *again = false;
2422   return true;
2423 }
2424
2425 /*
2426 INTERNAL_FUNCTION
2427         bfd_generic_get_relocated_section_contents
2428
2429 SYNOPSIS
2430         bfd_byte *
2431            bfd_generic_get_relocated_section_contents (bfd *abfd,
2432              struct bfd_link_info *link_info,
2433              struct bfd_link_order *link_order,
2434              bfd_byte *data,
2435              boolean relocateable,
2436              asymbol **symbols);
2437
2438 DESCRIPTION
2439         Provides default handling of relocation effort for back ends
2440         which can't be bothered to do it efficiently.
2441
2442 */
2443
2444 bfd_byte *
2445 bfd_generic_get_relocated_section_contents (abfd, link_info, link_order, data,
2446                                             relocateable, symbols)
2447      bfd *abfd;
2448      struct bfd_link_info *link_info;
2449      struct bfd_link_order *link_order;
2450      bfd_byte *data;
2451      boolean relocateable;
2452      asymbol **symbols;
2453 {
2454   /* Get enough memory to hold the stuff */
2455   bfd *input_bfd = link_order->u.indirect.section->owner;
2456   asection *input_section = link_order->u.indirect.section;
2457
2458   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
2459   arelent **reloc_vector = NULL;
2460   long reloc_count;
2461
2462   if (reloc_size < 0)
2463     goto error_return;
2464
2465   reloc_vector = (arelent **) bfd_malloc ((size_t) reloc_size);
2466   if (reloc_vector == NULL && reloc_size != 0)
2467     goto error_return;
2468
2469   /* read in the section */
2470   if (!bfd_get_section_contents (input_bfd,
2471                                  input_section,
2472                                  (PTR) data,
2473                                  0,
2474                                  input_section->_raw_size))
2475     goto error_return;
2476
2477   /* We're not relaxing the section, so just copy the size info */
2478   input_section->_cooked_size = input_section->_raw_size;
2479   input_section->reloc_done = true;
2480
2481   reloc_count = bfd_canonicalize_reloc (input_bfd,
2482                                         input_section,
2483                                         reloc_vector,
2484                                         symbols);
2485   if (reloc_count < 0)
2486     goto error_return;
2487
2488   if (reloc_count > 0)
2489     {
2490       arelent **parent;
2491       for (parent = reloc_vector; *parent != (arelent *) NULL;
2492            parent++)
2493         {
2494           char *error_message = (char *) NULL;
2495           bfd_reloc_status_type r =
2496             bfd_perform_relocation (input_bfd,
2497                                     *parent,
2498                                     (PTR) data,
2499                                     input_section,
2500                                     relocateable ? abfd : (bfd *) NULL,
2501                                     &error_message);
2502
2503           if (relocateable)
2504             {
2505               asection *os = input_section->output_section;
2506
2507               /* A partial link, so keep the relocs */
2508               os->orelocation[os->reloc_count] = *parent;
2509               os->reloc_count++;
2510             }
2511
2512           if (r != bfd_reloc_ok)
2513             {
2514               switch (r)
2515                 {
2516                 case bfd_reloc_undefined:
2517                   if (!((*link_info->callbacks->undefined_symbol)
2518                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
2519                          input_bfd, input_section, (*parent)->address)))
2520                     goto error_return;
2521                   break;
2522                 case bfd_reloc_dangerous:
2523                   BFD_ASSERT (error_message != (char *) NULL);
2524                   if (!((*link_info->callbacks->reloc_dangerous)
2525                         (link_info, error_message, input_bfd, input_section,
2526                          (*parent)->address)))
2527                     goto error_return;
2528                   break;
2529                 case bfd_reloc_overflow:
2530                   if (!((*link_info->callbacks->reloc_overflow)
2531                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
2532                          (*parent)->howto->name, (*parent)->addend,
2533                          input_bfd, input_section, (*parent)->address)))
2534                     goto error_return;
2535                   break;
2536                 case bfd_reloc_outofrange:
2537                 default:
2538                   abort ();
2539                   break;
2540                 }
2541
2542             }
2543         }
2544     }
2545   if (reloc_vector != NULL)
2546     free (reloc_vector);
2547   return data;
2548
2549 error_return:
2550   if (reloc_vector != NULL)
2551     free (reloc_vector);
2552   return NULL;
2553 }