[PowerPC64] correct tprel offset limit
[external/binutils.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright (C) 1999-2019 Free Software Foundation, Inc.
3    Written by Linus Nordberg, Swox AB <info@swox.com>,
4    based on elf32-ppc.c by Ian Lance Taylor.
5    Largely rewritten by Alan Modra.
6
7    This file is part of BFD, the Binary File Descriptor library.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License along
20    with this program; if not, write to the Free Software Foundation, Inc.,
21    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
22
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 "sysdep.h"
29 #include <stdarg.h>
30 #include "bfd.h"
31 #include "bfdlink.h"
32 #include "libbfd.h"
33 #include "elf-bfd.h"
34 #include "elf/ppc64.h"
35 #include "elf64-ppc.h"
36 #include "dwarf2.h"
37
38 static bfd_reloc_status_type ppc64_elf_ha_reloc
39   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
40 static bfd_reloc_status_type ppc64_elf_branch_reloc
41   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
42 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
43   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
44 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
45   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
46 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
47   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
48 static bfd_reloc_status_type ppc64_elf_toc_reloc
49   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
50 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
51   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
52 static bfd_reloc_status_type ppc64_elf_toc64_reloc
53   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
54 static bfd_reloc_status_type ppc64_elf_prefix_reloc
55   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
56 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
57   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
58 static bfd_vma opd_entry_value
59   (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
60
61 #define TARGET_LITTLE_SYM       powerpc_elf64_le_vec
62 #define TARGET_LITTLE_NAME      "elf64-powerpcle"
63 #define TARGET_BIG_SYM          powerpc_elf64_vec
64 #define TARGET_BIG_NAME         "elf64-powerpc"
65 #define ELF_ARCH                bfd_arch_powerpc
66 #define ELF_TARGET_ID           PPC64_ELF_DATA
67 #define ELF_MACHINE_CODE        EM_PPC64
68 #define ELF_MAXPAGESIZE         0x10000
69 #define ELF_COMMONPAGESIZE      0x1000
70 #define ELF_RELROPAGESIZE       ELF_MAXPAGESIZE
71 #define elf_info_to_howto       ppc64_elf_info_to_howto
72
73 #define elf_backend_want_got_sym 0
74 #define elf_backend_want_plt_sym 0
75 #define elf_backend_plt_alignment 3
76 #define elf_backend_plt_not_loaded 1
77 #define elf_backend_got_header_size 8
78 #define elf_backend_want_dynrelro 1
79 #define elf_backend_can_gc_sections 1
80 #define elf_backend_can_refcount 1
81 #define elf_backend_rela_normal 1
82 #define elf_backend_dtrel_excludes_plt 1
83 #define elf_backend_default_execstack 0
84
85 #define bfd_elf64_mkobject                    ppc64_elf_mkobject
86 #define bfd_elf64_bfd_reloc_type_lookup       ppc64_elf_reloc_type_lookup
87 #define bfd_elf64_bfd_reloc_name_lookup       ppc64_elf_reloc_name_lookup
88 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
89 #define bfd_elf64_bfd_print_private_bfd_data  ppc64_elf_print_private_bfd_data
90 #define bfd_elf64_new_section_hook            ppc64_elf_new_section_hook
91 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
92 #define bfd_elf64_get_synthetic_symtab        ppc64_elf_get_synthetic_symtab
93 #define bfd_elf64_bfd_link_just_syms          ppc64_elf_link_just_syms
94 #define bfd_elf64_bfd_gc_sections             ppc64_elf_gc_sections
95
96 #define elf_backend_object_p                  ppc64_elf_object_p
97 #define elf_backend_grok_prstatus             ppc64_elf_grok_prstatus
98 #define elf_backend_grok_psinfo               ppc64_elf_grok_psinfo
99 #define elf_backend_write_core_note           ppc64_elf_write_core_note
100 #define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
101 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
102 #define elf_backend_add_symbol_hook           ppc64_elf_add_symbol_hook
103 #define elf_backend_check_directives          ppc64_elf_before_check_relocs
104 #define elf_backend_notice_as_needed          ppc64_elf_notice_as_needed
105 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
106 #define elf_backend_check_relocs              ppc64_elf_check_relocs
107 #define elf_backend_relocs_compatible         _bfd_elf_relocs_compatible
108 #define elf_backend_gc_keep                   ppc64_elf_gc_keep
109 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
110 #define elf_backend_gc_mark_hook              ppc64_elf_gc_mark_hook
111 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
112 #define elf_backend_hide_symbol               ppc64_elf_hide_symbol
113 #define elf_backend_maybe_function_sym        ppc64_elf_maybe_function_sym
114 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
115 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
116 #define elf_backend_hash_symbol               ppc64_elf_hash_symbol
117 #define elf_backend_init_index_section        _bfd_elf_init_2_index_sections
118 #define elf_backend_action_discarded          ppc64_elf_action_discarded
119 #define elf_backend_relocate_section          ppc64_elf_relocate_section
120 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
121 #define elf_backend_reloc_type_class          ppc64_elf_reloc_type_class
122 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
123 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
124 #define elf_backend_special_sections          ppc64_elf_special_sections
125 #define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
126 #define elf_backend_merge_symbol              ppc64_elf_merge_symbol
127 #define elf_backend_get_reloc_section         bfd_get_section_by_name
128
129 /* The name of the dynamic interpreter.  This is put in the .interp
130    section.  */
131 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
132
133 /* The size in bytes of an entry in the procedure linkage table.  */
134 #define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
135 #define LOCAL_PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 16 : 8)
136
137 /* The initial size of the plt reserved for the dynamic linker.  */
138 #define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
139
140 /* Offsets to some stack save slots.  */
141 #define STK_LR 16
142 #define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
143 /* This one is dodgy.  ELFv2 does not have a linker word, so use the
144    CR save slot.  Used only by optimised __tls_get_addr call stub,
145    relying on __tls_get_addr_opt not saving CR..  */
146 #define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
147
148 /* TOC base pointers offset from start of TOC.  */
149 #define TOC_BASE_OFF    0x8000
150 /* TOC base alignment.  */
151 #define TOC_BASE_ALIGN  256
152
153 /* Offset of tp and dtp pointers from start of TLS block.  */
154 #define TP_OFFSET       0x7000
155 #define DTP_OFFSET      0x8000
156
157 /* .plt call stub instructions.  The normal stub is like this, but
158    sometimes the .plt entry crosses a 64k boundary and we need to
159    insert an addi to adjust r11.  */
160 #define STD_R2_0R1      0xf8410000      /* std   %r2,0+40(%r1)       */
161 #define ADDIS_R11_R2    0x3d620000      /* addis %r11,%r2,xxx@ha     */
162 #define LD_R12_0R11     0xe98b0000      /* ld    %r12,xxx+0@l(%r11)  */
163 #define MTCTR_R12       0x7d8903a6      /* mtctr %r12                */
164 #define LD_R2_0R11      0xe84b0000      /* ld    %r2,xxx+8@l(%r11)   */
165 #define LD_R11_0R11     0xe96b0000      /* ld    %r11,xxx+16@l(%r11) */
166 #define BCTR            0x4e800420      /* bctr                      */
167
168 #define ADDI_R11_R11    0x396b0000      /* addi %r11,%r11,off@l  */
169 #define ADDI_R12_R11    0x398b0000      /* addi %r12,%r11,off@l  */
170 #define ADDI_R12_R12    0x398c0000      /* addi %r12,%r12,off@l  */
171 #define ADDIS_R2_R2     0x3c420000      /* addis %r2,%r2,off@ha  */
172 #define ADDI_R2_R2      0x38420000      /* addi  %r2,%r2,off@l   */
173
174 #define XOR_R2_R12_R12  0x7d826278      /* xor   %r2,%r12,%r12   */
175 #define ADD_R11_R11_R2  0x7d6b1214      /* add   %r11,%r11,%r2   */
176 #define XOR_R11_R12_R12 0x7d8b6278      /* xor   %r11,%r12,%r12  */
177 #define ADD_R2_R2_R11   0x7c425a14      /* add   %r2,%r2,%r11    */
178 #define CMPLDI_R2_0     0x28220000      /* cmpldi %r2,0          */
179 #define BNECTR          0x4ca20420      /* bnectr+               */
180 #define BNECTR_P4       0x4ce20420      /* bnectr+               */
181
182 #define LD_R12_0R2      0xe9820000      /* ld    %r12,xxx+0(%r2) */
183 #define LD_R11_0R2      0xe9620000      /* ld    %r11,xxx+0(%r2) */
184 #define LD_R2_0R2       0xe8420000      /* ld    %r2,xxx+0(%r2)  */
185
186 #define LD_R2_0R1       0xe8410000      /* ld    %r2,0(%r1)      */
187 #define LD_R2_0R12      0xe84c0000      /* ld    %r2,0(%r12)     */
188 #define ADD_R2_R2_R12   0x7c426214      /* add   %r2,%r2,%r12    */
189
190 #define LI_R11_0        0x39600000      /* li    %r11,0         */
191 #define LIS_R2          0x3c400000      /* lis %r2,xxx@ha         */
192 #define LIS_R11         0x3d600000      /* lis %r11,xxx@ha        */
193 #define LIS_R12         0x3d800000      /* lis %r12,xxx@ha        */
194 #define ADDIS_R2_R12    0x3c4c0000      /* addis %r2,%r12,xxx@ha  */
195 #define ADDIS_R12_R2    0x3d820000      /* addis %r12,%r2,xxx@ha  */
196 #define ADDIS_R12_R11   0x3d8b0000      /* addis %r12,%r11,xxx@ha */
197 #define ADDIS_R12_R12   0x3d8c0000      /* addis %r12,%r12,xxx@ha */
198 #define ORIS_R12_R12_0  0x658c0000      /* oris  %r12,%r12,xxx@hi */
199 #define ORI_R11_R11_0   0x616b0000      /* ori   %r11,%r11,xxx@l  */
200 #define ORI_R12_R12_0   0x618c0000      /* ori   %r12,%r12,xxx@l  */
201 #define LD_R12_0R12     0xe98c0000      /* ld    %r12,xxx@l(%r12) */
202 #define SLDI_R11_R11_34 0x796b1746      /* sldi  %r11,%r11,34     */
203 #define SLDI_R12_R12_32 0x799c07c6      /* sldi  %r12,%r12,32     */
204 #define LDX_R12_R11_R12 0x7d8b602a      /* ldx   %r12,%r11,%r12   */
205 #define ADD_R12_R11_R12 0x7d8b6214      /* add   %r12,%r11,%r12   */
206 #define PADDI_R12_PC    0x0610000039800000ULL
207 #define PLD_R12_PC      0x04100000e5800000ULL
208 #define PNOP            0x0700000000000000ULL
209
210 /* __glink_PLTresolve stub instructions.  We enter with the index in R0.  */
211 #define GLINK_PLTRESOLVE_SIZE(htab)                     \
212   (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
213                                         /* 0:                           */
214                                         /*  .quad plt0-1f               */
215                                         /* __glink:                     */
216 #define MFLR_R12        0x7d8802a6      /*  mflr %12                    */
217 #define BCL_20_31       0x429f0005      /*  bcl 20,31,1f                */
218                                         /* 1:                           */
219 #define MFLR_R11        0x7d6802a6      /*  mflr %11                    */
220                                         /*  ld %2,(0b-1b)(%11)          */
221 #define MTLR_R12        0x7d8803a6      /*  mtlr %12                    */
222 #define ADD_R11_R2_R11  0x7d625a14      /*  add %11,%2,%11              */
223                                         /*  ld %12,0(%11)               */
224                                         /*  ld %2,8(%11)                */
225                                         /*  mtctr %12                   */
226                                         /*  ld %11,16(%11)              */
227                                         /*  bctr                        */
228 #define MFLR_R0         0x7c0802a6      /*  mflr %r0                    */
229 #define MTLR_R0         0x7c0803a6      /*  mtlr %r0                    */
230 #define SUB_R12_R12_R11 0x7d8b6050      /*  subf %r12,%r11,%r12         */
231 #define ADDI_R0_R12     0x380c0000      /*  addi %r0,%r12,0             */
232 #define SRDI_R0_R0_2    0x7800f082      /*  rldicl %r0,%r0,62,2         */
233
234 /* Pad with this.  */
235 #define NOP             0x60000000
236
237 /* Some other nops.  */
238 #define CROR_151515     0x4def7b82
239 #define CROR_313131     0x4ffffb82
240
241 /* .glink entries for the first 32k functions are two instructions.  */
242 #define LI_R0_0         0x38000000      /* li    %r0,0          */
243 #define B_DOT           0x48000000      /* b     .              */
244
245 /* After that, we need two instructions to load the index, followed by
246    a branch.  */
247 #define LIS_R0_0        0x3c000000      /* lis   %r0,0          */
248 #define ORI_R0_R0_0     0x60000000      /* ori   %r0,%r0,0      */
249
250 /* Instructions used by the save and restore reg functions.  */
251 #define STD_R0_0R1      0xf8010000      /* std   %r0,0(%r1)     */
252 #define STD_R0_0R12     0xf80c0000      /* std   %r0,0(%r12)    */
253 #define LD_R0_0R1       0xe8010000      /* ld    %r0,0(%r1)     */
254 #define LD_R0_0R12      0xe80c0000      /* ld    %r0,0(%r12)    */
255 #define STFD_FR0_0R1    0xd8010000      /* stfd  %fr0,0(%r1)    */
256 #define LFD_FR0_0R1     0xc8010000      /* lfd   %fr0,0(%r1)    */
257 #define LI_R12_0        0x39800000      /* li    %r12,0         */
258 #define STVX_VR0_R12_R0 0x7c0c01ce      /* stvx  %v0,%r12,%r0   */
259 #define LVX_VR0_R12_R0  0x7c0c00ce      /* lvx   %v0,%r12,%r0   */
260 #define MTLR_R0         0x7c0803a6      /* mtlr  %r0            */
261 #define BLR             0x4e800020      /* blr                  */
262
263 /* Since .opd is an array of descriptors and each entry will end up
264    with identical R_PPC64_RELATIVE relocs, there is really no need to
265    propagate .opd relocs;  The dynamic linker should be taught to
266    relocate .opd without reloc entries.  */
267 #ifndef NO_OPD_RELOCS
268 #define NO_OPD_RELOCS 0
269 #endif
270
271 #ifndef ARRAY_SIZE
272 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
273 #endif
274
275 static inline int
276 abiversion (bfd *abfd)
277 {
278   return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
279 }
280
281 static inline void
282 set_abiversion (bfd *abfd, int ver)
283 {
284   elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
285   elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
286 }
287 \f
288 /* Relocation HOWTO's.  */
289 /* Like other ELF RELA targets that don't apply multiple
290    field-altering relocations to the same localation, src_mask is
291    always zero and pcrel_offset is the same as pc_relative.
292    PowerPC can always use a zero bitpos, even when the field is not at
293    the LSB.  For example, a REL24 could use rightshift=2, bisize=24
294    and bitpos=2 which matches the ABI description, or as we do here,
295    rightshift=0, bitsize=26 and bitpos=0.  */
296 #define HOW(type, size, bitsize, mask, rightshift, pc_relative, \
297             complain, special_func)                             \
298   HOWTO (type, rightshift, size, bitsize, pc_relative, 0,       \
299          complain_overflow_ ## complain, special_func,          \
300          #type, FALSE, 0, mask, pc_relative)
301
302 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
303
304 static reloc_howto_type ppc64_elf_howto_raw[] =
305 {
306   /* This reloc does nothing.  */
307   HOW (R_PPC64_NONE, 3, 0, 0, 0, FALSE, dont,
308        bfd_elf_generic_reloc),
309
310   /* A standard 32 bit relocation.  */
311   HOW (R_PPC64_ADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
312        bfd_elf_generic_reloc),
313
314   /* An absolute 26 bit branch; the lower two bits must be zero.
315      FIXME: we don't check that, we just clear them.  */
316   HOW (R_PPC64_ADDR24, 2, 26, 0x03fffffc, 0, FALSE, bitfield,
317        bfd_elf_generic_reloc),
318
319   /* A standard 16 bit relocation.  */
320   HOW (R_PPC64_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
321        bfd_elf_generic_reloc),
322
323   /* A 16 bit relocation without overflow.  */
324   HOW (R_PPC64_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
325        bfd_elf_generic_reloc),
326
327   /* Bits 16-31 of an address.  */
328   HOW (R_PPC64_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, signed,
329        bfd_elf_generic_reloc),
330
331   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
332      bits, treated as a signed number, is negative.  */
333   HOW (R_PPC64_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, signed,
334        ppc64_elf_ha_reloc),
335
336   /* An absolute 16 bit branch; the lower two bits must be zero.
337      FIXME: we don't check that, we just clear them.  */
338   HOW (R_PPC64_ADDR14, 2, 16, 0x0000fffc, 0, FALSE, signed,
339        ppc64_elf_branch_reloc),
340
341   /* An absolute 16 bit branch, for which bit 10 should be set to
342      indicate that the branch is expected to be taken.  The lower two
343      bits must be zero.  */
344   HOW (R_PPC64_ADDR14_BRTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
345        ppc64_elf_brtaken_reloc),
346
347   /* An absolute 16 bit branch, for which bit 10 should be set to
348      indicate that the branch is not expected to be taken.  The lower
349      two bits must be zero.  */
350   HOW (R_PPC64_ADDR14_BRNTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
351        ppc64_elf_brtaken_reloc),
352
353   /* A relative 26 bit branch; the lower two bits must be zero.  */
354   HOW (R_PPC64_REL24, 2, 26, 0x03fffffc, 0, TRUE, signed,
355        ppc64_elf_branch_reloc),
356
357   /* A variant of R_PPC64_REL24, used when r2 is not the toc pointer.  */
358   HOW (R_PPC64_REL24_NOTOC, 2, 26, 0x03fffffc, 0, TRUE, signed,
359        ppc64_elf_branch_reloc),
360
361   /* A relative 16 bit branch; the lower two bits must be zero.  */
362   HOW (R_PPC64_REL14, 2, 16, 0x0000fffc, 0, TRUE, signed,
363        ppc64_elf_branch_reloc),
364
365   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
366      the branch is expected to be taken.  The lower two bits must be
367      zero.  */
368   HOW (R_PPC64_REL14_BRTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
369        ppc64_elf_brtaken_reloc),
370
371   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
372      the branch is not expected to be taken.  The lower two bits must
373      be zero.  */
374   HOW (R_PPC64_REL14_BRNTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
375        ppc64_elf_brtaken_reloc),
376
377   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
378      symbol.  */
379   HOW (R_PPC64_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
380        ppc64_elf_unhandled_reloc),
381
382   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
383      the symbol.  */
384   HOW (R_PPC64_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
385        ppc64_elf_unhandled_reloc),
386
387   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
388      the symbol.  */
389   HOW (R_PPC64_GOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
390        ppc64_elf_unhandled_reloc),
391
392   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
393      the symbol.  */
394   HOW (R_PPC64_GOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
395        ppc64_elf_unhandled_reloc),
396
397   /* This is used only by the dynamic linker.  The symbol should exist
398      both in the object being run and in some shared library.  The
399      dynamic linker copies the data addressed by the symbol from the
400      shared library into the object, because the object being
401      run has to have the data at some particular address.  */
402   HOW (R_PPC64_COPY, 0, 0, 0, 0, FALSE, dont,
403        ppc64_elf_unhandled_reloc),
404
405   /* Like R_PPC64_ADDR64, but used when setting global offset table
406      entries.  */
407   HOW (R_PPC64_GLOB_DAT, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
408        ppc64_elf_unhandled_reloc),
409
410   /* Created by the link editor.  Marks a procedure linkage table
411      entry for a symbol.  */
412   HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, FALSE, dont,
413        ppc64_elf_unhandled_reloc),
414
415   /* Used only by the dynamic linker.  When the object is run, this
416      doubleword64 is set to the load address of the object, plus the
417      addend.  */
418   HOW (R_PPC64_RELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
419        bfd_elf_generic_reloc),
420
421   /* Like R_PPC64_ADDR32, but may be unaligned.  */
422   HOW (R_PPC64_UADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
423        bfd_elf_generic_reloc),
424
425   /* Like R_PPC64_ADDR16, but may be unaligned.  */
426   HOW (R_PPC64_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
427        bfd_elf_generic_reloc),
428
429   /* 32-bit PC relative.  */
430   HOW (R_PPC64_REL32, 2, 32, 0xffffffff, 0, TRUE, signed,
431        bfd_elf_generic_reloc),
432
433   /* 32-bit relocation to the symbol's procedure linkage table.  */
434   HOW (R_PPC64_PLT32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
435        ppc64_elf_unhandled_reloc),
436
437   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
438      FIXME: R_PPC64_PLTREL32 not supported.  */
439   HOW (R_PPC64_PLTREL32, 2, 32, 0xffffffff, 0, TRUE, signed,
440        ppc64_elf_unhandled_reloc),
441
442   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
443      the symbol.  */
444   HOW (R_PPC64_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
445        ppc64_elf_unhandled_reloc),
446
447   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
448      the symbol.  */
449   HOW (R_PPC64_PLT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
450        ppc64_elf_unhandled_reloc),
451
452   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
453      the symbol.  */
454   HOW (R_PPC64_PLT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
455        ppc64_elf_unhandled_reloc),
456
457   /* 16-bit section relative relocation.  */
458   HOW (R_PPC64_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
459        ppc64_elf_sectoff_reloc),
460
461   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
462   HOW (R_PPC64_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
463        ppc64_elf_sectoff_reloc),
464
465   /* 16-bit upper half section relative relocation.  */
466   HOW (R_PPC64_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, signed,
467        ppc64_elf_sectoff_reloc),
468
469   /* 16-bit upper half adjusted section relative relocation.  */
470   HOW (R_PPC64_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, signed,
471        ppc64_elf_sectoff_ha_reloc),
472
473   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
474   HOW (R_PPC64_REL30, 2, 30, 0xfffffffc, 2, TRUE, dont,
475        bfd_elf_generic_reloc),
476
477   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
478
479   /* A standard 64-bit relocation.  */
480   HOW (R_PPC64_ADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
481        bfd_elf_generic_reloc),
482
483   /* The bits 32-47 of an address.  */
484   HOW (R_PPC64_ADDR16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
485        bfd_elf_generic_reloc),
486
487   /* The bits 32-47 of an address, plus 1 if the contents of the low
488      16 bits, treated as a signed number, is negative.  */
489   HOW (R_PPC64_ADDR16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
490        ppc64_elf_ha_reloc),
491
492   /* The bits 48-63 of an address.  */
493   HOW (R_PPC64_ADDR16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
494        bfd_elf_generic_reloc),
495
496   /* The bits 48-63 of an address, plus 1 if the contents of the low
497      16 bits, treated as a signed number, is negative.  */
498   HOW (R_PPC64_ADDR16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
499        ppc64_elf_ha_reloc),
500
501   /* Like ADDR64, but may be unaligned.  */
502   HOW (R_PPC64_UADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
503        bfd_elf_generic_reloc),
504
505   /* 64-bit relative relocation.  */
506   HOW (R_PPC64_REL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
507        bfd_elf_generic_reloc),
508
509   /* 64-bit relocation to the symbol's procedure linkage table.  */
510   HOW (R_PPC64_PLT64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
511        ppc64_elf_unhandled_reloc),
512
513   /* 64-bit PC relative relocation to the symbol's procedure linkage
514      table.  */
515   /* FIXME: R_PPC64_PLTREL64 not supported.  */
516   HOW (R_PPC64_PLTREL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
517        ppc64_elf_unhandled_reloc),
518
519   /* 16 bit TOC-relative relocation.  */
520   /* R_PPC64_TOC16        47       half16*      S + A - .TOC.  */
521   HOW (R_PPC64_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
522        ppc64_elf_toc_reloc),
523
524   /* 16 bit TOC-relative relocation without overflow.  */
525   /* R_PPC64_TOC16_LO     48       half16        #lo (S + A - .TOC.)  */
526   HOW (R_PPC64_TOC16_LO, 1, 16, 0xffff, 0, FALSE, dont,
527        ppc64_elf_toc_reloc),
528
529   /* 16 bit TOC-relative relocation, high 16 bits.  */
530   /* R_PPC64_TOC16_HI     49       half16        #hi (S + A - .TOC.)  */
531   HOW (R_PPC64_TOC16_HI, 1, 16, 0xffff, 16, FALSE, signed,
532        ppc64_elf_toc_reloc),
533
534   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
535      contents of the low 16 bits, treated as a signed number, is
536      negative.  */
537   /* R_PPC64_TOC16_HA     50       half16        #ha (S + A - .TOC.)  */
538   HOW (R_PPC64_TOC16_HA, 1, 16, 0xffff, 16, FALSE, signed,
539        ppc64_elf_toc_ha_reloc),
540
541   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
542   /* R_PPC64_TOC                  51       doubleword64  .TOC.  */
543   HOW (R_PPC64_TOC, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
544        ppc64_elf_toc64_reloc),
545
546   /* Like R_PPC64_GOT16, but also informs the link editor that the
547      value to relocate may (!) refer to a PLT entry which the link
548      editor (a) may replace with the symbol value.  If the link editor
549      is unable to fully resolve the symbol, it may (b) create a PLT
550      entry and store the address to the new PLT entry in the GOT.
551      This permits lazy resolution of function symbols at run time.
552      The link editor may also skip all of this and just (c) emit a
553      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
554   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
555     HOW (R_PPC64_PLTGOT16, 1, 16, 0xffff, 0, FALSE,signed,
556           ppc64_elf_unhandled_reloc),
557
558   /* Like R_PPC64_PLTGOT16, but without overflow.  */
559   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
560   HOW (R_PPC64_PLTGOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
561        ppc64_elf_unhandled_reloc),
562
563   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
564   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
565   HOW (R_PPC64_PLTGOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
566        ppc64_elf_unhandled_reloc),
567
568   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
569      1 if the contents of the low 16 bits, treated as a signed number,
570      is negative.  */
571   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
572   HOW (R_PPC64_PLTGOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
573        ppc64_elf_unhandled_reloc),
574
575   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
576   HOW (R_PPC64_ADDR16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
577        bfd_elf_generic_reloc),
578
579   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
580   HOW (R_PPC64_ADDR16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
581        bfd_elf_generic_reloc),
582
583   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
584   HOW (R_PPC64_GOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
585        ppc64_elf_unhandled_reloc),
586
587   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
588   HOW (R_PPC64_GOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
589        ppc64_elf_unhandled_reloc),
590
591   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
592   HOW (R_PPC64_PLT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
593        ppc64_elf_unhandled_reloc),
594
595   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
596   HOW (R_PPC64_SECTOFF_DS, 1, 16, 0xfffc, 0, FALSE, signed,
597        ppc64_elf_sectoff_reloc),
598
599   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
600   HOW (R_PPC64_SECTOFF_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
601        ppc64_elf_sectoff_reloc),
602
603   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
604   HOW (R_PPC64_TOC16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
605        ppc64_elf_toc_reloc),
606
607   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
608   HOW (R_PPC64_TOC16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
609        ppc64_elf_toc_reloc),
610
611   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
612   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
613   HOW (R_PPC64_PLTGOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
614        ppc64_elf_unhandled_reloc),
615
616   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
617   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
618   HOW (R_PPC64_PLTGOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
619        ppc64_elf_unhandled_reloc),
620
621   /* Marker relocs for TLS.  */
622   HOW (R_PPC64_TLS, 2, 32, 0, 0, FALSE, dont,
623        bfd_elf_generic_reloc),
624
625   HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
626        bfd_elf_generic_reloc),
627
628   HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
629        bfd_elf_generic_reloc),
630
631   /* Marker reloc for optimizing r2 save in prologue rather than on
632      each plt call stub.  */
633   HOW (R_PPC64_TOCSAVE, 2, 32, 0, 0, FALSE, dont,
634        bfd_elf_generic_reloc),
635
636   /* Marker relocs on inline plt call instructions.  */
637   HOW (R_PPC64_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
638        bfd_elf_generic_reloc),
639
640   HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
641        bfd_elf_generic_reloc),
642
643   /* Computes the load module index of the load module that contains the
644      definition of its TLS sym.  */
645   HOW (R_PPC64_DTPMOD64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
646        ppc64_elf_unhandled_reloc),
647
648   /* Computes a dtv-relative displacement, the difference between the value
649      of sym+add and the base address of the thread-local storage block that
650      contains the definition of sym, minus 0x8000.  */
651   HOW (R_PPC64_DTPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
652        ppc64_elf_unhandled_reloc),
653
654   /* A 16 bit dtprel reloc.  */
655   HOW (R_PPC64_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
656        ppc64_elf_unhandled_reloc),
657
658   /* Like DTPREL16, but no overflow.  */
659   HOW (R_PPC64_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
660        ppc64_elf_unhandled_reloc),
661
662   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
663   HOW (R_PPC64_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
664        ppc64_elf_unhandled_reloc),
665
666   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
667   HOW (R_PPC64_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
668        ppc64_elf_unhandled_reloc),
669
670   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
671   HOW (R_PPC64_DTPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
672        ppc64_elf_unhandled_reloc),
673
674   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
675   HOW (R_PPC64_DTPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
676        ppc64_elf_unhandled_reloc),
677
678   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
679   HOW (R_PPC64_DTPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
680        ppc64_elf_unhandled_reloc),
681
682   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
683   HOW (R_PPC64_DTPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
684        ppc64_elf_unhandled_reloc),
685
686   /* Like DTPREL16, but for insns with a DS field.  */
687   HOW (R_PPC64_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
688        ppc64_elf_unhandled_reloc),
689
690   /* Like DTPREL16_DS, but no overflow.  */
691   HOW (R_PPC64_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
692        ppc64_elf_unhandled_reloc),
693
694   /* Computes a tp-relative displacement, the difference between the value of
695      sym+add and the value of the thread pointer (r13).  */
696   HOW (R_PPC64_TPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
697        ppc64_elf_unhandled_reloc),
698
699   /* A 16 bit tprel reloc.  */
700   HOW (R_PPC64_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
701        ppc64_elf_unhandled_reloc),
702
703   /* Like TPREL16, but no overflow.  */
704   HOW (R_PPC64_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
705        ppc64_elf_unhandled_reloc),
706
707   /* Like TPREL16_LO, but next higher group of 16 bits.  */
708   HOW (R_PPC64_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
709        ppc64_elf_unhandled_reloc),
710
711   /* Like TPREL16_HI, but adjust for low 16 bits.  */
712   HOW (R_PPC64_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
713        ppc64_elf_unhandled_reloc),
714
715   /* Like TPREL16_HI, but next higher group of 16 bits.  */
716   HOW (R_PPC64_TPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
717        ppc64_elf_unhandled_reloc),
718
719   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
720   HOW (R_PPC64_TPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
721        ppc64_elf_unhandled_reloc),
722
723   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
724   HOW (R_PPC64_TPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
725        ppc64_elf_unhandled_reloc),
726
727   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
728   HOW (R_PPC64_TPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
729        ppc64_elf_unhandled_reloc),
730
731   /* Like TPREL16, but for insns with a DS field.  */
732   HOW (R_PPC64_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
733        ppc64_elf_unhandled_reloc),
734
735   /* Like TPREL16_DS, but no overflow.  */
736   HOW (R_PPC64_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
737        ppc64_elf_unhandled_reloc),
738
739   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
740      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
741      to the first entry relative to the TOC base (r2).  */
742   HOW (R_PPC64_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
743        ppc64_elf_unhandled_reloc),
744
745   /* Like GOT_TLSGD16, but no overflow.  */
746   HOW (R_PPC64_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
747        ppc64_elf_unhandled_reloc),
748
749   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
750   HOW (R_PPC64_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
751        ppc64_elf_unhandled_reloc),
752
753   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
754   HOW (R_PPC64_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
755        ppc64_elf_unhandled_reloc),
756
757   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
758      with values (sym+add)@dtpmod and zero, and computes the offset to the
759      first entry relative to the TOC base (r2).  */
760   HOW (R_PPC64_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
761        ppc64_elf_unhandled_reloc),
762
763   /* Like GOT_TLSLD16, but no overflow.  */
764   HOW (R_PPC64_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
765        ppc64_elf_unhandled_reloc),
766
767   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
768   HOW (R_PPC64_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
769        ppc64_elf_unhandled_reloc),
770
771   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
772   HOW (R_PPC64_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
773        ppc64_elf_unhandled_reloc),
774
775   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
776      the offset to the entry relative to the TOC base (r2).  */
777   HOW (R_PPC64_GOT_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
778        ppc64_elf_unhandled_reloc),
779
780   /* Like GOT_DTPREL16_DS, but no overflow.  */
781   HOW (R_PPC64_GOT_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
782        ppc64_elf_unhandled_reloc),
783
784   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
785   HOW (R_PPC64_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
786        ppc64_elf_unhandled_reloc),
787
788   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
789   HOW (R_PPC64_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
790        ppc64_elf_unhandled_reloc),
791
792   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
793      offset to the entry relative to the TOC base (r2).  */
794   HOW (R_PPC64_GOT_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
795        ppc64_elf_unhandled_reloc),
796
797   /* Like GOT_TPREL16_DS, but no overflow.  */
798   HOW (R_PPC64_GOT_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
799        ppc64_elf_unhandled_reloc),
800
801   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
802   HOW (R_PPC64_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
803        ppc64_elf_unhandled_reloc),
804
805   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
806   HOW (R_PPC64_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
807        ppc64_elf_unhandled_reloc),
808
809   HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, FALSE, dont,
810        ppc64_elf_unhandled_reloc),
811
812   HOW (R_PPC64_IRELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
813        bfd_elf_generic_reloc),
814
815   /* A 16 bit relative relocation.  */
816   HOW (R_PPC64_REL16, 1, 16, 0xffff, 0, TRUE, signed,
817        bfd_elf_generic_reloc),
818
819   /* A 16 bit relative relocation without overflow.  */
820   HOW (R_PPC64_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
821        bfd_elf_generic_reloc),
822
823   /* The high order 16 bits of a relative address.  */
824   HOW (R_PPC64_REL16_HI, 1, 16, 0xffff, 16, TRUE, signed,
825        bfd_elf_generic_reloc),
826
827   /* The high order 16 bits of a relative address, plus 1 if the contents of
828      the low 16 bits, treated as a signed number, is negative.  */
829   HOW (R_PPC64_REL16_HA, 1, 16, 0xffff, 16, TRUE, signed,
830        ppc64_elf_ha_reloc),
831
832   HOW (R_PPC64_REL16_HIGH, 1, 16, 0xffff, 16, TRUE, dont,
833        bfd_elf_generic_reloc),
834
835   HOW (R_PPC64_REL16_HIGHA, 1, 16, 0xffff, 16, TRUE, dont,
836        ppc64_elf_ha_reloc),
837
838   HOW (R_PPC64_REL16_HIGHER, 1, 16, 0xffff, 32, TRUE, dont,
839        bfd_elf_generic_reloc),
840
841   HOW (R_PPC64_REL16_HIGHERA, 1, 16, 0xffff, 32, TRUE, dont,
842        ppc64_elf_ha_reloc),
843
844   HOW (R_PPC64_REL16_HIGHEST, 1, 16, 0xffff, 48, TRUE, dont,
845        bfd_elf_generic_reloc),
846
847   HOW (R_PPC64_REL16_HIGHESTA, 1, 16, 0xffff, 48, TRUE, dont,
848        ppc64_elf_ha_reloc),
849
850   /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
851   HOW (R_PPC64_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
852        ppc64_elf_ha_reloc),
853
854   /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
855   HOW (R_PPC64_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
856        ppc64_elf_ha_reloc),
857
858   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
859   HOW (R_PPC64_ADDR16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
860        bfd_elf_generic_reloc),
861
862   /* Like R_PPC64_ADDR16_HA, but no overflow.  */
863   HOW (R_PPC64_ADDR16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
864        ppc64_elf_ha_reloc),
865
866   /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
867   HOW (R_PPC64_DTPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
868        ppc64_elf_unhandled_reloc),
869
870   /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
871   HOW (R_PPC64_DTPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
872        ppc64_elf_unhandled_reloc),
873
874   /* Like R_PPC64_TPREL16_HI, but no overflow.  */
875   HOW (R_PPC64_TPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
876        ppc64_elf_unhandled_reloc),
877
878   /* Like R_PPC64_TPREL16_HA, but no overflow.  */
879   HOW (R_PPC64_TPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
880        ppc64_elf_unhandled_reloc),
881
882   /* Marker reloc on ELFv2 large-model function entry.  */
883   HOW (R_PPC64_ENTRY, 2, 32, 0, 0, FALSE, dont,
884        bfd_elf_generic_reloc),
885
886   /* Like ADDR64, but use local entry point of function.  */
887   HOW (R_PPC64_ADDR64_LOCAL, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
888        bfd_elf_generic_reloc),
889
890   HOW (R_PPC64_PLTSEQ_NOTOC, 2, 32, 0, 0, FALSE, dont,
891        bfd_elf_generic_reloc),
892
893   HOW (R_PPC64_PLTCALL_NOTOC, 2, 32, 0, 0, FALSE, dont,
894        bfd_elf_generic_reloc),
895
896   HOW (R_PPC64_PCREL_OPT, 2, 32, 0, 0, FALSE, dont,
897        bfd_elf_generic_reloc),
898
899   HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
900        ppc64_elf_prefix_reloc),
901
902   HOW (R_PPC64_D34_LO, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, dont,
903        ppc64_elf_prefix_reloc),
904
905   HOW (R_PPC64_D34_HI30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
906        ppc64_elf_prefix_reloc),
907
908   HOW (R_PPC64_D34_HA30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
909        ppc64_elf_prefix_reloc),
910
911   HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
912        ppc64_elf_prefix_reloc),
913
914   HOW (R_PPC64_GOT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
915        ppc64_elf_unhandled_reloc),
916
917   HOW (R_PPC64_PLT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
918        ppc64_elf_unhandled_reloc),
919
920   HOW (R_PPC64_PLT_PCREL34_NOTOC, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
921        ppc64_elf_unhandled_reloc),
922
923   HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
924        bfd_elf_generic_reloc),
925
926   HOW (R_PPC64_ADDR16_HIGHERA34, 1, 16, 0xffff, 34, FALSE, dont,
927        ppc64_elf_ha_reloc),
928
929   HOW (R_PPC64_ADDR16_HIGHEST34, 1, 16, 0xffff, 50, FALSE, dont,
930        bfd_elf_generic_reloc),
931
932   HOW (R_PPC64_ADDR16_HIGHESTA34, 1, 16, 0xffff, 50, FALSE, dont,
933        ppc64_elf_ha_reloc),
934
935   HOW (R_PPC64_REL16_HIGHER34, 1, 16, 0xffff, 34, TRUE, dont,
936        bfd_elf_generic_reloc),
937
938   HOW (R_PPC64_REL16_HIGHERA34, 1, 16, 0xffff, 34, TRUE, dont,
939        ppc64_elf_ha_reloc),
940
941   HOW (R_PPC64_REL16_HIGHEST34, 1, 16, 0xffff, 50, TRUE, dont,
942        bfd_elf_generic_reloc),
943
944   HOW (R_PPC64_REL16_HIGHESTA34, 1, 16, 0xffff, 50, TRUE, dont,
945        ppc64_elf_ha_reloc),
946
947   HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
948        ppc64_elf_prefix_reloc),
949
950   HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
951        ppc64_elf_prefix_reloc),
952
953   /* GNU extension to record C++ vtable hierarchy.  */
954   HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
955        NULL),
956
957   /* GNU extension to record C++ vtable member usage.  */
958   HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
959        NULL),
960 };
961
962 \f
963 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
964    be done.  */
965
966 static void
967 ppc_howto_init (void)
968 {
969   unsigned int i, type;
970
971   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
972     {
973       type = ppc64_elf_howto_raw[i].type;
974       BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
975       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
976     }
977 }
978
979 static reloc_howto_type *
980 ppc64_elf_reloc_type_lookup (bfd *abfd,
981                              bfd_reloc_code_real_type code)
982 {
983   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
984
985   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
986     /* Initialize howto table if needed.  */
987     ppc_howto_init ();
988
989   switch (code)
990     {
991     default:
992       /* xgettext:c-format */
993       _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd,
994                           (int) code);
995       bfd_set_error (bfd_error_bad_value);
996       return NULL;
997
998     case BFD_RELOC_NONE:                        r = R_PPC64_NONE;
999       break;
1000     case BFD_RELOC_32:                          r = R_PPC64_ADDR32;
1001       break;
1002     case BFD_RELOC_PPC_BA26:                    r = R_PPC64_ADDR24;
1003       break;
1004     case BFD_RELOC_16:                          r = R_PPC64_ADDR16;
1005       break;
1006     case BFD_RELOC_LO16:                        r = R_PPC64_ADDR16_LO;
1007       break;
1008     case BFD_RELOC_HI16:                        r = R_PPC64_ADDR16_HI;
1009       break;
1010     case BFD_RELOC_PPC64_ADDR16_HIGH:           r = R_PPC64_ADDR16_HIGH;
1011       break;
1012     case BFD_RELOC_HI16_S:                      r = R_PPC64_ADDR16_HA;
1013       break;
1014     case BFD_RELOC_PPC64_ADDR16_HIGHA:          r = R_PPC64_ADDR16_HIGHA;
1015       break;
1016     case BFD_RELOC_PPC_BA16:                    r = R_PPC64_ADDR14;
1017       break;
1018     case BFD_RELOC_PPC_BA16_BRTAKEN:            r = R_PPC64_ADDR14_BRTAKEN;
1019       break;
1020     case BFD_RELOC_PPC_BA16_BRNTAKEN:           r = R_PPC64_ADDR14_BRNTAKEN;
1021       break;
1022     case BFD_RELOC_PPC_B26:                     r = R_PPC64_REL24;
1023       break;
1024     case BFD_RELOC_PPC64_REL24_NOTOC:           r = R_PPC64_REL24_NOTOC;
1025       break;
1026     case BFD_RELOC_PPC_B16:                     r = R_PPC64_REL14;
1027       break;
1028     case BFD_RELOC_PPC_B16_BRTAKEN:             r = R_PPC64_REL14_BRTAKEN;
1029       break;
1030     case BFD_RELOC_PPC_B16_BRNTAKEN:            r = R_PPC64_REL14_BRNTAKEN;
1031       break;
1032     case BFD_RELOC_16_GOTOFF:                   r = R_PPC64_GOT16;
1033       break;
1034     case BFD_RELOC_LO16_GOTOFF:                 r = R_PPC64_GOT16_LO;
1035       break;
1036     case BFD_RELOC_HI16_GOTOFF:                 r = R_PPC64_GOT16_HI;
1037       break;
1038     case BFD_RELOC_HI16_S_GOTOFF:               r = R_PPC64_GOT16_HA;
1039       break;
1040     case BFD_RELOC_PPC_COPY:                    r = R_PPC64_COPY;
1041       break;
1042     case BFD_RELOC_PPC_GLOB_DAT:                r = R_PPC64_GLOB_DAT;
1043       break;
1044     case BFD_RELOC_32_PCREL:                    r = R_PPC64_REL32;
1045       break;
1046     case BFD_RELOC_32_PLTOFF:                   r = R_PPC64_PLT32;
1047       break;
1048     case BFD_RELOC_32_PLT_PCREL:                r = R_PPC64_PLTREL32;
1049       break;
1050     case BFD_RELOC_LO16_PLTOFF:                 r = R_PPC64_PLT16_LO;
1051       break;
1052     case BFD_RELOC_HI16_PLTOFF:                 r = R_PPC64_PLT16_HI;
1053       break;
1054     case BFD_RELOC_HI16_S_PLTOFF:               r = R_PPC64_PLT16_HA;
1055       break;
1056     case BFD_RELOC_16_BASEREL:                  r = R_PPC64_SECTOFF;
1057       break;
1058     case BFD_RELOC_LO16_BASEREL:                r = R_PPC64_SECTOFF_LO;
1059       break;
1060     case BFD_RELOC_HI16_BASEREL:                r = R_PPC64_SECTOFF_HI;
1061       break;
1062     case BFD_RELOC_HI16_S_BASEREL:              r = R_PPC64_SECTOFF_HA;
1063       break;
1064     case BFD_RELOC_CTOR:                        r = R_PPC64_ADDR64;
1065       break;
1066     case BFD_RELOC_64:                          r = R_PPC64_ADDR64;
1067       break;
1068     case BFD_RELOC_PPC64_HIGHER:                r = R_PPC64_ADDR16_HIGHER;
1069       break;
1070     case BFD_RELOC_PPC64_HIGHER_S:              r = R_PPC64_ADDR16_HIGHERA;
1071       break;
1072     case BFD_RELOC_PPC64_HIGHEST:               r = R_PPC64_ADDR16_HIGHEST;
1073       break;
1074     case BFD_RELOC_PPC64_HIGHEST_S:             r = R_PPC64_ADDR16_HIGHESTA;
1075       break;
1076     case BFD_RELOC_64_PCREL:                    r = R_PPC64_REL64;
1077       break;
1078     case BFD_RELOC_64_PLTOFF:                   r = R_PPC64_PLT64;
1079       break;
1080     case BFD_RELOC_64_PLT_PCREL:                r = R_PPC64_PLTREL64;
1081       break;
1082     case BFD_RELOC_PPC_TOC16:                   r = R_PPC64_TOC16;
1083       break;
1084     case BFD_RELOC_PPC64_TOC16_LO:              r = R_PPC64_TOC16_LO;
1085       break;
1086     case BFD_RELOC_PPC64_TOC16_HI:              r = R_PPC64_TOC16_HI;
1087       break;
1088     case BFD_RELOC_PPC64_TOC16_HA:              r = R_PPC64_TOC16_HA;
1089       break;
1090     case BFD_RELOC_PPC64_TOC:                   r = R_PPC64_TOC;
1091       break;
1092     case BFD_RELOC_PPC64_PLTGOT16:              r = R_PPC64_PLTGOT16;
1093       break;
1094     case BFD_RELOC_PPC64_PLTGOT16_LO:           r = R_PPC64_PLTGOT16_LO;
1095       break;
1096     case BFD_RELOC_PPC64_PLTGOT16_HI:           r = R_PPC64_PLTGOT16_HI;
1097       break;
1098     case BFD_RELOC_PPC64_PLTGOT16_HA:           r = R_PPC64_PLTGOT16_HA;
1099       break;
1100     case BFD_RELOC_PPC64_ADDR16_DS:             r = R_PPC64_ADDR16_DS;
1101       break;
1102     case BFD_RELOC_PPC64_ADDR16_LO_DS:          r = R_PPC64_ADDR16_LO_DS;
1103       break;
1104     case BFD_RELOC_PPC64_GOT16_DS:              r = R_PPC64_GOT16_DS;
1105       break;
1106     case BFD_RELOC_PPC64_GOT16_LO_DS:           r = R_PPC64_GOT16_LO_DS;
1107       break;
1108     case BFD_RELOC_PPC64_PLT16_LO_DS:           r = R_PPC64_PLT16_LO_DS;
1109       break;
1110     case BFD_RELOC_PPC64_SECTOFF_DS:            r = R_PPC64_SECTOFF_DS;
1111       break;
1112     case BFD_RELOC_PPC64_SECTOFF_LO_DS:         r = R_PPC64_SECTOFF_LO_DS;
1113       break;
1114     case BFD_RELOC_PPC64_TOC16_DS:              r = R_PPC64_TOC16_DS;
1115       break;
1116     case BFD_RELOC_PPC64_TOC16_LO_DS:           r = R_PPC64_TOC16_LO_DS;
1117       break;
1118     case BFD_RELOC_PPC64_PLTGOT16_DS:           r = R_PPC64_PLTGOT16_DS;
1119       break;
1120     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:        r = R_PPC64_PLTGOT16_LO_DS;
1121       break;
1122     case BFD_RELOC_PPC_TLS:                     r = R_PPC64_TLS;
1123       break;
1124     case BFD_RELOC_PPC_TLSGD:                   r = R_PPC64_TLSGD;
1125       break;
1126     case BFD_RELOC_PPC_TLSLD:                   r = R_PPC64_TLSLD;
1127       break;
1128     case BFD_RELOC_PPC_DTPMOD:                  r = R_PPC64_DTPMOD64;
1129       break;
1130     case BFD_RELOC_PPC_TPREL16:                 r = R_PPC64_TPREL16;
1131       break;
1132     case BFD_RELOC_PPC_TPREL16_LO:              r = R_PPC64_TPREL16_LO;
1133       break;
1134     case BFD_RELOC_PPC_TPREL16_HI:              r = R_PPC64_TPREL16_HI;
1135       break;
1136     case BFD_RELOC_PPC64_TPREL16_HIGH:          r = R_PPC64_TPREL16_HIGH;
1137       break;
1138     case BFD_RELOC_PPC_TPREL16_HA:              r = R_PPC64_TPREL16_HA;
1139       break;
1140     case BFD_RELOC_PPC64_TPREL16_HIGHA:         r = R_PPC64_TPREL16_HIGHA;
1141       break;
1142     case BFD_RELOC_PPC_TPREL:                   r = R_PPC64_TPREL64;
1143       break;
1144     case BFD_RELOC_PPC_DTPREL16:                r = R_PPC64_DTPREL16;
1145       break;
1146     case BFD_RELOC_PPC_DTPREL16_LO:             r = R_PPC64_DTPREL16_LO;
1147       break;
1148     case BFD_RELOC_PPC_DTPREL16_HI:             r = R_PPC64_DTPREL16_HI;
1149       break;
1150     case BFD_RELOC_PPC64_DTPREL16_HIGH:         r = R_PPC64_DTPREL16_HIGH;
1151       break;
1152     case BFD_RELOC_PPC_DTPREL16_HA:             r = R_PPC64_DTPREL16_HA;
1153       break;
1154     case BFD_RELOC_PPC64_DTPREL16_HIGHA:        r = R_PPC64_DTPREL16_HIGHA;
1155       break;
1156     case BFD_RELOC_PPC_DTPREL:                  r = R_PPC64_DTPREL64;
1157       break;
1158     case BFD_RELOC_PPC_GOT_TLSGD16:             r = R_PPC64_GOT_TLSGD16;
1159       break;
1160     case BFD_RELOC_PPC_GOT_TLSGD16_LO:          r = R_PPC64_GOT_TLSGD16_LO;
1161       break;
1162     case BFD_RELOC_PPC_GOT_TLSGD16_HI:          r = R_PPC64_GOT_TLSGD16_HI;
1163       break;
1164     case BFD_RELOC_PPC_GOT_TLSGD16_HA:          r = R_PPC64_GOT_TLSGD16_HA;
1165       break;
1166     case BFD_RELOC_PPC_GOT_TLSLD16:             r = R_PPC64_GOT_TLSLD16;
1167       break;
1168     case BFD_RELOC_PPC_GOT_TLSLD16_LO:          r = R_PPC64_GOT_TLSLD16_LO;
1169       break;
1170     case BFD_RELOC_PPC_GOT_TLSLD16_HI:          r = R_PPC64_GOT_TLSLD16_HI;
1171       break;
1172     case BFD_RELOC_PPC_GOT_TLSLD16_HA:          r = R_PPC64_GOT_TLSLD16_HA;
1173       break;
1174     case BFD_RELOC_PPC_GOT_TPREL16:             r = R_PPC64_GOT_TPREL16_DS;
1175       break;
1176     case BFD_RELOC_PPC_GOT_TPREL16_LO:          r = R_PPC64_GOT_TPREL16_LO_DS;
1177       break;
1178     case BFD_RELOC_PPC_GOT_TPREL16_HI:          r = R_PPC64_GOT_TPREL16_HI;
1179       break;
1180     case BFD_RELOC_PPC_GOT_TPREL16_HA:          r = R_PPC64_GOT_TPREL16_HA;
1181       break;
1182     case BFD_RELOC_PPC_GOT_DTPREL16:            r = R_PPC64_GOT_DTPREL16_DS;
1183       break;
1184     case BFD_RELOC_PPC_GOT_DTPREL16_LO:         r = R_PPC64_GOT_DTPREL16_LO_DS;
1185       break;
1186     case BFD_RELOC_PPC_GOT_DTPREL16_HI:         r = R_PPC64_GOT_DTPREL16_HI;
1187       break;
1188     case BFD_RELOC_PPC_GOT_DTPREL16_HA:         r = R_PPC64_GOT_DTPREL16_HA;
1189       break;
1190     case BFD_RELOC_PPC64_TPREL16_DS:            r = R_PPC64_TPREL16_DS;
1191       break;
1192     case BFD_RELOC_PPC64_TPREL16_LO_DS:         r = R_PPC64_TPREL16_LO_DS;
1193       break;
1194     case BFD_RELOC_PPC64_TPREL16_HIGHER:        r = R_PPC64_TPREL16_HIGHER;
1195       break;
1196     case BFD_RELOC_PPC64_TPREL16_HIGHERA:       r = R_PPC64_TPREL16_HIGHERA;
1197       break;
1198     case BFD_RELOC_PPC64_TPREL16_HIGHEST:       r = R_PPC64_TPREL16_HIGHEST;
1199       break;
1200     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:      r = R_PPC64_TPREL16_HIGHESTA;
1201       break;
1202     case BFD_RELOC_PPC64_DTPREL16_DS:           r = R_PPC64_DTPREL16_DS;
1203       break;
1204     case BFD_RELOC_PPC64_DTPREL16_LO_DS:        r = R_PPC64_DTPREL16_LO_DS;
1205       break;
1206     case BFD_RELOC_PPC64_DTPREL16_HIGHER:       r = R_PPC64_DTPREL16_HIGHER;
1207       break;
1208     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:      r = R_PPC64_DTPREL16_HIGHERA;
1209       break;
1210     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:      r = R_PPC64_DTPREL16_HIGHEST;
1211       break;
1212     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     r = R_PPC64_DTPREL16_HIGHESTA;
1213       break;
1214     case BFD_RELOC_16_PCREL:                    r = R_PPC64_REL16;
1215       break;
1216     case BFD_RELOC_LO16_PCREL:                  r = R_PPC64_REL16_LO;
1217       break;
1218     case BFD_RELOC_HI16_PCREL:                  r = R_PPC64_REL16_HI;
1219       break;
1220     case BFD_RELOC_HI16_S_PCREL:                r = R_PPC64_REL16_HA;
1221       break;
1222     case BFD_RELOC_PPC64_REL16_HIGH:            r = R_PPC64_REL16_HIGH;
1223       break;
1224     case BFD_RELOC_PPC64_REL16_HIGHA:           r = R_PPC64_REL16_HIGHA;
1225       break;
1226     case BFD_RELOC_PPC64_REL16_HIGHER:          r = R_PPC64_REL16_HIGHER;
1227       break;
1228     case BFD_RELOC_PPC64_REL16_HIGHERA:         r = R_PPC64_REL16_HIGHERA;
1229       break;
1230     case BFD_RELOC_PPC64_REL16_HIGHEST:         r = R_PPC64_REL16_HIGHEST;
1231       break;
1232     case BFD_RELOC_PPC64_REL16_HIGHESTA:        r = R_PPC64_REL16_HIGHESTA;
1233       break;
1234     case BFD_RELOC_PPC_16DX_HA:                 r = R_PPC64_16DX_HA;
1235       break;
1236     case BFD_RELOC_PPC_REL16DX_HA:              r = R_PPC64_REL16DX_HA;
1237       break;
1238     case BFD_RELOC_PPC64_ENTRY:                 r = R_PPC64_ENTRY;
1239       break;
1240     case BFD_RELOC_PPC64_ADDR64_LOCAL:          r = R_PPC64_ADDR64_LOCAL;
1241       break;
1242     case BFD_RELOC_PPC64_D34:                   r = R_PPC64_D34;
1243       break;
1244     case BFD_RELOC_PPC64_D34_LO:                r = R_PPC64_D34_LO;
1245       break;
1246     case BFD_RELOC_PPC64_D34_HI30:              r = R_PPC64_D34_HI30;
1247       break;
1248     case BFD_RELOC_PPC64_D34_HA30:              r = R_PPC64_D34_HA30;
1249       break;
1250     case BFD_RELOC_PPC64_PCREL34:               r = R_PPC64_PCREL34;
1251       break;
1252     case BFD_RELOC_PPC64_GOT_PCREL34:           r = R_PPC64_GOT_PCREL34;
1253       break;
1254     case BFD_RELOC_PPC64_PLT_PCREL34:           r = R_PPC64_PLT_PCREL34;
1255       break;
1256     case BFD_RELOC_PPC64_ADDR16_HIGHER34:       r = R_PPC64_ADDR16_HIGHER34;
1257       break;
1258     case BFD_RELOC_PPC64_ADDR16_HIGHERA34:      r = R_PPC64_ADDR16_HIGHERA34;
1259       break;
1260     case BFD_RELOC_PPC64_ADDR16_HIGHEST34:      r = R_PPC64_ADDR16_HIGHEST34;
1261       break;
1262     case BFD_RELOC_PPC64_ADDR16_HIGHESTA34:     r = R_PPC64_ADDR16_HIGHESTA34;
1263       break;
1264     case BFD_RELOC_PPC64_REL16_HIGHER34:        r = R_PPC64_REL16_HIGHER34;
1265       break;
1266     case BFD_RELOC_PPC64_REL16_HIGHERA34:       r = R_PPC64_REL16_HIGHERA34;
1267       break;
1268     case BFD_RELOC_PPC64_REL16_HIGHEST34:       r = R_PPC64_REL16_HIGHEST34;
1269       break;
1270     case BFD_RELOC_PPC64_REL16_HIGHESTA34:      r = R_PPC64_REL16_HIGHESTA34;
1271       break;
1272     case BFD_RELOC_PPC64_D28:                   r = R_PPC64_D28;
1273       break;
1274     case BFD_RELOC_PPC64_PCREL28:               r = R_PPC64_PCREL28;
1275       break;
1276     case BFD_RELOC_VTABLE_INHERIT:              r = R_PPC64_GNU_VTINHERIT;
1277       break;
1278     case BFD_RELOC_VTABLE_ENTRY:                r = R_PPC64_GNU_VTENTRY;
1279       break;
1280     }
1281
1282   return ppc64_elf_howto_table[r];
1283 };
1284
1285 static reloc_howto_type *
1286 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
1287                              const char *r_name)
1288 {
1289   unsigned int i;
1290
1291   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
1292     if (ppc64_elf_howto_raw[i].name != NULL
1293         && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
1294       return &ppc64_elf_howto_raw[i];
1295
1296   return NULL;
1297 }
1298
1299 /* Set the howto pointer for a PowerPC ELF reloc.  */
1300
1301 static bfd_boolean
1302 ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
1303                          Elf_Internal_Rela *dst)
1304 {
1305   unsigned int type;
1306
1307   /* Initialize howto table if needed.  */
1308   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1309     ppc_howto_init ();
1310
1311   type = ELF64_R_TYPE (dst->r_info);
1312   if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
1313     {
1314       /* xgettext:c-format */
1315       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1316                           abfd, type);
1317       bfd_set_error (bfd_error_bad_value);
1318       return FALSE;
1319     }
1320   cache_ptr->howto = ppc64_elf_howto_table[type];
1321   if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
1322     {
1323       /* xgettext:c-format */
1324       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1325                           abfd, type);
1326       bfd_set_error (bfd_error_bad_value);
1327       return FALSE;
1328     }
1329
1330   return TRUE;
1331 }
1332
1333 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
1334
1335 static bfd_reloc_status_type
1336 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1337                     void *data, asection *input_section,
1338                     bfd *output_bfd, char **error_message)
1339 {
1340   enum elf_ppc64_reloc_type r_type;
1341   long insn;
1342   bfd_size_type octets;
1343   bfd_vma value;
1344
1345   /* If this is a relocatable link (output_bfd test tells us), just
1346      call the generic function.  Any adjustment will be done at final
1347      link time.  */
1348   if (output_bfd != NULL)
1349     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1350                                   input_section, output_bfd, error_message);
1351
1352   /* Adjust the addend for sign extension of the low 16 (or 34) bits.
1353      We won't actually be using the low bits, so trashing them
1354      doesn't matter.  */
1355   r_type = reloc_entry->howto->type;
1356   if (r_type == R_PPC64_ADDR16_HIGHERA34
1357       || r_type == R_PPC64_ADDR16_HIGHESTA34
1358       || r_type == R_PPC64_REL16_HIGHERA34
1359       || r_type == R_PPC64_REL16_HIGHESTA34)
1360     reloc_entry->addend += 1ULL << 33;
1361   else
1362     reloc_entry->addend += 1U << 15;
1363   if (r_type != R_PPC64_REL16DX_HA)
1364     return bfd_reloc_continue;
1365
1366   value = 0;
1367   if (!bfd_is_com_section (symbol->section))
1368     value = symbol->value;
1369   value += (reloc_entry->addend
1370             + symbol->section->output_offset
1371             + symbol->section->output_section->vma);
1372   value -= (reloc_entry->address
1373             + input_section->output_offset
1374             + input_section->output_section->vma);
1375   value = (bfd_signed_vma) value >> 16;
1376
1377   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
1378   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1379   insn &= ~0x1fffc1;
1380   insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
1381   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1382   if (value + 0x8000 > 0xffff)
1383     return bfd_reloc_overflow;
1384   return bfd_reloc_ok;
1385 }
1386
1387 static bfd_reloc_status_type
1388 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1389                         void *data, asection *input_section,
1390                         bfd *output_bfd, char **error_message)
1391 {
1392   if (output_bfd != NULL)
1393     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1394                                   input_section, output_bfd, error_message);
1395
1396   if (strcmp (symbol->section->name, ".opd") == 0
1397       && (symbol->section->owner->flags & DYNAMIC) == 0)
1398     {
1399       bfd_vma dest = opd_entry_value (symbol->section,
1400                                       symbol->value + reloc_entry->addend,
1401                                       NULL, NULL, FALSE);
1402       if (dest != (bfd_vma) -1)
1403         reloc_entry->addend = dest - (symbol->value
1404                                       + symbol->section->output_section->vma
1405                                       + symbol->section->output_offset);
1406     }
1407   else
1408     {
1409       elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
1410
1411       if (symbol->section->owner != abfd
1412           && symbol->section->owner != NULL
1413           && abiversion (symbol->section->owner) >= 2)
1414         {
1415           unsigned int i;
1416
1417           for (i = 0; i < symbol->section->owner->symcount; ++i)
1418             {
1419               asymbol *symdef = symbol->section->owner->outsymbols[i];
1420
1421               if (strcmp (symdef->name, symbol->name) == 0)
1422                 {
1423                   elfsym = (elf_symbol_type *) symdef;
1424                   break;
1425                 }
1426             }
1427         }
1428       reloc_entry->addend
1429         += PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
1430     }
1431   return bfd_reloc_continue;
1432 }
1433
1434 static bfd_reloc_status_type
1435 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1436                          void *data, asection *input_section,
1437                          bfd *output_bfd, char **error_message)
1438 {
1439   long insn;
1440   enum elf_ppc64_reloc_type r_type;
1441   bfd_size_type octets;
1442   /* Assume 'at' branch hints.  */
1443   bfd_boolean is_isa_v2 = TRUE;
1444
1445   /* If this is a relocatable link (output_bfd test tells us), just
1446      call the generic function.  Any adjustment will be done at final
1447      link time.  */
1448   if (output_bfd != NULL)
1449     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1450                                   input_section, output_bfd, error_message);
1451
1452   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
1453   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1454   insn &= ~(0x01 << 21);
1455   r_type = reloc_entry->howto->type;
1456   if (r_type == R_PPC64_ADDR14_BRTAKEN
1457       || r_type == R_PPC64_REL14_BRTAKEN)
1458     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
1459
1460   if (is_isa_v2)
1461     {
1462       /* Set 'a' bit.  This is 0b00010 in BO field for branch
1463          on CR(BI) insns (BO == 001at or 011at), and 0b01000
1464          for branch on CTR insns (BO == 1a00t or 1a01t).  */
1465       if ((insn & (0x14 << 21)) == (0x04 << 21))
1466         insn |= 0x02 << 21;
1467       else if ((insn & (0x14 << 21)) == (0x10 << 21))
1468         insn |= 0x08 << 21;
1469       else
1470         goto out;
1471     }
1472   else
1473     {
1474       bfd_vma target = 0;
1475       bfd_vma from;
1476
1477       if (!bfd_is_com_section (symbol->section))
1478         target = symbol->value;
1479       target += symbol->section->output_section->vma;
1480       target += symbol->section->output_offset;
1481       target += reloc_entry->addend;
1482
1483       from = (reloc_entry->address
1484               + input_section->output_offset
1485               + input_section->output_section->vma);
1486
1487       /* Invert 'y' bit if not the default.  */
1488       if ((bfd_signed_vma) (target - from) < 0)
1489         insn ^= 0x01 << 21;
1490     }
1491   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1492  out:
1493   return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
1494                                  input_section, output_bfd, error_message);
1495 }
1496
1497 static bfd_reloc_status_type
1498 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1499                          void *data, asection *input_section,
1500                          bfd *output_bfd, char **error_message)
1501 {
1502   /* If this is a relocatable link (output_bfd test tells us), just
1503      call the generic function.  Any adjustment will be done at final
1504      link time.  */
1505   if (output_bfd != NULL)
1506     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1507                                   input_section, output_bfd, error_message);
1508
1509   /* Subtract the symbol section base address.  */
1510   reloc_entry->addend -= symbol->section->output_section->vma;
1511   return bfd_reloc_continue;
1512 }
1513
1514 static bfd_reloc_status_type
1515 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1516                             void *data, asection *input_section,
1517                             bfd *output_bfd, char **error_message)
1518 {
1519   /* If this is a relocatable link (output_bfd test tells us), just
1520      call the generic function.  Any adjustment will be done at final
1521      link time.  */
1522   if (output_bfd != NULL)
1523     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1524                                   input_section, output_bfd, error_message);
1525
1526   /* Subtract the symbol section base address.  */
1527   reloc_entry->addend -= symbol->section->output_section->vma;
1528
1529   /* Adjust the addend for sign extension of the low 16 bits.  */
1530   reloc_entry->addend += 0x8000;
1531   return bfd_reloc_continue;
1532 }
1533
1534 static bfd_reloc_status_type
1535 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1536                      void *data, asection *input_section,
1537                      bfd *output_bfd, char **error_message)
1538 {
1539   bfd_vma TOCstart;
1540
1541   /* If this is a relocatable link (output_bfd test tells us), just
1542      call the generic function.  Any adjustment will be done at final
1543      link time.  */
1544   if (output_bfd != NULL)
1545     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1546                                   input_section, output_bfd, error_message);
1547
1548   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1549   if (TOCstart == 0)
1550     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1551
1552   /* Subtract the TOC base address.  */
1553   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1554   return bfd_reloc_continue;
1555 }
1556
1557 static bfd_reloc_status_type
1558 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1559                         void *data, asection *input_section,
1560                         bfd *output_bfd, char **error_message)
1561 {
1562   bfd_vma TOCstart;
1563
1564   /* If this is a relocatable link (output_bfd test tells us), just
1565      call the generic function.  Any adjustment will be done at final
1566      link time.  */
1567   if (output_bfd != NULL)
1568     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1569                                   input_section, output_bfd, error_message);
1570
1571   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1572   if (TOCstart == 0)
1573     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1574
1575   /* Subtract the TOC base address.  */
1576   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1577
1578   /* Adjust the addend for sign extension of the low 16 bits.  */
1579   reloc_entry->addend += 0x8000;
1580   return bfd_reloc_continue;
1581 }
1582
1583 static bfd_reloc_status_type
1584 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1585                        void *data, asection *input_section,
1586                        bfd *output_bfd, char **error_message)
1587 {
1588   bfd_vma TOCstart;
1589   bfd_size_type octets;
1590
1591   /* If this is a relocatable link (output_bfd test tells us), just
1592      call the generic function.  Any adjustment will be done at final
1593      link time.  */
1594   if (output_bfd != NULL)
1595     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1596                                   input_section, output_bfd, error_message);
1597
1598   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1599   if (TOCstart == 0)
1600     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1601
1602   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
1603   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
1604   return bfd_reloc_ok;
1605 }
1606
1607 static bfd_reloc_status_type
1608 ppc64_elf_prefix_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1609                         void *data, asection *input_section,
1610                         bfd *output_bfd, char **error_message)
1611 {
1612   uint64_t insn;
1613   bfd_vma targ;
1614
1615   if (output_bfd != NULL)
1616     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1617                                   input_section, output_bfd, error_message);
1618
1619   insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1620   insn <<= 32;
1621   insn |= bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address + 4);
1622
1623   targ = (symbol->section->output_section->vma
1624           + symbol->section->output_offset
1625           + reloc_entry->addend);
1626   if (!bfd_is_com_section (symbol->section))
1627     targ += symbol->value;
1628   if (reloc_entry->howto->type == R_PPC64_D34_HA30)
1629     targ += 1ULL << 33;
1630   if (reloc_entry->howto->pc_relative)
1631     {
1632       bfd_vma from = (reloc_entry->address
1633                       + input_section->output_offset
1634                       + input_section->output_section->vma);
1635       targ -=from;
1636     }
1637   targ >>= reloc_entry->howto->rightshift;
1638   insn &= ~reloc_entry->howto->dst_mask;
1639   insn |= ((targ << 16) | (targ & 0xffff)) & reloc_entry->howto->dst_mask;
1640   bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + reloc_entry->address);
1641   bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address + 4);
1642   if (reloc_entry->howto->complain_on_overflow == complain_overflow_signed
1643       && (targ + (1ULL << (reloc_entry->howto->bitsize - 1))
1644           >= 1ULL << reloc_entry->howto->bitsize))
1645     return bfd_reloc_overflow;
1646   return bfd_reloc_ok;
1647 }
1648
1649 static bfd_reloc_status_type
1650 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1651                            void *data, asection *input_section,
1652                            bfd *output_bfd, char **error_message)
1653 {
1654   /* If this is a relocatable link (output_bfd test tells us), just
1655      call the generic function.  Any adjustment will be done at final
1656      link time.  */
1657   if (output_bfd != NULL)
1658     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1659                                   input_section, output_bfd, error_message);
1660
1661   if (error_message != NULL)
1662     {
1663       static char buf[60];
1664       sprintf (buf, "generic linker can't handle %s",
1665                reloc_entry->howto->name);
1666       *error_message = buf;
1667     }
1668   return bfd_reloc_dangerous;
1669 }
1670
1671 /* Track GOT entries needed for a given symbol.  We might need more
1672    than one got entry per symbol.  */
1673 struct got_entry
1674 {
1675   struct got_entry *next;
1676
1677   /* The symbol addend that we'll be placing in the GOT.  */
1678   bfd_vma addend;
1679
1680   /* Unlike other ELF targets, we use separate GOT entries for the same
1681      symbol referenced from different input files.  This is to support
1682      automatic multiple TOC/GOT sections, where the TOC base can vary
1683      from one input file to another.  After partitioning into TOC groups
1684      we merge entries within the group.
1685
1686      Point to the BFD owning this GOT entry.  */
1687   bfd *owner;
1688
1689   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
1690      TLS_TPREL or TLS_DTPREL for tls entries.  */
1691   unsigned char tls_type;
1692
1693   /* Non-zero if got.ent points to real entry.  */
1694   unsigned char is_indirect;
1695
1696   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
1697   union
1698   {
1699     bfd_signed_vma refcount;
1700     bfd_vma offset;
1701     struct got_entry *ent;
1702   } got;
1703 };
1704
1705 /* The same for PLT.  */
1706 struct plt_entry
1707 {
1708   struct plt_entry *next;
1709
1710   bfd_vma addend;
1711
1712   union
1713   {
1714     bfd_signed_vma refcount;
1715     bfd_vma offset;
1716   } plt;
1717 };
1718
1719 struct ppc64_elf_obj_tdata
1720 {
1721   struct elf_obj_tdata elf;
1722
1723   /* Shortcuts to dynamic linker sections.  */
1724   asection *got;
1725   asection *relgot;
1726
1727   /* Used during garbage collection.  We attach global symbols defined
1728      on removed .opd entries to this section so that the sym is removed.  */
1729   asection *deleted_section;
1730
1731   /* TLS local dynamic got entry handling.  Support for multiple GOT
1732      sections means we potentially need one of these for each input bfd.  */
1733   struct got_entry tlsld_got;
1734
1735   union
1736   {
1737     /* A copy of relocs before they are modified for --emit-relocs.  */
1738     Elf_Internal_Rela *relocs;
1739
1740     /* Section contents.  */
1741     bfd_byte *contents;
1742   } opd;
1743
1744   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
1745      the reloc to be in the range -32768 to 32767.  */
1746   unsigned int has_small_toc_reloc : 1;
1747
1748   /* Set if toc/got ha relocs detected not using r2, or lo reloc
1749      instruction not one we handle.  */
1750   unsigned int unexpected_toc_insn : 1;
1751
1752   /* Set if got relocs that can be optimised are present in this file.  */
1753   unsigned int has_gotrel : 1;
1754 };
1755
1756 #define ppc64_elf_tdata(bfd) \
1757   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
1758
1759 #define ppc64_tlsld_got(bfd) \
1760   (&ppc64_elf_tdata (bfd)->tlsld_got)
1761
1762 #define is_ppc64_elf(bfd) \
1763   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
1764    && elf_object_id (bfd) == PPC64_ELF_DATA)
1765
1766 /* Override the generic function because we store some extras.  */
1767
1768 static bfd_boolean
1769 ppc64_elf_mkobject (bfd *abfd)
1770 {
1771   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
1772                                   PPC64_ELF_DATA);
1773 }
1774
1775 /* Fix bad default arch selected for a 64 bit input bfd when the
1776    default is 32 bit.  Also select arch based on apuinfo.  */
1777
1778 static bfd_boolean
1779 ppc64_elf_object_p (bfd *abfd)
1780 {
1781   if (!abfd->arch_info->the_default)
1782     return TRUE;
1783
1784   if (abfd->arch_info->bits_per_word == 32)
1785     {
1786       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
1787
1788       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
1789         {
1790           /* Relies on arch after 32 bit default being 64 bit default.  */
1791           abfd->arch_info = abfd->arch_info->next;
1792           BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
1793         }
1794     }
1795   return _bfd_elf_ppc_set_arch (abfd);
1796 }
1797
1798 /* Support for core dump NOTE sections.  */
1799
1800 static bfd_boolean
1801 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
1802 {
1803   size_t offset, size;
1804
1805   if (note->descsz != 504)
1806     return FALSE;
1807
1808   /* pr_cursig */
1809   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
1810
1811   /* pr_pid */
1812   elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
1813
1814   /* pr_reg */
1815   offset = 112;
1816   size = 384;
1817
1818   /* Make a ".reg/999" section.  */
1819   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
1820                                           size, note->descpos + offset);
1821 }
1822
1823 static bfd_boolean
1824 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
1825 {
1826   if (note->descsz != 136)
1827     return FALSE;
1828
1829   elf_tdata (abfd)->core->pid
1830     = bfd_get_32 (abfd, note->descdata + 24);
1831   elf_tdata (abfd)->core->program
1832     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
1833   elf_tdata (abfd)->core->command
1834     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
1835
1836   return TRUE;
1837 }
1838
1839 static char *
1840 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
1841                            ...)
1842 {
1843   switch (note_type)
1844     {
1845     default:
1846       return NULL;
1847
1848     case NT_PRPSINFO:
1849       {
1850         char data[136] ATTRIBUTE_NONSTRING;
1851         va_list ap;
1852
1853         va_start (ap, note_type);
1854         memset (data, 0, sizeof (data));
1855         strncpy (data + 40, va_arg (ap, const char *), 16);
1856 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1857         DIAGNOSTIC_PUSH;
1858         /* GCC 8.0 and 8.1 warn about 80 equals destination size with
1859            -Wstringop-truncation:
1860            https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
1861          */
1862         DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
1863 #endif
1864         strncpy (data + 56, va_arg (ap, const char *), 80);
1865 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1866         DIAGNOSTIC_POP;
1867 #endif
1868         va_end (ap);
1869         return elfcore_write_note (abfd, buf, bufsiz,
1870                                    "CORE", note_type, data, sizeof (data));
1871       }
1872
1873     case NT_PRSTATUS:
1874       {
1875         char data[504];
1876         va_list ap;
1877         long pid;
1878         int cursig;
1879         const void *greg;
1880
1881         va_start (ap, note_type);
1882         memset (data, 0, 112);
1883         pid = va_arg (ap, long);
1884         bfd_put_32 (abfd, pid, data + 32);
1885         cursig = va_arg (ap, int);
1886         bfd_put_16 (abfd, cursig, data + 12);
1887         greg = va_arg (ap, const void *);
1888         memcpy (data + 112, greg, 384);
1889         memset (data + 496, 0, 8);
1890         va_end (ap);
1891         return elfcore_write_note (abfd, buf, bufsiz,
1892                                    "CORE", note_type, data, sizeof (data));
1893       }
1894     }
1895 }
1896
1897 /* Add extra PPC sections.  */
1898
1899 static const struct bfd_elf_special_section ppc64_elf_special_sections[] =
1900 {
1901   { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
1902   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1903   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1904   { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1905   { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1906   { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1907   { NULL,                     0,  0, 0,            0 }
1908 };
1909
1910 enum _ppc64_sec_type {
1911   sec_normal = 0,
1912   sec_opd = 1,
1913   sec_toc = 2
1914 };
1915
1916 struct _ppc64_elf_section_data
1917 {
1918   struct bfd_elf_section_data elf;
1919
1920   union
1921   {
1922     /* An array with one entry for each opd function descriptor,
1923        and some spares since opd entries may be either 16 or 24 bytes.  */
1924 #define OPD_NDX(OFF) ((OFF) >> 4)
1925     struct _opd_sec_data
1926     {
1927       /* Points to the function code section for local opd entries.  */
1928       asection **func_sec;
1929
1930       /* After editing .opd, adjust references to opd local syms.  */
1931       long *adjust;
1932     } opd;
1933
1934     /* An array for toc sections, indexed by offset/8.  */
1935     struct _toc_sec_data
1936     {
1937       /* Specifies the relocation symbol index used at a given toc offset.  */
1938       unsigned *symndx;
1939
1940       /* And the relocation addend.  */
1941       bfd_vma *add;
1942     } toc;
1943   } u;
1944
1945   enum _ppc64_sec_type sec_type:2;
1946
1947   /* Flag set when small branches are detected.  Used to
1948      select suitable defaults for the stub group size.  */
1949   unsigned int has_14bit_branch:1;
1950
1951   /* Flag set when PLTCALL relocs are detected.  */
1952   unsigned int has_pltcall:1;
1953
1954   /* Flag set when section has GOT relocations that can be optimised.  */
1955   unsigned int has_gotrel:1;
1956 };
1957
1958 #define ppc64_elf_section_data(sec) \
1959   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
1960
1961 static bfd_boolean
1962 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
1963 {
1964   if (!sec->used_by_bfd)
1965     {
1966       struct _ppc64_elf_section_data *sdata;
1967       bfd_size_type amt = sizeof (*sdata);
1968
1969       sdata = bfd_zalloc (abfd, amt);
1970       if (sdata == NULL)
1971         return FALSE;
1972       sec->used_by_bfd = sdata;
1973     }
1974
1975   return _bfd_elf_new_section_hook (abfd, sec);
1976 }
1977
1978 static struct _opd_sec_data *
1979 get_opd_info (asection * sec)
1980 {
1981   if (sec != NULL
1982       && ppc64_elf_section_data (sec) != NULL
1983       && ppc64_elf_section_data (sec)->sec_type == sec_opd)
1984     return &ppc64_elf_section_data (sec)->u.opd;
1985   return NULL;
1986 }
1987 \f
1988 /* Parameters for the qsort hook.  */
1989 static bfd_boolean synthetic_relocatable;
1990 static asection *synthetic_opd;
1991
1992 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
1993
1994 static int
1995 compare_symbols (const void *ap, const void *bp)
1996 {
1997   const asymbol *a = *(const asymbol **) ap;
1998   const asymbol *b = *(const asymbol **) bp;
1999
2000   /* Section symbols first.  */
2001   if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2002     return -1;
2003   if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2004     return 1;
2005
2006   /* then .opd symbols.  */
2007   if (synthetic_opd != NULL)
2008     {
2009       if (strcmp (a->section->name, ".opd") == 0
2010           && strcmp (b->section->name, ".opd") != 0)
2011         return -1;
2012       if (strcmp (a->section->name, ".opd") != 0
2013           && strcmp (b->section->name, ".opd") == 0)
2014         return 1;
2015     }
2016
2017   /* then other code symbols.  */
2018   if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2019        == (SEC_CODE | SEC_ALLOC))
2020       && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2021           != (SEC_CODE | SEC_ALLOC)))
2022     return -1;
2023
2024   if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2025        != (SEC_CODE | SEC_ALLOC))
2026       && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2027           == (SEC_CODE | SEC_ALLOC)))
2028     return 1;
2029
2030   if (synthetic_relocatable)
2031     {
2032       if (a->section->id < b->section->id)
2033         return -1;
2034
2035       if (a->section->id > b->section->id)
2036         return 1;
2037     }
2038
2039   if (a->value + a->section->vma < b->value + b->section->vma)
2040     return -1;
2041
2042   if (a->value + a->section->vma > b->value + b->section->vma)
2043     return 1;
2044
2045   /* For syms with the same value, prefer strong dynamic global function
2046      syms over other syms.  */
2047   if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2048     return -1;
2049
2050   if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2051     return 1;
2052
2053   if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2054     return -1;
2055
2056   if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2057     return 1;
2058
2059   if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2060     return -1;
2061
2062   if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2063     return 1;
2064
2065   if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2066     return -1;
2067
2068   if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2069     return 1;
2070
2071   return a > b;
2072 }
2073
2074 /* Search SYMS for a symbol of the given VALUE.  */
2075
2076 static asymbol *
2077 sym_exists_at (asymbol **syms, long lo, long hi, unsigned int id, bfd_vma value)
2078 {
2079   long mid;
2080
2081   if (id == (unsigned) -1)
2082     {
2083       while (lo < hi)
2084         {
2085           mid = (lo + hi) >> 1;
2086           if (syms[mid]->value + syms[mid]->section->vma < value)
2087             lo = mid + 1;
2088           else if (syms[mid]->value + syms[mid]->section->vma > value)
2089             hi = mid;
2090           else
2091             return syms[mid];
2092         }
2093     }
2094   else
2095     {
2096       while (lo < hi)
2097         {
2098           mid = (lo + hi) >> 1;
2099           if (syms[mid]->section->id < id)
2100             lo = mid + 1;
2101           else if (syms[mid]->section->id > id)
2102             hi = mid;
2103           else if (syms[mid]->value < value)
2104             lo = mid + 1;
2105           else if (syms[mid]->value > value)
2106             hi = mid;
2107           else
2108             return syms[mid];
2109         }
2110     }
2111   return NULL;
2112 }
2113
2114 static bfd_boolean
2115 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
2116 {
2117   bfd_vma vma = *(bfd_vma *) ptr;
2118   return ((section->flags & SEC_ALLOC) != 0
2119           && section->vma <= vma
2120           && vma < section->vma + section->size);
2121 }
2122
2123 /* Create synthetic symbols, effectively restoring "dot-symbol" function
2124    entry syms.  Also generate @plt symbols for the glink branch table.
2125    Returns count of synthetic symbols in RET or -1 on error.  */
2126
2127 static long
2128 ppc64_elf_get_synthetic_symtab (bfd *abfd,
2129                                 long static_count, asymbol **static_syms,
2130                                 long dyn_count, asymbol **dyn_syms,
2131                                 asymbol **ret)
2132 {
2133   asymbol *s;
2134   size_t i, j, count;
2135   char *names;
2136   size_t symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2137   asection *opd = NULL;
2138   bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2139   asymbol **syms;
2140   int abi = abiversion (abfd);
2141
2142   *ret = NULL;
2143
2144   if (abi < 2)
2145     {
2146       opd = bfd_get_section_by_name (abfd, ".opd");
2147       if (opd == NULL && abi == 1)
2148         return 0;
2149     }
2150
2151   syms = NULL;
2152   codesecsym = 0;
2153   codesecsymend = 0;
2154   secsymend = 0;
2155   opdsymend = 0;
2156   symcount = 0;
2157   if (opd != NULL)
2158     {
2159       symcount = static_count;
2160       if (!relocatable)
2161         symcount += dyn_count;
2162       if (symcount == 0)
2163         return 0;
2164
2165       syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
2166       if (syms == NULL)
2167         return -1;
2168
2169       if (!relocatable && static_count != 0 && dyn_count != 0)
2170         {
2171           /* Use both symbol tables.  */
2172           memcpy (syms, static_syms, static_count * sizeof (*syms));
2173           memcpy (syms + static_count, dyn_syms,
2174                   (dyn_count + 1) * sizeof (*syms));
2175         }
2176       else if (!relocatable && static_count == 0)
2177         memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
2178       else
2179         memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
2180
2181       /* Trim uninteresting symbols.  Interesting symbols are section,
2182          function, and notype symbols.  */
2183       for (i = 0, j = 0; i < symcount; ++i)
2184         if ((syms[i]->flags & (BSF_FILE | BSF_OBJECT | BSF_THREAD_LOCAL
2185                                | BSF_RELC | BSF_SRELC)) == 0)
2186           syms[j++] = syms[i];
2187       symcount = j;
2188
2189       synthetic_relocatable = relocatable;
2190       synthetic_opd = opd;
2191       qsort (syms, symcount, sizeof (*syms), compare_symbols);
2192
2193       if (!relocatable && symcount > 1)
2194         {
2195           /* Trim duplicate syms, since we may have merged the normal
2196              and dynamic symbols.  Actually, we only care about syms
2197              that have different values, so trim any with the same
2198              value.  Don't consider ifunc and ifunc resolver symbols
2199              duplicates however, because GDB wants to know whether a
2200              text symbol is an ifunc resolver.  */
2201           for (i = 1, j = 1; i < symcount; ++i)
2202             {
2203               const asymbol *s0 = syms[i - 1];
2204               const asymbol *s1 = syms[i];
2205
2206               if ((s0->value + s0->section->vma
2207                    != s1->value + s1->section->vma)
2208                   || ((s0->flags & BSF_GNU_INDIRECT_FUNCTION)
2209                       != (s1->flags & BSF_GNU_INDIRECT_FUNCTION)))
2210                 syms[j++] = syms[i];
2211             }
2212           symcount = j;
2213         }
2214
2215       i = 0;
2216       /* Note that here and in compare_symbols we can't compare opd and
2217          sym->section directly.  With separate debug info files, the
2218          symbols will be extracted from the debug file while abfd passed
2219          to this function is the real binary.  */
2220       if (strcmp (syms[i]->section->name, ".opd") == 0)
2221         ++i;
2222       codesecsym = i;
2223
2224       for (; i < symcount; ++i)
2225         if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC
2226                                          | SEC_THREAD_LOCAL))
2227              != (SEC_CODE | SEC_ALLOC))
2228             || (syms[i]->flags & BSF_SECTION_SYM) == 0)
2229           break;
2230       codesecsymend = i;
2231
2232       for (; i < symcount; ++i)
2233         if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
2234           break;
2235       secsymend = i;
2236
2237       for (; i < symcount; ++i)
2238         if (strcmp (syms[i]->section->name, ".opd") != 0)
2239           break;
2240       opdsymend = i;
2241
2242       for (; i < symcount; ++i)
2243         if (((syms[i]->section->flags
2244               & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL)))
2245             != (SEC_CODE | SEC_ALLOC))
2246           break;
2247       symcount = i;
2248     }
2249   count = 0;
2250
2251   if (relocatable)
2252     {
2253       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2254       arelent *r;
2255       size_t size;
2256       size_t relcount;
2257
2258       if (opdsymend == secsymend)
2259         goto done;
2260
2261       slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2262       relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
2263       if (relcount == 0)
2264         goto done;
2265
2266       if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
2267         {
2268           count = -1;
2269           goto done;
2270         }
2271
2272       size = 0;
2273       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2274         {
2275           asymbol *sym;
2276
2277           while (r < opd->relocation + relcount
2278                  && r->address < syms[i]->value + opd->vma)
2279             ++r;
2280
2281           if (r == opd->relocation + relcount)
2282             break;
2283
2284           if (r->address != syms[i]->value + opd->vma)
2285             continue;
2286
2287           if (r->howto->type != R_PPC64_ADDR64)
2288             continue;
2289
2290           sym = *r->sym_ptr_ptr;
2291           if (!sym_exists_at (syms, opdsymend, symcount,
2292                               sym->section->id, sym->value + r->addend))
2293             {
2294               ++count;
2295               size += sizeof (asymbol);
2296               size += strlen (syms[i]->name) + 2;
2297             }
2298         }
2299
2300       if (size == 0)
2301         goto done;
2302       s = *ret = bfd_malloc (size);
2303       if (s == NULL)
2304         {
2305           count = -1;
2306           goto done;
2307         }
2308
2309       names = (char *) (s + count);
2310
2311       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2312         {
2313           asymbol *sym;
2314
2315           while (r < opd->relocation + relcount
2316                  && r->address < syms[i]->value + opd->vma)
2317             ++r;
2318
2319           if (r == opd->relocation + relcount)
2320             break;
2321
2322           if (r->address != syms[i]->value + opd->vma)
2323             continue;
2324
2325           if (r->howto->type != R_PPC64_ADDR64)
2326             continue;
2327
2328           sym = *r->sym_ptr_ptr;
2329           if (!sym_exists_at (syms, opdsymend, symcount,
2330                               sym->section->id, sym->value + r->addend))
2331             {
2332               size_t len;
2333
2334               *s = *syms[i];
2335               s->flags |= BSF_SYNTHETIC;
2336               s->section = sym->section;
2337               s->value = sym->value + r->addend;
2338               s->name = names;
2339               *names++ = '.';
2340               len = strlen (syms[i]->name);
2341               memcpy (names, syms[i]->name, len + 1);
2342               names += len + 1;
2343               /* Have udata.p point back to the original symbol this
2344                  synthetic symbol was derived from.  */
2345               s->udata.p = syms[i];
2346               s++;
2347             }
2348         }
2349     }
2350   else
2351     {
2352       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2353       bfd_byte *contents = NULL;
2354       size_t size;
2355       size_t plt_count = 0;
2356       bfd_vma glink_vma = 0, resolv_vma = 0;
2357       asection *dynamic, *glink = NULL, *relplt = NULL;
2358       arelent *p;
2359
2360       if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
2361         {
2362         free_contents_and_exit_err:
2363           count = -1;
2364         free_contents_and_exit:
2365           if (contents)
2366             free (contents);
2367           goto done;
2368         }
2369
2370       size = 0;
2371       for (i = secsymend; i < opdsymend; ++i)
2372         {
2373           bfd_vma ent;
2374
2375           /* Ignore bogus symbols.  */
2376           if (syms[i]->value > opd->size - 8)
2377             continue;
2378
2379           ent = bfd_get_64 (abfd, contents + syms[i]->value);
2380           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2381             {
2382               ++count;
2383               size += sizeof (asymbol);
2384               size += strlen (syms[i]->name) + 2;
2385             }
2386         }
2387
2388       /* Get start of .glink stubs from DT_PPC64_GLINK.  */
2389       if (dyn_count != 0
2390           && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
2391         {
2392           bfd_byte *dynbuf, *extdyn, *extdynend;
2393           size_t extdynsize;
2394           void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
2395
2396           if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
2397             goto free_contents_and_exit_err;
2398
2399           extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
2400           swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
2401
2402           extdyn = dynbuf;
2403           extdynend = extdyn + dynamic->size;
2404           for (; extdyn < extdynend; extdyn += extdynsize)
2405             {
2406               Elf_Internal_Dyn dyn;
2407               (*swap_dyn_in) (abfd, extdyn, &dyn);
2408
2409               if (dyn.d_tag == DT_NULL)
2410                 break;
2411
2412               if (dyn.d_tag == DT_PPC64_GLINK)
2413                 {
2414                   /* The first glink stub starts at DT_PPC64_GLINK plus 32.
2415                      See comment in ppc64_elf_finish_dynamic_sections. */
2416                   glink_vma = dyn.d_un.d_val + 8 * 4;
2417                   /* The .glink section usually does not survive the final
2418                      link; search for the section (usually .text) where the
2419                      glink stubs now reside.  */
2420                   glink = bfd_sections_find_if (abfd, section_covers_vma,
2421                                                 &glink_vma);
2422                   break;
2423                 }
2424             }
2425
2426           free (dynbuf);
2427         }
2428
2429       if (glink != NULL)
2430         {
2431           /* Determine __glink trampoline by reading the relative branch
2432              from the first glink stub.  */
2433           bfd_byte buf[4];
2434           unsigned int off = 0;
2435
2436           while (bfd_get_section_contents (abfd, glink, buf,
2437                                            glink_vma + off - glink->vma, 4))
2438             {
2439               unsigned int insn = bfd_get_32 (abfd, buf);
2440               insn ^= B_DOT;
2441               if ((insn & ~0x3fffffc) == 0)
2442                 {
2443                   resolv_vma
2444                     = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
2445                   break;
2446                 }
2447               off += 4;
2448               if (off > 4)
2449                 break;
2450             }
2451
2452           if (resolv_vma)
2453             size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
2454
2455           relplt = bfd_get_section_by_name (abfd, ".rela.plt");
2456           if (relplt != NULL)
2457             {
2458               slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2459               if (!(*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
2460                 goto free_contents_and_exit_err;
2461
2462               plt_count = relplt->size / sizeof (Elf64_External_Rela);
2463               size += plt_count * sizeof (asymbol);
2464
2465               p = relplt->relocation;
2466               for (i = 0; i < plt_count; i++, p++)
2467                 {
2468                   size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
2469                   if (p->addend != 0)
2470                     size += sizeof ("+0x") - 1 + 16;
2471                 }
2472             }
2473         }
2474
2475       if (size == 0)
2476         goto free_contents_and_exit;
2477       s = *ret = bfd_malloc (size);
2478       if (s == NULL)
2479         goto free_contents_and_exit_err;
2480
2481       names = (char *) (s + count + plt_count + (resolv_vma != 0));
2482
2483       for (i = secsymend; i < opdsymend; ++i)
2484         {
2485           bfd_vma ent;
2486
2487           if (syms[i]->value > opd->size - 8)
2488             continue;
2489
2490           ent = bfd_get_64 (abfd, contents + syms[i]->value);
2491           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2492             {
2493               size_t lo, hi;
2494               size_t len;
2495               asection *sec = abfd->sections;
2496
2497               *s = *syms[i];
2498               lo = codesecsym;
2499               hi = codesecsymend;
2500               while (lo < hi)
2501                 {
2502                   size_t mid = (lo + hi) >> 1;
2503                   if (syms[mid]->section->vma < ent)
2504                     lo = mid + 1;
2505                   else if (syms[mid]->section->vma > ent)
2506                     hi = mid;
2507                   else
2508                     {
2509                       sec = syms[mid]->section;
2510                       break;
2511                     }
2512                 }
2513
2514               if (lo >= hi && lo > codesecsym)
2515                 sec = syms[lo - 1]->section;
2516
2517               for (; sec != NULL; sec = sec->next)
2518                 {
2519                   if (sec->vma > ent)
2520                     break;
2521                   /* SEC_LOAD may not be set if SEC is from a separate debug
2522                      info file.  */
2523                   if ((sec->flags & SEC_ALLOC) == 0)
2524                     break;
2525                   if ((sec->flags & SEC_CODE) != 0)
2526                     s->section = sec;
2527                 }
2528               s->flags |= BSF_SYNTHETIC;
2529               s->value = ent - s->section->vma;
2530               s->name = names;
2531               *names++ = '.';
2532               len = strlen (syms[i]->name);
2533               memcpy (names, syms[i]->name, len + 1);
2534               names += len + 1;
2535               /* Have udata.p point back to the original symbol this
2536                  synthetic symbol was derived from.  */
2537               s->udata.p = syms[i];
2538               s++;
2539             }
2540         }
2541       free (contents);
2542
2543       if (glink != NULL && relplt != NULL)
2544         {
2545           if (resolv_vma)
2546             {
2547               /* Add a symbol for the main glink trampoline.  */
2548               memset (s, 0, sizeof *s);
2549               s->the_bfd = abfd;
2550               s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
2551               s->section = glink;
2552               s->value = resolv_vma - glink->vma;
2553               s->name = names;
2554               memcpy (names, "__glink_PLTresolve",
2555                       sizeof ("__glink_PLTresolve"));
2556               names += sizeof ("__glink_PLTresolve");
2557               s++;
2558               count++;
2559             }
2560
2561           /* FIXME: It would be very much nicer to put sym@plt on the
2562              stub rather than on the glink branch table entry.  The
2563              objdump disassembler would then use a sensible symbol
2564              name on plt calls.  The difficulty in doing so is
2565              a) finding the stubs, and,
2566              b) matching stubs against plt entries, and,
2567              c) there can be multiple stubs for a given plt entry.
2568
2569              Solving (a) could be done by code scanning, but older
2570              ppc64 binaries used different stubs to current code.
2571              (b) is the tricky one since you need to known the toc
2572              pointer for at least one function that uses a pic stub to
2573              be able to calculate the plt address referenced.
2574              (c) means gdb would need to set multiple breakpoints (or
2575              find the glink branch itself) when setting breakpoints
2576              for pending shared library loads.  */
2577           p = relplt->relocation;
2578           for (i = 0; i < plt_count; i++, p++)
2579             {
2580               size_t len;
2581
2582               *s = **p->sym_ptr_ptr;
2583               /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
2584                  we are defining a symbol, ensure one of them is set.  */
2585               if ((s->flags & BSF_LOCAL) == 0)
2586                 s->flags |= BSF_GLOBAL;
2587               s->flags |= BSF_SYNTHETIC;
2588               s->section = glink;
2589               s->value = glink_vma - glink->vma;
2590               s->name = names;
2591               s->udata.p = NULL;
2592               len = strlen ((*p->sym_ptr_ptr)->name);
2593               memcpy (names, (*p->sym_ptr_ptr)->name, len);
2594               names += len;
2595               if (p->addend != 0)
2596                 {
2597                   memcpy (names, "+0x", sizeof ("+0x") - 1);
2598                   names += sizeof ("+0x") - 1;
2599                   bfd_sprintf_vma (abfd, names, p->addend);
2600                   names += strlen (names);
2601                 }
2602               memcpy (names, "@plt", sizeof ("@plt"));
2603               names += sizeof ("@plt");
2604               s++;
2605               if (abi < 2)
2606                 {
2607                   glink_vma += 8;
2608                   if (i >= 0x8000)
2609                     glink_vma += 4;
2610                 }
2611               else
2612                 glink_vma += 4;
2613             }
2614           count += plt_count;
2615         }
2616     }
2617
2618  done:
2619   free (syms);
2620   return count;
2621 }
2622 \f
2623 /* The following functions are specific to the ELF linker, while
2624    functions above are used generally.  Those named ppc64_elf_* are
2625    called by the main ELF linker code.  They appear in this file more
2626    or less in the order in which they are called.  eg.
2627    ppc64_elf_check_relocs is called early in the link process,
2628    ppc64_elf_finish_dynamic_sections is one of the last functions
2629    called.
2630
2631    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
2632    functions have both a function code symbol and a function descriptor
2633    symbol.  A call to foo in a relocatable object file looks like:
2634
2635    .            .text
2636    .    x:
2637    .            bl      .foo
2638    .            nop
2639
2640    The function definition in another object file might be:
2641
2642    .            .section .opd
2643    .    foo:    .quad   .foo
2644    .            .quad   .TOC.@tocbase
2645    .            .quad   0
2646    .
2647    .            .text
2648    .    .foo:   blr
2649
2650    When the linker resolves the call during a static link, the branch
2651    unsurprisingly just goes to .foo and the .opd information is unused.
2652    If the function definition is in a shared library, things are a little
2653    different:  The call goes via a plt call stub, the opd information gets
2654    copied to the plt, and the linker patches the nop.
2655
2656    .    x:
2657    .            bl      .foo_stub
2658    .            ld      2,40(1)
2659    .
2660    .
2661    .    .foo_stub:
2662    .            std     2,40(1)                 # in practice, the call stub
2663    .            addis   11,2,Lfoo@toc@ha        # is slightly optimized, but
2664    .            addi    11,11,Lfoo@toc@l        # this is the general idea
2665    .            ld      12,0(11)
2666    .            ld      2,8(11)
2667    .            mtctr   12
2668    .            ld      11,16(11)
2669    .            bctr
2670    .
2671    .            .section .plt
2672    .    Lfoo:   reloc (R_PPC64_JMP_SLOT, foo)
2673
2674    The "reloc ()" notation is supposed to indicate that the linker emits
2675    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
2676    copying.
2677
2678    What are the difficulties here?  Well, firstly, the relocations
2679    examined by the linker in check_relocs are against the function code
2680    sym .foo, while the dynamic relocation in the plt is emitted against
2681    the function descriptor symbol, foo.  Somewhere along the line, we need
2682    to carefully copy dynamic link information from one symbol to the other.
2683    Secondly, the generic part of the elf linker will make .foo a dynamic
2684    symbol as is normal for most other backends.  We need foo dynamic
2685    instead, at least for an application final link.  However, when
2686    creating a shared library containing foo, we need to have both symbols
2687    dynamic so that references to .foo are satisfied during the early
2688    stages of linking.  Otherwise the linker might decide to pull in a
2689    definition from some other object, eg. a static library.
2690
2691    Update: As of August 2004, we support a new convention.  Function
2692    calls may use the function descriptor symbol, ie. "bl foo".  This
2693    behaves exactly as "bl .foo".  */
2694
2695 /* Of those relocs that might be copied as dynamic relocs, this
2696    function selects those that must be copied when linking a shared
2697    library or PIE, even when the symbol is local.  */
2698
2699 static int
2700 must_be_dyn_reloc (struct bfd_link_info *info,
2701                    enum elf_ppc64_reloc_type r_type)
2702 {
2703   switch (r_type)
2704     {
2705     default:
2706       /* Only relative relocs can be resolved when the object load
2707          address isn't fixed.  DTPREL64 is excluded because the
2708          dynamic linker needs to differentiate global dynamic from
2709          local dynamic __tls_index pairs when PPC64_OPT_TLS is set.  */
2710       return 1;
2711
2712     case R_PPC64_REL32:
2713     case R_PPC64_REL64:
2714     case R_PPC64_REL30:
2715       return 0;
2716
2717     case R_PPC64_TPREL16:
2718     case R_PPC64_TPREL16_LO:
2719     case R_PPC64_TPREL16_HI:
2720     case R_PPC64_TPREL16_HA:
2721     case R_PPC64_TPREL16_DS:
2722     case R_PPC64_TPREL16_LO_DS:
2723     case R_PPC64_TPREL16_HIGH:
2724     case R_PPC64_TPREL16_HIGHA:
2725     case R_PPC64_TPREL16_HIGHER:
2726     case R_PPC64_TPREL16_HIGHERA:
2727     case R_PPC64_TPREL16_HIGHEST:
2728     case R_PPC64_TPREL16_HIGHESTA:
2729     case R_PPC64_TPREL64:
2730       /* These relocations are relative but in a shared library the
2731          linker doesn't know the thread pointer base.  */
2732       return bfd_link_dll (info);
2733     }
2734 }
2735
2736 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
2737    copying dynamic variables from a shared lib into an app's dynbss
2738    section, and instead use a dynamic relocation to point into the
2739    shared lib.  With code that gcc generates, it's vital that this be
2740    enabled;  In the PowerPC64 ABI, the address of a function is actually
2741    the address of a function descriptor, which resides in the .opd
2742    section.  gcc uses the descriptor directly rather than going via the
2743    GOT as some other ABI's do, which means that initialized function
2744    pointers must reference the descriptor.  Thus, a function pointer
2745    initialized to the address of a function in a shared library will
2746    either require a copy reloc, or a dynamic reloc.  Using a copy reloc
2747    redefines the function descriptor symbol to point to the copy.  This
2748    presents a problem as a plt entry for that function is also
2749    initialized from the function descriptor symbol and the copy reloc
2750    may not be initialized first.  */
2751 #define ELIMINATE_COPY_RELOCS 1
2752
2753 /* Section name for stubs is the associated section name plus this
2754    string.  */
2755 #define STUB_SUFFIX ".stub"
2756
2757 /* Linker stubs.
2758    ppc_stub_long_branch:
2759    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
2760    destination, but a 24 bit branch in a stub section will reach.
2761    .    b       dest
2762
2763    ppc_stub_plt_branch:
2764    Similar to the above, but a 24 bit branch in the stub section won't
2765    reach its destination.
2766    .    addis   %r11,%r2,xxx@toc@ha
2767    .    ld      %r12,xxx@toc@l(%r11)
2768    .    mtctr   %r12
2769    .    bctr
2770
2771    ppc_stub_plt_call:
2772    Used to call a function in a shared library.  If it so happens that
2773    the plt entry referenced crosses a 64k boundary, then an extra
2774    "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
2775    ppc_stub_plt_call_r2save starts with "std %r2,40(%r1)".
2776    .    addis   %r11,%r2,xxx@toc@ha
2777    .    ld      %r12,xxx+0@toc@l(%r11)
2778    .    mtctr   %r12
2779    .    ld      %r2,xxx+8@toc@l(%r11)
2780    .    ld      %r11,xxx+16@toc@l(%r11)
2781    .    bctr
2782
2783    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
2784    code to adjust the value and save r2 to support multiple toc sections.
2785    A ppc_stub_long_branch with an r2 offset looks like:
2786    .    std     %r2,40(%r1)
2787    .    addis   %r2,%r2,off@ha
2788    .    addi    %r2,%r2,off@l
2789    .    b       dest
2790
2791    A ppc_stub_plt_branch with an r2 offset looks like:
2792    .    std     %r2,40(%r1)
2793    .    addis   %r11,%r2,xxx@toc@ha
2794    .    ld      %r12,xxx@toc@l(%r11)
2795    .    addis   %r2,%r2,off@ha
2796    .    addi    %r2,%r2,off@l
2797    .    mtctr   %r12
2798    .    bctr
2799
2800    All of the above stubs are shown as their ELFv1 variants.  ELFv2
2801    variants exist too, simpler for plt calls since a new toc pointer
2802    and static chain are not loaded by the stub.  In addition, ELFv2
2803    has some more complex stubs to handle calls marked with NOTOC
2804    relocs from functions where r2 is not a valid toc pointer.  These
2805    come in two flavours, the ones shown below, and _both variants that
2806    start with "std %r2,24(%r1)" to save r2 in the unlikely event that
2807    one call is from a function where r2 is used as the toc pointer but
2808    needs a toc adjusting stub for small-model multi-toc, and another
2809    call is from a function where r2 is not valid.
2810    ppc_stub_long_branch_notoc:
2811    .    mflr    %r12
2812    .    bcl     20,31,1f
2813    .  1:
2814    .    mflr    %r11
2815    .    mtlr    %r12
2816    .    addis   %r12,%r11,dest-1b@ha
2817    .    addi    %r12,%r12,dest-1b@l
2818    .    b       dest
2819
2820    ppc_stub_plt_branch_notoc:
2821    .    mflr    %r12
2822    .    bcl     20,31,1f
2823    .  1:
2824    .    mflr    %r11
2825    .    mtlr    %r12
2826    .    lis     %r12,xxx-1b@highest
2827    .    ori     %r12,%r12,xxx-1b@higher
2828    .    sldi    %r12,%r12,32
2829    .    oris    %r12,%r12,xxx-1b@high
2830    .    ori     %r12,%r12,xxx-1b@l
2831    .    add     %r12,%r11,%r12
2832    .    mtctr   %r12
2833    .    bctr
2834
2835    ppc_stub_plt_call_notoc:
2836    .    mflr    %r12
2837    .    bcl     20,31,1f
2838    .  1:
2839    .    mflr    %r11
2840    .    mtlr    %r12
2841    .    lis     %r12,xxx-1b@highest
2842    .    ori     %r12,%r12,xxx-1b@higher
2843    .    sldi    %r12,%r12,32
2844    .    oris    %r12,%r12,xxx-1b@high
2845    .    ori     %r12,%r12,xxx-1b@l
2846    .    ldx     %r12,%r11,%r12
2847    .    mtctr   %r12
2848    .    bctr
2849
2850    There are also ELFv1 powerxx variants of these stubs.
2851    ppc_stub_long_branch_notoc:
2852    .    pla     %r12,dest@pcrel
2853    .    b       dest
2854    ppc_stub_plt_branch_notoc:
2855    .    lis     %r11,(dest-1f)@highesta34
2856    .    ori     %r11,%r11,(dest-1f)@highera34
2857    .    sldi    %r11,%r11,34
2858    . 1: pla     %r12,dest@pcrel
2859    .    add     %r12,%r11,%r12
2860    .    mtctr   %r12
2861    .    bctr
2862    ppc_stub_plt_call_notoc:
2863    .    lis     %r11,(xxx-1f)@highesta34
2864    .    ori     %r11,%r11,(xxx-1f)@highera34
2865    .    sldi    %r11,%r11,34
2866    . 1: pla     %r12,xxx@pcrel
2867    .    ldx     %r12,%r11,%r12
2868    .    mtctr   %r12
2869    .    bctr
2870
2871    In cases where the high instructions would add zero, they are
2872    omitted and following instructions modified in some cases.
2873    For example, a powerxx ppc_stub_plt_call_notoc might simplify down
2874    to
2875    .    pld     %r12,xxx@pcrel
2876    .    mtctr   %r12
2877    .    bctr
2878
2879    For a given stub group (a set of sections all using the same toc
2880    pointer value) there will be just one stub type used for any
2881    particular function symbol.  For example, if printf is called from
2882    code with the tocsave optimization (ie. r2 saved in function
2883    prologue) and therefore calls use a ppc_stub_plt_call linkage stub,
2884    and from other code without the tocsave optimization requiring a
2885    ppc_stub_plt_call_r2save linkage stub, a single stub of the latter
2886    type will be created.  Calls with the tocsave optimization will
2887    enter this stub after the instruction saving r2.  A similar
2888    situation exists when calls are marked with R_PPC64_REL24_NOTOC
2889    relocations.  These require a ppc_stub_plt_call_notoc linkage stub
2890    to call an external function like printf.  If other calls to printf
2891    require a ppc_stub_plt_call linkage stub then a single
2892    ppc_stub_plt_call_notoc linkage stub will be used for both types of
2893    call.  If other calls to printf require a ppc_stub_plt_call_r2save
2894    linkage stub then a single ppc_stub_plt_call_both linkage stub will
2895    be created and calls not requiring r2 to be saved will enter the
2896    stub after the r2 save instruction.  There is an analogous
2897    hierarchy of long branch and plt branch stubs for local call
2898    linkage.  */
2899
2900 enum ppc_stub_type
2901 {
2902   ppc_stub_none,
2903   ppc_stub_long_branch,
2904   ppc_stub_long_branch_r2off,
2905   ppc_stub_long_branch_notoc,
2906   ppc_stub_long_branch_both, /* r2off and notoc variants both needed.  */
2907   ppc_stub_plt_branch,
2908   ppc_stub_plt_branch_r2off,
2909   ppc_stub_plt_branch_notoc,
2910   ppc_stub_plt_branch_both,
2911   ppc_stub_plt_call,
2912   ppc_stub_plt_call_r2save,
2913   ppc_stub_plt_call_notoc,
2914   ppc_stub_plt_call_both,
2915   ppc_stub_global_entry,
2916   ppc_stub_save_res
2917 };
2918
2919 /* Information on stub grouping.  */
2920 struct map_stub
2921 {
2922   /* The stub section.  */
2923   asection *stub_sec;
2924   /* This is the section to which stubs in the group will be attached.  */
2925   asection *link_sec;
2926   /* Next group.  */
2927   struct map_stub *next;
2928   /* Whether to emit a copy of register save/restore functions in this
2929      group.  */
2930   int needs_save_res;
2931   /* Current offset within stubs after the insn restoring lr in a
2932      _notoc or _both stub using bcl for pc-relative addressing, or
2933      after the insn restoring lr in a __tls_get_addr_opt plt stub.  */
2934   unsigned int lr_restore;
2935   /* Accumulated size of EH info emitted to describe return address
2936      if stubs modify lr.  Does not include 17 byte FDE header.  */
2937   unsigned int eh_size;
2938   /* Offset in glink_eh_frame to the start of EH info for this group.  */
2939   unsigned int eh_base;
2940 };
2941
2942 struct ppc_stub_hash_entry
2943 {
2944   /* Base hash table entry structure.  */
2945   struct bfd_hash_entry root;
2946
2947   enum ppc_stub_type stub_type;
2948
2949   /* Group information.  */
2950   struct map_stub *group;
2951
2952   /* Offset within stub_sec of the beginning of this stub.  */
2953   bfd_vma stub_offset;
2954
2955   /* Given the symbol's value and its section we can determine its final
2956      value when building the stubs (so the stub knows where to jump.  */
2957   bfd_vma target_value;
2958   asection *target_section;
2959
2960   /* The symbol table entry, if any, that this was derived from.  */
2961   struct ppc_link_hash_entry *h;
2962   struct plt_entry *plt_ent;
2963
2964   /* Symbol type.  */
2965   unsigned char symtype;
2966
2967   /* Symbol st_other.  */
2968   unsigned char other;
2969 };
2970
2971 struct ppc_branch_hash_entry
2972 {
2973   /* Base hash table entry structure.  */
2974   struct bfd_hash_entry root;
2975
2976   /* Offset within branch lookup table.  */
2977   unsigned int offset;
2978
2979   /* Generation marker.  */
2980   unsigned int iter;
2981 };
2982
2983 /* Used to track dynamic relocations for local symbols.  */
2984 struct ppc_dyn_relocs
2985 {
2986   struct ppc_dyn_relocs *next;
2987
2988   /* The input section of the reloc.  */
2989   asection *sec;
2990
2991   /* Total number of relocs copied for the input section.  */
2992   unsigned int count : 31;
2993
2994   /* Whether this entry is for STT_GNU_IFUNC symbols.  */
2995   unsigned int ifunc : 1;
2996 };
2997
2998 struct ppc_link_hash_entry
2999 {
3000   struct elf_link_hash_entry elf;
3001
3002   union
3003   {
3004     /* A pointer to the most recently used stub hash entry against this
3005        symbol.  */
3006     struct ppc_stub_hash_entry *stub_cache;
3007
3008     /* A pointer to the next symbol starting with a '.'  */
3009     struct ppc_link_hash_entry *next_dot_sym;
3010   } u;
3011
3012   /* Track dynamic relocs copied for this symbol.  */
3013   struct elf_dyn_relocs *dyn_relocs;
3014
3015   /* Link between function code and descriptor symbols.  */
3016   struct ppc_link_hash_entry *oh;
3017
3018   /* Flag function code and descriptor symbols.  */
3019   unsigned int is_func:1;
3020   unsigned int is_func_descriptor:1;
3021   unsigned int fake:1;
3022
3023   /* Whether global opd/toc sym has been adjusted or not.
3024      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3025      should be set for all globals defined in any opd/toc section.  */
3026   unsigned int adjust_done:1;
3027
3028   /* Set if this is an out-of-line register save/restore function,
3029      with non-standard calling convention.  */
3030   unsigned int save_res:1;
3031
3032   /* Set if a duplicate symbol with non-zero localentry is detected,
3033      even when the duplicate symbol does not provide a definition.  */
3034   unsigned int non_zero_localentry:1;
3035
3036   /* Contexts in which symbol is used in the GOT (or TOC).
3037      Bits are or'd into the mask as the corresponding relocs are
3038      encountered during check_relocs, with TLS_TLS being set when any
3039      of the other TLS bits are set.  tls_optimize clears bits when
3040      optimizing to indicate the corresponding GOT entry type is not
3041      needed.  If set, TLS_TLS is never cleared.  tls_optimize may also
3042      set TLS_TPRELGD when a GD reloc turns into a TPREL one.  We use a
3043      separate flag rather than setting TPREL just for convenience in
3044      distinguishing the two cases.
3045      These flags are also kept for local symbols.  */
3046 #define TLS_TLS          1      /* Any TLS reloc.  */
3047 #define TLS_GD           2      /* GD reloc. */
3048 #define TLS_LD           4      /* LD reloc. */
3049 #define TLS_TPREL        8      /* TPREL reloc, => IE. */
3050 #define TLS_DTPREL      16      /* DTPREL reloc, => LD. */
3051 #define TLS_MARK        32      /* __tls_get_addr call marked. */
3052 #define TLS_TPRELGD     64      /* TPREL reloc resulting from GD->IE. */
3053 #define TLS_EXPLICIT   128      /* Marks TOC section TLS relocs. */
3054   unsigned char tls_mask;
3055
3056   /* The above field is also used to mark function symbols.  In which
3057      case TLS_TLS will be 0.  */
3058 #define PLT_IFUNC        2      /* STT_GNU_IFUNC.  */
3059 #define PLT_KEEP         4      /* inline plt call requires plt entry.  */
3060 #define NON_GOT        256      /* local symbol plt, not stored.  */
3061 };
3062
3063 /* ppc64 ELF linker hash table.  */
3064
3065 struct ppc_link_hash_table
3066 {
3067   struct elf_link_hash_table elf;
3068
3069   /* The stub hash table.  */
3070   struct bfd_hash_table stub_hash_table;
3071
3072   /* Another hash table for plt_branch stubs.  */
3073   struct bfd_hash_table branch_hash_table;
3074
3075   /* Hash table for function prologue tocsave.  */
3076   htab_t tocsave_htab;
3077
3078   /* Various options and other info passed from the linker.  */
3079   struct ppc64_elf_params *params;
3080
3081   /* The size of sec_info below.  */
3082   unsigned int sec_info_arr_size;
3083
3084   /* Per-section array of extra section info.  Done this way rather
3085      than as part of ppc64_elf_section_data so we have the info for
3086      non-ppc64 sections.  */
3087   struct
3088   {
3089     /* Along with elf_gp, specifies the TOC pointer used by this section.  */
3090     bfd_vma toc_off;
3091
3092     union
3093     {
3094       /* The section group that this section belongs to.  */
3095       struct map_stub *group;
3096       /* A temp section list pointer.  */
3097       asection *list;
3098     } u;
3099   } *sec_info;
3100
3101   /* Linked list of groups.  */
3102   struct map_stub *group;
3103
3104   /* Temp used when calculating TOC pointers.  */
3105   bfd_vma toc_curr;
3106   bfd *toc_bfd;
3107   asection *toc_first_sec;
3108
3109   /* Used when adding symbols.  */
3110   struct ppc_link_hash_entry *dot_syms;
3111
3112   /* Shortcuts to get to dynamic linker sections.  */
3113   asection *glink;
3114   asection *global_entry;
3115   asection *sfpr;
3116   asection *pltlocal;
3117   asection *relpltlocal;
3118   asection *brlt;
3119   asection *relbrlt;
3120   asection *glink_eh_frame;
3121
3122   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3123   struct ppc_link_hash_entry *tls_get_addr;
3124   struct ppc_link_hash_entry *tls_get_addr_fd;
3125
3126   /* The size of reliplt used by got entry relocs.  */
3127   bfd_size_type got_reli_size;
3128
3129   /* Statistics.  */
3130   unsigned long stub_count[ppc_stub_global_entry];
3131
3132   /* Number of stubs against global syms.  */
3133   unsigned long stub_globals;
3134
3135   /* Set if we're linking code with function descriptors.  */
3136   unsigned int opd_abi:1;
3137
3138   /* Support for multiple toc sections.  */
3139   unsigned int do_multi_toc:1;
3140   unsigned int multi_toc_needed:1;
3141   unsigned int second_toc_pass:1;
3142   unsigned int do_toc_opt:1;
3143
3144   /* Set if tls optimization is enabled.  */
3145   unsigned int do_tls_opt:1;
3146
3147   /* Set if inline plt calls should be converted to direct calls.  */
3148   unsigned int can_convert_all_inline_plt:1;
3149
3150   /* Set on error.  */
3151   unsigned int stub_error:1;
3152
3153   /* Whether func_desc_adjust needs to be run over symbols.  */
3154   unsigned int need_func_desc_adj:1;
3155
3156   /* Whether there exist local gnu indirect function resolvers,
3157      referenced by dynamic relocations.  */
3158   unsigned int local_ifunc_resolver:1;
3159   unsigned int maybe_local_ifunc_resolver:1;
3160
3161   /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
3162   unsigned int has_plt_localentry0:1;
3163
3164   /* Whether calls are made via the PLT from NOTOC functions.  */
3165   unsigned int notoc_plt:1;
3166
3167   /* Whether to use powerxx instructions in linkage stubs.  */
3168   unsigned int powerxx_stubs:1;
3169
3170   /* Incremented every time we size stubs.  */
3171   unsigned int stub_iteration;
3172
3173   /* Small local sym cache.  */
3174   struct sym_cache sym_cache;
3175 };
3176
3177 /* Rename some of the generic section flags to better document how they
3178    are used here.  */
3179
3180 /* Nonzero if this section has TLS related relocations.  */
3181 #define has_tls_reloc sec_flg0
3182
3183 /* Nonzero if this section has an old-style call to __tls_get_addr.  */
3184 #define has_tls_get_addr_call sec_flg1
3185
3186 /* Nonzero if this section has any toc or got relocs.  */
3187 #define has_toc_reloc sec_flg2
3188
3189 /* Nonzero if this section has a call to another section that uses
3190    the toc or got.  */
3191 #define makes_toc_func_call sec_flg3
3192
3193 /* Recursion protection when determining above flag.  */
3194 #define call_check_in_progress sec_flg4
3195 #define call_check_done sec_flg5
3196
3197 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3198
3199 #define ppc_hash_table(p) \
3200   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3201   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3202
3203 #define ppc_stub_hash_lookup(table, string, create, copy) \
3204   ((struct ppc_stub_hash_entry *) \
3205    bfd_hash_lookup ((table), (string), (create), (copy)))
3206
3207 #define ppc_branch_hash_lookup(table, string, create, copy) \
3208   ((struct ppc_branch_hash_entry *) \
3209    bfd_hash_lookup ((table), (string), (create), (copy)))
3210
3211 /* Create an entry in the stub hash table.  */
3212
3213 static struct bfd_hash_entry *
3214 stub_hash_newfunc (struct bfd_hash_entry *entry,
3215                    struct bfd_hash_table *table,
3216                    const char *string)
3217 {
3218   /* Allocate the structure if it has not already been allocated by a
3219      subclass.  */
3220   if (entry == NULL)
3221     {
3222       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3223       if (entry == NULL)
3224         return entry;
3225     }
3226
3227   /* Call the allocation method of the superclass.  */
3228   entry = bfd_hash_newfunc (entry, table, string);
3229   if (entry != NULL)
3230     {
3231       struct ppc_stub_hash_entry *eh;
3232
3233       /* Initialize the local fields.  */
3234       eh = (struct ppc_stub_hash_entry *) entry;
3235       eh->stub_type = ppc_stub_none;
3236       eh->group = NULL;
3237       eh->stub_offset = 0;
3238       eh->target_value = 0;
3239       eh->target_section = NULL;
3240       eh->h = NULL;
3241       eh->plt_ent = NULL;
3242       eh->other = 0;
3243     }
3244
3245   return entry;
3246 }
3247
3248 /* Create an entry in the branch hash table.  */
3249
3250 static struct bfd_hash_entry *
3251 branch_hash_newfunc (struct bfd_hash_entry *entry,
3252                      struct bfd_hash_table *table,
3253                      const char *string)
3254 {
3255   /* Allocate the structure if it has not already been allocated by a
3256      subclass.  */
3257   if (entry == NULL)
3258     {
3259       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3260       if (entry == NULL)
3261         return entry;
3262     }
3263
3264   /* Call the allocation method of the superclass.  */
3265   entry = bfd_hash_newfunc (entry, table, string);
3266   if (entry != NULL)
3267     {
3268       struct ppc_branch_hash_entry *eh;
3269
3270       /* Initialize the local fields.  */
3271       eh = (struct ppc_branch_hash_entry *) entry;
3272       eh->offset = 0;
3273       eh->iter = 0;
3274     }
3275
3276   return entry;
3277 }
3278
3279 /* Create an entry in a ppc64 ELF linker hash table.  */
3280
3281 static struct bfd_hash_entry *
3282 link_hash_newfunc (struct bfd_hash_entry *entry,
3283                    struct bfd_hash_table *table,
3284                    const char *string)
3285 {
3286   /* Allocate the structure if it has not already been allocated by a
3287      subclass.  */
3288   if (entry == NULL)
3289     {
3290       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3291       if (entry == NULL)
3292         return entry;
3293     }
3294
3295   /* Call the allocation method of the superclass.  */
3296   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3297   if (entry != NULL)
3298     {
3299       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3300
3301       memset (&eh->u.stub_cache, 0,
3302               (sizeof (struct ppc_link_hash_entry)
3303                - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3304
3305       /* When making function calls, old ABI code references function entry
3306          points (dot symbols), while new ABI code references the function
3307          descriptor symbol.  We need to make any combination of reference and
3308          definition work together, without breaking archive linking.
3309
3310          For a defined function "foo" and an undefined call to "bar":
3311          An old object defines "foo" and ".foo", references ".bar" (possibly
3312          "bar" too).
3313          A new object defines "foo" and references "bar".
3314
3315          A new object thus has no problem with its undefined symbols being
3316          satisfied by definitions in an old object.  On the other hand, the
3317          old object won't have ".bar" satisfied by a new object.
3318
3319          Keep a list of newly added dot-symbols.  */
3320
3321       if (string[0] == '.')
3322         {
3323           struct ppc_link_hash_table *htab;
3324
3325           htab = (struct ppc_link_hash_table *) table;
3326           eh->u.next_dot_sym = htab->dot_syms;
3327           htab->dot_syms = eh;
3328         }
3329     }
3330
3331   return entry;
3332 }
3333
3334 struct tocsave_entry
3335 {
3336   asection *sec;
3337   bfd_vma offset;
3338 };
3339
3340 static hashval_t
3341 tocsave_htab_hash (const void *p)
3342 {
3343   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3344   return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
3345 }
3346
3347 static int
3348 tocsave_htab_eq (const void *p1, const void *p2)
3349 {
3350   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3351   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3352   return e1->sec == e2->sec && e1->offset == e2->offset;
3353 }
3354
3355 /* Destroy a ppc64 ELF linker hash table.  */
3356
3357 static void
3358 ppc64_elf_link_hash_table_free (bfd *obfd)
3359 {
3360   struct ppc_link_hash_table *htab;
3361
3362   htab = (struct ppc_link_hash_table *) obfd->link.hash;
3363   if (htab->tocsave_htab)
3364     htab_delete (htab->tocsave_htab);
3365   bfd_hash_table_free (&htab->branch_hash_table);
3366   bfd_hash_table_free (&htab->stub_hash_table);
3367   _bfd_elf_link_hash_table_free (obfd);
3368 }
3369
3370 /* Create a ppc64 ELF linker hash table.  */
3371
3372 static struct bfd_link_hash_table *
3373 ppc64_elf_link_hash_table_create (bfd *abfd)
3374 {
3375   struct ppc_link_hash_table *htab;
3376   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3377
3378   htab = bfd_zmalloc (amt);
3379   if (htab == NULL)
3380     return NULL;
3381
3382   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3383                                       sizeof (struct ppc_link_hash_entry),
3384                                       PPC64_ELF_DATA))
3385     {
3386       free (htab);
3387       return NULL;
3388     }
3389
3390   /* Init the stub hash table too.  */
3391   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3392                             sizeof (struct ppc_stub_hash_entry)))
3393     {
3394       _bfd_elf_link_hash_table_free (abfd);
3395       return NULL;
3396     }
3397
3398   /* And the branch hash table.  */
3399   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3400                             sizeof (struct ppc_branch_hash_entry)))
3401     {
3402       bfd_hash_table_free (&htab->stub_hash_table);
3403       _bfd_elf_link_hash_table_free (abfd);
3404       return NULL;
3405     }
3406
3407   htab->tocsave_htab = htab_try_create (1024,
3408                                         tocsave_htab_hash,
3409                                         tocsave_htab_eq,
3410                                         NULL);
3411   if (htab->tocsave_htab == NULL)
3412     {
3413       ppc64_elf_link_hash_table_free (abfd);
3414       return NULL;
3415     }
3416   htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
3417
3418   /* Initializing two fields of the union is just cosmetic.  We really
3419      only care about glist, but when compiled on a 32-bit host the
3420      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3421      debugger inspection of these fields look nicer.  */
3422   htab->elf.init_got_refcount.refcount = 0;
3423   htab->elf.init_got_refcount.glist = NULL;
3424   htab->elf.init_plt_refcount.refcount = 0;
3425   htab->elf.init_plt_refcount.glist = NULL;
3426   htab->elf.init_got_offset.offset = 0;
3427   htab->elf.init_got_offset.glist = NULL;
3428   htab->elf.init_plt_offset.offset = 0;
3429   htab->elf.init_plt_offset.glist = NULL;
3430
3431   return &htab->elf.root;
3432 }
3433
3434 /* Create sections for linker generated code.  */
3435
3436 static bfd_boolean
3437 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3438 {
3439   struct ppc_link_hash_table *htab;
3440   flagword flags;
3441
3442   htab = ppc_hash_table (info);
3443
3444   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3445            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3446   if (htab->params->save_restore_funcs)
3447     {
3448       /* Create .sfpr for code to save and restore fp regs.  */
3449       htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3450                                                        flags);
3451       if (htab->sfpr == NULL
3452           || !bfd_set_section_alignment (dynobj, htab->sfpr, 2))
3453         return FALSE;
3454     }
3455
3456   if (bfd_link_relocatable (info))
3457     return TRUE;
3458
3459   /* Create .glink for lazy dynamic linking support.  */
3460   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3461                                                     flags);
3462   if (htab->glink == NULL
3463       || !bfd_set_section_alignment (dynobj, htab->glink, 3))
3464     return FALSE;
3465
3466   /* The part of .glink used by global entry stubs, separate so that
3467      it can be aligned appropriately without affecting htab->glink.  */
3468   htab->global_entry = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3469                                                            flags);
3470   if (htab->global_entry == NULL
3471       || !bfd_set_section_alignment (dynobj, htab->global_entry, 2))
3472     return FALSE;
3473
3474   if (!info->no_ld_generated_unwind_info)
3475     {
3476       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
3477                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3478       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
3479                                                                  ".eh_frame",
3480                                                                  flags);
3481       if (htab->glink_eh_frame == NULL
3482           || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
3483         return FALSE;
3484     }
3485
3486   flags = SEC_ALLOC | SEC_LINKER_CREATED;
3487   htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
3488   if (htab->elf.iplt == NULL
3489       || !bfd_set_section_alignment (dynobj, htab->elf.iplt, 3))
3490     return FALSE;
3491
3492   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3493            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3494   htab->elf.irelplt
3495     = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
3496   if (htab->elf.irelplt == NULL
3497       || !bfd_set_section_alignment (dynobj, htab->elf.irelplt, 3))
3498     return FALSE;
3499
3500   /* Create branch lookup table for plt_branch stubs.  */
3501   flags = (SEC_ALLOC | SEC_LOAD
3502            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3503   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3504                                                    flags);
3505   if (htab->brlt == NULL
3506       || !bfd_set_section_alignment (dynobj, htab->brlt, 3))
3507     return FALSE;
3508
3509   /* Local plt entries, put in .branch_lt but a separate section for
3510      convenience.  */
3511   htab->pltlocal = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3512                                                        flags);
3513   if (htab->pltlocal == NULL
3514       || !bfd_set_section_alignment (dynobj, htab->pltlocal, 3))
3515     return FALSE;
3516
3517   if (!bfd_link_pic (info))
3518     return TRUE;
3519
3520   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3521            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3522   htab->relbrlt
3523     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3524   if (htab->relbrlt == NULL
3525       || !bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
3526     return FALSE;
3527
3528   htab->relpltlocal
3529     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3530   if (htab->relpltlocal == NULL
3531       || !bfd_set_section_alignment (dynobj, htab->relpltlocal, 3))
3532     return FALSE;
3533
3534   return TRUE;
3535 }
3536
3537 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3538
3539 bfd_boolean
3540 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
3541                          struct ppc64_elf_params *params)
3542 {
3543   struct ppc_link_hash_table *htab;
3544
3545   elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
3546
3547 /* Always hook our dynamic sections into the first bfd, which is the
3548    linker created stub bfd.  This ensures that the GOT header is at
3549    the start of the output TOC section.  */
3550   htab = ppc_hash_table (info);
3551   htab->elf.dynobj = params->stub_bfd;
3552   htab->params = params;
3553
3554   return create_linkage_sections (htab->elf.dynobj, info);
3555 }
3556
3557 /* Build a name for an entry in the stub hash table.  */
3558
3559 static char *
3560 ppc_stub_name (const asection *input_section,
3561                const asection *sym_sec,
3562                const struct ppc_link_hash_entry *h,
3563                const Elf_Internal_Rela *rel)
3564 {
3565   char *stub_name;
3566   ssize_t len;
3567
3568   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3569      offsets from a sym as a branch target?  In fact, we could
3570      probably assume the addend is always zero.  */
3571   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3572
3573   if (h)
3574     {
3575       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3576       stub_name = bfd_malloc (len);
3577       if (stub_name == NULL)
3578         return stub_name;
3579
3580       len = sprintf (stub_name, "%08x.%s+%x",
3581                      input_section->id & 0xffffffff,
3582                      h->elf.root.root.string,
3583                      (int) rel->r_addend & 0xffffffff);
3584     }
3585   else
3586     {
3587       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3588       stub_name = bfd_malloc (len);
3589       if (stub_name == NULL)
3590         return stub_name;
3591
3592       len = sprintf (stub_name, "%08x.%x:%x+%x",
3593                      input_section->id & 0xffffffff,
3594                      sym_sec->id & 0xffffffff,
3595                      (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3596                      (int) rel->r_addend & 0xffffffff);
3597     }
3598   if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3599     stub_name[len - 2] = 0;
3600   return stub_name;
3601 }
3602
3603 /* Look up an entry in the stub hash.  Stub entries are cached because
3604    creating the stub name takes a bit of time.  */
3605
3606 static struct ppc_stub_hash_entry *
3607 ppc_get_stub_entry (const asection *input_section,
3608                     const asection *sym_sec,
3609                     struct ppc_link_hash_entry *h,
3610                     const Elf_Internal_Rela *rel,
3611                     struct ppc_link_hash_table *htab)
3612 {
3613   struct ppc_stub_hash_entry *stub_entry;
3614   struct map_stub *group;
3615
3616   /* If this input section is part of a group of sections sharing one
3617      stub section, then use the id of the first section in the group.
3618      Stub names need to include a section id, as there may well be
3619      more than one stub used to reach say, printf, and we need to
3620      distinguish between them.  */
3621   group = htab->sec_info[input_section->id].u.group;
3622   if (group == NULL)
3623     return NULL;
3624
3625   if (h != NULL && h->u.stub_cache != NULL
3626       && h->u.stub_cache->h == h
3627       && h->u.stub_cache->group == group)
3628     {
3629       stub_entry = h->u.stub_cache;
3630     }
3631   else
3632     {
3633       char *stub_name;
3634
3635       stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
3636       if (stub_name == NULL)
3637         return NULL;
3638
3639       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3640                                          stub_name, FALSE, FALSE);
3641       if (h != NULL)
3642         h->u.stub_cache = stub_entry;
3643
3644       free (stub_name);
3645     }
3646
3647   return stub_entry;
3648 }
3649
3650 /* Add a new stub entry to the stub hash.  Not all fields of the new
3651    stub entry are initialised.  */
3652
3653 static struct ppc_stub_hash_entry *
3654 ppc_add_stub (const char *stub_name,
3655               asection *section,
3656               struct bfd_link_info *info)
3657 {
3658   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3659   struct map_stub *group;
3660   asection *link_sec;
3661   asection *stub_sec;
3662   struct ppc_stub_hash_entry *stub_entry;
3663
3664   group = htab->sec_info[section->id].u.group;
3665   link_sec = group->link_sec;
3666   stub_sec = group->stub_sec;
3667   if (stub_sec == NULL)
3668     {
3669       size_t namelen;
3670       bfd_size_type len;
3671       char *s_name;
3672
3673       namelen = strlen (link_sec->name);
3674       len = namelen + sizeof (STUB_SUFFIX);
3675       s_name = bfd_alloc (htab->params->stub_bfd, len);
3676       if (s_name == NULL)
3677         return NULL;
3678
3679       memcpy (s_name, link_sec->name, namelen);
3680       memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3681       stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
3682       if (stub_sec == NULL)
3683         return NULL;
3684       group->stub_sec = stub_sec;
3685     }
3686
3687   /* Enter this entry into the linker stub hash table.  */
3688   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3689                                      TRUE, FALSE);
3690   if (stub_entry == NULL)
3691     {
3692       /* xgettext:c-format */
3693       _bfd_error_handler (_("%pB: cannot create stub entry %s"),
3694                           section->owner, stub_name);
3695       return NULL;
3696     }
3697
3698   stub_entry->group = group;
3699   stub_entry->stub_offset = 0;
3700   return stub_entry;
3701 }
3702
3703 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3704    not already done.  */
3705
3706 static bfd_boolean
3707 create_got_section (bfd *abfd, struct bfd_link_info *info)
3708 {
3709   asection *got, *relgot;
3710   flagword flags;
3711   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3712
3713   if (!is_ppc64_elf (abfd))
3714     return FALSE;
3715   if (htab == NULL)
3716     return FALSE;
3717
3718   if (!htab->elf.sgot
3719       && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
3720     return FALSE;
3721
3722   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3723            | SEC_LINKER_CREATED);
3724
3725   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3726   if (!got
3727       || !bfd_set_section_alignment (abfd, got, 3))
3728     return FALSE;
3729
3730   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3731                                                flags | SEC_READONLY);
3732   if (!relgot
3733       || !bfd_set_section_alignment (abfd, relgot, 3))
3734     return FALSE;
3735
3736   ppc64_elf_tdata (abfd)->got = got;
3737   ppc64_elf_tdata (abfd)->relgot = relgot;
3738   return TRUE;
3739 }
3740
3741 /* Follow indirect and warning symbol links.  */
3742
3743 static inline struct bfd_link_hash_entry *
3744 follow_link (struct bfd_link_hash_entry *h)
3745 {
3746   while (h->type == bfd_link_hash_indirect
3747          || h->type == bfd_link_hash_warning)
3748     h = h->u.i.link;
3749   return h;
3750 }
3751
3752 static inline struct elf_link_hash_entry *
3753 elf_follow_link (struct elf_link_hash_entry *h)
3754 {
3755   return (struct elf_link_hash_entry *) follow_link (&h->root);
3756 }
3757
3758 static inline struct ppc_link_hash_entry *
3759 ppc_follow_link (struct ppc_link_hash_entry *h)
3760 {
3761   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
3762 }
3763
3764 /* Merge PLT info on FROM with that on TO.  */
3765
3766 static void
3767 move_plt_plist (struct ppc_link_hash_entry *from,
3768                 struct ppc_link_hash_entry *to)
3769 {
3770   if (from->elf.plt.plist != NULL)
3771     {
3772       if (to->elf.plt.plist != NULL)
3773         {
3774           struct plt_entry **entp;
3775           struct plt_entry *ent;
3776
3777           for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3778             {
3779               struct plt_entry *dent;
3780
3781               for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3782                 if (dent->addend == ent->addend)
3783                   {
3784                     dent->plt.refcount += ent->plt.refcount;
3785                     *entp = ent->next;
3786                     break;
3787                   }
3788               if (dent == NULL)
3789                 entp = &ent->next;
3790             }
3791           *entp = to->elf.plt.plist;
3792         }
3793
3794       to->elf.plt.plist = from->elf.plt.plist;
3795       from->elf.plt.plist = NULL;
3796     }
3797 }
3798
3799 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
3800
3801 static void
3802 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3803                                 struct elf_link_hash_entry *dir,
3804                                 struct elf_link_hash_entry *ind)
3805 {
3806   struct ppc_link_hash_entry *edir, *eind;
3807
3808   edir = (struct ppc_link_hash_entry *) dir;
3809   eind = (struct ppc_link_hash_entry *) ind;
3810
3811   edir->is_func |= eind->is_func;
3812   edir->is_func_descriptor |= eind->is_func_descriptor;
3813   edir->tls_mask |= eind->tls_mask;
3814   if (eind->oh != NULL)
3815     edir->oh = ppc_follow_link (eind->oh);
3816
3817   if (edir->elf.versioned != versioned_hidden)
3818     edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
3819   edir->elf.ref_regular |= eind->elf.ref_regular;
3820   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
3821   edir->elf.non_got_ref |= eind->elf.non_got_ref;
3822   edir->elf.needs_plt |= eind->elf.needs_plt;
3823   edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
3824
3825   /* If we were called to copy over info for a weak sym, don't copy
3826      dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
3827      in order to simplify readonly_dynrelocs and save a field in the
3828      symbol hash entry, but that means dyn_relocs can't be used in any
3829      tests about a specific symbol, or affect other symbol flags which
3830      are then tested.  */
3831   if (eind->elf.root.type != bfd_link_hash_indirect)
3832     return;
3833
3834   /* Copy over any dynamic relocs we may have on the indirect sym.  */
3835   if (eind->dyn_relocs != NULL)
3836     {
3837       if (edir->dyn_relocs != NULL)
3838         {
3839           struct elf_dyn_relocs **pp;
3840           struct elf_dyn_relocs *p;
3841
3842           /* Add reloc counts against the indirect sym to the direct sym
3843              list.  Merge any entries against the same section.  */
3844           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3845             {
3846               struct elf_dyn_relocs *q;
3847
3848               for (q = edir->dyn_relocs; q != NULL; q = q->next)
3849                 if (q->sec == p->sec)
3850                   {
3851                     q->pc_count += p->pc_count;
3852                     q->count += p->count;
3853                     *pp = p->next;
3854                     break;
3855                   }
3856               if (q == NULL)
3857                 pp = &p->next;
3858             }
3859           *pp = edir->dyn_relocs;
3860         }
3861
3862       edir->dyn_relocs = eind->dyn_relocs;
3863       eind->dyn_relocs = NULL;
3864     }
3865
3866   /* Copy over got entries that we may have already seen to the
3867      symbol which just became indirect.  */
3868   if (eind->elf.got.glist != NULL)
3869     {
3870       if (edir->elf.got.glist != NULL)
3871         {
3872           struct got_entry **entp;
3873           struct got_entry *ent;
3874
3875           for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3876             {
3877               struct got_entry *dent;
3878
3879               for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3880                 if (dent->addend == ent->addend
3881                     && dent->owner == ent->owner
3882                     && dent->tls_type == ent->tls_type)
3883                   {
3884                     dent->got.refcount += ent->got.refcount;
3885                     *entp = ent->next;
3886                     break;
3887                   }
3888               if (dent == NULL)
3889                 entp = &ent->next;
3890             }
3891           *entp = edir->elf.got.glist;
3892         }
3893
3894       edir->elf.got.glist = eind->elf.got.glist;
3895       eind->elf.got.glist = NULL;
3896     }
3897
3898   /* And plt entries.  */
3899   move_plt_plist (eind, edir);
3900
3901   if (eind->elf.dynindx != -1)
3902     {
3903       if (edir->elf.dynindx != -1)
3904         _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
3905                                 edir->elf.dynstr_index);
3906       edir->elf.dynindx = eind->elf.dynindx;
3907       edir->elf.dynstr_index = eind->elf.dynstr_index;
3908       eind->elf.dynindx = -1;
3909       eind->elf.dynstr_index = 0;
3910     }
3911 }
3912
3913 /* Find the function descriptor hash entry from the given function code
3914    hash entry FH.  Link the entries via their OH fields.  */
3915
3916 static struct ppc_link_hash_entry *
3917 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
3918 {
3919   struct ppc_link_hash_entry *fdh = fh->oh;
3920
3921   if (fdh == NULL)
3922     {
3923       const char *fd_name = fh->elf.root.root.string + 1;
3924
3925       fdh = (struct ppc_link_hash_entry *)
3926         elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
3927       if (fdh == NULL)
3928         return fdh;
3929
3930       fdh->is_func_descriptor = 1;
3931       fdh->oh = fh;
3932       fh->is_func = 1;
3933       fh->oh = fdh;
3934     }
3935
3936   fdh = ppc_follow_link (fdh);
3937   fdh->is_func_descriptor = 1;
3938   fdh->oh = fh;
3939   return fdh;
3940 }
3941
3942 /* Make a fake function descriptor sym for the undefined code sym FH.  */
3943
3944 static struct ppc_link_hash_entry *
3945 make_fdh (struct bfd_link_info *info,
3946           struct ppc_link_hash_entry *fh)
3947 {
3948   bfd *abfd = fh->elf.root.u.undef.abfd;
3949   struct bfd_link_hash_entry *bh = NULL;
3950   struct ppc_link_hash_entry *fdh;
3951   flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
3952                     ? BSF_WEAK
3953                     : BSF_GLOBAL);
3954
3955   if (!_bfd_generic_link_add_one_symbol (info, abfd,
3956                                          fh->elf.root.root.string + 1,
3957                                          flags, bfd_und_section_ptr, 0,
3958                                          NULL, FALSE, FALSE, &bh))
3959     return NULL;
3960
3961   fdh = (struct ppc_link_hash_entry *) bh;
3962   fdh->elf.non_elf = 0;
3963   fdh->fake = 1;
3964   fdh->is_func_descriptor = 1;
3965   fdh->oh = fh;
3966   fh->is_func = 1;
3967   fh->oh = fdh;
3968   return fdh;
3969 }
3970
3971 /* Fix function descriptor symbols defined in .opd sections to be
3972    function type.  */
3973
3974 static bfd_boolean
3975 ppc64_elf_add_symbol_hook (bfd *ibfd,
3976                            struct bfd_link_info *info,
3977                            Elf_Internal_Sym *isym,
3978                            const char **name,
3979                            flagword *flags ATTRIBUTE_UNUSED,
3980                            asection **sec,
3981                            bfd_vma *value)
3982 {
3983   if (*sec != NULL
3984       && strcmp ((*sec)->name, ".opd") == 0)
3985     {
3986       asection *code_sec;
3987
3988       if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
3989             || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
3990         isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
3991
3992       /* If the symbol is a function defined in .opd, and the function
3993          code is in a discarded group, let it appear to be undefined.  */
3994       if (!bfd_link_relocatable (info)
3995           && (*sec)->reloc_count != 0
3996           && opd_entry_value (*sec, *value, &code_sec, NULL,
3997                               FALSE) != (bfd_vma) -1
3998           && discarded_section (code_sec))
3999         {
4000           *sec = bfd_und_section_ptr;
4001           isym->st_shndx = SHN_UNDEF;
4002         }
4003     }
4004   else if (*sec != NULL
4005            && strcmp ((*sec)->name, ".toc") == 0
4006            && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4007     {
4008       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4009       if (htab != NULL)
4010         htab->params->object_in_toc = 1;
4011     }
4012
4013   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4014     {
4015       if (abiversion (ibfd) == 0)
4016         set_abiversion (ibfd, 2);
4017       else if (abiversion (ibfd) == 1)
4018         {
4019           _bfd_error_handler (_("symbol '%s' has invalid st_other"
4020                                 " for ABI version 1"), *name);
4021           bfd_set_error (bfd_error_bad_value);
4022           return FALSE;
4023         }
4024     }
4025
4026   return TRUE;
4027 }
4028
4029 /* Merge non-visibility st_other attributes: local entry point.  */
4030
4031 static void
4032 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
4033                                   const Elf_Internal_Sym *isym,
4034                                   bfd_boolean definition,
4035                                   bfd_boolean dynamic)
4036 {
4037   if (definition && (!dynamic || !h->def_regular))
4038     h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
4039                 | ELF_ST_VISIBILITY (h->other));
4040 }
4041
4042 /* Hook called on merging a symbol.  We use this to clear "fake" since
4043    we now have a real symbol.  */
4044
4045 static bfd_boolean
4046 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
4047                         const Elf_Internal_Sym *isym,
4048                         asection **psec ATTRIBUTE_UNUSED,
4049                         bfd_boolean newdef ATTRIBUTE_UNUSED,
4050                         bfd_boolean olddef ATTRIBUTE_UNUSED,
4051                         bfd *oldbfd ATTRIBUTE_UNUSED,
4052                         const asection *oldsec ATTRIBUTE_UNUSED)
4053 {
4054   ((struct ppc_link_hash_entry *) h)->fake = 0;
4055   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4056     ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1;
4057   return TRUE;
4058 }
4059
4060 /* This function makes an old ABI object reference to ".bar" cause the
4061    inclusion of a new ABI object archive that defines "bar".
4062    NAME is a symbol defined in an archive.  Return a symbol in the hash
4063    table that might be satisfied by the archive symbols.  */
4064
4065 static struct elf_link_hash_entry *
4066 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4067                                  struct bfd_link_info *info,
4068                                  const char *name)
4069 {
4070   struct elf_link_hash_entry *h;
4071   char *dot_name;
4072   size_t len;
4073
4074   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4075   if (h != NULL
4076       /* Don't return this sym if it is a fake function descriptor
4077          created by add_symbol_adjust.  */
4078       && !((struct ppc_link_hash_entry *) h)->fake)
4079     return h;
4080
4081   if (name[0] == '.')
4082     return h;
4083
4084   len = strlen (name);
4085   dot_name = bfd_alloc (abfd, len + 2);
4086   if (dot_name == NULL)
4087     return (struct elf_link_hash_entry *) -1;
4088   dot_name[0] = '.';
4089   memcpy (dot_name + 1, name, len + 1);
4090   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4091   bfd_release (abfd, dot_name);
4092   return h;
4093 }
4094
4095 /* This function satisfies all old ABI object references to ".bar" if a
4096    new ABI object defines "bar".  Well, at least, undefined dot symbols
4097    are made weak.  This stops later archive searches from including an
4098    object if we already have a function descriptor definition.  It also
4099    prevents the linker complaining about undefined symbols.
4100    We also check and correct mismatched symbol visibility here.  The
4101    most restrictive visibility of the function descriptor and the
4102    function entry symbol is used.  */
4103
4104 static bfd_boolean
4105 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4106 {
4107   struct ppc_link_hash_table *htab;
4108   struct ppc_link_hash_entry *fdh;
4109
4110   if (eh->elf.root.type == bfd_link_hash_warning)
4111     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4112
4113   if (eh->elf.root.type == bfd_link_hash_indirect)
4114     return TRUE;
4115
4116   if (eh->elf.root.root.string[0] != '.')
4117     abort ();
4118
4119   htab = ppc_hash_table (info);
4120   if (htab == NULL)
4121     return FALSE;
4122
4123   fdh = lookup_fdh (eh, htab);
4124   if (fdh == NULL
4125       && !bfd_link_relocatable (info)
4126       && (eh->elf.root.type == bfd_link_hash_undefined
4127           || eh->elf.root.type == bfd_link_hash_undefweak)
4128       && eh->elf.ref_regular)
4129     {
4130       /* Make an undefined function descriptor sym, in order to
4131          pull in an --as-needed shared lib.  Archives are handled
4132          elsewhere.  */
4133       fdh = make_fdh (info, eh);
4134       if (fdh == NULL)
4135         return FALSE;
4136     }
4137
4138   if (fdh != NULL)
4139     {
4140       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4141       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4142
4143       /* Make both descriptor and entry symbol have the most
4144          constraining visibility of either symbol.  */
4145       if (entry_vis < descr_vis)
4146         fdh->elf.other += entry_vis - descr_vis;
4147       else if (entry_vis > descr_vis)
4148         eh->elf.other += descr_vis - entry_vis;
4149
4150       /* Propagate reference flags from entry symbol to function
4151          descriptor symbol.  */
4152       fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
4153       fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
4154       fdh->elf.ref_regular |= eh->elf.ref_regular;
4155       fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
4156
4157       if (!fdh->elf.forced_local
4158           && fdh->elf.dynindx == -1
4159           && fdh->elf.versioned != versioned_hidden
4160           && (bfd_link_dll (info)
4161               || fdh->elf.def_dynamic
4162               || fdh->elf.ref_dynamic)
4163           && (eh->elf.ref_regular
4164               || eh->elf.def_regular))
4165         {
4166           if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4167             return FALSE;
4168         }
4169     }
4170
4171   return TRUE;
4172 }
4173
4174 /* Set up opd section info and abiversion for IBFD, and process list
4175    of dot-symbols we made in link_hash_newfunc.  */
4176
4177 static bfd_boolean
4178 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
4179 {
4180   struct ppc_link_hash_table *htab;
4181   struct ppc_link_hash_entry **p, *eh;
4182   asection *opd = bfd_get_section_by_name (ibfd, ".opd");
4183
4184   if (opd != NULL && opd->size != 0)
4185     {
4186       BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
4187       ppc64_elf_section_data (opd)->sec_type = sec_opd;
4188
4189       if (abiversion (ibfd) == 0)
4190         set_abiversion (ibfd, 1);
4191       else if (abiversion (ibfd) >= 2)
4192         {
4193           /* xgettext:c-format */
4194           _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
4195                               ibfd, abiversion (ibfd));
4196           bfd_set_error (bfd_error_bad_value);
4197           return FALSE;
4198         }
4199     }
4200
4201   if (is_ppc64_elf (info->output_bfd))
4202     {
4203       /* For input files without an explicit abiversion in e_flags
4204          we should have flagged any with symbol st_other bits set
4205          as ELFv1 and above flagged those with .opd as ELFv2.
4206          Set the output abiversion if not yet set, and for any input
4207          still ambiguous, take its abiversion from the output.
4208          Differences in ABI are reported later.  */
4209       if (abiversion (info->output_bfd) == 0)
4210         set_abiversion (info->output_bfd, abiversion (ibfd));
4211       else if (abiversion (ibfd) == 0)
4212         set_abiversion (ibfd, abiversion (info->output_bfd));
4213     }
4214
4215   htab = ppc_hash_table (info);
4216   if (htab == NULL)
4217     return TRUE;
4218
4219   if (opd != NULL && opd->size != 0
4220       && (ibfd->flags & DYNAMIC) == 0
4221       && (opd->flags & SEC_RELOC) != 0
4222       && opd->reloc_count != 0
4223       && !bfd_is_abs_section (opd->output_section)
4224       && info->gc_sections)
4225     {
4226       /* Garbage collection needs some extra help with .opd sections.
4227          We don't want to necessarily keep everything referenced by
4228          relocs in .opd, as that would keep all functions.  Instead,
4229          if we reference an .opd symbol (a function descriptor), we
4230          want to keep the function code symbol's section.  This is
4231          easy for global symbols, but for local syms we need to keep
4232          information about the associated function section.  */
4233       bfd_size_type amt;
4234       asection **opd_sym_map;
4235       Elf_Internal_Shdr *symtab_hdr;
4236       Elf_Internal_Rela *relocs, *rel_end, *rel;
4237
4238       amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
4239       opd_sym_map = bfd_zalloc (ibfd, amt);
4240       if (opd_sym_map == NULL)
4241         return FALSE;
4242       ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
4243       relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
4244                                           info->keep_memory);
4245       if (relocs == NULL)
4246         return FALSE;
4247       symtab_hdr = &elf_symtab_hdr (ibfd);
4248       rel_end = relocs + opd->reloc_count - 1;
4249       for (rel = relocs; rel < rel_end; rel++)
4250         {
4251           enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
4252           unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
4253
4254           if (r_type == R_PPC64_ADDR64
4255               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
4256               && r_symndx < symtab_hdr->sh_info)
4257             {
4258               Elf_Internal_Sym *isym;
4259               asection *s;
4260
4261               isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
4262               if (isym == NULL)
4263                 {
4264                   if (elf_section_data (opd)->relocs != relocs)
4265                     free (relocs);
4266                   return FALSE;
4267                 }
4268
4269               s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
4270               if (s != NULL && s != opd)
4271                 opd_sym_map[OPD_NDX (rel->r_offset)] = s;
4272             }
4273         }
4274       if (elf_section_data (opd)->relocs != relocs)
4275         free (relocs);
4276     }
4277
4278   p = &htab->dot_syms;
4279   while ((eh = *p) != NULL)
4280     {
4281       *p = NULL;
4282       if (&eh->elf == htab->elf.hgot)
4283         ;
4284       else if (htab->elf.hgot == NULL
4285                && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4286         htab->elf.hgot = &eh->elf;
4287       else if (abiversion (ibfd) <= 1)
4288         {
4289           htab->need_func_desc_adj = 1;
4290           if (!add_symbol_adjust (eh, info))
4291             return FALSE;
4292         }
4293       p = &eh->u.next_dot_sym;
4294     }
4295   return TRUE;
4296 }
4297
4298 /* Undo hash table changes when an --as-needed input file is determined
4299    not to be needed.  */
4300
4301 static bfd_boolean
4302 ppc64_elf_notice_as_needed (bfd *ibfd,
4303                             struct bfd_link_info *info,
4304                             enum notice_asneeded_action act)
4305 {
4306   if (act == notice_not_needed)
4307     {
4308       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4309
4310       if (htab == NULL)
4311         return FALSE;
4312
4313       htab->dot_syms = NULL;
4314     }
4315   return _bfd_elf_notice_as_needed (ibfd, info, act);
4316 }
4317
4318 /* If --just-symbols against a final linked binary, then assume we need
4319    toc adjusting stubs when calling functions defined there.  */
4320
4321 static void
4322 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4323 {
4324   if ((sec->flags & SEC_CODE) != 0
4325       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4326       && is_ppc64_elf (sec->owner))
4327     {
4328       if (abiversion (sec->owner) >= 2
4329           || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4330         sec->has_toc_reloc = 1;
4331     }
4332   _bfd_elf_link_just_syms (sec, info);
4333 }
4334
4335 static struct plt_entry **
4336 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4337                        unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4338 {
4339   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4340   struct plt_entry **local_plt;
4341   unsigned char *local_got_tls_masks;
4342
4343   if (local_got_ents == NULL)
4344     {
4345       bfd_size_type size = symtab_hdr->sh_info;
4346
4347       size *= (sizeof (*local_got_ents)
4348                + sizeof (*local_plt)
4349                + sizeof (*local_got_tls_masks));
4350       local_got_ents = bfd_zalloc (abfd, size);
4351       if (local_got_ents == NULL)
4352         return NULL;
4353       elf_local_got_ents (abfd) = local_got_ents;
4354     }
4355
4356   if ((tls_type & (NON_GOT | TLS_EXPLICIT)) == 0)
4357     {
4358       struct got_entry *ent;
4359
4360       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4361         if (ent->addend == r_addend
4362             && ent->owner == abfd
4363             && ent->tls_type == tls_type)
4364           break;
4365       if (ent == NULL)
4366         {
4367           bfd_size_type amt = sizeof (*ent);
4368           ent = bfd_alloc (abfd, amt);
4369           if (ent == NULL)
4370             return FALSE;
4371           ent->next = local_got_ents[r_symndx];
4372           ent->addend = r_addend;
4373           ent->owner = abfd;
4374           ent->tls_type = tls_type;
4375           ent->is_indirect = FALSE;
4376           ent->got.refcount = 0;
4377           local_got_ents[r_symndx] = ent;
4378         }
4379       ent->got.refcount += 1;
4380     }
4381
4382   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4383   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4384   local_got_tls_masks[r_symndx] |= tls_type & 0xff;
4385
4386   return local_plt + r_symndx;
4387 }
4388
4389 static bfd_boolean
4390 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4391 {
4392   struct plt_entry *ent;
4393
4394   for (ent = *plist; ent != NULL; ent = ent->next)
4395     if (ent->addend == addend)
4396       break;
4397   if (ent == NULL)
4398     {
4399       bfd_size_type amt = sizeof (*ent);
4400       ent = bfd_alloc (abfd, amt);
4401       if (ent == NULL)
4402         return FALSE;
4403       ent->next = *plist;
4404       ent->addend = addend;
4405       ent->plt.refcount = 0;
4406       *plist = ent;
4407     }
4408   ent->plt.refcount += 1;
4409   return TRUE;
4410 }
4411
4412 static bfd_boolean
4413 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4414 {
4415   return (r_type == R_PPC64_REL24
4416           || r_type == R_PPC64_REL24_NOTOC
4417           || r_type == R_PPC64_REL14
4418           || r_type == R_PPC64_REL14_BRTAKEN
4419           || r_type == R_PPC64_REL14_BRNTAKEN
4420           || r_type == R_PPC64_ADDR24
4421           || r_type == R_PPC64_ADDR14
4422           || r_type == R_PPC64_ADDR14_BRTAKEN
4423           || r_type == R_PPC64_ADDR14_BRNTAKEN
4424           || r_type == R_PPC64_PLTCALL
4425           || r_type == R_PPC64_PLTCALL_NOTOC);
4426 }
4427
4428 /* Relocs on inline plt call sequence insns prior to the call.  */
4429
4430 static bfd_boolean
4431 is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
4432 {
4433   return (r_type == R_PPC64_PLT16_HA
4434           || r_type == R_PPC64_PLT16_HI
4435           || r_type == R_PPC64_PLT16_LO
4436           || r_type == R_PPC64_PLT16_LO_DS
4437           || r_type == R_PPC64_PLT_PCREL34
4438           || r_type == R_PPC64_PLT_PCREL34_NOTOC
4439           || r_type == R_PPC64_PLTSEQ
4440           || r_type == R_PPC64_PLTSEQ_NOTOC);
4441 }
4442
4443 /* Look through the relocs for a section during the first phase, and
4444    calculate needed space in the global offset table, procedure
4445    linkage table, and dynamic reloc sections.  */
4446
4447 static bfd_boolean
4448 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4449                         asection *sec, const Elf_Internal_Rela *relocs)
4450 {
4451   struct ppc_link_hash_table *htab;
4452   Elf_Internal_Shdr *symtab_hdr;
4453   struct elf_link_hash_entry **sym_hashes;
4454   const Elf_Internal_Rela *rel;
4455   const Elf_Internal_Rela *rel_end;
4456   asection *sreloc;
4457   struct elf_link_hash_entry *tga, *dottga;
4458   bfd_boolean is_opd;
4459
4460   if (bfd_link_relocatable (info))
4461     return TRUE;
4462
4463   /* Don't do anything special with non-loaded, non-alloced sections.
4464      In particular, any relocs in such sections should not affect GOT
4465      and PLT reference counting (ie. we don't allow them to create GOT
4466      or PLT entries), there's no possibility or desire to optimize TLS
4467      relocs, and there's not much point in propagating relocs to shared
4468      libs that the dynamic linker won't relocate.  */
4469   if ((sec->flags & SEC_ALLOC) == 0)
4470     return TRUE;
4471
4472   BFD_ASSERT (is_ppc64_elf (abfd));
4473
4474   htab = ppc_hash_table (info);
4475   if (htab == NULL)
4476     return FALSE;
4477
4478   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4479                               FALSE, FALSE, TRUE);
4480   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4481                                  FALSE, FALSE, TRUE);
4482   symtab_hdr = &elf_symtab_hdr (abfd);
4483   sym_hashes = elf_sym_hashes (abfd);
4484   sreloc = NULL;
4485   is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
4486   rel_end = relocs + sec->reloc_count;
4487   for (rel = relocs; rel < rel_end; rel++)
4488     {
4489       unsigned long r_symndx;
4490       struct elf_link_hash_entry *h;
4491       enum elf_ppc64_reloc_type r_type;
4492       int tls_type;
4493       struct _ppc64_elf_section_data *ppc64_sec;
4494       struct plt_entry **ifunc, **plt_list;
4495       bfd_vma sym_addend;
4496
4497       r_symndx = ELF64_R_SYM (rel->r_info);
4498       if (r_symndx < symtab_hdr->sh_info)
4499         h = NULL;
4500       else
4501         {
4502           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4503           h = elf_follow_link (h);
4504
4505           if (h == htab->elf.hgot)
4506             sec->has_toc_reloc = 1;
4507         }
4508
4509       tls_type = 0;
4510       ifunc = NULL;
4511       r_type = ELF64_R_TYPE (rel->r_info);
4512       switch (r_type)
4513         {
4514         case R_PPC64_D34:
4515         case R_PPC64_D34_LO:
4516         case R_PPC64_D34_HI30:
4517         case R_PPC64_D34_HA30:
4518         case R_PPC64_D28:
4519           htab->powerxx_stubs = 1;
4520           /* Fall through.  */
4521         default:
4522           /* Somewhat foolishly, because the ABIs don't specifically
4523              allow it, ppc64 gas and ld support GOT and PLT relocs
4524              with non-zero addends where the addend results in
4525              sym+addend being stored in the GOT or PLT entry.  This
4526              can't be supported for pcrel relocs because the addend is
4527              used to specify the pcrel offset.  */
4528           sym_addend = rel->r_addend;
4529           break;
4530
4531         case R_PPC64_PCREL34:
4532         case R_PPC64_GOT_PCREL34:
4533         case R_PPC64_PLT_PCREL34:
4534         case R_PPC64_PLT_PCREL34_NOTOC:
4535         case R_PPC64_PCREL28:
4536           htab->powerxx_stubs = 1;
4537           sym_addend = 0;
4538           break;
4539         }
4540       if (h != NULL)
4541         {
4542           if (h->type == STT_GNU_IFUNC)
4543             {
4544               h->needs_plt = 1;
4545               ifunc = &h->plt.plist;
4546             }
4547         }
4548       else
4549         {
4550           Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4551                                                           abfd, r_symndx);
4552           if (isym == NULL)
4553             return FALSE;
4554
4555           if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4556             {
4557               ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4558                                              sym_addend,
4559                                              NON_GOT | PLT_IFUNC);
4560               if (ifunc == NULL)
4561                 return FALSE;
4562             }
4563         }
4564
4565       switch (r_type)
4566         {
4567         case R_PPC64_TLSGD:
4568         case R_PPC64_TLSLD:
4569           /* These special tls relocs tie a call to __tls_get_addr with
4570              its parameter symbol.  */
4571           if (h != NULL)
4572             ((struct ppc_link_hash_entry *) h)->tls_mask |= TLS_TLS | TLS_MARK;
4573           else
4574             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4575                                         sym_addend,
4576                                         NON_GOT | TLS_TLS | TLS_MARK))
4577               return FALSE;
4578           sec->has_tls_reloc = 1;
4579           break;
4580
4581         case R_PPC64_GOT_TLSLD16:
4582         case R_PPC64_GOT_TLSLD16_LO:
4583         case R_PPC64_GOT_TLSLD16_HI:
4584         case R_PPC64_GOT_TLSLD16_HA:
4585           tls_type = TLS_TLS | TLS_LD;
4586           goto dogottls;
4587
4588         case R_PPC64_GOT_TLSGD16:
4589         case R_PPC64_GOT_TLSGD16_LO:
4590         case R_PPC64_GOT_TLSGD16_HI:
4591         case R_PPC64_GOT_TLSGD16_HA:
4592           tls_type = TLS_TLS | TLS_GD;
4593           goto dogottls;
4594
4595         case R_PPC64_GOT_TPREL16_DS:
4596         case R_PPC64_GOT_TPREL16_LO_DS:
4597         case R_PPC64_GOT_TPREL16_HI:
4598         case R_PPC64_GOT_TPREL16_HA:
4599           if (bfd_link_dll (info))
4600             info->flags |= DF_STATIC_TLS;
4601           tls_type = TLS_TLS | TLS_TPREL;
4602           goto dogottls;
4603
4604         case R_PPC64_GOT_DTPREL16_DS:
4605         case R_PPC64_GOT_DTPREL16_LO_DS:
4606         case R_PPC64_GOT_DTPREL16_HI:
4607         case R_PPC64_GOT_DTPREL16_HA:
4608           tls_type = TLS_TLS | TLS_DTPREL;
4609         dogottls:
4610           sec->has_tls_reloc = 1;
4611           goto dogot;
4612
4613         case R_PPC64_GOT16_HA:
4614         case R_PPC64_GOT16_LO_DS:
4615         case R_PPC64_GOT_PCREL34:
4616           ppc64_elf_tdata (abfd)->has_gotrel = 1;
4617           ppc64_elf_section_data (sec)->has_gotrel = 1;
4618           /* Fall through.  */
4619
4620         case R_PPC64_GOT16_DS:
4621         case R_PPC64_GOT16:
4622         case R_PPC64_GOT16_HI:
4623         case R_PPC64_GOT16_LO:
4624         dogot:
4625           /* This symbol requires a global offset table entry.  */
4626           sec->has_toc_reloc = 1;
4627           if (r_type == R_PPC64_GOT_TLSLD16
4628               || r_type == R_PPC64_GOT_TLSGD16
4629               || r_type == R_PPC64_GOT_TPREL16_DS
4630               || r_type == R_PPC64_GOT_DTPREL16_DS
4631               || r_type == R_PPC64_GOT16
4632               || r_type == R_PPC64_GOT16_DS)
4633             {
4634               htab->do_multi_toc = 1;
4635               ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4636             }
4637
4638           if (ppc64_elf_tdata (abfd)->got == NULL
4639               && !create_got_section (abfd, info))
4640             return FALSE;
4641
4642           if (h != NULL)
4643             {
4644               struct ppc_link_hash_entry *eh;
4645               struct got_entry *ent;
4646
4647               eh = (struct ppc_link_hash_entry *) h;
4648               for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4649                 if (ent->addend == sym_addend
4650                     && ent->owner == abfd
4651                     && ent->tls_type == tls_type)
4652                   break;
4653               if (ent == NULL)
4654                 {
4655                   bfd_size_type amt = sizeof (*ent);
4656                   ent = bfd_alloc (abfd, amt);
4657                   if (ent == NULL)
4658                     return FALSE;
4659                   ent->next = eh->elf.got.glist;
4660                   ent->addend = sym_addend;
4661                   ent->owner = abfd;
4662                   ent->tls_type = tls_type;
4663                   ent->is_indirect = FALSE;
4664                   ent->got.refcount = 0;
4665                   eh->elf.got.glist = ent;
4666                 }
4667               ent->got.refcount += 1;
4668               eh->tls_mask |= tls_type;
4669             }
4670           else
4671             /* This is a global offset table entry for a local symbol.  */
4672             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4673                                         sym_addend, tls_type))
4674               return FALSE;
4675
4676           /* We may also need a plt entry if the symbol turns out to be
4677              an ifunc.  */
4678           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
4679             {
4680               if (!update_plt_info (abfd, &h->plt.plist, sym_addend))
4681                 return FALSE;
4682             }
4683           break;
4684
4685         case R_PPC64_PLT16_HA:
4686         case R_PPC64_PLT16_HI:
4687         case R_PPC64_PLT16_LO:
4688         case R_PPC64_PLT16_LO_DS:
4689         case R_PPC64_PLT_PCREL34:
4690         case R_PPC64_PLT_PCREL34_NOTOC:
4691         case R_PPC64_PLT32:
4692         case R_PPC64_PLT64:
4693           /* This symbol requires a procedure linkage table entry.  */
4694           plt_list = ifunc;
4695           if (h != NULL)
4696             {
4697               h->needs_plt = 1;
4698               if (h->root.root.string[0] == '.'
4699                   && h->root.root.string[1] != '\0')
4700                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
4701               ((struct ppc_link_hash_entry *) h)->tls_mask |= PLT_KEEP;
4702               plt_list = &h->plt.plist;
4703             }
4704           if (plt_list == NULL)
4705             plt_list = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4706                                               sym_addend,
4707                                               NON_GOT | PLT_KEEP);
4708           if (!update_plt_info (abfd, plt_list, sym_addend))
4709             return FALSE;
4710           break;
4711
4712           /* The following relocations don't need to propagate the
4713              relocation if linking a shared object since they are
4714              section relative.  */
4715         case R_PPC64_SECTOFF:
4716         case R_PPC64_SECTOFF_LO:
4717         case R_PPC64_SECTOFF_HI:
4718         case R_PPC64_SECTOFF_HA:
4719         case R_PPC64_SECTOFF_DS:
4720         case R_PPC64_SECTOFF_LO_DS:
4721         case R_PPC64_DTPREL16:
4722         case R_PPC64_DTPREL16_LO:
4723         case R_PPC64_DTPREL16_HI:
4724         case R_PPC64_DTPREL16_HA:
4725         case R_PPC64_DTPREL16_DS:
4726         case R_PPC64_DTPREL16_LO_DS:
4727         case R_PPC64_DTPREL16_HIGH:
4728         case R_PPC64_DTPREL16_HIGHA:
4729         case R_PPC64_DTPREL16_HIGHER:
4730         case R_PPC64_DTPREL16_HIGHERA:
4731         case R_PPC64_DTPREL16_HIGHEST:
4732         case R_PPC64_DTPREL16_HIGHESTA:
4733           break;
4734
4735           /* Nor do these.  */
4736         case R_PPC64_REL16:
4737         case R_PPC64_REL16_LO:
4738         case R_PPC64_REL16_HI:
4739         case R_PPC64_REL16_HA:
4740         case R_PPC64_REL16_HIGH:
4741         case R_PPC64_REL16_HIGHA:
4742         case R_PPC64_REL16_HIGHER:
4743         case R_PPC64_REL16_HIGHERA:
4744         case R_PPC64_REL16_HIGHEST:
4745         case R_PPC64_REL16_HIGHESTA:
4746         case R_PPC64_REL16_HIGHER34:
4747         case R_PPC64_REL16_HIGHERA34:
4748         case R_PPC64_REL16_HIGHEST34:
4749         case R_PPC64_REL16_HIGHESTA34:
4750         case R_PPC64_REL16DX_HA:
4751           break;
4752
4753           /* Not supported as a dynamic relocation.  */
4754         case R_PPC64_ADDR64_LOCAL:
4755           if (bfd_link_pic (info))
4756             {
4757               if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
4758                 ppc_howto_init ();
4759               /* xgettext:c-format */
4760               info->callbacks->einfo (_("%H: %s reloc unsupported "
4761                                         "in shared libraries and PIEs\n"),
4762                                       abfd, sec, rel->r_offset,
4763                                       ppc64_elf_howto_table[r_type]->name);
4764               bfd_set_error (bfd_error_bad_value);
4765               return FALSE;
4766             }
4767           break;
4768
4769         case R_PPC64_TOC16:
4770         case R_PPC64_TOC16_DS:
4771           htab->do_multi_toc = 1;
4772           ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4773           /* Fall through.  */
4774         case R_PPC64_TOC16_LO:
4775         case R_PPC64_TOC16_HI:
4776         case R_PPC64_TOC16_HA:
4777         case R_PPC64_TOC16_LO_DS:
4778           sec->has_toc_reloc = 1;
4779           break;
4780
4781           /* Marker reloc.  */
4782         case R_PPC64_ENTRY:
4783           break;
4784
4785           /* This relocation describes the C++ object vtable hierarchy.
4786              Reconstruct it for later use during GC.  */
4787         case R_PPC64_GNU_VTINHERIT:
4788           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4789             return FALSE;
4790           break;
4791
4792           /* This relocation describes which C++ vtable entries are actually
4793              used.  Record for later use during GC.  */
4794         case R_PPC64_GNU_VTENTRY:
4795           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4796             return FALSE;
4797           break;
4798
4799         case R_PPC64_REL14:
4800         case R_PPC64_REL14_BRTAKEN:
4801         case R_PPC64_REL14_BRNTAKEN:
4802           {
4803             asection *dest = NULL;
4804
4805             /* Heuristic: If jumping outside our section, chances are
4806                we are going to need a stub.  */
4807             if (h != NULL)
4808               {
4809                 /* If the sym is weak it may be overridden later, so
4810                    don't assume we know where a weak sym lives.  */
4811                 if (h->root.type == bfd_link_hash_defined)
4812                   dest = h->root.u.def.section;
4813               }
4814             else
4815               {
4816                 Elf_Internal_Sym *isym;
4817
4818                 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4819                                               abfd, r_symndx);
4820                 if (isym == NULL)
4821                   return FALSE;
4822
4823                 dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
4824               }
4825
4826             if (dest != sec)
4827               ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4828           }
4829           goto rel24;
4830
4831         case R_PPC64_PLTCALL:
4832         case R_PPC64_PLTCALL_NOTOC:
4833           ppc64_elf_section_data (sec)->has_pltcall = 1;
4834           /* Fall through.  */
4835
4836         case R_PPC64_REL24:
4837         case R_PPC64_REL24_NOTOC:
4838         rel24:
4839           plt_list = ifunc;
4840           if (h != NULL)
4841             {
4842               h->needs_plt = 1;
4843               if (h->root.root.string[0] == '.'
4844                   && h->root.root.string[1] != '\0')
4845                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
4846
4847               if (h == tga || h == dottga)
4848                 {
4849                   sec->has_tls_reloc = 1;
4850                   if (rel != relocs
4851                       && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
4852                           || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
4853                     /* We have a new-style __tls_get_addr call with
4854                        a marker reloc.  */
4855                     ;
4856                   else
4857                     /* Mark this section as having an old-style call.  */
4858                     sec->has_tls_get_addr_call = 1;
4859                 }
4860               plt_list = &h->plt.plist;
4861             }
4862
4863           /* We may need a .plt entry if the function this reloc
4864              refers to is in a shared lib.  */
4865           if (plt_list
4866               && !update_plt_info (abfd, plt_list, sym_addend))
4867             return FALSE;
4868           break;
4869
4870         case R_PPC64_ADDR14:
4871         case R_PPC64_ADDR14_BRNTAKEN:
4872         case R_PPC64_ADDR14_BRTAKEN:
4873         case R_PPC64_ADDR24:
4874           goto dodyn;
4875
4876         case R_PPC64_TPREL64:
4877           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
4878           if (bfd_link_dll (info))
4879             info->flags |= DF_STATIC_TLS;
4880           goto dotlstoc;
4881
4882         case R_PPC64_DTPMOD64:
4883           if (rel + 1 < rel_end
4884               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
4885               && rel[1].r_offset == rel->r_offset + 8)
4886             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
4887           else
4888             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
4889           goto dotlstoc;
4890
4891         case R_PPC64_DTPREL64:
4892           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
4893           if (rel != relocs
4894               && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
4895               && rel[-1].r_offset == rel->r_offset - 8)
4896             /* This is the second reloc of a dtpmod, dtprel pair.
4897                Don't mark with TLS_DTPREL.  */
4898             goto dodyn;
4899
4900         dotlstoc:
4901           sec->has_tls_reloc = 1;
4902           if (h != NULL)
4903             {
4904               struct ppc_link_hash_entry *eh;
4905               eh = (struct ppc_link_hash_entry *) h;
4906               eh->tls_mask |= tls_type;
4907             }
4908           else
4909             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4910                                         sym_addend, tls_type))
4911               return FALSE;
4912
4913           ppc64_sec = ppc64_elf_section_data (sec);
4914           if (ppc64_sec->sec_type != sec_toc)
4915             {
4916               bfd_size_type amt;
4917
4918               /* One extra to simplify get_tls_mask.  */
4919               amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
4920               ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
4921               if (ppc64_sec->u.toc.symndx == NULL)
4922                 return FALSE;
4923               amt = sec->size * sizeof (bfd_vma) / 8;
4924               ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
4925               if (ppc64_sec->u.toc.add == NULL)
4926                 return FALSE;
4927               BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
4928               ppc64_sec->sec_type = sec_toc;
4929             }
4930           BFD_ASSERT (rel->r_offset % 8 == 0);
4931           ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
4932           ppc64_sec->u.toc.add[rel->r_offset / 8] = sym_addend;
4933
4934           /* Mark the second slot of a GD or LD entry.
4935              -1 to indicate GD and -2 to indicate LD.  */
4936           if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
4937             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
4938           else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
4939             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
4940           goto dodyn;
4941
4942         case R_PPC64_TPREL16:
4943         case R_PPC64_TPREL16_LO:
4944         case R_PPC64_TPREL16_HI:
4945         case R_PPC64_TPREL16_HA:
4946         case R_PPC64_TPREL16_DS:
4947         case R_PPC64_TPREL16_LO_DS:
4948         case R_PPC64_TPREL16_HIGH:
4949         case R_PPC64_TPREL16_HIGHA:
4950         case R_PPC64_TPREL16_HIGHER:
4951         case R_PPC64_TPREL16_HIGHERA:
4952         case R_PPC64_TPREL16_HIGHEST:
4953         case R_PPC64_TPREL16_HIGHESTA:
4954           if (bfd_link_dll (info))
4955             info->flags |= DF_STATIC_TLS;
4956           goto dodyn;
4957
4958         case R_PPC64_ADDR64:
4959           if (is_opd
4960               && rel + 1 < rel_end
4961               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
4962             {
4963               if (h != NULL)
4964                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
4965             }
4966           /* Fall through.  */
4967
4968         case R_PPC64_ADDR16:
4969         case R_PPC64_ADDR16_DS:
4970         case R_PPC64_ADDR16_HA:
4971         case R_PPC64_ADDR16_HI:
4972         case R_PPC64_ADDR16_HIGH:
4973         case R_PPC64_ADDR16_HIGHA:
4974         case R_PPC64_ADDR16_HIGHER:
4975         case R_PPC64_ADDR16_HIGHERA:
4976         case R_PPC64_ADDR16_HIGHEST:
4977         case R_PPC64_ADDR16_HIGHESTA:
4978         case R_PPC64_ADDR16_LO:
4979         case R_PPC64_ADDR16_LO_DS:
4980         case R_PPC64_D34:
4981         case R_PPC64_D34_LO:
4982         case R_PPC64_D34_HI30:
4983         case R_PPC64_D34_HA30:
4984         case R_PPC64_ADDR16_HIGHER34:
4985         case R_PPC64_ADDR16_HIGHERA34:
4986         case R_PPC64_ADDR16_HIGHEST34:
4987         case R_PPC64_ADDR16_HIGHESTA34:
4988         case R_PPC64_D28:
4989           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
4990               && rel->r_addend == 0)
4991             {
4992               /* We may need a .plt entry if this reloc refers to a
4993                  function in a shared lib.  */
4994               if (!update_plt_info (abfd, &h->plt.plist, 0))
4995                 return FALSE;
4996               h->pointer_equality_needed = 1;
4997             }
4998           /* Fall through.  */
4999
5000         case R_PPC64_REL30:
5001         case R_PPC64_REL32:
5002         case R_PPC64_REL64:
5003         case R_PPC64_ADDR32:
5004         case R_PPC64_UADDR16:
5005         case R_PPC64_UADDR32:
5006         case R_PPC64_UADDR64:
5007         case R_PPC64_TOC:
5008           if (h != NULL && !bfd_link_pic (info))
5009             /* We may need a copy reloc.  */
5010             h->non_got_ref = 1;
5011
5012           /* Don't propagate .opd relocs.  */
5013           if (NO_OPD_RELOCS && is_opd)
5014             break;
5015
5016           /* If we are creating a shared library, and this is a reloc
5017              against a global symbol, or a non PC relative reloc
5018              against a local symbol, then we need to copy the reloc
5019              into the shared library.  However, if we are linking with
5020              -Bsymbolic, we do not need to copy a reloc against a
5021              global symbol which is defined in an object we are
5022              including in the link (i.e., DEF_REGULAR is set).  At
5023              this point we have not seen all the input files, so it is
5024              possible that DEF_REGULAR is not set now but will be set
5025              later (it is never cleared).  In case of a weak definition,
5026              DEF_REGULAR may be cleared later by a strong definition in
5027              a shared library.  We account for that possibility below by
5028              storing information in the dyn_relocs field of the hash
5029              table entry.  A similar situation occurs when creating
5030              shared libraries and symbol visibility changes render the
5031              symbol local.
5032
5033              If on the other hand, we are creating an executable, we
5034              may need to keep relocations for symbols satisfied by a
5035              dynamic library if we manage to avoid copy relocs for the
5036              symbol.  */
5037         dodyn:
5038           if ((bfd_link_pic (info)
5039                && (must_be_dyn_reloc (info, r_type)
5040                    || (h != NULL
5041                        && (!SYMBOLIC_BIND (info, h)
5042                            || h->root.type == bfd_link_hash_defweak
5043                            || !h->def_regular))))
5044               || (ELIMINATE_COPY_RELOCS
5045                   && !bfd_link_pic (info)
5046                   && h != NULL
5047                   && (h->root.type == bfd_link_hash_defweak
5048                       || !h->def_regular))
5049               || (!bfd_link_pic (info)
5050                   && ifunc != NULL))
5051             {
5052               /* We must copy these reloc types into the output file.
5053                  Create a reloc section in dynobj and make room for
5054                  this reloc.  */
5055               if (sreloc == NULL)
5056                 {
5057                   sreloc = _bfd_elf_make_dynamic_reloc_section
5058                     (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5059
5060                   if (sreloc == NULL)
5061                     return FALSE;
5062                 }
5063
5064               /* If this is a global symbol, we count the number of
5065                  relocations we need for this symbol.  */
5066               if (h != NULL)
5067                 {
5068                   struct elf_dyn_relocs *p;
5069                   struct elf_dyn_relocs **head;
5070
5071                   head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5072                   p = *head;
5073                   if (p == NULL || p->sec != sec)
5074                     {
5075                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5076                       if (p == NULL)
5077                         return FALSE;
5078                       p->next = *head;
5079                       *head = p;
5080                       p->sec = sec;
5081                       p->count = 0;
5082                       p->pc_count = 0;
5083                     }
5084                   p->count += 1;
5085                   if (!must_be_dyn_reloc (info, r_type))
5086                     p->pc_count += 1;
5087                 }
5088               else
5089                 {
5090                   /* Track dynamic relocs needed for local syms too.
5091                      We really need local syms available to do this
5092                      easily.  Oh well.  */
5093                   struct ppc_dyn_relocs *p;
5094                   struct ppc_dyn_relocs **head;
5095                   bfd_boolean is_ifunc;
5096                   asection *s;
5097                   void *vpp;
5098                   Elf_Internal_Sym *isym;
5099
5100                   isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5101                                                 abfd, r_symndx);
5102                   if (isym == NULL)
5103                     return FALSE;
5104
5105                   s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5106                   if (s == NULL)
5107                     s = sec;
5108
5109                   vpp = &elf_section_data (s)->local_dynrel;
5110                   head = (struct ppc_dyn_relocs **) vpp;
5111                   is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5112                   p = *head;
5113                   if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5114                     p = p->next;
5115                   if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5116                     {
5117                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5118                       if (p == NULL)
5119                         return FALSE;
5120                       p->next = *head;
5121                       *head = p;
5122                       p->sec = sec;
5123                       p->ifunc = is_ifunc;
5124                       p->count = 0;
5125                     }
5126                   p->count += 1;
5127                 }
5128             }
5129           break;
5130
5131         default:
5132           break;
5133         }
5134     }
5135
5136   return TRUE;
5137 }
5138
5139 /* Merge backend specific data from an object file to the output
5140    object file when linking.  */
5141
5142 static bfd_boolean
5143 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
5144 {
5145   bfd *obfd = info->output_bfd;
5146   unsigned long iflags, oflags;
5147
5148   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5149     return TRUE;
5150
5151   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5152     return TRUE;
5153
5154   if (!_bfd_generic_verify_endian_match (ibfd, info))
5155     return FALSE;
5156
5157   iflags = elf_elfheader (ibfd)->e_flags;
5158   oflags = elf_elfheader (obfd)->e_flags;
5159
5160   if (iflags & ~EF_PPC64_ABI)
5161     {
5162       _bfd_error_handler
5163         /* xgettext:c-format */
5164         (_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
5165       bfd_set_error (bfd_error_bad_value);
5166       return FALSE;
5167     }
5168   else if (iflags != oflags && iflags != 0)
5169     {
5170       _bfd_error_handler
5171         /* xgettext:c-format */
5172         (_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
5173          ibfd, iflags, oflags);
5174       bfd_set_error (bfd_error_bad_value);
5175       return FALSE;
5176     }
5177
5178   if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
5179     return FALSE;
5180
5181   /* Merge Tag_compatibility attributes and any common GNU ones.  */
5182   return _bfd_elf_merge_object_attributes (ibfd, info);
5183 }
5184
5185 static bfd_boolean
5186 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5187 {
5188   /* Print normal ELF private data.  */
5189   _bfd_elf_print_private_bfd_data (abfd, ptr);
5190
5191   if (elf_elfheader (abfd)->e_flags != 0)
5192     {
5193       FILE *file = ptr;
5194
5195       fprintf (file, _("private flags = 0x%lx:"),
5196                elf_elfheader (abfd)->e_flags);
5197
5198       if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5199         fprintf (file, _(" [abiv%ld]"),
5200                  elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5201       fputc ('\n', file);
5202     }
5203
5204   return TRUE;
5205 }
5206
5207 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5208    of the code entry point, and its section, which must be in the same
5209    object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
5210
5211 static bfd_vma
5212 opd_entry_value (asection *opd_sec,
5213                  bfd_vma offset,
5214                  asection **code_sec,
5215                  bfd_vma *code_off,
5216                  bfd_boolean in_code_sec)
5217 {
5218   bfd *opd_bfd = opd_sec->owner;
5219   Elf_Internal_Rela *relocs;
5220   Elf_Internal_Rela *lo, *hi, *look;
5221   bfd_vma val;
5222
5223   /* No relocs implies we are linking a --just-symbols object, or looking
5224      at a final linked executable with addr2line or somesuch.  */
5225   if (opd_sec->reloc_count == 0)
5226     {
5227       bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5228
5229       if (contents == NULL)
5230         {
5231           if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5232             return (bfd_vma) -1;
5233           ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5234         }
5235
5236       /* PR 17512: file: 64b9dfbb.  */
5237       if (offset + 7 >= opd_sec->size || offset + 7 < offset)
5238         return (bfd_vma) -1;
5239
5240       val = bfd_get_64 (opd_bfd, contents + offset);
5241       if (code_sec != NULL)
5242         {
5243           asection *sec, *likely = NULL;
5244
5245           if (in_code_sec)
5246             {
5247               sec = *code_sec;
5248               if (sec->vma <= val
5249                   && val < sec->vma + sec->size)
5250                 likely = sec;
5251               else
5252                 val = -1;
5253             }
5254           else
5255             for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5256               if (sec->vma <= val
5257                   && (sec->flags & SEC_LOAD) != 0
5258                   && (sec->flags & SEC_ALLOC) != 0)
5259                 likely = sec;
5260           if (likely != NULL)
5261             {
5262               *code_sec = likely;
5263               if (code_off != NULL)
5264                 *code_off = val - likely->vma;
5265             }
5266         }
5267       return val;
5268     }
5269
5270   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5271
5272   relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5273   if (relocs == NULL)
5274     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5275   /* PR 17512: file: df8e1fd6.  */
5276   if (relocs == NULL)
5277     return (bfd_vma) -1;
5278
5279   /* Go find the opd reloc at the sym address.  */
5280   lo = relocs;
5281   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5282   val = (bfd_vma) -1;
5283   while (lo < hi)
5284     {
5285       look = lo + (hi - lo) / 2;
5286       if (look->r_offset < offset)
5287         lo = look + 1;
5288       else if (look->r_offset > offset)
5289         hi = look;
5290       else
5291         {
5292           Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5293
5294           if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5295               && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5296             {
5297               unsigned long symndx = ELF64_R_SYM (look->r_info);
5298               asection *sec = NULL;
5299
5300               if (symndx >= symtab_hdr->sh_info
5301                   && elf_sym_hashes (opd_bfd) != NULL)
5302                 {
5303                   struct elf_link_hash_entry **sym_hashes;
5304                   struct elf_link_hash_entry *rh;
5305
5306                   sym_hashes = elf_sym_hashes (opd_bfd);
5307                   rh = sym_hashes[symndx - symtab_hdr->sh_info];
5308                   if (rh != NULL)
5309                     {
5310                       rh = elf_follow_link (rh);
5311                       if (rh->root.type != bfd_link_hash_defined
5312                           && rh->root.type != bfd_link_hash_defweak)
5313                         break;
5314                       if (rh->root.u.def.section->owner == opd_bfd)
5315                         {
5316                           val = rh->root.u.def.value;
5317                           sec = rh->root.u.def.section;
5318                         }
5319                     }
5320                 }
5321
5322               if (sec == NULL)
5323                 {
5324                   Elf_Internal_Sym *sym;
5325
5326                   if (symndx < symtab_hdr->sh_info)
5327                     {
5328                       sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5329                       if (sym == NULL)
5330                         {
5331                           size_t symcnt = symtab_hdr->sh_info;
5332                           sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5333                                                       symcnt, 0,
5334                                                       NULL, NULL, NULL);
5335                           if (sym == NULL)
5336                             break;
5337                           symtab_hdr->contents = (bfd_byte *) sym;
5338                         }
5339                       sym += symndx;
5340                     }
5341                   else
5342                     {
5343                       sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5344                                                   1, symndx,
5345                                                   NULL, NULL, NULL);
5346                       if (sym == NULL)
5347                         break;
5348                     }
5349                   sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5350                   if (sec == NULL)
5351                     break;
5352                   BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5353                   val = sym->st_value;
5354                 }
5355
5356               val += look->r_addend;
5357               if (code_off != NULL)
5358                 *code_off = val;
5359               if (code_sec != NULL)
5360                 {
5361                   if (in_code_sec && *code_sec != sec)
5362                     return -1;
5363                   else
5364                     *code_sec = sec;
5365                 }
5366               if (sec->output_section != NULL)
5367                 val += sec->output_section->vma + sec->output_offset;
5368             }
5369           break;
5370         }
5371     }
5372
5373   return val;
5374 }
5375
5376 /* If the ELF symbol SYM might be a function in SEC, return the
5377    function size and set *CODE_OFF to the function's entry point,
5378    otherwise return zero.  */
5379
5380 static bfd_size_type
5381 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5382                               bfd_vma *code_off)
5383 {
5384   bfd_size_type size;
5385
5386   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5387                      | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5388     return 0;
5389
5390   size = 0;
5391   if (!(sym->flags & BSF_SYNTHETIC))
5392     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5393
5394   if (strcmp (sym->section->name, ".opd") == 0)
5395     {
5396       struct _opd_sec_data *opd = get_opd_info (sym->section);
5397       bfd_vma symval = sym->value;
5398
5399       if (opd != NULL
5400           && opd->adjust != NULL
5401           && elf_section_data (sym->section)->relocs != NULL)
5402         {
5403           /* opd_entry_value will use cached relocs that have been
5404              adjusted, but with raw symbols.  That means both local
5405              and global symbols need adjusting.  */
5406           long adjust = opd->adjust[OPD_NDX (symval)];
5407           if (adjust == -1)
5408             return 0;
5409           symval += adjust;
5410         }
5411
5412       if (opd_entry_value (sym->section, symval,
5413                            &sec, code_off, TRUE) == (bfd_vma) -1)
5414         return 0;
5415       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5416          symbol.  This size has nothing to do with the code size of the
5417          function, which is what we're supposed to return, but the
5418          code size isn't available without looking up the dot-sym.
5419          However, doing that would be a waste of time particularly
5420          since elf_find_function will look at the dot-sym anyway.
5421          Now, elf_find_function will keep the largest size of any
5422          function sym found at the code address of interest, so return
5423          1 here to avoid it incorrectly caching a larger function size
5424          for a small function.  This does mean we return the wrong
5425          size for a new-ABI function of size 24, but all that does is
5426          disable caching for such functions.  */
5427       if (size == 24)
5428         size = 1;
5429     }
5430   else
5431     {
5432       if (sym->section != sec)
5433         return 0;
5434       *code_off = sym->value;
5435     }
5436   if (size == 0)
5437     size = 1;
5438   return size;
5439 }
5440
5441 /* Return true if symbol is a strong function defined in an ELFv2
5442    object with st_other localentry bits of zero, ie. its local entry
5443    point coincides with its global entry point.  */
5444
5445 static bfd_boolean
5446 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
5447 {
5448   return (h != NULL
5449           && h->type == STT_FUNC
5450           && h->root.type == bfd_link_hash_defined
5451           && (STO_PPC64_LOCAL_MASK & h->other) == 0
5452           && !((struct ppc_link_hash_entry *) h)->non_zero_localentry
5453           && is_ppc64_elf (h->root.u.def.section->owner)
5454           && abiversion (h->root.u.def.section->owner) >= 2);
5455 }
5456
5457 /* Return true if symbol is defined in a regular object file.  */
5458
5459 static bfd_boolean
5460 is_static_defined (struct elf_link_hash_entry *h)
5461 {
5462   return ((h->root.type == bfd_link_hash_defined
5463            || h->root.type == bfd_link_hash_defweak)
5464           && h->root.u.def.section != NULL
5465           && h->root.u.def.section->output_section != NULL);
5466 }
5467
5468 /* If FDH is a function descriptor symbol, return the associated code
5469    entry symbol if it is defined.  Return NULL otherwise.  */
5470
5471 static struct ppc_link_hash_entry *
5472 defined_code_entry (struct ppc_link_hash_entry *fdh)
5473 {
5474   if (fdh->is_func_descriptor)
5475     {
5476       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5477       if (fh->elf.root.type == bfd_link_hash_defined
5478           || fh->elf.root.type == bfd_link_hash_defweak)
5479         return fh;
5480     }
5481   return NULL;
5482 }
5483
5484 /* If FH is a function code entry symbol, return the associated
5485    function descriptor symbol if it is defined.  Return NULL otherwise.  */
5486
5487 static struct ppc_link_hash_entry *
5488 defined_func_desc (struct ppc_link_hash_entry *fh)
5489 {
5490   if (fh->oh != NULL
5491       && fh->oh->is_func_descriptor)
5492     {
5493       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5494       if (fdh->elf.root.type == bfd_link_hash_defined
5495           || fdh->elf.root.type == bfd_link_hash_defweak)
5496         return fdh;
5497     }
5498   return NULL;
5499 }
5500
5501 static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
5502
5503 /* Garbage collect sections, after first dealing with dot-symbols.  */
5504
5505 static bfd_boolean
5506 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5507 {
5508   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5509
5510   if (htab != NULL && htab->need_func_desc_adj)
5511     {
5512       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5513       htab->need_func_desc_adj = 0;
5514     }
5515   return bfd_elf_gc_sections (abfd, info);
5516 }
5517
5518 /* Mark all our entry sym sections, both opd and code section.  */
5519
5520 static void
5521 ppc64_elf_gc_keep (struct bfd_link_info *info)
5522 {
5523   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5524   struct bfd_sym_chain *sym;
5525
5526   if (htab == NULL)
5527     return;
5528
5529   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5530     {
5531       struct ppc_link_hash_entry *eh, *fh;
5532       asection *sec;
5533
5534       eh = (struct ppc_link_hash_entry *)
5535         elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
5536       if (eh == NULL)
5537         continue;
5538       if (eh->elf.root.type != bfd_link_hash_defined
5539           && eh->elf.root.type != bfd_link_hash_defweak)
5540         continue;
5541
5542       fh = defined_code_entry (eh);
5543       if (fh != NULL)
5544         {
5545           sec = fh->elf.root.u.def.section;
5546           sec->flags |= SEC_KEEP;
5547         }
5548       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5549                && opd_entry_value (eh->elf.root.u.def.section,
5550                                    eh->elf.root.u.def.value,
5551                                    &sec, NULL, FALSE) != (bfd_vma) -1)
5552         sec->flags |= SEC_KEEP;
5553
5554       sec = eh->elf.root.u.def.section;
5555       sec->flags |= SEC_KEEP;
5556     }
5557 }
5558
5559 /* Mark sections containing dynamically referenced symbols.  When
5560    building shared libraries, we must assume that any visible symbol is
5561    referenced.  */
5562
5563 static bfd_boolean
5564 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5565 {
5566   struct bfd_link_info *info = (struct bfd_link_info *) inf;
5567   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
5568   struct ppc_link_hash_entry *fdh;
5569   struct bfd_elf_dynamic_list *d = info->dynamic_list;
5570
5571   /* Dynamic linking info is on the func descriptor sym.  */
5572   fdh = defined_func_desc (eh);
5573   if (fdh != NULL)
5574     eh = fdh;
5575
5576   if ((eh->elf.root.type == bfd_link_hash_defined
5577        || eh->elf.root.type == bfd_link_hash_defweak)
5578       && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
5579           || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
5580               && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5581               && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5582               && (!bfd_link_executable (info)
5583                   || info->gc_keep_exported
5584                   || info->export_dynamic
5585                   || (eh->elf.dynamic
5586                       && d != NULL
5587                       && (*d->match) (&d->head, NULL,
5588                                       eh->elf.root.root.string)))
5589               && (eh->elf.versioned >= versioned
5590                   || !bfd_hide_sym_by_version (info->version_info,
5591                                                eh->elf.root.root.string)))))
5592     {
5593       asection *code_sec;
5594       struct ppc_link_hash_entry *fh;
5595
5596       eh->elf.root.u.def.section->flags |= SEC_KEEP;
5597
5598       /* Function descriptor syms cause the associated
5599          function code sym section to be marked.  */
5600       fh = defined_code_entry (eh);
5601       if (fh != NULL)
5602         {
5603           code_sec = fh->elf.root.u.def.section;
5604           code_sec->flags |= SEC_KEEP;
5605         }
5606       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5607                && opd_entry_value (eh->elf.root.u.def.section,
5608                                    eh->elf.root.u.def.value,
5609                                    &code_sec, NULL, FALSE) != (bfd_vma) -1)
5610         code_sec->flags |= SEC_KEEP;
5611     }
5612
5613   return TRUE;
5614 }
5615
5616 /* Return the section that should be marked against GC for a given
5617    relocation.  */
5618
5619 static asection *
5620 ppc64_elf_gc_mark_hook (asection *sec,
5621                         struct bfd_link_info *info,
5622                         Elf_Internal_Rela *rel,
5623                         struct elf_link_hash_entry *h,
5624                         Elf_Internal_Sym *sym)
5625 {
5626   asection *rsec;
5627
5628   /* Syms return NULL if we're marking .opd, so we avoid marking all
5629      function sections, as all functions are referenced in .opd.  */
5630   rsec = NULL;
5631   if (get_opd_info (sec) != NULL)
5632     return rsec;
5633
5634   if (h != NULL)
5635     {
5636       enum elf_ppc64_reloc_type r_type;
5637       struct ppc_link_hash_entry *eh, *fh, *fdh;
5638
5639       r_type = ELF64_R_TYPE (rel->r_info);
5640       switch (r_type)
5641         {
5642         case R_PPC64_GNU_VTINHERIT:
5643         case R_PPC64_GNU_VTENTRY:
5644           break;
5645
5646         default:
5647           switch (h->root.type)
5648             {
5649             case bfd_link_hash_defined:
5650             case bfd_link_hash_defweak:
5651               eh = (struct ppc_link_hash_entry *) h;
5652               fdh = defined_func_desc (eh);
5653               if (fdh != NULL)
5654                 {
5655                   /* -mcall-aixdesc code references the dot-symbol on
5656                      a call reloc.  Mark the function descriptor too
5657                      against garbage collection.  */
5658                   fdh->elf.mark = 1;
5659                   if (fdh->elf.is_weakalias)
5660                     weakdef (&fdh->elf)->mark = 1;
5661                   eh = fdh;
5662                 }
5663
5664               /* Function descriptor syms cause the associated
5665                  function code sym section to be marked.  */
5666               fh = defined_code_entry (eh);
5667               if (fh != NULL)
5668                 {
5669                   /* They also mark their opd section.  */
5670                   eh->elf.root.u.def.section->gc_mark = 1;
5671
5672                   rsec = fh->elf.root.u.def.section;
5673                 }
5674               else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5675                        && opd_entry_value (eh->elf.root.u.def.section,
5676                                            eh->elf.root.u.def.value,
5677                                            &rsec, NULL, FALSE) != (bfd_vma) -1)
5678                 eh->elf.root.u.def.section->gc_mark = 1;
5679               else
5680                 rsec = h->root.u.def.section;
5681               break;
5682
5683             case bfd_link_hash_common:
5684               rsec = h->root.u.c.p->section;
5685               break;
5686
5687             default:
5688               return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5689             }
5690         }
5691     }
5692   else
5693     {
5694       struct _opd_sec_data *opd;
5695
5696       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5697       opd = get_opd_info (rsec);
5698       if (opd != NULL && opd->func_sec != NULL)
5699         {
5700           rsec->gc_mark = 1;
5701
5702           rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
5703         }
5704     }
5705
5706   return rsec;
5707 }
5708
5709 /* The maximum size of .sfpr.  */
5710 #define SFPR_MAX (218*4)
5711
5712 struct sfpr_def_parms
5713 {
5714   const char name[12];
5715   unsigned char lo, hi;
5716   bfd_byte *(*write_ent) (bfd *, bfd_byte *, int);
5717   bfd_byte *(*write_tail) (bfd *, bfd_byte *, int);
5718 };
5719
5720 /* Auto-generate _save*, _rest* functions in .sfpr.
5721    If STUB_SEC is non-null, define alias symbols in STUB_SEC
5722    instead.  */
5723
5724 static bfd_boolean
5725 sfpr_define (struct bfd_link_info *info,
5726              const struct sfpr_def_parms *parm,
5727              asection *stub_sec)
5728 {
5729   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5730   unsigned int i;
5731   size_t len = strlen (parm->name);
5732   bfd_boolean writing = FALSE;
5733   char sym[16];
5734
5735   if (htab == NULL)
5736     return FALSE;
5737
5738   memcpy (sym, parm->name, len);
5739   sym[len + 2] = 0;
5740
5741   for (i = parm->lo; i <= parm->hi; i++)
5742     {
5743       struct ppc_link_hash_entry *h;
5744
5745       sym[len + 0] = i / 10 + '0';
5746       sym[len + 1] = i % 10 + '0';
5747       h = (struct ppc_link_hash_entry *)
5748         elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE);
5749       if (stub_sec != NULL)
5750         {
5751           if (h != NULL
5752               && h->elf.root.type == bfd_link_hash_defined
5753               && h->elf.root.u.def.section == htab->sfpr)
5754             {
5755               struct elf_link_hash_entry *s;
5756               char buf[32];
5757               sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
5758               s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
5759               if (s == NULL)
5760                 return FALSE;
5761               if (s->root.type == bfd_link_hash_new
5762                   || (s->root.type = bfd_link_hash_defined
5763                       && s->root.u.def.section == stub_sec))
5764                 {
5765                   s->root.type = bfd_link_hash_defined;
5766                   s->root.u.def.section = stub_sec;
5767                   s->root.u.def.value = (stub_sec->size - htab->sfpr->size
5768                                          + h->elf.root.u.def.value);
5769                   s->ref_regular = 1;
5770                   s->def_regular = 1;
5771                   s->ref_regular_nonweak = 1;
5772                   s->forced_local = 1;
5773                   s->non_elf = 0;
5774                   s->root.linker_def = 1;
5775                 }
5776             }
5777           continue;
5778         }
5779       if (h != NULL)
5780         {
5781           h->save_res = 1;
5782           if (!h->elf.def_regular)
5783             {
5784               h->elf.root.type = bfd_link_hash_defined;
5785               h->elf.root.u.def.section = htab->sfpr;
5786               h->elf.root.u.def.value = htab->sfpr->size;
5787               h->elf.type = STT_FUNC;
5788               h->elf.def_regular = 1;
5789               h->elf.non_elf = 0;
5790               _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
5791               writing = TRUE;
5792               if (htab->sfpr->contents == NULL)
5793                 {
5794                   htab->sfpr->contents
5795                     = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5796                   if (htab->sfpr->contents == NULL)
5797                     return FALSE;
5798                 }
5799             }
5800         }
5801       if (writing)
5802         {
5803           bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5804           if (i != parm->hi)
5805             p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5806           else
5807             p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5808           htab->sfpr->size = p - htab->sfpr->contents;
5809         }
5810     }
5811
5812   return TRUE;
5813 }
5814
5815 static bfd_byte *
5816 savegpr0 (bfd *abfd, bfd_byte *p, int r)
5817 {
5818   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5819   return p + 4;
5820 }
5821
5822 static bfd_byte *
5823 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5824 {
5825   p = savegpr0 (abfd, p, r);
5826   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5827   p = p + 4;
5828   bfd_put_32 (abfd, BLR, p);
5829   return p + 4;
5830 }
5831
5832 static bfd_byte *
5833 restgpr0 (bfd *abfd, bfd_byte *p, int r)
5834 {
5835   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5836   return p + 4;
5837 }
5838
5839 static bfd_byte *
5840 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5841 {
5842   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5843   p = p + 4;
5844   p = restgpr0 (abfd, p, r);
5845   bfd_put_32 (abfd, MTLR_R0, p);
5846   p = p + 4;
5847   if (r == 29)
5848     {
5849       p = restgpr0 (abfd, p, 30);
5850       p = restgpr0 (abfd, p, 31);
5851     }
5852   bfd_put_32 (abfd, BLR, p);
5853   return p + 4;
5854 }
5855
5856 static bfd_byte *
5857 savegpr1 (bfd *abfd, bfd_byte *p, int r)
5858 {
5859   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5860   return p + 4;
5861 }
5862
5863 static bfd_byte *
5864 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
5865 {
5866   p = savegpr1 (abfd, p, r);
5867   bfd_put_32 (abfd, BLR, p);
5868   return p + 4;
5869 }
5870
5871 static bfd_byte *
5872 restgpr1 (bfd *abfd, bfd_byte *p, int r)
5873 {
5874   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5875   return p + 4;
5876 }
5877
5878 static bfd_byte *
5879 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
5880 {
5881   p = restgpr1 (abfd, p, r);
5882   bfd_put_32 (abfd, BLR, p);
5883   return p + 4;
5884 }
5885
5886 static bfd_byte *
5887 savefpr (bfd *abfd, bfd_byte *p, int r)
5888 {
5889   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5890   return p + 4;
5891 }
5892
5893 static bfd_byte *
5894 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
5895 {
5896   p = savefpr (abfd, p, r);
5897   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5898   p = p + 4;
5899   bfd_put_32 (abfd, BLR, p);
5900   return p + 4;
5901 }
5902
5903 static bfd_byte *
5904 restfpr (bfd *abfd, bfd_byte *p, int r)
5905 {
5906   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5907   return p + 4;
5908 }
5909
5910 static bfd_byte *
5911 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
5912 {
5913   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5914   p = p + 4;
5915   p = restfpr (abfd, p, r);
5916   bfd_put_32 (abfd, MTLR_R0, p);
5917   p = p + 4;
5918   if (r == 29)
5919     {
5920       p = restfpr (abfd, p, 30);
5921       p = restfpr (abfd, p, 31);
5922     }
5923   bfd_put_32 (abfd, BLR, p);
5924   return p + 4;
5925 }
5926
5927 static bfd_byte *
5928 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
5929 {
5930   p = savefpr (abfd, p, r);
5931   bfd_put_32 (abfd, BLR, p);
5932   return p + 4;
5933 }
5934
5935 static bfd_byte *
5936 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
5937 {
5938   p = restfpr (abfd, p, r);
5939   bfd_put_32 (abfd, BLR, p);
5940   return p + 4;
5941 }
5942
5943 static bfd_byte *
5944 savevr (bfd *abfd, bfd_byte *p, int r)
5945 {
5946   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
5947   p = p + 4;
5948   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
5949   return p + 4;
5950 }
5951
5952 static bfd_byte *
5953 savevr_tail (bfd *abfd, bfd_byte *p, int r)
5954 {
5955   p = savevr (abfd, p, r);
5956   bfd_put_32 (abfd, BLR, p);
5957   return p + 4;
5958 }
5959
5960 static bfd_byte *
5961 restvr (bfd *abfd, bfd_byte *p, int r)
5962 {
5963   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
5964   p = p + 4;
5965   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
5966   return p + 4;
5967 }
5968
5969 static bfd_byte *
5970 restvr_tail (bfd *abfd, bfd_byte *p, int r)
5971 {
5972   p = restvr (abfd, p, r);
5973   bfd_put_32 (abfd, BLR, p);
5974   return p + 4;
5975 }
5976
5977 /* Called via elf_link_hash_traverse to transfer dynamic linking
5978    information on function code symbol entries to their corresponding
5979    function descriptor symbol entries.  */
5980
5981 static bfd_boolean
5982 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
5983 {
5984   struct bfd_link_info *info;
5985   struct ppc_link_hash_table *htab;
5986   struct ppc_link_hash_entry *fh;
5987   struct ppc_link_hash_entry *fdh;
5988   bfd_boolean force_local;
5989
5990   fh = (struct ppc_link_hash_entry *) h;
5991   if (fh->elf.root.type == bfd_link_hash_indirect)
5992     return TRUE;
5993
5994   if (!fh->is_func)
5995     return TRUE;
5996
5997   if (fh->elf.root.root.string[0] != '.'
5998       || fh->elf.root.root.string[1] == '\0')
5999     return TRUE;
6000
6001   info = inf;
6002   htab = ppc_hash_table (info);
6003   if (htab == NULL)
6004     return FALSE;
6005
6006   /* Find the corresponding function descriptor symbol.  */
6007   fdh = lookup_fdh (fh, htab);
6008
6009   /* Resolve undefined references to dot-symbols as the value
6010      in the function descriptor, if we have one in a regular object.
6011      This is to satisfy cases like ".quad .foo".  Calls to functions
6012      in dynamic objects are handled elsewhere.  */
6013   if ((fh->elf.root.type == bfd_link_hash_undefined
6014        || fh->elf.root.type == bfd_link_hash_undefweak)
6015       && (fdh->elf.root.type == bfd_link_hash_defined
6016           || fdh->elf.root.type == bfd_link_hash_defweak)
6017       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6018       && opd_entry_value (fdh->elf.root.u.def.section,
6019                           fdh->elf.root.u.def.value,
6020                           &fh->elf.root.u.def.section,
6021                           &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6022     {
6023       fh->elf.root.type = fdh->elf.root.type;
6024       fh->elf.forced_local = 1;
6025       fh->elf.def_regular = fdh->elf.def_regular;
6026       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6027     }
6028
6029   if (!fh->elf.dynamic)
6030     {
6031       struct plt_entry *ent;
6032
6033       for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6034         if (ent->plt.refcount > 0)
6035           break;
6036       if (ent == NULL)
6037         return TRUE;
6038     }
6039
6040   /* Create a descriptor as undefined if necessary.  */
6041   if (fdh == NULL
6042       && !bfd_link_executable (info)
6043       && (fh->elf.root.type == bfd_link_hash_undefined
6044           || fh->elf.root.type == bfd_link_hash_undefweak))
6045     {
6046       fdh = make_fdh (info, fh);
6047       if (fdh == NULL)
6048         return FALSE;
6049     }
6050
6051   /* We can't support overriding of symbols on a fake descriptor.  */
6052   if (fdh != NULL
6053       && fdh->fake
6054       && (fh->elf.root.type == bfd_link_hash_defined
6055           || fh->elf.root.type == bfd_link_hash_defweak))
6056     _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6057
6058   /* Transfer dynamic linking information to the function descriptor.  */
6059   if (fdh != NULL)
6060     {
6061       fdh->elf.ref_regular |= fh->elf.ref_regular;
6062       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6063       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6064       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6065       fdh->elf.dynamic |= fh->elf.dynamic;
6066       fdh->elf.needs_plt |= (fh->elf.needs_plt
6067                              || fh->elf.type == STT_FUNC
6068                              || fh->elf.type == STT_GNU_IFUNC);
6069       move_plt_plist (fh, fdh);
6070
6071       if (!fdh->elf.forced_local
6072           && fh->elf.dynindx != -1)
6073         if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6074           return FALSE;
6075     }
6076
6077   /* Now that the info is on the function descriptor, clear the
6078      function code sym info.  Any function code syms for which we
6079      don't have a definition in a regular file, we force local.
6080      This prevents a shared library from exporting syms that have
6081      been imported from another library.  Function code syms that
6082      are really in the library we must leave global to prevent the
6083      linker dragging in a definition from a static library.  */
6084   force_local = (!fh->elf.def_regular
6085                  || fdh == NULL
6086                  || !fdh->elf.def_regular
6087                  || fdh->elf.forced_local);
6088   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6089
6090   return TRUE;
6091 }
6092
6093 static const struct sfpr_def_parms save_res_funcs[] =
6094   {
6095     { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6096     { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6097     { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6098     { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6099     { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6100     { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6101     { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6102     { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6103     { "._savef", 14, 31, savefpr, savefpr1_tail },
6104     { "._restf", 14, 31, restfpr, restfpr1_tail },
6105     { "_savevr_", 20, 31, savevr, savevr_tail },
6106     { "_restvr_", 20, 31, restvr, restvr_tail }
6107   };
6108
6109 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6110    this hook to a) provide some gcc support functions, and b) transfer
6111    dynamic linking information gathered so far on function code symbol
6112    entries, to their corresponding function descriptor symbol entries.  */
6113
6114 static bfd_boolean
6115 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6116                             struct bfd_link_info *info)
6117 {
6118   struct ppc_link_hash_table *htab;
6119
6120   htab = ppc_hash_table (info);
6121   if (htab == NULL)
6122     return FALSE;
6123
6124   /* Provide any missing _save* and _rest* functions.  */
6125   if (htab->sfpr != NULL)
6126     {
6127       unsigned int i;
6128
6129       htab->sfpr->size = 0;
6130       for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
6131         if (!sfpr_define (info, &save_res_funcs[i], NULL))
6132           return FALSE;
6133       if (htab->sfpr->size == 0)
6134         htab->sfpr->flags |= SEC_EXCLUDE;
6135     }
6136
6137   if (bfd_link_relocatable (info))
6138     return TRUE;
6139
6140   if (htab->elf.hgot != NULL)
6141     {
6142       _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6143       /* Make .TOC. defined so as to prevent it being made dynamic.
6144          The wrong value here is fixed later in ppc64_elf_set_toc.  */
6145       if (!htab->elf.hgot->def_regular
6146           || htab->elf.hgot->root.type != bfd_link_hash_defined)
6147         {
6148           htab->elf.hgot->root.type = bfd_link_hash_defined;
6149           htab->elf.hgot->root.u.def.value = 0;
6150           htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
6151           htab->elf.hgot->def_regular = 1;
6152           htab->elf.hgot->root.linker_def = 1;
6153         }
6154       htab->elf.hgot->type = STT_OBJECT;
6155       htab->elf.hgot->other
6156         = (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
6157     }
6158
6159   if (htab->need_func_desc_adj)
6160     {
6161       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6162       htab->need_func_desc_adj = 0;
6163     }
6164
6165   return TRUE;
6166 }
6167
6168 /* Find dynamic relocs for H that apply to read-only sections.  */
6169
6170 static asection *
6171 readonly_dynrelocs (struct elf_link_hash_entry *h)
6172 {
6173   struct ppc_link_hash_entry *eh;
6174   struct elf_dyn_relocs *p;
6175
6176   eh = (struct ppc_link_hash_entry *) h;
6177   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6178     {
6179       asection *s = p->sec->output_section;
6180
6181       if (s != NULL && (s->flags & SEC_READONLY) != 0)
6182         return p->sec;
6183     }
6184   return NULL;
6185 }
6186
6187 /* Return true if we have dynamic relocs against H or any of its weak
6188    aliases, that apply to read-only sections.  Cannot be used after
6189    size_dynamic_sections.  */
6190
6191 static bfd_boolean
6192 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
6193 {
6194   struct ppc_link_hash_entry *eh;
6195
6196   eh = (struct ppc_link_hash_entry *) h;
6197   do
6198     {
6199       if (readonly_dynrelocs (&eh->elf))
6200         return TRUE;
6201       eh = (struct ppc_link_hash_entry *) eh->elf.u.alias;
6202     }
6203   while (eh != NULL && &eh->elf != h);
6204
6205   return FALSE;
6206 }
6207
6208 /* Return whether EH has pc-relative dynamic relocs.  */
6209
6210 static bfd_boolean
6211 pc_dynrelocs (struct ppc_link_hash_entry *eh)
6212 {
6213   struct elf_dyn_relocs *p;
6214
6215   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6216     if (p->pc_count != 0)
6217       return TRUE;
6218   return FALSE;
6219 }
6220
6221 /* Return true if a global entry stub will be created for H.  Valid
6222    for ELFv2 before plt entries have been allocated.  */
6223
6224 static bfd_boolean
6225 global_entry_stub (struct elf_link_hash_entry *h)
6226 {
6227   struct plt_entry *pent;
6228
6229   if (!h->pointer_equality_needed
6230       || h->def_regular)
6231     return FALSE;
6232
6233   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
6234     if (pent->plt.refcount > 0
6235         && pent->addend == 0)
6236       return TRUE;
6237
6238   return FALSE;
6239 }
6240
6241 /* Adjust a symbol defined by a dynamic object and referenced by a
6242    regular object.  The current definition is in some section of the
6243    dynamic object, but we're not including those sections.  We have to
6244    change the definition to something the rest of the link can
6245    understand.  */
6246
6247 static bfd_boolean
6248 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6249                                  struct elf_link_hash_entry *h)
6250 {
6251   struct ppc_link_hash_table *htab;
6252   asection *s, *srel;
6253
6254   htab = ppc_hash_table (info);
6255   if (htab == NULL)
6256     return FALSE;
6257
6258   /* Deal with function syms.  */
6259   if (h->type == STT_FUNC
6260       || h->type == STT_GNU_IFUNC
6261       || h->needs_plt)
6262     {
6263       bfd_boolean local = (((struct ppc_link_hash_entry *) h)->save_res
6264                            || SYMBOL_CALLS_LOCAL (info, h)
6265                            || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
6266       /* Discard dyn_relocs when non-pic if we've decided that a
6267          function symbol is local and not an ifunc.  We keep dynamic
6268          relocs for ifuncs when local rather than always emitting a
6269          plt call stub for them and defining the symbol on the call
6270          stub.  We can't do that for ELFv1 anyway (a function symbol
6271          is defined on a descriptor, not code) and it can be faster at
6272          run-time due to not needing to bounce through a stub.  The
6273          dyn_relocs for ifuncs will be applied even in a static
6274          executable.  */
6275       if (!bfd_link_pic (info)
6276           && h->type != STT_GNU_IFUNC
6277           && local)
6278         ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6279
6280       /* Clear procedure linkage table information for any symbol that
6281          won't need a .plt entry.  */
6282       struct plt_entry *ent;
6283       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6284         if (ent->plt.refcount > 0)
6285           break;
6286       if (ent == NULL
6287           || (h->type != STT_GNU_IFUNC
6288               && local
6289               && (htab->can_convert_all_inline_plt
6290                   || (((struct ppc_link_hash_entry *) h)->tls_mask
6291                       & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
6292         {
6293           h->plt.plist = NULL;
6294           h->needs_plt = 0;
6295           h->pointer_equality_needed = 0;
6296         }
6297       else if (abiversion (info->output_bfd) >= 2)
6298         {
6299           /* Taking a function's address in a read/write section
6300              doesn't require us to define the function symbol in the
6301              executable on a global entry stub.  A dynamic reloc can
6302              be used instead.  The reason we prefer a few more dynamic
6303              relocs is that calling via a global entry stub costs a
6304              few more instructions, and pointer_equality_needed causes
6305              extra work in ld.so when resolving these symbols.  */
6306           if (global_entry_stub (h))
6307             {
6308               if (!readonly_dynrelocs (h))
6309                 {
6310                   h->pointer_equality_needed = 0;
6311                   /* If we haven't seen a branch reloc and the symbol
6312                      isn't an ifunc then we don't need a plt entry.  */
6313                   if (!h->needs_plt)
6314                     h->plt.plist = NULL;
6315                 }
6316               else if (!bfd_link_pic (info))
6317                 /* We are going to be defining the function symbol on the
6318                    plt stub, so no dyn_relocs needed when non-pic.  */
6319                 ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6320             }
6321
6322           /* ELFv2 function symbols can't have copy relocs.  */
6323           return TRUE;
6324         }
6325       else if (!h->needs_plt
6326                && !readonly_dynrelocs (h))
6327         {
6328           /* If we haven't seen a branch reloc and the symbol isn't an
6329              ifunc then we don't need a plt entry.  */
6330           h->plt.plist = NULL;
6331           h->pointer_equality_needed = 0;
6332           return TRUE;
6333         }
6334     }
6335   else
6336     h->plt.plist = NULL;
6337
6338   /* If this is a weak symbol, and there is a real definition, the
6339      processor independent code will have arranged for us to see the
6340      real definition first, and we can just use the same value.  */
6341   if (h->is_weakalias)
6342     {
6343       struct elf_link_hash_entry *def = weakdef (h);
6344       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
6345       h->root.u.def.section = def->root.u.def.section;
6346       h->root.u.def.value = def->root.u.def.value;
6347       if (def->root.u.def.section == htab->elf.sdynbss
6348           || def->root.u.def.section == htab->elf.sdynrelro)
6349         ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6350       return TRUE;
6351     }
6352
6353   /* If we are creating a shared library, we must presume that the
6354      only references to the symbol are via the global offset table.
6355      For such cases we need not do anything here; the relocations will
6356      be handled correctly by relocate_section.  */
6357   if (bfd_link_pic (info))
6358     return TRUE;
6359
6360   /* If there are no references to this symbol that do not use the
6361      GOT, we don't need to generate a copy reloc.  */
6362   if (!h->non_got_ref)
6363     return TRUE;
6364
6365   /* Don't generate a copy reloc for symbols defined in the executable.  */
6366   if (!h->def_dynamic || !h->ref_regular || h->def_regular
6367
6368       /* If -z nocopyreloc was given, don't generate them either.  */
6369       || info->nocopyreloc
6370
6371       /* If we don't find any dynamic relocs in read-only sections, then
6372          we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6373       || (ELIMINATE_COPY_RELOCS && !alias_readonly_dynrelocs (h))
6374
6375       /* Protected variables do not work with .dynbss.  The copy in
6376          .dynbss won't be used by the shared library with the protected
6377          definition for the variable.  Text relocations are preferable
6378          to an incorrect program.  */
6379       || h->protected_def)
6380     return TRUE;
6381
6382   if (h->plt.plist != NULL)
6383     {
6384       /* We should never get here, but unfortunately there are versions
6385          of gcc out there that improperly (for this ABI) put initialized
6386          function pointers, vtable refs and suchlike in read-only
6387          sections.  Allow them to proceed, but warn that this might
6388          break at runtime.  */
6389       info->callbacks->einfo
6390         (_("%P: copy reloc against `%pT' requires lazy plt linking; "
6391            "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6392          h->root.root.string);
6393     }
6394
6395   /* This is a reference to a symbol defined by a dynamic object which
6396      is not a function.  */
6397
6398   /* We must allocate the symbol in our .dynbss section, which will
6399      become part of the .bss section of the executable.  There will be
6400      an entry for this symbol in the .dynsym section.  The dynamic
6401      object will contain position independent code, so all references
6402      from the dynamic object to this symbol will go through the global
6403      offset table.  The dynamic linker will use the .dynsym entry to
6404      determine the address it must put in the global offset table, so
6405      both the dynamic object and the regular object will refer to the
6406      same memory location for the variable.  */
6407   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
6408     {
6409       s = htab->elf.sdynrelro;
6410       srel = htab->elf.sreldynrelro;
6411     }
6412   else
6413     {
6414       s = htab->elf.sdynbss;
6415       srel = htab->elf.srelbss;
6416     }
6417   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6418     {
6419       /* We must generate a R_PPC64_COPY reloc to tell the dynamic
6420          linker to copy the initial value out of the dynamic object
6421          and into the runtime process image.  */
6422       srel->size += sizeof (Elf64_External_Rela);
6423       h->needs_copy = 1;
6424     }
6425
6426   /* We no longer want dyn_relocs.  */
6427   ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6428   return _bfd_elf_adjust_dynamic_copy (info, h, s);
6429 }
6430
6431 /* If given a function descriptor symbol, hide both the function code
6432    sym and the descriptor.  */
6433 static void
6434 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6435                        struct elf_link_hash_entry *h,
6436                        bfd_boolean force_local)
6437 {
6438   struct ppc_link_hash_entry *eh;
6439   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6440
6441   if (ppc_hash_table (info) == NULL)
6442     return;
6443
6444   eh = (struct ppc_link_hash_entry *) h;
6445   if (eh->is_func_descriptor)
6446     {
6447       struct ppc_link_hash_entry *fh = eh->oh;
6448
6449       if (fh == NULL)
6450         {
6451           const char *p, *q;
6452           struct elf_link_hash_table *htab = elf_hash_table (info);
6453           char save;
6454
6455           /* We aren't supposed to use alloca in BFD because on
6456              systems which do not have alloca the version in libiberty
6457              calls xmalloc, which might cause the program to crash
6458              when it runs out of memory.  This function doesn't have a
6459              return status, so there's no way to gracefully return an
6460              error.  So cheat.  We know that string[-1] can be safely
6461              accessed;  It's either a string in an ELF string table,
6462              or allocated in an objalloc structure.  */
6463
6464           p = eh->elf.root.root.string - 1;
6465           save = *p;
6466           *(char *) p = '.';
6467           fh = (struct ppc_link_hash_entry *)
6468             elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
6469           *(char *) p = save;
6470
6471           /* Unfortunately, if it so happens that the string we were
6472              looking for was allocated immediately before this string,
6473              then we overwrote the string terminator.  That's the only
6474              reason the lookup should fail.  */
6475           if (fh == NULL)
6476             {
6477               q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6478               while (q >= eh->elf.root.root.string && *q == *p)
6479                 --q, --p;
6480               if (q < eh->elf.root.root.string && *p == '.')
6481                 fh = (struct ppc_link_hash_entry *)
6482                   elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
6483             }
6484           if (fh != NULL)
6485             {
6486               eh->oh = fh;
6487               fh->oh = eh;
6488             }
6489         }
6490       if (fh != NULL)
6491         _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6492     }
6493 }
6494
6495 static bfd_boolean
6496 get_sym_h (struct elf_link_hash_entry **hp,
6497            Elf_Internal_Sym **symp,
6498            asection **symsecp,
6499            unsigned char **tls_maskp,
6500            Elf_Internal_Sym **locsymsp,
6501            unsigned long r_symndx,
6502            bfd *ibfd)
6503 {
6504   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6505
6506   if (r_symndx >= symtab_hdr->sh_info)
6507     {
6508       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6509       struct elf_link_hash_entry *h;
6510
6511       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6512       h = elf_follow_link (h);
6513
6514       if (hp != NULL)
6515         *hp = h;
6516
6517       if (symp != NULL)
6518         *symp = NULL;
6519
6520       if (symsecp != NULL)
6521         {
6522           asection *symsec = NULL;
6523           if (h->root.type == bfd_link_hash_defined
6524               || h->root.type == bfd_link_hash_defweak)
6525             symsec = h->root.u.def.section;
6526           *symsecp = symsec;
6527         }
6528
6529       if (tls_maskp != NULL)
6530         {
6531           struct ppc_link_hash_entry *eh;
6532
6533           eh = (struct ppc_link_hash_entry *) h;
6534           *tls_maskp = &eh->tls_mask;
6535         }
6536     }
6537   else
6538     {
6539       Elf_Internal_Sym *sym;
6540       Elf_Internal_Sym *locsyms = *locsymsp;
6541
6542       if (locsyms == NULL)
6543         {
6544           locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6545           if (locsyms == NULL)
6546             locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6547                                             symtab_hdr->sh_info,
6548                                             0, NULL, NULL, NULL);
6549           if (locsyms == NULL)
6550             return FALSE;
6551           *locsymsp = locsyms;
6552         }
6553       sym = locsyms + r_symndx;
6554
6555       if (hp != NULL)
6556         *hp = NULL;
6557
6558       if (symp != NULL)
6559         *symp = sym;
6560
6561       if (symsecp != NULL)
6562         *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6563
6564       if (tls_maskp != NULL)
6565         {
6566           struct got_entry **lgot_ents;
6567           unsigned char *tls_mask;
6568
6569           tls_mask = NULL;
6570           lgot_ents = elf_local_got_ents (ibfd);
6571           if (lgot_ents != NULL)
6572             {
6573               struct plt_entry **local_plt = (struct plt_entry **)
6574                 (lgot_ents + symtab_hdr->sh_info);
6575               unsigned char *lgot_masks = (unsigned char *)
6576                 (local_plt + symtab_hdr->sh_info);
6577               tls_mask = &lgot_masks[r_symndx];
6578             }
6579           *tls_maskp = tls_mask;
6580         }
6581     }
6582   return TRUE;
6583 }
6584
6585 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6586    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6587    type suitable for optimization, and 1 otherwise.  */
6588
6589 static int
6590 get_tls_mask (unsigned char **tls_maskp,
6591               unsigned long *toc_symndx,
6592               bfd_vma *toc_addend,
6593               Elf_Internal_Sym **locsymsp,
6594               const Elf_Internal_Rela *rel,
6595               bfd *ibfd)
6596 {
6597   unsigned long r_symndx;
6598   int next_r;
6599   struct elf_link_hash_entry *h;
6600   Elf_Internal_Sym *sym;
6601   asection *sec;
6602   bfd_vma off;
6603
6604   r_symndx = ELF64_R_SYM (rel->r_info);
6605   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6606     return 0;
6607
6608   if ((*tls_maskp != NULL
6609        && (**tls_maskp & TLS_TLS) != 0
6610        && **tls_maskp != (TLS_TLS | TLS_MARK))
6611       || sec == NULL
6612       || ppc64_elf_section_data (sec) == NULL
6613       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6614     return 1;
6615
6616   /* Look inside a TOC section too.  */
6617   if (h != NULL)
6618     {
6619       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6620       off = h->root.u.def.value;
6621     }
6622   else
6623     off = sym->st_value;
6624   off += rel->r_addend;
6625   BFD_ASSERT (off % 8 == 0);
6626   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6627   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6628   if (toc_symndx != NULL)
6629     *toc_symndx = r_symndx;
6630   if (toc_addend != NULL)
6631     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6632   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6633     return 0;
6634   if ((h == NULL || is_static_defined (h))
6635       && (next_r == -1 || next_r == -2))
6636     return 1 - next_r;
6637   return 1;
6638 }
6639
6640 /* Find (or create) an entry in the tocsave hash table.  */
6641
6642 static struct tocsave_entry *
6643 tocsave_find (struct ppc_link_hash_table *htab,
6644               enum insert_option insert,
6645               Elf_Internal_Sym **local_syms,
6646               const Elf_Internal_Rela *irela,
6647               bfd *ibfd)
6648 {
6649   unsigned long r_indx;
6650   struct elf_link_hash_entry *h;
6651   Elf_Internal_Sym *sym;
6652   struct tocsave_entry ent, *p;
6653   hashval_t hash;
6654   struct tocsave_entry **slot;
6655
6656   r_indx = ELF64_R_SYM (irela->r_info);
6657   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6658     return NULL;
6659   if (ent.sec == NULL || ent.sec->output_section == NULL)
6660     {
6661       _bfd_error_handler
6662         (_("%pB: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
6663       return NULL;
6664     }
6665
6666   if (h != NULL)
6667     ent.offset = h->root.u.def.value;
6668   else
6669     ent.offset = sym->st_value;
6670   ent.offset += irela->r_addend;
6671
6672   hash = tocsave_htab_hash (&ent);
6673   slot = ((struct tocsave_entry **)
6674           htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6675   if (slot == NULL)
6676     return NULL;
6677
6678   if (*slot == NULL)
6679     {
6680       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6681       if (p == NULL)
6682         return NULL;
6683       *p = ent;
6684       *slot = p;
6685     }
6686   return *slot;
6687 }
6688
6689 /* Adjust all global syms defined in opd sections.  In gcc generated
6690    code for the old ABI, these will already have been done.  */
6691
6692 static bfd_boolean
6693 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6694 {
6695   struct ppc_link_hash_entry *eh;
6696   asection *sym_sec;
6697   struct _opd_sec_data *opd;
6698
6699   if (h->root.type == bfd_link_hash_indirect)
6700     return TRUE;
6701
6702   if (h->root.type != bfd_link_hash_defined
6703       && h->root.type != bfd_link_hash_defweak)
6704     return TRUE;
6705
6706   eh = (struct ppc_link_hash_entry *) h;
6707   if (eh->adjust_done)
6708     return TRUE;
6709
6710   sym_sec = eh->elf.root.u.def.section;
6711   opd = get_opd_info (sym_sec);
6712   if (opd != NULL && opd->adjust != NULL)
6713     {
6714       long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
6715       if (adjust == -1)
6716         {
6717           /* This entry has been deleted.  */
6718           asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6719           if (dsec == NULL)
6720             {
6721               for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6722                 if (discarded_section (dsec))
6723                   {
6724                     ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6725                     break;
6726                   }
6727             }
6728           eh->elf.root.u.def.value = 0;
6729           eh->elf.root.u.def.section = dsec;
6730         }
6731       else
6732         eh->elf.root.u.def.value += adjust;
6733       eh->adjust_done = 1;
6734     }
6735   return TRUE;
6736 }
6737
6738 /* Handles decrementing dynamic reloc counts for the reloc specified by
6739    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
6740    have already been determined.  */
6741
6742 static bfd_boolean
6743 dec_dynrel_count (bfd_vma r_info,
6744                   asection *sec,
6745                   struct bfd_link_info *info,
6746                   Elf_Internal_Sym **local_syms,
6747                   struct elf_link_hash_entry *h,
6748                   Elf_Internal_Sym *sym)
6749 {
6750   enum elf_ppc64_reloc_type r_type;
6751   asection *sym_sec = NULL;
6752
6753   /* Can this reloc be dynamic?  This switch, and later tests here
6754      should be kept in sync with the code in check_relocs.  */
6755   r_type = ELF64_R_TYPE (r_info);
6756   switch (r_type)
6757     {
6758     default:
6759       return TRUE;
6760
6761     case R_PPC64_TPREL16:
6762     case R_PPC64_TPREL16_LO:
6763     case R_PPC64_TPREL16_HI:
6764     case R_PPC64_TPREL16_HA:
6765     case R_PPC64_TPREL16_DS:
6766     case R_PPC64_TPREL16_LO_DS:
6767     case R_PPC64_TPREL16_HIGH:
6768     case R_PPC64_TPREL16_HIGHA:
6769     case R_PPC64_TPREL16_HIGHER:
6770     case R_PPC64_TPREL16_HIGHERA:
6771     case R_PPC64_TPREL16_HIGHEST:
6772     case R_PPC64_TPREL16_HIGHESTA:
6773     case R_PPC64_TPREL64:
6774     case R_PPC64_DTPMOD64:
6775     case R_PPC64_DTPREL64:
6776     case R_PPC64_ADDR64:
6777     case R_PPC64_REL30:
6778     case R_PPC64_REL32:
6779     case R_PPC64_REL64:
6780     case R_PPC64_ADDR14:
6781     case R_PPC64_ADDR14_BRNTAKEN:
6782     case R_PPC64_ADDR14_BRTAKEN:
6783     case R_PPC64_ADDR16:
6784     case R_PPC64_ADDR16_DS:
6785     case R_PPC64_ADDR16_HA:
6786     case R_PPC64_ADDR16_HI:
6787     case R_PPC64_ADDR16_HIGH:
6788     case R_PPC64_ADDR16_HIGHA:
6789     case R_PPC64_ADDR16_HIGHER:
6790     case R_PPC64_ADDR16_HIGHERA:
6791     case R_PPC64_ADDR16_HIGHEST:
6792     case R_PPC64_ADDR16_HIGHESTA:
6793     case R_PPC64_ADDR16_LO:
6794     case R_PPC64_ADDR16_LO_DS:
6795     case R_PPC64_ADDR24:
6796     case R_PPC64_ADDR32:
6797     case R_PPC64_UADDR16:
6798     case R_PPC64_UADDR32:
6799     case R_PPC64_UADDR64:
6800     case R_PPC64_TOC:
6801     case R_PPC64_D34:
6802     case R_PPC64_D34_LO:
6803     case R_PPC64_D34_HI30:
6804     case R_PPC64_D34_HA30:
6805     case R_PPC64_ADDR16_HIGHER34:
6806     case R_PPC64_ADDR16_HIGHERA34:
6807     case R_PPC64_ADDR16_HIGHEST34:
6808     case R_PPC64_ADDR16_HIGHESTA34:
6809     case R_PPC64_D28:
6810       break;
6811     }
6812
6813   if (local_syms != NULL)
6814     {
6815       unsigned long r_symndx;
6816       bfd *ibfd = sec->owner;
6817
6818       r_symndx = ELF64_R_SYM (r_info);
6819       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
6820         return FALSE;
6821     }
6822
6823   if ((bfd_link_pic (info)
6824        && (must_be_dyn_reloc (info, r_type)
6825            || (h != NULL
6826                && (!SYMBOLIC_BIND (info, h)
6827                    || h->root.type == bfd_link_hash_defweak
6828                    || !h->def_regular))))
6829       || (ELIMINATE_COPY_RELOCS
6830           && !bfd_link_pic (info)
6831           && h != NULL
6832           && (h->root.type == bfd_link_hash_defweak
6833               || !h->def_regular)))
6834     ;
6835   else
6836     return TRUE;
6837
6838   if (h != NULL)
6839     {
6840       struct elf_dyn_relocs *p;
6841       struct elf_dyn_relocs **pp;
6842       pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
6843
6844       /* elf_gc_sweep may have already removed all dyn relocs associated
6845          with local syms for a given section.  Also, symbol flags are
6846          changed by elf_gc_sweep_symbol, confusing the test above.  Don't
6847          report a dynreloc miscount.  */
6848       if (*pp == NULL && info->gc_sections)
6849         return TRUE;
6850
6851       while ((p = *pp) != NULL)
6852         {
6853           if (p->sec == sec)
6854             {
6855               if (!must_be_dyn_reloc (info, r_type))
6856                 p->pc_count -= 1;
6857               p->count -= 1;
6858               if (p->count == 0)
6859                 *pp = p->next;
6860               return TRUE;
6861             }
6862           pp = &p->next;
6863         }
6864     }
6865   else
6866     {
6867       struct ppc_dyn_relocs *p;
6868       struct ppc_dyn_relocs **pp;
6869       void *vpp;
6870       bfd_boolean is_ifunc;
6871
6872       if (local_syms == NULL)
6873         sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
6874       if (sym_sec == NULL)
6875         sym_sec = sec;
6876
6877       vpp = &elf_section_data (sym_sec)->local_dynrel;
6878       pp = (struct ppc_dyn_relocs **) vpp;
6879
6880       if (*pp == NULL && info->gc_sections)
6881         return TRUE;
6882
6883       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
6884       while ((p = *pp) != NULL)
6885         {
6886           if (p->sec == sec && p->ifunc == is_ifunc)
6887             {
6888               p->count -= 1;
6889               if (p->count == 0)
6890                 *pp = p->next;
6891               return TRUE;
6892             }
6893           pp = &p->next;
6894         }
6895     }
6896
6897   /* xgettext:c-format */
6898   _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
6899                       sec->owner, sec);
6900   bfd_set_error (bfd_error_bad_value);
6901   return FALSE;
6902 }
6903
6904 /* Remove unused Official Procedure Descriptor entries.  Currently we
6905    only remove those associated with functions in discarded link-once
6906    sections, or weakly defined functions that have been overridden.  It
6907    would be possible to remove many more entries for statically linked
6908    applications.  */
6909
6910 bfd_boolean
6911 ppc64_elf_edit_opd (struct bfd_link_info *info)
6912 {
6913   bfd *ibfd;
6914   bfd_boolean some_edited = FALSE;
6915   asection *need_pad = NULL;
6916   struct ppc_link_hash_table *htab;
6917
6918   htab = ppc_hash_table (info);
6919   if (htab == NULL)
6920     return FALSE;
6921
6922   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
6923     {
6924       asection *sec;
6925       Elf_Internal_Rela *relstart, *rel, *relend;
6926       Elf_Internal_Shdr *symtab_hdr;
6927       Elf_Internal_Sym *local_syms;
6928       struct _opd_sec_data *opd;
6929       bfd_boolean need_edit, add_aux_fields, broken;
6930       bfd_size_type cnt_16b = 0;
6931
6932       if (!is_ppc64_elf (ibfd))
6933         continue;
6934
6935       sec = bfd_get_section_by_name (ibfd, ".opd");
6936       if (sec == NULL || sec->size == 0)
6937         continue;
6938
6939       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
6940         continue;
6941
6942       if (sec->output_section == bfd_abs_section_ptr)
6943         continue;
6944
6945       /* Look through the section relocs.  */
6946       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
6947         continue;
6948
6949       local_syms = NULL;
6950       symtab_hdr = &elf_symtab_hdr (ibfd);
6951
6952       /* Read the relocations.  */
6953       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
6954                                             info->keep_memory);
6955       if (relstart == NULL)
6956         return FALSE;
6957
6958       /* First run through the relocs to check they are sane, and to
6959          determine whether we need to edit this opd section.  */
6960       need_edit = FALSE;
6961       broken = FALSE;
6962       need_pad = sec;
6963       relend = relstart + sec->reloc_count;
6964       for (rel = relstart; rel < relend; )
6965         {
6966           enum elf_ppc64_reloc_type r_type;
6967           unsigned long r_symndx;
6968           asection *sym_sec;
6969           struct elf_link_hash_entry *h;
6970           Elf_Internal_Sym *sym;
6971           bfd_vma offset;
6972
6973           /* .opd contains an array of 16 or 24 byte entries.  We're
6974              only interested in the reloc pointing to a function entry
6975              point.  */
6976           offset = rel->r_offset;
6977           if (rel + 1 == relend
6978               || rel[1].r_offset != offset + 8)
6979             {
6980               /* If someone messes with .opd alignment then after a
6981                  "ld -r" we might have padding in the middle of .opd.
6982                  Also, there's nothing to prevent someone putting
6983                  something silly in .opd with the assembler.  No .opd
6984                  optimization for them!  */
6985             broken_opd:
6986               _bfd_error_handler
6987                 (_("%pB: .opd is not a regular array of opd entries"), ibfd);
6988               broken = TRUE;
6989               break;
6990             }
6991
6992           if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
6993               || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
6994             {
6995               _bfd_error_handler
6996                 /* xgettext:c-format */
6997                 (_("%pB: unexpected reloc type %u in .opd section"),
6998                  ibfd, r_type);
6999               broken = TRUE;
7000               break;
7001             }
7002
7003           r_symndx = ELF64_R_SYM (rel->r_info);
7004           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7005                           r_symndx, ibfd))
7006             goto error_ret;
7007
7008           if (sym_sec == NULL || sym_sec->owner == NULL)
7009             {
7010               const char *sym_name;
7011               if (h != NULL)
7012                 sym_name = h->root.root.string;
7013               else
7014                 sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7015                                              sym_sec);
7016
7017               _bfd_error_handler
7018                 /* xgettext:c-format */
7019                 (_("%pB: undefined sym `%s' in .opd section"),
7020                  ibfd, sym_name);
7021               broken = TRUE;
7022               break;
7023             }
7024
7025           /* opd entries are always for functions defined in the
7026              current input bfd.  If the symbol isn't defined in the
7027              input bfd, then we won't be using the function in this
7028              bfd;  It must be defined in a linkonce section in another
7029              bfd, or is weak.  It's also possible that we are
7030              discarding the function due to a linker script /DISCARD/,
7031              which we test for via the output_section.  */
7032           if (sym_sec->owner != ibfd
7033               || sym_sec->output_section == bfd_abs_section_ptr)
7034             need_edit = TRUE;
7035
7036           rel += 2;
7037           if (rel + 1 == relend
7038               || (rel + 2 < relend
7039                   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7040             ++rel;
7041
7042           if (rel == relend)
7043             {
7044               if (sec->size == offset + 24)
7045                 {
7046                   need_pad = NULL;
7047                   break;
7048                 }
7049               if (sec->size == offset + 16)
7050                 {
7051                   cnt_16b++;
7052                   break;
7053                 }
7054               goto broken_opd;
7055             }
7056           else if (rel + 1 < relend
7057                    && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7058                    && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7059             {
7060               if (rel[0].r_offset == offset + 16)
7061                 cnt_16b++;
7062               else if (rel[0].r_offset != offset + 24)
7063                 goto broken_opd;
7064             }
7065           else
7066             goto broken_opd;
7067         }
7068
7069       add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7070
7071       if (!broken && (need_edit || add_aux_fields))
7072         {
7073           Elf_Internal_Rela *write_rel;
7074           Elf_Internal_Shdr *rel_hdr;
7075           bfd_byte *rptr, *wptr;
7076           bfd_byte *new_contents;
7077           bfd_size_type amt;
7078
7079           new_contents = NULL;
7080           amt = OPD_NDX (sec->size) * sizeof (long);
7081           opd = &ppc64_elf_section_data (sec)->u.opd;
7082           opd->adjust = bfd_zalloc (sec->owner, amt);
7083           if (opd->adjust == NULL)
7084             return FALSE;
7085
7086           /* This seems a waste of time as input .opd sections are all
7087              zeros as generated by gcc, but I suppose there's no reason
7088              this will always be so.  We might start putting something in
7089              the third word of .opd entries.  */
7090           if ((sec->flags & SEC_IN_MEMORY) == 0)
7091             {
7092               bfd_byte *loc;
7093               if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7094                 {
7095                   if (loc != NULL)
7096                     free (loc);
7097                 error_ret:
7098                   if (local_syms != NULL
7099                       && symtab_hdr->contents != (unsigned char *) local_syms)
7100                     free (local_syms);
7101                   if (elf_section_data (sec)->relocs != relstart)
7102                     free (relstart);
7103                   return FALSE;
7104                 }
7105               sec->contents = loc;
7106               sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7107             }
7108
7109           elf_section_data (sec)->relocs = relstart;
7110
7111           new_contents = sec->contents;
7112           if (add_aux_fields)
7113             {
7114               new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7115               if (new_contents == NULL)
7116                 return FALSE;
7117               need_pad = NULL;
7118             }
7119           wptr = new_contents;
7120           rptr = sec->contents;
7121           write_rel = relstart;
7122           for (rel = relstart; rel < relend; )
7123             {
7124               unsigned long r_symndx;
7125               asection *sym_sec;
7126               struct elf_link_hash_entry *h;
7127               struct ppc_link_hash_entry *fdh = NULL;
7128               Elf_Internal_Sym *sym;
7129               long opd_ent_size;
7130               Elf_Internal_Rela *next_rel;
7131               bfd_boolean skip;
7132
7133               r_symndx = ELF64_R_SYM (rel->r_info);
7134               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7135                               r_symndx, ibfd))
7136                 goto error_ret;
7137
7138               next_rel = rel + 2;
7139               if (next_rel + 1 == relend
7140                   || (next_rel + 2 < relend
7141                       && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
7142                 ++next_rel;
7143
7144               /* See if the .opd entry is full 24 byte or
7145                  16 byte (with fd_aux entry overlapped with next
7146                  fd_func).  */
7147               opd_ent_size = 24;
7148               if (next_rel == relend)
7149                 {
7150                   if (sec->size == rel->r_offset + 16)
7151                     opd_ent_size = 16;
7152                 }
7153               else if (next_rel->r_offset == rel->r_offset + 16)
7154                 opd_ent_size = 16;
7155
7156               if (h != NULL
7157                   && h->root.root.string[0] == '.')
7158                 {
7159                   fdh = ((struct ppc_link_hash_entry *) h)->oh;
7160                   if (fdh != NULL)
7161                     {
7162                       fdh = ppc_follow_link (fdh);
7163                       if (fdh->elf.root.type != bfd_link_hash_defined
7164                           && fdh->elf.root.type != bfd_link_hash_defweak)
7165                         fdh = NULL;
7166                     }
7167                 }
7168
7169               skip = (sym_sec->owner != ibfd
7170                       || sym_sec->output_section == bfd_abs_section_ptr);
7171               if (skip)
7172                 {
7173                   if (fdh != NULL && sym_sec->owner == ibfd)
7174                     {
7175                       /* Arrange for the function descriptor sym
7176                          to be dropped.  */
7177                       fdh->elf.root.u.def.value = 0;
7178                       fdh->elf.root.u.def.section = sym_sec;
7179                     }
7180                   opd->adjust[OPD_NDX (rel->r_offset)] = -1;
7181
7182                   if (NO_OPD_RELOCS || bfd_link_relocatable (info))
7183                     rel = next_rel;
7184                   else
7185                     while (1)
7186                       {
7187                         if (!dec_dynrel_count (rel->r_info, sec, info,
7188                                                NULL, h, sym))
7189                           goto error_ret;
7190
7191                         if (++rel == next_rel)
7192                           break;
7193
7194                         r_symndx = ELF64_R_SYM (rel->r_info);
7195                         if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7196                                         r_symndx, ibfd))
7197                           goto error_ret;
7198                       }
7199                 }
7200               else
7201                 {
7202                   /* We'll be keeping this opd entry.  */
7203                   long adjust;
7204
7205                   if (fdh != NULL)
7206                     {
7207                       /* Redefine the function descriptor symbol to
7208                          this location in the opd section.  It is
7209                          necessary to update the value here rather
7210                          than using an array of adjustments as we do
7211                          for local symbols, because various places
7212                          in the generic ELF code use the value
7213                          stored in u.def.value.  */
7214                       fdh->elf.root.u.def.value = wptr - new_contents;
7215                       fdh->adjust_done = 1;
7216                     }
7217
7218                   /* Local syms are a bit tricky.  We could
7219                      tweak them as they can be cached, but
7220                      we'd need to look through the local syms
7221                      for the function descriptor sym which we
7222                      don't have at the moment.  So keep an
7223                      array of adjustments.  */
7224                   adjust = (wptr - new_contents) - (rptr - sec->contents);
7225                   opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
7226
7227                   if (wptr != rptr)
7228                     memcpy (wptr, rptr, opd_ent_size);
7229                   wptr += opd_ent_size;
7230                   if (add_aux_fields && opd_ent_size == 16)
7231                     {
7232                       memset (wptr, '\0', 8);
7233                       wptr += 8;
7234                     }
7235
7236                   /* We need to adjust any reloc offsets to point to the
7237                      new opd entries.  */
7238                   for ( ; rel != next_rel; ++rel)
7239                     {
7240                       rel->r_offset += adjust;
7241                       if (write_rel != rel)
7242                         memcpy (write_rel, rel, sizeof (*rel));
7243                       ++write_rel;
7244                     }
7245                 }
7246
7247               rptr += opd_ent_size;
7248             }
7249
7250           sec->size = wptr - new_contents;
7251           sec->reloc_count = write_rel - relstart;
7252           if (add_aux_fields)
7253             {
7254               free (sec->contents);
7255               sec->contents = new_contents;
7256             }
7257
7258           /* Fudge the header size too, as this is used later in
7259              elf_bfd_final_link if we are emitting relocs.  */
7260           rel_hdr = _bfd_elf_single_rel_hdr (sec);
7261           rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7262           some_edited = TRUE;
7263         }
7264       else if (elf_section_data (sec)->relocs != relstart)
7265         free (relstart);
7266
7267       if (local_syms != NULL
7268           && symtab_hdr->contents != (unsigned char *) local_syms)
7269         {
7270           if (!info->keep_memory)
7271             free (local_syms);
7272           else
7273             symtab_hdr->contents = (unsigned char *) local_syms;
7274         }
7275     }
7276
7277   if (some_edited)
7278     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7279
7280   /* If we are doing a final link and the last .opd entry is just 16 byte
7281      long, add a 8 byte padding after it.  */
7282   if (need_pad != NULL && !bfd_link_relocatable (info))
7283     {
7284       bfd_byte *p;
7285
7286       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7287         {
7288           BFD_ASSERT (need_pad->size > 0);
7289
7290           p = bfd_malloc (need_pad->size + 8);
7291           if (p == NULL)
7292             return FALSE;
7293
7294           if (!bfd_get_section_contents (need_pad->owner, need_pad,
7295                                          p, 0, need_pad->size))
7296             return FALSE;
7297
7298           need_pad->contents = p;
7299           need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7300         }
7301       else
7302         {
7303           p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7304           if (p == NULL)
7305             return FALSE;
7306
7307           need_pad->contents = p;
7308         }
7309
7310       memset (need_pad->contents + need_pad->size, 0, 8);
7311       need_pad->size += 8;
7312     }
7313
7314   return TRUE;
7315 }
7316
7317 /* Analyze inline PLT call relocations to see whether calls to locally
7318    defined functions can be converted to direct calls.  */
7319
7320 bfd_boolean
7321 ppc64_elf_inline_plt (struct bfd_link_info *info)
7322 {
7323   struct ppc_link_hash_table *htab;
7324   bfd *ibfd;
7325   asection *sec;
7326   bfd_vma low_vma, high_vma, limit;
7327
7328   htab = ppc_hash_table (info);
7329   if (htab == NULL)
7330     return FALSE;
7331
7332   /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
7333      reduced somewhat to cater for possible stubs that might be added
7334      between the call and its destination.  */
7335   if (htab->params->group_size < 0)
7336     {
7337       limit = -htab->params->group_size;
7338       if (limit == 1)
7339         limit = 0x1e00000;
7340     }
7341   else
7342     {
7343       limit = htab->params->group_size;
7344       if (limit == 1)
7345         limit = 0x1c00000;
7346     }
7347
7348   low_vma = -1;
7349   high_vma = 0;
7350   for (sec = info->output_bfd->sections; sec != NULL; sec = sec->next)
7351     if ((sec->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE))
7352       {
7353         if (low_vma > sec->vma)
7354           low_vma = sec->vma;
7355         if (high_vma < sec->vma + sec->size)
7356           high_vma = sec->vma + sec->size;
7357       }
7358
7359   /* If a "bl" can reach anywhere in local code sections, then we can
7360      convert all inline PLT sequences to direct calls when the symbol
7361      is local.  */
7362   if (high_vma - low_vma < limit)
7363     {
7364       htab->can_convert_all_inline_plt = 1;
7365       return TRUE;
7366     }
7367
7368   /* Otherwise, go looking through relocs for cases where a direct
7369      call won't reach.  Mark the symbol on any such reloc to disable
7370      the optimization and keep the PLT entry as it seems likely that
7371      this will be better than creating trampolines.  Note that this
7372      will disable the optimization for all inline PLT calls to a
7373      particular symbol, not just those that won't reach.  The
7374      difficulty in doing a more precise optimization is that the
7375      linker needs to make a decision depending on whether a
7376      particular R_PPC64_PLTCALL insn can be turned into a direct
7377      call, for each of the R_PPC64_PLTSEQ and R_PPC64_PLT16* insns in
7378      the sequence, and there is nothing that ties those relocs
7379      together except their symbol.  */
7380
7381   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7382     {
7383       Elf_Internal_Shdr *symtab_hdr;
7384       Elf_Internal_Sym *local_syms;
7385
7386       if (!is_ppc64_elf (ibfd))
7387         continue;
7388
7389       local_syms = NULL;
7390       symtab_hdr = &elf_symtab_hdr (ibfd);
7391
7392       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7393         if (ppc64_elf_section_data (sec)->has_pltcall
7394             && !bfd_is_abs_section (sec->output_section))
7395           {
7396             Elf_Internal_Rela *relstart, *rel, *relend;
7397
7398             /* Read the relocations.  */
7399             relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7400                                                   info->keep_memory);
7401             if (relstart == NULL)
7402               return FALSE;
7403
7404             relend = relstart + sec->reloc_count;
7405             for (rel = relstart; rel < relend; )
7406               {
7407                 enum elf_ppc64_reloc_type r_type;
7408                 unsigned long r_symndx;
7409                 asection *sym_sec;
7410                 struct elf_link_hash_entry *h;
7411                 Elf_Internal_Sym *sym;
7412                 unsigned char *tls_maskp;
7413
7414                 r_type = ELF64_R_TYPE (rel->r_info);
7415                 if (r_type != R_PPC64_PLTCALL
7416                     && r_type != R_PPC64_PLTCALL_NOTOC)
7417                   continue;
7418
7419                 r_symndx = ELF64_R_SYM (rel->r_info);
7420                 if (!get_sym_h (&h, &sym, &sym_sec, &tls_maskp, &local_syms,
7421                                 r_symndx, ibfd))
7422                   {
7423                     if (elf_section_data (sec)->relocs != relstart)
7424                       free (relstart);
7425                     if (local_syms != NULL
7426                         && symtab_hdr->contents != (bfd_byte *) local_syms)
7427                       free (local_syms);
7428                     return FALSE;
7429                   }
7430
7431                 if (sym_sec != NULL && sym_sec->output_section != NULL)
7432                   {
7433                     bfd_vma from, to;
7434                     if (h != NULL)
7435                       to = h->root.u.def.value;
7436                     else
7437                       to = sym->st_value;
7438                     to += (rel->r_addend
7439                            + sym_sec->output_offset
7440                            + sym_sec->output_section->vma);
7441                     from = (rel->r_offset
7442                             + sec->output_offset
7443                             + sec->output_section->vma);
7444                     if (to - from + limit < 2 * limit
7445                         && !(r_type == R_PPC64_PLTCALL_NOTOC
7446                              && (((h ? h->other : sym->st_other)
7447                                   & STO_PPC64_LOCAL_MASK)
7448                                  > 1 << STO_PPC64_LOCAL_BIT)))
7449                       *tls_maskp &= ~PLT_KEEP;
7450                   }
7451               }
7452             if (elf_section_data (sec)->relocs != relstart)
7453               free (relstart);
7454           }
7455
7456       if (local_syms != NULL
7457           && symtab_hdr->contents != (unsigned char *) local_syms)
7458         {
7459           if (!info->keep_memory)
7460             free (local_syms);
7461           else
7462             symtab_hdr->contents = (unsigned char *) local_syms;
7463         }
7464     }
7465
7466   return TRUE;
7467 }
7468
7469 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7470
7471 asection *
7472 ppc64_elf_tls_setup (struct bfd_link_info *info)
7473 {
7474   struct ppc_link_hash_table *htab;
7475
7476   htab = ppc_hash_table (info);
7477   if (htab == NULL)
7478     return NULL;
7479
7480   if (abiversion (info->output_bfd) == 1)
7481     htab->opd_abi = 1;
7482
7483   if (htab->params->no_multi_toc)
7484     htab->do_multi_toc = 0;
7485   else if (!htab->do_multi_toc)
7486     htab->params->no_multi_toc = 1;
7487
7488   /* Default to --no-plt-localentry, as this option can cause problems
7489      with symbol interposition.  For example, glibc libpthread.so and
7490      libc.so duplicate many pthread symbols, with a fallback
7491      implementation in libc.so.  In some cases the fallback does more
7492      work than the pthread implementation.  __pthread_condattr_destroy
7493      is one such symbol: the libpthread.so implementation is
7494      localentry:0 while the libc.so implementation is localentry:8.
7495      An app that "cleverly" uses dlopen to only load necessary
7496      libraries at runtime may omit loading libpthread.so when not
7497      running multi-threaded, which then results in the libc.so
7498      fallback symbols being used and ld.so complaining.  Now there
7499      are workarounds in ld (see non_zero_localentry) to detect the
7500      pthread situation, but that may not be the only case where
7501      --plt-localentry can cause trouble.  */
7502   if (htab->params->plt_localentry0 < 0)
7503     htab->params->plt_localentry0 = 0;
7504   if (htab->params->plt_localentry0
7505       && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
7506                                FALSE, FALSE, FALSE) == NULL)
7507     _bfd_error_handler
7508       (_("warning: --plt-localentry is especially dangerous without "
7509          "ld.so support to detect ABI violations"));
7510
7511   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7512                         elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7513                                               FALSE, FALSE, TRUE));
7514   /* Move dynamic linking info to the function descriptor sym.  */
7515   if (htab->tls_get_addr != NULL)
7516     func_desc_adjust (&htab->tls_get_addr->elf, info);
7517   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7518                            elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7519                                                  FALSE, FALSE, TRUE));
7520   if (htab->params->tls_get_addr_opt)
7521     {
7522       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7523
7524       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7525                                   FALSE, FALSE, TRUE);
7526       if (opt != NULL)
7527         func_desc_adjust (opt, info);
7528       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7529                                      FALSE, FALSE, TRUE);
7530       if (opt_fd != NULL
7531           && (opt_fd->root.type == bfd_link_hash_defined
7532               || opt_fd->root.type == bfd_link_hash_defweak))
7533         {
7534           /* If glibc supports an optimized __tls_get_addr call stub,
7535              signalled by the presence of __tls_get_addr_opt, and we'll
7536              be calling __tls_get_addr via a plt call stub, then
7537              make __tls_get_addr point to __tls_get_addr_opt.  */
7538           tga_fd = &htab->tls_get_addr_fd->elf;
7539           if (htab->elf.dynamic_sections_created
7540               && tga_fd != NULL
7541               && (tga_fd->type == STT_FUNC
7542                   || tga_fd->needs_plt)
7543               && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7544                    || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))
7545             {
7546               struct plt_entry *ent;
7547
7548               for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7549                 if (ent->plt.refcount > 0)
7550                   break;
7551               if (ent != NULL)
7552                 {
7553                   tga_fd->root.type = bfd_link_hash_indirect;
7554                   tga_fd->root.u.i.link = &opt_fd->root;
7555                   ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7556                   opt_fd->mark = 1;
7557                   if (opt_fd->dynindx != -1)
7558                     {
7559                       /* Use __tls_get_addr_opt in dynamic relocations.  */
7560                       opt_fd->dynindx = -1;
7561                       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7562                                               opt_fd->dynstr_index);
7563                       if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7564                         return NULL;
7565                     }
7566                   htab->tls_get_addr_fd
7567                     = (struct ppc_link_hash_entry *) opt_fd;
7568                   tga = &htab->tls_get_addr->elf;
7569                   if (opt != NULL && tga != NULL)
7570                     {
7571                       tga->root.type = bfd_link_hash_indirect;
7572                       tga->root.u.i.link = &opt->root;
7573                       ppc64_elf_copy_indirect_symbol (info, opt, tga);
7574                       opt->mark = 1;
7575                       _bfd_elf_link_hash_hide_symbol (info, opt,
7576                                                       tga->forced_local);
7577                       htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
7578                     }
7579                   htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7580                   htab->tls_get_addr_fd->is_func_descriptor = 1;
7581                   if (htab->tls_get_addr != NULL)
7582                     {
7583                       htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7584                       htab->tls_get_addr->is_func = 1;
7585                     }
7586                 }
7587             }
7588         }
7589       else if (htab->params->tls_get_addr_opt < 0)
7590         htab->params->tls_get_addr_opt = 0;
7591     }
7592   return _bfd_elf_tls_setup (info->output_bfd, info);
7593 }
7594
7595 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7596    HASH1 or HASH2.  */
7597
7598 static bfd_boolean
7599 branch_reloc_hash_match (const bfd *ibfd,
7600                          const Elf_Internal_Rela *rel,
7601                          const struct ppc_link_hash_entry *hash1,
7602                          const struct ppc_link_hash_entry *hash2)
7603 {
7604   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7605   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7606   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7607
7608   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7609     {
7610       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7611       struct elf_link_hash_entry *h;
7612
7613       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7614       h = elf_follow_link (h);
7615       if (h == &hash1->elf || h == &hash2->elf)
7616         return TRUE;
7617     }
7618   return FALSE;
7619 }
7620
7621 /* Run through all the TLS relocs looking for optimization
7622    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7623    a preliminary section layout so that we know the TLS segment
7624    offsets.  We can't optimize earlier because some optimizations need
7625    to know the tp offset, and we need to optimize before allocating
7626    dynamic relocations.  */
7627
7628 bfd_boolean
7629 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7630 {
7631   bfd *ibfd;
7632   asection *sec;
7633   struct ppc_link_hash_table *htab;
7634   unsigned char *toc_ref;
7635   int pass;
7636
7637   if (!bfd_link_executable (info))
7638     return TRUE;
7639
7640   htab = ppc_hash_table (info);
7641   if (htab == NULL)
7642     return FALSE;
7643
7644   /* Make two passes over the relocs.  On the first pass, mark toc
7645      entries involved with tls relocs, and check that tls relocs
7646      involved in setting up a tls_get_addr call are indeed followed by
7647      such a call.  If they are not, we can't do any tls optimization.
7648      On the second pass twiddle tls_mask flags to notify
7649      relocate_section that optimization can be done, and adjust got
7650      and plt refcounts.  */
7651   toc_ref = NULL;
7652   for (pass = 0; pass < 2; ++pass)
7653     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7654       {
7655         Elf_Internal_Sym *locsyms = NULL;
7656         asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7657
7658         for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7659           if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7660             {
7661               Elf_Internal_Rela *relstart, *rel, *relend;
7662               bfd_boolean found_tls_get_addr_arg = 0;
7663
7664               /* Read the relocations.  */
7665               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7666                                                     info->keep_memory);
7667               if (relstart == NULL)
7668                 {
7669                   free (toc_ref);
7670                   return FALSE;
7671                 }
7672
7673               relend = relstart + sec->reloc_count;
7674               for (rel = relstart; rel < relend; rel++)
7675                 {
7676                   enum elf_ppc64_reloc_type r_type;
7677                   unsigned long r_symndx;
7678                   struct elf_link_hash_entry *h;
7679                   Elf_Internal_Sym *sym;
7680                   asection *sym_sec;
7681                   unsigned char *tls_mask;
7682                   unsigned char tls_set, tls_clear, tls_type = 0;
7683                   bfd_vma value;
7684                   bfd_boolean ok_tprel, is_local;
7685                   long toc_ref_index = 0;
7686                   int expecting_tls_get_addr = 0;
7687                   bfd_boolean ret = FALSE;
7688
7689                   r_symndx = ELF64_R_SYM (rel->r_info);
7690                   if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7691                                   r_symndx, ibfd))
7692                     {
7693                     err_free_rel:
7694                       if (elf_section_data (sec)->relocs != relstart)
7695                         free (relstart);
7696                       if (toc_ref != NULL)
7697                         free (toc_ref);
7698                       if (locsyms != NULL
7699                           && (elf_symtab_hdr (ibfd).contents
7700                               != (unsigned char *) locsyms))
7701                         free (locsyms);
7702                       return ret;
7703                     }
7704
7705                   if (h != NULL)
7706                     {
7707                       if (h->root.type == bfd_link_hash_defined
7708                           || h->root.type == bfd_link_hash_defweak)
7709                         value = h->root.u.def.value;
7710                       else if (h->root.type == bfd_link_hash_undefweak)
7711                         value = 0;
7712                       else
7713                         {
7714                           found_tls_get_addr_arg = 0;
7715                           continue;
7716                         }
7717                     }
7718                   else
7719                     /* Symbols referenced by TLS relocs must be of type
7720                        STT_TLS.  So no need for .opd local sym adjust.  */
7721                     value = sym->st_value;
7722
7723                   ok_tprel = FALSE;
7724                   is_local = FALSE;
7725                   if (h == NULL
7726                       || !h->def_dynamic)
7727                     {
7728                       is_local = TRUE;
7729                       if (h != NULL
7730                           && h->root.type == bfd_link_hash_undefweak)
7731                         ok_tprel = TRUE;
7732                       else if (sym_sec != NULL
7733                                && sym_sec->output_section != NULL)
7734                         {
7735                           value += sym_sec->output_offset;
7736                           value += sym_sec->output_section->vma;
7737                           value -= htab->elf.tls_sec->vma + TP_OFFSET;
7738                           ok_tprel = value + 0x80008000ULL < 1ULL << 32;
7739                         }
7740                     }
7741
7742                   r_type = ELF64_R_TYPE (rel->r_info);
7743                   /* If this section has old-style __tls_get_addr calls
7744                      without marker relocs, then check that each
7745                      __tls_get_addr call reloc is preceded by a reloc
7746                      that conceivably belongs to the __tls_get_addr arg
7747                      setup insn.  If we don't find matching arg setup
7748                      relocs, don't do any tls optimization.  */
7749                   if (pass == 0
7750                       && sec->has_tls_get_addr_call
7751                       && h != NULL
7752                       && (h == &htab->tls_get_addr->elf
7753                           || h == &htab->tls_get_addr_fd->elf)
7754                       && !found_tls_get_addr_arg
7755                       && is_branch_reloc (r_type))
7756                     {
7757                       info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
7758                                                 "TLS optimization disabled\n"),
7759                                               ibfd, sec, rel->r_offset);
7760                       ret = TRUE;
7761                       goto err_free_rel;
7762                     }
7763
7764                   found_tls_get_addr_arg = 0;
7765                   switch (r_type)
7766                     {
7767                     case R_PPC64_GOT_TLSLD16:
7768                     case R_PPC64_GOT_TLSLD16_LO:
7769                       expecting_tls_get_addr = 1;
7770                       found_tls_get_addr_arg = 1;
7771                       /* Fall through.  */
7772
7773                     case R_PPC64_GOT_TLSLD16_HI:
7774                     case R_PPC64_GOT_TLSLD16_HA:
7775                       /* These relocs should never be against a symbol
7776                          defined in a shared lib.  Leave them alone if
7777                          that turns out to be the case.  */
7778                       if (!is_local)
7779                         continue;
7780
7781                       /* LD -> LE */
7782                       tls_set = 0;
7783                       tls_clear = TLS_LD;
7784                       tls_type = TLS_TLS | TLS_LD;
7785                       break;
7786
7787                     case R_PPC64_GOT_TLSGD16:
7788                     case R_PPC64_GOT_TLSGD16_LO:
7789                       expecting_tls_get_addr = 1;
7790                       found_tls_get_addr_arg = 1;
7791                       /* Fall through. */
7792
7793                     case R_PPC64_GOT_TLSGD16_HI:
7794                     case R_PPC64_GOT_TLSGD16_HA:
7795                       if (ok_tprel)
7796                         /* GD -> LE */
7797                         tls_set = 0;
7798                       else
7799                         /* GD -> IE */
7800                         tls_set = TLS_TLS | TLS_TPRELGD;
7801                       tls_clear = TLS_GD;
7802                       tls_type = TLS_TLS | TLS_GD;
7803                       break;
7804
7805                     case R_PPC64_GOT_TPREL16_DS:
7806                     case R_PPC64_GOT_TPREL16_LO_DS:
7807                     case R_PPC64_GOT_TPREL16_HI:
7808                     case R_PPC64_GOT_TPREL16_HA:
7809                       if (ok_tprel)
7810                         {
7811                           /* IE -> LE */
7812                           tls_set = 0;
7813                           tls_clear = TLS_TPREL;
7814                           tls_type = TLS_TLS | TLS_TPREL;
7815                           break;
7816                         }
7817                       continue;
7818
7819                     case R_PPC64_TLSGD:
7820                     case R_PPC64_TLSLD:
7821                       if (rel + 1 < relend
7822                           && is_plt_seq_reloc (ELF64_R_TYPE (rel[1].r_info)))
7823                         {
7824                           if (pass != 0
7825                               && (ELF64_R_TYPE (rel[1].r_info)
7826                                   != R_PPC64_PLTSEQ)
7827                               && (ELF64_R_TYPE (rel[1].r_info)
7828                                   != R_PPC64_PLTSEQ_NOTOC))
7829                             {
7830                               r_symndx = ELF64_R_SYM (rel[1].r_info);
7831                               if (!get_sym_h (&h, NULL, NULL, NULL, &locsyms,
7832                                               r_symndx, ibfd))
7833                                 goto err_free_rel;
7834                               if (h != NULL)
7835                                 {
7836                                   struct plt_entry *ent = NULL;
7837
7838                                   for (ent = h->plt.plist;
7839                                        ent != NULL;
7840                                        ent = ent->next)
7841                                     if (ent->addend == rel[1].r_addend)
7842                                       break;
7843
7844                                   if (ent != NULL
7845                                       && ent->plt.refcount > 0)
7846                                     ent->plt.refcount -= 1;
7847                                 }
7848                             }
7849                           continue;
7850                         }
7851                       found_tls_get_addr_arg = 1;
7852                       /* Fall through.  */
7853
7854                     case R_PPC64_TLS:
7855                     case R_PPC64_TOC16:
7856                     case R_PPC64_TOC16_LO:
7857                       if (sym_sec == NULL || sym_sec != toc)
7858                         continue;
7859
7860                       /* Mark this toc entry as referenced by a TLS
7861                          code sequence.  We can do that now in the
7862                          case of R_PPC64_TLS, and after checking for
7863                          tls_get_addr for the TOC16 relocs.  */
7864                       if (toc_ref == NULL)
7865                         toc_ref
7866                           = bfd_zmalloc (toc->output_section->rawsize / 8);
7867                       if (toc_ref == NULL)
7868                         goto err_free_rel;
7869
7870                       if (h != NULL)
7871                         value = h->root.u.def.value;
7872                       else
7873                         value = sym->st_value;
7874                       value += rel->r_addend;
7875                       if (value % 8 != 0)
7876                         continue;
7877                       BFD_ASSERT (value < toc->size
7878                                   && toc->output_offset % 8 == 0);
7879                       toc_ref_index = (value + toc->output_offset) / 8;
7880                       if (r_type == R_PPC64_TLS
7881                           || r_type == R_PPC64_TLSGD
7882                           || r_type == R_PPC64_TLSLD)
7883                         {
7884                           toc_ref[toc_ref_index] = 1;
7885                           continue;
7886                         }
7887
7888                       if (pass != 0 && toc_ref[toc_ref_index] == 0)
7889                         continue;
7890
7891                       tls_set = 0;
7892                       tls_clear = 0;
7893                       expecting_tls_get_addr = 2;
7894                       break;
7895
7896                     case R_PPC64_TPREL64:
7897                       if (pass == 0
7898                           || sec != toc
7899                           || toc_ref == NULL
7900                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7901                         continue;
7902                       if (ok_tprel)
7903                         {
7904                           /* IE -> LE */
7905                           tls_set = TLS_EXPLICIT;
7906                           tls_clear = TLS_TPREL;
7907                           break;
7908                         }
7909                       continue;
7910
7911                     case R_PPC64_DTPMOD64:
7912                       if (pass == 0
7913                           || sec != toc
7914                           || toc_ref == NULL
7915                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7916                         continue;
7917                       if (rel + 1 < relend
7918                           && (rel[1].r_info
7919                               == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
7920                           && rel[1].r_offset == rel->r_offset + 8)
7921                         {
7922                           if (ok_tprel)
7923                             /* GD -> LE */
7924                             tls_set = TLS_EXPLICIT | TLS_GD;
7925                           else
7926                             /* GD -> IE */
7927                             tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
7928                           tls_clear = TLS_GD;
7929                         }
7930                       else
7931                         {
7932                           if (!is_local)
7933                             continue;
7934
7935                           /* LD -> LE */
7936                           tls_set = TLS_EXPLICIT;
7937                           tls_clear = TLS_LD;
7938                         }
7939                       break;
7940
7941                     default:
7942                       continue;
7943                     }
7944
7945                   if (pass == 0)
7946                     {
7947                       if (!expecting_tls_get_addr
7948                           || !sec->has_tls_get_addr_call)
7949                         continue;
7950
7951                       if (rel + 1 < relend
7952                           && branch_reloc_hash_match (ibfd, rel + 1,
7953                                                       htab->tls_get_addr,
7954                                                       htab->tls_get_addr_fd))
7955                         {
7956                           if (expecting_tls_get_addr == 2)
7957                             {
7958                               /* Check for toc tls entries.  */
7959                               unsigned char *toc_tls;
7960                               int retval;
7961
7962                               retval = get_tls_mask (&toc_tls, NULL, NULL,
7963                                                      &locsyms,
7964                                                      rel, ibfd);
7965                               if (retval == 0)
7966                                 goto err_free_rel;
7967                               if (toc_tls != NULL)
7968                                 {
7969                                   if ((*toc_tls & TLS_TLS) != 0
7970                                       && ((*toc_tls & (TLS_GD | TLS_LD)) != 0))
7971                                     found_tls_get_addr_arg = 1;
7972                                   if (retval > 1)
7973                                     toc_ref[toc_ref_index] = 1;
7974                                 }
7975                             }
7976                           continue;
7977                         }
7978
7979                       /* Uh oh, we didn't find the expected call.  We
7980                          could just mark this symbol to exclude it
7981                          from tls optimization but it's safer to skip
7982                          the entire optimization.  */
7983                       /* xgettext:c-format */
7984                       info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
7985                                                 "TLS optimization disabled\n"),
7986                                               ibfd, sec, rel->r_offset);
7987                       ret = TRUE;
7988                       goto err_free_rel;
7989                     }
7990
7991                   /* If we don't have old-style __tls_get_addr calls
7992                      without TLSGD/TLSLD marker relocs, and we haven't
7993                      found a new-style __tls_get_addr call with a
7994                      marker for this symbol, then we either have a
7995                      broken object file or an -mlongcall style
7996                      indirect call to __tls_get_addr without a marker.
7997                      Disable optimization in this case.  */
7998                   if ((tls_clear & (TLS_GD | TLS_LD)) != 0
7999                       && (tls_set & TLS_EXPLICIT) == 0
8000                       && !sec->has_tls_get_addr_call
8001                       && ((*tls_mask & (TLS_TLS | TLS_MARK))
8002                           != (TLS_TLS | TLS_MARK)))
8003                     continue;
8004
8005                   if (expecting_tls_get_addr)
8006                     {
8007                       struct plt_entry *ent = NULL;
8008
8009                       if (htab->tls_get_addr != NULL)
8010                         for (ent = htab->tls_get_addr->elf.plt.plist;
8011                              ent != NULL;
8012                              ent = ent->next)
8013                           if (ent->addend == 0)
8014                             break;
8015
8016                       if (ent == NULL && htab->tls_get_addr_fd != NULL)
8017                         for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8018                              ent != NULL;
8019                              ent = ent->next)
8020                           if (ent->addend == 0)
8021                             break;
8022
8023                       if (ent != NULL
8024                           && ent->plt.refcount > 0)
8025                         ent->plt.refcount -= 1;
8026                     }
8027
8028                   if (tls_clear == 0)
8029                     continue;
8030
8031                   if ((tls_set & TLS_EXPLICIT) == 0)
8032                     {
8033                       struct got_entry *ent;
8034
8035                       /* Adjust got entry for this reloc.  */
8036                       if (h != NULL)
8037                         ent = h->got.glist;
8038                       else
8039                         ent = elf_local_got_ents (ibfd)[r_symndx];
8040
8041                       for (; ent != NULL; ent = ent->next)
8042                         if (ent->addend == rel->r_addend
8043                             && ent->owner == ibfd
8044                             && ent->tls_type == tls_type)
8045                           break;
8046                       if (ent == NULL)
8047                         abort ();
8048
8049                       if (tls_set == 0)
8050                         {
8051                           /* We managed to get rid of a got entry.  */
8052                           if (ent->got.refcount > 0)
8053                             ent->got.refcount -= 1;
8054                         }
8055                     }
8056                   else
8057                     {
8058                       /* If we got rid of a DTPMOD/DTPREL reloc pair then
8059                          we'll lose one or two dyn relocs.  */
8060                       if (!dec_dynrel_count (rel->r_info, sec, info,
8061                                              NULL, h, sym))
8062                         return FALSE;
8063
8064                       if (tls_set == (TLS_EXPLICIT | TLS_GD))
8065                         {
8066                           if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8067                                                  NULL, h, sym))
8068                             return FALSE;
8069                         }
8070                     }
8071
8072                   *tls_mask |= tls_set;
8073                   *tls_mask &= ~tls_clear;
8074                 }
8075
8076               if (elf_section_data (sec)->relocs != relstart)
8077                 free (relstart);
8078             }
8079
8080         if (locsyms != NULL
8081             && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8082           {
8083             if (!info->keep_memory)
8084               free (locsyms);
8085             else
8086               elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8087           }
8088       }
8089
8090   if (toc_ref != NULL)
8091     free (toc_ref);
8092   htab->do_tls_opt = 1;
8093   return TRUE;
8094 }
8095
8096 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8097    the values of any global symbols in a toc section that has been
8098    edited.  Globals in toc sections should be a rarity, so this function
8099    sets a flag if any are found in toc sections other than the one just
8100    edited, so that further hash table traversals can be avoided.  */
8101
8102 struct adjust_toc_info
8103 {
8104   asection *toc;
8105   unsigned long *skip;
8106   bfd_boolean global_toc_syms;
8107 };
8108
8109 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8110
8111 static bfd_boolean
8112 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8113 {
8114   struct ppc_link_hash_entry *eh;
8115   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8116   unsigned long i;
8117
8118   if (h->root.type != bfd_link_hash_defined
8119       && h->root.type != bfd_link_hash_defweak)
8120     return TRUE;
8121
8122   eh = (struct ppc_link_hash_entry *) h;
8123   if (eh->adjust_done)
8124     return TRUE;
8125
8126   if (eh->elf.root.u.def.section == toc_inf->toc)
8127     {
8128       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8129         i = toc_inf->toc->rawsize >> 3;
8130       else
8131         i = eh->elf.root.u.def.value >> 3;
8132
8133       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8134         {
8135           _bfd_error_handler
8136             (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8137           do
8138             ++i;
8139           while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8140           eh->elf.root.u.def.value = (bfd_vma) i << 3;
8141         }
8142
8143       eh->elf.root.u.def.value -= toc_inf->skip[i];
8144       eh->adjust_done = 1;
8145     }
8146   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8147     toc_inf->global_toc_syms = TRUE;
8148
8149   return TRUE;
8150 }
8151
8152 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8153    on a _LO variety toc/got reloc.  */
8154
8155 static bfd_boolean
8156 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8157 {
8158   return ((insn & (0x3f << 26)) == 12u << 26 /* addic */
8159           || (insn & (0x3f << 26)) == 14u << 26 /* addi */
8160           || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
8161           || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
8162           || (insn & (0x3f << 26)) == 36u << 26 /* stw */
8163           || (insn & (0x3f << 26)) == 38u << 26 /* stb */
8164           || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
8165           || (insn & (0x3f << 26)) == 42u << 26 /* lha */
8166           || (insn & (0x3f << 26)) == 44u << 26 /* sth */
8167           || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
8168           || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
8169           || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
8170           || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
8171           || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
8172           || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
8173           || (insn & (0x3f << 26)) == 56u << 26 /* lq,lfq */
8174           || ((insn & (0x3f << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8175               /* Exclude lfqu by testing reloc.  If relocs are ever
8176                  defined for the reduced D field in psq_lu then those
8177                  will need testing too.  */
8178               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8179           || ((insn & (0x3f << 26)) == 58u << 26 /* ld,lwa */
8180               && (insn & 1) == 0)
8181           || (insn & (0x3f << 26)) == 60u << 26 /* stfq */
8182           || ((insn & (0x3f << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8183               /* Exclude stfqu.  psq_stu as above for psq_lu.  */
8184               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8185           || ((insn & (0x3f << 26)) == 62u << 26 /* std,stq */
8186               && (insn & 1) == 0));
8187 }
8188
8189 /* PCREL_OPT in one instance flags to the linker that a pair of insns:
8190      pld ra,symbol@got@pcrel
8191      load/store rt,0(ra)
8192    or
8193      pla ra,symbol@pcrel
8194      load/store rt,0(ra)
8195    may be translated to
8196      pload/pstore rt,symbol@pcrel
8197      nop.
8198    This function returns true if the optimization is possible, placing
8199    the prefix insn in *PINSN1 and a NOP in *PINSN2.
8200
8201    On entry to this function, the linker has already determined that
8202    the pld can be replaced with pla: *PINSN1 is that pla insn,
8203    while *PINSN2 is the second instruction.  */
8204
8205 static bfd_boolean
8206 xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2)
8207 {
8208   uint32_t insn2 = *pinsn2 >> 32;
8209   uint64_t i1new;
8210
8211   /* Check that regs match.  */
8212   if (((insn2 >> 16) & 31) != ((*pinsn1 >> 21) & 31))
8213     return FALSE;
8214
8215   switch ((insn2 >> 26) & 63)
8216     {
8217     default:
8218       return FALSE;
8219
8220     case 32: /* lwz */
8221     case 34: /* lbz */
8222     case 36: /* stw */
8223     case 38: /* stb */
8224     case 40: /* lhz */
8225     case 42: /* lha */
8226     case 44: /* sth */
8227     case 48: /* lfs */
8228     case 50: /* lfd */
8229     case 52: /* stfs */
8230     case 54: /* stfd */
8231       /* These are the PMLS cases, where we just need to tack a prefix
8232          on the insn.  Check that the D field is zero.  */
8233       if ((insn2 & 0xffff) != 0)
8234         return FALSE;
8235       i1new = ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
8236                | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8237       break;
8238
8239     case 58: /* lwa, ld */
8240       if ((insn2 & 0xfffd) != 0)
8241         return FALSE;
8242       i1new = ((1ULL << 58) | (1ULL << 52)
8243                | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
8244                | (insn2 & (31ULL << 21)));
8245       break;
8246
8247     case 57: /* lxsd, lxssp */
8248       if ((insn2 & 0xfffc) != 0 || (insn2 & 3) < 2)
8249         return FALSE;
8250       i1new = ((1ULL << 58) | (1ULL << 52)
8251                | ((40ULL | (insn2 & 3)) << 26)
8252                | (insn2 & (31ULL << 21)));
8253       break;
8254
8255     case 61: /* stxsd, stxssp, lxv, stxv  */
8256       if ((insn2 & 3) == 0)
8257         return FALSE;
8258       else if ((insn2 & 3) >= 2)
8259         {
8260           if ((insn2 & 0xfffc) != 0)
8261             return FALSE;
8262           i1new = ((1ULL << 58) | (1ULL << 52)
8263                    | ((44ULL | (insn2 & 3)) << 26)
8264                    | (insn2 & (31ULL << 21)));
8265         }
8266       else
8267         {
8268           if ((insn2 & 0xfff0) != 0)
8269             return FALSE;
8270           i1new = ((1ULL << 58) | (1ULL << 52)
8271                    | ((50ULL | (insn2 & 4) | ((insn2 & 8) >> 3)) << 26)
8272                    | (insn2 & (31ULL << 21)));
8273         }
8274       break;
8275
8276     case 56: /* lq */
8277       if ((insn2 & 0xffff) != 0)
8278         return FALSE;
8279       i1new = ((1ULL << 58) | (1ULL << 52)
8280                | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8281       break;
8282
8283     case 62: /* std, stq */
8284       if ((insn2 & 0xfffd) != 0)
8285         return FALSE;
8286       i1new = ((1ULL << 58) | (1ULL << 52)
8287                | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
8288                | (insn2 & (31ULL << 21)));
8289       break;
8290     }
8291
8292   *pinsn1 = i1new;
8293   *pinsn2 = (uint64_t) NOP << 32;
8294   return TRUE;
8295 }
8296
8297 /* Examine all relocs referencing .toc sections in order to remove
8298    unused .toc entries.  */
8299
8300 bfd_boolean
8301 ppc64_elf_edit_toc (struct bfd_link_info *info)
8302 {
8303   bfd *ibfd;
8304   struct adjust_toc_info toc_inf;
8305   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8306
8307   htab->do_toc_opt = 1;
8308   toc_inf.global_toc_syms = TRUE;
8309   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8310     {
8311       asection *toc, *sec;
8312       Elf_Internal_Shdr *symtab_hdr;
8313       Elf_Internal_Sym *local_syms;
8314       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8315       unsigned long *skip, *drop;
8316       unsigned char *used;
8317       unsigned char *keep, last, some_unused;
8318
8319       if (!is_ppc64_elf (ibfd))
8320         continue;
8321
8322       toc = bfd_get_section_by_name (ibfd, ".toc");
8323       if (toc == NULL
8324           || toc->size == 0
8325           || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8326           || discarded_section (toc))
8327         continue;
8328
8329       toc_relocs = NULL;
8330       local_syms = NULL;
8331       symtab_hdr = &elf_symtab_hdr (ibfd);
8332
8333       /* Look at sections dropped from the final link.  */
8334       skip = NULL;
8335       relstart = NULL;
8336       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8337         {
8338           if (sec->reloc_count == 0
8339               || !discarded_section (sec)
8340               || get_opd_info (sec)
8341               || (sec->flags & SEC_ALLOC) == 0
8342               || (sec->flags & SEC_DEBUGGING) != 0)
8343             continue;
8344
8345           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8346           if (relstart == NULL)
8347             goto error_ret;
8348
8349           /* Run through the relocs to see which toc entries might be
8350              unused.  */
8351           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8352             {
8353               enum elf_ppc64_reloc_type r_type;
8354               unsigned long r_symndx;
8355               asection *sym_sec;
8356               struct elf_link_hash_entry *h;
8357               Elf_Internal_Sym *sym;
8358               bfd_vma val;
8359
8360               r_type = ELF64_R_TYPE (rel->r_info);
8361               switch (r_type)
8362                 {
8363                 default:
8364                   continue;
8365
8366                 case R_PPC64_TOC16:
8367                 case R_PPC64_TOC16_LO:
8368                 case R_PPC64_TOC16_HI:
8369                 case R_PPC64_TOC16_HA:
8370                 case R_PPC64_TOC16_DS:
8371                 case R_PPC64_TOC16_LO_DS:
8372                   break;
8373                 }
8374
8375               r_symndx = ELF64_R_SYM (rel->r_info);
8376               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8377                               r_symndx, ibfd))
8378                 goto error_ret;
8379
8380               if (sym_sec != toc)
8381                 continue;
8382
8383               if (h != NULL)
8384                 val = h->root.u.def.value;
8385               else
8386                 val = sym->st_value;
8387               val += rel->r_addend;
8388
8389               if (val >= toc->size)
8390                 continue;
8391
8392               /* Anything in the toc ought to be aligned to 8 bytes.
8393                  If not, don't mark as unused.  */
8394               if (val & 7)
8395                 continue;
8396
8397               if (skip == NULL)
8398                 {
8399                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8400                   if (skip == NULL)
8401                     goto error_ret;
8402                 }
8403
8404               skip[val >> 3] = ref_from_discarded;
8405             }
8406
8407           if (elf_section_data (sec)->relocs != relstart)
8408             free (relstart);
8409         }
8410
8411       /* For largetoc loads of address constants, we can convert
8412          .  addis rx,2,addr@got@ha
8413          .  ld ry,addr@got@l(rx)
8414          to
8415          .  addis rx,2,addr@toc@ha
8416          .  addi ry,rx,addr@toc@l
8417          when addr is within 2G of the toc pointer.  This then means
8418          that the word storing "addr" in the toc is no longer needed.  */
8419
8420       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8421           && toc->output_section->rawsize < (bfd_vma) 1 << 31
8422           && toc->reloc_count != 0)
8423         {
8424           /* Read toc relocs.  */
8425           toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8426                                                   info->keep_memory);
8427           if (toc_relocs == NULL)
8428             goto error_ret;
8429
8430           for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8431             {
8432               enum elf_ppc64_reloc_type r_type;
8433               unsigned long r_symndx;
8434               asection *sym_sec;
8435               struct elf_link_hash_entry *h;
8436               Elf_Internal_Sym *sym;
8437               bfd_vma val, addr;
8438
8439               r_type = ELF64_R_TYPE (rel->r_info);
8440               if (r_type != R_PPC64_ADDR64)
8441                 continue;
8442
8443               r_symndx = ELF64_R_SYM (rel->r_info);
8444               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8445                               r_symndx, ibfd))
8446                 goto error_ret;
8447
8448               if (sym_sec == NULL
8449                   || sym_sec->output_section == NULL
8450                   || discarded_section (sym_sec))
8451                 continue;
8452
8453               if (!SYMBOL_REFERENCES_LOCAL (info, h))
8454                 continue;
8455
8456               if (h != NULL)
8457                 {
8458                   if (h->type == STT_GNU_IFUNC)
8459                     continue;
8460                   val = h->root.u.def.value;
8461                 }
8462               else
8463                 {
8464                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8465                     continue;
8466                   val = sym->st_value;
8467                 }
8468               val += rel->r_addend;
8469               val += sym_sec->output_section->vma + sym_sec->output_offset;
8470
8471               /* We don't yet know the exact toc pointer value, but we
8472                  know it will be somewhere in the toc section.  Don't
8473                  optimize if the difference from any possible toc
8474                  pointer is outside [ff..f80008000, 7fff7fff].  */
8475               addr = toc->output_section->vma + TOC_BASE_OFF;
8476               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8477                 continue;
8478
8479               addr = toc->output_section->vma + toc->output_section->rawsize;
8480               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8481                 continue;
8482
8483               if (skip == NULL)
8484                 {
8485                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8486                   if (skip == NULL)
8487                     goto error_ret;
8488                 }
8489
8490               skip[rel->r_offset >> 3]
8491                 |= can_optimize | ((rel - toc_relocs) << 2);
8492             }
8493         }
8494
8495       if (skip == NULL)
8496         continue;
8497
8498       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8499       if (used == NULL)
8500         {
8501         error_ret:
8502           if (local_syms != NULL
8503               && symtab_hdr->contents != (unsigned char *) local_syms)
8504             free (local_syms);
8505           if (sec != NULL
8506               && relstart != NULL
8507               && elf_section_data (sec)->relocs != relstart)
8508             free (relstart);
8509           if (toc_relocs != NULL
8510               && elf_section_data (toc)->relocs != toc_relocs)
8511             free (toc_relocs);
8512           if (skip != NULL)
8513             free (skip);
8514           return FALSE;
8515         }
8516
8517       /* Now check all kept sections that might reference the toc.
8518          Check the toc itself last.  */
8519       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8520                   : ibfd->sections);
8521            sec != NULL;
8522            sec = (sec == toc ? NULL
8523                   : sec->next == NULL ? toc
8524                   : sec->next == toc && toc->next ? toc->next
8525                   : sec->next))
8526         {
8527           int repeat;
8528
8529           if (sec->reloc_count == 0
8530               || discarded_section (sec)
8531               || get_opd_info (sec)
8532               || (sec->flags & SEC_ALLOC) == 0
8533               || (sec->flags & SEC_DEBUGGING) != 0)
8534             continue;
8535
8536           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8537                                                 info->keep_memory);
8538           if (relstart == NULL)
8539             {
8540               free (used);
8541               goto error_ret;
8542             }
8543
8544           /* Mark toc entries referenced as used.  */
8545           do
8546             {
8547               repeat = 0;
8548               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8549                 {
8550                   enum elf_ppc64_reloc_type r_type;
8551                   unsigned long r_symndx;
8552                   asection *sym_sec;
8553                   struct elf_link_hash_entry *h;
8554                   Elf_Internal_Sym *sym;
8555                   bfd_vma val;
8556                   enum {no_check, check_lo, check_ha} insn_check;
8557
8558                   r_type = ELF64_R_TYPE (rel->r_info);
8559                   switch (r_type)
8560                     {
8561                     default:
8562                       insn_check = no_check;
8563                       break;
8564
8565                     case R_PPC64_GOT_TLSLD16_HA:
8566                     case R_PPC64_GOT_TLSGD16_HA:
8567                     case R_PPC64_GOT_TPREL16_HA:
8568                     case R_PPC64_GOT_DTPREL16_HA:
8569                     case R_PPC64_GOT16_HA:
8570                     case R_PPC64_TOC16_HA:
8571                       insn_check = check_ha;
8572                       break;
8573
8574                     case R_PPC64_GOT_TLSLD16_LO:
8575                     case R_PPC64_GOT_TLSGD16_LO:
8576                     case R_PPC64_GOT_TPREL16_LO_DS:
8577                     case R_PPC64_GOT_DTPREL16_LO_DS:
8578                     case R_PPC64_GOT16_LO:
8579                     case R_PPC64_GOT16_LO_DS:
8580                     case R_PPC64_TOC16_LO:
8581                     case R_PPC64_TOC16_LO_DS:
8582                       insn_check = check_lo;
8583                       break;
8584                     }
8585
8586                   if (insn_check != no_check)
8587                     {
8588                       bfd_vma off = rel->r_offset & ~3;
8589                       unsigned char buf[4];
8590                       unsigned int insn;
8591
8592                       if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
8593                         {
8594                           free (used);
8595                           goto error_ret;
8596                         }
8597                       insn = bfd_get_32 (ibfd, buf);
8598                       if (insn_check == check_lo
8599                           ? !ok_lo_toc_insn (insn, r_type)
8600                           : ((insn & ((0x3f << 26) | 0x1f << 16))
8601                              != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
8602                         {
8603                           char str[12];
8604
8605                           ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
8606                           sprintf (str, "%#08x", insn);
8607                           info->callbacks->einfo
8608                             /* xgettext:c-format */
8609                             (_("%H: toc optimization is not supported for"
8610                                " %s instruction\n"),
8611                              ibfd, sec, rel->r_offset & ~3, str);
8612                         }
8613                     }
8614
8615                   switch (r_type)
8616                     {
8617                     case R_PPC64_TOC16:
8618                     case R_PPC64_TOC16_LO:
8619                     case R_PPC64_TOC16_HI:
8620                     case R_PPC64_TOC16_HA:
8621                     case R_PPC64_TOC16_DS:
8622                     case R_PPC64_TOC16_LO_DS:
8623                       /* In case we're taking addresses of toc entries.  */
8624                     case R_PPC64_ADDR64:
8625                       break;
8626
8627                     default:
8628                       continue;
8629                     }
8630
8631                   r_symndx = ELF64_R_SYM (rel->r_info);
8632                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8633                                   r_symndx, ibfd))
8634                     {
8635                       free (used);
8636                       goto error_ret;
8637                     }
8638
8639                   if (sym_sec != toc)
8640                     continue;
8641
8642                   if (h != NULL)
8643                     val = h->root.u.def.value;
8644                   else
8645                     val = sym->st_value;
8646                   val += rel->r_addend;
8647
8648                   if (val >= toc->size)
8649                     continue;
8650
8651                   if ((skip[val >> 3] & can_optimize) != 0)
8652                     {
8653                       bfd_vma off;
8654                       unsigned char opc;
8655
8656                       switch (r_type)
8657                         {
8658                         case R_PPC64_TOC16_HA:
8659                           break;
8660
8661                         case R_PPC64_TOC16_LO_DS:
8662                           off = rel->r_offset;
8663                           off += (bfd_big_endian (ibfd) ? -2 : 3);
8664                           if (!bfd_get_section_contents (ibfd, sec, &opc,
8665                                                          off, 1))
8666                             {
8667                               free (used);
8668                               goto error_ret;
8669                             }
8670                           if ((opc & (0x3f << 2)) == (58u << 2))
8671                             break;
8672                           /* Fall through.  */
8673
8674                         default:
8675                           /* Wrong sort of reloc, or not a ld.  We may
8676                              as well clear ref_from_discarded too.  */
8677                           skip[val >> 3] = 0;
8678                         }
8679                     }
8680
8681                   if (sec != toc)
8682                     used[val >> 3] = 1;
8683                   /* For the toc section, we only mark as used if this
8684                      entry itself isn't unused.  */
8685                   else if ((used[rel->r_offset >> 3]
8686                             || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8687                            && !used[val >> 3])
8688                     {
8689                       /* Do all the relocs again, to catch reference
8690                          chains.  */
8691                       repeat = 1;
8692                       used[val >> 3] = 1;
8693                     }
8694                 }
8695             }
8696           while (repeat);
8697
8698           if (elf_section_data (sec)->relocs != relstart)
8699             free (relstart);
8700         }
8701
8702       /* Merge the used and skip arrays.  Assume that TOC
8703          doublewords not appearing as either used or unused belong
8704          to an entry more than one doubleword in size.  */
8705       for (drop = skip, keep = used, last = 0, some_unused = 0;
8706            drop < skip + (toc->size + 7) / 8;
8707            ++drop, ++keep)
8708         {
8709           if (*keep)
8710             {
8711               *drop &= ~ref_from_discarded;
8712               if ((*drop & can_optimize) != 0)
8713                 some_unused = 1;
8714               last = 0;
8715             }
8716           else if ((*drop & ref_from_discarded) != 0)
8717             {
8718               some_unused = 1;
8719               last = ref_from_discarded;
8720             }
8721           else
8722             *drop = last;
8723         }
8724
8725       free (used);
8726
8727       if (some_unused)
8728         {
8729           bfd_byte *contents, *src;
8730           unsigned long off;
8731           Elf_Internal_Sym *sym;
8732           bfd_boolean local_toc_syms = FALSE;
8733
8734           /* Shuffle the toc contents, and at the same time convert the
8735              skip array from booleans into offsets.  */
8736           if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8737             goto error_ret;
8738
8739           elf_section_data (toc)->this_hdr.contents = contents;
8740
8741           for (src = contents, off = 0, drop = skip;
8742                src < contents + toc->size;
8743                src += 8, ++drop)
8744             {
8745               if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8746                 off += 8;
8747               else if (off != 0)
8748                 {
8749                   *drop = off;
8750                   memcpy (src - off, src, 8);
8751                 }
8752             }
8753           *drop = off;
8754           toc->rawsize = toc->size;
8755           toc->size = src - contents - off;
8756
8757           /* Adjust addends for relocs against the toc section sym,
8758              and optimize any accesses we can.  */
8759           for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8760             {
8761               if (sec->reloc_count == 0
8762                   || discarded_section (sec))
8763                 continue;
8764
8765               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8766                                                     info->keep_memory);
8767               if (relstart == NULL)
8768                 goto error_ret;
8769
8770               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8771                 {
8772                   enum elf_ppc64_reloc_type r_type;
8773                   unsigned long r_symndx;
8774                   asection *sym_sec;
8775                   struct elf_link_hash_entry *h;
8776                   bfd_vma val;
8777
8778                   r_type = ELF64_R_TYPE (rel->r_info);
8779                   switch (r_type)
8780                     {
8781                     default:
8782                       continue;
8783
8784                     case R_PPC64_TOC16:
8785                     case R_PPC64_TOC16_LO:
8786                     case R_PPC64_TOC16_HI:
8787                     case R_PPC64_TOC16_HA:
8788                     case R_PPC64_TOC16_DS:
8789                     case R_PPC64_TOC16_LO_DS:
8790                     case R_PPC64_ADDR64:
8791                       break;
8792                     }
8793
8794                   r_symndx = ELF64_R_SYM (rel->r_info);
8795                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8796                                   r_symndx, ibfd))
8797                     goto error_ret;
8798
8799                   if (sym_sec != toc)
8800                     continue;
8801
8802                   if (h != NULL)
8803                     val = h->root.u.def.value;
8804                   else
8805                     {
8806                       val = sym->st_value;
8807                       if (val != 0)
8808                         local_toc_syms = TRUE;
8809                     }
8810
8811                   val += rel->r_addend;
8812
8813                   if (val > toc->rawsize)
8814                     val = toc->rawsize;
8815                   else if ((skip[val >> 3] & ref_from_discarded) != 0)
8816                     continue;
8817                   else if ((skip[val >> 3] & can_optimize) != 0)
8818                     {
8819                       Elf_Internal_Rela *tocrel
8820                         = toc_relocs + (skip[val >> 3] >> 2);
8821                       unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8822
8823                       switch (r_type)
8824                         {
8825                         case R_PPC64_TOC16_HA:
8826                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8827                           break;
8828
8829                         case R_PPC64_TOC16_LO_DS:
8830                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8831                           break;
8832
8833                         default:
8834                           if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8835                             ppc_howto_init ();
8836                           info->callbacks->einfo
8837                             /* xgettext:c-format */
8838                             (_("%H: %s references "
8839                                "optimized away TOC entry\n"),
8840                              ibfd, sec, rel->r_offset,
8841                              ppc64_elf_howto_table[r_type]->name);
8842                           bfd_set_error (bfd_error_bad_value);
8843                           goto error_ret;
8844                         }
8845                       rel->r_addend = tocrel->r_addend;
8846                       elf_section_data (sec)->relocs = relstart;
8847                       continue;
8848                     }
8849
8850                   if (h != NULL || sym->st_value != 0)
8851                     continue;
8852
8853                   rel->r_addend -= skip[val >> 3];
8854                   elf_section_data (sec)->relocs = relstart;
8855                 }
8856
8857               if (elf_section_data (sec)->relocs != relstart)
8858                 free (relstart);
8859             }
8860
8861           /* We shouldn't have local or global symbols defined in the TOC,
8862              but handle them anyway.  */
8863           if (local_syms != NULL)
8864             for (sym = local_syms;
8865                  sym < local_syms + symtab_hdr->sh_info;
8866                  ++sym)
8867               if (sym->st_value != 0
8868                   && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
8869                 {
8870                   unsigned long i;
8871
8872                   if (sym->st_value > toc->rawsize)
8873                     i = toc->rawsize >> 3;
8874                   else
8875                     i = sym->st_value >> 3;
8876
8877                   if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
8878                     {
8879                       if (local_toc_syms)
8880                         _bfd_error_handler
8881                           (_("%s defined on removed toc entry"),
8882                            bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
8883                       do
8884                         ++i;
8885                       while ((skip[i] & (ref_from_discarded | can_optimize)));
8886                       sym->st_value = (bfd_vma) i << 3;
8887                     }
8888
8889                   sym->st_value -= skip[i];
8890                   symtab_hdr->contents = (unsigned char *) local_syms;
8891                 }
8892
8893           /* Adjust any global syms defined in this toc input section.  */
8894           if (toc_inf.global_toc_syms)
8895             {
8896               toc_inf.toc = toc;
8897               toc_inf.skip = skip;
8898               toc_inf.global_toc_syms = FALSE;
8899               elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
8900                                       &toc_inf);
8901             }
8902
8903           if (toc->reloc_count != 0)
8904             {
8905               Elf_Internal_Shdr *rel_hdr;
8906               Elf_Internal_Rela *wrel;
8907               bfd_size_type sz;
8908
8909               /* Remove unused toc relocs, and adjust those we keep.  */
8910               if (toc_relocs == NULL)
8911                 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8912                                                         info->keep_memory);
8913               if (toc_relocs == NULL)
8914                 goto error_ret;
8915
8916               wrel = toc_relocs;
8917               for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8918                 if ((skip[rel->r_offset >> 3]
8919                      & (ref_from_discarded | can_optimize)) == 0)
8920                   {
8921                     wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
8922                     wrel->r_info = rel->r_info;
8923                     wrel->r_addend = rel->r_addend;
8924                     ++wrel;
8925                   }
8926                 else if (!dec_dynrel_count (rel->r_info, toc, info,
8927                                             &local_syms, NULL, NULL))
8928                   goto error_ret;
8929
8930               elf_section_data (toc)->relocs = toc_relocs;
8931               toc->reloc_count = wrel - toc_relocs;
8932               rel_hdr = _bfd_elf_single_rel_hdr (toc);
8933               sz = rel_hdr->sh_entsize;
8934               rel_hdr->sh_size = toc->reloc_count * sz;
8935             }
8936         }
8937       else if (toc_relocs != NULL
8938                && elf_section_data (toc)->relocs != toc_relocs)
8939         free (toc_relocs);
8940
8941       if (local_syms != NULL
8942           && symtab_hdr->contents != (unsigned char *) local_syms)
8943         {
8944           if (!info->keep_memory)
8945             free (local_syms);
8946           else
8947             symtab_hdr->contents = (unsigned char *) local_syms;
8948         }
8949       free (skip);
8950     }
8951
8952   /* Look for cases where we can change an indirect GOT access to
8953      a GOT relative or PC relative access, possibly reducing the
8954      number of GOT entries.  */
8955   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8956     {
8957       asection *sec;
8958       Elf_Internal_Shdr *symtab_hdr;
8959       Elf_Internal_Sym *local_syms;
8960       Elf_Internal_Rela *relstart, *rel;
8961       bfd_vma got;
8962
8963       if (!is_ppc64_elf (ibfd))
8964         continue;
8965
8966       if (!ppc64_elf_tdata (ibfd)->has_gotrel)
8967         continue;
8968
8969       sec = ppc64_elf_tdata (ibfd)->got;
8970       got = sec->output_section->vma + sec->output_offset + 0x8000;
8971
8972       local_syms = NULL;
8973       symtab_hdr = &elf_symtab_hdr (ibfd);
8974
8975       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8976         {
8977           if (sec->reloc_count == 0
8978               || !ppc64_elf_section_data (sec)->has_gotrel
8979               || discarded_section (sec))
8980             continue;
8981
8982           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8983                                                 info->keep_memory);
8984           if (relstart == NULL)
8985             {
8986             got_error_ret:
8987               if (local_syms != NULL
8988                   && symtab_hdr->contents != (unsigned char *) local_syms)
8989                 free (local_syms);
8990               if (sec != NULL
8991                   && relstart != NULL
8992                   && elf_section_data (sec)->relocs != relstart)
8993                 free (relstart);
8994               return FALSE;
8995             }
8996
8997           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8998             {
8999               enum elf_ppc64_reloc_type r_type;
9000               unsigned long r_symndx;
9001               Elf_Internal_Sym *sym;
9002               asection *sym_sec;
9003               struct elf_link_hash_entry *h;
9004               struct got_entry *ent;
9005               bfd_vma sym_addend, val, pc;
9006               unsigned char buf[8];
9007               unsigned int insn;
9008
9009               r_type = ELF64_R_TYPE (rel->r_info);
9010               switch (r_type)
9011                 {
9012                 /* Note that we don't delete GOT entries for
9013                    R_PPC64_GOT16_DS since we'd need a lot more
9014                    analysis.  For starters, the preliminary layout is
9015                    before the GOT, PLT, dynamic sections and stubs are
9016                    laid out.  Then we'd need to allow for changes in
9017                    distance between sections caused by alignment.  */
9018                 default:
9019                   continue;
9020
9021                 case R_PPC64_GOT16_HA:
9022                 case R_PPC64_GOT16_LO_DS:
9023                   sym_addend = rel->r_addend;
9024                   break;
9025
9026                 case R_PPC64_GOT_PCREL34:
9027                   sym_addend = 0;
9028                   break;
9029                 }
9030
9031               r_symndx = ELF64_R_SYM (rel->r_info);
9032               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9033                               r_symndx, ibfd))
9034                 goto got_error_ret;
9035
9036               if (!SYMBOL_REFERENCES_LOCAL (info, h))
9037                 continue;
9038
9039               if (h != NULL)
9040                 val = h->root.u.def.value;
9041               else
9042                 val = sym->st_value;
9043               val += sym_addend;
9044               val += sym_sec->output_section->vma + sym_sec->output_offset;
9045
9046 /* Fudge factor to allow for the fact that the preliminary layout
9047    isn't exact.  Reduce limits by this factor.  */
9048 #define LIMIT_ADJUST(LIMIT) ((LIMIT) - (LIMIT) / 16)
9049
9050               switch (r_type)
9051                 {
9052                 default:
9053                   continue;
9054
9055                 case R_PPC64_GOT16_HA:
9056                   if (val - got + LIMIT_ADJUST (0x80008000ULL)
9057                       >= LIMIT_ADJUST (0x100000000ULL))
9058                     continue;
9059
9060                   if (!bfd_get_section_contents (ibfd, sec, buf,
9061                                                  rel->r_offset & ~3, 4))
9062                     goto got_error_ret;
9063                   insn = bfd_get_32 (ibfd, buf);
9064                   if (((insn & ((0x3f << 26) | 0x1f << 16))
9065                        != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9066                     continue;
9067                   break;
9068
9069                 case R_PPC64_GOT16_LO_DS:
9070                   if (val - got + LIMIT_ADJUST (0x80008000ULL)
9071                       >= LIMIT_ADJUST (0x100000000ULL))
9072                     continue;
9073                   if (!bfd_get_section_contents (ibfd, sec, buf,
9074                                                  rel->r_offset & ~3, 4))
9075                     goto got_error_ret;
9076                   insn = bfd_get_32 (ibfd, buf);
9077                   if ((insn & (0x3f << 26 | 0x3)) != 58u << 26 /* ld */)
9078                     continue;
9079                   break;
9080
9081                 case R_PPC64_GOT_PCREL34:
9082                   pc = rel->r_offset;
9083                   pc += sec->output_section->vma + sec->output_offset;
9084                   if (val - pc + LIMIT_ADJUST (1ULL << 33)
9085                       >= LIMIT_ADJUST (1ULL << 34))
9086                     continue;
9087                   if (!bfd_get_section_contents (ibfd, sec, buf,
9088                                                  rel->r_offset & ~3, 8))
9089                     goto got_error_ret;
9090                   insn = bfd_get_32 (ibfd, buf);
9091                   if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
9092                     continue;
9093                   insn = bfd_get_32 (ibfd, buf + 4);
9094                   if ((insn & (0x3f << 26)) != 57u << 26)
9095                     continue;
9096                   break;
9097                 }
9098 #undef LIMIT_ADJUST
9099
9100               if (h != NULL)
9101                 ent = h->got.glist;
9102               else
9103                 {
9104                   struct got_entry **local_got_ents = elf_local_got_ents (ibfd);
9105                   ent = local_got_ents[r_symndx];
9106                 }
9107               for (; ent != NULL; ent = ent->next)
9108                 if (ent->addend == sym_addend
9109                     && ent->owner == ibfd
9110                     && ent->tls_type == 0)
9111                   break;
9112               BFD_ASSERT (ent && ent->got.refcount > 0);
9113               ent->got.refcount -= 1;
9114             }
9115
9116           if (elf_section_data (sec)->relocs != relstart)
9117             free (relstart);
9118         }
9119
9120       if (local_syms != NULL
9121           && symtab_hdr->contents != (unsigned char *) local_syms)
9122         {
9123           if (!info->keep_memory)
9124             free (local_syms);
9125           else
9126             symtab_hdr->contents = (unsigned char *) local_syms;
9127         }
9128     }
9129
9130   return TRUE;
9131 }
9132
9133 /* Return true iff input section I references the TOC using
9134    instructions limited to +/-32k offsets.  */
9135
9136 bfd_boolean
9137 ppc64_elf_has_small_toc_reloc (asection *i)
9138 {
9139   return (is_ppc64_elf (i->owner)
9140           && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9141 }
9142
9143 /* Allocate space for one GOT entry.  */
9144
9145 static void
9146 allocate_got (struct elf_link_hash_entry *h,
9147               struct bfd_link_info *info,
9148               struct got_entry *gent)
9149 {
9150   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9151   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
9152   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9153                  ? 16 : 8);
9154   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9155                   ? 2 : 1) * sizeof (Elf64_External_Rela);
9156   asection *got = ppc64_elf_tdata (gent->owner)->got;
9157
9158   gent->got.offset = got->size;
9159   got->size += entsize;
9160
9161   if (h->type == STT_GNU_IFUNC)
9162     {
9163       htab->elf.irelplt->size += rentsize;
9164       htab->got_reli_size += rentsize;
9165     }
9166   else if (((bfd_link_pic (info)
9167              && !((gent->tls_type & TLS_TPREL) != 0
9168                   && bfd_link_executable (info)
9169                   && SYMBOL_REFERENCES_LOCAL (info, h)))
9170             || (htab->elf.dynamic_sections_created
9171                 && h->dynindx != -1
9172                 && !SYMBOL_REFERENCES_LOCAL (info, h)))
9173            && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9174     {
9175       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9176       relgot->size += rentsize;
9177     }
9178 }
9179
9180 /* This function merges got entries in the same toc group.  */
9181
9182 static void
9183 merge_got_entries (struct got_entry **pent)
9184 {
9185   struct got_entry *ent, *ent2;
9186
9187   for (ent = *pent; ent != NULL; ent = ent->next)
9188     if (!ent->is_indirect)
9189       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9190         if (!ent2->is_indirect
9191             && ent2->addend == ent->addend
9192             && ent2->tls_type == ent->tls_type
9193             && elf_gp (ent2->owner) == elf_gp (ent->owner))
9194           {
9195             ent2->is_indirect = TRUE;
9196             ent2->got.ent = ent;
9197           }
9198 }
9199
9200 /* If H is undefined, make it dynamic if that makes sense.  */
9201
9202 static bfd_boolean
9203 ensure_undef_dynamic (struct bfd_link_info *info,
9204                       struct elf_link_hash_entry *h)
9205 {
9206   struct elf_link_hash_table *htab = elf_hash_table (info);
9207
9208   if (htab->dynamic_sections_created
9209       && ((info->dynamic_undefined_weak != 0
9210            && h->root.type == bfd_link_hash_undefweak)
9211           || h->root.type == bfd_link_hash_undefined)
9212       && h->dynindx == -1
9213       && !h->forced_local
9214       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9215     return bfd_elf_link_record_dynamic_symbol (info, h);
9216   return TRUE;
9217 }
9218
9219 /* Allocate space in .plt, .got and associated reloc sections for
9220    dynamic relocs.  */
9221
9222 static bfd_boolean
9223 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9224 {
9225   struct bfd_link_info *info;
9226   struct ppc_link_hash_table *htab;
9227   asection *s;
9228   struct ppc_link_hash_entry *eh;
9229   struct got_entry **pgent, *gent;
9230
9231   if (h->root.type == bfd_link_hash_indirect)
9232     return TRUE;
9233
9234   info = (struct bfd_link_info *) inf;
9235   htab = ppc_hash_table (info);
9236   if (htab == NULL)
9237     return FALSE;
9238
9239   eh = (struct ppc_link_hash_entry *) h;
9240   /* Run through the TLS GD got entries first if we're changing them
9241      to TPREL.  */
9242   if ((eh->tls_mask & (TLS_TLS | TLS_TPRELGD)) == (TLS_TLS | TLS_TPRELGD))
9243     for (gent = h->got.glist; gent != NULL; gent = gent->next)
9244       if (gent->got.refcount > 0
9245           && (gent->tls_type & TLS_GD) != 0)
9246         {
9247           /* This was a GD entry that has been converted to TPREL.  If
9248              there happens to be a TPREL entry we can use that one.  */
9249           struct got_entry *ent;
9250           for (ent = h->got.glist; ent != NULL; ent = ent->next)
9251             if (ent->got.refcount > 0
9252                 && (ent->tls_type & TLS_TPREL) != 0
9253                 && ent->addend == gent->addend
9254                 && ent->owner == gent->owner)
9255               {
9256                 gent->got.refcount = 0;
9257                 break;
9258               }
9259
9260           /* If not, then we'll be using our own TPREL entry.  */
9261           if (gent->got.refcount != 0)
9262             gent->tls_type = TLS_TLS | TLS_TPREL;
9263         }
9264
9265   /* Remove any list entry that won't generate a word in the GOT before
9266      we call merge_got_entries.  Otherwise we risk merging to empty
9267      entries.  */
9268   pgent = &h->got.glist;
9269   while ((gent = *pgent) != NULL)
9270     if (gent->got.refcount > 0)
9271       {
9272         if ((gent->tls_type & TLS_LD) != 0
9273             && !h->def_dynamic)
9274           {
9275             ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9276             *pgent = gent->next;
9277           }
9278         else
9279           pgent = &gent->next;
9280       }
9281     else
9282       *pgent = gent->next;
9283
9284   if (!htab->do_multi_toc)
9285     merge_got_entries (&h->got.glist);
9286
9287   for (gent = h->got.glist; gent != NULL; gent = gent->next)
9288     if (!gent->is_indirect)
9289       {
9290         /* Make sure this symbol is output as a dynamic symbol.  */
9291         if (!ensure_undef_dynamic (info, h))
9292           return FALSE;
9293
9294         if (!is_ppc64_elf (gent->owner))
9295           abort ();
9296
9297         allocate_got (h, info, gent);
9298       }
9299
9300   /* If no dynamic sections we can't have dynamic relocs, except for
9301      IFUNCs which are handled even in static executables.  */
9302   if (!htab->elf.dynamic_sections_created
9303       && h->type != STT_GNU_IFUNC)
9304     eh->dyn_relocs = NULL;
9305
9306   /* Discard relocs on undefined symbols that must be local.  */
9307   else if (h->root.type == bfd_link_hash_undefined
9308            && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9309     eh->dyn_relocs = NULL;
9310
9311   /* Also discard relocs on undefined weak syms with non-default
9312      visibility, or when dynamic_undefined_weak says so.  */
9313   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9314     eh->dyn_relocs = NULL;
9315
9316   if (eh->dyn_relocs != NULL)
9317     {
9318       struct elf_dyn_relocs *p, **pp;
9319
9320       /* In the shared -Bsymbolic case, discard space allocated for
9321          dynamic pc-relative relocs against symbols which turn out to
9322          be defined in regular objects.  For the normal shared case,
9323          discard space for relocs that have become local due to symbol
9324          visibility changes.  */
9325
9326       if (bfd_link_pic (info))
9327         {
9328           /* Relocs that use pc_count are those that appear on a call
9329              insn, or certain REL relocs (see must_be_dyn_reloc) that
9330              can be generated via assembly.  We want calls to
9331              protected symbols to resolve directly to the function
9332              rather than going via the plt.  If people want function
9333              pointer comparisons to work as expected then they should
9334              avoid writing weird assembly.  */
9335           if (SYMBOL_CALLS_LOCAL (info, h))
9336             {
9337               for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9338                 {
9339                   p->count -= p->pc_count;
9340                   p->pc_count = 0;
9341                   if (p->count == 0)
9342                     *pp = p->next;
9343                   else
9344                     pp = &p->next;
9345                 }
9346             }
9347
9348           if (eh->dyn_relocs != NULL)
9349             {
9350               /* Make sure this symbol is output as a dynamic symbol.  */
9351               if (!ensure_undef_dynamic (info, h))
9352                 return FALSE;
9353             }
9354         }
9355       else if (ELIMINATE_COPY_RELOCS && h->type != STT_GNU_IFUNC)
9356         {
9357           /* For the non-pic case, discard space for relocs against
9358              symbols which turn out to need copy relocs or are not
9359              dynamic.  */
9360           if (h->dynamic_adjusted
9361               && !h->def_regular
9362               && !ELF_COMMON_DEF_P (h))
9363             {
9364               /* Make sure this symbol is output as a dynamic symbol.  */
9365               if (!ensure_undef_dynamic (info, h))
9366                 return FALSE;
9367
9368               if (h->dynindx == -1)
9369                 eh->dyn_relocs = NULL;
9370             }
9371           else
9372             eh->dyn_relocs = NULL;
9373         }
9374
9375       /* Finally, allocate space.  */
9376       for (p = eh->dyn_relocs; p != NULL; p = p->next)
9377         {
9378           asection *sreloc = elf_section_data (p->sec)->sreloc;
9379           if (eh->elf.type == STT_GNU_IFUNC)
9380             sreloc = htab->elf.irelplt;
9381           sreloc->size += p->count * sizeof (Elf64_External_Rela);
9382         }
9383     }
9384
9385   /* We might need a PLT entry when the symbol
9386      a) is dynamic, or
9387      b) is an ifunc, or
9388      c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
9389      d) has plt16 relocs and we are linking statically.  */
9390   if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
9391       || h->type == STT_GNU_IFUNC
9392       || (h->needs_plt && h->dynamic_adjusted)
9393       || (h->needs_plt
9394           && h->def_regular
9395           && !htab->elf.dynamic_sections_created
9396           && !htab->can_convert_all_inline_plt
9397           && (((struct ppc_link_hash_entry *) h)->tls_mask
9398               & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
9399     {
9400       struct plt_entry *pent;
9401       bfd_boolean doneone = FALSE;
9402       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9403         if (pent->plt.refcount > 0)
9404           {
9405             if (!htab->elf.dynamic_sections_created
9406                 || h->dynindx == -1)
9407               {
9408                 if (h->type == STT_GNU_IFUNC)
9409                   {
9410                     s = htab->elf.iplt;
9411                     pent->plt.offset = s->size;
9412                     s->size += PLT_ENTRY_SIZE (htab);
9413                     s = htab->elf.irelplt;
9414                   }
9415                 else
9416                   {
9417                     s = htab->pltlocal;
9418                     pent->plt.offset = s->size;
9419                     s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9420                     s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
9421                   }
9422               }
9423             else
9424               {
9425                 /* If this is the first .plt entry, make room for the special
9426                    first entry.  */
9427                 s = htab->elf.splt;
9428                 if (s->size == 0)
9429                   s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9430
9431                 pent->plt.offset = s->size;
9432
9433                 /* Make room for this entry.  */
9434                 s->size += PLT_ENTRY_SIZE (htab);
9435
9436                 /* Make room for the .glink code.  */
9437                 s = htab->glink;
9438                 if (s->size == 0)
9439                   s->size += GLINK_PLTRESOLVE_SIZE (htab);
9440                 if (htab->opd_abi)
9441                   {
9442                     /* We need bigger stubs past index 32767.  */
9443                     if (s->size >= GLINK_PLTRESOLVE_SIZE (htab) + 32768*2*4)
9444                       s->size += 4;
9445                     s->size += 2*4;
9446                   }
9447                 else
9448                   s->size += 4;
9449
9450                 /* We also need to make an entry in the .rela.plt section.  */
9451                 s = htab->elf.srelplt;
9452               }
9453             if (s != NULL)
9454               s->size += sizeof (Elf64_External_Rela);
9455             doneone = TRUE;
9456           }
9457         else
9458           pent->plt.offset = (bfd_vma) -1;
9459       if (!doneone)
9460         {
9461           h->plt.plist = NULL;
9462           h->needs_plt = 0;
9463         }
9464     }
9465   else
9466     {
9467       h->plt.plist = NULL;
9468       h->needs_plt = 0;
9469     }
9470
9471   return TRUE;
9472 }
9473
9474 #define PPC_LO(v) ((v) & 0xffff)
9475 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9476 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9477 #define D34(v) \
9478   ((((v) & 0x3ffff0000ULL) << 16) | (v & 0xffff))
9479 #define HA34(v) ((v + (1ULL << 33)) >> 34)
9480
9481 /* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9482    to set up space for global entry stubs.  These are put in glink,
9483    after the branch table.  */
9484
9485 static bfd_boolean
9486 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9487 {
9488   struct bfd_link_info *info;
9489   struct ppc_link_hash_table *htab;
9490   struct plt_entry *pent;
9491   asection *s, *plt;
9492
9493   if (h->root.type == bfd_link_hash_indirect)
9494     return TRUE;
9495
9496   if (!h->pointer_equality_needed)
9497     return TRUE;
9498
9499   if (h->def_regular)
9500     return TRUE;
9501
9502   info = inf;
9503   htab = ppc_hash_table (info);
9504   if (htab == NULL)
9505     return FALSE;
9506
9507   s = htab->global_entry;
9508   plt = htab->elf.splt;
9509   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9510     if (pent->plt.offset != (bfd_vma) -1
9511         && pent->addend == 0)
9512       {
9513         /* For ELFv2, if this symbol is not defined in a regular file
9514            and we are not generating a shared library or pie, then we
9515            need to define the symbol in the executable on a call stub.
9516            This is to avoid text relocations.  */
9517         bfd_vma off, stub_align, stub_off, stub_size;
9518         unsigned int align_power;
9519
9520         stub_size = 16;
9521         stub_off = s->size;
9522         if (htab->params->plt_stub_align >= 0)
9523           align_power = htab->params->plt_stub_align;
9524         else
9525           align_power = -htab->params->plt_stub_align;
9526         /* Setting section alignment is delayed until we know it is
9527            non-empty.  Otherwise the .text output section will be
9528            aligned at least to plt_stub_align even when no global
9529            entry stubs are needed.  */
9530         if (s->alignment_power < align_power)
9531           s->alignment_power = align_power;
9532         stub_align = (bfd_vma) 1 << align_power;
9533         if (htab->params->plt_stub_align >= 0
9534             || ((((stub_off + stub_size - 1) & -stub_align)
9535                  - (stub_off & -stub_align))
9536                 > ((stub_size - 1) & -stub_align)))
9537           stub_off = (stub_off + stub_align - 1) & -stub_align;
9538         off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
9539         off -= stub_off + s->output_offset + s->output_section->vma;
9540         /* Note that for --plt-stub-align negative we have a possible
9541            dependency between stub offset and size.  Break that
9542            dependency by assuming the max stub size when calculating
9543            the stub offset.  */
9544         if (PPC_HA (off) == 0)
9545           stub_size -= 4;
9546         h->root.type = bfd_link_hash_defined;
9547         h->root.u.def.section = s;
9548         h->root.u.def.value = stub_off;
9549         s->size = stub_off + stub_size;
9550         break;
9551       }
9552   return TRUE;
9553 }
9554
9555 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
9556    read-only sections.  */
9557
9558 static bfd_boolean
9559 maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
9560 {
9561   asection *sec;
9562
9563   if (h->root.type == bfd_link_hash_indirect)
9564     return TRUE;
9565
9566   sec = readonly_dynrelocs (h);
9567   if (sec != NULL)
9568     {
9569       struct bfd_link_info *info = (struct bfd_link_info *) inf;
9570
9571       info->flags |= DF_TEXTREL;
9572       info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'"
9573                                 " in read-only section `%pA'\n"),
9574                               sec->owner, h->root.root.string, sec);
9575
9576       /* Not an error, just cut short the traversal.  */
9577       return FALSE;
9578     }
9579   return TRUE;
9580 }
9581
9582 /* Set the sizes of the dynamic sections.  */
9583
9584 static bfd_boolean
9585 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9586                                  struct bfd_link_info *info)
9587 {
9588   struct ppc_link_hash_table *htab;
9589   bfd *dynobj;
9590   asection *s;
9591   bfd_boolean relocs;
9592   bfd *ibfd;
9593   struct got_entry *first_tlsld;
9594
9595   htab = ppc_hash_table (info);
9596   if (htab == NULL)
9597     return FALSE;
9598
9599   dynobj = htab->elf.dynobj;
9600   if (dynobj == NULL)
9601     abort ();
9602
9603   if (htab->elf.dynamic_sections_created)
9604     {
9605       /* Set the contents of the .interp section to the interpreter.  */
9606       if (bfd_link_executable (info) && !info->nointerp)
9607         {
9608           s = bfd_get_linker_section (dynobj, ".interp");
9609           if (s == NULL)
9610             abort ();
9611           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9612           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9613         }
9614     }
9615
9616   /* Set up .got offsets for local syms, and space for local dynamic
9617      relocs.  */
9618   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9619     {
9620       struct got_entry **lgot_ents;
9621       struct got_entry **end_lgot_ents;
9622       struct plt_entry **local_plt;
9623       struct plt_entry **end_local_plt;
9624       unsigned char *lgot_masks;
9625       bfd_size_type locsymcount;
9626       Elf_Internal_Shdr *symtab_hdr;
9627
9628       if (!is_ppc64_elf (ibfd))
9629         continue;
9630
9631       for (s = ibfd->sections; s != NULL; s = s->next)
9632         {
9633           struct ppc_dyn_relocs *p;
9634
9635           for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9636             {
9637               if (!bfd_is_abs_section (p->sec)
9638                   && bfd_is_abs_section (p->sec->output_section))
9639                 {
9640                   /* Input section has been discarded, either because
9641                      it is a copy of a linkonce section or due to
9642                      linker script /DISCARD/, so we'll be discarding
9643                      the relocs too.  */
9644                 }
9645               else if (p->count != 0)
9646                 {
9647                   asection *srel = elf_section_data (p->sec)->sreloc;
9648                   if (p->ifunc)
9649                     srel = htab->elf.irelplt;
9650                   srel->size += p->count * sizeof (Elf64_External_Rela);
9651                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9652                     info->flags |= DF_TEXTREL;
9653                 }
9654             }
9655         }
9656
9657       lgot_ents = elf_local_got_ents (ibfd);
9658       if (!lgot_ents)
9659         continue;
9660
9661       symtab_hdr = &elf_symtab_hdr (ibfd);
9662       locsymcount = symtab_hdr->sh_info;
9663       end_lgot_ents = lgot_ents + locsymcount;
9664       local_plt = (struct plt_entry **) end_lgot_ents;
9665       end_local_plt = local_plt + locsymcount;
9666       lgot_masks = (unsigned char *) end_local_plt;
9667       s = ppc64_elf_tdata (ibfd)->got;
9668       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9669         {
9670           struct got_entry **pent, *ent;
9671
9672           pent = lgot_ents;
9673           while ((ent = *pent) != NULL)
9674             if (ent->got.refcount > 0)
9675               {
9676                 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9677                   {
9678                     ppc64_tlsld_got (ibfd)->got.refcount += 1;
9679                     *pent = ent->next;
9680                   }
9681                 else
9682                   {
9683                     unsigned int ent_size = 8;
9684                     unsigned int rel_size = sizeof (Elf64_External_Rela);
9685
9686                     ent->got.offset = s->size;
9687                     if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9688                       {
9689                         ent_size *= 2;
9690                         rel_size *= 2;
9691                       }
9692                     s->size += ent_size;
9693                     if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9694                       {
9695                         htab->elf.irelplt->size += rel_size;
9696                         htab->got_reli_size += rel_size;
9697                       }
9698                     else if (bfd_link_pic (info)
9699                              && !((ent->tls_type & TLS_TPREL) != 0
9700                                   && bfd_link_executable (info)))
9701                       {
9702                         asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9703                         srel->size += rel_size;
9704                       }
9705                     pent = &ent->next;
9706                   }
9707               }
9708             else
9709               *pent = ent->next;
9710         }
9711
9712       /* Allocate space for plt calls to local syms.  */
9713       lgot_masks = (unsigned char *) end_local_plt;
9714       for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
9715         {
9716           struct plt_entry *ent;
9717
9718           for (ent = *local_plt; ent != NULL; ent = ent->next)
9719             if (ent->plt.refcount > 0)
9720               {
9721                 if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9722                   {
9723                     s = htab->elf.iplt;
9724                     ent->plt.offset = s->size;
9725                     s->size += PLT_ENTRY_SIZE (htab);
9726                     htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
9727                   }
9728                 else if (htab->can_convert_all_inline_plt
9729                          || (*lgot_masks & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)
9730                   ent->plt.offset = (bfd_vma) -1;
9731                 else
9732                   {
9733                     s = htab->pltlocal;
9734                     ent->plt.offset = s->size;
9735                     s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9736                     if (bfd_link_pic (info))
9737                       htab->relpltlocal->size += sizeof (Elf64_External_Rela);
9738                   }
9739               }
9740             else
9741               ent->plt.offset = (bfd_vma) -1;
9742         }
9743     }
9744
9745   /* Allocate global sym .plt and .got entries, and space for global
9746      sym dynamic relocs.  */
9747   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9748
9749   if (!htab->opd_abi && !bfd_link_pic (info))
9750     elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
9751
9752   first_tlsld = NULL;
9753   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9754     {
9755       struct got_entry *ent;
9756
9757       if (!is_ppc64_elf (ibfd))
9758         continue;
9759
9760       ent = ppc64_tlsld_got (ibfd);
9761       if (ent->got.refcount > 0)
9762         {
9763           if (!htab->do_multi_toc && first_tlsld != NULL)
9764             {
9765               ent->is_indirect = TRUE;
9766               ent->got.ent = first_tlsld;
9767             }
9768           else
9769             {
9770               if (first_tlsld == NULL)
9771                 first_tlsld = ent;
9772               s = ppc64_elf_tdata (ibfd)->got;
9773               ent->got.offset = s->size;
9774               ent->owner = ibfd;
9775               s->size += 16;
9776               if (bfd_link_pic (info))
9777                 {
9778                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9779                   srel->size += sizeof (Elf64_External_Rela);
9780                 }
9781             }
9782         }
9783       else
9784         ent->got.offset = (bfd_vma) -1;
9785     }
9786
9787   /* We now have determined the sizes of the various dynamic sections.
9788      Allocate memory for them.  */
9789   relocs = FALSE;
9790   for (s = dynobj->sections; s != NULL; s = s->next)
9791     {
9792       if ((s->flags & SEC_LINKER_CREATED) == 0)
9793         continue;
9794
9795       if (s == htab->brlt || s == htab->relbrlt)
9796         /* These haven't been allocated yet;  don't strip.  */
9797         continue;
9798       else if (s == htab->elf.sgot
9799                || s == htab->elf.splt
9800                || s == htab->elf.iplt
9801                || s == htab->pltlocal
9802                || s == htab->glink
9803                || s == htab->global_entry
9804                || s == htab->elf.sdynbss
9805                || s == htab->elf.sdynrelro)
9806         {
9807           /* Strip this section if we don't need it; see the
9808              comment below.  */
9809         }
9810       else if (s == htab->glink_eh_frame)
9811         {
9812           if (!bfd_is_abs_section (s->output_section))
9813             /* Not sized yet.  */
9814             continue;
9815         }
9816       else if (CONST_STRNEQ (s->name, ".rela"))
9817         {
9818           if (s->size != 0)
9819             {
9820               if (s != htab->elf.srelplt)
9821                 relocs = TRUE;
9822
9823               /* We use the reloc_count field as a counter if we need
9824                  to copy relocs into the output file.  */
9825               s->reloc_count = 0;
9826             }
9827         }
9828       else
9829         {
9830           /* It's not one of our sections, so don't allocate space.  */
9831           continue;
9832         }
9833
9834       if (s->size == 0)
9835         {
9836           /* If we don't need this section, strip it from the
9837              output file.  This is mostly to handle .rela.bss and
9838              .rela.plt.  We must create both sections in
9839              create_dynamic_sections, because they must be created
9840              before the linker maps input sections to output
9841              sections.  The linker does that before
9842              adjust_dynamic_symbol is called, and it is that
9843              function which decides whether anything needs to go
9844              into these sections.  */
9845           s->flags |= SEC_EXCLUDE;
9846           continue;
9847         }
9848
9849       if (bfd_is_abs_section (s->output_section))
9850         _bfd_error_handler (_("warning: discarding dynamic section %s"),
9851                             s->name);
9852
9853       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9854         continue;
9855
9856       /* Allocate memory for the section contents.  We use bfd_zalloc
9857          here in case unused entries are not reclaimed before the
9858          section's contents are written out.  This should not happen,
9859          but this way if it does we get a R_PPC64_NONE reloc in .rela
9860          sections instead of garbage.
9861          We also rely on the section contents being zero when writing
9862          the GOT and .dynrelro.  */
9863       s->contents = bfd_zalloc (dynobj, s->size);
9864       if (s->contents == NULL)
9865         return FALSE;
9866     }
9867
9868   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9869     {
9870       if (!is_ppc64_elf (ibfd))
9871         continue;
9872
9873       s = ppc64_elf_tdata (ibfd)->got;
9874       if (s != NULL && s != htab->elf.sgot)
9875         {
9876           if (s->size == 0)
9877             s->flags |= SEC_EXCLUDE;
9878           else
9879             {
9880               s->contents = bfd_zalloc (ibfd, s->size);
9881               if (s->contents == NULL)
9882                 return FALSE;
9883             }
9884         }
9885       s = ppc64_elf_tdata (ibfd)->relgot;
9886       if (s != NULL)
9887         {
9888           if (s->size == 0)
9889             s->flags |= SEC_EXCLUDE;
9890           else
9891             {
9892               s->contents = bfd_zalloc (ibfd, s->size);
9893               if (s->contents == NULL)
9894                 return FALSE;
9895               relocs = TRUE;
9896               s->reloc_count = 0;
9897             }
9898         }
9899     }
9900
9901   if (htab->elf.dynamic_sections_created)
9902     {
9903       bfd_boolean tls_opt;
9904
9905       /* Add some entries to the .dynamic section.  We fill in the
9906          values later, in ppc64_elf_finish_dynamic_sections, but we
9907          must add the entries now so that we get the correct size for
9908          the .dynamic section.  The DT_DEBUG entry is filled in by the
9909          dynamic linker and used by the debugger.  */
9910 #define add_dynamic_entry(TAG, VAL) \
9911   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
9912
9913       if (bfd_link_executable (info))
9914         {
9915           if (!add_dynamic_entry (DT_DEBUG, 0))
9916             return FALSE;
9917         }
9918
9919       if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
9920         {
9921           if (!add_dynamic_entry (DT_PLTGOT, 0)
9922               || !add_dynamic_entry (DT_PLTRELSZ, 0)
9923               || !add_dynamic_entry (DT_PLTREL, DT_RELA)
9924               || !add_dynamic_entry (DT_JMPREL, 0)
9925               || !add_dynamic_entry (DT_PPC64_GLINK, 0))
9926             return FALSE;
9927         }
9928
9929       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
9930         {
9931           if (!add_dynamic_entry (DT_PPC64_OPD, 0)
9932               || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
9933             return FALSE;
9934         }
9935
9936       tls_opt = (htab->params->tls_get_addr_opt
9937                  && htab->tls_get_addr_fd != NULL
9938                  && htab->tls_get_addr_fd->elf.plt.plist != NULL);
9939       if (tls_opt || !htab->opd_abi)
9940         {
9941           if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
9942             return FALSE;
9943         }
9944
9945       if (relocs)
9946         {
9947           if (!add_dynamic_entry (DT_RELA, 0)
9948               || !add_dynamic_entry (DT_RELASZ, 0)
9949               || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
9950             return FALSE;
9951
9952           /* If any dynamic relocs apply to a read-only section,
9953              then we need a DT_TEXTREL entry.  */
9954           if ((info->flags & DF_TEXTREL) == 0)
9955             elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
9956
9957           if ((info->flags & DF_TEXTREL) != 0)
9958             {
9959               if (!add_dynamic_entry (DT_TEXTREL, 0))
9960                 return FALSE;
9961             }
9962         }
9963     }
9964 #undef add_dynamic_entry
9965
9966   return TRUE;
9967 }
9968
9969 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
9970
9971 static bfd_boolean
9972 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
9973 {
9974   if (h->plt.plist != NULL
9975       && !h->def_regular
9976       && !h->pointer_equality_needed)
9977     return FALSE;
9978
9979   return _bfd_elf_hash_symbol (h);
9980 }
9981
9982 /* Determine the type of stub needed, if any, for a call.  */
9983
9984 static inline enum ppc_stub_type
9985 ppc_type_of_stub (asection *input_sec,
9986                   const Elf_Internal_Rela *rel,
9987                   struct ppc_link_hash_entry **hash,
9988                   struct plt_entry **plt_ent,
9989                   bfd_vma destination,
9990                   unsigned long local_off)
9991 {
9992   struct ppc_link_hash_entry *h = *hash;
9993   bfd_vma location;
9994   bfd_vma branch_offset;
9995   bfd_vma max_branch_offset;
9996   enum elf_ppc64_reloc_type r_type;
9997
9998   if (h != NULL)
9999     {
10000       struct plt_entry *ent;
10001       struct ppc_link_hash_entry *fdh = h;
10002       if (h->oh != NULL
10003           && h->oh->is_func_descriptor)
10004         {
10005           fdh = ppc_follow_link (h->oh);
10006           *hash = fdh;
10007         }
10008
10009       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10010         if (ent->addend == rel->r_addend
10011             && ent->plt.offset != (bfd_vma) -1)
10012           {
10013             *plt_ent = ent;
10014             return ppc_stub_plt_call;
10015           }
10016
10017       /* Here, we know we don't have a plt entry.  If we don't have a
10018          either a defined function descriptor or a defined entry symbol
10019          in a regular object file, then it is pointless trying to make
10020          any other type of stub.  */
10021       if (!is_static_defined (&fdh->elf)
10022           && !is_static_defined (&h->elf))
10023         return ppc_stub_none;
10024     }
10025   else if (elf_local_got_ents (input_sec->owner) != NULL)
10026     {
10027       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10028       struct plt_entry **local_plt = (struct plt_entry **)
10029         elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10030       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10031
10032       if (local_plt[r_symndx] != NULL)
10033         {
10034           struct plt_entry *ent;
10035
10036           for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10037             if (ent->addend == rel->r_addend
10038                 && ent->plt.offset != (bfd_vma) -1)
10039               {
10040                 *plt_ent = ent;
10041                 return ppc_stub_plt_call;
10042               }
10043         }
10044     }
10045
10046   /* Determine where the call point is.  */
10047   location = (input_sec->output_offset
10048               + input_sec->output_section->vma
10049               + rel->r_offset);
10050
10051   branch_offset = destination - location;
10052   r_type = ELF64_R_TYPE (rel->r_info);
10053
10054   /* Determine if a long branch stub is needed.  */
10055   max_branch_offset = 1 << 25;
10056   if (r_type == R_PPC64_REL14
10057       || r_type == R_PPC64_REL14_BRTAKEN
10058       || r_type == R_PPC64_REL14_BRNTAKEN)
10059     max_branch_offset = 1 << 15;
10060
10061   if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10062     /* We need a stub.  Figure out whether a long_branch or plt_branch
10063        is needed later.  */
10064     return ppc_stub_long_branch;
10065
10066   return ppc_stub_none;
10067 }
10068
10069 /* Gets the address of a label (1:) in r11 and builds an offset in r12,
10070    then adds it to r11 (LOAD false) or loads r12 from r11+r12 (LOAD true).
10071    .    mflr    %r12
10072    .    bcl     20,31,1f
10073    .1:  mflr    %r11
10074    .    mtlr    %r12
10075    .    lis     %r12,xxx-1b@highest
10076    .    ori     %r12,%r12,xxx-1b@higher
10077    .    sldi    %r12,%r12,32
10078    .    oris    %r12,%r12,xxx-1b@high
10079    .    ori     %r12,%r12,xxx-1b@l
10080    .    add/ldx %r12,%r11,%r12  */
10081
10082 static bfd_byte *
10083 build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
10084 {
10085   bfd_put_32 (abfd, MFLR_R12, p);
10086   p += 4;
10087   bfd_put_32 (abfd, BCL_20_31, p);
10088   p += 4;
10089   bfd_put_32 (abfd, MFLR_R11, p);
10090   p += 4;
10091   bfd_put_32 (abfd, MTLR_R12, p);
10092   p += 4;
10093   if (off + 0x8000 < 0x10000)
10094     {
10095       if (load)
10096         bfd_put_32 (abfd, LD_R12_0R11 + PPC_LO (off), p);
10097       else
10098         bfd_put_32 (abfd, ADDI_R12_R11 + PPC_LO (off), p);
10099       p += 4;
10100     }
10101   else if (off + 0x80008000ULL < 0x100000000ULL)
10102     {
10103       bfd_put_32 (abfd, ADDIS_R12_R11 + PPC_HA (off), p);
10104       p += 4;
10105       if (load)
10106         bfd_put_32 (abfd, LD_R12_0R12 + PPC_LO (off), p);
10107       else
10108         bfd_put_32 (abfd, ADDI_R12_R12 + PPC_LO (off), p);
10109       p += 4;
10110     }
10111   else
10112     {
10113       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10114         {
10115           bfd_put_32 (abfd, LI_R12_0 + ((off >> 32) & 0xffff), p);
10116           p += 4;
10117         }
10118       else
10119         {
10120           bfd_put_32 (abfd, LIS_R12 + ((off >> 48) & 0xffff), p);
10121           p += 4;
10122           if (((off >> 32) & 0xffff) != 0)
10123             {
10124               bfd_put_32 (abfd, ORI_R12_R12_0 + ((off >> 32) & 0xffff), p);
10125               p += 4;
10126             }
10127         }
10128       if (((off >> 32) & 0xffffffffULL) != 0)
10129         {
10130           bfd_put_32 (abfd, SLDI_R12_R12_32, p);
10131           p += 4;
10132         }
10133       if (PPC_HI (off) != 0)
10134         {
10135           bfd_put_32 (abfd, ORIS_R12_R12_0 + PPC_HI (off), p);
10136           p += 4;
10137         }
10138       if (PPC_LO (off) != 0)
10139         {
10140           bfd_put_32 (abfd, ORI_R12_R12_0 + PPC_LO (off), p);
10141           p += 4;
10142         }
10143       if (load)
10144         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10145       else
10146         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10147       p += 4;
10148     }
10149   return p;
10150 }
10151
10152 static unsigned int
10153 size_offset (bfd_vma off)
10154 {
10155   unsigned int size;
10156   if (off + 0x8000 < 0x10000)
10157     size = 4;
10158   else if (off + 0x80008000ULL < 0x100000000ULL)
10159     size = 8;
10160   else
10161     {
10162       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10163         size = 4;
10164       else
10165         {
10166           size = 4;
10167           if (((off >> 32) & 0xffff) != 0)
10168             size += 4;
10169         }
10170       if (((off >> 32) & 0xffffffffULL) != 0)
10171         size += 4;
10172       if (PPC_HI (off) != 0)
10173         size += 4;
10174       if (PPC_LO (off) != 0)
10175         size += 4;
10176       size += 4;
10177     }
10178   return size + 16;
10179 }
10180
10181 static unsigned int
10182 num_relocs_for_offset (bfd_vma off)
10183 {
10184   unsigned int num_rel;
10185   if (off + 0x8000 < 0x10000)
10186     num_rel = 1;
10187   else if (off + 0x80008000ULL < 0x100000000ULL)
10188     num_rel = 2;
10189   else
10190     {
10191       num_rel = 1;
10192       if (off + 0x800000000000ULL >= 0x1000000000000ULL
10193           && ((off >> 32) & 0xffff) != 0)
10194         num_rel += 1;
10195       if (PPC_HI (off) != 0)
10196         num_rel += 1;
10197       if (PPC_LO (off) != 0)
10198         num_rel += 1;
10199     }
10200   return num_rel;
10201 }
10202
10203 static Elf_Internal_Rela *
10204 emit_relocs_for_offset (struct bfd_link_info *info, Elf_Internal_Rela *r,
10205                         bfd_vma roff, bfd_vma targ, bfd_vma off)
10206 {
10207   bfd_vma relative_targ = targ - (roff - 8);
10208   if (bfd_big_endian (info->output_bfd))
10209     roff += 2;
10210   r->r_offset = roff;
10211   r->r_addend = relative_targ + roff;
10212   if (off + 0x8000 < 0x10000)
10213     r->r_info = ELF64_R_INFO (0, R_PPC64_REL16);
10214   else if (off + 0x80008000ULL < 0x100000000ULL)
10215     {
10216       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HA);
10217       ++r;
10218       roff += 4;
10219       r->r_offset = roff;
10220       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10221       r->r_addend = relative_targ + roff;
10222     }
10223   else
10224     {
10225       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10226         r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10227       else
10228         {
10229           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHEST);
10230           if (((off >> 32) & 0xffff) != 0)
10231             {
10232               ++r;
10233               roff += 4;
10234               r->r_offset = roff;
10235               r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10236               r->r_addend = relative_targ + roff;
10237             }
10238         }
10239       if (((off >> 32) & 0xffffffffULL) != 0)
10240         roff += 4;
10241       if (PPC_HI (off) != 0)
10242         {
10243           ++r;
10244           roff += 4;
10245           r->r_offset = roff;
10246           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGH);
10247           r->r_addend = relative_targ + roff;
10248         }
10249       if (PPC_LO (off) != 0)
10250         {
10251           ++r;
10252           roff += 4;
10253           r->r_offset = roff;
10254           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10255           r->r_addend = relative_targ + roff;
10256         }
10257     }
10258   return r;
10259 }
10260
10261 static bfd_byte *
10262 build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
10263                       bfd_boolean load)
10264 {
10265   uint64_t insn;
10266   if (off - odd + (1ULL << 33) < 1ULL << 34)
10267     {
10268       off -= odd;
10269       if (odd)
10270         {
10271           bfd_put_32 (abfd, NOP, p);
10272           p += 4;
10273         }
10274       if (load)
10275         insn = PLD_R12_PC;
10276       else
10277         insn = PADDI_R12_PC;
10278       insn |= D34 (off);
10279       bfd_put_32 (abfd, insn >> 32, p);
10280       p += 4;
10281       bfd_put_32 (abfd, insn, p);
10282     }
10283   /* The minimum value for paddi is -0x200000000.  The minimum value
10284      for li is -0x8000, which when shifted by 34 and added gives a
10285      minimum value of -0x2000200000000.  The maximum value is
10286      0x1ffffffff+0x7fff<<34 which is 0x2000200000000-1.  */
10287   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10288     {
10289       off -= 8 - odd;
10290       bfd_put_32 (abfd, LI_R11_0 | (HA34 (off) & 0xffff), p);
10291       p += 4;
10292       if (!odd)
10293         {
10294           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10295           p += 4;
10296         }
10297       insn = PADDI_R12_PC | D34 (off);
10298       bfd_put_32 (abfd, insn >> 32, p);
10299       p += 4;
10300       bfd_put_32 (abfd, insn, p);
10301       p += 4;
10302       if (odd)
10303         {
10304           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10305           p += 4;
10306         }
10307       if (load)
10308         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10309       else
10310         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10311     }
10312   else
10313     {
10314       off -= odd + 8;
10315       bfd_put_32 (abfd, LIS_R11 | ((HA34 (off) >> 16) & 0x3fff), p);
10316       p += 4;
10317       bfd_put_32 (abfd, ORI_R11_R11_0 | (HA34 (off) & 0xffff), p);
10318       p += 4;
10319       if (odd)
10320         {
10321           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10322           p += 4;
10323         }
10324       insn = PADDI_R12_PC | D34 (off);
10325       bfd_put_32 (abfd, insn >> 32, p);
10326       p += 4;
10327       bfd_put_32 (abfd, insn, p);
10328       p += 4;
10329       if (!odd)
10330         {
10331           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10332           p += 4;
10333         }
10334       if (load)
10335         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10336       else
10337         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10338     }
10339   p += 4;
10340   return p;
10341 }
10342
10343 static unsigned int
10344 size_powerxx_offset (bfd_vma off, int odd)
10345 {
10346   if (off - odd + (1ULL << 33) < 1ULL << 34)
10347     return odd + 8;
10348   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10349     return 20;
10350   else
10351     return 24;
10352 }
10353
10354 static unsigned int
10355 num_relocs_for_powerxx_offset (bfd_vma off, int odd)
10356 {
10357   if (off - odd + (1ULL << 33) < 1ULL << 34)
10358     return 1;
10359   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10360     return 2;
10361   else
10362     return 3;
10363 }
10364
10365 static Elf_Internal_Rela *
10366 emit_relocs_for_powerxx_offset (struct bfd_link_info *info,
10367                                 Elf_Internal_Rela *r, bfd_vma roff,
10368                                 bfd_vma targ, bfd_vma off, int odd)
10369 {
10370   if (off - odd + (1ULL << 33) < 1ULL << 34)
10371     roff += odd;
10372   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10373     {
10374       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10375       r->r_offset = roff + d_offset;
10376       r->r_addend = targ + 8 - odd - d_offset;
10377       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10378       ++r;
10379       roff += 8 - odd;
10380     }
10381   else
10382     {
10383       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10384       r->r_offset = roff + d_offset;
10385       r->r_addend = targ + 8 + odd - d_offset;
10386       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHESTA34);
10387       ++r;
10388       roff += 4;
10389       r->r_offset = roff + d_offset;
10390       r->r_addend = targ + 4 + odd - d_offset;
10391       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10392       ++r;
10393       roff += 4 + odd;
10394     }
10395   r->r_offset = roff;
10396   r->r_addend = targ;
10397   r->r_info = ELF64_R_INFO (0, R_PPC64_PCREL34);
10398   return r;
10399 }
10400
10401 /* Emit .eh_frame opcode to advance pc by DELTA.  */
10402
10403 static bfd_byte *
10404 eh_advance (bfd *abfd, bfd_byte *eh, unsigned int delta)
10405 {
10406   delta /= 4;
10407   if (delta < 64)
10408     *eh++ = DW_CFA_advance_loc + delta;
10409   else if (delta < 256)
10410     {
10411       *eh++ = DW_CFA_advance_loc1;
10412       *eh++ = delta;
10413     }
10414   else if (delta < 65536)
10415     {
10416       *eh++ = DW_CFA_advance_loc2;
10417       bfd_put_16 (abfd, delta, eh);
10418       eh += 2;
10419     }
10420   else
10421     {
10422       *eh++ = DW_CFA_advance_loc4;
10423       bfd_put_32 (abfd, delta, eh);
10424       eh += 4;
10425     }
10426   return eh;
10427 }
10428
10429 /* Size of required .eh_frame opcode to advance pc by DELTA.  */
10430
10431 static unsigned int
10432 eh_advance_size (unsigned int delta)
10433 {
10434   if (delta < 64 * 4)
10435     /* DW_CFA_advance_loc+[1..63].  */
10436     return 1;
10437   if (delta < 256 * 4)
10438     /* DW_CFA_advance_loc1, byte.  */
10439     return 2;
10440   if (delta < 65536 * 4)
10441     /* DW_CFA_advance_loc2, 2 bytes.  */
10442     return 3;
10443   /* DW_CFA_advance_loc4, 4 bytes.  */
10444   return 5;
10445 }
10446
10447 /* With power7 weakly ordered memory model, it is possible for ld.so
10448    to update a plt entry in one thread and have another thread see a
10449    stale zero toc entry.  To avoid this we need some sort of acquire
10450    barrier in the call stub.  One solution is to make the load of the
10451    toc word seem to appear to depend on the load of the function entry
10452    word.  Another solution is to test for r2 being zero, and branch to
10453    the appropriate glink entry if so.
10454
10455    .    fake dep barrier        compare
10456    .    ld 12,xxx(2)            ld 12,xxx(2)
10457    .    mtctr 12                mtctr 12
10458    .    xor 11,12,12            ld 2,xxx+8(2)
10459    .    add 2,2,11              cmpldi 2,0
10460    .    ld 2,xxx+8(2)           bnectr+
10461    .    bctr                    b <glink_entry>
10462
10463    The solution involving the compare turns out to be faster, so
10464    that's what we use unless the branch won't reach.  */
10465
10466 #define ALWAYS_USE_FAKE_DEP 0
10467 #define ALWAYS_EMIT_R2SAVE 0
10468
10469 static inline unsigned int
10470 plt_stub_size (struct ppc_link_hash_table *htab,
10471                struct ppc_stub_hash_entry *stub_entry,
10472                bfd_vma off)
10473 {
10474   unsigned size;
10475
10476   if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
10477     {
10478       if (htab->powerxx_stubs)
10479         {
10480           bfd_vma start = (stub_entry->stub_offset
10481                            + stub_entry->group->stub_sec->output_offset
10482                            + stub_entry->group->stub_sec->output_section->vma);
10483           if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10484             start += 4;
10485           size = 8 + size_powerxx_offset (off, start & 4);
10486         }
10487       else
10488         size = 8 + size_offset (off - 8);
10489       if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10490         size += 4;
10491       return size;
10492     }
10493
10494   size = 12;
10495   if (ALWAYS_EMIT_R2SAVE
10496       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10497     size += 4;
10498   if (PPC_HA (off) != 0)
10499     size += 4;
10500   if (htab->opd_abi)
10501     {
10502       size += 4;
10503       if (htab->params->plt_static_chain)
10504         size += 4;
10505       if (htab->params->plt_thread_safe
10506           && htab->elf.dynamic_sections_created
10507           && stub_entry->h != NULL
10508           && stub_entry->h->elf.dynindx != -1)
10509         size += 8;
10510       if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10511         size += 4;
10512     }
10513   if (stub_entry->h != NULL
10514       && (stub_entry->h == htab->tls_get_addr_fd
10515           || stub_entry->h == htab->tls_get_addr)
10516       && htab->params->tls_get_addr_opt)
10517     {
10518       size += 7 * 4;
10519       if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10520         size += 6 * 4;
10521     }
10522   return size;
10523 }
10524
10525 /* Depending on the sign of plt_stub_align:
10526    If positive, return the padding to align to a 2**plt_stub_align
10527    boundary.
10528    If negative, if this stub would cross fewer 2**plt_stub_align
10529    boundaries if we align, then return the padding needed to do so.  */
10530
10531 static inline unsigned int
10532 plt_stub_pad (struct ppc_link_hash_table *htab,
10533               struct ppc_stub_hash_entry *stub_entry,
10534               bfd_vma plt_off)
10535 {
10536   int stub_align;
10537   unsigned stub_size;
10538   bfd_vma stub_off = stub_entry->group->stub_sec->size;
10539
10540   if (htab->params->plt_stub_align >= 0)
10541     {
10542       stub_align = 1 << htab->params->plt_stub_align;
10543       if ((stub_off & (stub_align - 1)) != 0)
10544         return stub_align - (stub_off & (stub_align - 1));
10545       return 0;
10546     }
10547
10548   stub_align = 1 << -htab->params->plt_stub_align;
10549   stub_size = plt_stub_size (htab, stub_entry, plt_off);
10550   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10551       > ((stub_size - 1) & -stub_align))
10552     return stub_align - (stub_off & (stub_align - 1));
10553   return 0;
10554 }
10555
10556 /* Build a .plt call stub.  */
10557
10558 static inline bfd_byte *
10559 build_plt_stub (struct ppc_link_hash_table *htab,
10560                 struct ppc_stub_hash_entry *stub_entry,
10561                 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10562 {
10563   bfd *obfd = htab->params->stub_bfd;
10564   bfd_boolean plt_load_toc = htab->opd_abi;
10565   bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10566   bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10567                                  && htab->elf.dynamic_sections_created
10568                                  && stub_entry->h != NULL
10569                                  && stub_entry->h->elf.dynindx != -1);
10570   bfd_boolean use_fake_dep = plt_thread_safe;
10571   bfd_vma cmp_branch_off = 0;
10572
10573   if (!ALWAYS_USE_FAKE_DEP
10574       && plt_load_toc
10575       && plt_thread_safe
10576       && !((stub_entry->h == htab->tls_get_addr_fd
10577             || stub_entry->h == htab->tls_get_addr)
10578            && htab->params->tls_get_addr_opt))
10579     {
10580       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10581       bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10582                           / PLT_ENTRY_SIZE (htab));
10583       bfd_vma glinkoff = GLINK_PLTRESOLVE_SIZE (htab) + pltindex * 8;
10584       bfd_vma to, from;
10585
10586       if (pltindex > 32768)
10587         glinkoff += (pltindex - 32768) * 4;
10588       to = (glinkoff
10589             + htab->glink->output_offset
10590             + htab->glink->output_section->vma);
10591       from = (p - stub_entry->group->stub_sec->contents
10592               + 4 * (ALWAYS_EMIT_R2SAVE
10593                      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10594               + 4 * (PPC_HA (offset) != 0)
10595               + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10596                      != PPC_HA (offset))
10597               + 4 * (plt_static_chain != 0)
10598               + 20
10599               + stub_entry->group->stub_sec->output_offset
10600               + stub_entry->group->stub_sec->output_section->vma);
10601       cmp_branch_off = to - from;
10602       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10603     }
10604
10605   if (PPC_HA (offset) != 0)
10606     {
10607       if (r != NULL)
10608         {
10609           if (ALWAYS_EMIT_R2SAVE
10610               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10611             r[0].r_offset += 4;
10612           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10613           r[1].r_offset = r[0].r_offset + 4;
10614           r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10615           r[1].r_addend = r[0].r_addend;
10616           if (plt_load_toc)
10617             {
10618               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10619                 {
10620                   r[2].r_offset = r[1].r_offset + 4;
10621                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10622                   r[2].r_addend = r[0].r_addend;
10623                 }
10624               else
10625                 {
10626                   r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10627                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10628                   r[2].r_addend = r[0].r_addend + 8;
10629                   if (plt_static_chain)
10630                     {
10631                       r[3].r_offset = r[2].r_offset + 4;
10632                       r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10633                       r[3].r_addend = r[0].r_addend + 16;
10634                     }
10635                 }
10636             }
10637         }
10638       if (ALWAYS_EMIT_R2SAVE
10639           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10640         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
10641       if (plt_load_toc)
10642         {
10643           bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p), p += 4;
10644           bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),  p += 4;
10645         }
10646       else
10647         {
10648           bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4;
10649           bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p),  p += 4;
10650         }
10651       if (plt_load_toc
10652           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10653         {
10654           bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p), p += 4;
10655           offset = 0;
10656         }
10657       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10658       if (plt_load_toc)
10659         {
10660           if (use_fake_dep)
10661             {
10662               bfd_put_32 (obfd, XOR_R2_R12_R12, p),             p += 4;
10663               bfd_put_32 (obfd, ADD_R11_R11_R2, p),             p += 4;
10664             }
10665           bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
10666           if (plt_static_chain)
10667             bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
10668         }
10669     }
10670   else
10671     {
10672       if (r != NULL)
10673         {
10674           if (ALWAYS_EMIT_R2SAVE
10675               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10676             r[0].r_offset += 4;
10677           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10678           if (plt_load_toc)
10679             {
10680               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10681                 {
10682                   r[1].r_offset = r[0].r_offset + 4;
10683                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
10684                   r[1].r_addend = r[0].r_addend;
10685                 }
10686               else
10687                 {
10688                   r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
10689                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10690                   r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
10691                   if (plt_static_chain)
10692                     {
10693                       r[2].r_offset = r[1].r_offset + 4;
10694                       r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10695                       r[2].r_addend = r[0].r_addend + 8;
10696                     }
10697                 }
10698             }
10699         }
10700       if (ALWAYS_EMIT_R2SAVE
10701           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10702         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
10703       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),       p += 4;
10704       if (plt_load_toc
10705           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10706         {
10707           bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),   p += 4;
10708           offset = 0;
10709         }
10710       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10711       if (plt_load_toc)
10712         {
10713           if (use_fake_dep)
10714             {
10715               bfd_put_32 (obfd, XOR_R11_R12_R12, p),            p += 4;
10716               bfd_put_32 (obfd, ADD_R2_R2_R11, p),              p += 4;
10717             }
10718           if (plt_static_chain)
10719             bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
10720           bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
10721         }
10722     }
10723   if (plt_load_toc && plt_thread_safe && !use_fake_dep)
10724     {
10725       bfd_put_32 (obfd, CMPLDI_R2_0, p),                        p += 4;
10726       bfd_put_32 (obfd, BNECTR_P4, p),                          p += 4;
10727       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
10728     }
10729   else
10730     bfd_put_32 (obfd, BCTR, p),                                 p += 4;
10731   return p;
10732 }
10733
10734 /* Build a special .plt call stub for __tls_get_addr.  */
10735
10736 #define LD_R11_0R3      0xe9630000
10737 #define LD_R12_0R3      0xe9830000
10738 #define MR_R0_R3        0x7c601b78
10739 #define CMPDI_R11_0     0x2c2b0000
10740 #define ADD_R3_R12_R13  0x7c6c6a14
10741 #define BEQLR           0x4d820020
10742 #define MR_R3_R0        0x7c030378
10743 #define STD_R11_0R1     0xf9610000
10744 #define BCTRL           0x4e800421
10745 #define LD_R11_0R1      0xe9610000
10746 #define MTLR_R11        0x7d6803a6
10747
10748 static inline bfd_byte *
10749 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
10750                          struct ppc_stub_hash_entry *stub_entry,
10751                          bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10752 {
10753   bfd *obfd = htab->params->stub_bfd;
10754   bfd_byte *loc = p;
10755
10756   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),         p += 4;
10757   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),         p += 4;
10758   bfd_put_32 (obfd, MR_R0_R3, p),               p += 4;
10759   bfd_put_32 (obfd, CMPDI_R11_0, p),            p += 4;
10760   bfd_put_32 (obfd, ADD_R3_R12_R13, p),         p += 4;
10761   bfd_put_32 (obfd, BEQLR, p),                  p += 4;
10762   bfd_put_32 (obfd, MR_R3_R0, p),               p += 4;
10763   if (r != NULL)
10764     r[0].r_offset += 7 * 4;
10765   if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
10766     return build_plt_stub (htab, stub_entry, p, offset, r);
10767
10768   bfd_put_32 (obfd, MFLR_R11, p),               p += 4;
10769   bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10770
10771   if (r != NULL)
10772     r[0].r_offset += 2 * 4;
10773   p = build_plt_stub (htab, stub_entry, p, offset, r);
10774   bfd_put_32 (obfd, BCTRL, p - 4);
10775
10776   bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p),     p += 4;
10777   bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10778   bfd_put_32 (obfd, MTLR_R11, p),               p += 4;
10779   bfd_put_32 (obfd, BLR, p),                    p += 4;
10780
10781   if (htab->glink_eh_frame != NULL
10782       && htab->glink_eh_frame->size != 0)
10783     {
10784       bfd_byte *base, *eh;
10785       unsigned int lr_used, delta;
10786
10787       base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
10788       eh = base + stub_entry->group->eh_size;
10789       lr_used = stub_entry->stub_offset + (p - 20 - loc);
10790       delta = lr_used - stub_entry->group->lr_restore;
10791       stub_entry->group->lr_restore = lr_used + 16;
10792       eh = eh_advance (htab->elf.dynobj, eh, delta);
10793       *eh++ = DW_CFA_offset_extended_sf;
10794       *eh++ = 65;
10795       *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
10796       *eh++ = DW_CFA_advance_loc + 4;
10797       *eh++ = DW_CFA_restore_extended;
10798       *eh++ = 65;
10799       stub_entry->group->eh_size = eh - base;
10800     }
10801   return p;
10802 }
10803
10804 static Elf_Internal_Rela *
10805 get_relocs (asection *sec, int count)
10806 {
10807   Elf_Internal_Rela *relocs;
10808   struct bfd_elf_section_data *elfsec_data;
10809
10810   elfsec_data = elf_section_data (sec);
10811   relocs = elfsec_data->relocs;
10812   if (relocs == NULL)
10813     {
10814       bfd_size_type relsize;
10815       relsize = sec->reloc_count * sizeof (*relocs);
10816       relocs = bfd_alloc (sec->owner, relsize);
10817       if (relocs == NULL)
10818         return NULL;
10819       elfsec_data->relocs = relocs;
10820       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
10821                                           sizeof (Elf_Internal_Shdr));
10822       if (elfsec_data->rela.hdr == NULL)
10823         return NULL;
10824       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
10825                                         * sizeof (Elf64_External_Rela));
10826       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
10827       sec->reloc_count = 0;
10828     }
10829   relocs += sec->reloc_count;
10830   sec->reloc_count += count;
10831   return relocs;
10832 }
10833
10834 /* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
10835    forms, to the equivalent relocs against the global symbol given by
10836    STUB_ENTRY->H.  */
10837
10838 static bfd_boolean
10839 use_global_in_relocs (struct ppc_link_hash_table *htab,
10840                       struct ppc_stub_hash_entry *stub_entry,
10841                       Elf_Internal_Rela *r, unsigned int num_rel)
10842 {
10843   struct elf_link_hash_entry **hashes;
10844   unsigned long symndx;
10845   struct ppc_link_hash_entry *h;
10846   bfd_vma symval;
10847
10848   /* Relocs are always against symbols in their own object file.  Fake
10849      up global sym hashes for the stub bfd (which has no symbols).  */
10850   hashes = elf_sym_hashes (htab->params->stub_bfd);
10851   if (hashes == NULL)
10852     {
10853       bfd_size_type hsize;
10854
10855       /* When called the first time, stub_globals will contain the
10856          total number of symbols seen during stub sizing.  After
10857          allocating, stub_globals is used as an index to fill the
10858          hashes array.  */
10859       hsize = (htab->stub_globals + 1) * sizeof (*hashes);
10860       hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
10861       if (hashes == NULL)
10862         return FALSE;
10863       elf_sym_hashes (htab->params->stub_bfd) = hashes;
10864       htab->stub_globals = 1;
10865     }
10866   symndx = htab->stub_globals++;
10867   h = stub_entry->h;
10868   hashes[symndx] = &h->elf;
10869   if (h->oh != NULL && h->oh->is_func)
10870     h = ppc_follow_link (h->oh);
10871   BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
10872               || h->elf.root.type == bfd_link_hash_defweak);
10873   symval = (h->elf.root.u.def.value
10874             + h->elf.root.u.def.section->output_offset
10875             + h->elf.root.u.def.section->output_section->vma);
10876   while (num_rel-- != 0)
10877     {
10878       r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
10879       if (h->elf.root.u.def.section != stub_entry->target_section)
10880         {
10881           /* H is an opd symbol.  The addend must be zero, and the
10882              branch reloc is the only one we can convert.  */
10883           r->r_addend = 0;
10884           break;
10885         }
10886       else
10887         r->r_addend -= symval;
10888       --r;
10889     }
10890   return TRUE;
10891 }
10892
10893 static bfd_vma
10894 get_r2off (struct bfd_link_info *info,
10895            struct ppc_stub_hash_entry *stub_entry)
10896 {
10897   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10898   bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
10899
10900   if (r2off == 0)
10901     {
10902       /* Support linking -R objects.  Get the toc pointer from the
10903          opd entry.  */
10904       char buf[8];
10905       if (!htab->opd_abi)
10906         return r2off;
10907       asection *opd = stub_entry->h->elf.root.u.def.section;
10908       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
10909
10910       if (strcmp (opd->name, ".opd") != 0
10911           || opd->reloc_count != 0)
10912         {
10913           info->callbacks->einfo
10914             (_("%P: cannot find opd entry toc for `%pT'\n"),
10915              stub_entry->h->elf.root.root.string);
10916           bfd_set_error (bfd_error_bad_value);
10917           return (bfd_vma) -1;
10918         }
10919       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
10920         return (bfd_vma) -1;
10921       r2off = bfd_get_64 (opd->owner, buf);
10922       r2off -= elf_gp (info->output_bfd);
10923     }
10924   r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
10925   return r2off;
10926 }
10927
10928 static bfd_boolean
10929 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10930 {
10931   struct ppc_stub_hash_entry *stub_entry;
10932   struct ppc_branch_hash_entry *br_entry;
10933   struct bfd_link_info *info;
10934   struct ppc_link_hash_table *htab;
10935   bfd_byte *loc;
10936   bfd_byte *p, *relp;
10937   bfd_vma targ, off;
10938   Elf_Internal_Rela *r;
10939   asection *plt;
10940   int num_rel;
10941   int odd;
10942
10943   /* Massage our args to the form they really have.  */
10944   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10945   info = in_arg;
10946
10947   htab = ppc_hash_table (info);
10948   if (htab == NULL)
10949     return FALSE;
10950
10951   BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
10952   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
10953
10954   htab->stub_count[stub_entry->stub_type - 1] += 1;
10955   switch (stub_entry->stub_type)
10956     {
10957     case ppc_stub_long_branch:
10958     case ppc_stub_long_branch_r2off:
10959       /* Branches are relative.  This is where we are going to.  */
10960       targ = (stub_entry->target_value
10961               + stub_entry->target_section->output_offset
10962               + stub_entry->target_section->output_section->vma);
10963       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
10964
10965       /* And this is where we are coming from.  */
10966       off = (stub_entry->stub_offset
10967              + stub_entry->group->stub_sec->output_offset
10968              + stub_entry->group->stub_sec->output_section->vma);
10969       off = targ - off;
10970
10971       p = loc;
10972       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10973         {
10974           bfd_vma r2off = get_r2off (info, stub_entry);
10975
10976           if (r2off == (bfd_vma) -1)
10977             {
10978               htab->stub_error = TRUE;
10979               return FALSE;
10980             }
10981           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
10982           p += 4;
10983           if (PPC_HA (r2off) != 0)
10984             {
10985               bfd_put_32 (htab->params->stub_bfd,
10986                           ADDIS_R2_R2 | PPC_HA (r2off), p);
10987               p += 4;
10988             }
10989           if (PPC_LO (r2off) != 0)
10990             {
10991               bfd_put_32 (htab->params->stub_bfd,
10992                           ADDI_R2_R2 | PPC_LO (r2off), p);
10993               p += 4;
10994             }
10995           off -= p - loc;
10996         }
10997       bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
10998       p += 4;
10999
11000       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11001         {
11002           _bfd_error_handler
11003             (_("long branch stub `%s' offset overflow"),
11004              stub_entry->root.string);
11005           htab->stub_error = TRUE;
11006           return FALSE;
11007         }
11008
11009       if (info->emitrelocations)
11010         {
11011           r = get_relocs (stub_entry->group->stub_sec, 1);
11012           if (r == NULL)
11013             return FALSE;
11014           r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
11015           r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11016           r->r_addend = targ;
11017           if (stub_entry->h != NULL
11018               && !use_global_in_relocs (htab, stub_entry, r, 1))
11019             return FALSE;
11020         }
11021       break;
11022
11023     case ppc_stub_plt_branch:
11024     case ppc_stub_plt_branch_r2off:
11025       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11026                                          stub_entry->root.string + 9,
11027                                          FALSE, FALSE);
11028       if (br_entry == NULL)
11029         {
11030           _bfd_error_handler (_("can't find branch stub `%s'"),
11031                               stub_entry->root.string);
11032           htab->stub_error = TRUE;
11033           return FALSE;
11034         }
11035
11036       targ = (stub_entry->target_value
11037               + stub_entry->target_section->output_offset
11038               + stub_entry->target_section->output_section->vma);
11039       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11040         targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11041
11042       bfd_put_64 (htab->brlt->owner, targ,
11043                   htab->brlt->contents + br_entry->offset);
11044
11045       if (br_entry->iter == htab->stub_iteration)
11046         {
11047           br_entry->iter = 0;
11048
11049           if (htab->relbrlt != NULL)
11050             {
11051               /* Create a reloc for the branch lookup table entry.  */
11052               Elf_Internal_Rela rela;
11053               bfd_byte *rl;
11054
11055               rela.r_offset = (br_entry->offset
11056                                + htab->brlt->output_offset
11057                                + htab->brlt->output_section->vma);
11058               rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11059               rela.r_addend = targ;
11060
11061               rl = htab->relbrlt->contents;
11062               rl += (htab->relbrlt->reloc_count++
11063                      * sizeof (Elf64_External_Rela));
11064               bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
11065             }
11066           else if (info->emitrelocations)
11067             {
11068               r = get_relocs (htab->brlt, 1);
11069               if (r == NULL)
11070                 return FALSE;
11071               /* brlt, being SEC_LINKER_CREATED does not go through the
11072                  normal reloc processing.  Symbols and offsets are not
11073                  translated from input file to output file form, so
11074                  set up the offset per the output file.  */
11075               r->r_offset = (br_entry->offset
11076                              + htab->brlt->output_offset
11077                              + htab->brlt->output_section->vma);
11078               r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11079               r->r_addend = targ;
11080             }
11081         }
11082
11083       targ = (br_entry->offset
11084               + htab->brlt->output_offset
11085               + htab->brlt->output_section->vma);
11086
11087       off = (elf_gp (info->output_bfd)
11088              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11089       off = targ - off;
11090
11091       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11092         {
11093           info->callbacks->einfo
11094             (_("%P: linkage table error against `%pT'\n"),
11095              stub_entry->root.string);
11096           bfd_set_error (bfd_error_bad_value);
11097           htab->stub_error = TRUE;
11098           return FALSE;
11099         }
11100
11101       if (info->emitrelocations)
11102         {
11103           r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11104           if (r == NULL)
11105             return FALSE;
11106           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11107           if (bfd_big_endian (info->output_bfd))
11108             r[0].r_offset += 2;
11109           if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11110             r[0].r_offset += 4;
11111           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11112           r[0].r_addend = targ;
11113           if (PPC_HA (off) != 0)
11114             {
11115               r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11116               r[1].r_offset = r[0].r_offset + 4;
11117               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11118               r[1].r_addend = r[0].r_addend;
11119             }
11120         }
11121
11122       p = loc;
11123       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11124         {
11125           if (PPC_HA (off) != 0)
11126             {
11127               bfd_put_32 (htab->params->stub_bfd,
11128                           ADDIS_R12_R2 | PPC_HA (off), p);
11129               p += 4;
11130               bfd_put_32 (htab->params->stub_bfd,
11131                           LD_R12_0R12 | PPC_LO (off), p);
11132             }
11133           else
11134             bfd_put_32 (htab->params->stub_bfd,
11135                         LD_R12_0R2 | PPC_LO (off), p);
11136         }
11137       else
11138         {
11139           bfd_vma r2off = get_r2off (info, stub_entry);
11140
11141           if (r2off == (bfd_vma) -1)
11142             {
11143               htab->stub_error = TRUE;
11144               return FALSE;
11145             }
11146
11147           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11148           p += 4;
11149           if (PPC_HA (off) != 0)
11150             {
11151               bfd_put_32 (htab->params->stub_bfd,
11152                           ADDIS_R12_R2 | PPC_HA (off), p);
11153               p += 4;
11154               bfd_put_32 (htab->params->stub_bfd,
11155                           LD_R12_0R12 | PPC_LO (off), p);
11156             }
11157           else
11158             bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
11159
11160           if (PPC_HA (r2off) != 0)
11161             {
11162               p += 4;
11163               bfd_put_32 (htab->params->stub_bfd,
11164                           ADDIS_R2_R2 | PPC_HA (r2off), p);
11165             }
11166           if (PPC_LO (r2off) != 0)
11167             {
11168               p += 4;
11169               bfd_put_32 (htab->params->stub_bfd,
11170                           ADDI_R2_R2 | PPC_LO (r2off), p);
11171             }
11172         }
11173       p += 4;
11174       bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11175       p += 4;
11176       bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11177       p += 4;
11178       break;
11179
11180     case ppc_stub_long_branch_notoc:
11181     case ppc_stub_long_branch_both:
11182     case ppc_stub_plt_branch_notoc:
11183     case ppc_stub_plt_branch_both:
11184     case ppc_stub_plt_call_notoc:
11185     case ppc_stub_plt_call_both:
11186       p = loc;
11187       off = (stub_entry->stub_offset
11188              + stub_entry->group->stub_sec->output_offset
11189              + stub_entry->group->stub_sec->output_section->vma);
11190       if (stub_entry->stub_type == ppc_stub_long_branch_both
11191           || stub_entry->stub_type == ppc_stub_plt_branch_both
11192           || stub_entry->stub_type == ppc_stub_plt_call_both)
11193         {
11194           off += 4;
11195           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11196           p += 4;
11197         }
11198       if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
11199         {
11200           targ = stub_entry->plt_ent->plt.offset & ~1;
11201           if (targ >= (bfd_vma) -2)
11202             abort ();
11203
11204           plt = htab->elf.splt;
11205           if (!htab->elf.dynamic_sections_created
11206               || stub_entry->h == NULL
11207               || stub_entry->h->elf.dynindx == -1)
11208             {
11209               if (stub_entry->symtype == STT_GNU_IFUNC)
11210                 plt = htab->elf.iplt;
11211               else
11212                 plt = htab->pltlocal;
11213             }
11214           targ += plt->output_offset + plt->output_section->vma;
11215         }
11216       else
11217         targ = (stub_entry->target_value
11218                 + stub_entry->target_section->output_offset
11219                 + stub_entry->target_section->output_section->vma);
11220       odd = off & 4;
11221       off = targ - off;
11222
11223       relp = p;
11224       num_rel = 0;
11225       if (htab->powerxx_stubs)
11226         {
11227           bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
11228           p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
11229         }
11230       else
11231         {
11232           /* The notoc stubs calculate their target (either a PLT entry or
11233              the global entry point of a function) relative to the PC
11234              returned by the "bcl" two instructions past the start of the
11235              sequence emitted by build_offset.  The offset is therefore 8
11236              less than calculated from the start of the sequence.  */
11237           off -= 8;
11238           p = build_offset (htab->params->stub_bfd, p, off,
11239                             stub_entry->stub_type >= ppc_stub_plt_call_notoc);
11240         }
11241
11242       if (stub_entry->stub_type <= ppc_stub_long_branch_both)
11243         {
11244           bfd_vma from;
11245           num_rel = 1;
11246           from = (stub_entry->stub_offset
11247                   + stub_entry->group->stub_sec->output_offset
11248                   + stub_entry->group->stub_sec->output_section->vma
11249                   + (p - loc));
11250           bfd_put_32 (htab->params->stub_bfd,
11251                       B_DOT | ((targ - from) & 0x3fffffc), p);
11252         }
11253       else
11254         {
11255           bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11256           p += 4;
11257           bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11258         }
11259       p += 4;
11260
11261       if (info->emitrelocations)
11262         {
11263           bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
11264           if (htab->powerxx_stubs)
11265             num_rel += num_relocs_for_powerxx_offset (off, odd);
11266           else
11267             {
11268               num_rel += num_relocs_for_offset (off);
11269               roff += 16;
11270             }
11271           r = get_relocs (stub_entry->group->stub_sec, num_rel);
11272           if (r == NULL)
11273             return FALSE;
11274           if (htab->powerxx_stubs)
11275             r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd);
11276           else
11277             r = emit_relocs_for_offset (info, r, roff, targ, off);
11278           if (stub_entry->stub_type == ppc_stub_long_branch_notoc
11279               || stub_entry->stub_type == ppc_stub_long_branch_both)
11280             {
11281               ++r;
11282               roff = p - 4 - stub_entry->group->stub_sec->contents;
11283               r->r_offset = roff;
11284               r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11285               r->r_addend = targ;
11286               if (stub_entry->h != NULL
11287                   && !use_global_in_relocs (htab, stub_entry, r, num_rel))
11288                 return FALSE;
11289             }
11290         }
11291
11292       if (!htab->powerxx_stubs
11293           && htab->glink_eh_frame != NULL
11294           && htab->glink_eh_frame->size != 0)
11295         {
11296           bfd_byte *base, *eh;
11297           unsigned int lr_used, delta;
11298
11299           base = (htab->glink_eh_frame->contents
11300                   + stub_entry->group->eh_base + 17);
11301           eh = base + stub_entry->group->eh_size;
11302           lr_used = stub_entry->stub_offset + 8;
11303           if (stub_entry->stub_type == ppc_stub_long_branch_both
11304               || stub_entry->stub_type == ppc_stub_plt_branch_both
11305               || stub_entry->stub_type == ppc_stub_plt_call_both)
11306             lr_used += 4;
11307           delta = lr_used - stub_entry->group->lr_restore;
11308           stub_entry->group->lr_restore = lr_used + 8;
11309           eh = eh_advance (htab->elf.dynobj, eh, delta);
11310           *eh++ = DW_CFA_register;
11311           *eh++ = 65;
11312           *eh++ = 12;
11313           *eh++ = DW_CFA_advance_loc + 2;
11314           *eh++ = DW_CFA_restore_extended;
11315           *eh++ = 65;
11316           stub_entry->group->eh_size = eh - base;
11317         }
11318       break;
11319
11320     case ppc_stub_plt_call:
11321     case ppc_stub_plt_call_r2save:
11322       if (stub_entry->h != NULL
11323           && stub_entry->h->is_func_descriptor
11324           && stub_entry->h->oh != NULL)
11325         {
11326           struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11327
11328           /* If the old-ABI "dot-symbol" is undefined make it weak so
11329              we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.  */
11330           if (fh->elf.root.type == bfd_link_hash_undefined
11331               && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11332                   || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11333             fh->elf.root.type = bfd_link_hash_undefweak;
11334         }
11335
11336       /* Now build the stub.  */
11337       targ = stub_entry->plt_ent->plt.offset & ~1;
11338       if (targ >= (bfd_vma) -2)
11339         abort ();
11340
11341       plt = htab->elf.splt;
11342       if (!htab->elf.dynamic_sections_created
11343           || stub_entry->h == NULL
11344           || stub_entry->h->elf.dynindx == -1)
11345         {
11346           if (stub_entry->symtype == STT_GNU_IFUNC)
11347             plt = htab->elf.iplt;
11348           else
11349             plt = htab->pltlocal;
11350         }
11351       targ += plt->output_offset + plt->output_section->vma;
11352
11353       off = (elf_gp (info->output_bfd)
11354              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11355       off = targ - off;
11356
11357       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11358         {
11359           info->callbacks->einfo
11360             /* xgettext:c-format */
11361             (_("%P: linkage table error against `%pT'\n"),
11362              stub_entry->h != NULL
11363              ? stub_entry->h->elf.root.root.string
11364              : "<local sym>");
11365           bfd_set_error (bfd_error_bad_value);
11366           htab->stub_error = TRUE;
11367           return FALSE;
11368         }
11369
11370       r = NULL;
11371       if (info->emitrelocations)
11372         {
11373           r = get_relocs (stub_entry->group->stub_sec,
11374                           ((PPC_HA (off) != 0)
11375                            + (htab->opd_abi
11376                               ? 2 + (htab->params->plt_static_chain
11377                                      && PPC_HA (off + 16) == PPC_HA (off))
11378                               : 1)));
11379           if (r == NULL)
11380             return FALSE;
11381           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11382           if (bfd_big_endian (info->output_bfd))
11383             r[0].r_offset += 2;
11384           r[0].r_addend = targ;
11385         }
11386       if (stub_entry->h != NULL
11387           && (stub_entry->h == htab->tls_get_addr_fd
11388               || stub_entry->h == htab->tls_get_addr)
11389           && htab->params->tls_get_addr_opt)
11390         p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11391       else
11392         p = build_plt_stub (htab, stub_entry, loc, off, r);
11393       break;
11394
11395     case ppc_stub_save_res:
11396       return TRUE;
11397
11398     default:
11399       BFD_FAIL ();
11400       return FALSE;
11401     }
11402
11403   stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
11404
11405   if (htab->params->emit_stub_syms)
11406     {
11407       struct elf_link_hash_entry *h;
11408       size_t len1, len2;
11409       char *name;
11410       const char *const stub_str[] = { "long_branch",
11411                                        "long_branch",
11412                                        "long_branch",
11413                                        "long_branch",
11414                                        "plt_branch",
11415                                        "plt_branch",
11416                                        "plt_branch",
11417                                        "plt_branch",
11418                                        "plt_call",
11419                                        "plt_call",
11420                                        "plt_call",
11421                                        "plt_call" };
11422
11423       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11424       len2 = strlen (stub_entry->root.string);
11425       name = bfd_malloc (len1 + len2 + 2);
11426       if (name == NULL)
11427         return FALSE;
11428       memcpy (name, stub_entry->root.string, 9);
11429       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11430       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11431       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11432       if (h == NULL)
11433         return FALSE;
11434       if (h->root.type == bfd_link_hash_new)
11435         {
11436           h->root.type = bfd_link_hash_defined;
11437           h->root.u.def.section = stub_entry->group->stub_sec;
11438           h->root.u.def.value = stub_entry->stub_offset;
11439           h->ref_regular = 1;
11440           h->def_regular = 1;
11441           h->ref_regular_nonweak = 1;
11442           h->forced_local = 1;
11443           h->non_elf = 0;
11444           h->root.linker_def = 1;
11445         }
11446     }
11447
11448   return TRUE;
11449 }
11450
11451 /* As above, but don't actually build the stub.  Just bump offset so
11452    we know stub section sizes, and select plt_branch stubs where
11453    long_branch stubs won't do.  */
11454
11455 static bfd_boolean
11456 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11457 {
11458   struct ppc_stub_hash_entry *stub_entry;
11459   struct bfd_link_info *info;
11460   struct ppc_link_hash_table *htab;
11461   asection *plt;
11462   bfd_vma targ, off, r2off;
11463   unsigned int size, extra, lr_used, delta, odd;
11464
11465   /* Massage our args to the form they really have.  */
11466   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11467   info = in_arg;
11468
11469   htab = ppc_hash_table (info);
11470   if (htab == NULL)
11471     return FALSE;
11472
11473   /* Make a note of the offset within the stubs for this entry.  */
11474   stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11475
11476   if (stub_entry->h != NULL
11477       && stub_entry->h->save_res
11478       && stub_entry->h->elf.root.type == bfd_link_hash_defined
11479       && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11480     {
11481       /* Don't make stubs to out-of-line register save/restore
11482          functions.  Instead, emit copies of the functions.  */
11483       stub_entry->group->needs_save_res = 1;
11484       stub_entry->stub_type = ppc_stub_save_res;
11485       return TRUE;
11486     }
11487
11488   switch (stub_entry->stub_type)
11489     {
11490     case ppc_stub_plt_branch:
11491     case ppc_stub_plt_branch_r2off:
11492       /* Reset the stub type from the plt branch variant in case we now
11493          can reach with a shorter stub.  */
11494       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11495       /* Fall through.  */
11496     case ppc_stub_long_branch:
11497     case ppc_stub_long_branch_r2off:
11498       targ = (stub_entry->target_value
11499               + stub_entry->target_section->output_offset
11500               + stub_entry->target_section->output_section->vma);
11501       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11502       off = (stub_entry->stub_offset
11503              + stub_entry->group->stub_sec->output_offset
11504              + stub_entry->group->stub_sec->output_section->vma);
11505
11506       size = 4;
11507       r2off = 0;
11508       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11509         {
11510           r2off = get_r2off (info, stub_entry);
11511           if (r2off == (bfd_vma) -1)
11512             {
11513               htab->stub_error = TRUE;
11514               return FALSE;
11515             }
11516           size = 8;
11517           if (PPC_HA (r2off) != 0)
11518             size += 4;
11519           if (PPC_LO (r2off) != 0)
11520             size += 4;
11521           off += size - 4;
11522         }
11523       off = targ - off;
11524
11525       /* If the branch offset is too big, use a ppc_stub_plt_branch.
11526          Do the same for -R objects without function descriptors.  */
11527       if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
11528            && r2off == 0
11529            && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
11530           || off + (1 << 25) >= (bfd_vma) (1 << 26))
11531         {
11532           struct ppc_branch_hash_entry *br_entry;
11533
11534           br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11535                                              stub_entry->root.string + 9,
11536                                              TRUE, FALSE);
11537           if (br_entry == NULL)
11538             {
11539               _bfd_error_handler (_("can't build branch stub `%s'"),
11540                                   stub_entry->root.string);
11541               htab->stub_error = TRUE;
11542               return FALSE;
11543             }
11544
11545           if (br_entry->iter != htab->stub_iteration)
11546             {
11547               br_entry->iter = htab->stub_iteration;
11548               br_entry->offset = htab->brlt->size;
11549               htab->brlt->size += 8;
11550
11551               if (htab->relbrlt != NULL)
11552                 htab->relbrlt->size += sizeof (Elf64_External_Rela);
11553               else if (info->emitrelocations)
11554                 {
11555                   htab->brlt->reloc_count += 1;
11556                   htab->brlt->flags |= SEC_RELOC;
11557                 }
11558             }
11559
11560           targ = (br_entry->offset
11561                   + htab->brlt->output_offset
11562                   + htab->brlt->output_section->vma);
11563           off = (elf_gp (info->output_bfd)
11564                  + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11565           off = targ - off;
11566
11567           if (info->emitrelocations)
11568             {
11569               stub_entry->group->stub_sec->reloc_count
11570                 += 1 + (PPC_HA (off) != 0);
11571               stub_entry->group->stub_sec->flags |= SEC_RELOC;
11572             }
11573
11574           stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
11575           if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11576             {
11577               size = 12;
11578               if (PPC_HA (off) != 0)
11579                 size = 16;
11580             }
11581           else
11582             {
11583               size = 16;
11584               if (PPC_HA (off) != 0)
11585                 size += 4;
11586
11587               if (PPC_HA (r2off) != 0)
11588                 size += 4;
11589               if (PPC_LO (r2off) != 0)
11590                 size += 4;
11591             }
11592         }
11593       else if (info->emitrelocations)
11594         {
11595           stub_entry->group->stub_sec->reloc_count += 1;
11596           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11597         }
11598       break;
11599
11600     case ppc_stub_plt_branch_notoc:
11601     case ppc_stub_plt_branch_both:
11602       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11603       /* Fall through.  */
11604     case ppc_stub_long_branch_notoc:
11605     case ppc_stub_long_branch_both:
11606       off = (stub_entry->stub_offset
11607              + stub_entry->group->stub_sec->output_offset
11608              + stub_entry->group->stub_sec->output_section->vma);
11609       size = 0;
11610       if (stub_entry->stub_type == ppc_stub_long_branch_both)
11611         size = 4;
11612       off += size;
11613       targ = (stub_entry->target_value
11614               + stub_entry->target_section->output_offset
11615               + stub_entry->target_section->output_section->vma);
11616       odd = off & 4;
11617       off = targ - off;
11618
11619       if (info->emitrelocations)
11620         {
11621           unsigned int num_rel;
11622           if (htab->powerxx_stubs)
11623             num_rel = num_relocs_for_powerxx_offset (off, odd);
11624           else
11625             num_rel = num_relocs_for_offset (off - 8);
11626           stub_entry->group->stub_sec->reloc_count += num_rel;
11627           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11628         }
11629
11630       if (htab->powerxx_stubs)
11631         extra = size_powerxx_offset (off, odd);
11632       else
11633         extra = size_offset (off - 8);
11634       /* Include branch insn plus those in the offset sequence.  */
11635       size += 4 + extra;
11636       /* The branch insn is at the end, or "extra" bytes along.  So
11637          its offset will be "extra" bytes less that that already
11638          calculated.  */
11639       off -= extra;
11640
11641       if (!htab->powerxx_stubs)
11642         {
11643           /* After the bcl, lr has been modified so we need to emit
11644              .eh_frame info saying the return address is in r12.  */
11645           lr_used = stub_entry->stub_offset + 8;
11646           if (stub_entry->stub_type == ppc_stub_long_branch_both)
11647             lr_used += 4;
11648           /* The eh_frame info will consist of a DW_CFA_advance_loc or
11649              variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11650              DW_CFA_restore_extended 65.  */
11651           delta = lr_used - stub_entry->group->lr_restore;
11652           stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11653           stub_entry->group->lr_restore = lr_used + 8;
11654         }
11655
11656       /* If the branch can't reach, use a plt_branch.  */
11657       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11658         {
11659           stub_entry->stub_type += (ppc_stub_plt_branch_notoc
11660                                     - ppc_stub_long_branch_notoc);
11661           size += 4;
11662         }
11663       else if (info->emitrelocations)
11664         stub_entry->group->stub_sec->reloc_count +=1;
11665       break;
11666
11667     case ppc_stub_plt_call_notoc:
11668     case ppc_stub_plt_call_both:
11669       off = (stub_entry->stub_offset
11670              + stub_entry->group->stub_sec->output_offset
11671              + stub_entry->group->stub_sec->output_section->vma);
11672       if (stub_entry->stub_type == ppc_stub_plt_call_both)
11673         off += 4;
11674       targ = stub_entry->plt_ent->plt.offset & ~1;
11675       if (targ >= (bfd_vma) -2)
11676         abort ();
11677
11678       plt = htab->elf.splt;
11679       if (!htab->elf.dynamic_sections_created
11680           || stub_entry->h == NULL
11681           || stub_entry->h->elf.dynindx == -1)
11682         {
11683           if (stub_entry->symtype == STT_GNU_IFUNC)
11684             plt = htab->elf.iplt;
11685           else
11686             plt = htab->pltlocal;
11687         }
11688       targ += plt->output_offset + plt->output_section->vma;
11689       odd = off & 4;
11690       off = targ - off;
11691
11692       if (htab->params->plt_stub_align != 0)
11693         {
11694           unsigned pad = plt_stub_pad (htab, stub_entry, off);
11695
11696           stub_entry->group->stub_sec->size += pad;
11697           stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11698           off -= pad;
11699         }
11700
11701       if (info->emitrelocations)
11702         {
11703           unsigned int num_rel;
11704           if (htab->powerxx_stubs)
11705             num_rel = num_relocs_for_powerxx_offset (off, odd);
11706           else
11707             num_rel = num_relocs_for_offset (off - 8);
11708           stub_entry->group->stub_sec->reloc_count += num_rel;
11709           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11710         }
11711
11712       size = plt_stub_size (htab, stub_entry, off);
11713
11714       if (!htab->powerxx_stubs)
11715         {
11716           /* After the bcl, lr has been modified so we need to emit
11717              .eh_frame info saying the return address is in r12.  */
11718           lr_used = stub_entry->stub_offset + 8;
11719           if (stub_entry->stub_type == ppc_stub_plt_call_both)
11720             lr_used += 4;
11721           /* The eh_frame info will consist of a DW_CFA_advance_loc or
11722              variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11723              DW_CFA_restore_extended 65.  */
11724           delta = lr_used - stub_entry->group->lr_restore;
11725           stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11726           stub_entry->group->lr_restore = lr_used + 8;
11727         }
11728       break;
11729
11730     case ppc_stub_plt_call:
11731     case ppc_stub_plt_call_r2save:
11732       targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
11733       if (targ >= (bfd_vma) -2)
11734         abort ();
11735       plt = htab->elf.splt;
11736       if (!htab->elf.dynamic_sections_created
11737           || stub_entry->h == NULL
11738           || stub_entry->h->elf.dynindx == -1)
11739         {
11740           if (stub_entry->symtype == STT_GNU_IFUNC)
11741             plt = htab->elf.iplt;
11742           else
11743             plt = htab->pltlocal;
11744         }
11745       targ += plt->output_offset + plt->output_section->vma;
11746
11747       off = (elf_gp (info->output_bfd)
11748              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11749       off = targ - off;
11750
11751       if (htab->params->plt_stub_align != 0)
11752         {
11753           unsigned pad = plt_stub_pad (htab, stub_entry, off);
11754
11755           stub_entry->group->stub_sec->size += pad;
11756           stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11757         }
11758
11759       if (info->emitrelocations)
11760         {
11761           stub_entry->group->stub_sec->reloc_count
11762             += ((PPC_HA (off) != 0)
11763                 + (htab->opd_abi
11764                    ? 2 + (htab->params->plt_static_chain
11765                           && PPC_HA (off + 16) == PPC_HA (off))
11766                    : 1));
11767           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11768         }
11769
11770       size = plt_stub_size (htab, stub_entry, off);
11771
11772       if (stub_entry->h != NULL
11773           && (stub_entry->h == htab->tls_get_addr_fd
11774               || stub_entry->h == htab->tls_get_addr)
11775           && htab->params->tls_get_addr_opt
11776           && stub_entry->stub_type == ppc_stub_plt_call_r2save)
11777         {
11778           /* After the bctrl, lr has been modified so we need to
11779              emit .eh_frame info saying the return address is
11780              on the stack.  In fact we put the EH info specifying
11781              that the return address is on the stack *at* the
11782              call rather than after it, because the EH info for a
11783              call needs to be specified by that point.
11784              See libgcc/unwind-dw2.c execute_cfa_program.  */
11785           lr_used = stub_entry->stub_offset + size - 20;
11786           /* The eh_frame info will consist of a DW_CFA_advance_loc
11787              or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
11788              DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
11789           delta = lr_used - stub_entry->group->lr_restore;
11790           stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11791           stub_entry->group->lr_restore = size - 4;
11792         }
11793       break;
11794
11795     default:
11796       BFD_FAIL ();
11797       return FALSE;
11798     }
11799
11800   stub_entry->group->stub_sec->size += size;
11801   return TRUE;
11802 }
11803
11804 /* Set up various things so that we can make a list of input sections
11805    for each output section included in the link.  Returns -1 on error,
11806    0 when no stubs will be needed, and 1 on success.  */
11807
11808 int
11809 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
11810 {
11811   unsigned int id;
11812   bfd_size_type amt;
11813   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11814
11815   if (htab == NULL)
11816     return -1;
11817
11818   htab->sec_info_arr_size = _bfd_section_id;
11819   amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
11820   htab->sec_info = bfd_zmalloc (amt);
11821   if (htab->sec_info == NULL)
11822     return -1;
11823
11824   /* Set toc_off for com, und, abs and ind sections.  */
11825   for (id = 0; id < 3; id++)
11826     htab->sec_info[id].toc_off = TOC_BASE_OFF;
11827
11828   return 1;
11829 }
11830
11831 /* Set up for first pass at multitoc partitioning.  */
11832
11833 void
11834 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
11835 {
11836   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11837
11838   htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
11839   htab->toc_bfd = NULL;
11840   htab->toc_first_sec = NULL;
11841 }
11842
11843 /* The linker repeatedly calls this function for each TOC input section
11844    and linker generated GOT section.  Group input bfds such that the toc
11845    within a group is less than 64k in size.  */
11846
11847 bfd_boolean
11848 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
11849 {
11850   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11851   bfd_vma addr, off, limit;
11852
11853   if (htab == NULL)
11854     return FALSE;
11855
11856   if (!htab->second_toc_pass)
11857     {
11858       /* Keep track of the first .toc or .got section for this input bfd.  */
11859       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
11860
11861       if (new_bfd)
11862         {
11863           htab->toc_bfd = isec->owner;
11864           htab->toc_first_sec = isec;
11865         }
11866
11867       addr = isec->output_offset + isec->output_section->vma;
11868       off = addr - htab->toc_curr;
11869       limit = 0x80008000;
11870       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
11871         limit = 0x10000;
11872       if (off + isec->size > limit)
11873         {
11874           addr = (htab->toc_first_sec->output_offset
11875                   + htab->toc_first_sec->output_section->vma);
11876           htab->toc_curr = addr;
11877           htab->toc_curr &= -TOC_BASE_ALIGN;
11878         }
11879
11880       /* toc_curr is the base address of this toc group.  Set elf_gp
11881          for the input section to be the offset relative to the
11882          output toc base plus 0x8000.  Making the input elf_gp an
11883          offset allows us to move the toc as a whole without
11884          recalculating input elf_gp.  */
11885       off = htab->toc_curr - elf_gp (info->output_bfd);
11886       off += TOC_BASE_OFF;
11887
11888       /* Die if someone uses a linker script that doesn't keep input
11889          file .toc and .got together.  */
11890       if (new_bfd
11891           && elf_gp (isec->owner) != 0
11892           && elf_gp (isec->owner) != off)
11893         return FALSE;
11894
11895       elf_gp (isec->owner) = off;
11896       return TRUE;
11897     }
11898
11899   /* During the second pass toc_first_sec points to the start of
11900      a toc group, and toc_curr is used to track the old elf_gp.
11901      We use toc_bfd to ensure we only look at each bfd once.  */
11902   if (htab->toc_bfd == isec->owner)
11903     return TRUE;
11904   htab->toc_bfd = isec->owner;
11905
11906   if (htab->toc_first_sec == NULL
11907       || htab->toc_curr != elf_gp (isec->owner))
11908     {
11909       htab->toc_curr = elf_gp (isec->owner);
11910       htab->toc_first_sec = isec;
11911     }
11912   addr = (htab->toc_first_sec->output_offset
11913           + htab->toc_first_sec->output_section->vma);
11914   off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
11915   elf_gp (isec->owner) = off;
11916
11917   return TRUE;
11918 }
11919
11920 /* Called via elf_link_hash_traverse to merge GOT entries for global
11921    symbol H.  */
11922
11923 static bfd_boolean
11924 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
11925 {
11926   if (h->root.type == bfd_link_hash_indirect)
11927     return TRUE;
11928
11929   merge_got_entries (&h->got.glist);
11930
11931   return TRUE;
11932 }
11933
11934 /* Called via elf_link_hash_traverse to allocate GOT entries for global
11935    symbol H.  */
11936
11937 static bfd_boolean
11938 reallocate_got (struct elf_link_hash_entry *h, void *inf)
11939 {
11940   struct got_entry *gent;
11941
11942   if (h->root.type == bfd_link_hash_indirect)
11943     return TRUE;
11944
11945   for (gent = h->got.glist; gent != NULL; gent = gent->next)
11946     if (!gent->is_indirect)
11947       allocate_got (h, (struct bfd_link_info *) inf, gent);
11948   return TRUE;
11949 }
11950
11951 /* Called on the first multitoc pass after the last call to
11952    ppc64_elf_next_toc_section.  This function removes duplicate GOT
11953    entries.  */
11954
11955 bfd_boolean
11956 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
11957 {
11958   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11959   struct bfd *ibfd, *ibfd2;
11960   bfd_boolean done_something;
11961
11962   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
11963
11964   if (!htab->do_multi_toc)
11965     return FALSE;
11966
11967   /* Merge global sym got entries within a toc group.  */
11968   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
11969
11970   /* And tlsld_got.  */
11971   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11972     {
11973       struct got_entry *ent, *ent2;
11974
11975       if (!is_ppc64_elf (ibfd))
11976         continue;
11977
11978       ent = ppc64_tlsld_got (ibfd);
11979       if (!ent->is_indirect
11980           && ent->got.offset != (bfd_vma) -1)
11981         {
11982           for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
11983             {
11984               if (!is_ppc64_elf (ibfd2))
11985                 continue;
11986
11987               ent2 = ppc64_tlsld_got (ibfd2);
11988               if (!ent2->is_indirect
11989                   && ent2->got.offset != (bfd_vma) -1
11990                   && elf_gp (ibfd2) == elf_gp (ibfd))
11991                 {
11992                   ent2->is_indirect = TRUE;
11993                   ent2->got.ent = ent;
11994                 }
11995             }
11996         }
11997     }
11998
11999   /* Zap sizes of got sections.  */
12000   htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
12001   htab->elf.irelplt->size -= htab->got_reli_size;
12002   htab->got_reli_size = 0;
12003
12004   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12005     {
12006       asection *got, *relgot;
12007
12008       if (!is_ppc64_elf (ibfd))
12009         continue;
12010
12011       got = ppc64_elf_tdata (ibfd)->got;
12012       if (got != NULL)
12013         {
12014           got->rawsize = got->size;
12015           got->size = 0;
12016           relgot = ppc64_elf_tdata (ibfd)->relgot;
12017           relgot->rawsize = relgot->size;
12018           relgot->size = 0;
12019         }
12020     }
12021
12022   /* Now reallocate the got, local syms first.  We don't need to
12023      allocate section contents again since we never increase size.  */
12024   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12025     {
12026       struct got_entry **lgot_ents;
12027       struct got_entry **end_lgot_ents;
12028       struct plt_entry **local_plt;
12029       struct plt_entry **end_local_plt;
12030       unsigned char *lgot_masks;
12031       bfd_size_type locsymcount;
12032       Elf_Internal_Shdr *symtab_hdr;
12033       asection *s;
12034
12035       if (!is_ppc64_elf (ibfd))
12036         continue;
12037
12038       lgot_ents = elf_local_got_ents (ibfd);
12039       if (!lgot_ents)
12040         continue;
12041
12042       symtab_hdr = &elf_symtab_hdr (ibfd);
12043       locsymcount = symtab_hdr->sh_info;
12044       end_lgot_ents = lgot_ents + locsymcount;
12045       local_plt = (struct plt_entry **) end_lgot_ents;
12046       end_local_plt = local_plt + locsymcount;
12047       lgot_masks = (unsigned char *) end_local_plt;
12048       s = ppc64_elf_tdata (ibfd)->got;
12049       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
12050         {
12051           struct got_entry *ent;
12052
12053           for (ent = *lgot_ents; ent != NULL; ent = ent->next)
12054             {
12055               unsigned int ent_size = 8;
12056               unsigned int rel_size = sizeof (Elf64_External_Rela);
12057
12058               ent->got.offset = s->size;
12059               if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
12060                 {
12061                   ent_size *= 2;
12062                   rel_size *= 2;
12063                 }
12064               s->size += ent_size;
12065               if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
12066                 {
12067                   htab->elf.irelplt->size += rel_size;
12068                   htab->got_reli_size += rel_size;
12069                 }
12070               else if (bfd_link_pic (info)
12071                        && !((ent->tls_type & TLS_TPREL) != 0
12072                             && bfd_link_executable (info)))
12073                 {
12074                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12075                   srel->size += rel_size;
12076                 }
12077             }
12078         }
12079     }
12080
12081   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
12082
12083   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12084     {
12085       struct got_entry *ent;
12086
12087       if (!is_ppc64_elf (ibfd))
12088         continue;
12089
12090       ent = ppc64_tlsld_got (ibfd);
12091       if (!ent->is_indirect
12092           && ent->got.offset != (bfd_vma) -1)
12093         {
12094           asection *s = ppc64_elf_tdata (ibfd)->got;
12095           ent->got.offset = s->size;
12096           s->size += 16;
12097           if (bfd_link_pic (info))
12098             {
12099               asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12100               srel->size += sizeof (Elf64_External_Rela);
12101             }
12102         }
12103     }
12104
12105   done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
12106   if (!done_something)
12107     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12108       {
12109         asection *got;
12110
12111         if (!is_ppc64_elf (ibfd))
12112           continue;
12113
12114         got = ppc64_elf_tdata (ibfd)->got;
12115         if (got != NULL)
12116           {
12117             done_something = got->rawsize != got->size;
12118             if (done_something)
12119               break;
12120           }
12121       }
12122
12123   if (done_something)
12124     (*htab->params->layout_sections_again) ();
12125
12126   /* Set up for second pass over toc sections to recalculate elf_gp
12127      on input sections.  */
12128   htab->toc_bfd = NULL;
12129   htab->toc_first_sec = NULL;
12130   htab->second_toc_pass = TRUE;
12131   return done_something;
12132 }
12133
12134 /* Called after second pass of multitoc partitioning.  */
12135
12136 void
12137 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
12138 {
12139   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12140
12141   /* After the second pass, toc_curr tracks the TOC offset used
12142      for code sections below in ppc64_elf_next_input_section.  */
12143   htab->toc_curr = TOC_BASE_OFF;
12144 }
12145
12146 /* No toc references were found in ISEC.  If the code in ISEC makes no
12147    calls, then there's no need to use toc adjusting stubs when branching
12148    into ISEC.  Actually, indirect calls from ISEC are OK as they will
12149    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
12150    needed, and 2 if a cyclical call-graph was found but no other reason
12151    for a stub was detected.  If called from the top level, a return of
12152    2 means the same as a return of 0.  */
12153
12154 static int
12155 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
12156 {
12157   int ret;
12158
12159   /* Mark this section as checked.  */
12160   isec->call_check_done = 1;
12161
12162   /* We know none of our code bearing sections will need toc stubs.  */
12163   if ((isec->flags & SEC_LINKER_CREATED) != 0)
12164     return 0;
12165
12166   if (isec->size == 0)
12167     return 0;
12168
12169   if (isec->output_section == NULL)
12170     return 0;
12171
12172   ret = 0;
12173   if (isec->reloc_count != 0)
12174     {
12175       Elf_Internal_Rela *relstart, *rel;
12176       Elf_Internal_Sym *local_syms;
12177       struct ppc_link_hash_table *htab;
12178
12179       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
12180                                             info->keep_memory);
12181       if (relstart == NULL)
12182         return -1;
12183
12184       /* Look for branches to outside of this section.  */
12185       local_syms = NULL;
12186       htab = ppc_hash_table (info);
12187       if (htab == NULL)
12188         return -1;
12189
12190       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
12191         {
12192           enum elf_ppc64_reloc_type r_type;
12193           unsigned long r_symndx;
12194           struct elf_link_hash_entry *h;
12195           struct ppc_link_hash_entry *eh;
12196           Elf_Internal_Sym *sym;
12197           asection *sym_sec;
12198           struct _opd_sec_data *opd;
12199           bfd_vma sym_value;
12200           bfd_vma dest;
12201
12202           r_type = ELF64_R_TYPE (rel->r_info);
12203           if (r_type != R_PPC64_REL24
12204               && r_type != R_PPC64_REL24_NOTOC
12205               && r_type != R_PPC64_REL14
12206               && r_type != R_PPC64_REL14_BRTAKEN
12207               && r_type != R_PPC64_REL14_BRNTAKEN
12208               && r_type != R_PPC64_PLTCALL
12209               && r_type != R_PPC64_PLTCALL_NOTOC)
12210             continue;
12211
12212           r_symndx = ELF64_R_SYM (rel->r_info);
12213           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
12214                           isec->owner))
12215             {
12216               ret = -1;
12217               break;
12218             }
12219
12220           /* Calls to dynamic lib functions go through a plt call stub
12221              that uses r2.  */
12222           eh = (struct ppc_link_hash_entry *) h;
12223           if (eh != NULL
12224               && (eh->elf.plt.plist != NULL
12225                   || (eh->oh != NULL
12226                       && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
12227             {
12228               ret = 1;
12229               break;
12230             }
12231
12232           if (sym_sec == NULL)
12233             /* Ignore other undefined symbols.  */
12234             continue;
12235
12236           /* Assume branches to other sections not included in the
12237              link need stubs too, to cover -R and absolute syms.  */
12238           if (sym_sec->output_section == NULL)
12239             {
12240               ret = 1;
12241               break;
12242             }
12243
12244           if (h == NULL)
12245             sym_value = sym->st_value;
12246           else
12247             {
12248               if (h->root.type != bfd_link_hash_defined
12249                   && h->root.type != bfd_link_hash_defweak)
12250                 abort ();
12251               sym_value = h->root.u.def.value;
12252             }
12253           sym_value += rel->r_addend;
12254
12255           /* If this branch reloc uses an opd sym, find the code section.  */
12256           opd = get_opd_info (sym_sec);
12257           if (opd != NULL)
12258             {
12259               if (h == NULL && opd->adjust != NULL)
12260                 {
12261                   long adjust;
12262
12263                   adjust = opd->adjust[OPD_NDX (sym_value)];
12264                   if (adjust == -1)
12265                     /* Assume deleted functions won't ever be called.  */
12266                     continue;
12267                   sym_value += adjust;
12268                 }
12269
12270               dest = opd_entry_value (sym_sec, sym_value,
12271                                       &sym_sec, NULL, FALSE);
12272               if (dest == (bfd_vma) -1)
12273                 continue;
12274             }
12275           else
12276             dest = (sym_value
12277                     + sym_sec->output_offset
12278                     + sym_sec->output_section->vma);
12279
12280           /* Ignore branch to self.  */
12281           if (sym_sec == isec)
12282             continue;
12283
12284           /* If the called function uses the toc, we need a stub.  */
12285           if (sym_sec->has_toc_reloc
12286               || sym_sec->makes_toc_func_call)
12287             {
12288               ret = 1;
12289               break;
12290             }
12291
12292           /* Assume any branch that needs a long branch stub might in fact
12293              need a plt_branch stub.  A plt_branch stub uses r2.  */
12294           else if (dest - (isec->output_offset
12295                            + isec->output_section->vma
12296                            + rel->r_offset) + (1 << 25)
12297                    >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
12298                                                              ? h->other
12299                                                              : sym->st_other))
12300             {
12301               ret = 1;
12302               break;
12303             }
12304
12305           /* If calling back to a section in the process of being
12306              tested, we can't say for sure that no toc adjusting stubs
12307              are needed, so don't return zero.  */
12308           else if (sym_sec->call_check_in_progress)
12309             ret = 2;
12310
12311           /* Branches to another section that itself doesn't have any TOC
12312              references are OK.  Recursively call ourselves to check.  */
12313           else if (!sym_sec->call_check_done)
12314             {
12315               int recur;
12316
12317               /* Mark current section as indeterminate, so that other
12318                  sections that call back to current won't be marked as
12319                  known.  */
12320               isec->call_check_in_progress = 1;
12321               recur = toc_adjusting_stub_needed (info, sym_sec);
12322               isec->call_check_in_progress = 0;
12323
12324               if (recur != 0)
12325                 {
12326                   ret = recur;
12327                   if (recur != 2)
12328                     break;
12329                 }
12330             }
12331         }
12332
12333       if (local_syms != NULL
12334           && (elf_symtab_hdr (isec->owner).contents
12335               != (unsigned char *) local_syms))
12336         free (local_syms);
12337       if (elf_section_data (isec)->relocs != relstart)
12338         free (relstart);
12339     }
12340
12341   if ((ret & 1) == 0
12342       && isec->map_head.s != NULL
12343       && (strcmp (isec->output_section->name, ".init") == 0
12344           || strcmp (isec->output_section->name, ".fini") == 0))
12345     {
12346       if (isec->map_head.s->has_toc_reloc
12347           || isec->map_head.s->makes_toc_func_call)
12348         ret = 1;
12349       else if (!isec->map_head.s->call_check_done)
12350         {
12351           int recur;
12352           isec->call_check_in_progress = 1;
12353           recur = toc_adjusting_stub_needed (info, isec->map_head.s);
12354           isec->call_check_in_progress = 0;
12355           if (recur != 0)
12356             ret = recur;
12357         }
12358     }
12359
12360   if (ret == 1)
12361     isec->makes_toc_func_call = 1;
12362
12363   return ret;
12364 }
12365
12366 /* The linker repeatedly calls this function for each input section,
12367    in the order that input sections are linked into output sections.
12368    Build lists of input sections to determine groupings between which
12369    we may insert linker stubs.  */
12370
12371 bfd_boolean
12372 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12373 {
12374   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12375
12376   if (htab == NULL)
12377     return FALSE;
12378
12379   if ((isec->output_section->flags & SEC_CODE) != 0
12380       && isec->output_section->id < htab->sec_info_arr_size)
12381     {
12382       /* This happens to make the list in reverse order,
12383          which is what we want.  */
12384       htab->sec_info[isec->id].u.list
12385         = htab->sec_info[isec->output_section->id].u.list;
12386       htab->sec_info[isec->output_section->id].u.list = isec;
12387     }
12388
12389   if (htab->multi_toc_needed)
12390     {
12391       /* Analyse sections that aren't already flagged as needing a
12392          valid toc pointer.  Exclude .fixup for the linux kernel.
12393          .fixup contains branches, but only back to the function that
12394          hit an exception.  */
12395       if (!(isec->has_toc_reloc
12396             || (isec->flags & SEC_CODE) == 0
12397             || strcmp (isec->name, ".fixup") == 0
12398             || isec->call_check_done))
12399         {
12400           if (toc_adjusting_stub_needed (info, isec) < 0)
12401             return FALSE;
12402         }
12403       /* Make all sections use the TOC assigned for this object file.
12404          This will be wrong for pasted sections;  We fix that in
12405          check_pasted_section().  */
12406       if (elf_gp (isec->owner) != 0)
12407         htab->toc_curr = elf_gp (isec->owner);
12408     }
12409
12410   htab->sec_info[isec->id].toc_off = htab->toc_curr;
12411   return TRUE;
12412 }
12413
12414 /* Check that all .init and .fini sections use the same toc, if they
12415    have toc relocs.  */
12416
12417 static bfd_boolean
12418 check_pasted_section (struct bfd_link_info *info, const char *name)
12419 {
12420   asection *o = bfd_get_section_by_name (info->output_bfd, name);
12421
12422   if (o != NULL)
12423     {
12424       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12425       bfd_vma toc_off = 0;
12426       asection *i;
12427
12428       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12429         if (i->has_toc_reloc)
12430           {
12431             if (toc_off == 0)
12432               toc_off = htab->sec_info[i->id].toc_off;
12433             else if (toc_off != htab->sec_info[i->id].toc_off)
12434               return FALSE;
12435           }
12436
12437       if (toc_off == 0)
12438         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12439           if (i->makes_toc_func_call)
12440             {
12441               toc_off = htab->sec_info[i->id].toc_off;
12442               break;
12443             }
12444
12445       /* Make sure the whole pasted function uses the same toc offset.  */
12446       if (toc_off != 0)
12447         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12448           htab->sec_info[i->id].toc_off = toc_off;
12449     }
12450   return TRUE;
12451 }
12452
12453 bfd_boolean
12454 ppc64_elf_check_init_fini (struct bfd_link_info *info)
12455 {
12456   return (check_pasted_section (info, ".init")
12457           & check_pasted_section (info, ".fini"));
12458 }
12459
12460 /* See whether we can group stub sections together.  Grouping stub
12461    sections may result in fewer stubs.  More importantly, we need to
12462    put all .init* and .fini* stubs at the beginning of the .init or
12463    .fini output sections respectively, because glibc splits the
12464    _init and _fini functions into multiple parts.  Putting a stub in
12465    the middle of a function is not a good idea.  */
12466
12467 static bfd_boolean
12468 group_sections (struct bfd_link_info *info,
12469                 bfd_size_type stub_group_size,
12470                 bfd_boolean stubs_always_before_branch)
12471 {
12472   struct ppc_link_hash_table *htab;
12473   asection *osec;
12474   bfd_boolean suppress_size_errors;
12475
12476   htab = ppc_hash_table (info);
12477   if (htab == NULL)
12478     return FALSE;
12479
12480   suppress_size_errors = FALSE;
12481   if (stub_group_size == 1)
12482     {
12483       /* Default values.  */
12484       if (stubs_always_before_branch)
12485         stub_group_size = 0x1e00000;
12486       else
12487         stub_group_size = 0x1c00000;
12488       suppress_size_errors = TRUE;
12489     }
12490
12491   for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12492     {
12493       asection *tail;
12494
12495       if (osec->id >= htab->sec_info_arr_size)
12496         continue;
12497
12498       tail = htab->sec_info[osec->id].u.list;
12499       while (tail != NULL)
12500         {
12501           asection *curr;
12502           asection *prev;
12503           bfd_size_type total;
12504           bfd_boolean big_sec;
12505           bfd_vma curr_toc;
12506           struct map_stub *group;
12507           bfd_size_type group_size;
12508
12509           curr = tail;
12510           total = tail->size;
12511           group_size = (ppc64_elf_section_data (tail) != NULL
12512                         && ppc64_elf_section_data (tail)->has_14bit_branch
12513                         ? stub_group_size >> 10 : stub_group_size);
12514
12515           big_sec = total > group_size;
12516           if (big_sec && !suppress_size_errors)
12517             /* xgettext:c-format */
12518             _bfd_error_handler (_("%pB section %pA exceeds stub group size"),
12519                                 tail->owner, tail);
12520           curr_toc = htab->sec_info[tail->id].toc_off;
12521
12522           while ((prev = htab->sec_info[curr->id].u.list) != NULL
12523                  && ((total += curr->output_offset - prev->output_offset)
12524                      < (ppc64_elf_section_data (prev) != NULL
12525                         && ppc64_elf_section_data (prev)->has_14bit_branch
12526                         ? (group_size = stub_group_size >> 10) : group_size))
12527                  && htab->sec_info[prev->id].toc_off == curr_toc)
12528             curr = prev;
12529
12530           /* OK, the size from the start of CURR to the end is less
12531              than group_size and thus can be handled by one stub
12532              section.  (or the tail section is itself larger than
12533              group_size, in which case we may be toast.)  We should
12534              really be keeping track of the total size of stubs added
12535              here, as stubs contribute to the final output section
12536              size.  That's a little tricky, and this way will only
12537              break if stubs added make the total size more than 2^25,
12538              ie. for the default stub_group_size, if stubs total more
12539              than 2097152 bytes, or nearly 75000 plt call stubs.  */
12540           group = bfd_alloc (curr->owner, sizeof (*group));
12541           if (group == NULL)
12542             return FALSE;
12543           group->link_sec = curr;
12544           group->stub_sec = NULL;
12545           group->needs_save_res = 0;
12546           group->lr_restore = 0;
12547           group->eh_size = 0;
12548           group->eh_base = 0;
12549           group->next = htab->group;
12550           htab->group = group;
12551           do
12552             {
12553               prev = htab->sec_info[tail->id].u.list;
12554               /* Set up this stub group.  */
12555               htab->sec_info[tail->id].u.group = group;
12556             }
12557           while (tail != curr && (tail = prev) != NULL);
12558
12559           /* But wait, there's more!  Input sections up to group_size
12560              bytes before the stub section can be handled by it too.
12561              Don't do this if we have a really large section after the
12562              stubs, as adding more stubs increases the chance that
12563              branches may not reach into the stub section.  */
12564           if (!stubs_always_before_branch && !big_sec)
12565             {
12566               total = 0;
12567               while (prev != NULL
12568                      && ((total += tail->output_offset - prev->output_offset)
12569                          < (ppc64_elf_section_data (prev) != NULL
12570                             && ppc64_elf_section_data (prev)->has_14bit_branch
12571                             ? (group_size = stub_group_size >> 10)
12572                             : group_size))
12573                      && htab->sec_info[prev->id].toc_off == curr_toc)
12574                 {
12575                   tail = prev;
12576                   prev = htab->sec_info[tail->id].u.list;
12577                   htab->sec_info[tail->id].u.group = group;
12578                 }
12579             }
12580           tail = prev;
12581         }
12582     }
12583   return TRUE;
12584 }
12585
12586 static const unsigned char glink_eh_frame_cie[] =
12587 {
12588   0, 0, 0, 16,                          /* length.  */
12589   0, 0, 0, 0,                           /* id.  */
12590   1,                                    /* CIE version.  */
12591   'z', 'R', 0,                          /* Augmentation string.  */
12592   4,                                    /* Code alignment.  */
12593   0x78,                                 /* Data alignment.  */
12594   65,                                   /* RA reg.  */
12595   1,                                    /* Augmentation size.  */
12596   DW_EH_PE_pcrel | DW_EH_PE_sdata4,     /* FDE encoding.  */
12597   DW_CFA_def_cfa, 1, 0                  /* def_cfa: r1 offset 0.  */
12598 };
12599
12600 /* Stripping output sections is normally done before dynamic section
12601    symbols have been allocated.  This function is called later, and
12602    handles cases like htab->brlt which is mapped to its own output
12603    section.  */
12604
12605 static void
12606 maybe_strip_output (struct bfd_link_info *info, asection *isec)
12607 {
12608   if (isec->size == 0
12609       && isec->output_section->size == 0
12610       && !(isec->output_section->flags & SEC_KEEP)
12611       && !bfd_section_removed_from_list (info->output_bfd,
12612                                          isec->output_section)
12613       && elf_section_data (isec->output_section)->dynindx == 0)
12614     {
12615       isec->output_section->flags |= SEC_EXCLUDE;
12616       bfd_section_list_remove (info->output_bfd, isec->output_section);
12617       info->output_bfd->section_count--;
12618     }
12619 }
12620
12621 /* Determine and set the size of the stub section for a final link.
12622
12623    The basic idea here is to examine all the relocations looking for
12624    PC-relative calls to a target that is unreachable with a "bl"
12625    instruction.  */
12626
12627 bfd_boolean
12628 ppc64_elf_size_stubs (struct bfd_link_info *info)
12629 {
12630   bfd_size_type stub_group_size;
12631   bfd_boolean stubs_always_before_branch;
12632   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12633
12634   if (htab == NULL)
12635     return FALSE;
12636
12637   if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
12638     htab->params->plt_thread_safe = 1;
12639   if (!htab->opd_abi)
12640     htab->params->plt_thread_safe = 0;
12641   else if (htab->params->plt_thread_safe == -1)
12642     {
12643       static const char *const thread_starter[] =
12644         {
12645           "pthread_create",
12646           /* libstdc++ */
12647           "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
12648           /* librt */
12649           "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
12650           "mq_notify", "create_timer",
12651           /* libanl */
12652           "getaddrinfo_a",
12653           /* libgomp */
12654           "GOMP_parallel",
12655           "GOMP_parallel_start",
12656           "GOMP_parallel_loop_static",
12657           "GOMP_parallel_loop_static_start",
12658           "GOMP_parallel_loop_dynamic",
12659           "GOMP_parallel_loop_dynamic_start",
12660           "GOMP_parallel_loop_guided",
12661           "GOMP_parallel_loop_guided_start",
12662           "GOMP_parallel_loop_runtime",
12663           "GOMP_parallel_loop_runtime_start",
12664           "GOMP_parallel_sections",
12665           "GOMP_parallel_sections_start",
12666           /* libgo */
12667           "__go_go",
12668         };
12669       unsigned i;
12670
12671       for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
12672         {
12673           struct elf_link_hash_entry *h;
12674           h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
12675                                     FALSE, FALSE, TRUE);
12676           htab->params->plt_thread_safe = h != NULL && h->ref_regular;
12677           if (htab->params->plt_thread_safe)
12678             break;
12679         }
12680     }
12681   stubs_always_before_branch = htab->params->group_size < 0;
12682   if (htab->params->group_size < 0)
12683     stub_group_size = -htab->params->group_size;
12684   else
12685     stub_group_size = htab->params->group_size;
12686
12687   if (!group_sections (info, stub_group_size, stubs_always_before_branch))
12688     return FALSE;
12689
12690 #define STUB_SHRINK_ITER 20
12691   /* Loop until no stubs added.  After iteration 20 of this loop we may
12692      exit on a stub section shrinking.  This is to break out of a
12693      pathological case where adding stubs on one iteration decreases
12694      section gaps (perhaps due to alignment), which then requires
12695      fewer or smaller stubs on the next iteration.  */
12696
12697   while (1)
12698     {
12699       bfd *input_bfd;
12700       unsigned int bfd_indx;
12701       struct map_stub *group;
12702
12703       htab->stub_iteration += 1;
12704
12705       for (input_bfd = info->input_bfds, bfd_indx = 0;
12706            input_bfd != NULL;
12707            input_bfd = input_bfd->link.next, bfd_indx++)
12708         {
12709           Elf_Internal_Shdr *symtab_hdr;
12710           asection *section;
12711           Elf_Internal_Sym *local_syms = NULL;
12712
12713           if (!is_ppc64_elf (input_bfd))
12714             continue;
12715
12716           /* We'll need the symbol table in a second.  */
12717           symtab_hdr = &elf_symtab_hdr (input_bfd);
12718           if (symtab_hdr->sh_info == 0)
12719             continue;
12720
12721           /* Walk over each section attached to the input bfd.  */
12722           for (section = input_bfd->sections;
12723                section != NULL;
12724                section = section->next)
12725             {
12726               Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
12727
12728               /* If there aren't any relocs, then there's nothing more
12729                  to do.  */
12730               if ((section->flags & SEC_RELOC) == 0
12731                   || (section->flags & SEC_ALLOC) == 0
12732                   || (section->flags & SEC_LOAD) == 0
12733                   || (section->flags & SEC_CODE) == 0
12734                   || section->reloc_count == 0)
12735                 continue;
12736
12737               /* If this section is a link-once section that will be
12738                  discarded, then don't create any stubs.  */
12739               if (section->output_section == NULL
12740                   || section->output_section->owner != info->output_bfd)
12741                 continue;
12742
12743               /* Get the relocs.  */
12744               internal_relocs
12745                 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
12746                                              info->keep_memory);
12747               if (internal_relocs == NULL)
12748                 goto error_ret_free_local;
12749
12750               /* Now examine each relocation.  */
12751               irela = internal_relocs;
12752               irelaend = irela + section->reloc_count;
12753               for (; irela < irelaend; irela++)
12754                 {
12755                   enum elf_ppc64_reloc_type r_type;
12756                   unsigned int r_indx;
12757                   enum ppc_stub_type stub_type;
12758                   struct ppc_stub_hash_entry *stub_entry;
12759                   asection *sym_sec, *code_sec;
12760                   bfd_vma sym_value, code_value;
12761                   bfd_vma destination;
12762                   unsigned long local_off;
12763                   bfd_boolean ok_dest;
12764                   struct ppc_link_hash_entry *hash;
12765                   struct ppc_link_hash_entry *fdh;
12766                   struct elf_link_hash_entry *h;
12767                   Elf_Internal_Sym *sym;
12768                   char *stub_name;
12769                   const asection *id_sec;
12770                   struct _opd_sec_data *opd;
12771                   struct plt_entry *plt_ent;
12772
12773                   r_type = ELF64_R_TYPE (irela->r_info);
12774                   r_indx = ELF64_R_SYM (irela->r_info);
12775
12776                   if (r_type >= R_PPC64_max)
12777                     {
12778                       bfd_set_error (bfd_error_bad_value);
12779                       goto error_ret_free_internal;
12780                     }
12781
12782                   /* Only look for stubs on branch instructions.  */
12783                   if (r_type != R_PPC64_REL24
12784                       && r_type != R_PPC64_REL24_NOTOC
12785                       && r_type != R_PPC64_REL14
12786                       && r_type != R_PPC64_REL14_BRTAKEN
12787                       && r_type != R_PPC64_REL14_BRNTAKEN)
12788                     continue;
12789
12790                   /* Now determine the call target, its name, value,
12791                      section.  */
12792                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
12793                                   r_indx, input_bfd))
12794                     goto error_ret_free_internal;
12795                   hash = (struct ppc_link_hash_entry *) h;
12796
12797                   ok_dest = FALSE;
12798                   fdh = NULL;
12799                   sym_value = 0;
12800                   if (hash == NULL)
12801                     {
12802                       sym_value = sym->st_value;
12803                       if (sym_sec != NULL
12804                           && sym_sec->output_section != NULL)
12805                         ok_dest = TRUE;
12806                     }
12807                   else if (hash->elf.root.type == bfd_link_hash_defined
12808                            || hash->elf.root.type == bfd_link_hash_defweak)
12809                     {
12810                       sym_value = hash->elf.root.u.def.value;
12811                       if (sym_sec->output_section != NULL)
12812                         ok_dest = TRUE;
12813                     }
12814                   else if (hash->elf.root.type == bfd_link_hash_undefweak
12815                            || hash->elf.root.type == bfd_link_hash_undefined)
12816                     {
12817                       /* Recognise an old ABI func code entry sym, and
12818                          use the func descriptor sym instead if it is
12819                          defined.  */
12820                       if (hash->elf.root.root.string[0] == '.'
12821                           && hash->oh != NULL)
12822                         {
12823                           fdh = ppc_follow_link (hash->oh);
12824                           if (fdh->elf.root.type == bfd_link_hash_defined
12825                               || fdh->elf.root.type == bfd_link_hash_defweak)
12826                             {
12827                               sym_sec = fdh->elf.root.u.def.section;
12828                               sym_value = fdh->elf.root.u.def.value;
12829                               if (sym_sec->output_section != NULL)
12830                                 ok_dest = TRUE;
12831                             }
12832                           else
12833                             fdh = NULL;
12834                         }
12835                     }
12836                   else
12837                     {
12838                       bfd_set_error (bfd_error_bad_value);
12839                       goto error_ret_free_internal;
12840                     }
12841
12842                   destination = 0;
12843                   local_off = 0;
12844                   if (ok_dest)
12845                     {
12846                       sym_value += irela->r_addend;
12847                       destination = (sym_value
12848                                      + sym_sec->output_offset
12849                                      + sym_sec->output_section->vma);
12850                       local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
12851                                                             ? hash->elf.other
12852                                                             : sym->st_other);
12853                     }
12854
12855                   code_sec = sym_sec;
12856                   code_value = sym_value;
12857                   opd = get_opd_info (sym_sec);
12858                   if (opd != NULL)
12859                     {
12860                       bfd_vma dest;
12861
12862                       if (hash == NULL && opd->adjust != NULL)
12863                         {
12864                           long adjust = opd->adjust[OPD_NDX (sym_value)];
12865                           if (adjust == -1)
12866                             continue;
12867                           code_value += adjust;
12868                           sym_value += adjust;
12869                         }
12870                       dest = opd_entry_value (sym_sec, sym_value,
12871                                               &code_sec, &code_value, FALSE);
12872                       if (dest != (bfd_vma) -1)
12873                         {
12874                           destination = dest;
12875                           if (fdh != NULL)
12876                             {
12877                               /* Fixup old ABI sym to point at code
12878                                  entry.  */
12879                               hash->elf.root.type = bfd_link_hash_defweak;
12880                               hash->elf.root.u.def.section = code_sec;
12881                               hash->elf.root.u.def.value = code_value;
12882                             }
12883                         }
12884                     }
12885
12886                   /* Determine what (if any) linker stub is needed.  */
12887                   plt_ent = NULL;
12888                   stub_type = ppc_type_of_stub (section, irela, &hash,
12889                                                 &plt_ent, destination,
12890                                                 local_off);
12891
12892                   if (r_type == R_PPC64_REL24_NOTOC)
12893                     {
12894                       if (stub_type == ppc_stub_plt_call)
12895                         stub_type = ppc_stub_plt_call_notoc;
12896                       else if (stub_type == ppc_stub_long_branch
12897                                || (code_sec != NULL
12898                                    && code_sec->output_section != NULL
12899                                    && (((hash ? hash->elf.other : sym->st_other)
12900                                         & STO_PPC64_LOCAL_MASK)
12901                                        > 1 << STO_PPC64_LOCAL_BIT)))
12902                         stub_type = ppc_stub_long_branch_notoc;
12903                     }
12904                   else if (stub_type != ppc_stub_plt_call)
12905                     {
12906                       /* Check whether we need a TOC adjusting stub.
12907                          Since the linker pastes together pieces from
12908                          different object files when creating the
12909                          _init and _fini functions, it may be that a
12910                          call to what looks like a local sym is in
12911                          fact a call needing a TOC adjustment.  */
12912                       if ((code_sec != NULL
12913                            && code_sec->output_section != NULL
12914                            && (htab->sec_info[code_sec->id].toc_off
12915                                != htab->sec_info[section->id].toc_off)
12916                            && (code_sec->has_toc_reloc
12917                                || code_sec->makes_toc_func_call))
12918                           || (((hash ? hash->elf.other : sym->st_other)
12919                                & STO_PPC64_LOCAL_MASK)
12920                               == 1 << STO_PPC64_LOCAL_BIT))
12921                         stub_type = ppc_stub_long_branch_r2off;
12922                     }
12923
12924                   if (stub_type == ppc_stub_none)
12925                     continue;
12926
12927                   /* __tls_get_addr calls might be eliminated.  */
12928                   if (stub_type != ppc_stub_plt_call
12929                       && stub_type != ppc_stub_plt_call_notoc
12930                       && hash != NULL
12931                       && (hash == htab->tls_get_addr
12932                           || hash == htab->tls_get_addr_fd)
12933                       && section->has_tls_reloc
12934                       && irela != internal_relocs)
12935                     {
12936                       /* Get tls info.  */
12937                       unsigned char *tls_mask;
12938
12939                       if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
12940                                          irela - 1, input_bfd))
12941                         goto error_ret_free_internal;
12942                       if ((*tls_mask & TLS_TLS) != 0)
12943                         continue;
12944                     }
12945
12946                   if (stub_type == ppc_stub_plt_call)
12947                     {
12948                       if (!htab->opd_abi
12949                           && htab->params->plt_localentry0 != 0
12950                           && is_elfv2_localentry0 (&hash->elf))
12951                         htab->has_plt_localentry0 = 1;
12952                       else if (irela + 1 < irelaend
12953                                && irela[1].r_offset == irela->r_offset + 4
12954                                && (ELF64_R_TYPE (irela[1].r_info)
12955                                    == R_PPC64_TOCSAVE))
12956                         {
12957                           if (!tocsave_find (htab, INSERT,
12958                                              &local_syms, irela + 1, input_bfd))
12959                             goto error_ret_free_internal;
12960                         }
12961                       else
12962                         stub_type = ppc_stub_plt_call_r2save;
12963                     }
12964
12965                   /* Support for grouping stub sections.  */
12966                   id_sec = htab->sec_info[section->id].u.group->link_sec;
12967
12968                   /* Get the name of this stub.  */
12969                   stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
12970                   if (!stub_name)
12971                     goto error_ret_free_internal;
12972
12973                   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
12974                                                      stub_name, FALSE, FALSE);
12975                   if (stub_entry != NULL)
12976                     {
12977                       enum ppc_stub_type old_type;
12978                       /* A stub has already been created, but it may
12979                          not be the required type.  We shouldn't be
12980                          transitioning from plt_call to long_branch
12981                          stubs or vice versa, but we might be
12982                          upgrading from plt_call to plt_call_r2save or
12983                          from long_branch to long_branch_r2off.  */
12984                       free (stub_name);
12985                       old_type = stub_entry->stub_type;
12986                       switch (old_type)
12987                         {
12988                         default:
12989                           abort ();
12990
12991                         case ppc_stub_save_res:
12992                           continue;
12993
12994                         case ppc_stub_plt_call:
12995                         case ppc_stub_plt_call_r2save:
12996                         case ppc_stub_plt_call_notoc:
12997                         case ppc_stub_plt_call_both:
12998                           if (stub_type == ppc_stub_plt_call)
12999                             continue;
13000                           else if (stub_type == ppc_stub_plt_call_r2save)
13001                             {
13002                               if (old_type == ppc_stub_plt_call_notoc)
13003                                 stub_type = ppc_stub_plt_call_both;
13004                             }
13005                           else if (stub_type == ppc_stub_plt_call_notoc)
13006                             {
13007                               if (old_type == ppc_stub_plt_call_r2save)
13008                                 stub_type = ppc_stub_plt_call_both;
13009                             }
13010                           else
13011                             abort ();
13012                           break;
13013
13014                         case ppc_stub_plt_branch:
13015                         case ppc_stub_plt_branch_r2off:
13016                         case ppc_stub_plt_branch_notoc:
13017                         case ppc_stub_plt_branch_both:
13018                           old_type += (ppc_stub_long_branch
13019                                        - ppc_stub_plt_branch);
13020                           /* Fall through.  */
13021                         case ppc_stub_long_branch:
13022                         case ppc_stub_long_branch_r2off:
13023                         case ppc_stub_long_branch_notoc:
13024                         case ppc_stub_long_branch_both:
13025                           if (stub_type == ppc_stub_long_branch)
13026                             continue;
13027                           else if (stub_type == ppc_stub_long_branch_r2off)
13028                             {
13029                               if (old_type == ppc_stub_long_branch_notoc)
13030                                 stub_type = ppc_stub_long_branch_both;
13031                             }
13032                           else if (stub_type == ppc_stub_long_branch_notoc)
13033                             {
13034                               if (old_type == ppc_stub_long_branch_r2off)
13035                                 stub_type = ppc_stub_long_branch_both;
13036                             }
13037                           else
13038                             abort ();
13039                           break;
13040                         }
13041                       if (old_type < stub_type)
13042                         stub_entry->stub_type = stub_type;
13043                       continue;
13044                     }
13045
13046                   stub_entry = ppc_add_stub (stub_name, section, info);
13047                   if (stub_entry == NULL)
13048                     {
13049                       free (stub_name);
13050                     error_ret_free_internal:
13051                       if (elf_section_data (section)->relocs == NULL)
13052                         free (internal_relocs);
13053                     error_ret_free_local:
13054                       if (local_syms != NULL
13055                           && (symtab_hdr->contents
13056                               != (unsigned char *) local_syms))
13057                         free (local_syms);
13058                       return FALSE;
13059                     }
13060
13061                   stub_entry->stub_type = stub_type;
13062                   if (stub_type >= ppc_stub_plt_call
13063                       && stub_type <= ppc_stub_plt_call_both)
13064                     {
13065                       stub_entry->target_value = sym_value;
13066                       stub_entry->target_section = sym_sec;
13067                     }
13068                   else
13069                     {
13070                       stub_entry->target_value = code_value;
13071                       stub_entry->target_section = code_sec;
13072                     }
13073                   stub_entry->h = hash;
13074                   stub_entry->plt_ent = plt_ent;
13075                   stub_entry->symtype
13076                     = hash ? hash->elf.type : ELF_ST_TYPE (sym->st_info);
13077                   stub_entry->other = hash ? hash->elf.other : sym->st_other;
13078
13079                   if (hash != NULL
13080                       && (hash->elf.root.type == bfd_link_hash_defined
13081                           || hash->elf.root.type == bfd_link_hash_defweak))
13082                     htab->stub_globals += 1;
13083                 }
13084
13085               /* We're done with the internal relocs, free them.  */
13086               if (elf_section_data (section)->relocs != internal_relocs)
13087                 free (internal_relocs);
13088             }
13089
13090           if (local_syms != NULL
13091               && symtab_hdr->contents != (unsigned char *) local_syms)
13092             {
13093               if (!info->keep_memory)
13094                 free (local_syms);
13095               else
13096                 symtab_hdr->contents = (unsigned char *) local_syms;
13097             }
13098         }
13099
13100       /* We may have added some stubs.  Find out the new size of the
13101          stub sections.  */
13102       for (group = htab->group; group != NULL; group = group->next)
13103         {
13104           group->lr_restore = 0;
13105           group->eh_size = 0;
13106           if (group->stub_sec != NULL)
13107             {
13108               asection *stub_sec = group->stub_sec;
13109
13110               if (htab->stub_iteration <= STUB_SHRINK_ITER
13111                   || stub_sec->rawsize < stub_sec->size)
13112                 /* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
13113                 stub_sec->rawsize = stub_sec->size;
13114               stub_sec->size = 0;
13115               stub_sec->reloc_count = 0;
13116               stub_sec->flags &= ~SEC_RELOC;
13117             }
13118         }
13119
13120       if (htab->stub_iteration <= STUB_SHRINK_ITER
13121           || htab->brlt->rawsize < htab->brlt->size)
13122         htab->brlt->rawsize = htab->brlt->size;
13123       htab->brlt->size = 0;
13124       htab->brlt->reloc_count = 0;
13125       htab->brlt->flags &= ~SEC_RELOC;
13126       if (htab->relbrlt != NULL)
13127         htab->relbrlt->size = 0;
13128
13129       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
13130
13131       for (group = htab->group; group != NULL; group = group->next)
13132         if (group->needs_save_res)
13133           group->stub_sec->size += htab->sfpr->size;
13134
13135       if (info->emitrelocations
13136           && htab->glink != NULL && htab->glink->size != 0)
13137         {
13138           htab->glink->reloc_count = 1;
13139           htab->glink->flags |= SEC_RELOC;
13140         }
13141
13142       if (htab->glink_eh_frame != NULL
13143           && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
13144           && htab->glink_eh_frame->output_section->size > 8)
13145         {
13146           size_t size = 0, align = 4;
13147
13148           for (group = htab->group; group != NULL; group = group->next)
13149             if (group->eh_size != 0)
13150               size += (group->eh_size + 17 + align - 1) & -align;
13151           if (htab->glink != NULL && htab->glink->size != 0)
13152             size += (24 + align - 1) & -align;
13153           if (size != 0)
13154             size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13155           align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13156           size = (size + align - 1) & -align;
13157           htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
13158           htab->glink_eh_frame->size = size;
13159         }
13160
13161       if (htab->params->plt_stub_align != 0)
13162         for (group = htab->group; group != NULL; group = group->next)
13163           if (group->stub_sec != NULL)
13164             {
13165               int align = abs (htab->params->plt_stub_align);
13166               group->stub_sec->size
13167                 = (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
13168             }
13169
13170       for (group = htab->group; group != NULL; group = group->next)
13171         if (group->stub_sec != NULL
13172             && group->stub_sec->rawsize != group->stub_sec->size
13173             && (htab->stub_iteration <= STUB_SHRINK_ITER
13174                 || group->stub_sec->rawsize < group->stub_sec->size))
13175           break;
13176
13177       if (group == NULL
13178           && (htab->brlt->rawsize == htab->brlt->size
13179               || (htab->stub_iteration > STUB_SHRINK_ITER
13180                   && htab->brlt->rawsize > htab->brlt->size))
13181           && (htab->glink_eh_frame == NULL
13182               || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
13183         break;
13184
13185       /* Ask the linker to do its stuff.  */
13186       (*htab->params->layout_sections_again) ();
13187     }
13188
13189   if (htab->glink_eh_frame != NULL
13190       && htab->glink_eh_frame->size != 0)
13191     {
13192       bfd_vma val;
13193       bfd_byte *p, *last_fde;
13194       size_t last_fde_len, size, align, pad;
13195       struct map_stub *group;
13196
13197       /* It is necessary to at least have a rough outline of the
13198          linker generated CIEs and FDEs written before
13199          bfd_elf_discard_info is run, in order for these FDEs to be
13200          indexed in .eh_frame_hdr.  */
13201       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
13202       if (p == NULL)
13203         return FALSE;
13204       htab->glink_eh_frame->contents = p;
13205       last_fde = p;
13206       align = 4;
13207
13208       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
13209       /* CIE length (rewrite in case little-endian).  */
13210       last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
13211       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13212       p += last_fde_len + 4;
13213
13214       for (group = htab->group; group != NULL; group = group->next)
13215         if (group->eh_size != 0)
13216           {
13217             group->eh_base = p - htab->glink_eh_frame->contents;
13218             last_fde = p;
13219             last_fde_len = ((group->eh_size + 17 + align - 1) & -align) - 4;
13220             /* FDE length.  */
13221             bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13222             p += 4;
13223             /* CIE pointer.  */
13224             val = p - htab->glink_eh_frame->contents;
13225             bfd_put_32 (htab->elf.dynobj, val, p);
13226             p += 4;
13227             /* Offset to stub section, written later.  */
13228             p += 4;
13229             /* stub section size.  */
13230             bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
13231             p += 4;
13232             /* Augmentation.  */
13233             p += 1;
13234             /* Make sure we don't have all nops.  This is enough for
13235                elf-eh-frame.c to detect the last non-nop opcode.  */
13236             p[group->eh_size - 1] = DW_CFA_advance_loc + 1;
13237             p = last_fde + last_fde_len + 4;
13238           }
13239       if (htab->glink != NULL && htab->glink->size != 0)
13240         {
13241           last_fde = p;
13242           last_fde_len = ((24 + align - 1) & -align) - 4;
13243           /* FDE length.  */
13244           bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13245           p += 4;
13246           /* CIE pointer.  */
13247           val = p - htab->glink_eh_frame->contents;
13248           bfd_put_32 (htab->elf.dynobj, val, p);
13249           p += 4;
13250           /* Offset to .glink, written later.  */
13251           p += 4;
13252           /* .glink size.  */
13253           bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
13254           p += 4;
13255           /* Augmentation.  */
13256           p += 1;
13257
13258           *p++ = DW_CFA_advance_loc + 1;
13259           *p++ = DW_CFA_register;
13260           *p++ = 65;
13261           *p++ = htab->opd_abi ? 12 : 0;
13262           *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
13263           *p++ = DW_CFA_restore_extended;
13264           *p++ = 65;
13265           p += ((24 + align - 1) & -align) - 24;
13266         }
13267       /* Subsume any padding into the last FDE if user .eh_frame
13268          sections are aligned more than glink_eh_frame.  Otherwise any
13269          zero padding will be seen as a terminator.  */
13270       align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13271       size = p - htab->glink_eh_frame->contents;
13272       pad = ((size + align - 1) & -align) - size;
13273       htab->glink_eh_frame->size = size + pad;
13274       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
13275     }
13276
13277   maybe_strip_output (info, htab->brlt);
13278   if (htab->glink_eh_frame != NULL)
13279     maybe_strip_output (info, htab->glink_eh_frame);
13280
13281   return TRUE;
13282 }
13283
13284 /* Called after we have determined section placement.  If sections
13285    move, we'll be called again.  Provide a value for TOCstart.  */
13286
13287 bfd_vma
13288 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
13289 {
13290   asection *s;
13291   bfd_vma TOCstart, adjust;
13292
13293   if (info != NULL)
13294     {
13295       struct elf_link_hash_entry *h;
13296       struct elf_link_hash_table *htab = elf_hash_table (info);
13297
13298       if (is_elf_hash_table (htab)
13299           && htab->hgot != NULL)
13300         h = htab->hgot;
13301       else
13302         {
13303           h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
13304           if (is_elf_hash_table (htab))
13305             htab->hgot = h;
13306         }
13307       if (h != NULL
13308           && h->root.type == bfd_link_hash_defined
13309           && !h->root.linker_def
13310           && (!is_elf_hash_table (htab)
13311               || h->def_regular))
13312         {
13313           TOCstart = (h->root.u.def.value - TOC_BASE_OFF
13314                       + h->root.u.def.section->output_offset
13315                       + h->root.u.def.section->output_section->vma);
13316           _bfd_set_gp_value (obfd, TOCstart);
13317           return TOCstart;
13318         }
13319     }
13320
13321   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
13322      order.  The TOC starts where the first of these sections starts.  */
13323   s = bfd_get_section_by_name (obfd, ".got");
13324   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13325     s = bfd_get_section_by_name (obfd, ".toc");
13326   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13327     s = bfd_get_section_by_name (obfd, ".tocbss");
13328   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13329     s = bfd_get_section_by_name (obfd, ".plt");
13330   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13331     {
13332       /* This may happen for
13333          o  references to TOC base (SYM@toc / TOC[tc0]) without a
13334          .toc directive
13335          o  bad linker script
13336          o --gc-sections and empty TOC sections
13337
13338          FIXME: Warn user?  */
13339
13340       /* Look for a likely section.  We probably won't even be
13341          using TOCstart.  */
13342       for (s = obfd->sections; s != NULL; s = s->next)
13343         if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
13344                          | SEC_EXCLUDE))
13345             == (SEC_ALLOC | SEC_SMALL_DATA))
13346           break;
13347       if (s == NULL)
13348         for (s = obfd->sections; s != NULL; s = s->next)
13349           if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
13350               == (SEC_ALLOC | SEC_SMALL_DATA))
13351             break;
13352       if (s == NULL)
13353         for (s = obfd->sections; s != NULL; s = s->next)
13354           if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
13355               == SEC_ALLOC)
13356             break;
13357       if (s == NULL)
13358         for (s = obfd->sections; s != NULL; s = s->next)
13359           if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
13360             break;
13361     }
13362
13363   TOCstart = 0;
13364   if (s != NULL)
13365     TOCstart = s->output_section->vma + s->output_offset;
13366
13367   /* Force alignment.  */
13368   adjust = TOCstart & (TOC_BASE_ALIGN - 1);
13369   TOCstart -= adjust;
13370   _bfd_set_gp_value (obfd, TOCstart);
13371
13372   if (info != NULL && s != NULL)
13373     {
13374       struct ppc_link_hash_table *htab = ppc_hash_table (info);
13375
13376       if (htab != NULL)
13377         {
13378           if (htab->elf.hgot != NULL)
13379             {
13380               htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
13381               htab->elf.hgot->root.u.def.section = s;
13382             }
13383         }
13384       else
13385         {
13386           struct bfd_link_hash_entry *bh = NULL;
13387           _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
13388                                             s, TOC_BASE_OFF - adjust,
13389                                             NULL, FALSE, FALSE, &bh);
13390         }
13391     }
13392   return TOCstart;
13393 }
13394
13395 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
13396    write out any global entry stubs, and PLT relocations.  */
13397
13398 static bfd_boolean
13399 build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
13400 {
13401   struct bfd_link_info *info;
13402   struct ppc_link_hash_table *htab;
13403   struct plt_entry *ent;
13404   asection *s;
13405
13406   if (h->root.type == bfd_link_hash_indirect)
13407     return TRUE;
13408
13409   info = inf;
13410   htab = ppc_hash_table (info);
13411   if (htab == NULL)
13412     return FALSE;
13413
13414   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13415     if (ent->plt.offset != (bfd_vma) -1)
13416       {
13417         /* This symbol has an entry in the procedure linkage
13418            table.  Set it up.  */
13419         Elf_Internal_Rela rela;
13420         asection *plt, *relplt;
13421         bfd_byte *loc;
13422
13423         if (!htab->elf.dynamic_sections_created
13424             || h->dynindx == -1)
13425           {
13426             if (!(h->def_regular
13427                   && (h->root.type == bfd_link_hash_defined
13428                       || h->root.type == bfd_link_hash_defweak)))
13429               continue;
13430             if (h->type == STT_GNU_IFUNC)
13431               {
13432                 plt = htab->elf.iplt;
13433                 relplt = htab->elf.irelplt;
13434                 htab->local_ifunc_resolver = 1;
13435                 if (htab->opd_abi)
13436                   rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13437                 else
13438                   rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13439               }
13440             else
13441               {
13442                 plt = htab->pltlocal;
13443                 if (bfd_link_pic (info))
13444                   {
13445                     relplt = htab->relpltlocal;
13446                     if (htab->opd_abi)
13447                       rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13448                     else
13449                       rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13450                   }
13451                 else
13452                   relplt = NULL;
13453               }
13454             rela.r_addend = (h->root.u.def.value
13455                              + h->root.u.def.section->output_offset
13456                              + h->root.u.def.section->output_section->vma
13457                              + ent->addend);
13458
13459             if (relplt == NULL)
13460               {
13461                 loc = plt->contents + ent->plt.offset;
13462                 bfd_put_64 (info->output_bfd, rela.r_addend, loc);
13463                 if (htab->opd_abi)
13464                   {
13465                     bfd_vma toc = elf_gp (info->output_bfd);
13466                     toc += htab->sec_info[h->root.u.def.section->id].toc_off;
13467                     bfd_put_64 (info->output_bfd, toc, loc + 8);
13468                   }
13469               }
13470             else
13471               {
13472                 rela.r_offset = (plt->output_section->vma
13473                                  + plt->output_offset
13474                                  + ent->plt.offset);
13475                 loc = relplt->contents + (relplt->reloc_count++
13476                                           * sizeof (Elf64_External_Rela));
13477                 bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13478               }
13479           }
13480         else
13481           {
13482             rela.r_offset = (htab->elf.splt->output_section->vma
13483                              + htab->elf.splt->output_offset
13484                              + ent->plt.offset);
13485             rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
13486             rela.r_addend = ent->addend;
13487             loc = (htab->elf.srelplt->contents
13488                    + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
13489                       / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
13490             if (h->type == STT_GNU_IFUNC && is_static_defined (h))
13491               htab->maybe_local_ifunc_resolver = 1;
13492             bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13493           }
13494       }
13495
13496   if (!h->pointer_equality_needed)
13497     return TRUE;
13498
13499   if (h->def_regular)
13500     return TRUE;
13501
13502   s = htab->global_entry;
13503   if (s == NULL || s->size == 0)
13504     return TRUE;
13505
13506   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13507     if (ent->plt.offset != (bfd_vma) -1
13508         && ent->addend == 0)
13509       {
13510         bfd_byte *p;
13511         asection *plt;
13512         bfd_vma off;
13513
13514         p = s->contents + h->root.u.def.value;
13515         plt = htab->elf.splt;
13516         if (!htab->elf.dynamic_sections_created
13517             || h->dynindx == -1)
13518           {
13519             if (h->type == STT_GNU_IFUNC)
13520               plt = htab->elf.iplt;
13521             else
13522               plt = htab->pltlocal;
13523           }
13524         off = ent->plt.offset + plt->output_offset + plt->output_section->vma;
13525         off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
13526
13527         if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
13528           {
13529             info->callbacks->einfo
13530               (_("%P: linkage table error against `%pT'\n"),
13531                h->root.root.string);
13532             bfd_set_error (bfd_error_bad_value);
13533             htab->stub_error = TRUE;
13534           }
13535
13536         htab->stub_count[ppc_stub_global_entry - 1] += 1;
13537         if (htab->params->emit_stub_syms)
13538           {
13539             size_t len = strlen (h->root.root.string);
13540             char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
13541
13542             if (name == NULL)
13543               return FALSE;
13544
13545             sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
13546             h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
13547             if (h == NULL)
13548               return FALSE;
13549             if (h->root.type == bfd_link_hash_new)
13550               {
13551                 h->root.type = bfd_link_hash_defined;
13552                 h->root.u.def.section = s;
13553                 h->root.u.def.value = p - s->contents;
13554                 h->ref_regular = 1;
13555                 h->def_regular = 1;
13556                 h->ref_regular_nonweak = 1;
13557                 h->forced_local = 1;
13558                 h->non_elf = 0;
13559                 h->root.linker_def = 1;
13560               }
13561           }
13562
13563         if (PPC_HA (off) != 0)
13564           {
13565             bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
13566             p += 4;
13567           }
13568         bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
13569         p += 4;
13570         bfd_put_32 (s->owner, MTCTR_R12, p);
13571         p += 4;
13572         bfd_put_32 (s->owner, BCTR, p);
13573         break;
13574       }
13575   return TRUE;
13576 }
13577
13578 /* Write PLT relocs for locals.  */
13579
13580 static bfd_boolean
13581 write_plt_relocs_for_local_syms (struct bfd_link_info *info)
13582 {
13583   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13584   bfd *ibfd;
13585
13586   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13587     {
13588       struct got_entry **lgot_ents, **end_lgot_ents;
13589       struct plt_entry **local_plt, **lplt, **end_local_plt;
13590       Elf_Internal_Shdr *symtab_hdr;
13591       bfd_size_type locsymcount;
13592       Elf_Internal_Sym *local_syms = NULL;
13593       struct plt_entry *ent;
13594
13595       if (!is_ppc64_elf (ibfd))
13596         continue;
13597
13598       lgot_ents = elf_local_got_ents (ibfd);
13599       if (!lgot_ents)
13600         continue;
13601
13602       symtab_hdr = &elf_symtab_hdr (ibfd);
13603       locsymcount = symtab_hdr->sh_info;
13604       end_lgot_ents = lgot_ents + locsymcount;
13605       local_plt = (struct plt_entry **) end_lgot_ents;
13606       end_local_plt = local_plt + locsymcount;
13607       for (lplt = local_plt; lplt < end_local_plt; ++lplt)
13608         for (ent = *lplt; ent != NULL; ent = ent->next)
13609           if (ent->plt.offset != (bfd_vma) -1)
13610             {
13611               Elf_Internal_Sym *sym;
13612               asection *sym_sec;
13613               asection *plt, *relplt;
13614               bfd_byte *loc;
13615               bfd_vma val;
13616
13617               if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
13618                               lplt - local_plt, ibfd))
13619                 {
13620                   if (local_syms != NULL
13621                       && symtab_hdr->contents != (unsigned char *) local_syms)
13622                     free (local_syms);
13623                   return FALSE;
13624                 }
13625
13626               val = sym->st_value + ent->addend;
13627               if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
13628                 val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
13629               if (sym_sec != NULL && sym_sec->output_section != NULL)
13630                 val += sym_sec->output_offset + sym_sec->output_section->vma;
13631
13632               if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13633                 {
13634                   htab->local_ifunc_resolver = 1;
13635                   plt = htab->elf.iplt;
13636                   relplt = htab->elf.irelplt;
13637                 }
13638               else
13639                 {
13640                   plt = htab->pltlocal;
13641                   relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
13642                 }
13643
13644               if (relplt == NULL)
13645                 {
13646                   loc = plt->contents + ent->plt.offset;
13647                   bfd_put_64 (info->output_bfd, val, loc);
13648                   if (htab->opd_abi)
13649                     {
13650                       bfd_vma toc = elf_gp (ibfd);
13651                       bfd_put_64 (info->output_bfd, toc, loc + 8);
13652                     }
13653                 }
13654               else
13655                 {
13656                   Elf_Internal_Rela rela;
13657                   rela.r_offset = (ent->plt.offset
13658                                    + plt->output_offset
13659                                    + plt->output_section->vma);
13660                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13661                     {
13662                       if (htab->opd_abi)
13663                         rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13664                       else
13665                         rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13666                     }
13667                   else
13668                     {
13669                       if (htab->opd_abi)
13670                         rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13671                       else
13672                         rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13673                     }
13674                   rela.r_addend = val;
13675                   loc = relplt->contents + (relplt->reloc_count++
13676                                             * sizeof (Elf64_External_Rela));
13677                   bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13678                 }
13679             }
13680
13681       if (local_syms != NULL
13682           && symtab_hdr->contents != (unsigned char *) local_syms)
13683         {
13684           if (!info->keep_memory)
13685             free (local_syms);
13686           else
13687             symtab_hdr->contents = (unsigned char *) local_syms;
13688         }
13689     }
13690   return TRUE;
13691 }
13692
13693 /* Build all the stubs associated with the current output file.
13694    The stubs are kept in a hash table attached to the main linker
13695    hash table.  This function is called via gldelf64ppc_finish.  */
13696
13697 bfd_boolean
13698 ppc64_elf_build_stubs (struct bfd_link_info *info,
13699                        char **stats)
13700 {
13701   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13702   struct map_stub *group;
13703   asection *stub_sec;
13704   bfd_byte *p;
13705   int stub_sec_count = 0;
13706
13707   if (htab == NULL)
13708     return FALSE;
13709
13710   /* Allocate memory to hold the linker stubs.  */
13711   for (group = htab->group; group != NULL; group = group->next)
13712     {
13713       group->eh_size = 0;
13714       group->lr_restore = 0;
13715       if ((stub_sec = group->stub_sec) != NULL
13716           && stub_sec->size != 0)
13717         {
13718           stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
13719                                            stub_sec->size);
13720           if (stub_sec->contents == NULL)
13721             return FALSE;
13722           stub_sec->size = 0;
13723         }
13724     }
13725
13726   if (htab->glink != NULL && htab->glink->size != 0)
13727     {
13728       unsigned int indx;
13729       bfd_vma plt0;
13730
13731       /* Build the .glink plt call stub.  */
13732       if (htab->params->emit_stub_syms)
13733         {
13734           struct elf_link_hash_entry *h;
13735           h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
13736                                     TRUE, FALSE, FALSE);
13737           if (h == NULL)
13738             return FALSE;
13739           if (h->root.type == bfd_link_hash_new)
13740             {
13741               h->root.type = bfd_link_hash_defined;
13742               h->root.u.def.section = htab->glink;
13743               h->root.u.def.value = 8;
13744               h->ref_regular = 1;
13745               h->def_regular = 1;
13746               h->ref_regular_nonweak = 1;
13747               h->forced_local = 1;
13748               h->non_elf = 0;
13749               h->root.linker_def = 1;
13750             }
13751         }
13752       plt0 = (htab->elf.splt->output_section->vma
13753               + htab->elf.splt->output_offset
13754               - 16);
13755       if (info->emitrelocations)
13756         {
13757           Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
13758           if (r == NULL)
13759             return FALSE;
13760           r->r_offset = (htab->glink->output_offset
13761                          + htab->glink->output_section->vma);
13762           r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
13763           r->r_addend = plt0;
13764         }
13765       p = htab->glink->contents;
13766       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
13767       bfd_put_64 (htab->glink->owner, plt0, p);
13768       p += 8;
13769       if (htab->opd_abi)
13770         {
13771           bfd_put_32 (htab->glink->owner, MFLR_R12, p);
13772           p += 4;
13773           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13774           p += 4;
13775           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13776           p += 4;
13777           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13778           p += 4;
13779           bfd_put_32 (htab->glink->owner, MTLR_R12, p);
13780           p += 4;
13781           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13782           p += 4;
13783           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13784           p += 4;
13785           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
13786           p += 4;
13787           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13788           p += 4;
13789           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
13790           p += 4;
13791         }
13792       else
13793         {
13794           bfd_put_32 (htab->glink->owner, MFLR_R0, p);
13795           p += 4;
13796           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13797           p += 4;
13798           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13799           p += 4;
13800           bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
13801           p += 4;
13802           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13803           p += 4;
13804           bfd_put_32 (htab->glink->owner, MTLR_R0, p);
13805           p += 4;
13806           bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
13807           p += 4;
13808           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13809           p += 4;
13810           bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
13811           p += 4;
13812           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13813           p += 4;
13814           bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
13815           p += 4;
13816           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13817           p += 4;
13818           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
13819           p += 4;
13820         }
13821       bfd_put_32 (htab->glink->owner, BCTR, p);
13822       p += 4;
13823       BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
13824
13825       /* Build the .glink lazy link call stubs.  */
13826       indx = 0;
13827       while (p < htab->glink->contents + htab->glink->size)
13828         {
13829           if (htab->opd_abi)
13830             {
13831               if (indx < 0x8000)
13832                 {
13833                   bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
13834                   p += 4;
13835                 }
13836               else
13837                 {
13838                   bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
13839                   p += 4;
13840                   bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
13841                               p);
13842                   p += 4;
13843                 }
13844             }
13845           bfd_put_32 (htab->glink->owner,
13846                       B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
13847           indx++;
13848           p += 4;
13849         }
13850     }
13851
13852   /* Build .glink global entry stubs, and PLT relocs for globals.  */
13853   elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
13854
13855   if (!write_plt_relocs_for_local_syms (info))
13856     return FALSE;
13857
13858   if (htab->brlt != NULL && htab->brlt->size != 0)
13859     {
13860       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
13861                                          htab->brlt->size);
13862       if (htab->brlt->contents == NULL)
13863         return FALSE;
13864     }
13865   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
13866     {
13867       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
13868                                             htab->relbrlt->size);
13869       if (htab->relbrlt->contents == NULL)
13870         return FALSE;
13871     }
13872
13873   /* Build the stubs as directed by the stub hash table.  */
13874   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
13875
13876   for (group = htab->group; group != NULL; group = group->next)
13877     if (group->needs_save_res)
13878       group->stub_sec->size += htab->sfpr->size;
13879
13880   if (htab->relbrlt != NULL)
13881     htab->relbrlt->reloc_count = 0;
13882
13883   if (htab->params->plt_stub_align != 0)
13884     for (group = htab->group; group != NULL; group = group->next)
13885       if ((stub_sec = group->stub_sec) != NULL)
13886         {
13887           int align = abs (htab->params->plt_stub_align);
13888           stub_sec->size = (stub_sec->size + (1 << align) - 1) & -(1 << align);
13889         }
13890
13891   for (group = htab->group; group != NULL; group = group->next)
13892     if (group->needs_save_res)
13893       {
13894         stub_sec = group->stub_sec;
13895         memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
13896                 htab->sfpr->contents, htab->sfpr->size);
13897         if (htab->params->emit_stub_syms)
13898           {
13899             unsigned int i;
13900
13901             for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
13902               if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
13903                 return FALSE;
13904           }
13905       }
13906
13907   if (htab->glink_eh_frame != NULL
13908       && htab->glink_eh_frame->size != 0)
13909     {
13910       bfd_vma val;
13911       size_t align = 4;
13912
13913       p = htab->glink_eh_frame->contents;
13914       p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13915
13916       for (group = htab->group; group != NULL; group = group->next)
13917         if (group->eh_size != 0)
13918           {
13919             /* Offset to stub section.  */
13920             val = (group->stub_sec->output_section->vma
13921                    + group->stub_sec->output_offset);
13922             val -= (htab->glink_eh_frame->output_section->vma
13923                     + htab->glink_eh_frame->output_offset
13924                     + (p + 8 - htab->glink_eh_frame->contents));
13925             if (val + 0x80000000 > 0xffffffff)
13926               {
13927                 _bfd_error_handler
13928                   (_("%s offset too large for .eh_frame sdata4 encoding"),
13929                    group->stub_sec->name);
13930                 return FALSE;
13931               }
13932             bfd_put_32 (htab->elf.dynobj, val, p + 8);
13933             p += (group->eh_size + 17 + 3) & -4;
13934           }
13935       if (htab->glink != NULL && htab->glink->size != 0)
13936         {
13937           /* Offset to .glink.  */
13938           val = (htab->glink->output_section->vma
13939                  + htab->glink->output_offset
13940                  + 8);
13941           val -= (htab->glink_eh_frame->output_section->vma
13942                   + htab->glink_eh_frame->output_offset
13943                   + (p + 8 - htab->glink_eh_frame->contents));
13944           if (val + 0x80000000 > 0xffffffff)
13945             {
13946               _bfd_error_handler
13947                 (_("%s offset too large for .eh_frame sdata4 encoding"),
13948                  htab->glink->name);
13949               return FALSE;
13950             }
13951           bfd_put_32 (htab->elf.dynobj, val, p + 8);
13952           p += (24 + align - 1) & -align;
13953         }
13954     }
13955
13956   for (group = htab->group; group != NULL; group = group->next)
13957     if ((stub_sec = group->stub_sec) != NULL)
13958       {
13959         stub_sec_count += 1;
13960         if (stub_sec->rawsize != stub_sec->size
13961             && (htab->stub_iteration <= STUB_SHRINK_ITER
13962                 || stub_sec->rawsize < stub_sec->size))
13963           break;
13964       }
13965
13966   if (group != NULL)
13967     {
13968       htab->stub_error = TRUE;
13969       _bfd_error_handler (_("stubs don't match calculated size"));
13970     }
13971
13972   if (htab->stub_error)
13973     return FALSE;
13974
13975   if (stats != NULL)
13976     {
13977       size_t len;
13978       *stats = bfd_malloc (500);
13979       if (*stats == NULL)
13980         return FALSE;
13981
13982       len = sprintf (*stats,
13983                      ngettext ("linker stubs in %u group\n",
13984                                "linker stubs in %u groups\n",
13985                                stub_sec_count),
13986                      stub_sec_count);
13987       sprintf (*stats + len, _("  branch         %lu\n"
13988                                "  branch toc adj %lu\n"
13989                                "  branch notoc   %lu\n"
13990                                "  branch both    %lu\n"
13991                                "  long branch    %lu\n"
13992                                "  long toc adj   %lu\n"
13993                                "  long notoc     %lu\n"
13994                                "  long both      %lu\n"
13995                                "  plt call       %lu\n"
13996                                "  plt call save  %lu\n"
13997                                "  plt call notoc %lu\n"
13998                                "  plt call both  %lu\n"
13999                                "  global entry   %lu"),
14000                htab->stub_count[ppc_stub_long_branch - 1],
14001                htab->stub_count[ppc_stub_long_branch_r2off - 1],
14002                htab->stub_count[ppc_stub_long_branch_notoc - 1],
14003                htab->stub_count[ppc_stub_long_branch_both - 1],
14004                htab->stub_count[ppc_stub_plt_branch - 1],
14005                htab->stub_count[ppc_stub_plt_branch_r2off - 1],
14006                htab->stub_count[ppc_stub_plt_branch_notoc - 1],
14007                htab->stub_count[ppc_stub_plt_branch_both - 1],
14008                htab->stub_count[ppc_stub_plt_call - 1],
14009                htab->stub_count[ppc_stub_plt_call_r2save - 1],
14010                htab->stub_count[ppc_stub_plt_call_notoc - 1],
14011                htab->stub_count[ppc_stub_plt_call_both - 1],
14012                htab->stub_count[ppc_stub_global_entry - 1]);
14013     }
14014   return TRUE;
14015 }
14016
14017 /* What to do when ld finds relocations against symbols defined in
14018    discarded sections.  */
14019
14020 static unsigned int
14021 ppc64_elf_action_discarded (asection *sec)
14022 {
14023   if (strcmp (".opd", sec->name) == 0)
14024     return 0;
14025
14026   if (strcmp (".toc", sec->name) == 0)
14027     return 0;
14028
14029   if (strcmp (".toc1", sec->name) == 0)
14030     return 0;
14031
14032   return _bfd_elf_default_action_discarded (sec);
14033 }
14034
14035 /* The RELOCATE_SECTION function is called by the ELF backend linker
14036    to handle the relocations for a section.
14037
14038    The relocs are always passed as Rela structures; if the section
14039    actually uses Rel structures, the r_addend field will always be
14040    zero.
14041
14042    This function is responsible for adjust the section contents as
14043    necessary, and (if using Rela relocs and generating a
14044    relocatable output file) adjusting the reloc addend as
14045    necessary.
14046
14047    This function does not have to worry about setting the reloc
14048    address or the reloc symbol index.
14049
14050    LOCAL_SYMS is a pointer to the swapped in local symbols.
14051
14052    LOCAL_SECTIONS is an array giving the section in the input file
14053    corresponding to the st_shndx field of each local symbol.
14054
14055    The global hash table entry for the global symbols can be found
14056    via elf_sym_hashes (input_bfd).
14057
14058    When generating relocatable output, this function must handle
14059    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
14060    going to be the section symbol corresponding to the output
14061    section, which means that the addend must be adjusted
14062    accordingly.  */
14063
14064 static bfd_boolean
14065 ppc64_elf_relocate_section (bfd *output_bfd,
14066                             struct bfd_link_info *info,
14067                             bfd *input_bfd,
14068                             asection *input_section,
14069                             bfd_byte *contents,
14070                             Elf_Internal_Rela *relocs,
14071                             Elf_Internal_Sym *local_syms,
14072                             asection **local_sections)
14073 {
14074   struct ppc_link_hash_table *htab;
14075   Elf_Internal_Shdr *symtab_hdr;
14076   struct elf_link_hash_entry **sym_hashes;
14077   Elf_Internal_Rela *rel;
14078   Elf_Internal_Rela *wrel;
14079   Elf_Internal_Rela *relend;
14080   Elf_Internal_Rela outrel;
14081   bfd_byte *loc;
14082   struct got_entry **local_got_ents;
14083   bfd_vma TOCstart;
14084   bfd_boolean ret = TRUE;
14085   bfd_boolean is_opd;
14086   /* Assume 'at' branch hints.  */
14087   bfd_boolean is_isa_v2 = TRUE;
14088   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
14089
14090   /* Initialize howto table if needed.  */
14091   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
14092     ppc_howto_init ();
14093
14094   htab = ppc_hash_table (info);
14095   if (htab == NULL)
14096     return FALSE;
14097
14098   /* Don't relocate stub sections.  */
14099   if (input_section->owner == htab->params->stub_bfd)
14100     return TRUE;
14101
14102   if (!is_ppc64_elf (input_bfd))
14103     {
14104       bfd_set_error (bfd_error_wrong_format);
14105       return FALSE;
14106     }
14107
14108   local_got_ents = elf_local_got_ents (input_bfd);
14109   TOCstart = elf_gp (output_bfd);
14110   symtab_hdr = &elf_symtab_hdr (input_bfd);
14111   sym_hashes = elf_sym_hashes (input_bfd);
14112   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
14113
14114   rel = wrel = relocs;
14115   relend = relocs + input_section->reloc_count;
14116   for (; rel < relend; wrel++, rel++)
14117     {
14118       enum elf_ppc64_reloc_type r_type;
14119       bfd_vma addend;
14120       bfd_reloc_status_type r;
14121       Elf_Internal_Sym *sym;
14122       asection *sec;
14123       struct elf_link_hash_entry *h_elf;
14124       struct ppc_link_hash_entry *h;
14125       struct ppc_link_hash_entry *fdh;
14126       const char *sym_name;
14127       unsigned long r_symndx, toc_symndx;
14128       bfd_vma toc_addend;
14129       unsigned char tls_mask, tls_gd, tls_type;
14130       unsigned char sym_type;
14131       bfd_vma relocation;
14132       bfd_boolean unresolved_reloc, save_unresolved_reloc;
14133       bfd_boolean warned;
14134       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
14135       unsigned int insn;
14136       unsigned int mask;
14137       struct ppc_stub_hash_entry *stub_entry;
14138       bfd_vma max_br_offset;
14139       bfd_vma from;
14140       Elf_Internal_Rela orig_rel;
14141       reloc_howto_type *howto;
14142       struct reloc_howto_struct alt_howto;
14143       uint64_t pinsn;
14144       bfd_vma offset;
14145
14146     again:
14147       orig_rel = *rel;
14148
14149       r_type = ELF64_R_TYPE (rel->r_info);
14150       r_symndx = ELF64_R_SYM (rel->r_info);
14151
14152       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
14153          symbol of the previous ADDR64 reloc.  The symbol gives us the
14154          proper TOC base to use.  */
14155       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
14156           && wrel != relocs
14157           && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
14158           && is_opd)
14159         r_symndx = ELF64_R_SYM (wrel[-1].r_info);
14160
14161       sym = NULL;
14162       sec = NULL;
14163       h_elf = NULL;
14164       sym_name = NULL;
14165       unresolved_reloc = FALSE;
14166       warned = FALSE;
14167
14168       if (r_symndx < symtab_hdr->sh_info)
14169         {
14170           /* It's a local symbol.  */
14171           struct _opd_sec_data *opd;
14172
14173           sym = local_syms + r_symndx;
14174           sec = local_sections[r_symndx];
14175           sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
14176           sym_type = ELF64_ST_TYPE (sym->st_info);
14177           relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
14178           opd = get_opd_info (sec);
14179           if (opd != NULL && opd->adjust != NULL)
14180             {
14181               long adjust = opd->adjust[OPD_NDX (sym->st_value
14182                                                  + rel->r_addend)];
14183               if (adjust == -1)
14184                 relocation = 0;
14185               else
14186                 {
14187                   /* If this is a relocation against the opd section sym
14188                      and we have edited .opd, adjust the reloc addend so
14189                      that ld -r and ld --emit-relocs output is correct.
14190                      If it is a reloc against some other .opd symbol,
14191                      then the symbol value will be adjusted later.  */
14192                   if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
14193                     rel->r_addend += adjust;
14194                   else
14195                     relocation += adjust;
14196                 }
14197             }
14198         }
14199       else
14200         {
14201           bfd_boolean ignored;
14202
14203           RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
14204                                    r_symndx, symtab_hdr, sym_hashes,
14205                                    h_elf, sec, relocation,
14206                                    unresolved_reloc, warned, ignored);
14207           sym_name = h_elf->root.root.string;
14208           sym_type = h_elf->type;
14209           if (sec != NULL
14210               && sec->owner == output_bfd
14211               && strcmp (sec->name, ".opd") == 0)
14212             {
14213               /* This is a symbol defined in a linker script.  All
14214                  such are defined in output sections, even those
14215                  defined by simple assignment from a symbol defined in
14216                  an input section.  Transfer the symbol to an
14217                  appropriate input .opd section, so that a branch to
14218                  this symbol will be mapped to the location specified
14219                  by the opd entry.  */
14220               struct bfd_link_order *lo;
14221               for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
14222                 if (lo->type == bfd_indirect_link_order)
14223                   {
14224                     asection *isec = lo->u.indirect.section;
14225                     if (h_elf->root.u.def.value >= isec->output_offset
14226                         && h_elf->root.u.def.value < (isec->output_offset
14227                                                       + isec->size))
14228                       {
14229                         h_elf->root.u.def.value -= isec->output_offset;
14230                         h_elf->root.u.def.section = isec;
14231                         sec = isec;
14232                         break;
14233                       }
14234                   }
14235             }
14236         }
14237       h = (struct ppc_link_hash_entry *) h_elf;
14238
14239       if (sec != NULL && discarded_section (sec))
14240         {
14241           _bfd_clear_contents (ppc64_elf_howto_table[r_type],
14242                                input_bfd, input_section,
14243                                contents, rel->r_offset);
14244           wrel->r_offset = rel->r_offset;
14245           wrel->r_info = 0;
14246           wrel->r_addend = 0;
14247
14248           /* For ld -r, remove relocations in debug sections against
14249              symbols defined in discarded sections.  Not done for
14250              non-debug to preserve relocs in .eh_frame which the
14251              eh_frame editing code expects to be present.  */
14252           if (bfd_link_relocatable (info)
14253               && (input_section->flags & SEC_DEBUGGING))
14254             wrel--;
14255
14256           continue;
14257         }
14258
14259       if (bfd_link_relocatable (info))
14260         goto copy_reloc;
14261
14262       if (h != NULL && &h->elf == htab->elf.hgot)
14263         {
14264           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14265           sec = bfd_abs_section_ptr;
14266           unresolved_reloc = FALSE;
14267         }
14268
14269       /* TLS optimizations.  Replace instruction sequences and relocs
14270          based on information we collected in tls_optimize.  We edit
14271          RELOCS so that --emit-relocs will output something sensible
14272          for the final instruction stream.  */
14273       tls_mask = 0;
14274       tls_gd = 0;
14275       toc_symndx = 0;
14276       if (h != NULL)
14277         tls_mask = h->tls_mask;
14278       else if (local_got_ents != NULL)
14279         {
14280           struct plt_entry **local_plt = (struct plt_entry **)
14281             (local_got_ents + symtab_hdr->sh_info);
14282           unsigned char *lgot_masks = (unsigned char *)
14283             (local_plt + symtab_hdr->sh_info);
14284           tls_mask = lgot_masks[r_symndx];
14285         }
14286       if (((tls_mask & TLS_TLS) == 0 || tls_mask == (TLS_TLS | TLS_MARK))
14287           && (r_type == R_PPC64_TLS
14288               || r_type == R_PPC64_TLSGD
14289               || r_type == R_PPC64_TLSLD))
14290         {
14291           /* Check for toc tls entries.  */
14292           unsigned char *toc_tls;
14293
14294           if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14295                              &local_syms, rel, input_bfd))
14296             return FALSE;
14297
14298           if (toc_tls)
14299             tls_mask = *toc_tls;
14300         }
14301
14302       /* Check that tls relocs are used with tls syms, and non-tls
14303          relocs are used with non-tls syms.  */
14304       if (r_symndx != STN_UNDEF
14305           && r_type != R_PPC64_NONE
14306           && (h == NULL
14307               || h->elf.root.type == bfd_link_hash_defined
14308               || h->elf.root.type == bfd_link_hash_defweak)
14309           && (IS_PPC64_TLS_RELOC (r_type)
14310               != (sym_type == STT_TLS
14311                   || (sym_type == STT_SECTION
14312                       && (sec->flags & SEC_THREAD_LOCAL) != 0))))
14313         {
14314           if ((tls_mask & TLS_TLS) != 0
14315               && (r_type == R_PPC64_TLS
14316                   || r_type == R_PPC64_TLSGD
14317                   || r_type == R_PPC64_TLSLD))
14318             /* R_PPC64_TLS is OK against a symbol in the TOC.  */
14319             ;
14320           else
14321             info->callbacks->einfo
14322               (!IS_PPC64_TLS_RELOC (r_type)
14323                /* xgettext:c-format */
14324                ? _("%H: %s used with TLS symbol `%pT'\n")
14325                /* xgettext:c-format */
14326                : _("%H: %s used with non-TLS symbol `%pT'\n"),
14327                input_bfd, input_section, rel->r_offset,
14328                ppc64_elf_howto_table[r_type]->name,
14329                sym_name);
14330         }
14331
14332       /* Ensure reloc mapping code below stays sane.  */
14333       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
14334           || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
14335           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
14336           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
14337           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
14338           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
14339           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
14340           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
14341           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
14342           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
14343         abort ();
14344
14345       switch (r_type)
14346         {
14347         default:
14348           break;
14349
14350         case R_PPC64_LO_DS_OPT:
14351           insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
14352           if ((insn & (0x3f << 26)) != 58u << 26)
14353             abort ();
14354           insn += (14u << 26) - (58u << 26);
14355           bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
14356           r_type = R_PPC64_TOC16_LO;
14357           rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14358           break;
14359
14360         case R_PPC64_TOC16:
14361         case R_PPC64_TOC16_LO:
14362         case R_PPC64_TOC16_DS:
14363         case R_PPC64_TOC16_LO_DS:
14364           {
14365             /* Check for toc tls entries.  */
14366             unsigned char *toc_tls;
14367             int retval;
14368
14369             retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14370                                    &local_syms, rel, input_bfd);
14371             if (retval == 0)
14372               return FALSE;
14373
14374             if (toc_tls)
14375               {
14376                 tls_mask = *toc_tls;
14377                 if (r_type == R_PPC64_TOC16_DS
14378                     || r_type == R_PPC64_TOC16_LO_DS)
14379                   {
14380                     if ((tls_mask & TLS_TLS) != 0
14381                         && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
14382                       goto toctprel;
14383                   }
14384                 else
14385                   {
14386                     /* If we found a GD reloc pair, then we might be
14387                        doing a GD->IE transition.  */
14388                     if (retval == 2)
14389                       {
14390                         tls_gd = TLS_TPRELGD;
14391                         if ((tls_mask & TLS_TLS) != 0
14392                             && (tls_mask & TLS_GD) == 0)
14393                           goto tls_ldgd_opt;
14394                       }
14395                     else if (retval == 3)
14396                       {
14397                         if ((tls_mask & TLS_TLS) != 0
14398                             && (tls_mask & TLS_LD) == 0)
14399                           goto tls_ldgd_opt;
14400                       }
14401                   }
14402               }
14403           }
14404           break;
14405
14406         case R_PPC64_GOT_TPREL16_HI:
14407         case R_PPC64_GOT_TPREL16_HA:
14408           if ((tls_mask & TLS_TLS) != 0
14409               && (tls_mask & TLS_TPREL) == 0)
14410             {
14411               rel->r_offset -= d_offset;
14412               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14413               r_type = R_PPC64_NONE;
14414               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14415             }
14416           break;
14417
14418         case R_PPC64_GOT_TPREL16_DS:
14419         case R_PPC64_GOT_TPREL16_LO_DS:
14420           if ((tls_mask & TLS_TLS) != 0
14421               && (tls_mask & TLS_TPREL) == 0)
14422             {
14423             toctprel:
14424               insn = bfd_get_32 (input_bfd,
14425                                  contents + rel->r_offset - d_offset);
14426               insn &= 31 << 21;
14427               insn |= 0x3c0d0000;       /* addis 0,13,0 */
14428               bfd_put_32 (input_bfd, insn,
14429                           contents + rel->r_offset - d_offset);
14430               r_type = R_PPC64_TPREL16_HA;
14431               if (toc_symndx != 0)
14432                 {
14433                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14434                   rel->r_addend = toc_addend;
14435                   /* We changed the symbol.  Start over in order to
14436                      get h, sym, sec etc. right.  */
14437                   goto again;
14438                 }
14439               else
14440                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14441             }
14442           break;
14443
14444         case R_PPC64_TLS:
14445           if ((tls_mask & TLS_TLS) != 0
14446               && (tls_mask & TLS_TPREL) == 0)
14447             {
14448               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14449               insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
14450               if (insn == 0)
14451                 abort ();
14452               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
14453               /* Was PPC64_TLS which sits on insn boundary, now
14454                  PPC64_TPREL16_LO which is at low-order half-word.  */
14455               rel->r_offset += d_offset;
14456               r_type = R_PPC64_TPREL16_LO;
14457               if (toc_symndx != 0)
14458                 {
14459                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14460                   rel->r_addend = toc_addend;
14461                   /* We changed the symbol.  Start over in order to
14462                      get h, sym, sec etc. right.  */
14463                   goto again;
14464                 }
14465               else
14466                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14467             }
14468           break;
14469
14470         case R_PPC64_GOT_TLSGD16_HI:
14471         case R_PPC64_GOT_TLSGD16_HA:
14472           tls_gd = TLS_TPRELGD;
14473           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14474             goto tls_gdld_hi;
14475           break;
14476
14477         case R_PPC64_GOT_TLSLD16_HI:
14478         case R_PPC64_GOT_TLSLD16_HA:
14479           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14480             {
14481             tls_gdld_hi:
14482               if ((tls_mask & tls_gd) != 0)
14483                 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
14484                           + R_PPC64_GOT_TPREL16_DS);
14485               else
14486                 {
14487                   rel->r_offset -= d_offset;
14488                   bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14489                   r_type = R_PPC64_NONE;
14490                 }
14491               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14492             }
14493           break;
14494
14495         case R_PPC64_GOT_TLSGD16:
14496         case R_PPC64_GOT_TLSGD16_LO:
14497           tls_gd = TLS_TPRELGD;
14498           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14499             goto tls_ldgd_opt;
14500           break;
14501
14502         case R_PPC64_GOT_TLSLD16:
14503         case R_PPC64_GOT_TLSLD16_LO:
14504           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14505             {
14506               unsigned int insn1, insn2;
14507
14508             tls_ldgd_opt:
14509               offset = (bfd_vma) -1;
14510               /* If not using the newer R_PPC64_TLSGD/LD to mark
14511                  __tls_get_addr calls, we must trust that the call
14512                  stays with its arg setup insns, ie. that the next
14513                  reloc is the __tls_get_addr call associated with
14514                  the current reloc.  Edit both insns.  */
14515               if (input_section->has_tls_get_addr_call
14516                   && rel + 1 < relend
14517                   && branch_reloc_hash_match (input_bfd, rel + 1,
14518                                               htab->tls_get_addr,
14519                                               htab->tls_get_addr_fd))
14520                 offset = rel[1].r_offset;
14521               /* We read the low GOT_TLS (or TOC16) insn because we
14522                  need to keep the destination reg.  It may be
14523                  something other than the usual r3, and moved to r3
14524                  before the call by intervening code.  */
14525               insn1 = bfd_get_32 (input_bfd,
14526                                   contents + rel->r_offset - d_offset);
14527               if ((tls_mask & tls_gd) != 0)
14528                 {
14529                   /* IE */
14530                   insn1 &= (0x1f << 21) | (0x1f << 16);
14531                   insn1 |= 58 << 26;    /* ld */
14532                   insn2 = 0x7c636a14;   /* add 3,3,13 */
14533                   if (offset != (bfd_vma) -1)
14534                     rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14535                   if ((tls_mask & TLS_EXPLICIT) == 0)
14536                     r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
14537                               + R_PPC64_GOT_TPREL16_DS);
14538                   else
14539                     r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
14540                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14541                 }
14542               else
14543                 {
14544                   /* LE */
14545                   insn1 &= 0x1f << 21;
14546                   insn1 |= 0x3c0d0000;  /* addis r,13,0 */
14547                   insn2 = 0x38630000;   /* addi 3,3,0 */
14548                   if (tls_gd == 0)
14549                     {
14550                       /* Was an LD reloc.  */
14551                       if (toc_symndx)
14552                         sec = local_sections[toc_symndx];
14553                       for (r_symndx = 0;
14554                            r_symndx < symtab_hdr->sh_info;
14555                            r_symndx++)
14556                         if (local_sections[r_symndx] == sec)
14557                           break;
14558                       if (r_symndx >= symtab_hdr->sh_info)
14559                         r_symndx = STN_UNDEF;
14560                       rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14561                       if (r_symndx != STN_UNDEF)
14562                         rel->r_addend -= (local_syms[r_symndx].st_value
14563                                           + sec->output_offset
14564                                           + sec->output_section->vma);
14565                     }
14566                   else if (toc_symndx != 0)
14567                     {
14568                       r_symndx = toc_symndx;
14569                       rel->r_addend = toc_addend;
14570                     }
14571                   r_type = R_PPC64_TPREL16_HA;
14572                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14573                   if (offset != (bfd_vma) -1)
14574                     {
14575                       rel[1].r_info = ELF64_R_INFO (r_symndx,
14576                                                     R_PPC64_TPREL16_LO);
14577                       rel[1].r_offset = offset + d_offset;
14578                       rel[1].r_addend = rel->r_addend;
14579                     }
14580                 }
14581               bfd_put_32 (input_bfd, insn1,
14582                           contents + rel->r_offset - d_offset);
14583               if (offset != (bfd_vma) -1)
14584                 {
14585                   bfd_put_32 (input_bfd, insn2, contents + offset);
14586                   if (offset + 8 <= input_section->size)
14587                     {
14588                       insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
14589                       if (insn2 == LD_R2_0R1 + STK_TOC (htab))
14590                         bfd_put_32 (input_bfd, NOP, contents + offset + 4);
14591                     }
14592                 }
14593               if ((tls_mask & tls_gd) == 0
14594                   && (tls_gd == 0 || toc_symndx != 0))
14595                 {
14596                   /* We changed the symbol.  Start over in order
14597                      to get h, sym, sec etc. right.  */
14598                   goto again;
14599                 }
14600             }
14601           break;
14602
14603         case R_PPC64_TLSGD:
14604           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
14605               && rel + 1 < relend)
14606             {
14607               unsigned int insn2;
14608               enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14609
14610               offset = rel->r_offset;
14611               if (is_plt_seq_reloc (r_type1))
14612                 {
14613                   bfd_put_32 (output_bfd, NOP, contents + offset);
14614                   if (r_type1 == R_PPC64_PLT_PCREL34
14615                       || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14616                     bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14617                   rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14618                   break;
14619                 }
14620
14621               if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14622                 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14623
14624               if ((tls_mask & TLS_TPRELGD) != 0)
14625                 {
14626                   /* IE */
14627                   r_type = R_PPC64_NONE;
14628                   insn2 = 0x7c636a14;   /* add 3,3,13 */
14629                 }
14630               else
14631                 {
14632                   /* LE */
14633                   if (toc_symndx != 0)
14634                     {
14635                       r_symndx = toc_symndx;
14636                       rel->r_addend = toc_addend;
14637                     }
14638                   r_type = R_PPC64_TPREL16_LO;
14639                   rel->r_offset = offset + d_offset;
14640                   insn2 = 0x38630000;   /* addi 3,3,0 */
14641                 }
14642               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14643               /* Zap the reloc on the _tls_get_addr call too.  */
14644               BFD_ASSERT (offset == rel[1].r_offset);
14645               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14646               bfd_put_32 (input_bfd, insn2, contents + offset);
14647               if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0)
14648                 goto again;
14649             }
14650           break;
14651
14652         case R_PPC64_TLSLD:
14653           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
14654               && rel + 1 < relend)
14655             {
14656               unsigned int insn2;
14657               enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14658
14659               offset = rel->r_offset;
14660               if (is_plt_seq_reloc (r_type1))
14661                 {
14662                   bfd_put_32 (output_bfd, NOP, contents + offset);
14663                   if (r_type1 == R_PPC64_PLT_PCREL34
14664                       || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14665                     bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14666                   rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14667                   break;
14668                 }
14669
14670               if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14671                 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14672
14673               if (toc_symndx)
14674                 sec = local_sections[toc_symndx];
14675               for (r_symndx = 0;
14676                    r_symndx < symtab_hdr->sh_info;
14677                    r_symndx++)
14678                 if (local_sections[r_symndx] == sec)
14679                   break;
14680               if (r_symndx >= symtab_hdr->sh_info)
14681                 r_symndx = STN_UNDEF;
14682               rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14683               if (r_symndx != STN_UNDEF)
14684                 rel->r_addend -= (local_syms[r_symndx].st_value
14685                                   + sec->output_offset
14686                                   + sec->output_section->vma);
14687
14688               r_type = R_PPC64_TPREL16_LO;
14689               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14690               rel->r_offset = offset + d_offset;
14691               /* Zap the reloc on the _tls_get_addr call too.  */
14692               BFD_ASSERT (offset == rel[1].r_offset);
14693               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14694               insn2 = 0x38630000;       /* addi 3,3,0 */
14695               bfd_put_32 (input_bfd, insn2, contents + offset);
14696               goto again;
14697             }
14698           break;
14699
14700         case R_PPC64_DTPMOD64:
14701           if (rel + 1 < relend
14702               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
14703               && rel[1].r_offset == rel->r_offset + 8)
14704             {
14705               if ((tls_mask & TLS_GD) == 0)
14706                 {
14707                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
14708                   if ((tls_mask & TLS_TPRELGD) != 0)
14709                     r_type = R_PPC64_TPREL64;
14710                   else
14711                     {
14712                       bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
14713                       r_type = R_PPC64_NONE;
14714                     }
14715                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14716                 }
14717             }
14718           else
14719             {
14720               if ((tls_mask & TLS_LD) == 0)
14721                 {
14722                   bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
14723                   r_type = R_PPC64_NONE;
14724                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14725                 }
14726             }
14727           break;
14728
14729         case R_PPC64_TPREL64:
14730           if ((tls_mask & TLS_TPREL) == 0)
14731             {
14732               r_type = R_PPC64_NONE;
14733               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14734             }
14735           break;
14736
14737         case R_PPC64_ENTRY:
14738           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14739           if (!bfd_link_pic (info)
14740               && !info->traditional_format
14741               && relocation + 0x80008000 <= 0xffffffff)
14742             {
14743               unsigned int insn1, insn2;
14744
14745               insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
14746               insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14747               if ((insn1 & ~0xfffc) == LD_R2_0R12
14748                   && insn2 == ADD_R2_R2_R12)
14749                 {
14750                   bfd_put_32 (input_bfd,
14751                               LIS_R2 + PPC_HA (relocation),
14752                               contents + rel->r_offset);
14753                   bfd_put_32 (input_bfd,
14754                               ADDI_R2_R2 + PPC_LO (relocation),
14755                               contents + rel->r_offset + 4);
14756                 }
14757             }
14758           else
14759             {
14760               relocation -= (rel->r_offset
14761                              + input_section->output_offset
14762                              + input_section->output_section->vma);
14763               if (relocation + 0x80008000 <= 0xffffffff)
14764                 {
14765                   unsigned int insn1, insn2;
14766
14767                   insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
14768                   insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14769                   if ((insn1 & ~0xfffc) == LD_R2_0R12
14770                       && insn2 == ADD_R2_R2_R12)
14771                     {
14772                       bfd_put_32 (input_bfd,
14773                                   ADDIS_R2_R12 + PPC_HA (relocation),
14774                                   contents + rel->r_offset);
14775                       bfd_put_32 (input_bfd,
14776                                   ADDI_R2_R2 + PPC_LO (relocation),
14777                                   contents + rel->r_offset + 4);
14778                     }
14779                 }
14780             }
14781           break;
14782
14783         case R_PPC64_REL16_HA:
14784           /* If we are generating a non-PIC executable, edit
14785              .  0:      addis 2,12,.TOC.-0b@ha
14786              .          addi 2,2,.TOC.-0b@l
14787              used by ELFv2 global entry points to set up r2, to
14788              .          lis 2,.TOC.@ha
14789              .          addi 2,2,.TOC.@l
14790              if .TOC. is in range.  */
14791           if (!bfd_link_pic (info)
14792               && !info->traditional_format
14793               && !htab->opd_abi
14794               && rel->r_addend == d_offset
14795               && h != NULL && &h->elf == htab->elf.hgot
14796               && rel + 1 < relend
14797               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
14798               && rel[1].r_offset == rel->r_offset + 4
14799               && rel[1].r_addend == rel->r_addend + 4
14800               && relocation + 0x80008000 <= 0xffffffff)
14801             {
14802               unsigned int insn1, insn2;
14803               offset = rel->r_offset - d_offset;
14804               insn1 = bfd_get_32 (input_bfd, contents + offset);
14805               insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
14806               if ((insn1 & 0xffff0000) == ADDIS_R2_R12
14807                   && (insn2 & 0xffff0000) == ADDI_R2_R2)
14808                 {
14809                   r_type = R_PPC64_ADDR16_HA;
14810                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14811                   rel->r_addend -= d_offset;
14812                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
14813                   rel[1].r_addend -= d_offset + 4;
14814                   bfd_put_32 (input_bfd, LIS_R2, contents + offset);
14815                 }
14816             }
14817           break;
14818         }
14819
14820       /* Handle other relocations that tweak non-addend part of insn.  */
14821       insn = 0;
14822       max_br_offset = 1 << 25;
14823       addend = rel->r_addend;
14824       reloc_dest = DEST_NORMAL;
14825       switch (r_type)
14826         {
14827         default:
14828           break;
14829
14830         case R_PPC64_TOCSAVE:
14831           if (relocation + addend == (rel->r_offset
14832                                       + input_section->output_offset
14833                                       + input_section->output_section->vma)
14834               && tocsave_find (htab, NO_INSERT,
14835                                &local_syms, rel, input_bfd))
14836             {
14837               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14838               if (insn == NOP
14839                   || insn == CROR_151515 || insn == CROR_313131)
14840                 bfd_put_32 (input_bfd,
14841                             STD_R2_0R1 + STK_TOC (htab),
14842                             contents + rel->r_offset);
14843             }
14844           break;
14845
14846           /* Branch taken prediction relocations.  */
14847         case R_PPC64_ADDR14_BRTAKEN:
14848         case R_PPC64_REL14_BRTAKEN:
14849           insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
14850           /* Fall through.  */
14851
14852           /* Branch not taken prediction relocations.  */
14853         case R_PPC64_ADDR14_BRNTAKEN:
14854         case R_PPC64_REL14_BRNTAKEN:
14855           insn |= bfd_get_32 (input_bfd,
14856                               contents + rel->r_offset) & ~(0x01 << 21);
14857           /* Fall through.  */
14858
14859         case R_PPC64_REL14:
14860           max_br_offset = 1 << 15;
14861           /* Fall through.  */
14862
14863         case R_PPC64_REL24:
14864         case R_PPC64_REL24_NOTOC:
14865         case R_PPC64_PLTCALL:
14866         case R_PPC64_PLTCALL_NOTOC:
14867           /* Calls to functions with a different TOC, such as calls to
14868              shared objects, need to alter the TOC pointer.  This is
14869              done using a linkage stub.  A REL24 branching to these
14870              linkage stubs needs to be followed by a nop, as the nop
14871              will be replaced with an instruction to restore the TOC
14872              base pointer.  */
14873           fdh = h;
14874           if (h != NULL
14875               && h->oh != NULL
14876               && h->oh->is_func_descriptor)
14877             fdh = ppc_follow_link (h->oh);
14878           stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
14879                                            htab);
14880           if ((r_type == R_PPC64_PLTCALL
14881                || r_type == R_PPC64_PLTCALL_NOTOC)
14882               && stub_entry != NULL
14883               && stub_entry->stub_type >= ppc_stub_plt_call
14884               && stub_entry->stub_type <= ppc_stub_plt_call_both)
14885             stub_entry = NULL;
14886
14887           if (stub_entry != NULL
14888               && ((stub_entry->stub_type >= ppc_stub_plt_call
14889                    && stub_entry->stub_type <= ppc_stub_plt_call_both)
14890                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
14891                   || stub_entry->stub_type == ppc_stub_plt_branch_both
14892                   || stub_entry->stub_type == ppc_stub_long_branch_r2off
14893                   || stub_entry->stub_type == ppc_stub_long_branch_both))
14894             {
14895               bfd_boolean can_plt_call = FALSE;
14896
14897               if (stub_entry->stub_type == ppc_stub_plt_call
14898                   && !htab->opd_abi
14899                   && htab->params->plt_localentry0 != 0
14900                   && is_elfv2_localentry0 (&h->elf))
14901                 {
14902                   /* The function doesn't use or change r2.  */
14903                   can_plt_call = TRUE;
14904                 }
14905               else if (r_type == R_PPC64_REL24_NOTOC)
14906                 {
14907                   /* NOTOC calls don't need to restore r2.  */
14908                   can_plt_call = TRUE;
14909                 }
14910
14911               /* All of these stubs may modify r2, so there must be a
14912                  branch and link followed by a nop.  The nop is
14913                  replaced by an insn to restore r2.  */
14914               else if (rel->r_offset + 8 <= input_section->size)
14915                 {
14916                   unsigned long br;
14917
14918                   br = bfd_get_32 (input_bfd,
14919                                    contents + rel->r_offset);
14920                   if ((br & 1) != 0)
14921                     {
14922                       unsigned long nop;
14923
14924                       nop = bfd_get_32 (input_bfd,
14925                                         contents + rel->r_offset + 4);
14926                       if (nop == LD_R2_0R1 + STK_TOC (htab))
14927                         can_plt_call = TRUE;
14928                       else if (nop == NOP
14929                                || nop == CROR_151515
14930                                || nop == CROR_313131)
14931                         {
14932                           if (h != NULL
14933                               && (h == htab->tls_get_addr_fd
14934                                   || h == htab->tls_get_addr)
14935                               && htab->params->tls_get_addr_opt)
14936                             {
14937                               /* Special stub used, leave nop alone.  */
14938                             }
14939                           else
14940                             bfd_put_32 (input_bfd,
14941                                         LD_R2_0R1 + STK_TOC (htab),
14942                                         contents + rel->r_offset + 4);
14943                           can_plt_call = TRUE;
14944                         }
14945                     }
14946                 }
14947
14948               if (!can_plt_call && h != NULL)
14949                 {
14950                   const char *name = h->elf.root.root.string;
14951
14952                   if (*name == '.')
14953                     ++name;
14954
14955                   if (strncmp (name, "__libc_start_main", 17) == 0
14956                       && (name[17] == 0 || name[17] == '@'))
14957                     {
14958                       /* Allow crt1 branch to go via a toc adjusting
14959                          stub.  Other calls that never return could do
14960                          the same, if we could detect such.  */
14961                       can_plt_call = TRUE;
14962                     }
14963                 }
14964
14965               if (!can_plt_call)
14966                 {
14967                   /* g++ as of 20130507 emits self-calls without a
14968                      following nop.  This is arguably wrong since we
14969                      have conflicting information.  On the one hand a
14970                      global symbol and on the other a local call
14971                      sequence, but don't error for this special case.
14972                      It isn't possible to cheaply verify we have
14973                      exactly such a call.  Allow all calls to the same
14974                      section.  */
14975                   asection *code_sec = sec;
14976
14977                   if (get_opd_info (sec) != NULL)
14978                     {
14979                       bfd_vma off = (relocation + addend
14980                                      - sec->output_section->vma
14981                                      - sec->output_offset);
14982
14983                       opd_entry_value (sec, off, &code_sec, NULL, FALSE);
14984                     }
14985                   if (code_sec == input_section)
14986                     can_plt_call = TRUE;
14987                 }
14988
14989               if (!can_plt_call)
14990                 {
14991                   if (stub_entry->stub_type >= ppc_stub_plt_call
14992                       && stub_entry->stub_type <= ppc_stub_plt_call_both)
14993                     info->callbacks->einfo
14994                       /* xgettext:c-format */
14995                       (_("%H: call to `%pT' lacks nop, can't restore toc; "
14996                          "(plt call stub)\n"),
14997                        input_bfd, input_section, rel->r_offset, sym_name);
14998                   else
14999                     info->callbacks->einfo
15000                       /* xgettext:c-format */
15001                       (_("%H: call to `%pT' lacks nop, can't restore toc; "
15002                          "(toc save/adjust stub)\n"),
15003                        input_bfd, input_section, rel->r_offset, sym_name);
15004
15005                   bfd_set_error (bfd_error_bad_value);
15006                   ret = FALSE;
15007                 }
15008
15009               if (can_plt_call
15010                   && stub_entry->stub_type >= ppc_stub_plt_call
15011                   && stub_entry->stub_type <= ppc_stub_plt_call_both)
15012                 unresolved_reloc = FALSE;
15013             }
15014
15015           if ((stub_entry == NULL
15016                || stub_entry->stub_type == ppc_stub_long_branch
15017                || stub_entry->stub_type == ppc_stub_plt_branch)
15018               && get_opd_info (sec) != NULL)
15019             {
15020               /* The branch destination is the value of the opd entry. */
15021               bfd_vma off = (relocation + addend
15022                              - sec->output_section->vma
15023                              - sec->output_offset);
15024               bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
15025               if (dest != (bfd_vma) -1)
15026                 {
15027                   relocation = dest;
15028                   addend = 0;
15029                   reloc_dest = DEST_OPD;
15030                 }
15031             }
15032
15033           /* If the branch is out of reach we ought to have a long
15034              branch stub.  */
15035           from = (rel->r_offset
15036                   + input_section->output_offset
15037                   + input_section->output_section->vma);
15038
15039           relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
15040                                                   ? fdh->elf.other
15041                                                   : sym->st_other);
15042
15043           if (stub_entry != NULL
15044               && (stub_entry->stub_type == ppc_stub_long_branch
15045                   || stub_entry->stub_type == ppc_stub_plt_branch)
15046               && (r_type == R_PPC64_ADDR14_BRTAKEN
15047                   || r_type == R_PPC64_ADDR14_BRNTAKEN
15048                   || (relocation + addend - from + max_br_offset
15049                       < 2 * max_br_offset)))
15050             /* Don't use the stub if this branch is in range.  */
15051             stub_entry = NULL;
15052
15053           if (stub_entry != NULL
15054               && (stub_entry->stub_type == ppc_stub_long_branch_notoc
15055                   || stub_entry->stub_type == ppc_stub_long_branch_both
15056                   || stub_entry->stub_type == ppc_stub_plt_branch_notoc
15057                   || stub_entry->stub_type == ppc_stub_plt_branch_both)
15058               && (r_type != R_PPC64_REL24_NOTOC
15059                   || ((fdh ? fdh->elf.other : sym->st_other)
15060                       & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
15061               && (relocation + addend - from + max_br_offset
15062                   < 2 * max_br_offset))
15063             stub_entry = NULL;
15064
15065           if (stub_entry != NULL
15066               && (stub_entry->stub_type == ppc_stub_long_branch_r2off
15067                   || stub_entry->stub_type == ppc_stub_long_branch_both
15068                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15069                   || stub_entry->stub_type == ppc_stub_plt_branch_both)
15070               && r_type == R_PPC64_REL24_NOTOC
15071               && (relocation + addend - from + max_br_offset
15072                   < 2 * max_br_offset))
15073             stub_entry = NULL;
15074
15075           if (stub_entry != NULL)
15076             {
15077               /* Munge up the value and addend so that we call the stub
15078                  rather than the procedure directly.  */
15079               asection *stub_sec = stub_entry->group->stub_sec;
15080
15081               if (stub_entry->stub_type == ppc_stub_save_res)
15082                 relocation += (stub_sec->output_offset
15083                                + stub_sec->output_section->vma
15084                                + stub_sec->size - htab->sfpr->size
15085                                - htab->sfpr->output_offset
15086                                - htab->sfpr->output_section->vma);
15087               else
15088                 relocation = (stub_entry->stub_offset
15089                               + stub_sec->output_offset
15090                               + stub_sec->output_section->vma);
15091               addend = 0;
15092               reloc_dest = DEST_STUB;
15093
15094               if (((stub_entry->stub_type == ppc_stub_plt_call
15095                     && ALWAYS_EMIT_R2SAVE)
15096                    || stub_entry->stub_type == ppc_stub_plt_call_r2save
15097                    || stub_entry->stub_type == ppc_stub_plt_call_both)
15098                   && !(h != NULL
15099                        && (h == htab->tls_get_addr_fd
15100                            || h == htab->tls_get_addr)
15101                        && htab->params->tls_get_addr_opt)
15102                   && rel + 1 < relend
15103                   && rel[1].r_offset == rel->r_offset + 4
15104                   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
15105                 relocation += 4;
15106               else if ((stub_entry->stub_type == ppc_stub_long_branch_both
15107                         || stub_entry->stub_type == ppc_stub_plt_branch_both
15108                         || stub_entry->stub_type == ppc_stub_plt_call_both)
15109                        && r_type == R_PPC64_REL24_NOTOC)
15110                 relocation += 4;
15111
15112               if (r_type == R_PPC64_REL24_NOTOC
15113                   && (stub_entry->stub_type == ppc_stub_plt_call_notoc
15114                       || stub_entry->stub_type == ppc_stub_plt_call_both))
15115                 htab->notoc_plt = 1;
15116             }
15117
15118           if (insn != 0)
15119             {
15120               if (is_isa_v2)
15121                 {
15122                   /* Set 'a' bit.  This is 0b00010 in BO field for branch
15123                      on CR(BI) insns (BO == 001at or 011at), and 0b01000
15124                      for branch on CTR insns (BO == 1a00t or 1a01t).  */
15125                   if ((insn & (0x14 << 21)) == (0x04 << 21))
15126                     insn |= 0x02 << 21;
15127                   else if ((insn & (0x14 << 21)) == (0x10 << 21))
15128                     insn |= 0x08 << 21;
15129                   else
15130                     break;
15131                 }
15132               else
15133                 {
15134                   /* Invert 'y' bit if not the default.  */
15135                   if ((bfd_signed_vma) (relocation + addend - from) < 0)
15136                     insn ^= 0x01 << 21;
15137                 }
15138
15139               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15140             }
15141
15142           /* NOP out calls to undefined weak functions.
15143              We can thus call a weak function without first
15144              checking whether the function is defined.  */
15145           else if (h != NULL
15146                    && h->elf.root.type == bfd_link_hash_undefweak
15147                    && h->elf.dynindx == -1
15148                    && (r_type == R_PPC64_REL24
15149                        || r_type == R_PPC64_REL24_NOTOC)
15150                    && relocation == 0
15151                    && addend == 0)
15152             {
15153               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15154               goto copy_reloc;
15155             }
15156           break;
15157
15158         case R_PPC64_GOT16_DS:
15159           from = TOCstart + htab->sec_info[input_section->id].toc_off;
15160           if (relocation + addend - from + 0x8000 < 0x10000
15161               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15162             {
15163               insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15164               if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */)
15165                 {
15166                   insn += (14u << 26) - (58u << 26);
15167                   bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15168                   r_type = R_PPC64_TOC16;
15169                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15170                 }
15171             }
15172           break;
15173
15174         case R_PPC64_GOT16_LO_DS:
15175         case R_PPC64_GOT16_HA:
15176           from = TOCstart + htab->sec_info[input_section->id].toc_off;
15177           if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
15178               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15179             {
15180               insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15181               if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */)
15182                 {
15183                   insn += (14u << 26) - (58u << 26);
15184                   bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15185                   r_type = R_PPC64_TOC16_LO;
15186                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15187                 }
15188               else if ((insn & (0x3f << 26)) == 15u << 26 /* addis */)
15189                 {
15190                   r_type = R_PPC64_TOC16_HA;
15191                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15192                 }
15193             }
15194           break;
15195
15196         case R_PPC64_GOT_PCREL34:
15197           from = (rel->r_offset
15198                   + input_section->output_section->vma
15199                   + input_section->output_offset);
15200           if (relocation - from + (1ULL << 33) < 1ULL << 34
15201               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15202             {
15203               offset = rel->r_offset;
15204               pinsn = bfd_get_32 (input_bfd, contents + offset);
15205               pinsn <<= 32;
15206               pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15207               if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15208                    == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
15209                 {
15210                   /* Replace with paddi.  */
15211                   pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
15212                   r_type = R_PPC64_PCREL34;
15213                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15214                   bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
15215                   bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
15216                   goto pcrelopt;
15217                 }
15218             }
15219           break;
15220
15221         case R_PPC64_PCREL34:
15222           if (SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15223             {
15224               offset = rel->r_offset;
15225               pinsn = bfd_get_32 (input_bfd, contents + offset);
15226               pinsn <<= 32;
15227               pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15228               if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15229                    == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
15230                        | (14ULL << 26) /* paddi */))
15231                 {
15232                 pcrelopt:
15233                   if (rel + 1 < relend
15234                       && rel[1].r_offset == offset
15235                       && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT))
15236                     {
15237                       bfd_vma off2 = rel[1].r_addend;
15238                       if (off2 == 0)
15239                         /* zero means next insn.  */
15240                         off2 = 8;
15241                       off2 += offset;
15242                       if (off2 + 4 <= input_section->size)
15243                         {
15244                           uint64_t pinsn2;
15245                           pinsn2 = bfd_get_32 (input_bfd, contents + off2);
15246                           pinsn2 <<= 32;
15247                           if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15248                             break;
15249                           if (xlate_pcrel_opt (&pinsn, &pinsn2))
15250                             {
15251                               bfd_put_32 (input_bfd, pinsn >> 32,
15252                                           contents + offset);
15253                               bfd_put_32 (input_bfd, pinsn,
15254                                           contents + offset + 4);
15255                               bfd_put_32 (input_bfd, pinsn2 >> 32,
15256                                           contents + off2);
15257                             }
15258                         }
15259                     }
15260                 }
15261             }
15262           break;
15263         }
15264
15265       /* Set `addend'.  */
15266       tls_type = 0;
15267       save_unresolved_reloc = unresolved_reloc;
15268       switch (r_type)
15269         {
15270         default:
15271           /* xgettext:c-format */
15272           _bfd_error_handler (_("%pB: %s unsupported"),
15273                               input_bfd, ppc64_elf_howto_table[r_type]->name);
15274
15275           bfd_set_error (bfd_error_bad_value);
15276           ret = FALSE;
15277           goto copy_reloc;
15278
15279         case R_PPC64_NONE:
15280         case R_PPC64_TLS:
15281         case R_PPC64_TLSGD:
15282         case R_PPC64_TLSLD:
15283         case R_PPC64_TOCSAVE:
15284         case R_PPC64_GNU_VTINHERIT:
15285         case R_PPC64_GNU_VTENTRY:
15286         case R_PPC64_ENTRY:
15287         case R_PPC64_PCREL_OPT:
15288           goto copy_reloc;
15289
15290           /* GOT16 relocations.  Like an ADDR16 using the symbol's
15291              address in the GOT as relocation value instead of the
15292              symbol's value itself.  Also, create a GOT entry for the
15293              symbol and put the symbol value there.  */
15294         case R_PPC64_GOT_TLSGD16:
15295         case R_PPC64_GOT_TLSGD16_LO:
15296         case R_PPC64_GOT_TLSGD16_HI:
15297         case R_PPC64_GOT_TLSGD16_HA:
15298           tls_type = TLS_TLS | TLS_GD;
15299           goto dogot;
15300
15301         case R_PPC64_GOT_TLSLD16:
15302         case R_PPC64_GOT_TLSLD16_LO:
15303         case R_PPC64_GOT_TLSLD16_HI:
15304         case R_PPC64_GOT_TLSLD16_HA:
15305           tls_type = TLS_TLS | TLS_LD;
15306           goto dogot;
15307
15308         case R_PPC64_GOT_TPREL16_DS:
15309         case R_PPC64_GOT_TPREL16_LO_DS:
15310         case R_PPC64_GOT_TPREL16_HI:
15311         case R_PPC64_GOT_TPREL16_HA:
15312           tls_type = TLS_TLS | TLS_TPREL;
15313           goto dogot;
15314
15315         case R_PPC64_GOT_DTPREL16_DS:
15316         case R_PPC64_GOT_DTPREL16_LO_DS:
15317         case R_PPC64_GOT_DTPREL16_HI:
15318         case R_PPC64_GOT_DTPREL16_HA:
15319           tls_type = TLS_TLS | TLS_DTPREL;
15320           goto dogot;
15321
15322         case R_PPC64_GOT16:
15323         case R_PPC64_GOT16_LO:
15324         case R_PPC64_GOT16_HI:
15325         case R_PPC64_GOT16_HA:
15326         case R_PPC64_GOT16_DS:
15327         case R_PPC64_GOT16_LO_DS:
15328         case R_PPC64_GOT_PCREL34:
15329         dogot:
15330           {
15331             /* Relocation is to the entry for this symbol in the global
15332                offset table.  */
15333             asection *got;
15334             bfd_vma *offp;
15335             bfd_vma off;
15336             unsigned long indx = 0;
15337             struct got_entry *ent;
15338             bfd_vma sym_addend = orig_rel.r_addend;
15339
15340             if (r_type == R_PPC64_GOT_PCREL34)
15341               sym_addend = 0;
15342
15343             if (tls_type == (TLS_TLS | TLS_LD)
15344                 && (h == NULL
15345                     || !h->elf.def_dynamic))
15346               ent = ppc64_tlsld_got (input_bfd);
15347             else
15348               {
15349                 if (h != NULL)
15350                   {
15351                     if (!htab->elf.dynamic_sections_created
15352                         || h->elf.dynindx == -1
15353                         || SYMBOL_REFERENCES_LOCAL (info, &h->elf)
15354                         || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
15355                       /* This is actually a static link, or it is a
15356                          -Bsymbolic link and the symbol is defined
15357                          locally, or the symbol was forced to be local
15358                          because of a version file.  */
15359                       ;
15360                     else
15361                       {
15362                         indx = h->elf.dynindx;
15363                         unresolved_reloc = FALSE;
15364                       }
15365                     ent = h->elf.got.glist;
15366                   }
15367                 else
15368                   {
15369                     if (local_got_ents == NULL)
15370                       abort ();
15371                     ent = local_got_ents[r_symndx];
15372                   }
15373
15374                 for (; ent != NULL; ent = ent->next)
15375                   if (ent->addend == sym_addend
15376                       && ent->owner == input_bfd
15377                       && ent->tls_type == tls_type)
15378                     break;
15379               }
15380
15381             if (ent == NULL)
15382               abort ();
15383             if (ent->is_indirect)
15384               ent = ent->got.ent;
15385             offp = &ent->got.offset;
15386             got = ppc64_elf_tdata (ent->owner)->got;
15387             if (got == NULL)
15388               abort ();
15389
15390             /* The offset must always be a multiple of 8.  We use the
15391                least significant bit to record whether we have already
15392                processed this entry.  */
15393             off = *offp;
15394             if ((off & 1) != 0)
15395               off &= ~1;
15396             else
15397               {
15398                 /* Generate relocs for the dynamic linker, except in
15399                    the case of TLSLD where we'll use one entry per
15400                    module.  */
15401                 asection *relgot;
15402                 bfd_boolean ifunc;
15403
15404                 *offp = off | 1;
15405                 relgot = NULL;
15406                 ifunc = (h != NULL
15407                          ? h->elf.type == STT_GNU_IFUNC
15408                          : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
15409                 if (ifunc)
15410                   {
15411                     relgot = htab->elf.irelplt;
15412                     if (indx == 0)
15413                       htab->local_ifunc_resolver = 1;
15414                     else if (is_static_defined (&h->elf))
15415                       htab->maybe_local_ifunc_resolver = 1;
15416                   }
15417                 else if (indx != 0
15418                          || (bfd_link_pic (info)
15419                              && (h == NULL
15420                                  || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf)
15421                                  || (tls_type == (TLS_TLS | TLS_LD)
15422                                      && !h->elf.def_dynamic))
15423                              && !(tls_type == (TLS_TLS | TLS_TPREL)
15424                                   && bfd_link_executable (info)
15425                                   && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
15426                   relgot = ppc64_elf_tdata (ent->owner)->relgot;
15427                 if (relgot != NULL)
15428                   {
15429                     outrel.r_offset = (got->output_section->vma
15430                                        + got->output_offset
15431                                        + off);
15432                     outrel.r_addend = sym_addend;
15433                     if (tls_type & (TLS_LD | TLS_GD))
15434                       {
15435                         outrel.r_addend = 0;
15436                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
15437                         if (tls_type == (TLS_TLS | TLS_GD))
15438                           {
15439                             loc = relgot->contents;
15440                             loc += (relgot->reloc_count++
15441                                     * sizeof (Elf64_External_Rela));
15442                             bfd_elf64_swap_reloca_out (output_bfd,
15443                                                        &outrel, loc);
15444                             outrel.r_offset += 8;
15445                             outrel.r_addend = sym_addend;
15446                             outrel.r_info
15447                               = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15448                           }
15449                       }
15450                     else if (tls_type == (TLS_TLS | TLS_DTPREL))
15451                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15452                     else if (tls_type == (TLS_TLS | TLS_TPREL))
15453                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
15454                     else if (indx != 0)
15455                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
15456                     else
15457                       {
15458                         if (ifunc)
15459                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
15460                         else
15461                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
15462
15463                         /* Write the .got section contents for the sake
15464                            of prelink.  */
15465                         loc = got->contents + off;
15466                         bfd_put_64 (output_bfd, outrel.r_addend + relocation,
15467                                     loc);
15468                       }
15469
15470                     if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
15471                       {
15472                         outrel.r_addend += relocation;
15473                         if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
15474                           {
15475                             if (htab->elf.tls_sec == NULL)
15476                               outrel.r_addend = 0;
15477                             else
15478                               outrel.r_addend -= htab->elf.tls_sec->vma;
15479                           }
15480                       }
15481                     loc = relgot->contents;
15482                     loc += (relgot->reloc_count++
15483                             * sizeof (Elf64_External_Rela));
15484                     bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
15485                   }
15486
15487                 /* Init the .got section contents here if we're not
15488                    emitting a reloc.  */
15489                 else
15490                   {
15491                     relocation += sym_addend;
15492                     if (tls_type != 0)
15493                       {
15494                         if (htab->elf.tls_sec == NULL)
15495                           relocation = 0;
15496                         else
15497                           {
15498                             if (tls_type & TLS_LD)
15499                               relocation = 0;
15500                             else
15501                               relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
15502                             if (tls_type & TLS_TPREL)
15503                               relocation += DTP_OFFSET - TP_OFFSET;
15504                           }
15505
15506                         if (tls_type & (TLS_GD | TLS_LD))
15507                           {
15508                             bfd_put_64 (output_bfd, relocation,
15509                                         got->contents + off + 8);
15510                             relocation = 1;
15511                           }
15512                       }
15513                     bfd_put_64 (output_bfd, relocation,
15514                                 got->contents + off);
15515                   }
15516               }
15517
15518             if (off >= (bfd_vma) -2)
15519               abort ();
15520
15521             relocation = got->output_section->vma + got->output_offset + off;
15522             if (r_type != R_PPC64_GOT_PCREL34)
15523               addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
15524           }
15525           break;
15526
15527         case R_PPC64_PLT16_HA:
15528         case R_PPC64_PLT16_HI:
15529         case R_PPC64_PLT16_LO:
15530         case R_PPC64_PLT16_LO_DS:
15531         case R_PPC64_PLT_PCREL34:
15532         case R_PPC64_PLT_PCREL34_NOTOC:
15533         case R_PPC64_PLT32:
15534         case R_PPC64_PLT64:
15535         case R_PPC64_PLTSEQ:
15536         case R_PPC64_PLTSEQ_NOTOC:
15537         case R_PPC64_PLTCALL:
15538         case R_PPC64_PLTCALL_NOTOC:
15539           /* Relocation is to the entry for this symbol in the
15540              procedure linkage table.  */
15541           unresolved_reloc = TRUE;
15542           {
15543             struct plt_entry **plt_list = NULL;
15544             if (h != NULL)
15545               plt_list = &h->elf.plt.plist;
15546             else if (local_got_ents != NULL)
15547               {
15548                 struct plt_entry **local_plt = (struct plt_entry **)
15549                   (local_got_ents + symtab_hdr->sh_info);
15550                 plt_list = local_plt + r_symndx;
15551               }
15552             if (plt_list)
15553               {
15554                 struct plt_entry *ent;
15555                 bfd_vma sym_addend = orig_rel.r_addend;
15556
15557                 if (r_type == R_PPC64_PLT_PCREL34
15558                     || r_type == R_PPC64_PLT_PCREL34_NOTOC)
15559                   sym_addend = 0;
15560
15561                 for (ent = *plt_list; ent != NULL; ent = ent->next)
15562                   if (ent->plt.offset != (bfd_vma) -1
15563                       && ent->addend == sym_addend)
15564                     {
15565                       asection *plt;
15566                       bfd_vma got;
15567
15568                       plt = htab->elf.splt;
15569                       if (!htab->elf.dynamic_sections_created
15570                           || h == NULL
15571                           || h->elf.dynindx == -1)
15572                         {
15573                           if (h != NULL
15574                               ? h->elf.type == STT_GNU_IFUNC
15575                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
15576                             plt = htab->elf.iplt;
15577                           else
15578                             plt = htab->pltlocal;
15579                         }
15580                       relocation = (plt->output_section->vma
15581                                     + plt->output_offset
15582                                     + ent->plt.offset);
15583                       if (r_type == R_PPC64_PLT16_HA
15584                           || r_type == R_PPC64_PLT16_HI
15585                           || r_type == R_PPC64_PLT16_LO
15586                           || r_type == R_PPC64_PLT16_LO_DS)
15587                         {
15588                           got = (elf_gp (output_bfd)
15589                                  + htab->sec_info[input_section->id].toc_off);
15590                           relocation -= got;
15591                         }
15592                       if (r_type != R_PPC64_PLT_PCREL34
15593                           && r_type != R_PPC64_PLT_PCREL34_NOTOC)
15594                         addend = 0;
15595                       unresolved_reloc = FALSE;
15596                       break;
15597                     }
15598               }
15599           }
15600           break;
15601
15602         case R_PPC64_TOC:
15603           /* Relocation value is TOC base.  */
15604           relocation = TOCstart;
15605           if (r_symndx == STN_UNDEF)
15606             relocation += htab->sec_info[input_section->id].toc_off;
15607           else if (unresolved_reloc)
15608             ;
15609           else if (sec != NULL && sec->id < htab->sec_info_arr_size)
15610             relocation += htab->sec_info[sec->id].toc_off;
15611           else
15612             unresolved_reloc = TRUE;
15613           goto dodyn;
15614
15615           /* TOC16 relocs.  We want the offset relative to the TOC base,
15616              which is the address of the start of the TOC plus 0x8000.
15617              The TOC consists of sections .got, .toc, .tocbss, and .plt,
15618              in this order.  */
15619         case R_PPC64_TOC16:
15620         case R_PPC64_TOC16_LO:
15621         case R_PPC64_TOC16_HI:
15622         case R_PPC64_TOC16_DS:
15623         case R_PPC64_TOC16_LO_DS:
15624         case R_PPC64_TOC16_HA:
15625           addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
15626           break;
15627
15628           /* Relocate against the beginning of the section.  */
15629         case R_PPC64_SECTOFF:
15630         case R_PPC64_SECTOFF_LO:
15631         case R_PPC64_SECTOFF_HI:
15632         case R_PPC64_SECTOFF_DS:
15633         case R_PPC64_SECTOFF_LO_DS:
15634         case R_PPC64_SECTOFF_HA:
15635           if (sec != NULL)
15636             addend -= sec->output_section->vma;
15637           break;
15638
15639         case R_PPC64_REL16:
15640         case R_PPC64_REL16_LO:
15641         case R_PPC64_REL16_HI:
15642         case R_PPC64_REL16_HA:
15643         case R_PPC64_REL16_HIGH:
15644         case R_PPC64_REL16_HIGHA:
15645         case R_PPC64_REL16_HIGHER:
15646         case R_PPC64_REL16_HIGHERA:
15647         case R_PPC64_REL16_HIGHEST:
15648         case R_PPC64_REL16_HIGHESTA:
15649         case R_PPC64_REL16_HIGHER34:
15650         case R_PPC64_REL16_HIGHERA34:
15651         case R_PPC64_REL16_HIGHEST34:
15652         case R_PPC64_REL16_HIGHESTA34:
15653         case R_PPC64_REL16DX_HA:
15654         case R_PPC64_REL14:
15655         case R_PPC64_REL14_BRNTAKEN:
15656         case R_PPC64_REL14_BRTAKEN:
15657         case R_PPC64_REL24:
15658         case R_PPC64_REL24_NOTOC:
15659         case R_PPC64_PCREL34:
15660         case R_PPC64_PCREL28:
15661           break;
15662
15663         case R_PPC64_TPREL16:
15664         case R_PPC64_TPREL16_LO:
15665         case R_PPC64_TPREL16_HI:
15666         case R_PPC64_TPREL16_HA:
15667         case R_PPC64_TPREL16_DS:
15668         case R_PPC64_TPREL16_LO_DS:
15669         case R_PPC64_TPREL16_HIGH:
15670         case R_PPC64_TPREL16_HIGHA:
15671         case R_PPC64_TPREL16_HIGHER:
15672         case R_PPC64_TPREL16_HIGHERA:
15673         case R_PPC64_TPREL16_HIGHEST:
15674         case R_PPC64_TPREL16_HIGHESTA:
15675           if (h != NULL
15676               && h->elf.root.type == bfd_link_hash_undefweak
15677               && h->elf.dynindx == -1)
15678             {
15679               /* Make this relocation against an undefined weak symbol
15680                  resolve to zero.  This is really just a tweak, since
15681                  code using weak externs ought to check that they are
15682                  defined before using them.  */
15683               bfd_byte *p = contents + rel->r_offset - d_offset;
15684
15685               insn = bfd_get_32 (input_bfd, p);
15686               insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
15687               if (insn != 0)
15688                 bfd_put_32 (input_bfd, insn, p);
15689               break;
15690             }
15691           if (htab->elf.tls_sec != NULL)
15692             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
15693           /* The TPREL16 relocs shouldn't really be used in shared
15694              libs or with non-local symbols as that will result in
15695              DT_TEXTREL being set, but support them anyway.  */
15696           goto dodyn;
15697
15698         case R_PPC64_DTPREL16:
15699         case R_PPC64_DTPREL16_LO:
15700         case R_PPC64_DTPREL16_HI:
15701         case R_PPC64_DTPREL16_HA:
15702         case R_PPC64_DTPREL16_DS:
15703         case R_PPC64_DTPREL16_LO_DS:
15704         case R_PPC64_DTPREL16_HIGH:
15705         case R_PPC64_DTPREL16_HIGHA:
15706         case R_PPC64_DTPREL16_HIGHER:
15707         case R_PPC64_DTPREL16_HIGHERA:
15708         case R_PPC64_DTPREL16_HIGHEST:
15709         case R_PPC64_DTPREL16_HIGHESTA:
15710           if (htab->elf.tls_sec != NULL)
15711             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
15712           break;
15713
15714         case R_PPC64_ADDR64_LOCAL:
15715           addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
15716                                               ? h->elf.other
15717                                               : sym->st_other);
15718           break;
15719
15720         case R_PPC64_DTPMOD64:
15721           relocation = 1;
15722           addend = 0;
15723           goto dodyn;
15724
15725         case R_PPC64_TPREL64:
15726           if (htab->elf.tls_sec != NULL)
15727             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
15728           goto dodyn;
15729
15730         case R_PPC64_DTPREL64:
15731           if (htab->elf.tls_sec != NULL)
15732             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
15733           /* Fall through.  */
15734
15735           /* Relocations that may need to be propagated if this is a
15736              dynamic object.  */
15737         case R_PPC64_REL30:
15738         case R_PPC64_REL32:
15739         case R_PPC64_REL64:
15740         case R_PPC64_ADDR14:
15741         case R_PPC64_ADDR14_BRNTAKEN:
15742         case R_PPC64_ADDR14_BRTAKEN:
15743         case R_PPC64_ADDR16:
15744         case R_PPC64_ADDR16_DS:
15745         case R_PPC64_ADDR16_HA:
15746         case R_PPC64_ADDR16_HI:
15747         case R_PPC64_ADDR16_HIGH:
15748         case R_PPC64_ADDR16_HIGHA:
15749         case R_PPC64_ADDR16_HIGHER:
15750         case R_PPC64_ADDR16_HIGHERA:
15751         case R_PPC64_ADDR16_HIGHEST:
15752         case R_PPC64_ADDR16_HIGHESTA:
15753         case R_PPC64_ADDR16_LO:
15754         case R_PPC64_ADDR16_LO_DS:
15755         case R_PPC64_ADDR16_HIGHER34:
15756         case R_PPC64_ADDR16_HIGHERA34:
15757         case R_PPC64_ADDR16_HIGHEST34:
15758         case R_PPC64_ADDR16_HIGHESTA34:
15759         case R_PPC64_ADDR24:
15760         case R_PPC64_ADDR32:
15761         case R_PPC64_ADDR64:
15762         case R_PPC64_UADDR16:
15763         case R_PPC64_UADDR32:
15764         case R_PPC64_UADDR64:
15765         case R_PPC64_D34:
15766         case R_PPC64_D34_LO:
15767         case R_PPC64_D34_HI30:
15768         case R_PPC64_D34_HA30:
15769         case R_PPC64_D28:
15770         dodyn:
15771           if ((input_section->flags & SEC_ALLOC) == 0)
15772             break;
15773
15774           if (NO_OPD_RELOCS && is_opd)
15775             break;
15776
15777           if (bfd_link_pic (info)
15778               ? ((h == NULL
15779                   || h->dyn_relocs != NULL)
15780                  && ((h != NULL && pc_dynrelocs (h))
15781                      || must_be_dyn_reloc (info, r_type)))
15782               : (h != NULL
15783                  ? h->dyn_relocs != NULL
15784                  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
15785             {
15786               bfd_boolean skip, relocate;
15787               asection *sreloc;
15788               bfd_vma out_off;
15789               long indx = 0;
15790
15791               /* When generating a dynamic object, these relocations
15792                  are copied into the output file to be resolved at run
15793                  time.  */
15794
15795               skip = FALSE;
15796               relocate = FALSE;
15797
15798               out_off = _bfd_elf_section_offset (output_bfd, info,
15799                                                  input_section, rel->r_offset);
15800               if (out_off == (bfd_vma) -1)
15801                 skip = TRUE;
15802               else if (out_off == (bfd_vma) -2)
15803                 skip = TRUE, relocate = TRUE;
15804               out_off += (input_section->output_section->vma
15805                           + input_section->output_offset);
15806               outrel.r_offset = out_off;
15807               outrel.r_addend = rel->r_addend;
15808
15809               /* Optimize unaligned reloc use.  */
15810               if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
15811                   || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
15812                 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
15813               else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
15814                        || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
15815                 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
15816               else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
15817                        || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
15818                 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
15819
15820               if (skip)
15821                 memset (&outrel, 0, sizeof outrel);
15822               else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
15823                        && !is_opd
15824                        && r_type != R_PPC64_TOC)
15825                 {
15826                   indx = h->elf.dynindx;
15827                   BFD_ASSERT (indx != -1);
15828                   outrel.r_info = ELF64_R_INFO (indx, r_type);
15829                 }
15830               else
15831                 {
15832                   /* This symbol is local, or marked to become local,
15833                      or this is an opd section reloc which must point
15834                      at a local function.  */
15835                   outrel.r_addend += relocation;
15836                   if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
15837                     {
15838                       if (is_opd && h != NULL)
15839                         {
15840                           /* Lie about opd entries.  This case occurs
15841                              when building shared libraries and we
15842                              reference a function in another shared
15843                              lib.  The same thing happens for a weak
15844                              definition in an application that's
15845                              overridden by a strong definition in a
15846                              shared lib.  (I believe this is a generic
15847                              bug in binutils handling of weak syms.)
15848                              In these cases we won't use the opd
15849                              entry in this lib.  */
15850                           unresolved_reloc = FALSE;
15851                         }
15852                       if (!is_opd
15853                           && r_type == R_PPC64_ADDR64
15854                           && (h != NULL
15855                               ? h->elf.type == STT_GNU_IFUNC
15856                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
15857                         outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
15858                       else
15859                         {
15860                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
15861
15862                           /* We need to relocate .opd contents for ld.so.
15863                              Prelink also wants simple and consistent rules
15864                              for relocs.  This make all RELATIVE relocs have
15865                              *r_offset equal to r_addend.  */
15866                           relocate = TRUE;
15867                         }
15868                     }
15869                   else
15870                     {
15871                       if (h != NULL
15872                           ? h->elf.type == STT_GNU_IFUNC
15873                           : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
15874                         {
15875                           info->callbacks->einfo
15876                             /* xgettext:c-format */
15877                             (_("%H: %s for indirect "
15878                                "function `%pT' unsupported\n"),
15879                              input_bfd, input_section, rel->r_offset,
15880                              ppc64_elf_howto_table[r_type]->name,
15881                              sym_name);
15882                           ret = FALSE;
15883                         }
15884                       else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
15885                         ;
15886                       else if (sec == NULL || sec->owner == NULL)
15887                         {
15888                           bfd_set_error (bfd_error_bad_value);
15889                           return FALSE;
15890                         }
15891                       else
15892                         {
15893                           asection *osec = sec->output_section;
15894
15895                           if ((osec->flags & SEC_THREAD_LOCAL) != 0)
15896                             {
15897                               /* TLS symbol values are relative to the
15898                                  TLS segment.  Dynamic relocations for
15899                                  local TLS symbols therefore can't be
15900                                  reduced to a relocation against their
15901                                  section symbol because it holds the
15902                                  address of the section, not a value
15903                                  relative to the TLS segment.  We could
15904                                  change the .tdata dynamic section symbol
15905                                  to be zero value but STN_UNDEF works
15906                                  and is used elsewhere, eg. for TPREL64
15907                                  GOT relocs against local TLS symbols.  */
15908                               osec = htab->elf.tls_sec;
15909                               indx = 0;
15910                             }
15911                           else
15912                             {
15913                               indx = elf_section_data (osec)->dynindx;
15914                               if (indx == 0)
15915                                 {
15916                                   if ((osec->flags & SEC_READONLY) == 0
15917                                       && htab->elf.data_index_section != NULL)
15918                                     osec = htab->elf.data_index_section;
15919                                   else
15920                                     osec = htab->elf.text_index_section;
15921                                   indx = elf_section_data (osec)->dynindx;
15922                                 }
15923                               BFD_ASSERT (indx != 0);
15924                             }
15925
15926                           /* We are turning this relocation into one
15927                              against a section symbol, so subtract out
15928                              the output section's address but not the
15929                              offset of the input section in the output
15930                              section.  */
15931                           outrel.r_addend -= osec->vma;
15932                         }
15933
15934                       outrel.r_info = ELF64_R_INFO (indx, r_type);
15935                     }
15936                 }
15937
15938               sreloc = elf_section_data (input_section)->sreloc;
15939               if (h != NULL
15940                   ? h->elf.type == STT_GNU_IFUNC
15941                   : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
15942                 {
15943                   sreloc = htab->elf.irelplt;
15944                   if (indx == 0)
15945                     htab->local_ifunc_resolver = 1;
15946                   else if (is_static_defined (&h->elf))
15947                     htab->maybe_local_ifunc_resolver = 1;
15948                 }
15949               if (sreloc == NULL)
15950                 abort ();
15951
15952               if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
15953                   >= sreloc->size)
15954                 abort ();
15955               loc = sreloc->contents;
15956               loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
15957               bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
15958
15959               /* If this reloc is against an external symbol, it will
15960                  be computed at runtime, so there's no need to do
15961                  anything now.  However, for the sake of prelink ensure
15962                  that the section contents are a known value.  */
15963               if (!relocate)
15964                 {
15965                   unresolved_reloc = FALSE;
15966                   /* The value chosen here is quite arbitrary as ld.so
15967                      ignores section contents except for the special
15968                      case of .opd where the contents might be accessed
15969                      before relocation.  Choose zero, as that won't
15970                      cause reloc overflow.  */
15971                   relocation = 0;
15972                   addend = 0;
15973                   /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
15974                      to improve backward compatibility with older
15975                      versions of ld.  */
15976                   if (r_type == R_PPC64_ADDR64)
15977                     addend = outrel.r_addend;
15978                   /* Adjust pc_relative relocs to have zero in *r_offset.  */
15979                   else if (ppc64_elf_howto_table[r_type]->pc_relative)
15980                     addend = outrel.r_offset;
15981                 }
15982             }
15983           break;
15984
15985         case R_PPC64_COPY:
15986         case R_PPC64_GLOB_DAT:
15987         case R_PPC64_JMP_SLOT:
15988         case R_PPC64_JMP_IREL:
15989         case R_PPC64_RELATIVE:
15990           /* We shouldn't ever see these dynamic relocs in relocatable
15991              files.  */
15992           /* Fall through.  */
15993
15994         case R_PPC64_PLTGOT16:
15995         case R_PPC64_PLTGOT16_DS:
15996         case R_PPC64_PLTGOT16_HA:
15997         case R_PPC64_PLTGOT16_HI:
15998         case R_PPC64_PLTGOT16_LO:
15999         case R_PPC64_PLTGOT16_LO_DS:
16000         case R_PPC64_PLTREL32:
16001         case R_PPC64_PLTREL64:
16002           /* These ones haven't been implemented yet.  */
16003
16004           info->callbacks->einfo
16005             /* xgettext:c-format */
16006             (_("%P: %pB: %s is not supported for `%pT'\n"),
16007              input_bfd,
16008              ppc64_elf_howto_table[r_type]->name, sym_name);
16009
16010           bfd_set_error (bfd_error_invalid_operation);
16011           ret = FALSE;
16012           goto copy_reloc;
16013         }
16014
16015       /* Multi-instruction sequences that access the TOC can be
16016          optimized, eg. addis ra,r2,0; addi rb,ra,x;
16017          to             nop;           addi rb,r2,x;  */
16018       switch (r_type)
16019         {
16020         default:
16021           break;
16022
16023         case R_PPC64_GOT_TLSLD16_HI:
16024         case R_PPC64_GOT_TLSGD16_HI:
16025         case R_PPC64_GOT_TPREL16_HI:
16026         case R_PPC64_GOT_DTPREL16_HI:
16027         case R_PPC64_GOT16_HI:
16028         case R_PPC64_TOC16_HI:
16029           /* These relocs would only be useful if building up an
16030              offset to later add to r2, perhaps in an indexed
16031              addressing mode instruction.  Don't try to optimize.
16032              Unfortunately, the possibility of someone building up an
16033              offset like this or even with the HA relocs, means that
16034              we need to check the high insn when optimizing the low
16035              insn.  */
16036           break;
16037
16038         case R_PPC64_PLTCALL_NOTOC:
16039           if (!unresolved_reloc)
16040             htab->notoc_plt = 1;
16041           /* Fall through.  */
16042         case R_PPC64_PLTCALL:
16043           if (unresolved_reloc)
16044             {
16045               /* No plt entry.  Make this into a direct call.  */
16046               bfd_byte *p = contents + rel->r_offset;
16047               insn = bfd_get_32 (input_bfd, p);
16048               insn &= 1;
16049               bfd_put_32 (input_bfd, B_DOT | insn, p);
16050               if (r_type == R_PPC64_PLTCALL)
16051                 bfd_put_32 (input_bfd, NOP, p + 4);
16052               unresolved_reloc = save_unresolved_reloc;
16053               r_type = R_PPC64_REL24;
16054             }
16055           break;
16056
16057         case R_PPC64_PLTSEQ_NOTOC:
16058         case R_PPC64_PLTSEQ:
16059           if (unresolved_reloc)
16060             {
16061               unresolved_reloc = FALSE;
16062               goto nop_it;
16063             }
16064           break;
16065
16066         case R_PPC64_PLT_PCREL34_NOTOC:
16067           if (!unresolved_reloc)
16068             htab->notoc_plt = 1;
16069           /* Fall through.  */
16070         case R_PPC64_PLT_PCREL34:
16071           if (unresolved_reloc)
16072             {
16073               bfd_byte *p = contents + rel->r_offset;
16074               bfd_put_32 (input_bfd, PNOP >> 32, p);
16075               bfd_put_32 (input_bfd, PNOP, p + 4);
16076               unresolved_reloc = FALSE;
16077               goto copy_reloc;
16078             }
16079           break;
16080
16081         case R_PPC64_PLT16_HA:
16082           if (unresolved_reloc)
16083             {
16084               unresolved_reloc = FALSE;
16085               goto nop_it;
16086             }
16087           /* Fall through.  */
16088         case R_PPC64_GOT_TLSLD16_HA:
16089         case R_PPC64_GOT_TLSGD16_HA:
16090         case R_PPC64_GOT_TPREL16_HA:
16091         case R_PPC64_GOT_DTPREL16_HA:
16092         case R_PPC64_GOT16_HA:
16093         case R_PPC64_TOC16_HA:
16094           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16095               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16096             {
16097               bfd_byte *p;
16098             nop_it:
16099               p = contents + (rel->r_offset & ~3);
16100               bfd_put_32 (input_bfd, NOP, p);
16101               goto copy_reloc;
16102             }
16103           break;
16104
16105         case R_PPC64_PLT16_LO:
16106         case R_PPC64_PLT16_LO_DS:
16107           if (unresolved_reloc)
16108             {
16109               unresolved_reloc = FALSE;
16110               goto nop_it;
16111             }
16112           /* Fall through.  */
16113         case R_PPC64_GOT_TLSLD16_LO:
16114         case R_PPC64_GOT_TLSGD16_LO:
16115         case R_PPC64_GOT_TPREL16_LO_DS:
16116         case R_PPC64_GOT_DTPREL16_LO_DS:
16117         case R_PPC64_GOT16_LO:
16118         case R_PPC64_GOT16_LO_DS:
16119         case R_PPC64_TOC16_LO:
16120         case R_PPC64_TOC16_LO_DS:
16121           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16122               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16123             {
16124               bfd_byte *p = contents + (rel->r_offset & ~3);
16125               insn = bfd_get_32 (input_bfd, p);
16126               if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
16127                 {
16128                   /* Transform addic to addi when we change reg.  */
16129                   insn &= ~((0x3f << 26) | (0x1f << 16));
16130                   insn |= (14u << 26) | (2 << 16);
16131                 }
16132               else
16133                 {
16134                   insn &= ~(0x1f << 16);
16135                   insn |= 2 << 16;
16136                 }
16137               bfd_put_32 (input_bfd, insn, p);
16138             }
16139           break;
16140
16141         case R_PPC64_TPREL16_HA:
16142           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16143             {
16144               bfd_byte *p = contents + (rel->r_offset & ~3);
16145               insn = bfd_get_32 (input_bfd, p);
16146               if ((insn & ((0x3f << 26) | 0x1f << 16))
16147                   != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
16148                 /* xgettext:c-format */
16149                 info->callbacks->minfo
16150                   (_("%H: warning: %s unexpected insn %#x.\n"),
16151                    input_bfd, input_section, rel->r_offset,
16152                    ppc64_elf_howto_table[r_type]->name, insn);
16153               else
16154                 {
16155                   bfd_put_32 (input_bfd, NOP, p);
16156                   goto copy_reloc;
16157                 }
16158             }
16159           break;
16160
16161         case R_PPC64_TPREL16_LO:
16162         case R_PPC64_TPREL16_LO_DS:
16163           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16164             {
16165               bfd_byte *p = contents + (rel->r_offset & ~3);
16166               insn = bfd_get_32 (input_bfd, p);
16167               insn &= ~(0x1f << 16);
16168               insn |= 13 << 16;
16169               bfd_put_32 (input_bfd, insn, p);
16170             }
16171           break;
16172         }
16173
16174       /* Do any further special processing.  */
16175       switch (r_type)
16176         {
16177         default:
16178           break;
16179
16180         case R_PPC64_REL16_HA:
16181         case R_PPC64_REL16_HIGHA:
16182         case R_PPC64_REL16_HIGHERA:
16183         case R_PPC64_REL16_HIGHESTA:
16184         case R_PPC64_REL16DX_HA:
16185         case R_PPC64_ADDR16_HA:
16186         case R_PPC64_ADDR16_HIGHA:
16187         case R_PPC64_ADDR16_HIGHERA:
16188         case R_PPC64_ADDR16_HIGHESTA:
16189         case R_PPC64_TOC16_HA:
16190         case R_PPC64_SECTOFF_HA:
16191         case R_PPC64_TPREL16_HA:
16192         case R_PPC64_TPREL16_HIGHA:
16193         case R_PPC64_TPREL16_HIGHERA:
16194         case R_PPC64_TPREL16_HIGHESTA:
16195         case R_PPC64_DTPREL16_HA:
16196         case R_PPC64_DTPREL16_HIGHA:
16197         case R_PPC64_DTPREL16_HIGHERA:
16198         case R_PPC64_DTPREL16_HIGHESTA:
16199           /* It's just possible that this symbol is a weak symbol
16200              that's not actually defined anywhere. In that case,
16201              'sec' would be NULL, and we should leave the symbol
16202              alone (it will be set to zero elsewhere in the link).  */
16203           if (sec == NULL)
16204             break;
16205           /* Fall through.  */
16206
16207         case R_PPC64_GOT16_HA:
16208         case R_PPC64_PLTGOT16_HA:
16209         case R_PPC64_PLT16_HA:
16210         case R_PPC64_GOT_TLSGD16_HA:
16211         case R_PPC64_GOT_TLSLD16_HA:
16212         case R_PPC64_GOT_TPREL16_HA:
16213         case R_PPC64_GOT_DTPREL16_HA:
16214           /* Add 0x10000 if sign bit in 0:15 is set.
16215              Bits 0:15 are not used.  */
16216           addend += 0x8000;
16217           break;
16218
16219         case R_PPC64_D34_HA30:
16220         case R_PPC64_ADDR16_HIGHERA34:
16221         case R_PPC64_ADDR16_HIGHESTA34:
16222         case R_PPC64_REL16_HIGHERA34:
16223         case R_PPC64_REL16_HIGHESTA34:
16224           if (sec != NULL)
16225             addend += 1ULL << 33;
16226           break;
16227
16228         case R_PPC64_ADDR16_DS:
16229         case R_PPC64_ADDR16_LO_DS:
16230         case R_PPC64_GOT16_DS:
16231         case R_PPC64_GOT16_LO_DS:
16232         case R_PPC64_PLT16_LO_DS:
16233         case R_PPC64_SECTOFF_DS:
16234         case R_PPC64_SECTOFF_LO_DS:
16235         case R_PPC64_TOC16_DS:
16236         case R_PPC64_TOC16_LO_DS:
16237         case R_PPC64_PLTGOT16_DS:
16238         case R_PPC64_PLTGOT16_LO_DS:
16239         case R_PPC64_GOT_TPREL16_DS:
16240         case R_PPC64_GOT_TPREL16_LO_DS:
16241         case R_PPC64_GOT_DTPREL16_DS:
16242         case R_PPC64_GOT_DTPREL16_LO_DS:
16243         case R_PPC64_TPREL16_DS:
16244         case R_PPC64_TPREL16_LO_DS:
16245         case R_PPC64_DTPREL16_DS:
16246         case R_PPC64_DTPREL16_LO_DS:
16247           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16248           mask = 3;
16249           /* If this reloc is against an lq, lxv, or stxv insn, then
16250              the value must be a multiple of 16.  This is somewhat of
16251              a hack, but the "correct" way to do this by defining _DQ
16252              forms of all the _DS relocs bloats all reloc switches in
16253              this file.  It doesn't make much sense to use these
16254              relocs in data, so testing the insn should be safe.  */
16255           if ((insn & (0x3f << 26)) == (56u << 26)
16256               || ((insn & (0x3f << 26)) == (61u << 26) && (insn & 3) == 1))
16257             mask = 15;
16258           relocation += addend;
16259           addend = insn & (mask ^ 3);
16260           if ((relocation & mask) != 0)
16261             {
16262               relocation ^= relocation & mask;
16263               info->callbacks->einfo
16264                 /* xgettext:c-format */
16265                 (_("%H: error: %s not a multiple of %u\n"),
16266                  input_bfd, input_section, rel->r_offset,
16267                  ppc64_elf_howto_table[r_type]->name,
16268                  mask + 1);
16269               bfd_set_error (bfd_error_bad_value);
16270               ret = FALSE;
16271               goto copy_reloc;
16272             }
16273           break;
16274         }
16275
16276       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
16277          because such sections are not SEC_ALLOC and thus ld.so will
16278          not process them.  */
16279       howto = ppc64_elf_howto_table[(int) r_type];
16280       if (unresolved_reloc
16281           && !((input_section->flags & SEC_DEBUGGING) != 0
16282                && h->elf.def_dynamic)
16283           && _bfd_elf_section_offset (output_bfd, info, input_section,
16284                                       rel->r_offset) != (bfd_vma) -1)
16285         {
16286           info->callbacks->einfo
16287             /* xgettext:c-format */
16288             (_("%H: unresolvable %s against `%pT'\n"),
16289              input_bfd, input_section, rel->r_offset,
16290              howto->name,
16291              h->elf.root.root.string);
16292           ret = FALSE;
16293         }
16294
16295       /* 16-bit fields in insns mostly have signed values, but a
16296          few insns have 16-bit unsigned values.  Really, we should
16297          have different reloc types.  */
16298       if (howto->complain_on_overflow != complain_overflow_dont
16299           && howto->dst_mask == 0xffff
16300           && (input_section->flags & SEC_CODE) != 0)
16301         {
16302           enum complain_overflow complain = complain_overflow_signed;
16303
16304           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16305           if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */)
16306             complain = complain_overflow_bitfield;
16307           else if (howto->rightshift == 0
16308                    ? ((insn & (0x3f << 26)) == 28u << 26 /* andi */
16309                       || (insn & (0x3f << 26)) == 24u << 26 /* ori */
16310                       || (insn & (0x3f << 26)) == 26u << 26 /* xori */)
16311                    : ((insn & (0x3f << 26)) == 29u << 26 /* andis */
16312                       || (insn & (0x3f << 26)) == 25u << 26 /* oris */
16313                       || (insn & (0x3f << 26)) == 27u << 26 /* xoris */))
16314             complain = complain_overflow_unsigned;
16315           if (howto->complain_on_overflow != complain)
16316             {
16317               alt_howto = *howto;
16318               alt_howto.complain_on_overflow = complain;
16319               howto = &alt_howto;
16320             }
16321         }
16322
16323       switch (r_type)
16324         {
16325           /* Split field relocs aren't handled by _bfd_final_link_relocate.  */
16326         case R_PPC64_D34:
16327         case R_PPC64_D34_LO:
16328         case R_PPC64_D34_HI30:
16329         case R_PPC64_D34_HA30:
16330         case R_PPC64_PCREL34:
16331         case R_PPC64_GOT_PCREL34:
16332         case R_PPC64_PLT_PCREL34:
16333         case R_PPC64_PLT_PCREL34_NOTOC:
16334         case R_PPC64_D28:
16335         case R_PPC64_PCREL28:
16336           if (rel->r_offset + 8 > input_section->size)
16337             r = bfd_reloc_outofrange;
16338           else
16339             {
16340               relocation += addend;
16341               if (howto->pc_relative)
16342                 relocation -= (rel->r_offset
16343                                + input_section->output_offset
16344                                + input_section->output_section->vma);
16345               relocation >>= howto->rightshift;
16346
16347               pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16348               pinsn <<= 32;
16349               pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
16350
16351               pinsn &= ~howto->dst_mask;
16352               pinsn |= (((relocation << 16) | (relocation & 0xffff))
16353                         & howto->dst_mask);
16354               bfd_put_32 (input_bfd, pinsn >> 32, contents + rel->r_offset);
16355               bfd_put_32 (input_bfd, pinsn, contents + rel->r_offset + 4);
16356               r = bfd_reloc_ok;
16357               if (howto->complain_on_overflow == complain_overflow_signed
16358                   && (relocation + (1ULL << (howto->bitsize - 1))
16359                       >= 1ULL << howto->bitsize))
16360                 r = bfd_reloc_overflow;
16361             }
16362           break;
16363
16364         case R_PPC64_REL16DX_HA:
16365           if (rel->r_offset + 4 > input_section->size)
16366             r = bfd_reloc_outofrange;
16367           else
16368             {
16369               relocation += addend;
16370               relocation -= (rel->r_offset
16371                              + input_section->output_offset
16372                              + input_section->output_section->vma);
16373               relocation = (bfd_signed_vma) relocation >> 16;
16374               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16375               insn &= ~0x1fffc1;
16376               insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
16377               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
16378               r = bfd_reloc_ok;
16379               if (relocation + 0x8000 > 0xffff)
16380                 r = bfd_reloc_overflow;
16381             }
16382           break;
16383
16384         default:
16385           r = _bfd_final_link_relocate (howto, input_bfd, input_section,
16386                                         contents, rel->r_offset,
16387                                         relocation, addend);
16388         }
16389
16390       if (r != bfd_reloc_ok)
16391         {
16392           char *more_info = NULL;
16393           const char *reloc_name = howto->name;
16394
16395           if (reloc_dest != DEST_NORMAL)
16396             {
16397               more_info = bfd_malloc (strlen (reloc_name) + 8);
16398               if (more_info != NULL)
16399                 {
16400                   strcpy (more_info, reloc_name);
16401                   strcat (more_info, (reloc_dest == DEST_OPD
16402                                       ? " (OPD)" : " (stub)"));
16403                   reloc_name = more_info;
16404                 }
16405             }
16406
16407           if (r == bfd_reloc_overflow)
16408             {
16409               /* On code like "if (foo) foo();" don't report overflow
16410                  on a branch to zero when foo is undefined.  */
16411               if (!warned
16412                   && (reloc_dest == DEST_STUB
16413                       || !(h != NULL
16414                            && (h->elf.root.type == bfd_link_hash_undefweak
16415                                || h->elf.root.type == bfd_link_hash_undefined)
16416                            && is_branch_reloc (r_type))))
16417                 info->callbacks->reloc_overflow (info, &h->elf.root,
16418                                                  sym_name, reloc_name,
16419                                                  orig_rel.r_addend,
16420                                                  input_bfd, input_section,
16421                                                  rel->r_offset);
16422             }
16423           else
16424             {
16425               info->callbacks->einfo
16426                 /* xgettext:c-format */
16427                 (_("%H: %s against `%pT': error %d\n"),
16428                  input_bfd, input_section, rel->r_offset,
16429                  reloc_name, sym_name, (int) r);
16430               ret = FALSE;
16431             }
16432           if (more_info != NULL)
16433             free (more_info);
16434         }
16435     copy_reloc:
16436       if (wrel != rel)
16437         *wrel = *rel;
16438     }
16439
16440   if (wrel != rel)
16441     {
16442       Elf_Internal_Shdr *rel_hdr;
16443       size_t deleted = rel - wrel;
16444
16445       rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
16446       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16447       if (rel_hdr->sh_size == 0)
16448         {
16449           /* It is too late to remove an empty reloc section.  Leave
16450              one NONE reloc.
16451              ??? What is wrong with an empty section???  */
16452           rel_hdr->sh_size = rel_hdr->sh_entsize;
16453           deleted -= 1;
16454         }
16455       rel_hdr = _bfd_elf_single_rel_hdr (input_section);
16456       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16457       input_section->reloc_count -= deleted;
16458     }
16459
16460   /* If we're emitting relocations, then shortly after this function
16461      returns, reloc offsets and addends for this section will be
16462      adjusted.  Worse, reloc symbol indices will be for the output
16463      file rather than the input.  Save a copy of the relocs for
16464      opd_entry_value.  */
16465   if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
16466     {
16467       bfd_size_type amt;
16468       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
16469       rel = bfd_alloc (input_bfd, amt);
16470       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
16471       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
16472       if (rel == NULL)
16473         return FALSE;
16474       memcpy (rel, relocs, amt);
16475     }
16476   return ret;
16477 }
16478
16479 /* Adjust the value of any local symbols in opd sections.  */
16480
16481 static int
16482 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
16483                               const char *name ATTRIBUTE_UNUSED,
16484                               Elf_Internal_Sym *elfsym,
16485                               asection *input_sec,
16486                               struct elf_link_hash_entry *h)
16487 {
16488   struct _opd_sec_data *opd;
16489   long adjust;
16490   bfd_vma value;
16491
16492   if (h != NULL)
16493     return 1;
16494
16495   opd = get_opd_info (input_sec);
16496   if (opd == NULL || opd->adjust == NULL)
16497     return 1;
16498
16499   value = elfsym->st_value - input_sec->output_offset;
16500   if (!bfd_link_relocatable (info))
16501     value -= input_sec->output_section->vma;
16502
16503   adjust = opd->adjust[OPD_NDX (value)];
16504   if (adjust == -1)
16505     return 2;
16506
16507   elfsym->st_value += adjust;
16508   return 1;
16509 }
16510
16511 /* Finish up dynamic symbol handling.  We set the contents of various
16512    dynamic sections here.  */
16513
16514 static bfd_boolean
16515 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
16516                                  struct bfd_link_info *info,
16517                                  struct elf_link_hash_entry *h,
16518                                  Elf_Internal_Sym *sym)
16519 {
16520   struct ppc_link_hash_table *htab;
16521   struct plt_entry *ent;
16522
16523   htab = ppc_hash_table (info);
16524   if (htab == NULL)
16525     return FALSE;
16526
16527   if (!htab->opd_abi && !h->def_regular)
16528     for (ent = h->plt.plist; ent != NULL; ent = ent->next)
16529       if (ent->plt.offset != (bfd_vma) -1)
16530         {
16531           /* Mark the symbol as undefined, rather than as
16532              defined in glink.  Leave the value if there were
16533              any relocations where pointer equality matters
16534              (this is a clue for the dynamic linker, to make
16535              function pointer comparisons work between an
16536              application and shared library), otherwise set it
16537              to zero.  */
16538           sym->st_shndx = SHN_UNDEF;
16539           if (!h->pointer_equality_needed)
16540             sym->st_value = 0;
16541           else if (!h->ref_regular_nonweak)
16542             {
16543               /* This breaks function pointer comparisons, but
16544                  that is better than breaking tests for a NULL
16545                  function pointer.  */
16546               sym->st_value = 0;
16547             }
16548           break;
16549         }
16550
16551   if (h->needs_copy)
16552     {
16553       /* This symbol needs a copy reloc.  Set it up.  */
16554       Elf_Internal_Rela rela;
16555       asection *srel;
16556       bfd_byte *loc;
16557
16558       if (h->dynindx == -1
16559           || (h->root.type != bfd_link_hash_defined
16560               && h->root.type != bfd_link_hash_defweak)
16561           || htab->elf.srelbss == NULL
16562           || htab->elf.sreldynrelro == NULL)
16563         abort ();
16564
16565       rela.r_offset = (h->root.u.def.value
16566                        + h->root.u.def.section->output_section->vma
16567                        + h->root.u.def.section->output_offset);
16568       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
16569       rela.r_addend = 0;
16570       if (h->root.u.def.section == htab->elf.sdynrelro)
16571         srel = htab->elf.sreldynrelro;
16572       else
16573         srel = htab->elf.srelbss;
16574       loc = srel->contents;
16575       loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
16576       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
16577     }
16578
16579   return TRUE;
16580 }
16581
16582 /* Used to decide how to sort relocs in an optimal manner for the
16583    dynamic linker, before writing them out.  */
16584
16585 static enum elf_reloc_type_class
16586 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
16587                             const asection *rel_sec,
16588                             const Elf_Internal_Rela *rela)
16589 {
16590   enum elf_ppc64_reloc_type r_type;
16591   struct ppc_link_hash_table *htab = ppc_hash_table (info);
16592
16593   if (rel_sec == htab->elf.irelplt)
16594     return reloc_class_ifunc;
16595
16596   r_type = ELF64_R_TYPE (rela->r_info);
16597   switch (r_type)
16598     {
16599     case R_PPC64_RELATIVE:
16600       return reloc_class_relative;
16601     case R_PPC64_JMP_SLOT:
16602       return reloc_class_plt;
16603     case R_PPC64_COPY:
16604       return reloc_class_copy;
16605     default:
16606       return reloc_class_normal;
16607     }
16608 }
16609
16610 /* Finish up the dynamic sections.  */
16611
16612 static bfd_boolean
16613 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
16614                                    struct bfd_link_info *info)
16615 {
16616   struct ppc_link_hash_table *htab;
16617   bfd *dynobj;
16618   asection *sdyn;
16619
16620   htab = ppc_hash_table (info);
16621   if (htab == NULL)
16622     return FALSE;
16623
16624   dynobj = htab->elf.dynobj;
16625   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
16626
16627   if (htab->elf.dynamic_sections_created)
16628     {
16629       Elf64_External_Dyn *dyncon, *dynconend;
16630
16631       if (sdyn == NULL || htab->elf.sgot == NULL)
16632         abort ();
16633
16634       dyncon = (Elf64_External_Dyn *) sdyn->contents;
16635       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
16636       for (; dyncon < dynconend; dyncon++)
16637         {
16638           Elf_Internal_Dyn dyn;
16639           asection *s;
16640
16641           bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
16642
16643           switch (dyn.d_tag)
16644             {
16645             default:
16646               continue;
16647
16648             case DT_PPC64_GLINK:
16649               s = htab->glink;
16650               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16651               /* We stupidly defined DT_PPC64_GLINK to be the start
16652                  of glink rather than the first entry point, which is
16653                  what ld.so needs, and now have a bigger stub to
16654                  support automatic multiple TOCs.  */
16655               dyn.d_un.d_ptr += GLINK_PLTRESOLVE_SIZE (htab) - 8 * 4;
16656               break;
16657
16658             case DT_PPC64_OPD:
16659               s = bfd_get_section_by_name (output_bfd, ".opd");
16660               if (s == NULL)
16661                 continue;
16662               dyn.d_un.d_ptr = s->vma;
16663               break;
16664
16665             case DT_PPC64_OPT:
16666               if ((htab->do_multi_toc && htab->multi_toc_needed)
16667                   || htab->notoc_plt)
16668                 dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
16669               if (htab->has_plt_localentry0)
16670                 dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
16671               break;
16672
16673             case DT_PPC64_OPDSZ:
16674               s = bfd_get_section_by_name (output_bfd, ".opd");
16675               if (s == NULL)
16676                 continue;
16677               dyn.d_un.d_val = s->size;
16678               break;
16679
16680             case DT_PLTGOT:
16681               s = htab->elf.splt;
16682               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16683               break;
16684
16685             case DT_JMPREL:
16686               s = htab->elf.srelplt;
16687               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16688               break;
16689
16690             case DT_PLTRELSZ:
16691               dyn.d_un.d_val = htab->elf.srelplt->size;
16692               break;
16693
16694             case DT_TEXTREL:
16695               if (htab->local_ifunc_resolver)
16696                 info->callbacks->einfo
16697                   (_("%X%P: text relocations and GNU indirect "
16698                      "functions will result in a segfault at runtime\n"));
16699               else if (htab->maybe_local_ifunc_resolver)
16700                 info->callbacks->einfo
16701                   (_("%P: warning: text relocations and GNU indirect "
16702                      "functions may result in a segfault at runtime\n"));
16703               continue;
16704             }
16705
16706           bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
16707         }
16708     }
16709
16710   if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
16711       && htab->elf.sgot->output_section != bfd_abs_section_ptr)
16712     {
16713       /* Fill in the first entry in the global offset table.
16714          We use it to hold the link-time TOCbase.  */
16715       bfd_put_64 (output_bfd,
16716                   elf_gp (output_bfd) + TOC_BASE_OFF,
16717                   htab->elf.sgot->contents);
16718
16719       /* Set .got entry size.  */
16720       elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
16721         = 8;
16722     }
16723
16724   if (htab->elf.splt != NULL && htab->elf.splt->size != 0
16725       && htab->elf.splt->output_section != bfd_abs_section_ptr)
16726     {
16727       /* Set .plt entry size.  */
16728       elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
16729         = PLT_ENTRY_SIZE (htab);
16730     }
16731
16732   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
16733      brlt ourselves if emitrelocations.  */
16734   if (htab->brlt != NULL
16735       && htab->brlt->reloc_count != 0
16736       && !_bfd_elf_link_output_relocs (output_bfd,
16737                                        htab->brlt,
16738                                        elf_section_data (htab->brlt)->rela.hdr,
16739                                        elf_section_data (htab->brlt)->relocs,
16740                                        NULL))
16741     return FALSE;
16742
16743   if (htab->glink != NULL
16744       && htab->glink->reloc_count != 0
16745       && !_bfd_elf_link_output_relocs (output_bfd,
16746                                        htab->glink,
16747                                        elf_section_data (htab->glink)->rela.hdr,
16748                                        elf_section_data (htab->glink)->relocs,
16749                                        NULL))
16750     return FALSE;
16751
16752
16753   if (htab->glink_eh_frame != NULL
16754       && htab->glink_eh_frame->size != 0
16755       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
16756       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
16757                                            htab->glink_eh_frame,
16758                                            htab->glink_eh_frame->contents))
16759     return FALSE;
16760
16761   /* We need to handle writing out multiple GOT sections ourselves,
16762      since we didn't add them to DYNOBJ.  We know dynobj is the first
16763      bfd.  */
16764   while ((dynobj = dynobj->link.next) != NULL)
16765     {
16766       asection *s;
16767
16768       if (!is_ppc64_elf (dynobj))
16769         continue;
16770
16771       s = ppc64_elf_tdata (dynobj)->got;
16772       if (s != NULL
16773           && s->size != 0
16774           && s->output_section != bfd_abs_section_ptr
16775           && !bfd_set_section_contents (output_bfd, s->output_section,
16776                                         s->contents, s->output_offset,
16777                                         s->size))
16778         return FALSE;
16779       s = ppc64_elf_tdata (dynobj)->relgot;
16780       if (s != NULL
16781           && s->size != 0
16782           && s->output_section != bfd_abs_section_ptr
16783           && !bfd_set_section_contents (output_bfd, s->output_section,
16784                                         s->contents, s->output_offset,
16785                                         s->size))
16786         return FALSE;
16787     }
16788
16789   return TRUE;
16790 }
16791
16792 #include "elf64-target.h"
16793
16794 /* FreeBSD support */
16795
16796 #undef  TARGET_LITTLE_SYM
16797 #undef  TARGET_LITTLE_NAME
16798
16799 #undef  TARGET_BIG_SYM
16800 #define TARGET_BIG_SYM  powerpc_elf64_fbsd_vec
16801 #undef  TARGET_BIG_NAME
16802 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
16803
16804 #undef  ELF_OSABI
16805 #define ELF_OSABI       ELFOSABI_FREEBSD
16806
16807 #undef  elf64_bed
16808 #define elf64_bed       elf64_powerpc_fbsd_bed
16809
16810 #include "elf64-target.h"