]> Git Repo - binutils.git/blob - bfd/elf64-ppc.c
2020-02-19 Jordan Rupprecht <[email protected]>
[binutils.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright (C) 1999-2020 Free Software Foundation, Inc.
3    Written by Linus Nordberg, Swox AB <[email protected]>,
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 /* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
39 #define OCTETS_PER_BYTE(ABFD, SEC) 1
40
41 static bfd_reloc_status_type ppc64_elf_ha_reloc
42   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
43 static bfd_reloc_status_type ppc64_elf_branch_reloc
44   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
45 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
46   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
48   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
50   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51 static bfd_reloc_status_type ppc64_elf_toc_reloc
52   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
54   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55 static bfd_reloc_status_type ppc64_elf_toc64_reloc
56   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57 static bfd_reloc_status_type ppc64_elf_prefix_reloc
58   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
59 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
60   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
61 static bfd_vma opd_entry_value
62   (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
63
64 #define TARGET_LITTLE_SYM       powerpc_elf64_le_vec
65 #define TARGET_LITTLE_NAME      "elf64-powerpcle"
66 #define TARGET_BIG_SYM          powerpc_elf64_vec
67 #define TARGET_BIG_NAME         "elf64-powerpc"
68 #define ELF_ARCH                bfd_arch_powerpc
69 #define ELF_TARGET_ID           PPC64_ELF_DATA
70 #define ELF_MACHINE_CODE        EM_PPC64
71 #define ELF_MAXPAGESIZE         0x10000
72 #define ELF_COMMONPAGESIZE      0x1000
73 #define ELF_RELROPAGESIZE       ELF_MAXPAGESIZE
74 #define elf_info_to_howto       ppc64_elf_info_to_howto
75
76 #define elf_backend_want_got_sym 0
77 #define elf_backend_want_plt_sym 0
78 #define elf_backend_plt_alignment 3
79 #define elf_backend_plt_not_loaded 1
80 #define elf_backend_got_header_size 8
81 #define elf_backend_want_dynrelro 1
82 #define elf_backend_can_gc_sections 1
83 #define elf_backend_can_refcount 1
84 #define elf_backend_rela_normal 1
85 #define elf_backend_dtrel_excludes_plt 1
86 #define elf_backend_default_execstack 0
87
88 #define bfd_elf64_mkobject                    ppc64_elf_mkobject
89 #define bfd_elf64_bfd_reloc_type_lookup       ppc64_elf_reloc_type_lookup
90 #define bfd_elf64_bfd_reloc_name_lookup       ppc64_elf_reloc_name_lookup
91 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
92 #define bfd_elf64_bfd_print_private_bfd_data  ppc64_elf_print_private_bfd_data
93 #define bfd_elf64_new_section_hook            ppc64_elf_new_section_hook
94 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
95 #define bfd_elf64_get_synthetic_symtab        ppc64_elf_get_synthetic_symtab
96 #define bfd_elf64_bfd_link_just_syms          ppc64_elf_link_just_syms
97 #define bfd_elf64_bfd_gc_sections             ppc64_elf_gc_sections
98
99 #define elf_backend_object_p                  ppc64_elf_object_p
100 #define elf_backend_grok_prstatus             ppc64_elf_grok_prstatus
101 #define elf_backend_grok_psinfo               ppc64_elf_grok_psinfo
102 #define elf_backend_write_core_note           ppc64_elf_write_core_note
103 #define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
104 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
105 #define elf_backend_add_symbol_hook           ppc64_elf_add_symbol_hook
106 #define elf_backend_check_directives          ppc64_elf_before_check_relocs
107 #define elf_backend_notice_as_needed          ppc64_elf_notice_as_needed
108 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
109 #define elf_backend_check_relocs              ppc64_elf_check_relocs
110 #define elf_backend_relocs_compatible         _bfd_elf_relocs_compatible
111 #define elf_backend_gc_keep                   ppc64_elf_gc_keep
112 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
113 #define elf_backend_gc_mark_hook              ppc64_elf_gc_mark_hook
114 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
115 #define elf_backend_hide_symbol               ppc64_elf_hide_symbol
116 #define elf_backend_maybe_function_sym        ppc64_elf_maybe_function_sym
117 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
118 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
119 #define elf_backend_hash_symbol               ppc64_elf_hash_symbol
120 #define elf_backend_init_index_section        _bfd_elf_init_2_index_sections
121 #define elf_backend_action_discarded          ppc64_elf_action_discarded
122 #define elf_backend_relocate_section          ppc64_elf_relocate_section
123 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
124 #define elf_backend_reloc_type_class          ppc64_elf_reloc_type_class
125 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
126 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
127 #define elf_backend_special_sections          ppc64_elf_special_sections
128 #define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
129 #define elf_backend_merge_symbol              ppc64_elf_merge_symbol
130 #define elf_backend_get_reloc_section         bfd_get_section_by_name
131
132 /* The name of the dynamic interpreter.  This is put in the .interp
133    section.  */
134 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
135
136 /* The size in bytes of an entry in the procedure linkage table.  */
137 #define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
138 #define LOCAL_PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 16 : 8)
139
140 /* The initial size of the plt reserved for the dynamic linker.  */
141 #define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
142
143 /* Offsets to some stack save slots.  */
144 #define STK_LR 16
145 #define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
146 /* This one is dodgy.  ELFv2 does not have a linker word, so use the
147    CR save slot.  Used only by optimised __tls_get_addr call stub,
148    relying on __tls_get_addr_opt not saving CR..  */
149 #define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
150
151 /* TOC base pointers offset from start of TOC.  */
152 #define TOC_BASE_OFF    0x8000
153 /* TOC base alignment.  */
154 #define TOC_BASE_ALIGN  256
155
156 /* Offset of tp and dtp pointers from start of TLS block.  */
157 #define TP_OFFSET       0x7000
158 #define DTP_OFFSET      0x8000
159
160 /* .plt call stub instructions.  The normal stub is like this, but
161    sometimes the .plt entry crosses a 64k boundary and we need to
162    insert an addi to adjust r11.  */
163 #define STD_R2_0R1      0xf8410000      /* std   %r2,0+40(%r1)       */
164 #define ADDIS_R11_R2    0x3d620000      /* addis %r11,%r2,xxx@ha     */
165 #define LD_R12_0R11     0xe98b0000      /* ld    %r12,xxx+0@l(%r11)  */
166 #define MTCTR_R12       0x7d8903a6      /* mtctr %r12                */
167 #define LD_R2_0R11      0xe84b0000      /* ld    %r2,xxx+8@l(%r11)   */
168 #define LD_R11_0R11     0xe96b0000      /* ld    %r11,xxx+16@l(%r11) */
169 #define BCTR            0x4e800420      /* bctr                      */
170
171 #define ADDI_R11_R11    0x396b0000      /* addi %r11,%r11,off@l  */
172 #define ADDI_R12_R11    0x398b0000      /* addi %r12,%r11,off@l  */
173 #define ADDI_R12_R12    0x398c0000      /* addi %r12,%r12,off@l  */
174 #define ADDIS_R2_R2     0x3c420000      /* addis %r2,%r2,off@ha  */
175 #define ADDI_R2_R2      0x38420000      /* addi  %r2,%r2,off@l   */
176
177 #define XOR_R2_R12_R12  0x7d826278      /* xor   %r2,%r12,%r12   */
178 #define ADD_R11_R11_R2  0x7d6b1214      /* add   %r11,%r11,%r2   */
179 #define XOR_R11_R12_R12 0x7d8b6278      /* xor   %r11,%r12,%r12  */
180 #define ADD_R2_R2_R11   0x7c425a14      /* add   %r2,%r2,%r11    */
181 #define CMPLDI_R2_0     0x28220000      /* cmpldi %r2,0          */
182 #define BNECTR          0x4ca20420      /* bnectr+               */
183 #define BNECTR_P4       0x4ce20420      /* bnectr+               */
184
185 #define LD_R12_0R2      0xe9820000      /* ld    %r12,xxx+0(%r2) */
186 #define LD_R11_0R2      0xe9620000      /* ld    %r11,xxx+0(%r2) */
187 #define LD_R2_0R2       0xe8420000      /* ld    %r2,xxx+0(%r2)  */
188
189 #define LD_R2_0R1       0xe8410000      /* ld    %r2,0(%r1)      */
190 #define LD_R2_0R12      0xe84c0000      /* ld    %r2,0(%r12)     */
191 #define ADD_R2_R2_R12   0x7c426214      /* add   %r2,%r2,%r12    */
192
193 #define LI_R11_0        0x39600000      /* li    %r11,0         */
194 #define LIS_R2          0x3c400000      /* lis %r2,xxx@ha         */
195 #define LIS_R11         0x3d600000      /* lis %r11,xxx@ha        */
196 #define LIS_R12         0x3d800000      /* lis %r12,xxx@ha        */
197 #define ADDIS_R2_R12    0x3c4c0000      /* addis %r2,%r12,xxx@ha  */
198 #define ADDIS_R12_R2    0x3d820000      /* addis %r12,%r2,xxx@ha  */
199 #define ADDIS_R12_R11   0x3d8b0000      /* addis %r12,%r11,xxx@ha */
200 #define ADDIS_R12_R12   0x3d8c0000      /* addis %r12,%r12,xxx@ha */
201 #define ORIS_R12_R12_0  0x658c0000      /* oris  %r12,%r12,xxx@hi */
202 #define ORI_R11_R11_0   0x616b0000      /* ori   %r11,%r11,xxx@l  */
203 #define ORI_R12_R12_0   0x618c0000      /* ori   %r12,%r12,xxx@l  */
204 #define LD_R12_0R12     0xe98c0000      /* ld    %r12,xxx@l(%r12) */
205 #define SLDI_R11_R11_34 0x796b1746      /* sldi  %r11,%r11,34     */
206 #define SLDI_R12_R12_32 0x799c07c6      /* sldi  %r12,%r12,32     */
207 #define LDX_R12_R11_R12 0x7d8b602a      /* ldx   %r12,%r11,%r12   */
208 #define ADD_R12_R11_R12 0x7d8b6214      /* add   %r12,%r11,%r12   */
209 #define PADDI_R12_PC    0x0610000039800000ULL
210 #define PLD_R12_PC      0x04100000e5800000ULL
211 #define PNOP            0x0700000000000000ULL
212
213 /* __glink_PLTresolve stub instructions.  We enter with the index in R0.  */
214 #define GLINK_PLTRESOLVE_SIZE(htab)                     \
215   (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
216                                         /* 0:                           */
217                                         /*  .quad plt0-1f               */
218                                         /* __glink:                     */
219 #define MFLR_R12        0x7d8802a6      /*  mflr %12                    */
220 #define BCL_20_31       0x429f0005      /*  bcl 20,31,1f                */
221                                         /* 1:                           */
222 #define MFLR_R11        0x7d6802a6      /*  mflr %11                    */
223                                         /*  ld %2,(0b-1b)(%11)          */
224 #define MTLR_R12        0x7d8803a6      /*  mtlr %12                    */
225 #define ADD_R11_R2_R11  0x7d625a14      /*  add %11,%2,%11              */
226                                         /*  ld %12,0(%11)               */
227                                         /*  ld %2,8(%11)                */
228                                         /*  mtctr %12                   */
229                                         /*  ld %11,16(%11)              */
230                                         /*  bctr                        */
231 #define MFLR_R0         0x7c0802a6      /*  mflr %r0                    */
232 #define MTLR_R0         0x7c0803a6      /*  mtlr %r0                    */
233 #define SUB_R12_R12_R11 0x7d8b6050      /*  subf %r12,%r11,%r12         */
234 #define ADDI_R0_R12     0x380c0000      /*  addi %r0,%r12,0             */
235 #define SRDI_R0_R0_2    0x7800f082      /*  rldicl %r0,%r0,62,2         */
236
237 /* Pad with this.  */
238 #define NOP             0x60000000
239
240 /* Some other nops.  */
241 #define CROR_151515     0x4def7b82
242 #define CROR_313131     0x4ffffb82
243
244 /* .glink entries for the first 32k functions are two instructions.  */
245 #define LI_R0_0         0x38000000      /* li    %r0,0          */
246 #define B_DOT           0x48000000      /* b     .              */
247
248 /* After that, we need two instructions to load the index, followed by
249    a branch.  */
250 #define LIS_R0_0        0x3c000000      /* lis   %r0,0          */
251 #define ORI_R0_R0_0     0x60000000      /* ori   %r0,%r0,0      */
252
253 /* Instructions used by the save and restore reg functions.  */
254 #define STD_R0_0R1      0xf8010000      /* std   %r0,0(%r1)     */
255 #define STD_R0_0R12     0xf80c0000      /* std   %r0,0(%r12)    */
256 #define LD_R0_0R1       0xe8010000      /* ld    %r0,0(%r1)     */
257 #define LD_R0_0R12      0xe80c0000      /* ld    %r0,0(%r12)    */
258 #define STFD_FR0_0R1    0xd8010000      /* stfd  %fr0,0(%r1)    */
259 #define LFD_FR0_0R1     0xc8010000      /* lfd   %fr0,0(%r1)    */
260 #define LI_R12_0        0x39800000      /* li    %r12,0         */
261 #define STVX_VR0_R12_R0 0x7c0c01ce      /* stvx  %v0,%r12,%r0   */
262 #define LVX_VR0_R12_R0  0x7c0c00ce      /* lvx   %v0,%r12,%r0   */
263 #define MTLR_R0         0x7c0803a6      /* mtlr  %r0            */
264 #define BLR             0x4e800020      /* blr                  */
265
266 /* Since .opd is an array of descriptors and each entry will end up
267    with identical R_PPC64_RELATIVE relocs, there is really no need to
268    propagate .opd relocs;  The dynamic linker should be taught to
269    relocate .opd without reloc entries.  */
270 #ifndef NO_OPD_RELOCS
271 #define NO_OPD_RELOCS 0
272 #endif
273
274 #ifndef ARRAY_SIZE
275 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
276 #endif
277
278 static inline int
279 abiversion (bfd *abfd)
280 {
281   return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
282 }
283
284 static inline void
285 set_abiversion (bfd *abfd, int ver)
286 {
287   elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
288   elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
289 }
290 \f
291 /* Relocation HOWTO's.  */
292 /* Like other ELF RELA targets that don't apply multiple
293    field-altering relocations to the same localation, src_mask is
294    always zero and pcrel_offset is the same as pc_relative.
295    PowerPC can always use a zero bitpos, even when the field is not at
296    the LSB.  For example, a REL24 could use rightshift=2, bisize=24
297    and bitpos=2 which matches the ABI description, or as we do here,
298    rightshift=0, bitsize=26 and bitpos=0.  */
299 #define HOW(type, size, bitsize, mask, rightshift, pc_relative, \
300             complain, special_func)                             \
301   HOWTO (type, rightshift, size, bitsize, pc_relative, 0,       \
302          complain_overflow_ ## complain, special_func,          \
303          #type, FALSE, 0, mask, pc_relative)
304
305 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
306
307 static reloc_howto_type ppc64_elf_howto_raw[] =
308 {
309   /* This reloc does nothing.  */
310   HOW (R_PPC64_NONE, 3, 0, 0, 0, FALSE, dont,
311        bfd_elf_generic_reloc),
312
313   /* A standard 32 bit relocation.  */
314   HOW (R_PPC64_ADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
315        bfd_elf_generic_reloc),
316
317   /* An absolute 26 bit branch; the lower two bits must be zero.
318      FIXME: we don't check that, we just clear them.  */
319   HOW (R_PPC64_ADDR24, 2, 26, 0x03fffffc, 0, FALSE, bitfield,
320        bfd_elf_generic_reloc),
321
322   /* A standard 16 bit relocation.  */
323   HOW (R_PPC64_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
324        bfd_elf_generic_reloc),
325
326   /* A 16 bit relocation without overflow.  */
327   HOW (R_PPC64_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
328        bfd_elf_generic_reloc),
329
330   /* Bits 16-31 of an address.  */
331   HOW (R_PPC64_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, signed,
332        bfd_elf_generic_reloc),
333
334   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
335      bits, treated as a signed number, is negative.  */
336   HOW (R_PPC64_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, signed,
337        ppc64_elf_ha_reloc),
338
339   /* An absolute 16 bit branch; the lower two bits must be zero.
340      FIXME: we don't check that, we just clear them.  */
341   HOW (R_PPC64_ADDR14, 2, 16, 0x0000fffc, 0, FALSE, signed,
342        ppc64_elf_branch_reloc),
343
344   /* An absolute 16 bit branch, for which bit 10 should be set to
345      indicate that the branch is expected to be taken.  The lower two
346      bits must be zero.  */
347   HOW (R_PPC64_ADDR14_BRTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
348        ppc64_elf_brtaken_reloc),
349
350   /* An absolute 16 bit branch, for which bit 10 should be set to
351      indicate that the branch is not expected to be taken.  The lower
352      two bits must be zero.  */
353   HOW (R_PPC64_ADDR14_BRNTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
354        ppc64_elf_brtaken_reloc),
355
356   /* A relative 26 bit branch; the lower two bits must be zero.  */
357   HOW (R_PPC64_REL24, 2, 26, 0x03fffffc, 0, TRUE, signed,
358        ppc64_elf_branch_reloc),
359
360   /* A variant of R_PPC64_REL24, used when r2 is not the toc pointer.  */
361   HOW (R_PPC64_REL24_NOTOC, 2, 26, 0x03fffffc, 0, TRUE, signed,
362        ppc64_elf_branch_reloc),
363
364   /* A relative 16 bit branch; the lower two bits must be zero.  */
365   HOW (R_PPC64_REL14, 2, 16, 0x0000fffc, 0, TRUE, signed,
366        ppc64_elf_branch_reloc),
367
368   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
369      the branch is expected to be taken.  The lower two bits must be
370      zero.  */
371   HOW (R_PPC64_REL14_BRTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
372        ppc64_elf_brtaken_reloc),
373
374   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
375      the branch is not expected to be taken.  The lower two bits must
376      be zero.  */
377   HOW (R_PPC64_REL14_BRNTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
378        ppc64_elf_brtaken_reloc),
379
380   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
381      symbol.  */
382   HOW (R_PPC64_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
383        ppc64_elf_unhandled_reloc),
384
385   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
386      the symbol.  */
387   HOW (R_PPC64_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
388        ppc64_elf_unhandled_reloc),
389
390   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
391      the symbol.  */
392   HOW (R_PPC64_GOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
393        ppc64_elf_unhandled_reloc),
394
395   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
396      the symbol.  */
397   HOW (R_PPC64_GOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
398        ppc64_elf_unhandled_reloc),
399
400   /* This is used only by the dynamic linker.  The symbol should exist
401      both in the object being run and in some shared library.  The
402      dynamic linker copies the data addressed by the symbol from the
403      shared library into the object, because the object being
404      run has to have the data at some particular address.  */
405   HOW (R_PPC64_COPY, 0, 0, 0, 0, FALSE, dont,
406        ppc64_elf_unhandled_reloc),
407
408   /* Like R_PPC64_ADDR64, but used when setting global offset table
409      entries.  */
410   HOW (R_PPC64_GLOB_DAT, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
411        ppc64_elf_unhandled_reloc),
412
413   /* Created by the link editor.  Marks a procedure linkage table
414      entry for a symbol.  */
415   HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, FALSE, dont,
416        ppc64_elf_unhandled_reloc),
417
418   /* Used only by the dynamic linker.  When the object is run, this
419      doubleword64 is set to the load address of the object, plus the
420      addend.  */
421   HOW (R_PPC64_RELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
422        bfd_elf_generic_reloc),
423
424   /* Like R_PPC64_ADDR32, but may be unaligned.  */
425   HOW (R_PPC64_UADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
426        bfd_elf_generic_reloc),
427
428   /* Like R_PPC64_ADDR16, but may be unaligned.  */
429   HOW (R_PPC64_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
430        bfd_elf_generic_reloc),
431
432   /* 32-bit PC relative.  */
433   HOW (R_PPC64_REL32, 2, 32, 0xffffffff, 0, TRUE, signed,
434        bfd_elf_generic_reloc),
435
436   /* 32-bit relocation to the symbol's procedure linkage table.  */
437   HOW (R_PPC64_PLT32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
438        ppc64_elf_unhandled_reloc),
439
440   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
441      FIXME: R_PPC64_PLTREL32 not supported.  */
442   HOW (R_PPC64_PLTREL32, 2, 32, 0xffffffff, 0, TRUE, signed,
443        ppc64_elf_unhandled_reloc),
444
445   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
446      the symbol.  */
447   HOW (R_PPC64_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
448        ppc64_elf_unhandled_reloc),
449
450   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
451      the symbol.  */
452   HOW (R_PPC64_PLT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
453        ppc64_elf_unhandled_reloc),
454
455   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
456      the symbol.  */
457   HOW (R_PPC64_PLT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
458        ppc64_elf_unhandled_reloc),
459
460   /* 16-bit section relative relocation.  */
461   HOW (R_PPC64_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
462        ppc64_elf_sectoff_reloc),
463
464   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
465   HOW (R_PPC64_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
466        ppc64_elf_sectoff_reloc),
467
468   /* 16-bit upper half section relative relocation.  */
469   HOW (R_PPC64_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, signed,
470        ppc64_elf_sectoff_reloc),
471
472   /* 16-bit upper half adjusted section relative relocation.  */
473   HOW (R_PPC64_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, signed,
474        ppc64_elf_sectoff_ha_reloc),
475
476   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
477   HOW (R_PPC64_REL30, 2, 30, 0xfffffffc, 2, TRUE, dont,
478        bfd_elf_generic_reloc),
479
480   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
481
482   /* A standard 64-bit relocation.  */
483   HOW (R_PPC64_ADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
484        bfd_elf_generic_reloc),
485
486   /* The bits 32-47 of an address.  */
487   HOW (R_PPC64_ADDR16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
488        bfd_elf_generic_reloc),
489
490   /* The bits 32-47 of an address, plus 1 if the contents of the low
491      16 bits, treated as a signed number, is negative.  */
492   HOW (R_PPC64_ADDR16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
493        ppc64_elf_ha_reloc),
494
495   /* The bits 48-63 of an address.  */
496   HOW (R_PPC64_ADDR16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
497        bfd_elf_generic_reloc),
498
499   /* The bits 48-63 of an address, plus 1 if the contents of the low
500      16 bits, treated as a signed number, is negative.  */
501   HOW (R_PPC64_ADDR16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
502        ppc64_elf_ha_reloc),
503
504   /* Like ADDR64, but may be unaligned.  */
505   HOW (R_PPC64_UADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
506        bfd_elf_generic_reloc),
507
508   /* 64-bit relative relocation.  */
509   HOW (R_PPC64_REL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
510        bfd_elf_generic_reloc),
511
512   /* 64-bit relocation to the symbol's procedure linkage table.  */
513   HOW (R_PPC64_PLT64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
514        ppc64_elf_unhandled_reloc),
515
516   /* 64-bit PC relative relocation to the symbol's procedure linkage
517      table.  */
518   /* FIXME: R_PPC64_PLTREL64 not supported.  */
519   HOW (R_PPC64_PLTREL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
520        ppc64_elf_unhandled_reloc),
521
522   /* 16 bit TOC-relative relocation.  */
523   /* R_PPC64_TOC16        47       half16*      S + A - .TOC.  */
524   HOW (R_PPC64_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
525        ppc64_elf_toc_reloc),
526
527   /* 16 bit TOC-relative relocation without overflow.  */
528   /* R_PPC64_TOC16_LO     48       half16        #lo (S + A - .TOC.)  */
529   HOW (R_PPC64_TOC16_LO, 1, 16, 0xffff, 0, FALSE, dont,
530        ppc64_elf_toc_reloc),
531
532   /* 16 bit TOC-relative relocation, high 16 bits.  */
533   /* R_PPC64_TOC16_HI     49       half16        #hi (S + A - .TOC.)  */
534   HOW (R_PPC64_TOC16_HI, 1, 16, 0xffff, 16, FALSE, signed,
535        ppc64_elf_toc_reloc),
536
537   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
538      contents of the low 16 bits, treated as a signed number, is
539      negative.  */
540   /* R_PPC64_TOC16_HA     50       half16        #ha (S + A - .TOC.)  */
541   HOW (R_PPC64_TOC16_HA, 1, 16, 0xffff, 16, FALSE, signed,
542        ppc64_elf_toc_ha_reloc),
543
544   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
545   /* R_PPC64_TOC                  51       doubleword64  .TOC.  */
546   HOW (R_PPC64_TOC, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
547        ppc64_elf_toc64_reloc),
548
549   /* Like R_PPC64_GOT16, but also informs the link editor that the
550      value to relocate may (!) refer to a PLT entry which the link
551      editor (a) may replace with the symbol value.  If the link editor
552      is unable to fully resolve the symbol, it may (b) create a PLT
553      entry and store the address to the new PLT entry in the GOT.
554      This permits lazy resolution of function symbols at run time.
555      The link editor may also skip all of this and just (c) emit a
556      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
557   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
558     HOW (R_PPC64_PLTGOT16, 1, 16, 0xffff, 0, FALSE,signed,
559           ppc64_elf_unhandled_reloc),
560
561   /* Like R_PPC64_PLTGOT16, but without overflow.  */
562   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
563   HOW (R_PPC64_PLTGOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
564        ppc64_elf_unhandled_reloc),
565
566   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
567   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
568   HOW (R_PPC64_PLTGOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
569        ppc64_elf_unhandled_reloc),
570
571   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
572      1 if the contents of the low 16 bits, treated as a signed number,
573      is negative.  */
574   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
575   HOW (R_PPC64_PLTGOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
576        ppc64_elf_unhandled_reloc),
577
578   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
579   HOW (R_PPC64_ADDR16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
580        bfd_elf_generic_reloc),
581
582   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
583   HOW (R_PPC64_ADDR16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
584        bfd_elf_generic_reloc),
585
586   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
587   HOW (R_PPC64_GOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
588        ppc64_elf_unhandled_reloc),
589
590   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
591   HOW (R_PPC64_GOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
592        ppc64_elf_unhandled_reloc),
593
594   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
595   HOW (R_PPC64_PLT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
596        ppc64_elf_unhandled_reloc),
597
598   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
599   HOW (R_PPC64_SECTOFF_DS, 1, 16, 0xfffc, 0, FALSE, signed,
600        ppc64_elf_sectoff_reloc),
601
602   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
603   HOW (R_PPC64_SECTOFF_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
604        ppc64_elf_sectoff_reloc),
605
606   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
607   HOW (R_PPC64_TOC16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
608        ppc64_elf_toc_reloc),
609
610   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
611   HOW (R_PPC64_TOC16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
612        ppc64_elf_toc_reloc),
613
614   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
615   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
616   HOW (R_PPC64_PLTGOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
617        ppc64_elf_unhandled_reloc),
618
619   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
620   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
621   HOW (R_PPC64_PLTGOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
622        ppc64_elf_unhandled_reloc),
623
624   /* Marker relocs for TLS.  */
625   HOW (R_PPC64_TLS, 2, 32, 0, 0, FALSE, dont,
626        bfd_elf_generic_reloc),
627
628   HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
629        bfd_elf_generic_reloc),
630
631   HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
632        bfd_elf_generic_reloc),
633
634   /* Marker reloc for optimizing r2 save in prologue rather than on
635      each plt call stub.  */
636   HOW (R_PPC64_TOCSAVE, 2, 32, 0, 0, FALSE, dont,
637        bfd_elf_generic_reloc),
638
639   /* Marker relocs on inline plt call instructions.  */
640   HOW (R_PPC64_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
641        bfd_elf_generic_reloc),
642
643   HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
644        bfd_elf_generic_reloc),
645
646   /* Computes the load module index of the load module that contains the
647      definition of its TLS sym.  */
648   HOW (R_PPC64_DTPMOD64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
649        ppc64_elf_unhandled_reloc),
650
651   /* Computes a dtv-relative displacement, the difference between the value
652      of sym+add and the base address of the thread-local storage block that
653      contains the definition of sym, minus 0x8000.  */
654   HOW (R_PPC64_DTPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
655        ppc64_elf_unhandled_reloc),
656
657   /* A 16 bit dtprel reloc.  */
658   HOW (R_PPC64_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
659        ppc64_elf_unhandled_reloc),
660
661   /* Like DTPREL16, but no overflow.  */
662   HOW (R_PPC64_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
663        ppc64_elf_unhandled_reloc),
664
665   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
666   HOW (R_PPC64_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
667        ppc64_elf_unhandled_reloc),
668
669   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
670   HOW (R_PPC64_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
671        ppc64_elf_unhandled_reloc),
672
673   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
674   HOW (R_PPC64_DTPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
675        ppc64_elf_unhandled_reloc),
676
677   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
678   HOW (R_PPC64_DTPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
679        ppc64_elf_unhandled_reloc),
680
681   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
682   HOW (R_PPC64_DTPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
683        ppc64_elf_unhandled_reloc),
684
685   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
686   HOW (R_PPC64_DTPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
687        ppc64_elf_unhandled_reloc),
688
689   /* Like DTPREL16, but for insns with a DS field.  */
690   HOW (R_PPC64_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
691        ppc64_elf_unhandled_reloc),
692
693   /* Like DTPREL16_DS, but no overflow.  */
694   HOW (R_PPC64_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
695        ppc64_elf_unhandled_reloc),
696
697   /* Computes a tp-relative displacement, the difference between the value of
698      sym+add and the value of the thread pointer (r13).  */
699   HOW (R_PPC64_TPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
700        ppc64_elf_unhandled_reloc),
701
702   /* A 16 bit tprel reloc.  */
703   HOW (R_PPC64_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
704        ppc64_elf_unhandled_reloc),
705
706   /* Like TPREL16, but no overflow.  */
707   HOW (R_PPC64_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
708        ppc64_elf_unhandled_reloc),
709
710   /* Like TPREL16_LO, but next higher group of 16 bits.  */
711   HOW (R_PPC64_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
712        ppc64_elf_unhandled_reloc),
713
714   /* Like TPREL16_HI, but adjust for low 16 bits.  */
715   HOW (R_PPC64_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
716        ppc64_elf_unhandled_reloc),
717
718   /* Like TPREL16_HI, but next higher group of 16 bits.  */
719   HOW (R_PPC64_TPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
720        ppc64_elf_unhandled_reloc),
721
722   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
723   HOW (R_PPC64_TPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
724        ppc64_elf_unhandled_reloc),
725
726   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
727   HOW (R_PPC64_TPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
728        ppc64_elf_unhandled_reloc),
729
730   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
731   HOW (R_PPC64_TPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
732        ppc64_elf_unhandled_reloc),
733
734   /* Like TPREL16, but for insns with a DS field.  */
735   HOW (R_PPC64_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
736        ppc64_elf_unhandled_reloc),
737
738   /* Like TPREL16_DS, but no overflow.  */
739   HOW (R_PPC64_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
740        ppc64_elf_unhandled_reloc),
741
742   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
743      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
744      to the first entry relative to the TOC base (r2).  */
745   HOW (R_PPC64_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
746        ppc64_elf_unhandled_reloc),
747
748   /* Like GOT_TLSGD16, but no overflow.  */
749   HOW (R_PPC64_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
750        ppc64_elf_unhandled_reloc),
751
752   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
753   HOW (R_PPC64_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
754        ppc64_elf_unhandled_reloc),
755
756   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
757   HOW (R_PPC64_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
758        ppc64_elf_unhandled_reloc),
759
760   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
761      with values (sym+add)@dtpmod and zero, and computes the offset to the
762      first entry relative to the TOC base (r2).  */
763   HOW (R_PPC64_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
764        ppc64_elf_unhandled_reloc),
765
766   /* Like GOT_TLSLD16, but no overflow.  */
767   HOW (R_PPC64_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
768        ppc64_elf_unhandled_reloc),
769
770   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
771   HOW (R_PPC64_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
772        ppc64_elf_unhandled_reloc),
773
774   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
775   HOW (R_PPC64_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
776        ppc64_elf_unhandled_reloc),
777
778   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
779      the offset to the entry relative to the TOC base (r2).  */
780   HOW (R_PPC64_GOT_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
781        ppc64_elf_unhandled_reloc),
782
783   /* Like GOT_DTPREL16_DS, but no overflow.  */
784   HOW (R_PPC64_GOT_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
785        ppc64_elf_unhandled_reloc),
786
787   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
788   HOW (R_PPC64_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
789        ppc64_elf_unhandled_reloc),
790
791   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
792   HOW (R_PPC64_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
793        ppc64_elf_unhandled_reloc),
794
795   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
796      offset to the entry relative to the TOC base (r2).  */
797   HOW (R_PPC64_GOT_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
798        ppc64_elf_unhandled_reloc),
799
800   /* Like GOT_TPREL16_DS, but no overflow.  */
801   HOW (R_PPC64_GOT_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
802        ppc64_elf_unhandled_reloc),
803
804   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
805   HOW (R_PPC64_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
806        ppc64_elf_unhandled_reloc),
807
808   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
809   HOW (R_PPC64_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
810        ppc64_elf_unhandled_reloc),
811
812   HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, FALSE, dont,
813        ppc64_elf_unhandled_reloc),
814
815   HOW (R_PPC64_IRELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
816        bfd_elf_generic_reloc),
817
818   /* A 16 bit relative relocation.  */
819   HOW (R_PPC64_REL16, 1, 16, 0xffff, 0, TRUE, signed,
820        bfd_elf_generic_reloc),
821
822   /* A 16 bit relative relocation without overflow.  */
823   HOW (R_PPC64_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
824        bfd_elf_generic_reloc),
825
826   /* The high order 16 bits of a relative address.  */
827   HOW (R_PPC64_REL16_HI, 1, 16, 0xffff, 16, TRUE, signed,
828        bfd_elf_generic_reloc),
829
830   /* The high order 16 bits of a relative address, plus 1 if the contents of
831      the low 16 bits, treated as a signed number, is negative.  */
832   HOW (R_PPC64_REL16_HA, 1, 16, 0xffff, 16, TRUE, signed,
833        ppc64_elf_ha_reloc),
834
835   HOW (R_PPC64_REL16_HIGH, 1, 16, 0xffff, 16, TRUE, dont,
836        bfd_elf_generic_reloc),
837
838   HOW (R_PPC64_REL16_HIGHA, 1, 16, 0xffff, 16, TRUE, dont,
839        ppc64_elf_ha_reloc),
840
841   HOW (R_PPC64_REL16_HIGHER, 1, 16, 0xffff, 32, TRUE, dont,
842        bfd_elf_generic_reloc),
843
844   HOW (R_PPC64_REL16_HIGHERA, 1, 16, 0xffff, 32, TRUE, dont,
845        ppc64_elf_ha_reloc),
846
847   HOW (R_PPC64_REL16_HIGHEST, 1, 16, 0xffff, 48, TRUE, dont,
848        bfd_elf_generic_reloc),
849
850   HOW (R_PPC64_REL16_HIGHESTA, 1, 16, 0xffff, 48, TRUE, dont,
851        ppc64_elf_ha_reloc),
852
853   /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
854   HOW (R_PPC64_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
855        ppc64_elf_ha_reloc),
856
857   /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
858   HOW (R_PPC64_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
859        ppc64_elf_ha_reloc),
860
861   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
862   HOW (R_PPC64_ADDR16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
863        bfd_elf_generic_reloc),
864
865   /* Like R_PPC64_ADDR16_HA, but no overflow.  */
866   HOW (R_PPC64_ADDR16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
867        ppc64_elf_ha_reloc),
868
869   /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
870   HOW (R_PPC64_DTPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
871        ppc64_elf_unhandled_reloc),
872
873   /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
874   HOW (R_PPC64_DTPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
875        ppc64_elf_unhandled_reloc),
876
877   /* Like R_PPC64_TPREL16_HI, but no overflow.  */
878   HOW (R_PPC64_TPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
879        ppc64_elf_unhandled_reloc),
880
881   /* Like R_PPC64_TPREL16_HA, but no overflow.  */
882   HOW (R_PPC64_TPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
883        ppc64_elf_unhandled_reloc),
884
885   /* Marker reloc on ELFv2 large-model function entry.  */
886   HOW (R_PPC64_ENTRY, 2, 32, 0, 0, FALSE, dont,
887        bfd_elf_generic_reloc),
888
889   /* Like ADDR64, but use local entry point of function.  */
890   HOW (R_PPC64_ADDR64_LOCAL, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
891        bfd_elf_generic_reloc),
892
893   HOW (R_PPC64_PLTSEQ_NOTOC, 2, 32, 0, 0, FALSE, dont,
894        bfd_elf_generic_reloc),
895
896   HOW (R_PPC64_PLTCALL_NOTOC, 2, 32, 0, 0, FALSE, dont,
897        bfd_elf_generic_reloc),
898
899   HOW (R_PPC64_PCREL_OPT, 2, 32, 0, 0, FALSE, dont,
900        bfd_elf_generic_reloc),
901
902   HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
903        ppc64_elf_prefix_reloc),
904
905   HOW (R_PPC64_D34_LO, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, dont,
906        ppc64_elf_prefix_reloc),
907
908   HOW (R_PPC64_D34_HI30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
909        ppc64_elf_prefix_reloc),
910
911   HOW (R_PPC64_D34_HA30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
912        ppc64_elf_prefix_reloc),
913
914   HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
915        ppc64_elf_prefix_reloc),
916
917   HOW (R_PPC64_GOT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
918        ppc64_elf_unhandled_reloc),
919
920   HOW (R_PPC64_PLT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
921        ppc64_elf_unhandled_reloc),
922
923   HOW (R_PPC64_PLT_PCREL34_NOTOC, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
924        ppc64_elf_unhandled_reloc),
925
926   HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
927        ppc64_elf_unhandled_reloc),
928
929   HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
930        ppc64_elf_unhandled_reloc),
931
932   HOW (R_PPC64_GOT_TLSGD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
933        ppc64_elf_unhandled_reloc),
934
935   HOW (R_PPC64_GOT_TLSLD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
936        ppc64_elf_unhandled_reloc),
937
938   HOW (R_PPC64_GOT_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
939        ppc64_elf_unhandled_reloc),
940
941   HOW (R_PPC64_GOT_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
942        ppc64_elf_unhandled_reloc),
943
944   HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
945        bfd_elf_generic_reloc),
946
947   HOW (R_PPC64_ADDR16_HIGHERA34, 1, 16, 0xffff, 34, FALSE, dont,
948        ppc64_elf_ha_reloc),
949
950   HOW (R_PPC64_ADDR16_HIGHEST34, 1, 16, 0xffff, 50, FALSE, dont,
951        bfd_elf_generic_reloc),
952
953   HOW (R_PPC64_ADDR16_HIGHESTA34, 1, 16, 0xffff, 50, FALSE, dont,
954        ppc64_elf_ha_reloc),
955
956   HOW (R_PPC64_REL16_HIGHER34, 1, 16, 0xffff, 34, TRUE, dont,
957        bfd_elf_generic_reloc),
958
959   HOW (R_PPC64_REL16_HIGHERA34, 1, 16, 0xffff, 34, TRUE, dont,
960        ppc64_elf_ha_reloc),
961
962   HOW (R_PPC64_REL16_HIGHEST34, 1, 16, 0xffff, 50, TRUE, dont,
963        bfd_elf_generic_reloc),
964
965   HOW (R_PPC64_REL16_HIGHESTA34, 1, 16, 0xffff, 50, TRUE, dont,
966        ppc64_elf_ha_reloc),
967
968   HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
969        ppc64_elf_prefix_reloc),
970
971   HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
972        ppc64_elf_prefix_reloc),
973
974   /* GNU extension to record C++ vtable hierarchy.  */
975   HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
976        NULL),
977
978   /* GNU extension to record C++ vtable member usage.  */
979   HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
980        NULL),
981 };
982
983 \f
984 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
985    be done.  */
986
987 static void
988 ppc_howto_init (void)
989 {
990   unsigned int i, type;
991
992   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
993     {
994       type = ppc64_elf_howto_raw[i].type;
995       BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
996       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
997     }
998 }
999
1000 static reloc_howto_type *
1001 ppc64_elf_reloc_type_lookup (bfd *abfd,
1002                              bfd_reloc_code_real_type code)
1003 {
1004   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
1005
1006   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1007     /* Initialize howto table if needed.  */
1008     ppc_howto_init ();
1009
1010   switch (code)
1011     {
1012     default:
1013       /* xgettext:c-format */
1014       _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd,
1015                           (int) code);
1016       bfd_set_error (bfd_error_bad_value);
1017       return NULL;
1018
1019     case BFD_RELOC_NONE:                        r = R_PPC64_NONE;
1020       break;
1021     case BFD_RELOC_32:                          r = R_PPC64_ADDR32;
1022       break;
1023     case BFD_RELOC_PPC_BA26:                    r = R_PPC64_ADDR24;
1024       break;
1025     case BFD_RELOC_16:                          r = R_PPC64_ADDR16;
1026       break;
1027     case BFD_RELOC_LO16:                        r = R_PPC64_ADDR16_LO;
1028       break;
1029     case BFD_RELOC_HI16:                        r = R_PPC64_ADDR16_HI;
1030       break;
1031     case BFD_RELOC_PPC64_ADDR16_HIGH:           r = R_PPC64_ADDR16_HIGH;
1032       break;
1033     case BFD_RELOC_HI16_S:                      r = R_PPC64_ADDR16_HA;
1034       break;
1035     case BFD_RELOC_PPC64_ADDR16_HIGHA:          r = R_PPC64_ADDR16_HIGHA;
1036       break;
1037     case BFD_RELOC_PPC_BA16:                    r = R_PPC64_ADDR14;
1038       break;
1039     case BFD_RELOC_PPC_BA16_BRTAKEN:            r = R_PPC64_ADDR14_BRTAKEN;
1040       break;
1041     case BFD_RELOC_PPC_BA16_BRNTAKEN:           r = R_PPC64_ADDR14_BRNTAKEN;
1042       break;
1043     case BFD_RELOC_PPC_B26:                     r = R_PPC64_REL24;
1044       break;
1045     case BFD_RELOC_PPC64_REL24_NOTOC:           r = R_PPC64_REL24_NOTOC;
1046       break;
1047     case BFD_RELOC_PPC_B16:                     r = R_PPC64_REL14;
1048       break;
1049     case BFD_RELOC_PPC_B16_BRTAKEN:             r = R_PPC64_REL14_BRTAKEN;
1050       break;
1051     case BFD_RELOC_PPC_B16_BRNTAKEN:            r = R_PPC64_REL14_BRNTAKEN;
1052       break;
1053     case BFD_RELOC_16_GOTOFF:                   r = R_PPC64_GOT16;
1054       break;
1055     case BFD_RELOC_LO16_GOTOFF:                 r = R_PPC64_GOT16_LO;
1056       break;
1057     case BFD_RELOC_HI16_GOTOFF:                 r = R_PPC64_GOT16_HI;
1058       break;
1059     case BFD_RELOC_HI16_S_GOTOFF:               r = R_PPC64_GOT16_HA;
1060       break;
1061     case BFD_RELOC_PPC_COPY:                    r = R_PPC64_COPY;
1062       break;
1063     case BFD_RELOC_PPC_GLOB_DAT:                r = R_PPC64_GLOB_DAT;
1064       break;
1065     case BFD_RELOC_32_PCREL:                    r = R_PPC64_REL32;
1066       break;
1067     case BFD_RELOC_32_PLTOFF:                   r = R_PPC64_PLT32;
1068       break;
1069     case BFD_RELOC_32_PLT_PCREL:                r = R_PPC64_PLTREL32;
1070       break;
1071     case BFD_RELOC_LO16_PLTOFF:                 r = R_PPC64_PLT16_LO;
1072       break;
1073     case BFD_RELOC_HI16_PLTOFF:                 r = R_PPC64_PLT16_HI;
1074       break;
1075     case BFD_RELOC_HI16_S_PLTOFF:               r = R_PPC64_PLT16_HA;
1076       break;
1077     case BFD_RELOC_16_BASEREL:                  r = R_PPC64_SECTOFF;
1078       break;
1079     case BFD_RELOC_LO16_BASEREL:                r = R_PPC64_SECTOFF_LO;
1080       break;
1081     case BFD_RELOC_HI16_BASEREL:                r = R_PPC64_SECTOFF_HI;
1082       break;
1083     case BFD_RELOC_HI16_S_BASEREL:              r = R_PPC64_SECTOFF_HA;
1084       break;
1085     case BFD_RELOC_CTOR:                        r = R_PPC64_ADDR64;
1086       break;
1087     case BFD_RELOC_64:                          r = R_PPC64_ADDR64;
1088       break;
1089     case BFD_RELOC_PPC64_HIGHER:                r = R_PPC64_ADDR16_HIGHER;
1090       break;
1091     case BFD_RELOC_PPC64_HIGHER_S:              r = R_PPC64_ADDR16_HIGHERA;
1092       break;
1093     case BFD_RELOC_PPC64_HIGHEST:               r = R_PPC64_ADDR16_HIGHEST;
1094       break;
1095     case BFD_RELOC_PPC64_HIGHEST_S:             r = R_PPC64_ADDR16_HIGHESTA;
1096       break;
1097     case BFD_RELOC_64_PCREL:                    r = R_PPC64_REL64;
1098       break;
1099     case BFD_RELOC_64_PLTOFF:                   r = R_PPC64_PLT64;
1100       break;
1101     case BFD_RELOC_64_PLT_PCREL:                r = R_PPC64_PLTREL64;
1102       break;
1103     case BFD_RELOC_PPC_TOC16:                   r = R_PPC64_TOC16;
1104       break;
1105     case BFD_RELOC_PPC64_TOC16_LO:              r = R_PPC64_TOC16_LO;
1106       break;
1107     case BFD_RELOC_PPC64_TOC16_HI:              r = R_PPC64_TOC16_HI;
1108       break;
1109     case BFD_RELOC_PPC64_TOC16_HA:              r = R_PPC64_TOC16_HA;
1110       break;
1111     case BFD_RELOC_PPC64_TOC:                   r = R_PPC64_TOC;
1112       break;
1113     case BFD_RELOC_PPC64_PLTGOT16:              r = R_PPC64_PLTGOT16;
1114       break;
1115     case BFD_RELOC_PPC64_PLTGOT16_LO:           r = R_PPC64_PLTGOT16_LO;
1116       break;
1117     case BFD_RELOC_PPC64_PLTGOT16_HI:           r = R_PPC64_PLTGOT16_HI;
1118       break;
1119     case BFD_RELOC_PPC64_PLTGOT16_HA:           r = R_PPC64_PLTGOT16_HA;
1120       break;
1121     case BFD_RELOC_PPC64_ADDR16_DS:             r = R_PPC64_ADDR16_DS;
1122       break;
1123     case BFD_RELOC_PPC64_ADDR16_LO_DS:          r = R_PPC64_ADDR16_LO_DS;
1124       break;
1125     case BFD_RELOC_PPC64_GOT16_DS:              r = R_PPC64_GOT16_DS;
1126       break;
1127     case BFD_RELOC_PPC64_GOT16_LO_DS:           r = R_PPC64_GOT16_LO_DS;
1128       break;
1129     case BFD_RELOC_PPC64_PLT16_LO_DS:           r = R_PPC64_PLT16_LO_DS;
1130       break;
1131     case BFD_RELOC_PPC64_SECTOFF_DS:            r = R_PPC64_SECTOFF_DS;
1132       break;
1133     case BFD_RELOC_PPC64_SECTOFF_LO_DS:         r = R_PPC64_SECTOFF_LO_DS;
1134       break;
1135     case BFD_RELOC_PPC64_TOC16_DS:              r = R_PPC64_TOC16_DS;
1136       break;
1137     case BFD_RELOC_PPC64_TOC16_LO_DS:           r = R_PPC64_TOC16_LO_DS;
1138       break;
1139     case BFD_RELOC_PPC64_PLTGOT16_DS:           r = R_PPC64_PLTGOT16_DS;
1140       break;
1141     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:        r = R_PPC64_PLTGOT16_LO_DS;
1142       break;
1143     case BFD_RELOC_PPC64_TLS_PCREL:
1144     case BFD_RELOC_PPC_TLS:                     r = R_PPC64_TLS;
1145       break;
1146     case BFD_RELOC_PPC_TLSGD:                   r = R_PPC64_TLSGD;
1147       break;
1148     case BFD_RELOC_PPC_TLSLD:                   r = R_PPC64_TLSLD;
1149       break;
1150     case BFD_RELOC_PPC_DTPMOD:                  r = R_PPC64_DTPMOD64;
1151       break;
1152     case BFD_RELOC_PPC_TPREL16:                 r = R_PPC64_TPREL16;
1153       break;
1154     case BFD_RELOC_PPC_TPREL16_LO:              r = R_PPC64_TPREL16_LO;
1155       break;
1156     case BFD_RELOC_PPC_TPREL16_HI:              r = R_PPC64_TPREL16_HI;
1157       break;
1158     case BFD_RELOC_PPC64_TPREL16_HIGH:          r = R_PPC64_TPREL16_HIGH;
1159       break;
1160     case BFD_RELOC_PPC_TPREL16_HA:              r = R_PPC64_TPREL16_HA;
1161       break;
1162     case BFD_RELOC_PPC64_TPREL16_HIGHA:         r = R_PPC64_TPREL16_HIGHA;
1163       break;
1164     case BFD_RELOC_PPC_TPREL:                   r = R_PPC64_TPREL64;
1165       break;
1166     case BFD_RELOC_PPC_DTPREL16:                r = R_PPC64_DTPREL16;
1167       break;
1168     case BFD_RELOC_PPC_DTPREL16_LO:             r = R_PPC64_DTPREL16_LO;
1169       break;
1170     case BFD_RELOC_PPC_DTPREL16_HI:             r = R_PPC64_DTPREL16_HI;
1171       break;
1172     case BFD_RELOC_PPC64_DTPREL16_HIGH:         r = R_PPC64_DTPREL16_HIGH;
1173       break;
1174     case BFD_RELOC_PPC_DTPREL16_HA:             r = R_PPC64_DTPREL16_HA;
1175       break;
1176     case BFD_RELOC_PPC64_DTPREL16_HIGHA:        r = R_PPC64_DTPREL16_HIGHA;
1177       break;
1178     case BFD_RELOC_PPC_DTPREL:                  r = R_PPC64_DTPREL64;
1179       break;
1180     case BFD_RELOC_PPC_GOT_TLSGD16:             r = R_PPC64_GOT_TLSGD16;
1181       break;
1182     case BFD_RELOC_PPC_GOT_TLSGD16_LO:          r = R_PPC64_GOT_TLSGD16_LO;
1183       break;
1184     case BFD_RELOC_PPC_GOT_TLSGD16_HI:          r = R_PPC64_GOT_TLSGD16_HI;
1185       break;
1186     case BFD_RELOC_PPC_GOT_TLSGD16_HA:          r = R_PPC64_GOT_TLSGD16_HA;
1187       break;
1188     case BFD_RELOC_PPC_GOT_TLSLD16:             r = R_PPC64_GOT_TLSLD16;
1189       break;
1190     case BFD_RELOC_PPC_GOT_TLSLD16_LO:          r = R_PPC64_GOT_TLSLD16_LO;
1191       break;
1192     case BFD_RELOC_PPC_GOT_TLSLD16_HI:          r = R_PPC64_GOT_TLSLD16_HI;
1193       break;
1194     case BFD_RELOC_PPC_GOT_TLSLD16_HA:          r = R_PPC64_GOT_TLSLD16_HA;
1195       break;
1196     case BFD_RELOC_PPC_GOT_TPREL16:             r = R_PPC64_GOT_TPREL16_DS;
1197       break;
1198     case BFD_RELOC_PPC_GOT_TPREL16_LO:          r = R_PPC64_GOT_TPREL16_LO_DS;
1199       break;
1200     case BFD_RELOC_PPC_GOT_TPREL16_HI:          r = R_PPC64_GOT_TPREL16_HI;
1201       break;
1202     case BFD_RELOC_PPC_GOT_TPREL16_HA:          r = R_PPC64_GOT_TPREL16_HA;
1203       break;
1204     case BFD_RELOC_PPC_GOT_DTPREL16:            r = R_PPC64_GOT_DTPREL16_DS;
1205       break;
1206     case BFD_RELOC_PPC_GOT_DTPREL16_LO:         r = R_PPC64_GOT_DTPREL16_LO_DS;
1207       break;
1208     case BFD_RELOC_PPC_GOT_DTPREL16_HI:         r = R_PPC64_GOT_DTPREL16_HI;
1209       break;
1210     case BFD_RELOC_PPC_GOT_DTPREL16_HA:         r = R_PPC64_GOT_DTPREL16_HA;
1211       break;
1212     case BFD_RELOC_PPC64_TPREL16_DS:            r = R_PPC64_TPREL16_DS;
1213       break;
1214     case BFD_RELOC_PPC64_TPREL16_LO_DS:         r = R_PPC64_TPREL16_LO_DS;
1215       break;
1216     case BFD_RELOC_PPC64_TPREL16_HIGHER:        r = R_PPC64_TPREL16_HIGHER;
1217       break;
1218     case BFD_RELOC_PPC64_TPREL16_HIGHERA:       r = R_PPC64_TPREL16_HIGHERA;
1219       break;
1220     case BFD_RELOC_PPC64_TPREL16_HIGHEST:       r = R_PPC64_TPREL16_HIGHEST;
1221       break;
1222     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:      r = R_PPC64_TPREL16_HIGHESTA;
1223       break;
1224     case BFD_RELOC_PPC64_DTPREL16_DS:           r = R_PPC64_DTPREL16_DS;
1225       break;
1226     case BFD_RELOC_PPC64_DTPREL16_LO_DS:        r = R_PPC64_DTPREL16_LO_DS;
1227       break;
1228     case BFD_RELOC_PPC64_DTPREL16_HIGHER:       r = R_PPC64_DTPREL16_HIGHER;
1229       break;
1230     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:      r = R_PPC64_DTPREL16_HIGHERA;
1231       break;
1232     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:      r = R_PPC64_DTPREL16_HIGHEST;
1233       break;
1234     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     r = R_PPC64_DTPREL16_HIGHESTA;
1235       break;
1236     case BFD_RELOC_16_PCREL:                    r = R_PPC64_REL16;
1237       break;
1238     case BFD_RELOC_LO16_PCREL:                  r = R_PPC64_REL16_LO;
1239       break;
1240     case BFD_RELOC_HI16_PCREL:                  r = R_PPC64_REL16_HI;
1241       break;
1242     case BFD_RELOC_HI16_S_PCREL:                r = R_PPC64_REL16_HA;
1243       break;
1244     case BFD_RELOC_PPC64_REL16_HIGH:            r = R_PPC64_REL16_HIGH;
1245       break;
1246     case BFD_RELOC_PPC64_REL16_HIGHA:           r = R_PPC64_REL16_HIGHA;
1247       break;
1248     case BFD_RELOC_PPC64_REL16_HIGHER:          r = R_PPC64_REL16_HIGHER;
1249       break;
1250     case BFD_RELOC_PPC64_REL16_HIGHERA:         r = R_PPC64_REL16_HIGHERA;
1251       break;
1252     case BFD_RELOC_PPC64_REL16_HIGHEST:         r = R_PPC64_REL16_HIGHEST;
1253       break;
1254     case BFD_RELOC_PPC64_REL16_HIGHESTA:        r = R_PPC64_REL16_HIGHESTA;
1255       break;
1256     case BFD_RELOC_PPC_16DX_HA:                 r = R_PPC64_16DX_HA;
1257       break;
1258     case BFD_RELOC_PPC_REL16DX_HA:              r = R_PPC64_REL16DX_HA;
1259       break;
1260     case BFD_RELOC_PPC64_ENTRY:                 r = R_PPC64_ENTRY;
1261       break;
1262     case BFD_RELOC_PPC64_ADDR64_LOCAL:          r = R_PPC64_ADDR64_LOCAL;
1263       break;
1264     case BFD_RELOC_PPC64_D34:                   r = R_PPC64_D34;
1265       break;
1266     case BFD_RELOC_PPC64_D34_LO:                r = R_PPC64_D34_LO;
1267       break;
1268     case BFD_RELOC_PPC64_D34_HI30:              r = R_PPC64_D34_HI30;
1269       break;
1270     case BFD_RELOC_PPC64_D34_HA30:              r = R_PPC64_D34_HA30;
1271       break;
1272     case BFD_RELOC_PPC64_PCREL34:               r = R_PPC64_PCREL34;
1273       break;
1274     case BFD_RELOC_PPC64_GOT_PCREL34:           r = R_PPC64_GOT_PCREL34;
1275       break;
1276     case BFD_RELOC_PPC64_PLT_PCREL34:           r = R_PPC64_PLT_PCREL34;
1277       break;
1278     case BFD_RELOC_PPC64_TPREL34:               r = R_PPC64_TPREL34;
1279       break;
1280     case BFD_RELOC_PPC64_DTPREL34:              r = R_PPC64_DTPREL34;
1281       break;
1282     case BFD_RELOC_PPC64_GOT_TLSGD34:           r = R_PPC64_GOT_TLSGD34;
1283       break;
1284     case BFD_RELOC_PPC64_GOT_TLSLD34:           r = R_PPC64_GOT_TLSLD34;
1285       break;
1286     case BFD_RELOC_PPC64_GOT_TPREL34:           r = R_PPC64_GOT_TPREL34;
1287       break;
1288     case BFD_RELOC_PPC64_GOT_DTPREL34:          r = R_PPC64_GOT_DTPREL34;
1289       break;
1290     case BFD_RELOC_PPC64_ADDR16_HIGHER34:       r = R_PPC64_ADDR16_HIGHER34;
1291       break;
1292     case BFD_RELOC_PPC64_ADDR16_HIGHERA34:      r = R_PPC64_ADDR16_HIGHERA34;
1293       break;
1294     case BFD_RELOC_PPC64_ADDR16_HIGHEST34:      r = R_PPC64_ADDR16_HIGHEST34;
1295       break;
1296     case BFD_RELOC_PPC64_ADDR16_HIGHESTA34:     r = R_PPC64_ADDR16_HIGHESTA34;
1297       break;
1298     case BFD_RELOC_PPC64_REL16_HIGHER34:        r = R_PPC64_REL16_HIGHER34;
1299       break;
1300     case BFD_RELOC_PPC64_REL16_HIGHERA34:       r = R_PPC64_REL16_HIGHERA34;
1301       break;
1302     case BFD_RELOC_PPC64_REL16_HIGHEST34:       r = R_PPC64_REL16_HIGHEST34;
1303       break;
1304     case BFD_RELOC_PPC64_REL16_HIGHESTA34:      r = R_PPC64_REL16_HIGHESTA34;
1305       break;
1306     case BFD_RELOC_PPC64_D28:                   r = R_PPC64_D28;
1307       break;
1308     case BFD_RELOC_PPC64_PCREL28:               r = R_PPC64_PCREL28;
1309       break;
1310     case BFD_RELOC_VTABLE_INHERIT:              r = R_PPC64_GNU_VTINHERIT;
1311       break;
1312     case BFD_RELOC_VTABLE_ENTRY:                r = R_PPC64_GNU_VTENTRY;
1313       break;
1314     }
1315
1316   return ppc64_elf_howto_table[r];
1317 };
1318
1319 static reloc_howto_type *
1320 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
1321                              const char *r_name)
1322 {
1323   unsigned int i;
1324
1325   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
1326     if (ppc64_elf_howto_raw[i].name != NULL
1327         && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
1328       return &ppc64_elf_howto_raw[i];
1329
1330   return NULL;
1331 }
1332
1333 /* Set the howto pointer for a PowerPC ELF reloc.  */
1334
1335 static bfd_boolean
1336 ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
1337                          Elf_Internal_Rela *dst)
1338 {
1339   unsigned int type;
1340
1341   /* Initialize howto table if needed.  */
1342   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1343     ppc_howto_init ();
1344
1345   type = ELF64_R_TYPE (dst->r_info);
1346   if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
1347     {
1348       /* xgettext:c-format */
1349       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1350                           abfd, type);
1351       bfd_set_error (bfd_error_bad_value);
1352       return FALSE;
1353     }
1354   cache_ptr->howto = ppc64_elf_howto_table[type];
1355   if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
1356     {
1357       /* xgettext:c-format */
1358       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1359                           abfd, type);
1360       bfd_set_error (bfd_error_bad_value);
1361       return FALSE;
1362     }
1363
1364   return TRUE;
1365 }
1366
1367 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
1368
1369 static bfd_reloc_status_type
1370 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1371                     void *data, asection *input_section,
1372                     bfd *output_bfd, char **error_message)
1373 {
1374   enum elf_ppc64_reloc_type r_type;
1375   long insn;
1376   bfd_size_type octets;
1377   bfd_vma value;
1378
1379   /* If this is a relocatable link (output_bfd test tells us), just
1380      call the generic function.  Any adjustment will be done at final
1381      link time.  */
1382   if (output_bfd != NULL)
1383     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1384                                   input_section, output_bfd, error_message);
1385
1386   /* Adjust the addend for sign extension of the low 16 (or 34) bits.
1387      We won't actually be using the low bits, so trashing them
1388      doesn't matter.  */
1389   r_type = reloc_entry->howto->type;
1390   if (r_type == R_PPC64_ADDR16_HIGHERA34
1391       || r_type == R_PPC64_ADDR16_HIGHESTA34
1392       || r_type == R_PPC64_REL16_HIGHERA34
1393       || r_type == R_PPC64_REL16_HIGHESTA34)
1394     reloc_entry->addend += 1ULL << 33;
1395   else
1396     reloc_entry->addend += 1U << 15;
1397   if (r_type != R_PPC64_REL16DX_HA)
1398     return bfd_reloc_continue;
1399
1400   value = 0;
1401   if (!bfd_is_com_section (symbol->section))
1402     value = symbol->value;
1403   value += (reloc_entry->addend
1404             + symbol->section->output_offset
1405             + symbol->section->output_section->vma);
1406   value -= (reloc_entry->address
1407             + input_section->output_offset
1408             + input_section->output_section->vma);
1409   value = (bfd_signed_vma) value >> 16;
1410
1411   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1412   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1413   insn &= ~0x1fffc1;
1414   insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
1415   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1416   if (value + 0x8000 > 0xffff)
1417     return bfd_reloc_overflow;
1418   return bfd_reloc_ok;
1419 }
1420
1421 static bfd_reloc_status_type
1422 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1423                         void *data, asection *input_section,
1424                         bfd *output_bfd, char **error_message)
1425 {
1426   if (output_bfd != NULL)
1427     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1428                                   input_section, output_bfd, error_message);
1429
1430   if (strcmp (symbol->section->name, ".opd") == 0
1431       && (symbol->section->owner->flags & DYNAMIC) == 0)
1432     {
1433       bfd_vma dest = opd_entry_value (symbol->section,
1434                                       symbol->value + reloc_entry->addend,
1435                                       NULL, NULL, FALSE);
1436       if (dest != (bfd_vma) -1)
1437         reloc_entry->addend = dest - (symbol->value
1438                                       + symbol->section->output_section->vma
1439                                       + symbol->section->output_offset);
1440     }
1441   else
1442     {
1443       elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
1444
1445       if (symbol->section->owner != abfd
1446           && symbol->section->owner != NULL
1447           && abiversion (symbol->section->owner) >= 2)
1448         {
1449           unsigned int i;
1450
1451           for (i = 0; i < symbol->section->owner->symcount; ++i)
1452             {
1453               asymbol *symdef = symbol->section->owner->outsymbols[i];
1454
1455               if (strcmp (symdef->name, symbol->name) == 0)
1456                 {
1457                   elfsym = (elf_symbol_type *) symdef;
1458                   break;
1459                 }
1460             }
1461         }
1462       reloc_entry->addend
1463         += PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
1464     }
1465   return bfd_reloc_continue;
1466 }
1467
1468 static bfd_reloc_status_type
1469 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1470                          void *data, asection *input_section,
1471                          bfd *output_bfd, char **error_message)
1472 {
1473   long insn;
1474   enum elf_ppc64_reloc_type r_type;
1475   bfd_size_type octets;
1476   /* Assume 'at' branch hints.  */
1477   bfd_boolean is_isa_v2 = TRUE;
1478
1479   /* If this is a relocatable link (output_bfd test tells us), just
1480      call the generic function.  Any adjustment will be done at final
1481      link time.  */
1482   if (output_bfd != NULL)
1483     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1484                                   input_section, output_bfd, error_message);
1485
1486   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1487   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1488   insn &= ~(0x01 << 21);
1489   r_type = reloc_entry->howto->type;
1490   if (r_type == R_PPC64_ADDR14_BRTAKEN
1491       || r_type == R_PPC64_REL14_BRTAKEN)
1492     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
1493
1494   if (is_isa_v2)
1495     {
1496       /* Set 'a' bit.  This is 0b00010 in BO field for branch
1497          on CR(BI) insns (BO == 001at or 011at), and 0b01000
1498          for branch on CTR insns (BO == 1a00t or 1a01t).  */
1499       if ((insn & (0x14 << 21)) == (0x04 << 21))
1500         insn |= 0x02 << 21;
1501       else if ((insn & (0x14 << 21)) == (0x10 << 21))
1502         insn |= 0x08 << 21;
1503       else
1504         goto out;
1505     }
1506   else
1507     {
1508       bfd_vma target = 0;
1509       bfd_vma from;
1510
1511       if (!bfd_is_com_section (symbol->section))
1512         target = symbol->value;
1513       target += symbol->section->output_section->vma;
1514       target += symbol->section->output_offset;
1515       target += reloc_entry->addend;
1516
1517       from = (reloc_entry->address
1518               + input_section->output_offset
1519               + input_section->output_section->vma);
1520
1521       /* Invert 'y' bit if not the default.  */
1522       if ((bfd_signed_vma) (target - from) < 0)
1523         insn ^= 0x01 << 21;
1524     }
1525   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1526  out:
1527   return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
1528                                  input_section, output_bfd, error_message);
1529 }
1530
1531 static bfd_reloc_status_type
1532 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1533                          void *data, asection *input_section,
1534                          bfd *output_bfd, char **error_message)
1535 {
1536   /* If this is a relocatable link (output_bfd test tells us), just
1537      call the generic function.  Any adjustment will be done at final
1538      link time.  */
1539   if (output_bfd != NULL)
1540     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1541                                   input_section, output_bfd, error_message);
1542
1543   /* Subtract the symbol section base address.  */
1544   reloc_entry->addend -= symbol->section->output_section->vma;
1545   return bfd_reloc_continue;
1546 }
1547
1548 static bfd_reloc_status_type
1549 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1550                             void *data, asection *input_section,
1551                             bfd *output_bfd, char **error_message)
1552 {
1553   /* If this is a relocatable link (output_bfd test tells us), just
1554      call the generic function.  Any adjustment will be done at final
1555      link time.  */
1556   if (output_bfd != NULL)
1557     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1558                                   input_section, output_bfd, error_message);
1559
1560   /* Subtract the symbol section base address.  */
1561   reloc_entry->addend -= symbol->section->output_section->vma;
1562
1563   /* Adjust the addend for sign extension of the low 16 bits.  */
1564   reloc_entry->addend += 0x8000;
1565   return bfd_reloc_continue;
1566 }
1567
1568 static bfd_reloc_status_type
1569 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1570                      void *data, asection *input_section,
1571                      bfd *output_bfd, char **error_message)
1572 {
1573   bfd_vma TOCstart;
1574
1575   /* If this is a relocatable link (output_bfd test tells us), just
1576      call the generic function.  Any adjustment will be done at final
1577      link time.  */
1578   if (output_bfd != NULL)
1579     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1580                                   input_section, output_bfd, error_message);
1581
1582   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1583   if (TOCstart == 0)
1584     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1585
1586   /* Subtract the TOC base address.  */
1587   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1588   return bfd_reloc_continue;
1589 }
1590
1591 static bfd_reloc_status_type
1592 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1593                         void *data, asection *input_section,
1594                         bfd *output_bfd, char **error_message)
1595 {
1596   bfd_vma TOCstart;
1597
1598   /* If this is a relocatable link (output_bfd test tells us), just
1599      call the generic function.  Any adjustment will be done at final
1600      link time.  */
1601   if (output_bfd != NULL)
1602     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1603                                   input_section, output_bfd, error_message);
1604
1605   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1606   if (TOCstart == 0)
1607     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1608
1609   /* Subtract the TOC base address.  */
1610   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1611
1612   /* Adjust the addend for sign extension of the low 16 bits.  */
1613   reloc_entry->addend += 0x8000;
1614   return bfd_reloc_continue;
1615 }
1616
1617 static bfd_reloc_status_type
1618 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1619                        void *data, asection *input_section,
1620                        bfd *output_bfd, char **error_message)
1621 {
1622   bfd_vma TOCstart;
1623   bfd_size_type octets;
1624
1625   /* If this is a relocatable link (output_bfd test tells us), just
1626      call the generic function.  Any adjustment will be done at final
1627      link time.  */
1628   if (output_bfd != NULL)
1629     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1630                                   input_section, output_bfd, error_message);
1631
1632   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1633   if (TOCstart == 0)
1634     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1635
1636   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1637   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
1638   return bfd_reloc_ok;
1639 }
1640
1641 static bfd_reloc_status_type
1642 ppc64_elf_prefix_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1643                         void *data, asection *input_section,
1644                         bfd *output_bfd, char **error_message)
1645 {
1646   uint64_t insn;
1647   bfd_vma targ;
1648
1649   if (output_bfd != NULL)
1650     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1651                                   input_section, output_bfd, error_message);
1652
1653   insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1654   insn <<= 32;
1655   insn |= bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address + 4);
1656
1657   targ = (symbol->section->output_section->vma
1658           + symbol->section->output_offset
1659           + reloc_entry->addend);
1660   if (!bfd_is_com_section (symbol->section))
1661     targ += symbol->value;
1662   if (reloc_entry->howto->type == R_PPC64_D34_HA30)
1663     targ += 1ULL << 33;
1664   if (reloc_entry->howto->pc_relative)
1665     {
1666       bfd_vma from = (reloc_entry->address
1667                       + input_section->output_offset
1668                       + input_section->output_section->vma);
1669       targ -=from;
1670     }
1671   targ >>= reloc_entry->howto->rightshift;
1672   insn &= ~reloc_entry->howto->dst_mask;
1673   insn |= ((targ << 16) | (targ & 0xffff)) & reloc_entry->howto->dst_mask;
1674   bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + reloc_entry->address);
1675   bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address + 4);
1676   if (reloc_entry->howto->complain_on_overflow == complain_overflow_signed
1677       && (targ + (1ULL << (reloc_entry->howto->bitsize - 1))
1678           >= 1ULL << reloc_entry->howto->bitsize))
1679     return bfd_reloc_overflow;
1680   return bfd_reloc_ok;
1681 }
1682
1683 static bfd_reloc_status_type
1684 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1685                            void *data, asection *input_section,
1686                            bfd *output_bfd, char **error_message)
1687 {
1688   /* If this is a relocatable link (output_bfd test tells us), just
1689      call the generic function.  Any adjustment will be done at final
1690      link time.  */
1691   if (output_bfd != NULL)
1692     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1693                                   input_section, output_bfd, error_message);
1694
1695   if (error_message != NULL)
1696     {
1697       static char buf[60];
1698       sprintf (buf, "generic linker can't handle %s",
1699                reloc_entry->howto->name);
1700       *error_message = buf;
1701     }
1702   return bfd_reloc_dangerous;
1703 }
1704
1705 /* Track GOT entries needed for a given symbol.  We might need more
1706    than one got entry per symbol.  */
1707 struct got_entry
1708 {
1709   struct got_entry *next;
1710
1711   /* The symbol addend that we'll be placing in the GOT.  */
1712   bfd_vma addend;
1713
1714   /* Unlike other ELF targets, we use separate GOT entries for the same
1715      symbol referenced from different input files.  This is to support
1716      automatic multiple TOC/GOT sections, where the TOC base can vary
1717      from one input file to another.  After partitioning into TOC groups
1718      we merge entries within the group.
1719
1720      Point to the BFD owning this GOT entry.  */
1721   bfd *owner;
1722
1723   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
1724      TLS_TPREL or TLS_DTPREL for tls entries.  */
1725   unsigned char tls_type;
1726
1727   /* Non-zero if got.ent points to real entry.  */
1728   unsigned char is_indirect;
1729
1730   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
1731   union
1732   {
1733     bfd_signed_vma refcount;
1734     bfd_vma offset;
1735     struct got_entry *ent;
1736   } got;
1737 };
1738
1739 /* The same for PLT.  */
1740 struct plt_entry
1741 {
1742   struct plt_entry *next;
1743
1744   bfd_vma addend;
1745
1746   union
1747   {
1748     bfd_signed_vma refcount;
1749     bfd_vma offset;
1750   } plt;
1751 };
1752
1753 struct ppc64_elf_obj_tdata
1754 {
1755   struct elf_obj_tdata elf;
1756
1757   /* Shortcuts to dynamic linker sections.  */
1758   asection *got;
1759   asection *relgot;
1760
1761   /* Used during garbage collection.  We attach global symbols defined
1762      on removed .opd entries to this section so that the sym is removed.  */
1763   asection *deleted_section;
1764
1765   /* TLS local dynamic got entry handling.  Support for multiple GOT
1766      sections means we potentially need one of these for each input bfd.  */
1767   struct got_entry tlsld_got;
1768
1769   union
1770   {
1771     /* A copy of relocs before they are modified for --emit-relocs.  */
1772     Elf_Internal_Rela *relocs;
1773
1774     /* Section contents.  */
1775     bfd_byte *contents;
1776   } opd;
1777
1778   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
1779      the reloc to be in the range -32768 to 32767.  */
1780   unsigned int has_small_toc_reloc : 1;
1781
1782   /* Set if toc/got ha relocs detected not using r2, or lo reloc
1783      instruction not one we handle.  */
1784   unsigned int unexpected_toc_insn : 1;
1785
1786   /* Set if PLT/GOT/TOC relocs that can be optimised are present in
1787      this file.  */
1788   unsigned int has_optrel : 1;
1789 };
1790
1791 #define ppc64_elf_tdata(bfd) \
1792   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
1793
1794 #define ppc64_tlsld_got(bfd) \
1795   (&ppc64_elf_tdata (bfd)->tlsld_got)
1796
1797 #define is_ppc64_elf(bfd) \
1798   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
1799    && elf_object_id (bfd) == PPC64_ELF_DATA)
1800
1801 /* Override the generic function because we store some extras.  */
1802
1803 static bfd_boolean
1804 ppc64_elf_mkobject (bfd *abfd)
1805 {
1806   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
1807                                   PPC64_ELF_DATA);
1808 }
1809
1810 /* Fix bad default arch selected for a 64 bit input bfd when the
1811    default is 32 bit.  Also select arch based on apuinfo.  */
1812
1813 static bfd_boolean
1814 ppc64_elf_object_p (bfd *abfd)
1815 {
1816   if (!abfd->arch_info->the_default)
1817     return TRUE;
1818
1819   if (abfd->arch_info->bits_per_word == 32)
1820     {
1821       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
1822
1823       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
1824         {
1825           /* Relies on arch after 32 bit default being 64 bit default.  */
1826           abfd->arch_info = abfd->arch_info->next;
1827           BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
1828         }
1829     }
1830   return _bfd_elf_ppc_set_arch (abfd);
1831 }
1832
1833 /* Support for core dump NOTE sections.  */
1834
1835 static bfd_boolean
1836 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
1837 {
1838   size_t offset, size;
1839
1840   if (note->descsz != 504)
1841     return FALSE;
1842
1843   /* pr_cursig */
1844   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
1845
1846   /* pr_pid */
1847   elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
1848
1849   /* pr_reg */
1850   offset = 112;
1851   size = 384;
1852
1853   /* Make a ".reg/999" section.  */
1854   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
1855                                           size, note->descpos + offset);
1856 }
1857
1858 static bfd_boolean
1859 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
1860 {
1861   if (note->descsz != 136)
1862     return FALSE;
1863
1864   elf_tdata (abfd)->core->pid
1865     = bfd_get_32 (abfd, note->descdata + 24);
1866   elf_tdata (abfd)->core->program
1867     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
1868   elf_tdata (abfd)->core->command
1869     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
1870
1871   return TRUE;
1872 }
1873
1874 static char *
1875 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
1876                            ...)
1877 {
1878   switch (note_type)
1879     {
1880     default:
1881       return NULL;
1882
1883     case NT_PRPSINFO:
1884       {
1885         char data[136] ATTRIBUTE_NONSTRING;
1886         va_list ap;
1887
1888         va_start (ap, note_type);
1889         memset (data, 0, sizeof (data));
1890         strncpy (data + 40, va_arg (ap, const char *), 16);
1891 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1892         DIAGNOSTIC_PUSH;
1893         /* GCC 8.0 and 8.1 warn about 80 equals destination size with
1894            -Wstringop-truncation:
1895            https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
1896          */
1897         DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
1898 #endif
1899         strncpy (data + 56, va_arg (ap, const char *), 80);
1900 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1901         DIAGNOSTIC_POP;
1902 #endif
1903         va_end (ap);
1904         return elfcore_write_note (abfd, buf, bufsiz,
1905                                    "CORE", note_type, data, sizeof (data));
1906       }
1907
1908     case NT_PRSTATUS:
1909       {
1910         char data[504];
1911         va_list ap;
1912         long pid;
1913         int cursig;
1914         const void *greg;
1915
1916         va_start (ap, note_type);
1917         memset (data, 0, 112);
1918         pid = va_arg (ap, long);
1919         bfd_put_32 (abfd, pid, data + 32);
1920         cursig = va_arg (ap, int);
1921         bfd_put_16 (abfd, cursig, data + 12);
1922         greg = va_arg (ap, const void *);
1923         memcpy (data + 112, greg, 384);
1924         memset (data + 496, 0, 8);
1925         va_end (ap);
1926         return elfcore_write_note (abfd, buf, bufsiz,
1927                                    "CORE", note_type, data, sizeof (data));
1928       }
1929     }
1930 }
1931
1932 /* Add extra PPC sections.  */
1933
1934 static const struct bfd_elf_special_section ppc64_elf_special_sections[] =
1935 {
1936   { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
1937   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1938   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1939   { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1940   { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1941   { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1942   { NULL,                     0,  0, 0,            0 }
1943 };
1944
1945 enum _ppc64_sec_type {
1946   sec_normal = 0,
1947   sec_opd = 1,
1948   sec_toc = 2
1949 };
1950
1951 struct _ppc64_elf_section_data
1952 {
1953   struct bfd_elf_section_data elf;
1954
1955   union
1956   {
1957     /* An array with one entry for each opd function descriptor,
1958        and some spares since opd entries may be either 16 or 24 bytes.  */
1959 #define OPD_NDX(OFF) ((OFF) >> 4)
1960     struct _opd_sec_data
1961     {
1962       /* Points to the function code section for local opd entries.  */
1963       asection **func_sec;
1964
1965       /* After editing .opd, adjust references to opd local syms.  */
1966       long *adjust;
1967     } opd;
1968
1969     /* An array for toc sections, indexed by offset/8.  */
1970     struct _toc_sec_data
1971     {
1972       /* Specifies the relocation symbol index used at a given toc offset.  */
1973       unsigned *symndx;
1974
1975       /* And the relocation addend.  */
1976       bfd_vma *add;
1977     } toc;
1978   } u;
1979
1980   enum _ppc64_sec_type sec_type:2;
1981
1982   /* Flag set when small branches are detected.  Used to
1983      select suitable defaults for the stub group size.  */
1984   unsigned int has_14bit_branch:1;
1985
1986   /* Flag set when PLTCALL relocs are detected.  */
1987   unsigned int has_pltcall:1;
1988
1989   /* Flag set when section has PLT/GOT/TOC relocations that can be
1990      optimised.  */
1991   unsigned int has_optrel:1;
1992 };
1993
1994 #define ppc64_elf_section_data(sec) \
1995   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
1996
1997 static bfd_boolean
1998 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
1999 {
2000   if (!sec->used_by_bfd)
2001     {
2002       struct _ppc64_elf_section_data *sdata;
2003       size_t amt = sizeof (*sdata);
2004
2005       sdata = bfd_zalloc (abfd, amt);
2006       if (sdata == NULL)
2007         return FALSE;
2008       sec->used_by_bfd = sdata;
2009     }
2010
2011   return _bfd_elf_new_section_hook (abfd, sec);
2012 }
2013
2014 static struct _opd_sec_data *
2015 get_opd_info (asection * sec)
2016 {
2017   if (sec != NULL
2018       && ppc64_elf_section_data (sec) != NULL
2019       && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2020     return &ppc64_elf_section_data (sec)->u.opd;
2021   return NULL;
2022 }
2023 \f
2024 /* Parameters for the qsort hook.  */
2025 static bfd_boolean synthetic_relocatable;
2026 static asection *synthetic_opd;
2027
2028 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
2029
2030 static int
2031 compare_symbols (const void *ap, const void *bp)
2032 {
2033   const asymbol *a = *(const asymbol **) ap;
2034   const asymbol *b = *(const asymbol **) bp;
2035
2036   /* Section symbols first.  */
2037   if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2038     return -1;
2039   if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2040     return 1;
2041
2042   /* then .opd symbols.  */
2043   if (synthetic_opd != NULL)
2044     {
2045       if (strcmp (a->section->name, ".opd") == 0
2046           && strcmp (b->section->name, ".opd") != 0)
2047         return -1;
2048       if (strcmp (a->section->name, ".opd") != 0
2049           && strcmp (b->section->name, ".opd") == 0)
2050         return 1;
2051     }
2052
2053   /* then other code symbols.  */
2054   if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2055        == (SEC_CODE | SEC_ALLOC))
2056       && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2057           != (SEC_CODE | SEC_ALLOC)))
2058     return -1;
2059
2060   if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2061        != (SEC_CODE | SEC_ALLOC))
2062       && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2063           == (SEC_CODE | SEC_ALLOC)))
2064     return 1;
2065
2066   if (synthetic_relocatable)
2067     {
2068       if (a->section->id < b->section->id)
2069         return -1;
2070
2071       if (a->section->id > b->section->id)
2072         return 1;
2073     }
2074
2075   if (a->value + a->section->vma < b->value + b->section->vma)
2076     return -1;
2077
2078   if (a->value + a->section->vma > b->value + b->section->vma)
2079     return 1;
2080
2081   /* For syms with the same value, prefer strong dynamic global function
2082      syms over other syms.  */
2083   if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2084     return -1;
2085
2086   if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2087     return 1;
2088
2089   if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2090     return -1;
2091
2092   if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2093     return 1;
2094
2095   if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2096     return -1;
2097
2098   if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2099     return 1;
2100
2101   if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2102     return -1;
2103
2104   if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2105     return 1;
2106
2107   /* Finally, sort on where the symbol is in memory.  The symbols will
2108      be in at most two malloc'd blocks, one for static syms, one for
2109      dynamic syms, and we distinguish the two blocks above by testing
2110      BSF_DYNAMIC.  Since we are sorting the symbol pointers which were
2111      originally in the same order as the symbols (and we're not
2112      sorting the symbols themselves), this ensures a stable sort.  */
2113   if (a < b)
2114     return -1;
2115   if (a > b)
2116     return 1;
2117   return 0;
2118 }
2119
2120 /* Search SYMS for a symbol of the given VALUE.  */
2121
2122 static asymbol *
2123 sym_exists_at (asymbol **syms, size_t lo, size_t hi, unsigned int id,
2124                bfd_vma value)
2125 {
2126   size_t mid;
2127
2128   if (id == (unsigned) -1)
2129     {
2130       while (lo < hi)
2131         {
2132           mid = (lo + hi) >> 1;
2133           if (syms[mid]->value + syms[mid]->section->vma < value)
2134             lo = mid + 1;
2135           else if (syms[mid]->value + syms[mid]->section->vma > value)
2136             hi = mid;
2137           else
2138             return syms[mid];
2139         }
2140     }
2141   else
2142     {
2143       while (lo < hi)
2144         {
2145           mid = (lo + hi) >> 1;
2146           if (syms[mid]->section->id < id)
2147             lo = mid + 1;
2148           else if (syms[mid]->section->id > id)
2149             hi = mid;
2150           else if (syms[mid]->value < value)
2151             lo = mid + 1;
2152           else if (syms[mid]->value > value)
2153             hi = mid;
2154           else
2155             return syms[mid];
2156         }
2157     }
2158   return NULL;
2159 }
2160
2161 static bfd_boolean
2162 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
2163 {
2164   bfd_vma vma = *(bfd_vma *) ptr;
2165   return ((section->flags & SEC_ALLOC) != 0
2166           && section->vma <= vma
2167           && vma < section->vma + section->size);
2168 }
2169
2170 /* Create synthetic symbols, effectively restoring "dot-symbol" function
2171    entry syms.  Also generate @plt symbols for the glink branch table.
2172    Returns count of synthetic symbols in RET or -1 on error.  */
2173
2174 static long
2175 ppc64_elf_get_synthetic_symtab (bfd *abfd,
2176                                 long static_count, asymbol **static_syms,
2177                                 long dyn_count, asymbol **dyn_syms,
2178                                 asymbol **ret)
2179 {
2180   asymbol *s;
2181   size_t i, j, count;
2182   char *names;
2183   size_t symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2184   asection *opd = NULL;
2185   bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2186   asymbol **syms;
2187   int abi = abiversion (abfd);
2188
2189   *ret = NULL;
2190
2191   if (abi < 2)
2192     {
2193       opd = bfd_get_section_by_name (abfd, ".opd");
2194       if (opd == NULL && abi == 1)
2195         return 0;
2196     }
2197
2198   syms = NULL;
2199   codesecsym = 0;
2200   codesecsymend = 0;
2201   secsymend = 0;
2202   opdsymend = 0;
2203   symcount = 0;
2204   if (opd != NULL)
2205     {
2206       symcount = static_count;
2207       if (!relocatable)
2208         symcount += dyn_count;
2209       if (symcount == 0)
2210         return 0;
2211
2212       syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
2213       if (syms == NULL)
2214         return -1;
2215
2216       if (!relocatable && static_count != 0 && dyn_count != 0)
2217         {
2218           /* Use both symbol tables.  */
2219           memcpy (syms, static_syms, static_count * sizeof (*syms));
2220           memcpy (syms + static_count, dyn_syms,
2221                   (dyn_count + 1) * sizeof (*syms));
2222         }
2223       else if (!relocatable && static_count == 0)
2224         memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
2225       else
2226         memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
2227
2228       /* Trim uninteresting symbols.  Interesting symbols are section,
2229          function, and notype symbols.  */
2230       for (i = 0, j = 0; i < symcount; ++i)
2231         if ((syms[i]->flags & (BSF_FILE | BSF_OBJECT | BSF_THREAD_LOCAL
2232                                | BSF_RELC | BSF_SRELC)) == 0)
2233           syms[j++] = syms[i];
2234       symcount = j;
2235
2236       synthetic_relocatable = relocatable;
2237       synthetic_opd = opd;
2238       qsort (syms, symcount, sizeof (*syms), compare_symbols);
2239
2240       if (!relocatable && symcount > 1)
2241         {
2242           /* Trim duplicate syms, since we may have merged the normal
2243              and dynamic symbols.  Actually, we only care about syms
2244              that have different values, so trim any with the same
2245              value.  Don't consider ifunc and ifunc resolver symbols
2246              duplicates however, because GDB wants to know whether a
2247              text symbol is an ifunc resolver.  */
2248           for (i = 1, j = 1; i < symcount; ++i)
2249             {
2250               const asymbol *s0 = syms[i - 1];
2251               const asymbol *s1 = syms[i];
2252
2253               if ((s0->value + s0->section->vma
2254                    != s1->value + s1->section->vma)
2255                   || ((s0->flags & BSF_GNU_INDIRECT_FUNCTION)
2256                       != (s1->flags & BSF_GNU_INDIRECT_FUNCTION)))
2257                 syms[j++] = syms[i];
2258             }
2259           symcount = j;
2260         }
2261
2262       i = 0;
2263       /* Note that here and in compare_symbols we can't compare opd and
2264          sym->section directly.  With separate debug info files, the
2265          symbols will be extracted from the debug file while abfd passed
2266          to this function is the real binary.  */
2267       if (strcmp (syms[i]->section->name, ".opd") == 0)
2268         ++i;
2269       codesecsym = i;
2270
2271       for (; i < symcount; ++i)
2272         if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC
2273                                          | SEC_THREAD_LOCAL))
2274              != (SEC_CODE | SEC_ALLOC))
2275             || (syms[i]->flags & BSF_SECTION_SYM) == 0)
2276           break;
2277       codesecsymend = i;
2278
2279       for (; i < symcount; ++i)
2280         if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
2281           break;
2282       secsymend = i;
2283
2284       for (; i < symcount; ++i)
2285         if (strcmp (syms[i]->section->name, ".opd") != 0)
2286           break;
2287       opdsymend = i;
2288
2289       for (; i < symcount; ++i)
2290         if (((syms[i]->section->flags
2291               & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL)))
2292             != (SEC_CODE | SEC_ALLOC))
2293           break;
2294       symcount = i;
2295     }
2296   count = 0;
2297
2298   if (relocatable)
2299     {
2300       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2301       arelent *r;
2302       size_t size;
2303       size_t relcount;
2304
2305       if (opdsymend == secsymend)
2306         goto done;
2307
2308       slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2309       relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
2310       if (relcount == 0)
2311         goto done;
2312
2313       if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
2314         {
2315           count = -1;
2316           goto done;
2317         }
2318
2319       size = 0;
2320       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2321         {
2322           asymbol *sym;
2323
2324           while (r < opd->relocation + relcount
2325                  && r->address < syms[i]->value + opd->vma)
2326             ++r;
2327
2328           if (r == opd->relocation + relcount)
2329             break;
2330
2331           if (r->address != syms[i]->value + opd->vma)
2332             continue;
2333
2334           if (r->howto->type != R_PPC64_ADDR64)
2335             continue;
2336
2337           sym = *r->sym_ptr_ptr;
2338           if (!sym_exists_at (syms, opdsymend, symcount,
2339                               sym->section->id, sym->value + r->addend))
2340             {
2341               ++count;
2342               size += sizeof (asymbol);
2343               size += strlen (syms[i]->name) + 2;
2344             }
2345         }
2346
2347       if (size == 0)
2348         goto done;
2349       s = *ret = bfd_malloc (size);
2350       if (s == NULL)
2351         {
2352           count = -1;
2353           goto done;
2354         }
2355
2356       names = (char *) (s + count);
2357
2358       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2359         {
2360           asymbol *sym;
2361
2362           while (r < opd->relocation + relcount
2363                  && r->address < syms[i]->value + opd->vma)
2364             ++r;
2365
2366           if (r == opd->relocation + relcount)
2367             break;
2368
2369           if (r->address != syms[i]->value + opd->vma)
2370             continue;
2371
2372           if (r->howto->type != R_PPC64_ADDR64)
2373             continue;
2374
2375           sym = *r->sym_ptr_ptr;
2376           if (!sym_exists_at (syms, opdsymend, symcount,
2377                               sym->section->id, sym->value + r->addend))
2378             {
2379               size_t len;
2380
2381               *s = *syms[i];
2382               s->flags |= BSF_SYNTHETIC;
2383               s->section = sym->section;
2384               s->value = sym->value + r->addend;
2385               s->name = names;
2386               *names++ = '.';
2387               len = strlen (syms[i]->name);
2388               memcpy (names, syms[i]->name, len + 1);
2389               names += len + 1;
2390               /* Have udata.p point back to the original symbol this
2391                  synthetic symbol was derived from.  */
2392               s->udata.p = syms[i];
2393               s++;
2394             }
2395         }
2396     }
2397   else
2398     {
2399       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2400       bfd_byte *contents = NULL;
2401       size_t size;
2402       size_t plt_count = 0;
2403       bfd_vma glink_vma = 0, resolv_vma = 0;
2404       asection *dynamic, *glink = NULL, *relplt = NULL;
2405       arelent *p;
2406
2407       if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
2408         {
2409         free_contents_and_exit_err:
2410           count = -1;
2411         free_contents_and_exit:
2412           if (contents)
2413             free (contents);
2414           goto done;
2415         }
2416
2417       size = 0;
2418       for (i = secsymend; i < opdsymend; ++i)
2419         {
2420           bfd_vma ent;
2421
2422           /* Ignore bogus symbols.  */
2423           if (syms[i]->value > opd->size - 8)
2424             continue;
2425
2426           ent = bfd_get_64 (abfd, contents + syms[i]->value);
2427           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2428             {
2429               ++count;
2430               size += sizeof (asymbol);
2431               size += strlen (syms[i]->name) + 2;
2432             }
2433         }
2434
2435       /* Get start of .glink stubs from DT_PPC64_GLINK.  */
2436       if (dyn_count != 0
2437           && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
2438         {
2439           bfd_byte *dynbuf, *extdyn, *extdynend;
2440           size_t extdynsize;
2441           void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
2442
2443           if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
2444             goto free_contents_and_exit_err;
2445
2446           extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
2447           swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
2448
2449           extdyn = dynbuf;
2450           extdynend = extdyn + dynamic->size;
2451           for (; extdyn < extdynend; extdyn += extdynsize)
2452             {
2453               Elf_Internal_Dyn dyn;
2454               (*swap_dyn_in) (abfd, extdyn, &dyn);
2455
2456               if (dyn.d_tag == DT_NULL)
2457                 break;
2458
2459               if (dyn.d_tag == DT_PPC64_GLINK)
2460                 {
2461                   /* The first glink stub starts at DT_PPC64_GLINK plus 32.
2462                      See comment in ppc64_elf_finish_dynamic_sections. */
2463                   glink_vma = dyn.d_un.d_val + 8 * 4;
2464                   /* The .glink section usually does not survive the final
2465                      link; search for the section (usually .text) where the
2466                      glink stubs now reside.  */
2467                   glink = bfd_sections_find_if (abfd, section_covers_vma,
2468                                                 &glink_vma);
2469                   break;
2470                 }
2471             }
2472
2473           free (dynbuf);
2474         }
2475
2476       if (glink != NULL)
2477         {
2478           /* Determine __glink trampoline by reading the relative branch
2479              from the first glink stub.  */
2480           bfd_byte buf[4];
2481           unsigned int off = 0;
2482
2483           while (bfd_get_section_contents (abfd, glink, buf,
2484                                            glink_vma + off - glink->vma, 4))
2485             {
2486               unsigned int insn = bfd_get_32 (abfd, buf);
2487               insn ^= B_DOT;
2488               if ((insn & ~0x3fffffc) == 0)
2489                 {
2490                   resolv_vma
2491                     = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
2492                   break;
2493                 }
2494               off += 4;
2495               if (off > 4)
2496                 break;
2497             }
2498
2499           if (resolv_vma)
2500             size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
2501
2502           relplt = bfd_get_section_by_name (abfd, ".rela.plt");
2503           if (relplt != NULL)
2504             {
2505               slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2506               if (!(*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
2507                 goto free_contents_and_exit_err;
2508
2509               plt_count = relplt->size / sizeof (Elf64_External_Rela);
2510               size += plt_count * sizeof (asymbol);
2511
2512               p = relplt->relocation;
2513               for (i = 0; i < plt_count; i++, p++)
2514                 {
2515                   size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
2516                   if (p->addend != 0)
2517                     size += sizeof ("+0x") - 1 + 16;
2518                 }
2519             }
2520         }
2521
2522       if (size == 0)
2523         goto free_contents_and_exit;
2524       s = *ret = bfd_malloc (size);
2525       if (s == NULL)
2526         goto free_contents_and_exit_err;
2527
2528       names = (char *) (s + count + plt_count + (resolv_vma != 0));
2529
2530       for (i = secsymend; i < opdsymend; ++i)
2531         {
2532           bfd_vma ent;
2533
2534           if (syms[i]->value > opd->size - 8)
2535             continue;
2536
2537           ent = bfd_get_64 (abfd, contents + syms[i]->value);
2538           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2539             {
2540               size_t lo, hi;
2541               size_t len;
2542               asection *sec = abfd->sections;
2543
2544               *s = *syms[i];
2545               lo = codesecsym;
2546               hi = codesecsymend;
2547               while (lo < hi)
2548                 {
2549                   size_t mid = (lo + hi) >> 1;
2550                   if (syms[mid]->section->vma < ent)
2551                     lo = mid + 1;
2552                   else if (syms[mid]->section->vma > ent)
2553                     hi = mid;
2554                   else
2555                     {
2556                       sec = syms[mid]->section;
2557                       break;
2558                     }
2559                 }
2560
2561               if (lo >= hi && lo > codesecsym)
2562                 sec = syms[lo - 1]->section;
2563
2564               for (; sec != NULL; sec = sec->next)
2565                 {
2566                   if (sec->vma > ent)
2567                     break;
2568                   /* SEC_LOAD may not be set if SEC is from a separate debug
2569                      info file.  */
2570                   if ((sec->flags & SEC_ALLOC) == 0)
2571                     break;
2572                   if ((sec->flags & SEC_CODE) != 0)
2573                     s->section = sec;
2574                 }
2575               s->flags |= BSF_SYNTHETIC;
2576               s->value = ent - s->section->vma;
2577               s->name = names;
2578               *names++ = '.';
2579               len = strlen (syms[i]->name);
2580               memcpy (names, syms[i]->name, len + 1);
2581               names += len + 1;
2582               /* Have udata.p point back to the original symbol this
2583                  synthetic symbol was derived from.  */
2584               s->udata.p = syms[i];
2585               s++;
2586             }
2587         }
2588       free (contents);
2589
2590       if (glink != NULL && relplt != NULL)
2591         {
2592           if (resolv_vma)
2593             {
2594               /* Add a symbol for the main glink trampoline.  */
2595               memset (s, 0, sizeof *s);
2596               s->the_bfd = abfd;
2597               s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
2598               s->section = glink;
2599               s->value = resolv_vma - glink->vma;
2600               s->name = names;
2601               memcpy (names, "__glink_PLTresolve",
2602                       sizeof ("__glink_PLTresolve"));
2603               names += sizeof ("__glink_PLTresolve");
2604               s++;
2605               count++;
2606             }
2607
2608           /* FIXME: It would be very much nicer to put sym@plt on the
2609              stub rather than on the glink branch table entry.  The
2610              objdump disassembler would then use a sensible symbol
2611              name on plt calls.  The difficulty in doing so is
2612              a) finding the stubs, and,
2613              b) matching stubs against plt entries, and,
2614              c) there can be multiple stubs for a given plt entry.
2615
2616              Solving (a) could be done by code scanning, but older
2617              ppc64 binaries used different stubs to current code.
2618              (b) is the tricky one since you need to known the toc
2619              pointer for at least one function that uses a pic stub to
2620              be able to calculate the plt address referenced.
2621              (c) means gdb would need to set multiple breakpoints (or
2622              find the glink branch itself) when setting breakpoints
2623              for pending shared library loads.  */
2624           p = relplt->relocation;
2625           for (i = 0; i < plt_count; i++, p++)
2626             {
2627               size_t len;
2628
2629               *s = **p->sym_ptr_ptr;
2630               /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
2631                  we are defining a symbol, ensure one of them is set.  */
2632               if ((s->flags & BSF_LOCAL) == 0)
2633                 s->flags |= BSF_GLOBAL;
2634               s->flags |= BSF_SYNTHETIC;
2635               s->section = glink;
2636               s->value = glink_vma - glink->vma;
2637               s->name = names;
2638               s->udata.p = NULL;
2639               len = strlen ((*p->sym_ptr_ptr)->name);
2640               memcpy (names, (*p->sym_ptr_ptr)->name, len);
2641               names += len;
2642               if (p->addend != 0)
2643                 {
2644                   memcpy (names, "+0x", sizeof ("+0x") - 1);
2645                   names += sizeof ("+0x") - 1;
2646                   bfd_sprintf_vma (abfd, names, p->addend);
2647                   names += strlen (names);
2648                 }
2649               memcpy (names, "@plt", sizeof ("@plt"));
2650               names += sizeof ("@plt");
2651               s++;
2652               if (abi < 2)
2653                 {
2654                   glink_vma += 8;
2655                   if (i >= 0x8000)
2656                     glink_vma += 4;
2657                 }
2658               else
2659                 glink_vma += 4;
2660             }
2661           count += plt_count;
2662         }
2663     }
2664
2665  done:
2666   free (syms);
2667   return count;
2668 }
2669 \f
2670 /* The following functions are specific to the ELF linker, while
2671    functions above are used generally.  Those named ppc64_elf_* are
2672    called by the main ELF linker code.  They appear in this file more
2673    or less in the order in which they are called.  eg.
2674    ppc64_elf_check_relocs is called early in the link process,
2675    ppc64_elf_finish_dynamic_sections is one of the last functions
2676    called.
2677
2678    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
2679    functions have both a function code symbol and a function descriptor
2680    symbol.  A call to foo in a relocatable object file looks like:
2681
2682    .            .text
2683    .    x:
2684    .            bl      .foo
2685    .            nop
2686
2687    The function definition in another object file might be:
2688
2689    .            .section .opd
2690    .    foo:    .quad   .foo
2691    .            .quad   .TOC.@tocbase
2692    .            .quad   0
2693    .
2694    .            .text
2695    .    .foo:   blr
2696
2697    When the linker resolves the call during a static link, the branch
2698    unsurprisingly just goes to .foo and the .opd information is unused.
2699    If the function definition is in a shared library, things are a little
2700    different:  The call goes via a plt call stub, the opd information gets
2701    copied to the plt, and the linker patches the nop.
2702
2703    .    x:
2704    .            bl      .foo_stub
2705    .            ld      2,40(1)
2706    .
2707    .
2708    .    .foo_stub:
2709    .            std     2,40(1)                 # in practice, the call stub
2710    .            addis   11,2,Lfoo@toc@ha        # is slightly optimized, but
2711    .            addi    11,11,Lfoo@toc@l        # this is the general idea
2712    .            ld      12,0(11)
2713    .            ld      2,8(11)
2714    .            mtctr   12
2715    .            ld      11,16(11)
2716    .            bctr
2717    .
2718    .            .section .plt
2719    .    Lfoo:   reloc (R_PPC64_JMP_SLOT, foo)
2720
2721    The "reloc ()" notation is supposed to indicate that the linker emits
2722    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
2723    copying.
2724
2725    What are the difficulties here?  Well, firstly, the relocations
2726    examined by the linker in check_relocs are against the function code
2727    sym .foo, while the dynamic relocation in the plt is emitted against
2728    the function descriptor symbol, foo.  Somewhere along the line, we need
2729    to carefully copy dynamic link information from one symbol to the other.
2730    Secondly, the generic part of the elf linker will make .foo a dynamic
2731    symbol as is normal for most other backends.  We need foo dynamic
2732    instead, at least for an application final link.  However, when
2733    creating a shared library containing foo, we need to have both symbols
2734    dynamic so that references to .foo are satisfied during the early
2735    stages of linking.  Otherwise the linker might decide to pull in a
2736    definition from some other object, eg. a static library.
2737
2738    Update: As of August 2004, we support a new convention.  Function
2739    calls may use the function descriptor symbol, ie. "bl foo".  This
2740    behaves exactly as "bl .foo".  */
2741
2742 /* Of those relocs that might be copied as dynamic relocs, this
2743    function selects those that must be copied when linking a shared
2744    library or PIE, even when the symbol is local.  */
2745
2746 static int
2747 must_be_dyn_reloc (struct bfd_link_info *info,
2748                    enum elf_ppc64_reloc_type r_type)
2749 {
2750   switch (r_type)
2751     {
2752     default:
2753       /* Only relative relocs can be resolved when the object load
2754          address isn't fixed.  DTPREL64 is excluded because the
2755          dynamic linker needs to differentiate global dynamic from
2756          local dynamic __tls_index pairs when PPC64_OPT_TLS is set.  */
2757       return 1;
2758
2759     case R_PPC64_REL32:
2760     case R_PPC64_REL64:
2761     case R_PPC64_REL30:
2762     case R_PPC64_TOC16:
2763     case R_PPC64_TOC16_DS:
2764     case R_PPC64_TOC16_LO:
2765     case R_PPC64_TOC16_HI:
2766     case R_PPC64_TOC16_HA:
2767     case R_PPC64_TOC16_LO_DS:
2768       return 0;
2769
2770     case R_PPC64_TPREL16:
2771     case R_PPC64_TPREL16_LO:
2772     case R_PPC64_TPREL16_HI:
2773     case R_PPC64_TPREL16_HA:
2774     case R_PPC64_TPREL16_DS:
2775     case R_PPC64_TPREL16_LO_DS:
2776     case R_PPC64_TPREL16_HIGH:
2777     case R_PPC64_TPREL16_HIGHA:
2778     case R_PPC64_TPREL16_HIGHER:
2779     case R_PPC64_TPREL16_HIGHERA:
2780     case R_PPC64_TPREL16_HIGHEST:
2781     case R_PPC64_TPREL16_HIGHESTA:
2782     case R_PPC64_TPREL64:
2783     case R_PPC64_TPREL34:
2784       /* These relocations are relative but in a shared library the
2785          linker doesn't know the thread pointer base.  */
2786       return bfd_link_dll (info);
2787     }
2788 }
2789
2790 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
2791    copying dynamic variables from a shared lib into an app's .dynbss
2792    section, and instead use a dynamic relocation to point into the
2793    shared lib.  With code that gcc generates it is vital that this be
2794    enabled;  In the PowerPC64 ELFv1 ABI the address of a function is
2795    actually the address of a function descriptor which resides in the
2796    .opd section.  gcc uses the descriptor directly rather than going
2797    via the GOT as some other ABIs do, which means that initialized
2798    function pointers reference the descriptor.  Thus, a function
2799    pointer initialized to the address of a function in a shared
2800    library will either require a .dynbss copy and a copy reloc, or a
2801    dynamic reloc.  Using a .dynbss copy redefines the function
2802    descriptor symbol to point to the copy.  This presents a problem as
2803    a PLT entry for that function is also initialized from the function
2804    descriptor symbol and the copy may not be initialized first.  */
2805 #define ELIMINATE_COPY_RELOCS 1
2806
2807 /* Section name for stubs is the associated section name plus this
2808    string.  */
2809 #define STUB_SUFFIX ".stub"
2810
2811 /* Linker stubs.
2812    ppc_stub_long_branch:
2813    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
2814    destination, but a 24 bit branch in a stub section will reach.
2815    .    b       dest
2816
2817    ppc_stub_plt_branch:
2818    Similar to the above, but a 24 bit branch in the stub section won't
2819    reach its destination.
2820    .    addis   %r12,%r2,xxx@toc@ha
2821    .    ld      %r12,xxx@toc@l(%r12)
2822    .    mtctr   %r12
2823    .    bctr
2824
2825    ppc_stub_plt_call:
2826    Used to call a function in a shared library.  If it so happens that
2827    the plt entry referenced crosses a 64k boundary, then an extra
2828    "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
2829    ppc_stub_plt_call_r2save starts with "std %r2,40(%r1)".
2830    .    addis   %r11,%r2,xxx@toc@ha
2831    .    ld      %r12,xxx+0@toc@l(%r11)
2832    .    mtctr   %r12
2833    .    ld      %r2,xxx+8@toc@l(%r11)
2834    .    ld      %r11,xxx+16@toc@l(%r11)
2835    .    bctr
2836
2837    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
2838    code to adjust the value and save r2 to support multiple toc sections.
2839    A ppc_stub_long_branch with an r2 offset looks like:
2840    .    std     %r2,40(%r1)
2841    .    addis   %r2,%r2,off@ha
2842    .    addi    %r2,%r2,off@l
2843    .    b       dest
2844
2845    A ppc_stub_plt_branch with an r2 offset looks like:
2846    .    std     %r2,40(%r1)
2847    .    addis   %r12,%r2,xxx@toc@ha
2848    .    ld      %r12,xxx@toc@l(%r12)
2849    .    addis   %r2,%r2,off@ha
2850    .    addi    %r2,%r2,off@l
2851    .    mtctr   %r12
2852    .    bctr
2853
2854    All of the above stubs are shown as their ELFv1 variants.  ELFv2
2855    variants exist too, simpler for plt calls since a new toc pointer
2856    and static chain are not loaded by the stub.  In addition, ELFv2
2857    has some more complex stubs to handle calls marked with NOTOC
2858    relocs from functions where r2 is not a valid toc pointer.  These
2859    come in two flavours, the ones shown below, and _both variants that
2860    start with "std %r2,24(%r1)" to save r2 in the unlikely event that
2861    one call is from a function where r2 is used as the toc pointer but
2862    needs a toc adjusting stub for small-model multi-toc, and another
2863    call is from a function where r2 is not valid.
2864    ppc_stub_long_branch_notoc:
2865    .    mflr    %r12
2866    .    bcl     20,31,1f
2867    .  1:
2868    .    mflr    %r11
2869    .    mtlr    %r12
2870    .    addis   %r12,%r11,dest-1b@ha
2871    .    addi    %r12,%r12,dest-1b@l
2872    .    b       dest
2873
2874    ppc_stub_plt_branch_notoc:
2875    .    mflr    %r12
2876    .    bcl     20,31,1f
2877    .  1:
2878    .    mflr    %r11
2879    .    mtlr    %r12
2880    .    lis     %r12,xxx-1b@highest
2881    .    ori     %r12,%r12,xxx-1b@higher
2882    .    sldi    %r12,%r12,32
2883    .    oris    %r12,%r12,xxx-1b@high
2884    .    ori     %r12,%r12,xxx-1b@l
2885    .    add     %r12,%r11,%r12
2886    .    mtctr   %r12
2887    .    bctr
2888
2889    ppc_stub_plt_call_notoc:
2890    .    mflr    %r12
2891    .    bcl     20,31,1f
2892    .  1:
2893    .    mflr    %r11
2894    .    mtlr    %r12
2895    .    lis     %r12,xxx-1b@highest
2896    .    ori     %r12,%r12,xxx-1b@higher
2897    .    sldi    %r12,%r12,32
2898    .    oris    %r12,%r12,xxx-1b@high
2899    .    ori     %r12,%r12,xxx-1b@l
2900    .    ldx     %r12,%r11,%r12
2901    .    mtctr   %r12
2902    .    bctr
2903
2904    There are also ELFv1 powerxx variants of these stubs.
2905    ppc_stub_long_branch_notoc:
2906    .    pla     %r12,dest@pcrel
2907    .    b       dest
2908    ppc_stub_plt_branch_notoc:
2909    .    lis     %r11,(dest-1f)@highesta34
2910    .    ori     %r11,%r11,(dest-1f)@highera34
2911    .    sldi    %r11,%r11,34
2912    . 1: pla     %r12,dest@pcrel
2913    .    add     %r12,%r11,%r12
2914    .    mtctr   %r12
2915    .    bctr
2916    ppc_stub_plt_call_notoc:
2917    .    lis     %r11,(xxx-1f)@highesta34
2918    .    ori     %r11,%r11,(xxx-1f)@highera34
2919    .    sldi    %r11,%r11,34
2920    . 1: pla     %r12,xxx@pcrel
2921    .    ldx     %r12,%r11,%r12
2922    .    mtctr   %r12
2923    .    bctr
2924
2925    In cases where the high instructions would add zero, they are
2926    omitted and following instructions modified in some cases.
2927    For example, a powerxx ppc_stub_plt_call_notoc might simplify down
2928    to
2929    .    pld     %r12,xxx@pcrel
2930    .    mtctr   %r12
2931    .    bctr
2932
2933    For a given stub group (a set of sections all using the same toc
2934    pointer value) there will be just one stub type used for any
2935    particular function symbol.  For example, if printf is called from
2936    code with the tocsave optimization (ie. r2 saved in function
2937    prologue) and therefore calls use a ppc_stub_plt_call linkage stub,
2938    and from other code without the tocsave optimization requiring a
2939    ppc_stub_plt_call_r2save linkage stub, a single stub of the latter
2940    type will be created.  Calls with the tocsave optimization will
2941    enter this stub after the instruction saving r2.  A similar
2942    situation exists when calls are marked with R_PPC64_REL24_NOTOC
2943    relocations.  These require a ppc_stub_plt_call_notoc linkage stub
2944    to call an external function like printf.  If other calls to printf
2945    require a ppc_stub_plt_call linkage stub then a single
2946    ppc_stub_plt_call_notoc linkage stub will be used for both types of
2947    call.  If other calls to printf require a ppc_stub_plt_call_r2save
2948    linkage stub then a single ppc_stub_plt_call_both linkage stub will
2949    be created and calls not requiring r2 to be saved will enter the
2950    stub after the r2 save instruction.  There is an analogous
2951    hierarchy of long branch and plt branch stubs for local call
2952    linkage.  */
2953
2954 enum ppc_stub_type
2955 {
2956   ppc_stub_none,
2957   ppc_stub_long_branch,
2958   ppc_stub_long_branch_r2off,
2959   ppc_stub_long_branch_notoc,
2960   ppc_stub_long_branch_both, /* r2off and notoc variants both needed.  */
2961   ppc_stub_plt_branch,
2962   ppc_stub_plt_branch_r2off,
2963   ppc_stub_plt_branch_notoc,
2964   ppc_stub_plt_branch_both,
2965   ppc_stub_plt_call,
2966   ppc_stub_plt_call_r2save,
2967   ppc_stub_plt_call_notoc,
2968   ppc_stub_plt_call_both,
2969   ppc_stub_global_entry,
2970   ppc_stub_save_res
2971 };
2972
2973 /* Information on stub grouping.  */
2974 struct map_stub
2975 {
2976   /* The stub section.  */
2977   asection *stub_sec;
2978   /* This is the section to which stubs in the group will be attached.  */
2979   asection *link_sec;
2980   /* Next group.  */
2981   struct map_stub *next;
2982   /* Whether to emit a copy of register save/restore functions in this
2983      group.  */
2984   int needs_save_res;
2985   /* Current offset within stubs after the insn restoring lr in a
2986      _notoc or _both stub using bcl for pc-relative addressing, or
2987      after the insn restoring lr in a __tls_get_addr_opt plt stub.  */
2988   unsigned int lr_restore;
2989   /* Accumulated size of EH info emitted to describe return address
2990      if stubs modify lr.  Does not include 17 byte FDE header.  */
2991   unsigned int eh_size;
2992   /* Offset in glink_eh_frame to the start of EH info for this group.  */
2993   unsigned int eh_base;
2994 };
2995
2996 struct ppc_stub_hash_entry
2997 {
2998   /* Base hash table entry structure.  */
2999   struct bfd_hash_entry root;
3000
3001   enum ppc_stub_type stub_type;
3002
3003   /* Group information.  */
3004   struct map_stub *group;
3005
3006   /* Offset within stub_sec of the beginning of this stub.  */
3007   bfd_vma stub_offset;
3008
3009   /* Given the symbol's value and its section we can determine its final
3010      value when building the stubs (so the stub knows where to jump.  */
3011   bfd_vma target_value;
3012   asection *target_section;
3013
3014   /* The symbol table entry, if any, that this was derived from.  */
3015   struct ppc_link_hash_entry *h;
3016   struct plt_entry *plt_ent;
3017
3018   /* Symbol type.  */
3019   unsigned char symtype;
3020
3021   /* Symbol st_other.  */
3022   unsigned char other;
3023 };
3024
3025 struct ppc_branch_hash_entry
3026 {
3027   /* Base hash table entry structure.  */
3028   struct bfd_hash_entry root;
3029
3030   /* Offset within branch lookup table.  */
3031   unsigned int offset;
3032
3033   /* Generation marker.  */
3034   unsigned int iter;
3035 };
3036
3037 /* Used to track dynamic relocations for local symbols.  */
3038 struct ppc_dyn_relocs
3039 {
3040   struct ppc_dyn_relocs *next;
3041
3042   /* The input section of the reloc.  */
3043   asection *sec;
3044
3045   /* Total number of relocs copied for the input section.  */
3046   unsigned int count : 31;
3047
3048   /* Whether this entry is for STT_GNU_IFUNC symbols.  */
3049   unsigned int ifunc : 1;
3050 };
3051
3052 struct ppc_link_hash_entry
3053 {
3054   struct elf_link_hash_entry elf;
3055
3056   union
3057   {
3058     /* A pointer to the most recently used stub hash entry against this
3059        symbol.  */
3060     struct ppc_stub_hash_entry *stub_cache;
3061
3062     /* A pointer to the next symbol starting with a '.'  */
3063     struct ppc_link_hash_entry *next_dot_sym;
3064   } u;
3065
3066   /* Track dynamic relocs copied for this symbol.  */
3067   struct elf_dyn_relocs *dyn_relocs;
3068
3069   /* Link between function code and descriptor symbols.  */
3070   struct ppc_link_hash_entry *oh;
3071
3072   /* Flag function code and descriptor symbols.  */
3073   unsigned int is_func:1;
3074   unsigned int is_func_descriptor:1;
3075   unsigned int fake:1;
3076
3077   /* Whether global opd/toc sym has been adjusted or not.
3078      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3079      should be set for all globals defined in any opd/toc section.  */
3080   unsigned int adjust_done:1;
3081
3082   /* Set if this is an out-of-line register save/restore function,
3083      with non-standard calling convention.  */
3084   unsigned int save_res:1;
3085
3086   /* Set if a duplicate symbol with non-zero localentry is detected,
3087      even when the duplicate symbol does not provide a definition.  */
3088   unsigned int non_zero_localentry:1;
3089
3090   /* Contexts in which symbol is used in the GOT (or TOC).
3091      Bits are or'd into the mask as the corresponding relocs are
3092      encountered during check_relocs, with TLS_TLS being set when any
3093      of the other TLS bits are set.  tls_optimize clears bits when
3094      optimizing to indicate the corresponding GOT entry type is not
3095      needed.  If set, TLS_TLS is never cleared.  tls_optimize may also
3096      set TLS_GDIE when a GD reloc turns into an IE one.
3097      These flags are also kept for local symbols.  */
3098 #define TLS_TLS          1      /* Any TLS reloc.  */
3099 #define TLS_GD           2      /* GD reloc. */
3100 #define TLS_LD           4      /* LD reloc. */
3101 #define TLS_TPREL        8      /* TPREL reloc, => IE. */
3102 #define TLS_DTPREL      16      /* DTPREL reloc, => LD. */
3103 #define TLS_MARK        32      /* __tls_get_addr call marked. */
3104 #define TLS_GDIE        64      /* GOT TPREL reloc resulting from GD->IE. */
3105 #define TLS_EXPLICIT   256      /* TOC section TLS reloc, not stored. */
3106   unsigned char tls_mask;
3107
3108   /* The above field is also used to mark function symbols.  In which
3109      case TLS_TLS will be 0.  */
3110 #define PLT_IFUNC        2      /* STT_GNU_IFUNC.  */
3111 #define PLT_KEEP         4      /* inline plt call requires plt entry.  */
3112 #define NON_GOT        256      /* local symbol plt, not stored.  */
3113 };
3114
3115 static inline struct ppc_link_hash_entry *
3116 ppc_elf_hash_entry (struct elf_link_hash_entry *ent)
3117 {
3118   return (struct ppc_link_hash_entry *) ent;
3119 }
3120
3121 /* ppc64 ELF linker hash table.  */
3122
3123 struct ppc_link_hash_table
3124 {
3125   struct elf_link_hash_table elf;
3126
3127   /* The stub hash table.  */
3128   struct bfd_hash_table stub_hash_table;
3129
3130   /* Another hash table for plt_branch stubs.  */
3131   struct bfd_hash_table branch_hash_table;
3132
3133   /* Hash table for function prologue tocsave.  */
3134   htab_t tocsave_htab;
3135
3136   /* Various options and other info passed from the linker.  */
3137   struct ppc64_elf_params *params;
3138
3139   /* The size of sec_info below.  */
3140   unsigned int sec_info_arr_size;
3141
3142   /* Per-section array of extra section info.  Done this way rather
3143      than as part of ppc64_elf_section_data so we have the info for
3144      non-ppc64 sections.  */
3145   struct
3146   {
3147     /* Along with elf_gp, specifies the TOC pointer used by this section.  */
3148     bfd_vma toc_off;
3149
3150     union
3151     {
3152       /* The section group that this section belongs to.  */
3153       struct map_stub *group;
3154       /* A temp section list pointer.  */
3155       asection *list;
3156     } u;
3157   } *sec_info;
3158
3159   /* Linked list of groups.  */
3160   struct map_stub *group;
3161
3162   /* Temp used when calculating TOC pointers.  */
3163   bfd_vma toc_curr;
3164   bfd *toc_bfd;
3165   asection *toc_first_sec;
3166
3167   /* Used when adding symbols.  */
3168   struct ppc_link_hash_entry *dot_syms;
3169
3170   /* Shortcuts to get to dynamic linker sections.  */
3171   asection *glink;
3172   asection *global_entry;
3173   asection *sfpr;
3174   asection *pltlocal;
3175   asection *relpltlocal;
3176   asection *brlt;
3177   asection *relbrlt;
3178   asection *glink_eh_frame;
3179
3180   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3181   struct ppc_link_hash_entry *tls_get_addr;
3182   struct ppc_link_hash_entry *tls_get_addr_fd;
3183   struct ppc_link_hash_entry *tga_desc;
3184   struct ppc_link_hash_entry *tga_desc_fd;
3185   struct map_stub *tga_group;
3186
3187   /* The size of reliplt used by got entry relocs.  */
3188   bfd_size_type got_reli_size;
3189
3190   /* Statistics.  */
3191   unsigned long stub_count[ppc_stub_global_entry];
3192
3193   /* Number of stubs against global syms.  */
3194   unsigned long stub_globals;
3195
3196   /* Set if we're linking code with function descriptors.  */
3197   unsigned int opd_abi:1;
3198
3199   /* Support for multiple toc sections.  */
3200   unsigned int do_multi_toc:1;
3201   unsigned int multi_toc_needed:1;
3202   unsigned int second_toc_pass:1;
3203   unsigned int do_toc_opt:1;
3204
3205   /* Set if tls optimization is enabled.  */
3206   unsigned int do_tls_opt:1;
3207
3208   /* Set if inline plt calls should be converted to direct calls.  */
3209   unsigned int can_convert_all_inline_plt:1;
3210
3211   /* Set on error.  */
3212   unsigned int stub_error:1;
3213
3214   /* Whether func_desc_adjust needs to be run over symbols.  */
3215   unsigned int need_func_desc_adj:1;
3216
3217   /* Whether there exist local gnu indirect function resolvers,
3218      referenced by dynamic relocations.  */
3219   unsigned int local_ifunc_resolver:1;
3220   unsigned int maybe_local_ifunc_resolver:1;
3221
3222   /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
3223   unsigned int has_plt_localentry0:1;
3224
3225   /* Whether calls are made via the PLT from NOTOC functions.  */
3226   unsigned int notoc_plt:1;
3227
3228   /* Whether to use powerxx instructions in linkage stubs.  */
3229   unsigned int powerxx_stubs:1;
3230
3231   /* Incremented every time we size stubs.  */
3232   unsigned int stub_iteration;
3233
3234   /* Small local sym cache.  */
3235   struct sym_cache sym_cache;
3236 };
3237
3238 /* Rename some of the generic section flags to better document how they
3239    are used here.  */
3240
3241 /* Nonzero if this section has TLS related relocations.  */
3242 #define has_tls_reloc sec_flg0
3243
3244 /* Nonzero if this section has a call to __tls_get_addr lacking marker
3245    relocations.  */
3246 #define nomark_tls_get_addr sec_flg1
3247
3248 /* Nonzero if this section has any toc or got relocs.  */
3249 #define has_toc_reloc sec_flg2
3250
3251 /* Nonzero if this section has a call to another section that uses
3252    the toc or got.  */
3253 #define makes_toc_func_call sec_flg3
3254
3255 /* Recursion protection when determining above flag.  */
3256 #define call_check_in_progress sec_flg4
3257 #define call_check_done sec_flg5
3258
3259 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3260
3261 #define ppc_hash_table(p) \
3262   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3263   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3264
3265 #define ppc_stub_hash_lookup(table, string, create, copy) \
3266   ((struct ppc_stub_hash_entry *) \
3267    bfd_hash_lookup ((table), (string), (create), (copy)))
3268
3269 #define ppc_branch_hash_lookup(table, string, create, copy) \
3270   ((struct ppc_branch_hash_entry *) \
3271    bfd_hash_lookup ((table), (string), (create), (copy)))
3272
3273 /* Create an entry in the stub hash table.  */
3274
3275 static struct bfd_hash_entry *
3276 stub_hash_newfunc (struct bfd_hash_entry *entry,
3277                    struct bfd_hash_table *table,
3278                    const char *string)
3279 {
3280   /* Allocate the structure if it has not already been allocated by a
3281      subclass.  */
3282   if (entry == NULL)
3283     {
3284       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3285       if (entry == NULL)
3286         return entry;
3287     }
3288
3289   /* Call the allocation method of the superclass.  */
3290   entry = bfd_hash_newfunc (entry, table, string);
3291   if (entry != NULL)
3292     {
3293       struct ppc_stub_hash_entry *eh;
3294
3295       /* Initialize the local fields.  */
3296       eh = (struct ppc_stub_hash_entry *) entry;
3297       eh->stub_type = ppc_stub_none;
3298       eh->group = NULL;
3299       eh->stub_offset = 0;
3300       eh->target_value = 0;
3301       eh->target_section = NULL;
3302       eh->h = NULL;
3303       eh->plt_ent = NULL;
3304       eh->other = 0;
3305     }
3306
3307   return entry;
3308 }
3309
3310 /* Create an entry in the branch hash table.  */
3311
3312 static struct bfd_hash_entry *
3313 branch_hash_newfunc (struct bfd_hash_entry *entry,
3314                      struct bfd_hash_table *table,
3315                      const char *string)
3316 {
3317   /* Allocate the structure if it has not already been allocated by a
3318      subclass.  */
3319   if (entry == NULL)
3320     {
3321       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3322       if (entry == NULL)
3323         return entry;
3324     }
3325
3326   /* Call the allocation method of the superclass.  */
3327   entry = bfd_hash_newfunc (entry, table, string);
3328   if (entry != NULL)
3329     {
3330       struct ppc_branch_hash_entry *eh;
3331
3332       /* Initialize the local fields.  */
3333       eh = (struct ppc_branch_hash_entry *) entry;
3334       eh->offset = 0;
3335       eh->iter = 0;
3336     }
3337
3338   return entry;
3339 }
3340
3341 /* Create an entry in a ppc64 ELF linker hash table.  */
3342
3343 static struct bfd_hash_entry *
3344 link_hash_newfunc (struct bfd_hash_entry *entry,
3345                    struct bfd_hash_table *table,
3346                    const char *string)
3347 {
3348   /* Allocate the structure if it has not already been allocated by a
3349      subclass.  */
3350   if (entry == NULL)
3351     {
3352       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3353       if (entry == NULL)
3354         return entry;
3355     }
3356
3357   /* Call the allocation method of the superclass.  */
3358   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3359   if (entry != NULL)
3360     {
3361       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3362
3363       memset (&eh->u.stub_cache, 0,
3364               (sizeof (struct ppc_link_hash_entry)
3365                - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3366
3367       /* When making function calls, old ABI code references function entry
3368          points (dot symbols), while new ABI code references the function
3369          descriptor symbol.  We need to make any combination of reference and
3370          definition work together, without breaking archive linking.
3371
3372          For a defined function "foo" and an undefined call to "bar":
3373          An old object defines "foo" and ".foo", references ".bar" (possibly
3374          "bar" too).
3375          A new object defines "foo" and references "bar".
3376
3377          A new object thus has no problem with its undefined symbols being
3378          satisfied by definitions in an old object.  On the other hand, the
3379          old object won't have ".bar" satisfied by a new object.
3380
3381          Keep a list of newly added dot-symbols.  */
3382
3383       if (string[0] == '.')
3384         {
3385           struct ppc_link_hash_table *htab;
3386
3387           htab = (struct ppc_link_hash_table *) table;
3388           eh->u.next_dot_sym = htab->dot_syms;
3389           htab->dot_syms = eh;
3390         }
3391     }
3392
3393   return entry;
3394 }
3395
3396 struct tocsave_entry
3397 {
3398   asection *sec;
3399   bfd_vma offset;
3400 };
3401
3402 static hashval_t
3403 tocsave_htab_hash (const void *p)
3404 {
3405   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3406   return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
3407 }
3408
3409 static int
3410 tocsave_htab_eq (const void *p1, const void *p2)
3411 {
3412   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3413   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3414   return e1->sec == e2->sec && e1->offset == e2->offset;
3415 }
3416
3417 /* Destroy a ppc64 ELF linker hash table.  */
3418
3419 static void
3420 ppc64_elf_link_hash_table_free (bfd *obfd)
3421 {
3422   struct ppc_link_hash_table *htab;
3423
3424   htab = (struct ppc_link_hash_table *) obfd->link.hash;
3425   if (htab->tocsave_htab)
3426     htab_delete (htab->tocsave_htab);
3427   bfd_hash_table_free (&htab->branch_hash_table);
3428   bfd_hash_table_free (&htab->stub_hash_table);
3429   _bfd_elf_link_hash_table_free (obfd);
3430 }
3431
3432 /* Create a ppc64 ELF linker hash table.  */
3433
3434 static struct bfd_link_hash_table *
3435 ppc64_elf_link_hash_table_create (bfd *abfd)
3436 {
3437   struct ppc_link_hash_table *htab;
3438   size_t amt = sizeof (struct ppc_link_hash_table);
3439
3440   htab = bfd_zmalloc (amt);
3441   if (htab == NULL)
3442     return NULL;
3443
3444   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3445                                       sizeof (struct ppc_link_hash_entry),
3446                                       PPC64_ELF_DATA))
3447     {
3448       free (htab);
3449       return NULL;
3450     }
3451
3452   /* Init the stub hash table too.  */
3453   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3454                             sizeof (struct ppc_stub_hash_entry)))
3455     {
3456       _bfd_elf_link_hash_table_free (abfd);
3457       return NULL;
3458     }
3459
3460   /* And the branch hash table.  */
3461   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3462                             sizeof (struct ppc_branch_hash_entry)))
3463     {
3464       bfd_hash_table_free (&htab->stub_hash_table);
3465       _bfd_elf_link_hash_table_free (abfd);
3466       return NULL;
3467     }
3468
3469   htab->tocsave_htab = htab_try_create (1024,
3470                                         tocsave_htab_hash,
3471                                         tocsave_htab_eq,
3472                                         NULL);
3473   if (htab->tocsave_htab == NULL)
3474     {
3475       ppc64_elf_link_hash_table_free (abfd);
3476       return NULL;
3477     }
3478   htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
3479
3480   /* Initializing two fields of the union is just cosmetic.  We really
3481      only care about glist, but when compiled on a 32-bit host the
3482      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3483      debugger inspection of these fields look nicer.  */
3484   htab->elf.init_got_refcount.refcount = 0;
3485   htab->elf.init_got_refcount.glist = NULL;
3486   htab->elf.init_plt_refcount.refcount = 0;
3487   htab->elf.init_plt_refcount.glist = NULL;
3488   htab->elf.init_got_offset.offset = 0;
3489   htab->elf.init_got_offset.glist = NULL;
3490   htab->elf.init_plt_offset.offset = 0;
3491   htab->elf.init_plt_offset.glist = NULL;
3492
3493   return &htab->elf.root;
3494 }
3495
3496 /* Create sections for linker generated code.  */
3497
3498 static bfd_boolean
3499 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3500 {
3501   struct ppc_link_hash_table *htab;
3502   flagword flags;
3503
3504   htab = ppc_hash_table (info);
3505
3506   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3507            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3508   if (htab->params->save_restore_funcs)
3509     {
3510       /* Create .sfpr for code to save and restore fp regs.  */
3511       htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3512                                                        flags);
3513       if (htab->sfpr == NULL
3514           || !bfd_set_section_alignment (htab->sfpr, 2))
3515         return FALSE;
3516     }
3517
3518   if (bfd_link_relocatable (info))
3519     return TRUE;
3520
3521   /* Create .glink for lazy dynamic linking support.  */
3522   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3523                                                     flags);
3524   if (htab->glink == NULL
3525       || !bfd_set_section_alignment (htab->glink, 3))
3526     return FALSE;
3527
3528   /* The part of .glink used by global entry stubs, separate so that
3529      it can be aligned appropriately without affecting htab->glink.  */
3530   htab->global_entry = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3531                                                            flags);
3532   if (htab->global_entry == NULL
3533       || !bfd_set_section_alignment (htab->global_entry, 2))
3534     return FALSE;
3535
3536   if (!info->no_ld_generated_unwind_info)
3537     {
3538       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
3539                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3540       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
3541                                                                  ".eh_frame",
3542                                                                  flags);
3543       if (htab->glink_eh_frame == NULL
3544           || !bfd_set_section_alignment (htab->glink_eh_frame, 2))
3545         return FALSE;
3546     }
3547
3548   flags = SEC_ALLOC | SEC_LINKER_CREATED;
3549   htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
3550   if (htab->elf.iplt == NULL
3551       || !bfd_set_section_alignment (htab->elf.iplt, 3))
3552     return FALSE;
3553
3554   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3555            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3556   htab->elf.irelplt
3557     = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
3558   if (htab->elf.irelplt == NULL
3559       || !bfd_set_section_alignment (htab->elf.irelplt, 3))
3560     return FALSE;
3561
3562   /* Create branch lookup table for plt_branch stubs.  */
3563   flags = (SEC_ALLOC | SEC_LOAD
3564            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3565   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3566                                                    flags);
3567   if (htab->brlt == NULL
3568       || !bfd_set_section_alignment (htab->brlt, 3))
3569     return FALSE;
3570
3571   /* Local plt entries, put in .branch_lt but a separate section for
3572      convenience.  */
3573   htab->pltlocal = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3574                                                        flags);
3575   if (htab->pltlocal == NULL
3576       || !bfd_set_section_alignment (htab->pltlocal, 3))
3577     return FALSE;
3578
3579   if (!bfd_link_pic (info))
3580     return TRUE;
3581
3582   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3583            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3584   htab->relbrlt
3585     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3586   if (htab->relbrlt == NULL
3587       || !bfd_set_section_alignment (htab->relbrlt, 3))
3588     return FALSE;
3589
3590   htab->relpltlocal
3591     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3592   if (htab->relpltlocal == NULL
3593       || !bfd_set_section_alignment (htab->relpltlocal, 3))
3594     return FALSE;
3595
3596   return TRUE;
3597 }
3598
3599 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3600
3601 bfd_boolean
3602 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
3603                          struct ppc64_elf_params *params)
3604 {
3605   struct ppc_link_hash_table *htab;
3606
3607   elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
3608
3609 /* Always hook our dynamic sections into the first bfd, which is the
3610    linker created stub bfd.  This ensures that the GOT header is at
3611    the start of the output TOC section.  */
3612   htab = ppc_hash_table (info);
3613   htab->elf.dynobj = params->stub_bfd;
3614   htab->params = params;
3615
3616   return create_linkage_sections (htab->elf.dynobj, info);
3617 }
3618
3619 /* Build a name for an entry in the stub hash table.  */
3620
3621 static char *
3622 ppc_stub_name (const asection *input_section,
3623                const asection *sym_sec,
3624                const struct ppc_link_hash_entry *h,
3625                const Elf_Internal_Rela *rel)
3626 {
3627   char *stub_name;
3628   ssize_t len;
3629
3630   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3631      offsets from a sym as a branch target?  In fact, we could
3632      probably assume the addend is always zero.  */
3633   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3634
3635   if (h)
3636     {
3637       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3638       stub_name = bfd_malloc (len);
3639       if (stub_name == NULL)
3640         return stub_name;
3641
3642       len = sprintf (stub_name, "%08x.%s+%x",
3643                      input_section->id & 0xffffffff,
3644                      h->elf.root.root.string,
3645                      (int) rel->r_addend & 0xffffffff);
3646     }
3647   else
3648     {
3649       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3650       stub_name = bfd_malloc (len);
3651       if (stub_name == NULL)
3652         return stub_name;
3653
3654       len = sprintf (stub_name, "%08x.%x:%x+%x",
3655                      input_section->id & 0xffffffff,
3656                      sym_sec->id & 0xffffffff,
3657                      (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3658                      (int) rel->r_addend & 0xffffffff);
3659     }
3660   if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3661     stub_name[len - 2] = 0;
3662   return stub_name;
3663 }
3664
3665 /* Look up an entry in the stub hash.  Stub entries are cached because
3666    creating the stub name takes a bit of time.  */
3667
3668 static struct ppc_stub_hash_entry *
3669 ppc_get_stub_entry (const asection *input_section,
3670                     const asection *sym_sec,
3671                     struct ppc_link_hash_entry *h,
3672                     const Elf_Internal_Rela *rel,
3673                     struct ppc_link_hash_table *htab)
3674 {
3675   struct ppc_stub_hash_entry *stub_entry;
3676   struct map_stub *group;
3677
3678   /* If this input section is part of a group of sections sharing one
3679      stub section, then use the id of the first section in the group.
3680      Stub names need to include a section id, as there may well be
3681      more than one stub used to reach say, printf, and we need to
3682      distinguish between them.  */
3683   group = htab->sec_info[input_section->id].u.group;
3684   if (group == NULL)
3685     return NULL;
3686
3687   if (h != NULL && h->u.stub_cache != NULL
3688       && h->u.stub_cache->h == h
3689       && h->u.stub_cache->group == group)
3690     {
3691       stub_entry = h->u.stub_cache;
3692     }
3693   else
3694     {
3695       char *stub_name;
3696
3697       stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
3698       if (stub_name == NULL)
3699         return NULL;
3700
3701       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3702                                          stub_name, FALSE, FALSE);
3703       if (h != NULL)
3704         h->u.stub_cache = stub_entry;
3705
3706       free (stub_name);
3707     }
3708
3709   return stub_entry;
3710 }
3711
3712 /* Add a new stub entry to the stub hash.  Not all fields of the new
3713    stub entry are initialised.  */
3714
3715 static struct ppc_stub_hash_entry *
3716 ppc_add_stub (const char *stub_name,
3717               asection *section,
3718               struct bfd_link_info *info)
3719 {
3720   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3721   struct map_stub *group;
3722   asection *link_sec;
3723   asection *stub_sec;
3724   struct ppc_stub_hash_entry *stub_entry;
3725
3726   group = htab->sec_info[section->id].u.group;
3727   link_sec = group->link_sec;
3728   stub_sec = group->stub_sec;
3729   if (stub_sec == NULL)
3730     {
3731       size_t namelen;
3732       bfd_size_type len;
3733       char *s_name;
3734
3735       namelen = strlen (link_sec->name);
3736       len = namelen + sizeof (STUB_SUFFIX);
3737       s_name = bfd_alloc (htab->params->stub_bfd, len);
3738       if (s_name == NULL)
3739         return NULL;
3740
3741       memcpy (s_name, link_sec->name, namelen);
3742       memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3743       stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
3744       if (stub_sec == NULL)
3745         return NULL;
3746       group->stub_sec = stub_sec;
3747     }
3748
3749   /* Enter this entry into the linker stub hash table.  */
3750   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3751                                      TRUE, FALSE);
3752   if (stub_entry == NULL)
3753     {
3754       /* xgettext:c-format */
3755       _bfd_error_handler (_("%pB: cannot create stub entry %s"),
3756                           section->owner, stub_name);
3757       return NULL;
3758     }
3759
3760   stub_entry->group = group;
3761   stub_entry->stub_offset = 0;
3762   return stub_entry;
3763 }
3764
3765 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3766    not already done.  */
3767
3768 static bfd_boolean
3769 create_got_section (bfd *abfd, struct bfd_link_info *info)
3770 {
3771   asection *got, *relgot;
3772   flagword flags;
3773   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3774
3775   if (!is_ppc64_elf (abfd))
3776     return FALSE;
3777   if (htab == NULL)
3778     return FALSE;
3779
3780   if (!htab->elf.sgot
3781       && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
3782     return FALSE;
3783
3784   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3785            | SEC_LINKER_CREATED);
3786
3787   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3788   if (!got
3789       || !bfd_set_section_alignment (got, 3))
3790     return FALSE;
3791
3792   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3793                                                flags | SEC_READONLY);
3794   if (!relgot
3795       || !bfd_set_section_alignment (relgot, 3))
3796     return FALSE;
3797
3798   ppc64_elf_tdata (abfd)->got = got;
3799   ppc64_elf_tdata (abfd)->relgot = relgot;
3800   return TRUE;
3801 }
3802
3803 /* Follow indirect and warning symbol links.  */
3804
3805 static inline struct bfd_link_hash_entry *
3806 follow_link (struct bfd_link_hash_entry *h)
3807 {
3808   while (h->type == bfd_link_hash_indirect
3809          || h->type == bfd_link_hash_warning)
3810     h = h->u.i.link;
3811   return h;
3812 }
3813
3814 static inline struct elf_link_hash_entry *
3815 elf_follow_link (struct elf_link_hash_entry *h)
3816 {
3817   return (struct elf_link_hash_entry *) follow_link (&h->root);
3818 }
3819
3820 static inline struct ppc_link_hash_entry *
3821 ppc_follow_link (struct ppc_link_hash_entry *h)
3822 {
3823   return ppc_elf_hash_entry (elf_follow_link (&h->elf));
3824 }
3825
3826 /* Merge PLT info on FROM with that on TO.  */
3827
3828 static void
3829 move_plt_plist (struct ppc_link_hash_entry *from,
3830                 struct ppc_link_hash_entry *to)
3831 {
3832   if (from->elf.plt.plist != NULL)
3833     {
3834       if (to->elf.plt.plist != NULL)
3835         {
3836           struct plt_entry **entp;
3837           struct plt_entry *ent;
3838
3839           for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3840             {
3841               struct plt_entry *dent;
3842
3843               for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3844                 if (dent->addend == ent->addend)
3845                   {
3846                     dent->plt.refcount += ent->plt.refcount;
3847                     *entp = ent->next;
3848                     break;
3849                   }
3850               if (dent == NULL)
3851                 entp = &ent->next;
3852             }
3853           *entp = to->elf.plt.plist;
3854         }
3855
3856       to->elf.plt.plist = from->elf.plt.plist;
3857       from->elf.plt.plist = NULL;
3858     }
3859 }
3860
3861 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
3862
3863 static void
3864 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3865                                 struct elf_link_hash_entry *dir,
3866                                 struct elf_link_hash_entry *ind)
3867 {
3868   struct ppc_link_hash_entry *edir, *eind;
3869
3870   edir = ppc_elf_hash_entry (dir);
3871   eind = ppc_elf_hash_entry (ind);
3872
3873   edir->is_func |= eind->is_func;
3874   edir->is_func_descriptor |= eind->is_func_descriptor;
3875   edir->tls_mask |= eind->tls_mask;
3876   if (eind->oh != NULL)
3877     edir->oh = ppc_follow_link (eind->oh);
3878
3879   if (edir->elf.versioned != versioned_hidden)
3880     edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
3881   edir->elf.ref_regular |= eind->elf.ref_regular;
3882   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
3883   edir->elf.non_got_ref |= eind->elf.non_got_ref;
3884   edir->elf.needs_plt |= eind->elf.needs_plt;
3885   edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
3886
3887   /* If we were called to copy over info for a weak sym, don't copy
3888      dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
3889      in order to simplify readonly_dynrelocs and save a field in the
3890      symbol hash entry, but that means dyn_relocs can't be used in any
3891      tests about a specific symbol, or affect other symbol flags which
3892      are then tested.  */
3893   if (eind->elf.root.type != bfd_link_hash_indirect)
3894     return;
3895
3896   /* Copy over any dynamic relocs we may have on the indirect sym.  */
3897   if (eind->dyn_relocs != NULL)
3898     {
3899       if (edir->dyn_relocs != NULL)
3900         {
3901           struct elf_dyn_relocs **pp;
3902           struct elf_dyn_relocs *p;
3903
3904           /* Add reloc counts against the indirect sym to the direct sym
3905              list.  Merge any entries against the same section.  */
3906           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3907             {
3908               struct elf_dyn_relocs *q;
3909
3910               for (q = edir->dyn_relocs; q != NULL; q = q->next)
3911                 if (q->sec == p->sec)
3912                   {
3913                     q->pc_count += p->pc_count;
3914                     q->count += p->count;
3915                     *pp = p->next;
3916                     break;
3917                   }
3918               if (q == NULL)
3919                 pp = &p->next;
3920             }
3921           *pp = edir->dyn_relocs;
3922         }
3923
3924       edir->dyn_relocs = eind->dyn_relocs;
3925       eind->dyn_relocs = NULL;
3926     }
3927
3928   /* Copy over got entries that we may have already seen to the
3929      symbol which just became indirect.  */
3930   if (eind->elf.got.glist != NULL)
3931     {
3932       if (edir->elf.got.glist != NULL)
3933         {
3934           struct got_entry **entp;
3935           struct got_entry *ent;
3936
3937           for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3938             {
3939               struct got_entry *dent;
3940
3941               for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3942                 if (dent->addend == ent->addend
3943                     && dent->owner == ent->owner
3944                     && dent->tls_type == ent->tls_type)
3945                   {
3946                     dent->got.refcount += ent->got.refcount;
3947                     *entp = ent->next;
3948                     break;
3949                   }
3950               if (dent == NULL)
3951                 entp = &ent->next;
3952             }
3953           *entp = edir->elf.got.glist;
3954         }
3955
3956       edir->elf.got.glist = eind->elf.got.glist;
3957       eind->elf.got.glist = NULL;
3958     }
3959
3960   /* And plt entries.  */
3961   move_plt_plist (eind, edir);
3962
3963   if (eind->elf.dynindx != -1)
3964     {
3965       if (edir->elf.dynindx != -1)
3966         _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
3967                                 edir->elf.dynstr_index);
3968       edir->elf.dynindx = eind->elf.dynindx;
3969       edir->elf.dynstr_index = eind->elf.dynstr_index;
3970       eind->elf.dynindx = -1;
3971       eind->elf.dynstr_index = 0;
3972     }
3973 }
3974
3975 /* Find the function descriptor hash entry from the given function code
3976    hash entry FH.  Link the entries via their OH fields.  */
3977
3978 static struct ppc_link_hash_entry *
3979 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
3980 {
3981   struct ppc_link_hash_entry *fdh = fh->oh;
3982
3983   if (fdh == NULL)
3984     {
3985       const char *fd_name = fh->elf.root.root.string + 1;
3986
3987       fdh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, fd_name,
3988                                                       FALSE, FALSE, FALSE));
3989       if (fdh == NULL)
3990         return fdh;
3991
3992       fdh->is_func_descriptor = 1;
3993       fdh->oh = fh;
3994       fh->is_func = 1;
3995       fh->oh = fdh;
3996     }
3997
3998   fdh = ppc_follow_link (fdh);
3999   fdh->is_func_descriptor = 1;
4000   fdh->oh = fh;
4001   return fdh;
4002 }
4003
4004 /* Make a fake function descriptor sym for the undefined code sym FH.  */
4005
4006 static struct ppc_link_hash_entry *
4007 make_fdh (struct bfd_link_info *info,
4008           struct ppc_link_hash_entry *fh)
4009 {
4010   bfd *abfd = fh->elf.root.u.undef.abfd;
4011   struct bfd_link_hash_entry *bh = NULL;
4012   struct ppc_link_hash_entry *fdh;
4013   flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
4014                     ? BSF_WEAK
4015                     : BSF_GLOBAL);
4016
4017   if (!_bfd_generic_link_add_one_symbol (info, abfd,
4018                                          fh->elf.root.root.string + 1,
4019                                          flags, bfd_und_section_ptr, 0,
4020                                          NULL, FALSE, FALSE, &bh))
4021     return NULL;
4022
4023   fdh = (struct ppc_link_hash_entry *) bh;
4024   fdh->elf.non_elf = 0;
4025   fdh->fake = 1;
4026   fdh->is_func_descriptor = 1;
4027   fdh->oh = fh;
4028   fh->is_func = 1;
4029   fh->oh = fdh;
4030   return fdh;
4031 }
4032
4033 /* Fix function descriptor symbols defined in .opd sections to be
4034    function type.  */
4035
4036 static bfd_boolean
4037 ppc64_elf_add_symbol_hook (bfd *ibfd,
4038                            struct bfd_link_info *info,
4039                            Elf_Internal_Sym *isym,
4040                            const char **name,
4041                            flagword *flags ATTRIBUTE_UNUSED,
4042                            asection **sec,
4043                            bfd_vma *value)
4044 {
4045   if (*sec != NULL
4046       && strcmp ((*sec)->name, ".opd") == 0)
4047     {
4048       asection *code_sec;
4049
4050       if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4051             || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
4052         isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4053
4054       /* If the symbol is a function defined in .opd, and the function
4055          code is in a discarded group, let it appear to be undefined.  */
4056       if (!bfd_link_relocatable (info)
4057           && (*sec)->reloc_count != 0
4058           && opd_entry_value (*sec, *value, &code_sec, NULL,
4059                               FALSE) != (bfd_vma) -1
4060           && discarded_section (code_sec))
4061         {
4062           *sec = bfd_und_section_ptr;
4063           isym->st_shndx = SHN_UNDEF;
4064         }
4065     }
4066   else if (*sec != NULL
4067            && strcmp ((*sec)->name, ".toc") == 0
4068            && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4069     {
4070       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4071       if (htab != NULL)
4072         htab->params->object_in_toc = 1;
4073     }
4074
4075   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4076     {
4077       if (abiversion (ibfd) == 0)
4078         set_abiversion (ibfd, 2);
4079       else if (abiversion (ibfd) == 1)
4080         {
4081           _bfd_error_handler (_("symbol '%s' has invalid st_other"
4082                                 " for ABI version 1"), *name);
4083           bfd_set_error (bfd_error_bad_value);
4084           return FALSE;
4085         }
4086     }
4087
4088   return TRUE;
4089 }
4090
4091 /* Merge non-visibility st_other attributes: local entry point.  */
4092
4093 static void
4094 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
4095                                   const Elf_Internal_Sym *isym,
4096                                   bfd_boolean definition,
4097                                   bfd_boolean dynamic)
4098 {
4099   if (definition && (!dynamic || !h->def_regular))
4100     h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
4101                 | ELF_ST_VISIBILITY (h->other));
4102 }
4103
4104 /* Hook called on merging a symbol.  We use this to clear "fake" since
4105    we now have a real symbol.  */
4106
4107 static bfd_boolean
4108 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
4109                         const Elf_Internal_Sym *isym,
4110                         asection **psec ATTRIBUTE_UNUSED,
4111                         bfd_boolean newdef ATTRIBUTE_UNUSED,
4112                         bfd_boolean olddef ATTRIBUTE_UNUSED,
4113                         bfd *oldbfd ATTRIBUTE_UNUSED,
4114                         const asection *oldsec ATTRIBUTE_UNUSED)
4115 {
4116   ppc_elf_hash_entry (h)->fake = 0;
4117   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4118     ppc_elf_hash_entry (h)->non_zero_localentry = 1;
4119   return TRUE;
4120 }
4121
4122 /* This function makes an old ABI object reference to ".bar" cause the
4123    inclusion of a new ABI object archive that defines "bar".
4124    NAME is a symbol defined in an archive.  Return a symbol in the hash
4125    table that might be satisfied by the archive symbols.  */
4126
4127 static struct elf_link_hash_entry *
4128 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4129                                  struct bfd_link_info *info,
4130                                  const char *name)
4131 {
4132   struct elf_link_hash_entry *h;
4133   char *dot_name;
4134   size_t len;
4135
4136   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4137   if (h != NULL
4138       /* Don't return this sym if it is a fake function descriptor
4139          created by add_symbol_adjust.  */
4140       && !ppc_elf_hash_entry (h)->fake)
4141     return h;
4142
4143   if (name[0] == '.')
4144     return h;
4145
4146   len = strlen (name);
4147   dot_name = bfd_alloc (abfd, len + 2);
4148   if (dot_name == NULL)
4149     return (struct elf_link_hash_entry *) -1;
4150   dot_name[0] = '.';
4151   memcpy (dot_name + 1, name, len + 1);
4152   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4153   bfd_release (abfd, dot_name);
4154   if (h != NULL)
4155     return h;
4156
4157   if (strcmp (name, "__tls_get_addr_opt") == 0)
4158     h = _bfd_elf_archive_symbol_lookup (abfd, info, "__tls_get_addr_desc");
4159   return h;
4160 }
4161
4162 /* This function satisfies all old ABI object references to ".bar" if a
4163    new ABI object defines "bar".  Well, at least, undefined dot symbols
4164    are made weak.  This stops later archive searches from including an
4165    object if we already have a function descriptor definition.  It also
4166    prevents the linker complaining about undefined symbols.
4167    We also check and correct mismatched symbol visibility here.  The
4168    most restrictive visibility of the function descriptor and the
4169    function entry symbol is used.  */
4170
4171 static bfd_boolean
4172 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4173 {
4174   struct ppc_link_hash_table *htab;
4175   struct ppc_link_hash_entry *fdh;
4176
4177   if (eh->elf.root.type == bfd_link_hash_warning)
4178     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4179
4180   if (eh->elf.root.type == bfd_link_hash_indirect)
4181     return TRUE;
4182
4183   if (eh->elf.root.root.string[0] != '.')
4184     abort ();
4185
4186   htab = ppc_hash_table (info);
4187   if (htab == NULL)
4188     return FALSE;
4189
4190   fdh = lookup_fdh (eh, htab);
4191   if (fdh == NULL
4192       && !bfd_link_relocatable (info)
4193       && (eh->elf.root.type == bfd_link_hash_undefined
4194           || eh->elf.root.type == bfd_link_hash_undefweak)
4195       && eh->elf.ref_regular)
4196     {
4197       /* Make an undefined function descriptor sym, in order to
4198          pull in an --as-needed shared lib.  Archives are handled
4199          elsewhere.  */
4200       fdh = make_fdh (info, eh);
4201       if (fdh == NULL)
4202         return FALSE;
4203     }
4204
4205   if (fdh != NULL)
4206     {
4207       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4208       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4209
4210       /* Make both descriptor and entry symbol have the most
4211          constraining visibility of either symbol.  */
4212       if (entry_vis < descr_vis)
4213         fdh->elf.other += entry_vis - descr_vis;
4214       else if (entry_vis > descr_vis)
4215         eh->elf.other += descr_vis - entry_vis;
4216
4217       /* Propagate reference flags from entry symbol to function
4218          descriptor symbol.  */
4219       fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
4220       fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
4221       fdh->elf.ref_regular |= eh->elf.ref_regular;
4222       fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
4223
4224       if (!fdh->elf.forced_local
4225           && fdh->elf.dynindx == -1
4226           && fdh->elf.versioned != versioned_hidden
4227           && (bfd_link_dll (info)
4228               || fdh->elf.def_dynamic
4229               || fdh->elf.ref_dynamic)
4230           && (eh->elf.ref_regular
4231               || eh->elf.def_regular))
4232         {
4233           if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4234             return FALSE;
4235         }
4236     }
4237
4238   return TRUE;
4239 }
4240
4241 /* Set up opd section info and abiversion for IBFD, and process list
4242    of dot-symbols we made in link_hash_newfunc.  */
4243
4244 static bfd_boolean
4245 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
4246 {
4247   struct ppc_link_hash_table *htab;
4248   struct ppc_link_hash_entry **p, *eh;
4249   asection *opd = bfd_get_section_by_name (ibfd, ".opd");
4250
4251   if (opd != NULL && opd->size != 0)
4252     {
4253       BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
4254       ppc64_elf_section_data (opd)->sec_type = sec_opd;
4255
4256       if (abiversion (ibfd) == 0)
4257         set_abiversion (ibfd, 1);
4258       else if (abiversion (ibfd) >= 2)
4259         {
4260           /* xgettext:c-format */
4261           _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
4262                               ibfd, abiversion (ibfd));
4263           bfd_set_error (bfd_error_bad_value);
4264           return FALSE;
4265         }
4266     }
4267
4268   if (is_ppc64_elf (info->output_bfd))
4269     {
4270       /* For input files without an explicit abiversion in e_flags
4271          we should have flagged any with symbol st_other bits set
4272          as ELFv1 and above flagged those with .opd as ELFv2.
4273          Set the output abiversion if not yet set, and for any input
4274          still ambiguous, take its abiversion from the output.
4275          Differences in ABI are reported later.  */
4276       if (abiversion (info->output_bfd) == 0)
4277         set_abiversion (info->output_bfd, abiversion (ibfd));
4278       else if (abiversion (ibfd) == 0)
4279         set_abiversion (ibfd, abiversion (info->output_bfd));
4280     }
4281
4282   htab = ppc_hash_table (info);
4283   if (htab == NULL)
4284     return TRUE;
4285
4286   if (opd != NULL && opd->size != 0
4287       && (ibfd->flags & DYNAMIC) == 0
4288       && (opd->flags & SEC_RELOC) != 0
4289       && opd->reloc_count != 0
4290       && !bfd_is_abs_section (opd->output_section)
4291       && info->gc_sections)
4292     {
4293       /* Garbage collection needs some extra help with .opd sections.
4294          We don't want to necessarily keep everything referenced by
4295          relocs in .opd, as that would keep all functions.  Instead,
4296          if we reference an .opd symbol (a function descriptor), we
4297          want to keep the function code symbol's section.  This is
4298          easy for global symbols, but for local syms we need to keep
4299          information about the associated function section.  */
4300       bfd_size_type amt;
4301       asection **opd_sym_map;
4302       Elf_Internal_Shdr *symtab_hdr;
4303       Elf_Internal_Rela *relocs, *rel_end, *rel;
4304
4305       amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
4306       opd_sym_map = bfd_zalloc (ibfd, amt);
4307       if (opd_sym_map == NULL)
4308         return FALSE;
4309       ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
4310       relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
4311                                           info->keep_memory);
4312       if (relocs == NULL)
4313         return FALSE;
4314       symtab_hdr = &elf_symtab_hdr (ibfd);
4315       rel_end = relocs + opd->reloc_count - 1;
4316       for (rel = relocs; rel < rel_end; rel++)
4317         {
4318           enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
4319           unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
4320
4321           if (r_type == R_PPC64_ADDR64
4322               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
4323               && r_symndx < symtab_hdr->sh_info)
4324             {
4325               Elf_Internal_Sym *isym;
4326               asection *s;
4327
4328               isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
4329               if (isym == NULL)
4330                 {
4331                   if (elf_section_data (opd)->relocs != relocs)
4332                     free (relocs);
4333                   return FALSE;
4334                 }
4335
4336               s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
4337               if (s != NULL && s != opd)
4338                 opd_sym_map[OPD_NDX (rel->r_offset)] = s;
4339             }
4340         }
4341       if (elf_section_data (opd)->relocs != relocs)
4342         free (relocs);
4343     }
4344
4345   p = &htab->dot_syms;
4346   while ((eh = *p) != NULL)
4347     {
4348       *p = NULL;
4349       if (&eh->elf == htab->elf.hgot)
4350         ;
4351       else if (htab->elf.hgot == NULL
4352                && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4353         htab->elf.hgot = &eh->elf;
4354       else if (abiversion (ibfd) <= 1)
4355         {
4356           htab->need_func_desc_adj = 1;
4357           if (!add_symbol_adjust (eh, info))
4358             return FALSE;
4359         }
4360       p = &eh->u.next_dot_sym;
4361     }
4362   return TRUE;
4363 }
4364
4365 /* Undo hash table changes when an --as-needed input file is determined
4366    not to be needed.  */
4367
4368 static bfd_boolean
4369 ppc64_elf_notice_as_needed (bfd *ibfd,
4370                             struct bfd_link_info *info,
4371                             enum notice_asneeded_action act)
4372 {
4373   if (act == notice_not_needed)
4374     {
4375       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4376
4377       if (htab == NULL)
4378         return FALSE;
4379
4380       htab->dot_syms = NULL;
4381     }
4382   return _bfd_elf_notice_as_needed (ibfd, info, act);
4383 }
4384
4385 /* If --just-symbols against a final linked binary, then assume we need
4386    toc adjusting stubs when calling functions defined there.  */
4387
4388 static void
4389 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4390 {
4391   if ((sec->flags & SEC_CODE) != 0
4392       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4393       && is_ppc64_elf (sec->owner))
4394     {
4395       if (abiversion (sec->owner) >= 2
4396           || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4397         sec->has_toc_reloc = 1;
4398     }
4399   _bfd_elf_link_just_syms (sec, info);
4400 }
4401
4402 static struct plt_entry **
4403 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4404                        unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4405 {
4406   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4407   struct plt_entry **local_plt;
4408   unsigned char *local_got_tls_masks;
4409
4410   if (local_got_ents == NULL)
4411     {
4412       bfd_size_type size = symtab_hdr->sh_info;
4413
4414       size *= (sizeof (*local_got_ents)
4415                + sizeof (*local_plt)
4416                + sizeof (*local_got_tls_masks));
4417       local_got_ents = bfd_zalloc (abfd, size);
4418       if (local_got_ents == NULL)
4419         return NULL;
4420       elf_local_got_ents (abfd) = local_got_ents;
4421     }
4422
4423   if ((tls_type & (NON_GOT | TLS_EXPLICIT)) == 0)
4424     {
4425       struct got_entry *ent;
4426
4427       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4428         if (ent->addend == r_addend
4429             && ent->owner == abfd
4430             && ent->tls_type == tls_type)
4431           break;
4432       if (ent == NULL)
4433         {
4434           size_t amt = sizeof (*ent);
4435           ent = bfd_alloc (abfd, amt);
4436           if (ent == NULL)
4437             return FALSE;
4438           ent->next = local_got_ents[r_symndx];
4439           ent->addend = r_addend;
4440           ent->owner = abfd;
4441           ent->tls_type = tls_type;
4442           ent->is_indirect = FALSE;
4443           ent->got.refcount = 0;
4444           local_got_ents[r_symndx] = ent;
4445         }
4446       ent->got.refcount += 1;
4447     }
4448
4449   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4450   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4451   local_got_tls_masks[r_symndx] |= tls_type & 0xff;
4452
4453   return local_plt + r_symndx;
4454 }
4455
4456 static bfd_boolean
4457 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4458 {
4459   struct plt_entry *ent;
4460
4461   for (ent = *plist; ent != NULL; ent = ent->next)
4462     if (ent->addend == addend)
4463       break;
4464   if (ent == NULL)
4465     {
4466       size_t amt = sizeof (*ent);
4467       ent = bfd_alloc (abfd, amt);
4468       if (ent == NULL)
4469         return FALSE;
4470       ent->next = *plist;
4471       ent->addend = addend;
4472       ent->plt.refcount = 0;
4473       *plist = ent;
4474     }
4475   ent->plt.refcount += 1;
4476   return TRUE;
4477 }
4478
4479 static bfd_boolean
4480 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4481 {
4482   return (r_type == R_PPC64_REL24
4483           || r_type == R_PPC64_REL24_NOTOC
4484           || r_type == R_PPC64_REL14
4485           || r_type == R_PPC64_REL14_BRTAKEN
4486           || r_type == R_PPC64_REL14_BRNTAKEN
4487           || r_type == R_PPC64_ADDR24
4488           || r_type == R_PPC64_ADDR14
4489           || r_type == R_PPC64_ADDR14_BRTAKEN
4490           || r_type == R_PPC64_ADDR14_BRNTAKEN
4491           || r_type == R_PPC64_PLTCALL
4492           || r_type == R_PPC64_PLTCALL_NOTOC);
4493 }
4494
4495 /* Relocs on inline plt call sequence insns prior to the call.  */
4496
4497 static bfd_boolean
4498 is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
4499 {
4500   return (r_type == R_PPC64_PLT16_HA
4501           || r_type == R_PPC64_PLT16_HI
4502           || r_type == R_PPC64_PLT16_LO
4503           || r_type == R_PPC64_PLT16_LO_DS
4504           || r_type == R_PPC64_PLT_PCREL34
4505           || r_type == R_PPC64_PLT_PCREL34_NOTOC
4506           || r_type == R_PPC64_PLTSEQ
4507           || r_type == R_PPC64_PLTSEQ_NOTOC);
4508 }
4509
4510 /* Look through the relocs for a section during the first phase, and
4511    calculate needed space in the global offset table, procedure
4512    linkage table, and dynamic reloc sections.  */
4513
4514 static bfd_boolean
4515 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4516                         asection *sec, const Elf_Internal_Rela *relocs)
4517 {
4518   struct ppc_link_hash_table *htab;
4519   Elf_Internal_Shdr *symtab_hdr;
4520   struct elf_link_hash_entry **sym_hashes;
4521   const Elf_Internal_Rela *rel;
4522   const Elf_Internal_Rela *rel_end;
4523   asection *sreloc;
4524   struct elf_link_hash_entry *tga, *dottga;
4525   bfd_boolean is_opd;
4526
4527   if (bfd_link_relocatable (info))
4528     return TRUE;
4529
4530   /* Don't do anything special with non-loaded, non-alloced sections.
4531      In particular, any relocs in such sections should not affect GOT
4532      and PLT reference counting (ie. we don't allow them to create GOT
4533      or PLT entries), there's no possibility or desire to optimize TLS
4534      relocs, and there's not much point in propagating relocs to shared
4535      libs that the dynamic linker won't relocate.  */
4536   if ((sec->flags & SEC_ALLOC) == 0)
4537     return TRUE;
4538
4539   BFD_ASSERT (is_ppc64_elf (abfd));
4540
4541   htab = ppc_hash_table (info);
4542   if (htab == NULL)
4543     return FALSE;
4544
4545   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4546                               FALSE, FALSE, TRUE);
4547   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4548                                  FALSE, FALSE, TRUE);
4549   symtab_hdr = &elf_symtab_hdr (abfd);
4550   sym_hashes = elf_sym_hashes (abfd);
4551   sreloc = NULL;
4552   is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
4553   rel_end = relocs + sec->reloc_count;
4554   for (rel = relocs; rel < rel_end; rel++)
4555     {
4556       unsigned long r_symndx;
4557       struct elf_link_hash_entry *h;
4558       enum elf_ppc64_reloc_type r_type;
4559       int tls_type;
4560       struct _ppc64_elf_section_data *ppc64_sec;
4561       struct plt_entry **ifunc, **plt_list;
4562
4563       r_symndx = ELF64_R_SYM (rel->r_info);
4564       if (r_symndx < symtab_hdr->sh_info)
4565         h = NULL;
4566       else
4567         {
4568           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4569           h = elf_follow_link (h);
4570
4571           if (h == htab->elf.hgot)
4572             sec->has_toc_reloc = 1;
4573         }
4574
4575       r_type = ELF64_R_TYPE (rel->r_info);
4576       switch (r_type)
4577         {
4578         case R_PPC64_D34:
4579         case R_PPC64_D34_LO:
4580         case R_PPC64_D34_HI30:
4581         case R_PPC64_D34_HA30:
4582         case R_PPC64_D28:
4583         case R_PPC64_TPREL34:
4584         case R_PPC64_DTPREL34:
4585         case R_PPC64_PCREL34:
4586         case R_PPC64_GOT_PCREL34:
4587         case R_PPC64_GOT_TLSGD34:
4588         case R_PPC64_GOT_TLSLD34:
4589         case R_PPC64_GOT_TPREL34:
4590         case R_PPC64_GOT_DTPREL34:
4591         case R_PPC64_PLT_PCREL34:
4592         case R_PPC64_PLT_PCREL34_NOTOC:
4593         case R_PPC64_PCREL28:
4594           htab->powerxx_stubs = 1;
4595           break;
4596         default:
4597           break;
4598         }
4599
4600       switch (r_type)
4601         {
4602         case R_PPC64_PLT16_HA:
4603         case R_PPC64_GOT_TLSLD16_HA:
4604         case R_PPC64_GOT_TLSGD16_HA:
4605         case R_PPC64_GOT_TPREL16_HA:
4606         case R_PPC64_GOT_DTPREL16_HA:
4607         case R_PPC64_GOT16_HA:
4608         case R_PPC64_TOC16_HA:
4609         case R_PPC64_PLT16_LO:
4610         case R_PPC64_PLT16_LO_DS:
4611         case R_PPC64_GOT_TLSLD16_LO:
4612         case R_PPC64_GOT_TLSGD16_LO:
4613         case R_PPC64_GOT_TPREL16_LO_DS:
4614         case R_PPC64_GOT_DTPREL16_LO_DS:
4615         case R_PPC64_GOT16_LO:
4616         case R_PPC64_GOT16_LO_DS:
4617         case R_PPC64_TOC16_LO:
4618         case R_PPC64_TOC16_LO_DS:
4619         case R_PPC64_GOT_PCREL34:
4620           ppc64_elf_tdata (abfd)->has_optrel = 1;
4621           ppc64_elf_section_data (sec)->has_optrel = 1;
4622           break;
4623         default:
4624           break;
4625         }
4626
4627       ifunc = NULL;
4628       if (h != NULL)
4629         {
4630           if (h->type == STT_GNU_IFUNC)
4631             {
4632               h->needs_plt = 1;
4633               ifunc = &h->plt.plist;
4634             }
4635         }
4636       else
4637         {
4638           Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4639                                                           abfd, r_symndx);
4640           if (isym == NULL)
4641             return FALSE;
4642
4643           if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4644             {
4645               ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4646                                              rel->r_addend,
4647                                              NON_GOT | PLT_IFUNC);
4648               if (ifunc == NULL)
4649                 return FALSE;
4650             }
4651         }
4652
4653       tls_type = 0;
4654       switch (r_type)
4655         {
4656         case R_PPC64_TLSGD:
4657         case R_PPC64_TLSLD:
4658           /* These special tls relocs tie a call to __tls_get_addr with
4659              its parameter symbol.  */
4660           if (h != NULL)
4661             ppc_elf_hash_entry (h)->tls_mask |= TLS_TLS | TLS_MARK;
4662           else
4663             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4664                                         rel->r_addend,
4665                                         NON_GOT | TLS_TLS | TLS_MARK))
4666               return FALSE;
4667           sec->has_tls_reloc = 1;
4668           break;
4669
4670         case R_PPC64_GOT_TLSLD16:
4671         case R_PPC64_GOT_TLSLD16_LO:
4672         case R_PPC64_GOT_TLSLD16_HI:
4673         case R_PPC64_GOT_TLSLD16_HA:
4674         case R_PPC64_GOT_TLSLD34:
4675           tls_type = TLS_TLS | TLS_LD;
4676           goto dogottls;
4677
4678         case R_PPC64_GOT_TLSGD16:
4679         case R_PPC64_GOT_TLSGD16_LO:
4680         case R_PPC64_GOT_TLSGD16_HI:
4681         case R_PPC64_GOT_TLSGD16_HA:
4682         case R_PPC64_GOT_TLSGD34:
4683           tls_type = TLS_TLS | TLS_GD;
4684           goto dogottls;
4685
4686         case R_PPC64_GOT_TPREL16_DS:
4687         case R_PPC64_GOT_TPREL16_LO_DS:
4688         case R_PPC64_GOT_TPREL16_HI:
4689         case R_PPC64_GOT_TPREL16_HA:
4690         case R_PPC64_GOT_TPREL34:
4691           if (bfd_link_dll (info))
4692             info->flags |= DF_STATIC_TLS;
4693           tls_type = TLS_TLS | TLS_TPREL;
4694           goto dogottls;
4695
4696         case R_PPC64_GOT_DTPREL16_DS:
4697         case R_PPC64_GOT_DTPREL16_LO_DS:
4698         case R_PPC64_GOT_DTPREL16_HI:
4699         case R_PPC64_GOT_DTPREL16_HA:
4700         case R_PPC64_GOT_DTPREL34:
4701           tls_type = TLS_TLS | TLS_DTPREL;
4702         dogottls:
4703           sec->has_tls_reloc = 1;
4704           goto dogot;
4705
4706         case R_PPC64_GOT16:
4707         case R_PPC64_GOT16_LO:
4708         case R_PPC64_GOT16_HI:
4709         case R_PPC64_GOT16_HA:
4710         case R_PPC64_GOT16_DS:
4711         case R_PPC64_GOT16_LO_DS:
4712         case R_PPC64_GOT_PCREL34:
4713         dogot:
4714           /* This symbol requires a global offset table entry.  */
4715           sec->has_toc_reloc = 1;
4716           if (r_type == R_PPC64_GOT_TLSLD16
4717               || r_type == R_PPC64_GOT_TLSGD16
4718               || r_type == R_PPC64_GOT_TPREL16_DS
4719               || r_type == R_PPC64_GOT_DTPREL16_DS
4720               || r_type == R_PPC64_GOT16
4721               || r_type == R_PPC64_GOT16_DS)
4722             {
4723               htab->do_multi_toc = 1;
4724               ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4725             }
4726
4727           if (ppc64_elf_tdata (abfd)->got == NULL
4728               && !create_got_section (abfd, info))
4729             return FALSE;
4730
4731           if (h != NULL)
4732             {
4733               struct ppc_link_hash_entry *eh;
4734               struct got_entry *ent;
4735
4736               eh = ppc_elf_hash_entry (h);
4737               for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4738                 if (ent->addend == rel->r_addend
4739                     && ent->owner == abfd
4740                     && ent->tls_type == tls_type)
4741                   break;
4742               if (ent == NULL)
4743                 {
4744                   size_t amt = sizeof (*ent);
4745                   ent = bfd_alloc (abfd, amt);
4746                   if (ent == NULL)
4747                     return FALSE;
4748                   ent->next = eh->elf.got.glist;
4749                   ent->addend = rel->r_addend;
4750                   ent->owner = abfd;
4751                   ent->tls_type = tls_type;
4752                   ent->is_indirect = FALSE;
4753                   ent->got.refcount = 0;
4754                   eh->elf.got.glist = ent;
4755                 }
4756               ent->got.refcount += 1;
4757               eh->tls_mask |= tls_type;
4758             }
4759           else
4760             /* This is a global offset table entry for a local symbol.  */
4761             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4762                                         rel->r_addend, tls_type))
4763               return FALSE;
4764
4765           /* We may also need a plt entry if the symbol turns out to be
4766              an ifunc.  */
4767           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
4768             {
4769               if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
4770                 return FALSE;
4771             }
4772           break;
4773
4774         case R_PPC64_PLT16_HA:
4775         case R_PPC64_PLT16_HI:
4776         case R_PPC64_PLT16_LO:
4777         case R_PPC64_PLT16_LO_DS:
4778         case R_PPC64_PLT_PCREL34:
4779         case R_PPC64_PLT_PCREL34_NOTOC:
4780         case R_PPC64_PLT32:
4781         case R_PPC64_PLT64:
4782           /* This symbol requires a procedure linkage table entry.  */
4783           plt_list = ifunc;
4784           if (h != NULL)
4785             {
4786               h->needs_plt = 1;
4787               if (h->root.root.string[0] == '.'
4788                   && h->root.root.string[1] != '\0')
4789                 ppc_elf_hash_entry (h)->is_func = 1;
4790               ppc_elf_hash_entry (h)->tls_mask |= PLT_KEEP;
4791               plt_list = &h->plt.plist;
4792             }
4793           if (plt_list == NULL)
4794             plt_list = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4795                                               rel->r_addend,
4796                                               NON_GOT | PLT_KEEP);
4797           if (!update_plt_info (abfd, plt_list, rel->r_addend))
4798             return FALSE;
4799           break;
4800
4801           /* The following relocations don't need to propagate the
4802              relocation if linking a shared object since they are
4803              section relative.  */
4804         case R_PPC64_SECTOFF:
4805         case R_PPC64_SECTOFF_LO:
4806         case R_PPC64_SECTOFF_HI:
4807         case R_PPC64_SECTOFF_HA:
4808         case R_PPC64_SECTOFF_DS:
4809         case R_PPC64_SECTOFF_LO_DS:
4810         case R_PPC64_DTPREL16:
4811         case R_PPC64_DTPREL16_LO:
4812         case R_PPC64_DTPREL16_HI:
4813         case R_PPC64_DTPREL16_HA:
4814         case R_PPC64_DTPREL16_DS:
4815         case R_PPC64_DTPREL16_LO_DS:
4816         case R_PPC64_DTPREL16_HIGH:
4817         case R_PPC64_DTPREL16_HIGHA:
4818         case R_PPC64_DTPREL16_HIGHER:
4819         case R_PPC64_DTPREL16_HIGHERA:
4820         case R_PPC64_DTPREL16_HIGHEST:
4821         case R_PPC64_DTPREL16_HIGHESTA:
4822           break;
4823
4824           /* Nor do these.  */
4825         case R_PPC64_REL16:
4826         case R_PPC64_REL16_LO:
4827         case R_PPC64_REL16_HI:
4828         case R_PPC64_REL16_HA:
4829         case R_PPC64_REL16_HIGH:
4830         case R_PPC64_REL16_HIGHA:
4831         case R_PPC64_REL16_HIGHER:
4832         case R_PPC64_REL16_HIGHERA:
4833         case R_PPC64_REL16_HIGHEST:
4834         case R_PPC64_REL16_HIGHESTA:
4835         case R_PPC64_REL16_HIGHER34:
4836         case R_PPC64_REL16_HIGHERA34:
4837         case R_PPC64_REL16_HIGHEST34:
4838         case R_PPC64_REL16_HIGHESTA34:
4839         case R_PPC64_REL16DX_HA:
4840           break;
4841
4842           /* Not supported as a dynamic relocation.  */
4843         case R_PPC64_ADDR64_LOCAL:
4844           if (bfd_link_pic (info))
4845             {
4846               if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
4847                 ppc_howto_init ();
4848               /* xgettext:c-format */
4849               info->callbacks->einfo (_("%H: %s reloc unsupported "
4850                                         "in shared libraries and PIEs\n"),
4851                                       abfd, sec, rel->r_offset,
4852                                       ppc64_elf_howto_table[r_type]->name);
4853               bfd_set_error (bfd_error_bad_value);
4854               return FALSE;
4855             }
4856           break;
4857
4858         case R_PPC64_TOC16:
4859         case R_PPC64_TOC16_DS:
4860           htab->do_multi_toc = 1;
4861           ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4862           /* Fall through.  */
4863         case R_PPC64_TOC16_LO:
4864         case R_PPC64_TOC16_HI:
4865         case R_PPC64_TOC16_HA:
4866         case R_PPC64_TOC16_LO_DS:
4867           sec->has_toc_reloc = 1;
4868           if (h != NULL && bfd_link_executable (info))
4869             {
4870               /* We may need a copy reloc.  */
4871               h->non_got_ref = 1;
4872               /* Strongly prefer a copy reloc over a dynamic reloc.
4873                  glibc ld.so as of 2019-08 will error out if one of
4874                  these relocations is emitted.  */
4875               h->needs_copy = 1;
4876               goto dodyn;
4877             }
4878           break;
4879
4880           /* Marker reloc.  */
4881         case R_PPC64_ENTRY:
4882           break;
4883
4884           /* This relocation describes the C++ object vtable hierarchy.
4885              Reconstruct it for later use during GC.  */
4886         case R_PPC64_GNU_VTINHERIT:
4887           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4888             return FALSE;
4889           break;
4890
4891           /* This relocation describes which C++ vtable entries are actually
4892              used.  Record for later use during GC.  */
4893         case R_PPC64_GNU_VTENTRY:
4894           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4895             return FALSE;
4896           break;
4897
4898         case R_PPC64_REL14:
4899         case R_PPC64_REL14_BRTAKEN:
4900         case R_PPC64_REL14_BRNTAKEN:
4901           {
4902             asection *dest = NULL;
4903
4904             /* Heuristic: If jumping outside our section, chances are
4905                we are going to need a stub.  */
4906             if (h != NULL)
4907               {
4908                 /* If the sym is weak it may be overridden later, so
4909                    don't assume we know where a weak sym lives.  */
4910                 if (h->root.type == bfd_link_hash_defined)
4911                   dest = h->root.u.def.section;
4912               }
4913             else
4914               {
4915                 Elf_Internal_Sym *isym;
4916
4917                 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4918                                               abfd, r_symndx);
4919                 if (isym == NULL)
4920                   return FALSE;
4921
4922                 dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
4923               }
4924
4925             if (dest != sec)
4926               ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4927           }
4928           goto rel24;
4929
4930         case R_PPC64_PLTCALL:
4931         case R_PPC64_PLTCALL_NOTOC:
4932           ppc64_elf_section_data (sec)->has_pltcall = 1;
4933           /* Fall through.  */
4934
4935         case R_PPC64_REL24:
4936         case R_PPC64_REL24_NOTOC:
4937         rel24:
4938           plt_list = ifunc;
4939           if (h != NULL)
4940             {
4941               h->needs_plt = 1;
4942               if (h->root.root.string[0] == '.'
4943                   && h->root.root.string[1] != '\0')
4944                 ppc_elf_hash_entry (h)->is_func = 1;
4945
4946               if (h == tga || h == dottga)
4947                 {
4948                   sec->has_tls_reloc = 1;
4949                   if (rel != relocs
4950                       && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
4951                           || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
4952                     /* We have a new-style __tls_get_addr call with
4953                        a marker reloc.  */
4954                     ;
4955                   else
4956                     /* Mark this section as having an old-style call.  */
4957                     sec->nomark_tls_get_addr = 1;
4958                 }
4959               plt_list = &h->plt.plist;
4960             }
4961
4962           /* We may need a .plt entry if the function this reloc
4963              refers to is in a shared lib.  */
4964           if (plt_list
4965               && !update_plt_info (abfd, plt_list, rel->r_addend))
4966             return FALSE;
4967           break;
4968
4969         case R_PPC64_ADDR14:
4970         case R_PPC64_ADDR14_BRNTAKEN:
4971         case R_PPC64_ADDR14_BRTAKEN:
4972         case R_PPC64_ADDR24:
4973           goto dodyn;
4974
4975         case R_PPC64_TPREL64:
4976           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
4977           if (bfd_link_dll (info))
4978             info->flags |= DF_STATIC_TLS;
4979           goto dotlstoc;
4980
4981         case R_PPC64_DTPMOD64:
4982           if (rel + 1 < rel_end
4983               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
4984               && rel[1].r_offset == rel->r_offset + 8)
4985             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
4986           else
4987             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
4988           goto dotlstoc;
4989
4990         case R_PPC64_DTPREL64:
4991           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
4992           if (rel != relocs
4993               && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
4994               && rel[-1].r_offset == rel->r_offset - 8)
4995             /* This is the second reloc of a dtpmod, dtprel pair.
4996                Don't mark with TLS_DTPREL.  */
4997             goto dodyn;
4998
4999         dotlstoc:
5000           sec->has_tls_reloc = 1;
5001           if (h != NULL)
5002             ppc_elf_hash_entry (h)->tls_mask |= tls_type & 0xff;
5003           else
5004             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5005                                         rel->r_addend, tls_type))
5006               return FALSE;
5007
5008           ppc64_sec = ppc64_elf_section_data (sec);
5009           if (ppc64_sec->sec_type != sec_toc)
5010             {
5011               bfd_size_type amt;
5012
5013               /* One extra to simplify get_tls_mask.  */
5014               amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5015               ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5016               if (ppc64_sec->u.toc.symndx == NULL)
5017                 return FALSE;
5018               amt = sec->size * sizeof (bfd_vma) / 8;
5019               ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5020               if (ppc64_sec->u.toc.add == NULL)
5021                 return FALSE;
5022               BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5023               ppc64_sec->sec_type = sec_toc;
5024             }
5025           BFD_ASSERT (rel->r_offset % 8 == 0);
5026           ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5027           ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5028
5029           /* Mark the second slot of a GD or LD entry.
5030              -1 to indicate GD and -2 to indicate LD.  */
5031           if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5032             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5033           else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5034             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5035           goto dodyn;
5036
5037         case R_PPC64_TPREL16:
5038         case R_PPC64_TPREL16_LO:
5039         case R_PPC64_TPREL16_HI:
5040         case R_PPC64_TPREL16_HA:
5041         case R_PPC64_TPREL16_DS:
5042         case R_PPC64_TPREL16_LO_DS:
5043         case R_PPC64_TPREL16_HIGH:
5044         case R_PPC64_TPREL16_HIGHA:
5045         case R_PPC64_TPREL16_HIGHER:
5046         case R_PPC64_TPREL16_HIGHERA:
5047         case R_PPC64_TPREL16_HIGHEST:
5048         case R_PPC64_TPREL16_HIGHESTA:
5049         case R_PPC64_TPREL34:
5050           if (bfd_link_dll (info))
5051             info->flags |= DF_STATIC_TLS;
5052           goto dodyn;
5053
5054         case R_PPC64_ADDR64:
5055           if (is_opd
5056               && rel + 1 < rel_end
5057               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5058             {
5059               if (h != NULL)
5060                 ppc_elf_hash_entry (h)->is_func = 1;
5061             }
5062           /* Fall through.  */
5063
5064         case R_PPC64_ADDR16:
5065         case R_PPC64_ADDR16_DS:
5066         case R_PPC64_ADDR16_HA:
5067         case R_PPC64_ADDR16_HI:
5068         case R_PPC64_ADDR16_HIGH:
5069         case R_PPC64_ADDR16_HIGHA:
5070         case R_PPC64_ADDR16_HIGHER:
5071         case R_PPC64_ADDR16_HIGHERA:
5072         case R_PPC64_ADDR16_HIGHEST:
5073         case R_PPC64_ADDR16_HIGHESTA:
5074         case R_PPC64_ADDR16_LO:
5075         case R_PPC64_ADDR16_LO_DS:
5076         case R_PPC64_D34:
5077         case R_PPC64_D34_LO:
5078         case R_PPC64_D34_HI30:
5079         case R_PPC64_D34_HA30:
5080         case R_PPC64_ADDR16_HIGHER34:
5081         case R_PPC64_ADDR16_HIGHERA34:
5082         case R_PPC64_ADDR16_HIGHEST34:
5083         case R_PPC64_ADDR16_HIGHESTA34:
5084         case R_PPC64_D28:
5085           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
5086               && rel->r_addend == 0)
5087             {
5088               /* We may need a .plt entry if this reloc refers to a
5089                  function in a shared lib.  */
5090               if (!update_plt_info (abfd, &h->plt.plist, 0))
5091                 return FALSE;
5092               h->pointer_equality_needed = 1;
5093             }
5094           /* Fall through.  */
5095
5096         case R_PPC64_REL30:
5097         case R_PPC64_REL32:
5098         case R_PPC64_REL64:
5099         case R_PPC64_ADDR32:
5100         case R_PPC64_UADDR16:
5101         case R_PPC64_UADDR32:
5102         case R_PPC64_UADDR64:
5103         case R_PPC64_TOC:
5104           if (h != NULL && bfd_link_executable (info))
5105             /* We may need a copy reloc.  */
5106             h->non_got_ref = 1;
5107
5108           /* Don't propagate .opd relocs.  */
5109           if (NO_OPD_RELOCS && is_opd)
5110             break;
5111
5112           /* If we are creating a shared library, and this is a reloc
5113              against a global symbol, or a non PC relative reloc
5114              against a local symbol, then we need to copy the reloc
5115              into the shared library.  However, if we are linking with
5116              -Bsymbolic, we do not need to copy a reloc against a
5117              global symbol which is defined in an object we are
5118              including in the link (i.e., DEF_REGULAR is set).  At
5119              this point we have not seen all the input files, so it is
5120              possible that DEF_REGULAR is not set now but will be set
5121              later (it is never cleared).  In case of a weak definition,
5122              DEF_REGULAR may be cleared later by a strong definition in
5123              a shared library.  We account for that possibility below by
5124              storing information in the dyn_relocs field of the hash
5125              table entry.  A similar situation occurs when creating
5126              shared libraries and symbol visibility changes render the
5127              symbol local.
5128
5129              If on the other hand, we are creating an executable, we
5130              may need to keep relocations for symbols satisfied by a
5131              dynamic library if we manage to avoid copy relocs for the
5132              symbol.  */
5133         dodyn:
5134           if ((h != NULL
5135                && (h->root.type == bfd_link_hash_defweak
5136                    || !h->def_regular))
5137               || (h != NULL
5138                   && !bfd_link_executable (info)
5139                   && !SYMBOLIC_BIND (info, h))
5140               || (bfd_link_pic (info)
5141                   && must_be_dyn_reloc (info, r_type))
5142               || (!bfd_link_pic (info)
5143                   && ifunc != NULL))
5144             {
5145               /* We must copy these reloc types into the output file.
5146                  Create a reloc section in dynobj and make room for
5147                  this reloc.  */
5148               if (sreloc == NULL)
5149                 {
5150                   sreloc = _bfd_elf_make_dynamic_reloc_section
5151                     (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5152
5153                   if (sreloc == NULL)
5154                     return FALSE;
5155                 }
5156
5157               /* If this is a global symbol, we count the number of
5158                  relocations we need for this symbol.  */
5159               if (h != NULL)
5160                 {
5161                   struct elf_dyn_relocs *p;
5162                   struct elf_dyn_relocs **head;
5163
5164                   head = &ppc_elf_hash_entry (h)->dyn_relocs;
5165                   p = *head;
5166                   if (p == NULL || p->sec != sec)
5167                     {
5168                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5169                       if (p == NULL)
5170                         return FALSE;
5171                       p->next = *head;
5172                       *head = p;
5173                       p->sec = sec;
5174                       p->count = 0;
5175                       p->pc_count = 0;
5176                     }
5177                   p->count += 1;
5178                   if (!must_be_dyn_reloc (info, r_type))
5179                     p->pc_count += 1;
5180                 }
5181               else
5182                 {
5183                   /* Track dynamic relocs needed for local syms too.
5184                      We really need local syms available to do this
5185                      easily.  Oh well.  */
5186                   struct ppc_dyn_relocs *p;
5187                   struct ppc_dyn_relocs **head;
5188                   bfd_boolean is_ifunc;
5189                   asection *s;
5190                   void *vpp;
5191                   Elf_Internal_Sym *isym;
5192
5193                   isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5194                                                 abfd, r_symndx);
5195                   if (isym == NULL)
5196                     return FALSE;
5197
5198                   s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5199                   if (s == NULL)
5200                     s = sec;
5201
5202                   vpp = &elf_section_data (s)->local_dynrel;
5203                   head = (struct ppc_dyn_relocs **) vpp;
5204                   is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5205                   p = *head;
5206                   if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5207                     p = p->next;
5208                   if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5209                     {
5210                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5211                       if (p == NULL)
5212                         return FALSE;
5213                       p->next = *head;
5214                       *head = p;
5215                       p->sec = sec;
5216                       p->ifunc = is_ifunc;
5217                       p->count = 0;
5218                     }
5219                   p->count += 1;
5220                 }
5221             }
5222           break;
5223
5224         default:
5225           break;
5226         }
5227     }
5228
5229   return TRUE;
5230 }
5231
5232 /* Merge backend specific data from an object file to the output
5233    object file when linking.  */
5234
5235 static bfd_boolean
5236 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
5237 {
5238   bfd *obfd = info->output_bfd;
5239   unsigned long iflags, oflags;
5240
5241   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5242     return TRUE;
5243
5244   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5245     return TRUE;
5246
5247   if (!_bfd_generic_verify_endian_match (ibfd, info))
5248     return FALSE;
5249
5250   iflags = elf_elfheader (ibfd)->e_flags;
5251   oflags = elf_elfheader (obfd)->e_flags;
5252
5253   if (iflags & ~EF_PPC64_ABI)
5254     {
5255       _bfd_error_handler
5256         /* xgettext:c-format */
5257         (_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
5258       bfd_set_error (bfd_error_bad_value);
5259       return FALSE;
5260     }
5261   else if (iflags != oflags && iflags != 0)
5262     {
5263       _bfd_error_handler
5264         /* xgettext:c-format */
5265         (_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
5266          ibfd, iflags, oflags);
5267       bfd_set_error (bfd_error_bad_value);
5268       return FALSE;
5269     }
5270
5271   if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
5272     return FALSE;
5273
5274   /* Merge Tag_compatibility attributes and any common GNU ones.  */
5275   return _bfd_elf_merge_object_attributes (ibfd, info);
5276 }
5277
5278 static bfd_boolean
5279 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5280 {
5281   /* Print normal ELF private data.  */
5282   _bfd_elf_print_private_bfd_data (abfd, ptr);
5283
5284   if (elf_elfheader (abfd)->e_flags != 0)
5285     {
5286       FILE *file = ptr;
5287
5288       fprintf (file, _("private flags = 0x%lx:"),
5289                elf_elfheader (abfd)->e_flags);
5290
5291       if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5292         fprintf (file, _(" [abiv%ld]"),
5293                  elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5294       fputc ('\n', file);
5295     }
5296
5297   return TRUE;
5298 }
5299
5300 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5301    of the code entry point, and its section, which must be in the same
5302    object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
5303
5304 static bfd_vma
5305 opd_entry_value (asection *opd_sec,
5306                  bfd_vma offset,
5307                  asection **code_sec,
5308                  bfd_vma *code_off,
5309                  bfd_boolean in_code_sec)
5310 {
5311   bfd *opd_bfd = opd_sec->owner;
5312   Elf_Internal_Rela *relocs;
5313   Elf_Internal_Rela *lo, *hi, *look;
5314   bfd_vma val;
5315
5316   /* No relocs implies we are linking a --just-symbols object, or looking
5317      at a final linked executable with addr2line or somesuch.  */
5318   if (opd_sec->reloc_count == 0)
5319     {
5320       bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5321
5322       if (contents == NULL)
5323         {
5324           if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5325             return (bfd_vma) -1;
5326           ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5327         }
5328
5329       /* PR 17512: file: 64b9dfbb.  */
5330       if (offset + 7 >= opd_sec->size || offset + 7 < offset)
5331         return (bfd_vma) -1;
5332
5333       val = bfd_get_64 (opd_bfd, contents + offset);
5334       if (code_sec != NULL)
5335         {
5336           asection *sec, *likely = NULL;
5337
5338           if (in_code_sec)
5339             {
5340               sec = *code_sec;
5341               if (sec->vma <= val
5342                   && val < sec->vma + sec->size)
5343                 likely = sec;
5344               else
5345                 val = -1;
5346             }
5347           else
5348             for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5349               if (sec->vma <= val
5350                   && (sec->flags & SEC_LOAD) != 0
5351                   && (sec->flags & SEC_ALLOC) != 0)
5352                 likely = sec;
5353           if (likely != NULL)
5354             {
5355               *code_sec = likely;
5356               if (code_off != NULL)
5357                 *code_off = val - likely->vma;
5358             }
5359         }
5360       return val;
5361     }
5362
5363   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5364
5365   relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5366   if (relocs == NULL)
5367     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5368   /* PR 17512: file: df8e1fd6.  */
5369   if (relocs == NULL)
5370     return (bfd_vma) -1;
5371
5372   /* Go find the opd reloc at the sym address.  */
5373   lo = relocs;
5374   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5375   val = (bfd_vma) -1;
5376   while (lo < hi)
5377     {
5378       look = lo + (hi - lo) / 2;
5379       if (look->r_offset < offset)
5380         lo = look + 1;
5381       else if (look->r_offset > offset)
5382         hi = look;
5383       else
5384         {
5385           Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5386
5387           if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5388               && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5389             {
5390               unsigned long symndx = ELF64_R_SYM (look->r_info);
5391               asection *sec = NULL;
5392
5393               if (symndx >= symtab_hdr->sh_info
5394                   && elf_sym_hashes (opd_bfd) != NULL)
5395                 {
5396                   struct elf_link_hash_entry **sym_hashes;
5397                   struct elf_link_hash_entry *rh;
5398
5399                   sym_hashes = elf_sym_hashes (opd_bfd);
5400                   rh = sym_hashes[symndx - symtab_hdr->sh_info];
5401                   if (rh != NULL)
5402                     {
5403                       rh = elf_follow_link (rh);
5404                       if (rh->root.type != bfd_link_hash_defined
5405                           && rh->root.type != bfd_link_hash_defweak)
5406                         break;
5407                       if (rh->root.u.def.section->owner == opd_bfd)
5408                         {
5409                           val = rh->root.u.def.value;
5410                           sec = rh->root.u.def.section;
5411                         }
5412                     }
5413                 }
5414
5415               if (sec == NULL)
5416                 {
5417                   Elf_Internal_Sym *sym;
5418
5419                   if (symndx < symtab_hdr->sh_info)
5420                     {
5421                       sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5422                       if (sym == NULL)
5423                         {
5424                           size_t symcnt = symtab_hdr->sh_info;
5425                           sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5426                                                       symcnt, 0,
5427                                                       NULL, NULL, NULL);
5428                           if (sym == NULL)
5429                             break;
5430                           symtab_hdr->contents = (bfd_byte *) sym;
5431                         }
5432                       sym += symndx;
5433                     }
5434                   else
5435                     {
5436                       sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5437                                                   1, symndx,
5438                                                   NULL, NULL, NULL);
5439                       if (sym == NULL)
5440                         break;
5441                     }
5442                   sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5443                   if (sec == NULL)
5444                     break;
5445                   BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5446                   val = sym->st_value;
5447                 }
5448
5449               val += look->r_addend;
5450               if (code_off != NULL)
5451                 *code_off = val;
5452               if (code_sec != NULL)
5453                 {
5454                   if (in_code_sec && *code_sec != sec)
5455                     return -1;
5456                   else
5457                     *code_sec = sec;
5458                 }
5459               if (sec->output_section != NULL)
5460                 val += sec->output_section->vma + sec->output_offset;
5461             }
5462           break;
5463         }
5464     }
5465
5466   return val;
5467 }
5468
5469 /* If the ELF symbol SYM might be a function in SEC, return the
5470    function size and set *CODE_OFF to the function's entry point,
5471    otherwise return zero.  */
5472
5473 static bfd_size_type
5474 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5475                               bfd_vma *code_off)
5476 {
5477   bfd_size_type size;
5478
5479   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5480                      | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5481     return 0;
5482
5483   size = 0;
5484   if (!(sym->flags & BSF_SYNTHETIC))
5485     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5486
5487   if (strcmp (sym->section->name, ".opd") == 0)
5488     {
5489       struct _opd_sec_data *opd = get_opd_info (sym->section);
5490       bfd_vma symval = sym->value;
5491
5492       if (opd != NULL
5493           && opd->adjust != NULL
5494           && elf_section_data (sym->section)->relocs != NULL)
5495         {
5496           /* opd_entry_value will use cached relocs that have been
5497              adjusted, but with raw symbols.  That means both local
5498              and global symbols need adjusting.  */
5499           long adjust = opd->adjust[OPD_NDX (symval)];
5500           if (adjust == -1)
5501             return 0;
5502           symval += adjust;
5503         }
5504
5505       if (opd_entry_value (sym->section, symval,
5506                            &sec, code_off, TRUE) == (bfd_vma) -1)
5507         return 0;
5508       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5509          symbol.  This size has nothing to do with the code size of the
5510          function, which is what we're supposed to return, but the
5511          code size isn't available without looking up the dot-sym.
5512          However, doing that would be a waste of time particularly
5513          since elf_find_function will look at the dot-sym anyway.
5514          Now, elf_find_function will keep the largest size of any
5515          function sym found at the code address of interest, so return
5516          1 here to avoid it incorrectly caching a larger function size
5517          for a small function.  This does mean we return the wrong
5518          size for a new-ABI function of size 24, but all that does is
5519          disable caching for such functions.  */
5520       if (size == 24)
5521         size = 1;
5522     }
5523   else
5524     {
5525       if (sym->section != sec)
5526         return 0;
5527       *code_off = sym->value;
5528     }
5529   if (size == 0)
5530     size = 1;
5531   return size;
5532 }
5533
5534 /* Return true if symbol is a strong function defined in an ELFv2
5535    object with st_other localentry bits of zero, ie. its local entry
5536    point coincides with its global entry point.  */
5537
5538 static bfd_boolean
5539 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
5540 {
5541   return (h != NULL
5542           && h->type == STT_FUNC
5543           && h->root.type == bfd_link_hash_defined
5544           && (STO_PPC64_LOCAL_MASK & h->other) == 0
5545           && !ppc_elf_hash_entry (h)->non_zero_localentry
5546           && is_ppc64_elf (h->root.u.def.section->owner)
5547           && abiversion (h->root.u.def.section->owner) >= 2);
5548 }
5549
5550 /* Return true if symbol is defined in a regular object file.  */
5551
5552 static bfd_boolean
5553 is_static_defined (struct elf_link_hash_entry *h)
5554 {
5555   return ((h->root.type == bfd_link_hash_defined
5556            || h->root.type == bfd_link_hash_defweak)
5557           && h->root.u.def.section != NULL
5558           && h->root.u.def.section->output_section != NULL);
5559 }
5560
5561 /* If FDH is a function descriptor symbol, return the associated code
5562    entry symbol if it is defined.  Return NULL otherwise.  */
5563
5564 static struct ppc_link_hash_entry *
5565 defined_code_entry (struct ppc_link_hash_entry *fdh)
5566 {
5567   if (fdh->is_func_descriptor)
5568     {
5569       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5570       if (fh->elf.root.type == bfd_link_hash_defined
5571           || fh->elf.root.type == bfd_link_hash_defweak)
5572         return fh;
5573     }
5574   return NULL;
5575 }
5576
5577 /* If FH is a function code entry symbol, return the associated
5578    function descriptor symbol if it is defined.  Return NULL otherwise.  */
5579
5580 static struct ppc_link_hash_entry *
5581 defined_func_desc (struct ppc_link_hash_entry *fh)
5582 {
5583   if (fh->oh != NULL
5584       && fh->oh->is_func_descriptor)
5585     {
5586       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5587       if (fdh->elf.root.type == bfd_link_hash_defined
5588           || fdh->elf.root.type == bfd_link_hash_defweak)
5589         return fdh;
5590     }
5591   return NULL;
5592 }
5593
5594 /* Given H is a symbol that satisfies is_static_defined, return the
5595    value in the output file.  */
5596
5597 static bfd_vma
5598 defined_sym_val (struct elf_link_hash_entry *h)
5599 {
5600   return (h->root.u.def.section->output_section->vma
5601           + h->root.u.def.section->output_offset
5602           + h->root.u.def.value);
5603 }
5604
5605 /* Return true if H matches __tls_get_addr or one of its variants.  */
5606
5607 static bfd_boolean
5608 is_tls_get_addr (struct elf_link_hash_entry *h,
5609                  struct ppc_link_hash_table *htab)
5610 {
5611   return (h == &htab->tls_get_addr_fd->elf || h == &htab->tga_desc_fd->elf
5612           || h == &htab->tls_get_addr->elf || h == &htab->tga_desc->elf);
5613 }
5614
5615 static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
5616
5617 /* Garbage collect sections, after first dealing with dot-symbols.  */
5618
5619 static bfd_boolean
5620 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5621 {
5622   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5623
5624   if (htab != NULL && htab->need_func_desc_adj)
5625     {
5626       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5627       htab->need_func_desc_adj = 0;
5628     }
5629   return bfd_elf_gc_sections (abfd, info);
5630 }
5631
5632 /* Mark all our entry sym sections, both opd and code section.  */
5633
5634 static void
5635 ppc64_elf_gc_keep (struct bfd_link_info *info)
5636 {
5637   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5638   struct bfd_sym_chain *sym;
5639
5640   if (htab == NULL)
5641     return;
5642
5643   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5644     {
5645       struct ppc_link_hash_entry *eh, *fh;
5646       asection *sec;
5647
5648       eh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym->name,
5649                                                      FALSE, FALSE, TRUE));
5650       if (eh == NULL)
5651         continue;
5652       if (eh->elf.root.type != bfd_link_hash_defined
5653           && eh->elf.root.type != bfd_link_hash_defweak)
5654         continue;
5655
5656       fh = defined_code_entry (eh);
5657       if (fh != NULL)
5658         {
5659           sec = fh->elf.root.u.def.section;
5660           sec->flags |= SEC_KEEP;
5661         }
5662       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5663                && opd_entry_value (eh->elf.root.u.def.section,
5664                                    eh->elf.root.u.def.value,
5665                                    &sec, NULL, FALSE) != (bfd_vma) -1)
5666         sec->flags |= SEC_KEEP;
5667
5668       sec = eh->elf.root.u.def.section;
5669       sec->flags |= SEC_KEEP;
5670     }
5671 }
5672
5673 /* Mark sections containing dynamically referenced symbols.  When
5674    building shared libraries, we must assume that any visible symbol is
5675    referenced.  */
5676
5677 static bfd_boolean
5678 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5679 {
5680   struct bfd_link_info *info = (struct bfd_link_info *) inf;
5681   struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
5682   struct ppc_link_hash_entry *fdh;
5683   struct bfd_elf_dynamic_list *d = info->dynamic_list;
5684
5685   /* Dynamic linking info is on the func descriptor sym.  */
5686   fdh = defined_func_desc (eh);
5687   if (fdh != NULL)
5688     eh = fdh;
5689
5690   if ((eh->elf.root.type == bfd_link_hash_defined
5691        || eh->elf.root.type == bfd_link_hash_defweak)
5692       && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
5693           || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
5694               && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5695               && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5696               && (!bfd_link_executable (info)
5697                   || info->gc_keep_exported
5698                   || info->export_dynamic
5699                   || (eh->elf.dynamic
5700                       && d != NULL
5701                       && (*d->match) (&d->head, NULL,
5702                                       eh->elf.root.root.string)))
5703               && (eh->elf.versioned >= versioned
5704                   || !bfd_hide_sym_by_version (info->version_info,
5705                                                eh->elf.root.root.string)))))
5706     {
5707       asection *code_sec;
5708       struct ppc_link_hash_entry *fh;
5709
5710       eh->elf.root.u.def.section->flags |= SEC_KEEP;
5711
5712       /* Function descriptor syms cause the associated
5713          function code sym section to be marked.  */
5714       fh = defined_code_entry (eh);
5715       if (fh != NULL)
5716         {
5717           code_sec = fh->elf.root.u.def.section;
5718           code_sec->flags |= SEC_KEEP;
5719         }
5720       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5721                && opd_entry_value (eh->elf.root.u.def.section,
5722                                    eh->elf.root.u.def.value,
5723                                    &code_sec, NULL, FALSE) != (bfd_vma) -1)
5724         code_sec->flags |= SEC_KEEP;
5725     }
5726
5727   return TRUE;
5728 }
5729
5730 /* Return the section that should be marked against GC for a given
5731    relocation.  */
5732
5733 static asection *
5734 ppc64_elf_gc_mark_hook (asection *sec,
5735                         struct bfd_link_info *info,
5736                         Elf_Internal_Rela *rel,
5737                         struct elf_link_hash_entry *h,
5738                         Elf_Internal_Sym *sym)
5739 {
5740   asection *rsec;
5741
5742   /* Syms return NULL if we're marking .opd, so we avoid marking all
5743      function sections, as all functions are referenced in .opd.  */
5744   rsec = NULL;
5745   if (get_opd_info (sec) != NULL)
5746     return rsec;
5747
5748   if (h != NULL)
5749     {
5750       enum elf_ppc64_reloc_type r_type;
5751       struct ppc_link_hash_entry *eh, *fh, *fdh;
5752
5753       r_type = ELF64_R_TYPE (rel->r_info);
5754       switch (r_type)
5755         {
5756         case R_PPC64_GNU_VTINHERIT:
5757         case R_PPC64_GNU_VTENTRY:
5758           break;
5759
5760         default:
5761           switch (h->root.type)
5762             {
5763             case bfd_link_hash_defined:
5764             case bfd_link_hash_defweak:
5765               eh = ppc_elf_hash_entry (h);
5766               fdh = defined_func_desc (eh);
5767               if (fdh != NULL)
5768                 {
5769                   /* -mcall-aixdesc code references the dot-symbol on
5770                      a call reloc.  Mark the function descriptor too
5771                      against garbage collection.  */
5772                   fdh->elf.mark = 1;
5773                   if (fdh->elf.is_weakalias)
5774                     weakdef (&fdh->elf)->mark = 1;
5775                   eh = fdh;
5776                 }
5777
5778               /* Function descriptor syms cause the associated
5779                  function code sym section to be marked.  */
5780               fh = defined_code_entry (eh);
5781               if (fh != NULL)
5782                 {
5783                   /* They also mark their opd section.  */
5784                   eh->elf.root.u.def.section->gc_mark = 1;
5785
5786                   rsec = fh->elf.root.u.def.section;
5787                 }
5788               else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5789                        && opd_entry_value (eh->elf.root.u.def.section,
5790                                            eh->elf.root.u.def.value,
5791                                            &rsec, NULL, FALSE) != (bfd_vma) -1)
5792                 eh->elf.root.u.def.section->gc_mark = 1;
5793               else
5794                 rsec = h->root.u.def.section;
5795               break;
5796
5797             case bfd_link_hash_common:
5798               rsec = h->root.u.c.p->section;
5799               break;
5800
5801             default:
5802               return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5803             }
5804         }
5805     }
5806   else
5807     {
5808       struct _opd_sec_data *opd;
5809
5810       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5811       opd = get_opd_info (rsec);
5812       if (opd != NULL && opd->func_sec != NULL)
5813         {
5814           rsec->gc_mark = 1;
5815
5816           rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
5817         }
5818     }
5819
5820   return rsec;
5821 }
5822
5823 /* The maximum size of .sfpr.  */
5824 #define SFPR_MAX (218*4)
5825
5826 struct sfpr_def_parms
5827 {
5828   const char name[12];
5829   unsigned char lo, hi;
5830   bfd_byte *(*write_ent) (bfd *, bfd_byte *, int);
5831   bfd_byte *(*write_tail) (bfd *, bfd_byte *, int);
5832 };
5833
5834 /* Auto-generate _save*, _rest* functions in .sfpr.
5835    If STUB_SEC is non-null, define alias symbols in STUB_SEC
5836    instead.  */
5837
5838 static bfd_boolean
5839 sfpr_define (struct bfd_link_info *info,
5840              const struct sfpr_def_parms *parm,
5841              asection *stub_sec)
5842 {
5843   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5844   unsigned int i;
5845   size_t len = strlen (parm->name);
5846   bfd_boolean writing = FALSE;
5847   char sym[16];
5848
5849   if (htab == NULL)
5850     return FALSE;
5851
5852   memcpy (sym, parm->name, len);
5853   sym[len + 2] = 0;
5854
5855   for (i = parm->lo; i <= parm->hi; i++)
5856     {
5857       struct ppc_link_hash_entry *h;
5858
5859       sym[len + 0] = i / 10 + '0';
5860       sym[len + 1] = i % 10 + '0';
5861       h = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym,
5862                                                     writing, TRUE, TRUE));
5863       if (stub_sec != NULL)
5864         {
5865           if (h != NULL
5866               && h->elf.root.type == bfd_link_hash_defined
5867               && h->elf.root.u.def.section == htab->sfpr)
5868             {
5869               struct elf_link_hash_entry *s;
5870               char buf[32];
5871               sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
5872               s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
5873               if (s == NULL)
5874                 return FALSE;
5875               if (s->root.type == bfd_link_hash_new)
5876                 {
5877                   s->root.type = bfd_link_hash_defined;
5878                   s->root.u.def.section = stub_sec;
5879                   s->root.u.def.value = (stub_sec->size - htab->sfpr->size
5880                                          + h->elf.root.u.def.value);
5881                   s->ref_regular = 1;
5882                   s->def_regular = 1;
5883                   s->ref_regular_nonweak = 1;
5884                   s->forced_local = 1;
5885                   s->non_elf = 0;
5886                   s->root.linker_def = 1;
5887                 }
5888             }
5889           continue;
5890         }
5891       if (h != NULL)
5892         {
5893           h->save_res = 1;
5894           if (!h->elf.def_regular)
5895             {
5896               h->elf.root.type = bfd_link_hash_defined;
5897               h->elf.root.u.def.section = htab->sfpr;
5898               h->elf.root.u.def.value = htab->sfpr->size;
5899               h->elf.type = STT_FUNC;
5900               h->elf.def_regular = 1;
5901               h->elf.non_elf = 0;
5902               _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
5903               writing = TRUE;
5904               if (htab->sfpr->contents == NULL)
5905                 {
5906                   htab->sfpr->contents
5907                     = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5908                   if (htab->sfpr->contents == NULL)
5909                     return FALSE;
5910                 }
5911             }
5912         }
5913       if (writing)
5914         {
5915           bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5916           if (i != parm->hi)
5917             p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5918           else
5919             p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5920           htab->sfpr->size = p - htab->sfpr->contents;
5921         }
5922     }
5923
5924   return TRUE;
5925 }
5926
5927 static bfd_byte *
5928 savegpr0 (bfd *abfd, bfd_byte *p, int r)
5929 {
5930   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5931   return p + 4;
5932 }
5933
5934 static bfd_byte *
5935 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5936 {
5937   p = savegpr0 (abfd, p, r);
5938   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5939   p = p + 4;
5940   bfd_put_32 (abfd, BLR, p);
5941   return p + 4;
5942 }
5943
5944 static bfd_byte *
5945 restgpr0 (bfd *abfd, bfd_byte *p, int r)
5946 {
5947   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5948   return p + 4;
5949 }
5950
5951 static bfd_byte *
5952 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5953 {
5954   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5955   p = p + 4;
5956   p = restgpr0 (abfd, p, r);
5957   bfd_put_32 (abfd, MTLR_R0, p);
5958   p = p + 4;
5959   if (r == 29)
5960     {
5961       p = restgpr0 (abfd, p, 30);
5962       p = restgpr0 (abfd, p, 31);
5963     }
5964   bfd_put_32 (abfd, BLR, p);
5965   return p + 4;
5966 }
5967
5968 static bfd_byte *
5969 savegpr1 (bfd *abfd, bfd_byte *p, int r)
5970 {
5971   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5972   return p + 4;
5973 }
5974
5975 static bfd_byte *
5976 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
5977 {
5978   p = savegpr1 (abfd, p, r);
5979   bfd_put_32 (abfd, BLR, p);
5980   return p + 4;
5981 }
5982
5983 static bfd_byte *
5984 restgpr1 (bfd *abfd, bfd_byte *p, int r)
5985 {
5986   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5987   return p + 4;
5988 }
5989
5990 static bfd_byte *
5991 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
5992 {
5993   p = restgpr1 (abfd, p, r);
5994   bfd_put_32 (abfd, BLR, p);
5995   return p + 4;
5996 }
5997
5998 static bfd_byte *
5999 savefpr (bfd *abfd, bfd_byte *p, int r)
6000 {
6001   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6002   return p + 4;
6003 }
6004
6005 static bfd_byte *
6006 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6007 {
6008   p = savefpr (abfd, p, r);
6009   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
6010   p = p + 4;
6011   bfd_put_32 (abfd, BLR, p);
6012   return p + 4;
6013 }
6014
6015 static bfd_byte *
6016 restfpr (bfd *abfd, bfd_byte *p, int r)
6017 {
6018   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6019   return p + 4;
6020 }
6021
6022 static bfd_byte *
6023 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6024 {
6025   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
6026   p = p + 4;
6027   p = restfpr (abfd, p, r);
6028   bfd_put_32 (abfd, MTLR_R0, p);
6029   p = p + 4;
6030   if (r == 29)
6031     {
6032       p = restfpr (abfd, p, 30);
6033       p = restfpr (abfd, p, 31);
6034     }
6035   bfd_put_32 (abfd, BLR, p);
6036   return p + 4;
6037 }
6038
6039 static bfd_byte *
6040 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6041 {
6042   p = savefpr (abfd, p, r);
6043   bfd_put_32 (abfd, BLR, p);
6044   return p + 4;
6045 }
6046
6047 static bfd_byte *
6048 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6049 {
6050   p = restfpr (abfd, p, r);
6051   bfd_put_32 (abfd, BLR, p);
6052   return p + 4;
6053 }
6054
6055 static bfd_byte *
6056 savevr (bfd *abfd, bfd_byte *p, int r)
6057 {
6058   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6059   p = p + 4;
6060   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6061   return p + 4;
6062 }
6063
6064 static bfd_byte *
6065 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6066 {
6067   p = savevr (abfd, p, r);
6068   bfd_put_32 (abfd, BLR, p);
6069   return p + 4;
6070 }
6071
6072 static bfd_byte *
6073 restvr (bfd *abfd, bfd_byte *p, int r)
6074 {
6075   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6076   p = p + 4;
6077   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6078   return p + 4;
6079 }
6080
6081 static bfd_byte *
6082 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6083 {
6084   p = restvr (abfd, p, r);
6085   bfd_put_32 (abfd, BLR, p);
6086   return p + 4;
6087 }
6088
6089 #define STDU_R1_0R1     0xf8210001
6090 #define ADDI_R1_R1      0x38210000
6091
6092 /* Emit prologue of wrapper preserving regs around a call to
6093    __tls_get_addr_opt.  */
6094
6095 static bfd_byte *
6096 tls_get_addr_prologue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
6097 {
6098   unsigned int i;
6099
6100   bfd_put_32 (obfd, MFLR_R0, p);
6101   p += 4;
6102   bfd_put_32 (obfd, STD_R0_0R1 + 16, p);
6103   p += 4;
6104
6105   if (htab->opd_abi)
6106     {
6107       for (i = 4; i < 12; i++)
6108         {
6109           bfd_put_32 (obfd,
6110                       STD_R0_0R1 | i << 21 | (-(13 - i) * 8 & 0xffff), p);
6111           p += 4;
6112         }
6113       bfd_put_32 (obfd, STDU_R1_0R1 | (-128 & 0xffff), p);
6114       p += 4;
6115     }
6116   else
6117     {
6118       for (i = 4; i < 12; i++)
6119         {
6120           bfd_put_32 (obfd,
6121                       STD_R0_0R1 | i << 21 | (-(12 - i) * 8 & 0xffff), p);
6122           p += 4;
6123         }
6124       bfd_put_32 (obfd, STDU_R1_0R1 | (-96 & 0xffff), p);
6125       p += 4;
6126     }
6127   return p;
6128 }
6129
6130 /* Emit epilogue of wrapper preserving regs around a call to
6131    __tls_get_addr_opt.  */
6132
6133 static bfd_byte *
6134 tls_get_addr_epilogue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
6135 {
6136   unsigned int i;
6137
6138   if (htab->opd_abi)
6139     {
6140       for (i = 4; i < 12; i++)
6141         {
6142           bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (128 - (13 - i) * 8), p);
6143           p += 4;
6144         }
6145       bfd_put_32 (obfd, ADDI_R1_R1 | 128, p);
6146       p += 4;
6147     }
6148   else
6149     {
6150       for (i = 4; i < 12; i++)
6151         {
6152           bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (96 - (12 - i) * 8), p);
6153           p += 4;
6154         }
6155       bfd_put_32 (obfd, ADDI_R1_R1 | 96, p);
6156       p += 4;
6157     }
6158   bfd_put_32 (obfd, LD_R0_0R1 | 16, p);
6159   p += 4;
6160   bfd_put_32 (obfd, MTLR_R0, p);
6161   p += 4;
6162   bfd_put_32 (obfd, BLR, p);
6163   p += 4;
6164   return p;
6165 }
6166
6167 /* Called via elf_link_hash_traverse to transfer dynamic linking
6168    information on function code symbol entries to their corresponding
6169    function descriptor symbol entries.  */
6170
6171 static bfd_boolean
6172 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6173 {
6174   struct bfd_link_info *info;
6175   struct ppc_link_hash_table *htab;
6176   struct ppc_link_hash_entry *fh;
6177   struct ppc_link_hash_entry *fdh;
6178   bfd_boolean force_local;
6179
6180   fh = ppc_elf_hash_entry (h);
6181   if (fh->elf.root.type == bfd_link_hash_indirect)
6182     return TRUE;
6183
6184   if (!fh->is_func)
6185     return TRUE;
6186
6187   if (fh->elf.root.root.string[0] != '.'
6188       || fh->elf.root.root.string[1] == '\0')
6189     return TRUE;
6190
6191   info = inf;
6192   htab = ppc_hash_table (info);
6193   if (htab == NULL)
6194     return FALSE;
6195
6196   /* Find the corresponding function descriptor symbol.  */
6197   fdh = lookup_fdh (fh, htab);
6198
6199   /* Resolve undefined references to dot-symbols as the value
6200      in the function descriptor, if we have one in a regular object.
6201      This is to satisfy cases like ".quad .foo".  Calls to functions
6202      in dynamic objects are handled elsewhere.  */
6203   if ((fh->elf.root.type == bfd_link_hash_undefined
6204        || fh->elf.root.type == bfd_link_hash_undefweak)
6205       && (fdh->elf.root.type == bfd_link_hash_defined
6206           || fdh->elf.root.type == bfd_link_hash_defweak)
6207       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6208       && opd_entry_value (fdh->elf.root.u.def.section,
6209                           fdh->elf.root.u.def.value,
6210                           &fh->elf.root.u.def.section,
6211                           &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6212     {
6213       fh->elf.root.type = fdh->elf.root.type;
6214       fh->elf.forced_local = 1;
6215       fh->elf.def_regular = fdh->elf.def_regular;
6216       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6217     }
6218
6219   if (!fh->elf.dynamic)
6220     {
6221       struct plt_entry *ent;
6222
6223       for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6224         if (ent->plt.refcount > 0)
6225           break;
6226       if (ent == NULL)
6227         return TRUE;
6228     }
6229
6230   /* Create a descriptor as undefined if necessary.  */
6231   if (fdh == NULL
6232       && !bfd_link_executable (info)
6233       && (fh->elf.root.type == bfd_link_hash_undefined
6234           || fh->elf.root.type == bfd_link_hash_undefweak))
6235     {
6236       fdh = make_fdh (info, fh);
6237       if (fdh == NULL)
6238         return FALSE;
6239     }
6240
6241   /* We can't support overriding of symbols on a fake descriptor.  */
6242   if (fdh != NULL
6243       && fdh->fake
6244       && (fh->elf.root.type == bfd_link_hash_defined
6245           || fh->elf.root.type == bfd_link_hash_defweak))
6246     _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6247
6248   /* Transfer dynamic linking information to the function descriptor.  */
6249   if (fdh != NULL)
6250     {
6251       fdh->elf.ref_regular |= fh->elf.ref_regular;
6252       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6253       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6254       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6255       fdh->elf.dynamic |= fh->elf.dynamic;
6256       fdh->elf.needs_plt |= (fh->elf.needs_plt
6257                              || fh->elf.type == STT_FUNC
6258                              || fh->elf.type == STT_GNU_IFUNC);
6259       move_plt_plist (fh, fdh);
6260
6261       if (!fdh->elf.forced_local
6262           && fh->elf.dynindx != -1)
6263         if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6264           return FALSE;
6265     }
6266
6267   /* Now that the info is on the function descriptor, clear the
6268      function code sym info.  Any function code syms for which we
6269      don't have a definition in a regular file, we force local.
6270      This prevents a shared library from exporting syms that have
6271      been imported from another library.  Function code syms that
6272      are really in the library we must leave global to prevent the
6273      linker dragging in a definition from a static library.  */
6274   force_local = (!fh->elf.def_regular
6275                  || fdh == NULL
6276                  || !fdh->elf.def_regular
6277                  || fdh->elf.forced_local);
6278   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6279
6280   return TRUE;
6281 }
6282
6283 static const struct sfpr_def_parms save_res_funcs[] =
6284   {
6285     { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6286     { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6287     { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6288     { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6289     { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6290     { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6291     { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6292     { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6293     { "._savef", 14, 31, savefpr, savefpr1_tail },
6294     { "._restf", 14, 31, restfpr, restfpr1_tail },
6295     { "_savevr_", 20, 31, savevr, savevr_tail },
6296     { "_restvr_", 20, 31, restvr, restvr_tail }
6297   };
6298
6299 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6300    this hook to a) provide some gcc support functions, and b) transfer
6301    dynamic linking information gathered so far on function code symbol
6302    entries, to their corresponding function descriptor symbol entries.  */
6303
6304 static bfd_boolean
6305 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6306                             struct bfd_link_info *info)
6307 {
6308   struct ppc_link_hash_table *htab;
6309
6310   htab = ppc_hash_table (info);
6311   if (htab == NULL)
6312     return FALSE;
6313
6314   /* Provide any missing _save* and _rest* functions.  */
6315   if (htab->sfpr != NULL)
6316     {
6317       unsigned int i;
6318
6319       htab->sfpr->size = 0;
6320       for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
6321         if (!sfpr_define (info, &save_res_funcs[i], NULL))
6322           return FALSE;
6323       if (htab->sfpr->size == 0)
6324         htab->sfpr->flags |= SEC_EXCLUDE;
6325     }
6326
6327   if (bfd_link_relocatable (info))
6328     return TRUE;
6329
6330   if (htab->elf.hgot != NULL)
6331     {
6332       _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6333       /* Make .TOC. defined so as to prevent it being made dynamic.
6334          The wrong value here is fixed later in ppc64_elf_set_toc.  */
6335       if (!htab->elf.hgot->def_regular
6336           || htab->elf.hgot->root.type != bfd_link_hash_defined)
6337         {
6338           htab->elf.hgot->root.type = bfd_link_hash_defined;
6339           htab->elf.hgot->root.u.def.value = 0;
6340           htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
6341           htab->elf.hgot->def_regular = 1;
6342           htab->elf.hgot->root.linker_def = 1;
6343         }
6344       htab->elf.hgot->type = STT_OBJECT;
6345       htab->elf.hgot->other
6346         = (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
6347     }
6348
6349   if (htab->need_func_desc_adj)
6350     {
6351       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6352       htab->need_func_desc_adj = 0;
6353     }
6354
6355   return TRUE;
6356 }
6357
6358 /* Find dynamic relocs for H that apply to read-only sections.  */
6359
6360 static asection *
6361 readonly_dynrelocs (struct elf_link_hash_entry *h)
6362 {
6363   struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
6364   struct elf_dyn_relocs *p;
6365
6366   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6367     {
6368       asection *s = p->sec->output_section;
6369
6370       if (s != NULL && (s->flags & SEC_READONLY) != 0)
6371         return p->sec;
6372     }
6373   return NULL;
6374 }
6375
6376 /* Return true if we have dynamic relocs against H or any of its weak
6377    aliases, that apply to read-only sections.  Cannot be used after
6378    size_dynamic_sections.  */
6379
6380 static bfd_boolean
6381 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
6382 {
6383   struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
6384   do
6385     {
6386       if (readonly_dynrelocs (&eh->elf))
6387         return TRUE;
6388       eh = ppc_elf_hash_entry (eh->elf.u.alias);
6389     }
6390   while (eh != NULL && &eh->elf != h);
6391
6392   return FALSE;
6393 }
6394
6395 /* Return whether EH has pc-relative dynamic relocs.  */
6396
6397 static bfd_boolean
6398 pc_dynrelocs (struct ppc_link_hash_entry *eh)
6399 {
6400   struct elf_dyn_relocs *p;
6401
6402   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6403     if (p->pc_count != 0)
6404       return TRUE;
6405   return FALSE;
6406 }
6407
6408 /* Return true if a global entry stub will be created for H.  Valid
6409    for ELFv2 before plt entries have been allocated.  */
6410
6411 static bfd_boolean
6412 global_entry_stub (struct elf_link_hash_entry *h)
6413 {
6414   struct plt_entry *pent;
6415
6416   if (!h->pointer_equality_needed
6417       || h->def_regular)
6418     return FALSE;
6419
6420   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
6421     if (pent->plt.refcount > 0
6422         && pent->addend == 0)
6423       return TRUE;
6424
6425   return FALSE;
6426 }
6427
6428 /* Adjust a symbol defined by a dynamic object and referenced by a
6429    regular object.  The current definition is in some section of the
6430    dynamic object, but we're not including those sections.  We have to
6431    change the definition to something the rest of the link can
6432    understand.  */
6433
6434 static bfd_boolean
6435 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6436                                  struct elf_link_hash_entry *h)
6437 {
6438   struct ppc_link_hash_table *htab;
6439   asection *s, *srel;
6440
6441   htab = ppc_hash_table (info);
6442   if (htab == NULL)
6443     return FALSE;
6444
6445   /* Deal with function syms.  */
6446   if (h->type == STT_FUNC
6447       || h->type == STT_GNU_IFUNC
6448       || h->needs_plt)
6449     {
6450       bfd_boolean local = (ppc_elf_hash_entry (h)->save_res
6451                            || SYMBOL_CALLS_LOCAL (info, h)
6452                            || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
6453       /* Discard dyn_relocs when non-pic if we've decided that a
6454          function symbol is local and not an ifunc.  We keep dynamic
6455          relocs for ifuncs when local rather than always emitting a
6456          plt call stub for them and defining the symbol on the call
6457          stub.  We can't do that for ELFv1 anyway (a function symbol
6458          is defined on a descriptor, not code) and it can be faster at
6459          run-time due to not needing to bounce through a stub.  The
6460          dyn_relocs for ifuncs will be applied even in a static
6461          executable.  */
6462       if (!bfd_link_pic (info)
6463           && h->type != STT_GNU_IFUNC
6464           && local)
6465         ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6466
6467       /* Clear procedure linkage table information for any symbol that
6468          won't need a .plt entry.  */
6469       struct plt_entry *ent;
6470       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6471         if (ent->plt.refcount > 0)
6472           break;
6473       if (ent == NULL
6474           || (h->type != STT_GNU_IFUNC
6475               && local
6476               && (htab->can_convert_all_inline_plt
6477                   || (ppc_elf_hash_entry (h)->tls_mask
6478                       & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
6479         {
6480           h->plt.plist = NULL;
6481           h->needs_plt = 0;
6482           h->pointer_equality_needed = 0;
6483         }
6484       else if (abiversion (info->output_bfd) >= 2)
6485         {
6486           /* Taking a function's address in a read/write section
6487              doesn't require us to define the function symbol in the
6488              executable on a global entry stub.  A dynamic reloc can
6489              be used instead.  The reason we prefer a few more dynamic
6490              relocs is that calling via a global entry stub costs a
6491              few more instructions, and pointer_equality_needed causes
6492              extra work in ld.so when resolving these symbols.  */
6493           if (global_entry_stub (h))
6494             {
6495               if (!readonly_dynrelocs (h))
6496                 {
6497                   h->pointer_equality_needed = 0;
6498                   /* If we haven't seen a branch reloc and the symbol
6499                      isn't an ifunc then we don't need a plt entry.  */
6500                   if (!h->needs_plt)
6501                     h->plt.plist = NULL;
6502                 }
6503               else if (!bfd_link_pic (info))
6504                 /* We are going to be defining the function symbol on the
6505                    plt stub, so no dyn_relocs needed when non-pic.  */
6506                 ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6507             }
6508
6509           /* ELFv2 function symbols can't have copy relocs.  */
6510           return TRUE;
6511         }
6512       else if (!h->needs_plt
6513                && !readonly_dynrelocs (h))
6514         {
6515           /* If we haven't seen a branch reloc and the symbol isn't an
6516              ifunc then we don't need a plt entry.  */
6517           h->plt.plist = NULL;
6518           h->pointer_equality_needed = 0;
6519           return TRUE;
6520         }
6521     }
6522   else
6523     h->plt.plist = NULL;
6524
6525   /* If this is a weak symbol, and there is a real definition, the
6526      processor independent code will have arranged for us to see the
6527      real definition first, and we can just use the same value.  */
6528   if (h->is_weakalias)
6529     {
6530       struct elf_link_hash_entry *def = weakdef (h);
6531       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
6532       h->root.u.def.section = def->root.u.def.section;
6533       h->root.u.def.value = def->root.u.def.value;
6534       if (def->root.u.def.section == htab->elf.sdynbss
6535           || def->root.u.def.section == htab->elf.sdynrelro)
6536         ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6537       return TRUE;
6538     }
6539
6540   /* If we are creating a shared library, we must presume that the
6541      only references to the symbol are via the global offset table.
6542      For such cases we need not do anything here; the relocations will
6543      be handled correctly by relocate_section.  */
6544   if (!bfd_link_executable (info))
6545     return TRUE;
6546
6547   /* If there are no references to this symbol that do not use the
6548      GOT, we don't need to generate a copy reloc.  */
6549   if (!h->non_got_ref)
6550     return TRUE;
6551
6552   /* Don't generate a copy reloc for symbols defined in the executable.  */
6553   if (!h->def_dynamic || !h->ref_regular || h->def_regular
6554
6555       /* If -z nocopyreloc was given, don't generate them either.  */
6556       || info->nocopyreloc
6557
6558       /* If we don't find any dynamic relocs in read-only sections, then
6559          we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6560       || (ELIMINATE_COPY_RELOCS
6561           && !h->needs_copy
6562           && !alias_readonly_dynrelocs (h))
6563
6564       /* Protected variables do not work with .dynbss.  The copy in
6565          .dynbss won't be used by the shared library with the protected
6566          definition for the variable.  Text relocations are preferable
6567          to an incorrect program.  */
6568       || h->protected_def)
6569     return TRUE;
6570
6571   if (h->type == STT_FUNC
6572       || h->type == STT_GNU_IFUNC)
6573     {
6574       /* .dynbss copies of function symbols only work if we have
6575          ELFv1 dot-symbols.  ELFv1 compilers since 2004 default to not
6576          use dot-symbols and set the function symbol size to the text
6577          size of the function rather than the size of the descriptor.
6578          That's wrong for copying a descriptor.  */
6579       if (ppc_elf_hash_entry (h)->oh == NULL
6580           || !(h->size == 24 || h->size == 16))
6581         return TRUE;
6582
6583       /* We should never get here, but unfortunately there are old
6584          versions of gcc (circa gcc-3.2) that improperly for the
6585          ELFv1 ABI put initialized function pointers, vtable refs and
6586          suchlike in read-only sections.  Allow them to proceed, but
6587          warn that this might break at runtime.  */
6588       info->callbacks->einfo
6589         (_("%P: copy reloc against `%pT' requires lazy plt linking; "
6590            "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6591          h->root.root.string);
6592     }
6593
6594   /* This is a reference to a symbol defined by a dynamic object which
6595      is not a function.  */
6596
6597   /* We must allocate the symbol in our .dynbss section, which will
6598      become part of the .bss section of the executable.  There will be
6599      an entry for this symbol in the .dynsym section.  The dynamic
6600      object will contain position independent code, so all references
6601      from the dynamic object to this symbol will go through the global
6602      offset table.  The dynamic linker will use the .dynsym entry to
6603      determine the address it must put in the global offset table, so
6604      both the dynamic object and the regular object will refer to the
6605      same memory location for the variable.  */
6606   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
6607     {
6608       s = htab->elf.sdynrelro;
6609       srel = htab->elf.sreldynrelro;
6610     }
6611   else
6612     {
6613       s = htab->elf.sdynbss;
6614       srel = htab->elf.srelbss;
6615     }
6616   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6617     {
6618       /* We must generate a R_PPC64_COPY reloc to tell the dynamic
6619          linker to copy the initial value out of the dynamic object
6620          and into the runtime process image.  */
6621       srel->size += sizeof (Elf64_External_Rela);
6622       h->needs_copy = 1;
6623     }
6624
6625   /* We no longer want dyn_relocs.  */
6626   ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6627   return _bfd_elf_adjust_dynamic_copy (info, h, s);
6628 }
6629
6630 /* If given a function descriptor symbol, hide both the function code
6631    sym and the descriptor.  */
6632 static void
6633 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6634                        struct elf_link_hash_entry *h,
6635                        bfd_boolean force_local)
6636 {
6637   struct ppc_link_hash_entry *eh;
6638   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6639
6640   if (ppc_hash_table (info) == NULL)
6641     return;
6642
6643   eh = ppc_elf_hash_entry (h);
6644   if (eh->is_func_descriptor)
6645     {
6646       struct ppc_link_hash_entry *fh = eh->oh;
6647
6648       if (fh == NULL)
6649         {
6650           const char *p, *q;
6651           struct elf_link_hash_table *htab = elf_hash_table (info);
6652           char save;
6653
6654           /* We aren't supposed to use alloca in BFD because on
6655              systems which do not have alloca the version in libiberty
6656              calls xmalloc, which might cause the program to crash
6657              when it runs out of memory.  This function doesn't have a
6658              return status, so there's no way to gracefully return an
6659              error.  So cheat.  We know that string[-1] can be safely
6660              accessed;  It's either a string in an ELF string table,
6661              or allocated in an objalloc structure.  */
6662
6663           p = eh->elf.root.root.string - 1;
6664           save = *p;
6665           *(char *) p = '.';
6666           fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6667                                                          FALSE, FALSE));
6668           *(char *) p = save;
6669
6670           /* Unfortunately, if it so happens that the string we were
6671              looking for was allocated immediately before this string,
6672              then we overwrote the string terminator.  That's the only
6673              reason the lookup should fail.  */
6674           if (fh == NULL)
6675             {
6676               q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6677               while (q >= eh->elf.root.root.string && *q == *p)
6678                 --q, --p;
6679               if (q < eh->elf.root.root.string && *p == '.')
6680                 fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6681                                                                FALSE, FALSE));
6682             }
6683           if (fh != NULL)
6684             {
6685               eh->oh = fh;
6686               fh->oh = eh;
6687             }
6688         }
6689       if (fh != NULL)
6690         _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6691     }
6692 }
6693
6694 static bfd_boolean
6695 get_sym_h (struct elf_link_hash_entry **hp,
6696            Elf_Internal_Sym **symp,
6697            asection **symsecp,
6698            unsigned char **tls_maskp,
6699            Elf_Internal_Sym **locsymsp,
6700            unsigned long r_symndx,
6701            bfd *ibfd)
6702 {
6703   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6704
6705   if (r_symndx >= symtab_hdr->sh_info)
6706     {
6707       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6708       struct elf_link_hash_entry *h;
6709
6710       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6711       h = elf_follow_link (h);
6712
6713       if (hp != NULL)
6714         *hp = h;
6715
6716       if (symp != NULL)
6717         *symp = NULL;
6718
6719       if (symsecp != NULL)
6720         {
6721           asection *symsec = NULL;
6722           if (h->root.type == bfd_link_hash_defined
6723               || h->root.type == bfd_link_hash_defweak)
6724             symsec = h->root.u.def.section;
6725           *symsecp = symsec;
6726         }
6727
6728       if (tls_maskp != NULL)
6729         *tls_maskp = &ppc_elf_hash_entry (h)->tls_mask;
6730     }
6731   else
6732     {
6733       Elf_Internal_Sym *sym;
6734       Elf_Internal_Sym *locsyms = *locsymsp;
6735
6736       if (locsyms == NULL)
6737         {
6738           locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6739           if (locsyms == NULL)
6740             locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6741                                             symtab_hdr->sh_info,
6742                                             0, NULL, NULL, NULL);
6743           if (locsyms == NULL)
6744             return FALSE;
6745           *locsymsp = locsyms;
6746         }
6747       sym = locsyms + r_symndx;
6748
6749       if (hp != NULL)
6750         *hp = NULL;
6751
6752       if (symp != NULL)
6753         *symp = sym;
6754
6755       if (symsecp != NULL)
6756         *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6757
6758       if (tls_maskp != NULL)
6759         {
6760           struct got_entry **lgot_ents;
6761           unsigned char *tls_mask;
6762
6763           tls_mask = NULL;
6764           lgot_ents = elf_local_got_ents (ibfd);
6765           if (lgot_ents != NULL)
6766             {
6767               struct plt_entry **local_plt = (struct plt_entry **)
6768                 (lgot_ents + symtab_hdr->sh_info);
6769               unsigned char *lgot_masks = (unsigned char *)
6770                 (local_plt + symtab_hdr->sh_info);
6771               tls_mask = &lgot_masks[r_symndx];
6772             }
6773           *tls_maskp = tls_mask;
6774         }
6775     }
6776   return TRUE;
6777 }
6778
6779 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6780    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6781    type suitable for optimization, and 1 otherwise.  */
6782
6783 static int
6784 get_tls_mask (unsigned char **tls_maskp,
6785               unsigned long *toc_symndx,
6786               bfd_vma *toc_addend,
6787               Elf_Internal_Sym **locsymsp,
6788               const Elf_Internal_Rela *rel,
6789               bfd *ibfd)
6790 {
6791   unsigned long r_symndx;
6792   int next_r;
6793   struct elf_link_hash_entry *h;
6794   Elf_Internal_Sym *sym;
6795   asection *sec;
6796   bfd_vma off;
6797
6798   r_symndx = ELF64_R_SYM (rel->r_info);
6799   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6800     return 0;
6801
6802   if ((*tls_maskp != NULL
6803        && (**tls_maskp & TLS_TLS) != 0
6804        && **tls_maskp != (TLS_TLS | TLS_MARK))
6805       || sec == NULL
6806       || ppc64_elf_section_data (sec) == NULL
6807       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6808     return 1;
6809
6810   /* Look inside a TOC section too.  */
6811   if (h != NULL)
6812     {
6813       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6814       off = h->root.u.def.value;
6815     }
6816   else
6817     off = sym->st_value;
6818   off += rel->r_addend;
6819   BFD_ASSERT (off % 8 == 0);
6820   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6821   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6822   if (toc_symndx != NULL)
6823     *toc_symndx = r_symndx;
6824   if (toc_addend != NULL)
6825     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6826   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6827     return 0;
6828   if ((h == NULL || is_static_defined (h))
6829       && (next_r == -1 || next_r == -2))
6830     return 1 - next_r;
6831   return 1;
6832 }
6833
6834 /* Find (or create) an entry in the tocsave hash table.  */
6835
6836 static struct tocsave_entry *
6837 tocsave_find (struct ppc_link_hash_table *htab,
6838               enum insert_option insert,
6839               Elf_Internal_Sym **local_syms,
6840               const Elf_Internal_Rela *irela,
6841               bfd *ibfd)
6842 {
6843   unsigned long r_indx;
6844   struct elf_link_hash_entry *h;
6845   Elf_Internal_Sym *sym;
6846   struct tocsave_entry ent, *p;
6847   hashval_t hash;
6848   struct tocsave_entry **slot;
6849
6850   r_indx = ELF64_R_SYM (irela->r_info);
6851   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6852     return NULL;
6853   if (ent.sec == NULL || ent.sec->output_section == NULL)
6854     {
6855       _bfd_error_handler
6856         (_("%pB: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
6857       return NULL;
6858     }
6859
6860   if (h != NULL)
6861     ent.offset = h->root.u.def.value;
6862   else
6863     ent.offset = sym->st_value;
6864   ent.offset += irela->r_addend;
6865
6866   hash = tocsave_htab_hash (&ent);
6867   slot = ((struct tocsave_entry **)
6868           htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6869   if (slot == NULL)
6870     return NULL;
6871
6872   if (*slot == NULL)
6873     {
6874       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6875       if (p == NULL)
6876         return NULL;
6877       *p = ent;
6878       *slot = p;
6879     }
6880   return *slot;
6881 }
6882
6883 /* Adjust all global syms defined in opd sections.  In gcc generated
6884    code for the old ABI, these will already have been done.  */
6885
6886 static bfd_boolean
6887 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6888 {
6889   struct ppc_link_hash_entry *eh;
6890   asection *sym_sec;
6891   struct _opd_sec_data *opd;
6892
6893   if (h->root.type == bfd_link_hash_indirect)
6894     return TRUE;
6895
6896   if (h->root.type != bfd_link_hash_defined
6897       && h->root.type != bfd_link_hash_defweak)
6898     return TRUE;
6899
6900   eh = ppc_elf_hash_entry (h);
6901   if (eh->adjust_done)
6902     return TRUE;
6903
6904   sym_sec = eh->elf.root.u.def.section;
6905   opd = get_opd_info (sym_sec);
6906   if (opd != NULL && opd->adjust != NULL)
6907     {
6908       long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
6909       if (adjust == -1)
6910         {
6911           /* This entry has been deleted.  */
6912           asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6913           if (dsec == NULL)
6914             {
6915               for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6916                 if (discarded_section (dsec))
6917                   {
6918                     ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6919                     break;
6920                   }
6921             }
6922           eh->elf.root.u.def.value = 0;
6923           eh->elf.root.u.def.section = dsec;
6924         }
6925       else
6926         eh->elf.root.u.def.value += adjust;
6927       eh->adjust_done = 1;
6928     }
6929   return TRUE;
6930 }
6931
6932 /* Handles decrementing dynamic reloc counts for the reloc specified by
6933    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
6934    have already been determined.  */
6935
6936 static bfd_boolean
6937 dec_dynrel_count (bfd_vma r_info,
6938                   asection *sec,
6939                   struct bfd_link_info *info,
6940                   Elf_Internal_Sym **local_syms,
6941                   struct elf_link_hash_entry *h,
6942                   Elf_Internal_Sym *sym)
6943 {
6944   enum elf_ppc64_reloc_type r_type;
6945   asection *sym_sec = NULL;
6946
6947   /* Can this reloc be dynamic?  This switch, and later tests here
6948      should be kept in sync with the code in check_relocs.  */
6949   r_type = ELF64_R_TYPE (r_info);
6950   switch (r_type)
6951     {
6952     default:
6953       return TRUE;
6954
6955     case R_PPC64_TOC16:
6956     case R_PPC64_TOC16_DS:
6957     case R_PPC64_TOC16_LO:
6958     case R_PPC64_TOC16_HI:
6959     case R_PPC64_TOC16_HA:
6960     case R_PPC64_TOC16_LO_DS:
6961       if (h == NULL)
6962         return TRUE;
6963       break;
6964
6965     case R_PPC64_TPREL16:
6966     case R_PPC64_TPREL16_LO:
6967     case R_PPC64_TPREL16_HI:
6968     case R_PPC64_TPREL16_HA:
6969     case R_PPC64_TPREL16_DS:
6970     case R_PPC64_TPREL16_LO_DS:
6971     case R_PPC64_TPREL16_HIGH:
6972     case R_PPC64_TPREL16_HIGHA:
6973     case R_PPC64_TPREL16_HIGHER:
6974     case R_PPC64_TPREL16_HIGHERA:
6975     case R_PPC64_TPREL16_HIGHEST:
6976     case R_PPC64_TPREL16_HIGHESTA:
6977     case R_PPC64_TPREL64:
6978     case R_PPC64_TPREL34:
6979     case R_PPC64_DTPMOD64:
6980     case R_PPC64_DTPREL64:
6981     case R_PPC64_ADDR64:
6982     case R_PPC64_REL30:
6983     case R_PPC64_REL32:
6984     case R_PPC64_REL64:
6985     case R_PPC64_ADDR14:
6986     case R_PPC64_ADDR14_BRNTAKEN:
6987     case R_PPC64_ADDR14_BRTAKEN:
6988     case R_PPC64_ADDR16:
6989     case R_PPC64_ADDR16_DS:
6990     case R_PPC64_ADDR16_HA:
6991     case R_PPC64_ADDR16_HI:
6992     case R_PPC64_ADDR16_HIGH:
6993     case R_PPC64_ADDR16_HIGHA:
6994     case R_PPC64_ADDR16_HIGHER:
6995     case R_PPC64_ADDR16_HIGHERA:
6996     case R_PPC64_ADDR16_HIGHEST:
6997     case R_PPC64_ADDR16_HIGHESTA:
6998     case R_PPC64_ADDR16_LO:
6999     case R_PPC64_ADDR16_LO_DS:
7000     case R_PPC64_ADDR24:
7001     case R_PPC64_ADDR32:
7002     case R_PPC64_UADDR16:
7003     case R_PPC64_UADDR32:
7004     case R_PPC64_UADDR64:
7005     case R_PPC64_TOC:
7006     case R_PPC64_D34:
7007     case R_PPC64_D34_LO:
7008     case R_PPC64_D34_HI30:
7009     case R_PPC64_D34_HA30:
7010     case R_PPC64_ADDR16_HIGHER34:
7011     case R_PPC64_ADDR16_HIGHERA34:
7012     case R_PPC64_ADDR16_HIGHEST34:
7013     case R_PPC64_ADDR16_HIGHESTA34:
7014     case R_PPC64_D28:
7015       break;
7016     }
7017
7018   if (local_syms != NULL)
7019     {
7020       unsigned long r_symndx;
7021       bfd *ibfd = sec->owner;
7022
7023       r_symndx = ELF64_R_SYM (r_info);
7024       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7025         return FALSE;
7026     }
7027
7028   if ((h != NULL
7029        && (h->root.type == bfd_link_hash_defweak
7030            || !h->def_regular))
7031       || (h != NULL
7032           && !bfd_link_executable (info)
7033           && !SYMBOLIC_BIND (info, h))
7034       || (bfd_link_pic (info)
7035           && must_be_dyn_reloc (info, r_type))
7036       || (!bfd_link_pic (info)
7037           && (h != NULL
7038               ? h->type == STT_GNU_IFUNC
7039               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
7040     ;
7041   else
7042     return TRUE;
7043
7044   if (h != NULL)
7045     {
7046       struct elf_dyn_relocs *p;
7047       struct elf_dyn_relocs **pp;
7048       pp = &ppc_elf_hash_entry (h)->dyn_relocs;
7049
7050       /* elf_gc_sweep may have already removed all dyn relocs associated
7051          with local syms for a given section.  Also, symbol flags are
7052          changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7053          report a dynreloc miscount.  */
7054       if (*pp == NULL && info->gc_sections)
7055         return TRUE;
7056
7057       while ((p = *pp) != NULL)
7058         {
7059           if (p->sec == sec)
7060             {
7061               if (!must_be_dyn_reloc (info, r_type))
7062                 p->pc_count -= 1;
7063               p->count -= 1;
7064               if (p->count == 0)
7065                 *pp = p->next;
7066               return TRUE;
7067             }
7068           pp = &p->next;
7069         }
7070     }
7071   else
7072     {
7073       struct ppc_dyn_relocs *p;
7074       struct ppc_dyn_relocs **pp;
7075       void *vpp;
7076       bfd_boolean is_ifunc;
7077
7078       if (local_syms == NULL)
7079         sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7080       if (sym_sec == NULL)
7081         sym_sec = sec;
7082
7083       vpp = &elf_section_data (sym_sec)->local_dynrel;
7084       pp = (struct ppc_dyn_relocs **) vpp;
7085
7086       if (*pp == NULL && info->gc_sections)
7087         return TRUE;
7088
7089       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
7090       while ((p = *pp) != NULL)
7091         {
7092           if (p->sec == sec && p->ifunc == is_ifunc)
7093             {
7094               p->count -= 1;
7095               if (p->count == 0)
7096                 *pp = p->next;
7097               return TRUE;
7098             }
7099           pp = &p->next;
7100         }
7101     }
7102
7103   /* xgettext:c-format */
7104   _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
7105                       sec->owner, sec);
7106   bfd_set_error (bfd_error_bad_value);
7107   return FALSE;
7108 }
7109
7110 /* Remove unused Official Procedure Descriptor entries.  Currently we
7111    only remove those associated with functions in discarded link-once
7112    sections, or weakly defined functions that have been overridden.  It
7113    would be possible to remove many more entries for statically linked
7114    applications.  */
7115
7116 bfd_boolean
7117 ppc64_elf_edit_opd (struct bfd_link_info *info)
7118 {
7119   bfd *ibfd;
7120   bfd_boolean some_edited = FALSE;
7121   asection *need_pad = NULL;
7122   struct ppc_link_hash_table *htab;
7123
7124   htab = ppc_hash_table (info);
7125   if (htab == NULL)
7126     return FALSE;
7127
7128   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7129     {
7130       asection *sec;
7131       Elf_Internal_Rela *relstart, *rel, *relend;
7132       Elf_Internal_Shdr *symtab_hdr;
7133       Elf_Internal_Sym *local_syms;
7134       struct _opd_sec_data *opd;
7135       bfd_boolean need_edit, add_aux_fields, broken;
7136       bfd_size_type cnt_16b = 0;
7137
7138       if (!is_ppc64_elf (ibfd))
7139         continue;
7140
7141       sec = bfd_get_section_by_name (ibfd, ".opd");
7142       if (sec == NULL || sec->size == 0)
7143         continue;
7144
7145       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7146         continue;
7147
7148       if (sec->output_section == bfd_abs_section_ptr)
7149         continue;
7150
7151       /* Look through the section relocs.  */
7152       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7153         continue;
7154
7155       local_syms = NULL;
7156       symtab_hdr = &elf_symtab_hdr (ibfd);
7157
7158       /* Read the relocations.  */
7159       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7160                                             info->keep_memory);
7161       if (relstart == NULL)
7162         return FALSE;
7163
7164       /* First run through the relocs to check they are sane, and to
7165          determine whether we need to edit this opd section.  */
7166       need_edit = FALSE;
7167       broken = FALSE;
7168       need_pad = sec;
7169       relend = relstart + sec->reloc_count;
7170       for (rel = relstart; rel < relend; )
7171         {
7172           enum elf_ppc64_reloc_type r_type;
7173           unsigned long r_symndx;
7174           asection *sym_sec;
7175           struct elf_link_hash_entry *h;
7176           Elf_Internal_Sym *sym;
7177           bfd_vma offset;
7178
7179           /* .opd contains an array of 16 or 24 byte entries.  We're
7180              only interested in the reloc pointing to a function entry
7181              point.  */
7182           offset = rel->r_offset;
7183           if (rel + 1 == relend
7184               || rel[1].r_offset != offset + 8)
7185             {
7186               /* If someone messes with .opd alignment then after a
7187                  "ld -r" we might have padding in the middle of .opd.
7188                  Also, there's nothing to prevent someone putting
7189                  something silly in .opd with the assembler.  No .opd
7190                  optimization for them!  */
7191             broken_opd:
7192               _bfd_error_handler
7193                 (_("%pB: .opd is not a regular array of opd entries"), ibfd);
7194               broken = TRUE;
7195               break;
7196             }
7197
7198           if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7199               || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7200             {
7201               _bfd_error_handler
7202                 /* xgettext:c-format */
7203                 (_("%pB: unexpected reloc type %u in .opd section"),
7204                  ibfd, r_type);
7205               broken = TRUE;
7206               break;
7207             }
7208
7209           r_symndx = ELF64_R_SYM (rel->r_info);
7210           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7211                           r_symndx, ibfd))
7212             goto error_ret;
7213
7214           if (sym_sec == NULL || sym_sec->owner == NULL)
7215             {
7216               const char *sym_name;
7217               if (h != NULL)
7218                 sym_name = h->root.root.string;
7219               else
7220                 sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7221                                              sym_sec);
7222
7223               _bfd_error_handler
7224                 /* xgettext:c-format */
7225                 (_("%pB: undefined sym `%s' in .opd section"),
7226                  ibfd, sym_name);
7227               broken = TRUE;
7228               break;
7229             }
7230
7231           /* opd entries are always for functions defined in the
7232              current input bfd.  If the symbol isn't defined in the
7233              input bfd, then we won't be using the function in this
7234              bfd;  It must be defined in a linkonce section in another
7235              bfd, or is weak.  It's also possible that we are
7236              discarding the function due to a linker script /DISCARD/,
7237              which we test for via the output_section.  */
7238           if (sym_sec->owner != ibfd
7239               || sym_sec->output_section == bfd_abs_section_ptr)
7240             need_edit = TRUE;
7241
7242           rel += 2;
7243           if (rel + 1 == relend
7244               || (rel + 2 < relend
7245                   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7246             ++rel;
7247
7248           if (rel == relend)
7249             {
7250               if (sec->size == offset + 24)
7251                 {
7252                   need_pad = NULL;
7253                   break;
7254                 }
7255               if (sec->size == offset + 16)
7256                 {
7257                   cnt_16b++;
7258                   break;
7259                 }
7260               goto broken_opd;
7261             }
7262           else if (rel + 1 < relend
7263                    && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7264                    && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7265             {
7266               if (rel[0].r_offset == offset + 16)
7267                 cnt_16b++;
7268               else if (rel[0].r_offset != offset + 24)
7269                 goto broken_opd;
7270             }
7271           else
7272             goto broken_opd;
7273         }
7274
7275       add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7276
7277       if (!broken && (need_edit || add_aux_fields))
7278         {
7279           Elf_Internal_Rela *write_rel;
7280           Elf_Internal_Shdr *rel_hdr;
7281           bfd_byte *rptr, *wptr;
7282           bfd_byte *new_contents;
7283           bfd_size_type amt;
7284
7285           new_contents = NULL;
7286           amt = OPD_NDX (sec->size) * sizeof (long);
7287           opd = &ppc64_elf_section_data (sec)->u.opd;
7288           opd->adjust = bfd_zalloc (sec->owner, amt);
7289           if (opd->adjust == NULL)
7290             return FALSE;
7291
7292           /* This seems a waste of time as input .opd sections are all
7293              zeros as generated by gcc, but I suppose there's no reason
7294              this will always be so.  We might start putting something in
7295              the third word of .opd entries.  */
7296           if ((sec->flags & SEC_IN_MEMORY) == 0)
7297             {
7298               bfd_byte *loc;
7299               if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7300                 {
7301                   if (loc != NULL)
7302                     free (loc);
7303                 error_ret:
7304                   if (local_syms != NULL
7305                       && symtab_hdr->contents != (unsigned char *) local_syms)
7306                     free (local_syms);
7307                   if (elf_section_data (sec)->relocs != relstart)
7308                     free (relstart);
7309                   return FALSE;
7310                 }
7311               sec->contents = loc;
7312               sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7313             }
7314
7315           elf_section_data (sec)->relocs = relstart;
7316
7317           new_contents = sec->contents;
7318           if (add_aux_fields)
7319             {
7320               new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7321               if (new_contents == NULL)
7322                 return FALSE;
7323               need_pad = NULL;
7324             }
7325           wptr = new_contents;
7326           rptr = sec->contents;
7327           write_rel = relstart;
7328           for (rel = relstart; rel < relend; )
7329             {
7330               unsigned long r_symndx;
7331               asection *sym_sec;
7332               struct elf_link_hash_entry *h;
7333               struct ppc_link_hash_entry *fdh = NULL;
7334               Elf_Internal_Sym *sym;
7335               long opd_ent_size;
7336               Elf_Internal_Rela *next_rel;
7337               bfd_boolean skip;
7338
7339               r_symndx = ELF64_R_SYM (rel->r_info);
7340               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7341                               r_symndx, ibfd))
7342                 goto error_ret;
7343
7344               next_rel = rel + 2;
7345               if (next_rel + 1 == relend
7346                   || (next_rel + 2 < relend
7347                       && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
7348                 ++next_rel;
7349
7350               /* See if the .opd entry is full 24 byte or
7351                  16 byte (with fd_aux entry overlapped with next
7352                  fd_func).  */
7353               opd_ent_size = 24;
7354               if (next_rel == relend)
7355                 {
7356                   if (sec->size == rel->r_offset + 16)
7357                     opd_ent_size = 16;
7358                 }
7359               else if (next_rel->r_offset == rel->r_offset + 16)
7360                 opd_ent_size = 16;
7361
7362               if (h != NULL
7363                   && h->root.root.string[0] == '.')
7364                 {
7365                   fdh = ppc_elf_hash_entry (h)->oh;
7366                   if (fdh != NULL)
7367                     {
7368                       fdh = ppc_follow_link (fdh);
7369                       if (fdh->elf.root.type != bfd_link_hash_defined
7370                           && fdh->elf.root.type != bfd_link_hash_defweak)
7371                         fdh = NULL;
7372                     }
7373                 }
7374
7375               skip = (sym_sec->owner != ibfd
7376                       || sym_sec->output_section == bfd_abs_section_ptr);
7377               if (skip)
7378                 {
7379                   if (fdh != NULL && sym_sec->owner == ibfd)
7380                     {
7381                       /* Arrange for the function descriptor sym
7382                          to be dropped.  */
7383                       fdh->elf.root.u.def.value = 0;
7384                       fdh->elf.root.u.def.section = sym_sec;
7385                     }
7386                   opd->adjust[OPD_NDX (rel->r_offset)] = -1;
7387
7388                   if (NO_OPD_RELOCS || bfd_link_relocatable (info))
7389                     rel = next_rel;
7390                   else
7391                     while (1)
7392                       {
7393                         if (!dec_dynrel_count (rel->r_info, sec, info,
7394                                                NULL, h, sym))
7395                           goto error_ret;
7396
7397                         if (++rel == next_rel)
7398                           break;
7399
7400                         r_symndx = ELF64_R_SYM (rel->r_info);
7401                         if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7402                                         r_symndx, ibfd))
7403                           goto error_ret;
7404                       }
7405                 }
7406               else
7407                 {
7408                   /* We'll be keeping this opd entry.  */
7409                   long adjust;
7410
7411                   if (fdh != NULL)
7412                     {
7413                       /* Redefine the function descriptor symbol to
7414                          this location in the opd section.  It is
7415                          necessary to update the value here rather
7416                          than using an array of adjustments as we do
7417                          for local symbols, because various places
7418                          in the generic ELF code use the value
7419                          stored in u.def.value.  */
7420                       fdh->elf.root.u.def.value = wptr - new_contents;
7421                       fdh->adjust_done = 1;
7422                     }
7423
7424                   /* Local syms are a bit tricky.  We could
7425                      tweak them as they can be cached, but
7426                      we'd need to look through the local syms
7427                      for the function descriptor sym which we
7428                      don't have at the moment.  So keep an
7429                      array of adjustments.  */
7430                   adjust = (wptr - new_contents) - (rptr - sec->contents);
7431                   opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
7432
7433                   if (wptr != rptr)
7434                     memcpy (wptr, rptr, opd_ent_size);
7435                   wptr += opd_ent_size;
7436                   if (add_aux_fields && opd_ent_size == 16)
7437                     {
7438                       memset (wptr, '\0', 8);
7439                       wptr += 8;
7440                     }
7441
7442                   /* We need to adjust any reloc offsets to point to the
7443                      new opd entries.  */
7444                   for ( ; rel != next_rel; ++rel)
7445                     {
7446                       rel->r_offset += adjust;
7447                       if (write_rel != rel)
7448                         memcpy (write_rel, rel, sizeof (*rel));
7449                       ++write_rel;
7450                     }
7451                 }
7452
7453               rptr += opd_ent_size;
7454             }
7455
7456           sec->size = wptr - new_contents;
7457           sec->reloc_count = write_rel - relstart;
7458           if (add_aux_fields)
7459             {
7460               free (sec->contents);
7461               sec->contents = new_contents;
7462             }
7463
7464           /* Fudge the header size too, as this is used later in
7465              elf_bfd_final_link if we are emitting relocs.  */
7466           rel_hdr = _bfd_elf_single_rel_hdr (sec);
7467           rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7468           some_edited = TRUE;
7469         }
7470       else if (elf_section_data (sec)->relocs != relstart)
7471         free (relstart);
7472
7473       if (local_syms != NULL
7474           && symtab_hdr->contents != (unsigned char *) local_syms)
7475         {
7476           if (!info->keep_memory)
7477             free (local_syms);
7478           else
7479             symtab_hdr->contents = (unsigned char *) local_syms;
7480         }
7481     }
7482
7483   if (some_edited)
7484     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7485
7486   /* If we are doing a final link and the last .opd entry is just 16 byte
7487      long, add a 8 byte padding after it.  */
7488   if (need_pad != NULL && !bfd_link_relocatable (info))
7489     {
7490       bfd_byte *p;
7491
7492       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7493         {
7494           BFD_ASSERT (need_pad->size > 0);
7495
7496           p = bfd_malloc (need_pad->size + 8);
7497           if (p == NULL)
7498             return FALSE;
7499
7500           if (!bfd_get_section_contents (need_pad->owner, need_pad,
7501                                          p, 0, need_pad->size))
7502             return FALSE;
7503
7504           need_pad->contents = p;
7505           need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7506         }
7507       else
7508         {
7509           p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7510           if (p == NULL)
7511             return FALSE;
7512
7513           need_pad->contents = p;
7514         }
7515
7516       memset (need_pad->contents + need_pad->size, 0, 8);
7517       need_pad->size += 8;
7518     }
7519
7520   return TRUE;
7521 }
7522
7523 /* Analyze inline PLT call relocations to see whether calls to locally
7524    defined functions can be converted to direct calls.  */
7525
7526 bfd_boolean
7527 ppc64_elf_inline_plt (struct bfd_link_info *info)
7528 {
7529   struct ppc_link_hash_table *htab;
7530   bfd *ibfd;
7531   asection *sec;
7532   bfd_vma low_vma, high_vma, limit;
7533
7534   htab = ppc_hash_table (info);
7535   if (htab == NULL)
7536     return FALSE;
7537
7538   /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
7539      reduced somewhat to cater for possible stubs that might be added
7540      between the call and its destination.  */
7541   if (htab->params->group_size < 0)
7542     {
7543       limit = -htab->params->group_size;
7544       if (limit == 1)
7545         limit = 0x1e00000;
7546     }
7547   else
7548     {
7549       limit = htab->params->group_size;
7550       if (limit == 1)
7551         limit = 0x1c00000;
7552     }
7553
7554   low_vma = -1;
7555   high_vma = 0;
7556   for (sec = info->output_bfd->sections; sec != NULL; sec = sec->next)
7557     if ((sec->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE))
7558       {
7559         if (low_vma > sec->vma)
7560           low_vma = sec->vma;
7561         if (high_vma < sec->vma + sec->size)
7562           high_vma = sec->vma + sec->size;
7563       }
7564
7565   /* If a "bl" can reach anywhere in local code sections, then we can
7566      convert all inline PLT sequences to direct calls when the symbol
7567      is local.  */
7568   if (high_vma - low_vma < limit)
7569     {
7570       htab->can_convert_all_inline_plt = 1;
7571       return TRUE;
7572     }
7573
7574   /* Otherwise, go looking through relocs for cases where a direct
7575      call won't reach.  Mark the symbol on any such reloc to disable
7576      the optimization and keep the PLT entry as it seems likely that
7577      this will be better than creating trampolines.  Note that this
7578      will disable the optimization for all inline PLT calls to a
7579      particular symbol, not just those that won't reach.  The
7580      difficulty in doing a more precise optimization is that the
7581      linker needs to make a decision depending on whether a
7582      particular R_PPC64_PLTCALL insn can be turned into a direct
7583      call, for each of the R_PPC64_PLTSEQ and R_PPC64_PLT16* insns in
7584      the sequence, and there is nothing that ties those relocs
7585      together except their symbol.  */
7586
7587   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7588     {
7589       Elf_Internal_Shdr *symtab_hdr;
7590       Elf_Internal_Sym *local_syms;
7591
7592       if (!is_ppc64_elf (ibfd))
7593         continue;
7594
7595       local_syms = NULL;
7596       symtab_hdr = &elf_symtab_hdr (ibfd);
7597
7598       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7599         if (ppc64_elf_section_data (sec)->has_pltcall
7600             && !bfd_is_abs_section (sec->output_section))
7601           {
7602             Elf_Internal_Rela *relstart, *rel, *relend;
7603
7604             /* Read the relocations.  */
7605             relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7606                                                   info->keep_memory);
7607             if (relstart == NULL)
7608               return FALSE;
7609
7610             relend = relstart + sec->reloc_count;
7611             for (rel = relstart; rel < relend; )
7612               {
7613                 enum elf_ppc64_reloc_type r_type;
7614                 unsigned long r_symndx;
7615                 asection *sym_sec;
7616                 struct elf_link_hash_entry *h;
7617                 Elf_Internal_Sym *sym;
7618                 unsigned char *tls_maskp;
7619
7620                 r_type = ELF64_R_TYPE (rel->r_info);
7621                 if (r_type != R_PPC64_PLTCALL
7622                     && r_type != R_PPC64_PLTCALL_NOTOC)
7623                   continue;
7624
7625                 r_symndx = ELF64_R_SYM (rel->r_info);
7626                 if (!get_sym_h (&h, &sym, &sym_sec, &tls_maskp, &local_syms,
7627                                 r_symndx, ibfd))
7628                   {
7629                     if (elf_section_data (sec)->relocs != relstart)
7630                       free (relstart);
7631                     if (local_syms != NULL
7632                         && symtab_hdr->contents != (bfd_byte *) local_syms)
7633                       free (local_syms);
7634                     return FALSE;
7635                   }
7636
7637                 if (sym_sec != NULL && sym_sec->output_section != NULL)
7638                   {
7639                     bfd_vma from, to;
7640                     if (h != NULL)
7641                       to = h->root.u.def.value;
7642                     else
7643                       to = sym->st_value;
7644                     to += (rel->r_addend
7645                            + sym_sec->output_offset
7646                            + sym_sec->output_section->vma);
7647                     from = (rel->r_offset
7648                             + sec->output_offset
7649                             + sec->output_section->vma);
7650                     if (to - from + limit < 2 * limit
7651                         && !(r_type == R_PPC64_PLTCALL_NOTOC
7652                              && (((h ? h->other : sym->st_other)
7653                                   & STO_PPC64_LOCAL_MASK)
7654                                  > 1 << STO_PPC64_LOCAL_BIT)))
7655                       *tls_maskp &= ~PLT_KEEP;
7656                   }
7657               }
7658             if (elf_section_data (sec)->relocs != relstart)
7659               free (relstart);
7660           }
7661
7662       if (local_syms != NULL
7663           && symtab_hdr->contents != (unsigned char *) local_syms)
7664         {
7665           if (!info->keep_memory)
7666             free (local_syms);
7667           else
7668             symtab_hdr->contents = (unsigned char *) local_syms;
7669         }
7670     }
7671
7672   return TRUE;
7673 }
7674
7675 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7676
7677 asection *
7678 ppc64_elf_tls_setup (struct bfd_link_info *info)
7679 {
7680   struct ppc_link_hash_table *htab;
7681   struct elf_link_hash_entry *tga, *tga_fd, *desc, *desc_fd;
7682
7683   htab = ppc_hash_table (info);
7684   if (htab == NULL)
7685     return NULL;
7686
7687   if (abiversion (info->output_bfd) == 1)
7688     htab->opd_abi = 1;
7689
7690   if (htab->params->no_multi_toc)
7691     htab->do_multi_toc = 0;
7692   else if (!htab->do_multi_toc)
7693     htab->params->no_multi_toc = 1;
7694
7695   /* Default to --no-plt-localentry, as this option can cause problems
7696      with symbol interposition.  For example, glibc libpthread.so and
7697      libc.so duplicate many pthread symbols, with a fallback
7698      implementation in libc.so.  In some cases the fallback does more
7699      work than the pthread implementation.  __pthread_condattr_destroy
7700      is one such symbol: the libpthread.so implementation is
7701      localentry:0 while the libc.so implementation is localentry:8.
7702      An app that "cleverly" uses dlopen to only load necessary
7703      libraries at runtime may omit loading libpthread.so when not
7704      running multi-threaded, which then results in the libc.so
7705      fallback symbols being used and ld.so complaining.  Now there
7706      are workarounds in ld (see non_zero_localentry) to detect the
7707      pthread situation, but that may not be the only case where
7708      --plt-localentry can cause trouble.  */
7709   if (htab->params->plt_localentry0 < 0)
7710     htab->params->plt_localentry0 = 0;
7711   if (htab->params->plt_localentry0
7712       && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
7713                                FALSE, FALSE, FALSE) == NULL)
7714     _bfd_error_handler
7715       (_("warning: --plt-localentry is especially dangerous without "
7716          "ld.so support to detect ABI violations"));
7717
7718   tga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7719                               FALSE, FALSE, TRUE);
7720   htab->tls_get_addr = ppc_elf_hash_entry (tga);
7721
7722   /* Move dynamic linking info to the function descriptor sym.  */
7723   if (tga != NULL)
7724     func_desc_adjust (tga, info);
7725   tga_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7726                                  FALSE, FALSE, TRUE);
7727   htab->tls_get_addr_fd = ppc_elf_hash_entry (tga_fd);
7728
7729   desc = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_desc",
7730                                FALSE, FALSE, TRUE);
7731   htab->tga_desc = ppc_elf_hash_entry (desc);
7732   if (desc != NULL)
7733     func_desc_adjust (desc, info);
7734   desc_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_desc",
7735                                   FALSE, FALSE, TRUE);
7736   htab->tga_desc_fd = ppc_elf_hash_entry (desc_fd);
7737
7738   if (htab->params->tls_get_addr_opt)
7739     {
7740       struct elf_link_hash_entry *opt, *opt_fd;
7741
7742       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7743                                   FALSE, FALSE, TRUE);
7744       if (opt != NULL)
7745         func_desc_adjust (opt, info);
7746       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7747                                      FALSE, FALSE, TRUE);
7748       if (opt_fd != NULL
7749           && (opt_fd->root.type == bfd_link_hash_defined
7750               || opt_fd->root.type == bfd_link_hash_defweak))
7751         {
7752           /* If glibc supports an optimized __tls_get_addr call stub,
7753              signalled by the presence of __tls_get_addr_opt, and we'll
7754              be calling __tls_get_addr via a plt call stub, then
7755              make __tls_get_addr point to __tls_get_addr_opt.  */
7756           if (!(htab->elf.dynamic_sections_created
7757                 && tga_fd != NULL
7758                 && (tga_fd->type == STT_FUNC
7759                     || tga_fd->needs_plt)
7760                 && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7761                      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd))))
7762             tga_fd = NULL;
7763           if (!(htab->elf.dynamic_sections_created
7764                 && desc_fd != NULL
7765                 && (desc_fd->type == STT_FUNC
7766                     || desc_fd->needs_plt)
7767                 && !(SYMBOL_CALLS_LOCAL (info, desc_fd)
7768                      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, desc_fd))))
7769             desc_fd = NULL;
7770
7771           if (tga_fd != NULL || desc_fd != NULL)
7772             {
7773               struct plt_entry *ent = NULL;
7774
7775               if (tga_fd != NULL)
7776                 for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7777                   if (ent->plt.refcount > 0)
7778                     break;
7779               if (ent == NULL && desc_fd != NULL)
7780                 for (ent = desc_fd->plt.plist; ent != NULL; ent = ent->next)
7781                   if (ent->plt.refcount > 0)
7782                     break;
7783               if (ent != NULL)
7784                 {
7785                   if (tga_fd != NULL)
7786                     {
7787                       tga_fd->root.type = bfd_link_hash_indirect;
7788                       tga_fd->root.u.i.link = &opt_fd->root;
7789                       tga_fd->root.u.i.warning = NULL;
7790                       ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7791                     }
7792                   if (desc_fd != NULL)
7793                     {
7794                       desc_fd->root.type = bfd_link_hash_indirect;
7795                       desc_fd->root.u.i.link = &opt_fd->root;
7796                       desc_fd->root.u.i.warning = NULL;
7797                       ppc64_elf_copy_indirect_symbol (info, opt_fd, desc_fd);
7798                     }
7799                   opt_fd->mark = 1;
7800                   if (opt_fd->dynindx != -1)
7801                     {
7802                       /* Use __tls_get_addr_opt in dynamic relocations.  */
7803                       opt_fd->dynindx = -1;
7804                       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7805                                               opt_fd->dynstr_index);
7806                       if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7807                         return NULL;
7808                     }
7809                   if (tga_fd != NULL)
7810                     {
7811                       htab->tls_get_addr_fd = ppc_elf_hash_entry (opt_fd);
7812                       tga = &htab->tls_get_addr->elf;
7813                       if (opt != NULL && tga != NULL)
7814                         {
7815                           tga->root.type = bfd_link_hash_indirect;
7816                           tga->root.u.i.link = &opt->root;
7817                           tga->root.u.i.warning = NULL;
7818                           ppc64_elf_copy_indirect_symbol (info, opt, tga);
7819                           opt->mark = 1;
7820                           _bfd_elf_link_hash_hide_symbol (info, opt,
7821                                                           tga->forced_local);
7822                           htab->tls_get_addr = ppc_elf_hash_entry (opt);
7823                         }
7824                       htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7825                       htab->tls_get_addr_fd->is_func_descriptor = 1;
7826                       if (htab->tls_get_addr != NULL)
7827                         {
7828                           htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7829                           htab->tls_get_addr->is_func = 1;
7830                         }
7831                     }
7832                   if (desc_fd != NULL)
7833                     {
7834                       htab->tga_desc_fd = ppc_elf_hash_entry (opt_fd);
7835                       if (opt != NULL && desc != NULL)
7836                         {
7837                           desc->root.type = bfd_link_hash_indirect;
7838                           desc->root.u.i.link = &opt->root;
7839                           desc->root.u.i.warning = NULL;
7840                           ppc64_elf_copy_indirect_symbol (info, opt, desc);
7841                           opt->mark = 1;
7842                           _bfd_elf_link_hash_hide_symbol (info, opt,
7843                                                           desc->forced_local);
7844                           htab->tga_desc = ppc_elf_hash_entry (opt);
7845                         }
7846                       htab->tga_desc_fd->oh = htab->tga_desc;
7847                       htab->tga_desc_fd->is_func_descriptor = 1;
7848                       if (htab->tga_desc != NULL)
7849                         {
7850                           htab->tga_desc->oh = htab->tga_desc_fd;
7851                           htab->tga_desc->is_func = 1;
7852                         }
7853                     }
7854                 }
7855             }
7856         }
7857       else if (htab->params->tls_get_addr_opt < 0)
7858         htab->params->tls_get_addr_opt = 0;
7859     }
7860
7861   if (htab->tga_desc_fd != NULL
7862       && htab->params->tls_get_addr_opt
7863       && htab->params->no_tls_get_addr_regsave == -1)
7864     htab->params->no_tls_get_addr_regsave = 0;
7865
7866   return _bfd_elf_tls_setup (info->output_bfd, info);
7867 }
7868
7869 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7870    any of HASH1, HASH2, HASH3, or HASH4.  */
7871
7872 static bfd_boolean
7873 branch_reloc_hash_match (const bfd *ibfd,
7874                          const Elf_Internal_Rela *rel,
7875                          const struct ppc_link_hash_entry *hash1,
7876                          const struct ppc_link_hash_entry *hash2,
7877                          const struct ppc_link_hash_entry *hash3,
7878                          const struct ppc_link_hash_entry *hash4)
7879 {
7880   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7881   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7882   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7883
7884   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7885     {
7886       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7887       struct elf_link_hash_entry *h;
7888
7889       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7890       h = elf_follow_link (h);
7891       if (h == &hash1->elf || h == &hash2->elf
7892           || h == &hash3->elf || h == &hash4->elf)
7893         return TRUE;
7894     }
7895   return FALSE;
7896 }
7897
7898 /* Run through all the TLS relocs looking for optimization
7899    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7900    a preliminary section layout so that we know the TLS segment
7901    offsets.  We can't optimize earlier because some optimizations need
7902    to know the tp offset, and we need to optimize before allocating
7903    dynamic relocations.  */
7904
7905 bfd_boolean
7906 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7907 {
7908   bfd *ibfd;
7909   asection *sec;
7910   struct ppc_link_hash_table *htab;
7911   unsigned char *toc_ref;
7912   int pass;
7913
7914   if (!bfd_link_executable (info))
7915     return TRUE;
7916
7917   htab = ppc_hash_table (info);
7918   if (htab == NULL)
7919     return FALSE;
7920
7921   /* Make two passes over the relocs.  On the first pass, mark toc
7922      entries involved with tls relocs, and check that tls relocs
7923      involved in setting up a tls_get_addr call are indeed followed by
7924      such a call.  If they are not, we can't do any tls optimization.
7925      On the second pass twiddle tls_mask flags to notify
7926      relocate_section that optimization can be done, and adjust got
7927      and plt refcounts.  */
7928   toc_ref = NULL;
7929   for (pass = 0; pass < 2; ++pass)
7930     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7931       {
7932         Elf_Internal_Sym *locsyms = NULL;
7933         asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7934
7935         for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7936           if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7937             {
7938               Elf_Internal_Rela *relstart, *rel, *relend;
7939               bfd_boolean found_tls_get_addr_arg = 0;
7940
7941               /* Read the relocations.  */
7942               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7943                                                     info->keep_memory);
7944               if (relstart == NULL)
7945                 {
7946                   free (toc_ref);
7947                   return FALSE;
7948                 }
7949
7950               relend = relstart + sec->reloc_count;
7951               for (rel = relstart; rel < relend; rel++)
7952                 {
7953                   enum elf_ppc64_reloc_type r_type;
7954                   unsigned long r_symndx;
7955                   struct elf_link_hash_entry *h;
7956                   Elf_Internal_Sym *sym;
7957                   asection *sym_sec;
7958                   unsigned char *tls_mask;
7959                   unsigned int tls_set, tls_clear, tls_type = 0;
7960                   bfd_vma value;
7961                   bfd_boolean ok_tprel, is_local;
7962                   long toc_ref_index = 0;
7963                   int expecting_tls_get_addr = 0;
7964                   bfd_boolean ret = FALSE;
7965
7966                   r_symndx = ELF64_R_SYM (rel->r_info);
7967                   if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7968                                   r_symndx, ibfd))
7969                     {
7970                     err_free_rel:
7971                       if (elf_section_data (sec)->relocs != relstart)
7972                         free (relstart);
7973                       if (toc_ref != NULL)
7974                         free (toc_ref);
7975                       if (locsyms != NULL
7976                           && (elf_symtab_hdr (ibfd).contents
7977                               != (unsigned char *) locsyms))
7978                         free (locsyms);
7979                       return ret;
7980                     }
7981
7982                   if (h != NULL)
7983                     {
7984                       if (h->root.type == bfd_link_hash_defined
7985                           || h->root.type == bfd_link_hash_defweak)
7986                         value = h->root.u.def.value;
7987                       else if (h->root.type == bfd_link_hash_undefweak)
7988                         value = 0;
7989                       else
7990                         {
7991                           found_tls_get_addr_arg = 0;
7992                           continue;
7993                         }
7994                     }
7995                   else
7996                     /* Symbols referenced by TLS relocs must be of type
7997                        STT_TLS.  So no need for .opd local sym adjust.  */
7998                     value = sym->st_value;
7999
8000                   ok_tprel = FALSE;
8001                   is_local = SYMBOL_REFERENCES_LOCAL (info, h);
8002                   if (is_local)
8003                     {
8004                       if (h != NULL
8005                           && h->root.type == bfd_link_hash_undefweak)
8006                         ok_tprel = TRUE;
8007                       else if (sym_sec != NULL
8008                                && sym_sec->output_section != NULL)
8009                         {
8010                           value += sym_sec->output_offset;
8011                           value += sym_sec->output_section->vma;
8012                           value -= htab->elf.tls_sec->vma + TP_OFFSET;
8013                           /* Note that even though the prefix insns
8014                              allow a 1<<33 offset we use the same test
8015                              as for addis;addi.  There may be a mix of
8016                              pcrel and non-pcrel code and the decision
8017                              to optimise is per symbol, not per TLS
8018                              sequence.  */
8019                           ok_tprel = value + 0x80008000ULL < 1ULL << 32;
8020                         }
8021                     }
8022
8023                   r_type = ELF64_R_TYPE (rel->r_info);
8024                   /* If this section has old-style __tls_get_addr calls
8025                      without marker relocs, then check that each
8026                      __tls_get_addr call reloc is preceded by a reloc
8027                      that conceivably belongs to the __tls_get_addr arg
8028                      setup insn.  If we don't find matching arg setup
8029                      relocs, don't do any tls optimization.  */
8030                   if (pass == 0
8031                       && sec->nomark_tls_get_addr
8032                       && h != NULL
8033                       && is_tls_get_addr (h, htab)
8034                       && !found_tls_get_addr_arg
8035                       && is_branch_reloc (r_type))
8036                     {
8037                       info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
8038                                                 "TLS optimization disabled\n"),
8039                                               ibfd, sec, rel->r_offset);
8040                       ret = TRUE;
8041                       goto err_free_rel;
8042                     }
8043
8044                   found_tls_get_addr_arg = 0;
8045                   switch (r_type)
8046                     {
8047                     case R_PPC64_GOT_TLSLD16:
8048                     case R_PPC64_GOT_TLSLD16_LO:
8049                     case R_PPC64_GOT_TLSLD34:
8050                       expecting_tls_get_addr = 1;
8051                       found_tls_get_addr_arg = 1;
8052                       /* Fall through.  */
8053
8054                     case R_PPC64_GOT_TLSLD16_HI:
8055                     case R_PPC64_GOT_TLSLD16_HA:
8056                       /* These relocs should never be against a symbol
8057                          defined in a shared lib.  Leave them alone if
8058                          that turns out to be the case.  */
8059                       if (!is_local)
8060                         continue;
8061
8062                       /* LD -> LE */
8063                       tls_set = 0;
8064                       tls_clear = TLS_LD;
8065                       tls_type = TLS_TLS | TLS_LD;
8066                       break;
8067
8068                     case R_PPC64_GOT_TLSGD16:
8069                     case R_PPC64_GOT_TLSGD16_LO:
8070                     case R_PPC64_GOT_TLSGD34:
8071                       expecting_tls_get_addr = 1;
8072                       found_tls_get_addr_arg = 1;
8073                       /* Fall through. */
8074
8075                     case R_PPC64_GOT_TLSGD16_HI:
8076                     case R_PPC64_GOT_TLSGD16_HA:
8077                       if (ok_tprel)
8078                         /* GD -> LE */
8079                         tls_set = 0;
8080                       else
8081                         /* GD -> IE */
8082                         tls_set = TLS_TLS | TLS_GDIE;
8083                       tls_clear = TLS_GD;
8084                       tls_type = TLS_TLS | TLS_GD;
8085                       break;
8086
8087                     case R_PPC64_GOT_TPREL34:
8088                     case R_PPC64_GOT_TPREL16_DS:
8089                     case R_PPC64_GOT_TPREL16_LO_DS:
8090                     case R_PPC64_GOT_TPREL16_HI:
8091                     case R_PPC64_GOT_TPREL16_HA:
8092                       if (ok_tprel)
8093                         {
8094                           /* IE -> LE */
8095                           tls_set = 0;
8096                           tls_clear = TLS_TPREL;
8097                           tls_type = TLS_TLS | TLS_TPREL;
8098                           break;
8099                         }
8100                       continue;
8101
8102                     case R_PPC64_TLSLD:
8103                       if (!is_local)
8104                         continue;
8105                       /* Fall through.  */
8106                     case R_PPC64_TLSGD:
8107                       if (rel + 1 < relend
8108                           && is_plt_seq_reloc (ELF64_R_TYPE (rel[1].r_info)))
8109                         {
8110                           if (pass != 0
8111                               && (ELF64_R_TYPE (rel[1].r_info)
8112                                   != R_PPC64_PLTSEQ)
8113                               && (ELF64_R_TYPE (rel[1].r_info)
8114                                   != R_PPC64_PLTSEQ_NOTOC))
8115                             {
8116                               r_symndx = ELF64_R_SYM (rel[1].r_info);
8117                               if (!get_sym_h (&h, NULL, NULL, NULL, &locsyms,
8118                                               r_symndx, ibfd))
8119                                 goto err_free_rel;
8120                               if (h != NULL)
8121                                 {
8122                                   struct plt_entry *ent = NULL;
8123
8124                                   for (ent = h->plt.plist;
8125                                        ent != NULL;
8126                                        ent = ent->next)
8127                                     if (ent->addend == rel[1].r_addend)
8128                                       break;
8129
8130                                   if (ent != NULL
8131                                       && ent->plt.refcount > 0)
8132                                     ent->plt.refcount -= 1;
8133                                 }
8134                             }
8135                           continue;
8136                         }
8137                       found_tls_get_addr_arg = 1;
8138                       /* Fall through.  */
8139
8140                     case R_PPC64_TLS:
8141                     case R_PPC64_TOC16:
8142                     case R_PPC64_TOC16_LO:
8143                       if (sym_sec == NULL || sym_sec != toc)
8144                         continue;
8145
8146                       /* Mark this toc entry as referenced by a TLS
8147                          code sequence.  We can do that now in the
8148                          case of R_PPC64_TLS, and after checking for
8149                          tls_get_addr for the TOC16 relocs.  */
8150                       if (toc_ref == NULL)
8151                         toc_ref
8152                           = bfd_zmalloc (toc->output_section->rawsize / 8);
8153                       if (toc_ref == NULL)
8154                         goto err_free_rel;
8155
8156                       if (h != NULL)
8157                         value = h->root.u.def.value;
8158                       else
8159                         value = sym->st_value;
8160                       value += rel->r_addend;
8161                       if (value % 8 != 0)
8162                         continue;
8163                       BFD_ASSERT (value < toc->size
8164                                   && toc->output_offset % 8 == 0);
8165                       toc_ref_index = (value + toc->output_offset) / 8;
8166                       if (r_type == R_PPC64_TLS
8167                           || r_type == R_PPC64_TLSGD
8168                           || r_type == R_PPC64_TLSLD)
8169                         {
8170                           toc_ref[toc_ref_index] = 1;
8171                           continue;
8172                         }
8173
8174                       if (pass != 0 && toc_ref[toc_ref_index] == 0)
8175                         continue;
8176
8177                       tls_set = 0;
8178                       tls_clear = 0;
8179                       expecting_tls_get_addr = 2;
8180                       break;
8181
8182                     case R_PPC64_TPREL64:
8183                       if (pass == 0
8184                           || sec != toc
8185                           || toc_ref == NULL
8186                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8187                         continue;
8188                       if (ok_tprel)
8189                         {
8190                           /* IE -> LE */
8191                           tls_set = TLS_EXPLICIT;
8192                           tls_clear = TLS_TPREL;
8193                           break;
8194                         }
8195                       continue;
8196
8197                     case R_PPC64_DTPMOD64:
8198                       if (pass == 0
8199                           || sec != toc
8200                           || toc_ref == NULL
8201                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8202                         continue;
8203                       if (rel + 1 < relend
8204                           && (rel[1].r_info
8205                               == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8206                           && rel[1].r_offset == rel->r_offset + 8)
8207                         {
8208                           if (ok_tprel)
8209                             /* GD -> LE */
8210                             tls_set = TLS_EXPLICIT | TLS_GD;
8211                           else
8212                             /* GD -> IE */
8213                             tls_set = TLS_EXPLICIT | TLS_GD | TLS_GDIE;
8214                           tls_clear = TLS_GD;
8215                         }
8216                       else
8217                         {
8218                           if (!is_local)
8219                             continue;
8220
8221                           /* LD -> LE */
8222                           tls_set = TLS_EXPLICIT;
8223                           tls_clear = TLS_LD;
8224                         }
8225                       break;
8226
8227                     default:
8228                       continue;
8229                     }
8230
8231                   if (pass == 0)
8232                     {
8233                       if (!expecting_tls_get_addr
8234                           || !sec->nomark_tls_get_addr)
8235                         continue;
8236
8237                       if (rel + 1 < relend
8238                           && branch_reloc_hash_match (ibfd, rel + 1,
8239                                                       htab->tls_get_addr_fd,
8240                                                       htab->tga_desc_fd,
8241                                                       htab->tls_get_addr,
8242                                                       htab->tga_desc))
8243                         {
8244                           if (expecting_tls_get_addr == 2)
8245                             {
8246                               /* Check for toc tls entries.  */
8247                               unsigned char *toc_tls;
8248                               int retval;
8249
8250                               retval = get_tls_mask (&toc_tls, NULL, NULL,
8251                                                      &locsyms,
8252                                                      rel, ibfd);
8253                               if (retval == 0)
8254                                 goto err_free_rel;
8255                               if (toc_tls != NULL)
8256                                 {
8257                                   if ((*toc_tls & TLS_TLS) != 0
8258                                       && ((*toc_tls & (TLS_GD | TLS_LD)) != 0))
8259                                     found_tls_get_addr_arg = 1;
8260                                   if (retval > 1)
8261                                     toc_ref[toc_ref_index] = 1;
8262                                 }
8263                             }
8264                           continue;
8265                         }
8266
8267                       /* Uh oh, we didn't find the expected call.  We
8268                          could just mark this symbol to exclude it
8269                          from tls optimization but it's safer to skip
8270                          the entire optimization.  */
8271                       /* xgettext:c-format */
8272                       info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8273                                                 "TLS optimization disabled\n"),
8274                                               ibfd, sec, rel->r_offset);
8275                       ret = TRUE;
8276                       goto err_free_rel;
8277                     }
8278
8279                   /* If we don't have old-style __tls_get_addr calls
8280                      without TLSGD/TLSLD marker relocs, and we haven't
8281                      found a new-style __tls_get_addr call with a
8282                      marker for this symbol, then we either have a
8283                      broken object file or an -mlongcall style
8284                      indirect call to __tls_get_addr without a marker.
8285                      Disable optimization in this case.  */
8286                   if ((tls_clear & (TLS_GD | TLS_LD)) != 0
8287                       && (tls_set & TLS_EXPLICIT) == 0
8288                       && !sec->nomark_tls_get_addr
8289                       && ((*tls_mask & (TLS_TLS | TLS_MARK))
8290                           != (TLS_TLS | TLS_MARK)))
8291                     continue;
8292
8293                   if (expecting_tls_get_addr == 1 + !sec->nomark_tls_get_addr)
8294                     {
8295                       struct plt_entry *ent = NULL;
8296
8297                       if (htab->tls_get_addr_fd != NULL)
8298                         for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8299                              ent != NULL;
8300                              ent = ent->next)
8301                           if (ent->addend == 0)
8302                             break;
8303
8304                       if (ent == NULL && htab->tga_desc_fd != NULL)
8305                         for (ent = htab->tga_desc_fd->elf.plt.plist;
8306                              ent != NULL;
8307                              ent = ent->next)
8308                           if (ent->addend == 0)
8309                             break;
8310
8311                       if (ent == NULL && htab->tls_get_addr != NULL)
8312                         for (ent = htab->tls_get_addr->elf.plt.plist;
8313                              ent != NULL;
8314                              ent = ent->next)
8315                           if (ent->addend == 0)
8316                             break;
8317
8318                       if (ent == NULL && htab->tga_desc != NULL)
8319                         for (ent = htab->tga_desc->elf.plt.plist;
8320                              ent != NULL;
8321                              ent = ent->next)
8322                           if (ent->addend == 0)
8323                             break;
8324
8325                       if (ent != NULL
8326                           && ent->plt.refcount > 0)
8327                         ent->plt.refcount -= 1;
8328                     }
8329
8330                   if (tls_clear == 0)
8331                     continue;
8332
8333                   if ((tls_set & TLS_EXPLICIT) == 0)
8334                     {
8335                       struct got_entry *ent;
8336
8337                       /* Adjust got entry for this reloc.  */
8338                       if (h != NULL)
8339                         ent = h->got.glist;
8340                       else
8341                         ent = elf_local_got_ents (ibfd)[r_symndx];
8342
8343                       for (; ent != NULL; ent = ent->next)
8344                         if (ent->addend == rel->r_addend
8345                             && ent->owner == ibfd
8346                             && ent->tls_type == tls_type)
8347                           break;
8348                       if (ent == NULL)
8349                         abort ();
8350
8351                       if (tls_set == 0)
8352                         {
8353                           /* We managed to get rid of a got entry.  */
8354                           if (ent->got.refcount > 0)
8355                             ent->got.refcount -= 1;
8356                         }
8357                     }
8358                   else
8359                     {
8360                       /* If we got rid of a DTPMOD/DTPREL reloc pair then
8361                          we'll lose one or two dyn relocs.  */
8362                       if (!dec_dynrel_count (rel->r_info, sec, info,
8363                                              NULL, h, sym))
8364                         return FALSE;
8365
8366                       if (tls_set == (TLS_EXPLICIT | TLS_GD))
8367                         {
8368                           if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8369                                                  NULL, h, sym))
8370                             return FALSE;
8371                         }
8372                     }
8373
8374                   *tls_mask |= tls_set & 0xff;
8375                   *tls_mask &= ~tls_clear;
8376                 }
8377
8378               if (elf_section_data (sec)->relocs != relstart)
8379                 free (relstart);
8380             }
8381
8382         if (locsyms != NULL
8383             && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8384           {
8385             if (!info->keep_memory)
8386               free (locsyms);
8387             else
8388               elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8389           }
8390       }
8391
8392   if (toc_ref != NULL)
8393     free (toc_ref);
8394   htab->do_tls_opt = 1;
8395   return TRUE;
8396 }
8397
8398 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8399    the values of any global symbols in a toc section that has been
8400    edited.  Globals in toc sections should be a rarity, so this function
8401    sets a flag if any are found in toc sections other than the one just
8402    edited, so that further hash table traversals can be avoided.  */
8403
8404 struct adjust_toc_info
8405 {
8406   asection *toc;
8407   unsigned long *skip;
8408   bfd_boolean global_toc_syms;
8409 };
8410
8411 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8412
8413 static bfd_boolean
8414 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8415 {
8416   struct ppc_link_hash_entry *eh;
8417   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8418   unsigned long i;
8419
8420   if (h->root.type != bfd_link_hash_defined
8421       && h->root.type != bfd_link_hash_defweak)
8422     return TRUE;
8423
8424   eh = ppc_elf_hash_entry (h);
8425   if (eh->adjust_done)
8426     return TRUE;
8427
8428   if (eh->elf.root.u.def.section == toc_inf->toc)
8429     {
8430       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8431         i = toc_inf->toc->rawsize >> 3;
8432       else
8433         i = eh->elf.root.u.def.value >> 3;
8434
8435       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8436         {
8437           _bfd_error_handler
8438             (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8439           do
8440             ++i;
8441           while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8442           eh->elf.root.u.def.value = (bfd_vma) i << 3;
8443         }
8444
8445       eh->elf.root.u.def.value -= toc_inf->skip[i];
8446       eh->adjust_done = 1;
8447     }
8448   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8449     toc_inf->global_toc_syms = TRUE;
8450
8451   return TRUE;
8452 }
8453
8454 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8455    on a _LO variety toc/got reloc.  */
8456
8457 static bfd_boolean
8458 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8459 {
8460   return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */
8461           || (insn & (0x3fu << 26)) == 14u << 26 /* addi */
8462           || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
8463           || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
8464           || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
8465           || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
8466           || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
8467           || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
8468           || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
8469           || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
8470           || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
8471           || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
8472           || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
8473           || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
8474           || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
8475           || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */
8476           || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8477               /* Exclude lfqu by testing reloc.  If relocs are ever
8478                  defined for the reduced D field in psq_lu then those
8479                  will need testing too.  */
8480               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8481           || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */
8482               && (insn & 1) == 0)
8483           || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */
8484           || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8485               /* Exclude stfqu.  psq_stu as above for psq_lu.  */
8486               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8487           || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */
8488               && (insn & 1) == 0));
8489 }
8490
8491 /* PCREL_OPT in one instance flags to the linker that a pair of insns:
8492      pld ra,symbol@got@pcrel
8493      load/store rt,off(ra)
8494    or
8495      pla ra,symbol@pcrel
8496      load/store rt,off(ra)
8497    may be translated to
8498      pload/pstore rt,symbol+off@pcrel
8499      nop.
8500    This function returns true if the optimization is possible, placing
8501    the prefix insn in *PINSN1, a NOP in *PINSN2 and the offset in *POFF.
8502
8503    On entry to this function, the linker has already determined that
8504    the pld can be replaced with pla: *PINSN1 is that pla insn,
8505    while *PINSN2 is the second instruction.  */
8506
8507 static bfd_boolean
8508 xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2, bfd_signed_vma *poff)
8509 {
8510   uint64_t insn1 = *pinsn1;
8511   uint64_t insn2 = *pinsn2;
8512   bfd_signed_vma off;
8513
8514   if ((insn2 & (63ULL << 58)) == 1ULL << 58)
8515     {
8516       /* Check that regs match.  */
8517       if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8518         return FALSE;
8519
8520       /* P8LS or PMLS form, non-pcrel.  */
8521       if ((insn2 & (-1ULL << 50) & ~(1ULL << 56)) != (1ULL << 58))
8522         return FALSE;
8523
8524       *pinsn1 = (insn2 & ~(31 << 16) & ~0x3ffff0000ffffULL) | (1ULL << 52);
8525       *pinsn2 = PNOP;
8526       off = ((insn2 >> 16) & 0x3ffff0000ULL) | (insn2 & 0xffff);
8527       *poff = (off ^ 0x200000000ULL) - 0x200000000ULL;
8528       return TRUE;
8529     }
8530
8531   insn2 >>= 32;
8532
8533   /* Check that regs match.  */
8534   if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8535     return FALSE;
8536
8537   switch ((insn2 >> 26) & 63)
8538     {
8539     default:
8540       return FALSE;
8541
8542     case 32: /* lwz */
8543     case 34: /* lbz */
8544     case 36: /* stw */
8545     case 38: /* stb */
8546     case 40: /* lhz */
8547     case 42: /* lha */
8548     case 44: /* sth */
8549     case 48: /* lfs */
8550     case 50: /* lfd */
8551     case 52: /* stfs */
8552     case 54: /* stfd */
8553       /* These are the PMLS cases, where we just need to tack a prefix
8554          on the insn.  */
8555       insn1 = ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
8556                | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8557       off = insn2 & 0xffff;
8558       break;
8559
8560     case 58: /* lwa, ld */
8561       if ((insn2 & 1) != 0)
8562         return FALSE;
8563       insn1 = ((1ULL << 58) | (1ULL << 52)
8564                | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
8565                | (insn2 & (31ULL << 21)));
8566       off = insn2 & 0xfffc;
8567       break;
8568
8569     case 57: /* lxsd, lxssp */
8570       if ((insn2 & 3) < 2)
8571         return FALSE;
8572       insn1 = ((1ULL << 58) | (1ULL << 52)
8573                | ((40ULL | (insn2 & 3)) << 26)
8574                | (insn2 & (31ULL << 21)));
8575       off = insn2 & 0xfffc;
8576       break;
8577
8578     case 61: /* stxsd, stxssp, lxv, stxv  */
8579       if ((insn2 & 3) == 0)
8580         return FALSE;
8581       else if ((insn2 & 3) >= 2)
8582         {
8583           insn1 = ((1ULL << 58) | (1ULL << 52)
8584                    | ((44ULL | (insn2 & 3)) << 26)
8585                    | (insn2 & (31ULL << 21)));
8586           off = insn2 & 0xfffc;
8587         }
8588       else
8589         {
8590           insn1 = ((1ULL << 58) | (1ULL << 52)
8591                    | ((50ULL | (insn2 & 4) | ((insn2 & 8) >> 3)) << 26)
8592                    | (insn2 & (31ULL << 21)));
8593           off = insn2 & 0xfff0;
8594         }
8595       break;
8596
8597     case 56: /* lq */
8598       insn1 = ((1ULL << 58) | (1ULL << 52)
8599                | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8600       off = insn2 & 0xffff;
8601       break;
8602
8603     case 62: /* std, stq */
8604       if ((insn2 & 1) != 0)
8605         return FALSE;
8606       insn1 = ((1ULL << 58) | (1ULL << 52)
8607                | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
8608                | (insn2 & (31ULL << 21)));
8609       off = insn2 & 0xfffc;
8610       break;
8611     }
8612
8613   *pinsn1 = insn1;
8614   *pinsn2 = (uint64_t) NOP << 32;
8615   *poff = (off ^ 0x8000) - 0x8000;
8616   return TRUE;
8617 }
8618
8619 /* Examine all relocs referencing .toc sections in order to remove
8620    unused .toc entries.  */
8621
8622 bfd_boolean
8623 ppc64_elf_edit_toc (struct bfd_link_info *info)
8624 {
8625   bfd *ibfd;
8626   struct adjust_toc_info toc_inf;
8627   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8628
8629   htab->do_toc_opt = 1;
8630   toc_inf.global_toc_syms = TRUE;
8631   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8632     {
8633       asection *toc, *sec;
8634       Elf_Internal_Shdr *symtab_hdr;
8635       Elf_Internal_Sym *local_syms;
8636       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8637       unsigned long *skip, *drop;
8638       unsigned char *used;
8639       unsigned char *keep, last, some_unused;
8640
8641       if (!is_ppc64_elf (ibfd))
8642         continue;
8643
8644       toc = bfd_get_section_by_name (ibfd, ".toc");
8645       if (toc == NULL
8646           || toc->size == 0
8647           || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8648           || discarded_section (toc))
8649         continue;
8650
8651       toc_relocs = NULL;
8652       local_syms = NULL;
8653       symtab_hdr = &elf_symtab_hdr (ibfd);
8654
8655       /* Look at sections dropped from the final link.  */
8656       skip = NULL;
8657       relstart = NULL;
8658       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8659         {
8660           if (sec->reloc_count == 0
8661               || !discarded_section (sec)
8662               || get_opd_info (sec)
8663               || (sec->flags & SEC_ALLOC) == 0
8664               || (sec->flags & SEC_DEBUGGING) != 0)
8665             continue;
8666
8667           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8668           if (relstart == NULL)
8669             goto error_ret;
8670
8671           /* Run through the relocs to see which toc entries might be
8672              unused.  */
8673           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8674             {
8675               enum elf_ppc64_reloc_type r_type;
8676               unsigned long r_symndx;
8677               asection *sym_sec;
8678               struct elf_link_hash_entry *h;
8679               Elf_Internal_Sym *sym;
8680               bfd_vma val;
8681
8682               r_type = ELF64_R_TYPE (rel->r_info);
8683               switch (r_type)
8684                 {
8685                 default:
8686                   continue;
8687
8688                 case R_PPC64_TOC16:
8689                 case R_PPC64_TOC16_LO:
8690                 case R_PPC64_TOC16_HI:
8691                 case R_PPC64_TOC16_HA:
8692                 case R_PPC64_TOC16_DS:
8693                 case R_PPC64_TOC16_LO_DS:
8694                   break;
8695                 }
8696
8697               r_symndx = ELF64_R_SYM (rel->r_info);
8698               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8699                               r_symndx, ibfd))
8700                 goto error_ret;
8701
8702               if (sym_sec != toc)
8703                 continue;
8704
8705               if (h != NULL)
8706                 val = h->root.u.def.value;
8707               else
8708                 val = sym->st_value;
8709               val += rel->r_addend;
8710
8711               if (val >= toc->size)
8712                 continue;
8713
8714               /* Anything in the toc ought to be aligned to 8 bytes.
8715                  If not, don't mark as unused.  */
8716               if (val & 7)
8717                 continue;
8718
8719               if (skip == NULL)
8720                 {
8721                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8722                   if (skip == NULL)
8723                     goto error_ret;
8724                 }
8725
8726               skip[val >> 3] = ref_from_discarded;
8727             }
8728
8729           if (elf_section_data (sec)->relocs != relstart)
8730             free (relstart);
8731         }
8732
8733       /* For largetoc loads of address constants, we can convert
8734          .  addis rx,2,addr@got@ha
8735          .  ld ry,addr@got@l(rx)
8736          to
8737          .  addis rx,2,addr@toc@ha
8738          .  addi ry,rx,addr@toc@l
8739          when addr is within 2G of the toc pointer.  This then means
8740          that the word storing "addr" in the toc is no longer needed.  */
8741
8742       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8743           && toc->output_section->rawsize < (bfd_vma) 1 << 31
8744           && toc->reloc_count != 0)
8745         {
8746           /* Read toc relocs.  */
8747           toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8748                                                   info->keep_memory);
8749           if (toc_relocs == NULL)
8750             goto error_ret;
8751
8752           for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8753             {
8754               enum elf_ppc64_reloc_type r_type;
8755               unsigned long r_symndx;
8756               asection *sym_sec;
8757               struct elf_link_hash_entry *h;
8758               Elf_Internal_Sym *sym;
8759               bfd_vma val, addr;
8760
8761               r_type = ELF64_R_TYPE (rel->r_info);
8762               if (r_type != R_PPC64_ADDR64)
8763                 continue;
8764
8765               r_symndx = ELF64_R_SYM (rel->r_info);
8766               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8767                               r_symndx, ibfd))
8768                 goto error_ret;
8769
8770               if (sym_sec == NULL
8771                   || sym_sec->output_section == NULL
8772                   || discarded_section (sym_sec))
8773                 continue;
8774
8775               if (!SYMBOL_REFERENCES_LOCAL (info, h))
8776                 continue;
8777
8778               if (h != NULL)
8779                 {
8780                   if (h->type == STT_GNU_IFUNC)
8781                     continue;
8782                   val = h->root.u.def.value;
8783                 }
8784               else
8785                 {
8786                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8787                     continue;
8788                   val = sym->st_value;
8789                 }
8790               val += rel->r_addend;
8791               val += sym_sec->output_section->vma + sym_sec->output_offset;
8792
8793               /* We don't yet know the exact toc pointer value, but we
8794                  know it will be somewhere in the toc section.  Don't
8795                  optimize if the difference from any possible toc
8796                  pointer is outside [ff..f80008000, 7fff7fff].  */
8797               addr = toc->output_section->vma + TOC_BASE_OFF;
8798               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8799                 continue;
8800
8801               addr = toc->output_section->vma + toc->output_section->rawsize;
8802               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8803                 continue;
8804
8805               if (skip == NULL)
8806                 {
8807                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8808                   if (skip == NULL)
8809                     goto error_ret;
8810                 }
8811
8812               skip[rel->r_offset >> 3]
8813                 |= can_optimize | ((rel - toc_relocs) << 2);
8814             }
8815         }
8816
8817       if (skip == NULL)
8818         continue;
8819
8820       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8821       if (used == NULL)
8822         {
8823         error_ret:
8824           if (local_syms != NULL
8825               && symtab_hdr->contents != (unsigned char *) local_syms)
8826             free (local_syms);
8827           if (sec != NULL
8828               && relstart != NULL
8829               && elf_section_data (sec)->relocs != relstart)
8830             free (relstart);
8831           if (toc_relocs != NULL
8832               && elf_section_data (toc)->relocs != toc_relocs)
8833             free (toc_relocs);
8834           if (skip != NULL)
8835             free (skip);
8836           return FALSE;
8837         }
8838
8839       /* Now check all kept sections that might reference the toc.
8840          Check the toc itself last.  */
8841       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8842                   : ibfd->sections);
8843            sec != NULL;
8844            sec = (sec == toc ? NULL
8845                   : sec->next == NULL ? toc
8846                   : sec->next == toc && toc->next ? toc->next
8847                   : sec->next))
8848         {
8849           int repeat;
8850
8851           if (sec->reloc_count == 0
8852               || discarded_section (sec)
8853               || get_opd_info (sec)
8854               || (sec->flags & SEC_ALLOC) == 0
8855               || (sec->flags & SEC_DEBUGGING) != 0)
8856             continue;
8857
8858           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8859                                                 info->keep_memory);
8860           if (relstart == NULL)
8861             {
8862               free (used);
8863               goto error_ret;
8864             }
8865
8866           /* Mark toc entries referenced as used.  */
8867           do
8868             {
8869               repeat = 0;
8870               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8871                 {
8872                   enum elf_ppc64_reloc_type r_type;
8873                   unsigned long r_symndx;
8874                   asection *sym_sec;
8875                   struct elf_link_hash_entry *h;
8876                   Elf_Internal_Sym *sym;
8877                   bfd_vma val;
8878
8879                   r_type = ELF64_R_TYPE (rel->r_info);
8880                   switch (r_type)
8881                     {
8882                     case R_PPC64_TOC16:
8883                     case R_PPC64_TOC16_LO:
8884                     case R_PPC64_TOC16_HI:
8885                     case R_PPC64_TOC16_HA:
8886                     case R_PPC64_TOC16_DS:
8887                     case R_PPC64_TOC16_LO_DS:
8888                       /* In case we're taking addresses of toc entries.  */
8889                     case R_PPC64_ADDR64:
8890                       break;
8891
8892                     default:
8893                       continue;
8894                     }
8895
8896                   r_symndx = ELF64_R_SYM (rel->r_info);
8897                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8898                                   r_symndx, ibfd))
8899                     {
8900                       free (used);
8901                       goto error_ret;
8902                     }
8903
8904                   if (sym_sec != toc)
8905                     continue;
8906
8907                   if (h != NULL)
8908                     val = h->root.u.def.value;
8909                   else
8910                     val = sym->st_value;
8911                   val += rel->r_addend;
8912
8913                   if (val >= toc->size)
8914                     continue;
8915
8916                   if ((skip[val >> 3] & can_optimize) != 0)
8917                     {
8918                       bfd_vma off;
8919                       unsigned char opc;
8920
8921                       switch (r_type)
8922                         {
8923                         case R_PPC64_TOC16_HA:
8924                           break;
8925
8926                         case R_PPC64_TOC16_LO_DS:
8927                           off = rel->r_offset;
8928                           off += (bfd_big_endian (ibfd) ? -2 : 3);
8929                           if (!bfd_get_section_contents (ibfd, sec, &opc,
8930                                                          off, 1))
8931                             {
8932                               free (used);
8933                               goto error_ret;
8934                             }
8935                           if ((opc & (0x3f << 2)) == (58u << 2))
8936                             break;
8937                           /* Fall through.  */
8938
8939                         default:
8940                           /* Wrong sort of reloc, or not a ld.  We may
8941                              as well clear ref_from_discarded too.  */
8942                           skip[val >> 3] = 0;
8943                         }
8944                     }
8945
8946                   if (sec != toc)
8947                     used[val >> 3] = 1;
8948                   /* For the toc section, we only mark as used if this
8949                      entry itself isn't unused.  */
8950                   else if ((used[rel->r_offset >> 3]
8951                             || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8952                            && !used[val >> 3])
8953                     {
8954                       /* Do all the relocs again, to catch reference
8955                          chains.  */
8956                       repeat = 1;
8957                       used[val >> 3] = 1;
8958                     }
8959                 }
8960             }
8961           while (repeat);
8962
8963           if (elf_section_data (sec)->relocs != relstart)
8964             free (relstart);
8965         }
8966
8967       /* Merge the used and skip arrays.  Assume that TOC
8968          doublewords not appearing as either used or unused belong
8969          to an entry more than one doubleword in size.  */
8970       for (drop = skip, keep = used, last = 0, some_unused = 0;
8971            drop < skip + (toc->size + 7) / 8;
8972            ++drop, ++keep)
8973         {
8974           if (*keep)
8975             {
8976               *drop &= ~ref_from_discarded;
8977               if ((*drop & can_optimize) != 0)
8978                 some_unused = 1;
8979               last = 0;
8980             }
8981           else if ((*drop & ref_from_discarded) != 0)
8982             {
8983               some_unused = 1;
8984               last = ref_from_discarded;
8985             }
8986           else
8987             *drop = last;
8988         }
8989
8990       free (used);
8991
8992       if (some_unused)
8993         {
8994           bfd_byte *contents, *src;
8995           unsigned long off;
8996           Elf_Internal_Sym *sym;
8997           bfd_boolean local_toc_syms = FALSE;
8998
8999           /* Shuffle the toc contents, and at the same time convert the
9000              skip array from booleans into offsets.  */
9001           if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
9002             goto error_ret;
9003
9004           elf_section_data (toc)->this_hdr.contents = contents;
9005
9006           for (src = contents, off = 0, drop = skip;
9007                src < contents + toc->size;
9008                src += 8, ++drop)
9009             {
9010               if ((*drop & (can_optimize | ref_from_discarded)) != 0)
9011                 off += 8;
9012               else if (off != 0)
9013                 {
9014                   *drop = off;
9015                   memcpy (src - off, src, 8);
9016                 }
9017             }
9018           *drop = off;
9019           toc->rawsize = toc->size;
9020           toc->size = src - contents - off;
9021
9022           /* Adjust addends for relocs against the toc section sym,
9023              and optimize any accesses we can.  */
9024           for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9025             {
9026               if (sec->reloc_count == 0
9027                   || discarded_section (sec))
9028                 continue;
9029
9030               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9031                                                     info->keep_memory);
9032               if (relstart == NULL)
9033                 goto error_ret;
9034
9035               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9036                 {
9037                   enum elf_ppc64_reloc_type r_type;
9038                   unsigned long r_symndx;
9039                   asection *sym_sec;
9040                   struct elf_link_hash_entry *h;
9041                   bfd_vma val;
9042
9043                   r_type = ELF64_R_TYPE (rel->r_info);
9044                   switch (r_type)
9045                     {
9046                     default:
9047                       continue;
9048
9049                     case R_PPC64_TOC16:
9050                     case R_PPC64_TOC16_LO:
9051                     case R_PPC64_TOC16_HI:
9052                     case R_PPC64_TOC16_HA:
9053                     case R_PPC64_TOC16_DS:
9054                     case R_PPC64_TOC16_LO_DS:
9055                     case R_PPC64_ADDR64:
9056                       break;
9057                     }
9058
9059                   r_symndx = ELF64_R_SYM (rel->r_info);
9060                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9061                                   r_symndx, ibfd))
9062                     goto error_ret;
9063
9064                   if (sym_sec != toc)
9065                     continue;
9066
9067                   if (h != NULL)
9068                     val = h->root.u.def.value;
9069                   else
9070                     {
9071                       val = sym->st_value;
9072                       if (val != 0)
9073                         local_toc_syms = TRUE;
9074                     }
9075
9076                   val += rel->r_addend;
9077
9078                   if (val > toc->rawsize)
9079                     val = toc->rawsize;
9080                   else if ((skip[val >> 3] & ref_from_discarded) != 0)
9081                     continue;
9082                   else if ((skip[val >> 3] & can_optimize) != 0)
9083                     {
9084                       Elf_Internal_Rela *tocrel
9085                         = toc_relocs + (skip[val >> 3] >> 2);
9086                       unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
9087
9088                       switch (r_type)
9089                         {
9090                         case R_PPC64_TOC16_HA:
9091                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
9092                           break;
9093
9094                         case R_PPC64_TOC16_LO_DS:
9095                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
9096                           break;
9097
9098                         default:
9099                           if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
9100                             ppc_howto_init ();
9101                           info->callbacks->einfo
9102                             /* xgettext:c-format */
9103                             (_("%H: %s references "
9104                                "optimized away TOC entry\n"),
9105                              ibfd, sec, rel->r_offset,
9106                              ppc64_elf_howto_table[r_type]->name);
9107                           bfd_set_error (bfd_error_bad_value);
9108                           goto error_ret;
9109                         }
9110                       rel->r_addend = tocrel->r_addend;
9111                       elf_section_data (sec)->relocs = relstart;
9112                       continue;
9113                     }
9114
9115                   if (h != NULL || sym->st_value != 0)
9116                     continue;
9117
9118                   rel->r_addend -= skip[val >> 3];
9119                   elf_section_data (sec)->relocs = relstart;
9120                 }
9121
9122               if (elf_section_data (sec)->relocs != relstart)
9123                 free (relstart);
9124             }
9125
9126           /* We shouldn't have local or global symbols defined in the TOC,
9127              but handle them anyway.  */
9128           if (local_syms != NULL)
9129             for (sym = local_syms;
9130                  sym < local_syms + symtab_hdr->sh_info;
9131                  ++sym)
9132               if (sym->st_value != 0
9133                   && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
9134                 {
9135                   unsigned long i;
9136
9137                   if (sym->st_value > toc->rawsize)
9138                     i = toc->rawsize >> 3;
9139                   else
9140                     i = sym->st_value >> 3;
9141
9142                   if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
9143                     {
9144                       if (local_toc_syms)
9145                         _bfd_error_handler
9146                           (_("%s defined on removed toc entry"),
9147                            bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
9148                       do
9149                         ++i;
9150                       while ((skip[i] & (ref_from_discarded | can_optimize)));
9151                       sym->st_value = (bfd_vma) i << 3;
9152                     }
9153
9154                   sym->st_value -= skip[i];
9155                   symtab_hdr->contents = (unsigned char *) local_syms;
9156                 }
9157
9158           /* Adjust any global syms defined in this toc input section.  */
9159           if (toc_inf.global_toc_syms)
9160             {
9161               toc_inf.toc = toc;
9162               toc_inf.skip = skip;
9163               toc_inf.global_toc_syms = FALSE;
9164               elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
9165                                       &toc_inf);
9166             }
9167
9168           if (toc->reloc_count != 0)
9169             {
9170               Elf_Internal_Shdr *rel_hdr;
9171               Elf_Internal_Rela *wrel;
9172               bfd_size_type sz;
9173
9174               /* Remove unused toc relocs, and adjust those we keep.  */
9175               if (toc_relocs == NULL)
9176                 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9177                                                         info->keep_memory);
9178               if (toc_relocs == NULL)
9179                 goto error_ret;
9180
9181               wrel = toc_relocs;
9182               for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9183                 if ((skip[rel->r_offset >> 3]
9184                      & (ref_from_discarded | can_optimize)) == 0)
9185                   {
9186                     wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9187                     wrel->r_info = rel->r_info;
9188                     wrel->r_addend = rel->r_addend;
9189                     ++wrel;
9190                   }
9191                 else if (!dec_dynrel_count (rel->r_info, toc, info,
9192                                             &local_syms, NULL, NULL))
9193                   goto error_ret;
9194
9195               elf_section_data (toc)->relocs = toc_relocs;
9196               toc->reloc_count = wrel - toc_relocs;
9197               rel_hdr = _bfd_elf_single_rel_hdr (toc);
9198               sz = rel_hdr->sh_entsize;
9199               rel_hdr->sh_size = toc->reloc_count * sz;
9200             }
9201         }
9202       else if (toc_relocs != NULL
9203                && elf_section_data (toc)->relocs != toc_relocs)
9204         free (toc_relocs);
9205
9206       if (local_syms != NULL
9207           && symtab_hdr->contents != (unsigned char *) local_syms)
9208         {
9209           if (!info->keep_memory)
9210             free (local_syms);
9211           else
9212             symtab_hdr->contents = (unsigned char *) local_syms;
9213         }
9214       free (skip);
9215     }
9216
9217   /* Look for cases where we can change an indirect GOT access to
9218      a GOT relative or PC relative access, possibly reducing the
9219      number of GOT entries.  */
9220   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9221     {
9222       asection *sec;
9223       Elf_Internal_Shdr *symtab_hdr;
9224       Elf_Internal_Sym *local_syms;
9225       Elf_Internal_Rela *relstart, *rel;
9226       bfd_vma got;
9227
9228       if (!is_ppc64_elf (ibfd))
9229         continue;
9230
9231       if (!ppc64_elf_tdata (ibfd)->has_optrel)
9232         continue;
9233
9234       sec = ppc64_elf_tdata (ibfd)->got;
9235       got = 0;
9236       if (sec != NULL)
9237         got = sec->output_section->vma + sec->output_offset + 0x8000;
9238
9239       local_syms = NULL;
9240       symtab_hdr = &elf_symtab_hdr (ibfd);
9241
9242       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9243         {
9244           if (sec->reloc_count == 0
9245               || !ppc64_elf_section_data (sec)->has_optrel
9246               || discarded_section (sec))
9247             continue;
9248
9249           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9250                                                 info->keep_memory);
9251           if (relstart == NULL)
9252             {
9253             got_error_ret:
9254               if (local_syms != NULL
9255                   && symtab_hdr->contents != (unsigned char *) local_syms)
9256                 free (local_syms);
9257               if (sec != NULL
9258                   && relstart != NULL
9259                   && elf_section_data (sec)->relocs != relstart)
9260                 free (relstart);
9261               return FALSE;
9262             }
9263
9264           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9265             {
9266               enum elf_ppc64_reloc_type r_type;
9267               unsigned long r_symndx;
9268               Elf_Internal_Sym *sym;
9269               asection *sym_sec;
9270               struct elf_link_hash_entry *h;
9271               struct got_entry *ent;
9272               bfd_vma val, pc;
9273               unsigned char buf[8];
9274               unsigned int insn;
9275               enum {no_check, check_lo, check_ha} insn_check;
9276
9277               r_type = ELF64_R_TYPE (rel->r_info);
9278               switch (r_type)
9279                 {
9280                 default:
9281                   insn_check = no_check;
9282                   break;
9283
9284                 case R_PPC64_PLT16_HA:
9285                 case R_PPC64_GOT_TLSLD16_HA:
9286                 case R_PPC64_GOT_TLSGD16_HA:
9287                 case R_PPC64_GOT_TPREL16_HA:
9288                 case R_PPC64_GOT_DTPREL16_HA:
9289                 case R_PPC64_GOT16_HA:
9290                 case R_PPC64_TOC16_HA:
9291                   insn_check = check_ha;
9292                   break;
9293
9294                 case R_PPC64_PLT16_LO:
9295                 case R_PPC64_PLT16_LO_DS:
9296                 case R_PPC64_GOT_TLSLD16_LO:
9297                 case R_PPC64_GOT_TLSGD16_LO:
9298                 case R_PPC64_GOT_TPREL16_LO_DS:
9299                 case R_PPC64_GOT_DTPREL16_LO_DS:
9300                 case R_PPC64_GOT16_LO:
9301                 case R_PPC64_GOT16_LO_DS:
9302                 case R_PPC64_TOC16_LO:
9303                 case R_PPC64_TOC16_LO_DS:
9304                   insn_check = check_lo;
9305                   break;
9306                 }
9307
9308               if (insn_check != no_check)
9309                 {
9310                   bfd_vma off = rel->r_offset & ~3;
9311
9312                   if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
9313                     goto got_error_ret;
9314
9315                   insn = bfd_get_32 (ibfd, buf);
9316                   if (insn_check == check_lo
9317                       ? !ok_lo_toc_insn (insn, r_type)
9318                       : ((insn & ((0x3fu << 26) | 0x1f << 16))
9319                          != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9320                     {
9321                       char str[12];
9322
9323                       ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
9324                       sprintf (str, "%#08x", insn);
9325                       info->callbacks->einfo
9326                         /* xgettext:c-format */
9327                         (_("%H: got/toc optimization is not supported for"
9328                            " %s instruction\n"),
9329                          ibfd, sec, rel->r_offset & ~3, str);
9330                       continue;
9331                     }
9332                 }
9333
9334               switch (r_type)
9335                 {
9336                 /* Note that we don't delete GOT entries for
9337                    R_PPC64_GOT16_DS since we'd need a lot more
9338                    analysis.  For starters, the preliminary layout is
9339                    before the GOT, PLT, dynamic sections and stubs are
9340                    laid out.  Then we'd need to allow for changes in
9341                    distance between sections caused by alignment.  */
9342                 default:
9343                   continue;
9344
9345                 case R_PPC64_GOT16_HA:
9346                 case R_PPC64_GOT16_LO_DS:
9347                 case R_PPC64_GOT_PCREL34:
9348                   break;
9349                 }
9350
9351               r_symndx = ELF64_R_SYM (rel->r_info);
9352               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9353                               r_symndx, ibfd))
9354                 goto got_error_ret;
9355
9356               if (sym_sec == NULL
9357                   || sym_sec->output_section == NULL
9358                   || discarded_section (sym_sec))
9359                 continue;
9360
9361               if (!SYMBOL_REFERENCES_LOCAL (info, h))
9362                 continue;
9363
9364               if (h != NULL)
9365                 val = h->root.u.def.value;
9366               else
9367                 val = sym->st_value;
9368               val += rel->r_addend;
9369               val += sym_sec->output_section->vma + sym_sec->output_offset;
9370
9371 /* Fudge factor to allow for the fact that the preliminary layout
9372    isn't exact.  Reduce limits by this factor.  */
9373 #define LIMIT_ADJUST(LIMIT) ((LIMIT) - (LIMIT) / 16)
9374
9375               switch (r_type)
9376                 {
9377                 default:
9378                   continue;
9379
9380                 case R_PPC64_GOT16_HA:
9381                   if (val - got + LIMIT_ADJUST (0x80008000ULL)
9382                       >= LIMIT_ADJUST (0x100000000ULL))
9383                     continue;
9384
9385                   if (!bfd_get_section_contents (ibfd, sec, buf,
9386                                                  rel->r_offset & ~3, 4))
9387                     goto got_error_ret;
9388                   insn = bfd_get_32 (ibfd, buf);
9389                   if (((insn & ((0x3fu << 26) | 0x1f << 16))
9390                        != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9391                     continue;
9392                   break;
9393
9394                 case R_PPC64_GOT16_LO_DS:
9395                   if (val - got + LIMIT_ADJUST (0x80008000ULL)
9396                       >= LIMIT_ADJUST (0x100000000ULL))
9397                     continue;
9398                   if (!bfd_get_section_contents (ibfd, sec, buf,
9399                                                  rel->r_offset & ~3, 4))
9400                     goto got_error_ret;
9401                   insn = bfd_get_32 (ibfd, buf);
9402                   if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */)
9403                     continue;
9404                   break;
9405
9406                 case R_PPC64_GOT_PCREL34:
9407                   pc = rel->r_offset;
9408                   pc += sec->output_section->vma + sec->output_offset;
9409                   if (val - pc + LIMIT_ADJUST (1ULL << 33)
9410                       >= LIMIT_ADJUST (1ULL << 34))
9411                     continue;
9412                   if (!bfd_get_section_contents (ibfd, sec, buf,
9413                                                  rel->r_offset & ~3, 8))
9414                     goto got_error_ret;
9415                   insn = bfd_get_32 (ibfd, buf);
9416                   if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
9417                     continue;
9418                   insn = bfd_get_32 (ibfd, buf + 4);
9419                   if ((insn & (0x3fu << 26)) != 57u << 26)
9420                     continue;
9421                   break;
9422                 }
9423 #undef LIMIT_ADJUST
9424
9425               if (h != NULL)
9426                 ent = h->got.glist;
9427               else
9428                 {
9429                   struct got_entry **local_got_ents = elf_local_got_ents (ibfd);
9430                   ent = local_got_ents[r_symndx];
9431                 }
9432               for (; ent != NULL; ent = ent->next)
9433                 if (ent->addend == rel->r_addend
9434                     && ent->owner == ibfd
9435                     && ent->tls_type == 0)
9436                   break;
9437               BFD_ASSERT (ent && ent->got.refcount > 0);
9438               ent->got.refcount -= 1;
9439             }
9440
9441           if (elf_section_data (sec)->relocs != relstart)
9442             free (relstart);
9443         }
9444
9445       if (local_syms != NULL
9446           && symtab_hdr->contents != (unsigned char *) local_syms)
9447         {
9448           if (!info->keep_memory)
9449             free (local_syms);
9450           else
9451             symtab_hdr->contents = (unsigned char *) local_syms;
9452         }
9453     }
9454
9455   return TRUE;
9456 }
9457
9458 /* Return true iff input section I references the TOC using
9459    instructions limited to +/-32k offsets.  */
9460
9461 bfd_boolean
9462 ppc64_elf_has_small_toc_reloc (asection *i)
9463 {
9464   return (is_ppc64_elf (i->owner)
9465           && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9466 }
9467
9468 /* Allocate space for one GOT entry.  */
9469
9470 static void
9471 allocate_got (struct elf_link_hash_entry *h,
9472               struct bfd_link_info *info,
9473               struct got_entry *gent)
9474 {
9475   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9476   struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
9477   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9478                  ? 16 : 8);
9479   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9480                   ? 2 : 1) * sizeof (Elf64_External_Rela);
9481   asection *got = ppc64_elf_tdata (gent->owner)->got;
9482
9483   gent->got.offset = got->size;
9484   got->size += entsize;
9485
9486   if (h->type == STT_GNU_IFUNC)
9487     {
9488       htab->elf.irelplt->size += rentsize;
9489       htab->got_reli_size += rentsize;
9490     }
9491   else if (((bfd_link_pic (info)
9492              && !(gent->tls_type != 0
9493                   && bfd_link_executable (info)
9494                   && SYMBOL_REFERENCES_LOCAL (info, h)))
9495             || (htab->elf.dynamic_sections_created
9496                 && h->dynindx != -1
9497                 && !SYMBOL_REFERENCES_LOCAL (info, h)))
9498            && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9499     {
9500       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9501       relgot->size += rentsize;
9502     }
9503 }
9504
9505 /* This function merges got entries in the same toc group.  */
9506
9507 static void
9508 merge_got_entries (struct got_entry **pent)
9509 {
9510   struct got_entry *ent, *ent2;
9511
9512   for (ent = *pent; ent != NULL; ent = ent->next)
9513     if (!ent->is_indirect)
9514       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9515         if (!ent2->is_indirect
9516             && ent2->addend == ent->addend
9517             && ent2->tls_type == ent->tls_type
9518             && elf_gp (ent2->owner) == elf_gp (ent->owner))
9519           {
9520             ent2->is_indirect = TRUE;
9521             ent2->got.ent = ent;
9522           }
9523 }
9524
9525 /* If H is undefined, make it dynamic if that makes sense.  */
9526
9527 static bfd_boolean
9528 ensure_undef_dynamic (struct bfd_link_info *info,
9529                       struct elf_link_hash_entry *h)
9530 {
9531   struct elf_link_hash_table *htab = elf_hash_table (info);
9532
9533   if (htab->dynamic_sections_created
9534       && ((info->dynamic_undefined_weak != 0
9535            && h->root.type == bfd_link_hash_undefweak)
9536           || h->root.type == bfd_link_hash_undefined)
9537       && h->dynindx == -1
9538       && !h->forced_local
9539       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9540     return bfd_elf_link_record_dynamic_symbol (info, h);
9541   return TRUE;
9542 }
9543
9544 /* Allocate space in .plt, .got and associated reloc sections for
9545    dynamic relocs.  */
9546
9547 static bfd_boolean
9548 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9549 {
9550   struct bfd_link_info *info;
9551   struct ppc_link_hash_table *htab;
9552   asection *s;
9553   struct ppc_link_hash_entry *eh;
9554   struct got_entry **pgent, *gent;
9555
9556   if (h->root.type == bfd_link_hash_indirect)
9557     return TRUE;
9558
9559   info = (struct bfd_link_info *) inf;
9560   htab = ppc_hash_table (info);
9561   if (htab == NULL)
9562     return FALSE;
9563
9564   eh = ppc_elf_hash_entry (h);
9565   /* Run through the TLS GD got entries first if we're changing them
9566      to TPREL.  */
9567   if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE))
9568     for (gent = h->got.glist; gent != NULL; gent = gent->next)
9569       if (gent->got.refcount > 0
9570           && (gent->tls_type & TLS_GD) != 0)
9571         {
9572           /* This was a GD entry that has been converted to TPREL.  If
9573              there happens to be a TPREL entry we can use that one.  */
9574           struct got_entry *ent;
9575           for (ent = h->got.glist; ent != NULL; ent = ent->next)
9576             if (ent->got.refcount > 0
9577                 && (ent->tls_type & TLS_TPREL) != 0
9578                 && ent->addend == gent->addend
9579                 && ent->owner == gent->owner)
9580               {
9581                 gent->got.refcount = 0;
9582                 break;
9583               }
9584
9585           /* If not, then we'll be using our own TPREL entry.  */
9586           if (gent->got.refcount != 0)
9587             gent->tls_type = TLS_TLS | TLS_TPREL;
9588         }
9589
9590   /* Remove any list entry that won't generate a word in the GOT before
9591      we call merge_got_entries.  Otherwise we risk merging to empty
9592      entries.  */
9593   pgent = &h->got.glist;
9594   while ((gent = *pgent) != NULL)
9595     if (gent->got.refcount > 0)
9596       {
9597         if ((gent->tls_type & TLS_LD) != 0
9598             && SYMBOL_REFERENCES_LOCAL (info, h))
9599           {
9600             ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9601             *pgent = gent->next;
9602           }
9603         else
9604           pgent = &gent->next;
9605       }
9606     else
9607       *pgent = gent->next;
9608
9609   if (!htab->do_multi_toc)
9610     merge_got_entries (&h->got.glist);
9611
9612   for (gent = h->got.glist; gent != NULL; gent = gent->next)
9613     if (!gent->is_indirect)
9614       {
9615         /* Ensure we catch all the cases where this symbol should
9616            be made dynamic.  */
9617         if (!ensure_undef_dynamic (info, h))
9618           return FALSE;
9619
9620         if (!is_ppc64_elf (gent->owner))
9621           abort ();
9622
9623         allocate_got (h, info, gent);
9624       }
9625
9626   /* If no dynamic sections we can't have dynamic relocs, except for
9627      IFUNCs which are handled even in static executables.  */
9628   if (!htab->elf.dynamic_sections_created
9629       && h->type != STT_GNU_IFUNC)
9630     eh->dyn_relocs = NULL;
9631
9632   /* Discard relocs on undefined symbols that must be local.  */
9633   else if (h->root.type == bfd_link_hash_undefined
9634            && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9635     eh->dyn_relocs = NULL;
9636
9637   /* Also discard relocs on undefined weak syms with non-default
9638      visibility, or when dynamic_undefined_weak says so.  */
9639   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9640     eh->dyn_relocs = NULL;
9641
9642   if (eh->dyn_relocs != NULL)
9643     {
9644       struct elf_dyn_relocs *p, **pp;
9645
9646       /* In the shared -Bsymbolic case, discard space allocated for
9647          dynamic pc-relative relocs against symbols which turn out to
9648          be defined in regular objects.  For the normal shared case,
9649          discard space for relocs that have become local due to symbol
9650          visibility changes.  */
9651       if (bfd_link_pic (info))
9652         {
9653           /* Relocs that use pc_count are those that appear on a call
9654              insn, or certain REL relocs (see must_be_dyn_reloc) that
9655              can be generated via assembly.  We want calls to
9656              protected symbols to resolve directly to the function
9657              rather than going via the plt.  If people want function
9658              pointer comparisons to work as expected then they should
9659              avoid writing weird assembly.  */
9660           if (SYMBOL_CALLS_LOCAL (info, h))
9661             {
9662               for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9663                 {
9664                   p->count -= p->pc_count;
9665                   p->pc_count = 0;
9666                   if (p->count == 0)
9667                     *pp = p->next;
9668                   else
9669                     pp = &p->next;
9670                 }
9671             }
9672
9673           if (eh->dyn_relocs != NULL)
9674             {
9675               /* Ensure we catch all the cases where this symbol
9676                  should be made dynamic.  */
9677               if (!ensure_undef_dynamic (info, h))
9678                 return FALSE;
9679             }
9680         }
9681
9682       /* For a fixed position executable, discard space for
9683          relocs against symbols which are not dynamic.  */
9684       else if (h->type != STT_GNU_IFUNC)
9685         {
9686           if (h->dynamic_adjusted
9687               && !h->def_regular
9688               && !ELF_COMMON_DEF_P (h))
9689             {
9690               /* Ensure we catch all the cases where this symbol
9691                  should be made dynamic.  */
9692               if (!ensure_undef_dynamic (info, h))
9693                 return FALSE;
9694
9695               /* But if that didn't work out, discard dynamic relocs.  */
9696               if (h->dynindx == -1)
9697                 eh->dyn_relocs = NULL;
9698             }
9699           else
9700             eh->dyn_relocs = NULL;
9701         }
9702
9703       /* Finally, allocate space.  */
9704       for (p = eh->dyn_relocs; p != NULL; p = p->next)
9705         {
9706           asection *sreloc = elf_section_data (p->sec)->sreloc;
9707           if (eh->elf.type == STT_GNU_IFUNC)
9708             sreloc = htab->elf.irelplt;
9709           sreloc->size += p->count * sizeof (Elf64_External_Rela);
9710         }
9711     }
9712
9713   /* We might need a PLT entry when the symbol
9714      a) is dynamic, or
9715      b) is an ifunc, or
9716      c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
9717      d) has plt16 relocs and we are linking statically.  */
9718   if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
9719       || h->type == STT_GNU_IFUNC
9720       || (h->needs_plt && h->dynamic_adjusted)
9721       || (h->needs_plt
9722           && h->def_regular
9723           && !htab->elf.dynamic_sections_created
9724           && !htab->can_convert_all_inline_plt
9725           && (ppc_elf_hash_entry (h)->tls_mask
9726               & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
9727     {
9728       struct plt_entry *pent;
9729       bfd_boolean doneone = FALSE;
9730       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9731         if (pent->plt.refcount > 0)
9732           {
9733             if (!htab->elf.dynamic_sections_created
9734                 || h->dynindx == -1)
9735               {
9736                 if (h->type == STT_GNU_IFUNC)
9737                   {
9738                     s = htab->elf.iplt;
9739                     pent->plt.offset = s->size;
9740                     s->size += PLT_ENTRY_SIZE (htab);
9741                     s = htab->elf.irelplt;
9742                   }
9743                 else
9744                   {
9745                     s = htab->pltlocal;
9746                     pent->plt.offset = s->size;
9747                     s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9748                     s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
9749                   }
9750               }
9751             else
9752               {
9753                 /* If this is the first .plt entry, make room for the special
9754                    first entry.  */
9755                 s = htab->elf.splt;
9756                 if (s->size == 0)
9757                   s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9758
9759                 pent->plt.offset = s->size;
9760
9761                 /* Make room for this entry.  */
9762                 s->size += PLT_ENTRY_SIZE (htab);
9763
9764                 /* Make room for the .glink code.  */
9765                 s = htab->glink;
9766                 if (s->size == 0)
9767                   s->size += GLINK_PLTRESOLVE_SIZE (htab);
9768                 if (htab->opd_abi)
9769                   {
9770                     /* We need bigger stubs past index 32767.  */
9771                     if (s->size >= GLINK_PLTRESOLVE_SIZE (htab) + 32768*2*4)
9772                       s->size += 4;
9773                     s->size += 2*4;
9774                   }
9775                 else
9776                   s->size += 4;
9777
9778                 /* We also need to make an entry in the .rela.plt section.  */
9779                 s = htab->elf.srelplt;
9780               }
9781             if (s != NULL)
9782               s->size += sizeof (Elf64_External_Rela);
9783             doneone = TRUE;
9784           }
9785         else
9786           pent->plt.offset = (bfd_vma) -1;
9787       if (!doneone)
9788         {
9789           h->plt.plist = NULL;
9790           h->needs_plt = 0;
9791         }
9792     }
9793   else
9794     {
9795       h->plt.plist = NULL;
9796       h->needs_plt = 0;
9797     }
9798
9799   return TRUE;
9800 }
9801
9802 #define PPC_LO(v) ((v) & 0xffff)
9803 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9804 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9805 #define D34(v) \
9806   ((((v) & 0x3ffff0000ULL) << 16) | (v & 0xffff))
9807 #define HA34(v) ((v + (1ULL << 33)) >> 34)
9808
9809 /* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9810    to set up space for global entry stubs.  These are put in glink,
9811    after the branch table.  */
9812
9813 static bfd_boolean
9814 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9815 {
9816   struct bfd_link_info *info;
9817   struct ppc_link_hash_table *htab;
9818   struct plt_entry *pent;
9819   asection *s, *plt;
9820
9821   if (h->root.type == bfd_link_hash_indirect)
9822     return TRUE;
9823
9824   if (!h->pointer_equality_needed)
9825     return TRUE;
9826
9827   if (h->def_regular)
9828     return TRUE;
9829
9830   info = inf;
9831   htab = ppc_hash_table (info);
9832   if (htab == NULL)
9833     return FALSE;
9834
9835   s = htab->global_entry;
9836   plt = htab->elf.splt;
9837   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9838     if (pent->plt.offset != (bfd_vma) -1
9839         && pent->addend == 0)
9840       {
9841         /* For ELFv2, if this symbol is not defined in a regular file
9842            and we are not generating a shared library or pie, then we
9843            need to define the symbol in the executable on a call stub.
9844            This is to avoid text relocations.  */
9845         bfd_vma off, stub_align, stub_off, stub_size;
9846         unsigned int align_power;
9847
9848         stub_size = 16;
9849         stub_off = s->size;
9850         if (htab->params->plt_stub_align >= 0)
9851           align_power = htab->params->plt_stub_align;
9852         else
9853           align_power = -htab->params->plt_stub_align;
9854         /* Setting section alignment is delayed until we know it is
9855            non-empty.  Otherwise the .text output section will be
9856            aligned at least to plt_stub_align even when no global
9857            entry stubs are needed.  */
9858         if (s->alignment_power < align_power)
9859           s->alignment_power = align_power;
9860         stub_align = (bfd_vma) 1 << align_power;
9861         if (htab->params->plt_stub_align >= 0
9862             || ((((stub_off + stub_size - 1) & -stub_align)
9863                  - (stub_off & -stub_align))
9864                 > ((stub_size - 1) & -stub_align)))
9865           stub_off = (stub_off + stub_align - 1) & -stub_align;
9866         off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
9867         off -= stub_off + s->output_offset + s->output_section->vma;
9868         /* Note that for --plt-stub-align negative we have a possible
9869            dependency between stub offset and size.  Break that
9870            dependency by assuming the max stub size when calculating
9871            the stub offset.  */
9872         if (PPC_HA (off) == 0)
9873           stub_size -= 4;
9874         h->root.type = bfd_link_hash_defined;
9875         h->root.u.def.section = s;
9876         h->root.u.def.value = stub_off;
9877         s->size = stub_off + stub_size;
9878         break;
9879       }
9880   return TRUE;
9881 }
9882
9883 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
9884    read-only sections.  */
9885
9886 static bfd_boolean
9887 maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
9888 {
9889   asection *sec;
9890
9891   if (h->root.type == bfd_link_hash_indirect)
9892     return TRUE;
9893
9894   sec = readonly_dynrelocs (h);
9895   if (sec != NULL)
9896     {
9897       struct bfd_link_info *info = (struct bfd_link_info *) inf;
9898
9899       info->flags |= DF_TEXTREL;
9900       info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'"
9901                                 " in read-only section `%pA'\n"),
9902                               sec->owner, h->root.root.string, sec);
9903
9904       /* Not an error, just cut short the traversal.  */
9905       return FALSE;
9906     }
9907   return TRUE;
9908 }
9909
9910 /* Set the sizes of the dynamic sections.  */
9911
9912 static bfd_boolean
9913 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9914                                  struct bfd_link_info *info)
9915 {
9916   struct ppc_link_hash_table *htab;
9917   bfd *dynobj;
9918   asection *s;
9919   bfd_boolean relocs;
9920   bfd *ibfd;
9921   struct got_entry *first_tlsld;
9922
9923   htab = ppc_hash_table (info);
9924   if (htab == NULL)
9925     return FALSE;
9926
9927   dynobj = htab->elf.dynobj;
9928   if (dynobj == NULL)
9929     abort ();
9930
9931   if (htab->elf.dynamic_sections_created)
9932     {
9933       /* Set the contents of the .interp section to the interpreter.  */
9934       if (bfd_link_executable (info) && !info->nointerp)
9935         {
9936           s = bfd_get_linker_section (dynobj, ".interp");
9937           if (s == NULL)
9938             abort ();
9939           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9940           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9941         }
9942     }
9943
9944   /* Set up .got offsets for local syms, and space for local dynamic
9945      relocs.  */
9946   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9947     {
9948       struct got_entry **lgot_ents;
9949       struct got_entry **end_lgot_ents;
9950       struct plt_entry **local_plt;
9951       struct plt_entry **end_local_plt;
9952       unsigned char *lgot_masks;
9953       bfd_size_type locsymcount;
9954       Elf_Internal_Shdr *symtab_hdr;
9955
9956       if (!is_ppc64_elf (ibfd))
9957         continue;
9958
9959       for (s = ibfd->sections; s != NULL; s = s->next)
9960         {
9961           struct ppc_dyn_relocs *p;
9962
9963           for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9964             {
9965               if (!bfd_is_abs_section (p->sec)
9966                   && bfd_is_abs_section (p->sec->output_section))
9967                 {
9968                   /* Input section has been discarded, either because
9969                      it is a copy of a linkonce section or due to
9970                      linker script /DISCARD/, so we'll be discarding
9971                      the relocs too.  */
9972                 }
9973               else if (p->count != 0)
9974                 {
9975                   asection *srel = elf_section_data (p->sec)->sreloc;
9976                   if (p->ifunc)
9977                     srel = htab->elf.irelplt;
9978                   srel->size += p->count * sizeof (Elf64_External_Rela);
9979                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9980                     info->flags |= DF_TEXTREL;
9981                 }
9982             }
9983         }
9984
9985       lgot_ents = elf_local_got_ents (ibfd);
9986       if (!lgot_ents)
9987         continue;
9988
9989       symtab_hdr = &elf_symtab_hdr (ibfd);
9990       locsymcount = symtab_hdr->sh_info;
9991       end_lgot_ents = lgot_ents + locsymcount;
9992       local_plt = (struct plt_entry **) end_lgot_ents;
9993       end_local_plt = local_plt + locsymcount;
9994       lgot_masks = (unsigned char *) end_local_plt;
9995       s = ppc64_elf_tdata (ibfd)->got;
9996       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9997         {
9998           struct got_entry **pent, *ent;
9999
10000           pent = lgot_ents;
10001           while ((ent = *pent) != NULL)
10002             if (ent->got.refcount > 0)
10003               {
10004                 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
10005                   {
10006                     ppc64_tlsld_got (ibfd)->got.refcount += 1;
10007                     *pent = ent->next;
10008                   }
10009                 else
10010                   {
10011                     unsigned int ent_size = 8;
10012                     unsigned int rel_size = sizeof (Elf64_External_Rela);
10013
10014                     ent->got.offset = s->size;
10015                     if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
10016                       {
10017                         ent_size *= 2;
10018                         rel_size *= 2;
10019                       }
10020                     s->size += ent_size;
10021                     if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
10022                       {
10023                         htab->elf.irelplt->size += rel_size;
10024                         htab->got_reli_size += rel_size;
10025                       }
10026                     else if (bfd_link_pic (info)
10027                              && !(ent->tls_type != 0
10028                                   && bfd_link_executable (info)))
10029                       {
10030                         asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10031                         srel->size += rel_size;
10032                       }
10033                     pent = &ent->next;
10034                   }
10035               }
10036             else
10037               *pent = ent->next;
10038         }
10039
10040       /* Allocate space for plt calls to local syms.  */
10041       lgot_masks = (unsigned char *) end_local_plt;
10042       for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
10043         {
10044           struct plt_entry *ent;
10045
10046           for (ent = *local_plt; ent != NULL; ent = ent->next)
10047             if (ent->plt.refcount > 0)
10048               {
10049                 if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
10050                   {
10051                     s = htab->elf.iplt;
10052                     ent->plt.offset = s->size;
10053                     s->size += PLT_ENTRY_SIZE (htab);
10054                     htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
10055                   }
10056                 else if (htab->can_convert_all_inline_plt
10057                          || (*lgot_masks & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)
10058                   ent->plt.offset = (bfd_vma) -1;
10059                 else
10060                   {
10061                     s = htab->pltlocal;
10062                     ent->plt.offset = s->size;
10063                     s->size += LOCAL_PLT_ENTRY_SIZE (htab);
10064                     if (bfd_link_pic (info))
10065                       htab->relpltlocal->size += sizeof (Elf64_External_Rela);
10066                   }
10067               }
10068             else
10069               ent->plt.offset = (bfd_vma) -1;
10070         }
10071     }
10072
10073   /* Allocate global sym .plt and .got entries, and space for global
10074      sym dynamic relocs.  */
10075   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
10076
10077   if (!htab->opd_abi && !bfd_link_pic (info))
10078     elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
10079
10080   first_tlsld = NULL;
10081   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10082     {
10083       struct got_entry *ent;
10084
10085       if (!is_ppc64_elf (ibfd))
10086         continue;
10087
10088       ent = ppc64_tlsld_got (ibfd);
10089       if (ent->got.refcount > 0)
10090         {
10091           if (!htab->do_multi_toc && first_tlsld != NULL)
10092             {
10093               ent->is_indirect = TRUE;
10094               ent->got.ent = first_tlsld;
10095             }
10096           else
10097             {
10098               if (first_tlsld == NULL)
10099                 first_tlsld = ent;
10100               s = ppc64_elf_tdata (ibfd)->got;
10101               ent->got.offset = s->size;
10102               ent->owner = ibfd;
10103               s->size += 16;
10104               if (bfd_link_dll (info))
10105                 {
10106                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10107                   srel->size += sizeof (Elf64_External_Rela);
10108                 }
10109             }
10110         }
10111       else
10112         ent->got.offset = (bfd_vma) -1;
10113     }
10114
10115   /* We now have determined the sizes of the various dynamic sections.
10116      Allocate memory for them.  */
10117   relocs = FALSE;
10118   for (s = dynobj->sections; s != NULL; s = s->next)
10119     {
10120       if ((s->flags & SEC_LINKER_CREATED) == 0)
10121         continue;
10122
10123       if (s == htab->brlt || s == htab->relbrlt)
10124         /* These haven't been allocated yet;  don't strip.  */
10125         continue;
10126       else if (s == htab->elf.sgot
10127                || s == htab->elf.splt
10128                || s == htab->elf.iplt
10129                || s == htab->pltlocal
10130                || s == htab->glink
10131                || s == htab->global_entry
10132                || s == htab->elf.sdynbss
10133                || s == htab->elf.sdynrelro)
10134         {
10135           /* Strip this section if we don't need it; see the
10136              comment below.  */
10137         }
10138       else if (s == htab->glink_eh_frame)
10139         {
10140           if (!bfd_is_abs_section (s->output_section))
10141             /* Not sized yet.  */
10142             continue;
10143         }
10144       else if (CONST_STRNEQ (s->name, ".rela"))
10145         {
10146           if (s->size != 0)
10147             {
10148               if (s != htab->elf.srelplt)
10149                 relocs = TRUE;
10150
10151               /* We use the reloc_count field as a counter if we need
10152                  to copy relocs into the output file.  */
10153               s->reloc_count = 0;
10154             }
10155         }
10156       else
10157         {
10158           /* It's not one of our sections, so don't allocate space.  */
10159           continue;
10160         }
10161
10162       if (s->size == 0)
10163         {
10164           /* If we don't need this section, strip it from the
10165              output file.  This is mostly to handle .rela.bss and
10166              .rela.plt.  We must create both sections in
10167              create_dynamic_sections, because they must be created
10168              before the linker maps input sections to output
10169              sections.  The linker does that before
10170              adjust_dynamic_symbol is called, and it is that
10171              function which decides whether anything needs to go
10172              into these sections.  */
10173           s->flags |= SEC_EXCLUDE;
10174           continue;
10175         }
10176
10177       if (bfd_is_abs_section (s->output_section))
10178         _bfd_error_handler (_("warning: discarding dynamic section %s"),
10179                             s->name);
10180
10181       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10182         continue;
10183
10184       /* Allocate memory for the section contents.  We use bfd_zalloc
10185          here in case unused entries are not reclaimed before the
10186          section's contents are written out.  This should not happen,
10187          but this way if it does we get a R_PPC64_NONE reloc in .rela
10188          sections instead of garbage.
10189          We also rely on the section contents being zero when writing
10190          the GOT and .dynrelro.  */
10191       s->contents = bfd_zalloc (dynobj, s->size);
10192       if (s->contents == NULL)
10193         return FALSE;
10194     }
10195
10196   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10197     {
10198       if (!is_ppc64_elf (ibfd))
10199         continue;
10200
10201       s = ppc64_elf_tdata (ibfd)->got;
10202       if (s != NULL && s != htab->elf.sgot)
10203         {
10204           if (s->size == 0)
10205             s->flags |= SEC_EXCLUDE;
10206           else
10207             {
10208               s->contents = bfd_zalloc (ibfd, s->size);
10209               if (s->contents == NULL)
10210                 return FALSE;
10211             }
10212         }
10213       s = ppc64_elf_tdata (ibfd)->relgot;
10214       if (s != NULL)
10215         {
10216           if (s->size == 0)
10217             s->flags |= SEC_EXCLUDE;
10218           else
10219             {
10220               s->contents = bfd_zalloc (ibfd, s->size);
10221               if (s->contents == NULL)
10222                 return FALSE;
10223               relocs = TRUE;
10224               s->reloc_count = 0;
10225             }
10226         }
10227     }
10228
10229   if (htab->elf.dynamic_sections_created)
10230     {
10231       bfd_boolean tls_opt;
10232
10233       /* Add some entries to the .dynamic section.  We fill in the
10234          values later, in ppc64_elf_finish_dynamic_sections, but we
10235          must add the entries now so that we get the correct size for
10236          the .dynamic section.  The DT_DEBUG entry is filled in by the
10237          dynamic linker and used by the debugger.  */
10238 #define add_dynamic_entry(TAG, VAL) \
10239   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
10240
10241       if (bfd_link_executable (info))
10242         {
10243           if (!add_dynamic_entry (DT_DEBUG, 0))
10244             return FALSE;
10245         }
10246
10247       if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
10248         {
10249           if (!add_dynamic_entry (DT_PLTGOT, 0)
10250               || !add_dynamic_entry (DT_PLTRELSZ, 0)
10251               || !add_dynamic_entry (DT_PLTREL, DT_RELA)
10252               || !add_dynamic_entry (DT_JMPREL, 0)
10253               || !add_dynamic_entry (DT_PPC64_GLINK, 0))
10254             return FALSE;
10255         }
10256
10257       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
10258         {
10259           if (!add_dynamic_entry (DT_PPC64_OPD, 0)
10260               || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
10261             return FALSE;
10262         }
10263
10264       tls_opt = (htab->params->tls_get_addr_opt
10265                  && ((htab->tls_get_addr_fd != NULL
10266                       && htab->tls_get_addr_fd->elf.plt.plist != NULL)
10267                      || (htab->tga_desc_fd != NULL
10268                          && htab->tga_desc_fd->elf.plt.plist != NULL)));
10269       if (tls_opt || !htab->opd_abi)
10270         {
10271           if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
10272             return FALSE;
10273         }
10274
10275       if (relocs)
10276         {
10277           if (!add_dynamic_entry (DT_RELA, 0)
10278               || !add_dynamic_entry (DT_RELASZ, 0)
10279               || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
10280             return FALSE;
10281
10282           /* If any dynamic relocs apply to a read-only section,
10283              then we need a DT_TEXTREL entry.  */
10284           if ((info->flags & DF_TEXTREL) == 0)
10285             elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
10286
10287           if ((info->flags & DF_TEXTREL) != 0)
10288             {
10289               if (!add_dynamic_entry (DT_TEXTREL, 0))
10290                 return FALSE;
10291             }
10292         }
10293     }
10294 #undef add_dynamic_entry
10295
10296   return TRUE;
10297 }
10298
10299 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
10300
10301 static bfd_boolean
10302 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
10303 {
10304   if (h->plt.plist != NULL
10305       && !h->def_regular
10306       && !h->pointer_equality_needed)
10307     return FALSE;
10308
10309   return _bfd_elf_hash_symbol (h);
10310 }
10311
10312 /* Determine the type of stub needed, if any, for a call.  */
10313
10314 static inline enum ppc_stub_type
10315 ppc_type_of_stub (asection *input_sec,
10316                   const Elf_Internal_Rela *rel,
10317                   struct ppc_link_hash_entry **hash,
10318                   struct plt_entry **plt_ent,
10319                   bfd_vma destination,
10320                   unsigned long local_off)
10321 {
10322   struct ppc_link_hash_entry *h = *hash;
10323   bfd_vma location;
10324   bfd_vma branch_offset;
10325   bfd_vma max_branch_offset;
10326   enum elf_ppc64_reloc_type r_type;
10327
10328   if (h != NULL)
10329     {
10330       struct plt_entry *ent;
10331       struct ppc_link_hash_entry *fdh = h;
10332       if (h->oh != NULL
10333           && h->oh->is_func_descriptor)
10334         {
10335           fdh = ppc_follow_link (h->oh);
10336           *hash = fdh;
10337         }
10338
10339       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10340         if (ent->addend == rel->r_addend
10341             && ent->plt.offset != (bfd_vma) -1)
10342           {
10343             *plt_ent = ent;
10344             return ppc_stub_plt_call;
10345           }
10346
10347       /* Here, we know we don't have a plt entry.  If we don't have a
10348          either a defined function descriptor or a defined entry symbol
10349          in a regular object file, then it is pointless trying to make
10350          any other type of stub.  */
10351       if (!is_static_defined (&fdh->elf)
10352           && !is_static_defined (&h->elf))
10353         return ppc_stub_none;
10354     }
10355   else if (elf_local_got_ents (input_sec->owner) != NULL)
10356     {
10357       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10358       struct plt_entry **local_plt = (struct plt_entry **)
10359         elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10360       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10361
10362       if (local_plt[r_symndx] != NULL)
10363         {
10364           struct plt_entry *ent;
10365
10366           for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10367             if (ent->addend == rel->r_addend
10368                 && ent->plt.offset != (bfd_vma) -1)
10369               {
10370                 *plt_ent = ent;
10371                 return ppc_stub_plt_call;
10372               }
10373         }
10374     }
10375
10376   /* Determine where the call point is.  */
10377   location = (input_sec->output_offset
10378               + input_sec->output_section->vma
10379               + rel->r_offset);
10380
10381   branch_offset = destination - location;
10382   r_type = ELF64_R_TYPE (rel->r_info);
10383
10384   /* Determine if a long branch stub is needed.  */
10385   max_branch_offset = 1 << 25;
10386   if (r_type == R_PPC64_REL14
10387       || r_type == R_PPC64_REL14_BRTAKEN
10388       || r_type == R_PPC64_REL14_BRNTAKEN)
10389     max_branch_offset = 1 << 15;
10390
10391   if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10392     /* We need a stub.  Figure out whether a long_branch or plt_branch
10393        is needed later.  */
10394     return ppc_stub_long_branch;
10395
10396   return ppc_stub_none;
10397 }
10398
10399 /* Gets the address of a label (1:) in r11 and builds an offset in r12,
10400    then adds it to r11 (LOAD false) or loads r12 from r11+r12 (LOAD true).
10401    .    mflr    %r12
10402    .    bcl     20,31,1f
10403    .1:  mflr    %r11
10404    .    mtlr    %r12
10405    .    lis     %r12,xxx-1b@highest
10406    .    ori     %r12,%r12,xxx-1b@higher
10407    .    sldi    %r12,%r12,32
10408    .    oris    %r12,%r12,xxx-1b@high
10409    .    ori     %r12,%r12,xxx-1b@l
10410    .    add/ldx %r12,%r11,%r12  */
10411
10412 static bfd_byte *
10413 build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
10414 {
10415   bfd_put_32 (abfd, MFLR_R12, p);
10416   p += 4;
10417   bfd_put_32 (abfd, BCL_20_31, p);
10418   p += 4;
10419   bfd_put_32 (abfd, MFLR_R11, p);
10420   p += 4;
10421   bfd_put_32 (abfd, MTLR_R12, p);
10422   p += 4;
10423   if (off + 0x8000 < 0x10000)
10424     {
10425       if (load)
10426         bfd_put_32 (abfd, LD_R12_0R11 + PPC_LO (off), p);
10427       else
10428         bfd_put_32 (abfd, ADDI_R12_R11 + PPC_LO (off), p);
10429       p += 4;
10430     }
10431   else if (off + 0x80008000ULL < 0x100000000ULL)
10432     {
10433       bfd_put_32 (abfd, ADDIS_R12_R11 + PPC_HA (off), p);
10434       p += 4;
10435       if (load)
10436         bfd_put_32 (abfd, LD_R12_0R12 + PPC_LO (off), p);
10437       else
10438         bfd_put_32 (abfd, ADDI_R12_R12 + PPC_LO (off), p);
10439       p += 4;
10440     }
10441   else
10442     {
10443       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10444         {
10445           bfd_put_32 (abfd, LI_R12_0 + ((off >> 32) & 0xffff), p);
10446           p += 4;
10447         }
10448       else
10449         {
10450           bfd_put_32 (abfd, LIS_R12 + ((off >> 48) & 0xffff), p);
10451           p += 4;
10452           if (((off >> 32) & 0xffff) != 0)
10453             {
10454               bfd_put_32 (abfd, ORI_R12_R12_0 + ((off >> 32) & 0xffff), p);
10455               p += 4;
10456             }
10457         }
10458       if (((off >> 32) & 0xffffffffULL) != 0)
10459         {
10460           bfd_put_32 (abfd, SLDI_R12_R12_32, p);
10461           p += 4;
10462         }
10463       if (PPC_HI (off) != 0)
10464         {
10465           bfd_put_32 (abfd, ORIS_R12_R12_0 + PPC_HI (off), p);
10466           p += 4;
10467         }
10468       if (PPC_LO (off) != 0)
10469         {
10470           bfd_put_32 (abfd, ORI_R12_R12_0 + PPC_LO (off), p);
10471           p += 4;
10472         }
10473       if (load)
10474         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10475       else
10476         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10477       p += 4;
10478     }
10479   return p;
10480 }
10481
10482 static unsigned int
10483 size_offset (bfd_vma off)
10484 {
10485   unsigned int size;
10486   if (off + 0x8000 < 0x10000)
10487     size = 4;
10488   else if (off + 0x80008000ULL < 0x100000000ULL)
10489     size = 8;
10490   else
10491     {
10492       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10493         size = 4;
10494       else
10495         {
10496           size = 4;
10497           if (((off >> 32) & 0xffff) != 0)
10498             size += 4;
10499         }
10500       if (((off >> 32) & 0xffffffffULL) != 0)
10501         size += 4;
10502       if (PPC_HI (off) != 0)
10503         size += 4;
10504       if (PPC_LO (off) != 0)
10505         size += 4;
10506       size += 4;
10507     }
10508   return size + 16;
10509 }
10510
10511 static unsigned int
10512 num_relocs_for_offset (bfd_vma off)
10513 {
10514   unsigned int num_rel;
10515   if (off + 0x8000 < 0x10000)
10516     num_rel = 1;
10517   else if (off + 0x80008000ULL < 0x100000000ULL)
10518     num_rel = 2;
10519   else
10520     {
10521       num_rel = 1;
10522       if (off + 0x800000000000ULL >= 0x1000000000000ULL
10523           && ((off >> 32) & 0xffff) != 0)
10524         num_rel += 1;
10525       if (PPC_HI (off) != 0)
10526         num_rel += 1;
10527       if (PPC_LO (off) != 0)
10528         num_rel += 1;
10529     }
10530   return num_rel;
10531 }
10532
10533 static Elf_Internal_Rela *
10534 emit_relocs_for_offset (struct bfd_link_info *info, Elf_Internal_Rela *r,
10535                         bfd_vma roff, bfd_vma targ, bfd_vma off)
10536 {
10537   bfd_vma relative_targ = targ - (roff - 8);
10538   if (bfd_big_endian (info->output_bfd))
10539     roff += 2;
10540   r->r_offset = roff;
10541   r->r_addend = relative_targ + roff;
10542   if (off + 0x8000 < 0x10000)
10543     r->r_info = ELF64_R_INFO (0, R_PPC64_REL16);
10544   else if (off + 0x80008000ULL < 0x100000000ULL)
10545     {
10546       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HA);
10547       ++r;
10548       roff += 4;
10549       r->r_offset = roff;
10550       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10551       r->r_addend = relative_targ + roff;
10552     }
10553   else
10554     {
10555       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10556         r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10557       else
10558         {
10559           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHEST);
10560           if (((off >> 32) & 0xffff) != 0)
10561             {
10562               ++r;
10563               roff += 4;
10564               r->r_offset = roff;
10565               r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10566               r->r_addend = relative_targ + roff;
10567             }
10568         }
10569       if (((off >> 32) & 0xffffffffULL) != 0)
10570         roff += 4;
10571       if (PPC_HI (off) != 0)
10572         {
10573           ++r;
10574           roff += 4;
10575           r->r_offset = roff;
10576           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGH);
10577           r->r_addend = relative_targ + roff;
10578         }
10579       if (PPC_LO (off) != 0)
10580         {
10581           ++r;
10582           roff += 4;
10583           r->r_offset = roff;
10584           r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10585           r->r_addend = relative_targ + roff;
10586         }
10587     }
10588   return r;
10589 }
10590
10591 static bfd_byte *
10592 build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
10593                       bfd_boolean load)
10594 {
10595   uint64_t insn;
10596   if (off - odd + (1ULL << 33) < 1ULL << 34)
10597     {
10598       off -= odd;
10599       if (odd)
10600         {
10601           bfd_put_32 (abfd, NOP, p);
10602           p += 4;
10603         }
10604       if (load)
10605         insn = PLD_R12_PC;
10606       else
10607         insn = PADDI_R12_PC;
10608       insn |= D34 (off);
10609       bfd_put_32 (abfd, insn >> 32, p);
10610       p += 4;
10611       bfd_put_32 (abfd, insn, p);
10612     }
10613   /* The minimum value for paddi is -0x200000000.  The minimum value
10614      for li is -0x8000, which when shifted by 34 and added gives a
10615      minimum value of -0x2000200000000.  The maximum value is
10616      0x1ffffffff+0x7fff<<34 which is 0x2000200000000-1.  */
10617   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10618     {
10619       off -= 8 - odd;
10620       bfd_put_32 (abfd, LI_R11_0 | (HA34 (off) & 0xffff), p);
10621       p += 4;
10622       if (!odd)
10623         {
10624           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10625           p += 4;
10626         }
10627       insn = PADDI_R12_PC | D34 (off);
10628       bfd_put_32 (abfd, insn >> 32, p);
10629       p += 4;
10630       bfd_put_32 (abfd, insn, p);
10631       p += 4;
10632       if (odd)
10633         {
10634           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10635           p += 4;
10636         }
10637       if (load)
10638         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10639       else
10640         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10641     }
10642   else
10643     {
10644       off -= odd + 8;
10645       bfd_put_32 (abfd, LIS_R11 | ((HA34 (off) >> 16) & 0x3fff), p);
10646       p += 4;
10647       bfd_put_32 (abfd, ORI_R11_R11_0 | (HA34 (off) & 0xffff), p);
10648       p += 4;
10649       if (odd)
10650         {
10651           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10652           p += 4;
10653         }
10654       insn = PADDI_R12_PC | D34 (off);
10655       bfd_put_32 (abfd, insn >> 32, p);
10656       p += 4;
10657       bfd_put_32 (abfd, insn, p);
10658       p += 4;
10659       if (!odd)
10660         {
10661           bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10662           p += 4;
10663         }
10664       if (load)
10665         bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10666       else
10667         bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10668     }
10669   p += 4;
10670   return p;
10671 }
10672
10673 static unsigned int
10674 size_powerxx_offset (bfd_vma off, int odd)
10675 {
10676   if (off - odd + (1ULL << 33) < 1ULL << 34)
10677     return odd + 8;
10678   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10679     return 20;
10680   else
10681     return 24;
10682 }
10683
10684 static unsigned int
10685 num_relocs_for_powerxx_offset (bfd_vma off, int odd)
10686 {
10687   if (off - odd + (1ULL << 33) < 1ULL << 34)
10688     return 1;
10689   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10690     return 2;
10691   else
10692     return 3;
10693 }
10694
10695 static Elf_Internal_Rela *
10696 emit_relocs_for_powerxx_offset (struct bfd_link_info *info,
10697                                 Elf_Internal_Rela *r, bfd_vma roff,
10698                                 bfd_vma targ, bfd_vma off, int odd)
10699 {
10700   if (off - odd + (1ULL << 33) < 1ULL << 34)
10701     roff += odd;
10702   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10703     {
10704       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10705       r->r_offset = roff + d_offset;
10706       r->r_addend = targ + 8 - odd - d_offset;
10707       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10708       ++r;
10709       roff += 8 - odd;
10710     }
10711   else
10712     {
10713       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10714       r->r_offset = roff + d_offset;
10715       r->r_addend = targ + 8 + odd - d_offset;
10716       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHESTA34);
10717       ++r;
10718       roff += 4;
10719       r->r_offset = roff + d_offset;
10720       r->r_addend = targ + 4 + odd - d_offset;
10721       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10722       ++r;
10723       roff += 4 + odd;
10724     }
10725   r->r_offset = roff;
10726   r->r_addend = targ;
10727   r->r_info = ELF64_R_INFO (0, R_PPC64_PCREL34);
10728   return r;
10729 }
10730
10731 /* Emit .eh_frame opcode to advance pc by DELTA.  */
10732
10733 static bfd_byte *
10734 eh_advance (bfd *abfd, bfd_byte *eh, unsigned int delta)
10735 {
10736   delta /= 4;
10737   if (delta < 64)
10738     *eh++ = DW_CFA_advance_loc + delta;
10739   else if (delta < 256)
10740     {
10741       *eh++ = DW_CFA_advance_loc1;
10742       *eh++ = delta;
10743     }
10744   else if (delta < 65536)
10745     {
10746       *eh++ = DW_CFA_advance_loc2;
10747       bfd_put_16 (abfd, delta, eh);
10748       eh += 2;
10749     }
10750   else
10751     {
10752       *eh++ = DW_CFA_advance_loc4;
10753       bfd_put_32 (abfd, delta, eh);
10754       eh += 4;
10755     }
10756   return eh;
10757 }
10758
10759 /* Size of required .eh_frame opcode to advance pc by DELTA.  */
10760
10761 static unsigned int
10762 eh_advance_size (unsigned int delta)
10763 {
10764   if (delta < 64 * 4)
10765     /* DW_CFA_advance_loc+[1..63].  */
10766     return 1;
10767   if (delta < 256 * 4)
10768     /* DW_CFA_advance_loc1, byte.  */
10769     return 2;
10770   if (delta < 65536 * 4)
10771     /* DW_CFA_advance_loc2, 2 bytes.  */
10772     return 3;
10773   /* DW_CFA_advance_loc4, 4 bytes.  */
10774   return 5;
10775 }
10776
10777 /* With power7 weakly ordered memory model, it is possible for ld.so
10778    to update a plt entry in one thread and have another thread see a
10779    stale zero toc entry.  To avoid this we need some sort of acquire
10780    barrier in the call stub.  One solution is to make the load of the
10781    toc word seem to appear to depend on the load of the function entry
10782    word.  Another solution is to test for r2 being zero, and branch to
10783    the appropriate glink entry if so.
10784
10785    .    fake dep barrier        compare
10786    .    ld 12,xxx(2)            ld 12,xxx(2)
10787    .    mtctr 12                mtctr 12
10788    .    xor 11,12,12            ld 2,xxx+8(2)
10789    .    add 2,2,11              cmpldi 2,0
10790    .    ld 2,xxx+8(2)           bnectr+
10791    .    bctr                    b <glink_entry>
10792
10793    The solution involving the compare turns out to be faster, so
10794    that's what we use unless the branch won't reach.  */
10795
10796 #define ALWAYS_USE_FAKE_DEP 0
10797 #define ALWAYS_EMIT_R2SAVE 0
10798
10799 static inline unsigned int
10800 plt_stub_size (struct ppc_link_hash_table *htab,
10801                struct ppc_stub_hash_entry *stub_entry,
10802                bfd_vma off)
10803 {
10804   unsigned size;
10805
10806   if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
10807     {
10808       if (htab->powerxx_stubs)
10809         {
10810           bfd_vma start = (stub_entry->stub_offset
10811                            + stub_entry->group->stub_sec->output_offset
10812                            + stub_entry->group->stub_sec->output_section->vma);
10813           if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10814             start += 4;
10815           size = 8 + size_powerxx_offset (off, start & 4);
10816         }
10817       else
10818         size = 8 + size_offset (off - 8);
10819       if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10820         size += 4;
10821       return size;
10822     }
10823
10824   size = 12;
10825   if (ALWAYS_EMIT_R2SAVE
10826       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10827     size += 4;
10828   if (PPC_HA (off) != 0)
10829     size += 4;
10830   if (htab->opd_abi)
10831     {
10832       size += 4;
10833       if (htab->params->plt_static_chain)
10834         size += 4;
10835       if (htab->params->plt_thread_safe
10836           && htab->elf.dynamic_sections_created
10837           && stub_entry->h != NULL
10838           && stub_entry->h->elf.dynindx != -1)
10839         size += 8;
10840       if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10841         size += 4;
10842     }
10843   if (stub_entry->h != NULL
10844       && is_tls_get_addr (&stub_entry->h->elf, htab)
10845       && htab->params->tls_get_addr_opt)
10846     {
10847       if (htab->params->no_tls_get_addr_regsave)
10848         {
10849           size += 7 * 4;
10850           if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10851             size += 6 * 4;
10852         }
10853       else
10854         {
10855           size += 30 * 4;
10856           if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10857             size += 4;
10858         }
10859     }
10860   return size;
10861 }
10862
10863 /* Depending on the sign of plt_stub_align:
10864    If positive, return the padding to align to a 2**plt_stub_align
10865    boundary.
10866    If negative, if this stub would cross fewer 2**plt_stub_align
10867    boundaries if we align, then return the padding needed to do so.  */
10868
10869 static inline unsigned int
10870 plt_stub_pad (struct ppc_link_hash_table *htab,
10871               struct ppc_stub_hash_entry *stub_entry,
10872               bfd_vma plt_off)
10873 {
10874   int stub_align;
10875   unsigned stub_size;
10876   bfd_vma stub_off = stub_entry->group->stub_sec->size;
10877
10878   if (htab->params->plt_stub_align >= 0)
10879     {
10880       stub_align = 1 << htab->params->plt_stub_align;
10881       if ((stub_off & (stub_align - 1)) != 0)
10882         return stub_align - (stub_off & (stub_align - 1));
10883       return 0;
10884     }
10885
10886   stub_align = 1 << -htab->params->plt_stub_align;
10887   stub_size = plt_stub_size (htab, stub_entry, plt_off);
10888   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10889       > ((stub_size - 1) & -stub_align))
10890     return stub_align - (stub_off & (stub_align - 1));
10891   return 0;
10892 }
10893
10894 /* Build a .plt call stub.  */
10895
10896 static inline bfd_byte *
10897 build_plt_stub (struct ppc_link_hash_table *htab,
10898                 struct ppc_stub_hash_entry *stub_entry,
10899                 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10900 {
10901   bfd *obfd = htab->params->stub_bfd;
10902   bfd_boolean plt_load_toc = htab->opd_abi;
10903   bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10904   bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10905                                  && htab->elf.dynamic_sections_created
10906                                  && stub_entry->h != NULL
10907                                  && stub_entry->h->elf.dynindx != -1);
10908   bfd_boolean use_fake_dep = plt_thread_safe;
10909   bfd_vma cmp_branch_off = 0;
10910
10911   if (!ALWAYS_USE_FAKE_DEP
10912       && plt_load_toc
10913       && plt_thread_safe
10914       && !(is_tls_get_addr (&stub_entry->h->elf, htab)
10915            && htab->params->tls_get_addr_opt))
10916     {
10917       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10918       bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10919                           / PLT_ENTRY_SIZE (htab));
10920       bfd_vma glinkoff = GLINK_PLTRESOLVE_SIZE (htab) + pltindex * 8;
10921       bfd_vma to, from;
10922
10923       if (pltindex > 32768)
10924         glinkoff += (pltindex - 32768) * 4;
10925       to = (glinkoff
10926             + htab->glink->output_offset
10927             + htab->glink->output_section->vma);
10928       from = (p - stub_entry->group->stub_sec->contents
10929               + 4 * (ALWAYS_EMIT_R2SAVE
10930                      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10931               + 4 * (PPC_HA (offset) != 0)
10932               + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10933                      != PPC_HA (offset))
10934               + 4 * (plt_static_chain != 0)
10935               + 20
10936               + stub_entry->group->stub_sec->output_offset
10937               + stub_entry->group->stub_sec->output_section->vma);
10938       cmp_branch_off = to - from;
10939       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10940     }
10941
10942   if (PPC_HA (offset) != 0)
10943     {
10944       if (r != NULL)
10945         {
10946           if (ALWAYS_EMIT_R2SAVE
10947               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10948             r[0].r_offset += 4;
10949           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10950           r[1].r_offset = r[0].r_offset + 4;
10951           r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10952           r[1].r_addend = r[0].r_addend;
10953           if (plt_load_toc)
10954             {
10955               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10956                 {
10957                   r[2].r_offset = r[1].r_offset + 4;
10958                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10959                   r[2].r_addend = r[0].r_addend;
10960                 }
10961               else
10962                 {
10963                   r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10964                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10965                   r[2].r_addend = r[0].r_addend + 8;
10966                   if (plt_static_chain)
10967                     {
10968                       r[3].r_offset = r[2].r_offset + 4;
10969                       r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10970                       r[3].r_addend = r[0].r_addend + 16;
10971                     }
10972                 }
10973             }
10974         }
10975       if (ALWAYS_EMIT_R2SAVE
10976           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10977         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
10978       if (plt_load_toc)
10979         {
10980           bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p), p += 4;
10981           bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),  p += 4;
10982         }
10983       else
10984         {
10985           bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4;
10986           bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p),  p += 4;
10987         }
10988       if (plt_load_toc
10989           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10990         {
10991           bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p), p += 4;
10992           offset = 0;
10993         }
10994       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10995       if (plt_load_toc)
10996         {
10997           if (use_fake_dep)
10998             {
10999               bfd_put_32 (obfd, XOR_R2_R12_R12, p),             p += 4;
11000               bfd_put_32 (obfd, ADD_R11_R11_R2, p),             p += 4;
11001             }
11002           bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
11003           if (plt_static_chain)
11004             bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
11005         }
11006     }
11007   else
11008     {
11009       if (r != NULL)
11010         {
11011           if (ALWAYS_EMIT_R2SAVE
11012               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11013             r[0].r_offset += 4;
11014           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11015           if (plt_load_toc)
11016             {
11017               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
11018                 {
11019                   r[1].r_offset = r[0].r_offset + 4;
11020                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
11021                   r[1].r_addend = r[0].r_addend;
11022                 }
11023               else
11024                 {
11025                   r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
11026                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11027                   r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
11028                   if (plt_static_chain)
11029                     {
11030                       r[2].r_offset = r[1].r_offset + 4;
11031                       r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11032                       r[2].r_addend = r[0].r_addend + 8;
11033                     }
11034                 }
11035             }
11036         }
11037       if (ALWAYS_EMIT_R2SAVE
11038           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11039         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
11040       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),       p += 4;
11041       if (plt_load_toc
11042           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
11043         {
11044           bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),   p += 4;
11045           offset = 0;
11046         }
11047       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
11048       if (plt_load_toc)
11049         {
11050           if (use_fake_dep)
11051             {
11052               bfd_put_32 (obfd, XOR_R11_R12_R12, p),            p += 4;
11053               bfd_put_32 (obfd, ADD_R2_R2_R11, p),              p += 4;
11054             }
11055           if (plt_static_chain)
11056             bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
11057           bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
11058         }
11059     }
11060   if (plt_load_toc && plt_thread_safe && !use_fake_dep)
11061     {
11062       bfd_put_32 (obfd, CMPLDI_R2_0, p),                        p += 4;
11063       bfd_put_32 (obfd, BNECTR_P4, p),                          p += 4;
11064       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
11065     }
11066   else
11067     bfd_put_32 (obfd, BCTR, p),                                 p += 4;
11068   return p;
11069 }
11070
11071 /* Build a special .plt call stub for __tls_get_addr.  */
11072
11073 #define LD_R0_0R3       0xe8030000
11074 #define LD_R12_0R3      0xe9830000
11075 #define MR_R0_R3        0x7c601b78
11076 #define CMPDI_R0_0      0x2c200000
11077 #define ADD_R3_R12_R13  0x7c6c6a14
11078 #define BEQLR           0x4d820020
11079 #define MR_R3_R0        0x7c030378
11080 #define BCTRL           0x4e800421
11081
11082 static inline bfd_byte *
11083 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
11084                          struct ppc_stub_hash_entry *stub_entry,
11085                          bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
11086 {
11087   bfd *obfd = htab->params->stub_bfd;
11088   bfd_byte *loc = p;
11089   unsigned int i;
11090
11091   bfd_put_32 (obfd, LD_R0_0R3 + 0, p),          p += 4;
11092   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),         p += 4;
11093   bfd_put_32 (obfd, CMPDI_R0_0, p),             p += 4;
11094   bfd_put_32 (obfd, MR_R0_R3, p),               p += 4;
11095   bfd_put_32 (obfd, ADD_R3_R12_R13, p),         p += 4;
11096   bfd_put_32 (obfd, BEQLR, p),                  p += 4;
11097   bfd_put_32 (obfd, MR_R3_R0, p),               p += 4;
11098   if (htab->params->no_tls_get_addr_regsave)
11099     {
11100       if (r != NULL)
11101         r[0].r_offset += 7 * 4;
11102       if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
11103         return build_plt_stub (htab, stub_entry, p, offset, r);
11104
11105       bfd_put_32 (obfd, MFLR_R0, p);
11106       p += 4;
11107       bfd_put_32 (obfd, STD_R0_0R1 + STK_LINKER (htab), p);
11108       p += 4;
11109
11110       if (r != NULL)
11111         r[0].r_offset += 2 * 4;
11112       p = build_plt_stub (htab, stub_entry, p, offset, r);
11113       bfd_put_32 (obfd, BCTRL, p - 4);
11114
11115       bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
11116       p += 4;
11117       bfd_put_32 (obfd, LD_R0_0R1 + STK_LINKER (htab), p);
11118       p += 4;
11119       bfd_put_32 (obfd, MTLR_R0, p);
11120       p += 4;
11121       bfd_put_32 (obfd, BLR, p);
11122       p += 4;
11123     }
11124   else
11125     {
11126       p = tls_get_addr_prologue (obfd, p, htab);
11127
11128       if (r != NULL)
11129         r[0].r_offset += 18 * 4;
11130
11131       p = build_plt_stub (htab, stub_entry, p, offset, r);
11132       bfd_put_32 (obfd, BCTRL, p - 4);
11133
11134       if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
11135         {
11136           bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
11137           p += 4;
11138         }
11139
11140       p = tls_get_addr_epilogue (obfd, p, htab);
11141     }
11142
11143   if (htab->glink_eh_frame != NULL
11144       && htab->glink_eh_frame->size != 0)
11145     {
11146       bfd_byte *base, *eh;
11147
11148       base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
11149       eh = base + stub_entry->group->eh_size;
11150       if (htab->params->no_tls_get_addr_regsave)
11151         {
11152           unsigned int lr_used, delta;
11153           lr_used = stub_entry->stub_offset + (p - 20 - loc);
11154           delta = lr_used - stub_entry->group->lr_restore;
11155           stub_entry->group->lr_restore = lr_used + 16;
11156           eh = eh_advance (htab->elf.dynobj, eh, delta);
11157           *eh++ = DW_CFA_offset_extended_sf;
11158           *eh++ = 65;
11159           *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
11160           *eh++ = DW_CFA_advance_loc + 4;
11161         }
11162       else
11163         {
11164           unsigned int cfa_updt, delta;
11165           /* After the bctrl, lr has been modified so we need to emit
11166              .eh_frame info saying the return address is on the stack.  In
11167              fact we must put the EH info at or before the call rather
11168              than after it, because the EH info for a call needs to be
11169              specified by that point.
11170              See libgcc/unwind-dw2.c execute_cfa_program.
11171              Any stack pointer update must be described immediately after
11172              the instruction making the change, and since the stdu occurs
11173              after saving regs we put all the reg saves and the cfa
11174              change there.  */
11175           cfa_updt = stub_entry->stub_offset + 18 * 4;
11176           delta = cfa_updt - stub_entry->group->lr_restore;
11177           stub_entry->group->lr_restore
11178             = stub_entry->stub_offset + (p - loc) - 4;
11179           eh = eh_advance (htab->elf.dynobj, eh, delta);
11180           *eh++ = DW_CFA_def_cfa_offset;
11181           if (htab->opd_abi)
11182             {
11183               *eh++ = 128;
11184               *eh++ = 1;
11185             }
11186           else
11187             *eh++ = 96;
11188           *eh++ = DW_CFA_offset_extended_sf;
11189           *eh++ = 65;
11190           *eh++ = (-16 / 8) & 0x7f;
11191           for (i = 4; i < 12; i++)
11192             {
11193               *eh++ = DW_CFA_offset + i;
11194               *eh++ = (htab->opd_abi ? 13 : 12) - i;
11195             }
11196           *eh++ = (DW_CFA_advance_loc
11197                    + (stub_entry->group->lr_restore - 8 - cfa_updt) / 4);
11198           *eh++ = DW_CFA_def_cfa_offset;
11199           *eh++ = 0;
11200           for (i = 4; i < 12; i++)
11201             *eh++ = DW_CFA_restore + i;
11202           *eh++ = DW_CFA_advance_loc + 2;
11203         }
11204       *eh++ = DW_CFA_restore_extended;
11205       *eh++ = 65;
11206       stub_entry->group->eh_size = eh - base;
11207     }
11208   return p;
11209 }
11210
11211 static Elf_Internal_Rela *
11212 get_relocs (asection *sec, int count)
11213 {
11214   Elf_Internal_Rela *relocs;
11215   struct bfd_elf_section_data *elfsec_data;
11216
11217   elfsec_data = elf_section_data (sec);
11218   relocs = elfsec_data->relocs;
11219   if (relocs == NULL)
11220     {
11221       bfd_size_type relsize;
11222       relsize = sec->reloc_count * sizeof (*relocs);
11223       relocs = bfd_alloc (sec->owner, relsize);
11224       if (relocs == NULL)
11225         return NULL;
11226       elfsec_data->relocs = relocs;
11227       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
11228                                           sizeof (Elf_Internal_Shdr));
11229       if (elfsec_data->rela.hdr == NULL)
11230         return NULL;
11231       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
11232                                         * sizeof (Elf64_External_Rela));
11233       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
11234       sec->reloc_count = 0;
11235     }
11236   relocs += sec->reloc_count;
11237   sec->reloc_count += count;
11238   return relocs;
11239 }
11240
11241 /* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
11242    forms, to the equivalent relocs against the global symbol given by
11243    STUB_ENTRY->H.  */
11244
11245 static bfd_boolean
11246 use_global_in_relocs (struct ppc_link_hash_table *htab,
11247                       struct ppc_stub_hash_entry *stub_entry,
11248                       Elf_Internal_Rela *r, unsigned int num_rel)
11249 {
11250   struct elf_link_hash_entry **hashes;
11251   unsigned long symndx;
11252   struct ppc_link_hash_entry *h;
11253   bfd_vma symval;
11254
11255   /* Relocs are always against symbols in their own object file.  Fake
11256      up global sym hashes for the stub bfd (which has no symbols).  */
11257   hashes = elf_sym_hashes (htab->params->stub_bfd);
11258   if (hashes == NULL)
11259     {
11260       bfd_size_type hsize;
11261
11262       /* When called the first time, stub_globals will contain the
11263          total number of symbols seen during stub sizing.  After
11264          allocating, stub_globals is used as an index to fill the
11265          hashes array.  */
11266       hsize = (htab->stub_globals + 1) * sizeof (*hashes);
11267       hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
11268       if (hashes == NULL)
11269         return FALSE;
11270       elf_sym_hashes (htab->params->stub_bfd) = hashes;
11271       htab->stub_globals = 1;
11272     }
11273   symndx = htab->stub_globals++;
11274   h = stub_entry->h;
11275   hashes[symndx] = &h->elf;
11276   if (h->oh != NULL && h->oh->is_func)
11277     h = ppc_follow_link (h->oh);
11278   BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
11279               || h->elf.root.type == bfd_link_hash_defweak);
11280   symval = defined_sym_val (&h->elf);
11281   while (num_rel-- != 0)
11282     {
11283       r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
11284       if (h->elf.root.u.def.section != stub_entry->target_section)
11285         {
11286           /* H is an opd symbol.  The addend must be zero, and the
11287              branch reloc is the only one we can convert.  */
11288           r->r_addend = 0;
11289           break;
11290         }
11291       else
11292         r->r_addend -= symval;
11293       --r;
11294     }
11295   return TRUE;
11296 }
11297
11298 static bfd_vma
11299 get_r2off (struct bfd_link_info *info,
11300            struct ppc_stub_hash_entry *stub_entry)
11301 {
11302   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11303   bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
11304
11305   if (r2off == 0)
11306     {
11307       /* Support linking -R objects.  Get the toc pointer from the
11308          opd entry.  */
11309       char buf[8];
11310       if (!htab->opd_abi)
11311         return r2off;
11312       asection *opd = stub_entry->h->elf.root.u.def.section;
11313       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
11314
11315       if (strcmp (opd->name, ".opd") != 0
11316           || opd->reloc_count != 0)
11317         {
11318           info->callbacks->einfo
11319             (_("%P: cannot find opd entry toc for `%pT'\n"),
11320              stub_entry->h->elf.root.root.string);
11321           bfd_set_error (bfd_error_bad_value);
11322           return (bfd_vma) -1;
11323         }
11324       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
11325         return (bfd_vma) -1;
11326       r2off = bfd_get_64 (opd->owner, buf);
11327       r2off -= elf_gp (info->output_bfd);
11328     }
11329   r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
11330   return r2off;
11331 }
11332
11333 static bfd_boolean
11334 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11335 {
11336   struct ppc_stub_hash_entry *stub_entry;
11337   struct ppc_branch_hash_entry *br_entry;
11338   struct bfd_link_info *info;
11339   struct ppc_link_hash_table *htab;
11340   bfd_byte *loc;
11341   bfd_byte *p, *relp;
11342   bfd_vma targ, off;
11343   Elf_Internal_Rela *r;
11344   asection *plt;
11345   int num_rel;
11346   int odd;
11347
11348   /* Massage our args to the form they really have.  */
11349   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11350   info = in_arg;
11351
11352   htab = ppc_hash_table (info);
11353   if (htab == NULL)
11354     return FALSE;
11355
11356   BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
11357   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
11358
11359   htab->stub_count[stub_entry->stub_type - 1] += 1;
11360   switch (stub_entry->stub_type)
11361     {
11362     case ppc_stub_long_branch:
11363     case ppc_stub_long_branch_r2off:
11364       /* Branches are relative.  This is where we are going to.  */
11365       targ = (stub_entry->target_value
11366               + stub_entry->target_section->output_offset
11367               + stub_entry->target_section->output_section->vma);
11368       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11369
11370       /* And this is where we are coming from.  */
11371       off = (stub_entry->stub_offset
11372              + stub_entry->group->stub_sec->output_offset
11373              + stub_entry->group->stub_sec->output_section->vma);
11374       off = targ - off;
11375
11376       p = loc;
11377       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11378         {
11379           bfd_vma r2off = get_r2off (info, stub_entry);
11380
11381           if (r2off == (bfd_vma) -1)
11382             {
11383               htab->stub_error = TRUE;
11384               return FALSE;
11385             }
11386           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11387           p += 4;
11388           if (PPC_HA (r2off) != 0)
11389             {
11390               bfd_put_32 (htab->params->stub_bfd,
11391                           ADDIS_R2_R2 | PPC_HA (r2off), p);
11392               p += 4;
11393             }
11394           if (PPC_LO (r2off) != 0)
11395             {
11396               bfd_put_32 (htab->params->stub_bfd,
11397                           ADDI_R2_R2 | PPC_LO (r2off), p);
11398               p += 4;
11399             }
11400           off -= p - loc;
11401         }
11402       bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
11403       p += 4;
11404
11405       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11406         {
11407           _bfd_error_handler
11408             (_("long branch stub `%s' offset overflow"),
11409              stub_entry->root.string);
11410           htab->stub_error = TRUE;
11411           return FALSE;
11412         }
11413
11414       if (info->emitrelocations)
11415         {
11416           r = get_relocs (stub_entry->group->stub_sec, 1);
11417           if (r == NULL)
11418             return FALSE;
11419           r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
11420           r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11421           r->r_addend = targ;
11422           if (stub_entry->h != NULL
11423               && !use_global_in_relocs (htab, stub_entry, r, 1))
11424             return FALSE;
11425         }
11426       break;
11427
11428     case ppc_stub_plt_branch:
11429     case ppc_stub_plt_branch_r2off:
11430       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11431                                          stub_entry->root.string + 9,
11432                                          FALSE, FALSE);
11433       if (br_entry == NULL)
11434         {
11435           _bfd_error_handler (_("can't find branch stub `%s'"),
11436                               stub_entry->root.string);
11437           htab->stub_error = TRUE;
11438           return FALSE;
11439         }
11440
11441       targ = (stub_entry->target_value
11442               + stub_entry->target_section->output_offset
11443               + stub_entry->target_section->output_section->vma);
11444       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11445         targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11446
11447       bfd_put_64 (htab->brlt->owner, targ,
11448                   htab->brlt->contents + br_entry->offset);
11449
11450       if (br_entry->iter == htab->stub_iteration)
11451         {
11452           br_entry->iter = 0;
11453
11454           if (htab->relbrlt != NULL)
11455             {
11456               /* Create a reloc for the branch lookup table entry.  */
11457               Elf_Internal_Rela rela;
11458               bfd_byte *rl;
11459
11460               rela.r_offset = (br_entry->offset
11461                                + htab->brlt->output_offset
11462                                + htab->brlt->output_section->vma);
11463               rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11464               rela.r_addend = targ;
11465
11466               rl = htab->relbrlt->contents;
11467               rl += (htab->relbrlt->reloc_count++
11468                      * sizeof (Elf64_External_Rela));
11469               bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
11470             }
11471           else if (info->emitrelocations)
11472             {
11473               r = get_relocs (htab->brlt, 1);
11474               if (r == NULL)
11475                 return FALSE;
11476               /* brlt, being SEC_LINKER_CREATED does not go through the
11477                  normal reloc processing.  Symbols and offsets are not
11478                  translated from input file to output file form, so
11479                  set up the offset per the output file.  */
11480               r->r_offset = (br_entry->offset
11481                              + htab->brlt->output_offset
11482                              + htab->brlt->output_section->vma);
11483               r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11484               r->r_addend = targ;
11485             }
11486         }
11487
11488       targ = (br_entry->offset
11489               + htab->brlt->output_offset
11490               + htab->brlt->output_section->vma);
11491
11492       off = (elf_gp (info->output_bfd)
11493              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11494       off = targ - off;
11495
11496       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11497         {
11498           info->callbacks->einfo
11499             (_("%P: linkage table error against `%pT'\n"),
11500              stub_entry->root.string);
11501           bfd_set_error (bfd_error_bad_value);
11502           htab->stub_error = TRUE;
11503           return FALSE;
11504         }
11505
11506       if (info->emitrelocations)
11507         {
11508           r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11509           if (r == NULL)
11510             return FALSE;
11511           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11512           if (bfd_big_endian (info->output_bfd))
11513             r[0].r_offset += 2;
11514           if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11515             r[0].r_offset += 4;
11516           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11517           r[0].r_addend = targ;
11518           if (PPC_HA (off) != 0)
11519             {
11520               r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11521               r[1].r_offset = r[0].r_offset + 4;
11522               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11523               r[1].r_addend = r[0].r_addend;
11524             }
11525         }
11526
11527       p = loc;
11528       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11529         {
11530           if (PPC_HA (off) != 0)
11531             {
11532               bfd_put_32 (htab->params->stub_bfd,
11533                           ADDIS_R12_R2 | PPC_HA (off), p);
11534               p += 4;
11535               bfd_put_32 (htab->params->stub_bfd,
11536                           LD_R12_0R12 | PPC_LO (off), p);
11537             }
11538           else
11539             bfd_put_32 (htab->params->stub_bfd,
11540                         LD_R12_0R2 | PPC_LO (off), p);
11541         }
11542       else
11543         {
11544           bfd_vma r2off = get_r2off (info, stub_entry);
11545
11546           if (r2off == (bfd_vma) -1)
11547             {
11548               htab->stub_error = TRUE;
11549               return FALSE;
11550             }
11551
11552           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11553           p += 4;
11554           if (PPC_HA (off) != 0)
11555             {
11556               bfd_put_32 (htab->params->stub_bfd,
11557                           ADDIS_R12_R2 | PPC_HA (off), p);
11558               p += 4;
11559               bfd_put_32 (htab->params->stub_bfd,
11560                           LD_R12_0R12 | PPC_LO (off), p);
11561             }
11562           else
11563             bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
11564
11565           if (PPC_HA (r2off) != 0)
11566             {
11567               p += 4;
11568               bfd_put_32 (htab->params->stub_bfd,
11569                           ADDIS_R2_R2 | PPC_HA (r2off), p);
11570             }
11571           if (PPC_LO (r2off) != 0)
11572             {
11573               p += 4;
11574               bfd_put_32 (htab->params->stub_bfd,
11575                           ADDI_R2_R2 | PPC_LO (r2off), p);
11576             }
11577         }
11578       p += 4;
11579       bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11580       p += 4;
11581       bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11582       p += 4;
11583       break;
11584
11585     case ppc_stub_long_branch_notoc:
11586     case ppc_stub_long_branch_both:
11587     case ppc_stub_plt_branch_notoc:
11588     case ppc_stub_plt_branch_both:
11589     case ppc_stub_plt_call_notoc:
11590     case ppc_stub_plt_call_both:
11591       p = loc;
11592       off = (stub_entry->stub_offset
11593              + stub_entry->group->stub_sec->output_offset
11594              + stub_entry->group->stub_sec->output_section->vma);
11595       if (stub_entry->stub_type == ppc_stub_long_branch_both
11596           || stub_entry->stub_type == ppc_stub_plt_branch_both
11597           || stub_entry->stub_type == ppc_stub_plt_call_both)
11598         {
11599           off += 4;
11600           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11601           p += 4;
11602         }
11603       if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
11604         {
11605           targ = stub_entry->plt_ent->plt.offset & ~1;
11606           if (targ >= (bfd_vma) -2)
11607             abort ();
11608
11609           plt = htab->elf.splt;
11610           if (!htab->elf.dynamic_sections_created
11611               || stub_entry->h == NULL
11612               || stub_entry->h->elf.dynindx == -1)
11613             {
11614               if (stub_entry->symtype == STT_GNU_IFUNC)
11615                 plt = htab->elf.iplt;
11616               else
11617                 plt = htab->pltlocal;
11618             }
11619           targ += plt->output_offset + plt->output_section->vma;
11620         }
11621       else
11622         targ = (stub_entry->target_value
11623                 + stub_entry->target_section->output_offset
11624                 + stub_entry->target_section->output_section->vma);
11625       odd = off & 4;
11626       off = targ - off;
11627
11628       relp = p;
11629       num_rel = 0;
11630       if (htab->powerxx_stubs)
11631         {
11632           bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
11633           p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
11634         }
11635       else
11636         {
11637           /* The notoc stubs calculate their target (either a PLT entry or
11638              the global entry point of a function) relative to the PC
11639              returned by the "bcl" two instructions past the start of the
11640              sequence emitted by build_offset.  The offset is therefore 8
11641              less than calculated from the start of the sequence.  */
11642           off -= 8;
11643           p = build_offset (htab->params->stub_bfd, p, off,
11644                             stub_entry->stub_type >= ppc_stub_plt_call_notoc);
11645         }
11646
11647       if (stub_entry->stub_type <= ppc_stub_long_branch_both)
11648         {
11649           bfd_vma from;
11650           num_rel = 1;
11651           from = (stub_entry->stub_offset
11652                   + stub_entry->group->stub_sec->output_offset
11653                   + stub_entry->group->stub_sec->output_section->vma
11654                   + (p - loc));
11655           bfd_put_32 (htab->params->stub_bfd,
11656                       B_DOT | ((targ - from) & 0x3fffffc), p);
11657         }
11658       else
11659         {
11660           bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11661           p += 4;
11662           bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11663         }
11664       p += 4;
11665
11666       if (info->emitrelocations)
11667         {
11668           bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
11669           if (htab->powerxx_stubs)
11670             num_rel += num_relocs_for_powerxx_offset (off, odd);
11671           else
11672             {
11673               num_rel += num_relocs_for_offset (off);
11674               roff += 16;
11675             }
11676           r = get_relocs (stub_entry->group->stub_sec, num_rel);
11677           if (r == NULL)
11678             return FALSE;
11679           if (htab->powerxx_stubs)
11680             r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd);
11681           else
11682             r = emit_relocs_for_offset (info, r, roff, targ, off);
11683           if (stub_entry->stub_type == ppc_stub_long_branch_notoc
11684               || stub_entry->stub_type == ppc_stub_long_branch_both)
11685             {
11686               ++r;
11687               roff = p - 4 - stub_entry->group->stub_sec->contents;
11688               r->r_offset = roff;
11689               r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11690               r->r_addend = targ;
11691               if (stub_entry->h != NULL
11692                   && !use_global_in_relocs (htab, stub_entry, r, num_rel))
11693                 return FALSE;
11694             }
11695         }
11696
11697       if (!htab->powerxx_stubs
11698           && htab->glink_eh_frame != NULL
11699           && htab->glink_eh_frame->size != 0)
11700         {
11701           bfd_byte *base, *eh;
11702           unsigned int lr_used, delta;
11703
11704           base = (htab->glink_eh_frame->contents
11705                   + stub_entry->group->eh_base + 17);
11706           eh = base + stub_entry->group->eh_size;
11707           lr_used = stub_entry->stub_offset + 8;
11708           if (stub_entry->stub_type == ppc_stub_long_branch_both
11709               || stub_entry->stub_type == ppc_stub_plt_branch_both
11710               || stub_entry->stub_type == ppc_stub_plt_call_both)
11711             lr_used += 4;
11712           delta = lr_used - stub_entry->group->lr_restore;
11713           stub_entry->group->lr_restore = lr_used + 8;
11714           eh = eh_advance (htab->elf.dynobj, eh, delta);
11715           *eh++ = DW_CFA_register;
11716           *eh++ = 65;
11717           *eh++ = 12;
11718           *eh++ = DW_CFA_advance_loc + 2;
11719           *eh++ = DW_CFA_restore_extended;
11720           *eh++ = 65;
11721           stub_entry->group->eh_size = eh - base;
11722         }
11723       break;
11724
11725     case ppc_stub_plt_call:
11726     case ppc_stub_plt_call_r2save:
11727       if (stub_entry->h != NULL
11728           && stub_entry->h->is_func_descriptor
11729           && stub_entry->h->oh != NULL)
11730         {
11731           struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11732
11733           /* If the old-ABI "dot-symbol" is undefined make it weak so
11734              we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.  */
11735           if (fh->elf.root.type == bfd_link_hash_undefined
11736               && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11737                   || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11738             fh->elf.root.type = bfd_link_hash_undefweak;
11739         }
11740
11741       /* Now build the stub.  */
11742       targ = stub_entry->plt_ent->plt.offset & ~1;
11743       if (targ >= (bfd_vma) -2)
11744         abort ();
11745
11746       plt = htab->elf.splt;
11747       if (!htab->elf.dynamic_sections_created
11748           || stub_entry->h == NULL
11749           || stub_entry->h->elf.dynindx == -1)
11750         {
11751           if (stub_entry->symtype == STT_GNU_IFUNC)
11752             plt = htab->elf.iplt;
11753           else
11754             plt = htab->pltlocal;
11755         }
11756       targ += plt->output_offset + plt->output_section->vma;
11757
11758       off = (elf_gp (info->output_bfd)
11759              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11760       off = targ - off;
11761
11762       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11763         {
11764           info->callbacks->einfo
11765             /* xgettext:c-format */
11766             (_("%P: linkage table error against `%pT'\n"),
11767              stub_entry->h != NULL
11768              ? stub_entry->h->elf.root.root.string
11769              : "<local sym>");
11770           bfd_set_error (bfd_error_bad_value);
11771           htab->stub_error = TRUE;
11772           return FALSE;
11773         }
11774
11775       r = NULL;
11776       if (info->emitrelocations)
11777         {
11778           r = get_relocs (stub_entry->group->stub_sec,
11779                           ((PPC_HA (off) != 0)
11780                            + (htab->opd_abi
11781                               ? 2 + (htab->params->plt_static_chain
11782                                      && PPC_HA (off + 16) == PPC_HA (off))
11783                               : 1)));
11784           if (r == NULL)
11785             return FALSE;
11786           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11787           if (bfd_big_endian (info->output_bfd))
11788             r[0].r_offset += 2;
11789           r[0].r_addend = targ;
11790         }
11791       if (stub_entry->h != NULL
11792           && is_tls_get_addr (&stub_entry->h->elf, htab)
11793           && htab->params->tls_get_addr_opt)
11794         p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11795       else
11796         p = build_plt_stub (htab, stub_entry, loc, off, r);
11797       break;
11798
11799     case ppc_stub_save_res:
11800       return TRUE;
11801
11802     default:
11803       BFD_FAIL ();
11804       return FALSE;
11805     }
11806
11807   stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
11808
11809   if (htab->params->emit_stub_syms)
11810     {
11811       struct elf_link_hash_entry *h;
11812       size_t len1, len2;
11813       char *name;
11814       const char *const stub_str[] = { "long_branch",
11815                                        "long_branch",
11816                                        "long_branch",
11817                                        "long_branch",
11818                                        "plt_branch",
11819                                        "plt_branch",
11820                                        "plt_branch",
11821                                        "plt_branch",
11822                                        "plt_call",
11823                                        "plt_call",
11824                                        "plt_call",
11825                                        "plt_call" };
11826
11827       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11828       len2 = strlen (stub_entry->root.string);
11829       name = bfd_malloc (len1 + len2 + 2);
11830       if (name == NULL)
11831         return FALSE;
11832       memcpy (name, stub_entry->root.string, 9);
11833       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11834       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11835       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11836       if (h == NULL)
11837         return FALSE;
11838       if (h->root.type == bfd_link_hash_new)
11839         {
11840           h->root.type = bfd_link_hash_defined;
11841           h->root.u.def.section = stub_entry->group->stub_sec;
11842           h->root.u.def.value = stub_entry->stub_offset;
11843           h->ref_regular = 1;
11844           h->def_regular = 1;
11845           h->ref_regular_nonweak = 1;
11846           h->forced_local = 1;
11847           h->non_elf = 0;
11848           h->root.linker_def = 1;
11849         }
11850     }
11851
11852   return TRUE;
11853 }
11854
11855 /* As above, but don't actually build the stub.  Just bump offset so
11856    we know stub section sizes, and select plt_branch stubs where
11857    long_branch stubs won't do.  */
11858
11859 static bfd_boolean
11860 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11861 {
11862   struct ppc_stub_hash_entry *stub_entry;
11863   struct bfd_link_info *info;
11864   struct ppc_link_hash_table *htab;
11865   asection *plt;
11866   bfd_vma targ, off, r2off;
11867   unsigned int size, extra, lr_used, delta, odd;
11868
11869   /* Massage our args to the form they really have.  */
11870   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11871   info = in_arg;
11872
11873   htab = ppc_hash_table (info);
11874   if (htab == NULL)
11875     return FALSE;
11876
11877   /* Make a note of the offset within the stubs for this entry.  */
11878   stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11879
11880   if (stub_entry->h != NULL
11881       && stub_entry->h->save_res
11882       && stub_entry->h->elf.root.type == bfd_link_hash_defined
11883       && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11884     {
11885       /* Don't make stubs to out-of-line register save/restore
11886          functions.  Instead, emit copies of the functions.  */
11887       stub_entry->group->needs_save_res = 1;
11888       stub_entry->stub_type = ppc_stub_save_res;
11889       return TRUE;
11890     }
11891
11892   switch (stub_entry->stub_type)
11893     {
11894     case ppc_stub_plt_branch:
11895     case ppc_stub_plt_branch_r2off:
11896       /* Reset the stub type from the plt branch variant in case we now
11897          can reach with a shorter stub.  */
11898       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11899       /* Fall through.  */
11900     case ppc_stub_long_branch:
11901     case ppc_stub_long_branch_r2off:
11902       targ = (stub_entry->target_value
11903               + stub_entry->target_section->output_offset
11904               + stub_entry->target_section->output_section->vma);
11905       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11906       off = (stub_entry->stub_offset
11907              + stub_entry->group->stub_sec->output_offset
11908              + stub_entry->group->stub_sec->output_section->vma);
11909
11910       size = 4;
11911       r2off = 0;
11912       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11913         {
11914           r2off = get_r2off (info, stub_entry);
11915           if (r2off == (bfd_vma) -1)
11916             {
11917               htab->stub_error = TRUE;
11918               return FALSE;
11919             }
11920           size = 8;
11921           if (PPC_HA (r2off) != 0)
11922             size += 4;
11923           if (PPC_LO (r2off) != 0)
11924             size += 4;
11925           off += size - 4;
11926         }
11927       off = targ - off;
11928
11929       /* If the branch offset is too big, use a ppc_stub_plt_branch.
11930          Do the same for -R objects without function descriptors.  */
11931       if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
11932            && r2off == 0
11933            && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
11934           || off + (1 << 25) >= (bfd_vma) (1 << 26))
11935         {
11936           struct ppc_branch_hash_entry *br_entry;
11937
11938           br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11939                                              stub_entry->root.string + 9,
11940                                              TRUE, FALSE);
11941           if (br_entry == NULL)
11942             {
11943               _bfd_error_handler (_("can't build branch stub `%s'"),
11944                                   stub_entry->root.string);
11945               htab->stub_error = TRUE;
11946               return FALSE;
11947             }
11948
11949           if (br_entry->iter != htab->stub_iteration)
11950             {
11951               br_entry->iter = htab->stub_iteration;
11952               br_entry->offset = htab->brlt->size;
11953               htab->brlt->size += 8;
11954
11955               if (htab->relbrlt != NULL)
11956                 htab->relbrlt->size += sizeof (Elf64_External_Rela);
11957               else if (info->emitrelocations)
11958                 {
11959                   htab->brlt->reloc_count += 1;
11960                   htab->brlt->flags |= SEC_RELOC;
11961                 }
11962             }
11963
11964           targ = (br_entry->offset
11965                   + htab->brlt->output_offset
11966                   + htab->brlt->output_section->vma);
11967           off = (elf_gp (info->output_bfd)
11968                  + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11969           off = targ - off;
11970
11971           if (info->emitrelocations)
11972             {
11973               stub_entry->group->stub_sec->reloc_count
11974                 += 1 + (PPC_HA (off) != 0);
11975               stub_entry->group->stub_sec->flags |= SEC_RELOC;
11976             }
11977
11978           stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
11979           if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11980             {
11981               size = 12;
11982               if (PPC_HA (off) != 0)
11983                 size = 16;
11984             }
11985           else
11986             {
11987               size = 16;
11988               if (PPC_HA (off) != 0)
11989                 size += 4;
11990
11991               if (PPC_HA (r2off) != 0)
11992                 size += 4;
11993               if (PPC_LO (r2off) != 0)
11994                 size += 4;
11995             }
11996         }
11997       else if (info->emitrelocations)
11998         {
11999           stub_entry->group->stub_sec->reloc_count += 1;
12000           stub_entry->group->stub_sec->flags |= SEC_RELOC;
12001         }
12002       break;
12003
12004     case ppc_stub_plt_branch_notoc:
12005     case ppc_stub_plt_branch_both:
12006       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
12007       /* Fall through.  */
12008     case ppc_stub_long_branch_notoc:
12009     case ppc_stub_long_branch_both:
12010       off = (stub_entry->stub_offset
12011              + stub_entry->group->stub_sec->output_offset
12012              + stub_entry->group->stub_sec->output_section->vma);
12013       size = 0;
12014       if (stub_entry->stub_type == ppc_stub_long_branch_both)
12015         size = 4;
12016       off += size;
12017       targ = (stub_entry->target_value
12018               + stub_entry->target_section->output_offset
12019               + stub_entry->target_section->output_section->vma);
12020       odd = off & 4;
12021       off = targ - off;
12022
12023       if (info->emitrelocations)
12024         {
12025           unsigned int num_rel;
12026           if (htab->powerxx_stubs)
12027             num_rel = num_relocs_for_powerxx_offset (off, odd);
12028           else
12029             num_rel = num_relocs_for_offset (off - 8);
12030           stub_entry->group->stub_sec->reloc_count += num_rel;
12031           stub_entry->group->stub_sec->flags |= SEC_RELOC;
12032         }
12033
12034       if (htab->powerxx_stubs)
12035         extra = size_powerxx_offset (off, odd);
12036       else
12037         extra = size_offset (off - 8);
12038       /* Include branch insn plus those in the offset sequence.  */
12039       size += 4 + extra;
12040       /* The branch insn is at the end, or "extra" bytes along.  So
12041          its offset will be "extra" bytes less that that already
12042          calculated.  */
12043       off -= extra;
12044
12045       if (!htab->powerxx_stubs)
12046         {
12047           /* After the bcl, lr has been modified so we need to emit
12048              .eh_frame info saying the return address is in r12.  */
12049           lr_used = stub_entry->stub_offset + 8;
12050           if (stub_entry->stub_type == ppc_stub_long_branch_both)
12051             lr_used += 4;
12052           /* The eh_frame info will consist of a DW_CFA_advance_loc or
12053              variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
12054              DW_CFA_restore_extended 65.  */
12055           delta = lr_used - stub_entry->group->lr_restore;
12056           stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12057           stub_entry->group->lr_restore = lr_used + 8;
12058         }
12059
12060       /* If the branch can't reach, use a plt_branch.  */
12061       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
12062         {
12063           stub_entry->stub_type += (ppc_stub_plt_branch_notoc
12064                                     - ppc_stub_long_branch_notoc);
12065           size += 4;
12066         }
12067       else if (info->emitrelocations)
12068         stub_entry->group->stub_sec->reloc_count +=1;
12069       break;
12070
12071     case ppc_stub_plt_call_notoc:
12072     case ppc_stub_plt_call_both:
12073       off = (stub_entry->stub_offset
12074              + stub_entry->group->stub_sec->output_offset
12075              + stub_entry->group->stub_sec->output_section->vma);
12076       if (stub_entry->stub_type == ppc_stub_plt_call_both)
12077         off += 4;
12078       targ = stub_entry->plt_ent->plt.offset & ~1;
12079       if (targ >= (bfd_vma) -2)
12080         abort ();
12081
12082       plt = htab->elf.splt;
12083       if (!htab->elf.dynamic_sections_created
12084           || stub_entry->h == NULL
12085           || stub_entry->h->elf.dynindx == -1)
12086         {
12087           if (stub_entry->symtype == STT_GNU_IFUNC)
12088             plt = htab->elf.iplt;
12089           else
12090             plt = htab->pltlocal;
12091         }
12092       targ += plt->output_offset + plt->output_section->vma;
12093       odd = off & 4;
12094       off = targ - off;
12095
12096       if (htab->params->plt_stub_align != 0)
12097         {
12098           unsigned pad = plt_stub_pad (htab, stub_entry, off);
12099
12100           stub_entry->group->stub_sec->size += pad;
12101           stub_entry->stub_offset = stub_entry->group->stub_sec->size;
12102           off -= pad;
12103         }
12104
12105       if (info->emitrelocations)
12106         {
12107           unsigned int num_rel;
12108           if (htab->powerxx_stubs)
12109             num_rel = num_relocs_for_powerxx_offset (off, odd);
12110           else
12111             num_rel = num_relocs_for_offset (off - 8);
12112           stub_entry->group->stub_sec->reloc_count += num_rel;
12113           stub_entry->group->stub_sec->flags |= SEC_RELOC;
12114         }
12115
12116       size = plt_stub_size (htab, stub_entry, off);
12117
12118       if (!htab->powerxx_stubs)
12119         {
12120           /* After the bcl, lr has been modified so we need to emit
12121              .eh_frame info saying the return address is in r12.  */
12122           lr_used = stub_entry->stub_offset + 8;
12123           if (stub_entry->stub_type == ppc_stub_plt_call_both)
12124             lr_used += 4;
12125           /* The eh_frame info will consist of a DW_CFA_advance_loc or
12126              variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
12127              DW_CFA_restore_extended 65.  */
12128           delta = lr_used - stub_entry->group->lr_restore;
12129           stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12130           stub_entry->group->lr_restore = lr_used + 8;
12131         }
12132       break;
12133
12134     case ppc_stub_plt_call:
12135     case ppc_stub_plt_call_r2save:
12136       targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
12137       if (targ >= (bfd_vma) -2)
12138         abort ();
12139       plt = htab->elf.splt;
12140       if (!htab->elf.dynamic_sections_created
12141           || stub_entry->h == NULL
12142           || stub_entry->h->elf.dynindx == -1)
12143         {
12144           if (stub_entry->symtype == STT_GNU_IFUNC)
12145             plt = htab->elf.iplt;
12146           else
12147             plt = htab->pltlocal;
12148         }
12149       targ += plt->output_offset + plt->output_section->vma;
12150
12151       off = (elf_gp (info->output_bfd)
12152              + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
12153       off = targ - off;
12154
12155       if (htab->params->plt_stub_align != 0)
12156         {
12157           unsigned pad = plt_stub_pad (htab, stub_entry, off);
12158
12159           stub_entry->group->stub_sec->size += pad;
12160           stub_entry->stub_offset = stub_entry->group->stub_sec->size;
12161         }
12162
12163       if (info->emitrelocations)
12164         {
12165           stub_entry->group->stub_sec->reloc_count
12166             += ((PPC_HA (off) != 0)
12167                 + (htab->opd_abi
12168                    ? 2 + (htab->params->plt_static_chain
12169                           && PPC_HA (off + 16) == PPC_HA (off))
12170                    : 1));
12171           stub_entry->group->stub_sec->flags |= SEC_RELOC;
12172         }
12173
12174       size = plt_stub_size (htab, stub_entry, off);
12175
12176       if (stub_entry->h != NULL
12177           && is_tls_get_addr (&stub_entry->h->elf, htab)
12178           && htab->params->tls_get_addr_opt
12179           && stub_entry->stub_type == ppc_stub_plt_call_r2save)
12180         {
12181           if (htab->params->no_tls_get_addr_regsave)
12182             {
12183               lr_used = stub_entry->stub_offset + size - 20;
12184               /* The eh_frame info will consist of a DW_CFA_advance_loc
12185                  or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
12186                  DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
12187               delta = lr_used - stub_entry->group->lr_restore;
12188               stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12189             }
12190           else
12191             {
12192               /* Adjustments to r1 need to be described.  */
12193               unsigned int cfa_updt = stub_entry->stub_offset + 18 * 4;
12194               delta = cfa_updt - stub_entry->group->lr_restore;
12195               stub_entry->group->eh_size += eh_advance_size (delta);
12196               stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
12197             }
12198           stub_entry->group->lr_restore = size - 4;
12199         }
12200       break;
12201
12202     default:
12203       BFD_FAIL ();
12204       return FALSE;
12205     }
12206
12207   stub_entry->group->stub_sec->size += size;
12208   return TRUE;
12209 }
12210
12211 /* Set up various things so that we can make a list of input sections
12212    for each output section included in the link.  Returns -1 on error,
12213    0 when no stubs will be needed, and 1 on success.  */
12214
12215 int
12216 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
12217 {
12218   unsigned int id;
12219   size_t amt;
12220   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12221
12222   if (htab == NULL)
12223     return -1;
12224
12225   htab->sec_info_arr_size = _bfd_section_id;
12226   amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
12227   htab->sec_info = bfd_zmalloc (amt);
12228   if (htab->sec_info == NULL)
12229     return -1;
12230
12231   /* Set toc_off for com, und, abs and ind sections.  */
12232   for (id = 0; id < 3; id++)
12233     htab->sec_info[id].toc_off = TOC_BASE_OFF;
12234
12235   return 1;
12236 }
12237
12238 /* Set up for first pass at multitoc partitioning.  */
12239
12240 void
12241 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
12242 {
12243   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12244
12245   htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
12246   htab->toc_bfd = NULL;
12247   htab->toc_first_sec = NULL;
12248 }
12249
12250 /* The linker repeatedly calls this function for each TOC input section
12251    and linker generated GOT section.  Group input bfds such that the toc
12252    within a group is less than 64k in size.  */
12253
12254 bfd_boolean
12255 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
12256 {
12257   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12258   bfd_vma addr, off, limit;
12259
12260   if (htab == NULL)
12261     return FALSE;
12262
12263   if (!htab->second_toc_pass)
12264     {
12265       /* Keep track of the first .toc or .got section for this input bfd.  */
12266       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
12267
12268       if (new_bfd)
12269         {
12270           htab->toc_bfd = isec->owner;
12271           htab->toc_first_sec = isec;
12272         }
12273
12274       addr = isec->output_offset + isec->output_section->vma;
12275       off = addr - htab->toc_curr;
12276       limit = 0x80008000;
12277       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
12278         limit = 0x10000;
12279       if (off + isec->size > limit)
12280         {
12281           addr = (htab->toc_first_sec->output_offset
12282                   + htab->toc_first_sec->output_section->vma);
12283           htab->toc_curr = addr;
12284           htab->toc_curr &= -TOC_BASE_ALIGN;
12285         }
12286
12287       /* toc_curr is the base address of this toc group.  Set elf_gp
12288          for the input section to be the offset relative to the
12289          output toc base plus 0x8000.  Making the input elf_gp an
12290          offset allows us to move the toc as a whole without
12291          recalculating input elf_gp.  */
12292       off = htab->toc_curr - elf_gp (info->output_bfd);
12293       off += TOC_BASE_OFF;
12294
12295       /* Die if someone uses a linker script that doesn't keep input
12296          file .toc and .got together.  */
12297       if (new_bfd
12298           && elf_gp (isec->owner) != 0
12299           && elf_gp (isec->owner) != off)
12300         return FALSE;
12301
12302       elf_gp (isec->owner) = off;
12303       return TRUE;
12304     }
12305
12306   /* During the second pass toc_first_sec points to the start of
12307      a toc group, and toc_curr is used to track the old elf_gp.
12308      We use toc_bfd to ensure we only look at each bfd once.  */
12309   if (htab->toc_bfd == isec->owner)
12310     return TRUE;
12311   htab->toc_bfd = isec->owner;
12312
12313   if (htab->toc_first_sec == NULL
12314       || htab->toc_curr != elf_gp (isec->owner))
12315     {
12316       htab->toc_curr = elf_gp (isec->owner);
12317       htab->toc_first_sec = isec;
12318     }
12319   addr = (htab->toc_first_sec->output_offset
12320           + htab->toc_first_sec->output_section->vma);
12321   off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
12322   elf_gp (isec->owner) = off;
12323
12324   return TRUE;
12325 }
12326
12327 /* Called via elf_link_hash_traverse to merge GOT entries for global
12328    symbol H.  */
12329
12330 static bfd_boolean
12331 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12332 {
12333   if (h->root.type == bfd_link_hash_indirect)
12334     return TRUE;
12335
12336   merge_got_entries (&h->got.glist);
12337
12338   return TRUE;
12339 }
12340
12341 /* Called via elf_link_hash_traverse to allocate GOT entries for global
12342    symbol H.  */
12343
12344 static bfd_boolean
12345 reallocate_got (struct elf_link_hash_entry *h, void *inf)
12346 {
12347   struct got_entry *gent;
12348
12349   if (h->root.type == bfd_link_hash_indirect)
12350     return TRUE;
12351
12352   for (gent = h->got.glist; gent != NULL; gent = gent->next)
12353     if (!gent->is_indirect)
12354       allocate_got (h, (struct bfd_link_info *) inf, gent);
12355   return TRUE;
12356 }
12357
12358 /* Called on the first multitoc pass after the last call to
12359    ppc64_elf_next_toc_section.  This function removes duplicate GOT
12360    entries.  */
12361
12362 bfd_boolean
12363 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
12364 {
12365   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12366   struct bfd *ibfd, *ibfd2;
12367   bfd_boolean done_something;
12368
12369   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
12370
12371   if (!htab->do_multi_toc)
12372     return FALSE;
12373
12374   /* Merge global sym got entries within a toc group.  */
12375   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
12376
12377   /* And tlsld_got.  */
12378   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12379     {
12380       struct got_entry *ent, *ent2;
12381
12382       if (!is_ppc64_elf (ibfd))
12383         continue;
12384
12385       ent = ppc64_tlsld_got (ibfd);
12386       if (!ent->is_indirect
12387           && ent->got.offset != (bfd_vma) -1)
12388         {
12389           for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
12390             {
12391               if (!is_ppc64_elf (ibfd2))
12392                 continue;
12393
12394               ent2 = ppc64_tlsld_got (ibfd2);
12395               if (!ent2->is_indirect
12396                   && ent2->got.offset != (bfd_vma) -1
12397                   && elf_gp (ibfd2) == elf_gp (ibfd))
12398                 {
12399                   ent2->is_indirect = TRUE;
12400                   ent2->got.ent = ent;
12401                 }
12402             }
12403         }
12404     }
12405
12406   /* Zap sizes of got sections.  */
12407   htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
12408   htab->elf.irelplt->size -= htab->got_reli_size;
12409   htab->got_reli_size = 0;
12410
12411   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12412     {
12413       asection *got, *relgot;
12414
12415       if (!is_ppc64_elf (ibfd))
12416         continue;
12417
12418       got = ppc64_elf_tdata (ibfd)->got;
12419       if (got != NULL)
12420         {
12421           got->rawsize = got->size;
12422           got->size = 0;
12423           relgot = ppc64_elf_tdata (ibfd)->relgot;
12424           relgot->rawsize = relgot->size;
12425           relgot->size = 0;
12426         }
12427     }
12428
12429   /* Now reallocate the got, local syms first.  We don't need to
12430      allocate section contents again since we never increase size.  */
12431   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12432     {
12433       struct got_entry **lgot_ents;
12434       struct got_entry **end_lgot_ents;
12435       struct plt_entry **local_plt;
12436       struct plt_entry **end_local_plt;
12437       unsigned char *lgot_masks;
12438       bfd_size_type locsymcount;
12439       Elf_Internal_Shdr *symtab_hdr;
12440       asection *s;
12441
12442       if (!is_ppc64_elf (ibfd))
12443         continue;
12444
12445       lgot_ents = elf_local_got_ents (ibfd);
12446       if (!lgot_ents)
12447         continue;
12448
12449       symtab_hdr = &elf_symtab_hdr (ibfd);
12450       locsymcount = symtab_hdr->sh_info;
12451       end_lgot_ents = lgot_ents + locsymcount;
12452       local_plt = (struct plt_entry **) end_lgot_ents;
12453       end_local_plt = local_plt + locsymcount;
12454       lgot_masks = (unsigned char *) end_local_plt;
12455       s = ppc64_elf_tdata (ibfd)->got;
12456       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
12457         {
12458           struct got_entry *ent;
12459
12460           for (ent = *lgot_ents; ent != NULL; ent = ent->next)
12461             {
12462               unsigned int ent_size = 8;
12463               unsigned int rel_size = sizeof (Elf64_External_Rela);
12464
12465               ent->got.offset = s->size;
12466               if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
12467                 {
12468                   ent_size *= 2;
12469                   rel_size *= 2;
12470                 }
12471               s->size += ent_size;
12472               if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
12473                 {
12474                   htab->elf.irelplt->size += rel_size;
12475                   htab->got_reli_size += rel_size;
12476                 }
12477               else if (bfd_link_pic (info)
12478                        && !(ent->tls_type != 0
12479                             && bfd_link_executable (info)))
12480                 {
12481                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12482                   srel->size += rel_size;
12483                 }
12484             }
12485         }
12486     }
12487
12488   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
12489
12490   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12491     {
12492       struct got_entry *ent;
12493
12494       if (!is_ppc64_elf (ibfd))
12495         continue;
12496
12497       ent = ppc64_tlsld_got (ibfd);
12498       if (!ent->is_indirect
12499           && ent->got.offset != (bfd_vma) -1)
12500         {
12501           asection *s = ppc64_elf_tdata (ibfd)->got;
12502           ent->got.offset = s->size;
12503           s->size += 16;
12504           if (bfd_link_dll (info))
12505             {
12506               asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12507               srel->size += sizeof (Elf64_External_Rela);
12508             }
12509         }
12510     }
12511
12512   done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
12513   if (!done_something)
12514     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12515       {
12516         asection *got;
12517
12518         if (!is_ppc64_elf (ibfd))
12519           continue;
12520
12521         got = ppc64_elf_tdata (ibfd)->got;
12522         if (got != NULL)
12523           {
12524             done_something = got->rawsize != got->size;
12525             if (done_something)
12526               break;
12527           }
12528       }
12529
12530   if (done_something)
12531     (*htab->params->layout_sections_again) ();
12532
12533   /* Set up for second pass over toc sections to recalculate elf_gp
12534      on input sections.  */
12535   htab->toc_bfd = NULL;
12536   htab->toc_first_sec = NULL;
12537   htab->second_toc_pass = TRUE;
12538   return done_something;
12539 }
12540
12541 /* Called after second pass of multitoc partitioning.  */
12542
12543 void
12544 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
12545 {
12546   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12547
12548   /* After the second pass, toc_curr tracks the TOC offset used
12549      for code sections below in ppc64_elf_next_input_section.  */
12550   htab->toc_curr = TOC_BASE_OFF;
12551 }
12552
12553 /* No toc references were found in ISEC.  If the code in ISEC makes no
12554    calls, then there's no need to use toc adjusting stubs when branching
12555    into ISEC.  Actually, indirect calls from ISEC are OK as they will
12556    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
12557    needed, and 2 if a cyclical call-graph was found but no other reason
12558    for a stub was detected.  If called from the top level, a return of
12559    2 means the same as a return of 0.  */
12560
12561 static int
12562 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
12563 {
12564   int ret;
12565
12566   /* Mark this section as checked.  */
12567   isec->call_check_done = 1;
12568
12569   /* We know none of our code bearing sections will need toc stubs.  */
12570   if ((isec->flags & SEC_LINKER_CREATED) != 0)
12571     return 0;
12572
12573   if (isec->size == 0)
12574     return 0;
12575
12576   if (isec->output_section == NULL)
12577     return 0;
12578
12579   ret = 0;
12580   if (isec->reloc_count != 0)
12581     {
12582       Elf_Internal_Rela *relstart, *rel;
12583       Elf_Internal_Sym *local_syms;
12584       struct ppc_link_hash_table *htab;
12585
12586       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
12587                                             info->keep_memory);
12588       if (relstart == NULL)
12589         return -1;
12590
12591       /* Look for branches to outside of this section.  */
12592       local_syms = NULL;
12593       htab = ppc_hash_table (info);
12594       if (htab == NULL)
12595         return -1;
12596
12597       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
12598         {
12599           enum elf_ppc64_reloc_type r_type;
12600           unsigned long r_symndx;
12601           struct elf_link_hash_entry *h;
12602           struct ppc_link_hash_entry *eh;
12603           Elf_Internal_Sym *sym;
12604           asection *sym_sec;
12605           struct _opd_sec_data *opd;
12606           bfd_vma sym_value;
12607           bfd_vma dest;
12608
12609           r_type = ELF64_R_TYPE (rel->r_info);
12610           if (r_type != R_PPC64_REL24
12611               && r_type != R_PPC64_REL24_NOTOC
12612               && r_type != R_PPC64_REL14
12613               && r_type != R_PPC64_REL14_BRTAKEN
12614               && r_type != R_PPC64_REL14_BRNTAKEN
12615               && r_type != R_PPC64_PLTCALL
12616               && r_type != R_PPC64_PLTCALL_NOTOC)
12617             continue;
12618
12619           r_symndx = ELF64_R_SYM (rel->r_info);
12620           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
12621                           isec->owner))
12622             {
12623               ret = -1;
12624               break;
12625             }
12626
12627           /* Calls to dynamic lib functions go through a plt call stub
12628              that uses r2.  */
12629           eh = ppc_elf_hash_entry (h);
12630           if (eh != NULL
12631               && (eh->elf.plt.plist != NULL
12632                   || (eh->oh != NULL
12633                       && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
12634             {
12635               ret = 1;
12636               break;
12637             }
12638
12639           if (sym_sec == NULL)
12640             /* Ignore other undefined symbols.  */
12641             continue;
12642
12643           /* Assume branches to other sections not included in the
12644              link need stubs too, to cover -R and absolute syms.  */
12645           if (sym_sec->output_section == NULL)
12646             {
12647               ret = 1;
12648               break;
12649             }
12650
12651           if (h == NULL)
12652             sym_value = sym->st_value;
12653           else
12654             {
12655               if (h->root.type != bfd_link_hash_defined
12656                   && h->root.type != bfd_link_hash_defweak)
12657                 abort ();
12658               sym_value = h->root.u.def.value;
12659             }
12660           sym_value += rel->r_addend;
12661
12662           /* If this branch reloc uses an opd sym, find the code section.  */
12663           opd = get_opd_info (sym_sec);
12664           if (opd != NULL)
12665             {
12666               if (h == NULL && opd->adjust != NULL)
12667                 {
12668                   long adjust;
12669
12670                   adjust = opd->adjust[OPD_NDX (sym_value)];
12671                   if (adjust == -1)
12672                     /* Assume deleted functions won't ever be called.  */
12673                     continue;
12674                   sym_value += adjust;
12675                 }
12676
12677               dest = opd_entry_value (sym_sec, sym_value,
12678                                       &sym_sec, NULL, FALSE);
12679               if (dest == (bfd_vma) -1)
12680                 continue;
12681             }
12682           else
12683             dest = (sym_value
12684                     + sym_sec->output_offset
12685                     + sym_sec->output_section->vma);
12686
12687           /* Ignore branch to self.  */
12688           if (sym_sec == isec)
12689             continue;
12690
12691           /* If the called function uses the toc, we need a stub.  */
12692           if (sym_sec->has_toc_reloc
12693               || sym_sec->makes_toc_func_call)
12694             {
12695               ret = 1;
12696               break;
12697             }
12698
12699           /* Assume any branch that needs a long branch stub might in fact
12700              need a plt_branch stub.  A plt_branch stub uses r2.  */
12701           else if (dest - (isec->output_offset
12702                            + isec->output_section->vma
12703                            + rel->r_offset) + (1 << 25)
12704                    >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
12705                                                              ? h->other
12706                                                              : sym->st_other))
12707             {
12708               ret = 1;
12709               break;
12710             }
12711
12712           /* If calling back to a section in the process of being
12713              tested, we can't say for sure that no toc adjusting stubs
12714              are needed, so don't return zero.  */
12715           else if (sym_sec->call_check_in_progress)
12716             ret = 2;
12717
12718           /* Branches to another section that itself doesn't have any TOC
12719              references are OK.  Recursively call ourselves to check.  */
12720           else if (!sym_sec->call_check_done)
12721             {
12722               int recur;
12723
12724               /* Mark current section as indeterminate, so that other
12725                  sections that call back to current won't be marked as
12726                  known.  */
12727               isec->call_check_in_progress = 1;
12728               recur = toc_adjusting_stub_needed (info, sym_sec);
12729               isec->call_check_in_progress = 0;
12730
12731               if (recur != 0)
12732                 {
12733                   ret = recur;
12734                   if (recur != 2)
12735                     break;
12736                 }
12737             }
12738         }
12739
12740       if (local_syms != NULL
12741           && (elf_symtab_hdr (isec->owner).contents
12742               != (unsigned char *) local_syms))
12743         free (local_syms);
12744       if (elf_section_data (isec)->relocs != relstart)
12745         free (relstart);
12746     }
12747
12748   if ((ret & 1) == 0
12749       && isec->map_head.s != NULL
12750       && (strcmp (isec->output_section->name, ".init") == 0
12751           || strcmp (isec->output_section->name, ".fini") == 0))
12752     {
12753       if (isec->map_head.s->has_toc_reloc
12754           || isec->map_head.s->makes_toc_func_call)
12755         ret = 1;
12756       else if (!isec->map_head.s->call_check_done)
12757         {
12758           int recur;
12759           isec->call_check_in_progress = 1;
12760           recur = toc_adjusting_stub_needed (info, isec->map_head.s);
12761           isec->call_check_in_progress = 0;
12762           if (recur != 0)
12763             ret = recur;
12764         }
12765     }
12766
12767   if (ret == 1)
12768     isec->makes_toc_func_call = 1;
12769
12770   return ret;
12771 }
12772
12773 /* The linker repeatedly calls this function for each input section,
12774    in the order that input sections are linked into output sections.
12775    Build lists of input sections to determine groupings between which
12776    we may insert linker stubs.  */
12777
12778 bfd_boolean
12779 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12780 {
12781   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12782
12783   if (htab == NULL)
12784     return FALSE;
12785
12786   if ((isec->output_section->flags & SEC_CODE) != 0
12787       && isec->output_section->id < htab->sec_info_arr_size)
12788     {
12789       /* This happens to make the list in reverse order,
12790          which is what we want.  */
12791       htab->sec_info[isec->id].u.list
12792         = htab->sec_info[isec->output_section->id].u.list;
12793       htab->sec_info[isec->output_section->id].u.list = isec;
12794     }
12795
12796   if (htab->multi_toc_needed)
12797     {
12798       /* Analyse sections that aren't already flagged as needing a
12799          valid toc pointer.  Exclude .fixup for the linux kernel.
12800          .fixup contains branches, but only back to the function that
12801          hit an exception.  */
12802       if (!(isec->has_toc_reloc
12803             || (isec->flags & SEC_CODE) == 0
12804             || strcmp (isec->name, ".fixup") == 0
12805             || isec->call_check_done))
12806         {
12807           if (toc_adjusting_stub_needed (info, isec) < 0)
12808             return FALSE;
12809         }
12810       /* Make all sections use the TOC assigned for this object file.
12811          This will be wrong for pasted sections;  We fix that in
12812          check_pasted_section().  */
12813       if (elf_gp (isec->owner) != 0)
12814         htab->toc_curr = elf_gp (isec->owner);
12815     }
12816
12817   htab->sec_info[isec->id].toc_off = htab->toc_curr;
12818   return TRUE;
12819 }
12820
12821 /* Check that all .init and .fini sections use the same toc, if they
12822    have toc relocs.  */
12823
12824 static bfd_boolean
12825 check_pasted_section (struct bfd_link_info *info, const char *name)
12826 {
12827   asection *o = bfd_get_section_by_name (info->output_bfd, name);
12828
12829   if (o != NULL)
12830     {
12831       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12832       bfd_vma toc_off = 0;
12833       asection *i;
12834
12835       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12836         if (i->has_toc_reloc)
12837           {
12838             if (toc_off == 0)
12839               toc_off = htab->sec_info[i->id].toc_off;
12840             else if (toc_off != htab->sec_info[i->id].toc_off)
12841               return FALSE;
12842           }
12843
12844       if (toc_off == 0)
12845         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12846           if (i->makes_toc_func_call)
12847             {
12848               toc_off = htab->sec_info[i->id].toc_off;
12849               break;
12850             }
12851
12852       /* Make sure the whole pasted function uses the same toc offset.  */
12853       if (toc_off != 0)
12854         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12855           htab->sec_info[i->id].toc_off = toc_off;
12856     }
12857   return TRUE;
12858 }
12859
12860 bfd_boolean
12861 ppc64_elf_check_init_fini (struct bfd_link_info *info)
12862 {
12863   return (check_pasted_section (info, ".init")
12864           & check_pasted_section (info, ".fini"));
12865 }
12866
12867 /* See whether we can group stub sections together.  Grouping stub
12868    sections may result in fewer stubs.  More importantly, we need to
12869    put all .init* and .fini* stubs at the beginning of the .init or
12870    .fini output sections respectively, because glibc splits the
12871    _init and _fini functions into multiple parts.  Putting a stub in
12872    the middle of a function is not a good idea.  */
12873
12874 static bfd_boolean
12875 group_sections (struct bfd_link_info *info,
12876                 bfd_size_type stub_group_size,
12877                 bfd_boolean stubs_always_before_branch)
12878 {
12879   struct ppc_link_hash_table *htab;
12880   asection *osec;
12881   bfd_boolean suppress_size_errors;
12882
12883   htab = ppc_hash_table (info);
12884   if (htab == NULL)
12885     return FALSE;
12886
12887   suppress_size_errors = FALSE;
12888   if (stub_group_size == 1)
12889     {
12890       /* Default values.  */
12891       if (stubs_always_before_branch)
12892         stub_group_size = 0x1e00000;
12893       else
12894         stub_group_size = 0x1c00000;
12895       suppress_size_errors = TRUE;
12896     }
12897
12898   for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12899     {
12900       asection *tail;
12901
12902       if (osec->id >= htab->sec_info_arr_size)
12903         continue;
12904
12905       tail = htab->sec_info[osec->id].u.list;
12906       while (tail != NULL)
12907         {
12908           asection *curr;
12909           asection *prev;
12910           bfd_size_type total;
12911           bfd_boolean big_sec;
12912           bfd_vma curr_toc;
12913           struct map_stub *group;
12914           bfd_size_type group_size;
12915
12916           curr = tail;
12917           total = tail->size;
12918           group_size = (ppc64_elf_section_data (tail) != NULL
12919                         && ppc64_elf_section_data (tail)->has_14bit_branch
12920                         ? stub_group_size >> 10 : stub_group_size);
12921
12922           big_sec = total > group_size;
12923           if (big_sec && !suppress_size_errors)
12924             /* xgettext:c-format */
12925             _bfd_error_handler (_("%pB section %pA exceeds stub group size"),
12926                                 tail->owner, tail);
12927           curr_toc = htab->sec_info[tail->id].toc_off;
12928
12929           while ((prev = htab->sec_info[curr->id].u.list) != NULL
12930                  && ((total += curr->output_offset - prev->output_offset)
12931                      < (ppc64_elf_section_data (prev) != NULL
12932                         && ppc64_elf_section_data (prev)->has_14bit_branch
12933                         ? (group_size = stub_group_size >> 10) : group_size))
12934                  && htab->sec_info[prev->id].toc_off == curr_toc)
12935             curr = prev;
12936
12937           /* OK, the size from the start of CURR to the end is less
12938              than group_size and thus can be handled by one stub
12939              section.  (or the tail section is itself larger than
12940              group_size, in which case we may be toast.)  We should
12941              really be keeping track of the total size of stubs added
12942              here, as stubs contribute to the final output section
12943              size.  That's a little tricky, and this way will only
12944              break if stubs added make the total size more than 2^25,
12945              ie. for the default stub_group_size, if stubs total more
12946              than 2097152 bytes, or nearly 75000 plt call stubs.  */
12947           group = bfd_alloc (curr->owner, sizeof (*group));
12948           if (group == NULL)
12949             return FALSE;
12950           group->link_sec = curr;
12951           group->stub_sec = NULL;
12952           group->needs_save_res = 0;
12953           group->lr_restore = 0;
12954           group->eh_size = 0;
12955           group->eh_base = 0;
12956           group->next = htab->group;
12957           htab->group = group;
12958           do
12959             {
12960               prev = htab->sec_info[tail->id].u.list;
12961               /* Set up this stub group.  */
12962               htab->sec_info[tail->id].u.group = group;
12963             }
12964           while (tail != curr && (tail = prev) != NULL);
12965
12966           /* But wait, there's more!  Input sections up to group_size
12967              bytes before the stub section can be handled by it too.
12968              Don't do this if we have a really large section after the
12969              stubs, as adding more stubs increases the chance that
12970              branches may not reach into the stub section.  */
12971           if (!stubs_always_before_branch && !big_sec)
12972             {
12973               total = 0;
12974               while (prev != NULL
12975                      && ((total += tail->output_offset - prev->output_offset)
12976                          < (ppc64_elf_section_data (prev) != NULL
12977                             && ppc64_elf_section_data (prev)->has_14bit_branch
12978                             ? (group_size = stub_group_size >> 10)
12979                             : group_size))
12980                      && htab->sec_info[prev->id].toc_off == curr_toc)
12981                 {
12982                   tail = prev;
12983                   prev = htab->sec_info[tail->id].u.list;
12984                   htab->sec_info[tail->id].u.group = group;
12985                 }
12986             }
12987           tail = prev;
12988         }
12989     }
12990   return TRUE;
12991 }
12992
12993 static const unsigned char glink_eh_frame_cie[] =
12994 {
12995   0, 0, 0, 16,                          /* length.  */
12996   0, 0, 0, 0,                           /* id.  */
12997   1,                                    /* CIE version.  */
12998   'z', 'R', 0,                          /* Augmentation string.  */
12999   4,                                    /* Code alignment.  */
13000   0x78,                                 /* Data alignment.  */
13001   65,                                   /* RA reg.  */
13002   1,                                    /* Augmentation size.  */
13003   DW_EH_PE_pcrel | DW_EH_PE_sdata4,     /* FDE encoding.  */
13004   DW_CFA_def_cfa, 1, 0                  /* def_cfa: r1 offset 0.  */
13005 };
13006
13007 /* Stripping output sections is normally done before dynamic section
13008    symbols have been allocated.  This function is called later, and
13009    handles cases like htab->brlt which is mapped to its own output
13010    section.  */
13011
13012 static void
13013 maybe_strip_output (struct bfd_link_info *info, asection *isec)
13014 {
13015   if (isec->size == 0
13016       && isec->output_section->size == 0
13017       && !(isec->output_section->flags & SEC_KEEP)
13018       && !bfd_section_removed_from_list (info->output_bfd,
13019                                          isec->output_section)
13020       && elf_section_data (isec->output_section)->dynindx == 0)
13021     {
13022       isec->output_section->flags |= SEC_EXCLUDE;
13023       bfd_section_list_remove (info->output_bfd, isec->output_section);
13024       info->output_bfd->section_count--;
13025     }
13026 }
13027
13028 /* Determine and set the size of the stub section for a final link.
13029
13030    The basic idea here is to examine all the relocations looking for
13031    PC-relative calls to a target that is unreachable with a "bl"
13032    instruction.  */
13033
13034 bfd_boolean
13035 ppc64_elf_size_stubs (struct bfd_link_info *info)
13036 {
13037   bfd_size_type stub_group_size;
13038   bfd_boolean stubs_always_before_branch;
13039   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13040
13041   if (htab == NULL)
13042     return FALSE;
13043
13044   if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
13045     htab->params->plt_thread_safe = 1;
13046   if (!htab->opd_abi)
13047     htab->params->plt_thread_safe = 0;
13048   else if (htab->params->plt_thread_safe == -1)
13049     {
13050       static const char *const thread_starter[] =
13051         {
13052           "pthread_create",
13053           /* libstdc++ */
13054           "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
13055           /* librt */
13056           "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
13057           "mq_notify", "create_timer",
13058           /* libanl */
13059           "getaddrinfo_a",
13060           /* libgomp */
13061           "GOMP_parallel",
13062           "GOMP_parallel_start",
13063           "GOMP_parallel_loop_static",
13064           "GOMP_parallel_loop_static_start",
13065           "GOMP_parallel_loop_dynamic",
13066           "GOMP_parallel_loop_dynamic_start",
13067           "GOMP_parallel_loop_guided",
13068           "GOMP_parallel_loop_guided_start",
13069           "GOMP_parallel_loop_runtime",
13070           "GOMP_parallel_loop_runtime_start",
13071           "GOMP_parallel_sections",
13072           "GOMP_parallel_sections_start",
13073           /* libgo */
13074           "__go_go",
13075         };
13076       unsigned i;
13077
13078       for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
13079         {
13080           struct elf_link_hash_entry *h;
13081           h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
13082                                     FALSE, FALSE, TRUE);
13083           htab->params->plt_thread_safe = h != NULL && h->ref_regular;
13084           if (htab->params->plt_thread_safe)
13085             break;
13086         }
13087     }
13088   stubs_always_before_branch = htab->params->group_size < 0;
13089   if (htab->params->group_size < 0)
13090     stub_group_size = -htab->params->group_size;
13091   else
13092     stub_group_size = htab->params->group_size;
13093
13094   if (!group_sections (info, stub_group_size, stubs_always_before_branch))
13095     return FALSE;
13096
13097   htab->tga_group = NULL;
13098   if (!htab->params->no_tls_get_addr_regsave
13099       && htab->tga_desc_fd != NULL
13100       && (htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefined
13101           || htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefweak)
13102       && htab->tls_get_addr_fd != NULL
13103       && is_static_defined (&htab->tls_get_addr_fd->elf))
13104     {
13105       asection *sym_sec, *code_sec, *stub_sec;
13106       bfd_vma sym_value;
13107       struct _opd_sec_data *opd;
13108
13109       sym_sec = htab->tls_get_addr_fd->elf.root.u.def.section;
13110       sym_value = defined_sym_val (&htab->tls_get_addr_fd->elf);
13111       code_sec = sym_sec;
13112       opd = get_opd_info (sym_sec);
13113       if (opd != NULL)
13114         opd_entry_value (sym_sec, sym_value, &code_sec, NULL, FALSE);
13115       htab->tga_group = htab->sec_info[code_sec->id].u.group;
13116       stub_sec = (*htab->params->add_stub_section) (".tga_desc.stub",
13117                                                     htab->tga_group->link_sec);
13118       if (stub_sec == NULL)
13119         return FALSE;
13120       htab->tga_group->stub_sec = stub_sec;
13121
13122       htab->tga_desc_fd->elf.root.type = bfd_link_hash_defined;
13123       htab->tga_desc_fd->elf.root.u.def.section = stub_sec;
13124       htab->tga_desc_fd->elf.root.u.def.value = 0;
13125       htab->tga_desc_fd->elf.type = STT_FUNC;
13126       htab->tga_desc_fd->elf.def_regular = 1;
13127       htab->tga_desc_fd->elf.non_elf = 0;
13128       _bfd_elf_link_hash_hide_symbol (info, &htab->tga_desc_fd->elf, TRUE);
13129     }
13130
13131 #define STUB_SHRINK_ITER 20
13132   /* Loop until no stubs added.  After iteration 20 of this loop we may
13133      exit on a stub section shrinking.  This is to break out of a
13134      pathological case where adding stubs on one iteration decreases
13135      section gaps (perhaps due to alignment), which then requires
13136      fewer or smaller stubs on the next iteration.  */
13137
13138   while (1)
13139     {
13140       bfd *input_bfd;
13141       unsigned int bfd_indx;
13142       struct map_stub *group;
13143
13144       htab->stub_iteration += 1;
13145
13146       for (input_bfd = info->input_bfds, bfd_indx = 0;
13147            input_bfd != NULL;
13148            input_bfd = input_bfd->link.next, bfd_indx++)
13149         {
13150           Elf_Internal_Shdr *symtab_hdr;
13151           asection *section;
13152           Elf_Internal_Sym *local_syms = NULL;
13153
13154           if (!is_ppc64_elf (input_bfd))
13155             continue;
13156
13157           /* We'll need the symbol table in a second.  */
13158           symtab_hdr = &elf_symtab_hdr (input_bfd);
13159           if (symtab_hdr->sh_info == 0)
13160             continue;
13161
13162           /* Walk over each section attached to the input bfd.  */
13163           for (section = input_bfd->sections;
13164                section != NULL;
13165                section = section->next)
13166             {
13167               Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
13168
13169               /* If there aren't any relocs, then there's nothing more
13170                  to do.  */
13171               if ((section->flags & SEC_RELOC) == 0
13172                   || (section->flags & SEC_ALLOC) == 0
13173                   || (section->flags & SEC_LOAD) == 0
13174                   || (section->flags & SEC_CODE) == 0
13175                   || section->reloc_count == 0)
13176                 continue;
13177
13178               /* If this section is a link-once section that will be
13179                  discarded, then don't create any stubs.  */
13180               if (section->output_section == NULL
13181                   || section->output_section->owner != info->output_bfd)
13182                 continue;
13183
13184               /* Get the relocs.  */
13185               internal_relocs
13186                 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
13187                                              info->keep_memory);
13188               if (internal_relocs == NULL)
13189                 goto error_ret_free_local;
13190
13191               /* Now examine each relocation.  */
13192               irela = internal_relocs;
13193               irelaend = irela + section->reloc_count;
13194               for (; irela < irelaend; irela++)
13195                 {
13196                   enum elf_ppc64_reloc_type r_type;
13197                   unsigned int r_indx;
13198                   enum ppc_stub_type stub_type;
13199                   struct ppc_stub_hash_entry *stub_entry;
13200                   asection *sym_sec, *code_sec;
13201                   bfd_vma sym_value, code_value;
13202                   bfd_vma destination;
13203                   unsigned long local_off;
13204                   bfd_boolean ok_dest;
13205                   struct ppc_link_hash_entry *hash;
13206                   struct ppc_link_hash_entry *fdh;
13207                   struct elf_link_hash_entry *h;
13208                   Elf_Internal_Sym *sym;
13209                   char *stub_name;
13210                   const asection *id_sec;
13211                   struct _opd_sec_data *opd;
13212                   struct plt_entry *plt_ent;
13213
13214                   r_type = ELF64_R_TYPE (irela->r_info);
13215                   r_indx = ELF64_R_SYM (irela->r_info);
13216
13217                   if (r_type >= R_PPC64_max)
13218                     {
13219                       bfd_set_error (bfd_error_bad_value);
13220                       goto error_ret_free_internal;
13221                     }
13222
13223                   /* Only look for stubs on branch instructions.  */
13224                   if (r_type != R_PPC64_REL24
13225                       && r_type != R_PPC64_REL24_NOTOC
13226                       && r_type != R_PPC64_REL14
13227                       && r_type != R_PPC64_REL14_BRTAKEN
13228                       && r_type != R_PPC64_REL14_BRNTAKEN)
13229                     continue;
13230
13231                   /* Now determine the call target, its name, value,
13232                      section.  */
13233                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
13234                                   r_indx, input_bfd))
13235                     goto error_ret_free_internal;
13236                   hash = ppc_elf_hash_entry (h);
13237
13238                   ok_dest = FALSE;
13239                   fdh = NULL;
13240                   sym_value = 0;
13241                   if (hash == NULL)
13242                     {
13243                       sym_value = sym->st_value;
13244                       if (sym_sec != NULL
13245                           && sym_sec->output_section != NULL)
13246                         ok_dest = TRUE;
13247                     }
13248                   else if (hash->elf.root.type == bfd_link_hash_defined
13249                            || hash->elf.root.type == bfd_link_hash_defweak)
13250                     {
13251                       sym_value = hash->elf.root.u.def.value;
13252                       if (sym_sec->output_section != NULL)
13253                         ok_dest = TRUE;
13254                     }
13255                   else if (hash->elf.root.type == bfd_link_hash_undefweak
13256                            || hash->elf.root.type == bfd_link_hash_undefined)
13257                     {
13258                       /* Recognise an old ABI func code entry sym, and
13259                          use the func descriptor sym instead if it is
13260                          defined.  */
13261                       if (hash->elf.root.root.string[0] == '.'
13262                           && hash->oh != NULL)
13263                         {
13264                           fdh = ppc_follow_link (hash->oh);
13265                           if (fdh->elf.root.type == bfd_link_hash_defined
13266                               || fdh->elf.root.type == bfd_link_hash_defweak)
13267                             {
13268                               sym_sec = fdh->elf.root.u.def.section;
13269                               sym_value = fdh->elf.root.u.def.value;
13270                               if (sym_sec->output_section != NULL)
13271                                 ok_dest = TRUE;
13272                             }
13273                           else
13274                             fdh = NULL;
13275                         }
13276                     }
13277                   else
13278                     {
13279                       bfd_set_error (bfd_error_bad_value);
13280                       goto error_ret_free_internal;
13281                     }
13282
13283                   destination = 0;
13284                   local_off = 0;
13285                   if (ok_dest)
13286                     {
13287                       sym_value += irela->r_addend;
13288                       destination = (sym_value
13289                                      + sym_sec->output_offset
13290                                      + sym_sec->output_section->vma);
13291                       local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
13292                                                             ? hash->elf.other
13293                                                             : sym->st_other);
13294                     }
13295
13296                   code_sec = sym_sec;
13297                   code_value = sym_value;
13298                   opd = get_opd_info (sym_sec);
13299                   if (opd != NULL)
13300                     {
13301                       bfd_vma dest;
13302
13303                       if (hash == NULL && opd->adjust != NULL)
13304                         {
13305                           long adjust = opd->adjust[OPD_NDX (sym_value)];
13306                           if (adjust == -1)
13307                             continue;
13308                           code_value += adjust;
13309                           sym_value += adjust;
13310                         }
13311                       dest = opd_entry_value (sym_sec, sym_value,
13312                                               &code_sec, &code_value, FALSE);
13313                       if (dest != (bfd_vma) -1)
13314                         {
13315                           destination = dest;
13316                           if (fdh != NULL)
13317                             {
13318                               /* Fixup old ABI sym to point at code
13319                                  entry.  */
13320                               hash->elf.root.type = bfd_link_hash_defweak;
13321                               hash->elf.root.u.def.section = code_sec;
13322                               hash->elf.root.u.def.value = code_value;
13323                             }
13324                         }
13325                     }
13326
13327                   /* Determine what (if any) linker stub is needed.  */
13328                   plt_ent = NULL;
13329                   stub_type = ppc_type_of_stub (section, irela, &hash,
13330                                                 &plt_ent, destination,
13331                                                 local_off);
13332
13333                   if (r_type == R_PPC64_REL24_NOTOC)
13334                     {
13335                       if (stub_type == ppc_stub_plt_call)
13336                         stub_type = ppc_stub_plt_call_notoc;
13337                       else if (stub_type == ppc_stub_long_branch
13338                                || (code_sec != NULL
13339                                    && code_sec->output_section != NULL
13340                                    && (((hash ? hash->elf.other : sym->st_other)
13341                                         & STO_PPC64_LOCAL_MASK)
13342                                        > 1 << STO_PPC64_LOCAL_BIT)))
13343                         stub_type = ppc_stub_long_branch_notoc;
13344                     }
13345                   else if (stub_type != ppc_stub_plt_call)
13346                     {
13347                       /* Check whether we need a TOC adjusting stub.
13348                          Since the linker pastes together pieces from
13349                          different object files when creating the
13350                          _init and _fini functions, it may be that a
13351                          call to what looks like a local sym is in
13352                          fact a call needing a TOC adjustment.  */
13353                       if ((code_sec != NULL
13354                            && code_sec->output_section != NULL
13355                            && (htab->sec_info[code_sec->id].toc_off
13356                                != htab->sec_info[section->id].toc_off)
13357                            && (code_sec->has_toc_reloc
13358                                || code_sec->makes_toc_func_call))
13359                           || (((hash ? hash->elf.other : sym->st_other)
13360                                & STO_PPC64_LOCAL_MASK)
13361                               == 1 << STO_PPC64_LOCAL_BIT))
13362                         stub_type = ppc_stub_long_branch_r2off;
13363                     }
13364
13365                   if (stub_type == ppc_stub_none)
13366                     continue;
13367
13368                   /* __tls_get_addr calls might be eliminated.  */
13369                   if (stub_type != ppc_stub_plt_call
13370                       && stub_type != ppc_stub_plt_call_notoc
13371                       && hash != NULL
13372                       && is_tls_get_addr (&hash->elf, htab)
13373                       && section->has_tls_reloc
13374                       && irela != internal_relocs)
13375                     {
13376                       /* Get tls info.  */
13377                       unsigned char *tls_mask;
13378
13379                       if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
13380                                          irela - 1, input_bfd))
13381                         goto error_ret_free_internal;
13382                       if ((*tls_mask & TLS_TLS) != 0
13383                           && (*tls_mask & (TLS_GD | TLS_LD)) == 0)
13384                         continue;
13385                     }
13386
13387                   if (stub_type == ppc_stub_plt_call)
13388                     {
13389                       if (!htab->opd_abi
13390                           && htab->params->plt_localentry0 != 0
13391                           && is_elfv2_localentry0 (&hash->elf))
13392                         htab->has_plt_localentry0 = 1;
13393                       else if (irela + 1 < irelaend
13394                                && irela[1].r_offset == irela->r_offset + 4
13395                                && (ELF64_R_TYPE (irela[1].r_info)
13396                                    == R_PPC64_TOCSAVE))
13397                         {
13398                           if (!tocsave_find (htab, INSERT,
13399                                              &local_syms, irela + 1, input_bfd))
13400                             goto error_ret_free_internal;
13401                         }
13402                       else
13403                         stub_type = ppc_stub_plt_call_r2save;
13404                     }
13405
13406                   /* Support for grouping stub sections.  */
13407                   id_sec = htab->sec_info[section->id].u.group->link_sec;
13408
13409                   /* Get the name of this stub.  */
13410                   stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
13411                   if (!stub_name)
13412                     goto error_ret_free_internal;
13413
13414                   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
13415                                                      stub_name, FALSE, FALSE);
13416                   if (stub_entry != NULL)
13417                     {
13418                       enum ppc_stub_type old_type;
13419                       /* A stub has already been created, but it may
13420                          not be the required type.  We shouldn't be
13421                          transitioning from plt_call to long_branch
13422                          stubs or vice versa, but we might be
13423                          upgrading from plt_call to plt_call_r2save or
13424                          from long_branch to long_branch_r2off.  */
13425                       free (stub_name);
13426                       old_type = stub_entry->stub_type;
13427                       switch (old_type)
13428                         {
13429                         default:
13430                           abort ();
13431
13432                         case ppc_stub_save_res:
13433                           continue;
13434
13435                         case ppc_stub_plt_call:
13436                         case ppc_stub_plt_call_r2save:
13437                         case ppc_stub_plt_call_notoc:
13438                         case ppc_stub_plt_call_both:
13439                           if (stub_type == ppc_stub_plt_call)
13440                             continue;
13441                           else if (stub_type == ppc_stub_plt_call_r2save)
13442                             {
13443                               if (old_type == ppc_stub_plt_call_notoc)
13444                                 stub_type = ppc_stub_plt_call_both;
13445                             }
13446                           else if (stub_type == ppc_stub_plt_call_notoc)
13447                             {
13448                               if (old_type == ppc_stub_plt_call_r2save)
13449                                 stub_type = ppc_stub_plt_call_both;
13450                             }
13451                           else
13452                             abort ();
13453                           break;
13454
13455                         case ppc_stub_plt_branch:
13456                         case ppc_stub_plt_branch_r2off:
13457                         case ppc_stub_plt_branch_notoc:
13458                         case ppc_stub_plt_branch_both:
13459                           old_type += (ppc_stub_long_branch
13460                                        - ppc_stub_plt_branch);
13461                           /* Fall through.  */
13462                         case ppc_stub_long_branch:
13463                         case ppc_stub_long_branch_r2off:
13464                         case ppc_stub_long_branch_notoc:
13465                         case ppc_stub_long_branch_both:
13466                           if (stub_type == ppc_stub_long_branch)
13467                             continue;
13468                           else if (stub_type == ppc_stub_long_branch_r2off)
13469                             {
13470                               if (old_type == ppc_stub_long_branch_notoc)
13471                                 stub_type = ppc_stub_long_branch_both;
13472                             }
13473                           else if (stub_type == ppc_stub_long_branch_notoc)
13474                             {
13475                               if (old_type == ppc_stub_long_branch_r2off)
13476                                 stub_type = ppc_stub_long_branch_both;
13477                             }
13478                           else
13479                             abort ();
13480                           break;
13481                         }
13482                       if (old_type < stub_type)
13483                         stub_entry->stub_type = stub_type;
13484                       continue;
13485                     }
13486
13487                   stub_entry = ppc_add_stub (stub_name, section, info);
13488                   if (stub_entry == NULL)
13489                     {
13490                       free (stub_name);
13491                     error_ret_free_internal:
13492                       if (elf_section_data (section)->relocs == NULL)
13493                         free (internal_relocs);
13494                     error_ret_free_local:
13495                       if (local_syms != NULL
13496                           && (symtab_hdr->contents
13497                               != (unsigned char *) local_syms))
13498                         free (local_syms);
13499                       return FALSE;
13500                     }
13501
13502                   stub_entry->stub_type = stub_type;
13503                   if (stub_type >= ppc_stub_plt_call
13504                       && stub_type <= ppc_stub_plt_call_both)
13505                     {
13506                       stub_entry->target_value = sym_value;
13507                       stub_entry->target_section = sym_sec;
13508                     }
13509                   else
13510                     {
13511                       stub_entry->target_value = code_value;
13512                       stub_entry->target_section = code_sec;
13513                     }
13514                   stub_entry->h = hash;
13515                   stub_entry->plt_ent = plt_ent;
13516                   stub_entry->symtype
13517                     = hash ? hash->elf.type : ELF_ST_TYPE (sym->st_info);
13518                   stub_entry->other = hash ? hash->elf.other : sym->st_other;
13519
13520                   if (hash != NULL
13521                       && (hash->elf.root.type == bfd_link_hash_defined
13522                           || hash->elf.root.type == bfd_link_hash_defweak))
13523                     htab->stub_globals += 1;
13524                 }
13525
13526               /* We're done with the internal relocs, free them.  */
13527               if (elf_section_data (section)->relocs != internal_relocs)
13528                 free (internal_relocs);
13529             }
13530
13531           if (local_syms != NULL
13532               && symtab_hdr->contents != (unsigned char *) local_syms)
13533             {
13534               if (!info->keep_memory)
13535                 free (local_syms);
13536               else
13537                 symtab_hdr->contents = (unsigned char *) local_syms;
13538             }
13539         }
13540
13541       /* We may have added some stubs.  Find out the new size of the
13542          stub sections.  */
13543       for (group = htab->group; group != NULL; group = group->next)
13544         {
13545           group->lr_restore = 0;
13546           group->eh_size = 0;
13547           if (group->stub_sec != NULL)
13548             {
13549               asection *stub_sec = group->stub_sec;
13550
13551               if (htab->stub_iteration <= STUB_SHRINK_ITER
13552                   || stub_sec->rawsize < stub_sec->size)
13553                 /* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
13554                 stub_sec->rawsize = stub_sec->size;
13555               stub_sec->size = 0;
13556               stub_sec->reloc_count = 0;
13557               stub_sec->flags &= ~SEC_RELOC;
13558             }
13559         }
13560       if (htab->tga_group != NULL)
13561         {
13562           /* See emit_tga_desc and emit_tga_desc_eh_frame.  */
13563           htab->tga_group->eh_size
13564             = 1 + 2 + (htab->opd_abi != 0) + 3 + 8 * 2 + 3 + 8 + 3;
13565           htab->tga_group->lr_restore = 23 * 4;
13566           htab->tga_group->stub_sec->size = 24 * 4;
13567         }
13568
13569       if (htab->stub_iteration <= STUB_SHRINK_ITER
13570           || htab->brlt->rawsize < htab->brlt->size)
13571         htab->brlt->rawsize = htab->brlt->size;
13572       htab->brlt->size = 0;
13573       htab->brlt->reloc_count = 0;
13574       htab->brlt->flags &= ~SEC_RELOC;
13575       if (htab->relbrlt != NULL)
13576         htab->relbrlt->size = 0;
13577
13578       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
13579
13580       for (group = htab->group; group != NULL; group = group->next)
13581         if (group->needs_save_res)
13582           group->stub_sec->size += htab->sfpr->size;
13583
13584       if (info->emitrelocations
13585           && htab->glink != NULL && htab->glink->size != 0)
13586         {
13587           htab->glink->reloc_count = 1;
13588           htab->glink->flags |= SEC_RELOC;
13589         }
13590
13591       if (htab->glink_eh_frame != NULL
13592           && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
13593           && htab->glink_eh_frame->output_section->size > 8)
13594         {
13595           size_t size = 0, align = 4;
13596
13597           for (group = htab->group; group != NULL; group = group->next)
13598             if (group->eh_size != 0)
13599               size += (group->eh_size + 17 + align - 1) & -align;
13600           if (htab->glink != NULL && htab->glink->size != 0)
13601             size += (24 + align - 1) & -align;
13602           if (size != 0)
13603             size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13604           align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13605           size = (size + align - 1) & -align;
13606           htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
13607           htab->glink_eh_frame->size = size;
13608         }
13609
13610       if (htab->params->plt_stub_align != 0)
13611         for (group = htab->group; group != NULL; group = group->next)
13612           if (group->stub_sec != NULL)
13613             {
13614               int align = abs (htab->params->plt_stub_align);
13615               group->stub_sec->size
13616                 = (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
13617             }
13618
13619       for (group = htab->group; group != NULL; group = group->next)
13620         if (group->stub_sec != NULL
13621             && group->stub_sec->rawsize != group->stub_sec->size
13622             && (htab->stub_iteration <= STUB_SHRINK_ITER
13623                 || group->stub_sec->rawsize < group->stub_sec->size))
13624           break;
13625
13626       if (group == NULL
13627           && (htab->brlt->rawsize == htab->brlt->size
13628               || (htab->stub_iteration > STUB_SHRINK_ITER
13629                   && htab->brlt->rawsize > htab->brlt->size))
13630           && (htab->glink_eh_frame == NULL
13631               || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)
13632           && (htab->tga_group == NULL
13633               || htab->stub_iteration > 1))
13634         break;
13635
13636       /* Ask the linker to do its stuff.  */
13637       (*htab->params->layout_sections_again) ();
13638     }
13639
13640   if (htab->glink_eh_frame != NULL
13641       && htab->glink_eh_frame->size != 0)
13642     {
13643       bfd_vma val;
13644       bfd_byte *p, *last_fde;
13645       size_t last_fde_len, size, align, pad;
13646       struct map_stub *group;
13647
13648       /* It is necessary to at least have a rough outline of the
13649          linker generated CIEs and FDEs written before
13650          bfd_elf_discard_info is run, in order for these FDEs to be
13651          indexed in .eh_frame_hdr.  */
13652       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
13653       if (p == NULL)
13654         return FALSE;
13655       htab->glink_eh_frame->contents = p;
13656       last_fde = p;
13657       align = 4;
13658
13659       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
13660       /* CIE length (rewrite in case little-endian).  */
13661       last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
13662       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13663       p += last_fde_len + 4;
13664
13665       for (group = htab->group; group != NULL; group = group->next)
13666         if (group->eh_size != 0)
13667           {
13668             group->eh_base = p - htab->glink_eh_frame->contents;
13669             last_fde = p;
13670             last_fde_len = ((group->eh_size + 17 + align - 1) & -align) - 4;
13671             /* FDE length.  */
13672             bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13673             p += 4;
13674             /* CIE pointer.  */
13675             val = p - htab->glink_eh_frame->contents;
13676             bfd_put_32 (htab->elf.dynobj, val, p);
13677             p += 4;
13678             /* Offset to stub section, written later.  */
13679             p += 4;
13680             /* stub section size.  */
13681             bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
13682             p += 4;
13683             /* Augmentation.  */
13684             p += 1;
13685             /* Make sure we don't have all nops.  This is enough for
13686                elf-eh-frame.c to detect the last non-nop opcode.  */
13687             p[group->eh_size - 1] = DW_CFA_advance_loc + 1;
13688             p = last_fde + last_fde_len + 4;
13689           }
13690       if (htab->glink != NULL && htab->glink->size != 0)
13691         {
13692           last_fde = p;
13693           last_fde_len = ((24 + align - 1) & -align) - 4;
13694           /* FDE length.  */
13695           bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13696           p += 4;
13697           /* CIE pointer.  */
13698           val = p - htab->glink_eh_frame->contents;
13699           bfd_put_32 (htab->elf.dynobj, val, p);
13700           p += 4;
13701           /* Offset to .glink, written later.  */
13702           p += 4;
13703           /* .glink size.  */
13704           bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
13705           p += 4;
13706           /* Augmentation.  */
13707           p += 1;
13708
13709           *p++ = DW_CFA_advance_loc + 1;
13710           *p++ = DW_CFA_register;
13711           *p++ = 65;
13712           *p++ = htab->opd_abi ? 12 : 0;
13713           *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
13714           *p++ = DW_CFA_restore_extended;
13715           *p++ = 65;
13716           p += ((24 + align - 1) & -align) - 24;
13717         }
13718       /* Subsume any padding into the last FDE if user .eh_frame
13719          sections are aligned more than glink_eh_frame.  Otherwise any
13720          zero padding will be seen as a terminator.  */
13721       align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13722       size = p - htab->glink_eh_frame->contents;
13723       pad = ((size + align - 1) & -align) - size;
13724       htab->glink_eh_frame->size = size + pad;
13725       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
13726     }
13727
13728   maybe_strip_output (info, htab->brlt);
13729   if (htab->glink_eh_frame != NULL)
13730     maybe_strip_output (info, htab->glink_eh_frame);
13731
13732   return TRUE;
13733 }
13734
13735 /* Called after we have determined section placement.  If sections
13736    move, we'll be called again.  Provide a value for TOCstart.  */
13737
13738 bfd_vma
13739 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
13740 {
13741   asection *s;
13742   bfd_vma TOCstart, adjust;
13743
13744   if (info != NULL)
13745     {
13746       struct elf_link_hash_entry *h;
13747       struct elf_link_hash_table *htab = elf_hash_table (info);
13748
13749       if (is_elf_hash_table (htab)
13750           && htab->hgot != NULL)
13751         h = htab->hgot;
13752       else
13753         {
13754           h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
13755           if (is_elf_hash_table (htab))
13756             htab->hgot = h;
13757         }
13758       if (h != NULL
13759           && h->root.type == bfd_link_hash_defined
13760           && !h->root.linker_def
13761           && (!is_elf_hash_table (htab)
13762               || h->def_regular))
13763         {
13764           TOCstart = defined_sym_val (h) - TOC_BASE_OFF;
13765           _bfd_set_gp_value (obfd, TOCstart);
13766           return TOCstart;
13767         }
13768     }
13769
13770   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
13771      order.  The TOC starts where the first of these sections starts.  */
13772   s = bfd_get_section_by_name (obfd, ".got");
13773   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13774     s = bfd_get_section_by_name (obfd, ".toc");
13775   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13776     s = bfd_get_section_by_name (obfd, ".tocbss");
13777   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13778     s = bfd_get_section_by_name (obfd, ".plt");
13779   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13780     {
13781       /* This may happen for
13782          o  references to TOC base (SYM@toc / TOC[tc0]) without a
13783          .toc directive
13784          o  bad linker script
13785          o --gc-sections and empty TOC sections
13786
13787          FIXME: Warn user?  */
13788
13789       /* Look for a likely section.  We probably won't even be
13790          using TOCstart.  */
13791       for (s = obfd->sections; s != NULL; s = s->next)
13792         if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
13793                          | SEC_EXCLUDE))
13794             == (SEC_ALLOC | SEC_SMALL_DATA))
13795           break;
13796       if (s == NULL)
13797         for (s = obfd->sections; s != NULL; s = s->next)
13798           if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
13799               == (SEC_ALLOC | SEC_SMALL_DATA))
13800             break;
13801       if (s == NULL)
13802         for (s = obfd->sections; s != NULL; s = s->next)
13803           if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
13804               == SEC_ALLOC)
13805             break;
13806       if (s == NULL)
13807         for (s = obfd->sections; s != NULL; s = s->next)
13808           if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
13809             break;
13810     }
13811
13812   TOCstart = 0;
13813   if (s != NULL)
13814     TOCstart = s->output_section->vma + s->output_offset;
13815
13816   /* Force alignment.  */
13817   adjust = TOCstart & (TOC_BASE_ALIGN - 1);
13818   TOCstart -= adjust;
13819   _bfd_set_gp_value (obfd, TOCstart);
13820
13821   if (info != NULL && s != NULL)
13822     {
13823       struct ppc_link_hash_table *htab = ppc_hash_table (info);
13824
13825       if (htab != NULL)
13826         {
13827           if (htab->elf.hgot != NULL)
13828             {
13829               htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
13830               htab->elf.hgot->root.u.def.section = s;
13831             }
13832         }
13833       else
13834         {
13835           struct bfd_link_hash_entry *bh = NULL;
13836           _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
13837                                             s, TOC_BASE_OFF - adjust,
13838                                             NULL, FALSE, FALSE, &bh);
13839         }
13840     }
13841   return TOCstart;
13842 }
13843
13844 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
13845    write out any global entry stubs, and PLT relocations.  */
13846
13847 static bfd_boolean
13848 build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
13849 {
13850   struct bfd_link_info *info;
13851   struct ppc_link_hash_table *htab;
13852   struct plt_entry *ent;
13853   asection *s;
13854
13855   if (h->root.type == bfd_link_hash_indirect)
13856     return TRUE;
13857
13858   info = inf;
13859   htab = ppc_hash_table (info);
13860   if (htab == NULL)
13861     return FALSE;
13862
13863   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13864     if (ent->plt.offset != (bfd_vma) -1)
13865       {
13866         /* This symbol has an entry in the procedure linkage
13867            table.  Set it up.  */
13868         Elf_Internal_Rela rela;
13869         asection *plt, *relplt;
13870         bfd_byte *loc;
13871
13872         if (!htab->elf.dynamic_sections_created
13873             || h->dynindx == -1)
13874           {
13875             if (!(h->def_regular
13876                   && (h->root.type == bfd_link_hash_defined
13877                       || h->root.type == bfd_link_hash_defweak)))
13878               continue;
13879             if (h->type == STT_GNU_IFUNC)
13880               {
13881                 plt = htab->elf.iplt;
13882                 relplt = htab->elf.irelplt;
13883                 htab->local_ifunc_resolver = 1;
13884                 if (htab->opd_abi)
13885                   rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13886                 else
13887                   rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13888               }
13889             else
13890               {
13891                 plt = htab->pltlocal;
13892                 if (bfd_link_pic (info))
13893                   {
13894                     relplt = htab->relpltlocal;
13895                     if (htab->opd_abi)
13896                       rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13897                     else
13898                       rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13899                   }
13900                 else
13901                   relplt = NULL;
13902               }
13903             rela.r_addend = defined_sym_val (h) + ent->addend;
13904
13905             if (relplt == NULL)
13906               {
13907                 loc = plt->contents + ent->plt.offset;
13908                 bfd_put_64 (info->output_bfd, rela.r_addend, loc);
13909                 if (htab->opd_abi)
13910                   {
13911                     bfd_vma toc = elf_gp (info->output_bfd);
13912                     toc += htab->sec_info[h->root.u.def.section->id].toc_off;
13913                     bfd_put_64 (info->output_bfd, toc, loc + 8);
13914                   }
13915               }
13916             else
13917               {
13918                 rela.r_offset = (plt->output_section->vma
13919                                  + plt->output_offset
13920                                  + ent->plt.offset);
13921                 loc = relplt->contents + (relplt->reloc_count++
13922                                           * sizeof (Elf64_External_Rela));
13923                 bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13924               }
13925           }
13926         else
13927           {
13928             rela.r_offset = (htab->elf.splt->output_section->vma
13929                              + htab->elf.splt->output_offset
13930                              + ent->plt.offset);
13931             rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
13932             rela.r_addend = ent->addend;
13933             loc = (htab->elf.srelplt->contents
13934                    + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
13935                       / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
13936             if (h->type == STT_GNU_IFUNC && is_static_defined (h))
13937               htab->maybe_local_ifunc_resolver = 1;
13938             bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13939           }
13940       }
13941
13942   if (!h->pointer_equality_needed)
13943     return TRUE;
13944
13945   if (h->def_regular)
13946     return TRUE;
13947
13948   s = htab->global_entry;
13949   if (s == NULL || s->size == 0)
13950     return TRUE;
13951
13952   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13953     if (ent->plt.offset != (bfd_vma) -1
13954         && ent->addend == 0)
13955       {
13956         bfd_byte *p;
13957         asection *plt;
13958         bfd_vma off;
13959
13960         p = s->contents + h->root.u.def.value;
13961         plt = htab->elf.splt;
13962         if (!htab->elf.dynamic_sections_created
13963             || h->dynindx == -1)
13964           {
13965             if (h->type == STT_GNU_IFUNC)
13966               plt = htab->elf.iplt;
13967             else
13968               plt = htab->pltlocal;
13969           }
13970         off = ent->plt.offset + plt->output_offset + plt->output_section->vma;
13971         off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
13972
13973         if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
13974           {
13975             info->callbacks->einfo
13976               (_("%P: linkage table error against `%pT'\n"),
13977                h->root.root.string);
13978             bfd_set_error (bfd_error_bad_value);
13979             htab->stub_error = TRUE;
13980           }
13981
13982         htab->stub_count[ppc_stub_global_entry - 1] += 1;
13983         if (htab->params->emit_stub_syms)
13984           {
13985             size_t len = strlen (h->root.root.string);
13986             char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
13987
13988             if (name == NULL)
13989               return FALSE;
13990
13991             sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
13992             h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
13993             if (h == NULL)
13994               return FALSE;
13995             if (h->root.type == bfd_link_hash_new)
13996               {
13997                 h->root.type = bfd_link_hash_defined;
13998                 h->root.u.def.section = s;
13999                 h->root.u.def.value = p - s->contents;
14000                 h->ref_regular = 1;
14001                 h->def_regular = 1;
14002                 h->ref_regular_nonweak = 1;
14003                 h->forced_local = 1;
14004                 h->non_elf = 0;
14005                 h->root.linker_def = 1;
14006               }
14007           }
14008
14009         if (PPC_HA (off) != 0)
14010           {
14011             bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
14012             p += 4;
14013           }
14014         bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
14015         p += 4;
14016         bfd_put_32 (s->owner, MTCTR_R12, p);
14017         p += 4;
14018         bfd_put_32 (s->owner, BCTR, p);
14019         break;
14020       }
14021   return TRUE;
14022 }
14023
14024 /* Write PLT relocs for locals.  */
14025
14026 static bfd_boolean
14027 write_plt_relocs_for_local_syms (struct bfd_link_info *info)
14028 {
14029   struct ppc_link_hash_table *htab = ppc_hash_table (info);
14030   bfd *ibfd;
14031
14032   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
14033     {
14034       struct got_entry **lgot_ents, **end_lgot_ents;
14035       struct plt_entry **local_plt, **lplt, **end_local_plt;
14036       Elf_Internal_Shdr *symtab_hdr;
14037       bfd_size_type locsymcount;
14038       Elf_Internal_Sym *local_syms = NULL;
14039       struct plt_entry *ent;
14040
14041       if (!is_ppc64_elf (ibfd))
14042         continue;
14043
14044       lgot_ents = elf_local_got_ents (ibfd);
14045       if (!lgot_ents)
14046         continue;
14047
14048       symtab_hdr = &elf_symtab_hdr (ibfd);
14049       locsymcount = symtab_hdr->sh_info;
14050       end_lgot_ents = lgot_ents + locsymcount;
14051       local_plt = (struct plt_entry **) end_lgot_ents;
14052       end_local_plt = local_plt + locsymcount;
14053       for (lplt = local_plt; lplt < end_local_plt; ++lplt)
14054         for (ent = *lplt; ent != NULL; ent = ent->next)
14055           if (ent->plt.offset != (bfd_vma) -1)
14056             {
14057               Elf_Internal_Sym *sym;
14058               asection *sym_sec;
14059               asection *plt, *relplt;
14060               bfd_byte *loc;
14061               bfd_vma val;
14062
14063               if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
14064                               lplt - local_plt, ibfd))
14065                 {
14066                   if (local_syms != NULL
14067                       && symtab_hdr->contents != (unsigned char *) local_syms)
14068                     free (local_syms);
14069                   return FALSE;
14070                 }
14071
14072               val = sym->st_value + ent->addend;
14073               if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
14074                 val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
14075               if (sym_sec != NULL && sym_sec->output_section != NULL)
14076                 val += sym_sec->output_offset + sym_sec->output_section->vma;
14077
14078               if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14079                 {
14080                   htab->local_ifunc_resolver = 1;
14081                   plt = htab->elf.iplt;
14082                   relplt = htab->elf.irelplt;
14083                 }
14084               else
14085                 {
14086                   plt = htab->pltlocal;
14087                   relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
14088                 }
14089
14090               if (relplt == NULL)
14091                 {
14092                   loc = plt->contents + ent->plt.offset;
14093                   bfd_put_64 (info->output_bfd, val, loc);
14094                   if (htab->opd_abi)
14095                     {
14096                       bfd_vma toc = elf_gp (ibfd);
14097                       bfd_put_64 (info->output_bfd, toc, loc + 8);
14098                     }
14099                 }
14100               else
14101                 {
14102                   Elf_Internal_Rela rela;
14103                   rela.r_offset = (ent->plt.offset
14104                                    + plt->output_offset
14105                                    + plt->output_section->vma);
14106                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14107                     {
14108                       if (htab->opd_abi)
14109                         rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14110                       else
14111                         rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14112                     }
14113                   else
14114                     {
14115                       if (htab->opd_abi)
14116                         rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
14117                       else
14118                         rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
14119                     }
14120                   rela.r_addend = val;
14121                   loc = relplt->contents + (relplt->reloc_count++
14122                                             * sizeof (Elf64_External_Rela));
14123                   bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
14124                 }
14125             }
14126
14127       if (local_syms != NULL
14128           && symtab_hdr->contents != (unsigned char *) local_syms)
14129         {
14130           if (!info->keep_memory)
14131             free (local_syms);
14132           else
14133             symtab_hdr->contents = (unsigned char *) local_syms;
14134         }
14135     }
14136   return TRUE;
14137 }
14138
14139 /* Emit the static wrapper function preserving registers around a
14140    __tls_get_addr_opt call.  */
14141
14142 static bfd_boolean
14143 emit_tga_desc (struct ppc_link_hash_table *htab)
14144 {
14145   asection *stub_sec = htab->tga_group->stub_sec;
14146   unsigned int cfa_updt = 11 * 4;
14147   bfd_byte *p;
14148   bfd_vma to, from, delta;
14149
14150   BFD_ASSERT (htab->tga_desc_fd->elf.root.type == bfd_link_hash_defined
14151               && htab->tga_desc_fd->elf.root.u.def.section == stub_sec
14152               && htab->tga_desc_fd->elf.root.u.def.value == 0);
14153   to = defined_sym_val (&htab->tls_get_addr_fd->elf);
14154   from = defined_sym_val (&htab->tga_desc_fd->elf) + cfa_updt;
14155   delta = to - from;
14156   if (delta + (1 << 25) >= 1 << 26)
14157     {
14158       _bfd_error_handler (_("__tls_get_addr call offset overflow"));
14159       htab->stub_error = TRUE;
14160       return FALSE;
14161     }
14162
14163   p = stub_sec->contents;
14164   p = tls_get_addr_prologue (htab->elf.dynobj, p, htab);
14165   bfd_put_32 (stub_sec->owner, B_DOT | 1 | (delta & 0x3fffffc), p);
14166   p += 4;
14167   p = tls_get_addr_epilogue (htab->elf.dynobj, p, htab);
14168   return stub_sec->size == (bfd_size_type) (p - stub_sec->contents);
14169 }
14170
14171 /* Emit eh_frame describing the static wrapper function.  */
14172
14173 static bfd_byte *
14174 emit_tga_desc_eh_frame (struct ppc_link_hash_table *htab, bfd_byte *p)
14175 {
14176   unsigned int cfa_updt = 11 * 4;
14177   unsigned int i;
14178
14179   *p++ = DW_CFA_advance_loc + cfa_updt / 4;
14180   *p++ = DW_CFA_def_cfa_offset;
14181   if (htab->opd_abi)
14182     {
14183       *p++ = 128;
14184       *p++ = 1;
14185     }
14186   else
14187     *p++ = 96;
14188   *p++ = DW_CFA_offset_extended_sf;
14189   *p++ = 65;
14190   *p++ = (-16 / 8) & 0x7f;
14191   for (i = 4; i < 12; i++)
14192     {
14193       *p++ = DW_CFA_offset + i;
14194       *p++ = (htab->opd_abi ? 13 : 12) - i;
14195     }
14196   *p++ = DW_CFA_advance_loc + 10;
14197   *p++ = DW_CFA_def_cfa_offset;
14198   *p++ = 0;
14199   for (i = 4; i < 12; i++)
14200     *p++ = DW_CFA_restore + i;
14201   *p++ = DW_CFA_advance_loc + 2;
14202   *p++ = DW_CFA_restore_extended;
14203   *p++ = 65;
14204   return p;
14205 }
14206
14207 /* Build all the stubs associated with the current output file.
14208    The stubs are kept in a hash table attached to the main linker
14209    hash table.  This function is called via gldelf64ppc_finish.  */
14210
14211 bfd_boolean
14212 ppc64_elf_build_stubs (struct bfd_link_info *info,
14213                        char **stats)
14214 {
14215   struct ppc_link_hash_table *htab = ppc_hash_table (info);
14216   struct map_stub *group;
14217   asection *stub_sec;
14218   bfd_byte *p;
14219   int stub_sec_count = 0;
14220
14221   if (htab == NULL)
14222     return FALSE;
14223
14224   /* Allocate memory to hold the linker stubs.  */
14225   for (group = htab->group; group != NULL; group = group->next)
14226     {
14227       group->eh_size = 0;
14228       group->lr_restore = 0;
14229       if ((stub_sec = group->stub_sec) != NULL
14230           && stub_sec->size != 0)
14231         {
14232           stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
14233                                            stub_sec->size);
14234           if (stub_sec->contents == NULL)
14235             return FALSE;
14236           stub_sec->size = 0;
14237         }
14238     }
14239
14240   if (htab->glink != NULL && htab->glink->size != 0)
14241     {
14242       unsigned int indx;
14243       bfd_vma plt0;
14244
14245       /* Build the .glink plt call stub.  */
14246       if (htab->params->emit_stub_syms)
14247         {
14248           struct elf_link_hash_entry *h;
14249           h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
14250                                     TRUE, FALSE, FALSE);
14251           if (h == NULL)
14252             return FALSE;
14253           if (h->root.type == bfd_link_hash_new)
14254             {
14255               h->root.type = bfd_link_hash_defined;
14256               h->root.u.def.section = htab->glink;
14257               h->root.u.def.value = 8;
14258               h->ref_regular = 1;
14259               h->def_regular = 1;
14260               h->ref_regular_nonweak = 1;
14261               h->forced_local = 1;
14262               h->non_elf = 0;
14263               h->root.linker_def = 1;
14264             }
14265         }
14266       plt0 = (htab->elf.splt->output_section->vma
14267               + htab->elf.splt->output_offset
14268               - 16);
14269       if (info->emitrelocations)
14270         {
14271           Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
14272           if (r == NULL)
14273             return FALSE;
14274           r->r_offset = (htab->glink->output_offset
14275                          + htab->glink->output_section->vma);
14276           r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
14277           r->r_addend = plt0;
14278         }
14279       p = htab->glink->contents;
14280       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
14281       bfd_put_64 (htab->glink->owner, plt0, p);
14282       p += 8;
14283       if (htab->opd_abi)
14284         {
14285           bfd_put_32 (htab->glink->owner, MFLR_R12, p);
14286           p += 4;
14287           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
14288           p += 4;
14289           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
14290           p += 4;
14291           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
14292           p += 4;
14293           bfd_put_32 (htab->glink->owner, MTLR_R12, p);
14294           p += 4;
14295           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
14296           p += 4;
14297           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
14298           p += 4;
14299           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
14300           p += 4;
14301           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
14302           p += 4;
14303           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
14304           p += 4;
14305         }
14306       else
14307         {
14308           bfd_put_32 (htab->glink->owner, MFLR_R0, p);
14309           p += 4;
14310           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
14311           p += 4;
14312           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
14313           p += 4;
14314           bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
14315           p += 4;
14316           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
14317           p += 4;
14318           bfd_put_32 (htab->glink->owner, MTLR_R0, p);
14319           p += 4;
14320           bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
14321           p += 4;
14322           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
14323           p += 4;
14324           bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
14325           p += 4;
14326           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
14327           p += 4;
14328           bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
14329           p += 4;
14330           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
14331           p += 4;
14332           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
14333           p += 4;
14334         }
14335       bfd_put_32 (htab->glink->owner, BCTR, p);
14336       p += 4;
14337       BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
14338
14339       /* Build the .glink lazy link call stubs.  */
14340       indx = 0;
14341       while (p < htab->glink->contents + htab->glink->size)
14342         {
14343           if (htab->opd_abi)
14344             {
14345               if (indx < 0x8000)
14346                 {
14347                   bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
14348                   p += 4;
14349                 }
14350               else
14351                 {
14352                   bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
14353                   p += 4;
14354                   bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
14355                               p);
14356                   p += 4;
14357                 }
14358             }
14359           bfd_put_32 (htab->glink->owner,
14360                       B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
14361           indx++;
14362           p += 4;
14363         }
14364     }
14365
14366   if (htab->tga_group != NULL)
14367     {
14368       htab->tga_group->lr_restore = 23 * 4;
14369       htab->tga_group->stub_sec->size = 24 * 4;
14370       if (!emit_tga_desc (htab))
14371         return FALSE;
14372       if (htab->glink_eh_frame != NULL
14373           && htab->glink_eh_frame->size != 0)
14374         {
14375           size_t align = 4;
14376
14377           p = htab->glink_eh_frame->contents;
14378           p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14379           p += 17;
14380           htab->tga_group->eh_size = emit_tga_desc_eh_frame (htab, p) - p;
14381         }
14382     }
14383
14384   /* Build .glink global entry stubs, and PLT relocs for globals.  */
14385   elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
14386
14387   if (!write_plt_relocs_for_local_syms (info))
14388     return FALSE;
14389
14390   if (htab->brlt != NULL && htab->brlt->size != 0)
14391     {
14392       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
14393                                          htab->brlt->size);
14394       if (htab->brlt->contents == NULL)
14395         return FALSE;
14396     }
14397   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
14398     {
14399       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
14400                                             htab->relbrlt->size);
14401       if (htab->relbrlt->contents == NULL)
14402         return FALSE;
14403     }
14404
14405   /* Build the stubs as directed by the stub hash table.  */
14406   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
14407
14408   for (group = htab->group; group != NULL; group = group->next)
14409     if (group->needs_save_res)
14410       group->stub_sec->size += htab->sfpr->size;
14411
14412   if (htab->relbrlt != NULL)
14413     htab->relbrlt->reloc_count = 0;
14414
14415   if (htab->params->plt_stub_align != 0)
14416     for (group = htab->group; group != NULL; group = group->next)
14417       if ((stub_sec = group->stub_sec) != NULL)
14418         {
14419           int align = abs (htab->params->plt_stub_align);
14420           stub_sec->size = (stub_sec->size + (1 << align) - 1) & -(1 << align);
14421         }
14422
14423   for (group = htab->group; group != NULL; group = group->next)
14424     if (group->needs_save_res)
14425       {
14426         stub_sec = group->stub_sec;
14427         memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
14428                 htab->sfpr->contents, htab->sfpr->size);
14429         if (htab->params->emit_stub_syms)
14430           {
14431             unsigned int i;
14432
14433             for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
14434               if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
14435                 return FALSE;
14436           }
14437       }
14438
14439   if (htab->glink_eh_frame != NULL
14440       && htab->glink_eh_frame->size != 0)
14441     {
14442       bfd_vma val;
14443       size_t align = 4;
14444
14445       p = htab->glink_eh_frame->contents;
14446       p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14447
14448       for (group = htab->group; group != NULL; group = group->next)
14449         if (group->eh_size != 0)
14450           {
14451             /* Offset to stub section.  */
14452             val = (group->stub_sec->output_section->vma
14453                    + group->stub_sec->output_offset);
14454             val -= (htab->glink_eh_frame->output_section->vma
14455                     + htab->glink_eh_frame->output_offset
14456                     + (p + 8 - htab->glink_eh_frame->contents));
14457             if (val + 0x80000000 > 0xffffffff)
14458               {
14459                 _bfd_error_handler
14460                   (_("%s offset too large for .eh_frame sdata4 encoding"),
14461                    group->stub_sec->name);
14462                 return FALSE;
14463               }
14464             bfd_put_32 (htab->elf.dynobj, val, p + 8);
14465             p += (group->eh_size + 17 + 3) & -4;
14466           }
14467       if (htab->glink != NULL && htab->glink->size != 0)
14468         {
14469           /* Offset to .glink.  */
14470           val = (htab->glink->output_section->vma
14471                  + htab->glink->output_offset
14472                  + 8);
14473           val -= (htab->glink_eh_frame->output_section->vma
14474                   + htab->glink_eh_frame->output_offset
14475                   + (p + 8 - htab->glink_eh_frame->contents));
14476           if (val + 0x80000000 > 0xffffffff)
14477             {
14478               _bfd_error_handler
14479                 (_("%s offset too large for .eh_frame sdata4 encoding"),
14480                  htab->glink->name);
14481               return FALSE;
14482             }
14483           bfd_put_32 (htab->elf.dynobj, val, p + 8);
14484           p += (24 + align - 1) & -align;
14485         }
14486     }
14487
14488   for (group = htab->group; group != NULL; group = group->next)
14489     if ((stub_sec = group->stub_sec) != NULL)
14490       {
14491         stub_sec_count += 1;
14492         if (stub_sec->rawsize != stub_sec->size
14493             && (htab->stub_iteration <= STUB_SHRINK_ITER
14494                 || stub_sec->rawsize < stub_sec->size))
14495           break;
14496       }
14497
14498   if (group != NULL)
14499     {
14500       htab->stub_error = TRUE;
14501       _bfd_error_handler (_("stubs don't match calculated size"));
14502     }
14503
14504   if (htab->stub_error)
14505     return FALSE;
14506
14507   if (stats != NULL)
14508     {
14509       size_t len;
14510       *stats = bfd_malloc (500);
14511       if (*stats == NULL)
14512         return FALSE;
14513
14514       len = sprintf (*stats,
14515                      ngettext ("linker stubs in %u group\n",
14516                                "linker stubs in %u groups\n",
14517                                stub_sec_count),
14518                      stub_sec_count);
14519       sprintf (*stats + len, _("  branch         %lu\n"
14520                                "  branch toc adj %lu\n"
14521                                "  branch notoc   %lu\n"
14522                                "  branch both    %lu\n"
14523                                "  long branch    %lu\n"
14524                                "  long toc adj   %lu\n"
14525                                "  long notoc     %lu\n"
14526                                "  long both      %lu\n"
14527                                "  plt call       %lu\n"
14528                                "  plt call save  %lu\n"
14529                                "  plt call notoc %lu\n"
14530                                "  plt call both  %lu\n"
14531                                "  global entry   %lu"),
14532                htab->stub_count[ppc_stub_long_branch - 1],
14533                htab->stub_count[ppc_stub_long_branch_r2off - 1],
14534                htab->stub_count[ppc_stub_long_branch_notoc - 1],
14535                htab->stub_count[ppc_stub_long_branch_both - 1],
14536                htab->stub_count[ppc_stub_plt_branch - 1],
14537                htab->stub_count[ppc_stub_plt_branch_r2off - 1],
14538                htab->stub_count[ppc_stub_plt_branch_notoc - 1],
14539                htab->stub_count[ppc_stub_plt_branch_both - 1],
14540                htab->stub_count[ppc_stub_plt_call - 1],
14541                htab->stub_count[ppc_stub_plt_call_r2save - 1],
14542                htab->stub_count[ppc_stub_plt_call_notoc - 1],
14543                htab->stub_count[ppc_stub_plt_call_both - 1],
14544                htab->stub_count[ppc_stub_global_entry - 1]);
14545     }
14546   return TRUE;
14547 }
14548
14549 /* What to do when ld finds relocations against symbols defined in
14550    discarded sections.  */
14551
14552 static unsigned int
14553 ppc64_elf_action_discarded (asection *sec)
14554 {
14555   if (strcmp (".opd", sec->name) == 0)
14556     return 0;
14557
14558   if (strcmp (".toc", sec->name) == 0)
14559     return 0;
14560
14561   if (strcmp (".toc1", sec->name) == 0)
14562     return 0;
14563
14564   return _bfd_elf_default_action_discarded (sec);
14565 }
14566
14567 /* These are the dynamic relocations supported by glibc.  */
14568
14569 static bfd_boolean
14570 ppc64_glibc_dynamic_reloc (enum elf_ppc64_reloc_type r_type)
14571 {
14572   switch (r_type)
14573     {
14574     case R_PPC64_RELATIVE:
14575     case R_PPC64_NONE:
14576     case R_PPC64_ADDR64:
14577     case R_PPC64_GLOB_DAT:
14578     case R_PPC64_IRELATIVE:
14579     case R_PPC64_JMP_IREL:
14580     case R_PPC64_JMP_SLOT:
14581     case R_PPC64_DTPMOD64:
14582     case R_PPC64_DTPREL64:
14583     case R_PPC64_TPREL64:
14584     case R_PPC64_TPREL16_LO_DS:
14585     case R_PPC64_TPREL16_DS:
14586     case R_PPC64_TPREL16:
14587     case R_PPC64_TPREL16_LO:
14588     case R_PPC64_TPREL16_HI:
14589     case R_PPC64_TPREL16_HIGH:
14590     case R_PPC64_TPREL16_HA:
14591     case R_PPC64_TPREL16_HIGHA:
14592     case R_PPC64_TPREL16_HIGHER:
14593     case R_PPC64_TPREL16_HIGHEST:
14594     case R_PPC64_TPREL16_HIGHERA:
14595     case R_PPC64_TPREL16_HIGHESTA:
14596     case R_PPC64_ADDR16_LO_DS:
14597     case R_PPC64_ADDR16_LO:
14598     case R_PPC64_ADDR16_HI:
14599     case R_PPC64_ADDR16_HIGH:
14600     case R_PPC64_ADDR16_HA:
14601     case R_PPC64_ADDR16_HIGHA:
14602     case R_PPC64_REL30:
14603     case R_PPC64_COPY:
14604     case R_PPC64_UADDR64:
14605     case R_PPC64_UADDR32:
14606     case R_PPC64_ADDR32:
14607     case R_PPC64_ADDR24:
14608     case R_PPC64_ADDR16:
14609     case R_PPC64_UADDR16:
14610     case R_PPC64_ADDR16_DS:
14611     case R_PPC64_ADDR16_HIGHER:
14612     case R_PPC64_ADDR16_HIGHEST:
14613     case R_PPC64_ADDR16_HIGHERA:
14614     case R_PPC64_ADDR16_HIGHESTA:
14615     case R_PPC64_ADDR14:
14616     case R_PPC64_ADDR14_BRTAKEN:
14617     case R_PPC64_ADDR14_BRNTAKEN:
14618     case R_PPC64_REL32:
14619     case R_PPC64_REL64:
14620       return TRUE;
14621
14622     default:
14623       return FALSE;
14624     }
14625 }
14626
14627 /* The RELOCATE_SECTION function is called by the ELF backend linker
14628    to handle the relocations for a section.
14629
14630    The relocs are always passed as Rela structures; if the section
14631    actually uses Rel structures, the r_addend field will always be
14632    zero.
14633
14634    This function is responsible for adjust the section contents as
14635    necessary, and (if using Rela relocs and generating a
14636    relocatable output file) adjusting the reloc addend as
14637    necessary.
14638
14639    This function does not have to worry about setting the reloc
14640    address or the reloc symbol index.
14641
14642    LOCAL_SYMS is a pointer to the swapped in local symbols.
14643
14644    LOCAL_SECTIONS is an array giving the section in the input file
14645    corresponding to the st_shndx field of each local symbol.
14646
14647    The global hash table entry for the global symbols can be found
14648    via elf_sym_hashes (input_bfd).
14649
14650    When generating relocatable output, this function must handle
14651    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
14652    going to be the section symbol corresponding to the output
14653    section, which means that the addend must be adjusted
14654    accordingly.  */
14655
14656 static bfd_boolean
14657 ppc64_elf_relocate_section (bfd *output_bfd,
14658                             struct bfd_link_info *info,
14659                             bfd *input_bfd,
14660                             asection *input_section,
14661                             bfd_byte *contents,
14662                             Elf_Internal_Rela *relocs,
14663                             Elf_Internal_Sym *local_syms,
14664                             asection **local_sections)
14665 {
14666   struct ppc_link_hash_table *htab;
14667   Elf_Internal_Shdr *symtab_hdr;
14668   struct elf_link_hash_entry **sym_hashes;
14669   Elf_Internal_Rela *rel;
14670   Elf_Internal_Rela *wrel;
14671   Elf_Internal_Rela *relend;
14672   Elf_Internal_Rela outrel;
14673   bfd_byte *loc;
14674   struct got_entry **local_got_ents;
14675   bfd_vma TOCstart;
14676   bfd_boolean ret = TRUE;
14677   bfd_boolean is_opd;
14678   /* Assume 'at' branch hints.  */
14679   bfd_boolean is_isa_v2 = TRUE;
14680   bfd_boolean warned_dynamic = FALSE;
14681   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
14682
14683   /* Initialize howto table if needed.  */
14684   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
14685     ppc_howto_init ();
14686
14687   htab = ppc_hash_table (info);
14688   if (htab == NULL)
14689     return FALSE;
14690
14691   /* Don't relocate stub sections.  */
14692   if (input_section->owner == htab->params->stub_bfd)
14693     return TRUE;
14694
14695   if (!is_ppc64_elf (input_bfd))
14696     {
14697       bfd_set_error (bfd_error_wrong_format);
14698       return FALSE;
14699     }
14700
14701   local_got_ents = elf_local_got_ents (input_bfd);
14702   TOCstart = elf_gp (output_bfd);
14703   symtab_hdr = &elf_symtab_hdr (input_bfd);
14704   sym_hashes = elf_sym_hashes (input_bfd);
14705   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
14706
14707   rel = wrel = relocs;
14708   relend = relocs + input_section->reloc_count;
14709   for (; rel < relend; wrel++, rel++)
14710     {
14711       enum elf_ppc64_reloc_type r_type;
14712       bfd_vma addend;
14713       bfd_reloc_status_type r;
14714       Elf_Internal_Sym *sym;
14715       asection *sec;
14716       struct elf_link_hash_entry *h_elf;
14717       struct ppc_link_hash_entry *h;
14718       struct ppc_link_hash_entry *fdh;
14719       const char *sym_name;
14720       unsigned long r_symndx, toc_symndx;
14721       bfd_vma toc_addend;
14722       unsigned char tls_mask, tls_gd, tls_type;
14723       unsigned char sym_type;
14724       bfd_vma relocation;
14725       bfd_boolean unresolved_reloc, save_unresolved_reloc;
14726       bfd_boolean warned;
14727       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
14728       unsigned int insn;
14729       unsigned int mask;
14730       struct ppc_stub_hash_entry *stub_entry;
14731       bfd_vma max_br_offset;
14732       bfd_vma from;
14733       Elf_Internal_Rela orig_rel;
14734       reloc_howto_type *howto;
14735       struct reloc_howto_struct alt_howto;
14736       uint64_t pinsn;
14737       bfd_vma offset;
14738
14739     again:
14740       orig_rel = *rel;
14741
14742       r_type = ELF64_R_TYPE (rel->r_info);
14743       r_symndx = ELF64_R_SYM (rel->r_info);
14744
14745       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
14746          symbol of the previous ADDR64 reloc.  The symbol gives us the
14747          proper TOC base to use.  */
14748       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
14749           && wrel != relocs
14750           && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
14751           && is_opd)
14752         r_symndx = ELF64_R_SYM (wrel[-1].r_info);
14753
14754       sym = NULL;
14755       sec = NULL;
14756       h_elf = NULL;
14757       sym_name = NULL;
14758       unresolved_reloc = FALSE;
14759       warned = FALSE;
14760
14761       if (r_symndx < symtab_hdr->sh_info)
14762         {
14763           /* It's a local symbol.  */
14764           struct _opd_sec_data *opd;
14765
14766           sym = local_syms + r_symndx;
14767           sec = local_sections[r_symndx];
14768           sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
14769           sym_type = ELF64_ST_TYPE (sym->st_info);
14770           relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
14771           opd = get_opd_info (sec);
14772           if (opd != NULL && opd->adjust != NULL)
14773             {
14774               long adjust = opd->adjust[OPD_NDX (sym->st_value
14775                                                  + rel->r_addend)];
14776               if (adjust == -1)
14777                 relocation = 0;
14778               else
14779                 {
14780                   /* If this is a relocation against the opd section sym
14781                      and we have edited .opd, adjust the reloc addend so
14782                      that ld -r and ld --emit-relocs output is correct.
14783                      If it is a reloc against some other .opd symbol,
14784                      then the symbol value will be adjusted later.  */
14785                   if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
14786                     rel->r_addend += adjust;
14787                   else
14788                     relocation += adjust;
14789                 }
14790             }
14791         }
14792       else
14793         {
14794           bfd_boolean ignored;
14795
14796           RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
14797                                    r_symndx, symtab_hdr, sym_hashes,
14798                                    h_elf, sec, relocation,
14799                                    unresolved_reloc, warned, ignored);
14800           sym_name = h_elf->root.root.string;
14801           sym_type = h_elf->type;
14802           if (sec != NULL
14803               && sec->owner == output_bfd
14804               && strcmp (sec->name, ".opd") == 0)
14805             {
14806               /* This is a symbol defined in a linker script.  All
14807                  such are defined in output sections, even those
14808                  defined by simple assignment from a symbol defined in
14809                  an input section.  Transfer the symbol to an
14810                  appropriate input .opd section, so that a branch to
14811                  this symbol will be mapped to the location specified
14812                  by the opd entry.  */
14813               struct bfd_link_order *lo;
14814               for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
14815                 if (lo->type == bfd_indirect_link_order)
14816                   {
14817                     asection *isec = lo->u.indirect.section;
14818                     if (h_elf->root.u.def.value >= isec->output_offset
14819                         && h_elf->root.u.def.value < (isec->output_offset
14820                                                       + isec->size))
14821                       {
14822                         h_elf->root.u.def.value -= isec->output_offset;
14823                         h_elf->root.u.def.section = isec;
14824                         sec = isec;
14825                         break;
14826                       }
14827                   }
14828             }
14829         }
14830       h = ppc_elf_hash_entry (h_elf);
14831
14832       if (sec != NULL && discarded_section (sec))
14833         {
14834           _bfd_clear_contents (ppc64_elf_howto_table[r_type],
14835                                input_bfd, input_section,
14836                                contents, rel->r_offset);
14837           wrel->r_offset = rel->r_offset;
14838           wrel->r_info = 0;
14839           wrel->r_addend = 0;
14840
14841           /* For ld -r, remove relocations in debug sections against
14842              symbols defined in discarded sections.  Not done for
14843              non-debug to preserve relocs in .eh_frame which the
14844              eh_frame editing code expects to be present.  */
14845           if (bfd_link_relocatable (info)
14846               && (input_section->flags & SEC_DEBUGGING))
14847             wrel--;
14848
14849           continue;
14850         }
14851
14852       if (bfd_link_relocatable (info))
14853         goto copy_reloc;
14854
14855       if (h != NULL && &h->elf == htab->elf.hgot)
14856         {
14857           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14858           sec = bfd_abs_section_ptr;
14859           unresolved_reloc = FALSE;
14860         }
14861
14862       /* TLS optimizations.  Replace instruction sequences and relocs
14863          based on information we collected in tls_optimize.  We edit
14864          RELOCS so that --emit-relocs will output something sensible
14865          for the final instruction stream.  */
14866       tls_mask = 0;
14867       tls_gd = 0;
14868       toc_symndx = 0;
14869       if (h != NULL)
14870         tls_mask = h->tls_mask;
14871       else if (local_got_ents != NULL)
14872         {
14873           struct plt_entry **local_plt = (struct plt_entry **)
14874             (local_got_ents + symtab_hdr->sh_info);
14875           unsigned char *lgot_masks = (unsigned char *)
14876             (local_plt + symtab_hdr->sh_info);
14877           tls_mask = lgot_masks[r_symndx];
14878         }
14879       if (((tls_mask & TLS_TLS) == 0 || tls_mask == (TLS_TLS | TLS_MARK))
14880           && (r_type == R_PPC64_TLS
14881               || r_type == R_PPC64_TLSGD
14882               || r_type == R_PPC64_TLSLD))
14883         {
14884           /* Check for toc tls entries.  */
14885           unsigned char *toc_tls;
14886
14887           if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14888                              &local_syms, rel, input_bfd))
14889             return FALSE;
14890
14891           if (toc_tls)
14892             tls_mask = *toc_tls;
14893         }
14894
14895       /* Check that tls relocs are used with tls syms, and non-tls
14896          relocs are used with non-tls syms.  */
14897       if (r_symndx != STN_UNDEF
14898           && r_type != R_PPC64_NONE
14899           && (h == NULL
14900               || h->elf.root.type == bfd_link_hash_defined
14901               || h->elf.root.type == bfd_link_hash_defweak)
14902           && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
14903         {
14904           if ((tls_mask & TLS_TLS) != 0
14905               && (r_type == R_PPC64_TLS
14906                   || r_type == R_PPC64_TLSGD
14907                   || r_type == R_PPC64_TLSLD))
14908             /* R_PPC64_TLS is OK against a symbol in the TOC.  */
14909             ;
14910           else
14911             info->callbacks->einfo
14912               (!IS_PPC64_TLS_RELOC (r_type)
14913                /* xgettext:c-format */
14914                ? _("%H: %s used with TLS symbol `%pT'\n")
14915                /* xgettext:c-format */
14916                : _("%H: %s used with non-TLS symbol `%pT'\n"),
14917                input_bfd, input_section, rel->r_offset,
14918                ppc64_elf_howto_table[r_type]->name,
14919                sym_name);
14920         }
14921
14922       /* Ensure reloc mapping code below stays sane.  */
14923       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
14924           || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
14925           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
14926           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
14927           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
14928           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
14929           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
14930           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
14931           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
14932           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
14933         abort ();
14934
14935       switch (r_type)
14936         {
14937         default:
14938           break;
14939
14940         case R_PPC64_LO_DS_OPT:
14941           insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
14942           if ((insn & (0x3fu << 26)) != 58u << 26)
14943             abort ();
14944           insn += (14u << 26) - (58u << 26);
14945           bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
14946           r_type = R_PPC64_TOC16_LO;
14947           rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14948           break;
14949
14950         case R_PPC64_TOC16:
14951         case R_PPC64_TOC16_LO:
14952         case R_PPC64_TOC16_DS:
14953         case R_PPC64_TOC16_LO_DS:
14954           {
14955             /* Check for toc tls entries.  */
14956             unsigned char *toc_tls;
14957             int retval;
14958
14959             retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14960                                    &local_syms, rel, input_bfd);
14961             if (retval == 0)
14962               return FALSE;
14963
14964             if (toc_tls)
14965               {
14966                 tls_mask = *toc_tls;
14967                 if (r_type == R_PPC64_TOC16_DS
14968                     || r_type == R_PPC64_TOC16_LO_DS)
14969                   {
14970                     if ((tls_mask & TLS_TLS) != 0
14971                         && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
14972                       goto toctprel;
14973                   }
14974                 else
14975                   {
14976                     /* If we found a GD reloc pair, then we might be
14977                        doing a GD->IE transition.  */
14978                     if (retval == 2)
14979                       {
14980                         tls_gd = TLS_GDIE;
14981                         if ((tls_mask & TLS_TLS) != 0
14982                             && (tls_mask & TLS_GD) == 0)
14983                           goto tls_ldgd_opt;
14984                       }
14985                     else if (retval == 3)
14986                       {
14987                         if ((tls_mask & TLS_TLS) != 0
14988                             && (tls_mask & TLS_LD) == 0)
14989                           goto tls_ldgd_opt;
14990                       }
14991                   }
14992               }
14993           }
14994           break;
14995
14996         case R_PPC64_GOT_TPREL16_HI:
14997         case R_PPC64_GOT_TPREL16_HA:
14998           if ((tls_mask & TLS_TLS) != 0
14999               && (tls_mask & TLS_TPREL) == 0)
15000             {
15001               rel->r_offset -= d_offset;
15002               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15003               r_type = R_PPC64_NONE;
15004               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15005             }
15006           break;
15007
15008         case R_PPC64_GOT_TPREL16_DS:
15009         case R_PPC64_GOT_TPREL16_LO_DS:
15010           if ((tls_mask & TLS_TLS) != 0
15011               && (tls_mask & TLS_TPREL) == 0)
15012             {
15013             toctprel:
15014               insn = bfd_get_32 (input_bfd,
15015                                  contents + rel->r_offset - d_offset);
15016               insn &= 31 << 21;
15017               insn |= 0x3c0d0000;       /* addis 0,13,0 */
15018               bfd_put_32 (input_bfd, insn,
15019                           contents + rel->r_offset - d_offset);
15020               r_type = R_PPC64_TPREL16_HA;
15021               if (toc_symndx != 0)
15022                 {
15023                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
15024                   rel->r_addend = toc_addend;
15025                   /* We changed the symbol.  Start over in order to
15026                      get h, sym, sec etc. right.  */
15027                   goto again;
15028                 }
15029               else
15030                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15031             }
15032           break;
15033
15034         case R_PPC64_GOT_TPREL34:
15035           if ((tls_mask & TLS_TLS) != 0
15036               && (tls_mask & TLS_TPREL) == 0)
15037             {
15038               /* pld ra,sym@got@tprel@pcrel -> paddi ra,r13,sym@tprel  */
15039               pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15040               pinsn <<= 32;
15041               pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15042               pinsn += ((2ULL << 56) + (-1ULL << 52)
15043                         + (14ULL << 26) - (57ULL << 26) + (13ULL << 16));
15044               bfd_put_32 (input_bfd, pinsn >> 32,
15045                           contents + rel->r_offset);
15046               bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15047                           contents + rel->r_offset + 4);
15048               r_type = R_PPC64_TPREL34;
15049               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15050             }
15051           break;
15052
15053         case R_PPC64_TLS:
15054           if ((tls_mask & TLS_TLS) != 0
15055               && (tls_mask & TLS_TPREL) == 0)
15056             {
15057               insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15058               insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
15059               if (insn == 0)
15060                 break;
15061               if ((rel->r_offset & 3) == 0)
15062                 {
15063                   bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15064                   /* Was PPC64_TLS which sits on insn boundary, now
15065                      PPC64_TPREL16_LO which is at low-order half-word.  */
15066                   rel->r_offset += d_offset;
15067                   r_type = R_PPC64_TPREL16_LO;
15068                   if (toc_symndx != 0)
15069                     {
15070                       rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
15071                       rel->r_addend = toc_addend;
15072                       /* We changed the symbol.  Start over in order to
15073                          get h, sym, sec etc. right.  */
15074                       goto again;
15075                     }
15076                   else
15077                     rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15078                 }
15079               else if ((rel->r_offset & 3) == 1)
15080                 {
15081                   /* For pcrel IE to LE we already have the full
15082                      offset and thus don't need an addi here.  A nop
15083                      or mr will do.  */
15084                   if ((insn & (0x3fu << 26)) == 14 << 26)
15085                     {
15086                       /* Extract regs from addi rt,ra,si.  */
15087                       unsigned int rt = (insn >> 21) & 0x1f;
15088                       unsigned int ra = (insn >> 16) & 0x1f;
15089                       if (rt == ra)
15090                         insn = NOP;
15091                       else
15092                         {
15093                           /* Build or ra,rs,rb with rb==rs, ie. mr ra,rs.  */
15094                           insn = (rt << 16) | (ra << 21) | (ra << 11);
15095                           insn |= (31u << 26) | (444u << 1);
15096                         }
15097                     }
15098                   bfd_put_32 (input_bfd, insn, contents + rel->r_offset - 1);
15099                 }
15100             }
15101           break;
15102
15103         case R_PPC64_GOT_TLSGD16_HI:
15104         case R_PPC64_GOT_TLSGD16_HA:
15105           tls_gd = TLS_GDIE;
15106           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15107             goto tls_gdld_hi;
15108           break;
15109
15110         case R_PPC64_GOT_TLSLD16_HI:
15111         case R_PPC64_GOT_TLSLD16_HA:
15112           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15113             {
15114             tls_gdld_hi:
15115               if ((tls_mask & tls_gd) != 0)
15116                 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
15117                           + R_PPC64_GOT_TPREL16_DS);
15118               else
15119                 {
15120                   rel->r_offset -= d_offset;
15121                   bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15122                   r_type = R_PPC64_NONE;
15123                 }
15124               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15125             }
15126           break;
15127
15128         case R_PPC64_GOT_TLSGD16:
15129         case R_PPC64_GOT_TLSGD16_LO:
15130           tls_gd = TLS_GDIE;
15131           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15132             goto tls_ldgd_opt;
15133           break;
15134
15135         case R_PPC64_GOT_TLSLD16:
15136         case R_PPC64_GOT_TLSLD16_LO:
15137           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15138             {
15139               unsigned int insn1, insn2;
15140
15141             tls_ldgd_opt:
15142               offset = (bfd_vma) -1;
15143               /* If not using the newer R_PPC64_TLSGD/LD to mark
15144                  __tls_get_addr calls, we must trust that the call
15145                  stays with its arg setup insns, ie. that the next
15146                  reloc is the __tls_get_addr call associated with
15147                  the current reloc.  Edit both insns.  */
15148               if (input_section->nomark_tls_get_addr
15149                   && rel + 1 < relend
15150                   && branch_reloc_hash_match (input_bfd, rel + 1,
15151                                               htab->tls_get_addr_fd,
15152                                               htab->tga_desc_fd,
15153                                               htab->tls_get_addr,
15154                                               htab->tga_desc))
15155                 offset = rel[1].r_offset;
15156               /* We read the low GOT_TLS (or TOC16) insn because we
15157                  need to keep the destination reg.  It may be
15158                  something other than the usual r3, and moved to r3
15159                  before the call by intervening code.  */
15160               insn1 = bfd_get_32 (input_bfd,
15161                                   contents + rel->r_offset - d_offset);
15162               if ((tls_mask & tls_gd) != 0)
15163                 {
15164                   /* IE */
15165                   insn1 &= (0x1f << 21) | (0x1f << 16);
15166                   insn1 |= 58u << 26;   /* ld */
15167                   insn2 = 0x7c636a14;   /* add 3,3,13 */
15168                   if (offset != (bfd_vma) -1)
15169                     rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15170                   if (r_type == R_PPC64_TOC16
15171                       || r_type == R_PPC64_TOC16_LO)
15172                     r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
15173                   else
15174                     r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 1)) & 1)
15175                               + R_PPC64_GOT_TPREL16_DS);
15176                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15177                 }
15178               else
15179                 {
15180                   /* LE */
15181                   insn1 &= 0x1f << 21;
15182                   insn1 |= 0x3c0d0000;  /* addis r,13,0 */
15183                   insn2 = 0x38630000;   /* addi 3,3,0 */
15184                   if (tls_gd == 0)
15185                     {
15186                       /* Was an LD reloc.  */
15187                       r_symndx = STN_UNDEF;
15188                       rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15189                     }
15190                   else if (toc_symndx != 0)
15191                     {
15192                       r_symndx = toc_symndx;
15193                       rel->r_addend = toc_addend;
15194                     }
15195                   r_type = R_PPC64_TPREL16_HA;
15196                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15197                   if (offset != (bfd_vma) -1)
15198                     {
15199                       rel[1].r_info = ELF64_R_INFO (r_symndx,
15200                                                     R_PPC64_TPREL16_LO);
15201                       rel[1].r_offset = offset + d_offset;
15202                       rel[1].r_addend = rel->r_addend;
15203                     }
15204                 }
15205               bfd_put_32 (input_bfd, insn1,
15206                           contents + rel->r_offset - d_offset);
15207               if (offset != (bfd_vma) -1)
15208                 {
15209                   bfd_put_32 (input_bfd, insn2, contents + offset);
15210                   if (offset + 8 <= input_section->size)
15211                     {
15212                       insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15213                       if (insn2 == LD_R2_0R1 + STK_TOC (htab))
15214                         bfd_put_32 (input_bfd, NOP, contents + offset + 4);
15215                     }
15216                 }
15217               if ((tls_mask & tls_gd) == 0
15218                   && (tls_gd == 0 || toc_symndx != 0))
15219                 {
15220                   /* We changed the symbol.  Start over in order
15221                      to get h, sym, sec etc. right.  */
15222                   goto again;
15223                 }
15224             }
15225           break;
15226
15227         case R_PPC64_GOT_TLSGD34:
15228           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15229             {
15230               pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15231               pinsn <<= 32;
15232               pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15233               if ((tls_mask & TLS_GDIE) != 0)
15234                 {
15235                   /* IE, pla -> pld  */
15236                   pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
15237                   r_type = R_PPC64_GOT_TPREL34;
15238                 }
15239               else
15240                 {
15241                   /* LE, pla pcrel -> paddi r13  */
15242                   pinsn += (-1ULL << 52) + (13ULL << 16);
15243                   r_type = R_PPC64_TPREL34;
15244                 }
15245               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15246               bfd_put_32 (input_bfd, pinsn >> 32,
15247                           contents + rel->r_offset);
15248               bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15249                           contents + rel->r_offset + 4);
15250             }
15251           break;
15252
15253         case R_PPC64_GOT_TLSLD34:
15254           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15255             {
15256               pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15257               pinsn <<= 32;
15258               pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15259               pinsn += (-1ULL << 52) + (13ULL << 16);
15260               bfd_put_32 (input_bfd, pinsn >> 32,
15261                           contents + rel->r_offset);
15262               bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15263                           contents + rel->r_offset + 4);
15264               rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15265               r_symndx = STN_UNDEF;
15266               r_type = R_PPC64_TPREL34;
15267               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15268               goto again;
15269             }
15270           break;
15271
15272         case R_PPC64_TLSGD:
15273           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
15274               && rel + 1 < relend)
15275             {
15276               unsigned int insn2;
15277               enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
15278
15279               offset = rel->r_offset;
15280               if (is_plt_seq_reloc (r_type1))
15281                 {
15282                   bfd_put_32 (output_bfd, NOP, contents + offset);
15283                   if (r_type1 == R_PPC64_PLT_PCREL34
15284                       || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
15285                     bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15286                   rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15287                   break;
15288                 }
15289
15290               if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
15291                 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15292
15293               if ((tls_mask & TLS_GDIE) != 0)
15294                 {
15295                   /* IE */
15296                   r_type = R_PPC64_NONE;
15297                   insn2 = 0x7c636a14;   /* add 3,3,13 */
15298                 }
15299               else
15300                 {
15301                   /* LE */
15302                   if (toc_symndx != 0)
15303                     {
15304                       r_symndx = toc_symndx;
15305                       rel->r_addend = toc_addend;
15306                     }
15307                   if (r_type1 == R_PPC64_REL24_NOTOC
15308                       || r_type1 == R_PPC64_PLTCALL_NOTOC)
15309                     {
15310                       r_type = R_PPC64_NONE;
15311                       insn2 = NOP;
15312                     }
15313                   else
15314                     {
15315                       rel->r_offset = offset + d_offset;
15316                       r_type = R_PPC64_TPREL16_LO;
15317                       insn2 = 0x38630000;       /* addi 3,3,0 */
15318                     }
15319                 }
15320               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15321               /* Zap the reloc on the _tls_get_addr call too.  */
15322               BFD_ASSERT (offset == rel[1].r_offset);
15323               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15324               bfd_put_32 (input_bfd, insn2, contents + offset);
15325               if ((tls_mask & TLS_GDIE) == 0
15326                   && toc_symndx != 0
15327                   && r_type != R_PPC64_NONE)
15328                 goto again;
15329             }
15330           break;
15331
15332         case R_PPC64_TLSLD:
15333           if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
15334               && rel + 1 < relend)
15335             {
15336               unsigned int insn2;
15337               enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
15338
15339               offset = rel->r_offset;
15340               if (is_plt_seq_reloc (r_type1))
15341                 {
15342                   bfd_put_32 (output_bfd, NOP, contents + offset);
15343                   if (r_type1 == R_PPC64_PLT_PCREL34
15344                       || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
15345                     bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15346                   rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15347                   break;
15348                 }
15349
15350               if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
15351                 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15352
15353               if (r_type1 == R_PPC64_REL24_NOTOC
15354                   || r_type1 == R_PPC64_PLTCALL_NOTOC)
15355                 {
15356                   r_type = R_PPC64_NONE;
15357                   insn2 = NOP;
15358                 }
15359               else
15360                 {
15361                   rel->r_offset = offset + d_offset;
15362                   r_symndx = STN_UNDEF;
15363                   r_type = R_PPC64_TPREL16_LO;
15364                   rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15365                   insn2 = 0x38630000;   /* addi 3,3,0 */
15366                 }
15367               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15368               /* Zap the reloc on the _tls_get_addr call too.  */
15369               BFD_ASSERT (offset == rel[1].r_offset);
15370               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15371               bfd_put_32 (input_bfd, insn2, contents + offset);
15372               if (r_type != R_PPC64_NONE)
15373                 goto again;
15374             }
15375           break;
15376
15377         case R_PPC64_DTPMOD64:
15378           if (rel + 1 < relend
15379               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
15380               && rel[1].r_offset == rel->r_offset + 8)
15381             {
15382               if ((tls_mask & TLS_GD) == 0)
15383                 {
15384                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
15385                   if ((tls_mask & TLS_GDIE) != 0)
15386                     r_type = R_PPC64_TPREL64;
15387                   else
15388                     {
15389                       bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15390                       r_type = R_PPC64_NONE;
15391                     }
15392                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15393                 }
15394             }
15395           else
15396             {
15397               if ((tls_mask & TLS_LD) == 0)
15398                 {
15399                   bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15400                   r_type = R_PPC64_NONE;
15401                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15402                 }
15403             }
15404           break;
15405
15406         case R_PPC64_TPREL64:
15407           if ((tls_mask & TLS_TPREL) == 0)
15408             {
15409               r_type = R_PPC64_NONE;
15410               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15411             }
15412           break;
15413
15414         case R_PPC64_ENTRY:
15415           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
15416           if (!bfd_link_pic (info)
15417               && !info->traditional_format
15418               && relocation + 0x80008000 <= 0xffffffff)
15419             {
15420               unsigned int insn1, insn2;
15421
15422               insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15423               insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15424               if ((insn1 & ~0xfffc) == LD_R2_0R12
15425                   && insn2 == ADD_R2_R2_R12)
15426                 {
15427                   bfd_put_32 (input_bfd,
15428                               LIS_R2 + PPC_HA (relocation),
15429                               contents + rel->r_offset);
15430                   bfd_put_32 (input_bfd,
15431                               ADDI_R2_R2 + PPC_LO (relocation),
15432                               contents + rel->r_offset + 4);
15433                 }
15434             }
15435           else
15436             {
15437               relocation -= (rel->r_offset
15438                              + input_section->output_offset
15439                              + input_section->output_section->vma);
15440               if (relocation + 0x80008000 <= 0xffffffff)
15441                 {
15442                   unsigned int insn1, insn2;
15443
15444                   insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15445                   insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15446                   if ((insn1 & ~0xfffc) == LD_R2_0R12
15447                       && insn2 == ADD_R2_R2_R12)
15448                     {
15449                       bfd_put_32 (input_bfd,
15450                                   ADDIS_R2_R12 + PPC_HA (relocation),
15451                                   contents + rel->r_offset);
15452                       bfd_put_32 (input_bfd,
15453                                   ADDI_R2_R2 + PPC_LO (relocation),
15454                                   contents + rel->r_offset + 4);
15455                     }
15456                 }
15457             }
15458           break;
15459
15460         case R_PPC64_REL16_HA:
15461           /* If we are generating a non-PIC executable, edit
15462              .  0:      addis 2,12,.TOC.-0b@ha
15463              .          addi 2,2,.TOC.-0b@l
15464              used by ELFv2 global entry points to set up r2, to
15465              .          lis 2,.TOC.@ha
15466              .          addi 2,2,.TOC.@l
15467              if .TOC. is in range.  */
15468           if (!bfd_link_pic (info)
15469               && !info->traditional_format
15470               && !htab->opd_abi
15471               && rel->r_addend == d_offset
15472               && h != NULL && &h->elf == htab->elf.hgot
15473               && rel + 1 < relend
15474               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
15475               && rel[1].r_offset == rel->r_offset + 4
15476               && rel[1].r_addend == rel->r_addend + 4
15477               && relocation + 0x80008000 <= 0xffffffff)
15478             {
15479               unsigned int insn1, insn2;
15480               offset = rel->r_offset - d_offset;
15481               insn1 = bfd_get_32 (input_bfd, contents + offset);
15482               insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15483               if ((insn1 & 0xffff0000) == ADDIS_R2_R12
15484                   && (insn2 & 0xffff0000) == ADDI_R2_R2)
15485                 {
15486                   r_type = R_PPC64_ADDR16_HA;
15487                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15488                   rel->r_addend -= d_offset;
15489                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
15490                   rel[1].r_addend -= d_offset + 4;
15491                   bfd_put_32 (input_bfd, LIS_R2, contents + offset);
15492                 }
15493             }
15494           break;
15495         }
15496
15497       /* Handle other relocations that tweak non-addend part of insn.  */
15498       insn = 0;
15499       max_br_offset = 1 << 25;
15500       addend = rel->r_addend;
15501       reloc_dest = DEST_NORMAL;
15502       switch (r_type)
15503         {
15504         default:
15505           break;
15506
15507         case R_PPC64_TOCSAVE:
15508           if (relocation + addend == (rel->r_offset
15509                                       + input_section->output_offset
15510                                       + input_section->output_section->vma)
15511               && tocsave_find (htab, NO_INSERT,
15512                                &local_syms, rel, input_bfd))
15513             {
15514               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15515               if (insn == NOP
15516                   || insn == CROR_151515 || insn == CROR_313131)
15517                 bfd_put_32 (input_bfd,
15518                             STD_R2_0R1 + STK_TOC (htab),
15519                             contents + rel->r_offset);
15520             }
15521           break;
15522
15523           /* Branch taken prediction relocations.  */
15524         case R_PPC64_ADDR14_BRTAKEN:
15525         case R_PPC64_REL14_BRTAKEN:
15526           insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
15527           /* Fall through.  */
15528
15529           /* Branch not taken prediction relocations.  */
15530         case R_PPC64_ADDR14_BRNTAKEN:
15531         case R_PPC64_REL14_BRNTAKEN:
15532           insn |= bfd_get_32 (input_bfd,
15533                               contents + rel->r_offset) & ~(0x01 << 21);
15534           /* Fall through.  */
15535
15536         case R_PPC64_REL14:
15537           max_br_offset = 1 << 15;
15538           /* Fall through.  */
15539
15540         case R_PPC64_REL24:
15541         case R_PPC64_REL24_NOTOC:
15542         case R_PPC64_PLTCALL:
15543         case R_PPC64_PLTCALL_NOTOC:
15544           /* Calls to functions with a different TOC, such as calls to
15545              shared objects, need to alter the TOC pointer.  This is
15546              done using a linkage stub.  A REL24 branching to these
15547              linkage stubs needs to be followed by a nop, as the nop
15548              will be replaced with an instruction to restore the TOC
15549              base pointer.  */
15550           fdh = h;
15551           if (h != NULL
15552               && h->oh != NULL
15553               && h->oh->is_func_descriptor)
15554             fdh = ppc_follow_link (h->oh);
15555           stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
15556                                            htab);
15557           if ((r_type == R_PPC64_PLTCALL
15558                || r_type == R_PPC64_PLTCALL_NOTOC)
15559               && stub_entry != NULL
15560               && stub_entry->stub_type >= ppc_stub_plt_call
15561               && stub_entry->stub_type <= ppc_stub_plt_call_both)
15562             stub_entry = NULL;
15563
15564           if (stub_entry != NULL
15565               && ((stub_entry->stub_type >= ppc_stub_plt_call
15566                    && stub_entry->stub_type <= ppc_stub_plt_call_both)
15567                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15568                   || stub_entry->stub_type == ppc_stub_plt_branch_both
15569                   || stub_entry->stub_type == ppc_stub_long_branch_r2off
15570                   || stub_entry->stub_type == ppc_stub_long_branch_both))
15571             {
15572               bfd_boolean can_plt_call = FALSE;
15573
15574               if (stub_entry->stub_type == ppc_stub_plt_call
15575                   && !htab->opd_abi
15576                   && htab->params->plt_localentry0 != 0
15577                   && is_elfv2_localentry0 (&h->elf))
15578                 {
15579                   /* The function doesn't use or change r2.  */
15580                   can_plt_call = TRUE;
15581                 }
15582               else if (r_type == R_PPC64_REL24_NOTOC)
15583                 {
15584                   /* NOTOC calls don't need to restore r2.  */
15585                   can_plt_call = TRUE;
15586                 }
15587
15588               /* All of these stubs may modify r2, so there must be a
15589                  branch and link followed by a nop.  The nop is
15590                  replaced by an insn to restore r2.  */
15591               else if (rel->r_offset + 8 <= input_section->size)
15592                 {
15593                   unsigned long br;
15594
15595                   br = bfd_get_32 (input_bfd,
15596                                    contents + rel->r_offset);
15597                   if ((br & 1) != 0)
15598                     {
15599                       unsigned long nop;
15600
15601                       nop = bfd_get_32 (input_bfd,
15602                                         contents + rel->r_offset + 4);
15603                       if (nop == LD_R2_0R1 + STK_TOC (htab))
15604                         can_plt_call = TRUE;
15605                       else if (nop == NOP
15606                                || nop == CROR_151515
15607                                || nop == CROR_313131)
15608                         {
15609                           if (h != NULL
15610                               && is_tls_get_addr (&h->elf, htab)
15611                               && htab->params->tls_get_addr_opt)
15612                             {
15613                               /* Special stub used, leave nop alone.  */
15614                             }
15615                           else
15616                             bfd_put_32 (input_bfd,
15617                                         LD_R2_0R1 + STK_TOC (htab),
15618                                         contents + rel->r_offset + 4);
15619                           can_plt_call = TRUE;
15620                         }
15621                     }
15622                 }
15623
15624               if (!can_plt_call && h != NULL)
15625                 {
15626                   const char *name = h->elf.root.root.string;
15627
15628                   if (*name == '.')
15629                     ++name;
15630
15631                   if (strncmp (name, "__libc_start_main", 17) == 0
15632                       && (name[17] == 0 || name[17] == '@'))
15633                     {
15634                       /* Allow crt1 branch to go via a toc adjusting
15635                          stub.  Other calls that never return could do
15636                          the same, if we could detect such.  */
15637                       can_plt_call = TRUE;
15638                     }
15639                 }
15640
15641               if (!can_plt_call)
15642                 {
15643                   /* g++ as of 20130507 emits self-calls without a
15644                      following nop.  This is arguably wrong since we
15645                      have conflicting information.  On the one hand a
15646                      global symbol and on the other a local call
15647                      sequence, but don't error for this special case.
15648                      It isn't possible to cheaply verify we have
15649                      exactly such a call.  Allow all calls to the same
15650                      section.  */
15651                   asection *code_sec = sec;
15652
15653                   if (get_opd_info (sec) != NULL)
15654                     {
15655                       bfd_vma off = (relocation + addend
15656                                      - sec->output_section->vma
15657                                      - sec->output_offset);
15658
15659                       opd_entry_value (sec, off, &code_sec, NULL, FALSE);
15660                     }
15661                   if (code_sec == input_section)
15662                     can_plt_call = TRUE;
15663                 }
15664
15665               if (!can_plt_call)
15666                 {
15667                   if (stub_entry->stub_type >= ppc_stub_plt_call
15668                       && stub_entry->stub_type <= ppc_stub_plt_call_both)
15669                     info->callbacks->einfo
15670                       /* xgettext:c-format */
15671                       (_("%H: call to `%pT' lacks nop, can't restore toc; "
15672                          "(plt call stub)\n"),
15673                        input_bfd, input_section, rel->r_offset, sym_name);
15674                   else
15675                     info->callbacks->einfo
15676                       /* xgettext:c-format */
15677                       (_("%H: call to `%pT' lacks nop, can't restore toc; "
15678                          "(toc save/adjust stub)\n"),
15679                        input_bfd, input_section, rel->r_offset, sym_name);
15680
15681                   bfd_set_error (bfd_error_bad_value);
15682                   ret = FALSE;
15683                 }
15684
15685               if (can_plt_call
15686                   && stub_entry->stub_type >= ppc_stub_plt_call
15687                   && stub_entry->stub_type <= ppc_stub_plt_call_both)
15688                 unresolved_reloc = FALSE;
15689             }
15690
15691           if ((stub_entry == NULL
15692                || stub_entry->stub_type == ppc_stub_long_branch
15693                || stub_entry->stub_type == ppc_stub_plt_branch)
15694               && get_opd_info (sec) != NULL)
15695             {
15696               /* The branch destination is the value of the opd entry. */
15697               bfd_vma off = (relocation + addend
15698                              - sec->output_section->vma
15699                              - sec->output_offset);
15700               bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
15701               if (dest != (bfd_vma) -1)
15702                 {
15703                   relocation = dest;
15704                   addend = 0;
15705                   reloc_dest = DEST_OPD;
15706                 }
15707             }
15708
15709           /* If the branch is out of reach we ought to have a long
15710              branch stub.  */
15711           from = (rel->r_offset
15712                   + input_section->output_offset
15713                   + input_section->output_section->vma);
15714
15715           relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
15716                                                   ? fdh->elf.other
15717                                                   : sym->st_other);
15718
15719           if (stub_entry != NULL
15720               && (stub_entry->stub_type == ppc_stub_long_branch
15721                   || stub_entry->stub_type == ppc_stub_plt_branch)
15722               && (r_type == R_PPC64_ADDR14_BRTAKEN
15723                   || r_type == R_PPC64_ADDR14_BRNTAKEN
15724                   || (relocation + addend - from + max_br_offset
15725                       < 2 * max_br_offset)))
15726             /* Don't use the stub if this branch is in range.  */
15727             stub_entry = NULL;
15728
15729           if (stub_entry != NULL
15730               && (stub_entry->stub_type == ppc_stub_long_branch_notoc
15731                   || stub_entry->stub_type == ppc_stub_long_branch_both
15732                   || stub_entry->stub_type == ppc_stub_plt_branch_notoc
15733                   || stub_entry->stub_type == ppc_stub_plt_branch_both)
15734               && (r_type != R_PPC64_REL24_NOTOC
15735                   || ((fdh ? fdh->elf.other : sym->st_other)
15736                       & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
15737               && (relocation + addend - from + max_br_offset
15738                   < 2 * max_br_offset))
15739             stub_entry = NULL;
15740
15741           if (stub_entry != NULL
15742               && (stub_entry->stub_type == ppc_stub_long_branch_r2off
15743                   || stub_entry->stub_type == ppc_stub_long_branch_both
15744                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15745                   || stub_entry->stub_type == ppc_stub_plt_branch_both)
15746               && r_type == R_PPC64_REL24_NOTOC
15747               && (relocation + addend - from + max_br_offset
15748                   < 2 * max_br_offset))
15749             stub_entry = NULL;
15750
15751           if (stub_entry != NULL)
15752             {
15753               /* Munge up the value and addend so that we call the stub
15754                  rather than the procedure directly.  */
15755               asection *stub_sec = stub_entry->group->stub_sec;
15756
15757               if (stub_entry->stub_type == ppc_stub_save_res)
15758                 relocation += (stub_sec->output_offset
15759                                + stub_sec->output_section->vma
15760                                + stub_sec->size - htab->sfpr->size
15761                                - htab->sfpr->output_offset
15762                                - htab->sfpr->output_section->vma);
15763               else
15764                 relocation = (stub_entry->stub_offset
15765                               + stub_sec->output_offset
15766                               + stub_sec->output_section->vma);
15767               addend = 0;
15768               reloc_dest = DEST_STUB;
15769
15770               if (((stub_entry->stub_type == ppc_stub_plt_call
15771                     && ALWAYS_EMIT_R2SAVE)
15772                    || stub_entry->stub_type == ppc_stub_plt_call_r2save
15773                    || stub_entry->stub_type == ppc_stub_plt_call_both)
15774                   && !(h != NULL
15775                        && is_tls_get_addr (&h->elf, htab)
15776                        && htab->params->tls_get_addr_opt)
15777                   && rel + 1 < relend
15778                   && rel[1].r_offset == rel->r_offset + 4
15779                   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
15780                 relocation += 4;
15781               else if ((stub_entry->stub_type == ppc_stub_long_branch_both
15782                         || stub_entry->stub_type == ppc_stub_plt_branch_both
15783                         || stub_entry->stub_type == ppc_stub_plt_call_both)
15784                        && r_type == R_PPC64_REL24_NOTOC)
15785                 relocation += 4;
15786
15787               if (r_type == R_PPC64_REL24_NOTOC
15788                   && (stub_entry->stub_type == ppc_stub_plt_call_notoc
15789                       || stub_entry->stub_type == ppc_stub_plt_call_both))
15790                 htab->notoc_plt = 1;
15791             }
15792
15793           if (insn != 0)
15794             {
15795               if (is_isa_v2)
15796                 {
15797                   /* Set 'a' bit.  This is 0b00010 in BO field for branch
15798                      on CR(BI) insns (BO == 001at or 011at), and 0b01000
15799                      for branch on CTR insns (BO == 1a00t or 1a01t).  */
15800                   if ((insn & (0x14 << 21)) == (0x04 << 21))
15801                     insn |= 0x02 << 21;
15802                   else if ((insn & (0x14 << 21)) == (0x10 << 21))
15803                     insn |= 0x08 << 21;
15804                   else
15805                     break;
15806                 }
15807               else
15808                 {
15809                   /* Invert 'y' bit if not the default.  */
15810                   if ((bfd_signed_vma) (relocation + addend - from) < 0)
15811                     insn ^= 0x01 << 21;
15812                 }
15813
15814               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15815             }
15816
15817           /* NOP out calls to undefined weak functions.
15818              We can thus call a weak function without first
15819              checking whether the function is defined.  */
15820           else if (h != NULL
15821                    && h->elf.root.type == bfd_link_hash_undefweak
15822                    && h->elf.dynindx == -1
15823                    && (r_type == R_PPC64_REL24
15824                        || r_type == R_PPC64_REL24_NOTOC)
15825                    && relocation == 0
15826                    && addend == 0)
15827             {
15828               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15829               goto copy_reloc;
15830             }
15831           break;
15832
15833         case R_PPC64_GOT16_DS:
15834           from = TOCstart + htab->sec_info[input_section->id].toc_off;
15835           if (relocation + addend - from + 0x8000 < 0x10000
15836               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15837             {
15838               insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15839               if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15840                 {
15841                   insn += (14u << 26) - (58u << 26);
15842                   bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15843                   r_type = R_PPC64_TOC16;
15844                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15845                 }
15846             }
15847           break;
15848
15849         case R_PPC64_GOT16_LO_DS:
15850         case R_PPC64_GOT16_HA:
15851           from = TOCstart + htab->sec_info[input_section->id].toc_off;
15852           if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
15853               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15854             {
15855               insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15856               if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15857                 {
15858                   insn += (14u << 26) - (58u << 26);
15859                   bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15860                   r_type = R_PPC64_TOC16_LO;
15861                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15862                 }
15863               else if ((insn & (0x3fu << 26)) == 15u << 26 /* addis */)
15864                 {
15865                   r_type = R_PPC64_TOC16_HA;
15866                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15867                 }
15868             }
15869           break;
15870
15871         case R_PPC64_GOT_PCREL34:
15872           from = (rel->r_offset
15873                   + input_section->output_section->vma
15874                   + input_section->output_offset);
15875           if (relocation - from + (1ULL << 33) < 1ULL << 34
15876               && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15877             {
15878               offset = rel->r_offset;
15879               pinsn = bfd_get_32 (input_bfd, contents + offset);
15880               pinsn <<= 32;
15881               pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15882               if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15883                    == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
15884                 {
15885                   /* Replace with paddi.  */
15886                   pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
15887                   r_type = R_PPC64_PCREL34;
15888                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15889                   bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
15890                   bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
15891                   goto pcrelopt;
15892                 }
15893             }
15894           break;
15895
15896         case R_PPC64_PCREL34:
15897           if (SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15898             {
15899               offset = rel->r_offset;
15900               pinsn = bfd_get_32 (input_bfd, contents + offset);
15901               pinsn <<= 32;
15902               pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15903               if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15904                    == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
15905                        | (14ULL << 26) /* paddi */))
15906                 {
15907                 pcrelopt:
15908                   if (rel + 1 < relend
15909                       && rel[1].r_offset == offset
15910                       && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT))
15911                     {
15912                       bfd_vma off2 = rel[1].r_addend;
15913                       if (off2 == 0)
15914                         /* zero means next insn.  */
15915                         off2 = 8;
15916                       off2 += offset;
15917                       if (off2 + 4 <= input_section->size)
15918                         {
15919                           uint64_t pinsn2;
15920                           bfd_signed_vma addend_off;
15921                           pinsn2 = bfd_get_32 (input_bfd, contents + off2);
15922                           pinsn2 <<= 32;
15923                           if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15924                             {
15925                               if (off2 + 8 > input_section->size)
15926                                 break;
15927                               pinsn2 |= bfd_get_32 (input_bfd,
15928                                                     contents + off2 + 4);
15929                             }
15930                           if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
15931                             {
15932                               addend += addend_off;
15933                               rel->r_addend = addend;
15934                               bfd_put_32 (input_bfd, pinsn >> 32,
15935                                           contents + offset);
15936                               bfd_put_32 (input_bfd, pinsn,
15937                                           contents + offset + 4);
15938                               bfd_put_32 (input_bfd, pinsn2 >> 32,
15939                                           contents + off2);
15940                               if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15941                                 bfd_put_32 (input_bfd, pinsn2,
15942                                             contents + off2 + 4);
15943                             }
15944                         }
15945                     }
15946                 }
15947             }
15948           break;
15949         }
15950
15951       tls_type = 0;
15952       save_unresolved_reloc = unresolved_reloc;
15953       switch (r_type)
15954         {
15955         default:
15956           /* xgettext:c-format */
15957           _bfd_error_handler (_("%pB: %s unsupported"),
15958                               input_bfd, ppc64_elf_howto_table[r_type]->name);
15959
15960           bfd_set_error (bfd_error_bad_value);
15961           ret = FALSE;
15962           goto copy_reloc;
15963
15964         case R_PPC64_NONE:
15965         case R_PPC64_TLS:
15966         case R_PPC64_TLSGD:
15967         case R_PPC64_TLSLD:
15968         case R_PPC64_TOCSAVE:
15969         case R_PPC64_GNU_VTINHERIT:
15970         case R_PPC64_GNU_VTENTRY:
15971         case R_PPC64_ENTRY:
15972         case R_PPC64_PCREL_OPT:
15973           goto copy_reloc;
15974
15975           /* GOT16 relocations.  Like an ADDR16 using the symbol's
15976              address in the GOT as relocation value instead of the
15977              symbol's value itself.  Also, create a GOT entry for the
15978              symbol and put the symbol value there.  */
15979         case R_PPC64_GOT_TLSGD16:
15980         case R_PPC64_GOT_TLSGD16_LO:
15981         case R_PPC64_GOT_TLSGD16_HI:
15982         case R_PPC64_GOT_TLSGD16_HA:
15983         case R_PPC64_GOT_TLSGD34:
15984           tls_type = TLS_TLS | TLS_GD;
15985           goto dogot;
15986
15987         case R_PPC64_GOT_TLSLD16:
15988         case R_PPC64_GOT_TLSLD16_LO:
15989         case R_PPC64_GOT_TLSLD16_HI:
15990         case R_PPC64_GOT_TLSLD16_HA:
15991         case R_PPC64_GOT_TLSLD34:
15992           tls_type = TLS_TLS | TLS_LD;
15993           goto dogot;
15994
15995         case R_PPC64_GOT_TPREL16_DS:
15996         case R_PPC64_GOT_TPREL16_LO_DS:
15997         case R_PPC64_GOT_TPREL16_HI:
15998         case R_PPC64_GOT_TPREL16_HA:
15999         case R_PPC64_GOT_TPREL34:
16000           tls_type = TLS_TLS | TLS_TPREL;
16001           goto dogot;
16002
16003         case R_PPC64_GOT_DTPREL16_DS:
16004         case R_PPC64_GOT_DTPREL16_LO_DS:
16005         case R_PPC64_GOT_DTPREL16_HI:
16006         case R_PPC64_GOT_DTPREL16_HA:
16007         case R_PPC64_GOT_DTPREL34:
16008           tls_type = TLS_TLS | TLS_DTPREL;
16009           goto dogot;
16010
16011         case R_PPC64_GOT16:
16012         case R_PPC64_GOT16_LO:
16013         case R_PPC64_GOT16_HI:
16014         case R_PPC64_GOT16_HA:
16015         case R_PPC64_GOT16_DS:
16016         case R_PPC64_GOT16_LO_DS:
16017         case R_PPC64_GOT_PCREL34:
16018         dogot:
16019           {
16020             /* Relocation is to the entry for this symbol in the global
16021                offset table.  */
16022             asection *got;
16023             bfd_vma *offp;
16024             bfd_vma off;
16025             unsigned long indx = 0;
16026             struct got_entry *ent;
16027
16028             if (tls_type == (TLS_TLS | TLS_LD)
16029                 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
16030               ent = ppc64_tlsld_got (input_bfd);
16031             else
16032               {
16033                 if (h != NULL)
16034                   {
16035                     if (!htab->elf.dynamic_sections_created
16036                         || h->elf.dynindx == -1
16037                         || SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16038                         || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
16039                       /* This is actually a static link, or it is a
16040                          -Bsymbolic link and the symbol is defined
16041                          locally, or the symbol was forced to be local
16042                          because of a version file.  */
16043                       ;
16044                     else
16045                       {
16046                         indx = h->elf.dynindx;
16047                         unresolved_reloc = FALSE;
16048                       }
16049                     ent = h->elf.got.glist;
16050                   }
16051                 else
16052                   {
16053                     if (local_got_ents == NULL)
16054                       abort ();
16055                     ent = local_got_ents[r_symndx];
16056                   }
16057
16058                 for (; ent != NULL; ent = ent->next)
16059                   if (ent->addend == orig_rel.r_addend
16060                       && ent->owner == input_bfd
16061                       && ent->tls_type == tls_type)
16062                     break;
16063               }
16064
16065             if (ent == NULL)
16066               abort ();
16067             if (ent->is_indirect)
16068               ent = ent->got.ent;
16069             offp = &ent->got.offset;
16070             got = ppc64_elf_tdata (ent->owner)->got;
16071             if (got == NULL)
16072               abort ();
16073
16074             /* The offset must always be a multiple of 8.  We use the
16075                least significant bit to record whether we have already
16076                processed this entry.  */
16077             off = *offp;
16078             if ((off & 1) != 0)
16079               off &= ~1;
16080             else
16081               {
16082                 /* Generate relocs for the dynamic linker, except in
16083                    the case of TLSLD where we'll use one entry per
16084                    module.  */
16085                 asection *relgot;
16086                 bfd_boolean ifunc;
16087
16088                 *offp = off | 1;
16089                 relgot = NULL;
16090                 ifunc = (h != NULL
16091                          ? h->elf.type == STT_GNU_IFUNC
16092                          : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
16093                 if (ifunc)
16094                   {
16095                     relgot = htab->elf.irelplt;
16096                     if (indx == 0)
16097                       htab->local_ifunc_resolver = 1;
16098                     else if (is_static_defined (&h->elf))
16099                       htab->maybe_local_ifunc_resolver = 1;
16100                   }
16101                 else if (indx != 0
16102                          || (bfd_link_pic (info)
16103                              && (h == NULL
16104                                  || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
16105                              && !(tls_type != 0
16106                                   && bfd_link_executable (info)
16107                                   && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
16108                   relgot = ppc64_elf_tdata (ent->owner)->relgot;
16109                 if (relgot != NULL)
16110                   {
16111                     outrel.r_offset = (got->output_section->vma
16112                                        + got->output_offset
16113                                        + off);
16114                     outrel.r_addend = orig_rel.r_addend;
16115                     if (tls_type & (TLS_LD | TLS_GD))
16116                       {
16117                         outrel.r_addend = 0;
16118                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
16119                         if (tls_type == (TLS_TLS | TLS_GD))
16120                           {
16121                             loc = relgot->contents;
16122                             loc += (relgot->reloc_count++
16123                                     * sizeof (Elf64_External_Rela));
16124                             bfd_elf64_swap_reloca_out (output_bfd,
16125                                                        &outrel, loc);
16126                             outrel.r_offset += 8;
16127                             outrel.r_addend = orig_rel.r_addend;
16128                             outrel.r_info
16129                               = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
16130                           }
16131                       }
16132                     else if (tls_type == (TLS_TLS | TLS_DTPREL))
16133                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
16134                     else if (tls_type == (TLS_TLS | TLS_TPREL))
16135                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
16136                     else if (indx != 0)
16137                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
16138                     else
16139                       {
16140                         if (ifunc)
16141                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16142                         else
16143                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16144
16145                         /* Write the .got section contents for the sake
16146                            of prelink.  */
16147                         loc = got->contents + off;
16148                         bfd_put_64 (output_bfd, outrel.r_addend + relocation,
16149                                     loc);
16150                       }
16151
16152                     if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
16153                       {
16154                         outrel.r_addend += relocation;
16155                         if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
16156                           {
16157                             if (htab->elf.tls_sec == NULL)
16158                               outrel.r_addend = 0;
16159                             else
16160                               outrel.r_addend -= htab->elf.tls_sec->vma;
16161                           }
16162                       }
16163                     loc = relgot->contents;
16164                     loc += (relgot->reloc_count++
16165                             * sizeof (Elf64_External_Rela));
16166                     bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16167                   }
16168
16169                 /* Init the .got section contents here if we're not
16170                    emitting a reloc.  */
16171                 else
16172                   {
16173                     relocation += orig_rel.r_addend;
16174                     if (tls_type != 0)
16175                       {
16176                         if (htab->elf.tls_sec == NULL)
16177                           relocation = 0;
16178                         else
16179                           {
16180                             if (tls_type & TLS_LD)
16181                               relocation = 0;
16182                             else
16183                               relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
16184                             if (tls_type & TLS_TPREL)
16185                               relocation += DTP_OFFSET - TP_OFFSET;
16186                           }
16187
16188                         if (tls_type & (TLS_GD | TLS_LD))
16189                           {
16190                             bfd_put_64 (output_bfd, relocation,
16191                                         got->contents + off + 8);
16192                             relocation = 1;
16193                           }
16194                       }
16195                     bfd_put_64 (output_bfd, relocation,
16196                                 got->contents + off);
16197                   }
16198               }
16199
16200             if (off >= (bfd_vma) -2)
16201               abort ();
16202
16203             relocation = got->output_section->vma + got->output_offset + off;
16204             addend = 0;
16205             if (!(r_type == R_PPC64_GOT_PCREL34
16206                   || r_type == R_PPC64_GOT_TLSGD34
16207                   || r_type == R_PPC64_GOT_TLSLD34
16208                   || r_type == R_PPC64_GOT_TPREL34
16209                   || r_type == R_PPC64_GOT_DTPREL34))
16210               addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
16211           }
16212           break;
16213
16214         case R_PPC64_PLT16_HA:
16215         case R_PPC64_PLT16_HI:
16216         case R_PPC64_PLT16_LO:
16217         case R_PPC64_PLT16_LO_DS:
16218         case R_PPC64_PLT_PCREL34:
16219         case R_PPC64_PLT_PCREL34_NOTOC:
16220         case R_PPC64_PLT32:
16221         case R_PPC64_PLT64:
16222         case R_PPC64_PLTSEQ:
16223         case R_PPC64_PLTSEQ_NOTOC:
16224         case R_PPC64_PLTCALL:
16225         case R_PPC64_PLTCALL_NOTOC:
16226           /* Relocation is to the entry for this symbol in the
16227              procedure linkage table.  */
16228           unresolved_reloc = TRUE;
16229           {
16230             struct plt_entry **plt_list = NULL;
16231             if (h != NULL)
16232               plt_list = &h->elf.plt.plist;
16233             else if (local_got_ents != NULL)
16234               {
16235                 struct plt_entry **local_plt = (struct plt_entry **)
16236                   (local_got_ents + symtab_hdr->sh_info);
16237                 plt_list = local_plt + r_symndx;
16238               }
16239             if (plt_list)
16240               {
16241                 struct plt_entry *ent;
16242
16243                 for (ent = *plt_list; ent != NULL; ent = ent->next)
16244                   if (ent->plt.offset != (bfd_vma) -1
16245                       && ent->addend == orig_rel.r_addend)
16246                     {
16247                       asection *plt;
16248                       bfd_vma got;
16249
16250                       plt = htab->elf.splt;
16251                       if (!htab->elf.dynamic_sections_created
16252                           || h == NULL
16253                           || h->elf.dynindx == -1)
16254                         {
16255                           if (h != NULL
16256                               ? h->elf.type == STT_GNU_IFUNC
16257                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16258                             plt = htab->elf.iplt;
16259                           else
16260                             plt = htab->pltlocal;
16261                         }
16262                       relocation = (plt->output_section->vma
16263                                     + plt->output_offset
16264                                     + ent->plt.offset);
16265                       if (r_type == R_PPC64_PLT16_HA
16266                           || r_type == R_PPC64_PLT16_HI
16267                           || r_type == R_PPC64_PLT16_LO
16268                           || r_type == R_PPC64_PLT16_LO_DS)
16269                         {
16270                           got = (elf_gp (output_bfd)
16271                                  + htab->sec_info[input_section->id].toc_off);
16272                           relocation -= got;
16273                         }
16274                       addend = 0;
16275                       unresolved_reloc = FALSE;
16276                       break;
16277                     }
16278               }
16279           }
16280           break;
16281
16282         case R_PPC64_TOC:
16283           /* Relocation value is TOC base.  */
16284           relocation = TOCstart;
16285           if (r_symndx == STN_UNDEF)
16286             relocation += htab->sec_info[input_section->id].toc_off;
16287           else if (unresolved_reloc)
16288             ;
16289           else if (sec != NULL && sec->id < htab->sec_info_arr_size)
16290             relocation += htab->sec_info[sec->id].toc_off;
16291           else
16292             unresolved_reloc = TRUE;
16293           goto dodyn;
16294
16295           /* TOC16 relocs.  We want the offset relative to the TOC base,
16296              which is the address of the start of the TOC plus 0x8000.
16297              The TOC consists of sections .got, .toc, .tocbss, and .plt,
16298              in this order.  */
16299         case R_PPC64_TOC16:
16300         case R_PPC64_TOC16_LO:
16301         case R_PPC64_TOC16_HI:
16302         case R_PPC64_TOC16_DS:
16303         case R_PPC64_TOC16_LO_DS:
16304         case R_PPC64_TOC16_HA:
16305           addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
16306           if (h != NULL)
16307             goto dodyn;
16308           break;
16309
16310           /* Relocate against the beginning of the section.  */
16311         case R_PPC64_SECTOFF:
16312         case R_PPC64_SECTOFF_LO:
16313         case R_PPC64_SECTOFF_HI:
16314         case R_PPC64_SECTOFF_DS:
16315         case R_PPC64_SECTOFF_LO_DS:
16316         case R_PPC64_SECTOFF_HA:
16317           if (sec != NULL)
16318             addend -= sec->output_section->vma;
16319           break;
16320
16321         case R_PPC64_REL16:
16322         case R_PPC64_REL16_LO:
16323         case R_PPC64_REL16_HI:
16324         case R_PPC64_REL16_HA:
16325         case R_PPC64_REL16_HIGH:
16326         case R_PPC64_REL16_HIGHA:
16327         case R_PPC64_REL16_HIGHER:
16328         case R_PPC64_REL16_HIGHERA:
16329         case R_PPC64_REL16_HIGHEST:
16330         case R_PPC64_REL16_HIGHESTA:
16331         case R_PPC64_REL16_HIGHER34:
16332         case R_PPC64_REL16_HIGHERA34:
16333         case R_PPC64_REL16_HIGHEST34:
16334         case R_PPC64_REL16_HIGHESTA34:
16335         case R_PPC64_REL16DX_HA:
16336         case R_PPC64_REL14:
16337         case R_PPC64_REL14_BRNTAKEN:
16338         case R_PPC64_REL14_BRTAKEN:
16339         case R_PPC64_REL24:
16340         case R_PPC64_REL24_NOTOC:
16341         case R_PPC64_PCREL34:
16342         case R_PPC64_PCREL28:
16343           break;
16344
16345         case R_PPC64_TPREL16:
16346         case R_PPC64_TPREL16_LO:
16347         case R_PPC64_TPREL16_HI:
16348         case R_PPC64_TPREL16_HA:
16349         case R_PPC64_TPREL16_DS:
16350         case R_PPC64_TPREL16_LO_DS:
16351         case R_PPC64_TPREL16_HIGH:
16352         case R_PPC64_TPREL16_HIGHA:
16353         case R_PPC64_TPREL16_HIGHER:
16354         case R_PPC64_TPREL16_HIGHERA:
16355         case R_PPC64_TPREL16_HIGHEST:
16356         case R_PPC64_TPREL16_HIGHESTA:
16357         case R_PPC64_TPREL34:
16358           if (h != NULL
16359               && h->elf.root.type == bfd_link_hash_undefweak
16360               && h->elf.dynindx == -1)
16361             {
16362               /* Make this relocation against an undefined weak symbol
16363                  resolve to zero.  This is really just a tweak, since
16364                  code using weak externs ought to check that they are
16365                  defined before using them.  */
16366               bfd_byte *p = contents + rel->r_offset - d_offset;
16367
16368               insn = bfd_get_32 (input_bfd, p);
16369               insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
16370               if (insn != 0)
16371                 bfd_put_32 (input_bfd, insn, p);
16372               break;
16373             }
16374           if (htab->elf.tls_sec != NULL)
16375             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16376           /* The TPREL16 relocs shouldn't really be used in shared
16377              libs or with non-local symbols as that will result in
16378              DT_TEXTREL being set, but support them anyway.  */
16379           goto dodyn;
16380
16381         case R_PPC64_DTPREL16:
16382         case R_PPC64_DTPREL16_LO:
16383         case R_PPC64_DTPREL16_HI:
16384         case R_PPC64_DTPREL16_HA:
16385         case R_PPC64_DTPREL16_DS:
16386         case R_PPC64_DTPREL16_LO_DS:
16387         case R_PPC64_DTPREL16_HIGH:
16388         case R_PPC64_DTPREL16_HIGHA:
16389         case R_PPC64_DTPREL16_HIGHER:
16390         case R_PPC64_DTPREL16_HIGHERA:
16391         case R_PPC64_DTPREL16_HIGHEST:
16392         case R_PPC64_DTPREL16_HIGHESTA:
16393         case R_PPC64_DTPREL34:
16394           if (htab->elf.tls_sec != NULL)
16395             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16396           break;
16397
16398         case R_PPC64_ADDR64_LOCAL:
16399           addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
16400                                               ? h->elf.other
16401                                               : sym->st_other);
16402           break;
16403
16404         case R_PPC64_DTPMOD64:
16405           relocation = 1;
16406           addend = 0;
16407           goto dodyn;
16408
16409         case R_PPC64_TPREL64:
16410           if (htab->elf.tls_sec != NULL)
16411             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16412           goto dodyn;
16413
16414         case R_PPC64_DTPREL64:
16415           if (htab->elf.tls_sec != NULL)
16416             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16417           /* Fall through.  */
16418
16419           /* Relocations that may need to be propagated if this is a
16420              dynamic object.  */
16421         case R_PPC64_REL30:
16422         case R_PPC64_REL32:
16423         case R_PPC64_REL64:
16424         case R_PPC64_ADDR14:
16425         case R_PPC64_ADDR14_BRNTAKEN:
16426         case R_PPC64_ADDR14_BRTAKEN:
16427         case R_PPC64_ADDR16:
16428         case R_PPC64_ADDR16_DS:
16429         case R_PPC64_ADDR16_HA:
16430         case R_PPC64_ADDR16_HI:
16431         case R_PPC64_ADDR16_HIGH:
16432         case R_PPC64_ADDR16_HIGHA:
16433         case R_PPC64_ADDR16_HIGHER:
16434         case R_PPC64_ADDR16_HIGHERA:
16435         case R_PPC64_ADDR16_HIGHEST:
16436         case R_PPC64_ADDR16_HIGHESTA:
16437         case R_PPC64_ADDR16_LO:
16438         case R_PPC64_ADDR16_LO_DS:
16439         case R_PPC64_ADDR16_HIGHER34:
16440         case R_PPC64_ADDR16_HIGHERA34:
16441         case R_PPC64_ADDR16_HIGHEST34:
16442         case R_PPC64_ADDR16_HIGHESTA34:
16443         case R_PPC64_ADDR24:
16444         case R_PPC64_ADDR32:
16445         case R_PPC64_ADDR64:
16446         case R_PPC64_UADDR16:
16447         case R_PPC64_UADDR32:
16448         case R_PPC64_UADDR64:
16449         case R_PPC64_D34:
16450         case R_PPC64_D34_LO:
16451         case R_PPC64_D34_HI30:
16452         case R_PPC64_D34_HA30:
16453         case R_PPC64_D28:
16454         dodyn:
16455           if ((input_section->flags & SEC_ALLOC) == 0)
16456             break;
16457
16458           if (NO_OPD_RELOCS && is_opd)
16459             break;
16460
16461           if (bfd_link_pic (info)
16462               ? ((h == NULL
16463                   || h->dyn_relocs != NULL)
16464                  && ((h != NULL && pc_dynrelocs (h))
16465                      || must_be_dyn_reloc (info, r_type)))
16466               : (h != NULL
16467                  ? h->dyn_relocs != NULL
16468                  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16469             {
16470               bfd_boolean skip, relocate;
16471               asection *sreloc;
16472               bfd_vma out_off;
16473               long indx = 0;
16474
16475               /* When generating a dynamic object, these relocations
16476                  are copied into the output file to be resolved at run
16477                  time.  */
16478
16479               skip = FALSE;
16480               relocate = FALSE;
16481
16482               out_off = _bfd_elf_section_offset (output_bfd, info,
16483                                                  input_section, rel->r_offset);
16484               if (out_off == (bfd_vma) -1)
16485                 skip = TRUE;
16486               else if (out_off == (bfd_vma) -2)
16487                 skip = TRUE, relocate = TRUE;
16488               out_off += (input_section->output_section->vma
16489                           + input_section->output_offset);
16490               outrel.r_offset = out_off;
16491               outrel.r_addend = rel->r_addend;
16492
16493               /* Optimize unaligned reloc use.  */
16494               if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
16495                   || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
16496                 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
16497               else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
16498                        || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
16499                 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
16500               else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
16501                        || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
16502                 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
16503
16504               if (skip)
16505                 memset (&outrel, 0, sizeof outrel);
16506               else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16507                        && !is_opd
16508                        && r_type != R_PPC64_TOC)
16509                 {
16510                   indx = h->elf.dynindx;
16511                   BFD_ASSERT (indx != -1);
16512                   outrel.r_info = ELF64_R_INFO (indx, r_type);
16513                 }
16514               else
16515                 {
16516                   /* This symbol is local, or marked to become local,
16517                      or this is an opd section reloc which must point
16518                      at a local function.  */
16519                   outrel.r_addend += relocation;
16520                   if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
16521                     {
16522                       if (is_opd && h != NULL)
16523                         {
16524                           /* Lie about opd entries.  This case occurs
16525                              when building shared libraries and we
16526                              reference a function in another shared
16527                              lib.  The same thing happens for a weak
16528                              definition in an application that's
16529                              overridden by a strong definition in a
16530                              shared lib.  (I believe this is a generic
16531                              bug in binutils handling of weak syms.)
16532                              In these cases we won't use the opd
16533                              entry in this lib.  */
16534                           unresolved_reloc = FALSE;
16535                         }
16536                       if (!is_opd
16537                           && r_type == R_PPC64_ADDR64
16538                           && (h != NULL
16539                               ? h->elf.type == STT_GNU_IFUNC
16540                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16541                         outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16542                       else
16543                         {
16544                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16545
16546                           /* We need to relocate .opd contents for ld.so.
16547                              Prelink also wants simple and consistent rules
16548                              for relocs.  This make all RELATIVE relocs have
16549                              *r_offset equal to r_addend.  */
16550                           relocate = TRUE;
16551                         }
16552                     }
16553                   else
16554                     {
16555                       if (h != NULL
16556                           ? h->elf.type == STT_GNU_IFUNC
16557                           : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16558                         {
16559                           info->callbacks->einfo
16560                             /* xgettext:c-format */
16561                             (_("%H: %s for indirect "
16562                                "function `%pT' unsupported\n"),
16563                              input_bfd, input_section, rel->r_offset,
16564                              ppc64_elf_howto_table[r_type]->name,
16565                              sym_name);
16566                           ret = FALSE;
16567                         }
16568                       else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
16569                         ;
16570                       else if (sec == NULL || sec->owner == NULL)
16571                         {
16572                           bfd_set_error (bfd_error_bad_value);
16573                           return FALSE;
16574                         }
16575                       else
16576                         {
16577                           asection *osec = sec->output_section;
16578
16579                           if ((osec->flags & SEC_THREAD_LOCAL) != 0)
16580                             {
16581                               /* TLS symbol values are relative to the
16582                                  TLS segment.  Dynamic relocations for
16583                                  local TLS symbols therefore can't be
16584                                  reduced to a relocation against their
16585                                  section symbol because it holds the
16586                                  address of the section, not a value
16587                                  relative to the TLS segment.  We could
16588                                  change the .tdata dynamic section symbol
16589                                  to be zero value but STN_UNDEF works
16590                                  and is used elsewhere, eg. for TPREL64
16591                                  GOT relocs against local TLS symbols.  */
16592                               osec = htab->elf.tls_sec;
16593                               indx = 0;
16594                             }
16595                           else
16596                             {
16597                               indx = elf_section_data (osec)->dynindx;
16598                               if (indx == 0)
16599                                 {
16600                                   if ((osec->flags & SEC_READONLY) == 0
16601                                       && htab->elf.data_index_section != NULL)
16602                                     osec = htab->elf.data_index_section;
16603                                   else
16604                                     osec = htab->elf.text_index_section;
16605                                   indx = elf_section_data (osec)->dynindx;
16606                                 }
16607                               BFD_ASSERT (indx != 0);
16608                             }
16609
16610                           /* We are turning this relocation into one
16611                              against a section symbol, so subtract out
16612                              the output section's address but not the
16613                              offset of the input section in the output
16614                              section.  */
16615                           outrel.r_addend -= osec->vma;
16616                         }
16617
16618                       outrel.r_info = ELF64_R_INFO (indx, r_type);
16619                     }
16620                 }
16621
16622               sreloc = elf_section_data (input_section)->sreloc;
16623               if (h != NULL
16624                   ? h->elf.type == STT_GNU_IFUNC
16625                   : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16626                 {
16627                   sreloc = htab->elf.irelplt;
16628                   if (indx == 0)
16629                     htab->local_ifunc_resolver = 1;
16630                   else if (is_static_defined (&h->elf))
16631                     htab->maybe_local_ifunc_resolver = 1;
16632                 }
16633               if (sreloc == NULL)
16634                 abort ();
16635
16636               if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
16637                   >= sreloc->size)
16638                 abort ();
16639               loc = sreloc->contents;
16640               loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
16641               bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16642
16643               if (!warned_dynamic
16644                   && !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
16645                 {
16646                   info->callbacks->einfo
16647                     /* xgettext:c-format */
16648                     (_("%X%P: %pB: %s against %pT "
16649                        "is not supported by glibc as a dynamic relocation\n"),
16650                      input_bfd,
16651                      ppc64_elf_howto_table[ELF64_R_TYPE (outrel.r_info)]->name,
16652                      sym_name);
16653                   warned_dynamic = TRUE;
16654                 }
16655
16656               /* If this reloc is against an external symbol, it will
16657                  be computed at runtime, so there's no need to do
16658                  anything now.  However, for the sake of prelink ensure
16659                  that the section contents are a known value.  */
16660               if (!relocate)
16661                 {
16662                   unresolved_reloc = FALSE;
16663                   /* The value chosen here is quite arbitrary as ld.so
16664                      ignores section contents except for the special
16665                      case of .opd where the contents might be accessed
16666                      before relocation.  Choose zero, as that won't
16667                      cause reloc overflow.  */
16668                   relocation = 0;
16669                   addend = 0;
16670                   /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
16671                      to improve backward compatibility with older
16672                      versions of ld.  */
16673                   if (r_type == R_PPC64_ADDR64)
16674                     addend = outrel.r_addend;
16675                   /* Adjust pc_relative relocs to have zero in *r_offset.  */
16676                   else if (ppc64_elf_howto_table[r_type]->pc_relative)
16677                     addend = outrel.r_offset;
16678                 }
16679             }
16680           break;
16681
16682         case R_PPC64_COPY:
16683         case R_PPC64_GLOB_DAT:
16684         case R_PPC64_JMP_SLOT:
16685         case R_PPC64_JMP_IREL:
16686         case R_PPC64_RELATIVE:
16687           /* We shouldn't ever see these dynamic relocs in relocatable
16688              files.  */
16689           /* Fall through.  */
16690
16691         case R_PPC64_PLTGOT16:
16692         case R_PPC64_PLTGOT16_DS:
16693         case R_PPC64_PLTGOT16_HA:
16694         case R_PPC64_PLTGOT16_HI:
16695         case R_PPC64_PLTGOT16_LO:
16696         case R_PPC64_PLTGOT16_LO_DS:
16697         case R_PPC64_PLTREL32:
16698         case R_PPC64_PLTREL64:
16699           /* These ones haven't been implemented yet.  */
16700
16701           info->callbacks->einfo
16702             /* xgettext:c-format */
16703             (_("%P: %pB: %s is not supported for `%pT'\n"),
16704              input_bfd,
16705              ppc64_elf_howto_table[r_type]->name, sym_name);
16706
16707           bfd_set_error (bfd_error_invalid_operation);
16708           ret = FALSE;
16709           goto copy_reloc;
16710         }
16711
16712       /* Multi-instruction sequences that access the TOC can be
16713          optimized, eg. addis ra,r2,0; addi rb,ra,x;
16714          to             nop;           addi rb,r2,x;  */
16715       switch (r_type)
16716         {
16717         default:
16718           break;
16719
16720         case R_PPC64_GOT_TLSLD16_HI:
16721         case R_PPC64_GOT_TLSGD16_HI:
16722         case R_PPC64_GOT_TPREL16_HI:
16723         case R_PPC64_GOT_DTPREL16_HI:
16724         case R_PPC64_GOT16_HI:
16725         case R_PPC64_TOC16_HI:
16726           /* These relocs would only be useful if building up an
16727              offset to later add to r2, perhaps in an indexed
16728              addressing mode instruction.  Don't try to optimize.
16729              Unfortunately, the possibility of someone building up an
16730              offset like this or even with the HA relocs, means that
16731              we need to check the high insn when optimizing the low
16732              insn.  */
16733           break;
16734
16735         case R_PPC64_PLTCALL_NOTOC:
16736           if (!unresolved_reloc)
16737             htab->notoc_plt = 1;
16738           /* Fall through.  */
16739         case R_PPC64_PLTCALL:
16740           if (unresolved_reloc)
16741             {
16742               /* No plt entry.  Make this into a direct call.  */
16743               bfd_byte *p = contents + rel->r_offset;
16744               insn = bfd_get_32 (input_bfd, p);
16745               insn &= 1;
16746               bfd_put_32 (input_bfd, B_DOT | insn, p);
16747               if (r_type == R_PPC64_PLTCALL)
16748                 bfd_put_32 (input_bfd, NOP, p + 4);
16749               unresolved_reloc = save_unresolved_reloc;
16750               r_type = R_PPC64_REL24;
16751             }
16752           break;
16753
16754         case R_PPC64_PLTSEQ_NOTOC:
16755         case R_PPC64_PLTSEQ:
16756           if (unresolved_reloc)
16757             {
16758               unresolved_reloc = FALSE;
16759               goto nop_it;
16760             }
16761           break;
16762
16763         case R_PPC64_PLT_PCREL34_NOTOC:
16764           if (!unresolved_reloc)
16765             htab->notoc_plt = 1;
16766           /* Fall through.  */
16767         case R_PPC64_PLT_PCREL34:
16768           if (unresolved_reloc)
16769             {
16770               bfd_byte *p = contents + rel->r_offset;
16771               bfd_put_32 (input_bfd, PNOP >> 32, p);
16772               bfd_put_32 (input_bfd, PNOP, p + 4);
16773               unresolved_reloc = FALSE;
16774               goto copy_reloc;
16775             }
16776           break;
16777
16778         case R_PPC64_PLT16_HA:
16779           if (unresolved_reloc)
16780             {
16781               unresolved_reloc = FALSE;
16782               goto nop_it;
16783             }
16784           /* Fall through.  */
16785         case R_PPC64_GOT_TLSLD16_HA:
16786         case R_PPC64_GOT_TLSGD16_HA:
16787         case R_PPC64_GOT_TPREL16_HA:
16788         case R_PPC64_GOT_DTPREL16_HA:
16789         case R_PPC64_GOT16_HA:
16790         case R_PPC64_TOC16_HA:
16791           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16792               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16793             {
16794               bfd_byte *p;
16795             nop_it:
16796               p = contents + (rel->r_offset & ~3);
16797               bfd_put_32 (input_bfd, NOP, p);
16798               goto copy_reloc;
16799             }
16800           break;
16801
16802         case R_PPC64_PLT16_LO:
16803         case R_PPC64_PLT16_LO_DS:
16804           if (unresolved_reloc)
16805             {
16806               unresolved_reloc = FALSE;
16807               goto nop_it;
16808             }
16809           /* Fall through.  */
16810         case R_PPC64_GOT_TLSLD16_LO:
16811         case R_PPC64_GOT_TLSGD16_LO:
16812         case R_PPC64_GOT_TPREL16_LO_DS:
16813         case R_PPC64_GOT_DTPREL16_LO_DS:
16814         case R_PPC64_GOT16_LO:
16815         case R_PPC64_GOT16_LO_DS:
16816         case R_PPC64_TOC16_LO:
16817         case R_PPC64_TOC16_LO_DS:
16818           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16819               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16820             {
16821               bfd_byte *p = contents + (rel->r_offset & ~3);
16822               insn = bfd_get_32 (input_bfd, p);
16823               if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */)
16824                 {
16825                   /* Transform addic to addi when we change reg.  */
16826                   insn &= ~((0x3fu << 26) | (0x1f << 16));
16827                   insn |= (14u << 26) | (2 << 16);
16828                 }
16829               else
16830                 {
16831                   insn &= ~(0x1f << 16);
16832                   insn |= 2 << 16;
16833                 }
16834               bfd_put_32 (input_bfd, insn, p);
16835             }
16836           break;
16837
16838         case R_PPC64_TPREL16_HA:
16839           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16840             {
16841               bfd_byte *p = contents + (rel->r_offset & ~3);
16842               insn = bfd_get_32 (input_bfd, p);
16843               if ((insn & ((0x3fu << 26) | 0x1f << 16))
16844                   != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
16845                 /* xgettext:c-format */
16846                 info->callbacks->minfo
16847                   (_("%H: warning: %s unexpected insn %#x.\n"),
16848                    input_bfd, input_section, rel->r_offset,
16849                    ppc64_elf_howto_table[r_type]->name, insn);
16850               else
16851                 {
16852                   bfd_put_32 (input_bfd, NOP, p);
16853                   goto copy_reloc;
16854                 }
16855             }
16856           break;
16857
16858         case R_PPC64_TPREL16_LO:
16859         case R_PPC64_TPREL16_LO_DS:
16860           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16861             {
16862               bfd_byte *p = contents + (rel->r_offset & ~3);
16863               insn = bfd_get_32 (input_bfd, p);
16864               insn &= ~(0x1f << 16);
16865               insn |= 13 << 16;
16866               bfd_put_32 (input_bfd, insn, p);
16867             }
16868           break;
16869         }
16870
16871       /* Do any further special processing.  */
16872       switch (r_type)
16873         {
16874         default:
16875           break;
16876
16877         case R_PPC64_REL16_HA:
16878         case R_PPC64_REL16_HIGHA:
16879         case R_PPC64_REL16_HIGHERA:
16880         case R_PPC64_REL16_HIGHESTA:
16881         case R_PPC64_REL16DX_HA:
16882         case R_PPC64_ADDR16_HA:
16883         case R_PPC64_ADDR16_HIGHA:
16884         case R_PPC64_ADDR16_HIGHERA:
16885         case R_PPC64_ADDR16_HIGHESTA:
16886         case R_PPC64_TOC16_HA:
16887         case R_PPC64_SECTOFF_HA:
16888         case R_PPC64_TPREL16_HA:
16889         case R_PPC64_TPREL16_HIGHA:
16890         case R_PPC64_TPREL16_HIGHERA:
16891         case R_PPC64_TPREL16_HIGHESTA:
16892         case R_PPC64_DTPREL16_HA:
16893         case R_PPC64_DTPREL16_HIGHA:
16894         case R_PPC64_DTPREL16_HIGHERA:
16895         case R_PPC64_DTPREL16_HIGHESTA:
16896           /* It's just possible that this symbol is a weak symbol
16897              that's not actually defined anywhere. In that case,
16898              'sec' would be NULL, and we should leave the symbol
16899              alone (it will be set to zero elsewhere in the link).  */
16900           if (sec == NULL)
16901             break;
16902           /* Fall through.  */
16903
16904         case R_PPC64_GOT16_HA:
16905         case R_PPC64_PLTGOT16_HA:
16906         case R_PPC64_PLT16_HA:
16907         case R_PPC64_GOT_TLSGD16_HA:
16908         case R_PPC64_GOT_TLSLD16_HA:
16909         case R_PPC64_GOT_TPREL16_HA:
16910         case R_PPC64_GOT_DTPREL16_HA:
16911           /* Add 0x10000 if sign bit in 0:15 is set.
16912              Bits 0:15 are not used.  */
16913           addend += 0x8000;
16914           break;
16915
16916         case R_PPC64_D34_HA30:
16917         case R_PPC64_ADDR16_HIGHERA34:
16918         case R_PPC64_ADDR16_HIGHESTA34:
16919         case R_PPC64_REL16_HIGHERA34:
16920         case R_PPC64_REL16_HIGHESTA34:
16921           if (sec != NULL)
16922             addend += 1ULL << 33;
16923           break;
16924
16925         case R_PPC64_ADDR16_DS:
16926         case R_PPC64_ADDR16_LO_DS:
16927         case R_PPC64_GOT16_DS:
16928         case R_PPC64_GOT16_LO_DS:
16929         case R_PPC64_PLT16_LO_DS:
16930         case R_PPC64_SECTOFF_DS:
16931         case R_PPC64_SECTOFF_LO_DS:
16932         case R_PPC64_TOC16_DS:
16933         case R_PPC64_TOC16_LO_DS:
16934         case R_PPC64_PLTGOT16_DS:
16935         case R_PPC64_PLTGOT16_LO_DS:
16936         case R_PPC64_GOT_TPREL16_DS:
16937         case R_PPC64_GOT_TPREL16_LO_DS:
16938         case R_PPC64_GOT_DTPREL16_DS:
16939         case R_PPC64_GOT_DTPREL16_LO_DS:
16940         case R_PPC64_TPREL16_DS:
16941         case R_PPC64_TPREL16_LO_DS:
16942         case R_PPC64_DTPREL16_DS:
16943         case R_PPC64_DTPREL16_LO_DS:
16944           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16945           mask = 3;
16946           /* If this reloc is against an lq, lxv, or stxv insn, then
16947              the value must be a multiple of 16.  This is somewhat of
16948              a hack, but the "correct" way to do this by defining _DQ
16949              forms of all the _DS relocs bloats all reloc switches in
16950              this file.  It doesn't make much sense to use these
16951              relocs in data, so testing the insn should be safe.  */
16952           if ((insn & (0x3fu << 26)) == (56u << 26)
16953               || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1))
16954             mask = 15;
16955           relocation += addend;
16956           addend = insn & (mask ^ 3);
16957           if ((relocation & mask) != 0)
16958             {
16959               relocation ^= relocation & mask;
16960               info->callbacks->einfo
16961                 /* xgettext:c-format */
16962                 (_("%H: error: %s not a multiple of %u\n"),
16963                  input_bfd, input_section, rel->r_offset,
16964                  ppc64_elf_howto_table[r_type]->name,
16965                  mask + 1);
16966               bfd_set_error (bfd_error_bad_value);
16967               ret = FALSE;
16968               goto copy_reloc;
16969             }
16970           break;
16971         }
16972
16973       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
16974          because such sections are not SEC_ALLOC and thus ld.so will
16975          not process them.  */
16976       howto = ppc64_elf_howto_table[(int) r_type];
16977       if (unresolved_reloc
16978           && !((input_section->flags & SEC_DEBUGGING) != 0
16979                && h->elf.def_dynamic)
16980           && _bfd_elf_section_offset (output_bfd, info, input_section,
16981                                       rel->r_offset) != (bfd_vma) -1)
16982         {
16983           info->callbacks->einfo
16984             /* xgettext:c-format */
16985             (_("%H: unresolvable %s against `%pT'\n"),
16986              input_bfd, input_section, rel->r_offset,
16987              howto->name,
16988              h->elf.root.root.string);
16989           ret = FALSE;
16990         }
16991
16992       /* 16-bit fields in insns mostly have signed values, but a
16993          few insns have 16-bit unsigned values.  Really, we should
16994          have different reloc types.  */
16995       if (howto->complain_on_overflow != complain_overflow_dont
16996           && howto->dst_mask == 0xffff
16997           && (input_section->flags & SEC_CODE) != 0)
16998         {
16999           enum complain_overflow complain = complain_overflow_signed;
17000
17001           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
17002           if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
17003             complain = complain_overflow_bitfield;
17004           else if (howto->rightshift == 0
17005                    ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
17006                       || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
17007                       || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
17008                    : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */
17009                       || (insn & (0x3fu << 26)) == 25u << 26 /* oris */
17010                       || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */))
17011             complain = complain_overflow_unsigned;
17012           if (howto->complain_on_overflow != complain)
17013             {
17014               alt_howto = *howto;
17015               alt_howto.complain_on_overflow = complain;
17016               howto = &alt_howto;
17017             }
17018         }
17019
17020       switch (r_type)
17021         {
17022           /* Split field relocs aren't handled by _bfd_final_link_relocate.  */
17023         case R_PPC64_D34:
17024         case R_PPC64_D34_LO:
17025         case R_PPC64_D34_HI30:
17026         case R_PPC64_D34_HA30:
17027         case R_PPC64_PCREL34:
17028         case R_PPC64_GOT_PCREL34:
17029         case R_PPC64_TPREL34:
17030         case R_PPC64_DTPREL34:
17031         case R_PPC64_GOT_TLSGD34:
17032         case R_PPC64_GOT_TLSLD34:
17033         case R_PPC64_GOT_TPREL34:
17034         case R_PPC64_GOT_DTPREL34:
17035         case R_PPC64_PLT_PCREL34:
17036         case R_PPC64_PLT_PCREL34_NOTOC:
17037         case R_PPC64_D28:
17038         case R_PPC64_PCREL28:
17039           if (rel->r_offset + 8 > input_section->size)
17040             r = bfd_reloc_outofrange;
17041           else
17042             {
17043               relocation += addend;
17044               if (howto->pc_relative)
17045                 relocation -= (rel->r_offset
17046                                + input_section->output_offset
17047                                + input_section->output_section->vma);
17048               relocation >>= howto->rightshift;
17049
17050               pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
17051               pinsn <<= 32;
17052               pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
17053
17054               pinsn &= ~howto->dst_mask;
17055               pinsn |= (((relocation << 16) | (relocation & 0xffff))
17056                         & howto->dst_mask);
17057               bfd_put_32 (input_bfd, pinsn >> 32, contents + rel->r_offset);
17058               bfd_put_32 (input_bfd, pinsn, contents + rel->r_offset + 4);
17059               r = bfd_reloc_ok;
17060               if (howto->complain_on_overflow == complain_overflow_signed
17061                   && (relocation + (1ULL << (howto->bitsize - 1))
17062                       >= 1ULL << howto->bitsize))
17063                 r = bfd_reloc_overflow;
17064             }
17065           break;
17066
17067         case R_PPC64_REL16DX_HA:
17068           if (rel->r_offset + 4 > input_section->size)
17069             r = bfd_reloc_outofrange;
17070           else
17071             {
17072               relocation += addend;
17073               relocation -= (rel->r_offset
17074                              + input_section->output_offset
17075                              + input_section->output_section->vma);
17076               relocation = (bfd_signed_vma) relocation >> 16;
17077               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
17078               insn &= ~0x1fffc1;
17079               insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
17080               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
17081               r = bfd_reloc_ok;
17082               if (relocation + 0x8000 > 0xffff)
17083                 r = bfd_reloc_overflow;
17084             }
17085           break;
17086
17087         default:
17088           r = _bfd_final_link_relocate (howto, input_bfd, input_section,
17089                                         contents, rel->r_offset,
17090                                         relocation, addend);
17091         }
17092
17093       if (r != bfd_reloc_ok)
17094         {
17095           char *more_info = NULL;
17096           const char *reloc_name = howto->name;
17097
17098           if (reloc_dest != DEST_NORMAL)
17099             {
17100               more_info = bfd_malloc (strlen (reloc_name) + 8);
17101               if (more_info != NULL)
17102                 {
17103                   strcpy (more_info, reloc_name);
17104                   strcat (more_info, (reloc_dest == DEST_OPD
17105                                       ? " (OPD)" : " (stub)"));
17106                   reloc_name = more_info;
17107                 }
17108             }
17109
17110           if (r == bfd_reloc_overflow)
17111             {
17112               /* On code like "if (foo) foo();" don't report overflow
17113                  on a branch to zero when foo is undefined.  */
17114               if (!warned
17115                   && (reloc_dest == DEST_STUB
17116                       || !(h != NULL
17117                            && (h->elf.root.type == bfd_link_hash_undefweak
17118                                || h->elf.root.type == bfd_link_hash_undefined)
17119                            && is_branch_reloc (r_type))))
17120                 info->callbacks->reloc_overflow (info, &h->elf.root,
17121                                                  sym_name, reloc_name,
17122                                                  orig_rel.r_addend,
17123                                                  input_bfd, input_section,
17124                                                  rel->r_offset);
17125             }
17126           else
17127             {
17128               info->callbacks->einfo
17129                 /* xgettext:c-format */
17130                 (_("%H: %s against `%pT': error %d\n"),
17131                  input_bfd, input_section, rel->r_offset,
17132                  reloc_name, sym_name, (int) r);
17133               ret = FALSE;
17134             }
17135           if (more_info != NULL)
17136             free (more_info);
17137         }
17138     copy_reloc:
17139       if (wrel != rel)
17140         *wrel = *rel;
17141     }
17142
17143   if (wrel != rel)
17144     {
17145       Elf_Internal_Shdr *rel_hdr;
17146       size_t deleted = rel - wrel;
17147
17148       rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
17149       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
17150       if (rel_hdr->sh_size == 0)
17151         {
17152           /* It is too late to remove an empty reloc section.  Leave
17153              one NONE reloc.
17154              ??? What is wrong with an empty section???  */
17155           rel_hdr->sh_size = rel_hdr->sh_entsize;
17156           deleted -= 1;
17157         }
17158       rel_hdr = _bfd_elf_single_rel_hdr (input_section);
17159       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
17160       input_section->reloc_count -= deleted;
17161     }
17162
17163   /* If we're emitting relocations, then shortly after this function
17164      returns, reloc offsets and addends for this section will be
17165      adjusted.  Worse, reloc symbol indices will be for the output
17166      file rather than the input.  Save a copy of the relocs for
17167      opd_entry_value.  */
17168   if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
17169     {
17170       bfd_size_type amt;
17171       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
17172       rel = bfd_alloc (input_bfd, amt);
17173       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
17174       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
17175       if (rel == NULL)
17176         return FALSE;
17177       memcpy (rel, relocs, amt);
17178     }
17179   return ret;
17180 }
17181
17182 /* Adjust the value of any local symbols in opd sections.  */
17183
17184 static int
17185 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
17186                               const char *name ATTRIBUTE_UNUSED,
17187                               Elf_Internal_Sym *elfsym,
17188                               asection *input_sec,
17189                               struct elf_link_hash_entry *h)
17190 {
17191   struct _opd_sec_data *opd;
17192   long adjust;
17193   bfd_vma value;
17194
17195   if (h != NULL)
17196     return 1;
17197
17198   opd = get_opd_info (input_sec);
17199   if (opd == NULL || opd->adjust == NULL)
17200     return 1;
17201
17202   value = elfsym->st_value - input_sec->output_offset;
17203   if (!bfd_link_relocatable (info))
17204     value -= input_sec->output_section->vma;
17205
17206   adjust = opd->adjust[OPD_NDX (value)];
17207   if (adjust == -1)
17208     return 2;
17209
17210   elfsym->st_value += adjust;
17211   return 1;
17212 }
17213
17214 /* Finish up dynamic symbol handling.  We set the contents of various
17215    dynamic sections here.  */
17216
17217 static bfd_boolean
17218 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
17219                                  struct bfd_link_info *info,
17220                                  struct elf_link_hash_entry *h,
17221                                  Elf_Internal_Sym *sym)
17222 {
17223   struct ppc_link_hash_table *htab;
17224   struct plt_entry *ent;
17225
17226   htab = ppc_hash_table (info);
17227   if (htab == NULL)
17228     return FALSE;
17229
17230   if (!htab->opd_abi && !h->def_regular)
17231     for (ent = h->plt.plist; ent != NULL; ent = ent->next)
17232       if (ent->plt.offset != (bfd_vma) -1)
17233         {
17234           /* Mark the symbol as undefined, rather than as
17235              defined in glink.  Leave the value if there were
17236              any relocations where pointer equality matters
17237              (this is a clue for the dynamic linker, to make
17238              function pointer comparisons work between an
17239              application and shared library), otherwise set it
17240              to zero.  */
17241           sym->st_shndx = SHN_UNDEF;
17242           if (!h->pointer_equality_needed)
17243             sym->st_value = 0;
17244           else if (!h->ref_regular_nonweak)
17245             {
17246               /* This breaks function pointer comparisons, but
17247                  that is better than breaking tests for a NULL
17248                  function pointer.  */
17249               sym->st_value = 0;
17250             }
17251           break;
17252         }
17253
17254   if (h->needs_copy
17255       && (h->root.type == bfd_link_hash_defined
17256           || h->root.type == bfd_link_hash_defweak)
17257       && (h->root.u.def.section == htab->elf.sdynbss
17258           || h->root.u.def.section == htab->elf.sdynrelro))
17259     {
17260       /* This symbol needs a copy reloc.  Set it up.  */
17261       Elf_Internal_Rela rela;
17262       asection *srel;
17263       bfd_byte *loc;
17264
17265       if (h->dynindx == -1)
17266         abort ();
17267
17268       rela.r_offset = defined_sym_val (h);
17269       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
17270       rela.r_addend = 0;
17271       if (h->root.u.def.section == htab->elf.sdynrelro)
17272         srel = htab->elf.sreldynrelro;
17273       else
17274         srel = htab->elf.srelbss;
17275       loc = srel->contents;
17276       loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
17277       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
17278     }
17279
17280   return TRUE;
17281 }
17282
17283 /* Used to decide how to sort relocs in an optimal manner for the
17284    dynamic linker, before writing them out.  */
17285
17286 static enum elf_reloc_type_class
17287 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
17288                             const asection *rel_sec,
17289                             const Elf_Internal_Rela *rela)
17290 {
17291   enum elf_ppc64_reloc_type r_type;
17292   struct ppc_link_hash_table *htab = ppc_hash_table (info);
17293
17294   if (rel_sec == htab->elf.irelplt)
17295     return reloc_class_ifunc;
17296
17297   r_type = ELF64_R_TYPE (rela->r_info);
17298   switch (r_type)
17299     {
17300     case R_PPC64_RELATIVE:
17301       return reloc_class_relative;
17302     case R_PPC64_JMP_SLOT:
17303       return reloc_class_plt;
17304     case R_PPC64_COPY:
17305       return reloc_class_copy;
17306     default:
17307       return reloc_class_normal;
17308     }
17309 }
17310
17311 /* Finish up the dynamic sections.  */
17312
17313 static bfd_boolean
17314 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
17315                                    struct bfd_link_info *info)
17316 {
17317   struct ppc_link_hash_table *htab;
17318   bfd *dynobj;
17319   asection *sdyn;
17320
17321   htab = ppc_hash_table (info);
17322   if (htab == NULL)
17323     return FALSE;
17324
17325   dynobj = htab->elf.dynobj;
17326   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
17327
17328   if (htab->elf.dynamic_sections_created)
17329     {
17330       Elf64_External_Dyn *dyncon, *dynconend;
17331
17332       if (sdyn == NULL || htab->elf.sgot == NULL)
17333         abort ();
17334
17335       dyncon = (Elf64_External_Dyn *) sdyn->contents;
17336       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
17337       for (; dyncon < dynconend; dyncon++)
17338         {
17339           Elf_Internal_Dyn dyn;
17340           asection *s;
17341
17342           bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
17343
17344           switch (dyn.d_tag)
17345             {
17346             default:
17347               continue;
17348
17349             case DT_PPC64_GLINK:
17350               s = htab->glink;
17351               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17352               /* We stupidly defined DT_PPC64_GLINK to be the start
17353                  of glink rather than the first entry point, which is
17354                  what ld.so needs, and now have a bigger stub to
17355                  support automatic multiple TOCs.  */
17356               dyn.d_un.d_ptr += GLINK_PLTRESOLVE_SIZE (htab) - 8 * 4;
17357               break;
17358
17359             case DT_PPC64_OPD:
17360               s = bfd_get_section_by_name (output_bfd, ".opd");
17361               if (s == NULL)
17362                 continue;
17363               dyn.d_un.d_ptr = s->vma;
17364               break;
17365
17366             case DT_PPC64_OPT:
17367               if ((htab->do_multi_toc && htab->multi_toc_needed)
17368                   || htab->notoc_plt)
17369                 dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
17370               if (htab->has_plt_localentry0)
17371                 dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
17372               break;
17373
17374             case DT_PPC64_OPDSZ:
17375               s = bfd_get_section_by_name (output_bfd, ".opd");
17376               if (s == NULL)
17377                 continue;
17378               dyn.d_un.d_val = s->size;
17379               break;
17380
17381             case DT_PLTGOT:
17382               s = htab->elf.splt;
17383               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17384               break;
17385
17386             case DT_JMPREL:
17387               s = htab->elf.srelplt;
17388               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17389               break;
17390
17391             case DT_PLTRELSZ:
17392               dyn.d_un.d_val = htab->elf.srelplt->size;
17393               break;
17394
17395             case DT_TEXTREL:
17396               if (htab->local_ifunc_resolver)
17397                 info->callbacks->einfo
17398                   (_("%X%P: text relocations and GNU indirect "
17399                      "functions will result in a segfault at runtime\n"));
17400               else if (htab->maybe_local_ifunc_resolver)
17401                 info->callbacks->einfo
17402                   (_("%P: warning: text relocations and GNU indirect "
17403                      "functions may result in a segfault at runtime\n"));
17404               continue;
17405             }
17406
17407           bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
17408         }
17409     }
17410
17411   if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
17412       && htab->elf.sgot->output_section != bfd_abs_section_ptr)
17413     {
17414       /* Fill in the first entry in the global offset table.
17415          We use it to hold the link-time TOCbase.  */
17416       bfd_put_64 (output_bfd,
17417                   elf_gp (output_bfd) + TOC_BASE_OFF,
17418                   htab->elf.sgot->contents);
17419
17420       /* Set .got entry size.  */
17421       elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
17422         = 8;
17423     }
17424
17425   if (htab->elf.splt != NULL && htab->elf.splt->size != 0
17426       && htab->elf.splt->output_section != bfd_abs_section_ptr)
17427     {
17428       /* Set .plt entry size.  */
17429       elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
17430         = PLT_ENTRY_SIZE (htab);
17431     }
17432
17433   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
17434      brlt ourselves if emitrelocations.  */
17435   if (htab->brlt != NULL
17436       && htab->brlt->reloc_count != 0
17437       && !_bfd_elf_link_output_relocs (output_bfd,
17438                                        htab->brlt,
17439                                        elf_section_data (htab->brlt)->rela.hdr,
17440                                        elf_section_data (htab->brlt)->relocs,
17441                                        NULL))
17442     return FALSE;
17443
17444   if (htab->glink != NULL
17445       && htab->glink->reloc_count != 0
17446       && !_bfd_elf_link_output_relocs (output_bfd,
17447                                        htab->glink,
17448                                        elf_section_data (htab->glink)->rela.hdr,
17449                                        elf_section_data (htab->glink)->relocs,
17450                                        NULL))
17451     return FALSE;
17452
17453
17454   if (htab->glink_eh_frame != NULL
17455       && htab->glink_eh_frame->size != 0
17456       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
17457       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
17458                                            htab->glink_eh_frame,
17459                                            htab->glink_eh_frame->contents))
17460     return FALSE;
17461
17462   /* We need to handle writing out multiple GOT sections ourselves,
17463      since we didn't add them to DYNOBJ.  We know dynobj is the first
17464      bfd.  */
17465   while ((dynobj = dynobj->link.next) != NULL)
17466     {
17467       asection *s;
17468
17469       if (!is_ppc64_elf (dynobj))
17470         continue;
17471
17472       s = ppc64_elf_tdata (dynobj)->got;
17473       if (s != NULL
17474           && s->size != 0
17475           && s->output_section != bfd_abs_section_ptr
17476           && !bfd_set_section_contents (output_bfd, s->output_section,
17477                                         s->contents, s->output_offset,
17478                                         s->size))
17479         return FALSE;
17480       s = ppc64_elf_tdata (dynobj)->relgot;
17481       if (s != NULL
17482           && s->size != 0
17483           && s->output_section != bfd_abs_section_ptr
17484           && !bfd_set_section_contents (output_bfd, s->output_section,
17485                                         s->contents, s->output_offset,
17486                                         s->size))
17487         return FALSE;
17488     }
17489
17490   return TRUE;
17491 }
17492
17493 #include "elf64-target.h"
17494
17495 /* FreeBSD support */
17496
17497 #undef  TARGET_LITTLE_SYM
17498 #undef  TARGET_LITTLE_NAME
17499
17500 #undef  TARGET_BIG_SYM
17501 #define TARGET_BIG_SYM  powerpc_elf64_fbsd_vec
17502 #undef  TARGET_BIG_NAME
17503 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
17504
17505 #undef  ELF_OSABI
17506 #define ELF_OSABI       ELFOSABI_FREEBSD
17507
17508 #undef  elf64_bed
17509 #define elf64_bed       elf64_powerpc_fbsd_bed
17510
17511 #include "elf64-target.h"
This page took 1.018371 seconds and 4 git commands to generate.