]> Git Repo - binutils.git/blob - bfd/elf64-ppc.c
bfd/
[binutils.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright 1999, 2000, 2001, 2002, 2003, 2004
3    Free Software Foundation, Inc.
4    Written by Linus Nordberg, Swox AB <[email protected]>,
5    based on elf32-ppc.c by Ian Lance Taylor.
6    Largely rewritten by Alan Modra <[email protected]>
7
8    This file is part of BFD, the Binary File Descriptor library.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License along
21    with this program; if not, write to the Free Software Foundation, Inc.,
22    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
23
24 /* The 64-bit PowerPC ELF ABI may be found at
25    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
26    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
27
28 #include "bfd.h"
29 #include "sysdep.h"
30 #include "bfdlink.h"
31 #include "libbfd.h"
32 #include "elf-bfd.h"
33 #include "elf/ppc64.h"
34 #include "elf64-ppc.h"
35
36 static bfd_reloc_status_type ppc64_elf_ha_reloc
37   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
38 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
39   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
40 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
41   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
42 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
43   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
44 static bfd_reloc_status_type ppc64_elf_toc_reloc
45   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
46 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
47   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
48 static bfd_reloc_status_type ppc64_elf_toc64_reloc
49   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
50 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
51   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
52
53
54 #define TARGET_LITTLE_SYM       bfd_elf64_powerpcle_vec
55 #define TARGET_LITTLE_NAME      "elf64-powerpcle"
56 #define TARGET_BIG_SYM          bfd_elf64_powerpc_vec
57 #define TARGET_BIG_NAME         "elf64-powerpc"
58 #define ELF_ARCH                bfd_arch_powerpc
59 #define ELF_MACHINE_CODE        EM_PPC64
60 #define ELF_MAXPAGESIZE         0x10000
61 #define elf_info_to_howto       ppc64_elf_info_to_howto
62
63 #define elf_backend_want_got_sym 0
64 #define elf_backend_want_plt_sym 0
65 #define elf_backend_plt_alignment 3
66 #define elf_backend_plt_not_loaded 1
67 #define elf_backend_got_symbol_offset 0
68 #define elf_backend_got_header_size 8
69 #define elf_backend_can_gc_sections 1
70 #define elf_backend_can_refcount 1
71 #define elf_backend_rela_normal 1
72
73 #define bfd_elf64_mkobject                    ppc64_elf_mkobject
74 #define bfd_elf64_bfd_reloc_type_lookup       ppc64_elf_reloc_type_lookup
75 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
76 #define bfd_elf64_new_section_hook            ppc64_elf_new_section_hook
77 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
78 #define bfd_elf64_bfd_link_hash_table_free    ppc64_elf_link_hash_table_free
79
80 #define elf_backend_object_p                  ppc64_elf_object_p
81 #define elf_backend_grok_prstatus             ppc64_elf_grok_prstatus
82 #define elf_backend_grok_psinfo               ppc64_elf_grok_psinfo
83 #define elf_backend_create_dynamic_sections   ppc64_elf_create_dynamic_sections
84 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
85 #define elf_backend_add_symbol_hook           ppc64_elf_add_symbol_hook
86 #define elf_backend_check_relocs              ppc64_elf_check_relocs
87 #define elf_backend_gc_mark_hook              ppc64_elf_gc_mark_hook
88 #define elf_backend_gc_sweep_hook             ppc64_elf_gc_sweep_hook
89 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
90 #define elf_backend_hide_symbol               ppc64_elf_hide_symbol
91 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
92 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
93 #define elf_backend_relocate_section          ppc64_elf_relocate_section
94 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
95 #define elf_backend_reloc_type_class          ppc64_elf_reloc_type_class
96 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
97 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
98 #define elf_backend_special_sections          ppc64_elf_special_sections
99
100 /* The name of the dynamic interpreter.  This is put in the .interp
101    section.  */
102 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
103
104 /* The size in bytes of an entry in the procedure linkage table.  */
105 #define PLT_ENTRY_SIZE 24
106
107 /* The initial size of the plt reserved for the dynamic linker.  */
108 #define PLT_INITIAL_ENTRY_SIZE PLT_ENTRY_SIZE
109
110 /* TOC base pointers offset from start of TOC.  */
111 #define TOC_BASE_OFF    0x8000
112
113 /* Offset of tp and dtp pointers from start of TLS block.  */
114 #define TP_OFFSET       0x7000
115 #define DTP_OFFSET      0x8000
116
117 /* .plt call stub instructions.  The normal stub is like this, but
118    sometimes the .plt entry crosses a 64k boundary and we need to
119    insert an addis to adjust r12.  */
120 #define PLT_CALL_STUB_SIZE (7*4)
121 #define ADDIS_R12_R2    0x3d820000      /* addis %r12,%r2,xxx@ha     */
122 #define STD_R2_40R1     0xf8410028      /* std   %r2,40(%r1)         */
123 #define LD_R11_0R12     0xe96c0000      /* ld    %r11,xxx+0@l(%r12)  */
124 #define LD_R2_0R12      0xe84c0000      /* ld    %r2,xxx+8@l(%r12)   */
125 #define MTCTR_R11       0x7d6903a6      /* mtctr %r11                */
126                                         /* ld    %r11,xxx+16@l(%r12) */
127 #define BCTR            0x4e800420      /* bctr                      */
128
129
130 #define ADDIS_R2_R2     0x3c420000      /* addis %r2,%r2,off@ha  */
131 #define ADDI_R2_R2      0x38420000      /* addi  %r2,%r2,off@l   */
132
133 #define LD_R2_40R1      0xe8410028      /* ld    %r2,40(%r1)     */
134
135 /* glink call stub instructions.  We enter with the index in R0, and the
136    address of glink entry in CTR.  From that, we can calculate PLT0.  */
137 #define GLINK_CALL_STUB_SIZE (16*4)
138 #define MFCTR_R12       0x7d8902a6      /* mfctr  %r12                  */
139 #define SLDI_R11_R0_3   0x780b1f24      /* sldi   %r11,%r0,3            */
140 #define ADDIC_R2_R0_32K 0x34408000      /* addic. %r2,%r0,-32768        */
141 #define SUB_R12_R12_R11 0x7d8b6050      /* sub    %r12,%r12,%r11        */
142 #define SRADI_R2_R2_63  0x7c42fe76      /* sradi  %r2,%r2,63            */
143 #define SLDI_R11_R0_2   0x780b1764      /* sldi   %r11,%r0,2            */
144 #define AND_R2_R2_R11   0x7c425838      /* and    %r2,%r2,%r11          */
145                                         /* sub    %r12,%r12,%r11        */
146 #define ADD_R12_R12_R2  0x7d8c1214      /* add    %r12,%r12,%r2         */
147 #define ADDIS_R12_R12   0x3d8c0000      /* addis  %r12,%r12,xxx@ha      */
148                                         /* ld     %r11,xxx@l(%r12)      */
149 #define ADDI_R12_R12    0x398c0000      /* addi   %r12,%r12,xxx@l       */
150                                         /* ld     %r2,8(%r12)           */
151                                         /* mtctr  %r11                  */
152                                         /* ld     %r11,16(%r12)         */
153                                         /* bctr                         */
154
155 /* Pad with this.  */
156 #define NOP             0x60000000
157
158 /* Some other nops.  */
159 #define CROR_151515     0x4def7b82
160 #define CROR_313131     0x4ffffb82
161
162 /* .glink entries for the first 32k functions are two instructions.  */
163 #define LI_R0_0         0x38000000      /* li    %r0,0          */
164 #define B_DOT           0x48000000      /* b     .              */
165
166 /* After that, we need two instructions to load the index, followed by
167    a branch.  */
168 #define LIS_R0_0        0x3c000000      /* lis   %r0,0          */
169 #define ORI_R0_R0_0     0x60000000      /* ori   %r0,%r0,0      */
170
171 /* Instructions to save and restore floating point regs.  */
172 #define STFD_FR0_0R1    0xd8010000      /* stfd  %fr0,0(%r1)    */
173 #define LFD_FR0_0R1     0xc8010000      /* lfd   %fr0,0(%r1)    */
174 #define BLR             0x4e800020      /* blr                  */
175
176 /* Since .opd is an array of descriptors and each entry will end up
177    with identical R_PPC64_RELATIVE relocs, there is really no need to
178    propagate .opd relocs;  The dynamic linker should be taught to
179    relocate .opd without reloc entries.  */
180 #ifndef NO_OPD_RELOCS
181 #define NO_OPD_RELOCS 0
182 #endif
183 \f
184 #define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
185
186 /* Relocation HOWTO's.  */
187 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
188
189 static reloc_howto_type ppc64_elf_howto_raw[] = {
190   /* This reloc does nothing.  */
191   HOWTO (R_PPC64_NONE,          /* type */
192          0,                     /* rightshift */
193          2,                     /* size (0 = byte, 1 = short, 2 = long) */
194          32,                    /* bitsize */
195          FALSE,                 /* pc_relative */
196          0,                     /* bitpos */
197          complain_overflow_dont, /* complain_on_overflow */
198          bfd_elf_generic_reloc, /* special_function */
199          "R_PPC64_NONE",        /* name */
200          FALSE,                 /* partial_inplace */
201          0,                     /* src_mask */
202          0,                     /* dst_mask */
203          FALSE),                /* pcrel_offset */
204
205   /* A standard 32 bit relocation.  */
206   HOWTO (R_PPC64_ADDR32,        /* type */
207          0,                     /* rightshift */
208          2,                     /* size (0 = byte, 1 = short, 2 = long) */
209          32,                    /* bitsize */
210          FALSE,                 /* pc_relative */
211          0,                     /* bitpos */
212          complain_overflow_bitfield, /* complain_on_overflow */
213          bfd_elf_generic_reloc, /* special_function */
214          "R_PPC64_ADDR32",      /* name */
215          FALSE,                 /* partial_inplace */
216          0,                     /* src_mask */
217          0xffffffff,            /* dst_mask */
218          FALSE),                /* pcrel_offset */
219
220   /* An absolute 26 bit branch; the lower two bits must be zero.
221      FIXME: we don't check that, we just clear them.  */
222   HOWTO (R_PPC64_ADDR24,        /* type */
223          0,                     /* rightshift */
224          2,                     /* size (0 = byte, 1 = short, 2 = long) */
225          26,                    /* bitsize */
226          FALSE,                 /* pc_relative */
227          0,                     /* bitpos */
228          complain_overflow_bitfield, /* complain_on_overflow */
229          bfd_elf_generic_reloc, /* special_function */
230          "R_PPC64_ADDR24",      /* name */
231          FALSE,                 /* partial_inplace */
232          0,                     /* src_mask */
233          0x03fffffc,            /* dst_mask */
234          FALSE),                /* pcrel_offset */
235
236   /* A standard 16 bit relocation.  */
237   HOWTO (R_PPC64_ADDR16,        /* type */
238          0,                     /* rightshift */
239          1,                     /* size (0 = byte, 1 = short, 2 = long) */
240          16,                    /* bitsize */
241          FALSE,                 /* pc_relative */
242          0,                     /* bitpos */
243          complain_overflow_bitfield, /* complain_on_overflow */
244          bfd_elf_generic_reloc, /* special_function */
245          "R_PPC64_ADDR16",      /* name */
246          FALSE,                 /* partial_inplace */
247          0,                     /* src_mask */
248          0xffff,                /* dst_mask */
249          FALSE),                /* pcrel_offset */
250
251   /* A 16 bit relocation without overflow.  */
252   HOWTO (R_PPC64_ADDR16_LO,     /* type */
253          0,                     /* rightshift */
254          1,                     /* size (0 = byte, 1 = short, 2 = long) */
255          16,                    /* bitsize */
256          FALSE,                 /* pc_relative */
257          0,                     /* bitpos */
258          complain_overflow_dont,/* complain_on_overflow */
259          bfd_elf_generic_reloc, /* special_function */
260          "R_PPC64_ADDR16_LO",   /* name */
261          FALSE,                 /* partial_inplace */
262          0,                     /* src_mask */
263          0xffff,                /* dst_mask */
264          FALSE),                /* pcrel_offset */
265
266   /* Bits 16-31 of an address.  */
267   HOWTO (R_PPC64_ADDR16_HI,     /* type */
268          16,                    /* rightshift */
269          1,                     /* size (0 = byte, 1 = short, 2 = long) */
270          16,                    /* bitsize */
271          FALSE,                 /* pc_relative */
272          0,                     /* bitpos */
273          complain_overflow_dont, /* complain_on_overflow */
274          bfd_elf_generic_reloc, /* special_function */
275          "R_PPC64_ADDR16_HI",   /* name */
276          FALSE,                 /* partial_inplace */
277          0,                     /* src_mask */
278          0xffff,                /* dst_mask */
279          FALSE),                /* pcrel_offset */
280
281   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
282      bits, treated as a signed number, is negative.  */
283   HOWTO (R_PPC64_ADDR16_HA,     /* type */
284          16,                    /* rightshift */
285          1,                     /* size (0 = byte, 1 = short, 2 = long) */
286          16,                    /* bitsize */
287          FALSE,                 /* pc_relative */
288          0,                     /* bitpos */
289          complain_overflow_dont, /* complain_on_overflow */
290          ppc64_elf_ha_reloc,    /* special_function */
291          "R_PPC64_ADDR16_HA",   /* name */
292          FALSE,                 /* partial_inplace */
293          0,                     /* src_mask */
294          0xffff,                /* dst_mask */
295          FALSE),                /* pcrel_offset */
296
297   /* An absolute 16 bit branch; the lower two bits must be zero.
298      FIXME: we don't check that, we just clear them.  */
299   HOWTO (R_PPC64_ADDR14,        /* type */
300          0,                     /* rightshift */
301          2,                     /* size (0 = byte, 1 = short, 2 = long) */
302          16,                    /* bitsize */
303          FALSE,                 /* pc_relative */
304          0,                     /* bitpos */
305          complain_overflow_bitfield, /* complain_on_overflow */
306          bfd_elf_generic_reloc, /* special_function */
307          "R_PPC64_ADDR14",      /* name */
308          FALSE,                 /* partial_inplace */
309          0,                     /* src_mask */
310          0x0000fffc,            /* dst_mask */
311          FALSE),                /* pcrel_offset */
312
313   /* An absolute 16 bit branch, for which bit 10 should be set to
314      indicate that the branch is expected to be taken.  The lower two
315      bits must be zero.  */
316   HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
317          0,                     /* rightshift */
318          2,                     /* size (0 = byte, 1 = short, 2 = long) */
319          16,                    /* bitsize */
320          FALSE,                 /* pc_relative */
321          0,                     /* bitpos */
322          complain_overflow_bitfield, /* complain_on_overflow */
323          ppc64_elf_brtaken_reloc, /* special_function */
324          "R_PPC64_ADDR14_BRTAKEN",/* name */
325          FALSE,                 /* partial_inplace */
326          0,                     /* src_mask */
327          0x0000fffc,            /* dst_mask */
328          FALSE),                /* pcrel_offset */
329
330   /* An absolute 16 bit branch, for which bit 10 should be set to
331      indicate that the branch is not expected to be taken.  The lower
332      two bits must be zero.  */
333   HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
334          0,                     /* rightshift */
335          2,                     /* size (0 = byte, 1 = short, 2 = long) */
336          16,                    /* bitsize */
337          FALSE,                 /* pc_relative */
338          0,                     /* bitpos */
339          complain_overflow_bitfield, /* complain_on_overflow */
340          ppc64_elf_brtaken_reloc, /* special_function */
341          "R_PPC64_ADDR14_BRNTAKEN",/* name */
342          FALSE,                 /* partial_inplace */
343          0,                     /* src_mask */
344          0x0000fffc,            /* dst_mask */
345          FALSE),                /* pcrel_offset */
346
347   /* A relative 26 bit branch; the lower two bits must be zero.  */
348   HOWTO (R_PPC64_REL24,         /* type */
349          0,                     /* rightshift */
350          2,                     /* size (0 = byte, 1 = short, 2 = long) */
351          26,                    /* bitsize */
352          TRUE,                  /* pc_relative */
353          0,                     /* bitpos */
354          complain_overflow_signed, /* complain_on_overflow */
355          bfd_elf_generic_reloc, /* special_function */
356          "R_PPC64_REL24",       /* name */
357          FALSE,                 /* partial_inplace */
358          0,                     /* src_mask */
359          0x03fffffc,            /* dst_mask */
360          TRUE),                 /* pcrel_offset */
361
362   /* A relative 16 bit branch; the lower two bits must be zero.  */
363   HOWTO (R_PPC64_REL14,         /* type */
364          0,                     /* rightshift */
365          2,                     /* size (0 = byte, 1 = short, 2 = long) */
366          16,                    /* bitsize */
367          TRUE,                  /* pc_relative */
368          0,                     /* bitpos */
369          complain_overflow_signed, /* complain_on_overflow */
370          bfd_elf_generic_reloc, /* special_function */
371          "R_PPC64_REL14",       /* name */
372          FALSE,                 /* partial_inplace */
373          0,                     /* src_mask */
374          0x0000fffc,            /* dst_mask */
375          TRUE),                 /* pcrel_offset */
376
377   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
378      the branch is expected to be taken.  The lower two bits must be
379      zero.  */
380   HOWTO (R_PPC64_REL14_BRTAKEN, /* type */
381          0,                     /* rightshift */
382          2,                     /* size (0 = byte, 1 = short, 2 = long) */
383          16,                    /* bitsize */
384          TRUE,                  /* pc_relative */
385          0,                     /* bitpos */
386          complain_overflow_signed, /* complain_on_overflow */
387          ppc64_elf_brtaken_reloc, /* special_function */
388          "R_PPC64_REL14_BRTAKEN", /* name */
389          FALSE,                 /* partial_inplace */
390          0,                     /* src_mask */
391          0x0000fffc,            /* dst_mask */
392          TRUE),                 /* pcrel_offset */
393
394   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
395      the branch is not expected to be taken.  The lower two bits must
396      be zero.  */
397   HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
398          0,                     /* rightshift */
399          2,                     /* size (0 = byte, 1 = short, 2 = long) */
400          16,                    /* bitsize */
401          TRUE,                  /* pc_relative */
402          0,                     /* bitpos */
403          complain_overflow_signed, /* complain_on_overflow */
404          ppc64_elf_brtaken_reloc, /* special_function */
405          "R_PPC64_REL14_BRNTAKEN",/* name */
406          FALSE,                 /* partial_inplace */
407          0,                     /* src_mask */
408          0x0000fffc,            /* dst_mask */
409          TRUE),                 /* pcrel_offset */
410
411   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
412      symbol.  */
413   HOWTO (R_PPC64_GOT16,         /* type */
414          0,                     /* rightshift */
415          1,                     /* size (0 = byte, 1 = short, 2 = long) */
416          16,                    /* bitsize */
417          FALSE,                 /* pc_relative */
418          0,                     /* bitpos */
419          complain_overflow_signed, /* complain_on_overflow */
420          ppc64_elf_unhandled_reloc, /* special_function */
421          "R_PPC64_GOT16",       /* name */
422          FALSE,                 /* partial_inplace */
423          0,                     /* src_mask */
424          0xffff,                /* dst_mask */
425          FALSE),                /* pcrel_offset */
426
427   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
428      the symbol.  */
429   HOWTO (R_PPC64_GOT16_LO,      /* type */
430          0,                     /* rightshift */
431          1,                     /* size (0 = byte, 1 = short, 2 = long) */
432          16,                    /* bitsize */
433          FALSE,                 /* pc_relative */
434          0,                     /* bitpos */
435          complain_overflow_dont, /* complain_on_overflow */
436          ppc64_elf_unhandled_reloc, /* special_function */
437          "R_PPC64_GOT16_LO",    /* name */
438          FALSE,                 /* partial_inplace */
439          0,                     /* src_mask */
440          0xffff,                /* dst_mask */
441          FALSE),                /* pcrel_offset */
442
443   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
444      the symbol.  */
445   HOWTO (R_PPC64_GOT16_HI,      /* type */
446          16,                    /* rightshift */
447          1,                     /* size (0 = byte, 1 = short, 2 = long) */
448          16,                    /* bitsize */
449          FALSE,                 /* pc_relative */
450          0,                     /* bitpos */
451          complain_overflow_dont,/* complain_on_overflow */
452          ppc64_elf_unhandled_reloc, /* special_function */
453          "R_PPC64_GOT16_HI",    /* name */
454          FALSE,                 /* partial_inplace */
455          0,                     /* src_mask */
456          0xffff,                /* dst_mask */
457          FALSE),                /* pcrel_offset */
458
459   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
460      the symbol.  */
461   HOWTO (R_PPC64_GOT16_HA,      /* type */
462          16,                    /* rightshift */
463          1,                     /* size (0 = byte, 1 = short, 2 = long) */
464          16,                    /* bitsize */
465          FALSE,                 /* pc_relative */
466          0,                     /* bitpos */
467          complain_overflow_dont,/* complain_on_overflow */
468          ppc64_elf_unhandled_reloc, /* special_function */
469          "R_PPC64_GOT16_HA",    /* name */
470          FALSE,                 /* partial_inplace */
471          0,                     /* src_mask */
472          0xffff,                /* dst_mask */
473          FALSE),                /* pcrel_offset */
474
475   /* This is used only by the dynamic linker.  The symbol should exist
476      both in the object being run and in some shared library.  The
477      dynamic linker copies the data addressed by the symbol from the
478      shared library into the object, because the object being
479      run has to have the data at some particular address.  */
480   HOWTO (R_PPC64_COPY,          /* type */
481          0,                     /* rightshift */
482          0,                     /* this one is variable size */
483          0,                     /* bitsize */
484          FALSE,                 /* pc_relative */
485          0,                     /* bitpos */
486          complain_overflow_dont, /* complain_on_overflow */
487          ppc64_elf_unhandled_reloc, /* special_function */
488          "R_PPC64_COPY",        /* name */
489          FALSE,                 /* partial_inplace */
490          0,                     /* src_mask */
491          0,                     /* dst_mask */
492          FALSE),                /* pcrel_offset */
493
494   /* Like R_PPC64_ADDR64, but used when setting global offset table
495      entries.  */
496   HOWTO (R_PPC64_GLOB_DAT,      /* type */
497          0,                     /* rightshift */
498          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
499          64,                    /* bitsize */
500          FALSE,                 /* pc_relative */
501          0,                     /* bitpos */
502          complain_overflow_dont, /* complain_on_overflow */
503          ppc64_elf_unhandled_reloc,  /* special_function */
504          "R_PPC64_GLOB_DAT",    /* name */
505          FALSE,                 /* partial_inplace */
506          0,                     /* src_mask */
507          ONES (64),             /* dst_mask */
508          FALSE),                /* pcrel_offset */
509
510   /* Created by the link editor.  Marks a procedure linkage table
511      entry for a symbol.  */
512   HOWTO (R_PPC64_JMP_SLOT,      /* type */
513          0,                     /* rightshift */
514          0,                     /* size (0 = byte, 1 = short, 2 = long) */
515          0,                     /* bitsize */
516          FALSE,                 /* pc_relative */
517          0,                     /* bitpos */
518          complain_overflow_dont, /* complain_on_overflow */
519          ppc64_elf_unhandled_reloc, /* special_function */
520          "R_PPC64_JMP_SLOT",    /* name */
521          FALSE,                 /* partial_inplace */
522          0,                     /* src_mask */
523          0,                     /* dst_mask */
524          FALSE),                /* pcrel_offset */
525
526   /* Used only by the dynamic linker.  When the object is run, this
527      doubleword64 is set to the load address of the object, plus the
528      addend.  */
529   HOWTO (R_PPC64_RELATIVE,      /* type */
530          0,                     /* rightshift */
531          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
532          64,                    /* bitsize */
533          FALSE,                 /* pc_relative */
534          0,                     /* bitpos */
535          complain_overflow_dont, /* complain_on_overflow */
536          bfd_elf_generic_reloc, /* special_function */
537          "R_PPC64_RELATIVE",    /* name */
538          FALSE,                 /* partial_inplace */
539          0,                     /* src_mask */
540          ONES (64),             /* dst_mask */
541          FALSE),                /* pcrel_offset */
542
543   /* Like R_PPC64_ADDR32, but may be unaligned.  */
544   HOWTO (R_PPC64_UADDR32,       /* type */
545          0,                     /* rightshift */
546          2,                     /* size (0 = byte, 1 = short, 2 = long) */
547          32,                    /* bitsize */
548          FALSE,                 /* pc_relative */
549          0,                     /* bitpos */
550          complain_overflow_bitfield, /* complain_on_overflow */
551          bfd_elf_generic_reloc, /* special_function */
552          "R_PPC64_UADDR32",     /* name */
553          FALSE,                 /* partial_inplace */
554          0,                     /* src_mask */
555          0xffffffff,            /* dst_mask */
556          FALSE),                /* pcrel_offset */
557
558   /* Like R_PPC64_ADDR16, but may be unaligned.  */
559   HOWTO (R_PPC64_UADDR16,       /* type */
560          0,                     /* rightshift */
561          1,                     /* size (0 = byte, 1 = short, 2 = long) */
562          16,                    /* bitsize */
563          FALSE,                 /* pc_relative */
564          0,                     /* bitpos */
565          complain_overflow_bitfield, /* complain_on_overflow */
566          bfd_elf_generic_reloc, /* special_function */
567          "R_PPC64_UADDR16",     /* name */
568          FALSE,                 /* partial_inplace */
569          0,                     /* src_mask */
570          0xffff,                /* dst_mask */
571          FALSE),                /* pcrel_offset */
572
573   /* 32-bit PC relative.  */
574   HOWTO (R_PPC64_REL32,         /* type */
575          0,                     /* rightshift */
576          2,                     /* size (0 = byte, 1 = short, 2 = long) */
577          32,                    /* bitsize */
578          TRUE,                  /* pc_relative */
579          0,                     /* bitpos */
580          /* FIXME: Verify.  Was complain_overflow_bitfield.  */
581          complain_overflow_signed, /* complain_on_overflow */
582          bfd_elf_generic_reloc, /* special_function */
583          "R_PPC64_REL32",       /* name */
584          FALSE,                 /* partial_inplace */
585          0,                     /* src_mask */
586          0xffffffff,            /* dst_mask */
587          TRUE),                 /* pcrel_offset */
588
589   /* 32-bit relocation to the symbol's procedure linkage table.  */
590   HOWTO (R_PPC64_PLT32,         /* type */
591          0,                     /* rightshift */
592          2,                     /* size (0 = byte, 1 = short, 2 = long) */
593          32,                    /* bitsize */
594          FALSE,                 /* pc_relative */
595          0,                     /* bitpos */
596          complain_overflow_bitfield, /* complain_on_overflow */
597          ppc64_elf_unhandled_reloc, /* special_function */
598          "R_PPC64_PLT32",       /* name */
599          FALSE,                 /* partial_inplace */
600          0,                     /* src_mask */
601          0xffffffff,            /* dst_mask */
602          FALSE),                /* pcrel_offset */
603
604   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
605      FIXME: R_PPC64_PLTREL32 not supported.  */
606   HOWTO (R_PPC64_PLTREL32,      /* type */
607          0,                     /* rightshift */
608          2,                     /* size (0 = byte, 1 = short, 2 = long) */
609          32,                    /* bitsize */
610          TRUE,                  /* pc_relative */
611          0,                     /* bitpos */
612          complain_overflow_signed, /* complain_on_overflow */
613          bfd_elf_generic_reloc, /* special_function */
614          "R_PPC64_PLTREL32",    /* name */
615          FALSE,                 /* partial_inplace */
616          0,                     /* src_mask */
617          0xffffffff,            /* dst_mask */
618          TRUE),                 /* pcrel_offset */
619
620   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
621      the symbol.  */
622   HOWTO (R_PPC64_PLT16_LO,      /* type */
623          0,                     /* rightshift */
624          1,                     /* size (0 = byte, 1 = short, 2 = long) */
625          16,                    /* bitsize */
626          FALSE,                 /* pc_relative */
627          0,                     /* bitpos */
628          complain_overflow_dont, /* complain_on_overflow */
629          ppc64_elf_unhandled_reloc, /* special_function */
630          "R_PPC64_PLT16_LO",    /* name */
631          FALSE,                 /* partial_inplace */
632          0,                     /* src_mask */
633          0xffff,                /* dst_mask */
634          FALSE),                /* pcrel_offset */
635
636   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
637      the symbol.  */
638   HOWTO (R_PPC64_PLT16_HI,      /* type */
639          16,                    /* rightshift */
640          1,                     /* size (0 = byte, 1 = short, 2 = long) */
641          16,                    /* bitsize */
642          FALSE,                 /* pc_relative */
643          0,                     /* bitpos */
644          complain_overflow_dont, /* complain_on_overflow */
645          ppc64_elf_unhandled_reloc, /* special_function */
646          "R_PPC64_PLT16_HI",    /* name */
647          FALSE,                 /* partial_inplace */
648          0,                     /* src_mask */
649          0xffff,                /* dst_mask */
650          FALSE),                /* pcrel_offset */
651
652   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
653      the symbol.  */
654   HOWTO (R_PPC64_PLT16_HA,      /* type */
655          16,                    /* rightshift */
656          1,                     /* size (0 = byte, 1 = short, 2 = long) */
657          16,                    /* bitsize */
658          FALSE,                 /* pc_relative */
659          0,                     /* bitpos */
660          complain_overflow_dont, /* complain_on_overflow */
661          ppc64_elf_unhandled_reloc, /* special_function */
662          "R_PPC64_PLT16_HA",    /* name */
663          FALSE,                 /* partial_inplace */
664          0,                     /* src_mask */
665          0xffff,                /* dst_mask */
666          FALSE),                /* pcrel_offset */
667
668   /* 16-bit section relative relocation.  */
669   HOWTO (R_PPC64_SECTOFF,       /* type */
670          0,                     /* rightshift */
671          1,                     /* size (0 = byte, 1 = short, 2 = long) */
672          16,                    /* bitsize */
673          FALSE,                 /* pc_relative */
674          0,                     /* bitpos */
675          complain_overflow_bitfield, /* complain_on_overflow */
676          ppc64_elf_sectoff_reloc, /* special_function */
677          "R_PPC64_SECTOFF",     /* name */
678          FALSE,                 /* partial_inplace */
679          0,                     /* src_mask */
680          0xffff,                /* dst_mask */
681          FALSE),                /* pcrel_offset */
682
683   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
684   HOWTO (R_PPC64_SECTOFF_LO,    /* type */
685          0,                     /* rightshift */
686          1,                     /* size (0 = byte, 1 = short, 2 = long) */
687          16,                    /* bitsize */
688          FALSE,                 /* pc_relative */
689          0,                     /* bitpos */
690          complain_overflow_dont, /* complain_on_overflow */
691          ppc64_elf_sectoff_reloc, /* special_function */
692          "R_PPC64_SECTOFF_LO",  /* name */
693          FALSE,                 /* partial_inplace */
694          0,                     /* src_mask */
695          0xffff,                /* dst_mask */
696          FALSE),                /* pcrel_offset */
697
698   /* 16-bit upper half section relative relocation.  */
699   HOWTO (R_PPC64_SECTOFF_HI,    /* type */
700          16,                    /* rightshift */
701          1,                     /* size (0 = byte, 1 = short, 2 = long) */
702          16,                    /* bitsize */
703          FALSE,                 /* pc_relative */
704          0,                     /* bitpos */
705          complain_overflow_dont, /* complain_on_overflow */
706          ppc64_elf_sectoff_reloc, /* special_function */
707          "R_PPC64_SECTOFF_HI",  /* name */
708          FALSE,                 /* partial_inplace */
709          0,                     /* src_mask */
710          0xffff,                /* dst_mask */
711          FALSE),                /* pcrel_offset */
712
713   /* 16-bit upper half adjusted section relative relocation.  */
714   HOWTO (R_PPC64_SECTOFF_HA,    /* type */
715          16,                    /* rightshift */
716          1,                     /* size (0 = byte, 1 = short, 2 = long) */
717          16,                    /* bitsize */
718          FALSE,                 /* pc_relative */
719          0,                     /* bitpos */
720          complain_overflow_dont, /* complain_on_overflow */
721          ppc64_elf_sectoff_ha_reloc, /* special_function */
722          "R_PPC64_SECTOFF_HA",  /* name */
723          FALSE,                 /* partial_inplace */
724          0,                     /* src_mask */
725          0xffff,                /* dst_mask */
726          FALSE),                /* pcrel_offset */
727
728   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
729   HOWTO (R_PPC64_REL30,         /* type */
730          2,                     /* rightshift */
731          2,                     /* size (0 = byte, 1 = short, 2 = long) */
732          30,                    /* bitsize */
733          TRUE,                  /* pc_relative */
734          0,                     /* bitpos */
735          complain_overflow_dont, /* complain_on_overflow */
736          bfd_elf_generic_reloc, /* special_function */
737          "R_PPC64_REL30",       /* name */
738          FALSE,                 /* partial_inplace */
739          0,                     /* src_mask */
740          0xfffffffc,            /* dst_mask */
741          TRUE),                 /* pcrel_offset */
742
743   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
744
745   /* A standard 64-bit relocation.  */
746   HOWTO (R_PPC64_ADDR64,        /* type */
747          0,                     /* rightshift */
748          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
749          64,                    /* bitsize */
750          FALSE,                 /* pc_relative */
751          0,                     /* bitpos */
752          complain_overflow_dont, /* complain_on_overflow */
753          bfd_elf_generic_reloc, /* special_function */
754          "R_PPC64_ADDR64",      /* name */
755          FALSE,                 /* partial_inplace */
756          0,                     /* src_mask */
757          ONES (64),             /* dst_mask */
758          FALSE),                /* pcrel_offset */
759
760   /* The bits 32-47 of an address.  */
761   HOWTO (R_PPC64_ADDR16_HIGHER, /* type */
762          32,                    /* rightshift */
763          1,                     /* size (0 = byte, 1 = short, 2 = long) */
764          16,                    /* bitsize */
765          FALSE,                 /* pc_relative */
766          0,                     /* bitpos */
767          complain_overflow_dont, /* complain_on_overflow */
768          bfd_elf_generic_reloc, /* special_function */
769          "R_PPC64_ADDR16_HIGHER", /* name */
770          FALSE,                 /* partial_inplace */
771          0,                     /* src_mask */
772          0xffff,                /* dst_mask */
773          FALSE),                /* pcrel_offset */
774
775   /* The bits 32-47 of an address, plus 1 if the contents of the low
776      16 bits, treated as a signed number, is negative.  */
777   HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
778          32,                    /* rightshift */
779          1,                     /* size (0 = byte, 1 = short, 2 = long) */
780          16,                    /* bitsize */
781          FALSE,                 /* pc_relative */
782          0,                     /* bitpos */
783          complain_overflow_dont, /* complain_on_overflow */
784          ppc64_elf_ha_reloc,    /* special_function */
785          "R_PPC64_ADDR16_HIGHERA", /* name */
786          FALSE,                 /* partial_inplace */
787          0,                     /* src_mask */
788          0xffff,                /* dst_mask */
789          FALSE),                /* pcrel_offset */
790
791   /* The bits 48-63 of an address.  */
792   HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
793          48,                    /* rightshift */
794          1,                     /* size (0 = byte, 1 = short, 2 = long) */
795          16,                    /* bitsize */
796          FALSE,                 /* pc_relative */
797          0,                     /* bitpos */
798          complain_overflow_dont, /* complain_on_overflow */
799          bfd_elf_generic_reloc, /* special_function */
800          "R_PPC64_ADDR16_HIGHEST", /* name */
801          FALSE,                 /* partial_inplace */
802          0,                     /* src_mask */
803          0xffff,                /* dst_mask */
804          FALSE),                /* pcrel_offset */
805
806   /* The bits 48-63 of an address, plus 1 if the contents of the low
807      16 bits, treated as a signed number, is negative.  */
808   HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
809          48,                    /* rightshift */
810          1,                     /* size (0 = byte, 1 = short, 2 = long) */
811          16,                    /* bitsize */
812          FALSE,                 /* pc_relative */
813          0,                     /* bitpos */
814          complain_overflow_dont, /* complain_on_overflow */
815          ppc64_elf_ha_reloc,    /* special_function */
816          "R_PPC64_ADDR16_HIGHESTA", /* name */
817          FALSE,                 /* partial_inplace */
818          0,                     /* src_mask */
819          0xffff,                /* dst_mask */
820          FALSE),                /* pcrel_offset */
821
822   /* Like ADDR64, but may be unaligned.  */
823   HOWTO (R_PPC64_UADDR64,       /* type */
824          0,                     /* rightshift */
825          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
826          64,                    /* bitsize */
827          FALSE,                 /* pc_relative */
828          0,                     /* bitpos */
829          complain_overflow_dont, /* complain_on_overflow */
830          bfd_elf_generic_reloc, /* special_function */
831          "R_PPC64_UADDR64",     /* name */
832          FALSE,                 /* partial_inplace */
833          0,                     /* src_mask */
834          ONES (64),             /* dst_mask */
835          FALSE),                /* pcrel_offset */
836
837   /* 64-bit relative relocation.  */
838   HOWTO (R_PPC64_REL64,         /* type */
839          0,                     /* rightshift */
840          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
841          64,                    /* bitsize */
842          TRUE,                  /* pc_relative */
843          0,                     /* bitpos */
844          complain_overflow_dont, /* complain_on_overflow */
845          bfd_elf_generic_reloc, /* special_function */
846          "R_PPC64_REL64",       /* name */
847          FALSE,                 /* partial_inplace */
848          0,                     /* src_mask */
849          ONES (64),             /* dst_mask */
850          TRUE),                 /* pcrel_offset */
851
852   /* 64-bit relocation to the symbol's procedure linkage table.  */
853   HOWTO (R_PPC64_PLT64,         /* type */
854          0,                     /* rightshift */
855          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
856          64,                    /* bitsize */
857          FALSE,                 /* pc_relative */
858          0,                     /* bitpos */
859          complain_overflow_dont, /* complain_on_overflow */
860          ppc64_elf_unhandled_reloc, /* special_function */
861          "R_PPC64_PLT64",       /* name */
862          FALSE,                 /* partial_inplace */
863          0,                     /* src_mask */
864          ONES (64),             /* dst_mask */
865          FALSE),                /* pcrel_offset */
866
867   /* 64-bit PC relative relocation to the symbol's procedure linkage
868      table.  */
869   /* FIXME: R_PPC64_PLTREL64 not supported.  */
870   HOWTO (R_PPC64_PLTREL64,      /* type */
871          0,                     /* rightshift */
872          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
873          64,                    /* bitsize */
874          TRUE,                  /* pc_relative */
875          0,                     /* bitpos */
876          complain_overflow_dont, /* complain_on_overflow */
877          ppc64_elf_unhandled_reloc, /* special_function */
878          "R_PPC64_PLTREL64",    /* name */
879          FALSE,                 /* partial_inplace */
880          0,                     /* src_mask */
881          ONES (64),             /* dst_mask */
882          TRUE),                 /* pcrel_offset */
883
884   /* 16 bit TOC-relative relocation.  */
885
886   /* R_PPC64_TOC16        47       half16*      S + A - .TOC.  */
887   HOWTO (R_PPC64_TOC16,         /* type */
888          0,                     /* rightshift */
889          1,                     /* size (0 = byte, 1 = short, 2 = long) */
890          16,                    /* bitsize */
891          FALSE,                 /* pc_relative */
892          0,                     /* bitpos */
893          complain_overflow_signed, /* complain_on_overflow */
894          ppc64_elf_toc_reloc,   /* special_function */
895          "R_PPC64_TOC16",       /* name */
896          FALSE,                 /* partial_inplace */
897          0,                     /* src_mask */
898          0xffff,                /* dst_mask */
899          FALSE),                /* pcrel_offset */
900
901   /* 16 bit TOC-relative relocation without overflow.  */
902
903   /* R_PPC64_TOC16_LO     48       half16        #lo (S + A - .TOC.)  */
904   HOWTO (R_PPC64_TOC16_LO,      /* type */
905          0,                     /* rightshift */
906          1,                     /* size (0 = byte, 1 = short, 2 = long) */
907          16,                    /* bitsize */
908          FALSE,                 /* pc_relative */
909          0,                     /* bitpos */
910          complain_overflow_dont, /* complain_on_overflow */
911          ppc64_elf_toc_reloc,   /* special_function */
912          "R_PPC64_TOC16_LO",    /* name */
913          FALSE,                 /* partial_inplace */
914          0,                     /* src_mask */
915          0xffff,                /* dst_mask */
916          FALSE),                /* pcrel_offset */
917
918   /* 16 bit TOC-relative relocation, high 16 bits.  */
919
920   /* R_PPC64_TOC16_HI     49       half16        #hi (S + A - .TOC.)  */
921   HOWTO (R_PPC64_TOC16_HI,      /* type */
922          16,                    /* rightshift */
923          1,                     /* size (0 = byte, 1 = short, 2 = long) */
924          16,                    /* bitsize */
925          FALSE,                 /* pc_relative */
926          0,                     /* bitpos */
927          complain_overflow_dont, /* complain_on_overflow */
928          ppc64_elf_toc_reloc,   /* special_function */
929          "R_PPC64_TOC16_HI",    /* name */
930          FALSE,                 /* partial_inplace */
931          0,                     /* src_mask */
932          0xffff,                /* dst_mask */
933          FALSE),                /* pcrel_offset */
934
935   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
936      contents of the low 16 bits, treated as a signed number, is
937      negative.  */
938
939   /* R_PPC64_TOC16_HA     50       half16        #ha (S + A - .TOC.)  */
940   HOWTO (R_PPC64_TOC16_HA,      /* type */
941          16,                    /* rightshift */
942          1,                     /* size (0 = byte, 1 = short, 2 = long) */
943          16,                    /* bitsize */
944          FALSE,                 /* pc_relative */
945          0,                     /* bitpos */
946          complain_overflow_dont, /* complain_on_overflow */
947          ppc64_elf_toc_ha_reloc, /* special_function */
948          "R_PPC64_TOC16_HA",    /* name */
949          FALSE,                 /* partial_inplace */
950          0,                     /* src_mask */
951          0xffff,                /* dst_mask */
952          FALSE),                /* pcrel_offset */
953
954   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
955
956   /* R_PPC64_TOC                  51       doubleword64  .TOC.  */
957   HOWTO (R_PPC64_TOC,           /* type */
958          0,                     /* rightshift */
959          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
960          64,                    /* bitsize */
961          FALSE,                 /* pc_relative */
962          0,                     /* bitpos */
963          complain_overflow_bitfield, /* complain_on_overflow */
964          ppc64_elf_toc64_reloc, /* special_function */
965          "R_PPC64_TOC",         /* name */
966          FALSE,                 /* partial_inplace */
967          0,                     /* src_mask */
968          ONES (64),             /* dst_mask */
969          FALSE),                /* pcrel_offset */
970
971   /* Like R_PPC64_GOT16, but also informs the link editor that the
972      value to relocate may (!) refer to a PLT entry which the link
973      editor (a) may replace with the symbol value.  If the link editor
974      is unable to fully resolve the symbol, it may (b) create a PLT
975      entry and store the address to the new PLT entry in the GOT.
976      This permits lazy resolution of function symbols at run time.
977      The link editor may also skip all of this and just (c) emit a
978      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
979   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
980     HOWTO (R_PPC64_PLTGOT16,    /* type */
981          0,                     /* rightshift */
982          1,                     /* size (0 = byte, 1 = short, 2 = long) */
983          16,                    /* bitsize */
984          FALSE,                 /* pc_relative */
985          0,                     /* bitpos */
986          complain_overflow_signed, /* complain_on_overflow */
987          ppc64_elf_unhandled_reloc, /* special_function */
988          "R_PPC64_PLTGOT16",    /* name */
989          FALSE,                 /* partial_inplace */
990          0,                     /* src_mask */
991          0xffff,                /* dst_mask */
992          FALSE),                /* pcrel_offset */
993
994   /* Like R_PPC64_PLTGOT16, but without overflow.  */
995   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
996   HOWTO (R_PPC64_PLTGOT16_LO,   /* type */
997          0,                     /* rightshift */
998          1,                     /* size (0 = byte, 1 = short, 2 = long) */
999          16,                    /* bitsize */
1000          FALSE,                 /* pc_relative */
1001          0,                     /* bitpos */
1002          complain_overflow_dont, /* complain_on_overflow */
1003          ppc64_elf_unhandled_reloc, /* special_function */
1004          "R_PPC64_PLTGOT16_LO", /* name */
1005          FALSE,                 /* partial_inplace */
1006          0,                     /* src_mask */
1007          0xffff,                /* dst_mask */
1008          FALSE),                /* pcrel_offset */
1009
1010   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
1011   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
1012   HOWTO (R_PPC64_PLTGOT16_HI,   /* type */
1013          16,                    /* rightshift */
1014          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1015          16,                    /* bitsize */
1016          FALSE,                 /* pc_relative */
1017          0,                     /* bitpos */
1018          complain_overflow_dont, /* complain_on_overflow */
1019          ppc64_elf_unhandled_reloc, /* special_function */
1020          "R_PPC64_PLTGOT16_HI", /* name */
1021          FALSE,                 /* partial_inplace */
1022          0,                     /* src_mask */
1023          0xffff,                /* dst_mask */
1024          FALSE),                /* pcrel_offset */
1025
1026   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
1027      1 if the contents of the low 16 bits, treated as a signed number,
1028      is negative.  */
1029   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
1030   HOWTO (R_PPC64_PLTGOT16_HA,   /* type */
1031          16,                    /* rightshift */
1032          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1033          16,                    /* bitsize */
1034          FALSE,                 /* pc_relative */
1035          0,                     /* bitpos */
1036          complain_overflow_dont,/* complain_on_overflow */
1037          ppc64_elf_unhandled_reloc, /* special_function */
1038          "R_PPC64_PLTGOT16_HA", /* name */
1039          FALSE,                 /* partial_inplace */
1040          0,                     /* src_mask */
1041          0xffff,                /* dst_mask */
1042          FALSE),                /* pcrel_offset */
1043
1044   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
1045   HOWTO (R_PPC64_ADDR16_DS,     /* type */
1046          0,                     /* rightshift */
1047          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1048          16,                    /* bitsize */
1049          FALSE,                 /* pc_relative */
1050          0,                     /* bitpos */
1051          complain_overflow_bitfield, /* complain_on_overflow */
1052          bfd_elf_generic_reloc, /* special_function */
1053          "R_PPC64_ADDR16_DS",   /* name */
1054          FALSE,                 /* partial_inplace */
1055          0,                     /* src_mask */
1056          0xfffc,                /* dst_mask */
1057          FALSE),                /* pcrel_offset */
1058
1059   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
1060   HOWTO (R_PPC64_ADDR16_LO_DS,  /* type */
1061          0,                     /* rightshift */
1062          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1063          16,                    /* bitsize */
1064          FALSE,                 /* pc_relative */
1065          0,                     /* bitpos */
1066          complain_overflow_dont,/* complain_on_overflow */
1067          bfd_elf_generic_reloc, /* special_function */
1068          "R_PPC64_ADDR16_LO_DS",/* name */
1069          FALSE,                 /* partial_inplace */
1070          0,                     /* src_mask */
1071          0xfffc,                /* dst_mask */
1072          FALSE),                /* pcrel_offset */
1073
1074   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
1075   HOWTO (R_PPC64_GOT16_DS,      /* type */
1076          0,                     /* rightshift */
1077          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1078          16,                    /* bitsize */
1079          FALSE,                 /* pc_relative */
1080          0,                     /* bitpos */
1081          complain_overflow_signed, /* complain_on_overflow */
1082          ppc64_elf_unhandled_reloc, /* special_function */
1083          "R_PPC64_GOT16_DS",    /* name */
1084          FALSE,                 /* partial_inplace */
1085          0,                     /* src_mask */
1086          0xfffc,                /* dst_mask */
1087          FALSE),                /* pcrel_offset */
1088
1089   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
1090   HOWTO (R_PPC64_GOT16_LO_DS,   /* type */
1091          0,                     /* rightshift */
1092          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1093          16,                    /* bitsize */
1094          FALSE,                 /* pc_relative */
1095          0,                     /* bitpos */
1096          complain_overflow_dont, /* complain_on_overflow */
1097          ppc64_elf_unhandled_reloc, /* special_function */
1098          "R_PPC64_GOT16_LO_DS", /* name */
1099          FALSE,                 /* partial_inplace */
1100          0,                     /* src_mask */
1101          0xfffc,                /* dst_mask */
1102          FALSE),                /* pcrel_offset */
1103
1104   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
1105   HOWTO (R_PPC64_PLT16_LO_DS,   /* type */
1106          0,                     /* rightshift */
1107          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1108          16,                    /* bitsize */
1109          FALSE,                 /* pc_relative */
1110          0,                     /* bitpos */
1111          complain_overflow_dont, /* complain_on_overflow */
1112          ppc64_elf_unhandled_reloc, /* special_function */
1113          "R_PPC64_PLT16_LO_DS", /* name */
1114          FALSE,                 /* partial_inplace */
1115          0,                     /* src_mask */
1116          0xfffc,                /* dst_mask */
1117          FALSE),                /* pcrel_offset */
1118
1119   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
1120   HOWTO (R_PPC64_SECTOFF_DS,    /* type */
1121          0,                     /* rightshift */
1122          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1123          16,                    /* bitsize */
1124          FALSE,                 /* pc_relative */
1125          0,                     /* bitpos */
1126          complain_overflow_bitfield, /* complain_on_overflow */
1127          ppc64_elf_sectoff_reloc, /* special_function */
1128          "R_PPC64_SECTOFF_DS",  /* name */
1129          FALSE,                 /* partial_inplace */
1130          0,                     /* src_mask */
1131          0xfffc,                /* dst_mask */
1132          FALSE),                /* pcrel_offset */
1133
1134   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
1135   HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
1136          0,                     /* rightshift */
1137          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1138          16,                    /* bitsize */
1139          FALSE,                 /* pc_relative */
1140          0,                     /* bitpos */
1141          complain_overflow_dont, /* complain_on_overflow */
1142          ppc64_elf_sectoff_reloc, /* special_function */
1143          "R_PPC64_SECTOFF_LO_DS",/* name */
1144          FALSE,                 /* partial_inplace */
1145          0,                     /* src_mask */
1146          0xfffc,                /* dst_mask */
1147          FALSE),                /* pcrel_offset */
1148
1149   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
1150   HOWTO (R_PPC64_TOC16_DS,      /* type */
1151          0,                     /* rightshift */
1152          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1153          16,                    /* bitsize */
1154          FALSE,                 /* pc_relative */
1155          0,                     /* bitpos */
1156          complain_overflow_signed, /* complain_on_overflow */
1157          ppc64_elf_toc_reloc,   /* special_function */
1158          "R_PPC64_TOC16_DS",    /* name */
1159          FALSE,                 /* partial_inplace */
1160          0,                     /* src_mask */
1161          0xfffc,                /* dst_mask */
1162          FALSE),                /* pcrel_offset */
1163
1164   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
1165   HOWTO (R_PPC64_TOC16_LO_DS,   /* type */
1166          0,                     /* rightshift */
1167          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1168          16,                    /* bitsize */
1169          FALSE,                 /* pc_relative */
1170          0,                     /* bitpos */
1171          complain_overflow_dont, /* complain_on_overflow */
1172          ppc64_elf_toc_reloc,   /* special_function */
1173          "R_PPC64_TOC16_LO_DS", /* name */
1174          FALSE,                 /* partial_inplace */
1175          0,                     /* src_mask */
1176          0xfffc,                /* dst_mask */
1177          FALSE),                /* pcrel_offset */
1178
1179   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
1180   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
1181     HOWTO (R_PPC64_PLTGOT16_DS, /* type */
1182          0,                     /* rightshift */
1183          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1184          16,                    /* bitsize */
1185          FALSE,                 /* pc_relative */
1186          0,                     /* bitpos */
1187          complain_overflow_signed, /* complain_on_overflow */
1188          ppc64_elf_unhandled_reloc, /* special_function */
1189          "R_PPC64_PLTGOT16_DS", /* name */
1190          FALSE,                 /* partial_inplace */
1191          0,                     /* src_mask */
1192          0xfffc,                /* dst_mask */
1193          FALSE),                /* pcrel_offset */
1194
1195   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
1196   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1197   HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
1198          0,                     /* rightshift */
1199          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1200          16,                    /* bitsize */
1201          FALSE,                 /* pc_relative */
1202          0,                     /* bitpos */
1203          complain_overflow_dont, /* complain_on_overflow */
1204          ppc64_elf_unhandled_reloc, /* special_function */
1205          "R_PPC64_PLTGOT16_LO_DS",/* name */
1206          FALSE,                 /* partial_inplace */
1207          0,                     /* src_mask */
1208          0xfffc,                /* dst_mask */
1209          FALSE),                /* pcrel_offset */
1210
1211   /* Marker reloc for TLS.  */
1212   HOWTO (R_PPC64_TLS,
1213          0,                     /* rightshift */
1214          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1215          32,                    /* bitsize */
1216          FALSE,                 /* pc_relative */
1217          0,                     /* bitpos */
1218          complain_overflow_dont, /* complain_on_overflow */
1219          bfd_elf_generic_reloc, /* special_function */
1220          "R_PPC64_TLS",         /* name */
1221          FALSE,                 /* partial_inplace */
1222          0,                     /* src_mask */
1223          0,                     /* dst_mask */
1224          FALSE),                /* pcrel_offset */
1225
1226   /* Computes the load module index of the load module that contains the
1227      definition of its TLS sym.  */
1228   HOWTO (R_PPC64_DTPMOD64,
1229          0,                     /* rightshift */
1230          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1231          64,                    /* bitsize */
1232          FALSE,                 /* pc_relative */
1233          0,                     /* bitpos */
1234          complain_overflow_dont, /* complain_on_overflow */
1235          ppc64_elf_unhandled_reloc, /* special_function */
1236          "R_PPC64_DTPMOD64",    /* name */
1237          FALSE,                 /* partial_inplace */
1238          0,                     /* src_mask */
1239          ONES (64),             /* dst_mask */
1240          FALSE),                /* pcrel_offset */
1241
1242   /* Computes a dtv-relative displacement, the difference between the value
1243      of sym+add and the base address of the thread-local storage block that
1244      contains the definition of sym, minus 0x8000.  */
1245   HOWTO (R_PPC64_DTPREL64,
1246          0,                     /* rightshift */
1247          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1248          64,                    /* bitsize */
1249          FALSE,                 /* pc_relative */
1250          0,                     /* bitpos */
1251          complain_overflow_dont, /* complain_on_overflow */
1252          ppc64_elf_unhandled_reloc, /* special_function */
1253          "R_PPC64_DTPREL64",    /* name */
1254          FALSE,                 /* partial_inplace */
1255          0,                     /* src_mask */
1256          ONES (64),             /* dst_mask */
1257          FALSE),                /* pcrel_offset */
1258
1259   /* A 16 bit dtprel reloc.  */
1260   HOWTO (R_PPC64_DTPREL16,
1261          0,                     /* rightshift */
1262          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1263          16,                    /* bitsize */
1264          FALSE,                 /* pc_relative */
1265          0,                     /* bitpos */
1266          complain_overflow_signed, /* complain_on_overflow */
1267          ppc64_elf_unhandled_reloc, /* special_function */
1268          "R_PPC64_DTPREL16",    /* name */
1269          FALSE,                 /* partial_inplace */
1270          0,                     /* src_mask */
1271          0xffff,                /* dst_mask */
1272          FALSE),                /* pcrel_offset */
1273
1274   /* Like DTPREL16, but no overflow.  */
1275   HOWTO (R_PPC64_DTPREL16_LO,
1276          0,                     /* rightshift */
1277          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1278          16,                    /* bitsize */
1279          FALSE,                 /* pc_relative */
1280          0,                     /* bitpos */
1281          complain_overflow_dont, /* complain_on_overflow */
1282          ppc64_elf_unhandled_reloc, /* special_function */
1283          "R_PPC64_DTPREL16_LO", /* name */
1284          FALSE,                 /* partial_inplace */
1285          0,                     /* src_mask */
1286          0xffff,                /* dst_mask */
1287          FALSE),                /* pcrel_offset */
1288
1289   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
1290   HOWTO (R_PPC64_DTPREL16_HI,
1291          16,                    /* rightshift */
1292          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1293          16,                    /* bitsize */
1294          FALSE,                 /* pc_relative */
1295          0,                     /* bitpos */
1296          complain_overflow_dont, /* complain_on_overflow */
1297          ppc64_elf_unhandled_reloc, /* special_function */
1298          "R_PPC64_DTPREL16_HI", /* name */
1299          FALSE,                 /* partial_inplace */
1300          0,                     /* src_mask */
1301          0xffff,                /* dst_mask */
1302          FALSE),                /* pcrel_offset */
1303
1304   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
1305   HOWTO (R_PPC64_DTPREL16_HA,
1306          16,                    /* rightshift */
1307          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1308          16,                    /* bitsize */
1309          FALSE,                 /* pc_relative */
1310          0,                     /* bitpos */
1311          complain_overflow_dont, /* complain_on_overflow */
1312          ppc64_elf_unhandled_reloc, /* special_function */
1313          "R_PPC64_DTPREL16_HA", /* name */
1314          FALSE,                 /* partial_inplace */
1315          0,                     /* src_mask */
1316          0xffff,                /* dst_mask */
1317          FALSE),                /* pcrel_offset */
1318
1319   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
1320   HOWTO (R_PPC64_DTPREL16_HIGHER,
1321          32,                    /* rightshift */
1322          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1323          16,                    /* bitsize */
1324          FALSE,                 /* pc_relative */
1325          0,                     /* bitpos */
1326          complain_overflow_dont, /* complain_on_overflow */
1327          ppc64_elf_unhandled_reloc, /* special_function */
1328          "R_PPC64_DTPREL16_HIGHER", /* name */
1329          FALSE,                 /* partial_inplace */
1330          0,                     /* src_mask */
1331          0xffff,                /* dst_mask */
1332          FALSE),                /* pcrel_offset */
1333
1334   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
1335   HOWTO (R_PPC64_DTPREL16_HIGHERA,
1336          32,                    /* rightshift */
1337          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1338          16,                    /* bitsize */
1339          FALSE,                 /* pc_relative */
1340          0,                     /* bitpos */
1341          complain_overflow_dont, /* complain_on_overflow */
1342          ppc64_elf_unhandled_reloc, /* special_function */
1343          "R_PPC64_DTPREL16_HIGHERA", /* name */
1344          FALSE,                 /* partial_inplace */
1345          0,                     /* src_mask */
1346          0xffff,                /* dst_mask */
1347          FALSE),                /* pcrel_offset */
1348
1349   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
1350   HOWTO (R_PPC64_DTPREL16_HIGHEST,
1351          48,                    /* rightshift */
1352          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1353          16,                    /* bitsize */
1354          FALSE,                 /* pc_relative */
1355          0,                     /* bitpos */
1356          complain_overflow_dont, /* complain_on_overflow */
1357          ppc64_elf_unhandled_reloc, /* special_function */
1358          "R_PPC64_DTPREL16_HIGHEST", /* name */
1359          FALSE,                 /* partial_inplace */
1360          0,                     /* src_mask */
1361          0xffff,                /* dst_mask */
1362          FALSE),                /* pcrel_offset */
1363
1364   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
1365   HOWTO (R_PPC64_DTPREL16_HIGHESTA,
1366          48,                    /* rightshift */
1367          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1368          16,                    /* bitsize */
1369          FALSE,                 /* pc_relative */
1370          0,                     /* bitpos */
1371          complain_overflow_dont, /* complain_on_overflow */
1372          ppc64_elf_unhandled_reloc, /* special_function */
1373          "R_PPC64_DTPREL16_HIGHESTA", /* name */
1374          FALSE,                 /* partial_inplace */
1375          0,                     /* src_mask */
1376          0xffff,                /* dst_mask */
1377          FALSE),                /* pcrel_offset */
1378
1379   /* Like DTPREL16, but for insns with a DS field.  */
1380   HOWTO (R_PPC64_DTPREL16_DS,
1381          0,                     /* rightshift */
1382          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1383          16,                    /* bitsize */
1384          FALSE,                 /* pc_relative */
1385          0,                     /* bitpos */
1386          complain_overflow_signed, /* complain_on_overflow */
1387          ppc64_elf_unhandled_reloc, /* special_function */
1388          "R_PPC64_DTPREL16_DS", /* name */
1389          FALSE,                 /* partial_inplace */
1390          0,                     /* src_mask */
1391          0xfffc,                /* dst_mask */
1392          FALSE),                /* pcrel_offset */
1393
1394   /* Like DTPREL16_DS, but no overflow.  */
1395   HOWTO (R_PPC64_DTPREL16_LO_DS,
1396          0,                     /* rightshift */
1397          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1398          16,                    /* bitsize */
1399          FALSE,                 /* pc_relative */
1400          0,                     /* bitpos */
1401          complain_overflow_dont, /* complain_on_overflow */
1402          ppc64_elf_unhandled_reloc, /* special_function */
1403          "R_PPC64_DTPREL16_LO_DS", /* name */
1404          FALSE,                 /* partial_inplace */
1405          0,                     /* src_mask */
1406          0xfffc,                /* dst_mask */
1407          FALSE),                /* pcrel_offset */
1408
1409   /* Computes a tp-relative displacement, the difference between the value of
1410      sym+add and the value of the thread pointer (r13).  */
1411   HOWTO (R_PPC64_TPREL64,
1412          0,                     /* rightshift */
1413          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1414          64,                    /* bitsize */
1415          FALSE,                 /* pc_relative */
1416          0,                     /* bitpos */
1417          complain_overflow_dont, /* complain_on_overflow */
1418          ppc64_elf_unhandled_reloc, /* special_function */
1419          "R_PPC64_TPREL64",     /* name */
1420          FALSE,                 /* partial_inplace */
1421          0,                     /* src_mask */
1422          ONES (64),             /* dst_mask */
1423          FALSE),                /* pcrel_offset */
1424
1425   /* A 16 bit tprel reloc.  */
1426   HOWTO (R_PPC64_TPREL16,
1427          0,                     /* rightshift */
1428          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1429          16,                    /* bitsize */
1430          FALSE,                 /* pc_relative */
1431          0,                     /* bitpos */
1432          complain_overflow_signed, /* complain_on_overflow */
1433          ppc64_elf_unhandled_reloc, /* special_function */
1434          "R_PPC64_TPREL16",     /* name */
1435          FALSE,                 /* partial_inplace */
1436          0,                     /* src_mask */
1437          0xffff,                /* dst_mask */
1438          FALSE),                /* pcrel_offset */
1439
1440   /* Like TPREL16, but no overflow.  */
1441   HOWTO (R_PPC64_TPREL16_LO,
1442          0,                     /* rightshift */
1443          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1444          16,                    /* bitsize */
1445          FALSE,                 /* pc_relative */
1446          0,                     /* bitpos */
1447          complain_overflow_dont, /* complain_on_overflow */
1448          ppc64_elf_unhandled_reloc, /* special_function */
1449          "R_PPC64_TPREL16_LO",  /* name */
1450          FALSE,                 /* partial_inplace */
1451          0,                     /* src_mask */
1452          0xffff,                /* dst_mask */
1453          FALSE),                /* pcrel_offset */
1454
1455   /* Like TPREL16_LO, but next higher group of 16 bits.  */
1456   HOWTO (R_PPC64_TPREL16_HI,
1457          16,                    /* rightshift */
1458          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1459          16,                    /* bitsize */
1460          FALSE,                 /* pc_relative */
1461          0,                     /* bitpos */
1462          complain_overflow_dont, /* complain_on_overflow */
1463          ppc64_elf_unhandled_reloc, /* special_function */
1464          "R_PPC64_TPREL16_HI",  /* name */
1465          FALSE,                 /* partial_inplace */
1466          0,                     /* src_mask */
1467          0xffff,                /* dst_mask */
1468          FALSE),                /* pcrel_offset */
1469
1470   /* Like TPREL16_HI, but adjust for low 16 bits.  */
1471   HOWTO (R_PPC64_TPREL16_HA,
1472          16,                    /* rightshift */
1473          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1474          16,                    /* bitsize */
1475          FALSE,                 /* pc_relative */
1476          0,                     /* bitpos */
1477          complain_overflow_dont, /* complain_on_overflow */
1478          ppc64_elf_unhandled_reloc, /* special_function */
1479          "R_PPC64_TPREL16_HA",  /* name */
1480          FALSE,                 /* partial_inplace */
1481          0,                     /* src_mask */
1482          0xffff,                /* dst_mask */
1483          FALSE),                /* pcrel_offset */
1484
1485   /* Like TPREL16_HI, but next higher group of 16 bits.  */
1486   HOWTO (R_PPC64_TPREL16_HIGHER,
1487          32,                    /* rightshift */
1488          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1489          16,                    /* bitsize */
1490          FALSE,                 /* pc_relative */
1491          0,                     /* bitpos */
1492          complain_overflow_dont, /* complain_on_overflow */
1493          ppc64_elf_unhandled_reloc, /* special_function */
1494          "R_PPC64_TPREL16_HIGHER",      /* name */
1495          FALSE,                 /* partial_inplace */
1496          0,                     /* src_mask */
1497          0xffff,                /* dst_mask */
1498          FALSE),                /* pcrel_offset */
1499
1500   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
1501   HOWTO (R_PPC64_TPREL16_HIGHERA,
1502          32,                    /* rightshift */
1503          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1504          16,                    /* bitsize */
1505          FALSE,                 /* pc_relative */
1506          0,                     /* bitpos */
1507          complain_overflow_dont, /* complain_on_overflow */
1508          ppc64_elf_unhandled_reloc, /* special_function */
1509          "R_PPC64_TPREL16_HIGHERA", /* name */
1510          FALSE,                 /* partial_inplace */
1511          0,                     /* src_mask */
1512          0xffff,                /* dst_mask */
1513          FALSE),                /* pcrel_offset */
1514
1515   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
1516   HOWTO (R_PPC64_TPREL16_HIGHEST,
1517          48,                    /* rightshift */
1518          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1519          16,                    /* bitsize */
1520          FALSE,                 /* pc_relative */
1521          0,                     /* bitpos */
1522          complain_overflow_dont, /* complain_on_overflow */
1523          ppc64_elf_unhandled_reloc, /* special_function */
1524          "R_PPC64_TPREL16_HIGHEST", /* name */
1525          FALSE,                 /* partial_inplace */
1526          0,                     /* src_mask */
1527          0xffff,                /* dst_mask */
1528          FALSE),                /* pcrel_offset */
1529
1530   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
1531   HOWTO (R_PPC64_TPREL16_HIGHESTA,
1532          48,                    /* rightshift */
1533          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1534          16,                    /* bitsize */
1535          FALSE,                 /* pc_relative */
1536          0,                     /* bitpos */
1537          complain_overflow_dont, /* complain_on_overflow */
1538          ppc64_elf_unhandled_reloc, /* special_function */
1539          "R_PPC64_TPREL16_HIGHESTA", /* name */
1540          FALSE,                 /* partial_inplace */
1541          0,                     /* src_mask */
1542          0xffff,                /* dst_mask */
1543          FALSE),                /* pcrel_offset */
1544
1545   /* Like TPREL16, but for insns with a DS field.  */
1546   HOWTO (R_PPC64_TPREL16_DS,
1547          0,                     /* rightshift */
1548          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1549          16,                    /* bitsize */
1550          FALSE,                 /* pc_relative */
1551          0,                     /* bitpos */
1552          complain_overflow_signed, /* complain_on_overflow */
1553          ppc64_elf_unhandled_reloc, /* special_function */
1554          "R_PPC64_TPREL16_DS",  /* name */
1555          FALSE,                 /* partial_inplace */
1556          0,                     /* src_mask */
1557          0xfffc,                /* dst_mask */
1558          FALSE),                /* pcrel_offset */
1559
1560   /* Like TPREL16_DS, but no overflow.  */
1561   HOWTO (R_PPC64_TPREL16_LO_DS,
1562          0,                     /* rightshift */
1563          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1564          16,                    /* bitsize */
1565          FALSE,                 /* pc_relative */
1566          0,                     /* bitpos */
1567          complain_overflow_dont, /* complain_on_overflow */
1568          ppc64_elf_unhandled_reloc, /* special_function */
1569          "R_PPC64_TPREL16_LO_DS", /* name */
1570          FALSE,                 /* partial_inplace */
1571          0,                     /* src_mask */
1572          0xfffc,                /* dst_mask */
1573          FALSE),                /* pcrel_offset */
1574
1575   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1576      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
1577      to the first entry relative to the TOC base (r2).  */
1578   HOWTO (R_PPC64_GOT_TLSGD16,
1579          0,                     /* rightshift */
1580          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1581          16,                    /* bitsize */
1582          FALSE,                 /* pc_relative */
1583          0,                     /* bitpos */
1584          complain_overflow_signed, /* complain_on_overflow */
1585          ppc64_elf_unhandled_reloc, /* special_function */
1586          "R_PPC64_GOT_TLSGD16", /* name */
1587          FALSE,                 /* partial_inplace */
1588          0,                     /* src_mask */
1589          0xffff,                /* dst_mask */
1590          FALSE),                /* pcrel_offset */
1591
1592   /* Like GOT_TLSGD16, but no overflow.  */
1593   HOWTO (R_PPC64_GOT_TLSGD16_LO,
1594          0,                     /* rightshift */
1595          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1596          16,                    /* bitsize */
1597          FALSE,                 /* pc_relative */
1598          0,                     /* bitpos */
1599          complain_overflow_dont, /* complain_on_overflow */
1600          ppc64_elf_unhandled_reloc, /* special_function */
1601          "R_PPC64_GOT_TLSGD16_LO", /* name */
1602          FALSE,                 /* partial_inplace */
1603          0,                     /* src_mask */
1604          0xffff,                /* dst_mask */
1605          FALSE),                /* pcrel_offset */
1606
1607   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
1608   HOWTO (R_PPC64_GOT_TLSGD16_HI,
1609          16,                    /* rightshift */
1610          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1611          16,                    /* bitsize */
1612          FALSE,                 /* pc_relative */
1613          0,                     /* bitpos */
1614          complain_overflow_dont, /* complain_on_overflow */
1615          ppc64_elf_unhandled_reloc, /* special_function */
1616          "R_PPC64_GOT_TLSGD16_HI", /* name */
1617          FALSE,                 /* partial_inplace */
1618          0,                     /* src_mask */
1619          0xffff,                /* dst_mask */
1620          FALSE),                /* pcrel_offset */
1621
1622   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
1623   HOWTO (R_PPC64_GOT_TLSGD16_HA,
1624          16,                    /* rightshift */
1625          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1626          16,                    /* bitsize */
1627          FALSE,                 /* pc_relative */
1628          0,                     /* bitpos */
1629          complain_overflow_dont, /* complain_on_overflow */
1630          ppc64_elf_unhandled_reloc, /* special_function */
1631          "R_PPC64_GOT_TLSGD16_HA", /* name */
1632          FALSE,                 /* partial_inplace */
1633          0,                     /* src_mask */
1634          0xffff,                /* dst_mask */
1635          FALSE),                /* pcrel_offset */
1636
1637   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1638      with values (sym+add)@dtpmod and zero, and computes the offset to the
1639      first entry relative to the TOC base (r2).  */
1640   HOWTO (R_PPC64_GOT_TLSLD16,
1641          0,                     /* rightshift */
1642          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1643          16,                    /* bitsize */
1644          FALSE,                 /* pc_relative */
1645          0,                     /* bitpos */
1646          complain_overflow_signed, /* complain_on_overflow */
1647          ppc64_elf_unhandled_reloc, /* special_function */
1648          "R_PPC64_GOT_TLSLD16", /* name */
1649          FALSE,                 /* partial_inplace */
1650          0,                     /* src_mask */
1651          0xffff,                /* dst_mask */
1652          FALSE),                /* pcrel_offset */
1653
1654   /* Like GOT_TLSLD16, but no overflow.  */
1655   HOWTO (R_PPC64_GOT_TLSLD16_LO,
1656          0,                     /* rightshift */
1657          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1658          16,                    /* bitsize */
1659          FALSE,                 /* pc_relative */
1660          0,                     /* bitpos */
1661          complain_overflow_dont, /* complain_on_overflow */
1662          ppc64_elf_unhandled_reloc, /* special_function */
1663          "R_PPC64_GOT_TLSLD16_LO", /* name */
1664          FALSE,                 /* partial_inplace */
1665          0,                     /* src_mask */
1666          0xffff,                /* dst_mask */
1667          FALSE),                /* pcrel_offset */
1668
1669   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
1670   HOWTO (R_PPC64_GOT_TLSLD16_HI,
1671          16,                    /* rightshift */
1672          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1673          16,                    /* bitsize */
1674          FALSE,                 /* pc_relative */
1675          0,                     /* bitpos */
1676          complain_overflow_dont, /* complain_on_overflow */
1677          ppc64_elf_unhandled_reloc, /* special_function */
1678          "R_PPC64_GOT_TLSLD16_HI", /* name */
1679          FALSE,                 /* partial_inplace */
1680          0,                     /* src_mask */
1681          0xffff,                /* dst_mask */
1682          FALSE),                /* pcrel_offset */
1683
1684   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
1685   HOWTO (R_PPC64_GOT_TLSLD16_HA,
1686          16,                    /* rightshift */
1687          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1688          16,                    /* bitsize */
1689          FALSE,                 /* pc_relative */
1690          0,                     /* bitpos */
1691          complain_overflow_dont, /* complain_on_overflow */
1692          ppc64_elf_unhandled_reloc, /* special_function */
1693          "R_PPC64_GOT_TLSLD16_HA", /* name */
1694          FALSE,                 /* partial_inplace */
1695          0,                     /* src_mask */
1696          0xffff,                /* dst_mask */
1697          FALSE),                /* pcrel_offset */
1698
1699   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
1700      the offset to the entry relative to the TOC base (r2).  */
1701   HOWTO (R_PPC64_GOT_DTPREL16_DS,
1702          0,                     /* rightshift */
1703          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1704          16,                    /* bitsize */
1705          FALSE,                 /* pc_relative */
1706          0,                     /* bitpos */
1707          complain_overflow_signed, /* complain_on_overflow */
1708          ppc64_elf_unhandled_reloc, /* special_function */
1709          "R_PPC64_GOT_DTPREL16_DS", /* name */
1710          FALSE,                 /* partial_inplace */
1711          0,                     /* src_mask */
1712          0xfffc,                /* dst_mask */
1713          FALSE),                /* pcrel_offset */
1714
1715   /* Like GOT_DTPREL16_DS, but no overflow.  */
1716   HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
1717          0,                     /* rightshift */
1718          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1719          16,                    /* bitsize */
1720          FALSE,                 /* pc_relative */
1721          0,                     /* bitpos */
1722          complain_overflow_dont, /* complain_on_overflow */
1723          ppc64_elf_unhandled_reloc, /* special_function */
1724          "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
1725          FALSE,                 /* partial_inplace */
1726          0,                     /* src_mask */
1727          0xfffc,                /* dst_mask */
1728          FALSE),                /* pcrel_offset */
1729
1730   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
1731   HOWTO (R_PPC64_GOT_DTPREL16_HI,
1732          16,                    /* rightshift */
1733          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1734          16,                    /* bitsize */
1735          FALSE,                 /* pc_relative */
1736          0,                     /* bitpos */
1737          complain_overflow_dont, /* complain_on_overflow */
1738          ppc64_elf_unhandled_reloc, /* special_function */
1739          "R_PPC64_GOT_DTPREL16_HI", /* name */
1740          FALSE,                 /* partial_inplace */
1741          0,                     /* src_mask */
1742          0xffff,                /* dst_mask */
1743          FALSE),                /* pcrel_offset */
1744
1745   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
1746   HOWTO (R_PPC64_GOT_DTPREL16_HA,
1747          16,                    /* rightshift */
1748          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1749          16,                    /* bitsize */
1750          FALSE,                 /* pc_relative */
1751          0,                     /* bitpos */
1752          complain_overflow_dont, /* complain_on_overflow */
1753          ppc64_elf_unhandled_reloc, /* special_function */
1754          "R_PPC64_GOT_DTPREL16_HA", /* name */
1755          FALSE,                 /* partial_inplace */
1756          0,                     /* src_mask */
1757          0xffff,                /* dst_mask */
1758          FALSE),                /* pcrel_offset */
1759
1760   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
1761      offset to the entry relative to the TOC base (r2).  */
1762   HOWTO (R_PPC64_GOT_TPREL16_DS,
1763          0,                     /* rightshift */
1764          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1765          16,                    /* bitsize */
1766          FALSE,                 /* pc_relative */
1767          0,                     /* bitpos */
1768          complain_overflow_signed, /* complain_on_overflow */
1769          ppc64_elf_unhandled_reloc, /* special_function */
1770          "R_PPC64_GOT_TPREL16_DS", /* name */
1771          FALSE,                 /* partial_inplace */
1772          0,                     /* src_mask */
1773          0xfffc,                /* dst_mask */
1774          FALSE),                /* pcrel_offset */
1775
1776   /* Like GOT_TPREL16_DS, but no overflow.  */
1777   HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
1778          0,                     /* rightshift */
1779          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1780          16,                    /* bitsize */
1781          FALSE,                 /* pc_relative */
1782          0,                     /* bitpos */
1783          complain_overflow_dont, /* complain_on_overflow */
1784          ppc64_elf_unhandled_reloc, /* special_function */
1785          "R_PPC64_GOT_TPREL16_LO_DS", /* name */
1786          FALSE,                 /* partial_inplace */
1787          0,                     /* src_mask */
1788          0xfffc,                /* dst_mask */
1789          FALSE),                /* pcrel_offset */
1790
1791   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
1792   HOWTO (R_PPC64_GOT_TPREL16_HI,
1793          16,                    /* rightshift */
1794          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1795          16,                    /* bitsize */
1796          FALSE,                 /* pc_relative */
1797          0,                     /* bitpos */
1798          complain_overflow_dont, /* complain_on_overflow */
1799          ppc64_elf_unhandled_reloc, /* special_function */
1800          "R_PPC64_GOT_TPREL16_HI", /* name */
1801          FALSE,                 /* partial_inplace */
1802          0,                     /* src_mask */
1803          0xffff,                /* dst_mask */
1804          FALSE),                /* pcrel_offset */
1805
1806   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
1807   HOWTO (R_PPC64_GOT_TPREL16_HA,
1808          16,                    /* rightshift */
1809          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1810          16,                    /* bitsize */
1811          FALSE,                 /* pc_relative */
1812          0,                     /* bitpos */
1813          complain_overflow_dont, /* complain_on_overflow */
1814          ppc64_elf_unhandled_reloc, /* special_function */
1815          "R_PPC64_GOT_TPREL16_HA", /* name */
1816          FALSE,                 /* partial_inplace */
1817          0,                     /* src_mask */
1818          0xffff,                /* dst_mask */
1819          FALSE),                /* pcrel_offset */
1820
1821   /* GNU extension to record C++ vtable hierarchy.  */
1822   HOWTO (R_PPC64_GNU_VTINHERIT, /* type */
1823          0,                     /* rightshift */
1824          0,                     /* size (0 = byte, 1 = short, 2 = long) */
1825          0,                     /* bitsize */
1826          FALSE,                 /* pc_relative */
1827          0,                     /* bitpos */
1828          complain_overflow_dont, /* complain_on_overflow */
1829          NULL,                  /* special_function */
1830          "R_PPC64_GNU_VTINHERIT", /* name */
1831          FALSE,                 /* partial_inplace */
1832          0,                     /* src_mask */
1833          0,                     /* dst_mask */
1834          FALSE),                /* pcrel_offset */
1835
1836   /* GNU extension to record C++ vtable member usage.  */
1837   HOWTO (R_PPC64_GNU_VTENTRY,   /* type */
1838          0,                     /* rightshift */
1839          0,                     /* size (0 = byte, 1 = short, 2 = long) */
1840          0,                     /* bitsize */
1841          FALSE,                 /* pc_relative */
1842          0,                     /* bitpos */
1843          complain_overflow_dont, /* complain_on_overflow */
1844          NULL,                  /* special_function */
1845          "R_PPC64_GNU_VTENTRY", /* name */
1846          FALSE,                 /* partial_inplace */
1847          0,                     /* src_mask */
1848          0,                     /* dst_mask */
1849          FALSE),                /* pcrel_offset */
1850 };
1851
1852 \f
1853 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
1854    be done.  */
1855
1856 static void
1857 ppc_howto_init (void)
1858 {
1859   unsigned int i, type;
1860
1861   for (i = 0;
1862        i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
1863        i++)
1864     {
1865       type = ppc64_elf_howto_raw[i].type;
1866       BFD_ASSERT (type < (sizeof (ppc64_elf_howto_table)
1867                           / sizeof (ppc64_elf_howto_table[0])));
1868       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
1869     }
1870 }
1871
1872 static reloc_howto_type *
1873 ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
1874                              bfd_reloc_code_real_type code)
1875 {
1876   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
1877
1878   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1879     /* Initialize howto table if needed.  */
1880     ppc_howto_init ();
1881
1882   switch (code)
1883     {
1884     default:
1885       return NULL;
1886
1887     case BFD_RELOC_NONE:                        r = R_PPC64_NONE;
1888       break;
1889     case BFD_RELOC_32:                          r = R_PPC64_ADDR32;
1890       break;
1891     case BFD_RELOC_PPC_BA26:                    r = R_PPC64_ADDR24;
1892       break;
1893     case BFD_RELOC_16:                          r = R_PPC64_ADDR16;
1894       break;
1895     case BFD_RELOC_LO16:                        r = R_PPC64_ADDR16_LO;
1896       break;
1897     case BFD_RELOC_HI16:                        r = R_PPC64_ADDR16_HI;
1898       break;
1899     case BFD_RELOC_HI16_S:                      r = R_PPC64_ADDR16_HA;
1900       break;
1901     case BFD_RELOC_PPC_BA16:                    r = R_PPC64_ADDR14;
1902       break;
1903     case BFD_RELOC_PPC_BA16_BRTAKEN:            r = R_PPC64_ADDR14_BRTAKEN;
1904       break;
1905     case BFD_RELOC_PPC_BA16_BRNTAKEN:           r = R_PPC64_ADDR14_BRNTAKEN;
1906       break;
1907     case BFD_RELOC_PPC_B26:                     r = R_PPC64_REL24;
1908       break;
1909     case BFD_RELOC_PPC_B16:                     r = R_PPC64_REL14;
1910       break;
1911     case BFD_RELOC_PPC_B16_BRTAKEN:             r = R_PPC64_REL14_BRTAKEN;
1912       break;
1913     case BFD_RELOC_PPC_B16_BRNTAKEN:            r = R_PPC64_REL14_BRNTAKEN;
1914       break;
1915     case BFD_RELOC_16_GOTOFF:                   r = R_PPC64_GOT16;
1916       break;
1917     case BFD_RELOC_LO16_GOTOFF:                 r = R_PPC64_GOT16_LO;
1918       break;
1919     case BFD_RELOC_HI16_GOTOFF:                 r = R_PPC64_GOT16_HI;
1920       break;
1921     case BFD_RELOC_HI16_S_GOTOFF:               r = R_PPC64_GOT16_HA;
1922       break;
1923     case BFD_RELOC_PPC_COPY:                    r = R_PPC64_COPY;
1924       break;
1925     case BFD_RELOC_PPC_GLOB_DAT:                r = R_PPC64_GLOB_DAT;
1926       break;
1927     case BFD_RELOC_32_PCREL:                    r = R_PPC64_REL32;
1928       break;
1929     case BFD_RELOC_32_PLTOFF:                   r = R_PPC64_PLT32;
1930       break;
1931     case BFD_RELOC_32_PLT_PCREL:                r = R_PPC64_PLTREL32;
1932       break;
1933     case BFD_RELOC_LO16_PLTOFF:                 r = R_PPC64_PLT16_LO;
1934       break;
1935     case BFD_RELOC_HI16_PLTOFF:                 r = R_PPC64_PLT16_HI;
1936       break;
1937     case BFD_RELOC_HI16_S_PLTOFF:               r = R_PPC64_PLT16_HA;
1938       break;
1939     case BFD_RELOC_16_BASEREL:                  r = R_PPC64_SECTOFF;
1940       break;
1941     case BFD_RELOC_LO16_BASEREL:                r = R_PPC64_SECTOFF_LO;
1942       break;
1943     case BFD_RELOC_HI16_BASEREL:                r = R_PPC64_SECTOFF_HI;
1944       break;
1945     case BFD_RELOC_HI16_S_BASEREL:              r = R_PPC64_SECTOFF_HA;
1946       break;
1947     case BFD_RELOC_CTOR:                        r = R_PPC64_ADDR64;
1948       break;
1949     case BFD_RELOC_64:                          r = R_PPC64_ADDR64;
1950       break;
1951     case BFD_RELOC_PPC64_HIGHER:                r = R_PPC64_ADDR16_HIGHER;
1952       break;
1953     case BFD_RELOC_PPC64_HIGHER_S:              r = R_PPC64_ADDR16_HIGHERA;
1954       break;
1955     case BFD_RELOC_PPC64_HIGHEST:               r = R_PPC64_ADDR16_HIGHEST;
1956       break;
1957     case BFD_RELOC_PPC64_HIGHEST_S:             r = R_PPC64_ADDR16_HIGHESTA;
1958       break;
1959     case BFD_RELOC_64_PCREL:                    r = R_PPC64_REL64;
1960       break;
1961     case BFD_RELOC_64_PLTOFF:                   r = R_PPC64_PLT64;
1962       break;
1963     case BFD_RELOC_64_PLT_PCREL:                r = R_PPC64_PLTREL64;
1964       break;
1965     case BFD_RELOC_PPC_TOC16:                   r = R_PPC64_TOC16;
1966       break;
1967     case BFD_RELOC_PPC64_TOC16_LO:              r = R_PPC64_TOC16_LO;
1968       break;
1969     case BFD_RELOC_PPC64_TOC16_HI:              r = R_PPC64_TOC16_HI;
1970       break;
1971     case BFD_RELOC_PPC64_TOC16_HA:              r = R_PPC64_TOC16_HA;
1972       break;
1973     case BFD_RELOC_PPC64_TOC:                   r = R_PPC64_TOC;
1974       break;
1975     case BFD_RELOC_PPC64_PLTGOT16:              r = R_PPC64_PLTGOT16;
1976       break;
1977     case BFD_RELOC_PPC64_PLTGOT16_LO:           r = R_PPC64_PLTGOT16_LO;
1978       break;
1979     case BFD_RELOC_PPC64_PLTGOT16_HI:           r = R_PPC64_PLTGOT16_HI;
1980       break;
1981     case BFD_RELOC_PPC64_PLTGOT16_HA:           r = R_PPC64_PLTGOT16_HA;
1982       break;
1983     case BFD_RELOC_PPC64_ADDR16_DS:             r = R_PPC64_ADDR16_DS;
1984       break;
1985     case BFD_RELOC_PPC64_ADDR16_LO_DS:          r = R_PPC64_ADDR16_LO_DS;
1986       break;
1987     case BFD_RELOC_PPC64_GOT16_DS:              r = R_PPC64_GOT16_DS;
1988       break;
1989     case BFD_RELOC_PPC64_GOT16_LO_DS:           r = R_PPC64_GOT16_LO_DS;
1990       break;
1991     case BFD_RELOC_PPC64_PLT16_LO_DS:           r = R_PPC64_PLT16_LO_DS;
1992       break;
1993     case BFD_RELOC_PPC64_SECTOFF_DS:            r = R_PPC64_SECTOFF_DS;
1994       break;
1995     case BFD_RELOC_PPC64_SECTOFF_LO_DS:         r = R_PPC64_SECTOFF_LO_DS;
1996       break;
1997     case BFD_RELOC_PPC64_TOC16_DS:              r = R_PPC64_TOC16_DS;
1998       break;
1999     case BFD_RELOC_PPC64_TOC16_LO_DS:           r = R_PPC64_TOC16_LO_DS;
2000       break;
2001     case BFD_RELOC_PPC64_PLTGOT16_DS:           r = R_PPC64_PLTGOT16_DS;
2002       break;
2003     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:        r = R_PPC64_PLTGOT16_LO_DS;
2004       break;
2005     case BFD_RELOC_PPC_TLS:                     r = R_PPC64_TLS;
2006       break;
2007     case BFD_RELOC_PPC_DTPMOD:                  r = R_PPC64_DTPMOD64;
2008       break;
2009     case BFD_RELOC_PPC_TPREL16:                 r = R_PPC64_TPREL16;
2010       break;
2011     case BFD_RELOC_PPC_TPREL16_LO:              r = R_PPC64_TPREL16_LO;
2012       break;
2013     case BFD_RELOC_PPC_TPREL16_HI:              r = R_PPC64_TPREL16_HI;
2014       break;
2015     case BFD_RELOC_PPC_TPREL16_HA:              r = R_PPC64_TPREL16_HA;
2016       break;
2017     case BFD_RELOC_PPC_TPREL:                   r = R_PPC64_TPREL64;
2018       break;
2019     case BFD_RELOC_PPC_DTPREL16:                r = R_PPC64_DTPREL16;
2020       break;
2021     case BFD_RELOC_PPC_DTPREL16_LO:             r = R_PPC64_DTPREL16_LO;
2022       break;
2023     case BFD_RELOC_PPC_DTPREL16_HI:             r = R_PPC64_DTPREL16_HI;
2024       break;
2025     case BFD_RELOC_PPC_DTPREL16_HA:             r = R_PPC64_DTPREL16_HA;
2026       break;
2027     case BFD_RELOC_PPC_DTPREL:                  r = R_PPC64_DTPREL64;
2028       break;
2029     case BFD_RELOC_PPC_GOT_TLSGD16:             r = R_PPC64_GOT_TLSGD16;
2030       break;
2031     case BFD_RELOC_PPC_GOT_TLSGD16_LO:          r = R_PPC64_GOT_TLSGD16_LO;
2032       break;
2033     case BFD_RELOC_PPC_GOT_TLSGD16_HI:          r = R_PPC64_GOT_TLSGD16_HI;
2034       break;
2035     case BFD_RELOC_PPC_GOT_TLSGD16_HA:          r = R_PPC64_GOT_TLSGD16_HA;
2036       break;
2037     case BFD_RELOC_PPC_GOT_TLSLD16:             r = R_PPC64_GOT_TLSLD16;
2038       break;
2039     case BFD_RELOC_PPC_GOT_TLSLD16_LO:          r = R_PPC64_GOT_TLSLD16_LO;
2040       break;
2041     case BFD_RELOC_PPC_GOT_TLSLD16_HI:          r = R_PPC64_GOT_TLSLD16_HI;
2042       break;
2043     case BFD_RELOC_PPC_GOT_TLSLD16_HA:          r = R_PPC64_GOT_TLSLD16_HA;
2044       break;
2045     case BFD_RELOC_PPC_GOT_TPREL16:             r = R_PPC64_GOT_TPREL16_DS;
2046       break;
2047     case BFD_RELOC_PPC_GOT_TPREL16_LO:          r = R_PPC64_GOT_TPREL16_LO_DS;
2048       break;
2049     case BFD_RELOC_PPC_GOT_TPREL16_HI:          r = R_PPC64_GOT_TPREL16_HI;
2050       break;
2051     case BFD_RELOC_PPC_GOT_TPREL16_HA:          r = R_PPC64_GOT_TPREL16_HA;
2052       break;
2053     case BFD_RELOC_PPC_GOT_DTPREL16:            r = R_PPC64_GOT_DTPREL16_DS;
2054       break;
2055     case BFD_RELOC_PPC_GOT_DTPREL16_LO:         r = R_PPC64_GOT_DTPREL16_LO_DS;
2056       break;
2057     case BFD_RELOC_PPC_GOT_DTPREL16_HI:         r = R_PPC64_GOT_DTPREL16_HI;
2058       break;
2059     case BFD_RELOC_PPC_GOT_DTPREL16_HA:         r = R_PPC64_GOT_DTPREL16_HA;
2060       break;
2061     case BFD_RELOC_PPC64_TPREL16_DS:            r = R_PPC64_TPREL16_DS;
2062       break;
2063     case BFD_RELOC_PPC64_TPREL16_LO_DS:         r = R_PPC64_TPREL16_LO_DS;
2064       break;
2065     case BFD_RELOC_PPC64_TPREL16_HIGHER:        r = R_PPC64_TPREL16_HIGHER;
2066       break;
2067     case BFD_RELOC_PPC64_TPREL16_HIGHERA:       r = R_PPC64_TPREL16_HIGHERA;
2068       break;
2069     case BFD_RELOC_PPC64_TPREL16_HIGHEST:       r = R_PPC64_TPREL16_HIGHEST;
2070       break;
2071     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:      r = R_PPC64_TPREL16_HIGHESTA;
2072       break;
2073     case BFD_RELOC_PPC64_DTPREL16_DS:           r = R_PPC64_DTPREL16_DS;
2074       break;
2075     case BFD_RELOC_PPC64_DTPREL16_LO_DS:        r = R_PPC64_DTPREL16_LO_DS;
2076       break;
2077     case BFD_RELOC_PPC64_DTPREL16_HIGHER:       r = R_PPC64_DTPREL16_HIGHER;
2078       break;
2079     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:      r = R_PPC64_DTPREL16_HIGHERA;
2080       break;
2081     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:      r = R_PPC64_DTPREL16_HIGHEST;
2082       break;
2083     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     r = R_PPC64_DTPREL16_HIGHESTA;
2084       break;
2085     case BFD_RELOC_VTABLE_INHERIT:              r = R_PPC64_GNU_VTINHERIT;
2086       break;
2087     case BFD_RELOC_VTABLE_ENTRY:                r = R_PPC64_GNU_VTENTRY;
2088       break;
2089     }
2090
2091   return ppc64_elf_howto_table[r];
2092 };
2093
2094 /* Set the howto pointer for a PowerPC ELF reloc.  */
2095
2096 static void
2097 ppc64_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
2098                          Elf_Internal_Rela *dst)
2099 {
2100   unsigned int type;
2101
2102   /* Initialize howto table if needed.  */
2103   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2104     ppc_howto_init ();
2105
2106   type = ELF64_R_TYPE (dst->r_info);
2107   BFD_ASSERT (type < (sizeof (ppc64_elf_howto_table)
2108                       / sizeof (ppc64_elf_howto_table[0])));
2109   cache_ptr->howto = ppc64_elf_howto_table[type];
2110 }
2111
2112 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
2113
2114 static bfd_reloc_status_type
2115 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2116                     void *data, asection *input_section,
2117                     bfd *output_bfd, char **error_message)
2118 {
2119   /* If this is a relocatable link (output_bfd test tells us), just
2120      call the generic function.  Any adjustment will be done at final
2121      link time.  */
2122   if (output_bfd != NULL)
2123     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2124                                   input_section, output_bfd, error_message);
2125
2126   /* Adjust the addend for sign extension of the low 16 bits.
2127      We won't actually be using the low 16 bits, so trashing them
2128      doesn't matter.  */
2129   reloc_entry->addend += 0x8000;
2130   return bfd_reloc_continue;
2131 }
2132
2133 static bfd_reloc_status_type
2134 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2135                          void *data, asection *input_section,
2136                          bfd *output_bfd, char **error_message)
2137 {
2138   long insn;
2139   enum elf_ppc64_reloc_type r_type;
2140   bfd_size_type octets;
2141   /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
2142   bfd_boolean is_power4 = FALSE;
2143
2144   /* If this is a relocatable link (output_bfd test tells us), just
2145      call the generic function.  Any adjustment will be done at final
2146      link time.  */
2147   if (output_bfd != NULL)
2148     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2149                                   input_section, output_bfd, error_message);
2150
2151   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2152   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2153   insn &= ~(0x01 << 21);
2154   r_type = reloc_entry->howto->type;
2155   if (r_type == R_PPC64_ADDR14_BRTAKEN
2156       || r_type == R_PPC64_REL14_BRTAKEN)
2157     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
2158
2159   if (is_power4)
2160     {
2161       /* Set 'a' bit.  This is 0b00010 in BO field for branch
2162          on CR(BI) insns (BO == 001at or 011at), and 0b01000
2163          for branch on CTR insns (BO == 1a00t or 1a01t).  */
2164       if ((insn & (0x14 << 21)) == (0x04 << 21))
2165         insn |= 0x02 << 21;
2166       else if ((insn & (0x14 << 21)) == (0x10 << 21))
2167         insn |= 0x08 << 21;
2168       else
2169         return bfd_reloc_continue;
2170     }
2171   else
2172     {
2173       bfd_vma target = 0;
2174       bfd_vma from;
2175
2176       if (!bfd_is_com_section (symbol->section))
2177         target = symbol->value;
2178       target += symbol->section->output_section->vma;
2179       target += symbol->section->output_offset;
2180       target += reloc_entry->addend;
2181
2182       from = (reloc_entry->address
2183               + input_section->output_offset
2184               + input_section->output_section->vma);
2185
2186       /* Invert 'y' bit if not the default.  */
2187       if ((bfd_signed_vma) (target - from) < 0)
2188         insn ^= 0x01 << 21;
2189     }
2190   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2191   return bfd_reloc_continue;
2192 }
2193
2194 static bfd_reloc_status_type
2195 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2196                          void *data, asection *input_section,
2197                          bfd *output_bfd, char **error_message)
2198 {
2199   /* If this is a relocatable link (output_bfd test tells us), just
2200      call the generic function.  Any adjustment will be done at final
2201      link time.  */
2202   if (output_bfd != NULL)
2203     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2204                                   input_section, output_bfd, error_message);
2205
2206   /* Subtract the symbol section base address.  */
2207   reloc_entry->addend -= symbol->section->output_section->vma;
2208   return bfd_reloc_continue;
2209 }
2210
2211 static bfd_reloc_status_type
2212 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2213                             void *data, asection *input_section,
2214                             bfd *output_bfd, char **error_message)
2215 {
2216   /* If this is a relocatable link (output_bfd test tells us), just
2217      call the generic function.  Any adjustment will be done at final
2218      link time.  */
2219   if (output_bfd != NULL)
2220     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2221                                   input_section, output_bfd, error_message);
2222
2223   /* Subtract the symbol section base address.  */
2224   reloc_entry->addend -= symbol->section->output_section->vma;
2225
2226   /* Adjust the addend for sign extension of the low 16 bits.  */
2227   reloc_entry->addend += 0x8000;
2228   return bfd_reloc_continue;
2229 }
2230
2231 static bfd_reloc_status_type
2232 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2233                      void *data, asection *input_section,
2234                      bfd *output_bfd, char **error_message)
2235 {
2236   bfd_vma TOCstart;
2237
2238   /* If this is a relocatable link (output_bfd test tells us), just
2239      call the generic function.  Any adjustment will be done at final
2240      link time.  */
2241   if (output_bfd != NULL)
2242     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2243                                   input_section, output_bfd, error_message);
2244
2245   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2246   if (TOCstart == 0)
2247     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2248
2249   /* Subtract the TOC base address.  */
2250   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2251   return bfd_reloc_continue;
2252 }
2253
2254 static bfd_reloc_status_type
2255 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2256                         void *data, asection *input_section,
2257                         bfd *output_bfd, char **error_message)
2258 {
2259   bfd_vma TOCstart;
2260
2261   /* If this is a relocatable link (output_bfd test tells us), just
2262      call the generic function.  Any adjustment will be done at final
2263      link time.  */
2264   if (output_bfd != NULL)
2265     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2266                                   input_section, output_bfd, error_message);
2267
2268   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2269   if (TOCstart == 0)
2270     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2271
2272   /* Subtract the TOC base address.  */
2273   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2274
2275   /* Adjust the addend for sign extension of the low 16 bits.  */
2276   reloc_entry->addend += 0x8000;
2277   return bfd_reloc_continue;
2278 }
2279
2280 static bfd_reloc_status_type
2281 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2282                        void *data, asection *input_section,
2283                        bfd *output_bfd, char **error_message)
2284 {
2285   bfd_vma TOCstart;
2286   bfd_size_type octets;
2287
2288   /* If this is a relocatable link (output_bfd test tells us), just
2289      call the generic function.  Any adjustment will be done at final
2290      link time.  */
2291   if (output_bfd != NULL)
2292     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2293                                   input_section, output_bfd, error_message);
2294
2295   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2296   if (TOCstart == 0)
2297     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2298
2299   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2300   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
2301   return bfd_reloc_ok;
2302 }
2303
2304 static bfd_reloc_status_type
2305 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2306                            void *data, asection *input_section,
2307                            bfd *output_bfd, char **error_message)
2308 {
2309   /* If this is a relocatable link (output_bfd test tells us), just
2310      call the generic function.  Any adjustment will be done at final
2311      link time.  */
2312   if (output_bfd != NULL)
2313     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2314                                   input_section, output_bfd, error_message);
2315
2316   if (error_message != NULL)
2317     {
2318       static char buf[60];
2319       sprintf (buf, "generic linker can't handle %s",
2320                reloc_entry->howto->name);
2321       *error_message = buf;
2322     }
2323   return bfd_reloc_dangerous;
2324 }
2325
2326 struct ppc64_elf_obj_tdata
2327 {
2328   struct elf_obj_tdata elf;
2329
2330   /* Shortcuts to dynamic linker sections.  */
2331   asection *got;
2332   asection *relgot;
2333
2334   /* TLS local dynamic got entry handling.  Suppose for multiple GOT
2335      sections means we potentially need one of these for each input bfd.  */
2336   union {
2337     bfd_signed_vma refcount;
2338     bfd_vma offset;
2339   } tlsld_got;
2340 };
2341
2342 #define ppc64_elf_tdata(bfd) \
2343   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
2344
2345 #define ppc64_tlsld_got(bfd) \
2346   (&ppc64_elf_tdata (bfd)->tlsld_got)
2347
2348 /* Override the generic function because we store some extras.  */
2349
2350 static bfd_boolean
2351 ppc64_elf_mkobject (bfd *abfd)
2352 {
2353   bfd_size_type amt = sizeof (struct ppc64_elf_obj_tdata);
2354   abfd->tdata.any = bfd_zalloc (abfd, amt);
2355   if (abfd->tdata.any == NULL)
2356     return FALSE;
2357   return TRUE;
2358 }
2359
2360 /* Fix bad default arch selected for a 64 bit input bfd when the
2361    default is 32 bit.  */
2362
2363 static bfd_boolean
2364 ppc64_elf_object_p (bfd *abfd)
2365 {
2366   if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32)
2367     {
2368       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
2369
2370       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
2371         {
2372           /* Relies on arch after 32 bit default being 64 bit default.  */
2373           abfd->arch_info = abfd->arch_info->next;
2374           BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
2375         }
2376     }
2377   return TRUE;
2378 }
2379
2380 /* Support for core dump NOTE sections.  */
2381
2382 static bfd_boolean
2383 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
2384 {
2385   size_t offset, size;
2386
2387   if (note->descsz != 504)
2388     return FALSE;
2389
2390   /* pr_cursig */
2391   elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
2392
2393   /* pr_pid */
2394   elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32);
2395
2396   /* pr_reg */
2397   offset = 112;
2398   size = 384;
2399
2400   /* Make a ".reg/999" section.  */
2401   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
2402                                           size, note->descpos + offset);
2403 }
2404
2405 static bfd_boolean
2406 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
2407 {
2408   if (note->descsz != 136)
2409     return FALSE;
2410
2411   elf_tdata (abfd)->core_program
2412     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
2413   elf_tdata (abfd)->core_command
2414     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
2415
2416   return TRUE;
2417 }
2418
2419 /* Merge backend specific data from an object file to the output
2420    object file when linking.  */
2421
2422 static bfd_boolean
2423 ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
2424 {
2425   /* Check if we have the same endianess.  */
2426   if (ibfd->xvec->byteorder != obfd->xvec->byteorder
2427       && ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN
2428       && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
2429     {
2430       const char *msg;
2431
2432       if (bfd_big_endian (ibfd))
2433         msg = _("%s: compiled for a big endian system "
2434                 "and target is little endian");
2435       else
2436         msg = _("%s: compiled for a little endian system "
2437                 "and target is big endian");
2438
2439       (*_bfd_error_handler) (msg, bfd_archive_filename (ibfd));
2440
2441       bfd_set_error (bfd_error_wrong_format);
2442       return FALSE;
2443     }
2444
2445   return TRUE;
2446 }
2447
2448 /* Add extra PPC sections.  */
2449
2450 static struct bfd_elf_special_section const ppc64_elf_special_sections[]=
2451 {
2452   { ".sdata",   6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2453   { ".sbss",    5, -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2454   { ".plt",     4,  0, SHT_NOBITS,   0 },
2455   { ".toc",     4,  0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2456   { ".toc1",    5,  0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2457   { ".tocbss",  7,  0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2458   { NULL,       0,  0, 0,            0 }
2459 };
2460
2461 struct _ppc64_elf_section_data
2462 {
2463   struct bfd_elf_section_data elf;
2464
2465   /* An array with one entry for each opd function descriptor.  */
2466   union
2467   {
2468     /* Points to the function code section for local opd entries.  */
2469     asection **func_sec;
2470     /* After editing .opd, adjust references to opd local syms.  */
2471     long *adjust;
2472   } opd;
2473
2474   /* An array for toc sections, indexed by offset/8.
2475      Specifies the relocation symbol index used at a given toc offset.  */
2476   unsigned *t_symndx;
2477 };
2478
2479 #define ppc64_elf_section_data(sec) \
2480   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
2481
2482 static bfd_boolean
2483 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
2484 {
2485   struct _ppc64_elf_section_data *sdata;
2486   bfd_size_type amt = sizeof (*sdata);
2487
2488   sdata = bfd_zalloc (abfd, amt);
2489   if (sdata == NULL)
2490     return FALSE;
2491   sec->used_by_bfd = sdata;
2492
2493   return _bfd_elf_new_section_hook (abfd, sec);
2494 }
2495 \f
2496 /* The following functions are specific to the ELF linker, while
2497    functions above are used generally.  Those named ppc64_elf_* are
2498    called by the main ELF linker code.  They appear in this file more
2499    or less in the order in which they are called.  eg.
2500    ppc64_elf_check_relocs is called early in the link process,
2501    ppc64_elf_finish_dynamic_sections is one of the last functions
2502    called.
2503
2504    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
2505    functions have both a function code symbol and a function descriptor
2506    symbol.  A call to foo in a relocatable object file looks like:
2507
2508    .            .text
2509    .    x:
2510    .            bl      .foo
2511    .            nop
2512
2513    The function definition in another object file might be:
2514
2515    .            .section .opd
2516    .    foo:    .quad   .foo
2517    .            .quad   .TOC.@tocbase
2518    .            .quad   0
2519    .
2520    .            .text
2521    .    .foo:   blr
2522
2523    When the linker resolves the call during a static link, the branch
2524    unsurprisingly just goes to .foo and the .opd information is unused.
2525    If the function definition is in a shared library, things are a little
2526    different:  The call goes via a plt call stub, the opd information gets
2527    copied to the plt, and the linker patches the nop.
2528
2529    .    x:
2530    .            bl      .foo_stub
2531    .            ld      2,40(1)
2532    .
2533    .
2534    .    .foo_stub:
2535    .            addis   12,2,Lfoo@toc@ha        # in practice, the call stub
2536    .            addi    12,12,Lfoo@toc@l        # is slightly optimized, but
2537    .            std     2,40(1)                 # this is the general idea
2538    .            ld      11,0(12)
2539    .            ld      2,8(12)
2540    .            mtctr   11
2541    .            ld      11,16(12)
2542    .            bctr
2543    .
2544    .            .section .plt
2545    .    Lfoo:   reloc (R_PPC64_JMP_SLOT, foo)
2546
2547    The "reloc ()" notation is supposed to indicate that the linker emits
2548    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
2549    copying.
2550
2551    What are the difficulties here?  Well, firstly, the relocations
2552    examined by the linker in check_relocs are against the function code
2553    sym .foo, while the dynamic relocation in the plt is emitted against
2554    the function descriptor symbol, foo.  Somewhere along the line, we need
2555    to carefully copy dynamic link information from one symbol to the other.
2556    Secondly, the generic part of the elf linker will make .foo a dynamic
2557    symbol as is normal for most other backends.  We need foo dynamic
2558    instead, at least for an application final link.  However, when
2559    creating a shared library containing foo, we need to have both symbols
2560    dynamic so that references to .foo are satisfied during the early
2561    stages of linking.  Otherwise the linker might decide to pull in a
2562    definition from some other object, eg. a static library.  */
2563
2564 /* The linker needs to keep track of the number of relocs that it
2565    decides to copy as dynamic relocs in check_relocs for each symbol.
2566    This is so that it can later discard them if they are found to be
2567    unnecessary.  We store the information in a field extending the
2568    regular ELF linker hash table.  */
2569
2570 struct ppc_dyn_relocs
2571 {
2572   struct ppc_dyn_relocs *next;
2573
2574   /* The input section of the reloc.  */
2575   asection *sec;
2576
2577   /* Total number of relocs copied for the input section.  */
2578   bfd_size_type count;
2579
2580   /* Number of pc-relative relocs copied for the input section.  */
2581   bfd_size_type pc_count;
2582 };
2583
2584 /* Track GOT entries needed for a given symbol.  We might need more
2585    than one got entry per symbol.  */
2586 struct got_entry
2587 {
2588   struct got_entry *next;
2589
2590   /* The symbol addend that we'll be placing in the GOT.  */
2591   bfd_vma addend;
2592
2593   /* Unlike other ELF targets, we use separate GOT entries for the same
2594      symbol referenced from different input files.  This is to support
2595      automatic multiple TOC/GOT sections, where the TOC base can vary
2596      from one input file to another.
2597
2598      Point to the BFD owning this GOT entry.  */
2599   bfd *owner;
2600
2601   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
2602      TLS_TPREL or TLS_DTPREL for tls entries.  */
2603   char tls_type;
2604
2605   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
2606   union
2607     {
2608       bfd_signed_vma refcount;
2609       bfd_vma offset;
2610     } got;
2611 };
2612
2613 /* The same for PLT.  */
2614 struct plt_entry
2615 {
2616   struct plt_entry *next;
2617
2618   bfd_vma addend;
2619
2620   union
2621     {
2622       bfd_signed_vma refcount;
2623       bfd_vma offset;
2624     } plt;
2625 };
2626
2627 /* Of those relocs that might be copied as dynamic relocs, this macro
2628    selects those that must be copied when linking a shared library,
2629    even when the symbol is local.  */
2630
2631 #define MUST_BE_DYN_RELOC(RTYPE)                \
2632   ((RTYPE) != R_PPC64_REL32                     \
2633    && (RTYPE) != R_PPC64_REL64                  \
2634    && (RTYPE) != R_PPC64_REL30)
2635
2636 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
2637    copying dynamic variables from a shared lib into an app's dynbss
2638    section, and instead use a dynamic relocation to point into the
2639    shared lib.  With code that gcc generates, it's vital that this be
2640    enabled;  In the PowerPC64 ABI, the address of a function is actually
2641    the address of a function descriptor, which resides in the .opd
2642    section.  gcc uses the descriptor directly rather than going via the
2643    GOT as some other ABI's do, which means that initialized function
2644    pointers must reference the descriptor.  Thus, a function pointer
2645    initialized to the address of a function in a shared library will
2646    either require a copy reloc, or a dynamic reloc.  Using a copy reloc
2647    redefines the function descriptor symbol to point to the copy.  This
2648    presents a problem as a plt entry for that function is also
2649    initialized from the function descriptor symbol and the copy reloc
2650    may not be initialized first.  */
2651 #define ELIMINATE_COPY_RELOCS 1
2652
2653 /* Section name for stubs is the associated section name plus this
2654    string.  */
2655 #define STUB_SUFFIX ".stub"
2656
2657 /* Linker stubs.
2658    ppc_stub_long_branch:
2659    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
2660    destination, but a 24 bit branch in a stub section will reach.
2661    .    b       dest
2662
2663    ppc_stub_plt_branch:
2664    Similar to the above, but a 24 bit branch in the stub section won't
2665    reach its destination.
2666    .    addis   %r12,%r2,xxx@toc@ha
2667    .    ld      %r11,xxx@toc@l(%r12)
2668    .    mtctr   %r11
2669    .    bctr
2670
2671    ppc_stub_plt_call:
2672    Used to call a function in a shared library.
2673    .    addis   %r12,%r2,xxx@toc@ha
2674    .    std     %r2,40(%r1)
2675    .    ld      %r11,xxx+0@toc@l(%r12)
2676    .    ld      %r2,xxx+8@toc@l(%r12)
2677    .    mtctr   %r11
2678    .    ld      %r11,xxx+16@toc@l(%r12)
2679    .    bctr
2680
2681    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
2682    code to adjust the value and save r2 to support multiple toc sections.
2683    A ppc_stub_long_branch with an r2 offset looks like:
2684    .    std     %r2,40(%r1)
2685    .    addis   %r2,%r2,off@ha
2686    .    addi    %r2,%r2,off@l
2687    .    b       dest
2688
2689    A ppc_stub_plt_branch with an r2 offset looks like:
2690    .    std     %r2,40(%r1)
2691    .    addis   %r12,%r2,xxx@toc@ha
2692    .    ld      %r11,xxx@toc@l(%r12)
2693    .    addis   %r2,%r2,off@ha
2694    .    addi    %r2,%r2,off@l
2695    .    mtctr   %r11
2696    .    bctr
2697 */
2698
2699 enum ppc_stub_type {
2700   ppc_stub_none,
2701   ppc_stub_long_branch,
2702   ppc_stub_long_branch_r2off,
2703   ppc_stub_plt_branch,
2704   ppc_stub_plt_branch_r2off,
2705   ppc_stub_plt_call
2706 };
2707
2708 struct ppc_stub_hash_entry {
2709
2710   /* Base hash table entry structure.  */
2711   struct bfd_hash_entry root;
2712
2713   enum ppc_stub_type stub_type;
2714
2715   /* The stub section.  */
2716   asection *stub_sec;
2717
2718   /* Offset within stub_sec of the beginning of this stub.  */
2719   bfd_vma stub_offset;
2720
2721   /* Given the symbol's value and its section we can determine its final
2722      value when building the stubs (so the stub knows where to jump.  */
2723   bfd_vma target_value;
2724   asection *target_section;
2725
2726   /* The symbol table entry, if any, that this was derived from.  */
2727   struct ppc_link_hash_entry *h;
2728
2729   /* And the reloc addend that this was derived from.  */
2730   bfd_vma addend;
2731
2732   /* Where this stub is being called from, or, in the case of combined
2733      stub sections, the first input section in the group.  */
2734   asection *id_sec;
2735 };
2736
2737 struct ppc_branch_hash_entry {
2738
2739   /* Base hash table entry structure.  */
2740   struct bfd_hash_entry root;
2741
2742   /* Offset within .branch_lt.  */
2743   unsigned int offset;
2744
2745   /* Generation marker.  */
2746   unsigned int iter;
2747 };
2748
2749 struct ppc_link_hash_entry
2750 {
2751   struct elf_link_hash_entry elf;
2752
2753   /* A pointer to the most recently used stub hash entry against this
2754      symbol.  */
2755   struct ppc_stub_hash_entry *stub_cache;
2756
2757   /* Track dynamic relocs copied for this symbol.  */
2758   struct ppc_dyn_relocs *dyn_relocs;
2759
2760   /* Link between function code and descriptor symbols.  */
2761   struct elf_link_hash_entry *oh;
2762
2763   /* Flag function code and descriptor symbols.  */
2764   unsigned int is_func:1;
2765   unsigned int is_func_descriptor:1;
2766   unsigned int is_entry:1;
2767
2768   /* Whether global opd sym has been adjusted or not.  */
2769   unsigned int adjust_done:1;
2770
2771   /* Contexts in which symbol is used in the GOT (or TOC).
2772      TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
2773      corresponding relocs are encountered during check_relocs.
2774      tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
2775      indicate the corresponding GOT entry type is not needed.
2776      tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
2777      a TPREL one.  We use a separate flag rather than setting TPREL
2778      just for convenience in distinguishing the two cases.  */
2779 #define TLS_GD           1      /* GD reloc. */
2780 #define TLS_LD           2      /* LD reloc. */
2781 #define TLS_TPREL        4      /* TPREL reloc, => IE. */
2782 #define TLS_DTPREL       8      /* DTPREL reloc, => LD. */
2783 #define TLS_TLS         16      /* Any TLS reloc.  */
2784 #define TLS_EXPLICIT    32      /* Marks TOC section TLS relocs. */
2785 #define TLS_TPRELGD     64      /* TPREL reloc resulting from GD->IE. */
2786   char tls_mask;
2787 };
2788
2789 /* ppc64 ELF linker hash table.  */
2790
2791 struct ppc_link_hash_table
2792 {
2793   struct elf_link_hash_table elf;
2794
2795   /* The stub hash table.  */
2796   struct bfd_hash_table stub_hash_table;
2797
2798   /* Another hash table for plt_branch stubs.  */
2799   struct bfd_hash_table branch_hash_table;
2800
2801   /* Linker stub bfd.  */
2802   bfd *stub_bfd;
2803
2804   /* Linker call-backs.  */
2805   asection * (*add_stub_section) (const char *, asection *);
2806   void (*layout_sections_again) (void);
2807
2808   /* Array to keep track of which stub sections have been created, and
2809      information on stub grouping.  */
2810   struct map_stub {
2811     /* This is the section to which stubs in the group will be attached.  */
2812     asection *link_sec;
2813     /* The stub section.  */
2814     asection *stub_sec;
2815     /* Along with elf_gp, specifies the TOC pointer used in this group.  */
2816     bfd_vma toc_off;
2817   } *stub_group;
2818
2819   /* Support for multiple toc sections.  */
2820   unsigned int no_multi_toc;
2821   unsigned int multi_toc_needed;
2822
2823   /* Temp used when calculating TOC pointers.  */
2824   bfd_vma toc_curr;
2825
2826   /* Highest input section id.  */
2827   int top_id;
2828
2829   /* Highest output section index.  */
2830   int top_index;
2831
2832   /* List of input sections for each output section.  */
2833   asection **input_list;
2834
2835   /* Short-cuts to get to dynamic linker sections.  */
2836   asection *got;
2837   asection *plt;
2838   asection *relplt;
2839   asection *dynbss;
2840   asection *relbss;
2841   asection *glink;
2842   asection *sfpr;
2843   asection *brlt;
2844   asection *relbrlt;
2845
2846   /* Shortcut to .__tls_get_addr.  */
2847   struct elf_link_hash_entry *tls_get_addr;
2848
2849   /* Statistics.  */
2850   unsigned long stub_count[ppc_stub_plt_call];
2851
2852   /* Set if we should emit symbols for stubs.  */
2853   unsigned int emit_stub_syms;
2854
2855   /* Set on error.  */
2856   unsigned int stub_error;
2857
2858   /* Flag set when small branches are detected.  Used to
2859      select suitable defaults for the stub group size.  */
2860   unsigned int has_14bit_branch;
2861
2862   /* Set if we detect a reference undefined weak symbol.  */
2863   unsigned int have_undefweak;
2864
2865   /* Incremented every time we size stubs.  */
2866   unsigned int stub_iteration;
2867
2868   /* Small local sym to section mapping cache.  */
2869   struct sym_sec_cache sym_sec;
2870 };
2871
2872 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
2873
2874 #define ppc_hash_table(p) \
2875   ((struct ppc_link_hash_table *) ((p)->hash))
2876
2877 #define ppc_stub_hash_lookup(table, string, create, copy) \
2878   ((struct ppc_stub_hash_entry *) \
2879    bfd_hash_lookup ((table), (string), (create), (copy)))
2880
2881 #define ppc_branch_hash_lookup(table, string, create, copy) \
2882   ((struct ppc_branch_hash_entry *) \
2883    bfd_hash_lookup ((table), (string), (create), (copy)))
2884
2885 /* Create an entry in the stub hash table.  */
2886
2887 static struct bfd_hash_entry *
2888 stub_hash_newfunc (struct bfd_hash_entry *entry,
2889                    struct bfd_hash_table *table,
2890                    const char *string)
2891 {
2892   /* Allocate the structure if it has not already been allocated by a
2893      subclass.  */
2894   if (entry == NULL)
2895     {
2896       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
2897       if (entry == NULL)
2898         return entry;
2899     }
2900
2901   /* Call the allocation method of the superclass.  */
2902   entry = bfd_hash_newfunc (entry, table, string);
2903   if (entry != NULL)
2904     {
2905       struct ppc_stub_hash_entry *eh;
2906
2907       /* Initialize the local fields.  */
2908       eh = (struct ppc_stub_hash_entry *) entry;
2909       eh->stub_type = ppc_stub_none;
2910       eh->stub_sec = NULL;
2911       eh->stub_offset = 0;
2912       eh->target_value = 0;
2913       eh->target_section = NULL;
2914       eh->h = NULL;
2915       eh->id_sec = NULL;
2916     }
2917
2918   return entry;
2919 }
2920
2921 /* Create an entry in the branch hash table.  */
2922
2923 static struct bfd_hash_entry *
2924 branch_hash_newfunc (struct bfd_hash_entry *entry,
2925                      struct bfd_hash_table *table,
2926                      const char *string)
2927 {
2928   /* Allocate the structure if it has not already been allocated by a
2929      subclass.  */
2930   if (entry == NULL)
2931     {
2932       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
2933       if (entry == NULL)
2934         return entry;
2935     }
2936
2937   /* Call the allocation method of the superclass.  */
2938   entry = bfd_hash_newfunc (entry, table, string);
2939   if (entry != NULL)
2940     {
2941       struct ppc_branch_hash_entry *eh;
2942
2943       /* Initialize the local fields.  */
2944       eh = (struct ppc_branch_hash_entry *) entry;
2945       eh->offset = 0;
2946       eh->iter = 0;
2947     }
2948
2949   return entry;
2950 }
2951
2952 /* Create an entry in a ppc64 ELF linker hash table.  */
2953
2954 static struct bfd_hash_entry *
2955 link_hash_newfunc (struct bfd_hash_entry *entry,
2956                    struct bfd_hash_table *table,
2957                    const char *string)
2958 {
2959   /* Allocate the structure if it has not already been allocated by a
2960      subclass.  */
2961   if (entry == NULL)
2962     {
2963       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
2964       if (entry == NULL)
2965         return entry;
2966     }
2967
2968   /* Call the allocation method of the superclass.  */
2969   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
2970   if (entry != NULL)
2971     {
2972       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
2973
2974       eh->stub_cache = NULL;
2975       eh->dyn_relocs = NULL;
2976       eh->oh = NULL;
2977       eh->is_func = 0;
2978       eh->is_func_descriptor = 0;
2979       eh->is_entry = 0;
2980       eh->adjust_done = 0;
2981       eh->tls_mask = 0;
2982     }
2983
2984   return entry;
2985 }
2986
2987 /* Create a ppc64 ELF linker hash table.  */
2988
2989 static struct bfd_link_hash_table *
2990 ppc64_elf_link_hash_table_create (bfd *abfd)
2991 {
2992   struct ppc_link_hash_table *htab;
2993   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
2994
2995   htab = bfd_zmalloc (amt);
2996   if (htab == NULL)
2997     return NULL;
2998
2999   if (! _bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc))
3000     {
3001       free (htab);
3002       return NULL;
3003     }
3004
3005   /* Init the stub hash table too.  */
3006   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc))
3007     return NULL;
3008
3009   /* And the branch hash table.  */
3010   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc))
3011     return NULL;
3012
3013   /* Initializing two fields of the union is just cosmetic.  We really
3014      only care about glist, but when compiled on a 32-bit host the
3015      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3016      debugger inspection of these fields look nicer.  */
3017   htab->elf.init_refcount.refcount = 0;
3018   htab->elf.init_refcount.glist = NULL;
3019   htab->elf.init_offset.offset = 0;
3020   htab->elf.init_offset.glist = NULL;
3021
3022   return &htab->elf.root;
3023 }
3024
3025 /* Free the derived linker hash table.  */
3026
3027 static void
3028 ppc64_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
3029 {
3030   struct ppc_link_hash_table *ret = (struct ppc_link_hash_table *) hash;
3031
3032   bfd_hash_table_free (&ret->stub_hash_table);
3033   bfd_hash_table_free (&ret->branch_hash_table);
3034   _bfd_generic_link_hash_table_free (hash);
3035 }
3036
3037 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3038
3039 void
3040 ppc64_elf_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
3041 {
3042   struct ppc_link_hash_table *htab;
3043
3044   elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS64;
3045
3046 /* Always hook our dynamic sections into the first bfd, which is the
3047    linker created stub bfd.  This ensures that the GOT header is at
3048    the start of the output TOC section.  */
3049   htab = ppc_hash_table (info);
3050   htab->stub_bfd = abfd;
3051   htab->elf.dynobj = abfd;
3052 }
3053
3054 /* Build a name for an entry in the stub hash table.  */
3055
3056 static char *
3057 ppc_stub_name (const asection *input_section,
3058                const asection *sym_sec,
3059                const struct ppc_link_hash_entry *h,
3060                const Elf_Internal_Rela *rel)
3061 {
3062   char *stub_name;
3063   bfd_size_type len;
3064
3065   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3066      offsets from a sym as a branch target?  In fact, we could
3067      probably assume the addend is always zero.  */
3068   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3069
3070   if (h)
3071     {
3072       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3073       stub_name = bfd_malloc (len);
3074       if (stub_name != NULL)
3075         {
3076           sprintf (stub_name, "%08x.%s+%x",
3077                    input_section->id & 0xffffffff,
3078                    h->elf.root.root.string,
3079                    (int) rel->r_addend & 0xffffffff);
3080         }
3081     }
3082   else
3083     {
3084       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3085       stub_name = bfd_malloc (len);
3086       if (stub_name != NULL)
3087         {
3088           sprintf (stub_name, "%08x.%x:%x+%x",
3089                    input_section->id & 0xffffffff,
3090                    sym_sec->id & 0xffffffff,
3091                    (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3092                    (int) rel->r_addend & 0xffffffff);
3093         }
3094     }
3095   return stub_name;
3096 }
3097
3098 /* Look up an entry in the stub hash.  Stub entries are cached because
3099    creating the stub name takes a bit of time.  */
3100
3101 static struct ppc_stub_hash_entry *
3102 ppc_get_stub_entry (const asection *input_section,
3103                     const asection *sym_sec,
3104                     struct elf_link_hash_entry *hash,
3105                     const Elf_Internal_Rela *rel,
3106                     struct ppc_link_hash_table *htab)
3107 {
3108   struct ppc_stub_hash_entry *stub_entry;
3109   struct ppc_link_hash_entry *h = (struct ppc_link_hash_entry *) hash;
3110   const asection *id_sec;
3111
3112   /* If this input section is part of a group of sections sharing one
3113      stub section, then use the id of the first section in the group.
3114      Stub names need to include a section id, as there may well be
3115      more than one stub used to reach say, printf, and we need to
3116      distinguish between them.  */
3117   id_sec = htab->stub_group[input_section->id].link_sec;
3118
3119   if (h != NULL && h->stub_cache != NULL
3120       && h->stub_cache->h == h
3121       && h->stub_cache->id_sec == id_sec)
3122     {
3123       stub_entry = h->stub_cache;
3124     }
3125   else
3126     {
3127       char *stub_name;
3128
3129       stub_name = ppc_stub_name (id_sec, sym_sec, h, rel);
3130       if (stub_name == NULL)
3131         return NULL;
3132
3133       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3134                                          stub_name, FALSE, FALSE);
3135       if (h != NULL)
3136         h->stub_cache = stub_entry;
3137
3138       free (stub_name);
3139     }
3140
3141   return stub_entry;
3142 }
3143
3144 /* Add a new stub entry to the stub hash.  Not all fields of the new
3145    stub entry are initialised.  */
3146
3147 static struct ppc_stub_hash_entry *
3148 ppc_add_stub (const char *stub_name,
3149               asection *section,
3150               struct ppc_link_hash_table *htab)
3151 {
3152   asection *link_sec;
3153   asection *stub_sec;
3154   struct ppc_stub_hash_entry *stub_entry;
3155
3156   link_sec = htab->stub_group[section->id].link_sec;
3157   stub_sec = htab->stub_group[section->id].stub_sec;
3158   if (stub_sec == NULL)
3159     {
3160       stub_sec = htab->stub_group[link_sec->id].stub_sec;
3161       if (stub_sec == NULL)
3162         {
3163           size_t namelen;
3164           bfd_size_type len;
3165           char *s_name;
3166
3167           namelen = strlen (link_sec->name);
3168           len = namelen + sizeof (STUB_SUFFIX);
3169           s_name = bfd_alloc (htab->stub_bfd, len);
3170           if (s_name == NULL)
3171             return NULL;
3172
3173           memcpy (s_name, link_sec->name, namelen);
3174           memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3175           stub_sec = (*htab->add_stub_section) (s_name, link_sec);
3176           if (stub_sec == NULL)
3177             return NULL;
3178           htab->stub_group[link_sec->id].stub_sec = stub_sec;
3179         }
3180       htab->stub_group[section->id].stub_sec = stub_sec;
3181     }
3182
3183   /* Enter this entry into the linker stub hash table.  */
3184   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3185                                      TRUE, FALSE);
3186   if (stub_entry == NULL)
3187     {
3188       (*_bfd_error_handler) (_("%s: cannot create stub entry %s"),
3189                              bfd_archive_filename (section->owner),
3190                              stub_name);
3191       return NULL;
3192     }
3193
3194   stub_entry->stub_sec = stub_sec;
3195   stub_entry->stub_offset = 0;
3196   stub_entry->id_sec = link_sec;
3197   return stub_entry;
3198 }
3199
3200 /* Create sections for linker generated code.  */
3201
3202 static bfd_boolean
3203 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3204 {
3205   struct ppc_link_hash_table *htab;
3206   flagword flags;
3207
3208   htab = ppc_hash_table (info);
3209
3210   /* Create .sfpr for code to save and restore fp regs.  */
3211   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3212            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3213   htab->sfpr = bfd_make_section_anyway (dynobj, ".sfpr");
3214   if (htab->sfpr == NULL
3215       || ! bfd_set_section_flags (dynobj, htab->sfpr, flags)
3216       || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
3217     return FALSE;
3218
3219   /* Create .glink for lazy dynamic linking support.  */
3220   htab->glink = bfd_make_section_anyway (dynobj, ".glink");
3221   if (htab->glink == NULL
3222       || ! bfd_set_section_flags (dynobj, htab->glink, flags)
3223       || ! bfd_set_section_alignment (dynobj, htab->glink, 2))
3224     return FALSE;
3225
3226   /* Create .branch_lt for plt_branch stubs.  */
3227   flags = (SEC_ALLOC | SEC_LOAD
3228            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3229   htab->brlt = bfd_make_section_anyway (dynobj, ".branch_lt");
3230   if (htab->brlt == NULL
3231       || ! bfd_set_section_flags (dynobj, htab->brlt, flags)
3232       || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
3233     return FALSE;
3234
3235   if (info->shared)
3236     {
3237       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3238                | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3239       htab->relbrlt = bfd_make_section_anyway (dynobj, ".rela.branch_lt");
3240       if (!htab->relbrlt
3241           || ! bfd_set_section_flags (dynobj, htab->relbrlt, flags)
3242           || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
3243         return FALSE;
3244     }
3245   return TRUE;
3246 }
3247
3248 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3249    not already done.  */
3250
3251 static bfd_boolean
3252 create_got_section (bfd *abfd, struct bfd_link_info *info)
3253 {
3254   asection *got, *relgot;
3255   flagword flags;
3256   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3257
3258   if (!htab->got)
3259     {
3260       if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
3261         return FALSE;
3262
3263       htab->got = bfd_get_section_by_name (htab->elf.dynobj, ".got");
3264       if (!htab->got)
3265         abort ();
3266     }
3267
3268   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3269            | SEC_LINKER_CREATED);
3270
3271   got = bfd_make_section (abfd, ".got");
3272   if (!got
3273       || !bfd_set_section_flags (abfd, got, flags)
3274       || !bfd_set_section_alignment (abfd, got, 3))
3275     return FALSE;
3276
3277   relgot = bfd_make_section (abfd, ".rela.got");
3278   if (!relgot
3279       || ! bfd_set_section_flags (abfd, relgot, flags | SEC_READONLY)
3280       || ! bfd_set_section_alignment (abfd, relgot, 3))
3281     return FALSE;
3282
3283   ppc64_elf_tdata (abfd)->got = got;
3284   ppc64_elf_tdata (abfd)->relgot = relgot;
3285   return TRUE;
3286 }
3287
3288 /* Create the dynamic sections, and set up shortcuts.  */
3289
3290 static bfd_boolean
3291 ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
3292 {
3293   struct ppc_link_hash_table *htab;
3294
3295   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
3296     return FALSE;
3297
3298   htab = ppc_hash_table (info);
3299   if (!htab->got)
3300     htab->got = bfd_get_section_by_name (dynobj, ".got");
3301   htab->plt = bfd_get_section_by_name (dynobj, ".plt");
3302   htab->relplt = bfd_get_section_by_name (dynobj, ".rela.plt");
3303   htab->dynbss = bfd_get_section_by_name (dynobj, ".dynbss");
3304   if (!info->shared)
3305     htab->relbss = bfd_get_section_by_name (dynobj, ".rela.bss");
3306
3307   if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
3308       || (!info->shared && !htab->relbss))
3309     abort ();
3310
3311   return TRUE;
3312 }
3313
3314 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
3315
3316 static void
3317 ppc64_elf_copy_indirect_symbol
3318   (const struct elf_backend_data *bed ATTRIBUTE_UNUSED,
3319    struct elf_link_hash_entry *dir,
3320    struct elf_link_hash_entry *ind)
3321 {
3322   struct ppc_link_hash_entry *edir, *eind;
3323   flagword mask;
3324
3325   edir = (struct ppc_link_hash_entry *) dir;
3326   eind = (struct ppc_link_hash_entry *) ind;
3327
3328   /* Copy over any dynamic relocs we may have on the indirect sym.  */
3329   if (eind->dyn_relocs != NULL)
3330     {
3331       if (edir->dyn_relocs != NULL)
3332         {
3333           struct ppc_dyn_relocs **pp;
3334           struct ppc_dyn_relocs *p;
3335
3336           if (eind->elf.root.type == bfd_link_hash_indirect)
3337             abort ();
3338
3339           /* Add reloc counts against the weak sym to the strong sym
3340              list.  Merge any entries against the same section.  */
3341           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3342             {
3343               struct ppc_dyn_relocs *q;
3344
3345               for (q = edir->dyn_relocs; q != NULL; q = q->next)
3346                 if (q->sec == p->sec)
3347                   {
3348                     q->pc_count += p->pc_count;
3349                     q->count += p->count;
3350                     *pp = p->next;
3351                     break;
3352                   }
3353               if (q == NULL)
3354                 pp = &p->next;
3355             }
3356           *pp = edir->dyn_relocs;
3357         }
3358
3359       edir->dyn_relocs = eind->dyn_relocs;
3360       eind->dyn_relocs = NULL;
3361     }
3362
3363   edir->is_func |= eind->is_func;
3364   edir->is_func_descriptor |= eind->is_func_descriptor;
3365   edir->is_entry |= eind->is_entry;
3366   edir->tls_mask |= eind->tls_mask;
3367
3368   mask = (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR
3369           | ELF_LINK_HASH_REF_REGULAR_NONWEAK | ELF_LINK_NON_GOT_REF
3370           | ELF_LINK_HASH_NEEDS_PLT);
3371   /* If called to transfer flags for a weakdef during processing
3372      of elf_adjust_dynamic_symbol, don't copy ELF_LINK_NON_GOT_REF.
3373      We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
3374   if (ELIMINATE_COPY_RELOCS
3375       && eind->elf.root.type != bfd_link_hash_indirect
3376       && (edir->elf.elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
3377     mask &= ~ELF_LINK_NON_GOT_REF;
3378
3379   edir->elf.elf_link_hash_flags |= eind->elf.elf_link_hash_flags & mask;
3380
3381   /* If we were called to copy over info for a weak sym, that's all.  */
3382   if (eind->elf.root.type != bfd_link_hash_indirect)
3383     return;
3384
3385   /* Copy over got entries that we may have already seen to the
3386      symbol which just became indirect.  */
3387   if (eind->elf.got.glist != NULL)
3388     {
3389       if (edir->elf.got.glist != NULL)
3390         {
3391           struct got_entry **entp;
3392           struct got_entry *ent;
3393
3394           for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3395             {
3396               struct got_entry *dent;
3397
3398               for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3399                 if (dent->addend == ent->addend
3400                     && dent->owner == ent->owner
3401                     && dent->tls_type == ent->tls_type)
3402                   {
3403                     dent->got.refcount += ent->got.refcount;
3404                     *entp = ent->next;
3405                     break;
3406                   }
3407               if (dent == NULL)
3408                 entp = &ent->next;
3409             }
3410           *entp = edir->elf.got.glist;
3411         }
3412
3413       edir->elf.got.glist = eind->elf.got.glist;
3414       eind->elf.got.glist = NULL;
3415     }
3416
3417   /* And plt entries.  */
3418   if (eind->elf.plt.plist != NULL)
3419     {
3420       if (edir->elf.plt.plist != NULL)
3421         {
3422           struct plt_entry **entp;
3423           struct plt_entry *ent;
3424
3425           for (entp = &eind->elf.plt.plist; (ent = *entp) != NULL; )
3426             {
3427               struct plt_entry *dent;
3428
3429               for (dent = edir->elf.plt.plist; dent != NULL; dent = dent->next)
3430                 if (dent->addend == ent->addend)
3431                   {
3432                     dent->plt.refcount += ent->plt.refcount;
3433                     *entp = ent->next;
3434                     break;
3435                   }
3436               if (dent == NULL)
3437                 entp = &ent->next;
3438             }
3439           *entp = edir->elf.plt.plist;
3440         }
3441
3442       edir->elf.plt.plist = eind->elf.plt.plist;
3443       eind->elf.plt.plist = NULL;
3444     }
3445
3446   if (edir->elf.dynindx == -1)
3447     {
3448       edir->elf.dynindx = eind->elf.dynindx;
3449       edir->elf.dynstr_index = eind->elf.dynstr_index;
3450       eind->elf.dynindx = -1;
3451       eind->elf.dynstr_index = 0;
3452     }
3453   else
3454     BFD_ASSERT (eind->elf.dynindx == -1);
3455 }
3456
3457 /* Set a flag, used by ppc64_elf_gc_mark_hook, on the entry symbol and
3458    symbols undefined on the command-line.  */
3459
3460 bfd_boolean
3461 ppc64_elf_mark_entry_syms (struct bfd_link_info *info)
3462 {
3463   struct ppc_link_hash_table *htab;
3464   struct bfd_sym_chain *sym;
3465
3466   htab = ppc_hash_table (info);
3467   for (sym = info->gc_sym_list; sym; sym = sym->next)
3468     {
3469       struct elf_link_hash_entry *h;
3470
3471       h = elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, FALSE);
3472       if (h != NULL)
3473         ((struct ppc_link_hash_entry *) h)->is_entry = 1;
3474     }
3475   return TRUE;
3476 }
3477
3478 /* Hack symbols defined in .opd sections to be function type.  */
3479
3480 static bfd_boolean
3481 ppc64_elf_add_symbol_hook (bfd *ibfd ATTRIBUTE_UNUSED,
3482                            struct bfd_link_info *info ATTRIBUTE_UNUSED,
3483                            Elf_Internal_Sym *isym,
3484                            const char **name ATTRIBUTE_UNUSED,
3485                            flagword *flags ATTRIBUTE_UNUSED,
3486                            asection **sec,
3487                            bfd_vma *value ATTRIBUTE_UNUSED)
3488 {
3489   if (strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0)
3490     isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
3491   return TRUE;
3492 }
3493
3494 static bfd_boolean
3495 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
3496                        unsigned long r_symndx, bfd_vma r_addend, int tls_type)
3497 {
3498   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
3499   char *local_got_tls_masks;
3500
3501   if (local_got_ents == NULL)
3502     {
3503       bfd_size_type size = symtab_hdr->sh_info;
3504
3505       size *= sizeof (*local_got_ents) + sizeof (*local_got_tls_masks);
3506       local_got_ents = bfd_zalloc (abfd, size);
3507       if (local_got_ents == NULL)
3508         return FALSE;
3509       elf_local_got_ents (abfd) = local_got_ents;
3510     }
3511
3512   if ((tls_type & TLS_EXPLICIT) == 0)
3513     {
3514       struct got_entry *ent;
3515
3516       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
3517         if (ent->addend == r_addend
3518             && ent->owner == abfd
3519             && ent->tls_type == tls_type)
3520           break;
3521       if (ent == NULL)
3522         {
3523           bfd_size_type amt = sizeof (*ent);
3524           ent = bfd_alloc (abfd, amt);
3525           if (ent == NULL)
3526             return FALSE;
3527           ent->next = local_got_ents[r_symndx];
3528           ent->addend = r_addend;
3529           ent->owner = abfd;
3530           ent->tls_type = tls_type;
3531           ent->got.refcount = 0;
3532           local_got_ents[r_symndx] = ent;
3533         }
3534       ent->got.refcount += 1;
3535     }
3536
3537   local_got_tls_masks = (char *) (local_got_ents + symtab_hdr->sh_info);
3538   local_got_tls_masks[r_symndx] |= tls_type;
3539   return TRUE;
3540 }
3541
3542 static bfd_boolean
3543 update_plt_info (bfd *abfd, struct ppc_link_hash_entry *eh, bfd_vma addend)
3544 {
3545   struct plt_entry *ent;
3546
3547   for (ent = eh->elf.plt.plist; ent != NULL; ent = ent->next)
3548     if (ent->addend == addend)
3549       break;
3550   if (ent == NULL)
3551     {
3552       bfd_size_type amt = sizeof (*ent);
3553       ent = bfd_alloc (abfd, amt);
3554       if (ent == NULL)
3555         return FALSE;
3556       ent->next = eh->elf.plt.plist;
3557       ent->addend = addend;
3558       ent->plt.refcount = 0;
3559       eh->elf.plt.plist = ent;
3560     }
3561   ent->plt.refcount += 1;
3562   eh->elf.elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
3563   eh->is_func = 1;
3564   return TRUE;
3565 }
3566
3567 /* Find the function descriptor hash entry from the given function code
3568    hash entry FH.  Link the entries via their OH fields.  */
3569 static struct ppc_link_hash_entry *
3570 get_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
3571 {
3572   struct ppc_link_hash_entry *fdh = (struct ppc_link_hash_entry *) fh->oh;
3573
3574   if (fdh == NULL)
3575     {
3576       const char *fd_name = fh->elf.root.root.string + 1;
3577
3578       fdh = (struct ppc_link_hash_entry *)
3579         elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
3580       if (fdh != NULL)
3581         {
3582           fdh->is_func_descriptor = 1;
3583           fdh->oh = &fh->elf;
3584           fh->is_func = 1;
3585           fh->oh = &fdh->elf;
3586         }
3587     }
3588
3589   return fdh;
3590 }
3591
3592 /* Look through the relocs for a section during the first phase, and
3593    calculate needed space in the global offset table, procedure
3594    linkage table, and dynamic reloc sections.  */
3595
3596 static bfd_boolean
3597 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
3598                         asection *sec, const Elf_Internal_Rela *relocs)
3599 {
3600   struct ppc_link_hash_table *htab;
3601   Elf_Internal_Shdr *symtab_hdr;
3602   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
3603   const Elf_Internal_Rela *rel;
3604   const Elf_Internal_Rela *rel_end;
3605   asection *sreloc;
3606   asection **opd_sym_map;
3607
3608   if (info->relocatable)
3609     return TRUE;
3610
3611   /* Don't do anything special with non-loaded, non-alloced sections.
3612      In particular, any relocs in such sections should not affect GOT
3613      and PLT reference counting (ie. we don't allow them to create GOT
3614      or PLT entries), there's no possibility or desire to optimize TLS
3615      relocs, and there's not much point in propagating relocs to shared
3616      libs that the dynamic linker won't relocate.  */
3617   if ((sec->flags & SEC_ALLOC) == 0)
3618     return TRUE;
3619
3620   htab = ppc_hash_table (info);
3621   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3622
3623   sym_hashes = elf_sym_hashes (abfd);
3624   sym_hashes_end = (sym_hashes
3625                     + symtab_hdr->sh_size / sizeof (Elf64_External_Sym)
3626                     - symtab_hdr->sh_info);
3627
3628   sreloc = NULL;
3629   opd_sym_map = NULL;
3630   if (strcmp (bfd_get_section_name (abfd, sec), ".opd") == 0)
3631     {
3632       /* Garbage collection needs some extra help with .opd sections.
3633          We don't want to necessarily keep everything referenced by
3634          relocs in .opd, as that would keep all functions.  Instead,
3635          if we reference an .opd symbol (a function descriptor), we
3636          want to keep the function code symbol's section.  This is
3637          easy for global symbols, but for local syms we need to keep
3638          information about the associated function section.  Later, if
3639          edit_opd deletes entries, we'll use this array to adjust
3640          local syms in .opd.  */
3641       union opd_info {
3642         asection *func_section;
3643         long entry_adjust;
3644       };
3645       bfd_size_type amt;
3646
3647       amt = sec->size * sizeof (union opd_info) / 24;
3648       opd_sym_map = bfd_zalloc (abfd, amt);
3649       if (opd_sym_map == NULL)
3650         return FALSE;
3651       ppc64_elf_section_data (sec)->opd.func_sec = opd_sym_map;
3652     }
3653
3654   if (htab->sfpr == NULL
3655       && !create_linkage_sections (htab->elf.dynobj, info))
3656     return FALSE;
3657
3658   rel_end = relocs + sec->reloc_count;
3659   for (rel = relocs; rel < rel_end; rel++)
3660     {
3661       unsigned long r_symndx;
3662       struct elf_link_hash_entry *h;
3663       enum elf_ppc64_reloc_type r_type;
3664       int tls_type = 0;
3665
3666       r_symndx = ELF64_R_SYM (rel->r_info);
3667       if (r_symndx < symtab_hdr->sh_info)
3668         h = NULL;
3669       else
3670         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
3671
3672       r_type = ELF64_R_TYPE (rel->r_info);
3673       switch (r_type)
3674         {
3675         case R_PPC64_GOT_TLSLD16:
3676         case R_PPC64_GOT_TLSLD16_LO:
3677         case R_PPC64_GOT_TLSLD16_HI:
3678         case R_PPC64_GOT_TLSLD16_HA:
3679           ppc64_tlsld_got (abfd)->refcount += 1;
3680           tls_type = TLS_TLS | TLS_LD;
3681           goto dogottls;
3682
3683         case R_PPC64_GOT_TLSGD16:
3684         case R_PPC64_GOT_TLSGD16_LO:
3685         case R_PPC64_GOT_TLSGD16_HI:
3686         case R_PPC64_GOT_TLSGD16_HA:
3687           tls_type = TLS_TLS | TLS_GD;
3688           goto dogottls;
3689
3690         case R_PPC64_GOT_TPREL16_DS:
3691         case R_PPC64_GOT_TPREL16_LO_DS:
3692         case R_PPC64_GOT_TPREL16_HI:
3693         case R_PPC64_GOT_TPREL16_HA:
3694           if (info->shared)
3695             info->flags |= DF_STATIC_TLS;
3696           tls_type = TLS_TLS | TLS_TPREL;
3697           goto dogottls;
3698
3699         case R_PPC64_GOT_DTPREL16_DS:
3700         case R_PPC64_GOT_DTPREL16_LO_DS:
3701         case R_PPC64_GOT_DTPREL16_HI:
3702         case R_PPC64_GOT_DTPREL16_HA:
3703           tls_type = TLS_TLS | TLS_DTPREL;
3704         dogottls:
3705           sec->has_tls_reloc = 1;
3706           /* Fall thru */
3707
3708         case R_PPC64_GOT16:
3709         case R_PPC64_GOT16_DS:
3710         case R_PPC64_GOT16_HA:
3711         case R_PPC64_GOT16_HI:
3712         case R_PPC64_GOT16_LO:
3713         case R_PPC64_GOT16_LO_DS:
3714           /* This symbol requires a global offset table entry.  */
3715           sec->has_gp_reloc = 1;
3716           if (ppc64_elf_tdata (abfd)->got == NULL
3717               && !create_got_section (abfd, info))
3718             return FALSE;
3719
3720           if (h != NULL)
3721             {
3722               struct ppc_link_hash_entry *eh;
3723               struct got_entry *ent;
3724
3725               eh = (struct ppc_link_hash_entry *) h;
3726               for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
3727                 if (ent->addend == rel->r_addend
3728                     && ent->owner == abfd
3729                     && ent->tls_type == tls_type)
3730                   break;
3731               if (ent == NULL)
3732                 {
3733                   bfd_size_type amt = sizeof (*ent);
3734                   ent = bfd_alloc (abfd, amt);
3735                   if (ent == NULL)
3736                     return FALSE;
3737                   ent->next = eh->elf.got.glist;
3738                   ent->addend = rel->r_addend;
3739                   ent->owner = abfd;
3740                   ent->tls_type = tls_type;
3741                   ent->got.refcount = 0;
3742                   eh->elf.got.glist = ent;
3743                 }
3744               ent->got.refcount += 1;
3745               eh->tls_mask |= tls_type;
3746             }
3747           else
3748             /* This is a global offset table entry for a local symbol.  */
3749             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
3750                                         rel->r_addend, tls_type))
3751               return FALSE;
3752           break;
3753
3754         case R_PPC64_PLT16_HA:
3755         case R_PPC64_PLT16_HI:
3756         case R_PPC64_PLT16_LO:
3757         case R_PPC64_PLT32:
3758         case R_PPC64_PLT64:
3759           /* This symbol requires a procedure linkage table entry.  We
3760              actually build the entry in adjust_dynamic_symbol,
3761              because this might be a case of linking PIC code without
3762              linking in any dynamic objects, in which case we don't
3763              need to generate a procedure linkage table after all.  */
3764           if (h == NULL)
3765             {
3766               /* It does not make sense to have a procedure linkage
3767                  table entry for a local symbol.  */
3768               bfd_set_error (bfd_error_bad_value);
3769               return FALSE;
3770             }
3771           else
3772             if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h,
3773                                   rel->r_addend))
3774               return FALSE;
3775           break;
3776
3777           /* The following relocations don't need to propagate the
3778              relocation if linking a shared object since they are
3779              section relative.  */
3780         case R_PPC64_SECTOFF:
3781         case R_PPC64_SECTOFF_LO:
3782         case R_PPC64_SECTOFF_HI:
3783         case R_PPC64_SECTOFF_HA:
3784         case R_PPC64_SECTOFF_DS:
3785         case R_PPC64_SECTOFF_LO_DS:
3786         case R_PPC64_DTPREL16:
3787         case R_PPC64_DTPREL16_LO:
3788         case R_PPC64_DTPREL16_HI:
3789         case R_PPC64_DTPREL16_HA:
3790         case R_PPC64_DTPREL16_DS:
3791         case R_PPC64_DTPREL16_LO_DS:
3792         case R_PPC64_DTPREL16_HIGHER:
3793         case R_PPC64_DTPREL16_HIGHERA:
3794         case R_PPC64_DTPREL16_HIGHEST:
3795         case R_PPC64_DTPREL16_HIGHESTA:
3796           break;
3797
3798           /* Nor do these.  */
3799         case R_PPC64_TOC16:
3800         case R_PPC64_TOC16_LO:
3801         case R_PPC64_TOC16_HI:
3802         case R_PPC64_TOC16_HA:
3803         case R_PPC64_TOC16_DS:
3804         case R_PPC64_TOC16_LO_DS:
3805           sec->has_gp_reloc = 1;
3806           break;
3807
3808           /* This relocation describes the C++ object vtable hierarchy.
3809              Reconstruct it for later use during GC.  */
3810         case R_PPC64_GNU_VTINHERIT:
3811           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
3812             return FALSE;
3813           break;
3814
3815           /* This relocation describes which C++ vtable entries are actually
3816              used.  Record for later use during GC.  */
3817         case R_PPC64_GNU_VTENTRY:
3818           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
3819             return FALSE;
3820           break;
3821
3822         case R_PPC64_REL14:
3823         case R_PPC64_REL14_BRTAKEN:
3824         case R_PPC64_REL14_BRNTAKEN:
3825           htab->has_14bit_branch = 1;
3826           /* Fall through.  */
3827
3828         case R_PPC64_REL24:
3829           if (h != NULL
3830               && h->root.root.string[0] == '.'
3831               && h->root.root.string[1] != 0)
3832             {
3833               /* We may need a .plt entry if the function this reloc
3834                  refers to is in a shared lib.  */
3835               if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h,
3836                                     rel->r_addend))
3837                 return FALSE;
3838               if (h == htab->tls_get_addr)
3839                 sec->has_tls_reloc = 1;
3840               else if ((strncmp (h->root.root.string, ".__tls_get_addr", 15)
3841                         == 0)
3842                        && (h->root.root.string[15] == 0
3843                            || h->root.root.string[15] == '@'))
3844                 {
3845                   htab->tls_get_addr = h;
3846                   sec->has_tls_reloc = 1;
3847                 }
3848             }
3849           break;
3850
3851         case R_PPC64_TPREL64:
3852           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
3853           if (info->shared)
3854             info->flags |= DF_STATIC_TLS;
3855           goto dotlstoc;
3856
3857         case R_PPC64_DTPMOD64:
3858           if (rel + 1 < rel_end
3859               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
3860               && rel[1].r_offset == rel->r_offset + 8)
3861             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
3862           else
3863             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
3864           goto dotlstoc;
3865
3866         case R_PPC64_DTPREL64:
3867           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
3868           if (rel != relocs
3869               && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
3870               && rel[-1].r_offset == rel->r_offset - 8)
3871             /* This is the second reloc of a dtpmod, dtprel pair.
3872                Don't mark with TLS_DTPREL.  */
3873             goto dodyn;
3874
3875         dotlstoc:
3876           sec->has_tls_reloc = 1;
3877           if (h != NULL)
3878             {
3879               struct ppc_link_hash_entry *eh;
3880               eh = (struct ppc_link_hash_entry *) h;
3881               eh->tls_mask |= tls_type;
3882             }
3883           else
3884             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
3885                                         rel->r_addend, tls_type))
3886               return FALSE;
3887
3888           if (ppc64_elf_section_data (sec)->t_symndx == NULL)
3889             {
3890               /* One extra to simplify get_tls_mask.  */
3891               bfd_size_type amt = sec->size * sizeof (unsigned) / 8 + 1;
3892               ppc64_elf_section_data (sec)->t_symndx = bfd_zalloc (abfd, amt);
3893               if (ppc64_elf_section_data (sec)->t_symndx == NULL)
3894                 return FALSE;
3895             }
3896           BFD_ASSERT (rel->r_offset % 8 == 0);
3897           ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8] = r_symndx;
3898
3899           /* Mark the second slot of a GD or LD entry.
3900              -1 to indicate GD and -2 to indicate LD.  */
3901           if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
3902             ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8 + 1] = -1;
3903           else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
3904             ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8 + 1] = -2;
3905           goto dodyn;
3906
3907         case R_PPC64_TPREL16:
3908         case R_PPC64_TPREL16_LO:
3909         case R_PPC64_TPREL16_HI:
3910         case R_PPC64_TPREL16_HA:
3911         case R_PPC64_TPREL16_DS:
3912         case R_PPC64_TPREL16_LO_DS:
3913         case R_PPC64_TPREL16_HIGHER:
3914         case R_PPC64_TPREL16_HIGHERA:
3915         case R_PPC64_TPREL16_HIGHEST:
3916         case R_PPC64_TPREL16_HIGHESTA:
3917           if (info->shared)
3918             {
3919               info->flags |= DF_STATIC_TLS;
3920               goto dodyn;
3921             }
3922           break;
3923
3924         case R_PPC64_ADDR64:
3925           if (opd_sym_map != NULL
3926               && h != NULL
3927               && h->root.root.string[0] == '.'
3928               && h->root.root.string[1] != 0)
3929             get_fdh ((struct ppc_link_hash_entry *) h, htab);
3930
3931           if (opd_sym_map != NULL
3932               && h == NULL
3933               && rel + 1 < rel_end
3934               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
3935             {
3936               asection *s;
3937
3938               s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, sec,
3939                                              r_symndx);
3940               if (s == NULL)
3941                 return FALSE;
3942               else if (s != sec)
3943                 opd_sym_map[rel->r_offset / 24] = s;
3944             }
3945           /* Fall through.  */
3946
3947         case R_PPC64_REL30:
3948         case R_PPC64_REL32:
3949         case R_PPC64_REL64:
3950         case R_PPC64_ADDR14:
3951         case R_PPC64_ADDR14_BRNTAKEN:
3952         case R_PPC64_ADDR14_BRTAKEN:
3953         case R_PPC64_ADDR16:
3954         case R_PPC64_ADDR16_DS:
3955         case R_PPC64_ADDR16_HA:
3956         case R_PPC64_ADDR16_HI:
3957         case R_PPC64_ADDR16_HIGHER:
3958         case R_PPC64_ADDR16_HIGHERA:
3959         case R_PPC64_ADDR16_HIGHEST:
3960         case R_PPC64_ADDR16_HIGHESTA:
3961         case R_PPC64_ADDR16_LO:
3962         case R_PPC64_ADDR16_LO_DS:
3963         case R_PPC64_ADDR24:
3964         case R_PPC64_ADDR32:
3965         case R_PPC64_UADDR16:
3966         case R_PPC64_UADDR32:
3967         case R_PPC64_UADDR64:
3968         case R_PPC64_TOC:
3969           if (h != NULL && !info->shared)
3970             /* We may need a copy reloc.  */
3971             h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
3972
3973           /* Don't propagate .opd relocs.  */
3974           if (NO_OPD_RELOCS && opd_sym_map != NULL)
3975             break;
3976
3977           /* If we are creating a shared library, and this is a reloc
3978              against a global symbol, or a non PC relative reloc
3979              against a local symbol, then we need to copy the reloc
3980              into the shared library.  However, if we are linking with
3981              -Bsymbolic, we do not need to copy a reloc against a
3982              global symbol which is defined in an object we are
3983              including in the link (i.e., DEF_REGULAR is set).  At
3984              this point we have not seen all the input files, so it is
3985              possible that DEF_REGULAR is not set now but will be set
3986              later (it is never cleared).  In case of a weak definition,
3987              DEF_REGULAR may be cleared later by a strong definition in
3988              a shared library.  We account for that possibility below by
3989              storing information in the dyn_relocs field of the hash
3990              table entry.  A similar situation occurs when creating
3991              shared libraries and symbol visibility changes render the
3992              symbol local.
3993
3994              If on the other hand, we are creating an executable, we
3995              may need to keep relocations for symbols satisfied by a
3996              dynamic library if we manage to avoid copy relocs for the
3997              symbol.  */
3998         dodyn:
3999           if ((info->shared
4000                && (MUST_BE_DYN_RELOC (r_type)
4001                    || (h != NULL
4002                        && (! info->symbolic
4003                            || h->root.type == bfd_link_hash_defweak
4004                            || (h->elf_link_hash_flags
4005                                & ELF_LINK_HASH_DEF_REGULAR) == 0))))
4006               || (ELIMINATE_COPY_RELOCS
4007                   && !info->shared
4008                   && h != NULL
4009                   && (h->root.type == bfd_link_hash_defweak
4010                       || (h->elf_link_hash_flags
4011                           & ELF_LINK_HASH_DEF_REGULAR) == 0)))
4012             {
4013               struct ppc_dyn_relocs *p;
4014               struct ppc_dyn_relocs **head;
4015
4016               /* We must copy these reloc types into the output file.
4017                  Create a reloc section in dynobj and make room for
4018                  this reloc.  */
4019               if (sreloc == NULL)
4020                 {
4021                   const char *name;
4022                   bfd *dynobj;
4023
4024                   name = (bfd_elf_string_from_elf_section
4025                           (abfd,
4026                            elf_elfheader (abfd)->e_shstrndx,
4027                            elf_section_data (sec)->rel_hdr.sh_name));
4028                   if (name == NULL)
4029                     return FALSE;
4030
4031                   if (strncmp (name, ".rela", 5) != 0
4032                       || strcmp (bfd_get_section_name (abfd, sec),
4033                                  name + 5) != 0)
4034                     {
4035                       (*_bfd_error_handler)
4036                         (_("%s: bad relocation section name `%s\'"),
4037                          bfd_archive_filename (abfd), name);
4038                       bfd_set_error (bfd_error_bad_value);
4039                     }
4040
4041                   dynobj = htab->elf.dynobj;
4042                   sreloc = bfd_get_section_by_name (dynobj, name);
4043                   if (sreloc == NULL)
4044                     {
4045                       flagword flags;
4046
4047                       sreloc = bfd_make_section (dynobj, name);
4048                       flags = (SEC_HAS_CONTENTS | SEC_READONLY
4049                                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4050                       if ((sec->flags & SEC_ALLOC) != 0)
4051                         flags |= SEC_ALLOC | SEC_LOAD;
4052                       if (sreloc == NULL
4053                           || ! bfd_set_section_flags (dynobj, sreloc, flags)
4054                           || ! bfd_set_section_alignment (dynobj, sreloc, 3))
4055                         return FALSE;
4056                     }
4057                   elf_section_data (sec)->sreloc = sreloc;
4058                 }
4059
4060               /* If this is a global symbol, we count the number of
4061                  relocations we need for this symbol.  */
4062               if (h != NULL)
4063                 {
4064                   head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
4065                 }
4066               else
4067                 {
4068                   /* Track dynamic relocs needed for local syms too.
4069                      We really need local syms available to do this
4070                      easily.  Oh well.  */
4071
4072                   asection *s;
4073                   s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
4074                                                  sec, r_symndx);
4075                   if (s == NULL)
4076                     return FALSE;
4077
4078                   head = ((struct ppc_dyn_relocs **)
4079                           &elf_section_data (s)->local_dynrel);
4080                 }
4081
4082               p = *head;
4083               if (p == NULL || p->sec != sec)
4084                 {
4085                   p = bfd_alloc (htab->elf.dynobj, sizeof *p);
4086                   if (p == NULL)
4087                     return FALSE;
4088                   p->next = *head;
4089                   *head = p;
4090                   p->sec = sec;
4091                   p->count = 0;
4092                   p->pc_count = 0;
4093                 }
4094
4095               p->count += 1;
4096               if (!MUST_BE_DYN_RELOC (r_type))
4097                 p->pc_count += 1;
4098             }
4099           break;
4100
4101         default:
4102           break;
4103         }
4104     }
4105
4106   return TRUE;
4107 }
4108
4109 /* Return the section that should be marked against GC for a given
4110    relocation.  */
4111
4112 static asection *
4113 ppc64_elf_gc_mark_hook (asection *sec,
4114                         struct bfd_link_info *info ATTRIBUTE_UNUSED,
4115                         Elf_Internal_Rela *rel,
4116                         struct elf_link_hash_entry *h,
4117                         Elf_Internal_Sym *sym)
4118 {
4119   asection *rsec = NULL;
4120
4121   if (h != NULL)
4122     {
4123       enum elf_ppc64_reloc_type r_type;
4124       struct ppc_link_hash_entry *fdh;
4125
4126       r_type = ELF64_R_TYPE (rel->r_info);
4127       switch (r_type)
4128         {
4129         case R_PPC64_GNU_VTINHERIT:
4130         case R_PPC64_GNU_VTENTRY:
4131           break;
4132
4133         default:
4134           switch (h->root.type)
4135             {
4136             case bfd_link_hash_defined:
4137             case bfd_link_hash_defweak:
4138               fdh = (struct ppc_link_hash_entry *) h;
4139
4140               /* Function descriptor syms cause the associated
4141                  function code sym section to be marked.  */
4142               if (fdh->is_func_descriptor)
4143                 rsec = fdh->oh->root.u.def.section;
4144
4145               /* Function entry syms return NULL if they are in .opd
4146                  and are not ._start (or others undefined on the ld
4147                  command line).  Thus we avoid marking all function
4148                  sections, as all functions are referenced in .opd.  */
4149               else if ((fdh->oh != NULL
4150                         && ((struct ppc_link_hash_entry *) fdh->oh)->is_entry)
4151                        || ppc64_elf_section_data (sec)->opd.func_sec == NULL)
4152                 rsec = h->root.u.def.section;
4153               break;
4154
4155             case bfd_link_hash_common:
4156               rsec = h->root.u.c.p->section;
4157               break;
4158
4159             default:
4160               break;
4161             }
4162         }
4163     }
4164   else
4165     {
4166       asection **opd_sym_section;
4167
4168       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
4169       opd_sym_section = ppc64_elf_section_data (rsec)->opd.func_sec;
4170       if (opd_sym_section != NULL)
4171         rsec = opd_sym_section[sym->st_value / 24];
4172       else if (ppc64_elf_section_data (sec)->opd.func_sec != NULL)
4173         rsec = NULL;
4174     }
4175
4176   return rsec;
4177 }
4178
4179 /* Update the .got, .plt. and dynamic reloc reference counts for the
4180    section being removed.  */
4181
4182 static bfd_boolean
4183 ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
4184                          asection *sec, const Elf_Internal_Rela *relocs)
4185 {
4186   struct ppc_link_hash_table *htab;
4187   Elf_Internal_Shdr *symtab_hdr;
4188   struct elf_link_hash_entry **sym_hashes;
4189   struct got_entry **local_got_ents;
4190   const Elf_Internal_Rela *rel, *relend;
4191
4192   if ((sec->flags & SEC_ALLOC) == 0)
4193     return TRUE;
4194
4195   elf_section_data (sec)->local_dynrel = NULL;
4196
4197   htab = ppc_hash_table (info);
4198   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4199   sym_hashes = elf_sym_hashes (abfd);
4200   local_got_ents = elf_local_got_ents (abfd);
4201
4202   relend = relocs + sec->reloc_count;
4203   for (rel = relocs; rel < relend; rel++)
4204     {
4205       unsigned long r_symndx;
4206       enum elf_ppc64_reloc_type r_type;
4207       struct elf_link_hash_entry *h = NULL;
4208       char tls_type = 0;
4209
4210       r_symndx = ELF64_R_SYM (rel->r_info);
4211       r_type = ELF64_R_TYPE (rel->r_info);
4212       if (r_symndx >= symtab_hdr->sh_info)
4213         {
4214           struct ppc_link_hash_entry *eh;
4215           struct ppc_dyn_relocs **pp;
4216           struct ppc_dyn_relocs *p;
4217
4218           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4219           eh = (struct ppc_link_hash_entry *) h;
4220
4221           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
4222             if (p->sec == sec)
4223               {
4224                 /* Everything must go for SEC.  */
4225                 *pp = p->next;
4226                 break;
4227               }
4228         }
4229
4230       switch (r_type)
4231         {
4232         case R_PPC64_GOT_TLSLD16:
4233         case R_PPC64_GOT_TLSLD16_LO:
4234         case R_PPC64_GOT_TLSLD16_HI:
4235         case R_PPC64_GOT_TLSLD16_HA:
4236           ppc64_tlsld_got (abfd)->refcount -= 1;
4237           tls_type = TLS_TLS | TLS_LD;
4238           goto dogot;
4239
4240         case R_PPC64_GOT_TLSGD16:
4241         case R_PPC64_GOT_TLSGD16_LO:
4242         case R_PPC64_GOT_TLSGD16_HI:
4243         case R_PPC64_GOT_TLSGD16_HA:
4244           tls_type = TLS_TLS | TLS_GD;
4245           goto dogot;
4246
4247         case R_PPC64_GOT_TPREL16_DS:
4248         case R_PPC64_GOT_TPREL16_LO_DS:
4249         case R_PPC64_GOT_TPREL16_HI:
4250         case R_PPC64_GOT_TPREL16_HA:
4251           tls_type = TLS_TLS | TLS_TPREL;
4252           goto dogot;
4253
4254         case R_PPC64_GOT_DTPREL16_DS:
4255         case R_PPC64_GOT_DTPREL16_LO_DS:
4256         case R_PPC64_GOT_DTPREL16_HI:
4257         case R_PPC64_GOT_DTPREL16_HA:
4258           tls_type = TLS_TLS | TLS_DTPREL;
4259           goto dogot;
4260
4261         case R_PPC64_GOT16:
4262         case R_PPC64_GOT16_DS:
4263         case R_PPC64_GOT16_HA:
4264         case R_PPC64_GOT16_HI:
4265         case R_PPC64_GOT16_LO:
4266         case R_PPC64_GOT16_LO_DS:
4267         dogot:
4268           {
4269             struct got_entry *ent;
4270
4271             if (h != NULL)
4272               ent = h->got.glist;
4273             else
4274               ent = local_got_ents[r_symndx];
4275
4276             for (; ent != NULL; ent = ent->next)
4277               if (ent->addend == rel->r_addend
4278                   && ent->owner == abfd
4279                   && ent->tls_type == tls_type)
4280                 break;
4281             if (ent == NULL)
4282               abort ();
4283             if (ent->got.refcount > 0)
4284               ent->got.refcount -= 1;
4285           }
4286           break;
4287
4288         case R_PPC64_PLT16_HA:
4289         case R_PPC64_PLT16_HI:
4290         case R_PPC64_PLT16_LO:
4291         case R_PPC64_PLT32:
4292         case R_PPC64_PLT64:
4293         case R_PPC64_REL14:
4294         case R_PPC64_REL14_BRNTAKEN:
4295         case R_PPC64_REL14_BRTAKEN:
4296         case R_PPC64_REL24:
4297           if (h != NULL)
4298             {
4299               struct plt_entry *ent;
4300
4301               for (ent = h->plt.plist; ent != NULL; ent = ent->next)
4302                 if (ent->addend == rel->r_addend)
4303                   break;
4304               if (ent == NULL)
4305                 abort ();
4306               if (ent->plt.refcount > 0)
4307                 ent->plt.refcount -= 1;
4308             }
4309           break;
4310
4311         default:
4312           break;
4313         }
4314     }
4315   return TRUE;
4316 }
4317
4318 /* Called via elf_link_hash_traverse to transfer dynamic linking
4319    information on function code symbol entries to their corresponding
4320    function descriptor symbol entries.  */
4321 static bfd_boolean
4322 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
4323 {
4324   struct bfd_link_info *info;
4325   struct ppc_link_hash_table *htab;
4326   struct plt_entry *ent;
4327   struct ppc_link_hash_entry *fh;
4328   struct ppc_link_hash_entry *fdh;
4329   bfd_boolean force_local;
4330
4331   fh = (struct ppc_link_hash_entry *) h;
4332   if (fh->elf.root.type == bfd_link_hash_indirect)
4333     return TRUE;
4334
4335   if (fh->elf.root.type == bfd_link_hash_warning)
4336     fh = (struct ppc_link_hash_entry *) fh->elf.root.u.i.link;
4337
4338   info = inf;
4339   htab = ppc_hash_table (info);
4340
4341   /* If this is a function code symbol, transfer dynamic linking
4342      information to the function descriptor symbol.  */
4343   if (!fh->is_func)
4344     return TRUE;
4345
4346   if (fh->elf.root.type == bfd_link_hash_undefweak
4347       && (fh->elf.elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR))
4348     htab->have_undefweak = TRUE;
4349
4350   for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
4351     if (ent->plt.refcount > 0)
4352       break;
4353   if (ent == NULL
4354       || fh->elf.root.root.string[0] != '.'
4355       || fh->elf.root.root.string[1] == '\0')
4356     return TRUE;
4357
4358   /* Find the corresponding function descriptor symbol.  Create it
4359      as undefined if necessary.  */
4360
4361   fdh = get_fdh (fh, htab);
4362   if (fdh != NULL)
4363     while (fdh->elf.root.type == bfd_link_hash_indirect
4364            || fdh->elf.root.type == bfd_link_hash_warning)
4365       fdh = (struct ppc_link_hash_entry *) fdh->elf.root.u.i.link;
4366
4367   if (fdh == NULL
4368       && info->shared
4369       && (fh->elf.root.type == bfd_link_hash_undefined
4370           || fh->elf.root.type == bfd_link_hash_undefweak))
4371     {
4372       bfd *abfd;
4373       asymbol *newsym;
4374       struct bfd_link_hash_entry *bh;
4375
4376       abfd = fh->elf.root.u.undef.abfd;
4377       newsym = bfd_make_empty_symbol (abfd);
4378       newsym->name = fh->elf.root.root.string + 1;
4379       newsym->section = bfd_und_section_ptr;
4380       newsym->value = 0;
4381       newsym->flags = BSF_OBJECT;
4382       if (fh->elf.root.type == bfd_link_hash_undefweak)
4383         newsym->flags |= BSF_WEAK;
4384
4385       bh = &fdh->elf.root;
4386       if ( !(_bfd_generic_link_add_one_symbol
4387              (info, abfd, newsym->name, newsym->flags,
4388               newsym->section, newsym->value, NULL, FALSE, FALSE, &bh)))
4389         {
4390           return FALSE;
4391         }
4392       fdh = (struct ppc_link_hash_entry *) bh;
4393       fdh->elf.elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4394       fdh->elf.size = 24;
4395       fdh->elf.type = STT_OBJECT;
4396     }
4397
4398   if (fdh != NULL
4399       && (fdh->elf.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0
4400       && (info->shared
4401           || (fdh->elf.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4402           || (fdh->elf.elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
4403           || (fdh->elf.root.type == bfd_link_hash_undefweak
4404               && ELF_ST_VISIBILITY (fdh->elf.other) == STV_DEFAULT)))
4405     {
4406       if (fdh->elf.dynindx == -1)
4407         if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4408           return FALSE;
4409       fdh->elf.elf_link_hash_flags
4410         |= (fh->elf.elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
4411                                       | ELF_LINK_HASH_REF_DYNAMIC
4412                                       | ELF_LINK_HASH_REF_REGULAR_NONWEAK
4413                                       | ELF_LINK_NON_GOT_REF));
4414       if (ELF_ST_VISIBILITY (fh->elf.other) == STV_DEFAULT)
4415         {
4416           fdh->elf.plt.plist = fh->elf.plt.plist;
4417           fdh->elf.elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
4418         }
4419       fdh->is_func_descriptor = 1;
4420       fdh->oh = &fh->elf;
4421       fh->oh = &fdh->elf;
4422     }
4423
4424   /* Now that the info is on the function descriptor, clear the
4425      function code sym info.  Any function code syms for which we
4426      don't have a definition in a regular file, we force local.
4427      This prevents a shared library from exporting syms that have
4428      been imported from another library.  Function code syms that
4429      are really in the library we must leave global to prevent the
4430      linker dragging in a definition from a static library.  */
4431   force_local
4432     = (info->shared
4433        && ((fh->elf.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
4434            || fdh == NULL
4435            || (fdh->elf.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
4436            || (fdh->elf.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0));
4437   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
4438
4439   return TRUE;
4440 }
4441
4442 #define MIN_SAVE_FPR 14
4443 #define MAX_SAVE_FPR 31
4444
4445 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
4446    this hook to a) provide some gcc support functions, and b) transfer
4447    dynamic linking information gathered so far on function code symbol
4448    entries, to their corresponding function descriptor symbol entries.  */
4449 static bfd_boolean
4450 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
4451                             struct bfd_link_info *info)
4452 {
4453   struct ppc_link_hash_table *htab;
4454   unsigned int lowest_savef = MAX_SAVE_FPR + 2;
4455   unsigned int lowest_restf = MAX_SAVE_FPR + 2;
4456   unsigned int i;
4457   struct elf_link_hash_entry *h;
4458   bfd_byte *p;
4459   char sym[10];
4460
4461   htab = ppc_hash_table (info);
4462
4463   if (htab->sfpr == NULL)
4464     /* We don't have any relocs.  */
4465     return TRUE;
4466
4467   /* First provide any missing ._savef* and ._restf* functions.  */
4468   memcpy (sym, "._savef14", 10);
4469   for (i = MIN_SAVE_FPR; i <= MAX_SAVE_FPR; i++)
4470     {
4471       sym[7] = i / 10 + '0';
4472       sym[8] = i % 10 + '0';
4473       h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
4474       if (h != NULL
4475           && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4476         {
4477           if (lowest_savef > i)
4478             lowest_savef = i;
4479           h->root.type = bfd_link_hash_defined;
4480           h->root.u.def.section = htab->sfpr;
4481           h->root.u.def.value = (i - lowest_savef) * 4;
4482           h->type = STT_FUNC;
4483           h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4484           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
4485         }
4486     }
4487
4488   memcpy (sym, "._restf14", 10);
4489   for (i = MIN_SAVE_FPR; i <= MAX_SAVE_FPR; i++)
4490     {
4491       sym[7] = i / 10 + '0';
4492       sym[8] = i % 10 + '0';
4493       h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
4494       if (h != NULL
4495           && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4496         {
4497           if (lowest_restf > i)
4498             lowest_restf = i;
4499           h->root.type = bfd_link_hash_defined;
4500           h->root.u.def.section = htab->sfpr;
4501           h->root.u.def.value = ((MAX_SAVE_FPR + 2 - lowest_savef) * 4
4502                                  + (i - lowest_restf) * 4);
4503           h->type = STT_FUNC;
4504           h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4505           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
4506         }
4507     }
4508
4509   elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
4510
4511   htab->sfpr->size = ((MAX_SAVE_FPR + 2 - lowest_savef) * 4
4512                       + (MAX_SAVE_FPR + 2 - lowest_restf) * 4);
4513
4514   if (htab->sfpr->size == 0)
4515     {
4516       if (!htab->have_undefweak)
4517         {
4518           _bfd_strip_section_from_output (info, htab->sfpr);
4519           return TRUE;
4520         }
4521
4522       htab->sfpr->size = 4;
4523     }
4524
4525   p = bfd_alloc (htab->elf.dynobj, htab->sfpr->size);
4526   if (p == NULL)
4527     return FALSE;
4528   htab->sfpr->contents = p;
4529
4530   for (i = lowest_savef; i <= MAX_SAVE_FPR; i++)
4531     {
4532       unsigned int fpr = i << 21;
4533       unsigned int stackoff = (1 << 16) - (MAX_SAVE_FPR + 1 - i) * 8;
4534       bfd_put_32 (htab->elf.dynobj, STFD_FR0_0R1 + fpr + stackoff, p);
4535       p += 4;
4536     }
4537   if (lowest_savef <= MAX_SAVE_FPR)
4538     {
4539       bfd_put_32 (htab->elf.dynobj, BLR, p);
4540       p += 4;
4541     }
4542
4543   for (i = lowest_restf; i <= MAX_SAVE_FPR; i++)
4544     {
4545       unsigned int fpr = i << 21;
4546       unsigned int stackoff = (1 << 16) - (MAX_SAVE_FPR + 1 - i) * 8;
4547       bfd_put_32 (htab->elf.dynobj, LFD_FR0_0R1 + fpr + stackoff, p);
4548       p += 4;
4549     }
4550   if (lowest_restf <= MAX_SAVE_FPR
4551       || htab->sfpr->size == 4)
4552     {
4553       bfd_put_32 (htab->elf.dynobj, BLR, p);
4554     }
4555
4556   return TRUE;
4557 }
4558
4559 /* Adjust a symbol defined by a dynamic object and referenced by a
4560    regular object.  The current definition is in some section of the
4561    dynamic object, but we're not including those sections.  We have to
4562    change the definition to something the rest of the link can
4563    understand.  */
4564
4565 static bfd_boolean
4566 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
4567                                  struct elf_link_hash_entry *h)
4568 {
4569   struct ppc_link_hash_table *htab;
4570   asection *s;
4571   unsigned int power_of_two;
4572
4573   htab = ppc_hash_table (info);
4574
4575   /* Deal with function syms.  */
4576   if (h->type == STT_FUNC
4577       || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
4578     {
4579       /* Clear procedure linkage table information for any symbol that
4580          won't need a .plt entry.  */
4581       struct plt_entry *ent;
4582       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
4583         if (ent->plt.refcount > 0)
4584           break;
4585       if (!((struct ppc_link_hash_entry *) h)->is_func_descriptor
4586           || ent == NULL
4587           || SYMBOL_CALLS_LOCAL (info, h)
4588           || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
4589               && h->root.type == bfd_link_hash_undefweak))
4590         {
4591           h->plt.plist = NULL;
4592           h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
4593         }
4594     }
4595   else
4596     h->plt.plist = NULL;
4597
4598   /* If this is a weak symbol, and there is a real definition, the
4599      processor independent code will have arranged for us to see the
4600      real definition first, and we can just use the same value.  */
4601   if (h->weakdef != NULL)
4602     {
4603       BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
4604                   || h->weakdef->root.type == bfd_link_hash_defweak);
4605       h->root.u.def.section = h->weakdef->root.u.def.section;
4606       h->root.u.def.value = h->weakdef->root.u.def.value;
4607       if (ELIMINATE_COPY_RELOCS)
4608         h->elf_link_hash_flags
4609           = ((h->elf_link_hash_flags & ~ELF_LINK_NON_GOT_REF)
4610              | (h->weakdef->elf_link_hash_flags & ELF_LINK_NON_GOT_REF));
4611       return TRUE;
4612     }
4613
4614   /* If we are creating a shared library, we must presume that the
4615      only references to the symbol are via the global offset table.
4616      For such cases we need not do anything here; the relocations will
4617      be handled correctly by relocate_section.  */
4618   if (info->shared)
4619     return TRUE;
4620
4621   /* If there are no references to this symbol that do not use the
4622      GOT, we don't need to generate a copy reloc.  */
4623   if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0)
4624     return TRUE;
4625
4626   if (ELIMINATE_COPY_RELOCS)
4627     {
4628       struct ppc_link_hash_entry * eh;
4629       struct ppc_dyn_relocs *p;
4630
4631       eh = (struct ppc_link_hash_entry *) h;
4632       for (p = eh->dyn_relocs; p != NULL; p = p->next)
4633         {
4634           s = p->sec->output_section;
4635           if (s != NULL && (s->flags & SEC_READONLY) != 0)
4636             break;
4637         }
4638
4639       /* If we didn't find any dynamic relocs in read-only sections, then
4640          we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
4641       if (p == NULL)
4642         {
4643           h->elf_link_hash_flags &= ~ELF_LINK_NON_GOT_REF;
4644           return TRUE;
4645         }
4646     }
4647
4648   if (h->plt.plist != NULL)
4649     {
4650       /* We should never get here, but unfortunately there are versions
4651          of gcc out there that improperly (for this ABI) put initialized
4652          function pointers, vtable refs and suchlike in read-only
4653          sections.  Allow them to proceed, but warn that this might
4654          break at runtime.  */
4655       (*_bfd_error_handler)
4656         (_("copy reloc against `%s' requires lazy plt linking; "
4657            "avoid setting LD_BIND_NOW=1 or upgrade gcc"),
4658          h->root.root.string);
4659     }
4660
4661   /* This is a reference to a symbol defined by a dynamic object which
4662      is not a function.  */
4663
4664   /* We must allocate the symbol in our .dynbss section, which will
4665      become part of the .bss section of the executable.  There will be
4666      an entry for this symbol in the .dynsym section.  The dynamic
4667      object will contain position independent code, so all references
4668      from the dynamic object to this symbol will go through the global
4669      offset table.  The dynamic linker will use the .dynsym entry to
4670      determine the address it must put in the global offset table, so
4671      both the dynamic object and the regular object will refer to the
4672      same memory location for the variable.  */
4673
4674   /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
4675      to copy the initial value out of the dynamic object and into the
4676      runtime process image.  We need to remember the offset into the
4677      .rela.bss section we are going to use.  */
4678   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
4679     {
4680       htab->relbss->size += sizeof (Elf64_External_Rela);
4681       h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_COPY;
4682     }
4683
4684   /* We need to figure out the alignment required for this symbol.  I
4685      have no idea how ELF linkers handle this.  */
4686   power_of_two = bfd_log2 (h->size);
4687   if (power_of_two > 4)
4688     power_of_two = 4;
4689
4690   /* Apply the required alignment.  */
4691   s = htab->dynbss;
4692   s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
4693   if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
4694     {
4695       if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
4696         return FALSE;
4697     }
4698
4699   /* Define the symbol as being at this point in the section.  */
4700   h->root.u.def.section = s;
4701   h->root.u.def.value = s->size;
4702
4703   /* Increment the section size to make room for the symbol.  */
4704   s->size += h->size;
4705
4706   return TRUE;
4707 }
4708
4709 /* If given a function descriptor symbol, hide both the function code
4710    sym and the descriptor.  */
4711 static void
4712 ppc64_elf_hide_symbol (struct bfd_link_info *info,
4713                        struct elf_link_hash_entry *h,
4714                        bfd_boolean force_local)
4715 {
4716   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
4717
4718   if (((struct ppc_link_hash_entry *) h)->is_func_descriptor)
4719     {
4720       struct elf_link_hash_entry *fh = ((struct ppc_link_hash_entry *) h)->oh;
4721
4722       if (fh == NULL)
4723         {
4724           const char *p, *q;
4725           struct ppc_link_hash_table *htab;
4726           char save;
4727
4728           /* We aren't supposed to use alloca in BFD because on
4729              systems which do not have alloca the version in libiberty
4730              calls xmalloc, which might cause the program to crash
4731              when it runs out of memory.  This function doesn't have a
4732              return status, so there's no way to gracefully return an
4733              error.  So cheat.  We know that string[-1] can be safely
4734              dereferenced;  It's either a string in an ELF string
4735              table, or allocated in an objalloc structure.  */
4736
4737           p = h->root.root.string - 1;
4738           save = *p;
4739           *(char *) p = '.';
4740           htab = ppc_hash_table (info);
4741           fh = elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
4742           *(char *) p = save;
4743
4744           /* Unfortunately, if it so happens that the string we were
4745              looking for was allocated immediately before this string,
4746              then we overwrote the string terminator.  That's the only
4747              reason the lookup should fail.  */
4748           if (fh == NULL)
4749             {
4750               q = h->root.root.string + strlen (h->root.root.string);
4751               while (q >= h->root.root.string && *q == *p)
4752                 --q, --p;
4753               if (q < h->root.root.string && *p == '.')
4754                 fh = elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
4755             }
4756           if (fh != NULL)
4757             {
4758               ((struct ppc_link_hash_entry *) h)->oh = fh;
4759               ((struct ppc_link_hash_entry *) fh)->oh = h;
4760             }
4761         }
4762       if (fh != NULL)
4763         _bfd_elf_link_hash_hide_symbol (info, fh, force_local);
4764     }
4765 }
4766
4767 static bfd_boolean
4768 get_sym_h (struct elf_link_hash_entry **hp, Elf_Internal_Sym **symp,
4769            asection **symsecp, char **tls_maskp, Elf_Internal_Sym **locsymsp,
4770            unsigned long r_symndx, bfd *ibfd)
4771 {
4772   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
4773
4774   if (r_symndx >= symtab_hdr->sh_info)
4775     {
4776       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
4777       struct elf_link_hash_entry *h;
4778
4779       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4780       while (h->root.type == bfd_link_hash_indirect
4781              || h->root.type == bfd_link_hash_warning)
4782         h = (struct elf_link_hash_entry *) h->root.u.i.link;
4783
4784       if (hp != NULL)
4785         *hp = h;
4786
4787       if (symp != NULL)
4788         *symp = NULL;
4789
4790       if (symsecp != NULL)
4791         {
4792           asection *symsec = NULL;
4793           if (h->root.type == bfd_link_hash_defined
4794               || h->root.type == bfd_link_hash_defweak)
4795             symsec = h->root.u.def.section;
4796           *symsecp = symsec;
4797         }
4798
4799       if (tls_maskp != NULL)
4800         {
4801           struct ppc_link_hash_entry *eh;
4802
4803           eh = (struct ppc_link_hash_entry *) h;
4804           *tls_maskp = &eh->tls_mask;
4805         }
4806     }
4807   else
4808     {
4809       Elf_Internal_Sym *sym;
4810       Elf_Internal_Sym *locsyms = *locsymsp;
4811
4812       if (locsyms == NULL)
4813         {
4814           locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
4815           if (locsyms == NULL)
4816             locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
4817                                             symtab_hdr->sh_info,
4818                                             0, NULL, NULL, NULL);
4819           if (locsyms == NULL)
4820             return FALSE;
4821           *locsymsp = locsyms;
4822         }
4823       sym = locsyms + r_symndx;
4824
4825       if (hp != NULL)
4826         *hp = NULL;
4827
4828       if (symp != NULL)
4829         *symp = sym;
4830
4831       if (symsecp != NULL)
4832         {
4833           asection *symsec = NULL;
4834           if ((sym->st_shndx != SHN_UNDEF
4835                && sym->st_shndx < SHN_LORESERVE)
4836               || sym->st_shndx > SHN_HIRESERVE)
4837             symsec = bfd_section_from_elf_index (ibfd, sym->st_shndx);
4838           *symsecp = symsec;
4839         }
4840
4841       if (tls_maskp != NULL)
4842         {
4843           struct got_entry **lgot_ents;
4844           char *tls_mask;
4845
4846           tls_mask = NULL;
4847           lgot_ents = elf_local_got_ents (ibfd);
4848           if (lgot_ents != NULL)
4849             {
4850               char *lgot_masks = (char *) (lgot_ents + symtab_hdr->sh_info);
4851               tls_mask = &lgot_masks[r_symndx];
4852             }
4853           *tls_maskp = tls_mask;
4854         }
4855     }
4856   return TRUE;
4857 }
4858
4859 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
4860    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
4861    type suitable for optimization, and 1 otherwise.  */
4862
4863 static int
4864 get_tls_mask (char **tls_maskp, unsigned long *toc_symndx,
4865               Elf_Internal_Sym **locsymsp,
4866               const Elf_Internal_Rela *rel, bfd *ibfd)
4867 {
4868   unsigned long r_symndx;
4869   int next_r;
4870   struct elf_link_hash_entry *h;
4871   Elf_Internal_Sym *sym;
4872   asection *sec;
4873   bfd_vma off;
4874
4875   r_symndx = ELF64_R_SYM (rel->r_info);
4876   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
4877     return 0;
4878
4879   if ((*tls_maskp != NULL && **tls_maskp != 0)
4880       || sec == NULL
4881       || ppc64_elf_section_data (sec)->t_symndx == NULL)
4882     return 1;
4883
4884   /* Look inside a TOC section too.  */
4885   if (h != NULL)
4886     {
4887       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
4888       off = h->root.u.def.value;
4889     }
4890   else
4891     off = sym->st_value;
4892   off += rel->r_addend;
4893   BFD_ASSERT (off % 8 == 0);
4894   r_symndx = ppc64_elf_section_data (sec)->t_symndx[off / 8];
4895   next_r = ppc64_elf_section_data (sec)->t_symndx[off / 8 + 1];
4896   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
4897     return 0;
4898   if (toc_symndx != NULL)
4899     *toc_symndx = r_symndx;
4900   if ((h == NULL
4901        || ((h->root.type == bfd_link_hash_defined
4902             || h->root.type == bfd_link_hash_defweak)
4903            && !(h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)))
4904       && (next_r == -1 || next_r == -2))
4905     return 1 - next_r;
4906   return 1;
4907 }
4908
4909 /* Adjust all global syms defined in opd sections.  In gcc generated
4910    code these will already have been done, but I suppose we have to
4911    cater for all sorts of hand written assembly.  */
4912
4913 static bfd_boolean
4914 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
4915 {
4916   struct ppc_link_hash_entry *eh;
4917   asection *sym_sec;
4918   long *opd_adjust;
4919
4920   if (h->root.type == bfd_link_hash_indirect)
4921     return TRUE;
4922
4923   if (h->root.type == bfd_link_hash_warning)
4924     h = (struct elf_link_hash_entry *) h->root.u.i.link;
4925
4926   if (h->root.type != bfd_link_hash_defined
4927       && h->root.type != bfd_link_hash_defweak)
4928     return TRUE;
4929
4930   eh = (struct ppc_link_hash_entry *) h;
4931   if (eh->adjust_done)
4932     return TRUE;
4933
4934   sym_sec = eh->elf.root.u.def.section;
4935   if (sym_sec != NULL
4936       && elf_section_data (sym_sec) != NULL
4937       && (opd_adjust = ppc64_elf_section_data (sym_sec)->opd.adjust) != NULL)
4938     {
4939       eh->elf.root.u.def.value += opd_adjust[eh->elf.root.u.def.value / 24];
4940       eh->adjust_done = 1;
4941     }
4942   return TRUE;
4943 }
4944
4945 /* Remove unused Official Procedure Descriptor entries.  Currently we
4946    only remove those associated with functions in discarded link-once
4947    sections, or weakly defined functions that have been overridden.  It
4948    would be possible to remove many more entries for statically linked
4949    applications.  */
4950
4951 bfd_boolean
4952 ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info)
4953 {
4954   bfd *ibfd;
4955   bfd_boolean some_edited = FALSE;
4956
4957   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
4958     {
4959       asection *sec;
4960       Elf_Internal_Rela *relstart, *rel, *relend;
4961       Elf_Internal_Shdr *symtab_hdr;
4962       Elf_Internal_Sym *local_syms;
4963       struct elf_link_hash_entry **sym_hashes;
4964       bfd_vma offset;
4965       bfd_size_type amt;
4966       long *adjust;
4967       bfd_boolean need_edit;
4968
4969       sec = bfd_get_section_by_name (ibfd, ".opd");
4970       if (sec == NULL)
4971         continue;
4972
4973       amt = sec->size * sizeof (long) / 24;
4974       adjust = ppc64_elf_section_data (sec)->opd.adjust;
4975       if (adjust == NULL)
4976         {
4977           /* Must be a ld -r link.  ie. check_relocs hasn't been
4978              called.  */
4979           adjust = bfd_zalloc (obfd, amt);
4980           ppc64_elf_section_data (sec)->opd.adjust = adjust;
4981         }
4982       memset (adjust, 0, amt);
4983
4984       if (sec->output_section == bfd_abs_section_ptr)
4985         continue;
4986
4987       /* Look through the section relocs.  */
4988       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
4989         continue;
4990
4991       local_syms = NULL;
4992       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
4993       sym_hashes = elf_sym_hashes (ibfd);
4994
4995       /* Read the relocations.  */
4996       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
4997                                             info->keep_memory);
4998       if (relstart == NULL)
4999         return FALSE;
5000
5001       /* First run through the relocs to check they are sane, and to
5002          determine whether we need to edit this opd section.  */
5003       need_edit = FALSE;
5004       offset = 0;
5005       relend = relstart + sec->reloc_count;
5006       for (rel = relstart; rel < relend; )
5007         {
5008           enum elf_ppc64_reloc_type r_type;
5009           unsigned long r_symndx;
5010           asection *sym_sec;
5011           struct elf_link_hash_entry *h;
5012           Elf_Internal_Sym *sym;
5013
5014           /* .opd contains a regular array of 24 byte entries.  We're
5015              only interested in the reloc pointing to a function entry
5016              point.  */
5017           if (rel->r_offset != offset
5018               || rel + 1 >= relend
5019               || (rel + 1)->r_offset != offset + 8)
5020             {
5021               /* If someone messes with .opd alignment then after a
5022                  "ld -r" we might have padding in the middle of .opd.
5023                  Also, there's nothing to prevent someone putting
5024                  something silly in .opd with the assembler.  No .opd
5025                  optimization for them!  */
5026               (*_bfd_error_handler)
5027                 (_("%s: .opd is not a regular array of opd entries"),
5028                  bfd_archive_filename (ibfd));
5029               need_edit = FALSE;
5030               break;
5031             }
5032
5033           if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
5034               || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
5035             {
5036               (*_bfd_error_handler)
5037                 (_("%s: unexpected reloc type %u in .opd section"),
5038                  bfd_archive_filename (ibfd), r_type);
5039               need_edit = FALSE;
5040               break;
5041             }
5042
5043           r_symndx = ELF64_R_SYM (rel->r_info);
5044           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
5045                           r_symndx, ibfd))
5046             goto error_ret;
5047
5048           if (sym_sec == NULL || sym_sec->owner == NULL)
5049             {
5050               const char *sym_name;
5051               if (h != NULL)
5052                 sym_name = h->root.root.string;
5053               else
5054                 sym_name = bfd_elf_local_sym_name (ibfd, sym);
5055
5056               (*_bfd_error_handler)
5057                 (_("%s: undefined sym `%s' in .opd section"),
5058                  bfd_archive_filename (ibfd),
5059                  sym_name);
5060               need_edit = FALSE;
5061               break;
5062             }
5063
5064           /* opd entries are always for functions defined in the
5065              current input bfd.  If the symbol isn't defined in the
5066              input bfd, then we won't be using the function in this
5067              bfd;  It must be defined in a linkonce section in another
5068              bfd, or is weak.  It's also possible that we are
5069              discarding the function due to a linker script /DISCARD/,
5070              which we test for via the output_section.  */
5071           if (sym_sec->owner != ibfd
5072               || sym_sec->output_section == bfd_abs_section_ptr)
5073             need_edit = TRUE;
5074
5075           offset += 24;
5076           rel += 2;
5077           /* Allow for the possibility of a reloc on the third word.  */
5078           if (rel < relend
5079               && rel->r_offset == offset - 8)
5080             rel += 1;
5081         }
5082
5083       if (need_edit)
5084         {
5085           Elf_Internal_Rela *write_rel;
5086           bfd_byte *rptr, *wptr;
5087           bfd_boolean skip;
5088
5089           /* This seems a waste of time as input .opd sections are all
5090              zeros as generated by gcc, but I suppose there's no reason
5091              this will always be so.  We might start putting something in
5092              the third word of .opd entries.  */
5093           if ((sec->flags & SEC_IN_MEMORY) == 0)
5094             {
5095               bfd_byte *loc;
5096               if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
5097                 {
5098                   if (loc != NULL)
5099                     free (loc);
5100                 error_ret:
5101                   if (local_syms != NULL
5102                       && symtab_hdr->contents != (unsigned char *) local_syms)
5103                     free (local_syms);
5104                   if (elf_section_data (sec)->relocs != relstart)
5105                     free (relstart);
5106                   return FALSE;
5107                 }
5108               sec->contents = loc;
5109               sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
5110             }
5111
5112           elf_section_data (sec)->relocs = relstart;
5113
5114           wptr = sec->contents;
5115           rptr = sec->contents;
5116           write_rel = relstart;
5117           skip = FALSE;
5118           offset = 0;
5119           for (rel = relstart; rel < relend; rel++)
5120             {
5121               unsigned long r_symndx;
5122               asection *sym_sec;
5123               struct elf_link_hash_entry *h;
5124               Elf_Internal_Sym *sym;
5125
5126               r_symndx = ELF64_R_SYM (rel->r_info);
5127               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
5128                               r_symndx, ibfd))
5129                 goto error_ret;
5130
5131               if (rel->r_offset == offset)
5132                 {
5133                   struct ppc_link_hash_entry *fdh = NULL;
5134                   if (h != NULL)
5135                     fdh = get_fdh ((struct ppc_link_hash_entry *) h,
5136                                    ppc_hash_table (info));
5137
5138                   skip = (sym_sec->owner != ibfd
5139                           || sym_sec->output_section == bfd_abs_section_ptr);
5140                   if (skip)
5141                     {
5142                       if (h != NULL && sym_sec->owner == ibfd)
5143                         {
5144                           /* Arrange for the function descriptor sym
5145                              to be dropped.  */
5146                           fdh->elf.root.u.def.value = 0;
5147                           fdh->elf.root.u.def.section = sym_sec;
5148                         }
5149                     }
5150                   else
5151                     {
5152                       /* We'll be keeping this opd entry.  */
5153
5154                       if (h != NULL)
5155                         {
5156                           /* Redefine the function descriptor symbol to
5157                              this location in the opd section.  It is
5158                              necessary to update the value here rather
5159                              than using an array of adjustments as we do
5160                              for local symbols, because various places
5161                              in the generic ELF code use the value
5162                              stored in u.def.value.  */
5163                           fdh->elf.root.u.def.value = wptr - sec->contents;
5164                           fdh->adjust_done = 1;
5165                         }
5166
5167                       /* Local syms are a bit tricky.  We could
5168                          tweak them as they can be cached, but
5169                          we'd need to look through the local syms
5170                          for the function descriptor sym which we
5171                          don't have at the moment.  So keep an
5172                          array of adjustments.  */
5173                       adjust[rel->r_offset / 24] = wptr - rptr;
5174
5175                       if (wptr != rptr)
5176                         memcpy (wptr, rptr, 24);
5177                       wptr += 24;
5178                     }
5179                   rptr += 24;
5180                   offset += 24;
5181                 }
5182
5183               if (skip)
5184                 {
5185                   BFD_ASSERT (MUST_BE_DYN_RELOC (ELF64_R_TYPE (rel->r_info)));
5186                   if (info->shared)
5187                     {
5188                       /* We won't be needing dynamic relocs here.  */
5189                       struct ppc_dyn_relocs **pp;
5190                       struct ppc_dyn_relocs *p;
5191
5192                       if (h != NULL)
5193                         pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5194                       else if (sym_sec != NULL)
5195                         pp = ((struct ppc_dyn_relocs **)
5196                               &elf_section_data (sym_sec)->local_dynrel);
5197                       else
5198                         pp = ((struct ppc_dyn_relocs **)
5199                               &elf_section_data (sec)->local_dynrel);
5200                       while ((p = *pp) != NULL)
5201                         {
5202                           if (p->sec == sec)
5203                             {
5204                               p->count -= 1;
5205                               if (p->count == 0)
5206                                 *pp = p->next;
5207                               break;
5208                             }
5209                           pp = &p->next;
5210                         }
5211                     }
5212                 }
5213               else
5214                 {
5215                   /* We need to adjust any reloc offsets to point to the
5216                      new opd entries.  While we're at it, we may as well
5217                      remove redundant relocs.  */
5218                   rel->r_offset += wptr - rptr;
5219                   if (write_rel != rel)
5220                     memcpy (write_rel, rel, sizeof (*rel));
5221                   ++write_rel;
5222                 }
5223             }
5224
5225           sec->size = wptr - sec->contents;
5226           sec->reloc_count = write_rel - relstart;
5227           /* Fudge the size too, as this is used later in
5228              elf_bfd_final_link if we are emitting relocs.  */
5229           elf_section_data (sec)->rel_hdr.sh_size
5230             = sec->reloc_count * elf_section_data (sec)->rel_hdr.sh_entsize;
5231           BFD_ASSERT (elf_section_data (sec)->rel_hdr2 == NULL);
5232           some_edited = TRUE;
5233         }
5234       else if (elf_section_data (sec)->relocs != relstart)
5235         free (relstart);
5236
5237       if (local_syms != NULL
5238           && symtab_hdr->contents != (unsigned char *) local_syms)
5239         {
5240           if (!info->keep_memory)
5241             free (local_syms);
5242           else
5243             symtab_hdr->contents = (unsigned char *) local_syms;
5244         }
5245     }
5246
5247   if (some_edited)
5248     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
5249
5250   return TRUE;
5251 }
5252
5253 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
5254
5255 asection *
5256 ppc64_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
5257 {
5258   struct ppc_link_hash_table *htab;
5259
5260   htab = ppc_hash_table (info);
5261   if (htab->tls_get_addr != NULL)
5262     {
5263       struct elf_link_hash_entry *h = htab->tls_get_addr;
5264
5265       while (h->root.type == bfd_link_hash_indirect
5266              || h->root.type == bfd_link_hash_warning)
5267         h = (struct elf_link_hash_entry *) h->root.u.i.link;
5268
5269       htab->tls_get_addr = h;
5270     }
5271
5272   return _bfd_elf_tls_setup (obfd, info);
5273 }
5274
5275 /* Run through all the TLS relocs looking for optimization
5276    opportunities.  The linker has been hacked (see ppc64elf.em) to do
5277    a preliminary section layout so that we know the TLS segment
5278    offsets.  We can't optimize earlier because some optimizations need
5279    to know the tp offset, and we need to optimize before allocating
5280    dynamic relocations.  */
5281
5282 bfd_boolean
5283 ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
5284 {
5285   bfd *ibfd;
5286   asection *sec;
5287   struct ppc_link_hash_table *htab;
5288
5289   if (info->relocatable || info->shared)
5290     return TRUE;
5291
5292   htab = ppc_hash_table (info);
5293   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
5294     {
5295       Elf_Internal_Sym *locsyms = NULL;
5296
5297       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
5298         if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
5299           {
5300             Elf_Internal_Rela *relstart, *rel, *relend;
5301             int expecting_tls_get_addr;
5302
5303             /* Read the relocations.  */
5304             relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
5305                                                   info->keep_memory);
5306             if (relstart == NULL)
5307               return FALSE;
5308
5309             expecting_tls_get_addr = 0;
5310             relend = relstart + sec->reloc_count;
5311             for (rel = relstart; rel < relend; rel++)
5312               {
5313                 enum elf_ppc64_reloc_type r_type;
5314                 unsigned long r_symndx;
5315                 struct elf_link_hash_entry *h;
5316                 Elf_Internal_Sym *sym;
5317                 asection *sym_sec;
5318                 char *tls_mask;
5319                 char tls_set, tls_clear, tls_type = 0;
5320                 bfd_vma value;
5321                 bfd_boolean ok_tprel, is_local;
5322
5323                 r_symndx = ELF64_R_SYM (rel->r_info);
5324                 if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
5325                                 r_symndx, ibfd))
5326                   {
5327                   err_free_rel:
5328                     if (elf_section_data (sec)->relocs != relstart)
5329                       free (relstart);
5330                     if (locsyms != NULL
5331                         && (elf_tdata (ibfd)->symtab_hdr.contents
5332                             != (unsigned char *) locsyms))
5333                       free (locsyms);
5334                     return FALSE;
5335                   }
5336
5337                 if (h != NULL)
5338                   {
5339                     if (h->root.type != bfd_link_hash_defined
5340                         && h->root.type != bfd_link_hash_defweak)
5341                       continue;
5342                     value = h->root.u.def.value;
5343                   }
5344                 else
5345                   {
5346                     value = sym->st_value;
5347
5348                     if (elf_section_data (sym_sec) != NULL)
5349                       {
5350                         long *adjust;
5351                         adjust = ppc64_elf_section_data (sym_sec)->opd.adjust;
5352                         if (adjust != NULL)
5353                           value += adjust[value / 24];
5354                       }
5355                   }
5356
5357                 ok_tprel = FALSE;
5358                 is_local = FALSE;
5359                 if (h == NULL
5360                     || !(h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC))
5361                   {
5362                     is_local = TRUE;
5363                     value += sym_sec->output_offset;
5364                     value += sym_sec->output_section->vma;
5365                     value -= htab->elf.tls_sec->vma;
5366                     ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
5367                                 < (bfd_vma) 1 << 32);
5368                   }
5369
5370                 r_type = ELF64_R_TYPE (rel->r_info);
5371                 switch (r_type)
5372                   {
5373                   case R_PPC64_GOT_TLSLD16:
5374                   case R_PPC64_GOT_TLSLD16_LO:
5375                   case R_PPC64_GOT_TLSLD16_HI:
5376                   case R_PPC64_GOT_TLSLD16_HA:
5377                     /* These relocs should never be against a symbol
5378                        defined in a shared lib.  Leave them alone if
5379                        that turns out to be the case.  */
5380                     ppc64_tlsld_got (ibfd)->refcount -= 1;
5381                     if (!is_local)
5382                       continue;
5383
5384                     /* LD -> LE */
5385                     tls_set = 0;
5386                     tls_clear = TLS_LD;
5387                     tls_type = TLS_TLS | TLS_LD;
5388                     expecting_tls_get_addr = 1;
5389                     break;
5390
5391                   case R_PPC64_GOT_TLSGD16:
5392                   case R_PPC64_GOT_TLSGD16_LO:
5393                   case R_PPC64_GOT_TLSGD16_HI:
5394                   case R_PPC64_GOT_TLSGD16_HA:
5395                     if (ok_tprel)
5396                       /* GD -> LE */
5397                       tls_set = 0;
5398                     else
5399                       /* GD -> IE */
5400                       tls_set = TLS_TLS | TLS_TPRELGD;
5401                     tls_clear = TLS_GD;
5402                     tls_type = TLS_TLS | TLS_GD;
5403                     expecting_tls_get_addr = 1;
5404                     break;
5405
5406                   case R_PPC64_GOT_TPREL16_DS:
5407                   case R_PPC64_GOT_TPREL16_LO_DS:
5408                   case R_PPC64_GOT_TPREL16_HI:
5409                   case R_PPC64_GOT_TPREL16_HA:
5410                     expecting_tls_get_addr = 0;
5411                     if (ok_tprel)
5412                       {
5413                         /* IE -> LE */
5414                         tls_set = 0;
5415                         tls_clear = TLS_TPREL;
5416                         tls_type = TLS_TLS | TLS_TPREL;
5417                         break;
5418                       }
5419                     else
5420                       continue;
5421
5422                   case R_PPC64_REL14:
5423                   case R_PPC64_REL14_BRTAKEN:
5424                   case R_PPC64_REL14_BRNTAKEN:
5425                   case R_PPC64_REL24:
5426                     if (h != NULL
5427                         && h == htab->tls_get_addr)
5428                       {
5429                         if (!expecting_tls_get_addr
5430                             && rel != relstart
5431                             && ((ELF64_R_TYPE (rel[-1].r_info)
5432                                  == R_PPC64_TOC16)
5433                                 || (ELF64_R_TYPE (rel[-1].r_info)
5434                                     == R_PPC64_TOC16_LO)))
5435                           {
5436                             /* Check for toc tls entries.  */
5437                             char *toc_tls;
5438                             int retval;
5439
5440                             retval = get_tls_mask (&toc_tls, NULL, &locsyms,
5441                                                    rel - 1, ibfd);
5442                             if (retval == 0)
5443                               goto err_free_rel;
5444                             if (toc_tls != NULL)
5445                               expecting_tls_get_addr = retval > 1;
5446                           }
5447
5448                         if (expecting_tls_get_addr)
5449                           {
5450                             struct plt_entry *ent;
5451                             for (ent = h->plt.plist; ent; ent = ent->next)
5452                               if (ent->addend == 0)
5453                                 {
5454                                   if (ent->plt.refcount > 0)
5455                                     ent->plt.refcount -= 1;
5456                                   break;
5457                                 }
5458                           }
5459                       }
5460                     expecting_tls_get_addr = 0;
5461                     continue;
5462
5463                   case R_PPC64_TPREL64:
5464                     expecting_tls_get_addr = 0;
5465                     if (ok_tprel)
5466                       {
5467                         /* IE -> LE */
5468                         tls_set = TLS_EXPLICIT;
5469                         tls_clear = TLS_TPREL;
5470                         break;
5471                       }
5472                     else
5473                       continue;
5474
5475                   case R_PPC64_DTPMOD64:
5476                     expecting_tls_get_addr = 0;
5477                     if (rel + 1 < relend
5478                         && (rel[1].r_info
5479                             == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
5480                         && rel[1].r_offset == rel->r_offset + 8)
5481                       {
5482                         if (ok_tprel)
5483                           /* GD -> LE */
5484                           tls_set = TLS_EXPLICIT | TLS_GD;
5485                         else
5486                           /* GD -> IE */
5487                           tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
5488                         tls_clear = TLS_GD;
5489                       }
5490                     else
5491                       {
5492                         if (!is_local)
5493                           continue;
5494
5495                         /* LD -> LE */
5496                         tls_set = TLS_EXPLICIT;
5497                         tls_clear = TLS_LD;
5498                       }
5499                     break;
5500
5501                   default:
5502                     expecting_tls_get_addr = 0;
5503                     continue;
5504                   }
5505
5506                 if ((tls_set & TLS_EXPLICIT) == 0)
5507                   {
5508                     struct got_entry *ent;
5509
5510                     /* Adjust got entry for this reloc.  */
5511                     if (h != NULL)
5512                       ent = h->got.glist;
5513                     else
5514                       ent = elf_local_got_ents (ibfd)[r_symndx];
5515
5516                     for (; ent != NULL; ent = ent->next)
5517                       if (ent->addend == rel->r_addend
5518                           && ent->owner == ibfd
5519                           && ent->tls_type == tls_type)
5520                         break;
5521                     if (ent == NULL)
5522                       abort ();
5523
5524                     if (tls_set == 0)
5525                       {
5526                         /* We managed to get rid of a got entry.  */
5527                         if (ent->got.refcount > 0)
5528                           ent->got.refcount -= 1;
5529                       }
5530                   }
5531                 else if (h != NULL)
5532                   {
5533                     struct ppc_link_hash_entry * eh;
5534                     struct ppc_dyn_relocs **pp;
5535                     struct ppc_dyn_relocs *p;
5536
5537                     /* Adjust dynamic relocs.  */
5538                     eh = (struct ppc_link_hash_entry *) h;
5539                     for (pp = &eh->dyn_relocs;
5540                          (p = *pp) != NULL;
5541                          pp = &p->next)
5542                       if (p->sec == sec)
5543                         {
5544                           /* If we got rid of a DTPMOD/DTPREL reloc
5545                              pair then we'll lose one or two dyn
5546                              relocs.  */
5547                           if (tls_set == (TLS_EXPLICIT | TLS_GD))
5548                             p->count -= 1;
5549                           p->count -= 1;
5550                           if (p->count == 0)
5551                             *pp = p->next;
5552                           break;
5553                         }
5554                   }
5555
5556                 *tls_mask |= tls_set;
5557                 *tls_mask &= ~tls_clear;
5558               }
5559
5560             if (elf_section_data (sec)->relocs != relstart)
5561               free (relstart);
5562           }
5563
5564       if (locsyms != NULL
5565           && (elf_tdata (ibfd)->symtab_hdr.contents
5566               != (unsigned char *) locsyms))
5567         {
5568           if (!info->keep_memory)
5569             free (locsyms);
5570           else
5571             elf_tdata (ibfd)->symtab_hdr.contents = (unsigned char *) locsyms;
5572         }
5573     }
5574   return TRUE;
5575 }
5576
5577 /* Allocate space in .plt, .got and associated reloc sections for
5578    dynamic relocs.  */
5579
5580 static bfd_boolean
5581 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
5582 {
5583   struct bfd_link_info *info;
5584   struct ppc_link_hash_table *htab;
5585   asection *s;
5586   struct ppc_link_hash_entry *eh;
5587   struct ppc_dyn_relocs *p;
5588   struct got_entry *gent;
5589
5590   if (h->root.type == bfd_link_hash_indirect)
5591     return TRUE;
5592
5593   if (h->root.type == bfd_link_hash_warning)
5594     h = (struct elf_link_hash_entry *) h->root.u.i.link;
5595
5596   info = (struct bfd_link_info *) inf;
5597   htab = ppc_hash_table (info);
5598
5599   if (htab->elf.dynamic_sections_created
5600       && h->dynindx != -1
5601       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
5602     {
5603       struct plt_entry *pent;
5604       bfd_boolean doneone = FALSE;
5605       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
5606         if (pent->plt.refcount > 0)
5607           {
5608             BFD_ASSERT (((struct ppc_link_hash_entry *) h)->is_func_descriptor);
5609
5610             /* If this is the first .plt entry, make room for the special
5611                first entry.  */
5612             s = htab->plt;
5613             if (s->size == 0)
5614               s->size += PLT_INITIAL_ENTRY_SIZE;
5615
5616             pent->plt.offset = s->size;
5617
5618             /* Make room for this entry.  */
5619             s->size += PLT_ENTRY_SIZE;
5620
5621             /* Make room for the .glink code.  */
5622             s = htab->glink;
5623             if (s->size == 0)
5624               s->size += GLINK_CALL_STUB_SIZE;
5625             /* We need bigger stubs past index 32767.  */
5626             if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
5627               s->size += 4;
5628             s->size += 2*4;
5629
5630             /* We also need to make an entry in the .rela.plt section.  */
5631             s = htab->relplt;
5632             s->size += sizeof (Elf64_External_Rela);
5633             doneone = TRUE;
5634           }
5635         else
5636           pent->plt.offset = (bfd_vma) -1;
5637       if (!doneone)
5638         {
5639           h->plt.plist = NULL;
5640           h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
5641         }
5642     }
5643   else
5644     {
5645       h->plt.plist = NULL;
5646       h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
5647     }
5648
5649   eh = (struct ppc_link_hash_entry *) h;
5650   /* Run through the TLS GD got entries first if we're changing them
5651      to TPREL.  */
5652   if ((eh->tls_mask & TLS_TPRELGD) != 0)
5653     for (gent = h->got.glist; gent != NULL; gent = gent->next)
5654       if (gent->got.refcount > 0
5655           && (gent->tls_type & TLS_GD) != 0)
5656         {
5657           /* This was a GD entry that has been converted to TPREL.  If
5658              there happens to be a TPREL entry we can use that one.  */
5659           struct got_entry *ent;
5660           for (ent = h->got.glist; ent != NULL; ent = ent->next)
5661             if (ent->got.refcount > 0
5662                 && (ent->tls_type & TLS_TPREL) != 0
5663                 && ent->addend == gent->addend
5664                 && ent->owner == gent->owner)
5665               {
5666                 gent->got.refcount = 0;
5667                 break;
5668               }
5669
5670           /* If not, then we'll be using our own TPREL entry.  */
5671           if (gent->got.refcount != 0)
5672             gent->tls_type = TLS_TLS | TLS_TPREL;
5673         }
5674
5675   for (gent = h->got.glist; gent != NULL; gent = gent->next)
5676     if (gent->got.refcount > 0)
5677       {
5678         bfd_boolean dyn;
5679
5680         /* Make sure this symbol is output as a dynamic symbol.
5681            Undefined weak syms won't yet be marked as dynamic,
5682            nor will all TLS symbols.  */
5683         if (h->dynindx == -1
5684             && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
5685           {
5686             if (! bfd_elf_link_record_dynamic_symbol (info, h))
5687               return FALSE;
5688           }
5689
5690         if ((gent->tls_type & TLS_LD) != 0
5691             && !(h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC))
5692           {
5693             gent->got.offset = ppc64_tlsld_got (gent->owner)->offset;
5694             continue;
5695           }
5696
5697         s = ppc64_elf_tdata (gent->owner)->got;
5698         gent->got.offset = s->size;
5699         s->size
5700           += (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)) ? 16 : 8;
5701         dyn = htab->elf.dynamic_sections_created;
5702         if ((info->shared
5703              || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
5704             && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
5705                 || h->root.type != bfd_link_hash_undefweak))
5706           ppc64_elf_tdata (gent->owner)->relgot->size
5707             += (gent->tls_type & eh->tls_mask & TLS_GD
5708                 ? 2 * sizeof (Elf64_External_Rela)
5709                 : sizeof (Elf64_External_Rela));
5710       }
5711     else
5712       gent->got.offset = (bfd_vma) -1;
5713
5714   if (eh->dyn_relocs == NULL)
5715     return TRUE;
5716
5717   /* In the shared -Bsymbolic case, discard space allocated for
5718      dynamic pc-relative relocs against symbols which turn out to be
5719      defined in regular objects.  For the normal shared case, discard
5720      space for relocs that have become local due to symbol visibility
5721      changes.  */
5722
5723   if (info->shared)
5724     {
5725       /* Relocs that use pc_count are those that appear on a call insn,
5726          or certain REL relocs (see MUST_BE_DYN_RELOC) that can be
5727          generated via assembly.  We want calls to protected symbols to
5728          resolve directly to the function rather than going via the plt.
5729          If people want function pointer comparisons to work as expected
5730          then they should avoid writing weird assembly.  */
5731       if (SYMBOL_CALLS_LOCAL (info, h))
5732         {
5733           struct ppc_dyn_relocs **pp;
5734
5735           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
5736             {
5737               p->count -= p->pc_count;
5738               p->pc_count = 0;
5739               if (p->count == 0)
5740                 *pp = p->next;
5741               else
5742                 pp = &p->next;
5743             }
5744         }
5745
5746       /* Also discard relocs on undefined weak syms with non-default
5747          visibility.  */
5748       if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
5749           && h->root.type == bfd_link_hash_undefweak)
5750         eh->dyn_relocs = NULL;
5751     }
5752   else if (ELIMINATE_COPY_RELOCS)
5753     {
5754       /* For the non-shared case, discard space for relocs against
5755          symbols which turn out to need copy relocs or are not
5756          dynamic.  */
5757
5758       if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
5759           && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5760           && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
5761         {
5762           /* Make sure this symbol is output as a dynamic symbol.
5763              Undefined weak syms won't yet be marked as dynamic.  */
5764           if (h->dynindx == -1
5765               && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
5766             {
5767               if (! bfd_elf_link_record_dynamic_symbol (info, h))
5768                 return FALSE;
5769             }
5770
5771           /* If that succeeded, we know we'll be keeping all the
5772              relocs.  */
5773           if (h->dynindx != -1)
5774             goto keep;
5775         }
5776
5777       eh->dyn_relocs = NULL;
5778
5779     keep: ;
5780     }
5781
5782   /* Finally, allocate space.  */
5783   for (p = eh->dyn_relocs; p != NULL; p = p->next)
5784     {
5785       asection *sreloc = elf_section_data (p->sec)->sreloc;
5786       sreloc->size += p->count * sizeof (Elf64_External_Rela);
5787     }
5788
5789   return TRUE;
5790 }
5791
5792 /* Find any dynamic relocs that apply to read-only sections.  */
5793
5794 static bfd_boolean
5795 readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
5796 {
5797   struct ppc_link_hash_entry *eh;
5798   struct ppc_dyn_relocs *p;
5799
5800   if (h->root.type == bfd_link_hash_warning)
5801     h = (struct elf_link_hash_entry *) h->root.u.i.link;
5802
5803   eh = (struct ppc_link_hash_entry *) h;
5804   for (p = eh->dyn_relocs; p != NULL; p = p->next)
5805     {
5806       asection *s = p->sec->output_section;
5807
5808       if (s != NULL && (s->flags & SEC_READONLY) != 0)
5809         {
5810           struct bfd_link_info *info = inf;
5811
5812           info->flags |= DF_TEXTREL;
5813
5814           /* Not an error, just cut short the traversal.  */
5815           return FALSE;
5816         }
5817     }
5818   return TRUE;
5819 }
5820
5821 /* Set the sizes of the dynamic sections.  */
5822
5823 static bfd_boolean
5824 ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
5825                                  struct bfd_link_info *info)
5826 {
5827   struct ppc_link_hash_table *htab;
5828   bfd *dynobj;
5829   asection *s;
5830   bfd_boolean relocs;
5831   bfd *ibfd;
5832
5833   htab = ppc_hash_table (info);
5834   dynobj = htab->elf.dynobj;
5835   if (dynobj == NULL)
5836     abort ();
5837
5838   if (htab->elf.dynamic_sections_created)
5839     {
5840       /* Set the contents of the .interp section to the interpreter.  */
5841       if (info->executable)
5842         {
5843           s = bfd_get_section_by_name (dynobj, ".interp");
5844           if (s == NULL)
5845             abort ();
5846           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
5847           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
5848         }
5849     }
5850
5851   /* Set up .got offsets for local syms, and space for local dynamic
5852      relocs.  */
5853   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
5854     {
5855       struct got_entry **lgot_ents;
5856       struct got_entry **end_lgot_ents;
5857       char *lgot_masks;
5858       bfd_size_type locsymcount;
5859       Elf_Internal_Shdr *symtab_hdr;
5860       asection *srel;
5861
5862       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
5863         continue;
5864
5865       if (ppc64_tlsld_got (ibfd)->refcount > 0)
5866         {
5867           s = ppc64_elf_tdata (ibfd)->got;
5868           ppc64_tlsld_got (ibfd)->offset = s->size;
5869           s->size += 16;
5870           if (info->shared)
5871             {
5872               srel = ppc64_elf_tdata (ibfd)->relgot;
5873               srel->size += sizeof (Elf64_External_Rela);
5874             }
5875         }
5876       else
5877         ppc64_tlsld_got (ibfd)->offset = (bfd_vma) -1;
5878
5879       for (s = ibfd->sections; s != NULL; s = s->next)
5880         {
5881           struct ppc_dyn_relocs *p;
5882
5883           for (p = *((struct ppc_dyn_relocs **)
5884                      &elf_section_data (s)->local_dynrel);
5885                p != NULL;
5886                p = p->next)
5887             {
5888               if (!bfd_is_abs_section (p->sec)
5889                   && bfd_is_abs_section (p->sec->output_section))
5890                 {
5891                   /* Input section has been discarded, either because
5892                      it is a copy of a linkonce section or due to
5893                      linker script /DISCARD/, so we'll be discarding
5894                      the relocs too.  */
5895                 }
5896               else if (p->count != 0)
5897                 {
5898                   srel = elf_section_data (p->sec)->sreloc;
5899                   srel->size += p->count * sizeof (Elf64_External_Rela);
5900                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
5901                     info->flags |= DF_TEXTREL;
5902                 }
5903             }
5904         }
5905
5906       lgot_ents = elf_local_got_ents (ibfd);
5907       if (!lgot_ents)
5908         continue;
5909
5910       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
5911       locsymcount = symtab_hdr->sh_info;
5912       end_lgot_ents = lgot_ents + locsymcount;
5913       lgot_masks = (char *) end_lgot_ents;
5914       s = ppc64_elf_tdata (ibfd)->got;
5915       srel = ppc64_elf_tdata (ibfd)->relgot;
5916       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
5917         {
5918           struct got_entry *ent;
5919
5920           for (ent = *lgot_ents; ent != NULL; ent = ent->next)
5921             if (ent->got.refcount > 0)
5922               {
5923                 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
5924                   {
5925                     if (ppc64_tlsld_got (ibfd)->offset == (bfd_vma) -1)
5926                       {
5927                         ppc64_tlsld_got (ibfd)->offset = s->size;
5928                         s->size += 16;
5929                         if (info->shared)
5930                           srel->size += sizeof (Elf64_External_Rela);
5931                       }
5932                     ent->got.offset = ppc64_tlsld_got (ibfd)->offset;
5933                   }
5934                 else
5935                   {
5936                     ent->got.offset = s->size;
5937                     if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
5938                       {
5939                         s->size += 16;
5940                         if (info->shared)
5941                           srel->size += 2 * sizeof (Elf64_External_Rela);
5942                       }
5943                     else
5944                       {
5945                         s->size += 8;
5946                         if (info->shared)
5947                           srel->size += sizeof (Elf64_External_Rela);
5948                       }
5949                   }
5950               }
5951             else
5952               ent->got.offset = (bfd_vma) -1;
5953         }
5954     }
5955
5956   /* Allocate global sym .plt and .got entries, and space for global
5957      sym dynamic relocs.  */
5958   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
5959
5960   /* We now have determined the sizes of the various dynamic sections.
5961      Allocate memory for them.  */
5962   relocs = FALSE;
5963   for (s = dynobj->sections; s != NULL; s = s->next)
5964     {
5965       if ((s->flags & SEC_LINKER_CREATED) == 0)
5966         continue;
5967
5968       if (s == htab->brlt || s == htab->relbrlt)
5969         /* These haven't been allocated yet;  don't strip.  */
5970         continue;
5971       else if (s == htab->got
5972                || s == htab->plt
5973                || s == htab->glink)
5974         {
5975           /* Strip this section if we don't need it; see the
5976              comment below.  */
5977         }
5978       else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
5979         {
5980           if (s->size == 0)
5981             {
5982               /* If we don't need this section, strip it from the
5983                  output file.  This is mostly to handle .rela.bss and
5984                  .rela.plt.  We must create both sections in
5985                  create_dynamic_sections, because they must be created
5986                  before the linker maps input sections to output
5987                  sections.  The linker does that before
5988                  adjust_dynamic_symbol is called, and it is that
5989                  function which decides whether anything needs to go
5990                  into these sections.  */
5991             }
5992           else
5993             {
5994               if (s != htab->relplt)
5995                 relocs = TRUE;
5996
5997               /* We use the reloc_count field as a counter if we need
5998                  to copy relocs into the output file.  */
5999               s->reloc_count = 0;
6000             }
6001         }
6002       else
6003         {
6004           /* It's not one of our sections, so don't allocate space.  */
6005           continue;
6006         }
6007
6008       if (s->size == 0)
6009         {
6010           _bfd_strip_section_from_output (info, s);
6011           continue;
6012         }
6013
6014       /* .plt is in the bss section.  We don't initialise it.  */
6015       if (s == htab->plt)
6016         continue;
6017
6018       /* Allocate memory for the section contents.  We use bfd_zalloc
6019          here in case unused entries are not reclaimed before the
6020          section's contents are written out.  This should not happen,
6021          but this way if it does we get a R_PPC64_NONE reloc in .rela
6022          sections instead of garbage.
6023          We also rely on the section contents being zero when writing
6024          the GOT.  */
6025       s->contents = bfd_zalloc (dynobj, s->size);
6026       if (s->contents == NULL)
6027         return FALSE;
6028     }
6029
6030   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
6031     {
6032       s = ppc64_elf_tdata (ibfd)->got;
6033       if (s != NULL && s != htab->got)
6034         {
6035           if (s->size == 0)
6036             _bfd_strip_section_from_output (info, s);
6037           else
6038             {
6039               s->contents = bfd_zalloc (ibfd, s->size);
6040               if (s->contents == NULL)
6041                 return FALSE;
6042             }
6043         }
6044       s = ppc64_elf_tdata (ibfd)->relgot;
6045       if (s != NULL)
6046         {
6047           if (s->size == 0)
6048             _bfd_strip_section_from_output (info, s);
6049           else
6050             {
6051               s->contents = bfd_zalloc (ibfd, s->size);
6052               if (s->contents == NULL)
6053                 return FALSE;
6054               relocs = TRUE;
6055               s->reloc_count = 0;
6056             }
6057         }
6058     }
6059
6060   if (htab->elf.dynamic_sections_created)
6061     {
6062       /* Add some entries to the .dynamic section.  We fill in the
6063          values later, in ppc64_elf_finish_dynamic_sections, but we
6064          must add the entries now so that we get the correct size for
6065          the .dynamic section.  The DT_DEBUG entry is filled in by the
6066          dynamic linker and used by the debugger.  */
6067 #define add_dynamic_entry(TAG, VAL) \
6068   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
6069
6070       if (info->executable)
6071         {
6072           if (!add_dynamic_entry (DT_DEBUG, 0))
6073             return FALSE;
6074         }
6075
6076       if (htab->plt != NULL && htab->plt->size != 0)
6077         {
6078           if (!add_dynamic_entry (DT_PLTGOT, 0)
6079               || !add_dynamic_entry (DT_PLTRELSZ, 0)
6080               || !add_dynamic_entry (DT_PLTREL, DT_RELA)
6081               || !add_dynamic_entry (DT_JMPREL, 0)
6082               || !add_dynamic_entry (DT_PPC64_GLINK, 0))
6083             return FALSE;
6084         }
6085
6086       if (NO_OPD_RELOCS)
6087         {
6088           if (!add_dynamic_entry (DT_PPC64_OPD, 0)
6089               || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
6090             return FALSE;
6091         }
6092
6093       if (relocs)
6094         {
6095           if (!add_dynamic_entry (DT_RELA, 0)
6096               || !add_dynamic_entry (DT_RELASZ, 0)
6097               || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
6098             return FALSE;
6099
6100           /* If any dynamic relocs apply to a read-only section,
6101              then we need a DT_TEXTREL entry.  */
6102           if ((info->flags & DF_TEXTREL) == 0)
6103             elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
6104
6105           if ((info->flags & DF_TEXTREL) != 0)
6106             {
6107               if (!add_dynamic_entry (DT_TEXTREL, 0))
6108                 return FALSE;
6109             }
6110         }
6111     }
6112 #undef add_dynamic_entry
6113
6114   return TRUE;
6115 }
6116
6117 /* Determine the type of stub needed, if any, for a call.  */
6118
6119 static inline enum ppc_stub_type
6120 ppc_type_of_stub (asection *input_sec,
6121                   const Elf_Internal_Rela *rel,
6122                   struct ppc_link_hash_entry **hash,
6123                   bfd_vma destination)
6124 {
6125   struct ppc_link_hash_entry *h = *hash;
6126   bfd_vma location;
6127   bfd_vma branch_offset;
6128   bfd_vma max_branch_offset;
6129   enum elf_ppc64_reloc_type r_type;
6130
6131   if (h != NULL)
6132     {
6133       if (h->oh != NULL
6134           && h->oh->dynindx != -1)
6135         {
6136           struct plt_entry *ent;
6137           for (ent = h->oh->plt.plist; ent != NULL; ent = ent->next)
6138             if (ent->addend == rel->r_addend
6139                 && ent->plt.offset != (bfd_vma) -1)
6140               {
6141                 *hash = (struct ppc_link_hash_entry *) h->oh;
6142                 return ppc_stub_plt_call;
6143               }
6144         }
6145
6146       if (!(h->elf.root.type == bfd_link_hash_defined
6147             || h->elf.root.type == bfd_link_hash_defweak)
6148           || h->elf.root.u.def.section->output_section == NULL)
6149         return ppc_stub_none;
6150     }
6151
6152   /* Determine where the call point is.  */
6153   location = (input_sec->output_offset
6154               + input_sec->output_section->vma
6155               + rel->r_offset);
6156
6157   branch_offset = destination - location;
6158   r_type = ELF64_R_TYPE (rel->r_info);
6159
6160   /* Determine if a long branch stub is needed.  */
6161   max_branch_offset = 1 << 25;
6162   if (r_type != R_PPC64_REL24)
6163     max_branch_offset = 1 << 15;
6164
6165   if (branch_offset + max_branch_offset >= 2 * max_branch_offset)
6166     /* We need a stub.  Figure out whether a long_branch or plt_branch
6167        is needed later.  */
6168     return ppc_stub_long_branch;
6169
6170   return ppc_stub_none;
6171 }
6172
6173 /* Build a .plt call stub.  */
6174
6175 static inline bfd_byte *
6176 build_plt_stub (bfd *obfd, bfd_byte *p, int offset)
6177 {
6178 #define PPC_LO(v) ((v) & 0xffff)
6179 #define PPC_HI(v) (((v) >> 16) & 0xffff)
6180 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
6181
6182   bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4;
6183   bfd_put_32 (obfd, STD_R2_40R1, p),                    p += 4;
6184   bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),  p += 4;
6185   if (PPC_HA (offset + 8) != PPC_HA (offset))
6186     bfd_put_32 (obfd, ADDIS_R12_R12 | 1, p),            p += 4;
6187   offset += 8;
6188   bfd_put_32 (obfd, LD_R2_0R12 | PPC_LO (offset), p),   p += 4;
6189   if (PPC_HA (offset + 8) != PPC_HA (offset))
6190     bfd_put_32 (obfd, ADDIS_R12_R12 | 1, p),            p += 4;
6191   offset += 8;
6192   bfd_put_32 (obfd, MTCTR_R11, p),                      p += 4;
6193   bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),  p += 4;
6194   bfd_put_32 (obfd, BCTR, p),                           p += 4;
6195   return p;
6196 }
6197
6198 static bfd_boolean
6199 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
6200 {
6201   struct ppc_stub_hash_entry *stub_entry;
6202   struct ppc_branch_hash_entry *br_entry;
6203   struct bfd_link_info *info;
6204   struct ppc_link_hash_table *htab;
6205   bfd_byte *loc;
6206   bfd_byte *p;
6207   unsigned int indx;
6208   struct plt_entry *ent;
6209   bfd_vma off;
6210   int size;
6211
6212   /* Massage our args to the form they really have.  */
6213   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
6214   info = in_arg;
6215
6216   htab = ppc_hash_table (info);
6217
6218   /* Make a note of the offset within the stubs for this entry.  */
6219   stub_entry->stub_offset = stub_entry->stub_sec->size;
6220   loc = stub_entry->stub_sec->contents + stub_entry->stub_offset;
6221
6222   htab->stub_count[stub_entry->stub_type - 1] += 1;
6223   switch (stub_entry->stub_type)
6224     {
6225     case ppc_stub_long_branch:
6226     case ppc_stub_long_branch_r2off:
6227       /* Branches are relative.  This is where we are going to.  */
6228       off = (stub_entry->target_value
6229              + stub_entry->target_section->output_offset
6230              + stub_entry->target_section->output_section->vma);
6231
6232       /* And this is where we are coming from.  */
6233       off -= (stub_entry->stub_offset
6234               + stub_entry->stub_sec->output_offset
6235               + stub_entry->stub_sec->output_section->vma);
6236
6237       if (stub_entry->stub_type != ppc_stub_long_branch_r2off)
6238         size = 4;
6239       else
6240         {
6241           bfd_vma r2off;
6242
6243           r2off = (htab->stub_group[stub_entry->target_section->id].toc_off
6244                    - htab->stub_group[stub_entry->id_sec->id].toc_off);
6245           bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
6246           loc += 4;
6247           bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
6248           loc += 4;
6249           bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
6250           loc += 4;
6251           off -= 12;
6252           size = 16;
6253         }
6254       bfd_put_32 (htab->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
6255
6256       BFD_ASSERT (off + (1 << 25) < (bfd_vma) (1 << 26));
6257       break;
6258
6259     case ppc_stub_plt_branch:
6260     case ppc_stub_plt_branch_r2off:
6261       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
6262                                          stub_entry->root.string + 9,
6263                                          FALSE, FALSE);
6264       if (br_entry == NULL)
6265         {
6266           (*_bfd_error_handler) (_("can't find branch stub `%s'"),
6267                                  stub_entry->root.string + 9);
6268           htab->stub_error = TRUE;
6269           return FALSE;
6270         }
6271
6272       off = (stub_entry->target_value
6273              + stub_entry->target_section->output_offset
6274              + stub_entry->target_section->output_section->vma);
6275
6276       bfd_put_64 (htab->brlt->owner, off,
6277                   htab->brlt->contents + br_entry->offset);
6278
6279       if (info->shared)
6280         {
6281           /* Create a reloc for the branch lookup table entry.  */
6282           Elf_Internal_Rela rela;
6283           bfd_byte *rl;
6284
6285           rela.r_offset = (br_entry->offset
6286                            + htab->brlt->output_offset
6287                            + htab->brlt->output_section->vma);
6288           rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
6289           rela.r_addend = off;
6290
6291           rl = htab->relbrlt->contents;
6292           rl += htab->relbrlt->reloc_count++ * sizeof (Elf64_External_Rela);
6293           bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
6294         }
6295
6296       off = (br_entry->offset
6297              + htab->brlt->output_offset
6298              + htab->brlt->output_section->vma
6299              - elf_gp (htab->brlt->output_section->owner)
6300              - htab->stub_group[stub_entry->id_sec->id].toc_off);
6301
6302       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
6303         {
6304           (*_bfd_error_handler)
6305             (_("linkage table error against `%s'"),
6306              stub_entry->root.string);
6307           bfd_set_error (bfd_error_bad_value);
6308           htab->stub_error = TRUE;
6309           return FALSE;
6310         }
6311
6312       indx = off;
6313       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
6314         {
6315           bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc);
6316           loc += 4;
6317           bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc);
6318           size = 16;
6319         }
6320       else
6321         {
6322           bfd_vma r2off;
6323
6324           r2off = (htab->stub_group[stub_entry->target_section->id].toc_off
6325                    - htab->stub_group[stub_entry->id_sec->id].toc_off);
6326           bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
6327           loc += 4;
6328           bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc);
6329           loc += 4;
6330           bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc);
6331           loc += 4;
6332           bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
6333           loc += 4;
6334           bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
6335           size = 28;
6336         }
6337       loc += 4;
6338       bfd_put_32 (htab->stub_bfd, MTCTR_R11, loc);
6339       loc += 4;
6340       bfd_put_32 (htab->stub_bfd, BCTR, loc);
6341       break;
6342
6343     case ppc_stub_plt_call:
6344       /* Do the best we can for shared libraries built without
6345          exporting ".foo" for each "foo".  This can happen when symbol
6346          versioning scripts strip all bar a subset of symbols.  */
6347       if (stub_entry->h->oh->root.type != bfd_link_hash_defined
6348           && stub_entry->h->oh->root.type != bfd_link_hash_defweak)
6349         {
6350           /* Point the symbol at the stub.  There may be multiple stubs,
6351              we don't really care;  The main thing is to make this sym
6352              defined somewhere.  Maybe defining the symbol in the stub
6353              section is a silly idea.  If we didn't do this, htab->top_id
6354              could disappear.  */
6355           stub_entry->h->oh->root.type = bfd_link_hash_defined;
6356           stub_entry->h->oh->root.u.def.section = stub_entry->stub_sec;
6357           stub_entry->h->oh->root.u.def.value = stub_entry->stub_offset;
6358         }
6359
6360       /* Now build the stub.  */
6361       off = (bfd_vma) -1;
6362       for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next)
6363         if (ent->addend == stub_entry->addend)
6364           {
6365             off = ent->plt.offset;
6366             break;
6367           }
6368       if (off >= (bfd_vma) -2)
6369         abort ();
6370
6371       off &= ~ (bfd_vma) 1;
6372       off += (htab->plt->output_offset
6373               + htab->plt->output_section->vma
6374               - elf_gp (htab->plt->output_section->owner)
6375               - htab->stub_group[stub_entry->id_sec->id].toc_off);
6376
6377       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
6378         {
6379           (*_bfd_error_handler)
6380             (_("linkage table error against `%s'"),
6381              stub_entry->h->elf.root.root.string);
6382           bfd_set_error (bfd_error_bad_value);
6383           htab->stub_error = TRUE;
6384           return FALSE;
6385         }
6386
6387       p = build_plt_stub (htab->stub_bfd, loc, off);
6388       size = p - loc;
6389       break;
6390
6391     default:
6392       BFD_FAIL ();
6393       return FALSE;
6394     }
6395
6396   stub_entry->stub_sec->size += size;
6397
6398   if (htab->emit_stub_syms
6399       && !(stub_entry->stub_type == ppc_stub_plt_call
6400            && stub_entry->h->oh->root.type == bfd_link_hash_defined
6401            && stub_entry->h->oh->root.u.def.section == stub_entry->stub_sec
6402            && stub_entry->h->oh->root.u.def.value == stub_entry->stub_offset))
6403     {
6404       struct elf_link_hash_entry *h;
6405       h = elf_link_hash_lookup (&htab->elf, stub_entry->root.string,
6406                                 TRUE, FALSE, FALSE);
6407       if (h == NULL)
6408         return FALSE;
6409       if (h->root.type == bfd_link_hash_new)
6410         {
6411           h->root.type = bfd_link_hash_defined;
6412           h->root.u.def.section = stub_entry->stub_sec;
6413           h->root.u.def.value = stub_entry->stub_offset;
6414           h->elf_link_hash_flags = (ELF_LINK_HASH_REF_REGULAR
6415                                     | ELF_LINK_HASH_DEF_REGULAR
6416                                     | ELF_LINK_HASH_REF_REGULAR_NONWEAK
6417                                     | ELF_LINK_FORCED_LOCAL);
6418         }
6419     }
6420
6421   return TRUE;
6422 }
6423
6424 /* As above, but don't actually build the stub.  Just bump offset so
6425    we know stub section sizes, and select plt_branch stubs where
6426    long_branch stubs won't do.  */
6427
6428 static bfd_boolean
6429 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
6430 {
6431   struct ppc_stub_hash_entry *stub_entry;
6432   struct bfd_link_info *info;
6433   struct ppc_link_hash_table *htab;
6434   bfd_vma off;
6435   int size;
6436
6437   /* Massage our args to the form they really have.  */
6438   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
6439   info = in_arg;
6440
6441   htab = ppc_hash_table (info);
6442
6443   if (stub_entry->stub_type == ppc_stub_plt_call)
6444     {
6445       struct plt_entry *ent;
6446       off = (bfd_vma) -1;
6447       for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next)
6448         if (ent->addend == stub_entry->addend)
6449           {
6450             off = ent->plt.offset & ~(bfd_vma) 1;
6451             break;
6452           }
6453       if (off >= (bfd_vma) -2)
6454         abort ();
6455       off += (htab->plt->output_offset
6456               + htab->plt->output_section->vma
6457               - elf_gp (htab->plt->output_section->owner)
6458               - htab->stub_group[stub_entry->id_sec->id].toc_off);
6459
6460       size = PLT_CALL_STUB_SIZE;
6461       if (PPC_HA (off + 16) != PPC_HA (off))
6462         size += 4;
6463     }
6464   else
6465     {
6466       /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
6467          variants.  */
6468       off = (stub_entry->target_value
6469              + stub_entry->target_section->output_offset
6470              + stub_entry->target_section->output_section->vma);
6471       off -= (stub_entry->stub_sec->size
6472               + stub_entry->stub_sec->output_offset
6473               + stub_entry->stub_sec->output_section->vma);
6474
6475       /* Reset the stub type from the plt variant in case we now
6476          can reach with a shorter stub.  */
6477       if (stub_entry->stub_type >= ppc_stub_plt_branch)
6478         stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
6479
6480       size = 4;
6481       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
6482         {
6483           off -= 12;
6484           size = 16;
6485         }
6486
6487       /* If the branch offset if too big, use a ppc_stub_plt_branch.  */
6488       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
6489         {
6490           struct ppc_branch_hash_entry *br_entry;
6491
6492           br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
6493                                              stub_entry->root.string + 9,
6494                                              TRUE, FALSE);
6495           if (br_entry == NULL)
6496             {
6497               (*_bfd_error_handler) (_("can't build branch stub `%s'"),
6498                                      stub_entry->root.string + 9);
6499               htab->stub_error = TRUE;
6500               return FALSE;
6501             }
6502
6503           if (br_entry->iter != htab->stub_iteration)
6504             {
6505               br_entry->iter = htab->stub_iteration;
6506               br_entry->offset = htab->brlt->size;
6507               htab->brlt->size += 8;
6508
6509               if (info->shared)
6510                 htab->relbrlt->size += sizeof (Elf64_External_Rela);
6511             }
6512
6513           stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
6514           size = 16;
6515           if (stub_entry->stub_type != ppc_stub_plt_branch)
6516             size = 28;
6517         }
6518     }
6519
6520   stub_entry->stub_sec->size += size;
6521   return TRUE;
6522 }
6523
6524 /* Set up various things so that we can make a list of input sections
6525    for each output section included in the link.  Returns -1 on error,
6526    0 when no stubs will be needed, and 1 on success.  */
6527
6528 int
6529 ppc64_elf_setup_section_lists (bfd *output_bfd, struct bfd_link_info *info)
6530 {
6531   bfd *input_bfd;
6532   int top_id, top_index, id;
6533   asection *section;
6534   asection **input_list;
6535   bfd_size_type amt;
6536   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6537
6538   if (htab->brlt == NULL)
6539     return 0;
6540
6541   /* Find the top input section id.  */
6542   for (input_bfd = info->input_bfds, top_id = 3;
6543        input_bfd != NULL;
6544        input_bfd = input_bfd->link_next)
6545     {
6546       for (section = input_bfd->sections;
6547            section != NULL;
6548            section = section->next)
6549         {
6550           if (top_id < section->id)
6551             top_id = section->id;
6552         }
6553     }
6554
6555   htab->top_id = top_id;
6556   amt = sizeof (struct map_stub) * (top_id + 1);
6557   htab->stub_group = bfd_zmalloc (amt);
6558   if (htab->stub_group == NULL)
6559     return -1;
6560
6561   /* Set toc_off for com, und, abs and ind sections.  */
6562   for (id = 0; id < 3; id++)
6563     htab->stub_group[id].toc_off = TOC_BASE_OFF;
6564
6565   elf_gp (output_bfd) = htab->toc_curr = ppc64_elf_toc (output_bfd);
6566
6567   /* We can't use output_bfd->section_count here to find the top output
6568      section index as some sections may have been removed, and
6569      _bfd_strip_section_from_output doesn't renumber the indices.  */
6570   for (section = output_bfd->sections, top_index = 0;
6571        section != NULL;
6572        section = section->next)
6573     {
6574       if (top_index < section->index)
6575         top_index = section->index;
6576     }
6577
6578   htab->top_index = top_index;
6579   amt = sizeof (asection *) * (top_index + 1);
6580   input_list = bfd_zmalloc (amt);
6581   htab->input_list = input_list;
6582   if (input_list == NULL)
6583     return -1;
6584
6585   return 1;
6586 }
6587
6588 /* The linker repeatedly calls this function for each TOC input section
6589    and linker generated GOT section.  Group input bfds such that the toc
6590    within a group is less than 64k in size.  Will break with cute linker
6591    scripts that play games with dot in the output toc section.  */
6592
6593 void
6594 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
6595 {
6596   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6597
6598   if (!htab->no_multi_toc)
6599     {
6600       bfd_vma addr = isec->output_offset + isec->output_section->vma;
6601       bfd_vma off = addr - htab->toc_curr;
6602       if (off + isec->size > 0x10000)
6603         {
6604           htab->toc_curr = addr;
6605           htab->multi_toc_needed = 1;
6606         }
6607       elf_gp (isec->owner) = (htab->toc_curr
6608                               - elf_gp (isec->output_section->owner)
6609                               + TOC_BASE_OFF);
6610     }
6611 }
6612
6613 /* Called after the last call to the above function.  */
6614
6615 void
6616 ppc64_elf_reinit_toc (bfd *output_bfd ATTRIBUTE_UNUSED,
6617                       struct bfd_link_info *info)
6618 {
6619   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6620
6621   /* toc_curr tracks the TOC offset used for code sections below in
6622      ppc64_elf_next_input_section.  Start off at 0x8000.  */
6623   htab->toc_curr = TOC_BASE_OFF;
6624 }
6625
6626 /* No toc references were found in ISEC.  If the code in ISEC makes no
6627    calls, then there's no need to use toc adjusting stubs when branching
6628    into ISEC.  Actually, indirect calls from ISEC are OK as they will
6629    load r2.  */
6630
6631 static int
6632 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
6633 {
6634   bfd_byte *contents;
6635   bfd_size_type i;
6636   int ret;
6637   int branch_ok;
6638
6639   /* We know none of our code bearing sections will need toc stubs.  */
6640   if ((isec->flags & SEC_LINKER_CREATED) != 0)
6641     return 0;
6642
6643   if (isec->size == 0)
6644     return 0;
6645
6646   /* Hack for linux kernel.  .fixup contains branches, but only back to
6647      the function that hit an exception.  */
6648   branch_ok = strcmp (isec->name, ".fixup") == 0;
6649
6650   contents = elf_section_data (isec)->this_hdr.contents;
6651   if (contents == NULL)
6652     {
6653       if (!bfd_malloc_and_get_section (isec->owner, isec, &contents))
6654         {
6655           if (contents != NULL)
6656             free (contents);
6657           return -1;
6658         }
6659       if (info->keep_memory)
6660         elf_section_data (isec)->this_hdr.contents = contents;
6661     }
6662
6663   /* Code scan, because we don't necessarily have relocs on calls to
6664      static functions.  */
6665   ret = 0;
6666   for (i = 0; i < isec->size; i += 4)
6667     {
6668       unsigned long insn = bfd_get_32 (isec->owner, contents + i);
6669       /* Is this a branch?  */
6670       if ((insn & (0x3f << 26)) == (18 << 26)
6671           /* If branch and link, it's a function call.  */
6672           && ((insn & 1) != 0
6673               /* Sibling calls use a plain branch.  I don't know a way
6674                  of deciding whether a branch is really a sibling call.  */
6675               || !branch_ok))
6676         {
6677           ret = 1;
6678           break;
6679         }
6680     }
6681
6682   if (elf_section_data (isec)->this_hdr.contents != contents)
6683     free (contents);
6684   return ret;
6685 }
6686
6687 /* The linker repeatedly calls this function for each input section,
6688    in the order that input sections are linked into output sections.
6689    Build lists of input sections to determine groupings between which
6690    we may insert linker stubs.  */
6691
6692 bfd_boolean
6693 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
6694 {
6695   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6696   int ret;
6697
6698   if ((isec->output_section->flags & SEC_CODE) != 0
6699       && isec->output_section->index <= htab->top_index)
6700     {
6701       asection **list = htab->input_list + isec->output_section->index;
6702       /* Steal the link_sec pointer for our list.  */
6703 #define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
6704       /* This happens to make the list in reverse order,
6705          which is what we want.  */
6706       PREV_SEC (isec) = *list;
6707       *list = isec;
6708     }
6709
6710   /* If a code section has a function that uses the TOC then we need
6711      to use the right TOC (obviously).  Also, make sure that .opd gets
6712      the correct TOC value for R_PPC64_TOC relocs that don't have or
6713      can't find their function symbol (shouldn't ever happen now).  */
6714   if (isec->has_gp_reloc || (isec->flags & SEC_CODE) == 0)
6715     {
6716       if (elf_gp (isec->owner) != 0)
6717         htab->toc_curr = elf_gp (isec->owner);
6718     }
6719   else if ((ret = toc_adjusting_stub_needed (info, isec)) < 0)
6720     return FALSE;
6721   else
6722     isec->has_gp_reloc = ret;
6723
6724   /* Functions that don't use the TOC can belong in any TOC group.
6725      Use the last TOC base.  This happens to make _init and _fini
6726      pasting work.  */
6727   htab->stub_group[isec->id].toc_off = htab->toc_curr;
6728   return TRUE;
6729 }
6730
6731 /* See whether we can group stub sections together.  Grouping stub
6732    sections may result in fewer stubs.  More importantly, we need to
6733    put all .init* and .fini* stubs at the beginning of the .init or
6734    .fini output sections respectively, because glibc splits the
6735    _init and _fini functions into multiple parts.  Putting a stub in
6736    the middle of a function is not a good idea.  */
6737
6738 static void
6739 group_sections (struct ppc_link_hash_table *htab,
6740                 bfd_size_type stub_group_size,
6741                 bfd_boolean stubs_always_before_branch)
6742 {
6743   asection **list = htab->input_list + htab->top_index;
6744   do
6745     {
6746       asection *tail = *list;
6747       while (tail != NULL)
6748         {
6749           asection *curr;
6750           asection *prev;
6751           bfd_size_type total;
6752           bfd_boolean big_sec;
6753           bfd_vma curr_toc;
6754
6755           curr = tail;
6756           total = tail->size;
6757           big_sec = total >= stub_group_size;
6758           curr_toc = htab->stub_group[tail->id].toc_off;
6759
6760           while ((prev = PREV_SEC (curr)) != NULL
6761                  && ((total += curr->output_offset - prev->output_offset)
6762                      < stub_group_size)
6763                  && htab->stub_group[prev->id].toc_off == curr_toc)
6764             curr = prev;
6765
6766           /* OK, the size from the start of CURR to the end is less
6767              than stub_group_size and thus can be handled by one stub
6768              section.  (or the tail section is itself larger than
6769              stub_group_size, in which case we may be toast.)  We
6770              should really be keeping track of the total size of stubs
6771              added here, as stubs contribute to the final output
6772              section size.  That's a little tricky, and this way will
6773              only break if stubs added make the total size more than
6774              2^25, ie. for the default stub_group_size, if stubs total
6775              more than 2097152 bytes, or nearly 75000 plt call stubs.  */
6776           do
6777             {
6778               prev = PREV_SEC (tail);
6779               /* Set up this stub group.  */
6780               htab->stub_group[tail->id].link_sec = curr;
6781             }
6782           while (tail != curr && (tail = prev) != NULL);
6783
6784           /* But wait, there's more!  Input sections up to stub_group_size
6785              bytes before the stub section can be handled by it too.
6786              Don't do this if we have a really large section after the
6787              stubs, as adding more stubs increases the chance that
6788              branches may not reach into the stub section.  */
6789           if (!stubs_always_before_branch && !big_sec)
6790             {
6791               total = 0;
6792               while (prev != NULL
6793                      && ((total += tail->output_offset - prev->output_offset)
6794                          < stub_group_size)
6795                      && htab->stub_group[prev->id].toc_off == curr_toc)
6796                 {
6797                   tail = prev;
6798                   prev = PREV_SEC (tail);
6799                   htab->stub_group[tail->id].link_sec = curr;
6800                 }
6801             }
6802           tail = prev;
6803         }
6804     }
6805   while (list-- != htab->input_list);
6806   free (htab->input_list);
6807 #undef PREV_SEC
6808 }
6809
6810 /* Determine and set the size of the stub section for a final link.
6811
6812    The basic idea here is to examine all the relocations looking for
6813    PC-relative calls to a target that is unreachable with a "bl"
6814    instruction.  */
6815
6816 bfd_boolean
6817 ppc64_elf_size_stubs (bfd *output_bfd,
6818                       struct bfd_link_info *info,
6819                       bfd_signed_vma group_size,
6820                       asection *(*add_stub_section) (const char *, asection *),
6821                       void (*layout_sections_again) (void))
6822 {
6823   bfd_size_type stub_group_size;
6824   bfd_boolean stubs_always_before_branch;
6825   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6826
6827   /* Stash our params away.  */
6828   htab->add_stub_section = add_stub_section;
6829   htab->layout_sections_again = layout_sections_again;
6830   stubs_always_before_branch = group_size < 0;
6831   if (group_size < 0)
6832     stub_group_size = -group_size;
6833   else
6834     stub_group_size = group_size;
6835   if (stub_group_size == 1)
6836     {
6837       /* Default values.  */
6838       if (stubs_always_before_branch)
6839         {
6840           stub_group_size = 0x1e00000;
6841           if (htab->has_14bit_branch)
6842             stub_group_size = 0x7800;
6843         }
6844       else
6845         {
6846           stub_group_size = 0x1c00000;
6847           if (htab->has_14bit_branch)
6848             stub_group_size = 0x7000;
6849         }
6850     }
6851
6852   group_sections (htab, stub_group_size, stubs_always_before_branch);
6853
6854   while (1)
6855     {
6856       bfd *input_bfd;
6857       unsigned int bfd_indx;
6858       asection *stub_sec;
6859       bfd_boolean stub_changed;
6860
6861       htab->stub_iteration += 1;
6862       stub_changed = FALSE;
6863
6864       for (input_bfd = info->input_bfds, bfd_indx = 0;
6865            input_bfd != NULL;
6866            input_bfd = input_bfd->link_next, bfd_indx++)
6867         {
6868           Elf_Internal_Shdr *symtab_hdr;
6869           asection *section;
6870           Elf_Internal_Sym *local_syms = NULL;
6871
6872           /* We'll need the symbol table in a second.  */
6873           symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6874           if (symtab_hdr->sh_info == 0)
6875             continue;
6876
6877           /* Walk over each section attached to the input bfd.  */
6878           for (section = input_bfd->sections;
6879                section != NULL;
6880                section = section->next)
6881             {
6882               Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
6883
6884               /* If there aren't any relocs, then there's nothing more
6885                  to do.  */
6886               if ((section->flags & SEC_RELOC) == 0
6887                   || section->reloc_count == 0)
6888                 continue;
6889
6890               /* If this section is a link-once section that will be
6891                  discarded, then don't create any stubs.  */
6892               if (section->output_section == NULL
6893                   || section->output_section->owner != output_bfd)
6894                 continue;
6895
6896               /* Get the relocs.  */
6897               internal_relocs
6898                 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
6899                                              info->keep_memory);
6900               if (internal_relocs == NULL)
6901                 goto error_ret_free_local;
6902
6903               /* Now examine each relocation.  */
6904               irela = internal_relocs;
6905               irelaend = irela + section->reloc_count;
6906               for (; irela < irelaend; irela++)
6907                 {
6908                   enum elf_ppc64_reloc_type r_type;
6909                   unsigned int r_indx;
6910                   enum ppc_stub_type stub_type;
6911                   struct ppc_stub_hash_entry *stub_entry;
6912                   asection *sym_sec;
6913                   bfd_vma sym_value;
6914                   bfd_vma destination;
6915                   struct ppc_link_hash_entry *hash;
6916                   struct elf_link_hash_entry *h;
6917                   Elf_Internal_Sym *sym;
6918                   char *stub_name;
6919                   const asection *id_sec;
6920
6921                   r_type = ELF64_R_TYPE (irela->r_info);
6922                   r_indx = ELF64_R_SYM (irela->r_info);
6923
6924                   if (r_type >= R_PPC64_max)
6925                     {
6926                       bfd_set_error (bfd_error_bad_value);
6927                       goto error_ret_free_internal;
6928                     }
6929
6930                   /* Only look for stubs on branch instructions.  */
6931                   if (r_type != R_PPC64_REL24
6932                       && r_type != R_PPC64_REL14
6933                       && r_type != R_PPC64_REL14_BRTAKEN
6934                       && r_type != R_PPC64_REL14_BRNTAKEN)
6935                     continue;
6936
6937                   /* Now determine the call target, its name, value,
6938                      section.  */
6939                   destination = 0;
6940                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
6941                                   r_indx, input_bfd))
6942                     goto error_ret_free_internal;
6943                   hash = (struct ppc_link_hash_entry *) h;
6944
6945                   if (hash == NULL)
6946                     {
6947                       /* It's a local symbol.  */
6948                       sym_value = sym->st_value;
6949                       destination = (sym_value + irela->r_addend
6950                                      + sym_sec->output_offset
6951                                      + sym_sec->output_section->vma);
6952                     }
6953                   else
6954                     {
6955                       /* It's an external symbol.  */
6956                       sym_value = 0;
6957                       if (hash->elf.root.type == bfd_link_hash_defined
6958                           || hash->elf.root.type == bfd_link_hash_defweak)
6959                         {
6960                           sym_value = hash->elf.root.u.def.value;
6961                           if (sym_sec->output_section != NULL)
6962                             destination = (sym_value + irela->r_addend
6963                                            + sym_sec->output_offset
6964                                            + sym_sec->output_section->vma);
6965                         }
6966                       else if (hash->elf.root.type == bfd_link_hash_undefweak)
6967                         ;
6968                       else if (hash->elf.root.type == bfd_link_hash_undefined)
6969                         ;
6970                       else
6971                         {
6972                           bfd_set_error (bfd_error_bad_value);
6973                           goto error_ret_free_internal;
6974                         }
6975                     }
6976
6977                   /* Determine what (if any) linker stub is needed.  */
6978                   stub_type = ppc_type_of_stub (section, irela, &hash,
6979                                                 destination);
6980
6981                   if (stub_type != ppc_stub_plt_call)
6982                     {
6983                       /* Check whether we need a TOC adjusting stub.
6984                          Since the linker pastes together pieces from
6985                          different object files when creating the
6986                          _init and _fini functions, it may be that a
6987                          call to what looks like a local sym is in
6988                          fact a call needing a TOC adjustment.  */
6989                       if (sym_sec != NULL
6990                           && sym_sec->output_section != NULL
6991                           && (htab->stub_group[sym_sec->id].toc_off
6992                               != htab->stub_group[section->id].toc_off)
6993                           && sym_sec->has_gp_reloc
6994                           && section->has_gp_reloc)
6995                         stub_type = ppc_stub_long_branch_r2off;
6996                     }
6997
6998                   if (stub_type == ppc_stub_none)
6999                     continue;
7000
7001                   /* __tls_get_addr calls might be eliminated.  */
7002                   if (stub_type != ppc_stub_plt_call
7003                       && hash != NULL
7004                       && &hash->elf == htab->tls_get_addr
7005                       && section->has_tls_reloc
7006                       && irela != internal_relocs)
7007                     {
7008                       /* Get tls info.  */
7009                       char *tls_mask;
7010
7011                       if (!get_tls_mask (&tls_mask, NULL, &local_syms,
7012                                          irela - 1, input_bfd))
7013                         goto error_ret_free_internal;
7014                       if (*tls_mask != 0)
7015                         continue;
7016                     }
7017
7018                   /* Support for grouping stub sections.  */
7019                   id_sec = htab->stub_group[section->id].link_sec;
7020
7021                   /* Get the name of this stub.  */
7022                   stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
7023                   if (!stub_name)
7024                     goto error_ret_free_internal;
7025
7026                   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
7027                                                      stub_name, FALSE, FALSE);
7028                   if (stub_entry != NULL)
7029                     {
7030                       /* The proper stub has already been created.  */
7031                       free (stub_name);
7032                       continue;
7033                     }
7034
7035                   stub_entry = ppc_add_stub (stub_name, section, htab);
7036                   if (stub_entry == NULL)
7037                     {
7038                       free (stub_name);
7039                     error_ret_free_internal:
7040                       if (elf_section_data (section)->relocs == NULL)
7041                         free (internal_relocs);
7042                     error_ret_free_local:
7043                       if (local_syms != NULL
7044                           && (symtab_hdr->contents
7045                               != (unsigned char *) local_syms))
7046                         free (local_syms);
7047                       return FALSE;
7048                     }
7049
7050                   stub_entry->stub_type = stub_type;
7051                   stub_entry->target_value = sym_value;
7052                   stub_entry->target_section = sym_sec;
7053                   stub_entry->h = hash;
7054                   stub_entry->addend = irela->r_addend;
7055                   stub_changed = TRUE;
7056                 }
7057
7058               /* We're done with the internal relocs, free them.  */
7059               if (elf_section_data (section)->relocs != internal_relocs)
7060                 free (internal_relocs);
7061             }
7062
7063           if (local_syms != NULL
7064               && symtab_hdr->contents != (unsigned char *) local_syms)
7065             {
7066               if (!info->keep_memory)
7067                 free (local_syms);
7068               else
7069                 symtab_hdr->contents = (unsigned char *) local_syms;
7070             }
7071         }
7072
7073       if (!stub_changed)
7074         break;
7075
7076       /* OK, we've added some stubs.  Find out the new size of the
7077          stub sections.  */
7078       for (stub_sec = htab->stub_bfd->sections;
7079            stub_sec != NULL;
7080            stub_sec = stub_sec->next)
7081         if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
7082           stub_sec->size = 0;
7083
7084       htab->brlt->size = 0;
7085       if (info->shared)
7086         htab->relbrlt->size = 0;
7087
7088       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
7089
7090       /* Ask the linker to do its stuff.  */
7091       (*htab->layout_sections_again) ();
7092     }
7093
7094   /* It would be nice to strip .branch_lt from the output if the
7095      section is empty, but it's too late.  If we strip sections here,
7096      the dynamic symbol table is corrupted since the section symbol
7097      for the stripped section isn't written.  */
7098
7099   return TRUE;
7100 }
7101
7102 /* Called after we have determined section placement.  If sections
7103    move, we'll be called again.  Provide a value for TOCstart.  */
7104
7105 bfd_vma
7106 ppc64_elf_toc (bfd *obfd)
7107 {
7108   asection *s;
7109   bfd_vma TOCstart;
7110
7111   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
7112      order.  The TOC starts where the first of these sections starts.  */
7113   s = bfd_get_section_by_name (obfd, ".got");
7114   if (s == NULL)
7115     s = bfd_get_section_by_name (obfd, ".toc");
7116   if (s == NULL)
7117     s = bfd_get_section_by_name (obfd, ".tocbss");
7118   if (s == NULL)
7119     s = bfd_get_section_by_name (obfd, ".plt");
7120   if (s == NULL)
7121     {
7122       /* This may happen for
7123          o  references to TOC base (SYM@toc / TOC[tc0]) without a
7124          .toc directive
7125          o  bad linker script
7126          o --gc-sections and empty TOC sections
7127
7128          FIXME: Warn user?  */
7129
7130       /* Look for a likely section.  We probably won't even be
7131          using TOCstart.  */
7132       for (s = obfd->sections; s != NULL; s = s->next)
7133         if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY))
7134             == (SEC_ALLOC | SEC_SMALL_DATA))
7135           break;
7136       if (s == NULL)
7137         for (s = obfd->sections; s != NULL; s = s->next)
7138           if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA))
7139               == (SEC_ALLOC | SEC_SMALL_DATA))
7140             break;
7141       if (s == NULL)
7142         for (s = obfd->sections; s != NULL; s = s->next)
7143           if ((s->flags & (SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
7144             break;
7145       if (s == NULL)
7146         for (s = obfd->sections; s != NULL; s = s->next)
7147           if ((s->flags & SEC_ALLOC) == SEC_ALLOC)
7148             break;
7149     }
7150
7151   TOCstart = 0;
7152   if (s != NULL)
7153     TOCstart = s->output_section->vma + s->output_offset;
7154
7155   return TOCstart;
7156 }
7157
7158 /* Build all the stubs associated with the current output file.
7159    The stubs are kept in a hash table attached to the main linker
7160    hash table.  This function is called via gldelf64ppc_finish.  */
7161
7162 bfd_boolean
7163 ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
7164                        struct bfd_link_info *info,
7165                        char **stats)
7166 {
7167   struct ppc_link_hash_table *htab = ppc_hash_table (info);
7168   asection *stub_sec;
7169   bfd_byte *p;
7170   int stub_sec_count = 0;
7171
7172   htab->emit_stub_syms = emit_stub_syms;
7173
7174   /* Allocate memory to hold the linker stubs.  */
7175   for (stub_sec = htab->stub_bfd->sections;
7176        stub_sec != NULL;
7177        stub_sec = stub_sec->next)
7178     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
7179         && stub_sec->size != 0)
7180       {
7181         stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
7182         if (stub_sec->contents == NULL)
7183           return FALSE;
7184         /* We want to check that built size is the same as calculated
7185            size.  rawsize is a convenient location to use.  */
7186         stub_sec->rawsize = stub_sec->size;
7187         stub_sec->size = 0;
7188       }
7189
7190   if (htab->plt != NULL)
7191     {
7192       unsigned int indx;
7193       bfd_vma plt0;
7194
7195       /* Build the .glink plt call stub.  */
7196       plt0 = (htab->plt->output_section->vma
7197               + htab->plt->output_offset
7198               - (htab->glink->output_section->vma
7199                  + htab->glink->output_offset
7200                  + GLINK_CALL_STUB_SIZE));
7201       if (plt0 + 0x80008000 > 0xffffffff)
7202         {
7203           (*_bfd_error_handler) (_(".glink and .plt too far apart"));
7204           bfd_set_error (bfd_error_bad_value);
7205           return FALSE;
7206         }
7207
7208       if (htab->emit_stub_syms)
7209         {
7210           struct elf_link_hash_entry *h;
7211           h = elf_link_hash_lookup (&htab->elf, "__glink", TRUE, FALSE, FALSE);
7212           if (h == NULL)
7213             return FALSE;
7214           if (h->root.type == bfd_link_hash_new)
7215             {
7216               h->root.type = bfd_link_hash_defined;
7217               h->root.u.def.section = htab->glink;
7218               h->root.u.def.value = 0;
7219               h->elf_link_hash_flags = (ELF_LINK_HASH_REF_REGULAR
7220                                         | ELF_LINK_HASH_DEF_REGULAR
7221                                         | ELF_LINK_HASH_REF_REGULAR_NONWEAK
7222                                         | ELF_LINK_FORCED_LOCAL);
7223             }
7224         }
7225       p = htab->glink->contents;
7226       bfd_put_32 (htab->glink->owner, MFCTR_R12, p);
7227       p += 4;
7228       bfd_put_32 (htab->glink->owner, SLDI_R11_R0_3, p);
7229       p += 4;
7230       bfd_put_32 (htab->glink->owner, ADDIC_R2_R0_32K, p);
7231       p += 4;
7232       bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
7233       p += 4;
7234       bfd_put_32 (htab->glink->owner, SRADI_R2_R2_63, p);
7235       p += 4;
7236       bfd_put_32 (htab->glink->owner, SLDI_R11_R0_2, p);
7237       p += 4;
7238       bfd_put_32 (htab->glink->owner, AND_R2_R2_R11, p);
7239       p += 4;
7240       bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
7241       p += 4;
7242       bfd_put_32 (htab->glink->owner, ADD_R12_R12_R2, p);
7243       p += 4;
7244       bfd_put_32 (htab->glink->owner, ADDIS_R12_R12 | PPC_HA (plt0), p);
7245       p += 4;
7246       bfd_put_32 (htab->glink->owner, LD_R11_0R12 | PPC_LO (plt0), p);
7247       p += 4;
7248       bfd_put_32 (htab->glink->owner, ADDI_R12_R12 | PPC_LO (plt0), p);
7249       p += 4;
7250       bfd_put_32 (htab->glink->owner, LD_R2_0R12 | 8, p);
7251       p += 4;
7252       bfd_put_32 (htab->glink->owner, MTCTR_R11, p);
7253       p += 4;
7254       bfd_put_32 (htab->glink->owner, LD_R11_0R12 | 16, p);
7255       p += 4;
7256       bfd_put_32 (htab->glink->owner, BCTR, p);
7257       p += 4;
7258
7259       /* Build the .glink lazy link call stubs.  */
7260       indx = 0;
7261       while (p < htab->glink->contents + htab->glink->size)
7262         {
7263           if (indx < 0x8000)
7264             {
7265               bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
7266               p += 4;
7267             }
7268           else
7269             {
7270               bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
7271               p += 4;
7272               bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx), p);
7273               p += 4;
7274             }
7275           bfd_put_32 (htab->glink->owner,
7276                       B_DOT | ((htab->glink->contents - p) & 0x3fffffc), p);
7277           indx++;
7278           p += 4;
7279         }
7280       htab->glink->rawsize = p - htab->glink->contents;
7281     }
7282
7283   if (htab->brlt->size != 0)
7284     {
7285       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
7286                                          htab->brlt->size);
7287       if (htab->brlt->contents == NULL)
7288         return FALSE;
7289     }
7290   if (info->shared && htab->relbrlt->size != 0)
7291     {
7292       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
7293                                             htab->relbrlt->size);
7294       if (htab->relbrlt->contents == NULL)
7295         return FALSE;
7296     }
7297
7298   /* Build the stubs as directed by the stub hash table.  */
7299   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
7300
7301   for (stub_sec = htab->stub_bfd->sections;
7302        stub_sec != NULL;
7303        stub_sec = stub_sec->next)
7304     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
7305       {
7306         stub_sec_count += 1;
7307         if (stub_sec->rawsize != stub_sec->size)
7308           break;
7309       }
7310
7311   if (stub_sec != NULL
7312       || htab->glink->rawsize != htab->glink->size)
7313     {
7314       htab->stub_error = TRUE;
7315       (*_bfd_error_handler) (_("stubs don't match calculated size"));
7316     }
7317
7318   if (htab->stub_error)
7319     return FALSE;
7320
7321   if (stats != NULL)
7322     {
7323       *stats = bfd_malloc (500);
7324       if (*stats == NULL)
7325         return FALSE;
7326
7327       sprintf (*stats, _("linker stubs in %u groups\n"
7328                          "  branch       %lu\n"
7329                          "  toc adjust   %lu\n"
7330                          "  long branch  %lu\n"
7331                          "  long toc adj %lu\n"
7332                          "  plt call     %lu"),
7333                stub_sec_count,
7334                htab->stub_count[ppc_stub_long_branch - 1],
7335                htab->stub_count[ppc_stub_long_branch_r2off - 1],
7336                htab->stub_count[ppc_stub_plt_branch - 1],
7337                htab->stub_count[ppc_stub_plt_branch_r2off - 1],
7338                htab->stub_count[ppc_stub_plt_call - 1]);
7339     }
7340   return TRUE;
7341 }
7342
7343 /* The RELOCATE_SECTION function is called by the ELF backend linker
7344    to handle the relocations for a section.
7345
7346    The relocs are always passed as Rela structures; if the section
7347    actually uses Rel structures, the r_addend field will always be
7348    zero.
7349
7350    This function is responsible for adjust the section contents as
7351    necessary, and (if using Rela relocs and generating a
7352    relocatable output file) adjusting the reloc addend as
7353    necessary.
7354
7355    This function does not have to worry about setting the reloc
7356    address or the reloc symbol index.
7357
7358    LOCAL_SYMS is a pointer to the swapped in local symbols.
7359
7360    LOCAL_SECTIONS is an array giving the section in the input file
7361    corresponding to the st_shndx field of each local symbol.
7362
7363    The global hash table entry for the global symbols can be found
7364    via elf_sym_hashes (input_bfd).
7365
7366    When generating relocatable output, this function must handle
7367    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
7368    going to be the section symbol corresponding to the output
7369    section, which means that the addend must be adjusted
7370    accordingly.  */
7371
7372 static bfd_boolean
7373 ppc64_elf_relocate_section (bfd *output_bfd,
7374                             struct bfd_link_info *info,
7375                             bfd *input_bfd,
7376                             asection *input_section,
7377                             bfd_byte *contents,
7378                             Elf_Internal_Rela *relocs,
7379                             Elf_Internal_Sym *local_syms,
7380                             asection **local_sections)
7381 {
7382   struct ppc_link_hash_table *htab;
7383   Elf_Internal_Shdr *symtab_hdr;
7384   struct elf_link_hash_entry **sym_hashes;
7385   Elf_Internal_Rela *rel;
7386   Elf_Internal_Rela *relend;
7387   Elf_Internal_Rela outrel;
7388   bfd_byte *loc;
7389   struct got_entry **local_got_ents;
7390   bfd_vma TOCstart;
7391   bfd_boolean ret = TRUE;
7392   bfd_boolean is_opd;
7393   /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
7394   bfd_boolean is_power4 = FALSE;
7395
7396   if (info->relocatable)
7397     return TRUE;
7398
7399   /* Initialize howto table if needed.  */
7400   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
7401     ppc_howto_init ();
7402
7403   htab = ppc_hash_table (info);
7404   local_got_ents = elf_local_got_ents (input_bfd);
7405   TOCstart = elf_gp (output_bfd);
7406   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
7407   sym_hashes = elf_sym_hashes (input_bfd);
7408   is_opd = ppc64_elf_section_data (input_section)->opd.adjust != NULL;
7409
7410   rel = relocs;
7411   relend = relocs + input_section->reloc_count;
7412   for (; rel < relend; rel++)
7413     {
7414       enum elf_ppc64_reloc_type r_type;
7415       bfd_vma addend;
7416       bfd_reloc_status_type r;
7417       Elf_Internal_Sym *sym;
7418       asection *sec;
7419       struct elf_link_hash_entry *h;
7420       struct elf_link_hash_entry *fdh;
7421       const char *sym_name;
7422       unsigned long r_symndx, toc_symndx;
7423       char tls_mask, tls_gd, tls_type;
7424       char sym_type;
7425       bfd_vma relocation;
7426       bfd_boolean unresolved_reloc;
7427       bfd_boolean warned;
7428       unsigned long insn, mask;
7429       struct ppc_stub_hash_entry *stub_entry;
7430       bfd_vma max_br_offset;
7431       bfd_vma from;
7432
7433       r_type = ELF64_R_TYPE (rel->r_info);
7434       r_symndx = ELF64_R_SYM (rel->r_info);
7435
7436       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
7437          symbol of the previous ADDR64 reloc.  The symbol gives us the
7438          proper TOC base to use.  */
7439       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
7440           && rel != relocs
7441           && ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
7442           && is_opd)
7443         r_symndx = ELF64_R_SYM (rel[-1].r_info);
7444
7445       sym = NULL;
7446       sec = NULL;
7447       h = NULL;
7448       sym_name = NULL;
7449       unresolved_reloc = FALSE;
7450       warned = FALSE;
7451
7452       if (r_symndx < symtab_hdr->sh_info)
7453         {
7454           /* It's a local symbol.  */
7455           sym = local_syms + r_symndx;
7456           sec = local_sections[r_symndx];
7457           sym_name = bfd_elf_local_sym_name (input_bfd, sym);
7458           sym_type = ELF64_ST_TYPE (sym->st_info);
7459           relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
7460           if (elf_section_data (sec) != NULL)
7461             {
7462               long *opd_sym_adjust;
7463
7464               opd_sym_adjust = ppc64_elf_section_data (sec)->opd.adjust;
7465               if (opd_sym_adjust != NULL)
7466                 relocation += opd_sym_adjust[sym->st_value / 24];
7467             }
7468         }
7469       else
7470         {
7471           RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
7472                                    r_symndx, symtab_hdr, sym_hashes,
7473                                    h, sec, relocation,
7474                                    unresolved_reloc, warned);
7475           sym_name = h->root.root.string;
7476           sym_type = h->type;
7477         }
7478
7479       /* TLS optimizations.  Replace instruction sequences and relocs
7480          based on information we collected in tls_optimize.  We edit
7481          RELOCS so that --emit-relocs will output something sensible
7482          for the final instruction stream.  */
7483       tls_mask = 0;
7484       tls_gd = 0;
7485       toc_symndx = 0;
7486       if (IS_PPC64_TLS_RELOC (r_type))
7487         {
7488           if (h != NULL)
7489             tls_mask = ((struct ppc_link_hash_entry *) h)->tls_mask;
7490           else if (local_got_ents != NULL)
7491             {
7492               char *lgot_masks;
7493               lgot_masks = (char *) (local_got_ents + symtab_hdr->sh_info);
7494               tls_mask = lgot_masks[r_symndx];
7495             }
7496           if (tls_mask == 0 && r_type == R_PPC64_TLS)
7497             {
7498               /* Check for toc tls entries.  */
7499               char *toc_tls;
7500
7501               if (!get_tls_mask (&toc_tls, &toc_symndx, &local_syms,
7502                                  rel, input_bfd))
7503                 return FALSE;
7504
7505               if (toc_tls)
7506                 tls_mask = *toc_tls;
7507             }
7508         }
7509
7510       /* Check that tls relocs are used with tls syms, and non-tls
7511          relocs are used with non-tls syms.  */
7512       if (r_symndx != 0
7513           && r_type != R_PPC64_NONE
7514           && (h == NULL
7515               || h->root.type == bfd_link_hash_defined
7516               || h->root.type == bfd_link_hash_defweak)
7517           && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
7518         {
7519           if (r_type == R_PPC64_TLS && tls_mask != 0)
7520             /* R_PPC64_TLS is OK against a symbol in the TOC.  */
7521             ;
7522           else
7523             (*_bfd_error_handler)
7524               (sym_type == STT_TLS
7525                ? _("%s(%s+0x%lx): %s used with TLS symbol %s")
7526                : _("%s(%s+0x%lx): %s used with non-TLS symbol %s"),
7527                bfd_archive_filename (input_bfd),
7528                input_section->name,
7529                (long) rel->r_offset,
7530                ppc64_elf_howto_table[r_type]->name,
7531                sym_name);
7532         }
7533
7534       /* Ensure reloc mapping code below stays sane.  */
7535       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
7536           || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
7537           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
7538           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
7539           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
7540           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
7541           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
7542           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
7543           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
7544           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
7545         abort ();
7546
7547       switch (r_type)
7548         {
7549         default:
7550           break;
7551
7552         case R_PPC64_TOC16:
7553         case R_PPC64_TOC16_LO:
7554         case R_PPC64_TOC16_DS:
7555         case R_PPC64_TOC16_LO_DS:
7556           {
7557             /* Check for toc tls entries.  */
7558             char *toc_tls;
7559             int retval;
7560
7561             retval = get_tls_mask (&toc_tls, &toc_symndx, &local_syms,
7562                                    rel, input_bfd);
7563             if (retval == 0)
7564               return FALSE;
7565
7566             if (toc_tls)
7567               {
7568                 tls_mask = *toc_tls;
7569                 if (r_type == R_PPC64_TOC16_DS
7570                     || r_type == R_PPC64_TOC16_LO_DS)
7571                   {
7572                     if (tls_mask != 0
7573                         && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
7574                       goto toctprel;
7575                   }
7576                 else
7577                   {
7578                     /* If we found a GD reloc pair, then we might be
7579                        doing a GD->IE transition.  */
7580                     if (retval == 2)
7581                       {
7582                         tls_gd = TLS_TPRELGD;
7583                         if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
7584                           goto tls_get_addr_check;
7585                       }
7586                     else if (retval == 3)
7587                       {
7588                         if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
7589                           goto tls_get_addr_check;
7590                       }
7591                   }
7592               }
7593           }
7594           break;
7595
7596         case R_PPC64_GOT_TPREL16_DS:
7597         case R_PPC64_GOT_TPREL16_LO_DS:
7598           if (tls_mask != 0
7599               && (tls_mask & TLS_TPREL) == 0)
7600             {
7601             toctprel:
7602               insn = bfd_get_32 (output_bfd, contents + rel->r_offset - 2);
7603               insn &= 31 << 21;
7604               insn |= 0x3c0d0000;       /* addis 0,13,0 */
7605               bfd_put_32 (output_bfd, insn, contents + rel->r_offset - 2);
7606               r_type = R_PPC64_TPREL16_HA;
7607               if (toc_symndx != 0)
7608                 {
7609                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
7610                   /* We changed the symbol.  Start over in order to
7611                      get h, sym, sec etc. right.  */
7612                   rel--;
7613                   continue;
7614                 }
7615               else
7616                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7617             }
7618           break;
7619
7620         case R_PPC64_TLS:
7621           if (tls_mask != 0
7622               && (tls_mask & TLS_TPREL) == 0)
7623             {
7624               bfd_vma rtra;
7625               insn = bfd_get_32 (output_bfd, contents + rel->r_offset);
7626               if ((insn & ((0x3f << 26) | (31 << 11)))
7627                   == ((31 << 26) | (13 << 11)))
7628                 rtra = insn & ((1 << 26) - (1 << 16));
7629               else if ((insn & ((0x3f << 26) | (31 << 16)))
7630                        == ((31 << 26) | (13 << 16)))
7631                 rtra = (insn & (31 << 21)) | ((insn & (31 << 11)) << 5);
7632               else
7633                 abort ();
7634               if ((insn & ((1 << 11) - (1 << 1))) == 266 << 1)
7635                 /* add -> addi.  */
7636                 insn = 14 << 26;
7637               else if ((insn & (31 << 1)) == 23 << 1
7638                        && ((insn & (31 << 6)) < 14 << 6
7639                            || ((insn & (31 << 6)) >= 16 << 6
7640                                && (insn & (31 << 6)) < 24 << 6)))
7641                 /* load and store indexed -> dform.  */
7642                 insn = (32 | ((insn >> 6) & 31)) << 26;
7643               else if ((insn & (31 << 1)) == 21 << 1
7644                        && (insn & (0x1a << 6)) == 0)
7645                 /* ldx, ldux, stdx, stdux -> ld, ldu, std, stdu.  */
7646                 insn = (((58 | ((insn >> 6) & 4)) << 26)
7647                         | ((insn >> 6) & 1));
7648               else if ((insn & (31 << 1)) == 21 << 1
7649                        && (insn & ((1 << 11) - (1 << 1))) == 341 << 1)
7650                 /* lwax -> lwa.  */
7651                 insn = (58 << 26) | 2;
7652               else
7653                 abort ();
7654               insn |= rtra;
7655               bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
7656               /* Was PPC64_TLS which sits on insn boundary, now
7657                  PPC64_TPREL16_LO which is at insn+2.  */
7658               rel->r_offset += 2;
7659               r_type = R_PPC64_TPREL16_LO;
7660               if (toc_symndx != 0)
7661                 {
7662                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
7663                   /* We changed the symbol.  Start over in order to
7664                      get h, sym, sec etc. right.  */
7665                   rel--;
7666                   continue;
7667                 }
7668               else
7669                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7670             }
7671           break;
7672
7673         case R_PPC64_GOT_TLSGD16_HI:
7674         case R_PPC64_GOT_TLSGD16_HA:
7675           tls_gd = TLS_TPRELGD;
7676           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
7677             goto tls_gdld_hi;
7678           break;
7679
7680         case R_PPC64_GOT_TLSLD16_HI:
7681         case R_PPC64_GOT_TLSLD16_HA:
7682           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
7683             {
7684             tls_gdld_hi:
7685               if ((tls_mask & tls_gd) != 0)
7686                 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
7687                           + R_PPC64_GOT_TPREL16_DS);
7688               else
7689                 {
7690                   bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
7691                   rel->r_offset -= 2;
7692                   r_type = R_PPC64_NONE;
7693                 }
7694               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7695             }
7696           break;
7697
7698         case R_PPC64_GOT_TLSGD16:
7699         case R_PPC64_GOT_TLSGD16_LO:
7700           tls_gd = TLS_TPRELGD;
7701           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
7702             goto tls_get_addr_check;
7703           break;
7704
7705         case R_PPC64_GOT_TLSLD16:
7706         case R_PPC64_GOT_TLSLD16_LO:
7707           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
7708             {
7709             tls_get_addr_check:
7710               if (rel + 1 < relend)
7711                 {
7712                   enum elf_ppc64_reloc_type r_type2;
7713                   unsigned long r_symndx2;
7714                   struct elf_link_hash_entry *h2;
7715                   bfd_vma insn1, insn2, insn3;
7716                   bfd_vma offset;
7717
7718                   /* The next instruction should be a call to
7719                      __tls_get_addr.  Peek at the reloc to be sure.  */
7720                   r_type2 = ELF64_R_TYPE (rel[1].r_info);
7721                   r_symndx2 = ELF64_R_SYM (rel[1].r_info);
7722                   if (r_symndx2 < symtab_hdr->sh_info
7723                       || (r_type2 != R_PPC64_REL14
7724                           && r_type2 != R_PPC64_REL14_BRTAKEN
7725                           && r_type2 != R_PPC64_REL14_BRNTAKEN
7726                           && r_type2 != R_PPC64_REL24))
7727                     break;
7728
7729                   h2 = sym_hashes[r_symndx2 - symtab_hdr->sh_info];
7730                   while (h2->root.type == bfd_link_hash_indirect
7731                          || h2->root.type == bfd_link_hash_warning)
7732                     h2 = (struct elf_link_hash_entry *) h2->root.u.i.link;
7733                   if (h2 == NULL || h2 != htab->tls_get_addr)
7734                     break;
7735
7736                   /* OK, it checks out.  Replace the call.  */
7737                   offset = rel[1].r_offset;
7738                   insn1 = bfd_get_32 (output_bfd,
7739                                       contents + rel->r_offset - 2);
7740                   insn3 = bfd_get_32 (output_bfd,
7741                                       contents + offset + 4);
7742                   if ((tls_mask & tls_gd) != 0)
7743                     {
7744                       /* IE */
7745                       insn1 &= (1 << 26) - (1 << 2);
7746                       insn1 |= 58 << 26;        /* ld */
7747                       insn2 = 0x7c636a14;       /* add 3,3,13 */
7748                       rel[1].r_info = ELF64_R_INFO (r_symndx2, R_PPC64_NONE);
7749                       if ((tls_mask & TLS_EXPLICIT) == 0)
7750                         r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
7751                                   + R_PPC64_GOT_TPREL16_DS);
7752                       else
7753                         r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
7754                       rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7755                     }
7756                   else
7757                     {
7758                       /* LE */
7759                       insn1 = 0x3c6d0000;       /* addis 3,13,0 */
7760                       insn2 = 0x38630000;       /* addi 3,3,0 */
7761                       if (tls_gd == 0)
7762                         {
7763                           /* Was an LD reloc.  */
7764                           r_symndx = 0;
7765                           rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
7766                           rel[1].r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
7767                         }
7768                       else if (toc_symndx != 0)
7769                         r_symndx = toc_symndx;
7770                       r_type = R_PPC64_TPREL16_HA;
7771                       rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7772                       rel[1].r_info = ELF64_R_INFO (r_symndx,
7773                                                     R_PPC64_TPREL16_LO);
7774                       rel[1].r_offset += 2;
7775                     }
7776                   if (insn3 == NOP
7777                       || insn3 == CROR_151515 || insn3 == CROR_313131)
7778                     {
7779                       insn3 = insn2;
7780                       insn2 = NOP;
7781                       rel[1].r_offset += 4;
7782                     }
7783                   bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - 2);
7784                   bfd_put_32 (output_bfd, insn2, contents + offset);
7785                   bfd_put_32 (output_bfd, insn3, contents + offset + 4);
7786                   if (tls_gd == 0 || toc_symndx != 0)
7787                     {
7788                       /* We changed the symbol.  Start over in order
7789                          to get h, sym, sec etc. right.  */
7790                       rel--;
7791                       continue;
7792                     }
7793                 }
7794             }
7795           break;
7796
7797         case R_PPC64_DTPMOD64:
7798           if (rel + 1 < relend
7799               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
7800               && rel[1].r_offset == rel->r_offset + 8)
7801             {
7802               if ((tls_mask & TLS_GD) == 0)
7803                 {
7804                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
7805                   if ((tls_mask & TLS_TPRELGD) != 0)
7806                     r_type = R_PPC64_TPREL64;
7807                   else
7808                     {
7809                       bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
7810                       r_type = R_PPC64_NONE;
7811                     }
7812                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7813                 }
7814             }
7815           else
7816             {
7817               if ((tls_mask & TLS_LD) == 0)
7818                 {
7819                   bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
7820                   r_type = R_PPC64_NONE;
7821                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7822                 }
7823             }
7824           break;
7825
7826         case R_PPC64_TPREL64:
7827           if ((tls_mask & TLS_TPREL) == 0)
7828             {
7829               r_type = R_PPC64_NONE;
7830               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
7831             }
7832           break;
7833         }
7834
7835       /* Handle other relocations that tweak non-addend part of insn.  */
7836       insn = 0;
7837       switch (r_type)
7838         {
7839         default:
7840           break;
7841
7842           /* Branch taken prediction relocations.  */
7843         case R_PPC64_ADDR14_BRTAKEN:
7844         case R_PPC64_REL14_BRTAKEN:
7845           insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
7846           /* Fall thru.  */
7847
7848           /* Branch not taken prediction relocations.  */
7849         case R_PPC64_ADDR14_BRNTAKEN:
7850         case R_PPC64_REL14_BRNTAKEN:
7851           insn |= bfd_get_32 (output_bfd,
7852                               contents + rel->r_offset) & ~(0x01 << 21);
7853           if (is_power4)
7854             {
7855               /* Set 'a' bit.  This is 0b00010 in BO field for branch
7856                  on CR(BI) insns (BO == 001at or 011at), and 0b01000
7857                  for branch on CTR insns (BO == 1a00t or 1a01t).  */
7858               if ((insn & (0x14 << 21)) == (0x04 << 21))
7859                 insn |= 0x02 << 21;
7860               else if ((insn & (0x14 << 21)) == (0x10 << 21))
7861                 insn |= 0x08 << 21;
7862               else
7863                 break;
7864             }
7865           else
7866             {
7867               from = (rel->r_offset
7868                       + input_section->output_offset
7869                       + input_section->output_section->vma);
7870
7871               /* Invert 'y' bit if not the default.  */
7872               if ((bfd_signed_vma) (relocation + rel->r_addend - from) < 0)
7873                 insn ^= 0x01 << 21;
7874             }
7875
7876           bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
7877           break;
7878
7879         case R_PPC64_REL24:
7880           /* Calls to functions with a different TOC, such as calls to
7881              shared objects, need to alter the TOC pointer.  This is
7882              done using a linkage stub.  A REL24 branching to these
7883              linkage stubs needs to be followed by a nop, as the nop
7884              will be replaced with an instruction to restore the TOC
7885              base pointer.  */
7886           if (((h != NULL
7887                 && (fdh = ((struct ppc_link_hash_entry *) h)->oh) != NULL
7888                 && fdh->plt.plist != NULL)
7889                || ((fdh = h, sec) != NULL
7890                    && sec->output_section != NULL
7891                    && (htab->stub_group[sec->id].toc_off
7892                        != htab->stub_group[input_section->id].toc_off)))
7893               && (stub_entry = ppc_get_stub_entry (input_section, sec, fdh,
7894                                                    rel, htab)) != NULL
7895               && (stub_entry->stub_type == ppc_stub_plt_call
7896                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
7897                   || stub_entry->stub_type == ppc_stub_long_branch_r2off))
7898             {
7899               bfd_boolean can_plt_call = 0;
7900
7901               if (rel->r_offset + 8 <= input_section->size)
7902                 {
7903                   insn = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
7904                   if (insn == NOP
7905                       || insn == CROR_151515 || insn == CROR_313131)
7906                     {
7907                       bfd_put_32 (input_bfd, LD_R2_40R1,
7908                                   contents + rel->r_offset + 4);
7909                       can_plt_call = 1;
7910                     }
7911                 }
7912
7913               if (!can_plt_call)
7914                 {
7915                   if (stub_entry->stub_type == ppc_stub_plt_call)
7916                     {
7917                       /* If this is a plain branch rather than a branch
7918                          and link, don't require a nop.  */
7919                       insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
7920                       if ((insn & 1) == 0)
7921                         can_plt_call = 1;
7922                     }
7923                   else if (h != NULL
7924                            && strcmp (h->root.root.string,
7925                                       ".__libc_start_main") == 0)
7926                     {
7927                       /* Allow crt1 branch to go via a toc adjusting stub.  */
7928                       can_plt_call = 1;
7929                     }
7930                   else
7931                     {
7932                       if (strcmp (input_section->output_section->name,
7933                                   ".init") == 0
7934                           || strcmp (input_section->output_section->name,
7935                                      ".fini") == 0)
7936                         (*_bfd_error_handler)
7937                           (_("%s(%s+0x%lx): automatic multiple TOCs "
7938                              "not supported using your crt files; "
7939                              "recompile with -mminimal-toc or upgrade gcc"),
7940                            bfd_archive_filename (input_bfd),
7941                            input_section->name,
7942                            (long) rel->r_offset);
7943                       else
7944                         (*_bfd_error_handler)
7945                           (_("%s(%s+0x%lx): sibling call optimization to `%s' "
7946                              "does not allow automatic multiple TOCs; "
7947                              "recompile with -mminimal-toc or "
7948                              "-fno-optimize-sibling-calls, "
7949                              "or make `%s' extern"),
7950                            bfd_archive_filename (input_bfd),
7951                            input_section->name,
7952                            (long) rel->r_offset,
7953                            sym_name,
7954                            sym_name);
7955                       bfd_set_error (bfd_error_bad_value);
7956                       ret = FALSE;
7957                     }
7958                 }
7959
7960               if (can_plt_call)
7961                 {
7962                   relocation = (stub_entry->stub_offset
7963                                 + stub_entry->stub_sec->output_offset
7964                                 + stub_entry->stub_sec->output_section->vma);
7965                   if (stub_entry->stub_type == ppc_stub_plt_call)
7966                     unresolved_reloc = FALSE;
7967                 }
7968             }
7969
7970           if (h != NULL
7971               && h->root.type == bfd_link_hash_undefweak
7972               && relocation == 0
7973               && rel->r_addend == 0)
7974             {
7975               /* Tweak calls to undefined weak functions to point at a
7976                  blr.  We can thus call a weak function without first
7977                  checking whether the function is defined.  We have a
7978                  blr at the end of .sfpr.  */
7979               BFD_ASSERT (htab->sfpr->size != 0);
7980               relocation = (htab->sfpr->size - 4
7981                             + htab->sfpr->output_offset
7982                             + htab->sfpr->output_section->vma);
7983               from = (rel->r_offset
7984                       + input_section->output_offset
7985                       + input_section->output_section->vma);
7986
7987               /* But let's not be silly about it.  If the blr isn't in
7988                  reach, just go to the next instruction.  */
7989               if (relocation - from + (1 << 25) >= (1 << 26)
7990                   || htab->sfpr->size == 0)
7991                 relocation = from + 4;
7992             }
7993           break;
7994         }
7995
7996       /* Set `addend'.  */
7997       tls_type = 0;
7998       addend = rel->r_addend;
7999       switch (r_type)
8000         {
8001         default:
8002           (*_bfd_error_handler)
8003             (_("%s: unknown relocation type %d for symbol %s"),
8004              bfd_archive_filename (input_bfd), (int) r_type, sym_name);
8005
8006           bfd_set_error (bfd_error_bad_value);
8007           ret = FALSE;
8008           continue;
8009
8010         case R_PPC64_NONE:
8011         case R_PPC64_TLS:
8012         case R_PPC64_GNU_VTINHERIT:
8013         case R_PPC64_GNU_VTENTRY:
8014           continue;
8015
8016           /* GOT16 relocations.  Like an ADDR16 using the symbol's
8017              address in the GOT as relocation value instead of the
8018              symbol's value itself.  Also, create a GOT entry for the
8019              symbol and put the symbol value there.  */
8020         case R_PPC64_GOT_TLSGD16:
8021         case R_PPC64_GOT_TLSGD16_LO:
8022         case R_PPC64_GOT_TLSGD16_HI:
8023         case R_PPC64_GOT_TLSGD16_HA:
8024           tls_type = TLS_TLS | TLS_GD;
8025           goto dogot;
8026
8027         case R_PPC64_GOT_TLSLD16:
8028         case R_PPC64_GOT_TLSLD16_LO:
8029         case R_PPC64_GOT_TLSLD16_HI:
8030         case R_PPC64_GOT_TLSLD16_HA:
8031           tls_type = TLS_TLS | TLS_LD;
8032           goto dogot;
8033
8034         case R_PPC64_GOT_TPREL16_DS:
8035         case R_PPC64_GOT_TPREL16_LO_DS:
8036         case R_PPC64_GOT_TPREL16_HI:
8037         case R_PPC64_GOT_TPREL16_HA:
8038           tls_type = TLS_TLS | TLS_TPREL;
8039           goto dogot;
8040
8041         case R_PPC64_GOT_DTPREL16_DS:
8042         case R_PPC64_GOT_DTPREL16_LO_DS:
8043         case R_PPC64_GOT_DTPREL16_HI:
8044         case R_PPC64_GOT_DTPREL16_HA:
8045           tls_type = TLS_TLS | TLS_DTPREL;
8046           goto dogot;
8047
8048         case R_PPC64_GOT16:
8049         case R_PPC64_GOT16_LO:
8050         case R_PPC64_GOT16_HI:
8051         case R_PPC64_GOT16_HA:
8052         case R_PPC64_GOT16_DS:
8053         case R_PPC64_GOT16_LO_DS:
8054         dogot:
8055           {
8056             /* Relocation is to the entry for this symbol in the global
8057                offset table.  */
8058             asection *got;
8059             bfd_vma *offp;
8060             bfd_vma off;
8061             unsigned long indx = 0;
8062
8063             if (tls_type == (TLS_TLS | TLS_LD)
8064                 && (h == NULL
8065                     || !(h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)))
8066               offp = &ppc64_tlsld_got (input_bfd)->offset;
8067             else
8068               {
8069                 struct got_entry *ent;
8070
8071                 if (h != NULL)
8072                   {
8073                     bfd_boolean dyn = htab->elf.dynamic_sections_created;
8074                     if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
8075                         || (info->shared
8076                             && SYMBOL_REFERENCES_LOCAL (info, h)))
8077                       /* This is actually a static link, or it is a
8078                          -Bsymbolic link and the symbol is defined
8079                          locally, or the symbol was forced to be local
8080                          because of a version file.  */
8081                       ;
8082                     else
8083                       {
8084                         indx = h->dynindx;
8085                         unresolved_reloc = FALSE;
8086                       }
8087                     ent = h->got.glist;
8088                   }
8089                 else
8090                   {
8091                     if (local_got_ents == NULL)
8092                       abort ();
8093                     ent = local_got_ents[r_symndx];
8094                   }
8095
8096                 for (; ent != NULL; ent = ent->next)
8097                   if (ent->addend == rel->r_addend
8098                       && ent->owner == input_bfd
8099                       && ent->tls_type == tls_type)
8100                     break;
8101                 if (ent == NULL)
8102                   abort ();
8103                 offp = &ent->got.offset;
8104               }
8105
8106             got = ppc64_elf_tdata (input_bfd)->got;
8107             if (got == NULL)
8108               abort ();
8109
8110             /* The offset must always be a multiple of 8.  We use the
8111                least significant bit to record whether we have already
8112                processed this entry.  */
8113             off = *offp;
8114             if ((off & 1) != 0)
8115               off &= ~1;
8116             else
8117               {
8118                 /* Generate relocs for the dynamic linker, except in
8119                    the case of TLSLD where we'll use one entry per
8120                    module.  */
8121                 asection *relgot = ppc64_elf_tdata (input_bfd)->relgot;
8122
8123                 *offp = off | 1;
8124                 if ((info->shared || indx != 0)
8125                     && (h == NULL
8126                         || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8127                         || h->root.type != bfd_link_hash_undefweak))
8128                   {
8129                     outrel.r_offset = (got->output_section->vma
8130                                        + got->output_offset
8131                                        + off);
8132                     outrel.r_addend = rel->r_addend;
8133                     if (tls_type & (TLS_LD | TLS_GD))
8134                       {
8135                         outrel.r_addend = 0;
8136                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
8137                         if (tls_type == (TLS_TLS | TLS_GD))
8138                           {
8139                             loc = relgot->contents;
8140                             loc += (relgot->reloc_count++
8141                                     * sizeof (Elf64_External_Rela));
8142                             bfd_elf64_swap_reloca_out (output_bfd,
8143                                                        &outrel, loc);
8144                             outrel.r_offset += 8;
8145                             outrel.r_addend = rel->r_addend;
8146                             outrel.r_info
8147                               = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
8148                           }
8149                       }
8150                     else if (tls_type == (TLS_TLS | TLS_DTPREL))
8151                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
8152                     else if (tls_type == (TLS_TLS | TLS_TPREL))
8153                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
8154                     else if (indx == 0)
8155                       {
8156                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_RELATIVE);
8157
8158                         /* Write the .got section contents for the sake
8159                            of prelink.  */
8160                         loc = got->contents + off;
8161                         bfd_put_64 (output_bfd, outrel.r_addend + relocation,
8162                                     loc);
8163                       }
8164                     else
8165                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
8166
8167                     if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
8168                       {
8169                         outrel.r_addend += relocation;
8170                         if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
8171                           outrel.r_addend -= htab->elf.tls_sec->vma;
8172                       }
8173                     loc = relgot->contents;
8174                     loc += (relgot->reloc_count++
8175                             * sizeof (Elf64_External_Rela));
8176                     bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
8177                   }
8178
8179                 /* Init the .got section contents here if we're not
8180                    emitting a reloc.  */
8181                 else
8182                   {
8183                     relocation += rel->r_addend;
8184                     if (tls_type == (TLS_TLS | TLS_LD))
8185                       relocation = 1;
8186                     else if (tls_type != 0)
8187                       {
8188                         relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
8189                         if (tls_type == (TLS_TLS | TLS_TPREL))
8190                           relocation += DTP_OFFSET - TP_OFFSET;
8191
8192                         if (tls_type == (TLS_TLS | TLS_GD))
8193                           {
8194                             bfd_put_64 (output_bfd, relocation,
8195                                         got->contents + off + 8);
8196                             relocation = 1;
8197                           }
8198                       }
8199
8200                     bfd_put_64 (output_bfd, relocation,
8201                                 got->contents + off);
8202                   }
8203               }
8204
8205             if (off >= (bfd_vma) -2)
8206               abort ();
8207
8208             relocation = got->output_offset + off;
8209
8210             /* TOC base (r2) is TOC start plus 0x8000.  */
8211             addend = -TOC_BASE_OFF;
8212           }
8213           break;
8214
8215         case R_PPC64_PLT16_HA:
8216         case R_PPC64_PLT16_HI:
8217         case R_PPC64_PLT16_LO:
8218         case R_PPC64_PLT32:
8219         case R_PPC64_PLT64:
8220           /* Relocation is to the entry for this symbol in the
8221              procedure linkage table.  */
8222
8223           /* Resolve a PLT reloc against a local symbol directly,
8224              without using the procedure linkage table.  */
8225           if (h == NULL)
8226             break;
8227
8228           /* It's possible that we didn't make a PLT entry for this
8229              symbol.  This happens when statically linking PIC code,
8230              or when using -Bsymbolic.  Go find a match if there is a
8231              PLT entry.  */
8232           if (htab->plt != NULL)
8233             {
8234               struct plt_entry *ent;
8235               for (ent = h->plt.plist; ent != NULL; ent = ent->next)
8236                 if (ent->addend == rel->r_addend
8237                     && ent->plt.offset != (bfd_vma) -1)
8238                   {
8239                     relocation = (htab->plt->output_section->vma
8240                                   + htab->plt->output_offset
8241                                   + ent->plt.offset);
8242                     unresolved_reloc = FALSE;
8243                   }
8244             }
8245           break;
8246
8247         case R_PPC64_TOC:
8248           /* Relocation value is TOC base.  */
8249           relocation = TOCstart;
8250           if (r_symndx == 0)
8251             relocation += htab->stub_group[input_section->id].toc_off;
8252           else if (unresolved_reloc)
8253             ;
8254           else if (sec != NULL && sec->id <= htab->top_id)
8255             relocation += htab->stub_group[sec->id].toc_off;
8256           else
8257             unresolved_reloc = TRUE;
8258           goto dodyn2;
8259
8260           /* TOC16 relocs.  We want the offset relative to the TOC base,
8261              which is the address of the start of the TOC plus 0x8000.
8262              The TOC consists of sections .got, .toc, .tocbss, and .plt,
8263              in this order.  */
8264         case R_PPC64_TOC16:
8265         case R_PPC64_TOC16_LO:
8266         case R_PPC64_TOC16_HI:
8267         case R_PPC64_TOC16_DS:
8268         case R_PPC64_TOC16_LO_DS:
8269         case R_PPC64_TOC16_HA:
8270           addend -= TOCstart + htab->stub_group[input_section->id].toc_off;
8271           break;
8272
8273           /* Relocate against the beginning of the section.  */
8274         case R_PPC64_SECTOFF:
8275         case R_PPC64_SECTOFF_LO:
8276         case R_PPC64_SECTOFF_HI:
8277         case R_PPC64_SECTOFF_DS:
8278         case R_PPC64_SECTOFF_LO_DS:
8279         case R_PPC64_SECTOFF_HA:
8280           if (sec != NULL)
8281             addend -= sec->output_section->vma;
8282           break;
8283
8284         case R_PPC64_REL14:
8285         case R_PPC64_REL14_BRNTAKEN:
8286         case R_PPC64_REL14_BRTAKEN:
8287         case R_PPC64_REL24:
8288           break;
8289
8290         case R_PPC64_TPREL16:
8291         case R_PPC64_TPREL16_LO:
8292         case R_PPC64_TPREL16_HI:
8293         case R_PPC64_TPREL16_HA:
8294         case R_PPC64_TPREL16_DS:
8295         case R_PPC64_TPREL16_LO_DS:
8296         case R_PPC64_TPREL16_HIGHER:
8297         case R_PPC64_TPREL16_HIGHERA:
8298         case R_PPC64_TPREL16_HIGHEST:
8299         case R_PPC64_TPREL16_HIGHESTA:
8300           addend -= htab->elf.tls_sec->vma + TP_OFFSET;
8301           if (info->shared)
8302             /* The TPREL16 relocs shouldn't really be used in shared
8303                libs as they will result in DT_TEXTREL being set, but
8304                support them anyway.  */
8305             goto dodyn;
8306           break;
8307
8308         case R_PPC64_DTPREL16:
8309         case R_PPC64_DTPREL16_LO:
8310         case R_PPC64_DTPREL16_HI:
8311         case R_PPC64_DTPREL16_HA:
8312         case R_PPC64_DTPREL16_DS:
8313         case R_PPC64_DTPREL16_LO_DS:
8314         case R_PPC64_DTPREL16_HIGHER:
8315         case R_PPC64_DTPREL16_HIGHERA:
8316         case R_PPC64_DTPREL16_HIGHEST:
8317         case R_PPC64_DTPREL16_HIGHESTA:
8318           addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
8319           break;
8320
8321         case R_PPC64_DTPMOD64:
8322           relocation = 1;
8323           addend = 0;
8324           goto dodyn;
8325
8326         case R_PPC64_TPREL64:
8327           addend -= htab->elf.tls_sec->vma + TP_OFFSET;
8328           goto dodyn;
8329
8330         case R_PPC64_DTPREL64:
8331           addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
8332           /* Fall thru */
8333
8334           /* Relocations that may need to be propagated if this is a
8335              dynamic object.  */
8336         case R_PPC64_REL30:
8337         case R_PPC64_REL32:
8338         case R_PPC64_REL64:
8339         case R_PPC64_ADDR14:
8340         case R_PPC64_ADDR14_BRNTAKEN:
8341         case R_PPC64_ADDR14_BRTAKEN:
8342         case R_PPC64_ADDR16:
8343         case R_PPC64_ADDR16_DS:
8344         case R_PPC64_ADDR16_HA:
8345         case R_PPC64_ADDR16_HI:
8346         case R_PPC64_ADDR16_HIGHER:
8347         case R_PPC64_ADDR16_HIGHERA:
8348         case R_PPC64_ADDR16_HIGHEST:
8349         case R_PPC64_ADDR16_HIGHESTA:
8350         case R_PPC64_ADDR16_LO:
8351         case R_PPC64_ADDR16_LO_DS:
8352         case R_PPC64_ADDR24:
8353         case R_PPC64_ADDR32:
8354         case R_PPC64_ADDR64:
8355         case R_PPC64_UADDR16:
8356         case R_PPC64_UADDR32:
8357         case R_PPC64_UADDR64:
8358           /* r_symndx will be zero only for relocs against symbols
8359              from removed linkonce sections, or sections discarded by
8360              a linker script.  */
8361         dodyn:
8362           if (r_symndx == 0)
8363             break;
8364           /* Fall thru.  */
8365
8366         dodyn2:
8367           if ((input_section->flags & SEC_ALLOC) == 0)
8368             break;
8369
8370           if (NO_OPD_RELOCS && is_opd)
8371             break;
8372
8373           if ((info->shared
8374                && (h == NULL
8375                    || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8376                    || h->root.type != bfd_link_hash_undefweak)
8377                && (MUST_BE_DYN_RELOC (r_type)
8378                    || !SYMBOL_CALLS_LOCAL (info, h)))
8379               || (ELIMINATE_COPY_RELOCS
8380                   && !info->shared
8381                   && h != NULL
8382                   && h->dynindx != -1
8383                   && (h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
8384                   && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
8385                   && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0))
8386             {
8387               Elf_Internal_Rela outrel;
8388               bfd_boolean skip, relocate;
8389               asection *sreloc;
8390               bfd_byte *loc;
8391               bfd_vma out_off;
8392
8393               /* When generating a dynamic object, these relocations
8394                  are copied into the output file to be resolved at run
8395                  time.  */
8396
8397               skip = FALSE;
8398               relocate = FALSE;
8399
8400               out_off = _bfd_elf_section_offset (output_bfd, info,
8401                                                  input_section, rel->r_offset);
8402               if (out_off == (bfd_vma) -1)
8403                 skip = TRUE;
8404               else if (out_off == (bfd_vma) -2)
8405                 skip = TRUE, relocate = TRUE;
8406               out_off += (input_section->output_section->vma
8407                           + input_section->output_offset);
8408               outrel.r_offset = out_off;
8409               outrel.r_addend = rel->r_addend;
8410
8411               /* Optimize unaligned reloc use.  */
8412               if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
8413                   || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
8414                 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
8415               else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
8416                        || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
8417                 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
8418               else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
8419                        || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
8420                 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
8421
8422               if (skip)
8423                 memset (&outrel, 0, sizeof outrel);
8424               else if (!SYMBOL_REFERENCES_LOCAL (info, h)
8425                        && !is_opd
8426                        && r_type != R_PPC64_TOC)
8427                 outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
8428               else
8429                 {
8430                   /* This symbol is local, or marked to become local,
8431                      or this is an opd section reloc which must point
8432                      at a local function.  */
8433                   outrel.r_addend += relocation;
8434                   if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
8435                     {
8436                       if (is_opd && h != NULL)
8437                         {
8438                           /* Lie about opd entries.  This case occurs
8439                              when building shared libraries and we
8440                              reference a function in another shared
8441                              lib.  The same thing happens for a weak
8442                              definition in an application that's
8443                              overridden by a strong definition in a
8444                              shared lib.  (I believe this is a generic
8445                              bug in binutils handling of weak syms.)
8446                              In these cases we won't use the opd
8447                              entry in this lib.  */
8448                           unresolved_reloc = FALSE;
8449                         }
8450                       outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
8451
8452                       /* We need to relocate .opd contents for ld.so.
8453                          Prelink also wants simple and consistent rules
8454                          for relocs.  This make all RELATIVE relocs have
8455                          *r_offset equal to r_addend.  */
8456                       relocate = TRUE;
8457                     }
8458                   else
8459                     {
8460                       long indx = 0;
8461
8462                       if (bfd_is_abs_section (sec))
8463                         ;
8464                       else if (sec == NULL || sec->owner == NULL)
8465                         {
8466                           bfd_set_error (bfd_error_bad_value);
8467                           return FALSE;
8468                         }
8469                       else
8470                         {
8471                           asection *osec;
8472
8473                           osec = sec->output_section;
8474                           indx = elf_section_data (osec)->dynindx;
8475
8476                           /* We are turning this relocation into one
8477                              against a section symbol, so subtract out
8478                              the output section's address but not the
8479                              offset of the input section in the output
8480                              section.  */
8481                           outrel.r_addend -= osec->vma;
8482                         }
8483
8484                       outrel.r_info = ELF64_R_INFO (indx, r_type);
8485                     }
8486                 }
8487
8488               sreloc = elf_section_data (input_section)->sreloc;
8489               if (sreloc == NULL)
8490                 abort ();
8491
8492               loc = sreloc->contents;
8493               loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
8494               bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
8495
8496               /* If this reloc is against an external symbol, it will
8497                  be computed at runtime, so there's no need to do
8498                  anything now.  However, for the sake of prelink ensure
8499                  that the section contents are a known value.  */
8500               if (! relocate)
8501                 {
8502                   unresolved_reloc = FALSE;
8503                   /* The value chosen here is quite arbitrary as ld.so
8504                      ignores section contents except for the special
8505                      case of .opd where the contents might be accessed
8506                      before relocation.  Choose zero, as that won't
8507                      cause reloc overflow.  */
8508                   relocation = 0;
8509                   addend = 0;
8510                   /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
8511                      to improve backward compatibility with older
8512                      versions of ld.  */
8513                   if (r_type == R_PPC64_ADDR64)
8514                     addend = outrel.r_addend;
8515                   /* Adjust pc_relative relocs to have zero in *r_offset.  */
8516                   else if (ppc64_elf_howto_table[r_type]->pc_relative)
8517                     addend = (input_section->output_section->vma
8518                               + input_section->output_offset
8519                               + rel->r_offset);
8520                 }
8521             }
8522           break;
8523
8524         case R_PPC64_COPY:
8525         case R_PPC64_GLOB_DAT:
8526         case R_PPC64_JMP_SLOT:
8527         case R_PPC64_RELATIVE:
8528           /* We shouldn't ever see these dynamic relocs in relocatable
8529              files.  */
8530           /* Fall through.  */
8531
8532         case R_PPC64_PLTGOT16:
8533         case R_PPC64_PLTGOT16_DS:
8534         case R_PPC64_PLTGOT16_HA:
8535         case R_PPC64_PLTGOT16_HI:
8536         case R_PPC64_PLTGOT16_LO:
8537         case R_PPC64_PLTGOT16_LO_DS:
8538         case R_PPC64_PLTREL32:
8539         case R_PPC64_PLTREL64:
8540           /* These ones haven't been implemented yet.  */
8541
8542           (*_bfd_error_handler)
8543             (_("%s: relocation %s is not supported for symbol %s."),
8544              bfd_archive_filename (input_bfd),
8545              ppc64_elf_howto_table[r_type]->name, sym_name);
8546
8547           bfd_set_error (bfd_error_invalid_operation);
8548           ret = FALSE;
8549           continue;
8550         }
8551
8552       /* Do any further special processing.  */
8553       switch (r_type)
8554         {
8555         default:
8556           break;
8557
8558         case R_PPC64_ADDR16_HA:
8559         case R_PPC64_ADDR16_HIGHERA:
8560         case R_PPC64_ADDR16_HIGHESTA:
8561         case R_PPC64_GOT16_HA:
8562         case R_PPC64_PLTGOT16_HA:
8563         case R_PPC64_PLT16_HA:
8564         case R_PPC64_TOC16_HA:
8565         case R_PPC64_SECTOFF_HA:
8566         case R_PPC64_TPREL16_HA:
8567         case R_PPC64_DTPREL16_HA:
8568         case R_PPC64_GOT_TLSGD16_HA:
8569         case R_PPC64_GOT_TLSLD16_HA:
8570         case R_PPC64_GOT_TPREL16_HA:
8571         case R_PPC64_GOT_DTPREL16_HA:
8572         case R_PPC64_TPREL16_HIGHER:
8573         case R_PPC64_TPREL16_HIGHERA:
8574         case R_PPC64_TPREL16_HIGHEST:
8575         case R_PPC64_TPREL16_HIGHESTA:
8576         case R_PPC64_DTPREL16_HIGHER:
8577         case R_PPC64_DTPREL16_HIGHERA:
8578         case R_PPC64_DTPREL16_HIGHEST:
8579         case R_PPC64_DTPREL16_HIGHESTA:
8580           /* It's just possible that this symbol is a weak symbol
8581              that's not actually defined anywhere. In that case,
8582              'sec' would be NULL, and we should leave the symbol
8583              alone (it will be set to zero elsewhere in the link).  */
8584           if (sec != NULL)
8585             /* Add 0x10000 if sign bit in 0:15 is set.
8586                Bits 0:15 are not used.  */
8587             addend += 0x8000;
8588           break;
8589
8590         case R_PPC64_ADDR16_DS:
8591         case R_PPC64_ADDR16_LO_DS:
8592         case R_PPC64_GOT16_DS:
8593         case R_PPC64_GOT16_LO_DS:
8594         case R_PPC64_PLT16_LO_DS:
8595         case R_PPC64_SECTOFF_DS:
8596         case R_PPC64_SECTOFF_LO_DS:
8597         case R_PPC64_TOC16_DS:
8598         case R_PPC64_TOC16_LO_DS:
8599         case R_PPC64_PLTGOT16_DS:
8600         case R_PPC64_PLTGOT16_LO_DS:
8601         case R_PPC64_GOT_TPREL16_DS:
8602         case R_PPC64_GOT_TPREL16_LO_DS:
8603         case R_PPC64_GOT_DTPREL16_DS:
8604         case R_PPC64_GOT_DTPREL16_LO_DS:
8605         case R_PPC64_TPREL16_DS:
8606         case R_PPC64_TPREL16_LO_DS:
8607         case R_PPC64_DTPREL16_DS:
8608         case R_PPC64_DTPREL16_LO_DS:
8609           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
8610           mask = 3;
8611           /* If this reloc is against an lq insn, then the value must be
8612              a multiple of 16.  This is somewhat of a hack, but the
8613              "correct" way to do this by defining _DQ forms of all the
8614              _DS relocs bloats all reloc switches in this file.  It
8615              doesn't seem to make much sense to use any of these relocs
8616              in data, so testing the insn should be safe.  */
8617           if ((insn & (0x3f << 26)) == (56u << 26))
8618             mask = 15;
8619           if (((relocation + addend) & mask) != 0)
8620             {
8621               (*_bfd_error_handler)
8622                 (_("%s: error: relocation %s not a multiple of %d"),
8623                  bfd_archive_filename (input_bfd),
8624                  ppc64_elf_howto_table[r_type]->name,
8625                  mask + 1);
8626               bfd_set_error (bfd_error_bad_value);
8627               ret = FALSE;
8628               continue;
8629             }
8630           break;
8631
8632         case R_PPC64_REL14:
8633         case R_PPC64_REL14_BRNTAKEN:
8634         case R_PPC64_REL14_BRTAKEN:
8635           max_br_offset = 1 << 15;
8636           goto branch_check;
8637
8638         case R_PPC64_REL24:
8639           max_br_offset = 1 << 25;
8640
8641         branch_check:
8642           /* If the branch is out of reach or the TOC register needs
8643              adjusting, then redirect the call to the local stub for
8644              this function.  */
8645           from = (rel->r_offset
8646                   + input_section->output_offset
8647                   + input_section->output_section->vma);
8648           if ((relocation + addend - from + max_br_offset >= 2 * max_br_offset
8649                || (sec != NULL
8650                    && sec->output_section != NULL
8651                    && sec->id <= htab->top_id
8652                    && (htab->stub_group[sec->id].toc_off
8653                        != htab->stub_group[input_section->id].toc_off)))
8654               && (stub_entry = ppc_get_stub_entry (input_section, sec, h,
8655                                                    rel, htab)) != NULL)
8656             {
8657               /* Munge up the value and addend so that we call the stub
8658                  rather than the procedure directly.  */
8659               relocation = (stub_entry->stub_offset
8660                             + stub_entry->stub_sec->output_offset
8661                             + stub_entry->stub_sec->output_section->vma);
8662               addend = 0;
8663             }
8664           break;
8665         }
8666
8667       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
8668          because such sections are not SEC_ALLOC and thus ld.so will
8669          not process them.  */
8670       if (unresolved_reloc
8671           && !((input_section->flags & SEC_DEBUGGING) != 0
8672                && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0))
8673         {
8674           (*_bfd_error_handler)
8675             (_("%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'"),
8676              bfd_archive_filename (input_bfd),
8677              bfd_get_section_name (input_bfd, input_section),
8678              (long) rel->r_offset,
8679              ppc64_elf_howto_table[(int) r_type]->name,
8680              h->root.root.string);
8681           ret = FALSE;
8682         }
8683
8684       r = _bfd_final_link_relocate (ppc64_elf_howto_table[(int) r_type],
8685                                     input_bfd,
8686                                     input_section,
8687                                     contents,
8688                                     rel->r_offset,
8689                                     relocation,
8690                                     addend);
8691
8692       if (r != bfd_reloc_ok)
8693         {
8694           if (sym_name == NULL)
8695             sym_name = "(null)";
8696           if (r == bfd_reloc_overflow)
8697             {
8698               if (warned)
8699                 continue;
8700               if (h != NULL
8701                   && h->root.type == bfd_link_hash_undefweak
8702                   && ppc64_elf_howto_table[r_type]->pc_relative)
8703                 {
8704                   /* Assume this is a call protected by other code that
8705                      detects the symbol is undefined.  If this is the case,
8706                      we can safely ignore the overflow.  If not, the
8707                      program is hosed anyway, and a little warning isn't
8708                      going to help.  */
8709
8710                   continue;
8711                 }
8712
8713               if (!((*info->callbacks->reloc_overflow)
8714                     (info, sym_name, ppc64_elf_howto_table[r_type]->name,
8715                      rel->r_addend, input_bfd, input_section, rel->r_offset)))
8716                 return FALSE;
8717             }
8718           else
8719             {
8720               (*_bfd_error_handler)
8721                 (_("%s(%s+0x%lx): %s reloc against `%s': error %d"),
8722                  bfd_archive_filename (input_bfd),
8723                  bfd_get_section_name (input_bfd, input_section),
8724                  (long) rel->r_offset,
8725                  ppc64_elf_howto_table[r_type]->name,
8726                  sym_name,
8727                  (int) r);
8728               ret = FALSE;
8729             }
8730         }
8731     }
8732
8733   return ret;
8734 }
8735
8736 /* Adjust the value of any local symbols in opd sections.  */
8737
8738 static bfd_boolean
8739 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
8740                               const char *name ATTRIBUTE_UNUSED,
8741                               Elf_Internal_Sym *elfsym,
8742                               asection *input_sec,
8743                               struct elf_link_hash_entry *h)
8744 {
8745   long *adjust;
8746   bfd_vma value;
8747
8748   if (h != NULL
8749       || input_sec == NULL
8750       || ppc64_elf_section_data (input_sec) == NULL
8751       || (adjust = ppc64_elf_section_data (input_sec)->opd.adjust) == NULL)
8752     return TRUE;
8753
8754   value = elfsym->st_value - input_sec->output_offset;
8755   if (!info->relocatable)
8756     value -= input_sec->output_section->vma;
8757
8758   elfsym->st_value += adjust[value / 24];
8759   return TRUE;
8760 }
8761
8762 /* Finish up dynamic symbol handling.  We set the contents of various
8763    dynamic sections here.  */
8764
8765 static bfd_boolean
8766 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
8767                                  struct bfd_link_info *info,
8768                                  struct elf_link_hash_entry *h,
8769                                  Elf_Internal_Sym *sym)
8770 {
8771   struct ppc_link_hash_table *htab;
8772   bfd *dynobj;
8773
8774   htab = ppc_hash_table (info);
8775   dynobj = htab->elf.dynobj;
8776
8777   if (((struct ppc_link_hash_entry *) h)->is_func_descriptor)
8778     {
8779       struct plt_entry *ent;
8780       Elf_Internal_Rela rela;
8781       bfd_byte *loc;
8782
8783       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
8784         if (ent->plt.offset != (bfd_vma) -1)
8785           {
8786             /* This symbol has an entry in the procedure linkage
8787                table.  Set it up.  */
8788
8789             if (htab->plt == NULL
8790                 || htab->relplt == NULL
8791                 || htab->glink == NULL)
8792               abort ();
8793
8794             /* Create a JMP_SLOT reloc to inform the dynamic linker to
8795                fill in the PLT entry.  */
8796             rela.r_offset = (htab->plt->output_section->vma
8797                              + htab->plt->output_offset
8798                              + ent->plt.offset);
8799             rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
8800             rela.r_addend = ent->addend;
8801
8802             loc = htab->relplt->contents;
8803             loc += ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE
8804                     * sizeof (Elf64_External_Rela));
8805             bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
8806           }
8807     }
8808
8809   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_COPY) != 0)
8810     {
8811       Elf_Internal_Rela rela;
8812       bfd_byte *loc;
8813
8814       /* This symbol needs a copy reloc.  Set it up.  */
8815
8816       if (h->dynindx == -1
8817           || (h->root.type != bfd_link_hash_defined
8818               && h->root.type != bfd_link_hash_defweak)
8819           || htab->relbss == NULL)
8820         abort ();
8821
8822       rela.r_offset = (h->root.u.def.value
8823                        + h->root.u.def.section->output_section->vma
8824                        + h->root.u.def.section->output_offset);
8825       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
8826       rela.r_addend = 0;
8827       loc = htab->relbss->contents;
8828       loc += htab->relbss->reloc_count++ * sizeof (Elf64_External_Rela);
8829       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
8830     }
8831
8832   /* Mark some specially defined symbols as absolute.  */
8833   if (strcmp (h->root.root.string, "_DYNAMIC") == 0)
8834     sym->st_shndx = SHN_ABS;
8835
8836   return TRUE;
8837 }
8838
8839 /* Used to decide how to sort relocs in an optimal manner for the
8840    dynamic linker, before writing them out.  */
8841
8842 static enum elf_reloc_type_class
8843 ppc64_elf_reloc_type_class (const Elf_Internal_Rela *rela)
8844 {
8845   enum elf_ppc64_reloc_type r_type;
8846
8847   r_type = ELF64_R_TYPE (rela->r_info);
8848   switch (r_type)
8849     {
8850     case R_PPC64_RELATIVE:
8851       return reloc_class_relative;
8852     case R_PPC64_JMP_SLOT:
8853       return reloc_class_plt;
8854     case R_PPC64_COPY:
8855       return reloc_class_copy;
8856     default:
8857       return reloc_class_normal;
8858     }
8859 }
8860
8861 /* Finish up the dynamic sections.  */
8862
8863 static bfd_boolean
8864 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
8865                                    struct bfd_link_info *info)
8866 {
8867   struct ppc_link_hash_table *htab;
8868   bfd *dynobj;
8869   asection *sdyn;
8870
8871   htab = ppc_hash_table (info);
8872   dynobj = htab->elf.dynobj;
8873   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
8874
8875   if (htab->elf.dynamic_sections_created)
8876     {
8877       Elf64_External_Dyn *dyncon, *dynconend;
8878
8879       if (sdyn == NULL || htab->got == NULL)
8880         abort ();
8881
8882       dyncon = (Elf64_External_Dyn *) sdyn->contents;
8883       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
8884       for (; dyncon < dynconend; dyncon++)
8885         {
8886           Elf_Internal_Dyn dyn;
8887           asection *s;
8888
8889           bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
8890
8891           switch (dyn.d_tag)
8892             {
8893             default:
8894               continue;
8895
8896             case DT_PPC64_GLINK:
8897               s = htab->glink;
8898               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
8899               /* We stupidly defined DT_PPC64_GLINK to be the start
8900                  of glink rather than the first entry point, which is
8901                  what ld.so needs, and now have a bigger stub to
8902                  support automatic multiple TOCs.  */
8903               dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 32;
8904               break;
8905
8906             case DT_PPC64_OPD:
8907               s = bfd_get_section_by_name (output_bfd, ".opd");
8908               if (s == NULL)
8909                 continue;
8910               dyn.d_un.d_ptr = s->vma;
8911               break;
8912
8913             case DT_PPC64_OPDSZ:
8914               s = bfd_get_section_by_name (output_bfd, ".opd");
8915               if (s == NULL)
8916                 continue;
8917               dyn.d_un.d_val = s->size;
8918               break;
8919
8920             case DT_PLTGOT:
8921               s = htab->plt;
8922               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
8923               break;
8924
8925             case DT_JMPREL:
8926               s = htab->relplt;
8927               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
8928               break;
8929
8930             case DT_PLTRELSZ:
8931               dyn.d_un.d_val = htab->relplt->size;
8932               break;
8933
8934             case DT_RELASZ:
8935               /* Don't count procedure linkage table relocs in the
8936                  overall reloc count.  */
8937               s = htab->relplt;
8938               if (s == NULL)
8939                 continue;
8940               dyn.d_un.d_val -= s->size;
8941               break;
8942
8943             case DT_RELA:
8944               /* We may not be using the standard ELF linker script.
8945                  If .rela.plt is the first .rela section, we adjust
8946                  DT_RELA to not include it.  */
8947               s = htab->relplt;
8948               if (s == NULL)
8949                 continue;
8950               if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset)
8951                 continue;
8952               dyn.d_un.d_ptr += s->size;
8953               break;
8954             }
8955
8956           bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
8957         }
8958     }
8959
8960   if (htab->got != NULL && htab->got->size != 0)
8961     {
8962       /* Fill in the first entry in the global offset table.
8963          We use it to hold the link-time TOCbase.  */
8964       bfd_put_64 (output_bfd,
8965                   elf_gp (output_bfd) + TOC_BASE_OFF,
8966                   htab->got->contents);
8967
8968       /* Set .got entry size.  */
8969       elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 8;
8970     }
8971
8972   if (htab->plt != NULL && htab->plt->size != 0)
8973     {
8974       /* Set .plt entry size.  */
8975       elf_section_data (htab->plt->output_section)->this_hdr.sh_entsize
8976         = PLT_ENTRY_SIZE;
8977     }
8978
8979   /* We need to handle writing out multiple GOT sections ourselves,
8980      since we didn't add them to DYNOBJ.  */
8981   while ((dynobj = dynobj->link_next) != NULL)
8982     {
8983       asection *s;
8984       s = ppc64_elf_tdata (dynobj)->got;
8985       if (s != NULL
8986           && s->size != 0
8987           && s->output_section != bfd_abs_section_ptr
8988           && !bfd_set_section_contents (output_bfd, s->output_section,
8989                                         s->contents, s->output_offset,
8990                                         s->size))
8991         return FALSE;
8992       s = ppc64_elf_tdata (dynobj)->relgot;
8993       if (s != NULL
8994           && s->size != 0
8995           && s->output_section != bfd_abs_section_ptr
8996           && !bfd_set_section_contents (output_bfd, s->output_section,
8997                                         s->contents, s->output_offset,
8998                                         s->size))
8999         return FALSE;
9000     }
9001
9002   return TRUE;
9003 }
9004
9005 #include "elf64-target.h"
This page took 0.536205 seconds and 4 git commands to generate.