xref: /netbsd-src/external/gpl3/binutils/dist/bfd/elf64-ppc.c (revision 2718af68c3efc72c9769069b5c7f9ed36f6b9def)
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright (C) 1999-2020 Free Software Foundation, Inc.
3    Written by Linus Nordberg, Swox AB <info@swox.com>,
4    based on elf32-ppc.c by Ian Lance Taylor.
5    Largely rewritten by Alan Modra.
6 
7    This file is part of BFD, the Binary File Descriptor library.
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License along
20    with this program; if not, write to the Free Software Foundation, Inc.,
21    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
22 
23 
24 /* The 64-bit PowerPC ELF ABI may be found at
25    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
26    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
27 
28 #include "sysdep.h"
29 #include <stdarg.h>
30 #include "bfd.h"
31 #include "bfdlink.h"
32 #include "libbfd.h"
33 #include "elf-bfd.h"
34 #include "elf/ppc64.h"
35 #include "elf64-ppc.h"
36 #include "dwarf2.h"
37 
38 /* 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 
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 
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       bfd_size_type 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 
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 
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	%r11,%r2,xxx@toc@ha
2821    .	ld	%r12,xxx@toc@l(%r11)
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	%r11,%r2,xxx@toc@ha
2848    .	ld	%r12,xxx@toc@l(%r11)
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 /* ppc64 ELF linker hash table.  */
3116 
3117 struct ppc_link_hash_table
3118 {
3119   struct elf_link_hash_table elf;
3120 
3121   /* The stub hash table.  */
3122   struct bfd_hash_table stub_hash_table;
3123 
3124   /* Another hash table for plt_branch stubs.  */
3125   struct bfd_hash_table branch_hash_table;
3126 
3127   /* Hash table for function prologue tocsave.  */
3128   htab_t tocsave_htab;
3129 
3130   /* Various options and other info passed from the linker.  */
3131   struct ppc64_elf_params *params;
3132 
3133   /* The size of sec_info below.  */
3134   unsigned int sec_info_arr_size;
3135 
3136   /* Per-section array of extra section info.  Done this way rather
3137      than as part of ppc64_elf_section_data so we have the info for
3138      non-ppc64 sections.  */
3139   struct
3140   {
3141     /* Along with elf_gp, specifies the TOC pointer used by this section.  */
3142     bfd_vma toc_off;
3143 
3144     union
3145     {
3146       /* The section group that this section belongs to.  */
3147       struct map_stub *group;
3148       /* A temp section list pointer.  */
3149       asection *list;
3150     } u;
3151   } *sec_info;
3152 
3153   /* Linked list of groups.  */
3154   struct map_stub *group;
3155 
3156   /* Temp used when calculating TOC pointers.  */
3157   bfd_vma toc_curr;
3158   bfd *toc_bfd;
3159   asection *toc_first_sec;
3160 
3161   /* Used when adding symbols.  */
3162   struct ppc_link_hash_entry *dot_syms;
3163 
3164   /* Shortcuts to get to dynamic linker sections.  */
3165   asection *glink;
3166   asection *global_entry;
3167   asection *sfpr;
3168   asection *pltlocal;
3169   asection *relpltlocal;
3170   asection *brlt;
3171   asection *relbrlt;
3172   asection *glink_eh_frame;
3173 
3174   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3175   struct ppc_link_hash_entry *tls_get_addr;
3176   struct ppc_link_hash_entry *tls_get_addr_fd;
3177 
3178   /* The size of reliplt used by got entry relocs.  */
3179   bfd_size_type got_reli_size;
3180 
3181   /* Statistics.  */
3182   unsigned long stub_count[ppc_stub_global_entry];
3183 
3184   /* Number of stubs against global syms.  */
3185   unsigned long stub_globals;
3186 
3187   /* Set if we're linking code with function descriptors.  */
3188   unsigned int opd_abi:1;
3189 
3190   /* Support for multiple toc sections.  */
3191   unsigned int do_multi_toc:1;
3192   unsigned int multi_toc_needed:1;
3193   unsigned int second_toc_pass:1;
3194   unsigned int do_toc_opt:1;
3195 
3196   /* Set if tls optimization is enabled.  */
3197   unsigned int do_tls_opt:1;
3198 
3199   /* Set if inline plt calls should be converted to direct calls.  */
3200   unsigned int can_convert_all_inline_plt:1;
3201 
3202   /* Set on error.  */
3203   unsigned int stub_error:1;
3204 
3205   /* Whether func_desc_adjust needs to be run over symbols.  */
3206   unsigned int need_func_desc_adj:1;
3207 
3208   /* Whether there exist local gnu indirect function resolvers,
3209      referenced by dynamic relocations.  */
3210   unsigned int local_ifunc_resolver:1;
3211   unsigned int maybe_local_ifunc_resolver:1;
3212 
3213   /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
3214   unsigned int has_plt_localentry0:1;
3215 
3216   /* Whether calls are made via the PLT from NOTOC functions.  */
3217   unsigned int notoc_plt:1;
3218 
3219   /* Whether to use powerxx instructions in linkage stubs.  */
3220   unsigned int powerxx_stubs:1;
3221 
3222   /* Incremented every time we size stubs.  */
3223   unsigned int stub_iteration;
3224 
3225   /* Small local sym cache.  */
3226   struct sym_cache sym_cache;
3227 };
3228 
3229 /* Rename some of the generic section flags to better document how they
3230    are used here.  */
3231 
3232 /* Nonzero if this section has TLS related relocations.  */
3233 #define has_tls_reloc sec_flg0
3234 
3235 /* Nonzero if this section has a call to __tls_get_addr lacking marker
3236    relocations.  */
3237 #define nomark_tls_get_addr sec_flg1
3238 
3239 /* Nonzero if this section has any toc or got relocs.  */
3240 #define has_toc_reloc sec_flg2
3241 
3242 /* Nonzero if this section has a call to another section that uses
3243    the toc or got.  */
3244 #define makes_toc_func_call sec_flg3
3245 
3246 /* Recursion protection when determining above flag.  */
3247 #define call_check_in_progress sec_flg4
3248 #define call_check_done sec_flg5
3249 
3250 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3251 
3252 #define ppc_hash_table(p) \
3253   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3254   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3255 
3256 #define ppc_stub_hash_lookup(table, string, create, copy) \
3257   ((struct ppc_stub_hash_entry *) \
3258    bfd_hash_lookup ((table), (string), (create), (copy)))
3259 
3260 #define ppc_branch_hash_lookup(table, string, create, copy) \
3261   ((struct ppc_branch_hash_entry *) \
3262    bfd_hash_lookup ((table), (string), (create), (copy)))
3263 
3264 /* Create an entry in the stub hash table.  */
3265 
3266 static struct bfd_hash_entry *
3267 stub_hash_newfunc (struct bfd_hash_entry *entry,
3268 		   struct bfd_hash_table *table,
3269 		   const char *string)
3270 {
3271   /* Allocate the structure if it has not already been allocated by a
3272      subclass.  */
3273   if (entry == NULL)
3274     {
3275       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3276       if (entry == NULL)
3277 	return entry;
3278     }
3279 
3280   /* Call the allocation method of the superclass.  */
3281   entry = bfd_hash_newfunc (entry, table, string);
3282   if (entry != NULL)
3283     {
3284       struct ppc_stub_hash_entry *eh;
3285 
3286       /* Initialize the local fields.  */
3287       eh = (struct ppc_stub_hash_entry *) entry;
3288       eh->stub_type = ppc_stub_none;
3289       eh->group = NULL;
3290       eh->stub_offset = 0;
3291       eh->target_value = 0;
3292       eh->target_section = NULL;
3293       eh->h = NULL;
3294       eh->plt_ent = NULL;
3295       eh->other = 0;
3296     }
3297 
3298   return entry;
3299 }
3300 
3301 /* Create an entry in the branch hash table.  */
3302 
3303 static struct bfd_hash_entry *
3304 branch_hash_newfunc (struct bfd_hash_entry *entry,
3305 		     struct bfd_hash_table *table,
3306 		     const char *string)
3307 {
3308   /* Allocate the structure if it has not already been allocated by a
3309      subclass.  */
3310   if (entry == NULL)
3311     {
3312       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3313       if (entry == NULL)
3314 	return entry;
3315     }
3316 
3317   /* Call the allocation method of the superclass.  */
3318   entry = bfd_hash_newfunc (entry, table, string);
3319   if (entry != NULL)
3320     {
3321       struct ppc_branch_hash_entry *eh;
3322 
3323       /* Initialize the local fields.  */
3324       eh = (struct ppc_branch_hash_entry *) entry;
3325       eh->offset = 0;
3326       eh->iter = 0;
3327     }
3328 
3329   return entry;
3330 }
3331 
3332 /* Create an entry in a ppc64 ELF linker hash table.  */
3333 
3334 static struct bfd_hash_entry *
3335 link_hash_newfunc (struct bfd_hash_entry *entry,
3336 		   struct bfd_hash_table *table,
3337 		   const char *string)
3338 {
3339   /* Allocate the structure if it has not already been allocated by a
3340      subclass.  */
3341   if (entry == NULL)
3342     {
3343       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3344       if (entry == NULL)
3345 	return entry;
3346     }
3347 
3348   /* Call the allocation method of the superclass.  */
3349   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3350   if (entry != NULL)
3351     {
3352       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3353 
3354       memset (&eh->u.stub_cache, 0,
3355 	      (sizeof (struct ppc_link_hash_entry)
3356 	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3357 
3358       /* When making function calls, old ABI code references function entry
3359 	 points (dot symbols), while new ABI code references the function
3360 	 descriptor symbol.  We need to make any combination of reference and
3361 	 definition work together, without breaking archive linking.
3362 
3363 	 For a defined function "foo" and an undefined call to "bar":
3364 	 An old object defines "foo" and ".foo", references ".bar" (possibly
3365 	 "bar" too).
3366 	 A new object defines "foo" and references "bar".
3367 
3368 	 A new object thus has no problem with its undefined symbols being
3369 	 satisfied by definitions in an old object.  On the other hand, the
3370 	 old object won't have ".bar" satisfied by a new object.
3371 
3372 	 Keep a list of newly added dot-symbols.  */
3373 
3374       if (string[0] == '.')
3375 	{
3376 	  struct ppc_link_hash_table *htab;
3377 
3378 	  htab = (struct ppc_link_hash_table *) table;
3379 	  eh->u.next_dot_sym = htab->dot_syms;
3380 	  htab->dot_syms = eh;
3381 	}
3382     }
3383 
3384   return entry;
3385 }
3386 
3387 struct tocsave_entry
3388 {
3389   asection *sec;
3390   bfd_vma offset;
3391 };
3392 
3393 static hashval_t
3394 tocsave_htab_hash (const void *p)
3395 {
3396   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3397   return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
3398 }
3399 
3400 static int
3401 tocsave_htab_eq (const void *p1, const void *p2)
3402 {
3403   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3404   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3405   return e1->sec == e2->sec && e1->offset == e2->offset;
3406 }
3407 
3408 /* Destroy a ppc64 ELF linker hash table.  */
3409 
3410 static void
3411 ppc64_elf_link_hash_table_free (bfd *obfd)
3412 {
3413   struct ppc_link_hash_table *htab;
3414 
3415   htab = (struct ppc_link_hash_table *) obfd->link.hash;
3416   if (htab->tocsave_htab)
3417     htab_delete (htab->tocsave_htab);
3418   bfd_hash_table_free (&htab->branch_hash_table);
3419   bfd_hash_table_free (&htab->stub_hash_table);
3420   _bfd_elf_link_hash_table_free (obfd);
3421 }
3422 
3423 /* Create a ppc64 ELF linker hash table.  */
3424 
3425 static struct bfd_link_hash_table *
3426 ppc64_elf_link_hash_table_create (bfd *abfd)
3427 {
3428   struct ppc_link_hash_table *htab;
3429   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3430 
3431   htab = bfd_zmalloc (amt);
3432   if (htab == NULL)
3433     return NULL;
3434 
3435   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3436 				      sizeof (struct ppc_link_hash_entry),
3437 				      PPC64_ELF_DATA))
3438     {
3439       free (htab);
3440       return NULL;
3441     }
3442 
3443   /* Init the stub hash table too.  */
3444   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3445 			    sizeof (struct ppc_stub_hash_entry)))
3446     {
3447       _bfd_elf_link_hash_table_free (abfd);
3448       return NULL;
3449     }
3450 
3451   /* And the branch hash table.  */
3452   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3453 			    sizeof (struct ppc_branch_hash_entry)))
3454     {
3455       bfd_hash_table_free (&htab->stub_hash_table);
3456       _bfd_elf_link_hash_table_free (abfd);
3457       return NULL;
3458     }
3459 
3460   htab->tocsave_htab = htab_try_create (1024,
3461 					tocsave_htab_hash,
3462 					tocsave_htab_eq,
3463 					NULL);
3464   if (htab->tocsave_htab == NULL)
3465     {
3466       ppc64_elf_link_hash_table_free (abfd);
3467       return NULL;
3468     }
3469   htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
3470 
3471   /* Initializing two fields of the union is just cosmetic.  We really
3472      only care about glist, but when compiled on a 32-bit host the
3473      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3474      debugger inspection of these fields look nicer.  */
3475   htab->elf.init_got_refcount.refcount = 0;
3476   htab->elf.init_got_refcount.glist = NULL;
3477   htab->elf.init_plt_refcount.refcount = 0;
3478   htab->elf.init_plt_refcount.glist = NULL;
3479   htab->elf.init_got_offset.offset = 0;
3480   htab->elf.init_got_offset.glist = NULL;
3481   htab->elf.init_plt_offset.offset = 0;
3482   htab->elf.init_plt_offset.glist = NULL;
3483 
3484   return &htab->elf.root;
3485 }
3486 
3487 /* Create sections for linker generated code.  */
3488 
3489 static bfd_boolean
3490 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3491 {
3492   struct ppc_link_hash_table *htab;
3493   flagword flags;
3494 
3495   htab = ppc_hash_table (info);
3496 
3497   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3498 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3499   if (htab->params->save_restore_funcs)
3500     {
3501       /* Create .sfpr for code to save and restore fp regs.  */
3502       htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3503 						       flags);
3504       if (htab->sfpr == NULL
3505 	  || !bfd_set_section_alignment (htab->sfpr, 2))
3506 	return FALSE;
3507     }
3508 
3509   if (bfd_link_relocatable (info))
3510     return TRUE;
3511 
3512   /* Create .glink for lazy dynamic linking support.  */
3513   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3514 						    flags);
3515   if (htab->glink == NULL
3516       || !bfd_set_section_alignment (htab->glink, 3))
3517     return FALSE;
3518 
3519   /* The part of .glink used by global entry stubs, separate so that
3520      it can be aligned appropriately without affecting htab->glink.  */
3521   htab->global_entry = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3522 							   flags);
3523   if (htab->global_entry == NULL
3524       || !bfd_set_section_alignment (htab->global_entry, 2))
3525     return FALSE;
3526 
3527   if (!info->no_ld_generated_unwind_info)
3528     {
3529       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
3530 	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3531       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
3532 								 ".eh_frame",
3533 								 flags);
3534       if (htab->glink_eh_frame == NULL
3535 	  || !bfd_set_section_alignment (htab->glink_eh_frame, 2))
3536 	return FALSE;
3537     }
3538 
3539   flags = SEC_ALLOC | SEC_LINKER_CREATED;
3540   htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
3541   if (htab->elf.iplt == NULL
3542       || !bfd_set_section_alignment (htab->elf.iplt, 3))
3543     return FALSE;
3544 
3545   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3546 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3547   htab->elf.irelplt
3548     = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
3549   if (htab->elf.irelplt == NULL
3550       || !bfd_set_section_alignment (htab->elf.irelplt, 3))
3551     return FALSE;
3552 
3553   /* Create branch lookup table for plt_branch stubs.  */
3554   flags = (SEC_ALLOC | SEC_LOAD
3555 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3556   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3557 						   flags);
3558   if (htab->brlt == NULL
3559       || !bfd_set_section_alignment (htab->brlt, 3))
3560     return FALSE;
3561 
3562   /* Local plt entries, put in .branch_lt but a separate section for
3563      convenience.  */
3564   htab->pltlocal = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3565 						       flags);
3566   if (htab->pltlocal == NULL
3567       || !bfd_set_section_alignment (htab->pltlocal, 3))
3568     return FALSE;
3569 
3570   if (!bfd_link_pic (info))
3571     return TRUE;
3572 
3573   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3574 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3575   htab->relbrlt
3576     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3577   if (htab->relbrlt == NULL
3578       || !bfd_set_section_alignment (htab->relbrlt, 3))
3579     return FALSE;
3580 
3581   htab->relpltlocal
3582     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3583   if (htab->relpltlocal == NULL
3584       || !bfd_set_section_alignment (htab->relpltlocal, 3))
3585     return FALSE;
3586 
3587   return TRUE;
3588 }
3589 
3590 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3591 
3592 bfd_boolean
3593 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
3594 			 struct ppc64_elf_params *params)
3595 {
3596   struct ppc_link_hash_table *htab;
3597 
3598   elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
3599 
3600 /* Always hook our dynamic sections into the first bfd, which is the
3601    linker created stub bfd.  This ensures that the GOT header is at
3602    the start of the output TOC section.  */
3603   htab = ppc_hash_table (info);
3604   htab->elf.dynobj = params->stub_bfd;
3605   htab->params = params;
3606 
3607   return create_linkage_sections (htab->elf.dynobj, info);
3608 }
3609 
3610 /* Build a name for an entry in the stub hash table.  */
3611 
3612 static char *
3613 ppc_stub_name (const asection *input_section,
3614 	       const asection *sym_sec,
3615 	       const struct ppc_link_hash_entry *h,
3616 	       const Elf_Internal_Rela *rel)
3617 {
3618   char *stub_name;
3619   ssize_t len;
3620 
3621   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3622      offsets from a sym as a branch target?  In fact, we could
3623      probably assume the addend is always zero.  */
3624   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3625 
3626   if (h)
3627     {
3628       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3629       stub_name = bfd_malloc (len);
3630       if (stub_name == NULL)
3631 	return stub_name;
3632 
3633       len = sprintf (stub_name, "%08x.%s+%x",
3634 		     input_section->id & 0xffffffff,
3635 		     h->elf.root.root.string,
3636 		     (int) rel->r_addend & 0xffffffff);
3637     }
3638   else
3639     {
3640       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3641       stub_name = bfd_malloc (len);
3642       if (stub_name == NULL)
3643 	return stub_name;
3644 
3645       len = sprintf (stub_name, "%08x.%x:%x+%x",
3646 		     input_section->id & 0xffffffff,
3647 		     sym_sec->id & 0xffffffff,
3648 		     (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3649 		     (int) rel->r_addend & 0xffffffff);
3650     }
3651   if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3652     stub_name[len - 2] = 0;
3653   return stub_name;
3654 }
3655 
3656 /* Look up an entry in the stub hash.  Stub entries are cached because
3657    creating the stub name takes a bit of time.  */
3658 
3659 static struct ppc_stub_hash_entry *
3660 ppc_get_stub_entry (const asection *input_section,
3661 		    const asection *sym_sec,
3662 		    struct ppc_link_hash_entry *h,
3663 		    const Elf_Internal_Rela *rel,
3664 		    struct ppc_link_hash_table *htab)
3665 {
3666   struct ppc_stub_hash_entry *stub_entry;
3667   struct map_stub *group;
3668 
3669   /* If this input section is part of a group of sections sharing one
3670      stub section, then use the id of the first section in the group.
3671      Stub names need to include a section id, as there may well be
3672      more than one stub used to reach say, printf, and we need to
3673      distinguish between them.  */
3674   group = htab->sec_info[input_section->id].u.group;
3675   if (group == NULL)
3676     return NULL;
3677 
3678   if (h != NULL && h->u.stub_cache != NULL
3679       && h->u.stub_cache->h == h
3680       && h->u.stub_cache->group == group)
3681     {
3682       stub_entry = h->u.stub_cache;
3683     }
3684   else
3685     {
3686       char *stub_name;
3687 
3688       stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
3689       if (stub_name == NULL)
3690 	return NULL;
3691 
3692       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3693 					 stub_name, FALSE, FALSE);
3694       if (h != NULL)
3695 	h->u.stub_cache = stub_entry;
3696 
3697       free (stub_name);
3698     }
3699 
3700   return stub_entry;
3701 }
3702 
3703 /* Add a new stub entry to the stub hash.  Not all fields of the new
3704    stub entry are initialised.  */
3705 
3706 static struct ppc_stub_hash_entry *
3707 ppc_add_stub (const char *stub_name,
3708 	      asection *section,
3709 	      struct bfd_link_info *info)
3710 {
3711   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3712   struct map_stub *group;
3713   asection *link_sec;
3714   asection *stub_sec;
3715   struct ppc_stub_hash_entry *stub_entry;
3716 
3717   group = htab->sec_info[section->id].u.group;
3718   link_sec = group->link_sec;
3719   stub_sec = group->stub_sec;
3720   if (stub_sec == NULL)
3721     {
3722       size_t namelen;
3723       bfd_size_type len;
3724       char *s_name;
3725 
3726       namelen = strlen (link_sec->name);
3727       len = namelen + sizeof (STUB_SUFFIX);
3728       s_name = bfd_alloc (htab->params->stub_bfd, len);
3729       if (s_name == NULL)
3730 	return NULL;
3731 
3732       memcpy (s_name, link_sec->name, namelen);
3733       memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3734       stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
3735       if (stub_sec == NULL)
3736 	return NULL;
3737       group->stub_sec = stub_sec;
3738     }
3739 
3740   /* Enter this entry into the linker stub hash table.  */
3741   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3742 				     TRUE, FALSE);
3743   if (stub_entry == NULL)
3744     {
3745       /* xgettext:c-format */
3746       _bfd_error_handler (_("%pB: cannot create stub entry %s"),
3747 			  section->owner, stub_name);
3748       return NULL;
3749     }
3750 
3751   stub_entry->group = group;
3752   stub_entry->stub_offset = 0;
3753   return stub_entry;
3754 }
3755 
3756 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3757    not already done.  */
3758 
3759 static bfd_boolean
3760 create_got_section (bfd *abfd, struct bfd_link_info *info)
3761 {
3762   asection *got, *relgot;
3763   flagword flags;
3764   struct ppc_link_hash_table *htab = ppc_hash_table (info);
3765 
3766   if (!is_ppc64_elf (abfd))
3767     return FALSE;
3768   if (htab == NULL)
3769     return FALSE;
3770 
3771   if (!htab->elf.sgot
3772       && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
3773     return FALSE;
3774 
3775   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3776 	   | SEC_LINKER_CREATED);
3777 
3778   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3779   if (!got
3780       || !bfd_set_section_alignment (got, 3))
3781     return FALSE;
3782 
3783   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3784 					       flags | SEC_READONLY);
3785   if (!relgot
3786       || !bfd_set_section_alignment (relgot, 3))
3787     return FALSE;
3788 
3789   ppc64_elf_tdata (abfd)->got = got;
3790   ppc64_elf_tdata (abfd)->relgot = relgot;
3791   return TRUE;
3792 }
3793 
3794 /* Follow indirect and warning symbol links.  */
3795 
3796 static inline struct bfd_link_hash_entry *
3797 follow_link (struct bfd_link_hash_entry *h)
3798 {
3799   while (h->type == bfd_link_hash_indirect
3800 	 || h->type == bfd_link_hash_warning)
3801     h = h->u.i.link;
3802   return h;
3803 }
3804 
3805 static inline struct elf_link_hash_entry *
3806 elf_follow_link (struct elf_link_hash_entry *h)
3807 {
3808   return (struct elf_link_hash_entry *) follow_link (&h->root);
3809 }
3810 
3811 static inline struct ppc_link_hash_entry *
3812 ppc_follow_link (struct ppc_link_hash_entry *h)
3813 {
3814   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
3815 }
3816 
3817 /* Merge PLT info on FROM with that on TO.  */
3818 
3819 static void
3820 move_plt_plist (struct ppc_link_hash_entry *from,
3821 		struct ppc_link_hash_entry *to)
3822 {
3823   if (from->elf.plt.plist != NULL)
3824     {
3825       if (to->elf.plt.plist != NULL)
3826 	{
3827 	  struct plt_entry **entp;
3828 	  struct plt_entry *ent;
3829 
3830 	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3831 	    {
3832 	      struct plt_entry *dent;
3833 
3834 	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3835 		if (dent->addend == ent->addend)
3836 		  {
3837 		    dent->plt.refcount += ent->plt.refcount;
3838 		    *entp = ent->next;
3839 		    break;
3840 		  }
3841 	      if (dent == NULL)
3842 		entp = &ent->next;
3843 	    }
3844 	  *entp = to->elf.plt.plist;
3845 	}
3846 
3847       to->elf.plt.plist = from->elf.plt.plist;
3848       from->elf.plt.plist = NULL;
3849     }
3850 }
3851 
3852 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
3853 
3854 static void
3855 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3856 				struct elf_link_hash_entry *dir,
3857 				struct elf_link_hash_entry *ind)
3858 {
3859   struct ppc_link_hash_entry *edir, *eind;
3860 
3861   edir = (struct ppc_link_hash_entry *) dir;
3862   eind = (struct ppc_link_hash_entry *) ind;
3863 
3864   edir->is_func |= eind->is_func;
3865   edir->is_func_descriptor |= eind->is_func_descriptor;
3866   edir->tls_mask |= eind->tls_mask;
3867   if (eind->oh != NULL)
3868     edir->oh = ppc_follow_link (eind->oh);
3869 
3870   if (edir->elf.versioned != versioned_hidden)
3871     edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
3872   edir->elf.ref_regular |= eind->elf.ref_regular;
3873   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
3874   edir->elf.non_got_ref |= eind->elf.non_got_ref;
3875   edir->elf.needs_plt |= eind->elf.needs_plt;
3876   edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
3877 
3878   /* If we were called to copy over info for a weak sym, don't copy
3879      dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
3880      in order to simplify readonly_dynrelocs and save a field in the
3881      symbol hash entry, but that means dyn_relocs can't be used in any
3882      tests about a specific symbol, or affect other symbol flags which
3883      are then tested.  */
3884   if (eind->elf.root.type != bfd_link_hash_indirect)
3885     return;
3886 
3887   /* Copy over any dynamic relocs we may have on the indirect sym.  */
3888   if (eind->dyn_relocs != NULL)
3889     {
3890       if (edir->dyn_relocs != NULL)
3891 	{
3892 	  struct elf_dyn_relocs **pp;
3893 	  struct elf_dyn_relocs *p;
3894 
3895 	  /* Add reloc counts against the indirect sym to the direct sym
3896 	     list.  Merge any entries against the same section.  */
3897 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3898 	    {
3899 	      struct elf_dyn_relocs *q;
3900 
3901 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
3902 		if (q->sec == p->sec)
3903 		  {
3904 		    q->pc_count += p->pc_count;
3905 		    q->count += p->count;
3906 		    *pp = p->next;
3907 		    break;
3908 		  }
3909 	      if (q == NULL)
3910 		pp = &p->next;
3911 	    }
3912 	  *pp = edir->dyn_relocs;
3913 	}
3914 
3915       edir->dyn_relocs = eind->dyn_relocs;
3916       eind->dyn_relocs = NULL;
3917     }
3918 
3919   /* Copy over got entries that we may have already seen to the
3920      symbol which just became indirect.  */
3921   if (eind->elf.got.glist != NULL)
3922     {
3923       if (edir->elf.got.glist != NULL)
3924 	{
3925 	  struct got_entry **entp;
3926 	  struct got_entry *ent;
3927 
3928 	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3929 	    {
3930 	      struct got_entry *dent;
3931 
3932 	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3933 		if (dent->addend == ent->addend
3934 		    && dent->owner == ent->owner
3935 		    && dent->tls_type == ent->tls_type)
3936 		  {
3937 		    dent->got.refcount += ent->got.refcount;
3938 		    *entp = ent->next;
3939 		    break;
3940 		  }
3941 	      if (dent == NULL)
3942 		entp = &ent->next;
3943 	    }
3944 	  *entp = edir->elf.got.glist;
3945 	}
3946 
3947       edir->elf.got.glist = eind->elf.got.glist;
3948       eind->elf.got.glist = NULL;
3949     }
3950 
3951   /* And plt entries.  */
3952   move_plt_plist (eind, edir);
3953 
3954   if (eind->elf.dynindx != -1)
3955     {
3956       if (edir->elf.dynindx != -1)
3957 	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
3958 				edir->elf.dynstr_index);
3959       edir->elf.dynindx = eind->elf.dynindx;
3960       edir->elf.dynstr_index = eind->elf.dynstr_index;
3961       eind->elf.dynindx = -1;
3962       eind->elf.dynstr_index = 0;
3963     }
3964 }
3965 
3966 /* Find the function descriptor hash entry from the given function code
3967    hash entry FH.  Link the entries via their OH fields.  */
3968 
3969 static struct ppc_link_hash_entry *
3970 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
3971 {
3972   struct ppc_link_hash_entry *fdh = fh->oh;
3973 
3974   if (fdh == NULL)
3975     {
3976       const char *fd_name = fh->elf.root.root.string + 1;
3977 
3978       fdh = (struct ppc_link_hash_entry *)
3979 	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
3980       if (fdh == NULL)
3981 	return fdh;
3982 
3983       fdh->is_func_descriptor = 1;
3984       fdh->oh = fh;
3985       fh->is_func = 1;
3986       fh->oh = fdh;
3987     }
3988 
3989   fdh = ppc_follow_link (fdh);
3990   fdh->is_func_descriptor = 1;
3991   fdh->oh = fh;
3992   return fdh;
3993 }
3994 
3995 /* Make a fake function descriptor sym for the undefined code sym FH.  */
3996 
3997 static struct ppc_link_hash_entry *
3998 make_fdh (struct bfd_link_info *info,
3999 	  struct ppc_link_hash_entry *fh)
4000 {
4001   bfd *abfd = fh->elf.root.u.undef.abfd;
4002   struct bfd_link_hash_entry *bh = NULL;
4003   struct ppc_link_hash_entry *fdh;
4004   flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
4005 		    ? BSF_WEAK
4006 		    : BSF_GLOBAL);
4007 
4008   if (!_bfd_generic_link_add_one_symbol (info, abfd,
4009 					 fh->elf.root.root.string + 1,
4010 					 flags, bfd_und_section_ptr, 0,
4011 					 NULL, FALSE, FALSE, &bh))
4012     return NULL;
4013 
4014   fdh = (struct ppc_link_hash_entry *) bh;
4015   fdh->elf.non_elf = 0;
4016   fdh->fake = 1;
4017   fdh->is_func_descriptor = 1;
4018   fdh->oh = fh;
4019   fh->is_func = 1;
4020   fh->oh = fdh;
4021   return fdh;
4022 }
4023 
4024 /* Fix function descriptor symbols defined in .opd sections to be
4025    function type.  */
4026 
4027 static bfd_boolean
4028 ppc64_elf_add_symbol_hook (bfd *ibfd,
4029 			   struct bfd_link_info *info,
4030 			   Elf_Internal_Sym *isym,
4031 			   const char **name,
4032 			   flagword *flags ATTRIBUTE_UNUSED,
4033 			   asection **sec,
4034 			   bfd_vma *value)
4035 {
4036   if (*sec != NULL
4037       && strcmp ((*sec)->name, ".opd") == 0)
4038     {
4039       asection *code_sec;
4040 
4041       if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4042 	    || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
4043 	isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4044 
4045       /* If the symbol is a function defined in .opd, and the function
4046 	 code is in a discarded group, let it appear to be undefined.  */
4047       if (!bfd_link_relocatable (info)
4048 	  && (*sec)->reloc_count != 0
4049 	  && opd_entry_value (*sec, *value, &code_sec, NULL,
4050 			      FALSE) != (bfd_vma) -1
4051 	  && discarded_section (code_sec))
4052 	{
4053 	  *sec = bfd_und_section_ptr;
4054 	  isym->st_shndx = SHN_UNDEF;
4055 	}
4056     }
4057   else if (*sec != NULL
4058 	   && strcmp ((*sec)->name, ".toc") == 0
4059 	   && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4060     {
4061       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4062       if (htab != NULL)
4063 	htab->params->object_in_toc = 1;
4064     }
4065 
4066   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4067     {
4068       if (abiversion (ibfd) == 0)
4069 	set_abiversion (ibfd, 2);
4070       else if (abiversion (ibfd) == 1)
4071 	{
4072 	  _bfd_error_handler (_("symbol '%s' has invalid st_other"
4073 				" for ABI version 1"), *name);
4074 	  bfd_set_error (bfd_error_bad_value);
4075 	  return FALSE;
4076 	}
4077     }
4078 
4079   return TRUE;
4080 }
4081 
4082 /* Merge non-visibility st_other attributes: local entry point.  */
4083 
4084 static void
4085 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
4086 				  const Elf_Internal_Sym *isym,
4087 				  bfd_boolean definition,
4088 				  bfd_boolean dynamic)
4089 {
4090   if (definition && (!dynamic || !h->def_regular))
4091     h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
4092 		| ELF_ST_VISIBILITY (h->other));
4093 }
4094 
4095 /* Hook called on merging a symbol.  We use this to clear "fake" since
4096    we now have a real symbol.  */
4097 
4098 static bfd_boolean
4099 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
4100 			const Elf_Internal_Sym *isym,
4101 			asection **psec ATTRIBUTE_UNUSED,
4102 			bfd_boolean newdef ATTRIBUTE_UNUSED,
4103 			bfd_boolean olddef ATTRIBUTE_UNUSED,
4104 			bfd *oldbfd ATTRIBUTE_UNUSED,
4105 			const asection *oldsec ATTRIBUTE_UNUSED)
4106 {
4107   ((struct ppc_link_hash_entry *) h)->fake = 0;
4108   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4109     ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1;
4110   return TRUE;
4111 }
4112 
4113 /* This function makes an old ABI object reference to ".bar" cause the
4114    inclusion of a new ABI object archive that defines "bar".
4115    NAME is a symbol defined in an archive.  Return a symbol in the hash
4116    table that might be satisfied by the archive symbols.  */
4117 
4118 static struct elf_link_hash_entry *
4119 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4120 				 struct bfd_link_info *info,
4121 				 const char *name)
4122 {
4123   struct elf_link_hash_entry *h;
4124   char *dot_name;
4125   size_t len;
4126 
4127   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4128   if (h != NULL
4129       /* Don't return this sym if it is a fake function descriptor
4130 	 created by add_symbol_adjust.  */
4131       && !((struct ppc_link_hash_entry *) h)->fake)
4132     return h;
4133 
4134   if (name[0] == '.')
4135     return h;
4136 
4137   len = strlen (name);
4138   dot_name = bfd_alloc (abfd, len + 2);
4139   if (dot_name == NULL)
4140     return (struct elf_link_hash_entry *) -1;
4141   dot_name[0] = '.';
4142   memcpy (dot_name + 1, name, len + 1);
4143   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4144   bfd_release (abfd, dot_name);
4145   return h;
4146 }
4147 
4148 /* This function satisfies all old ABI object references to ".bar" if a
4149    new ABI object defines "bar".  Well, at least, undefined dot symbols
4150    are made weak.  This stops later archive searches from including an
4151    object if we already have a function descriptor definition.  It also
4152    prevents the linker complaining about undefined symbols.
4153    We also check and correct mismatched symbol visibility here.  The
4154    most restrictive visibility of the function descriptor and the
4155    function entry symbol is used.  */
4156 
4157 static bfd_boolean
4158 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4159 {
4160   struct ppc_link_hash_table *htab;
4161   struct ppc_link_hash_entry *fdh;
4162 
4163   if (eh->elf.root.type == bfd_link_hash_warning)
4164     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4165 
4166   if (eh->elf.root.type == bfd_link_hash_indirect)
4167     return TRUE;
4168 
4169   if (eh->elf.root.root.string[0] != '.')
4170     abort ();
4171 
4172   htab = ppc_hash_table (info);
4173   if (htab == NULL)
4174     return FALSE;
4175 
4176   fdh = lookup_fdh (eh, htab);
4177   if (fdh == NULL
4178       && !bfd_link_relocatable (info)
4179       && (eh->elf.root.type == bfd_link_hash_undefined
4180 	  || eh->elf.root.type == bfd_link_hash_undefweak)
4181       && eh->elf.ref_regular)
4182     {
4183       /* Make an undefined function descriptor sym, in order to
4184 	 pull in an --as-needed shared lib.  Archives are handled
4185 	 elsewhere.  */
4186       fdh = make_fdh (info, eh);
4187       if (fdh == NULL)
4188 	return FALSE;
4189     }
4190 
4191   if (fdh != NULL)
4192     {
4193       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4194       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4195 
4196       /* Make both descriptor and entry symbol have the most
4197 	 constraining visibility of either symbol.  */
4198       if (entry_vis < descr_vis)
4199 	fdh->elf.other += entry_vis - descr_vis;
4200       else if (entry_vis > descr_vis)
4201 	eh->elf.other += descr_vis - entry_vis;
4202 
4203       /* Propagate reference flags from entry symbol to function
4204 	 descriptor symbol.  */
4205       fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
4206       fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
4207       fdh->elf.ref_regular |= eh->elf.ref_regular;
4208       fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
4209 
4210       if (!fdh->elf.forced_local
4211 	  && fdh->elf.dynindx == -1
4212 	  && fdh->elf.versioned != versioned_hidden
4213 	  && (bfd_link_dll (info)
4214 	      || fdh->elf.def_dynamic
4215 	      || fdh->elf.ref_dynamic)
4216 	  && (eh->elf.ref_regular
4217 	      || eh->elf.def_regular))
4218 	{
4219 	  if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4220 	    return FALSE;
4221 	}
4222     }
4223 
4224   return TRUE;
4225 }
4226 
4227 /* Set up opd section info and abiversion for IBFD, and process list
4228    of dot-symbols we made in link_hash_newfunc.  */
4229 
4230 static bfd_boolean
4231 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
4232 {
4233   struct ppc_link_hash_table *htab;
4234   struct ppc_link_hash_entry **p, *eh;
4235   asection *opd = bfd_get_section_by_name (ibfd, ".opd");
4236 
4237   if (opd != NULL && opd->size != 0)
4238     {
4239       BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
4240       ppc64_elf_section_data (opd)->sec_type = sec_opd;
4241 
4242       if (abiversion (ibfd) == 0)
4243 	set_abiversion (ibfd, 1);
4244       else if (abiversion (ibfd) >= 2)
4245 	{
4246 	  /* xgettext:c-format */
4247 	  _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
4248 			      ibfd, abiversion (ibfd));
4249 	  bfd_set_error (bfd_error_bad_value);
4250 	  return FALSE;
4251 	}
4252     }
4253 
4254   if (is_ppc64_elf (info->output_bfd))
4255     {
4256       /* For input files without an explicit abiversion in e_flags
4257 	 we should have flagged any with symbol st_other bits set
4258 	 as ELFv1 and above flagged those with .opd as ELFv2.
4259 	 Set the output abiversion if not yet set, and for any input
4260 	 still ambiguous, take its abiversion from the output.
4261 	 Differences in ABI are reported later.  */
4262       if (abiversion (info->output_bfd) == 0)
4263 	set_abiversion (info->output_bfd, abiversion (ibfd));
4264       else if (abiversion (ibfd) == 0)
4265 	set_abiversion (ibfd, abiversion (info->output_bfd));
4266     }
4267 
4268   htab = ppc_hash_table (info);
4269   if (htab == NULL)
4270     return TRUE;
4271 
4272   if (opd != NULL && opd->size != 0
4273       && (ibfd->flags & DYNAMIC) == 0
4274       && (opd->flags & SEC_RELOC) != 0
4275       && opd->reloc_count != 0
4276       && !bfd_is_abs_section (opd->output_section)
4277       && info->gc_sections)
4278     {
4279       /* Garbage collection needs some extra help with .opd sections.
4280 	 We don't want to necessarily keep everything referenced by
4281 	 relocs in .opd, as that would keep all functions.  Instead,
4282 	 if we reference an .opd symbol (a function descriptor), we
4283 	 want to keep the function code symbol's section.  This is
4284 	 easy for global symbols, but for local syms we need to keep
4285 	 information about the associated function section.  */
4286       bfd_size_type amt;
4287       asection **opd_sym_map;
4288       Elf_Internal_Shdr *symtab_hdr;
4289       Elf_Internal_Rela *relocs, *rel_end, *rel;
4290 
4291       amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
4292       opd_sym_map = bfd_zalloc (ibfd, amt);
4293       if (opd_sym_map == NULL)
4294 	return FALSE;
4295       ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
4296       relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
4297 					  info->keep_memory);
4298       if (relocs == NULL)
4299 	return FALSE;
4300       symtab_hdr = &elf_symtab_hdr (ibfd);
4301       rel_end = relocs + opd->reloc_count - 1;
4302       for (rel = relocs; rel < rel_end; rel++)
4303 	{
4304 	  enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
4305 	  unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
4306 
4307 	  if (r_type == R_PPC64_ADDR64
4308 	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
4309 	      && r_symndx < symtab_hdr->sh_info)
4310 	    {
4311 	      Elf_Internal_Sym *isym;
4312 	      asection *s;
4313 
4314 	      isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
4315 	      if (isym == NULL)
4316 		{
4317 		  if (elf_section_data (opd)->relocs != relocs)
4318 		    free (relocs);
4319 		  return FALSE;
4320 		}
4321 
4322 	      s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
4323 	      if (s != NULL && s != opd)
4324 		opd_sym_map[OPD_NDX (rel->r_offset)] = s;
4325 	    }
4326 	}
4327       if (elf_section_data (opd)->relocs != relocs)
4328 	free (relocs);
4329     }
4330 
4331   p = &htab->dot_syms;
4332   while ((eh = *p) != NULL)
4333     {
4334       *p = NULL;
4335       if (&eh->elf == htab->elf.hgot)
4336 	;
4337       else if (htab->elf.hgot == NULL
4338 	       && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4339 	htab->elf.hgot = &eh->elf;
4340       else if (abiversion (ibfd) <= 1)
4341 	{
4342 	  htab->need_func_desc_adj = 1;
4343 	  if (!add_symbol_adjust (eh, info))
4344 	    return FALSE;
4345 	}
4346       p = &eh->u.next_dot_sym;
4347     }
4348   return TRUE;
4349 }
4350 
4351 /* Undo hash table changes when an --as-needed input file is determined
4352    not to be needed.  */
4353 
4354 static bfd_boolean
4355 ppc64_elf_notice_as_needed (bfd *ibfd,
4356 			    struct bfd_link_info *info,
4357 			    enum notice_asneeded_action act)
4358 {
4359   if (act == notice_not_needed)
4360     {
4361       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4362 
4363       if (htab == NULL)
4364 	return FALSE;
4365 
4366       htab->dot_syms = NULL;
4367     }
4368   return _bfd_elf_notice_as_needed (ibfd, info, act);
4369 }
4370 
4371 /* If --just-symbols against a final linked binary, then assume we need
4372    toc adjusting stubs when calling functions defined there.  */
4373 
4374 static void
4375 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4376 {
4377   if ((sec->flags & SEC_CODE) != 0
4378       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4379       && is_ppc64_elf (sec->owner))
4380     {
4381       if (abiversion (sec->owner) >= 2
4382 	  || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4383 	sec->has_toc_reloc = 1;
4384     }
4385   _bfd_elf_link_just_syms (sec, info);
4386 }
4387 
4388 static struct plt_entry **
4389 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4390 		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4391 {
4392   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4393   struct plt_entry **local_plt;
4394   unsigned char *local_got_tls_masks;
4395 
4396   if (local_got_ents == NULL)
4397     {
4398       bfd_size_type size = symtab_hdr->sh_info;
4399 
4400       size *= (sizeof (*local_got_ents)
4401 	       + sizeof (*local_plt)
4402 	       + sizeof (*local_got_tls_masks));
4403       local_got_ents = bfd_zalloc (abfd, size);
4404       if (local_got_ents == NULL)
4405 	return NULL;
4406       elf_local_got_ents (abfd) = local_got_ents;
4407     }
4408 
4409   if ((tls_type & (NON_GOT | TLS_EXPLICIT)) == 0)
4410     {
4411       struct got_entry *ent;
4412 
4413       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4414 	if (ent->addend == r_addend
4415 	    && ent->owner == abfd
4416 	    && ent->tls_type == tls_type)
4417 	  break;
4418       if (ent == NULL)
4419 	{
4420 	  bfd_size_type amt = sizeof (*ent);
4421 	  ent = bfd_alloc (abfd, amt);
4422 	  if (ent == NULL)
4423 	    return FALSE;
4424 	  ent->next = local_got_ents[r_symndx];
4425 	  ent->addend = r_addend;
4426 	  ent->owner = abfd;
4427 	  ent->tls_type = tls_type;
4428 	  ent->is_indirect = FALSE;
4429 	  ent->got.refcount = 0;
4430 	  local_got_ents[r_symndx] = ent;
4431 	}
4432       ent->got.refcount += 1;
4433     }
4434 
4435   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4436   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4437   local_got_tls_masks[r_symndx] |= tls_type & 0xff;
4438 
4439   return local_plt + r_symndx;
4440 }
4441 
4442 static bfd_boolean
4443 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4444 {
4445   struct plt_entry *ent;
4446 
4447   for (ent = *plist; ent != NULL; ent = ent->next)
4448     if (ent->addend == addend)
4449       break;
4450   if (ent == NULL)
4451     {
4452       bfd_size_type amt = sizeof (*ent);
4453       ent = bfd_alloc (abfd, amt);
4454       if (ent == NULL)
4455 	return FALSE;
4456       ent->next = *plist;
4457       ent->addend = addend;
4458       ent->plt.refcount = 0;
4459       *plist = ent;
4460     }
4461   ent->plt.refcount += 1;
4462   return TRUE;
4463 }
4464 
4465 static bfd_boolean
4466 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4467 {
4468   return (r_type == R_PPC64_REL24
4469 	  || r_type == R_PPC64_REL24_NOTOC
4470 	  || r_type == R_PPC64_REL14
4471 	  || r_type == R_PPC64_REL14_BRTAKEN
4472 	  || r_type == R_PPC64_REL14_BRNTAKEN
4473 	  || r_type == R_PPC64_ADDR24
4474 	  || r_type == R_PPC64_ADDR14
4475 	  || r_type == R_PPC64_ADDR14_BRTAKEN
4476 	  || r_type == R_PPC64_ADDR14_BRNTAKEN
4477 	  || r_type == R_PPC64_PLTCALL
4478 	  || r_type == R_PPC64_PLTCALL_NOTOC);
4479 }
4480 
4481 /* Relocs on inline plt call sequence insns prior to the call.  */
4482 
4483 static bfd_boolean
4484 is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
4485 {
4486   return (r_type == R_PPC64_PLT16_HA
4487 	  || r_type == R_PPC64_PLT16_HI
4488 	  || r_type == R_PPC64_PLT16_LO
4489 	  || r_type == R_PPC64_PLT16_LO_DS
4490 	  || r_type == R_PPC64_PLT_PCREL34
4491 	  || r_type == R_PPC64_PLT_PCREL34_NOTOC
4492 	  || r_type == R_PPC64_PLTSEQ
4493 	  || r_type == R_PPC64_PLTSEQ_NOTOC);
4494 }
4495 
4496 /* Look through the relocs for a section during the first phase, and
4497    calculate needed space in the global offset table, procedure
4498    linkage table, and dynamic reloc sections.  */
4499 
4500 static bfd_boolean
4501 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4502 			asection *sec, const Elf_Internal_Rela *relocs)
4503 {
4504   struct ppc_link_hash_table *htab;
4505   Elf_Internal_Shdr *symtab_hdr;
4506   struct elf_link_hash_entry **sym_hashes;
4507   const Elf_Internal_Rela *rel;
4508   const Elf_Internal_Rela *rel_end;
4509   asection *sreloc;
4510   struct elf_link_hash_entry *tga, *dottga;
4511   bfd_boolean is_opd;
4512 
4513   if (bfd_link_relocatable (info))
4514     return TRUE;
4515 
4516   /* Don't do anything special with non-loaded, non-alloced sections.
4517      In particular, any relocs in such sections should not affect GOT
4518      and PLT reference counting (ie. we don't allow them to create GOT
4519      or PLT entries), there's no possibility or desire to optimize TLS
4520      relocs, and there's not much point in propagating relocs to shared
4521      libs that the dynamic linker won't relocate.  */
4522   if ((sec->flags & SEC_ALLOC) == 0)
4523     return TRUE;
4524 
4525   BFD_ASSERT (is_ppc64_elf (abfd));
4526 
4527   htab = ppc_hash_table (info);
4528   if (htab == NULL)
4529     return FALSE;
4530 
4531   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4532 			      FALSE, FALSE, TRUE);
4533   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4534 				 FALSE, FALSE, TRUE);
4535   symtab_hdr = &elf_symtab_hdr (abfd);
4536   sym_hashes = elf_sym_hashes (abfd);
4537   sreloc = NULL;
4538   is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
4539   rel_end = relocs + sec->reloc_count;
4540   for (rel = relocs; rel < rel_end; rel++)
4541     {
4542       unsigned long r_symndx;
4543       struct elf_link_hash_entry *h;
4544       enum elf_ppc64_reloc_type r_type;
4545       int tls_type;
4546       struct _ppc64_elf_section_data *ppc64_sec;
4547       struct plt_entry **ifunc, **plt_list;
4548 
4549       r_symndx = ELF64_R_SYM (rel->r_info);
4550       if (r_symndx < symtab_hdr->sh_info)
4551 	h = NULL;
4552       else
4553 	{
4554 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4555 	  h = elf_follow_link (h);
4556 
4557 	  if (h == htab->elf.hgot)
4558 	    sec->has_toc_reloc = 1;
4559 	}
4560 
4561       r_type = ELF64_R_TYPE (rel->r_info);
4562       switch (r_type)
4563 	{
4564 	case R_PPC64_D34:
4565 	case R_PPC64_D34_LO:
4566 	case R_PPC64_D34_HI30:
4567 	case R_PPC64_D34_HA30:
4568 	case R_PPC64_D28:
4569 	case R_PPC64_TPREL34:
4570 	case R_PPC64_DTPREL34:
4571 	case R_PPC64_PCREL34:
4572 	case R_PPC64_GOT_PCREL34:
4573 	case R_PPC64_GOT_TLSGD34:
4574 	case R_PPC64_GOT_TLSLD34:
4575 	case R_PPC64_GOT_TPREL34:
4576 	case R_PPC64_GOT_DTPREL34:
4577 	case R_PPC64_PLT_PCREL34:
4578 	case R_PPC64_PLT_PCREL34_NOTOC:
4579 	case R_PPC64_PCREL28:
4580 	  htab->powerxx_stubs = 1;
4581 	  break;
4582 	default:
4583 	  break;
4584 	}
4585 
4586       switch (r_type)
4587 	{
4588 	case R_PPC64_PLT16_HA:
4589 	case R_PPC64_GOT_TLSLD16_HA:
4590 	case R_PPC64_GOT_TLSGD16_HA:
4591 	case R_PPC64_GOT_TPREL16_HA:
4592 	case R_PPC64_GOT_DTPREL16_HA:
4593 	case R_PPC64_GOT16_HA:
4594 	case R_PPC64_TOC16_HA:
4595 	case R_PPC64_PLT16_LO:
4596 	case R_PPC64_PLT16_LO_DS:
4597 	case R_PPC64_GOT_TLSLD16_LO:
4598 	case R_PPC64_GOT_TLSGD16_LO:
4599 	case R_PPC64_GOT_TPREL16_LO_DS:
4600 	case R_PPC64_GOT_DTPREL16_LO_DS:
4601 	case R_PPC64_GOT16_LO:
4602 	case R_PPC64_GOT16_LO_DS:
4603 	case R_PPC64_TOC16_LO:
4604 	case R_PPC64_TOC16_LO_DS:
4605 	case R_PPC64_GOT_PCREL34:
4606 	  ppc64_elf_tdata (abfd)->has_optrel = 1;
4607 	  ppc64_elf_section_data (sec)->has_optrel = 1;
4608 	  break;
4609 	default:
4610 	  break;
4611 	}
4612 
4613       ifunc = NULL;
4614       if (h != NULL)
4615 	{
4616 	  if (h->type == STT_GNU_IFUNC)
4617 	    {
4618 	      h->needs_plt = 1;
4619 	      ifunc = &h->plt.plist;
4620 	    }
4621 	}
4622       else
4623 	{
4624 	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4625 							  abfd, r_symndx);
4626 	  if (isym == NULL)
4627 	    return FALSE;
4628 
4629 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4630 	    {
4631 	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4632 					     rel->r_addend,
4633 					     NON_GOT | PLT_IFUNC);
4634 	      if (ifunc == NULL)
4635 		return FALSE;
4636 	    }
4637 	}
4638 
4639       tls_type = 0;
4640       switch (r_type)
4641 	{
4642 	case R_PPC64_TLSGD:
4643 	case R_PPC64_TLSLD:
4644 	  /* These special tls relocs tie a call to __tls_get_addr with
4645 	     its parameter symbol.  */
4646 	  if (h != NULL)
4647 	    ((struct ppc_link_hash_entry *) h)->tls_mask |= TLS_TLS | TLS_MARK;
4648 	  else
4649 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4650 					rel->r_addend,
4651 					NON_GOT | TLS_TLS | TLS_MARK))
4652 	      return FALSE;
4653 	  sec->has_tls_reloc = 1;
4654 	  break;
4655 
4656 	case R_PPC64_GOT_TLSLD16:
4657 	case R_PPC64_GOT_TLSLD16_LO:
4658 	case R_PPC64_GOT_TLSLD16_HI:
4659 	case R_PPC64_GOT_TLSLD16_HA:
4660 	case R_PPC64_GOT_TLSLD34:
4661 	  tls_type = TLS_TLS | TLS_LD;
4662 	  goto dogottls;
4663 
4664 	case R_PPC64_GOT_TLSGD16:
4665 	case R_PPC64_GOT_TLSGD16_LO:
4666 	case R_PPC64_GOT_TLSGD16_HI:
4667 	case R_PPC64_GOT_TLSGD16_HA:
4668 	case R_PPC64_GOT_TLSGD34:
4669 	  tls_type = TLS_TLS | TLS_GD;
4670 	  goto dogottls;
4671 
4672 	case R_PPC64_GOT_TPREL16_DS:
4673 	case R_PPC64_GOT_TPREL16_LO_DS:
4674 	case R_PPC64_GOT_TPREL16_HI:
4675 	case R_PPC64_GOT_TPREL16_HA:
4676 	case R_PPC64_GOT_TPREL34:
4677 	  if (bfd_link_dll (info))
4678 	    info->flags |= DF_STATIC_TLS;
4679 	  tls_type = TLS_TLS | TLS_TPREL;
4680 	  goto dogottls;
4681 
4682 	case R_PPC64_GOT_DTPREL16_DS:
4683 	case R_PPC64_GOT_DTPREL16_LO_DS:
4684 	case R_PPC64_GOT_DTPREL16_HI:
4685 	case R_PPC64_GOT_DTPREL16_HA:
4686 	case R_PPC64_GOT_DTPREL34:
4687 	  tls_type = TLS_TLS | TLS_DTPREL;
4688 	dogottls:
4689 	  sec->has_tls_reloc = 1;
4690 	  goto dogot;
4691 
4692 	case R_PPC64_GOT16:
4693 	case R_PPC64_GOT16_LO:
4694 	case R_PPC64_GOT16_HI:
4695 	case R_PPC64_GOT16_HA:
4696 	case R_PPC64_GOT16_DS:
4697 	case R_PPC64_GOT16_LO_DS:
4698 	case R_PPC64_GOT_PCREL34:
4699 	dogot:
4700 	  /* This symbol requires a global offset table entry.  */
4701 	  sec->has_toc_reloc = 1;
4702 	  if (r_type == R_PPC64_GOT_TLSLD16
4703 	      || r_type == R_PPC64_GOT_TLSGD16
4704 	      || r_type == R_PPC64_GOT_TPREL16_DS
4705 	      || r_type == R_PPC64_GOT_DTPREL16_DS
4706 	      || r_type == R_PPC64_GOT16
4707 	      || r_type == R_PPC64_GOT16_DS)
4708 	    {
4709 	      htab->do_multi_toc = 1;
4710 	      ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4711 	    }
4712 
4713 	  if (ppc64_elf_tdata (abfd)->got == NULL
4714 	      && !create_got_section (abfd, info))
4715 	    return FALSE;
4716 
4717 	  if (h != NULL)
4718 	    {
4719 	      struct ppc_link_hash_entry *eh;
4720 	      struct got_entry *ent;
4721 
4722 	      eh = (struct ppc_link_hash_entry *) h;
4723 	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4724 		if (ent->addend == rel->r_addend
4725 		    && ent->owner == abfd
4726 		    && ent->tls_type == tls_type)
4727 		  break;
4728 	      if (ent == NULL)
4729 		{
4730 		  bfd_size_type amt = sizeof (*ent);
4731 		  ent = bfd_alloc (abfd, amt);
4732 		  if (ent == NULL)
4733 		    return FALSE;
4734 		  ent->next = eh->elf.got.glist;
4735 		  ent->addend = rel->r_addend;
4736 		  ent->owner = abfd;
4737 		  ent->tls_type = tls_type;
4738 		  ent->is_indirect = FALSE;
4739 		  ent->got.refcount = 0;
4740 		  eh->elf.got.glist = ent;
4741 		}
4742 	      ent->got.refcount += 1;
4743 	      eh->tls_mask |= tls_type;
4744 	    }
4745 	  else
4746 	    /* This is a global offset table entry for a local symbol.  */
4747 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4748 					rel->r_addend, tls_type))
4749 	      return FALSE;
4750 
4751 	  /* We may also need a plt entry if the symbol turns out to be
4752 	     an ifunc.  */
4753 	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
4754 	    {
4755 	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
4756 		return FALSE;
4757 	    }
4758 	  break;
4759 
4760 	case R_PPC64_PLT16_HA:
4761 	case R_PPC64_PLT16_HI:
4762 	case R_PPC64_PLT16_LO:
4763 	case R_PPC64_PLT16_LO_DS:
4764 	case R_PPC64_PLT_PCREL34:
4765 	case R_PPC64_PLT_PCREL34_NOTOC:
4766 	case R_PPC64_PLT32:
4767 	case R_PPC64_PLT64:
4768 	  /* This symbol requires a procedure linkage table entry.  */
4769 	  plt_list = ifunc;
4770 	  if (h != NULL)
4771 	    {
4772 	      h->needs_plt = 1;
4773 	      if (h->root.root.string[0] == '.'
4774 		  && h->root.root.string[1] != '\0')
4775 		((struct ppc_link_hash_entry *) h)->is_func = 1;
4776 	      ((struct ppc_link_hash_entry *) h)->tls_mask |= PLT_KEEP;
4777 	      plt_list = &h->plt.plist;
4778 	    }
4779 	  if (plt_list == NULL)
4780 	    plt_list = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4781 					      rel->r_addend,
4782 					      NON_GOT | PLT_KEEP);
4783 	  if (!update_plt_info (abfd, plt_list, rel->r_addend))
4784 	    return FALSE;
4785 	  break;
4786 
4787 	  /* The following relocations don't need to propagate the
4788 	     relocation if linking a shared object since they are
4789 	     section relative.  */
4790 	case R_PPC64_SECTOFF:
4791 	case R_PPC64_SECTOFF_LO:
4792 	case R_PPC64_SECTOFF_HI:
4793 	case R_PPC64_SECTOFF_HA:
4794 	case R_PPC64_SECTOFF_DS:
4795 	case R_PPC64_SECTOFF_LO_DS:
4796 	case R_PPC64_DTPREL16:
4797 	case R_PPC64_DTPREL16_LO:
4798 	case R_PPC64_DTPREL16_HI:
4799 	case R_PPC64_DTPREL16_HA:
4800 	case R_PPC64_DTPREL16_DS:
4801 	case R_PPC64_DTPREL16_LO_DS:
4802 	case R_PPC64_DTPREL16_HIGH:
4803 	case R_PPC64_DTPREL16_HIGHA:
4804 	case R_PPC64_DTPREL16_HIGHER:
4805 	case R_PPC64_DTPREL16_HIGHERA:
4806 	case R_PPC64_DTPREL16_HIGHEST:
4807 	case R_PPC64_DTPREL16_HIGHESTA:
4808 	  break;
4809 
4810 	  /* Nor do these.  */
4811 	case R_PPC64_REL16:
4812 	case R_PPC64_REL16_LO:
4813 	case R_PPC64_REL16_HI:
4814 	case R_PPC64_REL16_HA:
4815 	case R_PPC64_REL16_HIGH:
4816 	case R_PPC64_REL16_HIGHA:
4817 	case R_PPC64_REL16_HIGHER:
4818 	case R_PPC64_REL16_HIGHERA:
4819 	case R_PPC64_REL16_HIGHEST:
4820 	case R_PPC64_REL16_HIGHESTA:
4821 	case R_PPC64_REL16_HIGHER34:
4822 	case R_PPC64_REL16_HIGHERA34:
4823 	case R_PPC64_REL16_HIGHEST34:
4824 	case R_PPC64_REL16_HIGHESTA34:
4825 	case R_PPC64_REL16DX_HA:
4826 	  break;
4827 
4828 	  /* Not supported as a dynamic relocation.  */
4829 	case R_PPC64_ADDR64_LOCAL:
4830 	  if (bfd_link_pic (info))
4831 	    {
4832 	      if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
4833 		ppc_howto_init ();
4834 	      /* xgettext:c-format */
4835 	      info->callbacks->einfo (_("%H: %s reloc unsupported "
4836 					"in shared libraries and PIEs\n"),
4837 				      abfd, sec, rel->r_offset,
4838 				      ppc64_elf_howto_table[r_type]->name);
4839 	      bfd_set_error (bfd_error_bad_value);
4840 	      return FALSE;
4841 	    }
4842 	  break;
4843 
4844 	case R_PPC64_TOC16:
4845 	case R_PPC64_TOC16_DS:
4846 	  htab->do_multi_toc = 1;
4847 	  ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4848 	  /* Fall through.  */
4849 	case R_PPC64_TOC16_LO:
4850 	case R_PPC64_TOC16_HI:
4851 	case R_PPC64_TOC16_HA:
4852 	case R_PPC64_TOC16_LO_DS:
4853 	  sec->has_toc_reloc = 1;
4854 	  if (h != NULL && bfd_link_executable (info))
4855 	    {
4856 	      /* We may need a copy reloc.  */
4857 	      h->non_got_ref = 1;
4858 	      /* Strongly prefer a copy reloc over a dynamic reloc.
4859 		 glibc ld.so as of 2019-08 will error out if one of
4860 		 these relocations is emitted.  */
4861 	      h->needs_copy = 1;
4862 	      goto dodyn;
4863 	    }
4864 	  break;
4865 
4866 	  /* Marker reloc.  */
4867 	case R_PPC64_ENTRY:
4868 	  break;
4869 
4870 	  /* This relocation describes the C++ object vtable hierarchy.
4871 	     Reconstruct it for later use during GC.  */
4872 	case R_PPC64_GNU_VTINHERIT:
4873 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4874 	    return FALSE;
4875 	  break;
4876 
4877 	  /* This relocation describes which C++ vtable entries are actually
4878 	     used.  Record for later use during GC.  */
4879 	case R_PPC64_GNU_VTENTRY:
4880 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4881 	    return FALSE;
4882 	  break;
4883 
4884 	case R_PPC64_REL14:
4885 	case R_PPC64_REL14_BRTAKEN:
4886 	case R_PPC64_REL14_BRNTAKEN:
4887 	  {
4888 	    asection *dest = NULL;
4889 
4890 	    /* Heuristic: If jumping outside our section, chances are
4891 	       we are going to need a stub.  */
4892 	    if (h != NULL)
4893 	      {
4894 		/* If the sym is weak it may be overridden later, so
4895 		   don't assume we know where a weak sym lives.  */
4896 		if (h->root.type == bfd_link_hash_defined)
4897 		  dest = h->root.u.def.section;
4898 	      }
4899 	    else
4900 	      {
4901 		Elf_Internal_Sym *isym;
4902 
4903 		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4904 					      abfd, r_symndx);
4905 		if (isym == NULL)
4906 		  return FALSE;
4907 
4908 		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
4909 	      }
4910 
4911 	    if (dest != sec)
4912 	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4913 	  }
4914 	  goto rel24;
4915 
4916 	case R_PPC64_PLTCALL:
4917 	case R_PPC64_PLTCALL_NOTOC:
4918 	  ppc64_elf_section_data (sec)->has_pltcall = 1;
4919 	  /* Fall through.  */
4920 
4921 	case R_PPC64_REL24:
4922 	case R_PPC64_REL24_NOTOC:
4923 	rel24:
4924 	  plt_list = ifunc;
4925 	  if (h != NULL)
4926 	    {
4927 	      h->needs_plt = 1;
4928 	      if (h->root.root.string[0] == '.'
4929 		  && h->root.root.string[1] != '\0')
4930 		((struct ppc_link_hash_entry *) h)->is_func = 1;
4931 
4932 	      if (h == tga || h == dottga)
4933 		{
4934 		  sec->has_tls_reloc = 1;
4935 		  if (rel != relocs
4936 		      && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
4937 			  || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
4938 		    /* We have a new-style __tls_get_addr call with
4939 		       a marker reloc.  */
4940 		    ;
4941 		  else
4942 		    /* Mark this section as having an old-style call.  */
4943 		    sec->nomark_tls_get_addr = 1;
4944 		}
4945 	      plt_list = &h->plt.plist;
4946 	    }
4947 
4948 	  /* We may need a .plt entry if the function this reloc
4949 	     refers to is in a shared lib.  */
4950 	  if (plt_list
4951 	      && !update_plt_info (abfd, plt_list, rel->r_addend))
4952 	    return FALSE;
4953 	  break;
4954 
4955 	case R_PPC64_ADDR14:
4956 	case R_PPC64_ADDR14_BRNTAKEN:
4957 	case R_PPC64_ADDR14_BRTAKEN:
4958 	case R_PPC64_ADDR24:
4959 	  goto dodyn;
4960 
4961 	case R_PPC64_TPREL64:
4962 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
4963 	  if (bfd_link_dll (info))
4964 	    info->flags |= DF_STATIC_TLS;
4965 	  goto dotlstoc;
4966 
4967 	case R_PPC64_DTPMOD64:
4968 	  if (rel + 1 < rel_end
4969 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
4970 	      && rel[1].r_offset == rel->r_offset + 8)
4971 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
4972 	  else
4973 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
4974 	  goto dotlstoc;
4975 
4976 	case R_PPC64_DTPREL64:
4977 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
4978 	  if (rel != relocs
4979 	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
4980 	      && rel[-1].r_offset == rel->r_offset - 8)
4981 	    /* This is the second reloc of a dtpmod, dtprel pair.
4982 	       Don't mark with TLS_DTPREL.  */
4983 	    goto dodyn;
4984 
4985 	dotlstoc:
4986 	  sec->has_tls_reloc = 1;
4987 	  if (h != NULL)
4988 	    {
4989 	      struct ppc_link_hash_entry *eh;
4990 	      eh = (struct ppc_link_hash_entry *) h;
4991 	      eh->tls_mask |= tls_type & 0xff;
4992 	    }
4993 	  else
4994 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4995 					rel->r_addend, tls_type))
4996 	      return FALSE;
4997 
4998 	  ppc64_sec = ppc64_elf_section_data (sec);
4999 	  if (ppc64_sec->sec_type != sec_toc)
5000 	    {
5001 	      bfd_size_type amt;
5002 
5003 	      /* One extra to simplify get_tls_mask.  */
5004 	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5005 	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5006 	      if (ppc64_sec->u.toc.symndx == NULL)
5007 		return FALSE;
5008 	      amt = sec->size * sizeof (bfd_vma) / 8;
5009 	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5010 	      if (ppc64_sec->u.toc.add == NULL)
5011 		return FALSE;
5012 	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5013 	      ppc64_sec->sec_type = sec_toc;
5014 	    }
5015 	  BFD_ASSERT (rel->r_offset % 8 == 0);
5016 	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5017 	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5018 
5019 	  /* Mark the second slot of a GD or LD entry.
5020 	     -1 to indicate GD and -2 to indicate LD.  */
5021 	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5022 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5023 	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5024 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5025 	  goto dodyn;
5026 
5027 	case R_PPC64_TPREL16:
5028 	case R_PPC64_TPREL16_LO:
5029 	case R_PPC64_TPREL16_HI:
5030 	case R_PPC64_TPREL16_HA:
5031 	case R_PPC64_TPREL16_DS:
5032 	case R_PPC64_TPREL16_LO_DS:
5033 	case R_PPC64_TPREL16_HIGH:
5034 	case R_PPC64_TPREL16_HIGHA:
5035 	case R_PPC64_TPREL16_HIGHER:
5036 	case R_PPC64_TPREL16_HIGHERA:
5037 	case R_PPC64_TPREL16_HIGHEST:
5038 	case R_PPC64_TPREL16_HIGHESTA:
5039 	case R_PPC64_TPREL34:
5040 	  if (bfd_link_dll (info))
5041 	    info->flags |= DF_STATIC_TLS;
5042 	  goto dodyn;
5043 
5044 	case R_PPC64_ADDR64:
5045 	  if (is_opd
5046 	      && rel + 1 < rel_end
5047 	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5048 	    {
5049 	      if (h != NULL)
5050 		((struct ppc_link_hash_entry *) h)->is_func = 1;
5051 	    }
5052 	  /* Fall through.  */
5053 
5054 	case R_PPC64_ADDR16:
5055 	case R_PPC64_ADDR16_DS:
5056 	case R_PPC64_ADDR16_HA:
5057 	case R_PPC64_ADDR16_HI:
5058 	case R_PPC64_ADDR16_HIGH:
5059 	case R_PPC64_ADDR16_HIGHA:
5060 	case R_PPC64_ADDR16_HIGHER:
5061 	case R_PPC64_ADDR16_HIGHERA:
5062 	case R_PPC64_ADDR16_HIGHEST:
5063 	case R_PPC64_ADDR16_HIGHESTA:
5064 	case R_PPC64_ADDR16_LO:
5065 	case R_PPC64_ADDR16_LO_DS:
5066 	case R_PPC64_D34:
5067 	case R_PPC64_D34_LO:
5068 	case R_PPC64_D34_HI30:
5069 	case R_PPC64_D34_HA30:
5070 	case R_PPC64_ADDR16_HIGHER34:
5071 	case R_PPC64_ADDR16_HIGHERA34:
5072 	case R_PPC64_ADDR16_HIGHEST34:
5073 	case R_PPC64_ADDR16_HIGHESTA34:
5074 	case R_PPC64_D28:
5075 	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
5076 	      && rel->r_addend == 0)
5077 	    {
5078 	      /* We may need a .plt entry if this reloc refers to a
5079 		 function in a shared lib.  */
5080 	      if (!update_plt_info (abfd, &h->plt.plist, 0))
5081 		return FALSE;
5082 	      h->pointer_equality_needed = 1;
5083 	    }
5084 	  /* Fall through.  */
5085 
5086 	case R_PPC64_REL30:
5087 	case R_PPC64_REL32:
5088 	case R_PPC64_REL64:
5089 	case R_PPC64_ADDR32:
5090 	case R_PPC64_UADDR16:
5091 	case R_PPC64_UADDR32:
5092 	case R_PPC64_UADDR64:
5093 	case R_PPC64_TOC:
5094 	  if (h != NULL && bfd_link_executable (info))
5095 	    /* We may need a copy reloc.  */
5096 	    h->non_got_ref = 1;
5097 
5098 	  /* Don't propagate .opd relocs.  */
5099 	  if (NO_OPD_RELOCS && is_opd)
5100 	    break;
5101 
5102 	  /* If we are creating a shared library, and this is a reloc
5103 	     against a global symbol, or a non PC relative reloc
5104 	     against a local symbol, then we need to copy the reloc
5105 	     into the shared library.  However, if we are linking with
5106 	     -Bsymbolic, we do not need to copy a reloc against a
5107 	     global symbol which is defined in an object we are
5108 	     including in the link (i.e., DEF_REGULAR is set).  At
5109 	     this point we have not seen all the input files, so it is
5110 	     possible that DEF_REGULAR is not set now but will be set
5111 	     later (it is never cleared).  In case of a weak definition,
5112 	     DEF_REGULAR may be cleared later by a strong definition in
5113 	     a shared library.  We account for that possibility below by
5114 	     storing information in the dyn_relocs field of the hash
5115 	     table entry.  A similar situation occurs when creating
5116 	     shared libraries and symbol visibility changes render the
5117 	     symbol local.
5118 
5119 	     If on the other hand, we are creating an executable, we
5120 	     may need to keep relocations for symbols satisfied by a
5121 	     dynamic library if we manage to avoid copy relocs for the
5122 	     symbol.  */
5123 	dodyn:
5124 	  if ((h != NULL
5125 	       && (h->root.type == bfd_link_hash_defweak
5126 		   || !h->def_regular))
5127 	      || (h != NULL
5128 		  && !bfd_link_executable (info)
5129 		  && !SYMBOLIC_BIND (info, h))
5130 	      || (bfd_link_pic (info)
5131 		  && must_be_dyn_reloc (info, r_type))
5132 	      || (!bfd_link_pic (info)
5133 		  && ifunc != NULL))
5134 	    {
5135 	      /* We must copy these reloc types into the output file.
5136 		 Create a reloc section in dynobj and make room for
5137 		 this reloc.  */
5138 	      if (sreloc == NULL)
5139 		{
5140 		  sreloc = _bfd_elf_make_dynamic_reloc_section
5141 		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5142 
5143 		  if (sreloc == NULL)
5144 		    return FALSE;
5145 		}
5146 
5147 	      /* If this is a global symbol, we count the number of
5148 		 relocations we need for this symbol.  */
5149 	      if (h != NULL)
5150 		{
5151 		  struct elf_dyn_relocs *p;
5152 		  struct elf_dyn_relocs **head;
5153 
5154 		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5155 		  p = *head;
5156 		  if (p == NULL || p->sec != sec)
5157 		    {
5158 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5159 		      if (p == NULL)
5160 			return FALSE;
5161 		      p->next = *head;
5162 		      *head = p;
5163 		      p->sec = sec;
5164 		      p->count = 0;
5165 		      p->pc_count = 0;
5166 		    }
5167 		  p->count += 1;
5168 		  if (!must_be_dyn_reloc (info, r_type))
5169 		    p->pc_count += 1;
5170 		}
5171 	      else
5172 		{
5173 		  /* Track dynamic relocs needed for local syms too.
5174 		     We really need local syms available to do this
5175 		     easily.  Oh well.  */
5176 		  struct ppc_dyn_relocs *p;
5177 		  struct ppc_dyn_relocs **head;
5178 		  bfd_boolean is_ifunc;
5179 		  asection *s;
5180 		  void *vpp;
5181 		  Elf_Internal_Sym *isym;
5182 
5183 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5184 						abfd, r_symndx);
5185 		  if (isym == NULL)
5186 		    return FALSE;
5187 
5188 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5189 		  if (s == NULL)
5190 		    s = sec;
5191 
5192 		  vpp = &elf_section_data (s)->local_dynrel;
5193 		  head = (struct ppc_dyn_relocs **) vpp;
5194 		  is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5195 		  p = *head;
5196 		  if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5197 		    p = p->next;
5198 		  if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5199 		    {
5200 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5201 		      if (p == NULL)
5202 			return FALSE;
5203 		      p->next = *head;
5204 		      *head = p;
5205 		      p->sec = sec;
5206 		      p->ifunc = is_ifunc;
5207 		      p->count = 0;
5208 		    }
5209 		  p->count += 1;
5210 		}
5211 	    }
5212 	  break;
5213 
5214 	default:
5215 	  break;
5216 	}
5217     }
5218 
5219   return TRUE;
5220 }
5221 
5222 /* Merge backend specific data from an object file to the output
5223    object file when linking.  */
5224 
5225 static bfd_boolean
5226 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
5227 {
5228   bfd *obfd = info->output_bfd;
5229   unsigned long iflags, oflags;
5230 
5231   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5232     return TRUE;
5233 
5234   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5235     return TRUE;
5236 
5237   if (!_bfd_generic_verify_endian_match (ibfd, info))
5238     return FALSE;
5239 
5240   iflags = elf_elfheader (ibfd)->e_flags;
5241   oflags = elf_elfheader (obfd)->e_flags;
5242 
5243   if (iflags & ~EF_PPC64_ABI)
5244     {
5245       _bfd_error_handler
5246 	/* xgettext:c-format */
5247 	(_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
5248       bfd_set_error (bfd_error_bad_value);
5249       return FALSE;
5250     }
5251   else if (iflags != oflags && iflags != 0)
5252     {
5253       _bfd_error_handler
5254 	/* xgettext:c-format */
5255 	(_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
5256 	 ibfd, iflags, oflags);
5257       bfd_set_error (bfd_error_bad_value);
5258       return FALSE;
5259     }
5260 
5261   if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
5262     return FALSE;
5263 
5264   /* Merge Tag_compatibility attributes and any common GNU ones.  */
5265   return _bfd_elf_merge_object_attributes (ibfd, info);
5266 }
5267 
5268 static bfd_boolean
5269 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5270 {
5271   /* Print normal ELF private data.  */
5272   _bfd_elf_print_private_bfd_data (abfd, ptr);
5273 
5274   if (elf_elfheader (abfd)->e_flags != 0)
5275     {
5276       FILE *file = ptr;
5277 
5278       fprintf (file, _("private flags = 0x%lx:"),
5279 	       elf_elfheader (abfd)->e_flags);
5280 
5281       if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5282 	fprintf (file, _(" [abiv%ld]"),
5283 		 elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5284       fputc ('\n', file);
5285     }
5286 
5287   return TRUE;
5288 }
5289 
5290 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5291    of the code entry point, and its section, which must be in the same
5292    object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
5293 
5294 static bfd_vma
5295 opd_entry_value (asection *opd_sec,
5296 		 bfd_vma offset,
5297 		 asection **code_sec,
5298 		 bfd_vma *code_off,
5299 		 bfd_boolean in_code_sec)
5300 {
5301   bfd *opd_bfd = opd_sec->owner;
5302   Elf_Internal_Rela *relocs;
5303   Elf_Internal_Rela *lo, *hi, *look;
5304   bfd_vma val;
5305 
5306   /* No relocs implies we are linking a --just-symbols object, or looking
5307      at a final linked executable with addr2line or somesuch.  */
5308   if (opd_sec->reloc_count == 0)
5309     {
5310       bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5311 
5312       if (contents == NULL)
5313 	{
5314 	  if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5315 	    return (bfd_vma) -1;
5316 	  ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5317 	}
5318 
5319       /* PR 17512: file: 64b9dfbb.  */
5320       if (offset + 7 >= opd_sec->size || offset + 7 < offset)
5321 	return (bfd_vma) -1;
5322 
5323       val = bfd_get_64 (opd_bfd, contents + offset);
5324       if (code_sec != NULL)
5325 	{
5326 	  asection *sec, *likely = NULL;
5327 
5328 	  if (in_code_sec)
5329 	    {
5330 	      sec = *code_sec;
5331 	      if (sec->vma <= val
5332 		  && val < sec->vma + sec->size)
5333 		likely = sec;
5334 	      else
5335 		val = -1;
5336 	    }
5337 	  else
5338 	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5339 	      if (sec->vma <= val
5340 		  && (sec->flags & SEC_LOAD) != 0
5341 		  && (sec->flags & SEC_ALLOC) != 0)
5342 		likely = sec;
5343 	  if (likely != NULL)
5344 	    {
5345 	      *code_sec = likely;
5346 	      if (code_off != NULL)
5347 		*code_off = val - likely->vma;
5348 	    }
5349 	}
5350       return val;
5351     }
5352 
5353   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5354 
5355   relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5356   if (relocs == NULL)
5357     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5358   /* PR 17512: file: df8e1fd6.  */
5359   if (relocs == NULL)
5360     return (bfd_vma) -1;
5361 
5362   /* Go find the opd reloc at the sym address.  */
5363   lo = relocs;
5364   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5365   val = (bfd_vma) -1;
5366   while (lo < hi)
5367     {
5368       look = lo + (hi - lo) / 2;
5369       if (look->r_offset < offset)
5370 	lo = look + 1;
5371       else if (look->r_offset > offset)
5372 	hi = look;
5373       else
5374 	{
5375 	  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5376 
5377 	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5378 	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5379 	    {
5380 	      unsigned long symndx = ELF64_R_SYM (look->r_info);
5381 	      asection *sec = NULL;
5382 
5383 	      if (symndx >= symtab_hdr->sh_info
5384 		  && elf_sym_hashes (opd_bfd) != NULL)
5385 		{
5386 		  struct elf_link_hash_entry **sym_hashes;
5387 		  struct elf_link_hash_entry *rh;
5388 
5389 		  sym_hashes = elf_sym_hashes (opd_bfd);
5390 		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
5391 		  if (rh != NULL)
5392 		    {
5393 		      rh = elf_follow_link (rh);
5394 		      if (rh->root.type != bfd_link_hash_defined
5395 			  && rh->root.type != bfd_link_hash_defweak)
5396 			break;
5397 		      if (rh->root.u.def.section->owner == opd_bfd)
5398 			{
5399 			  val = rh->root.u.def.value;
5400 			  sec = rh->root.u.def.section;
5401 			}
5402 		    }
5403 		}
5404 
5405 	      if (sec == NULL)
5406 		{
5407 		  Elf_Internal_Sym *sym;
5408 
5409 		  if (symndx < symtab_hdr->sh_info)
5410 		    {
5411 		      sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5412 		      if (sym == NULL)
5413 			{
5414 			  size_t symcnt = symtab_hdr->sh_info;
5415 			  sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5416 						      symcnt, 0,
5417 						      NULL, NULL, NULL);
5418 			  if (sym == NULL)
5419 			    break;
5420 			  symtab_hdr->contents = (bfd_byte *) sym;
5421 			}
5422 		      sym += symndx;
5423 		    }
5424 		  else
5425 		    {
5426 		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5427 						  1, symndx,
5428 						  NULL, NULL, NULL);
5429 		      if (sym == NULL)
5430 			break;
5431 		    }
5432 		  sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5433 		  if (sec == NULL)
5434 		    break;
5435 		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5436 		  val = sym->st_value;
5437 		}
5438 
5439 	      val += look->r_addend;
5440 	      if (code_off != NULL)
5441 		*code_off = val;
5442 	      if (code_sec != NULL)
5443 		{
5444 		  if (in_code_sec && *code_sec != sec)
5445 		    return -1;
5446 		  else
5447 		    *code_sec = sec;
5448 		}
5449 	      if (sec->output_section != NULL)
5450 		val += sec->output_section->vma + sec->output_offset;
5451 	    }
5452 	  break;
5453 	}
5454     }
5455 
5456   return val;
5457 }
5458 
5459 /* If the ELF symbol SYM might be a function in SEC, return the
5460    function size and set *CODE_OFF to the function's entry point,
5461    otherwise return zero.  */
5462 
5463 static bfd_size_type
5464 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5465 			      bfd_vma *code_off)
5466 {
5467   bfd_size_type size;
5468 
5469   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5470 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5471     return 0;
5472 
5473   size = 0;
5474   if (!(sym->flags & BSF_SYNTHETIC))
5475     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5476 
5477   if (strcmp (sym->section->name, ".opd") == 0)
5478     {
5479       struct _opd_sec_data *opd = get_opd_info (sym->section);
5480       bfd_vma symval = sym->value;
5481 
5482       if (opd != NULL
5483 	  && opd->adjust != NULL
5484 	  && elf_section_data (sym->section)->relocs != NULL)
5485 	{
5486 	  /* opd_entry_value will use cached relocs that have been
5487 	     adjusted, but with raw symbols.  That means both local
5488 	     and global symbols need adjusting.  */
5489 	  long adjust = opd->adjust[OPD_NDX (symval)];
5490 	  if (adjust == -1)
5491 	    return 0;
5492 	  symval += adjust;
5493 	}
5494 
5495       if (opd_entry_value (sym->section, symval,
5496 			   &sec, code_off, TRUE) == (bfd_vma) -1)
5497 	return 0;
5498       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5499 	 symbol.  This size has nothing to do with the code size of the
5500 	 function, which is what we're supposed to return, but the
5501 	 code size isn't available without looking up the dot-sym.
5502 	 However, doing that would be a waste of time particularly
5503 	 since elf_find_function will look at the dot-sym anyway.
5504 	 Now, elf_find_function will keep the largest size of any
5505 	 function sym found at the code address of interest, so return
5506 	 1 here to avoid it incorrectly caching a larger function size
5507 	 for a small function.  This does mean we return the wrong
5508 	 size for a new-ABI function of size 24, but all that does is
5509 	 disable caching for such functions.  */
5510       if (size == 24)
5511 	size = 1;
5512     }
5513   else
5514     {
5515       if (sym->section != sec)
5516 	return 0;
5517       *code_off = sym->value;
5518     }
5519   if (size == 0)
5520     size = 1;
5521   return size;
5522 }
5523 
5524 /* Return true if symbol is a strong function defined in an ELFv2
5525    object with st_other localentry bits of zero, ie. its local entry
5526    point coincides with its global entry point.  */
5527 
5528 static bfd_boolean
5529 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
5530 {
5531   return (h != NULL
5532 	  && h->type == STT_FUNC
5533 	  && h->root.type == bfd_link_hash_defined
5534 	  && (STO_PPC64_LOCAL_MASK & h->other) == 0
5535 	  && !((struct ppc_link_hash_entry *) h)->non_zero_localentry
5536 	  && is_ppc64_elf (h->root.u.def.section->owner)
5537 	  && abiversion (h->root.u.def.section->owner) >= 2);
5538 }
5539 
5540 /* Return true if symbol is defined in a regular object file.  */
5541 
5542 static bfd_boolean
5543 is_static_defined (struct elf_link_hash_entry *h)
5544 {
5545   return ((h->root.type == bfd_link_hash_defined
5546 	   || h->root.type == bfd_link_hash_defweak)
5547 	  && h->root.u.def.section != NULL
5548 	  && h->root.u.def.section->output_section != NULL);
5549 }
5550 
5551 /* If FDH is a function descriptor symbol, return the associated code
5552    entry symbol if it is defined.  Return NULL otherwise.  */
5553 
5554 static struct ppc_link_hash_entry *
5555 defined_code_entry (struct ppc_link_hash_entry *fdh)
5556 {
5557   if (fdh->is_func_descriptor)
5558     {
5559       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5560       if (fh->elf.root.type == bfd_link_hash_defined
5561 	  || fh->elf.root.type == bfd_link_hash_defweak)
5562 	return fh;
5563     }
5564   return NULL;
5565 }
5566 
5567 /* If FH is a function code entry symbol, return the associated
5568    function descriptor symbol if it is defined.  Return NULL otherwise.  */
5569 
5570 static struct ppc_link_hash_entry *
5571 defined_func_desc (struct ppc_link_hash_entry *fh)
5572 {
5573   if (fh->oh != NULL
5574       && fh->oh->is_func_descriptor)
5575     {
5576       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5577       if (fdh->elf.root.type == bfd_link_hash_defined
5578 	  || fdh->elf.root.type == bfd_link_hash_defweak)
5579 	return fdh;
5580     }
5581   return NULL;
5582 }
5583 
5584 static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
5585 
5586 /* Garbage collect sections, after first dealing with dot-symbols.  */
5587 
5588 static bfd_boolean
5589 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5590 {
5591   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5592 
5593   if (htab != NULL && htab->need_func_desc_adj)
5594     {
5595       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5596       htab->need_func_desc_adj = 0;
5597     }
5598   return bfd_elf_gc_sections (abfd, info);
5599 }
5600 
5601 /* Mark all our entry sym sections, both opd and code section.  */
5602 
5603 static void
5604 ppc64_elf_gc_keep (struct bfd_link_info *info)
5605 {
5606   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5607   struct bfd_sym_chain *sym;
5608 
5609   if (htab == NULL)
5610     return;
5611 
5612   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5613     {
5614       struct ppc_link_hash_entry *eh, *fh;
5615       asection *sec;
5616 
5617       eh = (struct ppc_link_hash_entry *)
5618 	elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
5619       if (eh == NULL)
5620 	continue;
5621       if (eh->elf.root.type != bfd_link_hash_defined
5622 	  && eh->elf.root.type != bfd_link_hash_defweak)
5623 	continue;
5624 
5625       fh = defined_code_entry (eh);
5626       if (fh != NULL)
5627 	{
5628 	  sec = fh->elf.root.u.def.section;
5629 	  sec->flags |= SEC_KEEP;
5630 	}
5631       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5632 	       && opd_entry_value (eh->elf.root.u.def.section,
5633 				   eh->elf.root.u.def.value,
5634 				   &sec, NULL, FALSE) != (bfd_vma) -1)
5635 	sec->flags |= SEC_KEEP;
5636 
5637       sec = eh->elf.root.u.def.section;
5638       sec->flags |= SEC_KEEP;
5639     }
5640 }
5641 
5642 /* Mark sections containing dynamically referenced symbols.  When
5643    building shared libraries, we must assume that any visible symbol is
5644    referenced.  */
5645 
5646 static bfd_boolean
5647 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5648 {
5649   struct bfd_link_info *info = (struct bfd_link_info *) inf;
5650   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
5651   struct ppc_link_hash_entry *fdh;
5652   struct bfd_elf_dynamic_list *d = info->dynamic_list;
5653 
5654   /* Dynamic linking info is on the func descriptor sym.  */
5655   fdh = defined_func_desc (eh);
5656   if (fdh != NULL)
5657     eh = fdh;
5658 
5659   if ((eh->elf.root.type == bfd_link_hash_defined
5660        || eh->elf.root.type == bfd_link_hash_defweak)
5661       && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
5662 	  || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
5663 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5664 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5665 	      && (!bfd_link_executable (info)
5666 		  || info->gc_keep_exported
5667 		  || info->export_dynamic
5668 		  || (eh->elf.dynamic
5669 		      && d != NULL
5670 		      && (*d->match) (&d->head, NULL,
5671 				      eh->elf.root.root.string)))
5672 	      && (eh->elf.versioned >= versioned
5673 		  || !bfd_hide_sym_by_version (info->version_info,
5674 					       eh->elf.root.root.string)))))
5675     {
5676       asection *code_sec;
5677       struct ppc_link_hash_entry *fh;
5678 
5679       eh->elf.root.u.def.section->flags |= SEC_KEEP;
5680 
5681       /* Function descriptor syms cause the associated
5682 	 function code sym section to be marked.  */
5683       fh = defined_code_entry (eh);
5684       if (fh != NULL)
5685 	{
5686 	  code_sec = fh->elf.root.u.def.section;
5687 	  code_sec->flags |= SEC_KEEP;
5688 	}
5689       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5690 	       && opd_entry_value (eh->elf.root.u.def.section,
5691 				   eh->elf.root.u.def.value,
5692 				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
5693 	code_sec->flags |= SEC_KEEP;
5694     }
5695 
5696   return TRUE;
5697 }
5698 
5699 /* Return the section that should be marked against GC for a given
5700    relocation.  */
5701 
5702 static asection *
5703 ppc64_elf_gc_mark_hook (asection *sec,
5704 			struct bfd_link_info *info,
5705 			Elf_Internal_Rela *rel,
5706 			struct elf_link_hash_entry *h,
5707 			Elf_Internal_Sym *sym)
5708 {
5709   asection *rsec;
5710 
5711   /* Syms return NULL if we're marking .opd, so we avoid marking all
5712      function sections, as all functions are referenced in .opd.  */
5713   rsec = NULL;
5714   if (get_opd_info (sec) != NULL)
5715     return rsec;
5716 
5717   if (h != NULL)
5718     {
5719       enum elf_ppc64_reloc_type r_type;
5720       struct ppc_link_hash_entry *eh, *fh, *fdh;
5721 
5722       r_type = ELF64_R_TYPE (rel->r_info);
5723       switch (r_type)
5724 	{
5725 	case R_PPC64_GNU_VTINHERIT:
5726 	case R_PPC64_GNU_VTENTRY:
5727 	  break;
5728 
5729 	default:
5730 	  switch (h->root.type)
5731 	    {
5732 	    case bfd_link_hash_defined:
5733 	    case bfd_link_hash_defweak:
5734 	      eh = (struct ppc_link_hash_entry *) h;
5735 	      fdh = defined_func_desc (eh);
5736 	      if (fdh != NULL)
5737 		{
5738 		  /* -mcall-aixdesc code references the dot-symbol on
5739 		     a call reloc.  Mark the function descriptor too
5740 		     against garbage collection.  */
5741 		  fdh->elf.mark = 1;
5742 		  if (fdh->elf.is_weakalias)
5743 		    weakdef (&fdh->elf)->mark = 1;
5744 		  eh = fdh;
5745 		}
5746 
5747 	      /* Function descriptor syms cause the associated
5748 		 function code sym section to be marked.  */
5749 	      fh = defined_code_entry (eh);
5750 	      if (fh != NULL)
5751 		{
5752 		  /* They also mark their opd section.  */
5753 		  eh->elf.root.u.def.section->gc_mark = 1;
5754 
5755 		  rsec = fh->elf.root.u.def.section;
5756 		}
5757 	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5758 		       && opd_entry_value (eh->elf.root.u.def.section,
5759 					   eh->elf.root.u.def.value,
5760 					   &rsec, NULL, FALSE) != (bfd_vma) -1)
5761 		eh->elf.root.u.def.section->gc_mark = 1;
5762 	      else
5763 		rsec = h->root.u.def.section;
5764 	      break;
5765 
5766 	    case bfd_link_hash_common:
5767 	      rsec = h->root.u.c.p->section;
5768 	      break;
5769 
5770 	    default:
5771 	      return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5772 	    }
5773 	}
5774     }
5775   else
5776     {
5777       struct _opd_sec_data *opd;
5778 
5779       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5780       opd = get_opd_info (rsec);
5781       if (opd != NULL && opd->func_sec != NULL)
5782 	{
5783 	  rsec->gc_mark = 1;
5784 
5785 	  rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
5786 	}
5787     }
5788 
5789   return rsec;
5790 }
5791 
5792 /* The maximum size of .sfpr.  */
5793 #define SFPR_MAX (218*4)
5794 
5795 struct sfpr_def_parms
5796 {
5797   const char name[12];
5798   unsigned char lo, hi;
5799   bfd_byte *(*write_ent) (bfd *, bfd_byte *, int);
5800   bfd_byte *(*write_tail) (bfd *, bfd_byte *, int);
5801 };
5802 
5803 /* Auto-generate _save*, _rest* functions in .sfpr.
5804    If STUB_SEC is non-null, define alias symbols in STUB_SEC
5805    instead.  */
5806 
5807 static bfd_boolean
5808 sfpr_define (struct bfd_link_info *info,
5809 	     const struct sfpr_def_parms *parm,
5810 	     asection *stub_sec)
5811 {
5812   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5813   unsigned int i;
5814   size_t len = strlen (parm->name);
5815   bfd_boolean writing = FALSE;
5816   char sym[16];
5817 
5818   if (htab == NULL)
5819     return FALSE;
5820 
5821   memcpy (sym, parm->name, len);
5822   sym[len + 2] = 0;
5823 
5824   for (i = parm->lo; i <= parm->hi; i++)
5825     {
5826       struct ppc_link_hash_entry *h;
5827 
5828       sym[len + 0] = i / 10 + '0';
5829       sym[len + 1] = i % 10 + '0';
5830       h = (struct ppc_link_hash_entry *)
5831 	elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE);
5832       if (stub_sec != NULL)
5833 	{
5834 	  if (h != NULL
5835 	      && h->elf.root.type == bfd_link_hash_defined
5836 	      && h->elf.root.u.def.section == htab->sfpr)
5837 	    {
5838 	      struct elf_link_hash_entry *s;
5839 	      char buf[32];
5840 	      sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
5841 	      s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
5842 	      if (s == NULL)
5843 		return FALSE;
5844 	      if (s->root.type == bfd_link_hash_new)
5845 		{
5846 		  s->root.type = bfd_link_hash_defined;
5847 		  s->root.u.def.section = stub_sec;
5848 		  s->root.u.def.value = (stub_sec->size - htab->sfpr->size
5849 					 + h->elf.root.u.def.value);
5850 		  s->ref_regular = 1;
5851 		  s->def_regular = 1;
5852 		  s->ref_regular_nonweak = 1;
5853 		  s->forced_local = 1;
5854 		  s->non_elf = 0;
5855 		  s->root.linker_def = 1;
5856 		}
5857 	    }
5858 	  continue;
5859 	}
5860       if (h != NULL)
5861 	{
5862 	  h->save_res = 1;
5863 	  if (!h->elf.def_regular)
5864 	    {
5865 	      h->elf.root.type = bfd_link_hash_defined;
5866 	      h->elf.root.u.def.section = htab->sfpr;
5867 	      h->elf.root.u.def.value = htab->sfpr->size;
5868 	      h->elf.type = STT_FUNC;
5869 	      h->elf.def_regular = 1;
5870 	      h->elf.non_elf = 0;
5871 	      _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
5872 	      writing = TRUE;
5873 	      if (htab->sfpr->contents == NULL)
5874 		{
5875 		  htab->sfpr->contents
5876 		    = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5877 		  if (htab->sfpr->contents == NULL)
5878 		    return FALSE;
5879 		}
5880 	    }
5881 	}
5882       if (writing)
5883 	{
5884 	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5885 	  if (i != parm->hi)
5886 	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5887 	  else
5888 	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5889 	  htab->sfpr->size = p - htab->sfpr->contents;
5890 	}
5891     }
5892 
5893   return TRUE;
5894 }
5895 
5896 static bfd_byte *
5897 savegpr0 (bfd *abfd, bfd_byte *p, int r)
5898 {
5899   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5900   return p + 4;
5901 }
5902 
5903 static bfd_byte *
5904 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5905 {
5906   p = savegpr0 (abfd, p, r);
5907   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5908   p = p + 4;
5909   bfd_put_32 (abfd, BLR, p);
5910   return p + 4;
5911 }
5912 
5913 static bfd_byte *
5914 restgpr0 (bfd *abfd, bfd_byte *p, int r)
5915 {
5916   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5917   return p + 4;
5918 }
5919 
5920 static bfd_byte *
5921 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5922 {
5923   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5924   p = p + 4;
5925   p = restgpr0 (abfd, p, r);
5926   bfd_put_32 (abfd, MTLR_R0, p);
5927   p = p + 4;
5928   if (r == 29)
5929     {
5930       p = restgpr0 (abfd, p, 30);
5931       p = restgpr0 (abfd, p, 31);
5932     }
5933   bfd_put_32 (abfd, BLR, p);
5934   return p + 4;
5935 }
5936 
5937 static bfd_byte *
5938 savegpr1 (bfd *abfd, bfd_byte *p, int r)
5939 {
5940   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5941   return p + 4;
5942 }
5943 
5944 static bfd_byte *
5945 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
5946 {
5947   p = savegpr1 (abfd, p, r);
5948   bfd_put_32 (abfd, BLR, p);
5949   return p + 4;
5950 }
5951 
5952 static bfd_byte *
5953 restgpr1 (bfd *abfd, bfd_byte *p, int r)
5954 {
5955   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5956   return p + 4;
5957 }
5958 
5959 static bfd_byte *
5960 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
5961 {
5962   p = restgpr1 (abfd, p, r);
5963   bfd_put_32 (abfd, BLR, p);
5964   return p + 4;
5965 }
5966 
5967 static bfd_byte *
5968 savefpr (bfd *abfd, bfd_byte *p, int r)
5969 {
5970   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5971   return p + 4;
5972 }
5973 
5974 static bfd_byte *
5975 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
5976 {
5977   p = savefpr (abfd, p, r);
5978   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5979   p = p + 4;
5980   bfd_put_32 (abfd, BLR, p);
5981   return p + 4;
5982 }
5983 
5984 static bfd_byte *
5985 restfpr (bfd *abfd, bfd_byte *p, int r)
5986 {
5987   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5988   return p + 4;
5989 }
5990 
5991 static bfd_byte *
5992 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
5993 {
5994   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5995   p = p + 4;
5996   p = restfpr (abfd, p, r);
5997   bfd_put_32 (abfd, MTLR_R0, p);
5998   p = p + 4;
5999   if (r == 29)
6000     {
6001       p = restfpr (abfd, p, 30);
6002       p = restfpr (abfd, p, 31);
6003     }
6004   bfd_put_32 (abfd, BLR, p);
6005   return p + 4;
6006 }
6007 
6008 static bfd_byte *
6009 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6010 {
6011   p = savefpr (abfd, p, r);
6012   bfd_put_32 (abfd, BLR, p);
6013   return p + 4;
6014 }
6015 
6016 static bfd_byte *
6017 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6018 {
6019   p = restfpr (abfd, p, r);
6020   bfd_put_32 (abfd, BLR, p);
6021   return p + 4;
6022 }
6023 
6024 static bfd_byte *
6025 savevr (bfd *abfd, bfd_byte *p, int r)
6026 {
6027   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6028   p = p + 4;
6029   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6030   return p + 4;
6031 }
6032 
6033 static bfd_byte *
6034 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6035 {
6036   p = savevr (abfd, p, r);
6037   bfd_put_32 (abfd, BLR, p);
6038   return p + 4;
6039 }
6040 
6041 static bfd_byte *
6042 restvr (bfd *abfd, bfd_byte *p, int r)
6043 {
6044   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6045   p = p + 4;
6046   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6047   return p + 4;
6048 }
6049 
6050 static bfd_byte *
6051 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6052 {
6053   p = restvr (abfd, p, r);
6054   bfd_put_32 (abfd, BLR, p);
6055   return p + 4;
6056 }
6057 
6058 /* Called via elf_link_hash_traverse to transfer dynamic linking
6059    information on function code symbol entries to their corresponding
6060    function descriptor symbol entries.  */
6061 
6062 static bfd_boolean
6063 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6064 {
6065   struct bfd_link_info *info;
6066   struct ppc_link_hash_table *htab;
6067   struct ppc_link_hash_entry *fh;
6068   struct ppc_link_hash_entry *fdh;
6069   bfd_boolean force_local;
6070 
6071   fh = (struct ppc_link_hash_entry *) h;
6072   if (fh->elf.root.type == bfd_link_hash_indirect)
6073     return TRUE;
6074 
6075   if (!fh->is_func)
6076     return TRUE;
6077 
6078   if (fh->elf.root.root.string[0] != '.'
6079       || fh->elf.root.root.string[1] == '\0')
6080     return TRUE;
6081 
6082   info = inf;
6083   htab = ppc_hash_table (info);
6084   if (htab == NULL)
6085     return FALSE;
6086 
6087   /* Find the corresponding function descriptor symbol.  */
6088   fdh = lookup_fdh (fh, htab);
6089 
6090   /* Resolve undefined references to dot-symbols as the value
6091      in the function descriptor, if we have one in a regular object.
6092      This is to satisfy cases like ".quad .foo".  Calls to functions
6093      in dynamic objects are handled elsewhere.  */
6094   if ((fh->elf.root.type == bfd_link_hash_undefined
6095        || fh->elf.root.type == bfd_link_hash_undefweak)
6096       && (fdh->elf.root.type == bfd_link_hash_defined
6097 	  || fdh->elf.root.type == bfd_link_hash_defweak)
6098       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6099       && opd_entry_value (fdh->elf.root.u.def.section,
6100 			  fdh->elf.root.u.def.value,
6101 			  &fh->elf.root.u.def.section,
6102 			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6103     {
6104       fh->elf.root.type = fdh->elf.root.type;
6105       fh->elf.forced_local = 1;
6106       fh->elf.def_regular = fdh->elf.def_regular;
6107       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6108     }
6109 
6110   if (!fh->elf.dynamic)
6111     {
6112       struct plt_entry *ent;
6113 
6114       for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6115 	if (ent->plt.refcount > 0)
6116 	  break;
6117       if (ent == NULL)
6118 	return TRUE;
6119     }
6120 
6121   /* Create a descriptor as undefined if necessary.  */
6122   if (fdh == NULL
6123       && !bfd_link_executable (info)
6124       && (fh->elf.root.type == bfd_link_hash_undefined
6125 	  || fh->elf.root.type == bfd_link_hash_undefweak))
6126     {
6127       fdh = make_fdh (info, fh);
6128       if (fdh == NULL)
6129 	return FALSE;
6130     }
6131 
6132   /* We can't support overriding of symbols on a fake descriptor.  */
6133   if (fdh != NULL
6134       && fdh->fake
6135       && (fh->elf.root.type == bfd_link_hash_defined
6136 	  || fh->elf.root.type == bfd_link_hash_defweak))
6137     _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6138 
6139   /* Transfer dynamic linking information to the function descriptor.  */
6140   if (fdh != NULL)
6141     {
6142       fdh->elf.ref_regular |= fh->elf.ref_regular;
6143       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6144       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6145       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6146       fdh->elf.dynamic |= fh->elf.dynamic;
6147       fdh->elf.needs_plt |= (fh->elf.needs_plt
6148 			     || fh->elf.type == STT_FUNC
6149 			     || fh->elf.type == STT_GNU_IFUNC);
6150       move_plt_plist (fh, fdh);
6151 
6152       if (!fdh->elf.forced_local
6153 	  && fh->elf.dynindx != -1)
6154 	if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6155 	  return FALSE;
6156     }
6157 
6158   /* Now that the info is on the function descriptor, clear the
6159      function code sym info.  Any function code syms for which we
6160      don't have a definition in a regular file, we force local.
6161      This prevents a shared library from exporting syms that have
6162      been imported from another library.  Function code syms that
6163      are really in the library we must leave global to prevent the
6164      linker dragging in a definition from a static library.  */
6165   force_local = (!fh->elf.def_regular
6166 		 || fdh == NULL
6167 		 || !fdh->elf.def_regular
6168 		 || fdh->elf.forced_local);
6169   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6170 
6171   return TRUE;
6172 }
6173 
6174 static const struct sfpr_def_parms save_res_funcs[] =
6175   {
6176     { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6177     { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6178     { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6179     { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6180     { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6181     { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6182     { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6183     { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6184     { "._savef", 14, 31, savefpr, savefpr1_tail },
6185     { "._restf", 14, 31, restfpr, restfpr1_tail },
6186     { "_savevr_", 20, 31, savevr, savevr_tail },
6187     { "_restvr_", 20, 31, restvr, restvr_tail }
6188   };
6189 
6190 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6191    this hook to a) provide some gcc support functions, and b) transfer
6192    dynamic linking information gathered so far on function code symbol
6193    entries, to their corresponding function descriptor symbol entries.  */
6194 
6195 static bfd_boolean
6196 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6197 			    struct bfd_link_info *info)
6198 {
6199   struct ppc_link_hash_table *htab;
6200 
6201   htab = ppc_hash_table (info);
6202   if (htab == NULL)
6203     return FALSE;
6204 
6205   /* Provide any missing _save* and _rest* functions.  */
6206   if (htab->sfpr != NULL)
6207     {
6208       unsigned int i;
6209 
6210       htab->sfpr->size = 0;
6211       for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
6212 	if (!sfpr_define (info, &save_res_funcs[i], NULL))
6213 	  return FALSE;
6214       if (htab->sfpr->size == 0)
6215 	htab->sfpr->flags |= SEC_EXCLUDE;
6216     }
6217 
6218   if (bfd_link_relocatable (info))
6219     return TRUE;
6220 
6221   if (htab->elf.hgot != NULL)
6222     {
6223       _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6224       /* Make .TOC. defined so as to prevent it being made dynamic.
6225 	 The wrong value here is fixed later in ppc64_elf_set_toc.  */
6226       if (!htab->elf.hgot->def_regular
6227 	  || htab->elf.hgot->root.type != bfd_link_hash_defined)
6228 	{
6229 	  htab->elf.hgot->root.type = bfd_link_hash_defined;
6230 	  htab->elf.hgot->root.u.def.value = 0;
6231 	  htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
6232 	  htab->elf.hgot->def_regular = 1;
6233 	  htab->elf.hgot->root.linker_def = 1;
6234 	}
6235       htab->elf.hgot->type = STT_OBJECT;
6236       htab->elf.hgot->other
6237 	= (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
6238     }
6239 
6240   if (htab->need_func_desc_adj)
6241     {
6242       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6243       htab->need_func_desc_adj = 0;
6244     }
6245 
6246   return TRUE;
6247 }
6248 
6249 /* Find dynamic relocs for H that apply to read-only sections.  */
6250 
6251 static asection *
6252 readonly_dynrelocs (struct elf_link_hash_entry *h)
6253 {
6254   struct ppc_link_hash_entry *eh;
6255   struct elf_dyn_relocs *p;
6256 
6257   eh = (struct ppc_link_hash_entry *) h;
6258   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6259     {
6260       asection *s = p->sec->output_section;
6261 
6262       if (s != NULL && (s->flags & SEC_READONLY) != 0)
6263 	return p->sec;
6264     }
6265   return NULL;
6266 }
6267 
6268 /* Return true if we have dynamic relocs against H or any of its weak
6269    aliases, that apply to read-only sections.  Cannot be used after
6270    size_dynamic_sections.  */
6271 
6272 static bfd_boolean
6273 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
6274 {
6275   struct ppc_link_hash_entry *eh;
6276 
6277   eh = (struct ppc_link_hash_entry *) h;
6278   do
6279     {
6280       if (readonly_dynrelocs (&eh->elf))
6281 	return TRUE;
6282       eh = (struct ppc_link_hash_entry *) eh->elf.u.alias;
6283     }
6284   while (eh != NULL && &eh->elf != h);
6285 
6286   return FALSE;
6287 }
6288 
6289 /* Return whether EH has pc-relative dynamic relocs.  */
6290 
6291 static bfd_boolean
6292 pc_dynrelocs (struct ppc_link_hash_entry *eh)
6293 {
6294   struct elf_dyn_relocs *p;
6295 
6296   for (p = eh->dyn_relocs; p != NULL; p = p->next)
6297     if (p->pc_count != 0)
6298       return TRUE;
6299   return FALSE;
6300 }
6301 
6302 /* Return true if a global entry stub will be created for H.  Valid
6303    for ELFv2 before plt entries have been allocated.  */
6304 
6305 static bfd_boolean
6306 global_entry_stub (struct elf_link_hash_entry *h)
6307 {
6308   struct plt_entry *pent;
6309 
6310   if (!h->pointer_equality_needed
6311       || h->def_regular)
6312     return FALSE;
6313 
6314   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
6315     if (pent->plt.refcount > 0
6316 	&& pent->addend == 0)
6317       return TRUE;
6318 
6319   return FALSE;
6320 }
6321 
6322 /* Adjust a symbol defined by a dynamic object and referenced by a
6323    regular object.  The current definition is in some section of the
6324    dynamic object, but we're not including those sections.  We have to
6325    change the definition to something the rest of the link can
6326    understand.  */
6327 
6328 static bfd_boolean
6329 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6330 				 struct elf_link_hash_entry *h)
6331 {
6332   struct ppc_link_hash_table *htab;
6333   asection *s, *srel;
6334 
6335   htab = ppc_hash_table (info);
6336   if (htab == NULL)
6337     return FALSE;
6338 
6339   /* Deal with function syms.  */
6340   if (h->type == STT_FUNC
6341       || h->type == STT_GNU_IFUNC
6342       || h->needs_plt)
6343     {
6344       bfd_boolean local = (((struct ppc_link_hash_entry *) h)->save_res
6345 			   || SYMBOL_CALLS_LOCAL (info, h)
6346 			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
6347       /* Discard dyn_relocs when non-pic if we've decided that a
6348 	 function symbol is local and not an ifunc.  We keep dynamic
6349 	 relocs for ifuncs when local rather than always emitting a
6350 	 plt call stub for them and defining the symbol on the call
6351 	 stub.  We can't do that for ELFv1 anyway (a function symbol
6352 	 is defined on a descriptor, not code) and it can be faster at
6353 	 run-time due to not needing to bounce through a stub.  The
6354 	 dyn_relocs for ifuncs will be applied even in a static
6355 	 executable.  */
6356       if (!bfd_link_pic (info)
6357 	  && h->type != STT_GNU_IFUNC
6358 	  && local)
6359 	((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6360 
6361       /* Clear procedure linkage table information for any symbol that
6362 	 won't need a .plt entry.  */
6363       struct plt_entry *ent;
6364       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6365 	if (ent->plt.refcount > 0)
6366 	  break;
6367       if (ent == NULL
6368 	  || (h->type != STT_GNU_IFUNC
6369 	      && local
6370 	      && (htab->can_convert_all_inline_plt
6371 		  || (((struct ppc_link_hash_entry *) h)->tls_mask
6372 		      & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
6373 	{
6374 	  h->plt.plist = NULL;
6375 	  h->needs_plt = 0;
6376 	  h->pointer_equality_needed = 0;
6377 	}
6378       else if (abiversion (info->output_bfd) >= 2)
6379 	{
6380 	  /* Taking a function's address in a read/write section
6381 	     doesn't require us to define the function symbol in the
6382 	     executable on a global entry stub.  A dynamic reloc can
6383 	     be used instead.  The reason we prefer a few more dynamic
6384 	     relocs is that calling via a global entry stub costs a
6385 	     few more instructions, and pointer_equality_needed causes
6386 	     extra work in ld.so when resolving these symbols.  */
6387 	  if (global_entry_stub (h))
6388 	    {
6389 	      if (!readonly_dynrelocs (h))
6390 		{
6391 		  h->pointer_equality_needed = 0;
6392 		  /* If we haven't seen a branch reloc and the symbol
6393 		     isn't an ifunc then we don't need a plt entry.  */
6394 		  if (!h->needs_plt)
6395 		    h->plt.plist = NULL;
6396 		}
6397 	      else if (!bfd_link_pic (info))
6398 		/* We are going to be defining the function symbol on the
6399 		   plt stub, so no dyn_relocs needed when non-pic.  */
6400 		((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6401 	    }
6402 
6403 	  /* ELFv2 function symbols can't have copy relocs.  */
6404 	  return TRUE;
6405 	}
6406       else if (!h->needs_plt
6407 	       && !readonly_dynrelocs (h))
6408 	{
6409 	  /* If we haven't seen a branch reloc and the symbol isn't an
6410 	     ifunc then we don't need a plt entry.  */
6411 	  h->plt.plist = NULL;
6412 	  h->pointer_equality_needed = 0;
6413 	  return TRUE;
6414 	}
6415     }
6416   else
6417     h->plt.plist = NULL;
6418 
6419   /* If this is a weak symbol, and there is a real definition, the
6420      processor independent code will have arranged for us to see the
6421      real definition first, and we can just use the same value.  */
6422   if (h->is_weakalias)
6423     {
6424       struct elf_link_hash_entry *def = weakdef (h);
6425       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
6426       h->root.u.def.section = def->root.u.def.section;
6427       h->root.u.def.value = def->root.u.def.value;
6428       if (def->root.u.def.section == htab->elf.sdynbss
6429 	  || def->root.u.def.section == htab->elf.sdynrelro)
6430 	((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6431       return TRUE;
6432     }
6433 
6434   /* If we are creating a shared library, we must presume that the
6435      only references to the symbol are via the global offset table.
6436      For such cases we need not do anything here; the relocations will
6437      be handled correctly by relocate_section.  */
6438   if (!bfd_link_executable (info))
6439     return TRUE;
6440 
6441   /* If there are no references to this symbol that do not use the
6442      GOT, we don't need to generate a copy reloc.  */
6443   if (!h->non_got_ref)
6444     return TRUE;
6445 
6446   /* Don't generate a copy reloc for symbols defined in the executable.  */
6447   if (!h->def_dynamic || !h->ref_regular || h->def_regular
6448 
6449       /* If -z nocopyreloc was given, don't generate them either.  */
6450       || info->nocopyreloc
6451 
6452       /* If we don't find any dynamic relocs in read-only sections, then
6453 	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6454       || (ELIMINATE_COPY_RELOCS
6455 	  && !h->needs_copy
6456 	  && !alias_readonly_dynrelocs (h))
6457 
6458       /* Protected variables do not work with .dynbss.  The copy in
6459 	 .dynbss won't be used by the shared library with the protected
6460 	 definition for the variable.  Text relocations are preferable
6461 	 to an incorrect program.  */
6462       || h->protected_def)
6463     return TRUE;
6464 
6465   if (h->type == STT_FUNC
6466       || h->type == STT_GNU_IFUNC)
6467     {
6468       /* .dynbss copies of function symbols only work if we have
6469 	 ELFv1 dot-symbols.  ELFv1 compilers since 2004 default to not
6470 	 use dot-symbols and set the function symbol size to the text
6471 	 size of the function rather than the size of the descriptor.
6472 	 That's wrong for copying a descriptor.  */
6473       if (((struct ppc_link_hash_entry *) h)->oh == NULL
6474 	  || !(h->size == 24 || h->size == 16))
6475 	return TRUE;
6476 
6477       /* We should never get here, but unfortunately there are old
6478 	 versions of gcc (circa gcc-3.2) that improperly for the
6479 	 ELFv1 ABI put initialized function pointers, vtable refs and
6480 	 suchlike in read-only sections.  Allow them to proceed, but
6481 	 warn that this might break at runtime.  */
6482       info->callbacks->einfo
6483 	(_("%P: copy reloc against `%pT' requires lazy plt linking; "
6484 	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6485 	 h->root.root.string);
6486     }
6487 
6488   /* This is a reference to a symbol defined by a dynamic object which
6489      is not a function.  */
6490 
6491   /* We must allocate the symbol in our .dynbss section, which will
6492      become part of the .bss section of the executable.  There will be
6493      an entry for this symbol in the .dynsym section.  The dynamic
6494      object will contain position independent code, so all references
6495      from the dynamic object to this symbol will go through the global
6496      offset table.  The dynamic linker will use the .dynsym entry to
6497      determine the address it must put in the global offset table, so
6498      both the dynamic object and the regular object will refer to the
6499      same memory location for the variable.  */
6500   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
6501     {
6502       s = htab->elf.sdynrelro;
6503       srel = htab->elf.sreldynrelro;
6504     }
6505   else
6506     {
6507       s = htab->elf.sdynbss;
6508       srel = htab->elf.srelbss;
6509     }
6510   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6511     {
6512       /* We must generate a R_PPC64_COPY reloc to tell the dynamic
6513 	 linker to copy the initial value out of the dynamic object
6514 	 and into the runtime process image.  */
6515       srel->size += sizeof (Elf64_External_Rela);
6516       h->needs_copy = 1;
6517     }
6518 
6519   /* We no longer want dyn_relocs.  */
6520   ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
6521   return _bfd_elf_adjust_dynamic_copy (info, h, s);
6522 }
6523 
6524 /* If given a function descriptor symbol, hide both the function code
6525    sym and the descriptor.  */
6526 static void
6527 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6528 		       struct elf_link_hash_entry *h,
6529 		       bfd_boolean force_local)
6530 {
6531   struct ppc_link_hash_entry *eh;
6532   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6533 
6534   if (ppc_hash_table (info) == NULL)
6535     return;
6536 
6537   eh = (struct ppc_link_hash_entry *) h;
6538   if (eh->is_func_descriptor)
6539     {
6540       struct ppc_link_hash_entry *fh = eh->oh;
6541 
6542       if (fh == NULL)
6543 	{
6544 	  const char *p, *q;
6545 	  struct elf_link_hash_table *htab = elf_hash_table (info);
6546 	  char save;
6547 
6548 	  /* We aren't supposed to use alloca in BFD because on
6549 	     systems which do not have alloca the version in libiberty
6550 	     calls xmalloc, which might cause the program to crash
6551 	     when it runs out of memory.  This function doesn't have a
6552 	     return status, so there's no way to gracefully return an
6553 	     error.  So cheat.  We know that string[-1] can be safely
6554 	     accessed;  It's either a string in an ELF string table,
6555 	     or allocated in an objalloc structure.  */
6556 
6557 	  p = eh->elf.root.root.string - 1;
6558 	  save = *p;
6559 	  *(char *) p = '.';
6560 	  fh = (struct ppc_link_hash_entry *)
6561 	    elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
6562 	  *(char *) p = save;
6563 
6564 	  /* Unfortunately, if it so happens that the string we were
6565 	     looking for was allocated immediately before this string,
6566 	     then we overwrote the string terminator.  That's the only
6567 	     reason the lookup should fail.  */
6568 	  if (fh == NULL)
6569 	    {
6570 	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6571 	      while (q >= eh->elf.root.root.string && *q == *p)
6572 		--q, --p;
6573 	      if (q < eh->elf.root.root.string && *p == '.')
6574 		fh = (struct ppc_link_hash_entry *)
6575 		  elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
6576 	    }
6577 	  if (fh != NULL)
6578 	    {
6579 	      eh->oh = fh;
6580 	      fh->oh = eh;
6581 	    }
6582 	}
6583       if (fh != NULL)
6584 	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6585     }
6586 }
6587 
6588 static bfd_boolean
6589 get_sym_h (struct elf_link_hash_entry **hp,
6590 	   Elf_Internal_Sym **symp,
6591 	   asection **symsecp,
6592 	   unsigned char **tls_maskp,
6593 	   Elf_Internal_Sym **locsymsp,
6594 	   unsigned long r_symndx,
6595 	   bfd *ibfd)
6596 {
6597   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6598 
6599   if (r_symndx >= symtab_hdr->sh_info)
6600     {
6601       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6602       struct elf_link_hash_entry *h;
6603 
6604       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6605       h = elf_follow_link (h);
6606 
6607       if (hp != NULL)
6608 	*hp = h;
6609 
6610       if (symp != NULL)
6611 	*symp = NULL;
6612 
6613       if (symsecp != NULL)
6614 	{
6615 	  asection *symsec = NULL;
6616 	  if (h->root.type == bfd_link_hash_defined
6617 	      || h->root.type == bfd_link_hash_defweak)
6618 	    symsec = h->root.u.def.section;
6619 	  *symsecp = symsec;
6620 	}
6621 
6622       if (tls_maskp != NULL)
6623 	{
6624 	  struct ppc_link_hash_entry *eh;
6625 
6626 	  eh = (struct ppc_link_hash_entry *) h;
6627 	  *tls_maskp = &eh->tls_mask;
6628 	}
6629     }
6630   else
6631     {
6632       Elf_Internal_Sym *sym;
6633       Elf_Internal_Sym *locsyms = *locsymsp;
6634 
6635       if (locsyms == NULL)
6636 	{
6637 	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6638 	  if (locsyms == NULL)
6639 	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6640 					    symtab_hdr->sh_info,
6641 					    0, NULL, NULL, NULL);
6642 	  if (locsyms == NULL)
6643 	    return FALSE;
6644 	  *locsymsp = locsyms;
6645 	}
6646       sym = locsyms + r_symndx;
6647 
6648       if (hp != NULL)
6649 	*hp = NULL;
6650 
6651       if (symp != NULL)
6652 	*symp = sym;
6653 
6654       if (symsecp != NULL)
6655 	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6656 
6657       if (tls_maskp != NULL)
6658 	{
6659 	  struct got_entry **lgot_ents;
6660 	  unsigned char *tls_mask;
6661 
6662 	  tls_mask = NULL;
6663 	  lgot_ents = elf_local_got_ents (ibfd);
6664 	  if (lgot_ents != NULL)
6665 	    {
6666 	      struct plt_entry **local_plt = (struct plt_entry **)
6667 		(lgot_ents + symtab_hdr->sh_info);
6668 	      unsigned char *lgot_masks = (unsigned char *)
6669 		(local_plt + symtab_hdr->sh_info);
6670 	      tls_mask = &lgot_masks[r_symndx];
6671 	    }
6672 	  *tls_maskp = tls_mask;
6673 	}
6674     }
6675   return TRUE;
6676 }
6677 
6678 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6679    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6680    type suitable for optimization, and 1 otherwise.  */
6681 
6682 static int
6683 get_tls_mask (unsigned char **tls_maskp,
6684 	      unsigned long *toc_symndx,
6685 	      bfd_vma *toc_addend,
6686 	      Elf_Internal_Sym **locsymsp,
6687 	      const Elf_Internal_Rela *rel,
6688 	      bfd *ibfd)
6689 {
6690   unsigned long r_symndx;
6691   int next_r;
6692   struct elf_link_hash_entry *h;
6693   Elf_Internal_Sym *sym;
6694   asection *sec;
6695   bfd_vma off;
6696 
6697   r_symndx = ELF64_R_SYM (rel->r_info);
6698   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6699     return 0;
6700 
6701   if ((*tls_maskp != NULL
6702        && (**tls_maskp & TLS_TLS) != 0
6703        && **tls_maskp != (TLS_TLS | TLS_MARK))
6704       || sec == NULL
6705       || ppc64_elf_section_data (sec) == NULL
6706       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6707     return 1;
6708 
6709   /* Look inside a TOC section too.  */
6710   if (h != NULL)
6711     {
6712       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6713       off = h->root.u.def.value;
6714     }
6715   else
6716     off = sym->st_value;
6717   off += rel->r_addend;
6718   BFD_ASSERT (off % 8 == 0);
6719   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6720   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6721   if (toc_symndx != NULL)
6722     *toc_symndx = r_symndx;
6723   if (toc_addend != NULL)
6724     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6725   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6726     return 0;
6727   if ((h == NULL || is_static_defined (h))
6728       && (next_r == -1 || next_r == -2))
6729     return 1 - next_r;
6730   return 1;
6731 }
6732 
6733 /* Find (or create) an entry in the tocsave hash table.  */
6734 
6735 static struct tocsave_entry *
6736 tocsave_find (struct ppc_link_hash_table *htab,
6737 	      enum insert_option insert,
6738 	      Elf_Internal_Sym **local_syms,
6739 	      const Elf_Internal_Rela *irela,
6740 	      bfd *ibfd)
6741 {
6742   unsigned long r_indx;
6743   struct elf_link_hash_entry *h;
6744   Elf_Internal_Sym *sym;
6745   struct tocsave_entry ent, *p;
6746   hashval_t hash;
6747   struct tocsave_entry **slot;
6748 
6749   r_indx = ELF64_R_SYM (irela->r_info);
6750   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6751     return NULL;
6752   if (ent.sec == NULL || ent.sec->output_section == NULL)
6753     {
6754       _bfd_error_handler
6755 	(_("%pB: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
6756       return NULL;
6757     }
6758 
6759   if (h != NULL)
6760     ent.offset = h->root.u.def.value;
6761   else
6762     ent.offset = sym->st_value;
6763   ent.offset += irela->r_addend;
6764 
6765   hash = tocsave_htab_hash (&ent);
6766   slot = ((struct tocsave_entry **)
6767 	  htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6768   if (slot == NULL)
6769     return NULL;
6770 
6771   if (*slot == NULL)
6772     {
6773       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6774       if (p == NULL)
6775 	return NULL;
6776       *p = ent;
6777       *slot = p;
6778     }
6779   return *slot;
6780 }
6781 
6782 /* Adjust all global syms defined in opd sections.  In gcc generated
6783    code for the old ABI, these will already have been done.  */
6784 
6785 static bfd_boolean
6786 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6787 {
6788   struct ppc_link_hash_entry *eh;
6789   asection *sym_sec;
6790   struct _opd_sec_data *opd;
6791 
6792   if (h->root.type == bfd_link_hash_indirect)
6793     return TRUE;
6794 
6795   if (h->root.type != bfd_link_hash_defined
6796       && h->root.type != bfd_link_hash_defweak)
6797     return TRUE;
6798 
6799   eh = (struct ppc_link_hash_entry *) h;
6800   if (eh->adjust_done)
6801     return TRUE;
6802 
6803   sym_sec = eh->elf.root.u.def.section;
6804   opd = get_opd_info (sym_sec);
6805   if (opd != NULL && opd->adjust != NULL)
6806     {
6807       long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
6808       if (adjust == -1)
6809 	{
6810 	  /* This entry has been deleted.  */
6811 	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6812 	  if (dsec == NULL)
6813 	    {
6814 	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6815 		if (discarded_section (dsec))
6816 		  {
6817 		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6818 		    break;
6819 		  }
6820 	    }
6821 	  eh->elf.root.u.def.value = 0;
6822 	  eh->elf.root.u.def.section = dsec;
6823 	}
6824       else
6825 	eh->elf.root.u.def.value += adjust;
6826       eh->adjust_done = 1;
6827     }
6828   return TRUE;
6829 }
6830 
6831 /* Handles decrementing dynamic reloc counts for the reloc specified by
6832    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
6833    have already been determined.  */
6834 
6835 static bfd_boolean
6836 dec_dynrel_count (bfd_vma r_info,
6837 		  asection *sec,
6838 		  struct bfd_link_info *info,
6839 		  Elf_Internal_Sym **local_syms,
6840 		  struct elf_link_hash_entry *h,
6841 		  Elf_Internal_Sym *sym)
6842 {
6843   enum elf_ppc64_reloc_type r_type;
6844   asection *sym_sec = NULL;
6845 
6846   /* Can this reloc be dynamic?  This switch, and later tests here
6847      should be kept in sync with the code in check_relocs.  */
6848   r_type = ELF64_R_TYPE (r_info);
6849   switch (r_type)
6850     {
6851     default:
6852       return TRUE;
6853 
6854     case R_PPC64_TOC16:
6855     case R_PPC64_TOC16_DS:
6856     case R_PPC64_TOC16_LO:
6857     case R_PPC64_TOC16_HI:
6858     case R_PPC64_TOC16_HA:
6859     case R_PPC64_TOC16_LO_DS:
6860       if (h == NULL)
6861 	return TRUE;
6862       break;
6863 
6864     case R_PPC64_TPREL16:
6865     case R_PPC64_TPREL16_LO:
6866     case R_PPC64_TPREL16_HI:
6867     case R_PPC64_TPREL16_HA:
6868     case R_PPC64_TPREL16_DS:
6869     case R_PPC64_TPREL16_LO_DS:
6870     case R_PPC64_TPREL16_HIGH:
6871     case R_PPC64_TPREL16_HIGHA:
6872     case R_PPC64_TPREL16_HIGHER:
6873     case R_PPC64_TPREL16_HIGHERA:
6874     case R_PPC64_TPREL16_HIGHEST:
6875     case R_PPC64_TPREL16_HIGHESTA:
6876     case R_PPC64_TPREL64:
6877     case R_PPC64_TPREL34:
6878     case R_PPC64_DTPMOD64:
6879     case R_PPC64_DTPREL64:
6880     case R_PPC64_ADDR64:
6881     case R_PPC64_REL30:
6882     case R_PPC64_REL32:
6883     case R_PPC64_REL64:
6884     case R_PPC64_ADDR14:
6885     case R_PPC64_ADDR14_BRNTAKEN:
6886     case R_PPC64_ADDR14_BRTAKEN:
6887     case R_PPC64_ADDR16:
6888     case R_PPC64_ADDR16_DS:
6889     case R_PPC64_ADDR16_HA:
6890     case R_PPC64_ADDR16_HI:
6891     case R_PPC64_ADDR16_HIGH:
6892     case R_PPC64_ADDR16_HIGHA:
6893     case R_PPC64_ADDR16_HIGHER:
6894     case R_PPC64_ADDR16_HIGHERA:
6895     case R_PPC64_ADDR16_HIGHEST:
6896     case R_PPC64_ADDR16_HIGHESTA:
6897     case R_PPC64_ADDR16_LO:
6898     case R_PPC64_ADDR16_LO_DS:
6899     case R_PPC64_ADDR24:
6900     case R_PPC64_ADDR32:
6901     case R_PPC64_UADDR16:
6902     case R_PPC64_UADDR32:
6903     case R_PPC64_UADDR64:
6904     case R_PPC64_TOC:
6905     case R_PPC64_D34:
6906     case R_PPC64_D34_LO:
6907     case R_PPC64_D34_HI30:
6908     case R_PPC64_D34_HA30:
6909     case R_PPC64_ADDR16_HIGHER34:
6910     case R_PPC64_ADDR16_HIGHERA34:
6911     case R_PPC64_ADDR16_HIGHEST34:
6912     case R_PPC64_ADDR16_HIGHESTA34:
6913     case R_PPC64_D28:
6914       break;
6915     }
6916 
6917   if (local_syms != NULL)
6918     {
6919       unsigned long r_symndx;
6920       bfd *ibfd = sec->owner;
6921 
6922       r_symndx = ELF64_R_SYM (r_info);
6923       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
6924 	return FALSE;
6925     }
6926 
6927   if ((h != NULL
6928        && (h->root.type == bfd_link_hash_defweak
6929 	   || !h->def_regular))
6930       || (h != NULL
6931 	  && !bfd_link_executable (info)
6932 	  && !SYMBOLIC_BIND (info, h))
6933       || (bfd_link_pic (info)
6934 	  && must_be_dyn_reloc (info, r_type))
6935       || (!bfd_link_pic (info)
6936 	  && (h != NULL
6937 	      ? h->type == STT_GNU_IFUNC
6938 	      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
6939     ;
6940   else
6941     return TRUE;
6942 
6943   if (h != NULL)
6944     {
6945       struct elf_dyn_relocs *p;
6946       struct elf_dyn_relocs **pp;
6947       pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
6948 
6949       /* elf_gc_sweep may have already removed all dyn relocs associated
6950 	 with local syms for a given section.  Also, symbol flags are
6951 	 changed by elf_gc_sweep_symbol, confusing the test above.  Don't
6952 	 report a dynreloc miscount.  */
6953       if (*pp == NULL && info->gc_sections)
6954 	return TRUE;
6955 
6956       while ((p = *pp) != NULL)
6957 	{
6958 	  if (p->sec == sec)
6959 	    {
6960 	      if (!must_be_dyn_reloc (info, r_type))
6961 		p->pc_count -= 1;
6962 	      p->count -= 1;
6963 	      if (p->count == 0)
6964 		*pp = p->next;
6965 	      return TRUE;
6966 	    }
6967 	  pp = &p->next;
6968 	}
6969     }
6970   else
6971     {
6972       struct ppc_dyn_relocs *p;
6973       struct ppc_dyn_relocs **pp;
6974       void *vpp;
6975       bfd_boolean is_ifunc;
6976 
6977       if (local_syms == NULL)
6978 	sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
6979       if (sym_sec == NULL)
6980 	sym_sec = sec;
6981 
6982       vpp = &elf_section_data (sym_sec)->local_dynrel;
6983       pp = (struct ppc_dyn_relocs **) vpp;
6984 
6985       if (*pp == NULL && info->gc_sections)
6986 	return TRUE;
6987 
6988       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
6989       while ((p = *pp) != NULL)
6990 	{
6991 	  if (p->sec == sec && p->ifunc == is_ifunc)
6992 	    {
6993 	      p->count -= 1;
6994 	      if (p->count == 0)
6995 		*pp = p->next;
6996 	      return TRUE;
6997 	    }
6998 	  pp = &p->next;
6999 	}
7000     }
7001 
7002   /* xgettext:c-format */
7003   _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
7004 		      sec->owner, sec);
7005   bfd_set_error (bfd_error_bad_value);
7006   return FALSE;
7007 }
7008 
7009 /* Remove unused Official Procedure Descriptor entries.  Currently we
7010    only remove those associated with functions in discarded link-once
7011    sections, or weakly defined functions that have been overridden.  It
7012    would be possible to remove many more entries for statically linked
7013    applications.  */
7014 
7015 bfd_boolean
7016 ppc64_elf_edit_opd (struct bfd_link_info *info)
7017 {
7018   bfd *ibfd;
7019   bfd_boolean some_edited = FALSE;
7020   asection *need_pad = NULL;
7021   struct ppc_link_hash_table *htab;
7022 
7023   htab = ppc_hash_table (info);
7024   if (htab == NULL)
7025     return FALSE;
7026 
7027   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7028     {
7029       asection *sec;
7030       Elf_Internal_Rela *relstart, *rel, *relend;
7031       Elf_Internal_Shdr *symtab_hdr;
7032       Elf_Internal_Sym *local_syms;
7033       struct _opd_sec_data *opd;
7034       bfd_boolean need_edit, add_aux_fields, broken;
7035       bfd_size_type cnt_16b = 0;
7036 
7037       if (!is_ppc64_elf (ibfd))
7038 	continue;
7039 
7040       sec = bfd_get_section_by_name (ibfd, ".opd");
7041       if (sec == NULL || sec->size == 0)
7042 	continue;
7043 
7044       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7045 	continue;
7046 
7047       if (sec->output_section == bfd_abs_section_ptr)
7048 	continue;
7049 
7050       /* Look through the section relocs.  */
7051       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7052 	continue;
7053 
7054       local_syms = NULL;
7055       symtab_hdr = &elf_symtab_hdr (ibfd);
7056 
7057       /* Read the relocations.  */
7058       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7059 					    info->keep_memory);
7060       if (relstart == NULL)
7061 	return FALSE;
7062 
7063       /* First run through the relocs to check they are sane, and to
7064 	 determine whether we need to edit this opd section.  */
7065       need_edit = FALSE;
7066       broken = FALSE;
7067       need_pad = sec;
7068       relend = relstart + sec->reloc_count;
7069       for (rel = relstart; rel < relend; )
7070 	{
7071 	  enum elf_ppc64_reloc_type r_type;
7072 	  unsigned long r_symndx;
7073 	  asection *sym_sec;
7074 	  struct elf_link_hash_entry *h;
7075 	  Elf_Internal_Sym *sym;
7076 	  bfd_vma offset;
7077 
7078 	  /* .opd contains an array of 16 or 24 byte entries.  We're
7079 	     only interested in the reloc pointing to a function entry
7080 	     point.  */
7081 	  offset = rel->r_offset;
7082 	  if (rel + 1 == relend
7083 	      || rel[1].r_offset != offset + 8)
7084 	    {
7085 	      /* If someone messes with .opd alignment then after a
7086 		 "ld -r" we might have padding in the middle of .opd.
7087 		 Also, there's nothing to prevent someone putting
7088 		 something silly in .opd with the assembler.  No .opd
7089 		 optimization for them!  */
7090 	    broken_opd:
7091 	      _bfd_error_handler
7092 		(_("%pB: .opd is not a regular array of opd entries"), ibfd);
7093 	      broken = TRUE;
7094 	      break;
7095 	    }
7096 
7097 	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7098 	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7099 	    {
7100 	      _bfd_error_handler
7101 		/* xgettext:c-format */
7102 		(_("%pB: unexpected reloc type %u in .opd section"),
7103 		 ibfd, r_type);
7104 	      broken = TRUE;
7105 	      break;
7106 	    }
7107 
7108 	  r_symndx = ELF64_R_SYM (rel->r_info);
7109 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7110 			  r_symndx, ibfd))
7111 	    goto error_ret;
7112 
7113 	  if (sym_sec == NULL || sym_sec->owner == NULL)
7114 	    {
7115 	      const char *sym_name;
7116 	      if (h != NULL)
7117 		sym_name = h->root.root.string;
7118 	      else
7119 		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7120 					     sym_sec);
7121 
7122 	      _bfd_error_handler
7123 		/* xgettext:c-format */
7124 		(_("%pB: undefined sym `%s' in .opd section"),
7125 		 ibfd, sym_name);
7126 	      broken = TRUE;
7127 	      break;
7128 	    }
7129 
7130 	  /* opd entries are always for functions defined in the
7131 	     current input bfd.  If the symbol isn't defined in the
7132 	     input bfd, then we won't be using the function in this
7133 	     bfd;  It must be defined in a linkonce section in another
7134 	     bfd, or is weak.  It's also possible that we are
7135 	     discarding the function due to a linker script /DISCARD/,
7136 	     which we test for via the output_section.  */
7137 	  if (sym_sec->owner != ibfd
7138 	      || sym_sec->output_section == bfd_abs_section_ptr)
7139 	    need_edit = TRUE;
7140 
7141 	  rel += 2;
7142 	  if (rel + 1 == relend
7143 	      || (rel + 2 < relend
7144 		  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7145 	    ++rel;
7146 
7147 	  if (rel == relend)
7148 	    {
7149 	      if (sec->size == offset + 24)
7150 		{
7151 		  need_pad = NULL;
7152 		  break;
7153 		}
7154 	      if (sec->size == offset + 16)
7155 		{
7156 		  cnt_16b++;
7157 		  break;
7158 		}
7159 	      goto broken_opd;
7160 	    }
7161 	  else if (rel + 1 < relend
7162 		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7163 		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7164 	    {
7165 	      if (rel[0].r_offset == offset + 16)
7166 		cnt_16b++;
7167 	      else if (rel[0].r_offset != offset + 24)
7168 		goto broken_opd;
7169 	    }
7170 	  else
7171 	    goto broken_opd;
7172 	}
7173 
7174       add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7175 
7176       if (!broken && (need_edit || add_aux_fields))
7177 	{
7178 	  Elf_Internal_Rela *write_rel;
7179 	  Elf_Internal_Shdr *rel_hdr;
7180 	  bfd_byte *rptr, *wptr;
7181 	  bfd_byte *new_contents;
7182 	  bfd_size_type amt;
7183 
7184 	  new_contents = NULL;
7185 	  amt = OPD_NDX (sec->size) * sizeof (long);
7186 	  opd = &ppc64_elf_section_data (sec)->u.opd;
7187 	  opd->adjust = bfd_zalloc (sec->owner, amt);
7188 	  if (opd->adjust == NULL)
7189 	    return FALSE;
7190 
7191 	  /* This seems a waste of time as input .opd sections are all
7192 	     zeros as generated by gcc, but I suppose there's no reason
7193 	     this will always be so.  We might start putting something in
7194 	     the third word of .opd entries.  */
7195 	  if ((sec->flags & SEC_IN_MEMORY) == 0)
7196 	    {
7197 	      bfd_byte *loc;
7198 	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7199 		{
7200 		  if (loc != NULL)
7201 		    free (loc);
7202 		error_ret:
7203 		  if (local_syms != NULL
7204 		      && symtab_hdr->contents != (unsigned char *) local_syms)
7205 		    free (local_syms);
7206 		  if (elf_section_data (sec)->relocs != relstart)
7207 		    free (relstart);
7208 		  return FALSE;
7209 		}
7210 	      sec->contents = loc;
7211 	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7212 	    }
7213 
7214 	  elf_section_data (sec)->relocs = relstart;
7215 
7216 	  new_contents = sec->contents;
7217 	  if (add_aux_fields)
7218 	    {
7219 	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7220 	      if (new_contents == NULL)
7221 		return FALSE;
7222 	      need_pad = NULL;
7223 	    }
7224 	  wptr = new_contents;
7225 	  rptr = sec->contents;
7226 	  write_rel = relstart;
7227 	  for (rel = relstart; rel < relend; )
7228 	    {
7229 	      unsigned long r_symndx;
7230 	      asection *sym_sec;
7231 	      struct elf_link_hash_entry *h;
7232 	      struct ppc_link_hash_entry *fdh = NULL;
7233 	      Elf_Internal_Sym *sym;
7234 	      long opd_ent_size;
7235 	      Elf_Internal_Rela *next_rel;
7236 	      bfd_boolean skip;
7237 
7238 	      r_symndx = ELF64_R_SYM (rel->r_info);
7239 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7240 			      r_symndx, ibfd))
7241 		goto error_ret;
7242 
7243 	      next_rel = rel + 2;
7244 	      if (next_rel + 1 == relend
7245 		  || (next_rel + 2 < relend
7246 		      && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
7247 		++next_rel;
7248 
7249 	      /* See if the .opd entry is full 24 byte or
7250 		 16 byte (with fd_aux entry overlapped with next
7251 		 fd_func).  */
7252 	      opd_ent_size = 24;
7253 	      if (next_rel == relend)
7254 		{
7255 		  if (sec->size == rel->r_offset + 16)
7256 		    opd_ent_size = 16;
7257 		}
7258 	      else if (next_rel->r_offset == rel->r_offset + 16)
7259 		opd_ent_size = 16;
7260 
7261 	      if (h != NULL
7262 		  && h->root.root.string[0] == '.')
7263 		{
7264 		  fdh = ((struct ppc_link_hash_entry *) h)->oh;
7265 		  if (fdh != NULL)
7266 		    {
7267 		      fdh = ppc_follow_link (fdh);
7268 		      if (fdh->elf.root.type != bfd_link_hash_defined
7269 			  && fdh->elf.root.type != bfd_link_hash_defweak)
7270 			fdh = NULL;
7271 		    }
7272 		}
7273 
7274 	      skip = (sym_sec->owner != ibfd
7275 		      || sym_sec->output_section == bfd_abs_section_ptr);
7276 	      if (skip)
7277 		{
7278 		  if (fdh != NULL && sym_sec->owner == ibfd)
7279 		    {
7280 		      /* Arrange for the function descriptor sym
7281 			 to be dropped.  */
7282 		      fdh->elf.root.u.def.value = 0;
7283 		      fdh->elf.root.u.def.section = sym_sec;
7284 		    }
7285 		  opd->adjust[OPD_NDX (rel->r_offset)] = -1;
7286 
7287 		  if (NO_OPD_RELOCS || bfd_link_relocatable (info))
7288 		    rel = next_rel;
7289 		  else
7290 		    while (1)
7291 		      {
7292 			if (!dec_dynrel_count (rel->r_info, sec, info,
7293 					       NULL, h, sym))
7294 			  goto error_ret;
7295 
7296 			if (++rel == next_rel)
7297 			  break;
7298 
7299 			r_symndx = ELF64_R_SYM (rel->r_info);
7300 			if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7301 					r_symndx, ibfd))
7302 			  goto error_ret;
7303 		      }
7304 		}
7305 	      else
7306 		{
7307 		  /* We'll be keeping this opd entry.  */
7308 		  long adjust;
7309 
7310 		  if (fdh != NULL)
7311 		    {
7312 		      /* Redefine the function descriptor symbol to
7313 			 this location in the opd section.  It is
7314 			 necessary to update the value here rather
7315 			 than using an array of adjustments as we do
7316 			 for local symbols, because various places
7317 			 in the generic ELF code use the value
7318 			 stored in u.def.value.  */
7319 		      fdh->elf.root.u.def.value = wptr - new_contents;
7320 		      fdh->adjust_done = 1;
7321 		    }
7322 
7323 		  /* Local syms are a bit tricky.  We could
7324 		     tweak them as they can be cached, but
7325 		     we'd need to look through the local syms
7326 		     for the function descriptor sym which we
7327 		     don't have at the moment.  So keep an
7328 		     array of adjustments.  */
7329 		  adjust = (wptr - new_contents) - (rptr - sec->contents);
7330 		  opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
7331 
7332 		  if (wptr != rptr)
7333 		    memcpy (wptr, rptr, opd_ent_size);
7334 		  wptr += opd_ent_size;
7335 		  if (add_aux_fields && opd_ent_size == 16)
7336 		    {
7337 		      memset (wptr, '\0', 8);
7338 		      wptr += 8;
7339 		    }
7340 
7341 		  /* We need to adjust any reloc offsets to point to the
7342 		     new opd entries.  */
7343 		  for ( ; rel != next_rel; ++rel)
7344 		    {
7345 		      rel->r_offset += adjust;
7346 		      if (write_rel != rel)
7347 			memcpy (write_rel, rel, sizeof (*rel));
7348 		      ++write_rel;
7349 		    }
7350 		}
7351 
7352 	      rptr += opd_ent_size;
7353 	    }
7354 
7355 	  sec->size = wptr - new_contents;
7356 	  sec->reloc_count = write_rel - relstart;
7357 	  if (add_aux_fields)
7358 	    {
7359 	      free (sec->contents);
7360 	      sec->contents = new_contents;
7361 	    }
7362 
7363 	  /* Fudge the header size too, as this is used later in
7364 	     elf_bfd_final_link if we are emitting relocs.  */
7365 	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
7366 	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7367 	  some_edited = TRUE;
7368 	}
7369       else if (elf_section_data (sec)->relocs != relstart)
7370 	free (relstart);
7371 
7372       if (local_syms != NULL
7373 	  && symtab_hdr->contents != (unsigned char *) local_syms)
7374 	{
7375 	  if (!info->keep_memory)
7376 	    free (local_syms);
7377 	  else
7378 	    symtab_hdr->contents = (unsigned char *) local_syms;
7379 	}
7380     }
7381 
7382   if (some_edited)
7383     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7384 
7385   /* If we are doing a final link and the last .opd entry is just 16 byte
7386      long, add a 8 byte padding after it.  */
7387   if (need_pad != NULL && !bfd_link_relocatable (info))
7388     {
7389       bfd_byte *p;
7390 
7391       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7392 	{
7393 	  BFD_ASSERT (need_pad->size > 0);
7394 
7395 	  p = bfd_malloc (need_pad->size + 8);
7396 	  if (p == NULL)
7397 	    return FALSE;
7398 
7399 	  if (!bfd_get_section_contents (need_pad->owner, need_pad,
7400 					 p, 0, need_pad->size))
7401 	    return FALSE;
7402 
7403 	  need_pad->contents = p;
7404 	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7405 	}
7406       else
7407 	{
7408 	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7409 	  if (p == NULL)
7410 	    return FALSE;
7411 
7412 	  need_pad->contents = p;
7413 	}
7414 
7415       memset (need_pad->contents + need_pad->size, 0, 8);
7416       need_pad->size += 8;
7417     }
7418 
7419   return TRUE;
7420 }
7421 
7422 /* Analyze inline PLT call relocations to see whether calls to locally
7423    defined functions can be converted to direct calls.  */
7424 
7425 bfd_boolean
7426 ppc64_elf_inline_plt (struct bfd_link_info *info)
7427 {
7428   struct ppc_link_hash_table *htab;
7429   bfd *ibfd;
7430   asection *sec;
7431   bfd_vma low_vma, high_vma, limit;
7432 
7433   htab = ppc_hash_table (info);
7434   if (htab == NULL)
7435     return FALSE;
7436 
7437   /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
7438      reduced somewhat to cater for possible stubs that might be added
7439      between the call and its destination.  */
7440   if (htab->params->group_size < 0)
7441     {
7442       limit = -htab->params->group_size;
7443       if (limit == 1)
7444 	limit = 0x1e00000;
7445     }
7446   else
7447     {
7448       limit = htab->params->group_size;
7449       if (limit == 1)
7450 	limit = 0x1c00000;
7451     }
7452 
7453   low_vma = -1;
7454   high_vma = 0;
7455   for (sec = info->output_bfd->sections; sec != NULL; sec = sec->next)
7456     if ((sec->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE))
7457       {
7458 	if (low_vma > sec->vma)
7459 	  low_vma = sec->vma;
7460 	if (high_vma < sec->vma + sec->size)
7461 	  high_vma = sec->vma + sec->size;
7462       }
7463 
7464   /* If a "bl" can reach anywhere in local code sections, then we can
7465      convert all inline PLT sequences to direct calls when the symbol
7466      is local.  */
7467   if (high_vma - low_vma < limit)
7468     {
7469       htab->can_convert_all_inline_plt = 1;
7470       return TRUE;
7471     }
7472 
7473   /* Otherwise, go looking through relocs for cases where a direct
7474      call won't reach.  Mark the symbol on any such reloc to disable
7475      the optimization and keep the PLT entry as it seems likely that
7476      this will be better than creating trampolines.  Note that this
7477      will disable the optimization for all inline PLT calls to a
7478      particular symbol, not just those that won't reach.  The
7479      difficulty in doing a more precise optimization is that the
7480      linker needs to make a decision depending on whether a
7481      particular R_PPC64_PLTCALL insn can be turned into a direct
7482      call, for each of the R_PPC64_PLTSEQ and R_PPC64_PLT16* insns in
7483      the sequence, and there is nothing that ties those relocs
7484      together except their symbol.  */
7485 
7486   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7487     {
7488       Elf_Internal_Shdr *symtab_hdr;
7489       Elf_Internal_Sym *local_syms;
7490 
7491       if (!is_ppc64_elf (ibfd))
7492 	continue;
7493 
7494       local_syms = NULL;
7495       symtab_hdr = &elf_symtab_hdr (ibfd);
7496 
7497       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7498 	if (ppc64_elf_section_data (sec)->has_pltcall
7499 	    && !bfd_is_abs_section (sec->output_section))
7500 	  {
7501 	    Elf_Internal_Rela *relstart, *rel, *relend;
7502 
7503 	    /* Read the relocations.  */
7504 	    relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7505 						  info->keep_memory);
7506 	    if (relstart == NULL)
7507 	      return FALSE;
7508 
7509 	    relend = relstart + sec->reloc_count;
7510 	    for (rel = relstart; rel < relend; rel++)
7511 	      {
7512 		enum elf_ppc64_reloc_type r_type;
7513 		unsigned long r_symndx;
7514 		asection *sym_sec;
7515 		struct elf_link_hash_entry *h;
7516 		Elf_Internal_Sym *sym;
7517 		unsigned char *tls_maskp;
7518 
7519 		r_type = ELF64_R_TYPE (rel->r_info);
7520 		if (r_type != R_PPC64_PLTCALL
7521 		    && r_type != R_PPC64_PLTCALL_NOTOC)
7522 		  continue;
7523 
7524 		r_symndx = ELF64_R_SYM (rel->r_info);
7525 		if (!get_sym_h (&h, &sym, &sym_sec, &tls_maskp, &local_syms,
7526 				r_symndx, ibfd))
7527 		  {
7528 		    if (elf_section_data (sec)->relocs != relstart)
7529 		      free (relstart);
7530 		    if (local_syms != NULL
7531 			&& symtab_hdr->contents != (bfd_byte *) local_syms)
7532 		      free (local_syms);
7533 		    return FALSE;
7534 		  }
7535 
7536 		if (sym_sec != NULL && sym_sec->output_section != NULL)
7537 		  {
7538 		    bfd_vma from, to;
7539 		    if (h != NULL)
7540 		      to = h->root.u.def.value;
7541 		    else
7542 		      to = sym->st_value;
7543 		    to += (rel->r_addend
7544 			   + sym_sec->output_offset
7545 			   + sym_sec->output_section->vma);
7546 		    from = (rel->r_offset
7547 			    + sec->output_offset
7548 			    + sec->output_section->vma);
7549 		    if (to - from + limit < 2 * limit
7550 			&& !(r_type == R_PPC64_PLTCALL_NOTOC
7551 			     && (((h ? h->other : sym->st_other)
7552 				  & STO_PPC64_LOCAL_MASK)
7553 				 > 1 << STO_PPC64_LOCAL_BIT)))
7554 		      *tls_maskp &= ~PLT_KEEP;
7555 		  }
7556 	      }
7557 	    if (elf_section_data (sec)->relocs != relstart)
7558 	      free (relstart);
7559 	  }
7560 
7561       if (local_syms != NULL
7562 	  && symtab_hdr->contents != (unsigned char *) local_syms)
7563 	{
7564 	  if (!info->keep_memory)
7565 	    free (local_syms);
7566 	  else
7567 	    symtab_hdr->contents = (unsigned char *) local_syms;
7568 	}
7569     }
7570 
7571   return TRUE;
7572 }
7573 
7574 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7575 
7576 asection *
7577 ppc64_elf_tls_setup (struct bfd_link_info *info)
7578 {
7579   struct ppc_link_hash_table *htab;
7580 
7581   htab = ppc_hash_table (info);
7582   if (htab == NULL)
7583     return NULL;
7584 
7585   if (abiversion (info->output_bfd) == 1)
7586     htab->opd_abi = 1;
7587 
7588   if (htab->params->no_multi_toc)
7589     htab->do_multi_toc = 0;
7590   else if (!htab->do_multi_toc)
7591     htab->params->no_multi_toc = 1;
7592 
7593   /* Default to --no-plt-localentry, as this option can cause problems
7594      with symbol interposition.  For example, glibc libpthread.so and
7595      libc.so duplicate many pthread symbols, with a fallback
7596      implementation in libc.so.  In some cases the fallback does more
7597      work than the pthread implementation.  __pthread_condattr_destroy
7598      is one such symbol: the libpthread.so implementation is
7599      localentry:0 while the libc.so implementation is localentry:8.
7600      An app that "cleverly" uses dlopen to only load necessary
7601      libraries at runtime may omit loading libpthread.so when not
7602      running multi-threaded, which then results in the libc.so
7603      fallback symbols being used and ld.so complaining.  Now there
7604      are workarounds in ld (see non_zero_localentry) to detect the
7605      pthread situation, but that may not be the only case where
7606      --plt-localentry can cause trouble.  */
7607   if (htab->params->plt_localentry0 < 0)
7608     htab->params->plt_localentry0 = 0;
7609   if (htab->params->plt_localentry0
7610       && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
7611 			       FALSE, FALSE, FALSE) == NULL)
7612     _bfd_error_handler
7613       (_("warning: --plt-localentry is especially dangerous without "
7614 	 "ld.so support to detect ABI violations"));
7615 
7616   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7617 			elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7618 					      FALSE, FALSE, TRUE));
7619   /* Move dynamic linking info to the function descriptor sym.  */
7620   if (htab->tls_get_addr != NULL)
7621     func_desc_adjust (&htab->tls_get_addr->elf, info);
7622   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7623 			   elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7624 						 FALSE, FALSE, TRUE));
7625   if (htab->params->tls_get_addr_opt)
7626     {
7627       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7628 
7629       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7630 				  FALSE, FALSE, TRUE);
7631       if (opt != NULL)
7632 	func_desc_adjust (opt, info);
7633       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7634 				     FALSE, FALSE, TRUE);
7635       if (opt_fd != NULL
7636 	  && (opt_fd->root.type == bfd_link_hash_defined
7637 	      || opt_fd->root.type == bfd_link_hash_defweak))
7638 	{
7639 	  /* If glibc supports an optimized __tls_get_addr call stub,
7640 	     signalled by the presence of __tls_get_addr_opt, and we'll
7641 	     be calling __tls_get_addr via a plt call stub, then
7642 	     make __tls_get_addr point to __tls_get_addr_opt.  */
7643 	  tga_fd = &htab->tls_get_addr_fd->elf;
7644 	  if (htab->elf.dynamic_sections_created
7645 	      && tga_fd != NULL
7646 	      && (tga_fd->type == STT_FUNC
7647 		  || tga_fd->needs_plt)
7648 	      && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7649 		   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))
7650 	    {
7651 	      struct plt_entry *ent;
7652 
7653 	      for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7654 		if (ent->plt.refcount > 0)
7655 		  break;
7656 	      if (ent != NULL)
7657 		{
7658 		  tga_fd->root.type = bfd_link_hash_indirect;
7659 		  tga_fd->root.u.i.link = &opt_fd->root;
7660 		  ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7661 		  opt_fd->mark = 1;
7662 		  if (opt_fd->dynindx != -1)
7663 		    {
7664 		      /* Use __tls_get_addr_opt in dynamic relocations.  */
7665 		      opt_fd->dynindx = -1;
7666 		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7667 					      opt_fd->dynstr_index);
7668 		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7669 			return NULL;
7670 		    }
7671 		  htab->tls_get_addr_fd
7672 		    = (struct ppc_link_hash_entry *) opt_fd;
7673 		  tga = &htab->tls_get_addr->elf;
7674 		  if (opt != NULL && tga != NULL)
7675 		    {
7676 		      tga->root.type = bfd_link_hash_indirect;
7677 		      tga->root.u.i.link = &opt->root;
7678 		      ppc64_elf_copy_indirect_symbol (info, opt, tga);
7679 		      opt->mark = 1;
7680 		      _bfd_elf_link_hash_hide_symbol (info, opt,
7681 						      tga->forced_local);
7682 		      htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
7683 		    }
7684 		  htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7685 		  htab->tls_get_addr_fd->is_func_descriptor = 1;
7686 		  if (htab->tls_get_addr != NULL)
7687 		    {
7688 		      htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7689 		      htab->tls_get_addr->is_func = 1;
7690 		    }
7691 		}
7692 	    }
7693 	}
7694       else if (htab->params->tls_get_addr_opt < 0)
7695 	htab->params->tls_get_addr_opt = 0;
7696     }
7697   return _bfd_elf_tls_setup (info->output_bfd, info);
7698 }
7699 
7700 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7701    HASH1 or HASH2.  */
7702 
7703 static bfd_boolean
7704 branch_reloc_hash_match (const bfd *ibfd,
7705 			 const Elf_Internal_Rela *rel,
7706 			 const struct ppc_link_hash_entry *hash1,
7707 			 const struct ppc_link_hash_entry *hash2)
7708 {
7709   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7710   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7711   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7712 
7713   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7714     {
7715       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7716       struct elf_link_hash_entry *h;
7717 
7718       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7719       h = elf_follow_link (h);
7720       if (h == &hash1->elf || h == &hash2->elf)
7721 	return TRUE;
7722     }
7723   return FALSE;
7724 }
7725 
7726 /* Run through all the TLS relocs looking for optimization
7727    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7728    a preliminary section layout so that we know the TLS segment
7729    offsets.  We can't optimize earlier because some optimizations need
7730    to know the tp offset, and we need to optimize before allocating
7731    dynamic relocations.  */
7732 
7733 bfd_boolean
7734 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7735 {
7736   bfd *ibfd;
7737   asection *sec;
7738   struct ppc_link_hash_table *htab;
7739   unsigned char *toc_ref;
7740   int pass;
7741 
7742   if (!bfd_link_executable (info))
7743     return TRUE;
7744 
7745   htab = ppc_hash_table (info);
7746   if (htab == NULL)
7747     return FALSE;
7748 
7749   /* Make two passes over the relocs.  On the first pass, mark toc
7750      entries involved with tls relocs, and check that tls relocs
7751      involved in setting up a tls_get_addr call are indeed followed by
7752      such a call.  If they are not, we can't do any tls optimization.
7753      On the second pass twiddle tls_mask flags to notify
7754      relocate_section that optimization can be done, and adjust got
7755      and plt refcounts.  */
7756   toc_ref = NULL;
7757   for (pass = 0; pass < 2; ++pass)
7758     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7759       {
7760 	Elf_Internal_Sym *locsyms = NULL;
7761 	asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7762 
7763 	for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7764 	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7765 	    {
7766 	      Elf_Internal_Rela *relstart, *rel, *relend;
7767 	      bfd_boolean found_tls_get_addr_arg = 0;
7768 
7769 	      /* Read the relocations.  */
7770 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7771 						    info->keep_memory);
7772 	      if (relstart == NULL)
7773 		{
7774 		  free (toc_ref);
7775 		  return FALSE;
7776 		}
7777 
7778 	      relend = relstart + sec->reloc_count;
7779 	      for (rel = relstart; rel < relend; rel++)
7780 		{
7781 		  enum elf_ppc64_reloc_type r_type;
7782 		  unsigned long r_symndx;
7783 		  struct elf_link_hash_entry *h;
7784 		  Elf_Internal_Sym *sym;
7785 		  asection *sym_sec;
7786 		  unsigned char *tls_mask;
7787 		  unsigned int tls_set, tls_clear, tls_type = 0;
7788 		  bfd_vma value;
7789 		  bfd_boolean ok_tprel, is_local;
7790 		  long toc_ref_index = 0;
7791 		  int expecting_tls_get_addr = 0;
7792 		  bfd_boolean ret = FALSE;
7793 
7794 		  r_symndx = ELF64_R_SYM (rel->r_info);
7795 		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7796 				  r_symndx, ibfd))
7797 		    {
7798 		    err_free_rel:
7799 		      if (elf_section_data (sec)->relocs != relstart)
7800 			free (relstart);
7801 		      if (toc_ref != NULL)
7802 			free (toc_ref);
7803 		      if (locsyms != NULL
7804 			  && (elf_symtab_hdr (ibfd).contents
7805 			      != (unsigned char *) locsyms))
7806 			free (locsyms);
7807 		      return ret;
7808 		    }
7809 
7810 		  if (h != NULL)
7811 		    {
7812 		      if (h->root.type == bfd_link_hash_defined
7813 			  || h->root.type == bfd_link_hash_defweak)
7814 			value = h->root.u.def.value;
7815 		      else if (h->root.type == bfd_link_hash_undefweak)
7816 			value = 0;
7817 		      else
7818 			{
7819 			  found_tls_get_addr_arg = 0;
7820 			  continue;
7821 			}
7822 		    }
7823 		  else
7824 		    /* Symbols referenced by TLS relocs must be of type
7825 		       STT_TLS.  So no need for .opd local sym adjust.  */
7826 		    value = sym->st_value;
7827 
7828 		  ok_tprel = FALSE;
7829 		  is_local = SYMBOL_REFERENCES_LOCAL (info, h);
7830 		  if (is_local)
7831 		    {
7832 		      if (h != NULL
7833 			  && h->root.type == bfd_link_hash_undefweak)
7834 			ok_tprel = TRUE;
7835 		      else if (sym_sec != NULL
7836 			       && sym_sec->output_section != NULL)
7837 			{
7838 			  value += sym_sec->output_offset;
7839 			  value += sym_sec->output_section->vma;
7840 			  value -= htab->elf.tls_sec->vma + TP_OFFSET;
7841 			  /* Note that even though the prefix insns
7842 			     allow a 1<<33 offset we use the same test
7843 			     as for addis;addi.  There may be a mix of
7844 			     pcrel and non-pcrel code and the decision
7845 			     to optimise is per symbol, not per TLS
7846 			     sequence.  */
7847 			  ok_tprel = value + 0x80008000ULL < 1ULL << 32;
7848 			}
7849 		    }
7850 
7851 		  r_type = ELF64_R_TYPE (rel->r_info);
7852 		  /* If this section has old-style __tls_get_addr calls
7853 		     without marker relocs, then check that each
7854 		     __tls_get_addr call reloc is preceded by a reloc
7855 		     that conceivably belongs to the __tls_get_addr arg
7856 		     setup insn.  If we don't find matching arg setup
7857 		     relocs, don't do any tls optimization.  */
7858 		  if (pass == 0
7859 		      && sec->nomark_tls_get_addr
7860 		      && h != NULL
7861 		      && (h == &htab->tls_get_addr->elf
7862 			  || h == &htab->tls_get_addr_fd->elf)
7863 		      && !found_tls_get_addr_arg
7864 		      && is_branch_reloc (r_type))
7865 		    {
7866 		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
7867 						"TLS optimization disabled\n"),
7868 					      ibfd, sec, rel->r_offset);
7869 		      ret = TRUE;
7870 		      goto err_free_rel;
7871 		    }
7872 
7873 		  found_tls_get_addr_arg = 0;
7874 		  switch (r_type)
7875 		    {
7876 		    case R_PPC64_GOT_TLSLD16:
7877 		    case R_PPC64_GOT_TLSLD16_LO:
7878 		    case R_PPC64_GOT_TLSLD34:
7879 		      expecting_tls_get_addr = 1;
7880 		      found_tls_get_addr_arg = 1;
7881 		      /* Fall through.  */
7882 
7883 		    case R_PPC64_GOT_TLSLD16_HI:
7884 		    case R_PPC64_GOT_TLSLD16_HA:
7885 		      /* These relocs should never be against a symbol
7886 			 defined in a shared lib.  Leave them alone if
7887 			 that turns out to be the case.  */
7888 		      if (!is_local)
7889 			continue;
7890 
7891 		      /* LD -> LE */
7892 		      tls_set = 0;
7893 		      tls_clear = TLS_LD;
7894 		      tls_type = TLS_TLS | TLS_LD;
7895 		      break;
7896 
7897 		    case R_PPC64_GOT_TLSGD16:
7898 		    case R_PPC64_GOT_TLSGD16_LO:
7899 		    case R_PPC64_GOT_TLSGD34:
7900 		      expecting_tls_get_addr = 1;
7901 		      found_tls_get_addr_arg = 1;
7902 		      /* Fall through. */
7903 
7904 		    case R_PPC64_GOT_TLSGD16_HI:
7905 		    case R_PPC64_GOT_TLSGD16_HA:
7906 		      if (ok_tprel)
7907 			/* GD -> LE */
7908 			tls_set = 0;
7909 		      else
7910 			/* GD -> IE */
7911 			tls_set = TLS_TLS | TLS_GDIE;
7912 		      tls_clear = TLS_GD;
7913 		      tls_type = TLS_TLS | TLS_GD;
7914 		      break;
7915 
7916 		    case R_PPC64_GOT_TPREL34:
7917 		    case R_PPC64_GOT_TPREL16_DS:
7918 		    case R_PPC64_GOT_TPREL16_LO_DS:
7919 		    case R_PPC64_GOT_TPREL16_HI:
7920 		    case R_PPC64_GOT_TPREL16_HA:
7921 		      if (ok_tprel)
7922 			{
7923 			  /* IE -> LE */
7924 			  tls_set = 0;
7925 			  tls_clear = TLS_TPREL;
7926 			  tls_type = TLS_TLS | TLS_TPREL;
7927 			  break;
7928 			}
7929 		      continue;
7930 
7931 		    case R_PPC64_TLSLD:
7932 		      if (!is_local)
7933 			continue;
7934 		      /* Fall through.  */
7935 		    case R_PPC64_TLSGD:
7936 		      if (rel + 1 < relend
7937 			  && is_plt_seq_reloc (ELF64_R_TYPE (rel[1].r_info)))
7938 			{
7939 			  if (pass != 0
7940 			      && (ELF64_R_TYPE (rel[1].r_info)
7941 				  != R_PPC64_PLTSEQ)
7942 			      && (ELF64_R_TYPE (rel[1].r_info)
7943 				  != R_PPC64_PLTSEQ_NOTOC))
7944 			    {
7945 			      r_symndx = ELF64_R_SYM (rel[1].r_info);
7946 			      if (!get_sym_h (&h, NULL, NULL, NULL, &locsyms,
7947 					      r_symndx, ibfd))
7948 				goto err_free_rel;
7949 			      if (h != NULL)
7950 				{
7951 				  struct plt_entry *ent = NULL;
7952 
7953 				  for (ent = h->plt.plist;
7954 				       ent != NULL;
7955 				       ent = ent->next)
7956 				    if (ent->addend == rel[1].r_addend)
7957 				      break;
7958 
7959 				  if (ent != NULL
7960 				      && ent->plt.refcount > 0)
7961 				    ent->plt.refcount -= 1;
7962 				}
7963 			    }
7964 			  continue;
7965 			}
7966 		      found_tls_get_addr_arg = 1;
7967 		      /* Fall through.  */
7968 
7969 		    case R_PPC64_TLS:
7970 		    case R_PPC64_TOC16:
7971 		    case R_PPC64_TOC16_LO:
7972 		      if (sym_sec == NULL || sym_sec != toc)
7973 			continue;
7974 
7975 		      /* Mark this toc entry as referenced by a TLS
7976 			 code sequence.  We can do that now in the
7977 			 case of R_PPC64_TLS, and after checking for
7978 			 tls_get_addr for the TOC16 relocs.  */
7979 		      if (toc_ref == NULL)
7980 			toc_ref
7981 			  = bfd_zmalloc (toc->output_section->rawsize / 8);
7982 		      if (toc_ref == NULL)
7983 			goto err_free_rel;
7984 
7985 		      if (h != NULL)
7986 			value = h->root.u.def.value;
7987 		      else
7988 			value = sym->st_value;
7989 		      value += rel->r_addend;
7990 		      if (value % 8 != 0)
7991 			continue;
7992 		      BFD_ASSERT (value < toc->size
7993 				  && toc->output_offset % 8 == 0);
7994 		      toc_ref_index = (value + toc->output_offset) / 8;
7995 		      if (r_type == R_PPC64_TLS
7996 			  || r_type == R_PPC64_TLSGD
7997 			  || r_type == R_PPC64_TLSLD)
7998 			{
7999 			  toc_ref[toc_ref_index] = 1;
8000 			  continue;
8001 			}
8002 
8003 		      if (pass != 0 && toc_ref[toc_ref_index] == 0)
8004 			continue;
8005 
8006 		      tls_set = 0;
8007 		      tls_clear = 0;
8008 		      expecting_tls_get_addr = 2;
8009 		      break;
8010 
8011 		    case R_PPC64_TPREL64:
8012 		      if (pass == 0
8013 			  || sec != toc
8014 			  || toc_ref == NULL
8015 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8016 			continue;
8017 		      if (ok_tprel)
8018 			{
8019 			  /* IE -> LE */
8020 			  tls_set = TLS_EXPLICIT;
8021 			  tls_clear = TLS_TPREL;
8022 			  break;
8023 			}
8024 		      continue;
8025 
8026 		    case R_PPC64_DTPMOD64:
8027 		      if (pass == 0
8028 			  || sec != toc
8029 			  || toc_ref == NULL
8030 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8031 			continue;
8032 		      if (rel + 1 < relend
8033 			  && (rel[1].r_info
8034 			      == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8035 			  && rel[1].r_offset == rel->r_offset + 8)
8036 			{
8037 			  if (ok_tprel)
8038 			    /* GD -> LE */
8039 			    tls_set = TLS_EXPLICIT | TLS_GD;
8040 			  else
8041 			    /* GD -> IE */
8042 			    tls_set = TLS_EXPLICIT | TLS_GD | TLS_GDIE;
8043 			  tls_clear = TLS_GD;
8044 			}
8045 		      else
8046 			{
8047 			  if (!is_local)
8048 			    continue;
8049 
8050 			  /* LD -> LE */
8051 			  tls_set = TLS_EXPLICIT;
8052 			  tls_clear = TLS_LD;
8053 			}
8054 		      break;
8055 
8056 		    default:
8057 		      continue;
8058 		    }
8059 
8060 		  if (pass == 0)
8061 		    {
8062 		      if (!expecting_tls_get_addr
8063 			  || !sec->nomark_tls_get_addr)
8064 			continue;
8065 
8066 		      if (rel + 1 < relend
8067 			  && branch_reloc_hash_match (ibfd, rel + 1,
8068 						      htab->tls_get_addr,
8069 						      htab->tls_get_addr_fd))
8070 			{
8071 			  if (expecting_tls_get_addr == 2)
8072 			    {
8073 			      /* Check for toc tls entries.  */
8074 			      unsigned char *toc_tls;
8075 			      int retval;
8076 
8077 			      retval = get_tls_mask (&toc_tls, NULL, NULL,
8078 						     &locsyms,
8079 						     rel, ibfd);
8080 			      if (retval == 0)
8081 				goto err_free_rel;
8082 			      if (toc_tls != NULL)
8083 				{
8084 				  if ((*toc_tls & TLS_TLS) != 0
8085 				      && ((*toc_tls & (TLS_GD | TLS_LD)) != 0))
8086 				    found_tls_get_addr_arg = 1;
8087 				  if (retval > 1)
8088 				    toc_ref[toc_ref_index] = 1;
8089 				}
8090 			    }
8091 			  continue;
8092 			}
8093 
8094 		      /* Uh oh, we didn't find the expected call.  We
8095 			 could just mark this symbol to exclude it
8096 			 from tls optimization but it's safer to skip
8097 			 the entire optimization.  */
8098 		      /* xgettext:c-format */
8099 		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8100 						"TLS optimization disabled\n"),
8101 					      ibfd, sec, rel->r_offset);
8102 		      ret = TRUE;
8103 		      goto err_free_rel;
8104 		    }
8105 
8106 		  /* If we don't have old-style __tls_get_addr calls
8107 		     without TLSGD/TLSLD marker relocs, and we haven't
8108 		     found a new-style __tls_get_addr call with a
8109 		     marker for this symbol, then we either have a
8110 		     broken object file or an -mlongcall style
8111 		     indirect call to __tls_get_addr without a marker.
8112 		     Disable optimization in this case.  */
8113 		  if ((tls_clear & (TLS_GD | TLS_LD)) != 0
8114 		      && (tls_set & TLS_EXPLICIT) == 0
8115 		      && !sec->nomark_tls_get_addr
8116 		      && ((*tls_mask & (TLS_TLS | TLS_MARK))
8117 			  != (TLS_TLS | TLS_MARK)))
8118 		    continue;
8119 
8120 		  if (expecting_tls_get_addr == 1 + !sec->nomark_tls_get_addr)
8121 		    {
8122 		      struct plt_entry *ent = NULL;
8123 
8124 		      if (htab->tls_get_addr != NULL)
8125 			for (ent = htab->tls_get_addr->elf.plt.plist;
8126 			     ent != NULL;
8127 			     ent = ent->next)
8128 			  if (ent->addend == 0)
8129 			    break;
8130 
8131 		      if (ent == NULL && htab->tls_get_addr_fd != NULL)
8132 			for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8133 			     ent != NULL;
8134 			     ent = ent->next)
8135 			  if (ent->addend == 0)
8136 			    break;
8137 
8138 		      if (ent != NULL
8139 			  && ent->plt.refcount > 0)
8140 			ent->plt.refcount -= 1;
8141 		    }
8142 
8143 		  if (tls_clear == 0)
8144 		    continue;
8145 
8146 		  if ((tls_set & TLS_EXPLICIT) == 0)
8147 		    {
8148 		      struct got_entry *ent;
8149 
8150 		      /* Adjust got entry for this reloc.  */
8151 		      if (h != NULL)
8152 			ent = h->got.glist;
8153 		      else
8154 			ent = elf_local_got_ents (ibfd)[r_symndx];
8155 
8156 		      for (; ent != NULL; ent = ent->next)
8157 			if (ent->addend == rel->r_addend
8158 			    && ent->owner == ibfd
8159 			    && ent->tls_type == tls_type)
8160 			  break;
8161 		      if (ent == NULL)
8162 			abort ();
8163 
8164 		      if (tls_set == 0)
8165 			{
8166 			  /* We managed to get rid of a got entry.  */
8167 			  if (ent->got.refcount > 0)
8168 			    ent->got.refcount -= 1;
8169 			}
8170 		    }
8171 		  else
8172 		    {
8173 		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
8174 			 we'll lose one or two dyn relocs.  */
8175 		      if (!dec_dynrel_count (rel->r_info, sec, info,
8176 					     NULL, h, sym))
8177 			return FALSE;
8178 
8179 		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
8180 			{
8181 			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8182 						 NULL, h, sym))
8183 			    return FALSE;
8184 			}
8185 		    }
8186 
8187 		  *tls_mask |= tls_set & 0xff;
8188 		  *tls_mask &= ~tls_clear;
8189 		}
8190 
8191 	      if (elf_section_data (sec)->relocs != relstart)
8192 		free (relstart);
8193 	    }
8194 
8195 	if (locsyms != NULL
8196 	    && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8197 	  {
8198 	    if (!info->keep_memory)
8199 	      free (locsyms);
8200 	    else
8201 	      elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8202 	  }
8203       }
8204 
8205   if (toc_ref != NULL)
8206     free (toc_ref);
8207   htab->do_tls_opt = 1;
8208   return TRUE;
8209 }
8210 
8211 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8212    the values of any global symbols in a toc section that has been
8213    edited.  Globals in toc sections should be a rarity, so this function
8214    sets a flag if any are found in toc sections other than the one just
8215    edited, so that further hash table traversals can be avoided.  */
8216 
8217 struct adjust_toc_info
8218 {
8219   asection *toc;
8220   unsigned long *skip;
8221   bfd_boolean global_toc_syms;
8222 };
8223 
8224 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8225 
8226 static bfd_boolean
8227 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8228 {
8229   struct ppc_link_hash_entry *eh;
8230   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8231   unsigned long i;
8232 
8233   if (h->root.type != bfd_link_hash_defined
8234       && h->root.type != bfd_link_hash_defweak)
8235     return TRUE;
8236 
8237   eh = (struct ppc_link_hash_entry *) h;
8238   if (eh->adjust_done)
8239     return TRUE;
8240 
8241   if (eh->elf.root.u.def.section == toc_inf->toc)
8242     {
8243       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8244 	i = toc_inf->toc->rawsize >> 3;
8245       else
8246 	i = eh->elf.root.u.def.value >> 3;
8247 
8248       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8249 	{
8250 	  _bfd_error_handler
8251 	    (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8252 	  do
8253 	    ++i;
8254 	  while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8255 	  eh->elf.root.u.def.value = (bfd_vma) i << 3;
8256 	}
8257 
8258       eh->elf.root.u.def.value -= toc_inf->skip[i];
8259       eh->adjust_done = 1;
8260     }
8261   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8262     toc_inf->global_toc_syms = TRUE;
8263 
8264   return TRUE;
8265 }
8266 
8267 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8268    on a _LO variety toc/got reloc.  */
8269 
8270 static bfd_boolean
8271 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8272 {
8273   return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */
8274 	  || (insn & (0x3fu << 26)) == 14u << 26 /* addi */
8275 	  || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
8276 	  || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
8277 	  || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
8278 	  || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
8279 	  || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
8280 	  || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
8281 	  || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
8282 	  || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
8283 	  || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
8284 	  || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
8285 	  || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
8286 	  || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
8287 	  || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
8288 	  || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */
8289 	  || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8290 	      /* Exclude lfqu by testing reloc.  If relocs are ever
8291 		 defined for the reduced D field in psq_lu then those
8292 		 will need testing too.  */
8293 	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8294 	  || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */
8295 	      && (insn & 1) == 0)
8296 	  || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */
8297 	  || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8298 	      /* Exclude stfqu.  psq_stu as above for psq_lu.  */
8299 	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8300 	  || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */
8301 	      && (insn & 1) == 0));
8302 }
8303 
8304 /* PCREL_OPT in one instance flags to the linker that a pair of insns:
8305      pld ra,symbol@got@pcrel
8306      load/store rt,off(ra)
8307    or
8308      pla ra,symbol@pcrel
8309      load/store rt,off(ra)
8310    may be translated to
8311      pload/pstore rt,symbol+off@pcrel
8312      nop.
8313    This function returns true if the optimization is possible, placing
8314    the prefix insn in *PINSN1, a NOP in *PINSN2 and the offset in *POFF.
8315 
8316    On entry to this function, the linker has already determined that
8317    the pld can be replaced with pla: *PINSN1 is that pla insn,
8318    while *PINSN2 is the second instruction.  */
8319 
8320 static bfd_boolean
8321 xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2, bfd_signed_vma *poff)
8322 {
8323   uint64_t insn1 = *pinsn1;
8324   uint64_t insn2 = *pinsn2;
8325   bfd_signed_vma off;
8326 
8327   if ((insn2 & (63ULL << 58)) == 1ULL << 58)
8328     {
8329       /* Check that regs match.  */
8330       if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8331 	return FALSE;
8332 
8333       /* P8LS or PMLS form, non-pcrel.  */
8334       if ((insn2 & (-1ULL << 50) & ~(1ULL << 56)) != (1ULL << 58))
8335 	return FALSE;
8336 
8337       *pinsn1 = (insn2 & ~(31 << 16) & ~0x3ffff0000ffffULL) | (1ULL << 52);
8338       *pinsn2 = PNOP;
8339       off = ((insn2 >> 16) & 0x3ffff0000ULL) | (insn2 & 0xffff);
8340       *poff = (off ^ 0x200000000ULL) - 0x200000000ULL;
8341       return TRUE;
8342     }
8343 
8344   insn2 >>= 32;
8345 
8346   /* Check that regs match.  */
8347   if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8348     return FALSE;
8349 
8350   switch ((insn2 >> 26) & 63)
8351     {
8352     default:
8353       return FALSE;
8354 
8355     case 32: /* lwz */
8356     case 34: /* lbz */
8357     case 36: /* stw */
8358     case 38: /* stb */
8359     case 40: /* lhz */
8360     case 42: /* lha */
8361     case 44: /* sth */
8362     case 48: /* lfs */
8363     case 50: /* lfd */
8364     case 52: /* stfs */
8365     case 54: /* stfd */
8366       /* These are the PMLS cases, where we just need to tack a prefix
8367 	 on the insn.  */
8368       insn1 = ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
8369 	       | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8370       off = insn2 & 0xffff;
8371       break;
8372 
8373     case 58: /* lwa, ld */
8374       if ((insn2 & 1) != 0)
8375 	return FALSE;
8376       insn1 = ((1ULL << 58) | (1ULL << 52)
8377 	       | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
8378 	       | (insn2 & (31ULL << 21)));
8379       off = insn2 & 0xfffc;
8380       break;
8381 
8382     case 57: /* lxsd, lxssp */
8383       if ((insn2 & 3) < 2)
8384 	return FALSE;
8385       insn1 = ((1ULL << 58) | (1ULL << 52)
8386 	       | ((40ULL | (insn2 & 3)) << 26)
8387 	       | (insn2 & (31ULL << 21)));
8388       off = insn2 & 0xfffc;
8389       break;
8390 
8391     case 61: /* stxsd, stxssp, lxv, stxv  */
8392       if ((insn2 & 3) == 0)
8393 	return FALSE;
8394       else if ((insn2 & 3) >= 2)
8395 	{
8396 	  insn1 = ((1ULL << 58) | (1ULL << 52)
8397 		   | ((44ULL | (insn2 & 3)) << 26)
8398 		   | (insn2 & (31ULL << 21)));
8399 	  off = insn2 & 0xfffc;
8400 	}
8401       else
8402 	{
8403 	  insn1 = ((1ULL << 58) | (1ULL << 52)
8404 		   | ((50ULL | (insn2 & 4) | ((insn2 & 8) >> 3)) << 26)
8405 		   | (insn2 & (31ULL << 21)));
8406 	  off = insn2 & 0xfff0;
8407 	}
8408       break;
8409 
8410     case 56: /* lq */
8411       insn1 = ((1ULL << 58) | (1ULL << 52)
8412 	       | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8413       off = insn2 & 0xffff;
8414       break;
8415 
8416     case 62: /* std, stq */
8417       if ((insn2 & 1) != 0)
8418 	return FALSE;
8419       insn1 = ((1ULL << 58) | (1ULL << 52)
8420 	       | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
8421 	       | (insn2 & (31ULL << 21)));
8422       off = insn2 & 0xfffc;
8423       break;
8424     }
8425 
8426   *pinsn1 = insn1;
8427   *pinsn2 = (uint64_t) NOP << 32;
8428   *poff = (off ^ 0x8000) - 0x8000;
8429   return TRUE;
8430 }
8431 
8432 /* Examine all relocs referencing .toc sections in order to remove
8433    unused .toc entries.  */
8434 
8435 bfd_boolean
8436 ppc64_elf_edit_toc (struct bfd_link_info *info)
8437 {
8438   bfd *ibfd;
8439   struct adjust_toc_info toc_inf;
8440   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8441 
8442   htab->do_toc_opt = 1;
8443   toc_inf.global_toc_syms = TRUE;
8444   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8445     {
8446       asection *toc, *sec;
8447       Elf_Internal_Shdr *symtab_hdr;
8448       Elf_Internal_Sym *local_syms;
8449       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8450       unsigned long *skip, *drop;
8451       unsigned char *used;
8452       unsigned char *keep, last, some_unused;
8453 
8454       if (!is_ppc64_elf (ibfd))
8455 	continue;
8456 
8457       toc = bfd_get_section_by_name (ibfd, ".toc");
8458       if (toc == NULL
8459 	  || toc->size == 0
8460 	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8461 	  || discarded_section (toc))
8462 	continue;
8463 
8464       toc_relocs = NULL;
8465       local_syms = NULL;
8466       symtab_hdr = &elf_symtab_hdr (ibfd);
8467 
8468       /* Look at sections dropped from the final link.  */
8469       skip = NULL;
8470       relstart = NULL;
8471       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8472 	{
8473 	  if (sec->reloc_count == 0
8474 	      || !discarded_section (sec)
8475 	      || get_opd_info (sec)
8476 	      || (sec->flags & SEC_ALLOC) == 0
8477 	      || (sec->flags & SEC_DEBUGGING) != 0)
8478 	    continue;
8479 
8480 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8481 	  if (relstart == NULL)
8482 	    goto error_ret;
8483 
8484 	  /* Run through the relocs to see which toc entries might be
8485 	     unused.  */
8486 	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8487 	    {
8488 	      enum elf_ppc64_reloc_type r_type;
8489 	      unsigned long r_symndx;
8490 	      asection *sym_sec;
8491 	      struct elf_link_hash_entry *h;
8492 	      Elf_Internal_Sym *sym;
8493 	      bfd_vma val;
8494 
8495 	      r_type = ELF64_R_TYPE (rel->r_info);
8496 	      switch (r_type)
8497 		{
8498 		default:
8499 		  continue;
8500 
8501 		case R_PPC64_TOC16:
8502 		case R_PPC64_TOC16_LO:
8503 		case R_PPC64_TOC16_HI:
8504 		case R_PPC64_TOC16_HA:
8505 		case R_PPC64_TOC16_DS:
8506 		case R_PPC64_TOC16_LO_DS:
8507 		  break;
8508 		}
8509 
8510 	      r_symndx = ELF64_R_SYM (rel->r_info);
8511 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8512 			      r_symndx, ibfd))
8513 		goto error_ret;
8514 
8515 	      if (sym_sec != toc)
8516 		continue;
8517 
8518 	      if (h != NULL)
8519 		val = h->root.u.def.value;
8520 	      else
8521 		val = sym->st_value;
8522 	      val += rel->r_addend;
8523 
8524 	      if (val >= toc->size)
8525 		continue;
8526 
8527 	      /* Anything in the toc ought to be aligned to 8 bytes.
8528 		 If not, don't mark as unused.  */
8529 	      if (val & 7)
8530 		continue;
8531 
8532 	      if (skip == NULL)
8533 		{
8534 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8535 		  if (skip == NULL)
8536 		    goto error_ret;
8537 		}
8538 
8539 	      skip[val >> 3] = ref_from_discarded;
8540 	    }
8541 
8542 	  if (elf_section_data (sec)->relocs != relstart)
8543 	    free (relstart);
8544 	}
8545 
8546       /* For largetoc loads of address constants, we can convert
8547 	 .  addis rx,2,addr@got@ha
8548 	 .  ld ry,addr@got@l(rx)
8549 	 to
8550 	 .  addis rx,2,addr@toc@ha
8551 	 .  addi ry,rx,addr@toc@l
8552 	 when addr is within 2G of the toc pointer.  This then means
8553 	 that the word storing "addr" in the toc is no longer needed.  */
8554 
8555       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8556 	  && toc->output_section->rawsize < (bfd_vma) 1 << 31
8557 	  && toc->reloc_count != 0)
8558 	{
8559 	  /* Read toc relocs.  */
8560 	  toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8561 						  info->keep_memory);
8562 	  if (toc_relocs == NULL)
8563 	    goto error_ret;
8564 
8565 	  for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8566 	    {
8567 	      enum elf_ppc64_reloc_type r_type;
8568 	      unsigned long r_symndx;
8569 	      asection *sym_sec;
8570 	      struct elf_link_hash_entry *h;
8571 	      Elf_Internal_Sym *sym;
8572 	      bfd_vma val, addr;
8573 
8574 	      r_type = ELF64_R_TYPE (rel->r_info);
8575 	      if (r_type != R_PPC64_ADDR64)
8576 		continue;
8577 
8578 	      r_symndx = ELF64_R_SYM (rel->r_info);
8579 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8580 			      r_symndx, ibfd))
8581 		goto error_ret;
8582 
8583 	      if (sym_sec == NULL
8584 		  || sym_sec->output_section == NULL
8585 		  || discarded_section (sym_sec))
8586 		continue;
8587 
8588 	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
8589 		continue;
8590 
8591 	      if (h != NULL)
8592 		{
8593 		  if (h->type == STT_GNU_IFUNC)
8594 		    continue;
8595 		  val = h->root.u.def.value;
8596 		}
8597 	      else
8598 		{
8599 		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8600 		    continue;
8601 		  val = sym->st_value;
8602 		}
8603 	      val += rel->r_addend;
8604 	      val += sym_sec->output_section->vma + sym_sec->output_offset;
8605 
8606 	      /* We don't yet know the exact toc pointer value, but we
8607 		 know it will be somewhere in the toc section.  Don't
8608 		 optimize if the difference from any possible toc
8609 		 pointer is outside [ff..f80008000, 7fff7fff].  */
8610 	      addr = toc->output_section->vma + TOC_BASE_OFF;
8611 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8612 		continue;
8613 
8614 	      addr = toc->output_section->vma + toc->output_section->rawsize;
8615 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8616 		continue;
8617 
8618 	      if (skip == NULL)
8619 		{
8620 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8621 		  if (skip == NULL)
8622 		    goto error_ret;
8623 		}
8624 
8625 	      skip[rel->r_offset >> 3]
8626 		|= can_optimize | ((rel - toc_relocs) << 2);
8627 	    }
8628 	}
8629 
8630       if (skip == NULL)
8631 	continue;
8632 
8633       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8634       if (used == NULL)
8635 	{
8636 	error_ret:
8637 	  if (local_syms != NULL
8638 	      && symtab_hdr->contents != (unsigned char *) local_syms)
8639 	    free (local_syms);
8640 	  if (sec != NULL
8641 	      && relstart != NULL
8642 	      && elf_section_data (sec)->relocs != relstart)
8643 	    free (relstart);
8644 	  if (toc_relocs != NULL
8645 	      && elf_section_data (toc)->relocs != toc_relocs)
8646 	    free (toc_relocs);
8647 	  if (skip != NULL)
8648 	    free (skip);
8649 	  return FALSE;
8650 	}
8651 
8652       /* Now check all kept sections that might reference the toc.
8653 	 Check the toc itself last.  */
8654       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8655 		  : ibfd->sections);
8656 	   sec != NULL;
8657 	   sec = (sec == toc ? NULL
8658 		  : sec->next == NULL ? toc
8659 		  : sec->next == toc && toc->next ? toc->next
8660 		  : sec->next))
8661 	{
8662 	  int repeat;
8663 
8664 	  if (sec->reloc_count == 0
8665 	      || discarded_section (sec)
8666 	      || get_opd_info (sec)
8667 	      || (sec->flags & SEC_ALLOC) == 0
8668 	      || (sec->flags & SEC_DEBUGGING) != 0)
8669 	    continue;
8670 
8671 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8672 						info->keep_memory);
8673 	  if (relstart == NULL)
8674 	    {
8675 	      free (used);
8676 	      goto error_ret;
8677 	    }
8678 
8679 	  /* Mark toc entries referenced as used.  */
8680 	  do
8681 	    {
8682 	      repeat = 0;
8683 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8684 		{
8685 		  enum elf_ppc64_reloc_type r_type;
8686 		  unsigned long r_symndx;
8687 		  asection *sym_sec;
8688 		  struct elf_link_hash_entry *h;
8689 		  Elf_Internal_Sym *sym;
8690 		  bfd_vma val;
8691 
8692 		  r_type = ELF64_R_TYPE (rel->r_info);
8693 		  switch (r_type)
8694 		    {
8695 		    case R_PPC64_TOC16:
8696 		    case R_PPC64_TOC16_LO:
8697 		    case R_PPC64_TOC16_HI:
8698 		    case R_PPC64_TOC16_HA:
8699 		    case R_PPC64_TOC16_DS:
8700 		    case R_PPC64_TOC16_LO_DS:
8701 		      /* In case we're taking addresses of toc entries.  */
8702 		    case R_PPC64_ADDR64:
8703 		      break;
8704 
8705 		    default:
8706 		      continue;
8707 		    }
8708 
8709 		  r_symndx = ELF64_R_SYM (rel->r_info);
8710 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8711 				  r_symndx, ibfd))
8712 		    {
8713 		      free (used);
8714 		      goto error_ret;
8715 		    }
8716 
8717 		  if (sym_sec != toc)
8718 		    continue;
8719 
8720 		  if (h != NULL)
8721 		    val = h->root.u.def.value;
8722 		  else
8723 		    val = sym->st_value;
8724 		  val += rel->r_addend;
8725 
8726 		  if (val >= toc->size)
8727 		    continue;
8728 
8729 		  if ((skip[val >> 3] & can_optimize) != 0)
8730 		    {
8731 		      bfd_vma off;
8732 		      unsigned char opc;
8733 
8734 		      switch (r_type)
8735 			{
8736 			case R_PPC64_TOC16_HA:
8737 			  break;
8738 
8739 			case R_PPC64_TOC16_LO_DS:
8740 			  off = rel->r_offset;
8741 			  off += (bfd_big_endian (ibfd) ? -2 : 3);
8742 			  if (!bfd_get_section_contents (ibfd, sec, &opc,
8743 							 off, 1))
8744 			    {
8745 			      free (used);
8746 			      goto error_ret;
8747 			    }
8748 			  if ((opc & (0x3f << 2)) == (58u << 2))
8749 			    break;
8750 			  /* Fall through.  */
8751 
8752 			default:
8753 			  /* Wrong sort of reloc, or not a ld.  We may
8754 			     as well clear ref_from_discarded too.  */
8755 			  skip[val >> 3] = 0;
8756 			}
8757 		    }
8758 
8759 		  if (sec != toc)
8760 		    used[val >> 3] = 1;
8761 		  /* For the toc section, we only mark as used if this
8762 		     entry itself isn't unused.  */
8763 		  else if ((used[rel->r_offset >> 3]
8764 			    || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8765 			   && !used[val >> 3])
8766 		    {
8767 		      /* Do all the relocs again, to catch reference
8768 			 chains.  */
8769 		      repeat = 1;
8770 		      used[val >> 3] = 1;
8771 		    }
8772 		}
8773 	    }
8774 	  while (repeat);
8775 
8776 	  if (elf_section_data (sec)->relocs != relstart)
8777 	    free (relstart);
8778 	}
8779 
8780       /* Merge the used and skip arrays.  Assume that TOC
8781 	 doublewords not appearing as either used or unused belong
8782 	 to an entry more than one doubleword in size.  */
8783       for (drop = skip, keep = used, last = 0, some_unused = 0;
8784 	   drop < skip + (toc->size + 7) / 8;
8785 	   ++drop, ++keep)
8786 	{
8787 	  if (*keep)
8788 	    {
8789 	      *drop &= ~ref_from_discarded;
8790 	      if ((*drop & can_optimize) != 0)
8791 		some_unused = 1;
8792 	      last = 0;
8793 	    }
8794 	  else if ((*drop & ref_from_discarded) != 0)
8795 	    {
8796 	      some_unused = 1;
8797 	      last = ref_from_discarded;
8798 	    }
8799 	  else
8800 	    *drop = last;
8801 	}
8802 
8803       free (used);
8804 
8805       if (some_unused)
8806 	{
8807 	  bfd_byte *contents, *src;
8808 	  unsigned long off;
8809 	  Elf_Internal_Sym *sym;
8810 	  bfd_boolean local_toc_syms = FALSE;
8811 
8812 	  /* Shuffle the toc contents, and at the same time convert the
8813 	     skip array from booleans into offsets.  */
8814 	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8815 	    goto error_ret;
8816 
8817 	  elf_section_data (toc)->this_hdr.contents = contents;
8818 
8819 	  for (src = contents, off = 0, drop = skip;
8820 	       src < contents + toc->size;
8821 	       src += 8, ++drop)
8822 	    {
8823 	      if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8824 		off += 8;
8825 	      else if (off != 0)
8826 		{
8827 		  *drop = off;
8828 		  memcpy (src - off, src, 8);
8829 		}
8830 	    }
8831 	  *drop = off;
8832 	  toc->rawsize = toc->size;
8833 	  toc->size = src - contents - off;
8834 
8835 	  /* Adjust addends for relocs against the toc section sym,
8836 	     and optimize any accesses we can.  */
8837 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8838 	    {
8839 	      if (sec->reloc_count == 0
8840 		  || discarded_section (sec))
8841 		continue;
8842 
8843 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8844 						    info->keep_memory);
8845 	      if (relstart == NULL)
8846 		goto error_ret;
8847 
8848 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8849 		{
8850 		  enum elf_ppc64_reloc_type r_type;
8851 		  unsigned long r_symndx;
8852 		  asection *sym_sec;
8853 		  struct elf_link_hash_entry *h;
8854 		  bfd_vma val;
8855 
8856 		  r_type = ELF64_R_TYPE (rel->r_info);
8857 		  switch (r_type)
8858 		    {
8859 		    default:
8860 		      continue;
8861 
8862 		    case R_PPC64_TOC16:
8863 		    case R_PPC64_TOC16_LO:
8864 		    case R_PPC64_TOC16_HI:
8865 		    case R_PPC64_TOC16_HA:
8866 		    case R_PPC64_TOC16_DS:
8867 		    case R_PPC64_TOC16_LO_DS:
8868 		    case R_PPC64_ADDR64:
8869 		      break;
8870 		    }
8871 
8872 		  r_symndx = ELF64_R_SYM (rel->r_info);
8873 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8874 				  r_symndx, ibfd))
8875 		    goto error_ret;
8876 
8877 		  if (sym_sec != toc)
8878 		    continue;
8879 
8880 		  if (h != NULL)
8881 		    val = h->root.u.def.value;
8882 		  else
8883 		    {
8884 		      val = sym->st_value;
8885 		      if (val != 0)
8886 			local_toc_syms = TRUE;
8887 		    }
8888 
8889 		  val += rel->r_addend;
8890 
8891 		  if (val > toc->rawsize)
8892 		    val = toc->rawsize;
8893 		  else if ((skip[val >> 3] & ref_from_discarded) != 0)
8894 		    continue;
8895 		  else if ((skip[val >> 3] & can_optimize) != 0)
8896 		    {
8897 		      Elf_Internal_Rela *tocrel
8898 			= toc_relocs + (skip[val >> 3] >> 2);
8899 		      unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8900 
8901 		      switch (r_type)
8902 			{
8903 			case R_PPC64_TOC16_HA:
8904 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8905 			  break;
8906 
8907 			case R_PPC64_TOC16_LO_DS:
8908 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8909 			  break;
8910 
8911 			default:
8912 			  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8913 			    ppc_howto_init ();
8914 			  info->callbacks->einfo
8915 			    /* xgettext:c-format */
8916 			    (_("%H: %s references "
8917 			       "optimized away TOC entry\n"),
8918 			     ibfd, sec, rel->r_offset,
8919 			     ppc64_elf_howto_table[r_type]->name);
8920 			  bfd_set_error (bfd_error_bad_value);
8921 			  goto error_ret;
8922 			}
8923 		      rel->r_addend = tocrel->r_addend;
8924 		      elf_section_data (sec)->relocs = relstart;
8925 		      continue;
8926 		    }
8927 
8928 		  if (h != NULL || sym->st_value != 0)
8929 		    continue;
8930 
8931 		  rel->r_addend -= skip[val >> 3];
8932 		  elf_section_data (sec)->relocs = relstart;
8933 		}
8934 
8935 	      if (elf_section_data (sec)->relocs != relstart)
8936 		free (relstart);
8937 	    }
8938 
8939 	  /* We shouldn't have local or global symbols defined in the TOC,
8940 	     but handle them anyway.  */
8941 	  if (local_syms != NULL)
8942 	    for (sym = local_syms;
8943 		 sym < local_syms + symtab_hdr->sh_info;
8944 		 ++sym)
8945 	      if (sym->st_value != 0
8946 		  && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
8947 		{
8948 		  unsigned long i;
8949 
8950 		  if (sym->st_value > toc->rawsize)
8951 		    i = toc->rawsize >> 3;
8952 		  else
8953 		    i = sym->st_value >> 3;
8954 
8955 		  if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
8956 		    {
8957 		      if (local_toc_syms)
8958 			_bfd_error_handler
8959 			  (_("%s defined on removed toc entry"),
8960 			   bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
8961 		      do
8962 			++i;
8963 		      while ((skip[i] & (ref_from_discarded | can_optimize)));
8964 		      sym->st_value = (bfd_vma) i << 3;
8965 		    }
8966 
8967 		  sym->st_value -= skip[i];
8968 		  symtab_hdr->contents = (unsigned char *) local_syms;
8969 		}
8970 
8971 	  /* Adjust any global syms defined in this toc input section.  */
8972 	  if (toc_inf.global_toc_syms)
8973 	    {
8974 	      toc_inf.toc = toc;
8975 	      toc_inf.skip = skip;
8976 	      toc_inf.global_toc_syms = FALSE;
8977 	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
8978 				      &toc_inf);
8979 	    }
8980 
8981 	  if (toc->reloc_count != 0)
8982 	    {
8983 	      Elf_Internal_Shdr *rel_hdr;
8984 	      Elf_Internal_Rela *wrel;
8985 	      bfd_size_type sz;
8986 
8987 	      /* Remove unused toc relocs, and adjust those we keep.  */
8988 	      if (toc_relocs == NULL)
8989 		toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8990 							info->keep_memory);
8991 	      if (toc_relocs == NULL)
8992 		goto error_ret;
8993 
8994 	      wrel = toc_relocs;
8995 	      for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8996 		if ((skip[rel->r_offset >> 3]
8997 		     & (ref_from_discarded | can_optimize)) == 0)
8998 		  {
8999 		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9000 		    wrel->r_info = rel->r_info;
9001 		    wrel->r_addend = rel->r_addend;
9002 		    ++wrel;
9003 		  }
9004 		else if (!dec_dynrel_count (rel->r_info, toc, info,
9005 					    &local_syms, NULL, NULL))
9006 		  goto error_ret;
9007 
9008 	      elf_section_data (toc)->relocs = toc_relocs;
9009 	      toc->reloc_count = wrel - toc_relocs;
9010 	      rel_hdr = _bfd_elf_single_rel_hdr (toc);
9011 	      sz = rel_hdr->sh_entsize;
9012 	      rel_hdr->sh_size = toc->reloc_count * sz;
9013 	    }
9014 	}
9015       else if (toc_relocs != NULL
9016 	       && elf_section_data (toc)->relocs != toc_relocs)
9017 	free (toc_relocs);
9018 
9019       if (local_syms != NULL
9020 	  && symtab_hdr->contents != (unsigned char *) local_syms)
9021 	{
9022 	  if (!info->keep_memory)
9023 	    free (local_syms);
9024 	  else
9025 	    symtab_hdr->contents = (unsigned char *) local_syms;
9026 	}
9027       free (skip);
9028     }
9029 
9030   /* Look for cases where we can change an indirect GOT access to
9031      a GOT relative or PC relative access, possibly reducing the
9032      number of GOT entries.  */
9033   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9034     {
9035       asection *sec;
9036       Elf_Internal_Shdr *symtab_hdr;
9037       Elf_Internal_Sym *local_syms;
9038       Elf_Internal_Rela *relstart, *rel;
9039       bfd_vma got;
9040 
9041       if (!is_ppc64_elf (ibfd))
9042 	continue;
9043 
9044       if (!ppc64_elf_tdata (ibfd)->has_optrel)
9045 	continue;
9046 
9047       sec = ppc64_elf_tdata (ibfd)->got;
9048       got = 0;
9049       if (sec != NULL)
9050 	got = sec->output_section->vma + sec->output_offset + 0x8000;
9051 
9052       local_syms = NULL;
9053       symtab_hdr = &elf_symtab_hdr (ibfd);
9054 
9055       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9056 	{
9057 	  if (sec->reloc_count == 0
9058 	      || !ppc64_elf_section_data (sec)->has_optrel
9059 	      || discarded_section (sec))
9060 	    continue;
9061 
9062 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9063 						info->keep_memory);
9064 	  if (relstart == NULL)
9065 	    {
9066 	    got_error_ret:
9067 	      if (local_syms != NULL
9068 		  && symtab_hdr->contents != (unsigned char *) local_syms)
9069 		free (local_syms);
9070 	      if (sec != NULL
9071 		  && relstart != NULL
9072 		  && elf_section_data (sec)->relocs != relstart)
9073 		free (relstart);
9074 	      return FALSE;
9075 	    }
9076 
9077 	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9078 	    {
9079 	      enum elf_ppc64_reloc_type r_type;
9080 	      unsigned long r_symndx;
9081 	      Elf_Internal_Sym *sym;
9082 	      asection *sym_sec;
9083 	      struct elf_link_hash_entry *h;
9084 	      struct got_entry *ent;
9085 	      bfd_vma val, pc;
9086 	      unsigned char buf[8];
9087 	      unsigned int insn;
9088 	      enum {no_check, check_lo, check_ha} insn_check;
9089 
9090 	      r_type = ELF64_R_TYPE (rel->r_info);
9091 	      switch (r_type)
9092 		{
9093 		default:
9094 		  insn_check = no_check;
9095 		  break;
9096 
9097 		case R_PPC64_PLT16_HA:
9098 		case R_PPC64_GOT_TLSLD16_HA:
9099 		case R_PPC64_GOT_TLSGD16_HA:
9100 		case R_PPC64_GOT_TPREL16_HA:
9101 		case R_PPC64_GOT_DTPREL16_HA:
9102 		case R_PPC64_GOT16_HA:
9103 		case R_PPC64_TOC16_HA:
9104 		  insn_check = check_ha;
9105 		  break;
9106 
9107 		case R_PPC64_PLT16_LO:
9108 		case R_PPC64_PLT16_LO_DS:
9109 		case R_PPC64_GOT_TLSLD16_LO:
9110 		case R_PPC64_GOT_TLSGD16_LO:
9111 		case R_PPC64_GOT_TPREL16_LO_DS:
9112 		case R_PPC64_GOT_DTPREL16_LO_DS:
9113 		case R_PPC64_GOT16_LO:
9114 		case R_PPC64_GOT16_LO_DS:
9115 		case R_PPC64_TOC16_LO:
9116 		case R_PPC64_TOC16_LO_DS:
9117 		  insn_check = check_lo;
9118 		  break;
9119 		}
9120 
9121 	      if (insn_check != no_check)
9122 		{
9123 		  bfd_vma off = rel->r_offset & ~3;
9124 
9125 		  if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
9126 		    goto got_error_ret;
9127 
9128 		  insn = bfd_get_32 (ibfd, buf);
9129 		  if (insn_check == check_lo
9130 		      ? !ok_lo_toc_insn (insn, r_type)
9131 		      : ((insn & ((0x3fu << 26) | 0x1f << 16))
9132 			 != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9133 		    {
9134 		      char str[12];
9135 
9136 		      ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
9137 		      sprintf (str, "%#08x", insn);
9138 		      info->callbacks->einfo
9139 			/* xgettext:c-format */
9140 			(_("%H: got/toc optimization is not supported for"
9141 			   " %s instruction\n"),
9142 			 ibfd, sec, rel->r_offset & ~3, str);
9143 		      continue;
9144 		    }
9145 		}
9146 
9147 	      switch (r_type)
9148 		{
9149 		/* Note that we don't delete GOT entries for
9150 		   R_PPC64_GOT16_DS since we'd need a lot more
9151 		   analysis.  For starters, the preliminary layout is
9152 		   before the GOT, PLT, dynamic sections and stubs are
9153 		   laid out.  Then we'd need to allow for changes in
9154 		   distance between sections caused by alignment.  */
9155 		default:
9156 		  continue;
9157 
9158 		case R_PPC64_GOT16_HA:
9159 		case R_PPC64_GOT16_LO_DS:
9160 		case R_PPC64_GOT_PCREL34:
9161 		  break;
9162 		}
9163 
9164 	      r_symndx = ELF64_R_SYM (rel->r_info);
9165 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9166 			      r_symndx, ibfd))
9167 		goto got_error_ret;
9168 
9169 	      if (sym_sec == NULL
9170 		  || sym_sec->output_section == NULL
9171 		  || discarded_section (sym_sec))
9172 		continue;
9173 
9174 	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
9175 		continue;
9176 
9177 	      if (h != NULL)
9178 		val = h->root.u.def.value;
9179 	      else
9180 		val = sym->st_value;
9181 	      val += rel->r_addend;
9182 	      val += sym_sec->output_section->vma + sym_sec->output_offset;
9183 
9184 /* Fudge factor to allow for the fact that the preliminary layout
9185    isn't exact.  Reduce limits by this factor.  */
9186 #define LIMIT_ADJUST(LIMIT) ((LIMIT) - (LIMIT) / 16)
9187 
9188 	      switch (r_type)
9189 		{
9190 		default:
9191 		  continue;
9192 
9193 		case R_PPC64_GOT16_HA:
9194 		  if (val - got + LIMIT_ADJUST (0x80008000ULL)
9195 		      >= LIMIT_ADJUST (0x100000000ULL))
9196 		    continue;
9197 
9198 		  if (!bfd_get_section_contents (ibfd, sec, buf,
9199 						 rel->r_offset & ~3, 4))
9200 		    goto got_error_ret;
9201 		  insn = bfd_get_32 (ibfd, buf);
9202 		  if (((insn & ((0x3fu << 26) | 0x1f << 16))
9203 		       != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9204 		    continue;
9205 		  break;
9206 
9207 		case R_PPC64_GOT16_LO_DS:
9208 		  if (val - got + LIMIT_ADJUST (0x80008000ULL)
9209 		      >= LIMIT_ADJUST (0x100000000ULL))
9210 		    continue;
9211 		  if (!bfd_get_section_contents (ibfd, sec, buf,
9212 						 rel->r_offset & ~3, 4))
9213 		    goto got_error_ret;
9214 		  insn = bfd_get_32 (ibfd, buf);
9215 		  if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */)
9216 		    continue;
9217 		  break;
9218 
9219 		case R_PPC64_GOT_PCREL34:
9220 		  pc = rel->r_offset;
9221 		  pc += sec->output_section->vma + sec->output_offset;
9222 		  if (val - pc + LIMIT_ADJUST (1ULL << 33)
9223 		      >= LIMIT_ADJUST (1ULL << 34))
9224 		    continue;
9225 		  if (!bfd_get_section_contents (ibfd, sec, buf,
9226 						 rel->r_offset & ~3, 8))
9227 		    goto got_error_ret;
9228 		  insn = bfd_get_32 (ibfd, buf);
9229 		  if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
9230 		    continue;
9231 		  insn = bfd_get_32 (ibfd, buf + 4);
9232 		  if ((insn & (0x3fu << 26)) != 57u << 26)
9233 		    continue;
9234 		  break;
9235 		}
9236 #undef LIMIT_ADJUST
9237 
9238 	      if (h != NULL)
9239 		ent = h->got.glist;
9240 	      else
9241 		{
9242 		  struct got_entry **local_got_ents = elf_local_got_ents (ibfd);
9243 		  ent = local_got_ents[r_symndx];
9244 		}
9245 	      for (; ent != NULL; ent = ent->next)
9246 		if (ent->addend == rel->r_addend
9247 		    && ent->owner == ibfd
9248 		    && ent->tls_type == 0)
9249 		  break;
9250 	      BFD_ASSERT (ent && ent->got.refcount > 0);
9251 	      ent->got.refcount -= 1;
9252 	    }
9253 
9254 	  if (elf_section_data (sec)->relocs != relstart)
9255 	    free (relstart);
9256 	}
9257 
9258       if (local_syms != NULL
9259 	  && symtab_hdr->contents != (unsigned char *) local_syms)
9260 	{
9261 	  if (!info->keep_memory)
9262 	    free (local_syms);
9263 	  else
9264 	    symtab_hdr->contents = (unsigned char *) local_syms;
9265 	}
9266     }
9267 
9268   return TRUE;
9269 }
9270 
9271 /* Return true iff input section I references the TOC using
9272    instructions limited to +/-32k offsets.  */
9273 
9274 bfd_boolean
9275 ppc64_elf_has_small_toc_reloc (asection *i)
9276 {
9277   return (is_ppc64_elf (i->owner)
9278 	  && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9279 }
9280 
9281 /* Allocate space for one GOT entry.  */
9282 
9283 static void
9284 allocate_got (struct elf_link_hash_entry *h,
9285 	      struct bfd_link_info *info,
9286 	      struct got_entry *gent)
9287 {
9288   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9289   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
9290   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9291 		 ? 16 : 8);
9292   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9293 		  ? 2 : 1) * sizeof (Elf64_External_Rela);
9294   asection *got = ppc64_elf_tdata (gent->owner)->got;
9295 
9296   gent->got.offset = got->size;
9297   got->size += entsize;
9298 
9299   if (h->type == STT_GNU_IFUNC)
9300     {
9301       htab->elf.irelplt->size += rentsize;
9302       htab->got_reli_size += rentsize;
9303     }
9304   else if (((bfd_link_pic (info)
9305 	     && !(gent->tls_type != 0
9306 		  && bfd_link_executable (info)
9307 		  && SYMBOL_REFERENCES_LOCAL (info, h)))
9308 	    || (htab->elf.dynamic_sections_created
9309 		&& h->dynindx != -1
9310 		&& !SYMBOL_REFERENCES_LOCAL (info, h)))
9311 	   && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9312     {
9313       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9314       relgot->size += rentsize;
9315     }
9316 }
9317 
9318 /* This function merges got entries in the same toc group.  */
9319 
9320 static void
9321 merge_got_entries (struct got_entry **pent)
9322 {
9323   struct got_entry *ent, *ent2;
9324 
9325   for (ent = *pent; ent != NULL; ent = ent->next)
9326     if (!ent->is_indirect)
9327       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9328 	if (!ent2->is_indirect
9329 	    && ent2->addend == ent->addend
9330 	    && ent2->tls_type == ent->tls_type
9331 	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
9332 	  {
9333 	    ent2->is_indirect = TRUE;
9334 	    ent2->got.ent = ent;
9335 	  }
9336 }
9337 
9338 /* If H is undefined, make it dynamic if that makes sense.  */
9339 
9340 static bfd_boolean
9341 ensure_undef_dynamic (struct bfd_link_info *info,
9342 		      struct elf_link_hash_entry *h)
9343 {
9344   struct elf_link_hash_table *htab = elf_hash_table (info);
9345 
9346   if (htab->dynamic_sections_created
9347       && ((info->dynamic_undefined_weak != 0
9348 	   && h->root.type == bfd_link_hash_undefweak)
9349 	  || h->root.type == bfd_link_hash_undefined)
9350       && h->dynindx == -1
9351       && !h->forced_local
9352       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9353     return bfd_elf_link_record_dynamic_symbol (info, h);
9354   return TRUE;
9355 }
9356 
9357 /* Allocate space in .plt, .got and associated reloc sections for
9358    dynamic relocs.  */
9359 
9360 static bfd_boolean
9361 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9362 {
9363   struct bfd_link_info *info;
9364   struct ppc_link_hash_table *htab;
9365   asection *s;
9366   struct ppc_link_hash_entry *eh;
9367   struct got_entry **pgent, *gent;
9368 
9369   if (h->root.type == bfd_link_hash_indirect)
9370     return TRUE;
9371 
9372   info = (struct bfd_link_info *) inf;
9373   htab = ppc_hash_table (info);
9374   if (htab == NULL)
9375     return FALSE;
9376 
9377   eh = (struct ppc_link_hash_entry *) h;
9378   /* Run through the TLS GD got entries first if we're changing them
9379      to TPREL.  */
9380   if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE))
9381     for (gent = h->got.glist; gent != NULL; gent = gent->next)
9382       if (gent->got.refcount > 0
9383 	  && (gent->tls_type & TLS_GD) != 0)
9384 	{
9385 	  /* This was a GD entry that has been converted to TPREL.  If
9386 	     there happens to be a TPREL entry we can use that one.  */
9387 	  struct got_entry *ent;
9388 	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
9389 	    if (ent->got.refcount > 0
9390 		&& (ent->tls_type & TLS_TPREL) != 0
9391 		&& ent->addend == gent->addend
9392 		&& ent->owner == gent->owner)
9393 	      {
9394 		gent->got.refcount = 0;
9395 		break;
9396 	      }
9397 
9398 	  /* If not, then we'll be using our own TPREL entry.  */
9399 	  if (gent->got.refcount != 0)
9400 	    gent->tls_type = TLS_TLS | TLS_TPREL;
9401 	}
9402 
9403   /* Remove any list entry that won't generate a word in the GOT before
9404      we call merge_got_entries.  Otherwise we risk merging to empty
9405      entries.  */
9406   pgent = &h->got.glist;
9407   while ((gent = *pgent) != NULL)
9408     if (gent->got.refcount > 0)
9409       {
9410 	if ((gent->tls_type & TLS_LD) != 0
9411 	    && SYMBOL_REFERENCES_LOCAL (info, h))
9412 	  {
9413 	    ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9414 	    *pgent = gent->next;
9415 	  }
9416 	else
9417 	  pgent = &gent->next;
9418       }
9419     else
9420       *pgent = gent->next;
9421 
9422   if (!htab->do_multi_toc)
9423     merge_got_entries (&h->got.glist);
9424 
9425   for (gent = h->got.glist; gent != NULL; gent = gent->next)
9426     if (!gent->is_indirect)
9427       {
9428 	/* Ensure we catch all the cases where this symbol should
9429 	   be made dynamic.  */
9430 	if (!ensure_undef_dynamic (info, h))
9431 	  return FALSE;
9432 
9433 	if (!is_ppc64_elf (gent->owner))
9434 	  abort ();
9435 
9436 	allocate_got (h, info, gent);
9437       }
9438 
9439   /* If no dynamic sections we can't have dynamic relocs, except for
9440      IFUNCs which are handled even in static executables.  */
9441   if (!htab->elf.dynamic_sections_created
9442       && h->type != STT_GNU_IFUNC)
9443     eh->dyn_relocs = NULL;
9444 
9445   /* Discard relocs on undefined symbols that must be local.  */
9446   else if (h->root.type == bfd_link_hash_undefined
9447 	   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9448     eh->dyn_relocs = NULL;
9449 
9450   /* Also discard relocs on undefined weak syms with non-default
9451      visibility, or when dynamic_undefined_weak says so.  */
9452   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9453     eh->dyn_relocs = NULL;
9454 
9455   if (eh->dyn_relocs != NULL)
9456     {
9457       struct elf_dyn_relocs *p, **pp;
9458 
9459       /* In the shared -Bsymbolic case, discard space allocated for
9460 	 dynamic pc-relative relocs against symbols which turn out to
9461 	 be defined in regular objects.  For the normal shared case,
9462 	 discard space for relocs that have become local due to symbol
9463 	 visibility changes.  */
9464       if (bfd_link_pic (info))
9465 	{
9466 	  /* Relocs that use pc_count are those that appear on a call
9467 	     insn, or certain REL relocs (see must_be_dyn_reloc) that
9468 	     can be generated via assembly.  We want calls to
9469 	     protected symbols to resolve directly to the function
9470 	     rather than going via the plt.  If people want function
9471 	     pointer comparisons to work as expected then they should
9472 	     avoid writing weird assembly.  */
9473 	  if (SYMBOL_CALLS_LOCAL (info, h))
9474 	    {
9475 	      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9476 		{
9477 		  p->count -= p->pc_count;
9478 		  p->pc_count = 0;
9479 		  if (p->count == 0)
9480 		    *pp = p->next;
9481 		  else
9482 		    pp = &p->next;
9483 		}
9484 	    }
9485 
9486 	  if (eh->dyn_relocs != NULL)
9487 	    {
9488 	      /* Ensure we catch all the cases where this symbol
9489 		 should be made dynamic.  */
9490 	      if (!ensure_undef_dynamic (info, h))
9491 		return FALSE;
9492 	    }
9493 	}
9494 
9495       /* For a fixed position executable, discard space for
9496 	 relocs against symbols which are not dynamic.  */
9497       else if (h->type != STT_GNU_IFUNC)
9498 	{
9499 	  if (h->dynamic_adjusted
9500 	      && !h->def_regular
9501 	      && !ELF_COMMON_DEF_P (h))
9502 	    {
9503 	      /* Ensure we catch all the cases where this symbol
9504 		 should be made dynamic.  */
9505 	      if (!ensure_undef_dynamic (info, h))
9506 		return FALSE;
9507 
9508 	      /* But if that didn't work out, discard dynamic relocs.  */
9509 	      if (h->dynindx == -1)
9510 		eh->dyn_relocs = NULL;
9511 	    }
9512 	  else
9513 	    eh->dyn_relocs = NULL;
9514 	}
9515 
9516       /* Finally, allocate space.  */
9517       for (p = eh->dyn_relocs; p != NULL; p = p->next)
9518 	{
9519 	  asection *sreloc = elf_section_data (p->sec)->sreloc;
9520 	  if (eh->elf.type == STT_GNU_IFUNC)
9521 	    sreloc = htab->elf.irelplt;
9522 	  sreloc->size += p->count * sizeof (Elf64_External_Rela);
9523 	}
9524     }
9525 
9526   /* We might need a PLT entry when the symbol
9527      a) is dynamic, or
9528      b) is an ifunc, or
9529      c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
9530      d) has plt16 relocs and we are linking statically.  */
9531   if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
9532       || h->type == STT_GNU_IFUNC
9533       || (h->needs_plt && h->dynamic_adjusted)
9534       || (h->needs_plt
9535 	  && h->def_regular
9536 	  && !htab->elf.dynamic_sections_created
9537 	  && !htab->can_convert_all_inline_plt
9538 	  && (((struct ppc_link_hash_entry *) h)->tls_mask
9539 	      & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
9540     {
9541       struct plt_entry *pent;
9542       bfd_boolean doneone = FALSE;
9543       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9544 	if (pent->plt.refcount > 0)
9545 	  {
9546 	    if (!htab->elf.dynamic_sections_created
9547 		|| h->dynindx == -1)
9548 	      {
9549 		if (h->type == STT_GNU_IFUNC)
9550 		  {
9551 		    s = htab->elf.iplt;
9552 		    pent->plt.offset = s->size;
9553 		    s->size += PLT_ENTRY_SIZE (htab);
9554 		    s = htab->elf.irelplt;
9555 		  }
9556 		else
9557 		  {
9558 		    s = htab->pltlocal;
9559 		    pent->plt.offset = s->size;
9560 		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9561 		    s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
9562 		  }
9563 	      }
9564 	    else
9565 	      {
9566 		/* If this is the first .plt entry, make room for the special
9567 		   first entry.  */
9568 		s = htab->elf.splt;
9569 		if (s->size == 0)
9570 		  s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9571 
9572 		pent->plt.offset = s->size;
9573 
9574 		/* Make room for this entry.  */
9575 		s->size += PLT_ENTRY_SIZE (htab);
9576 
9577 		/* Make room for the .glink code.  */
9578 		s = htab->glink;
9579 		if (s->size == 0)
9580 		  s->size += GLINK_PLTRESOLVE_SIZE (htab);
9581 		if (htab->opd_abi)
9582 		  {
9583 		    /* We need bigger stubs past index 32767.  */
9584 		    if (s->size >= GLINK_PLTRESOLVE_SIZE (htab) + 32768*2*4)
9585 		      s->size += 4;
9586 		    s->size += 2*4;
9587 		  }
9588 		else
9589 		  s->size += 4;
9590 
9591 		/* We also need to make an entry in the .rela.plt section.  */
9592 		s = htab->elf.srelplt;
9593 	      }
9594 	    if (s != NULL)
9595 	      s->size += sizeof (Elf64_External_Rela);
9596 	    doneone = TRUE;
9597 	  }
9598 	else
9599 	  pent->plt.offset = (bfd_vma) -1;
9600       if (!doneone)
9601 	{
9602 	  h->plt.plist = NULL;
9603 	  h->needs_plt = 0;
9604 	}
9605     }
9606   else
9607     {
9608       h->plt.plist = NULL;
9609       h->needs_plt = 0;
9610     }
9611 
9612   return TRUE;
9613 }
9614 
9615 #define PPC_LO(v) ((v) & 0xffff)
9616 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9617 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9618 #define D34(v) \
9619   ((((v) & 0x3ffff0000ULL) << 16) | (v & 0xffff))
9620 #define HA34(v) ((v + (1ULL << 33)) >> 34)
9621 
9622 /* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9623    to set up space for global entry stubs.  These are put in glink,
9624    after the branch table.  */
9625 
9626 static bfd_boolean
9627 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9628 {
9629   struct bfd_link_info *info;
9630   struct ppc_link_hash_table *htab;
9631   struct plt_entry *pent;
9632   asection *s, *plt;
9633 
9634   if (h->root.type == bfd_link_hash_indirect)
9635     return TRUE;
9636 
9637   if (!h->pointer_equality_needed)
9638     return TRUE;
9639 
9640   if (h->def_regular)
9641     return TRUE;
9642 
9643   info = inf;
9644   htab = ppc_hash_table (info);
9645   if (htab == NULL)
9646     return FALSE;
9647 
9648   s = htab->global_entry;
9649   plt = htab->elf.splt;
9650   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9651     if (pent->plt.offset != (bfd_vma) -1
9652 	&& pent->addend == 0)
9653       {
9654 	/* For ELFv2, if this symbol is not defined in a regular file
9655 	   and we are not generating a shared library or pie, then we
9656 	   need to define the symbol in the executable on a call stub.
9657 	   This is to avoid text relocations.  */
9658 	bfd_vma off, stub_align, stub_off, stub_size;
9659 	unsigned int align_power;
9660 
9661 	stub_size = 16;
9662 	stub_off = s->size;
9663 	if (htab->params->plt_stub_align >= 0)
9664 	  align_power = htab->params->plt_stub_align;
9665 	else
9666 	  align_power = -htab->params->plt_stub_align;
9667 	/* Setting section alignment is delayed until we know it is
9668 	   non-empty.  Otherwise the .text output section will be
9669 	   aligned at least to plt_stub_align even when no global
9670 	   entry stubs are needed.  */
9671 	if (s->alignment_power < align_power)
9672 	  s->alignment_power = align_power;
9673 	stub_align = (bfd_vma) 1 << align_power;
9674 	if (htab->params->plt_stub_align >= 0
9675 	    || ((((stub_off + stub_size - 1) & -stub_align)
9676 		 - (stub_off & -stub_align))
9677 		> ((stub_size - 1) & -stub_align)))
9678 	  stub_off = (stub_off + stub_align - 1) & -stub_align;
9679 	off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
9680 	off -= stub_off + s->output_offset + s->output_section->vma;
9681 	/* Note that for --plt-stub-align negative we have a possible
9682 	   dependency between stub offset and size.  Break that
9683 	   dependency by assuming the max stub size when calculating
9684 	   the stub offset.  */
9685 	if (PPC_HA (off) == 0)
9686 	  stub_size -= 4;
9687 	h->root.type = bfd_link_hash_defined;
9688 	h->root.u.def.section = s;
9689 	h->root.u.def.value = stub_off;
9690 	s->size = stub_off + stub_size;
9691 	break;
9692       }
9693   return TRUE;
9694 }
9695 
9696 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
9697    read-only sections.  */
9698 
9699 static bfd_boolean
9700 maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
9701 {
9702   asection *sec;
9703 
9704   if (h->root.type == bfd_link_hash_indirect)
9705     return TRUE;
9706 
9707   sec = readonly_dynrelocs (h);
9708   if (sec != NULL)
9709     {
9710       struct bfd_link_info *info = (struct bfd_link_info *) inf;
9711 
9712       info->flags |= DF_TEXTREL;
9713       info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'"
9714 				" in read-only section `%pA'\n"),
9715 			      sec->owner, h->root.root.string, sec);
9716 
9717       /* Not an error, just cut short the traversal.  */
9718       return FALSE;
9719     }
9720   return TRUE;
9721 }
9722 
9723 /* Set the sizes of the dynamic sections.  */
9724 
9725 static bfd_boolean
9726 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9727 				 struct bfd_link_info *info)
9728 {
9729   struct ppc_link_hash_table *htab;
9730   bfd *dynobj;
9731   asection *s;
9732   bfd_boolean relocs;
9733   bfd *ibfd;
9734   struct got_entry *first_tlsld;
9735 
9736   htab = ppc_hash_table (info);
9737   if (htab == NULL)
9738     return FALSE;
9739 
9740   dynobj = htab->elf.dynobj;
9741   if (dynobj == NULL)
9742     abort ();
9743 
9744   if (htab->elf.dynamic_sections_created)
9745     {
9746       /* Set the contents of the .interp section to the interpreter.  */
9747       if (bfd_link_executable (info) && !info->nointerp)
9748 	{
9749 	  s = bfd_get_linker_section (dynobj, ".interp");
9750 	  if (s == NULL)
9751 	    abort ();
9752 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9753 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9754 	}
9755     }
9756 
9757   /* Set up .got offsets for local syms, and space for local dynamic
9758      relocs.  */
9759   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9760     {
9761       struct got_entry **lgot_ents;
9762       struct got_entry **end_lgot_ents;
9763       struct plt_entry **local_plt;
9764       struct plt_entry **end_local_plt;
9765       unsigned char *lgot_masks;
9766       bfd_size_type locsymcount;
9767       Elf_Internal_Shdr *symtab_hdr;
9768 
9769       if (!is_ppc64_elf (ibfd))
9770 	continue;
9771 
9772       for (s = ibfd->sections; s != NULL; s = s->next)
9773 	{
9774 	  struct ppc_dyn_relocs *p;
9775 
9776 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9777 	    {
9778 	      if (!bfd_is_abs_section (p->sec)
9779 		  && bfd_is_abs_section (p->sec->output_section))
9780 		{
9781 		  /* Input section has been discarded, either because
9782 		     it is a copy of a linkonce section or due to
9783 		     linker script /DISCARD/, so we'll be discarding
9784 		     the relocs too.  */
9785 		}
9786 	      else if (p->count != 0)
9787 		{
9788 		  asection *srel = elf_section_data (p->sec)->sreloc;
9789 		  if (p->ifunc)
9790 		    srel = htab->elf.irelplt;
9791 		  srel->size += p->count * sizeof (Elf64_External_Rela);
9792 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9793 		    {
9794 		      if (info->warn_shared_textrel)
9795 			(*_bfd_error_handler)
9796 			  (_("warning: dynamic relocation in readonly section `%s'"),
9797 			  p->sec->output_section->name);
9798 		      info->flags |= DF_TEXTREL;
9799 		    }
9800 		}
9801 	    }
9802 	}
9803 
9804       lgot_ents = elf_local_got_ents (ibfd);
9805       if (!lgot_ents)
9806 	continue;
9807 
9808       symtab_hdr = &elf_symtab_hdr (ibfd);
9809       locsymcount = symtab_hdr->sh_info;
9810       end_lgot_ents = lgot_ents + locsymcount;
9811       local_plt = (struct plt_entry **) end_lgot_ents;
9812       end_local_plt = local_plt + locsymcount;
9813       lgot_masks = (unsigned char *) end_local_plt;
9814       s = ppc64_elf_tdata (ibfd)->got;
9815       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9816 	{
9817 	  struct got_entry **pent, *ent;
9818 
9819 	  pent = lgot_ents;
9820 	  while ((ent = *pent) != NULL)
9821 	    if (ent->got.refcount > 0)
9822 	      {
9823 		if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9824 		  {
9825 		    ppc64_tlsld_got (ibfd)->got.refcount += 1;
9826 		    *pent = ent->next;
9827 		  }
9828 		else
9829 		  {
9830 		    unsigned int ent_size = 8;
9831 		    unsigned int rel_size = sizeof (Elf64_External_Rela);
9832 
9833 		    ent->got.offset = s->size;
9834 		    if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9835 		      {
9836 			ent_size *= 2;
9837 			rel_size *= 2;
9838 		      }
9839 		    s->size += ent_size;
9840 		    if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9841 		      {
9842 			htab->elf.irelplt->size += rel_size;
9843 			htab->got_reli_size += rel_size;
9844 		      }
9845 		    else if (bfd_link_pic (info)
9846 			     && !(ent->tls_type != 0
9847 				  && bfd_link_executable (info)))
9848 		      {
9849 			asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9850 			srel->size += rel_size;
9851 		      }
9852 		    pent = &ent->next;
9853 		  }
9854 	      }
9855 	    else
9856 	      *pent = ent->next;
9857 	}
9858 
9859       /* Allocate space for plt calls to local syms.  */
9860       lgot_masks = (unsigned char *) end_local_plt;
9861       for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
9862 	{
9863 	  struct plt_entry *ent;
9864 
9865 	  for (ent = *local_plt; ent != NULL; ent = ent->next)
9866 	    if (ent->plt.refcount > 0)
9867 	      {
9868 		if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9869 		  {
9870 		    s = htab->elf.iplt;
9871 		    ent->plt.offset = s->size;
9872 		    s->size += PLT_ENTRY_SIZE (htab);
9873 		    htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
9874 		  }
9875 		else if (htab->can_convert_all_inline_plt
9876 			 || (*lgot_masks & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)
9877 		  ent->plt.offset = (bfd_vma) -1;
9878 		else
9879 		  {
9880 		    s = htab->pltlocal;
9881 		    ent->plt.offset = s->size;
9882 		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9883 		    if (bfd_link_pic (info))
9884 		      htab->relpltlocal->size += sizeof (Elf64_External_Rela);
9885 		  }
9886 	      }
9887 	    else
9888 	      ent->plt.offset = (bfd_vma) -1;
9889 	}
9890     }
9891 
9892   /* Allocate global sym .plt and .got entries, and space for global
9893      sym dynamic relocs.  */
9894   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9895 
9896   if (!htab->opd_abi && !bfd_link_pic (info))
9897     elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
9898 
9899   first_tlsld = NULL;
9900   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9901     {
9902       struct got_entry *ent;
9903 
9904       if (!is_ppc64_elf (ibfd))
9905 	continue;
9906 
9907       ent = ppc64_tlsld_got (ibfd);
9908       if (ent->got.refcount > 0)
9909 	{
9910 	  if (!htab->do_multi_toc && first_tlsld != NULL)
9911 	    {
9912 	      ent->is_indirect = TRUE;
9913 	      ent->got.ent = first_tlsld;
9914 	    }
9915 	  else
9916 	    {
9917 	      if (first_tlsld == NULL)
9918 		first_tlsld = ent;
9919 	      s = ppc64_elf_tdata (ibfd)->got;
9920 	      ent->got.offset = s->size;
9921 	      ent->owner = ibfd;
9922 	      s->size += 16;
9923 	      if (bfd_link_dll (info))
9924 		{
9925 		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9926 		  srel->size += sizeof (Elf64_External_Rela);
9927 		}
9928 	    }
9929 	}
9930       else
9931 	ent->got.offset = (bfd_vma) -1;
9932     }
9933 
9934   /* We now have determined the sizes of the various dynamic sections.
9935      Allocate memory for them.  */
9936   relocs = FALSE;
9937   for (s = dynobj->sections; s != NULL; s = s->next)
9938     {
9939       if ((s->flags & SEC_LINKER_CREATED) == 0)
9940 	continue;
9941 
9942       if (s == htab->brlt || s == htab->relbrlt)
9943 	/* These haven't been allocated yet;  don't strip.  */
9944 	continue;
9945       else if (s == htab->elf.sgot
9946 	       || s == htab->elf.splt
9947 	       || s == htab->elf.iplt
9948 	       || s == htab->pltlocal
9949 	       || s == htab->glink
9950 	       || s == htab->global_entry
9951 	       || s == htab->elf.sdynbss
9952 	       || s == htab->elf.sdynrelro)
9953 	{
9954 	  /* Strip this section if we don't need it; see the
9955 	     comment below.  */
9956 	}
9957       else if (s == htab->glink_eh_frame)
9958 	{
9959 	  if (!bfd_is_abs_section (s->output_section))
9960 	    /* Not sized yet.  */
9961 	    continue;
9962 	}
9963       else if (CONST_STRNEQ (s->name, ".rela"))
9964 	{
9965 	  if (s->size != 0)
9966 	    {
9967 	      if (s != htab->elf.srelplt)
9968 		relocs = TRUE;
9969 
9970 	      /* We use the reloc_count field as a counter if we need
9971 		 to copy relocs into the output file.  */
9972 	      s->reloc_count = 0;
9973 	    }
9974 	}
9975       else
9976 	{
9977 	  /* It's not one of our sections, so don't allocate space.  */
9978 	  continue;
9979 	}
9980 
9981       if (s->size == 0)
9982 	{
9983 	  /* If we don't need this section, strip it from the
9984 	     output file.  This is mostly to handle .rela.bss and
9985 	     .rela.plt.  We must create both sections in
9986 	     create_dynamic_sections, because they must be created
9987 	     before the linker maps input sections to output
9988 	     sections.  The linker does that before
9989 	     adjust_dynamic_symbol is called, and it is that
9990 	     function which decides whether anything needs to go
9991 	     into these sections.  */
9992 	  s->flags |= SEC_EXCLUDE;
9993 	  continue;
9994 	}
9995 
9996       if (bfd_is_abs_section (s->output_section))
9997 	_bfd_error_handler (_("warning: discarding dynamic section %s"),
9998 			    s->name);
9999 
10000       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10001 	continue;
10002 
10003       /* Allocate memory for the section contents.  We use bfd_zalloc
10004 	 here in case unused entries are not reclaimed before the
10005 	 section's contents are written out.  This should not happen,
10006 	 but this way if it does we get a R_PPC64_NONE reloc in .rela
10007 	 sections instead of garbage.
10008 	 We also rely on the section contents being zero when writing
10009 	 the GOT and .dynrelro.  */
10010       s->contents = bfd_zalloc (dynobj, s->size);
10011       if (s->contents == NULL)
10012 	return FALSE;
10013     }
10014 
10015   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10016     {
10017       if (!is_ppc64_elf (ibfd))
10018 	continue;
10019 
10020       s = ppc64_elf_tdata (ibfd)->got;
10021       if (s != NULL && s != htab->elf.sgot)
10022 	{
10023 	  if (s->size == 0)
10024 	    s->flags |= SEC_EXCLUDE;
10025 	  else
10026 	    {
10027 	      s->contents = bfd_zalloc (ibfd, s->size);
10028 	      if (s->contents == NULL)
10029 		return FALSE;
10030 	    }
10031 	}
10032       s = ppc64_elf_tdata (ibfd)->relgot;
10033       if (s != NULL)
10034 	{
10035 	  if (s->size == 0)
10036 	    s->flags |= SEC_EXCLUDE;
10037 	  else
10038 	    {
10039 	      s->contents = bfd_zalloc (ibfd, s->size);
10040 	      if (s->contents == NULL)
10041 		return FALSE;
10042 	      relocs = TRUE;
10043 	      s->reloc_count = 0;
10044 	    }
10045 	}
10046     }
10047 
10048   if (htab->elf.dynamic_sections_created)
10049     {
10050       bfd_boolean tls_opt;
10051 
10052       /* Add some entries to the .dynamic section.  We fill in the
10053 	 values later, in ppc64_elf_finish_dynamic_sections, but we
10054 	 must add the entries now so that we get the correct size for
10055 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
10056 	 dynamic linker and used by the debugger.  */
10057 #define add_dynamic_entry(TAG, VAL) \
10058   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
10059 
10060       if (bfd_link_executable (info))
10061 	{
10062 	  if (!add_dynamic_entry (DT_DEBUG, 0))
10063 	    return FALSE;
10064 	}
10065 
10066       if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
10067 	{
10068 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
10069 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
10070 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
10071 	      || !add_dynamic_entry (DT_JMPREL, 0)
10072 	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
10073 	    return FALSE;
10074 	}
10075 
10076       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
10077 	{
10078 	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
10079 	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
10080 	    return FALSE;
10081 	}
10082 
10083       tls_opt = (htab->params->tls_get_addr_opt
10084 		 && htab->tls_get_addr_fd != NULL
10085 		 && htab->tls_get_addr_fd->elf.plt.plist != NULL);
10086       if (tls_opt || !htab->opd_abi)
10087 	{
10088 	  if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
10089 	    return FALSE;
10090 	}
10091 
10092       if (relocs)
10093 	{
10094 	  if (!add_dynamic_entry (DT_RELA, 0)
10095 	      || !add_dynamic_entry (DT_RELASZ, 0)
10096 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
10097 	    return FALSE;
10098 
10099 	  /* If any dynamic relocs apply to a read-only section,
10100 	     then we need a DT_TEXTREL entry.  */
10101 	  if ((info->flags & DF_TEXTREL) == 0)
10102 	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
10103 
10104 	  if ((info->flags & DF_TEXTREL) != 0)
10105 	    {
10106 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
10107 		return FALSE;
10108 	    }
10109 	}
10110     }
10111 #undef add_dynamic_entry
10112 
10113   return TRUE;
10114 }
10115 
10116 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
10117 
10118 static bfd_boolean
10119 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
10120 {
10121   if (h->plt.plist != NULL
10122       && !h->def_regular
10123       && !h->pointer_equality_needed)
10124     return FALSE;
10125 
10126   return _bfd_elf_hash_symbol (h);
10127 }
10128 
10129 /* Determine the type of stub needed, if any, for a call.  */
10130 
10131 static inline enum ppc_stub_type
10132 ppc_type_of_stub (asection *input_sec,
10133 		  const Elf_Internal_Rela *rel,
10134 		  struct ppc_link_hash_entry **hash,
10135 		  struct plt_entry **plt_ent,
10136 		  bfd_vma destination,
10137 		  unsigned long local_off)
10138 {
10139   struct ppc_link_hash_entry *h = *hash;
10140   bfd_vma location;
10141   bfd_vma branch_offset;
10142   bfd_vma max_branch_offset;
10143   enum elf_ppc64_reloc_type r_type;
10144 
10145   if (h != NULL)
10146     {
10147       struct plt_entry *ent;
10148       struct ppc_link_hash_entry *fdh = h;
10149       if (h->oh != NULL
10150 	  && h->oh->is_func_descriptor)
10151 	{
10152 	  fdh = ppc_follow_link (h->oh);
10153 	  *hash = fdh;
10154 	}
10155 
10156       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10157 	if (ent->addend == rel->r_addend
10158 	    && ent->plt.offset != (bfd_vma) -1)
10159 	  {
10160 	    *plt_ent = ent;
10161 	    return ppc_stub_plt_call;
10162 	  }
10163 
10164       /* Here, we know we don't have a plt entry.  If we don't have a
10165 	 either a defined function descriptor or a defined entry symbol
10166 	 in a regular object file, then it is pointless trying to make
10167 	 any other type of stub.  */
10168       if (!is_static_defined (&fdh->elf)
10169 	  && !is_static_defined (&h->elf))
10170 	return ppc_stub_none;
10171     }
10172   else if (elf_local_got_ents (input_sec->owner) != NULL)
10173     {
10174       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10175       struct plt_entry **local_plt = (struct plt_entry **)
10176 	elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10177       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10178 
10179       if (local_plt[r_symndx] != NULL)
10180 	{
10181 	  struct plt_entry *ent;
10182 
10183 	  for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10184 	    if (ent->addend == rel->r_addend
10185 		&& ent->plt.offset != (bfd_vma) -1)
10186 	      {
10187 		*plt_ent = ent;
10188 		return ppc_stub_plt_call;
10189 	      }
10190 	}
10191     }
10192 
10193   /* Determine where the call point is.  */
10194   location = (input_sec->output_offset
10195 	      + input_sec->output_section->vma
10196 	      + rel->r_offset);
10197 
10198   branch_offset = destination - location;
10199   r_type = ELF64_R_TYPE (rel->r_info);
10200 
10201   /* Determine if a long branch stub is needed.  */
10202   max_branch_offset = 1 << 25;
10203   if (r_type == R_PPC64_REL14
10204       || r_type == R_PPC64_REL14_BRTAKEN
10205       || r_type == R_PPC64_REL14_BRNTAKEN)
10206     max_branch_offset = 1 << 15;
10207 
10208   if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10209     /* We need a stub.  Figure out whether a long_branch or plt_branch
10210        is needed later.  */
10211     return ppc_stub_long_branch;
10212 
10213   return ppc_stub_none;
10214 }
10215 
10216 /* Gets the address of a label (1:) in r11 and builds an offset in r12,
10217    then adds it to r11 (LOAD false) or loads r12 from r11+r12 (LOAD true).
10218    .	mflr	%r12
10219    .	bcl	20,31,1f
10220    .1:	mflr	%r11
10221    .	mtlr	%r12
10222    .	lis	%r12,xxx-1b@highest
10223    .	ori	%r12,%r12,xxx-1b@higher
10224    .	sldi	%r12,%r12,32
10225    .	oris	%r12,%r12,xxx-1b@high
10226    .	ori	%r12,%r12,xxx-1b@l
10227    .	add/ldx	%r12,%r11,%r12  */
10228 
10229 static bfd_byte *
10230 build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
10231 {
10232   bfd_put_32 (abfd, MFLR_R12, p);
10233   p += 4;
10234   bfd_put_32 (abfd, BCL_20_31, p);
10235   p += 4;
10236   bfd_put_32 (abfd, MFLR_R11, p);
10237   p += 4;
10238   bfd_put_32 (abfd, MTLR_R12, p);
10239   p += 4;
10240   if (off + 0x8000 < 0x10000)
10241     {
10242       if (load)
10243 	bfd_put_32 (abfd, LD_R12_0R11 + PPC_LO (off), p);
10244       else
10245 	bfd_put_32 (abfd, ADDI_R12_R11 + PPC_LO (off), p);
10246       p += 4;
10247     }
10248   else if (off + 0x80008000ULL < 0x100000000ULL)
10249     {
10250       bfd_put_32 (abfd, ADDIS_R12_R11 + PPC_HA (off), p);
10251       p += 4;
10252       if (load)
10253 	bfd_put_32 (abfd, LD_R12_0R12 + PPC_LO (off), p);
10254       else
10255 	bfd_put_32 (abfd, ADDI_R12_R12 + PPC_LO (off), p);
10256       p += 4;
10257     }
10258   else
10259     {
10260       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10261 	{
10262 	  bfd_put_32 (abfd, LI_R12_0 + ((off >> 32) & 0xffff), p);
10263 	  p += 4;
10264 	}
10265       else
10266 	{
10267 	  bfd_put_32 (abfd, LIS_R12 + ((off >> 48) & 0xffff), p);
10268 	  p += 4;
10269 	  if (((off >> 32) & 0xffff) != 0)
10270 	    {
10271 	      bfd_put_32 (abfd, ORI_R12_R12_0 + ((off >> 32) & 0xffff), p);
10272 	      p += 4;
10273 	    }
10274 	}
10275       if (((off >> 32) & 0xffffffffULL) != 0)
10276 	{
10277 	  bfd_put_32 (abfd, SLDI_R12_R12_32, p);
10278 	  p += 4;
10279 	}
10280       if (PPC_HI (off) != 0)
10281 	{
10282 	  bfd_put_32 (abfd, ORIS_R12_R12_0 + PPC_HI (off), p);
10283 	  p += 4;
10284 	}
10285       if (PPC_LO (off) != 0)
10286 	{
10287 	  bfd_put_32 (abfd, ORI_R12_R12_0 + PPC_LO (off), p);
10288 	  p += 4;
10289 	}
10290       if (load)
10291 	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10292       else
10293 	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10294       p += 4;
10295     }
10296   return p;
10297 }
10298 
10299 static unsigned int
10300 size_offset (bfd_vma off)
10301 {
10302   unsigned int size;
10303   if (off + 0x8000 < 0x10000)
10304     size = 4;
10305   else if (off + 0x80008000ULL < 0x100000000ULL)
10306     size = 8;
10307   else
10308     {
10309       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10310 	size = 4;
10311       else
10312 	{
10313 	  size = 4;
10314 	  if (((off >> 32) & 0xffff) != 0)
10315 	    size += 4;
10316 	}
10317       if (((off >> 32) & 0xffffffffULL) != 0)
10318 	size += 4;
10319       if (PPC_HI (off) != 0)
10320 	size += 4;
10321       if (PPC_LO (off) != 0)
10322 	size += 4;
10323       size += 4;
10324     }
10325   return size + 16;
10326 }
10327 
10328 static unsigned int
10329 num_relocs_for_offset (bfd_vma off)
10330 {
10331   unsigned int num_rel;
10332   if (off + 0x8000 < 0x10000)
10333     num_rel = 1;
10334   else if (off + 0x80008000ULL < 0x100000000ULL)
10335     num_rel = 2;
10336   else
10337     {
10338       num_rel = 1;
10339       if (off + 0x800000000000ULL >= 0x1000000000000ULL
10340 	  && ((off >> 32) & 0xffff) != 0)
10341 	num_rel += 1;
10342       if (PPC_HI (off) != 0)
10343 	num_rel += 1;
10344       if (PPC_LO (off) != 0)
10345 	num_rel += 1;
10346     }
10347   return num_rel;
10348 }
10349 
10350 static Elf_Internal_Rela *
10351 emit_relocs_for_offset (struct bfd_link_info *info, Elf_Internal_Rela *r,
10352 			bfd_vma roff, bfd_vma targ, bfd_vma off)
10353 {
10354   bfd_vma relative_targ = targ - (roff - 8);
10355   if (bfd_big_endian (info->output_bfd))
10356     roff += 2;
10357   r->r_offset = roff;
10358   r->r_addend = relative_targ + roff;
10359   if (off + 0x8000 < 0x10000)
10360     r->r_info = ELF64_R_INFO (0, R_PPC64_REL16);
10361   else if (off + 0x80008000ULL < 0x100000000ULL)
10362     {
10363       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HA);
10364       ++r;
10365       roff += 4;
10366       r->r_offset = roff;
10367       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10368       r->r_addend = relative_targ + roff;
10369     }
10370   else
10371     {
10372       if (off + 0x800000000000ULL < 0x1000000000000ULL)
10373 	r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10374       else
10375 	{
10376 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHEST);
10377 	  if (((off >> 32) & 0xffff) != 0)
10378 	    {
10379 	      ++r;
10380 	      roff += 4;
10381 	      r->r_offset = roff;
10382 	      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10383 	      r->r_addend = relative_targ + roff;
10384 	    }
10385 	}
10386       if (((off >> 32) & 0xffffffffULL) != 0)
10387 	roff += 4;
10388       if (PPC_HI (off) != 0)
10389 	{
10390 	  ++r;
10391 	  roff += 4;
10392 	  r->r_offset = roff;
10393 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGH);
10394 	  r->r_addend = relative_targ + roff;
10395 	}
10396       if (PPC_LO (off) != 0)
10397 	{
10398 	  ++r;
10399 	  roff += 4;
10400 	  r->r_offset = roff;
10401 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10402 	  r->r_addend = relative_targ + roff;
10403 	}
10404     }
10405   return r;
10406 }
10407 
10408 static bfd_byte *
10409 build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
10410 		      bfd_boolean load)
10411 {
10412   uint64_t insn;
10413   if (off - odd + (1ULL << 33) < 1ULL << 34)
10414     {
10415       off -= odd;
10416       if (odd)
10417 	{
10418 	  bfd_put_32 (abfd, NOP, p);
10419 	  p += 4;
10420 	}
10421       if (load)
10422 	insn = PLD_R12_PC;
10423       else
10424 	insn = PADDI_R12_PC;
10425       insn |= D34 (off);
10426       bfd_put_32 (abfd, insn >> 32, p);
10427       p += 4;
10428       bfd_put_32 (abfd, insn, p);
10429     }
10430   /* The minimum value for paddi is -0x200000000.  The minimum value
10431      for li is -0x8000, which when shifted by 34 and added gives a
10432      minimum value of -0x2000200000000.  The maximum value is
10433      0x1ffffffff+0x7fff<<34 which is 0x2000200000000-1.  */
10434   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10435     {
10436       off -= 8 - odd;
10437       bfd_put_32 (abfd, LI_R11_0 | (HA34 (off) & 0xffff), p);
10438       p += 4;
10439       if (!odd)
10440 	{
10441 	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10442 	  p += 4;
10443 	}
10444       insn = PADDI_R12_PC | D34 (off);
10445       bfd_put_32 (abfd, insn >> 32, p);
10446       p += 4;
10447       bfd_put_32 (abfd, insn, p);
10448       p += 4;
10449       if (odd)
10450 	{
10451 	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10452 	  p += 4;
10453 	}
10454       if (load)
10455 	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10456       else
10457 	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10458     }
10459   else
10460     {
10461       off -= odd + 8;
10462       bfd_put_32 (abfd, LIS_R11 | ((HA34 (off) >> 16) & 0x3fff), p);
10463       p += 4;
10464       bfd_put_32 (abfd, ORI_R11_R11_0 | (HA34 (off) & 0xffff), p);
10465       p += 4;
10466       if (odd)
10467 	{
10468 	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10469 	  p += 4;
10470 	}
10471       insn = PADDI_R12_PC | D34 (off);
10472       bfd_put_32 (abfd, insn >> 32, p);
10473       p += 4;
10474       bfd_put_32 (abfd, insn, p);
10475       p += 4;
10476       if (!odd)
10477 	{
10478 	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10479 	  p += 4;
10480 	}
10481       if (load)
10482 	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10483       else
10484 	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10485     }
10486   p += 4;
10487   return p;
10488 }
10489 
10490 static unsigned int
10491 size_powerxx_offset (bfd_vma off, int odd)
10492 {
10493   if (off - odd + (1ULL << 33) < 1ULL << 34)
10494     return odd + 8;
10495   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10496     return 20;
10497   else
10498     return 24;
10499 }
10500 
10501 static unsigned int
10502 num_relocs_for_powerxx_offset (bfd_vma off, int odd)
10503 {
10504   if (off - odd + (1ULL << 33) < 1ULL << 34)
10505     return 1;
10506   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10507     return 2;
10508   else
10509     return 3;
10510 }
10511 
10512 static Elf_Internal_Rela *
10513 emit_relocs_for_powerxx_offset (struct bfd_link_info *info,
10514 				Elf_Internal_Rela *r, bfd_vma roff,
10515 				bfd_vma targ, bfd_vma off, int odd)
10516 {
10517   if (off - odd + (1ULL << 33) < 1ULL << 34)
10518     roff += odd;
10519   else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10520     {
10521       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10522       r->r_offset = roff + d_offset;
10523       r->r_addend = targ + 8 - odd - d_offset;
10524       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10525       ++r;
10526       roff += 8 - odd;
10527     }
10528   else
10529     {
10530       int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10531       r->r_offset = roff + d_offset;
10532       r->r_addend = targ + 8 + odd - d_offset;
10533       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHESTA34);
10534       ++r;
10535       roff += 4;
10536       r->r_offset = roff + d_offset;
10537       r->r_addend = targ + 4 + odd - d_offset;
10538       r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10539       ++r;
10540       roff += 4 + odd;
10541     }
10542   r->r_offset = roff;
10543   r->r_addend = targ;
10544   r->r_info = ELF64_R_INFO (0, R_PPC64_PCREL34);
10545   return r;
10546 }
10547 
10548 /* Emit .eh_frame opcode to advance pc by DELTA.  */
10549 
10550 static bfd_byte *
10551 eh_advance (bfd *abfd, bfd_byte *eh, unsigned int delta)
10552 {
10553   delta /= 4;
10554   if (delta < 64)
10555     *eh++ = DW_CFA_advance_loc + delta;
10556   else if (delta < 256)
10557     {
10558       *eh++ = DW_CFA_advance_loc1;
10559       *eh++ = delta;
10560     }
10561   else if (delta < 65536)
10562     {
10563       *eh++ = DW_CFA_advance_loc2;
10564       bfd_put_16 (abfd, delta, eh);
10565       eh += 2;
10566     }
10567   else
10568     {
10569       *eh++ = DW_CFA_advance_loc4;
10570       bfd_put_32 (abfd, delta, eh);
10571       eh += 4;
10572     }
10573   return eh;
10574 }
10575 
10576 /* Size of required .eh_frame opcode to advance pc by DELTA.  */
10577 
10578 static unsigned int
10579 eh_advance_size (unsigned int delta)
10580 {
10581   if (delta < 64 * 4)
10582     /* DW_CFA_advance_loc+[1..63].  */
10583     return 1;
10584   if (delta < 256 * 4)
10585     /* DW_CFA_advance_loc1, byte.  */
10586     return 2;
10587   if (delta < 65536 * 4)
10588     /* DW_CFA_advance_loc2, 2 bytes.  */
10589     return 3;
10590   /* DW_CFA_advance_loc4, 4 bytes.  */
10591   return 5;
10592 }
10593 
10594 /* With power7 weakly ordered memory model, it is possible for ld.so
10595    to update a plt entry in one thread and have another thread see a
10596    stale zero toc entry.  To avoid this we need some sort of acquire
10597    barrier in the call stub.  One solution is to make the load of the
10598    toc word seem to appear to depend on the load of the function entry
10599    word.  Another solution is to test for r2 being zero, and branch to
10600    the appropriate glink entry if so.
10601 
10602    .	fake dep barrier	compare
10603    .	ld 12,xxx(2)		ld 12,xxx(2)
10604    .	mtctr 12		mtctr 12
10605    .	xor 11,12,12		ld 2,xxx+8(2)
10606    .	add 2,2,11		cmpldi 2,0
10607    .	ld 2,xxx+8(2)		bnectr+
10608    .	bctr			b <glink_entry>
10609 
10610    The solution involving the compare turns out to be faster, so
10611    that's what we use unless the branch won't reach.  */
10612 
10613 #define ALWAYS_USE_FAKE_DEP 0
10614 #define ALWAYS_EMIT_R2SAVE 0
10615 
10616 static inline unsigned int
10617 plt_stub_size (struct ppc_link_hash_table *htab,
10618 	       struct ppc_stub_hash_entry *stub_entry,
10619 	       bfd_vma off)
10620 {
10621   unsigned size;
10622 
10623   if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
10624     {
10625       if (htab->powerxx_stubs)
10626 	{
10627 	  bfd_vma start = (stub_entry->stub_offset
10628 			   + stub_entry->group->stub_sec->output_offset
10629 			   + stub_entry->group->stub_sec->output_section->vma);
10630 	  if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10631 	    start += 4;
10632 	  size = 8 + size_powerxx_offset (off, start & 4);
10633 	}
10634       else
10635 	size = 8 + size_offset (off - 8);
10636       if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10637 	size += 4;
10638       return size;
10639     }
10640 
10641   size = 12;
10642   if (ALWAYS_EMIT_R2SAVE
10643       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10644     size += 4;
10645   if (PPC_HA (off) != 0)
10646     size += 4;
10647   if (htab->opd_abi)
10648     {
10649       size += 4;
10650       if (htab->params->plt_static_chain)
10651 	size += 4;
10652       if (htab->params->plt_thread_safe
10653 	  && htab->elf.dynamic_sections_created
10654 	  && stub_entry->h != NULL
10655 	  && stub_entry->h->elf.dynindx != -1)
10656 	size += 8;
10657       if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10658 	size += 4;
10659     }
10660   if (stub_entry->h != NULL
10661       && (stub_entry->h == htab->tls_get_addr_fd
10662 	  || stub_entry->h == htab->tls_get_addr)
10663       && htab->params->tls_get_addr_opt)
10664     {
10665       size += 7 * 4;
10666       if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10667 	size += 6 * 4;
10668     }
10669   return size;
10670 }
10671 
10672 /* Depending on the sign of plt_stub_align:
10673    If positive, return the padding to align to a 2**plt_stub_align
10674    boundary.
10675    If negative, if this stub would cross fewer 2**plt_stub_align
10676    boundaries if we align, then return the padding needed to do so.  */
10677 
10678 static inline unsigned int
10679 plt_stub_pad (struct ppc_link_hash_table *htab,
10680 	      struct ppc_stub_hash_entry *stub_entry,
10681 	      bfd_vma plt_off)
10682 {
10683   int stub_align;
10684   unsigned stub_size;
10685   bfd_vma stub_off = stub_entry->group->stub_sec->size;
10686 
10687   if (htab->params->plt_stub_align >= 0)
10688     {
10689       stub_align = 1 << htab->params->plt_stub_align;
10690       if ((stub_off & (stub_align - 1)) != 0)
10691 	return stub_align - (stub_off & (stub_align - 1));
10692       return 0;
10693     }
10694 
10695   stub_align = 1 << -htab->params->plt_stub_align;
10696   stub_size = plt_stub_size (htab, stub_entry, plt_off);
10697   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10698       > ((stub_size - 1) & -stub_align))
10699     return stub_align - (stub_off & (stub_align - 1));
10700   return 0;
10701 }
10702 
10703 /* Build a .plt call stub.  */
10704 
10705 static inline bfd_byte *
10706 build_plt_stub (struct ppc_link_hash_table *htab,
10707 		struct ppc_stub_hash_entry *stub_entry,
10708 		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10709 {
10710   bfd *obfd = htab->params->stub_bfd;
10711   bfd_boolean plt_load_toc = htab->opd_abi;
10712   bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10713   bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10714 				 && htab->elf.dynamic_sections_created
10715 				 && stub_entry->h != NULL
10716 				 && stub_entry->h->elf.dynindx != -1);
10717   bfd_boolean use_fake_dep = plt_thread_safe;
10718   bfd_vma cmp_branch_off = 0;
10719 
10720   if (!ALWAYS_USE_FAKE_DEP
10721       && plt_load_toc
10722       && plt_thread_safe
10723       && !((stub_entry->h == htab->tls_get_addr_fd
10724 	    || stub_entry->h == htab->tls_get_addr)
10725 	   && htab->params->tls_get_addr_opt))
10726     {
10727       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10728       bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10729 			  / PLT_ENTRY_SIZE (htab));
10730       bfd_vma glinkoff = GLINK_PLTRESOLVE_SIZE (htab) + pltindex * 8;
10731       bfd_vma to, from;
10732 
10733       if (pltindex > 32768)
10734 	glinkoff += (pltindex - 32768) * 4;
10735       to = (glinkoff
10736 	    + htab->glink->output_offset
10737 	    + htab->glink->output_section->vma);
10738       from = (p - stub_entry->group->stub_sec->contents
10739 	      + 4 * (ALWAYS_EMIT_R2SAVE
10740 		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10741 	      + 4 * (PPC_HA (offset) != 0)
10742 	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10743 		     != PPC_HA (offset))
10744 	      + 4 * (plt_static_chain != 0)
10745 	      + 20
10746 	      + stub_entry->group->stub_sec->output_offset
10747 	      + stub_entry->group->stub_sec->output_section->vma);
10748       cmp_branch_off = to - from;
10749       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10750     }
10751 
10752   if (PPC_HA (offset) != 0)
10753     {
10754       if (r != NULL)
10755 	{
10756 	  if (ALWAYS_EMIT_R2SAVE
10757 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10758 	    r[0].r_offset += 4;
10759 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10760 	  r[1].r_offset = r[0].r_offset + 4;
10761 	  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10762 	  r[1].r_addend = r[0].r_addend;
10763 	  if (plt_load_toc)
10764 	    {
10765 	      if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10766 		{
10767 		  r[2].r_offset = r[1].r_offset + 4;
10768 		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10769 		  r[2].r_addend = r[0].r_addend;
10770 		}
10771 	      else
10772 		{
10773 		  r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10774 		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10775 		  r[2].r_addend = r[0].r_addend + 8;
10776 		  if (plt_static_chain)
10777 		    {
10778 		      r[3].r_offset = r[2].r_offset + 4;
10779 		      r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10780 		      r[3].r_addend = r[0].r_addend + 16;
10781 		    }
10782 		}
10783 	    }
10784 	}
10785       if (ALWAYS_EMIT_R2SAVE
10786 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10787 	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
10788       if (plt_load_toc)
10789 	{
10790 	  bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p),	p += 4;
10791 	  bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),	p += 4;
10792 	}
10793       else
10794 	{
10795 	  bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
10796 	  bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p),	p += 4;
10797 	}
10798       if (plt_load_toc
10799 	  && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10800 	{
10801 	  bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p),	p += 4;
10802 	  offset = 0;
10803 	}
10804       bfd_put_32 (obfd, MTCTR_R12, p),				p += 4;
10805       if (plt_load_toc)
10806 	{
10807 	  if (use_fake_dep)
10808 	    {
10809 	      bfd_put_32 (obfd, XOR_R2_R12_R12, p),		p += 4;
10810 	      bfd_put_32 (obfd, ADD_R11_R11_R2, p),		p += 4;
10811 	    }
10812 	  bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
10813 	  if (plt_static_chain)
10814 	    bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
10815 	}
10816     }
10817   else
10818     {
10819       if (r != NULL)
10820 	{
10821 	  if (ALWAYS_EMIT_R2SAVE
10822 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10823 	    r[0].r_offset += 4;
10824 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10825 	  if (plt_load_toc)
10826 	    {
10827 	      if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10828 		{
10829 		  r[1].r_offset = r[0].r_offset + 4;
10830 		  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
10831 		  r[1].r_addend = r[0].r_addend;
10832 		}
10833 	      else
10834 		{
10835 		  r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
10836 		  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10837 		  r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
10838 		  if (plt_static_chain)
10839 		    {
10840 		      r[2].r_offset = r[1].r_offset + 4;
10841 		      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10842 		      r[2].r_addend = r[0].r_addend + 8;
10843 		    }
10844 		}
10845 	    }
10846 	}
10847       if (ALWAYS_EMIT_R2SAVE
10848 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10849 	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
10850       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),	p += 4;
10851       if (plt_load_toc
10852 	  && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10853 	{
10854 	  bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),	p += 4;
10855 	  offset = 0;
10856 	}
10857       bfd_put_32 (obfd, MTCTR_R12, p),				p += 4;
10858       if (plt_load_toc)
10859 	{
10860 	  if (use_fake_dep)
10861 	    {
10862 	      bfd_put_32 (obfd, XOR_R11_R12_R12, p),		p += 4;
10863 	      bfd_put_32 (obfd, ADD_R2_R2_R11, p),		p += 4;
10864 	    }
10865 	  if (plt_static_chain)
10866 	    bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
10867 	  bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
10868 	}
10869     }
10870   if (plt_load_toc && plt_thread_safe && !use_fake_dep)
10871     {
10872       bfd_put_32 (obfd, CMPLDI_R2_0, p),			p += 4;
10873       bfd_put_32 (obfd, BNECTR_P4, p),				p += 4;
10874       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
10875     }
10876   else
10877     bfd_put_32 (obfd, BCTR, p),					p += 4;
10878   return p;
10879 }
10880 
10881 /* Build a special .plt call stub for __tls_get_addr.  */
10882 
10883 #define LD_R11_0R3	0xe9630000
10884 #define LD_R12_0R3	0xe9830000
10885 #define MR_R0_R3	0x7c601b78
10886 #define CMPDI_R11_0	0x2c2b0000
10887 #define ADD_R3_R12_R13	0x7c6c6a14
10888 #define BEQLR		0x4d820020
10889 #define MR_R3_R0	0x7c030378
10890 #define STD_R11_0R1	0xf9610000
10891 #define BCTRL		0x4e800421
10892 #define LD_R11_0R1	0xe9610000
10893 #define MTLR_R11	0x7d6803a6
10894 
10895 static inline bfd_byte *
10896 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
10897 			 struct ppc_stub_hash_entry *stub_entry,
10898 			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10899 {
10900   bfd *obfd = htab->params->stub_bfd;
10901   bfd_byte *loc = p;
10902 
10903   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),		p += 4;
10904   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
10905   bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
10906   bfd_put_32 (obfd, CMPDI_R11_0, p),		p += 4;
10907   bfd_put_32 (obfd, ADD_R3_R12_R13, p),		p += 4;
10908   bfd_put_32 (obfd, BEQLR, p),			p += 4;
10909   bfd_put_32 (obfd, MR_R3_R0, p),		p += 4;
10910   if (r != NULL)
10911     r[0].r_offset += 7 * 4;
10912   if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
10913     return build_plt_stub (htab, stub_entry, p, offset, r);
10914 
10915   bfd_put_32 (obfd, MFLR_R11, p),		p += 4;
10916   bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10917 
10918   if (r != NULL)
10919     r[0].r_offset += 2 * 4;
10920   p = build_plt_stub (htab, stub_entry, p, offset, r);
10921   bfd_put_32 (obfd, BCTRL, p - 4);
10922 
10923   bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p),	p += 4;
10924   bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p),	p += 4;
10925   bfd_put_32 (obfd, MTLR_R11, p),		p += 4;
10926   bfd_put_32 (obfd, BLR, p),			p += 4;
10927 
10928   if (htab->glink_eh_frame != NULL
10929       && htab->glink_eh_frame->size != 0)
10930     {
10931       bfd_byte *base, *eh;
10932       unsigned int lr_used, delta;
10933 
10934       base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
10935       eh = base + stub_entry->group->eh_size;
10936       lr_used = stub_entry->stub_offset + (p - 20 - loc);
10937       delta = lr_used - stub_entry->group->lr_restore;
10938       stub_entry->group->lr_restore = lr_used + 16;
10939       eh = eh_advance (htab->elf.dynobj, eh, delta);
10940       *eh++ = DW_CFA_offset_extended_sf;
10941       *eh++ = 65;
10942       *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
10943       *eh++ = DW_CFA_advance_loc + 4;
10944       *eh++ = DW_CFA_restore_extended;
10945       *eh++ = 65;
10946       stub_entry->group->eh_size = eh - base;
10947     }
10948   return p;
10949 }
10950 
10951 static Elf_Internal_Rela *
10952 get_relocs (asection *sec, int count)
10953 {
10954   Elf_Internal_Rela *relocs;
10955   struct bfd_elf_section_data *elfsec_data;
10956 
10957   elfsec_data = elf_section_data (sec);
10958   relocs = elfsec_data->relocs;
10959   if (relocs == NULL)
10960     {
10961       bfd_size_type relsize;
10962       relsize = sec->reloc_count * sizeof (*relocs);
10963       relocs = bfd_alloc (sec->owner, relsize);
10964       if (relocs == NULL)
10965 	return NULL;
10966       elfsec_data->relocs = relocs;
10967       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
10968 					  sizeof (Elf_Internal_Shdr));
10969       if (elfsec_data->rela.hdr == NULL)
10970 	return NULL;
10971       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
10972 					* sizeof (Elf64_External_Rela));
10973       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
10974       sec->reloc_count = 0;
10975     }
10976   relocs += sec->reloc_count;
10977   sec->reloc_count += count;
10978   return relocs;
10979 }
10980 
10981 /* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
10982    forms, to the equivalent relocs against the global symbol given by
10983    STUB_ENTRY->H.  */
10984 
10985 static bfd_boolean
10986 use_global_in_relocs (struct ppc_link_hash_table *htab,
10987 		      struct ppc_stub_hash_entry *stub_entry,
10988 		      Elf_Internal_Rela *r, unsigned int num_rel)
10989 {
10990   struct elf_link_hash_entry **hashes;
10991   unsigned long symndx;
10992   struct ppc_link_hash_entry *h;
10993   bfd_vma symval;
10994 
10995   /* Relocs are always against symbols in their own object file.  Fake
10996      up global sym hashes for the stub bfd (which has no symbols).  */
10997   hashes = elf_sym_hashes (htab->params->stub_bfd);
10998   if (hashes == NULL)
10999     {
11000       bfd_size_type hsize;
11001 
11002       /* When called the first time, stub_globals will contain the
11003 	 total number of symbols seen during stub sizing.  After
11004 	 allocating, stub_globals is used as an index to fill the
11005 	 hashes array.  */
11006       hsize = (htab->stub_globals + 1) * sizeof (*hashes);
11007       hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
11008       if (hashes == NULL)
11009 	return FALSE;
11010       elf_sym_hashes (htab->params->stub_bfd) = hashes;
11011       htab->stub_globals = 1;
11012     }
11013   symndx = htab->stub_globals++;
11014   h = stub_entry->h;
11015   hashes[symndx] = &h->elf;
11016   if (h->oh != NULL && h->oh->is_func)
11017     h = ppc_follow_link (h->oh);
11018   BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
11019 	      || h->elf.root.type == bfd_link_hash_defweak);
11020   symval = (h->elf.root.u.def.value
11021 	    + h->elf.root.u.def.section->output_offset
11022 	    + h->elf.root.u.def.section->output_section->vma);
11023   while (num_rel-- != 0)
11024     {
11025       r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
11026       if (h->elf.root.u.def.section != stub_entry->target_section)
11027 	{
11028 	  /* H is an opd symbol.  The addend must be zero, and the
11029 	     branch reloc is the only one we can convert.  */
11030 	  r->r_addend = 0;
11031 	  break;
11032 	}
11033       else
11034 	r->r_addend -= symval;
11035       --r;
11036     }
11037   return TRUE;
11038 }
11039 
11040 static bfd_vma
11041 get_r2off (struct bfd_link_info *info,
11042 	   struct ppc_stub_hash_entry *stub_entry)
11043 {
11044   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11045   bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
11046 
11047   if (r2off == 0)
11048     {
11049       /* Support linking -R objects.  Get the toc pointer from the
11050 	 opd entry.  */
11051       char buf[8];
11052       if (!htab->opd_abi)
11053 	return r2off;
11054       asection *opd = stub_entry->h->elf.root.u.def.section;
11055       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
11056 
11057       if (strcmp (opd->name, ".opd") != 0
11058 	  || opd->reloc_count != 0)
11059 	{
11060 	  info->callbacks->einfo
11061 	    (_("%P: cannot find opd entry toc for `%pT'\n"),
11062 	     stub_entry->h->elf.root.root.string);
11063 	  bfd_set_error (bfd_error_bad_value);
11064 	  return (bfd_vma) -1;
11065 	}
11066       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
11067 	return (bfd_vma) -1;
11068       r2off = bfd_get_64 (opd->owner, buf);
11069       r2off -= elf_gp (info->output_bfd);
11070     }
11071   r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
11072   return r2off;
11073 }
11074 
11075 static bfd_boolean
11076 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11077 {
11078   struct ppc_stub_hash_entry *stub_entry;
11079   struct ppc_branch_hash_entry *br_entry;
11080   struct bfd_link_info *info;
11081   struct ppc_link_hash_table *htab;
11082   bfd_byte *loc;
11083   bfd_byte *p, *relp;
11084   bfd_vma targ, off;
11085   Elf_Internal_Rela *r;
11086   asection *plt;
11087   int num_rel;
11088   int odd;
11089 
11090   /* Massage our args to the form they really have.  */
11091   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11092   info = in_arg;
11093 
11094   htab = ppc_hash_table (info);
11095   if (htab == NULL)
11096     return FALSE;
11097 
11098   BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
11099   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
11100 
11101   htab->stub_count[stub_entry->stub_type - 1] += 1;
11102   switch (stub_entry->stub_type)
11103     {
11104     case ppc_stub_long_branch:
11105     case ppc_stub_long_branch_r2off:
11106       /* Branches are relative.  This is where we are going to.  */
11107       targ = (stub_entry->target_value
11108 	      + stub_entry->target_section->output_offset
11109 	      + stub_entry->target_section->output_section->vma);
11110       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11111 
11112       /* And this is where we are coming from.  */
11113       off = (stub_entry->stub_offset
11114 	     + stub_entry->group->stub_sec->output_offset
11115 	     + stub_entry->group->stub_sec->output_section->vma);
11116       off = targ - off;
11117 
11118       p = loc;
11119       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11120 	{
11121 	  bfd_vma r2off = get_r2off (info, stub_entry);
11122 
11123 	  if (r2off == (bfd_vma) -1)
11124 	    {
11125 	      htab->stub_error = TRUE;
11126 	      return FALSE;
11127 	    }
11128 	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11129 	  p += 4;
11130 	  if (PPC_HA (r2off) != 0)
11131 	    {
11132 	      bfd_put_32 (htab->params->stub_bfd,
11133 			  ADDIS_R2_R2 | PPC_HA (r2off), p);
11134 	      p += 4;
11135 	    }
11136 	  if (PPC_LO (r2off) != 0)
11137 	    {
11138 	      bfd_put_32 (htab->params->stub_bfd,
11139 			  ADDI_R2_R2 | PPC_LO (r2off), p);
11140 	      p += 4;
11141 	    }
11142 	  off -= p - loc;
11143 	}
11144       bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
11145       p += 4;
11146 
11147       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11148 	{
11149 	  _bfd_error_handler
11150 	    (_("long branch stub `%s' offset overflow"),
11151 	     stub_entry->root.string);
11152 	  htab->stub_error = TRUE;
11153 	  return FALSE;
11154 	}
11155 
11156       if (info->emitrelocations)
11157 	{
11158 	  r = get_relocs (stub_entry->group->stub_sec, 1);
11159 	  if (r == NULL)
11160 	    return FALSE;
11161 	  r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
11162 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11163 	  r->r_addend = targ;
11164 	  if (stub_entry->h != NULL
11165 	      && !use_global_in_relocs (htab, stub_entry, r, 1))
11166 	    return FALSE;
11167 	}
11168       break;
11169 
11170     case ppc_stub_plt_branch:
11171     case ppc_stub_plt_branch_r2off:
11172       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11173 					 stub_entry->root.string + 9,
11174 					 FALSE, FALSE);
11175       if (br_entry == NULL)
11176 	{
11177 	  _bfd_error_handler (_("can't find branch stub `%s'"),
11178 			      stub_entry->root.string);
11179 	  htab->stub_error = TRUE;
11180 	  return FALSE;
11181 	}
11182 
11183       targ = (stub_entry->target_value
11184 	      + stub_entry->target_section->output_offset
11185 	      + stub_entry->target_section->output_section->vma);
11186       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11187 	targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11188 
11189       bfd_put_64 (htab->brlt->owner, targ,
11190 		  htab->brlt->contents + br_entry->offset);
11191 
11192       if (br_entry->iter == htab->stub_iteration)
11193 	{
11194 	  br_entry->iter = 0;
11195 
11196 	  if (htab->relbrlt != NULL)
11197 	    {
11198 	      /* Create a reloc for the branch lookup table entry.  */
11199 	      Elf_Internal_Rela rela;
11200 	      bfd_byte *rl;
11201 
11202 	      rela.r_offset = (br_entry->offset
11203 			       + htab->brlt->output_offset
11204 			       + htab->brlt->output_section->vma);
11205 	      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11206 	      rela.r_addend = targ;
11207 
11208 	      rl = htab->relbrlt->contents;
11209 	      rl += (htab->relbrlt->reloc_count++
11210 		     * sizeof (Elf64_External_Rela));
11211 	      bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
11212 	    }
11213 	  else if (info->emitrelocations)
11214 	    {
11215 	      r = get_relocs (htab->brlt, 1);
11216 	      if (r == NULL)
11217 		return FALSE;
11218 	      /* brlt, being SEC_LINKER_CREATED does not go through the
11219 		 normal reloc processing.  Symbols and offsets are not
11220 		 translated from input file to output file form, so
11221 		 set up the offset per the output file.  */
11222 	      r->r_offset = (br_entry->offset
11223 			     + htab->brlt->output_offset
11224 			     + htab->brlt->output_section->vma);
11225 	      r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11226 	      r->r_addend = targ;
11227 	    }
11228 	}
11229 
11230       targ = (br_entry->offset
11231 	      + htab->brlt->output_offset
11232 	      + htab->brlt->output_section->vma);
11233 
11234       off = (elf_gp (info->output_bfd)
11235 	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11236       off = targ - off;
11237 
11238       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11239 	{
11240 	  info->callbacks->einfo
11241 	    (_("%P: linkage table error against `%pT'\n"),
11242 	     stub_entry->root.string);
11243 	  bfd_set_error (bfd_error_bad_value);
11244 	  htab->stub_error = TRUE;
11245 	  return FALSE;
11246 	}
11247 
11248       if (info->emitrelocations)
11249 	{
11250 	  r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11251 	  if (r == NULL)
11252 	    return FALSE;
11253 	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11254 	  if (bfd_big_endian (info->output_bfd))
11255 	    r[0].r_offset += 2;
11256 	  if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11257 	    r[0].r_offset += 4;
11258 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11259 	  r[0].r_addend = targ;
11260 	  if (PPC_HA (off) != 0)
11261 	    {
11262 	      r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11263 	      r[1].r_offset = r[0].r_offset + 4;
11264 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11265 	      r[1].r_addend = r[0].r_addend;
11266 	    }
11267 	}
11268 
11269       p = loc;
11270       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11271 	{
11272 	  if (PPC_HA (off) != 0)
11273 	    {
11274 	      bfd_put_32 (htab->params->stub_bfd,
11275 			  ADDIS_R12_R2 | PPC_HA (off), p);
11276 	      p += 4;
11277 	      bfd_put_32 (htab->params->stub_bfd,
11278 			  LD_R12_0R12 | PPC_LO (off), p);
11279 	    }
11280 	  else
11281 	    bfd_put_32 (htab->params->stub_bfd,
11282 			LD_R12_0R2 | PPC_LO (off), p);
11283 	}
11284       else
11285 	{
11286 	  bfd_vma r2off = get_r2off (info, stub_entry);
11287 
11288 	  if (r2off == (bfd_vma) -1)
11289 	    {
11290 	      htab->stub_error = TRUE;
11291 	      return FALSE;
11292 	    }
11293 
11294 	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11295 	  p += 4;
11296 	  if (PPC_HA (off) != 0)
11297 	    {
11298 	      bfd_put_32 (htab->params->stub_bfd,
11299 			  ADDIS_R12_R2 | PPC_HA (off), p);
11300 	      p += 4;
11301 	      bfd_put_32 (htab->params->stub_bfd,
11302 			  LD_R12_0R12 | PPC_LO (off), p);
11303 	    }
11304 	  else
11305 	    bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
11306 
11307 	  if (PPC_HA (r2off) != 0)
11308 	    {
11309 	      p += 4;
11310 	      bfd_put_32 (htab->params->stub_bfd,
11311 			  ADDIS_R2_R2 | PPC_HA (r2off), p);
11312 	    }
11313 	  if (PPC_LO (r2off) != 0)
11314 	    {
11315 	      p += 4;
11316 	      bfd_put_32 (htab->params->stub_bfd,
11317 			  ADDI_R2_R2 | PPC_LO (r2off), p);
11318 	    }
11319 	}
11320       p += 4;
11321       bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11322       p += 4;
11323       bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11324       p += 4;
11325       break;
11326 
11327     case ppc_stub_long_branch_notoc:
11328     case ppc_stub_long_branch_both:
11329     case ppc_stub_plt_branch_notoc:
11330     case ppc_stub_plt_branch_both:
11331     case ppc_stub_plt_call_notoc:
11332     case ppc_stub_plt_call_both:
11333       p = loc;
11334       off = (stub_entry->stub_offset
11335 	     + stub_entry->group->stub_sec->output_offset
11336 	     + stub_entry->group->stub_sec->output_section->vma);
11337       if (stub_entry->stub_type == ppc_stub_long_branch_both
11338 	  || stub_entry->stub_type == ppc_stub_plt_branch_both
11339 	  || stub_entry->stub_type == ppc_stub_plt_call_both)
11340 	{
11341 	  off += 4;
11342 	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11343 	  p += 4;
11344 	}
11345       if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
11346 	{
11347 	  targ = stub_entry->plt_ent->plt.offset & ~1;
11348 	  if (targ >= (bfd_vma) -2)
11349 	    abort ();
11350 
11351 	  plt = htab->elf.splt;
11352 	  if (!htab->elf.dynamic_sections_created
11353 	      || stub_entry->h == NULL
11354 	      || stub_entry->h->elf.dynindx == -1)
11355 	    {
11356 	      if (stub_entry->symtype == STT_GNU_IFUNC)
11357 		plt = htab->elf.iplt;
11358 	      else
11359 		plt = htab->pltlocal;
11360 	    }
11361 	  targ += plt->output_offset + plt->output_section->vma;
11362 	}
11363       else
11364 	targ = (stub_entry->target_value
11365 		+ stub_entry->target_section->output_offset
11366 		+ stub_entry->target_section->output_section->vma);
11367       odd = off & 4;
11368       off = targ - off;
11369 
11370       relp = p;
11371       num_rel = 0;
11372       if (htab->powerxx_stubs)
11373 	{
11374 	  bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
11375 	  p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
11376 	}
11377       else
11378 	{
11379 	  /* The notoc stubs calculate their target (either a PLT entry or
11380 	     the global entry point of a function) relative to the PC
11381 	     returned by the "bcl" two instructions past the start of the
11382 	     sequence emitted by build_offset.  The offset is therefore 8
11383 	     less than calculated from the start of the sequence.  */
11384 	  off -= 8;
11385 	  p = build_offset (htab->params->stub_bfd, p, off,
11386 			    stub_entry->stub_type >= ppc_stub_plt_call_notoc);
11387 	}
11388 
11389       if (stub_entry->stub_type <= ppc_stub_long_branch_both)
11390 	{
11391 	  bfd_vma from;
11392 	  num_rel = 1;
11393 	  from = (stub_entry->stub_offset
11394 		  + stub_entry->group->stub_sec->output_offset
11395 		  + stub_entry->group->stub_sec->output_section->vma
11396 		  + (p - loc));
11397 	  bfd_put_32 (htab->params->stub_bfd,
11398 		      B_DOT | ((targ - from) & 0x3fffffc), p);
11399 	}
11400       else
11401 	{
11402 	  bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11403 	  p += 4;
11404 	  bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11405 	}
11406       p += 4;
11407 
11408       if (info->emitrelocations)
11409 	{
11410 	  bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
11411 	  if (htab->powerxx_stubs)
11412 	    num_rel += num_relocs_for_powerxx_offset (off, odd);
11413 	  else
11414 	    {
11415 	      num_rel += num_relocs_for_offset (off);
11416 	      roff += 16;
11417 	    }
11418 	  r = get_relocs (stub_entry->group->stub_sec, num_rel);
11419 	  if (r == NULL)
11420 	    return FALSE;
11421 	  if (htab->powerxx_stubs)
11422 	    r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd);
11423 	  else
11424 	    r = emit_relocs_for_offset (info, r, roff, targ, off);
11425 	  if (stub_entry->stub_type == ppc_stub_long_branch_notoc
11426 	      || stub_entry->stub_type == ppc_stub_long_branch_both)
11427 	    {
11428 	      ++r;
11429 	      roff = p - 4 - stub_entry->group->stub_sec->contents;
11430 	      r->r_offset = roff;
11431 	      r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11432 	      r->r_addend = targ;
11433 	      if (stub_entry->h != NULL
11434 		  && !use_global_in_relocs (htab, stub_entry, r, num_rel))
11435 		return FALSE;
11436 	    }
11437 	}
11438 
11439       if (!htab->powerxx_stubs
11440 	  && htab->glink_eh_frame != NULL
11441 	  && htab->glink_eh_frame->size != 0)
11442 	{
11443 	  bfd_byte *base, *eh;
11444 	  unsigned int lr_used, delta;
11445 
11446 	  base = (htab->glink_eh_frame->contents
11447 		  + stub_entry->group->eh_base + 17);
11448 	  eh = base + stub_entry->group->eh_size;
11449 	  lr_used = stub_entry->stub_offset + 8;
11450 	  if (stub_entry->stub_type == ppc_stub_long_branch_both
11451 	      || stub_entry->stub_type == ppc_stub_plt_branch_both
11452 	      || stub_entry->stub_type == ppc_stub_plt_call_both)
11453 	    lr_used += 4;
11454 	  delta = lr_used - stub_entry->group->lr_restore;
11455 	  stub_entry->group->lr_restore = lr_used + 8;
11456 	  eh = eh_advance (htab->elf.dynobj, eh, delta);
11457 	  *eh++ = DW_CFA_register;
11458 	  *eh++ = 65;
11459 	  *eh++ = 12;
11460 	  *eh++ = DW_CFA_advance_loc + 2;
11461 	  *eh++ = DW_CFA_restore_extended;
11462 	  *eh++ = 65;
11463 	  stub_entry->group->eh_size = eh - base;
11464 	}
11465       break;
11466 
11467     case ppc_stub_plt_call:
11468     case ppc_stub_plt_call_r2save:
11469       if (stub_entry->h != NULL
11470 	  && stub_entry->h->is_func_descriptor
11471 	  && stub_entry->h->oh != NULL)
11472 	{
11473 	  struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11474 
11475 	  /* If the old-ABI "dot-symbol" is undefined make it weak so
11476 	     we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.  */
11477 	  if (fh->elf.root.type == bfd_link_hash_undefined
11478 	      && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11479 		  || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11480 	    fh->elf.root.type = bfd_link_hash_undefweak;
11481 	}
11482 
11483       /* Now build the stub.  */
11484       targ = stub_entry->plt_ent->plt.offset & ~1;
11485       if (targ >= (bfd_vma) -2)
11486 	abort ();
11487 
11488       plt = htab->elf.splt;
11489       if (!htab->elf.dynamic_sections_created
11490 	  || stub_entry->h == NULL
11491 	  || stub_entry->h->elf.dynindx == -1)
11492 	{
11493 	  if (stub_entry->symtype == STT_GNU_IFUNC)
11494 	    plt = htab->elf.iplt;
11495 	  else
11496 	    plt = htab->pltlocal;
11497 	}
11498       targ += plt->output_offset + plt->output_section->vma;
11499 
11500       off = (elf_gp (info->output_bfd)
11501 	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11502       off = targ - off;
11503 
11504       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11505 	{
11506 	  info->callbacks->einfo
11507 	    /* xgettext:c-format */
11508 	    (_("%P: linkage table error against `%pT'\n"),
11509 	     stub_entry->h != NULL
11510 	     ? stub_entry->h->elf.root.root.string
11511 	     : "<local sym>");
11512 	  bfd_set_error (bfd_error_bad_value);
11513 	  htab->stub_error = TRUE;
11514 	  return FALSE;
11515 	}
11516 
11517       r = NULL;
11518       if (info->emitrelocations)
11519 	{
11520 	  r = get_relocs (stub_entry->group->stub_sec,
11521 			  ((PPC_HA (off) != 0)
11522 			   + (htab->opd_abi
11523 			      ? 2 + (htab->params->plt_static_chain
11524 				     && PPC_HA (off + 16) == PPC_HA (off))
11525 			      : 1)));
11526 	  if (r == NULL)
11527 	    return FALSE;
11528 	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11529 	  if (bfd_big_endian (info->output_bfd))
11530 	    r[0].r_offset += 2;
11531 	  r[0].r_addend = targ;
11532 	}
11533       if (stub_entry->h != NULL
11534 	  && (stub_entry->h == htab->tls_get_addr_fd
11535 	      || stub_entry->h == htab->tls_get_addr)
11536 	  && htab->params->tls_get_addr_opt)
11537 	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11538       else
11539 	p = build_plt_stub (htab, stub_entry, loc, off, r);
11540       break;
11541 
11542     case ppc_stub_save_res:
11543       return TRUE;
11544 
11545     default:
11546       BFD_FAIL ();
11547       return FALSE;
11548     }
11549 
11550   stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
11551 
11552   if (htab->params->emit_stub_syms)
11553     {
11554       struct elf_link_hash_entry *h;
11555       size_t len1, len2;
11556       char *name;
11557       const char *const stub_str[] = { "long_branch",
11558 				       "long_branch",
11559 				       "long_branch",
11560 				       "long_branch",
11561 				       "plt_branch",
11562 				       "plt_branch",
11563 				       "plt_branch",
11564 				       "plt_branch",
11565 				       "plt_call",
11566 				       "plt_call",
11567 				       "plt_call",
11568 				       "plt_call" };
11569 
11570       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11571       len2 = strlen (stub_entry->root.string);
11572       name = bfd_malloc (len1 + len2 + 2);
11573       if (name == NULL)
11574 	return FALSE;
11575       memcpy (name, stub_entry->root.string, 9);
11576       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11577       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11578       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11579       if (h == NULL)
11580 	return FALSE;
11581       if (h->root.type == bfd_link_hash_new)
11582 	{
11583 	  h->root.type = bfd_link_hash_defined;
11584 	  h->root.u.def.section = stub_entry->group->stub_sec;
11585 	  h->root.u.def.value = stub_entry->stub_offset;
11586 	  h->ref_regular = 1;
11587 	  h->def_regular = 1;
11588 	  h->ref_regular_nonweak = 1;
11589 	  h->forced_local = 1;
11590 	  h->non_elf = 0;
11591 	  h->root.linker_def = 1;
11592 	}
11593     }
11594 
11595   return TRUE;
11596 }
11597 
11598 /* As above, but don't actually build the stub.  Just bump offset so
11599    we know stub section sizes, and select plt_branch stubs where
11600    long_branch stubs won't do.  */
11601 
11602 static bfd_boolean
11603 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11604 {
11605   struct ppc_stub_hash_entry *stub_entry;
11606   struct bfd_link_info *info;
11607   struct ppc_link_hash_table *htab;
11608   asection *plt;
11609   bfd_vma targ, off, r2off;
11610   unsigned int size, extra, lr_used, delta, odd;
11611 
11612   /* Massage our args to the form they really have.  */
11613   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11614   info = in_arg;
11615 
11616   htab = ppc_hash_table (info);
11617   if (htab == NULL)
11618     return FALSE;
11619 
11620   /* Make a note of the offset within the stubs for this entry.  */
11621   stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11622 
11623   if (stub_entry->h != NULL
11624       && stub_entry->h->save_res
11625       && stub_entry->h->elf.root.type == bfd_link_hash_defined
11626       && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11627     {
11628       /* Don't make stubs to out-of-line register save/restore
11629 	 functions.  Instead, emit copies of the functions.  */
11630       stub_entry->group->needs_save_res = 1;
11631       stub_entry->stub_type = ppc_stub_save_res;
11632       return TRUE;
11633     }
11634 
11635   switch (stub_entry->stub_type)
11636     {
11637     case ppc_stub_plt_branch:
11638     case ppc_stub_plt_branch_r2off:
11639       /* Reset the stub type from the plt branch variant in case we now
11640 	 can reach with a shorter stub.  */
11641       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11642       /* Fall through.  */
11643     case ppc_stub_long_branch:
11644     case ppc_stub_long_branch_r2off:
11645       targ = (stub_entry->target_value
11646 	      + stub_entry->target_section->output_offset
11647 	      + stub_entry->target_section->output_section->vma);
11648       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11649       off = (stub_entry->stub_offset
11650 	     + stub_entry->group->stub_sec->output_offset
11651 	     + stub_entry->group->stub_sec->output_section->vma);
11652 
11653       size = 4;
11654       r2off = 0;
11655       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11656 	{
11657 	  r2off = get_r2off (info, stub_entry);
11658 	  if (r2off == (bfd_vma) -1)
11659 	    {
11660 	      htab->stub_error = TRUE;
11661 	      return FALSE;
11662 	    }
11663 	  size = 8;
11664 	  if (PPC_HA (r2off) != 0)
11665 	    size += 4;
11666 	  if (PPC_LO (r2off) != 0)
11667 	    size += 4;
11668 	  off += size - 4;
11669 	}
11670       off = targ - off;
11671 
11672       /* If the branch offset is too big, use a ppc_stub_plt_branch.
11673 	 Do the same for -R objects without function descriptors.  */
11674       if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
11675 	   && r2off == 0
11676 	   && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
11677 	  || off + (1 << 25) >= (bfd_vma) (1 << 26))
11678 	{
11679 	  struct ppc_branch_hash_entry *br_entry;
11680 
11681 	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11682 					     stub_entry->root.string + 9,
11683 					     TRUE, FALSE);
11684 	  if (br_entry == NULL)
11685 	    {
11686 	      _bfd_error_handler (_("can't build branch stub `%s'"),
11687 				  stub_entry->root.string);
11688 	      htab->stub_error = TRUE;
11689 	      return FALSE;
11690 	    }
11691 
11692 	  if (br_entry->iter != htab->stub_iteration)
11693 	    {
11694 	      br_entry->iter = htab->stub_iteration;
11695 	      br_entry->offset = htab->brlt->size;
11696 	      htab->brlt->size += 8;
11697 
11698 	      if (htab->relbrlt != NULL)
11699 		htab->relbrlt->size += sizeof (Elf64_External_Rela);
11700 	      else if (info->emitrelocations)
11701 		{
11702 		  htab->brlt->reloc_count += 1;
11703 		  htab->brlt->flags |= SEC_RELOC;
11704 		}
11705 	    }
11706 
11707 	  targ = (br_entry->offset
11708 		  + htab->brlt->output_offset
11709 		  + htab->brlt->output_section->vma);
11710 	  off = (elf_gp (info->output_bfd)
11711 		 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11712 	  off = targ - off;
11713 
11714 	  if (info->emitrelocations)
11715 	    {
11716 	      stub_entry->group->stub_sec->reloc_count
11717 		+= 1 + (PPC_HA (off) != 0);
11718 	      stub_entry->group->stub_sec->flags |= SEC_RELOC;
11719 	    }
11720 
11721 	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
11722 	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11723 	    {
11724 	      size = 12;
11725 	      if (PPC_HA (off) != 0)
11726 		size = 16;
11727 	    }
11728 	  else
11729 	    {
11730 	      size = 16;
11731 	      if (PPC_HA (off) != 0)
11732 		size += 4;
11733 
11734 	      if (PPC_HA (r2off) != 0)
11735 		size += 4;
11736 	      if (PPC_LO (r2off) != 0)
11737 		size += 4;
11738 	    }
11739 	}
11740       else if (info->emitrelocations)
11741 	{
11742 	  stub_entry->group->stub_sec->reloc_count += 1;
11743 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
11744 	}
11745       break;
11746 
11747     case ppc_stub_plt_branch_notoc:
11748     case ppc_stub_plt_branch_both:
11749       stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11750       /* Fall through.  */
11751     case ppc_stub_long_branch_notoc:
11752     case ppc_stub_long_branch_both:
11753       off = (stub_entry->stub_offset
11754 	     + stub_entry->group->stub_sec->output_offset
11755 	     + stub_entry->group->stub_sec->output_section->vma);
11756       size = 0;
11757       if (stub_entry->stub_type == ppc_stub_long_branch_both)
11758 	size = 4;
11759       off += size;
11760       targ = (stub_entry->target_value
11761 	      + stub_entry->target_section->output_offset
11762 	      + stub_entry->target_section->output_section->vma);
11763       odd = off & 4;
11764       off = targ - off;
11765 
11766       if (info->emitrelocations)
11767 	{
11768 	  unsigned int num_rel;
11769 	  if (htab->powerxx_stubs)
11770 	    num_rel = num_relocs_for_powerxx_offset (off, odd);
11771 	  else
11772 	    num_rel = num_relocs_for_offset (off - 8);
11773 	  stub_entry->group->stub_sec->reloc_count += num_rel;
11774 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
11775 	}
11776 
11777       if (htab->powerxx_stubs)
11778 	extra = size_powerxx_offset (off, odd);
11779       else
11780 	extra = size_offset (off - 8);
11781       /* Include branch insn plus those in the offset sequence.  */
11782       size += 4 + extra;
11783       /* The branch insn is at the end, or "extra" bytes along.  So
11784 	 its offset will be "extra" bytes less that that already
11785 	 calculated.  */
11786       off -= extra;
11787 
11788       if (!htab->powerxx_stubs)
11789 	{
11790 	  /* After the bcl, lr has been modified so we need to emit
11791 	     .eh_frame info saying the return address is in r12.  */
11792 	  lr_used = stub_entry->stub_offset + 8;
11793 	  if (stub_entry->stub_type == ppc_stub_long_branch_both)
11794 	    lr_used += 4;
11795 	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
11796 	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11797 	     DW_CFA_restore_extended 65.  */
11798 	  delta = lr_used - stub_entry->group->lr_restore;
11799 	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11800 	  stub_entry->group->lr_restore = lr_used + 8;
11801 	}
11802 
11803       /* If the branch can't reach, use a plt_branch.  */
11804       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11805 	{
11806 	  stub_entry->stub_type += (ppc_stub_plt_branch_notoc
11807 				    - ppc_stub_long_branch_notoc);
11808 	  size += 4;
11809 	}
11810       else if (info->emitrelocations)
11811 	stub_entry->group->stub_sec->reloc_count +=1;
11812       break;
11813 
11814     case ppc_stub_plt_call_notoc:
11815     case ppc_stub_plt_call_both:
11816       off = (stub_entry->stub_offset
11817 	     + stub_entry->group->stub_sec->output_offset
11818 	     + stub_entry->group->stub_sec->output_section->vma);
11819       if (stub_entry->stub_type == ppc_stub_plt_call_both)
11820 	off += 4;
11821       targ = stub_entry->plt_ent->plt.offset & ~1;
11822       if (targ >= (bfd_vma) -2)
11823 	abort ();
11824 
11825       plt = htab->elf.splt;
11826       if (!htab->elf.dynamic_sections_created
11827 	  || stub_entry->h == NULL
11828 	  || stub_entry->h->elf.dynindx == -1)
11829 	{
11830 	  if (stub_entry->symtype == STT_GNU_IFUNC)
11831 	    plt = htab->elf.iplt;
11832 	  else
11833 	    plt = htab->pltlocal;
11834 	}
11835       targ += plt->output_offset + plt->output_section->vma;
11836       odd = off & 4;
11837       off = targ - off;
11838 
11839       if (htab->params->plt_stub_align != 0)
11840 	{
11841 	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
11842 
11843 	  stub_entry->group->stub_sec->size += pad;
11844 	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11845 	  off -= pad;
11846 	}
11847 
11848       if (info->emitrelocations)
11849 	{
11850 	  unsigned int num_rel;
11851 	  if (htab->powerxx_stubs)
11852 	    num_rel = num_relocs_for_powerxx_offset (off, odd);
11853 	  else
11854 	    num_rel = num_relocs_for_offset (off - 8);
11855 	  stub_entry->group->stub_sec->reloc_count += num_rel;
11856 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
11857 	}
11858 
11859       size = plt_stub_size (htab, stub_entry, off);
11860 
11861       if (!htab->powerxx_stubs)
11862 	{
11863 	  /* After the bcl, lr has been modified so we need to emit
11864 	     .eh_frame info saying the return address is in r12.  */
11865 	  lr_used = stub_entry->stub_offset + 8;
11866 	  if (stub_entry->stub_type == ppc_stub_plt_call_both)
11867 	    lr_used += 4;
11868 	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
11869 	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11870 	     DW_CFA_restore_extended 65.  */
11871 	  delta = lr_used - stub_entry->group->lr_restore;
11872 	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11873 	  stub_entry->group->lr_restore = lr_used + 8;
11874 	}
11875       break;
11876 
11877     case ppc_stub_plt_call:
11878     case ppc_stub_plt_call_r2save:
11879       targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
11880       if (targ >= (bfd_vma) -2)
11881 	abort ();
11882       plt = htab->elf.splt;
11883       if (!htab->elf.dynamic_sections_created
11884 	  || stub_entry->h == NULL
11885 	  || stub_entry->h->elf.dynindx == -1)
11886 	{
11887 	  if (stub_entry->symtype == STT_GNU_IFUNC)
11888 	    plt = htab->elf.iplt;
11889 	  else
11890 	    plt = htab->pltlocal;
11891 	}
11892       targ += plt->output_offset + plt->output_section->vma;
11893 
11894       off = (elf_gp (info->output_bfd)
11895 	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11896       off = targ - off;
11897 
11898       if (htab->params->plt_stub_align != 0)
11899 	{
11900 	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
11901 
11902 	  stub_entry->group->stub_sec->size += pad;
11903 	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11904 	}
11905 
11906       if (info->emitrelocations)
11907 	{
11908 	  stub_entry->group->stub_sec->reloc_count
11909 	    += ((PPC_HA (off) != 0)
11910 		+ (htab->opd_abi
11911 		   ? 2 + (htab->params->plt_static_chain
11912 			  && PPC_HA (off + 16) == PPC_HA (off))
11913 		   : 1));
11914 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
11915 	}
11916 
11917       size = plt_stub_size (htab, stub_entry, off);
11918 
11919       if (stub_entry->h != NULL
11920 	  && (stub_entry->h == htab->tls_get_addr_fd
11921 	      || stub_entry->h == htab->tls_get_addr)
11922 	  && htab->params->tls_get_addr_opt
11923 	  && stub_entry->stub_type == ppc_stub_plt_call_r2save)
11924 	{
11925 	  /* After the bctrl, lr has been modified so we need to
11926 	     emit .eh_frame info saying the return address is
11927 	     on the stack.  In fact we put the EH info specifying
11928 	     that the return address is on the stack *at* the
11929 	     call rather than after it, because the EH info for a
11930 	     call needs to be specified by that point.
11931 	     See libgcc/unwind-dw2.c execute_cfa_program.  */
11932 	  lr_used = stub_entry->stub_offset + size - 20;
11933 	  /* The eh_frame info will consist of a DW_CFA_advance_loc
11934 	     or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
11935 	     DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
11936 	  delta = lr_used - stub_entry->group->lr_restore;
11937 	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11938 	  stub_entry->group->lr_restore = size - 4;
11939 	}
11940       break;
11941 
11942     default:
11943       BFD_FAIL ();
11944       return FALSE;
11945     }
11946 
11947   stub_entry->group->stub_sec->size += size;
11948   return TRUE;
11949 }
11950 
11951 /* Set up various things so that we can make a list of input sections
11952    for each output section included in the link.  Returns -1 on error,
11953    0 when no stubs will be needed, and 1 on success.  */
11954 
11955 int
11956 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
11957 {
11958   unsigned int id;
11959   bfd_size_type amt;
11960   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11961 
11962   if (htab == NULL)
11963     return -1;
11964 
11965   htab->sec_info_arr_size = _bfd_section_id;
11966   amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
11967   htab->sec_info = bfd_zmalloc (amt);
11968   if (htab->sec_info == NULL)
11969     return -1;
11970 
11971   /* Set toc_off for com, und, abs and ind sections.  */
11972   for (id = 0; id < 3; id++)
11973     htab->sec_info[id].toc_off = TOC_BASE_OFF;
11974 
11975   return 1;
11976 }
11977 
11978 /* Set up for first pass at multitoc partitioning.  */
11979 
11980 void
11981 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
11982 {
11983   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11984 
11985   htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
11986   htab->toc_bfd = NULL;
11987   htab->toc_first_sec = NULL;
11988 }
11989 
11990 /* The linker repeatedly calls this function for each TOC input section
11991    and linker generated GOT section.  Group input bfds such that the toc
11992    within a group is less than 64k in size.  */
11993 
11994 bfd_boolean
11995 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
11996 {
11997   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11998   bfd_vma addr, off, limit;
11999 
12000   if (htab == NULL)
12001     return FALSE;
12002 
12003   if (!htab->second_toc_pass)
12004     {
12005       /* Keep track of the first .toc or .got section for this input bfd.  */
12006       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
12007 
12008       if (new_bfd)
12009 	{
12010 	  htab->toc_bfd = isec->owner;
12011 	  htab->toc_first_sec = isec;
12012 	}
12013 
12014       addr = isec->output_offset + isec->output_section->vma;
12015       off = addr - htab->toc_curr;
12016       limit = 0x80008000;
12017       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
12018 	limit = 0x10000;
12019       if (off + isec->size > limit)
12020 	{
12021 	  addr = (htab->toc_first_sec->output_offset
12022 		  + htab->toc_first_sec->output_section->vma);
12023 	  htab->toc_curr = addr;
12024 	  htab->toc_curr &= -TOC_BASE_ALIGN;
12025 	}
12026 
12027       /* toc_curr is the base address of this toc group.  Set elf_gp
12028 	 for the input section to be the offset relative to the
12029 	 output toc base plus 0x8000.  Making the input elf_gp an
12030 	 offset allows us to move the toc as a whole without
12031 	 recalculating input elf_gp.  */
12032       off = htab->toc_curr - elf_gp (info->output_bfd);
12033       off += TOC_BASE_OFF;
12034 
12035       /* Die if someone uses a linker script that doesn't keep input
12036 	 file .toc and .got together.  */
12037       if (new_bfd
12038 	  && elf_gp (isec->owner) != 0
12039 	  && elf_gp (isec->owner) != off)
12040 	return FALSE;
12041 
12042       elf_gp (isec->owner) = off;
12043       return TRUE;
12044     }
12045 
12046   /* During the second pass toc_first_sec points to the start of
12047      a toc group, and toc_curr is used to track the old elf_gp.
12048      We use toc_bfd to ensure we only look at each bfd once.  */
12049   if (htab->toc_bfd == isec->owner)
12050     return TRUE;
12051   htab->toc_bfd = isec->owner;
12052 
12053   if (htab->toc_first_sec == NULL
12054       || htab->toc_curr != elf_gp (isec->owner))
12055     {
12056       htab->toc_curr = elf_gp (isec->owner);
12057       htab->toc_first_sec = isec;
12058     }
12059   addr = (htab->toc_first_sec->output_offset
12060 	  + htab->toc_first_sec->output_section->vma);
12061   off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
12062   elf_gp (isec->owner) = off;
12063 
12064   return TRUE;
12065 }
12066 
12067 /* Called via elf_link_hash_traverse to merge GOT entries for global
12068    symbol H.  */
12069 
12070 static bfd_boolean
12071 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12072 {
12073   if (h->root.type == bfd_link_hash_indirect)
12074     return TRUE;
12075 
12076   merge_got_entries (&h->got.glist);
12077 
12078   return TRUE;
12079 }
12080 
12081 /* Called via elf_link_hash_traverse to allocate GOT entries for global
12082    symbol H.  */
12083 
12084 static bfd_boolean
12085 reallocate_got (struct elf_link_hash_entry *h, void *inf)
12086 {
12087   struct got_entry *gent;
12088 
12089   if (h->root.type == bfd_link_hash_indirect)
12090     return TRUE;
12091 
12092   for (gent = h->got.glist; gent != NULL; gent = gent->next)
12093     if (!gent->is_indirect)
12094       allocate_got (h, (struct bfd_link_info *) inf, gent);
12095   return TRUE;
12096 }
12097 
12098 /* Called on the first multitoc pass after the last call to
12099    ppc64_elf_next_toc_section.  This function removes duplicate GOT
12100    entries.  */
12101 
12102 bfd_boolean
12103 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
12104 {
12105   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12106   struct bfd *ibfd, *ibfd2;
12107   bfd_boolean done_something;
12108 
12109   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
12110 
12111   if (!htab->do_multi_toc)
12112     return FALSE;
12113 
12114   /* Merge global sym got entries within a toc group.  */
12115   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
12116 
12117   /* And tlsld_got.  */
12118   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12119     {
12120       struct got_entry *ent, *ent2;
12121 
12122       if (!is_ppc64_elf (ibfd))
12123 	continue;
12124 
12125       ent = ppc64_tlsld_got (ibfd);
12126       if (!ent->is_indirect
12127 	  && ent->got.offset != (bfd_vma) -1)
12128 	{
12129 	  for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
12130 	    {
12131 	      if (!is_ppc64_elf (ibfd2))
12132 		continue;
12133 
12134 	      ent2 = ppc64_tlsld_got (ibfd2);
12135 	      if (!ent2->is_indirect
12136 		  && ent2->got.offset != (bfd_vma) -1
12137 		  && elf_gp (ibfd2) == elf_gp (ibfd))
12138 		{
12139 		  ent2->is_indirect = TRUE;
12140 		  ent2->got.ent = ent;
12141 		}
12142 	    }
12143 	}
12144     }
12145 
12146   /* Zap sizes of got sections.  */
12147   htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
12148   htab->elf.irelplt->size -= htab->got_reli_size;
12149   htab->got_reli_size = 0;
12150 
12151   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12152     {
12153       asection *got, *relgot;
12154 
12155       if (!is_ppc64_elf (ibfd))
12156 	continue;
12157 
12158       got = ppc64_elf_tdata (ibfd)->got;
12159       if (got != NULL)
12160 	{
12161 	  got->rawsize = got->size;
12162 	  got->size = 0;
12163 	  relgot = ppc64_elf_tdata (ibfd)->relgot;
12164 	  relgot->rawsize = relgot->size;
12165 	  relgot->size = 0;
12166 	}
12167     }
12168 
12169   /* Now reallocate the got, local syms first.  We don't need to
12170      allocate section contents again since we never increase size.  */
12171   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12172     {
12173       struct got_entry **lgot_ents;
12174       struct got_entry **end_lgot_ents;
12175       struct plt_entry **local_plt;
12176       struct plt_entry **end_local_plt;
12177       unsigned char *lgot_masks;
12178       bfd_size_type locsymcount;
12179       Elf_Internal_Shdr *symtab_hdr;
12180       asection *s;
12181 
12182       if (!is_ppc64_elf (ibfd))
12183 	continue;
12184 
12185       lgot_ents = elf_local_got_ents (ibfd);
12186       if (!lgot_ents)
12187 	continue;
12188 
12189       symtab_hdr = &elf_symtab_hdr (ibfd);
12190       locsymcount = symtab_hdr->sh_info;
12191       end_lgot_ents = lgot_ents + locsymcount;
12192       local_plt = (struct plt_entry **) end_lgot_ents;
12193       end_local_plt = local_plt + locsymcount;
12194       lgot_masks = (unsigned char *) end_local_plt;
12195       s = ppc64_elf_tdata (ibfd)->got;
12196       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
12197 	{
12198 	  struct got_entry *ent;
12199 
12200 	  for (ent = *lgot_ents; ent != NULL; ent = ent->next)
12201 	    {
12202 	      unsigned int ent_size = 8;
12203 	      unsigned int rel_size = sizeof (Elf64_External_Rela);
12204 
12205 	      ent->got.offset = s->size;
12206 	      if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
12207 		{
12208 		  ent_size *= 2;
12209 		  rel_size *= 2;
12210 		}
12211 	      s->size += ent_size;
12212 	      if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
12213 		{
12214 		  htab->elf.irelplt->size += rel_size;
12215 		  htab->got_reli_size += rel_size;
12216 		}
12217 	      else if (bfd_link_pic (info)
12218 		       && !(ent->tls_type != 0
12219 			    && bfd_link_executable (info)))
12220 		{
12221 		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12222 		  srel->size += rel_size;
12223 		}
12224 	    }
12225 	}
12226     }
12227 
12228   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
12229 
12230   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12231     {
12232       struct got_entry *ent;
12233 
12234       if (!is_ppc64_elf (ibfd))
12235 	continue;
12236 
12237       ent = ppc64_tlsld_got (ibfd);
12238       if (!ent->is_indirect
12239 	  && ent->got.offset != (bfd_vma) -1)
12240 	{
12241 	  asection *s = ppc64_elf_tdata (ibfd)->got;
12242 	  ent->got.offset = s->size;
12243 	  s->size += 16;
12244 	  if (bfd_link_dll (info))
12245 	    {
12246 	      asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12247 	      srel->size += sizeof (Elf64_External_Rela);
12248 	    }
12249 	}
12250     }
12251 
12252   done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
12253   if (!done_something)
12254     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12255       {
12256 	asection *got;
12257 
12258 	if (!is_ppc64_elf (ibfd))
12259 	  continue;
12260 
12261 	got = ppc64_elf_tdata (ibfd)->got;
12262 	if (got != NULL)
12263 	  {
12264 	    done_something = got->rawsize != got->size;
12265 	    if (done_something)
12266 	      break;
12267 	  }
12268       }
12269 
12270   if (done_something)
12271     (*htab->params->layout_sections_again) ();
12272 
12273   /* Set up for second pass over toc sections to recalculate elf_gp
12274      on input sections.  */
12275   htab->toc_bfd = NULL;
12276   htab->toc_first_sec = NULL;
12277   htab->second_toc_pass = TRUE;
12278   return done_something;
12279 }
12280 
12281 /* Called after second pass of multitoc partitioning.  */
12282 
12283 void
12284 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
12285 {
12286   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12287 
12288   /* After the second pass, toc_curr tracks the TOC offset used
12289      for code sections below in ppc64_elf_next_input_section.  */
12290   htab->toc_curr = TOC_BASE_OFF;
12291 }
12292 
12293 /* No toc references were found in ISEC.  If the code in ISEC makes no
12294    calls, then there's no need to use toc adjusting stubs when branching
12295    into ISEC.  Actually, indirect calls from ISEC are OK as they will
12296    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
12297    needed, and 2 if a cyclical call-graph was found but no other reason
12298    for a stub was detected.  If called from the top level, a return of
12299    2 means the same as a return of 0.  */
12300 
12301 static int
12302 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
12303 {
12304   int ret;
12305 
12306   /* Mark this section as checked.  */
12307   isec->call_check_done = 1;
12308 
12309   /* We know none of our code bearing sections will need toc stubs.  */
12310   if ((isec->flags & SEC_LINKER_CREATED) != 0)
12311     return 0;
12312 
12313   if (isec->size == 0)
12314     return 0;
12315 
12316   if (isec->output_section == NULL)
12317     return 0;
12318 
12319   ret = 0;
12320   if (isec->reloc_count != 0)
12321     {
12322       Elf_Internal_Rela *relstart, *rel;
12323       Elf_Internal_Sym *local_syms;
12324       struct ppc_link_hash_table *htab;
12325 
12326       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
12327 					    info->keep_memory);
12328       if (relstart == NULL)
12329 	return -1;
12330 
12331       /* Look for branches to outside of this section.  */
12332       local_syms = NULL;
12333       htab = ppc_hash_table (info);
12334       if (htab == NULL)
12335 	return -1;
12336 
12337       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
12338 	{
12339 	  enum elf_ppc64_reloc_type r_type;
12340 	  unsigned long r_symndx;
12341 	  struct elf_link_hash_entry *h;
12342 	  struct ppc_link_hash_entry *eh;
12343 	  Elf_Internal_Sym *sym;
12344 	  asection *sym_sec;
12345 	  struct _opd_sec_data *opd;
12346 	  bfd_vma sym_value;
12347 	  bfd_vma dest;
12348 
12349 	  r_type = ELF64_R_TYPE (rel->r_info);
12350 	  if (r_type != R_PPC64_REL24
12351 	      && r_type != R_PPC64_REL24_NOTOC
12352 	      && r_type != R_PPC64_REL14
12353 	      && r_type != R_PPC64_REL14_BRTAKEN
12354 	      && r_type != R_PPC64_REL14_BRNTAKEN
12355 	      && r_type != R_PPC64_PLTCALL
12356 	      && r_type != R_PPC64_PLTCALL_NOTOC)
12357 	    continue;
12358 
12359 	  r_symndx = ELF64_R_SYM (rel->r_info);
12360 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
12361 			  isec->owner))
12362 	    {
12363 	      ret = -1;
12364 	      break;
12365 	    }
12366 
12367 	  /* Calls to dynamic lib functions go through a plt call stub
12368 	     that uses r2.  */
12369 	  eh = (struct ppc_link_hash_entry *) h;
12370 	  if (eh != NULL
12371 	      && (eh->elf.plt.plist != NULL
12372 		  || (eh->oh != NULL
12373 		      && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
12374 	    {
12375 	      ret = 1;
12376 	      break;
12377 	    }
12378 
12379 	  if (sym_sec == NULL)
12380 	    /* Ignore other undefined symbols.  */
12381 	    continue;
12382 
12383 	  /* Assume branches to other sections not included in the
12384 	     link need stubs too, to cover -R and absolute syms.  */
12385 	  if (sym_sec->output_section == NULL)
12386 	    {
12387 	      ret = 1;
12388 	      break;
12389 	    }
12390 
12391 	  if (h == NULL)
12392 	    sym_value = sym->st_value;
12393 	  else
12394 	    {
12395 	      if (h->root.type != bfd_link_hash_defined
12396 		  && h->root.type != bfd_link_hash_defweak)
12397 		abort ();
12398 	      sym_value = h->root.u.def.value;
12399 	    }
12400 	  sym_value += rel->r_addend;
12401 
12402 	  /* If this branch reloc uses an opd sym, find the code section.  */
12403 	  opd = get_opd_info (sym_sec);
12404 	  if (opd != NULL)
12405 	    {
12406 	      if (h == NULL && opd->adjust != NULL)
12407 		{
12408 		  long adjust;
12409 
12410 		  adjust = opd->adjust[OPD_NDX (sym_value)];
12411 		  if (adjust == -1)
12412 		    /* Assume deleted functions won't ever be called.  */
12413 		    continue;
12414 		  sym_value += adjust;
12415 		}
12416 
12417 	      dest = opd_entry_value (sym_sec, sym_value,
12418 				      &sym_sec, NULL, FALSE);
12419 	      if (dest == (bfd_vma) -1)
12420 		continue;
12421 	    }
12422 	  else
12423 	    dest = (sym_value
12424 		    + sym_sec->output_offset
12425 		    + sym_sec->output_section->vma);
12426 
12427 	  /* Ignore branch to self.  */
12428 	  if (sym_sec == isec)
12429 	    continue;
12430 
12431 	  /* If the called function uses the toc, we need a stub.  */
12432 	  if (sym_sec->has_toc_reloc
12433 	      || sym_sec->makes_toc_func_call)
12434 	    {
12435 	      ret = 1;
12436 	      break;
12437 	    }
12438 
12439 	  /* Assume any branch that needs a long branch stub might in fact
12440 	     need a plt_branch stub.  A plt_branch stub uses r2.  */
12441 	  else if (dest - (isec->output_offset
12442 			   + isec->output_section->vma
12443 			   + rel->r_offset) + (1 << 25)
12444 		   >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
12445 							     ? h->other
12446 							     : sym->st_other))
12447 	    {
12448 	      ret = 1;
12449 	      break;
12450 	    }
12451 
12452 	  /* If calling back to a section in the process of being
12453 	     tested, we can't say for sure that no toc adjusting stubs
12454 	     are needed, so don't return zero.  */
12455 	  else if (sym_sec->call_check_in_progress)
12456 	    ret = 2;
12457 
12458 	  /* Branches to another section that itself doesn't have any TOC
12459 	     references are OK.  Recursively call ourselves to check.  */
12460 	  else if (!sym_sec->call_check_done)
12461 	    {
12462 	      int recur;
12463 
12464 	      /* Mark current section as indeterminate, so that other
12465 		 sections that call back to current won't be marked as
12466 		 known.  */
12467 	      isec->call_check_in_progress = 1;
12468 	      recur = toc_adjusting_stub_needed (info, sym_sec);
12469 	      isec->call_check_in_progress = 0;
12470 
12471 	      if (recur != 0)
12472 		{
12473 		  ret = recur;
12474 		  if (recur != 2)
12475 		    break;
12476 		}
12477 	    }
12478 	}
12479 
12480       if (local_syms != NULL
12481 	  && (elf_symtab_hdr (isec->owner).contents
12482 	      != (unsigned char *) local_syms))
12483 	free (local_syms);
12484       if (elf_section_data (isec)->relocs != relstart)
12485 	free (relstart);
12486     }
12487 
12488   if ((ret & 1) == 0
12489       && isec->map_head.s != NULL
12490       && (strcmp (isec->output_section->name, ".init") == 0
12491 	  || strcmp (isec->output_section->name, ".fini") == 0))
12492     {
12493       if (isec->map_head.s->has_toc_reloc
12494 	  || isec->map_head.s->makes_toc_func_call)
12495 	ret = 1;
12496       else if (!isec->map_head.s->call_check_done)
12497 	{
12498 	  int recur;
12499 	  isec->call_check_in_progress = 1;
12500 	  recur = toc_adjusting_stub_needed (info, isec->map_head.s);
12501 	  isec->call_check_in_progress = 0;
12502 	  if (recur != 0)
12503 	    ret = recur;
12504 	}
12505     }
12506 
12507   if (ret == 1)
12508     isec->makes_toc_func_call = 1;
12509 
12510   return ret;
12511 }
12512 
12513 /* The linker repeatedly calls this function for each input section,
12514    in the order that input sections are linked into output sections.
12515    Build lists of input sections to determine groupings between which
12516    we may insert linker stubs.  */
12517 
12518 bfd_boolean
12519 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12520 {
12521   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12522 
12523   if (htab == NULL)
12524     return FALSE;
12525 
12526   if ((isec->output_section->flags & SEC_CODE) != 0
12527       && isec->output_section->id < htab->sec_info_arr_size)
12528     {
12529       /* This happens to make the list in reverse order,
12530 	 which is what we want.  */
12531       htab->sec_info[isec->id].u.list
12532 	= htab->sec_info[isec->output_section->id].u.list;
12533       htab->sec_info[isec->output_section->id].u.list = isec;
12534     }
12535 
12536   if (htab->multi_toc_needed)
12537     {
12538       /* Analyse sections that aren't already flagged as needing a
12539 	 valid toc pointer.  Exclude .fixup for the linux kernel.
12540 	 .fixup contains branches, but only back to the function that
12541 	 hit an exception.  */
12542       if (!(isec->has_toc_reloc
12543 	    || (isec->flags & SEC_CODE) == 0
12544 	    || strcmp (isec->name, ".fixup") == 0
12545 	    || isec->call_check_done))
12546 	{
12547 	  if (toc_adjusting_stub_needed (info, isec) < 0)
12548 	    return FALSE;
12549 	}
12550       /* Make all sections use the TOC assigned for this object file.
12551 	 This will be wrong for pasted sections;  We fix that in
12552 	 check_pasted_section().  */
12553       if (elf_gp (isec->owner) != 0)
12554 	htab->toc_curr = elf_gp (isec->owner);
12555     }
12556 
12557   htab->sec_info[isec->id].toc_off = htab->toc_curr;
12558   return TRUE;
12559 }
12560 
12561 /* Check that all .init and .fini sections use the same toc, if they
12562    have toc relocs.  */
12563 
12564 static bfd_boolean
12565 check_pasted_section (struct bfd_link_info *info, const char *name)
12566 {
12567   asection *o = bfd_get_section_by_name (info->output_bfd, name);
12568 
12569   if (o != NULL)
12570     {
12571       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12572       bfd_vma toc_off = 0;
12573       asection *i;
12574 
12575       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12576 	if (i->has_toc_reloc)
12577 	  {
12578 	    if (toc_off == 0)
12579 	      toc_off = htab->sec_info[i->id].toc_off;
12580 	    else if (toc_off != htab->sec_info[i->id].toc_off)
12581 	      return FALSE;
12582 	  }
12583 
12584       if (toc_off == 0)
12585 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12586 	  if (i->makes_toc_func_call)
12587 	    {
12588 	      toc_off = htab->sec_info[i->id].toc_off;
12589 	      break;
12590 	    }
12591 
12592       /* Make sure the whole pasted function uses the same toc offset.  */
12593       if (toc_off != 0)
12594 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12595 	  htab->sec_info[i->id].toc_off = toc_off;
12596     }
12597   return TRUE;
12598 }
12599 
12600 bfd_boolean
12601 ppc64_elf_check_init_fini (struct bfd_link_info *info)
12602 {
12603   return (check_pasted_section (info, ".init")
12604 	  & check_pasted_section (info, ".fini"));
12605 }
12606 
12607 /* See whether we can group stub sections together.  Grouping stub
12608    sections may result in fewer stubs.  More importantly, we need to
12609    put all .init* and .fini* stubs at the beginning of the .init or
12610    .fini output sections respectively, because glibc splits the
12611    _init and _fini functions into multiple parts.  Putting a stub in
12612    the middle of a function is not a good idea.  */
12613 
12614 static bfd_boolean
12615 group_sections (struct bfd_link_info *info,
12616 		bfd_size_type stub_group_size,
12617 		bfd_boolean stubs_always_before_branch)
12618 {
12619   struct ppc_link_hash_table *htab;
12620   asection *osec;
12621   bfd_boolean suppress_size_errors;
12622 
12623   htab = ppc_hash_table (info);
12624   if (htab == NULL)
12625     return FALSE;
12626 
12627   suppress_size_errors = FALSE;
12628   if (stub_group_size == 1)
12629     {
12630       /* Default values.  */
12631       if (stubs_always_before_branch)
12632 	stub_group_size = 0x1e00000;
12633       else
12634 	stub_group_size = 0x1c00000;
12635       suppress_size_errors = TRUE;
12636     }
12637 
12638   for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12639     {
12640       asection *tail;
12641 
12642       if (osec->id >= htab->sec_info_arr_size)
12643 	continue;
12644 
12645       tail = htab->sec_info[osec->id].u.list;
12646       while (tail != NULL)
12647 	{
12648 	  asection *curr;
12649 	  asection *prev;
12650 	  bfd_size_type total;
12651 	  bfd_boolean big_sec;
12652 	  bfd_vma curr_toc;
12653 	  struct map_stub *group;
12654 	  bfd_size_type group_size;
12655 
12656 	  curr = tail;
12657 	  total = tail->size;
12658 	  group_size = (ppc64_elf_section_data (tail) != NULL
12659 			&& ppc64_elf_section_data (tail)->has_14bit_branch
12660 			? stub_group_size >> 10 : stub_group_size);
12661 
12662 	  big_sec = total > group_size;
12663 	  if (big_sec && !suppress_size_errors)
12664 	    /* xgettext:c-format */
12665 	    _bfd_error_handler (_("%pB section %pA exceeds stub group size"),
12666 				tail->owner, tail);
12667 	  curr_toc = htab->sec_info[tail->id].toc_off;
12668 
12669 	  while ((prev = htab->sec_info[curr->id].u.list) != NULL
12670 		 && ((total += curr->output_offset - prev->output_offset)
12671 		     < (ppc64_elf_section_data (prev) != NULL
12672 			&& ppc64_elf_section_data (prev)->has_14bit_branch
12673 			? (group_size = stub_group_size >> 10) : group_size))
12674 		 && htab->sec_info[prev->id].toc_off == curr_toc)
12675 	    curr = prev;
12676 
12677 	  /* OK, the size from the start of CURR to the end is less
12678 	     than group_size and thus can be handled by one stub
12679 	     section.  (or the tail section is itself larger than
12680 	     group_size, in which case we may be toast.)  We should
12681 	     really be keeping track of the total size of stubs added
12682 	     here, as stubs contribute to the final output section
12683 	     size.  That's a little tricky, and this way will only
12684 	     break if stubs added make the total size more than 2^25,
12685 	     ie. for the default stub_group_size, if stubs total more
12686 	     than 2097152 bytes, or nearly 75000 plt call stubs.  */
12687 	  group = bfd_alloc (curr->owner, sizeof (*group));
12688 	  if (group == NULL)
12689 	    return FALSE;
12690 	  group->link_sec = curr;
12691 	  group->stub_sec = NULL;
12692 	  group->needs_save_res = 0;
12693 	  group->lr_restore = 0;
12694 	  group->eh_size = 0;
12695 	  group->eh_base = 0;
12696 	  group->next = htab->group;
12697 	  htab->group = group;
12698 	  do
12699 	    {
12700 	      prev = htab->sec_info[tail->id].u.list;
12701 	      /* Set up this stub group.  */
12702 	      htab->sec_info[tail->id].u.group = group;
12703 	    }
12704 	  while (tail != curr && (tail = prev) != NULL);
12705 
12706 	  /* But wait, there's more!  Input sections up to group_size
12707 	     bytes before the stub section can be handled by it too.
12708 	     Don't do this if we have a really large section after the
12709 	     stubs, as adding more stubs increases the chance that
12710 	     branches may not reach into the stub section.  */
12711 	  if (!stubs_always_before_branch && !big_sec)
12712 	    {
12713 	      total = 0;
12714 	      while (prev != NULL
12715 		     && ((total += tail->output_offset - prev->output_offset)
12716 			 < (ppc64_elf_section_data (prev) != NULL
12717 			    && ppc64_elf_section_data (prev)->has_14bit_branch
12718 			    ? (group_size = stub_group_size >> 10)
12719 			    : group_size))
12720 		     && htab->sec_info[prev->id].toc_off == curr_toc)
12721 		{
12722 		  tail = prev;
12723 		  prev = htab->sec_info[tail->id].u.list;
12724 		  htab->sec_info[tail->id].u.group = group;
12725 		}
12726 	    }
12727 	  tail = prev;
12728 	}
12729     }
12730   return TRUE;
12731 }
12732 
12733 static const unsigned char glink_eh_frame_cie[] =
12734 {
12735   0, 0, 0, 16,				/* length.  */
12736   0, 0, 0, 0,				/* id.  */
12737   1,					/* CIE version.  */
12738   'z', 'R', 0,				/* Augmentation string.  */
12739   4,					/* Code alignment.  */
12740   0x78,					/* Data alignment.  */
12741   65,					/* RA reg.  */
12742   1,					/* Augmentation size.  */
12743   DW_EH_PE_pcrel | DW_EH_PE_sdata4,	/* FDE encoding.  */
12744   DW_CFA_def_cfa, 1, 0			/* def_cfa: r1 offset 0.  */
12745 };
12746 
12747 /* Stripping output sections is normally done before dynamic section
12748    symbols have been allocated.  This function is called later, and
12749    handles cases like htab->brlt which is mapped to its own output
12750    section.  */
12751 
12752 static void
12753 maybe_strip_output (struct bfd_link_info *info, asection *isec)
12754 {
12755   if (isec->size == 0
12756       && isec->output_section->size == 0
12757       && !(isec->output_section->flags & SEC_KEEP)
12758       && !bfd_section_removed_from_list (info->output_bfd,
12759 					 isec->output_section)
12760       && elf_section_data (isec->output_section)->dynindx == 0)
12761     {
12762       isec->output_section->flags |= SEC_EXCLUDE;
12763       bfd_section_list_remove (info->output_bfd, isec->output_section);
12764       info->output_bfd->section_count--;
12765     }
12766 }
12767 
12768 /* Determine and set the size of the stub section for a final link.
12769 
12770    The basic idea here is to examine all the relocations looking for
12771    PC-relative calls to a target that is unreachable with a "bl"
12772    instruction.  */
12773 
12774 bfd_boolean
12775 ppc64_elf_size_stubs (struct bfd_link_info *info)
12776 {
12777   bfd_size_type stub_group_size;
12778   bfd_boolean stubs_always_before_branch;
12779   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12780 
12781   if (htab == NULL)
12782     return FALSE;
12783 
12784   if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
12785     htab->params->plt_thread_safe = 1;
12786   if (!htab->opd_abi)
12787     htab->params->plt_thread_safe = 0;
12788   else if (htab->params->plt_thread_safe == -1)
12789     {
12790       static const char *const thread_starter[] =
12791 	{
12792 	  "pthread_create",
12793 	  /* libstdc++ */
12794 	  "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
12795 	  /* librt */
12796 	  "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
12797 	  "mq_notify", "create_timer",
12798 	  /* libanl */
12799 	  "getaddrinfo_a",
12800 	  /* libgomp */
12801 	  "GOMP_parallel",
12802 	  "GOMP_parallel_start",
12803 	  "GOMP_parallel_loop_static",
12804 	  "GOMP_parallel_loop_static_start",
12805 	  "GOMP_parallel_loop_dynamic",
12806 	  "GOMP_parallel_loop_dynamic_start",
12807 	  "GOMP_parallel_loop_guided",
12808 	  "GOMP_parallel_loop_guided_start",
12809 	  "GOMP_parallel_loop_runtime",
12810 	  "GOMP_parallel_loop_runtime_start",
12811 	  "GOMP_parallel_sections",
12812 	  "GOMP_parallel_sections_start",
12813 	  /* libgo */
12814 	  "__go_go",
12815 	};
12816       unsigned i;
12817 
12818       for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
12819 	{
12820 	  struct elf_link_hash_entry *h;
12821 	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
12822 				    FALSE, FALSE, TRUE);
12823 	  htab->params->plt_thread_safe = h != NULL && h->ref_regular;
12824 	  if (htab->params->plt_thread_safe)
12825 	    break;
12826 	}
12827     }
12828   stubs_always_before_branch = htab->params->group_size < 0;
12829   if (htab->params->group_size < 0)
12830     stub_group_size = -htab->params->group_size;
12831   else
12832     stub_group_size = htab->params->group_size;
12833 
12834   if (!group_sections (info, stub_group_size, stubs_always_before_branch))
12835     return FALSE;
12836 
12837 #define STUB_SHRINK_ITER 20
12838   /* Loop until no stubs added.  After iteration 20 of this loop we may
12839      exit on a stub section shrinking.  This is to break out of a
12840      pathological case where adding stubs on one iteration decreases
12841      section gaps (perhaps due to alignment), which then requires
12842      fewer or smaller stubs on the next iteration.  */
12843 
12844   while (1)
12845     {
12846       bfd *input_bfd;
12847       unsigned int bfd_indx;
12848       struct map_stub *group;
12849 
12850       htab->stub_iteration += 1;
12851 
12852       for (input_bfd = info->input_bfds, bfd_indx = 0;
12853 	   input_bfd != NULL;
12854 	   input_bfd = input_bfd->link.next, bfd_indx++)
12855 	{
12856 	  Elf_Internal_Shdr *symtab_hdr;
12857 	  asection *section;
12858 	  Elf_Internal_Sym *local_syms = NULL;
12859 
12860 	  if (!is_ppc64_elf (input_bfd))
12861 	    continue;
12862 
12863 	  /* We'll need the symbol table in a second.  */
12864 	  symtab_hdr = &elf_symtab_hdr (input_bfd);
12865 	  if (symtab_hdr->sh_info == 0)
12866 	    continue;
12867 
12868 	  /* Walk over each section attached to the input bfd.  */
12869 	  for (section = input_bfd->sections;
12870 	       section != NULL;
12871 	       section = section->next)
12872 	    {
12873 	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
12874 
12875 	      /* If there aren't any relocs, then there's nothing more
12876 		 to do.  */
12877 	      if ((section->flags & SEC_RELOC) == 0
12878 		  || (section->flags & SEC_ALLOC) == 0
12879 		  || (section->flags & SEC_LOAD) == 0
12880 		  || (section->flags & SEC_CODE) == 0
12881 		  || section->reloc_count == 0)
12882 		continue;
12883 
12884 	      /* If this section is a link-once section that will be
12885 		 discarded, then don't create any stubs.  */
12886 	      if (section->output_section == NULL
12887 		  || section->output_section->owner != info->output_bfd)
12888 		continue;
12889 
12890 	      /* Get the relocs.  */
12891 	      internal_relocs
12892 		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
12893 					     info->keep_memory);
12894 	      if (internal_relocs == NULL)
12895 		goto error_ret_free_local;
12896 
12897 	      /* Now examine each relocation.  */
12898 	      irela = internal_relocs;
12899 	      irelaend = irela + section->reloc_count;
12900 	      for (; irela < irelaend; irela++)
12901 		{
12902 		  enum elf_ppc64_reloc_type r_type;
12903 		  unsigned int r_indx;
12904 		  enum ppc_stub_type stub_type;
12905 		  struct ppc_stub_hash_entry *stub_entry;
12906 		  asection *sym_sec, *code_sec;
12907 		  bfd_vma sym_value, code_value;
12908 		  bfd_vma destination;
12909 		  unsigned long local_off;
12910 		  bfd_boolean ok_dest;
12911 		  struct ppc_link_hash_entry *hash;
12912 		  struct ppc_link_hash_entry *fdh;
12913 		  struct elf_link_hash_entry *h;
12914 		  Elf_Internal_Sym *sym;
12915 		  char *stub_name;
12916 		  const asection *id_sec;
12917 		  struct _opd_sec_data *opd;
12918 		  struct plt_entry *plt_ent;
12919 
12920 		  r_type = ELF64_R_TYPE (irela->r_info);
12921 		  r_indx = ELF64_R_SYM (irela->r_info);
12922 
12923 		  if (r_type >= R_PPC64_max)
12924 		    {
12925 		      bfd_set_error (bfd_error_bad_value);
12926 		      goto error_ret_free_internal;
12927 		    }
12928 
12929 		  /* Only look for stubs on branch instructions.  */
12930 		  if (r_type != R_PPC64_REL24
12931 		      && r_type != R_PPC64_REL24_NOTOC
12932 		      && r_type != R_PPC64_REL14
12933 		      && r_type != R_PPC64_REL14_BRTAKEN
12934 		      && r_type != R_PPC64_REL14_BRNTAKEN)
12935 		    continue;
12936 
12937 		  /* Now determine the call target, its name, value,
12938 		     section.  */
12939 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
12940 				  r_indx, input_bfd))
12941 		    goto error_ret_free_internal;
12942 		  hash = (struct ppc_link_hash_entry *) h;
12943 
12944 		  ok_dest = FALSE;
12945 		  fdh = NULL;
12946 		  sym_value = 0;
12947 		  if (hash == NULL)
12948 		    {
12949 		      sym_value = sym->st_value;
12950 		      if (sym_sec != NULL
12951 			  && sym_sec->output_section != NULL)
12952 			ok_dest = TRUE;
12953 		    }
12954 		  else if (hash->elf.root.type == bfd_link_hash_defined
12955 			   || hash->elf.root.type == bfd_link_hash_defweak)
12956 		    {
12957 		      sym_value = hash->elf.root.u.def.value;
12958 		      if (sym_sec->output_section != NULL)
12959 			ok_dest = TRUE;
12960 		    }
12961 		  else if (hash->elf.root.type == bfd_link_hash_undefweak
12962 			   || hash->elf.root.type == bfd_link_hash_undefined)
12963 		    {
12964 		      /* Recognise an old ABI func code entry sym, and
12965 			 use the func descriptor sym instead if it is
12966 			 defined.  */
12967 		      if (hash->elf.root.root.string[0] == '.'
12968 			  && hash->oh != NULL)
12969 			{
12970 			  fdh = ppc_follow_link (hash->oh);
12971 			  if (fdh->elf.root.type == bfd_link_hash_defined
12972 			      || fdh->elf.root.type == bfd_link_hash_defweak)
12973 			    {
12974 			      sym_sec = fdh->elf.root.u.def.section;
12975 			      sym_value = fdh->elf.root.u.def.value;
12976 			      if (sym_sec->output_section != NULL)
12977 				ok_dest = TRUE;
12978 			    }
12979 			  else
12980 			    fdh = NULL;
12981 			}
12982 		    }
12983 		  else
12984 		    {
12985 		      bfd_set_error (bfd_error_bad_value);
12986 		      goto error_ret_free_internal;
12987 		    }
12988 
12989 		  destination = 0;
12990 		  local_off = 0;
12991 		  if (ok_dest)
12992 		    {
12993 		      sym_value += irela->r_addend;
12994 		      destination = (sym_value
12995 				     + sym_sec->output_offset
12996 				     + sym_sec->output_section->vma);
12997 		      local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
12998 							    ? hash->elf.other
12999 							    : sym->st_other);
13000 		    }
13001 
13002 		  code_sec = sym_sec;
13003 		  code_value = sym_value;
13004 		  opd = get_opd_info (sym_sec);
13005 		  if (opd != NULL)
13006 		    {
13007 		      bfd_vma dest;
13008 
13009 		      if (hash == NULL && opd->adjust != NULL)
13010 			{
13011 			  long adjust = opd->adjust[OPD_NDX (sym_value)];
13012 			  if (adjust == -1)
13013 			    continue;
13014 			  code_value += adjust;
13015 			  sym_value += adjust;
13016 			}
13017 		      dest = opd_entry_value (sym_sec, sym_value,
13018 					      &code_sec, &code_value, FALSE);
13019 		      if (dest != (bfd_vma) -1)
13020 			{
13021 			  destination = dest;
13022 			  if (fdh != NULL)
13023 			    {
13024 			      /* Fixup old ABI sym to point at code
13025 				 entry.  */
13026 			      hash->elf.root.type = bfd_link_hash_defweak;
13027 			      hash->elf.root.u.def.section = code_sec;
13028 			      hash->elf.root.u.def.value = code_value;
13029 			    }
13030 			}
13031 		    }
13032 
13033 		  /* Determine what (if any) linker stub is needed.  */
13034 		  plt_ent = NULL;
13035 		  stub_type = ppc_type_of_stub (section, irela, &hash,
13036 						&plt_ent, destination,
13037 						local_off);
13038 
13039 		  if (r_type == R_PPC64_REL24_NOTOC)
13040 		    {
13041 		      if (stub_type == ppc_stub_plt_call)
13042 			stub_type = ppc_stub_plt_call_notoc;
13043 		      else if (stub_type == ppc_stub_long_branch
13044 			       || (code_sec != NULL
13045 				   && code_sec->output_section != NULL
13046 				   && (((hash ? hash->elf.other : sym->st_other)
13047 					& STO_PPC64_LOCAL_MASK)
13048 				       > 1 << STO_PPC64_LOCAL_BIT)))
13049 			stub_type = ppc_stub_long_branch_notoc;
13050 		    }
13051 		  else if (stub_type != ppc_stub_plt_call)
13052 		    {
13053 		      /* Check whether we need a TOC adjusting stub.
13054 			 Since the linker pastes together pieces from
13055 			 different object files when creating the
13056 			 _init and _fini functions, it may be that a
13057 			 call to what looks like a local sym is in
13058 			 fact a call needing a TOC adjustment.  */
13059 		      if ((code_sec != NULL
13060 			   && code_sec->output_section != NULL
13061 			   && (htab->sec_info[code_sec->id].toc_off
13062 			       != htab->sec_info[section->id].toc_off)
13063 			   && (code_sec->has_toc_reloc
13064 			       || code_sec->makes_toc_func_call))
13065 			  || (((hash ? hash->elf.other : sym->st_other)
13066 			       & STO_PPC64_LOCAL_MASK)
13067 			      == 1 << STO_PPC64_LOCAL_BIT))
13068 			stub_type = ppc_stub_long_branch_r2off;
13069 		    }
13070 
13071 		  if (stub_type == ppc_stub_none)
13072 		    continue;
13073 
13074 		  /* __tls_get_addr calls might be eliminated.  */
13075 		  if (stub_type != ppc_stub_plt_call
13076 		      && stub_type != ppc_stub_plt_call_notoc
13077 		      && hash != NULL
13078 		      && (hash == htab->tls_get_addr
13079 			  || hash == htab->tls_get_addr_fd)
13080 		      && section->has_tls_reloc
13081 		      && irela != internal_relocs)
13082 		    {
13083 		      /* Get tls info.  */
13084 		      unsigned char *tls_mask;
13085 
13086 		      if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
13087 					 irela - 1, input_bfd))
13088 			goto error_ret_free_internal;
13089 		      if ((*tls_mask & TLS_TLS) != 0
13090 			  && (*tls_mask & (TLS_GD | TLS_LD)) == 0)
13091 			continue;
13092 		    }
13093 
13094 		  if (stub_type == ppc_stub_plt_call)
13095 		    {
13096 		      if (!htab->opd_abi
13097 			  && htab->params->plt_localentry0 != 0
13098 			  && is_elfv2_localentry0 (&hash->elf))
13099 			htab->has_plt_localentry0 = 1;
13100 		      else if (irela + 1 < irelaend
13101 			       && irela[1].r_offset == irela->r_offset + 4
13102 			       && (ELF64_R_TYPE (irela[1].r_info)
13103 				   == R_PPC64_TOCSAVE))
13104 			{
13105 			  if (!tocsave_find (htab, INSERT,
13106 					     &local_syms, irela + 1, input_bfd))
13107 			    goto error_ret_free_internal;
13108 			}
13109 		      else
13110 			stub_type = ppc_stub_plt_call_r2save;
13111 		    }
13112 
13113 		  /* Support for grouping stub sections.  */
13114 		  id_sec = htab->sec_info[section->id].u.group->link_sec;
13115 
13116 		  /* Get the name of this stub.  */
13117 		  stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
13118 		  if (!stub_name)
13119 		    goto error_ret_free_internal;
13120 
13121 		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
13122 						     stub_name, FALSE, FALSE);
13123 		  if (stub_entry != NULL)
13124 		    {
13125 		      enum ppc_stub_type old_type;
13126 		      /* A stub has already been created, but it may
13127 			 not be the required type.  We shouldn't be
13128 			 transitioning from plt_call to long_branch
13129 			 stubs or vice versa, but we might be
13130 			 upgrading from plt_call to plt_call_r2save or
13131 			 from long_branch to long_branch_r2off.  */
13132 		      free (stub_name);
13133 		      old_type = stub_entry->stub_type;
13134 		      switch (old_type)
13135 			{
13136 			default:
13137 			  abort ();
13138 
13139 			case ppc_stub_save_res:
13140 			  continue;
13141 
13142 			case ppc_stub_plt_call:
13143 			case ppc_stub_plt_call_r2save:
13144 			case ppc_stub_plt_call_notoc:
13145 			case ppc_stub_plt_call_both:
13146 			  if (stub_type == ppc_stub_plt_call)
13147 			    continue;
13148 			  else if (stub_type == ppc_stub_plt_call_r2save)
13149 			    {
13150 			      if (old_type == ppc_stub_plt_call_notoc)
13151 				stub_type = ppc_stub_plt_call_both;
13152 			    }
13153 			  else if (stub_type == ppc_stub_plt_call_notoc)
13154 			    {
13155 			      if (old_type == ppc_stub_plt_call_r2save)
13156 				stub_type = ppc_stub_plt_call_both;
13157 			    }
13158 			  else
13159 			    abort ();
13160 			  break;
13161 
13162 			case ppc_stub_plt_branch:
13163 			case ppc_stub_plt_branch_r2off:
13164 			case ppc_stub_plt_branch_notoc:
13165 			case ppc_stub_plt_branch_both:
13166 			  old_type += (ppc_stub_long_branch
13167 				       - ppc_stub_plt_branch);
13168 			  /* Fall through.  */
13169 			case ppc_stub_long_branch:
13170 			case ppc_stub_long_branch_r2off:
13171 			case ppc_stub_long_branch_notoc:
13172 			case ppc_stub_long_branch_both:
13173 			  if (stub_type == ppc_stub_long_branch)
13174 			    continue;
13175 			  else if (stub_type == ppc_stub_long_branch_r2off)
13176 			    {
13177 			      if (old_type == ppc_stub_long_branch_notoc)
13178 				stub_type = ppc_stub_long_branch_both;
13179 			    }
13180 			  else if (stub_type == ppc_stub_long_branch_notoc)
13181 			    {
13182 			      if (old_type == ppc_stub_long_branch_r2off)
13183 				stub_type = ppc_stub_long_branch_both;
13184 			    }
13185 			  else
13186 			    abort ();
13187 			  break;
13188 			}
13189 		      if (old_type < stub_type)
13190 			stub_entry->stub_type = stub_type;
13191 		      continue;
13192 		    }
13193 
13194 		  stub_entry = ppc_add_stub (stub_name, section, info);
13195 		  if (stub_entry == NULL)
13196 		    {
13197 		      free (stub_name);
13198 		    error_ret_free_internal:
13199 		      if (elf_section_data (section)->relocs == NULL)
13200 			free (internal_relocs);
13201 		    error_ret_free_local:
13202 		      if (local_syms != NULL
13203 			  && (symtab_hdr->contents
13204 			      != (unsigned char *) local_syms))
13205 			free (local_syms);
13206 		      return FALSE;
13207 		    }
13208 
13209 		  stub_entry->stub_type = stub_type;
13210 		  if (stub_type >= ppc_stub_plt_call
13211 		      && stub_type <= ppc_stub_plt_call_both)
13212 		    {
13213 		      stub_entry->target_value = sym_value;
13214 		      stub_entry->target_section = sym_sec;
13215 		    }
13216 		  else
13217 		    {
13218 		      stub_entry->target_value = code_value;
13219 		      stub_entry->target_section = code_sec;
13220 		    }
13221 		  stub_entry->h = hash;
13222 		  stub_entry->plt_ent = plt_ent;
13223 		  stub_entry->symtype
13224 		    = hash ? hash->elf.type : ELF_ST_TYPE (sym->st_info);
13225 		  stub_entry->other = hash ? hash->elf.other : sym->st_other;
13226 
13227 		  if (hash != NULL
13228 		      && (hash->elf.root.type == bfd_link_hash_defined
13229 			  || hash->elf.root.type == bfd_link_hash_defweak))
13230 		    htab->stub_globals += 1;
13231 		}
13232 
13233 	      /* We're done with the internal relocs, free them.  */
13234 	      if (elf_section_data (section)->relocs != internal_relocs)
13235 		free (internal_relocs);
13236 	    }
13237 
13238 	  if (local_syms != NULL
13239 	      && symtab_hdr->contents != (unsigned char *) local_syms)
13240 	    {
13241 	      if (!info->keep_memory)
13242 		free (local_syms);
13243 	      else
13244 		symtab_hdr->contents = (unsigned char *) local_syms;
13245 	    }
13246 	}
13247 
13248       /* We may have added some stubs.  Find out the new size of the
13249 	 stub sections.  */
13250       for (group = htab->group; group != NULL; group = group->next)
13251 	{
13252 	  group->lr_restore = 0;
13253 	  group->eh_size = 0;
13254 	  if (group->stub_sec != NULL)
13255 	    {
13256 	      asection *stub_sec = group->stub_sec;
13257 
13258 	      if (htab->stub_iteration <= STUB_SHRINK_ITER
13259 		  || stub_sec->rawsize < stub_sec->size)
13260 		/* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
13261 		stub_sec->rawsize = stub_sec->size;
13262 	      stub_sec->size = 0;
13263 	      stub_sec->reloc_count = 0;
13264 	      stub_sec->flags &= ~SEC_RELOC;
13265 	    }
13266 	}
13267 
13268       if (htab->stub_iteration <= STUB_SHRINK_ITER
13269 	  || htab->brlt->rawsize < htab->brlt->size)
13270 	htab->brlt->rawsize = htab->brlt->size;
13271       htab->brlt->size = 0;
13272       htab->brlt->reloc_count = 0;
13273       htab->brlt->flags &= ~SEC_RELOC;
13274       if (htab->relbrlt != NULL)
13275 	htab->relbrlt->size = 0;
13276 
13277       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
13278 
13279       for (group = htab->group; group != NULL; group = group->next)
13280 	if (group->needs_save_res)
13281 	  group->stub_sec->size += htab->sfpr->size;
13282 
13283       if (info->emitrelocations
13284 	  && htab->glink != NULL && htab->glink->size != 0)
13285 	{
13286 	  htab->glink->reloc_count = 1;
13287 	  htab->glink->flags |= SEC_RELOC;
13288 	}
13289 
13290       if (htab->glink_eh_frame != NULL
13291 	  && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
13292 	  && htab->glink_eh_frame->output_section->size > 8)
13293 	{
13294 	  size_t size = 0, align = 4;
13295 
13296 	  for (group = htab->group; group != NULL; group = group->next)
13297 	    if (group->eh_size != 0)
13298 	      size += (group->eh_size + 17 + align - 1) & -align;
13299 	  if (htab->glink != NULL && htab->glink->size != 0)
13300 	    size += (24 + align - 1) & -align;
13301 	  if (size != 0)
13302 	    size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13303 	  align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13304 	  size = (size + align - 1) & -align;
13305 	  htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
13306 	  htab->glink_eh_frame->size = size;
13307 	}
13308 
13309       if (htab->params->plt_stub_align != 0)
13310 	for (group = htab->group; group != NULL; group = group->next)
13311 	  if (group->stub_sec != NULL)
13312 	    {
13313 	      int align = abs (htab->params->plt_stub_align);
13314 	      group->stub_sec->size
13315 		= (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
13316 	    }
13317 
13318       for (group = htab->group; group != NULL; group = group->next)
13319 	if (group->stub_sec != NULL
13320 	    && group->stub_sec->rawsize != group->stub_sec->size
13321 	    && (htab->stub_iteration <= STUB_SHRINK_ITER
13322 		|| group->stub_sec->rawsize < group->stub_sec->size))
13323 	  break;
13324 
13325       if (group == NULL
13326 	  && (htab->brlt->rawsize == htab->brlt->size
13327 	      || (htab->stub_iteration > STUB_SHRINK_ITER
13328 		  && htab->brlt->rawsize > htab->brlt->size))
13329 	  && (htab->glink_eh_frame == NULL
13330 	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
13331 	break;
13332 
13333       /* Ask the linker to do its stuff.  */
13334       (*htab->params->layout_sections_again) ();
13335     }
13336 
13337   if (htab->glink_eh_frame != NULL
13338       && htab->glink_eh_frame->size != 0)
13339     {
13340       bfd_vma val;
13341       bfd_byte *p, *last_fde;
13342       size_t last_fde_len, size, align, pad;
13343       struct map_stub *group;
13344 
13345       /* It is necessary to at least have a rough outline of the
13346 	 linker generated CIEs and FDEs written before
13347 	 bfd_elf_discard_info is run, in order for these FDEs to be
13348 	 indexed in .eh_frame_hdr.  */
13349       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
13350       if (p == NULL)
13351 	return FALSE;
13352       htab->glink_eh_frame->contents = p;
13353       last_fde = p;
13354       align = 4;
13355 
13356       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
13357       /* CIE length (rewrite in case little-endian).  */
13358       last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
13359       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13360       p += last_fde_len + 4;
13361 
13362       for (group = htab->group; group != NULL; group = group->next)
13363 	if (group->eh_size != 0)
13364 	  {
13365 	    group->eh_base = p - htab->glink_eh_frame->contents;
13366 	    last_fde = p;
13367 	    last_fde_len = ((group->eh_size + 17 + align - 1) & -align) - 4;
13368 	    /* FDE length.  */
13369 	    bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13370 	    p += 4;
13371 	    /* CIE pointer.  */
13372 	    val = p - htab->glink_eh_frame->contents;
13373 	    bfd_put_32 (htab->elf.dynobj, val, p);
13374 	    p += 4;
13375 	    /* Offset to stub section, written later.  */
13376 	    p += 4;
13377 	    /* stub section size.  */
13378 	    bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
13379 	    p += 4;
13380 	    /* Augmentation.  */
13381 	    p += 1;
13382 	    /* Make sure we don't have all nops.  This is enough for
13383 	       elf-eh-frame.c to detect the last non-nop opcode.  */
13384 	    p[group->eh_size - 1] = DW_CFA_advance_loc + 1;
13385 	    p = last_fde + last_fde_len + 4;
13386 	  }
13387       if (htab->glink != NULL && htab->glink->size != 0)
13388 	{
13389 	  last_fde = p;
13390 	  last_fde_len = ((24 + align - 1) & -align) - 4;
13391 	  /* FDE length.  */
13392 	  bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13393 	  p += 4;
13394 	  /* CIE pointer.  */
13395 	  val = p - htab->glink_eh_frame->contents;
13396 	  bfd_put_32 (htab->elf.dynobj, val, p);
13397 	  p += 4;
13398 	  /* Offset to .glink, written later.  */
13399 	  p += 4;
13400 	  /* .glink size.  */
13401 	  bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
13402 	  p += 4;
13403 	  /* Augmentation.  */
13404 	  p += 1;
13405 
13406 	  *p++ = DW_CFA_advance_loc + 1;
13407 	  *p++ = DW_CFA_register;
13408 	  *p++ = 65;
13409 	  *p++ = htab->opd_abi ? 12 : 0;
13410 	  *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
13411 	  *p++ = DW_CFA_restore_extended;
13412 	  *p++ = 65;
13413 	  p += ((24 + align - 1) & -align) - 24;
13414 	}
13415       /* Subsume any padding into the last FDE if user .eh_frame
13416 	 sections are aligned more than glink_eh_frame.  Otherwise any
13417 	 zero padding will be seen as a terminator.  */
13418       align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13419       size = p - htab->glink_eh_frame->contents;
13420       pad = ((size + align - 1) & -align) - size;
13421       htab->glink_eh_frame->size = size + pad;
13422       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
13423     }
13424 
13425   maybe_strip_output (info, htab->brlt);
13426   if (htab->glink_eh_frame != NULL)
13427     maybe_strip_output (info, htab->glink_eh_frame);
13428 
13429   return TRUE;
13430 }
13431 
13432 /* Called after we have determined section placement.  If sections
13433    move, we'll be called again.  Provide a value for TOCstart.  */
13434 
13435 bfd_vma
13436 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
13437 {
13438   asection *s;
13439   bfd_vma TOCstart, adjust;
13440 
13441   if (info != NULL)
13442     {
13443       struct elf_link_hash_entry *h;
13444       struct elf_link_hash_table *htab = elf_hash_table (info);
13445 
13446       if (is_elf_hash_table (htab)
13447 	  && htab->hgot != NULL)
13448 	h = htab->hgot;
13449       else
13450 	{
13451 	  h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
13452 	  if (is_elf_hash_table (htab))
13453 	    htab->hgot = h;
13454 	}
13455       if (h != NULL
13456 	  && h->root.type == bfd_link_hash_defined
13457 	  && !h->root.linker_def
13458 	  && (!is_elf_hash_table (htab)
13459 	      || h->def_regular))
13460 	{
13461 	  TOCstart = (h->root.u.def.value - TOC_BASE_OFF
13462 		      + h->root.u.def.section->output_offset
13463 		      + h->root.u.def.section->output_section->vma);
13464 	  _bfd_set_gp_value (obfd, TOCstart);
13465 	  return TOCstart;
13466 	}
13467     }
13468 
13469   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
13470      order.  The TOC starts where the first of these sections starts.  */
13471   s = bfd_get_section_by_name (obfd, ".got");
13472   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13473     s = bfd_get_section_by_name (obfd, ".toc");
13474   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13475     s = bfd_get_section_by_name (obfd, ".tocbss");
13476   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13477     s = bfd_get_section_by_name (obfd, ".plt");
13478   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13479     {
13480       /* This may happen for
13481 	 o  references to TOC base (SYM@toc / TOC[tc0]) without a
13482 	 .toc directive
13483 	 o  bad linker script
13484 	 o --gc-sections and empty TOC sections
13485 
13486 	 FIXME: Warn user?  */
13487 
13488       /* Look for a likely section.  We probably won't even be
13489 	 using TOCstart.  */
13490       for (s = obfd->sections; s != NULL; s = s->next)
13491 	if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
13492 			 | SEC_EXCLUDE))
13493 	    == (SEC_ALLOC | SEC_SMALL_DATA))
13494 	  break;
13495       if (s == NULL)
13496 	for (s = obfd->sections; s != NULL; s = s->next)
13497 	  if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
13498 	      == (SEC_ALLOC | SEC_SMALL_DATA))
13499 	    break;
13500       if (s == NULL)
13501 	for (s = obfd->sections; s != NULL; s = s->next)
13502 	  if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
13503 	      == SEC_ALLOC)
13504 	    break;
13505       if (s == NULL)
13506 	for (s = obfd->sections; s != NULL; s = s->next)
13507 	  if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
13508 	    break;
13509     }
13510 
13511   TOCstart = 0;
13512   if (s != NULL)
13513     TOCstart = s->output_section->vma + s->output_offset;
13514 
13515   /* Force alignment.  */
13516   adjust = TOCstart & (TOC_BASE_ALIGN - 1);
13517   TOCstart -= adjust;
13518   _bfd_set_gp_value (obfd, TOCstart);
13519 
13520   if (info != NULL && s != NULL)
13521     {
13522       struct ppc_link_hash_table *htab = ppc_hash_table (info);
13523 
13524       if (htab != NULL)
13525 	{
13526 	  if (htab->elf.hgot != NULL)
13527 	    {
13528 	      htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
13529 	      htab->elf.hgot->root.u.def.section = s;
13530 	    }
13531 	}
13532       else
13533 	{
13534 	  struct bfd_link_hash_entry *bh = NULL;
13535 	  _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
13536 					    s, TOC_BASE_OFF - adjust,
13537 					    NULL, FALSE, FALSE, &bh);
13538 	}
13539     }
13540   return TOCstart;
13541 }
13542 
13543 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
13544    write out any global entry stubs, and PLT relocations.  */
13545 
13546 static bfd_boolean
13547 build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
13548 {
13549   struct bfd_link_info *info;
13550   struct ppc_link_hash_table *htab;
13551   struct plt_entry *ent;
13552   asection *s;
13553 
13554   if (h->root.type == bfd_link_hash_indirect)
13555     return TRUE;
13556 
13557   info = inf;
13558   htab = ppc_hash_table (info);
13559   if (htab == NULL)
13560     return FALSE;
13561 
13562   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13563     if (ent->plt.offset != (bfd_vma) -1)
13564       {
13565 	/* This symbol has an entry in the procedure linkage
13566 	   table.  Set it up.  */
13567 	Elf_Internal_Rela rela;
13568 	asection *plt, *relplt;
13569 	bfd_byte *loc;
13570 
13571 	if (!htab->elf.dynamic_sections_created
13572 	    || h->dynindx == -1)
13573 	  {
13574 	    if (!(h->def_regular
13575 		  && (h->root.type == bfd_link_hash_defined
13576 		      || h->root.type == bfd_link_hash_defweak)))
13577 	      continue;
13578 	    if (h->type == STT_GNU_IFUNC)
13579 	      {
13580 		plt = htab->elf.iplt;
13581 		relplt = htab->elf.irelplt;
13582 		htab->local_ifunc_resolver = 1;
13583 		if (htab->opd_abi)
13584 		  rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13585 		else
13586 		  rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13587 	      }
13588 	    else
13589 	      {
13590 		plt = htab->pltlocal;
13591 		if (bfd_link_pic (info))
13592 		  {
13593 		    relplt = htab->relpltlocal;
13594 		    if (htab->opd_abi)
13595 		      rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13596 		    else
13597 		      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13598 		  }
13599 		else
13600 		  relplt = NULL;
13601 	      }
13602 	    rela.r_addend = (h->root.u.def.value
13603 			     + h->root.u.def.section->output_offset
13604 			     + h->root.u.def.section->output_section->vma
13605 			     + ent->addend);
13606 
13607 	    if (relplt == NULL)
13608 	      {
13609 		loc = plt->contents + ent->plt.offset;
13610 		bfd_put_64 (info->output_bfd, rela.r_addend, loc);
13611 		if (htab->opd_abi)
13612 		  {
13613 		    bfd_vma toc = elf_gp (info->output_bfd);
13614 		    toc += htab->sec_info[h->root.u.def.section->id].toc_off;
13615 		    bfd_put_64 (info->output_bfd, toc, loc + 8);
13616 		  }
13617 	      }
13618 	    else
13619 	      {
13620 		rela.r_offset = (plt->output_section->vma
13621 				 + plt->output_offset
13622 				 + ent->plt.offset);
13623 		loc = relplt->contents + (relplt->reloc_count++
13624 					  * sizeof (Elf64_External_Rela));
13625 		bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13626 	      }
13627 	  }
13628 	else
13629 	  {
13630 	    rela.r_offset = (htab->elf.splt->output_section->vma
13631 			     + htab->elf.splt->output_offset
13632 			     + ent->plt.offset);
13633 	    rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
13634 	    rela.r_addend = ent->addend;
13635 	    loc = (htab->elf.srelplt->contents
13636 		   + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
13637 		      / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
13638 	    if (h->type == STT_GNU_IFUNC && is_static_defined (h))
13639 	      htab->maybe_local_ifunc_resolver = 1;
13640 	    bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13641 	  }
13642       }
13643 
13644   if (!h->pointer_equality_needed)
13645     return TRUE;
13646 
13647   if (h->def_regular)
13648     return TRUE;
13649 
13650   s = htab->global_entry;
13651   if (s == NULL || s->size == 0)
13652     return TRUE;
13653 
13654   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13655     if (ent->plt.offset != (bfd_vma) -1
13656 	&& ent->addend == 0)
13657       {
13658 	bfd_byte *p;
13659 	asection *plt;
13660 	bfd_vma off;
13661 
13662 	p = s->contents + h->root.u.def.value;
13663 	plt = htab->elf.splt;
13664 	if (!htab->elf.dynamic_sections_created
13665 	    || h->dynindx == -1)
13666 	  {
13667 	    if (h->type == STT_GNU_IFUNC)
13668 	      plt = htab->elf.iplt;
13669 	    else
13670 	      plt = htab->pltlocal;
13671 	  }
13672 	off = ent->plt.offset + plt->output_offset + plt->output_section->vma;
13673 	off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
13674 
13675 	if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
13676 	  {
13677 	    info->callbacks->einfo
13678 	      (_("%P: linkage table error against `%pT'\n"),
13679 	       h->root.root.string);
13680 	    bfd_set_error (bfd_error_bad_value);
13681 	    htab->stub_error = TRUE;
13682 	  }
13683 
13684 	htab->stub_count[ppc_stub_global_entry - 1] += 1;
13685 	if (htab->params->emit_stub_syms)
13686 	  {
13687 	    size_t len = strlen (h->root.root.string);
13688 	    char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
13689 
13690 	    if (name == NULL)
13691 	      return FALSE;
13692 
13693 	    sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
13694 	    h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
13695 	    if (h == NULL)
13696 	      return FALSE;
13697 	    if (h->root.type == bfd_link_hash_new)
13698 	      {
13699 		h->root.type = bfd_link_hash_defined;
13700 		h->root.u.def.section = s;
13701 		h->root.u.def.value = p - s->contents;
13702 		h->ref_regular = 1;
13703 		h->def_regular = 1;
13704 		h->ref_regular_nonweak = 1;
13705 		h->forced_local = 1;
13706 		h->non_elf = 0;
13707 		h->root.linker_def = 1;
13708 	      }
13709 	  }
13710 
13711 	if (PPC_HA (off) != 0)
13712 	  {
13713 	    bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
13714 	    p += 4;
13715 	  }
13716 	bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
13717 	p += 4;
13718 	bfd_put_32 (s->owner, MTCTR_R12, p);
13719 	p += 4;
13720 	bfd_put_32 (s->owner, BCTR, p);
13721 	break;
13722       }
13723   return TRUE;
13724 }
13725 
13726 /* Write PLT relocs for locals.  */
13727 
13728 static bfd_boolean
13729 write_plt_relocs_for_local_syms (struct bfd_link_info *info)
13730 {
13731   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13732   bfd *ibfd;
13733 
13734   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13735     {
13736       struct got_entry **lgot_ents, **end_lgot_ents;
13737       struct plt_entry **local_plt, **lplt, **end_local_plt;
13738       Elf_Internal_Shdr *symtab_hdr;
13739       bfd_size_type locsymcount;
13740       Elf_Internal_Sym *local_syms = NULL;
13741       struct plt_entry *ent;
13742 
13743       if (!is_ppc64_elf (ibfd))
13744 	continue;
13745 
13746       lgot_ents = elf_local_got_ents (ibfd);
13747       if (!lgot_ents)
13748 	continue;
13749 
13750       symtab_hdr = &elf_symtab_hdr (ibfd);
13751       locsymcount = symtab_hdr->sh_info;
13752       end_lgot_ents = lgot_ents + locsymcount;
13753       local_plt = (struct plt_entry **) end_lgot_ents;
13754       end_local_plt = local_plt + locsymcount;
13755       for (lplt = local_plt; lplt < end_local_plt; ++lplt)
13756 	for (ent = *lplt; ent != NULL; ent = ent->next)
13757 	  if (ent->plt.offset != (bfd_vma) -1)
13758 	    {
13759 	      Elf_Internal_Sym *sym;
13760 	      asection *sym_sec;
13761 	      asection *plt, *relplt;
13762 	      bfd_byte *loc;
13763 	      bfd_vma val;
13764 
13765 	      if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
13766 			      lplt - local_plt, ibfd))
13767 		{
13768 		  if (local_syms != NULL
13769 		      && symtab_hdr->contents != (unsigned char *) local_syms)
13770 		    free (local_syms);
13771 		  return FALSE;
13772 		}
13773 
13774 	      val = sym->st_value + ent->addend;
13775 	      if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
13776 		val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
13777 	      if (sym_sec != NULL && sym_sec->output_section != NULL)
13778 		val += sym_sec->output_offset + sym_sec->output_section->vma;
13779 
13780 	      if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13781 		{
13782 		  htab->local_ifunc_resolver = 1;
13783 		  plt = htab->elf.iplt;
13784 		  relplt = htab->elf.irelplt;
13785 		}
13786 	      else
13787 		{
13788 		  plt = htab->pltlocal;
13789 		  relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
13790 		}
13791 
13792 	      if (relplt == NULL)
13793 		{
13794 		  loc = plt->contents + ent->plt.offset;
13795 		  bfd_put_64 (info->output_bfd, val, loc);
13796 		  if (htab->opd_abi)
13797 		    {
13798 		      bfd_vma toc = elf_gp (ibfd);
13799 		      bfd_put_64 (info->output_bfd, toc, loc + 8);
13800 		    }
13801 		}
13802 	      else
13803 		{
13804 		  Elf_Internal_Rela rela;
13805 		  rela.r_offset = (ent->plt.offset
13806 				   + plt->output_offset
13807 				   + plt->output_section->vma);
13808 		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13809 		    {
13810 		      if (htab->opd_abi)
13811 			rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13812 		      else
13813 			rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13814 		    }
13815 		  else
13816 		    {
13817 		      if (htab->opd_abi)
13818 			rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13819 		      else
13820 			rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13821 		    }
13822 		  rela.r_addend = val;
13823 		  loc = relplt->contents + (relplt->reloc_count++
13824 					    * sizeof (Elf64_External_Rela));
13825 		  bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13826 		}
13827 	    }
13828 
13829       if (local_syms != NULL
13830 	  && symtab_hdr->contents != (unsigned char *) local_syms)
13831 	{
13832 	  if (!info->keep_memory)
13833 	    free (local_syms);
13834 	  else
13835 	    symtab_hdr->contents = (unsigned char *) local_syms;
13836 	}
13837     }
13838   return TRUE;
13839 }
13840 
13841 /* Build all the stubs associated with the current output file.
13842    The stubs are kept in a hash table attached to the main linker
13843    hash table.  This function is called via gldelf64ppc_finish.  */
13844 
13845 bfd_boolean
13846 ppc64_elf_build_stubs (struct bfd_link_info *info,
13847 		       char **stats)
13848 {
13849   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13850   struct map_stub *group;
13851   asection *stub_sec;
13852   bfd_byte *p;
13853   int stub_sec_count = 0;
13854 
13855   if (htab == NULL)
13856     return FALSE;
13857 
13858   /* Allocate memory to hold the linker stubs.  */
13859   for (group = htab->group; group != NULL; group = group->next)
13860     {
13861       group->eh_size = 0;
13862       group->lr_restore = 0;
13863       if ((stub_sec = group->stub_sec) != NULL
13864 	  && stub_sec->size != 0)
13865 	{
13866 	  stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
13867 					   stub_sec->size);
13868 	  if (stub_sec->contents == NULL)
13869 	    return FALSE;
13870 	  stub_sec->size = 0;
13871 	}
13872     }
13873 
13874   if (htab->glink != NULL && htab->glink->size != 0)
13875     {
13876       unsigned int indx;
13877       bfd_vma plt0;
13878 
13879       /* Build the .glink plt call stub.  */
13880       if (htab->params->emit_stub_syms)
13881 	{
13882 	  struct elf_link_hash_entry *h;
13883 	  h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
13884 				    TRUE, FALSE, FALSE);
13885 	  if (h == NULL)
13886 	    return FALSE;
13887 	  if (h->root.type == bfd_link_hash_new)
13888 	    {
13889 	      h->root.type = bfd_link_hash_defined;
13890 	      h->root.u.def.section = htab->glink;
13891 	      h->root.u.def.value = 8;
13892 	      h->ref_regular = 1;
13893 	      h->def_regular = 1;
13894 	      h->ref_regular_nonweak = 1;
13895 	      h->forced_local = 1;
13896 	      h->non_elf = 0;
13897 	      h->root.linker_def = 1;
13898 	    }
13899 	}
13900       plt0 = (htab->elf.splt->output_section->vma
13901 	      + htab->elf.splt->output_offset
13902 	      - 16);
13903       if (info->emitrelocations)
13904 	{
13905 	  Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
13906 	  if (r == NULL)
13907 	    return FALSE;
13908 	  r->r_offset = (htab->glink->output_offset
13909 			 + htab->glink->output_section->vma);
13910 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
13911 	  r->r_addend = plt0;
13912 	}
13913       p = htab->glink->contents;
13914       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
13915       bfd_put_64 (htab->glink->owner, plt0, p);
13916       p += 8;
13917       if (htab->opd_abi)
13918 	{
13919 	  bfd_put_32 (htab->glink->owner, MFLR_R12, p);
13920 	  p += 4;
13921 	  bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13922 	  p += 4;
13923 	  bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13924 	  p += 4;
13925 	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13926 	  p += 4;
13927 	  bfd_put_32 (htab->glink->owner, MTLR_R12, p);
13928 	  p += 4;
13929 	  bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13930 	  p += 4;
13931 	  bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13932 	  p += 4;
13933 	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
13934 	  p += 4;
13935 	  bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13936 	  p += 4;
13937 	  bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
13938 	  p += 4;
13939 	}
13940       else
13941 	{
13942 	  bfd_put_32 (htab->glink->owner, MFLR_R0, p);
13943 	  p += 4;
13944 	  bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13945 	  p += 4;
13946 	  bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13947 	  p += 4;
13948 	  bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
13949 	  p += 4;
13950 	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13951 	  p += 4;
13952 	  bfd_put_32 (htab->glink->owner, MTLR_R0, p);
13953 	  p += 4;
13954 	  bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
13955 	  p += 4;
13956 	  bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13957 	  p += 4;
13958 	  bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
13959 	  p += 4;
13960 	  bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13961 	  p += 4;
13962 	  bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
13963 	  p += 4;
13964 	  bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13965 	  p += 4;
13966 	  bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
13967 	  p += 4;
13968 	}
13969       bfd_put_32 (htab->glink->owner, BCTR, p);
13970       p += 4;
13971       BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
13972 
13973       /* Build the .glink lazy link call stubs.  */
13974       indx = 0;
13975       while (p < htab->glink->contents + htab->glink->size)
13976 	{
13977 	  if (htab->opd_abi)
13978 	    {
13979 	      if (indx < 0x8000)
13980 		{
13981 		  bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
13982 		  p += 4;
13983 		}
13984 	      else
13985 		{
13986 		  bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
13987 		  p += 4;
13988 		  bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
13989 			      p);
13990 		  p += 4;
13991 		}
13992 	    }
13993 	  bfd_put_32 (htab->glink->owner,
13994 		      B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
13995 	  indx++;
13996 	  p += 4;
13997 	}
13998     }
13999 
14000   /* Build .glink global entry stubs, and PLT relocs for globals.  */
14001   elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
14002 
14003   if (!write_plt_relocs_for_local_syms (info))
14004     return FALSE;
14005 
14006   if (htab->brlt != NULL && htab->brlt->size != 0)
14007     {
14008       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
14009 					 htab->brlt->size);
14010       if (htab->brlt->contents == NULL)
14011 	return FALSE;
14012     }
14013   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
14014     {
14015       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
14016 					    htab->relbrlt->size);
14017       if (htab->relbrlt->contents == NULL)
14018 	return FALSE;
14019     }
14020 
14021   /* Build the stubs as directed by the stub hash table.  */
14022   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
14023 
14024   for (group = htab->group; group != NULL; group = group->next)
14025     if (group->needs_save_res)
14026       group->stub_sec->size += htab->sfpr->size;
14027 
14028   if (htab->relbrlt != NULL)
14029     htab->relbrlt->reloc_count = 0;
14030 
14031   if (htab->params->plt_stub_align != 0)
14032     for (group = htab->group; group != NULL; group = group->next)
14033       if ((stub_sec = group->stub_sec) != NULL)
14034 	{
14035 	  int align = abs (htab->params->plt_stub_align);
14036 	  stub_sec->size = (stub_sec->size + (1 << align) - 1) & -(1 << align);
14037 	}
14038 
14039   for (group = htab->group; group != NULL; group = group->next)
14040     if (group->needs_save_res)
14041       {
14042 	stub_sec = group->stub_sec;
14043 	memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
14044 		htab->sfpr->contents, htab->sfpr->size);
14045 	if (htab->params->emit_stub_syms)
14046 	  {
14047 	    unsigned int i;
14048 
14049 	    for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
14050 	      if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
14051 		return FALSE;
14052 	  }
14053       }
14054 
14055   if (htab->glink_eh_frame != NULL
14056       && htab->glink_eh_frame->size != 0)
14057     {
14058       bfd_vma val;
14059       size_t align = 4;
14060 
14061       p = htab->glink_eh_frame->contents;
14062       p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14063 
14064       for (group = htab->group; group != NULL; group = group->next)
14065 	if (group->eh_size != 0)
14066 	  {
14067 	    /* Offset to stub section.  */
14068 	    val = (group->stub_sec->output_section->vma
14069 		   + group->stub_sec->output_offset);
14070 	    val -= (htab->glink_eh_frame->output_section->vma
14071 		    + htab->glink_eh_frame->output_offset
14072 		    + (p + 8 - htab->glink_eh_frame->contents));
14073 	    if (val + 0x80000000 > 0xffffffff)
14074 	      {
14075 		_bfd_error_handler
14076 		  (_("%s offset too large for .eh_frame sdata4 encoding"),
14077 		   group->stub_sec->name);
14078 		return FALSE;
14079 	      }
14080 	    bfd_put_32 (htab->elf.dynobj, val, p + 8);
14081 	    p += (group->eh_size + 17 + 3) & -4;
14082 	  }
14083       if (htab->glink != NULL && htab->glink->size != 0)
14084 	{
14085 	  /* Offset to .glink.  */
14086 	  val = (htab->glink->output_section->vma
14087 		 + htab->glink->output_offset
14088 		 + 8);
14089 	  val -= (htab->glink_eh_frame->output_section->vma
14090 		  + htab->glink_eh_frame->output_offset
14091 		  + (p + 8 - htab->glink_eh_frame->contents));
14092 	  if (val + 0x80000000 > 0xffffffff)
14093 	    {
14094 	      _bfd_error_handler
14095 		(_("%s offset too large for .eh_frame sdata4 encoding"),
14096 		 htab->glink->name);
14097 	      return FALSE;
14098 	    }
14099 	  bfd_put_32 (htab->elf.dynobj, val, p + 8);
14100 	  p += (24 + align - 1) & -align;
14101 	}
14102     }
14103 
14104   for (group = htab->group; group != NULL; group = group->next)
14105     if ((stub_sec = group->stub_sec) != NULL)
14106       {
14107 	stub_sec_count += 1;
14108 	if (stub_sec->rawsize != stub_sec->size
14109 	    && (htab->stub_iteration <= STUB_SHRINK_ITER
14110 		|| stub_sec->rawsize < stub_sec->size))
14111 	  break;
14112       }
14113 
14114   if (group != NULL)
14115     {
14116       htab->stub_error = TRUE;
14117       _bfd_error_handler (_("stubs don't match calculated size"));
14118     }
14119 
14120   if (htab->stub_error)
14121     return FALSE;
14122 
14123   if (stats != NULL)
14124     {
14125       size_t len;
14126       *stats = bfd_malloc (500);
14127       if (*stats == NULL)
14128 	return FALSE;
14129 
14130       len = sprintf (*stats,
14131 		     ngettext ("linker stubs in %u group\n",
14132 			       "linker stubs in %u groups\n",
14133 			       stub_sec_count),
14134 		     stub_sec_count);
14135       sprintf (*stats + len, _("  branch         %lu\n"
14136 			       "  branch toc adj %lu\n"
14137 			       "  branch notoc   %lu\n"
14138 			       "  branch both    %lu\n"
14139 			       "  long branch    %lu\n"
14140 			       "  long toc adj   %lu\n"
14141 			       "  long notoc     %lu\n"
14142 			       "  long both      %lu\n"
14143 			       "  plt call       %lu\n"
14144 			       "  plt call save  %lu\n"
14145 			       "  plt call notoc %lu\n"
14146 			       "  plt call both  %lu\n"
14147 			       "  global entry   %lu"),
14148 	       htab->stub_count[ppc_stub_long_branch - 1],
14149 	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
14150 	       htab->stub_count[ppc_stub_long_branch_notoc - 1],
14151 	       htab->stub_count[ppc_stub_long_branch_both - 1],
14152 	       htab->stub_count[ppc_stub_plt_branch - 1],
14153 	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
14154 	       htab->stub_count[ppc_stub_plt_branch_notoc - 1],
14155 	       htab->stub_count[ppc_stub_plt_branch_both - 1],
14156 	       htab->stub_count[ppc_stub_plt_call - 1],
14157 	       htab->stub_count[ppc_stub_plt_call_r2save - 1],
14158 	       htab->stub_count[ppc_stub_plt_call_notoc - 1],
14159 	       htab->stub_count[ppc_stub_plt_call_both - 1],
14160 	       htab->stub_count[ppc_stub_global_entry - 1]);
14161     }
14162   return TRUE;
14163 }
14164 
14165 /* What to do when ld finds relocations against symbols defined in
14166    discarded sections.  */
14167 
14168 static unsigned int
14169 ppc64_elf_action_discarded (asection *sec)
14170 {
14171   if (strcmp (".opd", sec->name) == 0)
14172     return 0;
14173 
14174   if (strcmp (".toc", sec->name) == 0)
14175     return 0;
14176 
14177   if (strcmp (".toc1", sec->name) == 0)
14178     return 0;
14179 
14180   return _bfd_elf_default_action_discarded (sec);
14181 }
14182 
14183 /* These are the dynamic relocations supported by glibc.  */
14184 
14185 static bfd_boolean
14186 ppc64_glibc_dynamic_reloc (enum elf_ppc64_reloc_type r_type)
14187 {
14188   switch (r_type)
14189     {
14190     case R_PPC64_RELATIVE:
14191     case R_PPC64_NONE:
14192     case R_PPC64_ADDR64:
14193     case R_PPC64_GLOB_DAT:
14194     case R_PPC64_IRELATIVE:
14195     case R_PPC64_JMP_IREL:
14196     case R_PPC64_JMP_SLOT:
14197     case R_PPC64_DTPMOD64:
14198     case R_PPC64_DTPREL64:
14199     case R_PPC64_TPREL64:
14200     case R_PPC64_TPREL16_LO_DS:
14201     case R_PPC64_TPREL16_DS:
14202     case R_PPC64_TPREL16:
14203     case R_PPC64_TPREL16_LO:
14204     case R_PPC64_TPREL16_HI:
14205     case R_PPC64_TPREL16_HIGH:
14206     case R_PPC64_TPREL16_HA:
14207     case R_PPC64_TPREL16_HIGHA:
14208     case R_PPC64_TPREL16_HIGHER:
14209     case R_PPC64_TPREL16_HIGHEST:
14210     case R_PPC64_TPREL16_HIGHERA:
14211     case R_PPC64_TPREL16_HIGHESTA:
14212     case R_PPC64_ADDR16_LO_DS:
14213     case R_PPC64_ADDR16_LO:
14214     case R_PPC64_ADDR16_HI:
14215     case R_PPC64_ADDR16_HIGH:
14216     case R_PPC64_ADDR16_HA:
14217     case R_PPC64_ADDR16_HIGHA:
14218     case R_PPC64_REL30:
14219     case R_PPC64_COPY:
14220     case R_PPC64_UADDR64:
14221     case R_PPC64_UADDR32:
14222     case R_PPC64_ADDR32:
14223     case R_PPC64_ADDR24:
14224     case R_PPC64_ADDR16:
14225     case R_PPC64_UADDR16:
14226     case R_PPC64_ADDR16_DS:
14227     case R_PPC64_ADDR16_HIGHER:
14228     case R_PPC64_ADDR16_HIGHEST:
14229     case R_PPC64_ADDR16_HIGHERA:
14230     case R_PPC64_ADDR16_HIGHESTA:
14231     case R_PPC64_ADDR14:
14232     case R_PPC64_ADDR14_BRTAKEN:
14233     case R_PPC64_ADDR14_BRNTAKEN:
14234     case R_PPC64_REL32:
14235     case R_PPC64_REL64:
14236       return TRUE;
14237 
14238     default:
14239       return FALSE;
14240     }
14241 }
14242 
14243 /* The RELOCATE_SECTION function is called by the ELF backend linker
14244    to handle the relocations for a section.
14245 
14246    The relocs are always passed as Rela structures; if the section
14247    actually uses Rel structures, the r_addend field will always be
14248    zero.
14249 
14250    This function is responsible for adjust the section contents as
14251    necessary, and (if using Rela relocs and generating a
14252    relocatable output file) adjusting the reloc addend as
14253    necessary.
14254 
14255    This function does not have to worry about setting the reloc
14256    address or the reloc symbol index.
14257 
14258    LOCAL_SYMS is a pointer to the swapped in local symbols.
14259 
14260    LOCAL_SECTIONS is an array giving the section in the input file
14261    corresponding to the st_shndx field of each local symbol.
14262 
14263    The global hash table entry for the global symbols can be found
14264    via elf_sym_hashes (input_bfd).
14265 
14266    When generating relocatable output, this function must handle
14267    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
14268    going to be the section symbol corresponding to the output
14269    section, which means that the addend must be adjusted
14270    accordingly.  */
14271 
14272 static bfd_boolean
14273 ppc64_elf_relocate_section (bfd *output_bfd,
14274 			    struct bfd_link_info *info,
14275 			    bfd *input_bfd,
14276 			    asection *input_section,
14277 			    bfd_byte *contents,
14278 			    Elf_Internal_Rela *relocs,
14279 			    Elf_Internal_Sym *local_syms,
14280 			    asection **local_sections)
14281 {
14282   struct ppc_link_hash_table *htab;
14283   Elf_Internal_Shdr *symtab_hdr;
14284   struct elf_link_hash_entry **sym_hashes;
14285   Elf_Internal_Rela *rel;
14286   Elf_Internal_Rela *wrel;
14287   Elf_Internal_Rela *relend;
14288   Elf_Internal_Rela outrel;
14289   bfd_byte *loc;
14290   struct got_entry **local_got_ents;
14291   bfd_vma TOCstart;
14292   bfd_boolean ret = TRUE;
14293   bfd_boolean is_opd;
14294   /* Assume 'at' branch hints.  */
14295   bfd_boolean is_isa_v2 = TRUE;
14296   bfd_boolean warned_dynamic = FALSE;
14297   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
14298 
14299   /* Initialize howto table if needed.  */
14300   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
14301     ppc_howto_init ();
14302 
14303   htab = ppc_hash_table (info);
14304   if (htab == NULL)
14305     return FALSE;
14306 
14307   /* Don't relocate stub sections.  */
14308   if (input_section->owner == htab->params->stub_bfd)
14309     return TRUE;
14310 
14311   if (!is_ppc64_elf (input_bfd))
14312     {
14313       bfd_set_error (bfd_error_wrong_format);
14314       return FALSE;
14315     }
14316 
14317   local_got_ents = elf_local_got_ents (input_bfd);
14318   TOCstart = elf_gp (output_bfd);
14319   symtab_hdr = &elf_symtab_hdr (input_bfd);
14320   sym_hashes = elf_sym_hashes (input_bfd);
14321   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
14322 
14323   rel = wrel = relocs;
14324   relend = relocs + input_section->reloc_count;
14325   for (; rel < relend; wrel++, rel++)
14326     {
14327       enum elf_ppc64_reloc_type r_type;
14328       bfd_vma addend;
14329       bfd_reloc_status_type r;
14330       Elf_Internal_Sym *sym;
14331       asection *sec;
14332       struct elf_link_hash_entry *h_elf;
14333       struct ppc_link_hash_entry *h;
14334       struct ppc_link_hash_entry *fdh;
14335       const char *sym_name;
14336       unsigned long r_symndx, toc_symndx;
14337       bfd_vma toc_addend;
14338       unsigned char tls_mask, tls_gd, tls_type;
14339       unsigned char sym_type;
14340       bfd_vma relocation;
14341       bfd_boolean unresolved_reloc, save_unresolved_reloc;
14342       bfd_boolean warned;
14343       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
14344       unsigned int insn;
14345       unsigned int mask;
14346       struct ppc_stub_hash_entry *stub_entry;
14347       bfd_vma max_br_offset;
14348       bfd_vma from;
14349       Elf_Internal_Rela orig_rel;
14350       reloc_howto_type *howto;
14351       struct reloc_howto_struct alt_howto;
14352       uint64_t pinsn;
14353       bfd_vma offset;
14354 
14355     again:
14356       orig_rel = *rel;
14357 
14358       r_type = ELF64_R_TYPE (rel->r_info);
14359       r_symndx = ELF64_R_SYM (rel->r_info);
14360 
14361       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
14362 	 symbol of the previous ADDR64 reloc.  The symbol gives us the
14363 	 proper TOC base to use.  */
14364       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
14365 	  && wrel != relocs
14366 	  && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
14367 	  && is_opd)
14368 	r_symndx = ELF64_R_SYM (wrel[-1].r_info);
14369 
14370       sym = NULL;
14371       sec = NULL;
14372       h_elf = NULL;
14373       sym_name = NULL;
14374       unresolved_reloc = FALSE;
14375       warned = FALSE;
14376 
14377       if (r_symndx < symtab_hdr->sh_info)
14378 	{
14379 	  /* It's a local symbol.  */
14380 	  struct _opd_sec_data *opd;
14381 
14382 	  sym = local_syms + r_symndx;
14383 	  sec = local_sections[r_symndx];
14384 	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
14385 	  sym_type = ELF64_ST_TYPE (sym->st_info);
14386 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
14387 	  opd = get_opd_info (sec);
14388 	  if (opd != NULL && opd->adjust != NULL)
14389 	    {
14390 	      long adjust = opd->adjust[OPD_NDX (sym->st_value
14391 						 + rel->r_addend)];
14392 	      if (adjust == -1)
14393 		relocation = 0;
14394 	      else
14395 		{
14396 		  /* If this is a relocation against the opd section sym
14397 		     and we have edited .opd, adjust the reloc addend so
14398 		     that ld -r and ld --emit-relocs output is correct.
14399 		     If it is a reloc against some other .opd symbol,
14400 		     then the symbol value will be adjusted later.  */
14401 		  if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
14402 		    rel->r_addend += adjust;
14403 		  else
14404 		    relocation += adjust;
14405 		}
14406 	    }
14407 	}
14408       else
14409 	{
14410 	  bfd_boolean ignored;
14411 
14412 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
14413 				   r_symndx, symtab_hdr, sym_hashes,
14414 				   h_elf, sec, relocation,
14415 				   unresolved_reloc, warned, ignored);
14416 	  sym_name = h_elf->root.root.string;
14417 	  sym_type = h_elf->type;
14418 	  if (sec != NULL
14419 	      && sec->owner == output_bfd
14420 	      && strcmp (sec->name, ".opd") == 0)
14421 	    {
14422 	      /* This is a symbol defined in a linker script.  All
14423 		 such are defined in output sections, even those
14424 		 defined by simple assignment from a symbol defined in
14425 		 an input section.  Transfer the symbol to an
14426 		 appropriate input .opd section, so that a branch to
14427 		 this symbol will be mapped to the location specified
14428 		 by the opd entry.  */
14429 	      struct bfd_link_order *lo;
14430 	      for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
14431 		if (lo->type == bfd_indirect_link_order)
14432 		  {
14433 		    asection *isec = lo->u.indirect.section;
14434 		    if (h_elf->root.u.def.value >= isec->output_offset
14435 			&& h_elf->root.u.def.value < (isec->output_offset
14436 						      + isec->size))
14437 		      {
14438 			h_elf->root.u.def.value -= isec->output_offset;
14439 			h_elf->root.u.def.section = isec;
14440 			sec = isec;
14441 			break;
14442 		      }
14443 		  }
14444 	    }
14445 	}
14446       h = (struct ppc_link_hash_entry *) h_elf;
14447 
14448       if (sec != NULL && discarded_section (sec))
14449 	{
14450 	  _bfd_clear_contents (ppc64_elf_howto_table[r_type],
14451 			       input_bfd, input_section,
14452 			       contents, rel->r_offset);
14453 	  wrel->r_offset = rel->r_offset;
14454 	  wrel->r_info = 0;
14455 	  wrel->r_addend = 0;
14456 
14457 	  /* For ld -r, remove relocations in debug sections against
14458 	     symbols defined in discarded sections.  Not done for
14459 	     non-debug to preserve relocs in .eh_frame which the
14460 	     eh_frame editing code expects to be present.  */
14461 	  if (bfd_link_relocatable (info)
14462 	      && (input_section->flags & SEC_DEBUGGING))
14463 	    wrel--;
14464 
14465 	  continue;
14466 	}
14467 
14468       if (bfd_link_relocatable (info))
14469 	goto copy_reloc;
14470 
14471       if (h != NULL && &h->elf == htab->elf.hgot)
14472 	{
14473 	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14474 	  sec = bfd_abs_section_ptr;
14475 	  unresolved_reloc = FALSE;
14476 	}
14477 
14478       /* TLS optimizations.  Replace instruction sequences and relocs
14479 	 based on information we collected in tls_optimize.  We edit
14480 	 RELOCS so that --emit-relocs will output something sensible
14481 	 for the final instruction stream.  */
14482       tls_mask = 0;
14483       tls_gd = 0;
14484       toc_symndx = 0;
14485       if (h != NULL)
14486 	tls_mask = h->tls_mask;
14487       else if (local_got_ents != NULL)
14488 	{
14489 	  struct plt_entry **local_plt = (struct plt_entry **)
14490 	    (local_got_ents + symtab_hdr->sh_info);
14491 	  unsigned char *lgot_masks = (unsigned char *)
14492 	    (local_plt + symtab_hdr->sh_info);
14493 	  tls_mask = lgot_masks[r_symndx];
14494 	}
14495       if (((tls_mask & TLS_TLS) == 0 || tls_mask == (TLS_TLS | TLS_MARK))
14496 	  && (r_type == R_PPC64_TLS
14497 	      || r_type == R_PPC64_TLSGD
14498 	      || r_type == R_PPC64_TLSLD))
14499 	{
14500 	  /* Check for toc tls entries.  */
14501 	  unsigned char *toc_tls;
14502 
14503 	  if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14504 			     &local_syms, rel, input_bfd))
14505 	    return FALSE;
14506 
14507 	  if (toc_tls)
14508 	    tls_mask = *toc_tls;
14509 	}
14510 
14511       /* Check that tls relocs are used with tls syms, and non-tls
14512 	 relocs are used with non-tls syms.  */
14513       if (r_symndx != STN_UNDEF
14514 	  && r_type != R_PPC64_NONE
14515 	  && (h == NULL
14516 	      || h->elf.root.type == bfd_link_hash_defined
14517 	      || h->elf.root.type == bfd_link_hash_defweak)
14518 	  && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
14519 	{
14520 	  if ((tls_mask & TLS_TLS) != 0
14521 	      && (r_type == R_PPC64_TLS
14522 		  || r_type == R_PPC64_TLSGD
14523 		  || r_type == R_PPC64_TLSLD))
14524 	    /* R_PPC64_TLS is OK against a symbol in the TOC.  */
14525 	    ;
14526 	  else
14527 	    info->callbacks->einfo
14528 	      (!IS_PPC64_TLS_RELOC (r_type)
14529 	       /* xgettext:c-format */
14530 	       ? _("%H: %s used with TLS symbol `%pT'\n")
14531 	       /* xgettext:c-format */
14532 	       : _("%H: %s used with non-TLS symbol `%pT'\n"),
14533 	       input_bfd, input_section, rel->r_offset,
14534 	       ppc64_elf_howto_table[r_type]->name,
14535 	       sym_name);
14536 	}
14537 
14538       /* Ensure reloc mapping code below stays sane.  */
14539       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
14540 	  || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
14541 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
14542 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
14543 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
14544 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
14545 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
14546 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
14547 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
14548 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
14549 	abort ();
14550 
14551       switch (r_type)
14552 	{
14553 	default:
14554 	  break;
14555 
14556 	case R_PPC64_LO_DS_OPT:
14557 	  insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
14558 	  if ((insn & (0x3fu << 26)) != 58u << 26)
14559 	    abort ();
14560 	  insn += (14u << 26) - (58u << 26);
14561 	  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
14562 	  r_type = R_PPC64_TOC16_LO;
14563 	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14564 	  break;
14565 
14566 	case R_PPC64_TOC16:
14567 	case R_PPC64_TOC16_LO:
14568 	case R_PPC64_TOC16_DS:
14569 	case R_PPC64_TOC16_LO_DS:
14570 	  {
14571 	    /* Check for toc tls entries.  */
14572 	    unsigned char *toc_tls;
14573 	    int retval;
14574 
14575 	    retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14576 				   &local_syms, rel, input_bfd);
14577 	    if (retval == 0)
14578 	      return FALSE;
14579 
14580 	    if (toc_tls)
14581 	      {
14582 		tls_mask = *toc_tls;
14583 		if (r_type == R_PPC64_TOC16_DS
14584 		    || r_type == R_PPC64_TOC16_LO_DS)
14585 		  {
14586 		    if ((tls_mask & TLS_TLS) != 0
14587 			&& (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
14588 		      goto toctprel;
14589 		  }
14590 		else
14591 		  {
14592 		    /* If we found a GD reloc pair, then we might be
14593 		       doing a GD->IE transition.  */
14594 		    if (retval == 2)
14595 		      {
14596 			tls_gd = TLS_GDIE;
14597 			if ((tls_mask & TLS_TLS) != 0
14598 			    && (tls_mask & TLS_GD) == 0)
14599 			  goto tls_ldgd_opt;
14600 		      }
14601 		    else if (retval == 3)
14602 		      {
14603 			if ((tls_mask & TLS_TLS) != 0
14604 			    && (tls_mask & TLS_LD) == 0)
14605 			  goto tls_ldgd_opt;
14606 		      }
14607 		  }
14608 	      }
14609 	  }
14610 	  break;
14611 
14612 	case R_PPC64_GOT_TPREL16_HI:
14613 	case R_PPC64_GOT_TPREL16_HA:
14614 	  if ((tls_mask & TLS_TLS) != 0
14615 	      && (tls_mask & TLS_TPREL) == 0)
14616 	    {
14617 	      rel->r_offset -= d_offset;
14618 	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14619 	      r_type = R_PPC64_NONE;
14620 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14621 	    }
14622 	  break;
14623 
14624 	case R_PPC64_GOT_TPREL16_DS:
14625 	case R_PPC64_GOT_TPREL16_LO_DS:
14626 	  if ((tls_mask & TLS_TLS) != 0
14627 	      && (tls_mask & TLS_TPREL) == 0)
14628 	    {
14629 	    toctprel:
14630 	      insn = bfd_get_32 (input_bfd,
14631 				 contents + rel->r_offset - d_offset);
14632 	      insn &= 31 << 21;
14633 	      insn |= 0x3c0d0000;	/* addis 0,13,0 */
14634 	      bfd_put_32 (input_bfd, insn,
14635 			  contents + rel->r_offset - d_offset);
14636 	      r_type = R_PPC64_TPREL16_HA;
14637 	      if (toc_symndx != 0)
14638 		{
14639 		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14640 		  rel->r_addend = toc_addend;
14641 		  /* We changed the symbol.  Start over in order to
14642 		     get h, sym, sec etc. right.  */
14643 		  goto again;
14644 		}
14645 	      else
14646 		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14647 	    }
14648 	  break;
14649 
14650 	case R_PPC64_GOT_TPREL34:
14651 	  if ((tls_mask & TLS_TLS) != 0
14652 	      && (tls_mask & TLS_TPREL) == 0)
14653 	    {
14654 	      /* pld ra,sym@got@tprel@pcrel -> paddi ra,r13,sym@tprel  */
14655 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14656 	      pinsn <<= 32;
14657 	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14658 	      pinsn += ((2ULL << 56) + (-1ULL << 52)
14659 			+ (14ULL << 26) - (57ULL << 26) + (13ULL << 16));
14660 	      bfd_put_32 (input_bfd, pinsn >> 32,
14661 			  contents + rel->r_offset);
14662 	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14663 			  contents + rel->r_offset + 4);
14664 	      r_type = R_PPC64_TPREL34;
14665 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14666 	    }
14667 	  break;
14668 
14669 	case R_PPC64_TLS:
14670 	  if ((tls_mask & TLS_TLS) != 0
14671 	      && (tls_mask & TLS_TPREL) == 0)
14672 	    {
14673 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
14674 	      insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
14675 	      if (insn == 0)
14676 		break;
14677 	      if ((rel->r_offset & 3) == 0)
14678 		{
14679 		  bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
14680 		  /* Was PPC64_TLS which sits on insn boundary, now
14681 		     PPC64_TPREL16_LO which is at low-order half-word.  */
14682 		  rel->r_offset += d_offset;
14683 		  r_type = R_PPC64_TPREL16_LO;
14684 		  if (toc_symndx != 0)
14685 		    {
14686 		      rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14687 		      rel->r_addend = toc_addend;
14688 		      /* We changed the symbol.  Start over in order to
14689 			 get h, sym, sec etc. right.  */
14690 		      goto again;
14691 		    }
14692 		  else
14693 		    rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14694 		}
14695 	      else if ((rel->r_offset & 3) == 1)
14696 		{
14697 		  /* For pcrel IE to LE we already have the full
14698 		     offset and thus don't need an addi here.  A nop
14699 		     or mr will do.  */
14700 		  if ((insn & (0x3fu << 26)) == 14 << 26)
14701 		    {
14702 		      /* Extract regs from addi rt,ra,si.  */
14703 		      unsigned int rt = (insn >> 21) & 0x1f;
14704 		      unsigned int ra = (insn >> 16) & 0x1f;
14705 		      if (rt == ra)
14706 			insn = NOP;
14707 		      else
14708 			{
14709 			  /* Build or ra,rs,rb with rb==rs, ie. mr ra,rs.  */
14710 			  insn = (rt << 16) | (ra << 21) | (ra << 11);
14711 			  insn |= (31u << 26) | (444u << 1);
14712 			}
14713 		    }
14714 		  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - 1);
14715 		}
14716 	    }
14717 	  break;
14718 
14719 	case R_PPC64_GOT_TLSGD16_HI:
14720 	case R_PPC64_GOT_TLSGD16_HA:
14721 	  tls_gd = TLS_GDIE;
14722 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14723 	    goto tls_gdld_hi;
14724 	  break;
14725 
14726 	case R_PPC64_GOT_TLSLD16_HI:
14727 	case R_PPC64_GOT_TLSLD16_HA:
14728 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14729 	    {
14730 	    tls_gdld_hi:
14731 	      if ((tls_mask & tls_gd) != 0)
14732 		r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
14733 			  + R_PPC64_GOT_TPREL16_DS);
14734 	      else
14735 		{
14736 		  rel->r_offset -= d_offset;
14737 		  bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14738 		  r_type = R_PPC64_NONE;
14739 		}
14740 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14741 	    }
14742 	  break;
14743 
14744 	case R_PPC64_GOT_TLSGD16:
14745 	case R_PPC64_GOT_TLSGD16_LO:
14746 	  tls_gd = TLS_GDIE;
14747 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14748 	    goto tls_ldgd_opt;
14749 	  break;
14750 
14751 	case R_PPC64_GOT_TLSLD16:
14752 	case R_PPC64_GOT_TLSLD16_LO:
14753 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14754 	    {
14755 	      unsigned int insn1, insn2;
14756 
14757 	    tls_ldgd_opt:
14758 	      offset = (bfd_vma) -1;
14759 	      /* If not using the newer R_PPC64_TLSGD/LD to mark
14760 		 __tls_get_addr calls, we must trust that the call
14761 		 stays with its arg setup insns, ie. that the next
14762 		 reloc is the __tls_get_addr call associated with
14763 		 the current reloc.  Edit both insns.  */
14764 	      if (input_section->nomark_tls_get_addr
14765 		  && rel + 1 < relend
14766 		  && branch_reloc_hash_match (input_bfd, rel + 1,
14767 					      htab->tls_get_addr,
14768 					      htab->tls_get_addr_fd))
14769 		offset = rel[1].r_offset;
14770 	      /* We read the low GOT_TLS (or TOC16) insn because we
14771 		 need to keep the destination reg.  It may be
14772 		 something other than the usual r3, and moved to r3
14773 		 before the call by intervening code.  */
14774 	      insn1 = bfd_get_32 (input_bfd,
14775 				  contents + rel->r_offset - d_offset);
14776 	      if ((tls_mask & tls_gd) != 0)
14777 		{
14778 		  /* IE */
14779 		  insn1 &= (0x1f << 21) | (0x1f << 16);
14780 		  insn1 |= 58u << 26;	/* ld */
14781 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
14782 		  if (offset != (bfd_vma) -1)
14783 		    rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14784 		  if (r_type == R_PPC64_TOC16
14785 		      || r_type == R_PPC64_TOC16_LO)
14786 		    r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
14787 		  else
14788 		    r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 1)) & 1)
14789 			      + R_PPC64_GOT_TPREL16_DS);
14790 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14791 		}
14792 	      else
14793 		{
14794 		  /* LE */
14795 		  insn1 &= 0x1f << 21;
14796 		  insn1 |= 0x3c0d0000;	/* addis r,13,0 */
14797 		  insn2 = 0x38630000;	/* addi 3,3,0 */
14798 		  if (tls_gd == 0)
14799 		    {
14800 		      /* Was an LD reloc.  */
14801 		      r_symndx = STN_UNDEF;
14802 		      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14803 		    }
14804 		  else if (toc_symndx != 0)
14805 		    {
14806 		      r_symndx = toc_symndx;
14807 		      rel->r_addend = toc_addend;
14808 		    }
14809 		  r_type = R_PPC64_TPREL16_HA;
14810 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14811 		  if (offset != (bfd_vma) -1)
14812 		    {
14813 		      rel[1].r_info = ELF64_R_INFO (r_symndx,
14814 						    R_PPC64_TPREL16_LO);
14815 		      rel[1].r_offset = offset + d_offset;
14816 		      rel[1].r_addend = rel->r_addend;
14817 		    }
14818 		}
14819 	      bfd_put_32 (input_bfd, insn1,
14820 			  contents + rel->r_offset - d_offset);
14821 	      if (offset != (bfd_vma) -1)
14822 		{
14823 		  bfd_put_32 (input_bfd, insn2, contents + offset);
14824 		  if (offset + 8 <= input_section->size)
14825 		    {
14826 		      insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
14827 		      if (insn2 == LD_R2_0R1 + STK_TOC (htab))
14828 			bfd_put_32 (input_bfd, NOP, contents + offset + 4);
14829 		    }
14830 		}
14831 	      if ((tls_mask & tls_gd) == 0
14832 		  && (tls_gd == 0 || toc_symndx != 0))
14833 		{
14834 		  /* We changed the symbol.  Start over in order
14835 		     to get h, sym, sec etc. right.  */
14836 		  goto again;
14837 		}
14838 	    }
14839 	  break;
14840 
14841 	case R_PPC64_GOT_TLSGD34:
14842 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14843 	    {
14844 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14845 	      pinsn <<= 32;
14846 	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14847 	      if ((tls_mask & TLS_GDIE) != 0)
14848 		{
14849 		  /* IE, pla -> pld  */
14850 		  pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
14851 		  r_type = R_PPC64_GOT_TPREL34;
14852 		}
14853 	      else
14854 		{
14855 		  /* LE, pla pcrel -> paddi r13  */
14856 		  pinsn += (-1ULL << 52) + (13ULL << 16);
14857 		  r_type = R_PPC64_TPREL34;
14858 		}
14859 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14860 	      bfd_put_32 (input_bfd, pinsn >> 32,
14861 			  contents + rel->r_offset);
14862 	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14863 			  contents + rel->r_offset + 4);
14864 	    }
14865 	  break;
14866 
14867 	case R_PPC64_GOT_TLSLD34:
14868 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14869 	    {
14870 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14871 	      pinsn <<= 32;
14872 	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14873 	      pinsn += (-1ULL << 52) + (13ULL << 16);
14874 	      bfd_put_32 (input_bfd, pinsn >> 32,
14875 			  contents + rel->r_offset);
14876 	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14877 			  contents + rel->r_offset + 4);
14878 	      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14879 	      r_symndx = STN_UNDEF;
14880 	      r_type = R_PPC64_TPREL34;
14881 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14882 	      goto again;
14883 	    }
14884 	  break;
14885 
14886 	case R_PPC64_TLSGD:
14887 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
14888 	      && rel + 1 < relend)
14889 	    {
14890 	      unsigned int insn2;
14891 	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14892 
14893 	      offset = rel->r_offset;
14894 	      if (is_plt_seq_reloc (r_type1))
14895 		{
14896 		  bfd_put_32 (output_bfd, NOP, contents + offset);
14897 		  if (r_type1 == R_PPC64_PLT_PCREL34
14898 		      || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14899 		    bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14900 		  rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14901 		  break;
14902 		}
14903 
14904 	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14905 		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14906 
14907 	      if ((tls_mask & TLS_GDIE) != 0)
14908 		{
14909 		  /* IE */
14910 		  r_type = R_PPC64_NONE;
14911 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
14912 		}
14913 	      else
14914 		{
14915 		  /* LE */
14916 		  if (toc_symndx != 0)
14917 		    {
14918 		      r_symndx = toc_symndx;
14919 		      rel->r_addend = toc_addend;
14920 		    }
14921 		  if (r_type1 == R_PPC64_REL24_NOTOC
14922 		      || r_type1 == R_PPC64_PLTCALL_NOTOC)
14923 		    {
14924 		      r_type = R_PPC64_NONE;
14925 		      insn2 = NOP;
14926 		    }
14927 		  else
14928 		    {
14929 		      rel->r_offset = offset + d_offset;
14930 		      r_type = R_PPC64_TPREL16_LO;
14931 		      insn2 = 0x38630000;	/* addi 3,3,0 */
14932 		    }
14933 		}
14934 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14935 	      /* Zap the reloc on the _tls_get_addr call too.  */
14936 	      BFD_ASSERT (offset == rel[1].r_offset);
14937 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14938 	      bfd_put_32 (input_bfd, insn2, contents + offset);
14939 	      if ((tls_mask & TLS_GDIE) == 0
14940 		  && toc_symndx != 0
14941 		  && r_type != R_PPC64_NONE)
14942 		goto again;
14943 	    }
14944 	  break;
14945 
14946 	case R_PPC64_TLSLD:
14947 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
14948 	      && rel + 1 < relend)
14949 	    {
14950 	      unsigned int insn2;
14951 	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14952 
14953 	      offset = rel->r_offset;
14954 	      if (is_plt_seq_reloc (r_type1))
14955 		{
14956 		  bfd_put_32 (output_bfd, NOP, contents + offset);
14957 		  if (r_type1 == R_PPC64_PLT_PCREL34
14958 		      || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14959 		    bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14960 		  rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14961 		  break;
14962 		}
14963 
14964 	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14965 		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14966 
14967 	      if (r_type1 == R_PPC64_REL24_NOTOC
14968 		  || r_type1 == R_PPC64_PLTCALL_NOTOC)
14969 		{
14970 		  r_type = R_PPC64_NONE;
14971 		  insn2 = NOP;
14972 		}
14973 	      else
14974 		{
14975 		  rel->r_offset = offset + d_offset;
14976 		  r_symndx = STN_UNDEF;
14977 		  r_type = R_PPC64_TPREL16_LO;
14978 		  rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14979 		  insn2 = 0x38630000;	/* addi 3,3,0 */
14980 		}
14981 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14982 	      /* Zap the reloc on the _tls_get_addr call too.  */
14983 	      BFD_ASSERT (offset == rel[1].r_offset);
14984 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14985 	      bfd_put_32 (input_bfd, insn2, contents + offset);
14986 	      if (r_type != R_PPC64_NONE)
14987 		goto again;
14988 	    }
14989 	  break;
14990 
14991 	case R_PPC64_DTPMOD64:
14992 	  if (rel + 1 < relend
14993 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
14994 	      && rel[1].r_offset == rel->r_offset + 8)
14995 	    {
14996 	      if ((tls_mask & TLS_GD) == 0)
14997 		{
14998 		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
14999 		  if ((tls_mask & TLS_GDIE) != 0)
15000 		    r_type = R_PPC64_TPREL64;
15001 		  else
15002 		    {
15003 		      bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15004 		      r_type = R_PPC64_NONE;
15005 		    }
15006 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15007 		}
15008 	    }
15009 	  else
15010 	    {
15011 	      if ((tls_mask & TLS_LD) == 0)
15012 		{
15013 		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15014 		  r_type = R_PPC64_NONE;
15015 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15016 		}
15017 	    }
15018 	  break;
15019 
15020 	case R_PPC64_TPREL64:
15021 	  if ((tls_mask & TLS_TPREL) == 0)
15022 	    {
15023 	      r_type = R_PPC64_NONE;
15024 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15025 	    }
15026 	  break;
15027 
15028 	case R_PPC64_ENTRY:
15029 	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
15030 	  if (!bfd_link_pic (info)
15031 	      && !info->traditional_format
15032 	      && relocation + 0x80008000 <= 0xffffffff)
15033 	    {
15034 	      unsigned int insn1, insn2;
15035 
15036 	      insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15037 	      insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15038 	      if ((insn1 & ~0xfffc) == LD_R2_0R12
15039 		  && insn2 == ADD_R2_R2_R12)
15040 		{
15041 		  bfd_put_32 (input_bfd,
15042 			      LIS_R2 + PPC_HA (relocation),
15043 			      contents + rel->r_offset);
15044 		  bfd_put_32 (input_bfd,
15045 			      ADDI_R2_R2 + PPC_LO (relocation),
15046 			      contents + rel->r_offset + 4);
15047 		}
15048 	    }
15049 	  else
15050 	    {
15051 	      relocation -= (rel->r_offset
15052 			     + input_section->output_offset
15053 			     + input_section->output_section->vma);
15054 	      if (relocation + 0x80008000 <= 0xffffffff)
15055 		{
15056 		  unsigned int insn1, insn2;
15057 
15058 		  insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15059 		  insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15060 		  if ((insn1 & ~0xfffc) == LD_R2_0R12
15061 		      && insn2 == ADD_R2_R2_R12)
15062 		    {
15063 		      bfd_put_32 (input_bfd,
15064 				  ADDIS_R2_R12 + PPC_HA (relocation),
15065 				  contents + rel->r_offset);
15066 		      bfd_put_32 (input_bfd,
15067 				  ADDI_R2_R2 + PPC_LO (relocation),
15068 				  contents + rel->r_offset + 4);
15069 		    }
15070 		}
15071 	    }
15072 	  break;
15073 
15074 	case R_PPC64_REL16_HA:
15075 	  /* If we are generating a non-PIC executable, edit
15076 	     .	0:	addis 2,12,.TOC.-0b@ha
15077 	     .		addi 2,2,.TOC.-0b@l
15078 	     used by ELFv2 global entry points to set up r2, to
15079 	     .		lis 2,.TOC.@ha
15080 	     .		addi 2,2,.TOC.@l
15081 	     if .TOC. is in range.  */
15082 	  if (!bfd_link_pic (info)
15083 	      && !info->traditional_format
15084 	      && !htab->opd_abi
15085 	      && rel->r_addend == d_offset
15086 	      && h != NULL && &h->elf == htab->elf.hgot
15087 	      && rel + 1 < relend
15088 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
15089 	      && rel[1].r_offset == rel->r_offset + 4
15090 	      && rel[1].r_addend == rel->r_addend + 4
15091 	      && relocation + 0x80008000 <= 0xffffffff)
15092 	    {
15093 	      unsigned int insn1, insn2;
15094 	      offset = rel->r_offset - d_offset;
15095 	      insn1 = bfd_get_32 (input_bfd, contents + offset);
15096 	      insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15097 	      if ((insn1 & 0xffff0000) == ADDIS_R2_R12
15098 		  && (insn2 & 0xffff0000) == ADDI_R2_R2)
15099 		{
15100 		  r_type = R_PPC64_ADDR16_HA;
15101 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15102 		  rel->r_addend -= d_offset;
15103 		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
15104 		  rel[1].r_addend -= d_offset + 4;
15105 		  bfd_put_32 (input_bfd, LIS_R2, contents + offset);
15106 		}
15107 	    }
15108 	  break;
15109 	}
15110 
15111       /* Handle other relocations that tweak non-addend part of insn.  */
15112       insn = 0;
15113       max_br_offset = 1 << 25;
15114       addend = rel->r_addend;
15115       reloc_dest = DEST_NORMAL;
15116       switch (r_type)
15117 	{
15118 	default:
15119 	  break;
15120 
15121 	case R_PPC64_TOCSAVE:
15122 	  if (relocation + addend == (rel->r_offset
15123 				      + input_section->output_offset
15124 				      + input_section->output_section->vma)
15125 	      && tocsave_find (htab, NO_INSERT,
15126 			       &local_syms, rel, input_bfd))
15127 	    {
15128 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15129 	      if (insn == NOP
15130 		  || insn == CROR_151515 || insn == CROR_313131)
15131 		bfd_put_32 (input_bfd,
15132 			    STD_R2_0R1 + STK_TOC (htab),
15133 			    contents + rel->r_offset);
15134 	    }
15135 	  break;
15136 
15137 	  /* Branch taken prediction relocations.  */
15138 	case R_PPC64_ADDR14_BRTAKEN:
15139 	case R_PPC64_REL14_BRTAKEN:
15140 	  insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
15141 	  /* Fall through.  */
15142 
15143 	  /* Branch not taken prediction relocations.  */
15144 	case R_PPC64_ADDR14_BRNTAKEN:
15145 	case R_PPC64_REL14_BRNTAKEN:
15146 	  insn |= bfd_get_32 (input_bfd,
15147 			      contents + rel->r_offset) & ~(0x01 << 21);
15148 	  /* Fall through.  */
15149 
15150 	case R_PPC64_REL14:
15151 	  max_br_offset = 1 << 15;
15152 	  /* Fall through.  */
15153 
15154 	case R_PPC64_REL24:
15155 	case R_PPC64_REL24_NOTOC:
15156 	case R_PPC64_PLTCALL:
15157 	case R_PPC64_PLTCALL_NOTOC:
15158 	  /* Calls to functions with a different TOC, such as calls to
15159 	     shared objects, need to alter the TOC pointer.  This is
15160 	     done using a linkage stub.  A REL24 branching to these
15161 	     linkage stubs needs to be followed by a nop, as the nop
15162 	     will be replaced with an instruction to restore the TOC
15163 	     base pointer.  */
15164 	  fdh = h;
15165 	  if (h != NULL
15166 	      && h->oh != NULL
15167 	      && h->oh->is_func_descriptor)
15168 	    fdh = ppc_follow_link (h->oh);
15169 	  stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
15170 					   htab);
15171 	  if ((r_type == R_PPC64_PLTCALL
15172 	       || r_type == R_PPC64_PLTCALL_NOTOC)
15173 	      && stub_entry != NULL
15174 	      && stub_entry->stub_type >= ppc_stub_plt_call
15175 	      && stub_entry->stub_type <= ppc_stub_plt_call_both)
15176 	    stub_entry = NULL;
15177 
15178 	  if (stub_entry != NULL
15179 	      && ((stub_entry->stub_type >= ppc_stub_plt_call
15180 		   && stub_entry->stub_type <= ppc_stub_plt_call_both)
15181 		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15182 		  || stub_entry->stub_type == ppc_stub_plt_branch_both
15183 		  || stub_entry->stub_type == ppc_stub_long_branch_r2off
15184 		  || stub_entry->stub_type == ppc_stub_long_branch_both))
15185 	    {
15186 	      bfd_boolean can_plt_call = FALSE;
15187 
15188 	      if (stub_entry->stub_type == ppc_stub_plt_call
15189 		  && !htab->opd_abi
15190 		  && htab->params->plt_localentry0 != 0
15191 		  && is_elfv2_localentry0 (&h->elf))
15192 		{
15193 		  /* The function doesn't use or change r2.  */
15194 		  can_plt_call = TRUE;
15195 		}
15196 	      else if (r_type == R_PPC64_REL24_NOTOC)
15197 		{
15198 		  /* NOTOC calls don't need to restore r2.  */
15199 		  can_plt_call = TRUE;
15200 		}
15201 
15202 	      /* All of these stubs may modify r2, so there must be a
15203 		 branch and link followed by a nop.  The nop is
15204 		 replaced by an insn to restore r2.  */
15205 	      else if (rel->r_offset + 8 <= input_section->size)
15206 		{
15207 		  unsigned long br;
15208 
15209 		  br = bfd_get_32 (input_bfd,
15210 				   contents + rel->r_offset);
15211 		  if ((br & 1) != 0)
15212 		    {
15213 		      unsigned long nop;
15214 
15215 		      nop = bfd_get_32 (input_bfd,
15216 					contents + rel->r_offset + 4);
15217 		      if (nop == LD_R2_0R1 + STK_TOC (htab))
15218 			can_plt_call = TRUE;
15219 		      else if (nop == NOP
15220 			       || nop == CROR_151515
15221 			       || nop == CROR_313131)
15222 			{
15223 			  if (h != NULL
15224 			      && (h == htab->tls_get_addr_fd
15225 				  || h == htab->tls_get_addr)
15226 			      && htab->params->tls_get_addr_opt)
15227 			    {
15228 			      /* Special stub used, leave nop alone.  */
15229 			    }
15230 			  else
15231 			    bfd_put_32 (input_bfd,
15232 					LD_R2_0R1 + STK_TOC (htab),
15233 					contents + rel->r_offset + 4);
15234 			  can_plt_call = TRUE;
15235 			}
15236 		    }
15237 		  else
15238 		    {
15239 		      /* Tail calls don't need to worry about restoring TOC. */
15240 		      can_plt_call = TRUE;
15241 		    }
15242 		}
15243 
15244 	      if (!can_plt_call && h != NULL)
15245 		{
15246 		  const char *name = h->elf.root.root.string;
15247 
15248 		  if (*name == '.')
15249 		    ++name;
15250 
15251 		  if (strncmp (name, "__libc_start_main", 17) == 0
15252 		      && (name[17] == 0 || name[17] == '@'))
15253 		    {
15254 		      /* Allow crt1 branch to go via a toc adjusting
15255 			 stub.  Other calls that never return could do
15256 			 the same, if we could detect such.  */
15257 		      can_plt_call = TRUE;
15258 		    }
15259 		}
15260 
15261 	      if (!can_plt_call && h != NULL)
15262 		{
15263 		  /* g++ as of 20130507 emits self-calls without a
15264 		     following nop.  This is arguably wrong since we
15265 		     have conflicting information.  On the one hand a
15266 		     global symbol and on the other a local call
15267 		     sequence, but don't error for this special case.
15268 		     It isn't possible to cheaply verify we have
15269 		     exactly such a call.  Allow all calls to the same
15270 		     section.  */
15271 		  asection *code_sec = sec;
15272 
15273 		  if (get_opd_info (sec) != NULL)
15274 		    {
15275 		      bfd_vma off = (relocation + addend
15276 				     - sec->output_section->vma
15277 				     - sec->output_offset);
15278 
15279 		      opd_entry_value (sec, off, &code_sec, NULL, FALSE);
15280 		    }
15281 		  if (code_sec == input_section)
15282 		    can_plt_call = TRUE;
15283 		}
15284 
15285 	      if (!can_plt_call)
15286 		{
15287 		  if (stub_entry->stub_type >= ppc_stub_plt_call
15288 		      && stub_entry->stub_type <= ppc_stub_plt_call_both)
15289 		    info->callbacks->einfo
15290 		      /* xgettext:c-format */
15291 		      (_("%H: call to `%pT' lacks nop, can't restore toc; "
15292 			 "(plt call stub)\n"),
15293 		       input_bfd, input_section, rel->r_offset, sym_name);
15294 		  else
15295 		    info->callbacks->einfo
15296 		      /* xgettext:c-format */
15297 		      (_("%H: call to `%pT' lacks nop, can't restore toc; "
15298 			 "(toc save/adjust stub)\n"),
15299 		       input_bfd, input_section, rel->r_offset, sym_name);
15300 
15301 		  bfd_set_error (bfd_error_bad_value);
15302 		  ret = FALSE;
15303 		}
15304 
15305 	      if (can_plt_call
15306 		  && stub_entry->stub_type >= ppc_stub_plt_call
15307 		  && stub_entry->stub_type <= ppc_stub_plt_call_both)
15308 		unresolved_reloc = FALSE;
15309 	    }
15310 
15311 	  if ((stub_entry == NULL
15312 	       || stub_entry->stub_type == ppc_stub_long_branch
15313 	       || stub_entry->stub_type == ppc_stub_plt_branch)
15314 	      && get_opd_info (sec) != NULL)
15315 	    {
15316 	      /* The branch destination is the value of the opd entry. */
15317 	      bfd_vma off = (relocation + addend
15318 			     - sec->output_section->vma
15319 			     - sec->output_offset);
15320 	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
15321 	      if (dest != (bfd_vma) -1)
15322 		{
15323 		  relocation = dest;
15324 		  addend = 0;
15325 		  reloc_dest = DEST_OPD;
15326 		}
15327 	    }
15328 
15329 	  /* If the branch is out of reach we ought to have a long
15330 	     branch stub.  */
15331 	  from = (rel->r_offset
15332 		  + input_section->output_offset
15333 		  + input_section->output_section->vma);
15334 
15335 	  relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
15336 						  ? fdh->elf.other
15337 						  : sym->st_other);
15338 
15339 	  if (stub_entry != NULL
15340 	      && (stub_entry->stub_type == ppc_stub_long_branch
15341 		  || stub_entry->stub_type == ppc_stub_plt_branch)
15342 	      && (r_type == R_PPC64_ADDR14_BRTAKEN
15343 		  || r_type == R_PPC64_ADDR14_BRNTAKEN
15344 		  || (relocation + addend - from + max_br_offset
15345 		      < 2 * max_br_offset)))
15346 	    /* Don't use the stub if this branch is in range.  */
15347 	    stub_entry = NULL;
15348 
15349 	  if (stub_entry != NULL
15350 	      && (stub_entry->stub_type == ppc_stub_long_branch_notoc
15351 		  || stub_entry->stub_type == ppc_stub_long_branch_both
15352 		  || stub_entry->stub_type == ppc_stub_plt_branch_notoc
15353 		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
15354 	      && (r_type != R_PPC64_REL24_NOTOC
15355 		  || ((fdh ? fdh->elf.other : sym->st_other)
15356 		      & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
15357 	      && (relocation + addend - from + max_br_offset
15358 		  < 2 * max_br_offset))
15359 	    stub_entry = NULL;
15360 
15361 	  if (stub_entry != NULL
15362 	      && (stub_entry->stub_type == ppc_stub_long_branch_r2off
15363 		  || stub_entry->stub_type == ppc_stub_long_branch_both
15364 		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15365 		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
15366 	      && r_type == R_PPC64_REL24_NOTOC
15367 	      && (relocation + addend - from + max_br_offset
15368 		  < 2 * max_br_offset))
15369 	    stub_entry = NULL;
15370 
15371 	  if (stub_entry != NULL)
15372 	    {
15373 	      /* Munge up the value and addend so that we call the stub
15374 		 rather than the procedure directly.  */
15375 	      asection *stub_sec = stub_entry->group->stub_sec;
15376 
15377 	      if (stub_entry->stub_type == ppc_stub_save_res)
15378 		relocation += (stub_sec->output_offset
15379 			       + stub_sec->output_section->vma
15380 			       + stub_sec->size - htab->sfpr->size
15381 			       - htab->sfpr->output_offset
15382 			       - htab->sfpr->output_section->vma);
15383 	      else
15384 		relocation = (stub_entry->stub_offset
15385 			      + stub_sec->output_offset
15386 			      + stub_sec->output_section->vma);
15387 	      addend = 0;
15388 	      reloc_dest = DEST_STUB;
15389 
15390 	      if (((stub_entry->stub_type == ppc_stub_plt_call
15391 		    && ALWAYS_EMIT_R2SAVE)
15392 		   || stub_entry->stub_type == ppc_stub_plt_call_r2save
15393 		   || stub_entry->stub_type == ppc_stub_plt_call_both)
15394 		  && !(h != NULL
15395 		       && (h == htab->tls_get_addr_fd
15396 			   || h == htab->tls_get_addr)
15397 		       && htab->params->tls_get_addr_opt)
15398 		  && rel + 1 < relend
15399 		  && rel[1].r_offset == rel->r_offset + 4
15400 		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
15401 		relocation += 4;
15402 	      else if ((stub_entry->stub_type == ppc_stub_long_branch_both
15403 			|| stub_entry->stub_type == ppc_stub_plt_branch_both
15404 			|| stub_entry->stub_type == ppc_stub_plt_call_both)
15405 		       && r_type == R_PPC64_REL24_NOTOC)
15406 		relocation += 4;
15407 
15408 	      if (r_type == R_PPC64_REL24_NOTOC
15409 		  && (stub_entry->stub_type == ppc_stub_plt_call_notoc
15410 		      || stub_entry->stub_type == ppc_stub_plt_call_both))
15411 		htab->notoc_plt = 1;
15412 	    }
15413 
15414 	  if (insn != 0)
15415 	    {
15416 	      if (is_isa_v2)
15417 		{
15418 		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
15419 		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
15420 		     for branch on CTR insns (BO == 1a00t or 1a01t).  */
15421 		  if ((insn & (0x14 << 21)) == (0x04 << 21))
15422 		    insn |= 0x02 << 21;
15423 		  else if ((insn & (0x14 << 21)) == (0x10 << 21))
15424 		    insn |= 0x08 << 21;
15425 		  else
15426 		    break;
15427 		}
15428 	      else
15429 		{
15430 		  /* Invert 'y' bit if not the default.  */
15431 		  if ((bfd_signed_vma) (relocation + addend - from) < 0)
15432 		    insn ^= 0x01 << 21;
15433 		}
15434 
15435 	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15436 	    }
15437 
15438 	  /* NOP out calls to undefined weak functions.
15439 	     We can thus call a weak function without first
15440 	     checking whether the function is defined.  */
15441 	  else if (h != NULL
15442 		   && h->elf.root.type == bfd_link_hash_undefweak
15443 		   && h->elf.dynindx == -1
15444 		   && (r_type == R_PPC64_REL24
15445 		       || r_type == R_PPC64_REL24_NOTOC)
15446 		   && relocation == 0
15447 		   && addend == 0)
15448 	    {
15449 	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15450 	      goto copy_reloc;
15451 	    }
15452 	  break;
15453 
15454 	case R_PPC64_GOT16_DS:
15455 	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
15456 	  if (relocation + addend - from + 0x8000 < 0x10000
15457 	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15458 	    {
15459 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15460 	      if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15461 		{
15462 		  insn += (14u << 26) - (58u << 26);
15463 		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15464 		  r_type = R_PPC64_TOC16;
15465 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15466 		}
15467 	    }
15468 	  break;
15469 
15470 	case R_PPC64_GOT16_LO_DS:
15471 	case R_PPC64_GOT16_HA:
15472 	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
15473 	  if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
15474 	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15475 	    {
15476 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15477 	      if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15478 		{
15479 		  insn += (14u << 26) - (58u << 26);
15480 		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15481 		  r_type = R_PPC64_TOC16_LO;
15482 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15483 		}
15484 	      else if ((insn & (0x3fu << 26)) == 15u << 26 /* addis */)
15485 		{
15486 		  r_type = R_PPC64_TOC16_HA;
15487 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15488 		}
15489 	    }
15490 	  break;
15491 
15492 	case R_PPC64_GOT_PCREL34:
15493 	  from = (rel->r_offset
15494 		  + input_section->output_section->vma
15495 		  + input_section->output_offset);
15496 	  if (relocation - from + (1ULL << 33) < 1ULL << 34
15497 	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15498 	    {
15499 	      offset = rel->r_offset;
15500 	      pinsn = bfd_get_32 (input_bfd, contents + offset);
15501 	      pinsn <<= 32;
15502 	      pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15503 	      if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15504 		   == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
15505 		{
15506 		  /* Replace with paddi.  */
15507 		  pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
15508 		  r_type = R_PPC64_PCREL34;
15509 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15510 		  bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
15511 		  bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
15512 		  goto pcrelopt;
15513 		}
15514 	    }
15515 	  break;
15516 
15517 	case R_PPC64_PCREL34:
15518 	  if (SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15519 	    {
15520 	      offset = rel->r_offset;
15521 	      pinsn = bfd_get_32 (input_bfd, contents + offset);
15522 	      pinsn <<= 32;
15523 	      pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15524 	      if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15525 		   == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
15526 		       | (14ULL << 26) /* paddi */))
15527 		{
15528 		pcrelopt:
15529 		  if (rel + 1 < relend
15530 		      && rel[1].r_offset == offset
15531 		      && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT))
15532 		    {
15533 		      bfd_vma off2 = rel[1].r_addend;
15534 		      if (off2 == 0)
15535 			/* zero means next insn.  */
15536 			off2 = 8;
15537 		      off2 += offset;
15538 		      if (off2 + 4 <= input_section->size)
15539 			{
15540 			  uint64_t pinsn2;
15541 			  bfd_signed_vma addend_off;
15542 			  pinsn2 = bfd_get_32 (input_bfd, contents + off2);
15543 			  pinsn2 <<= 32;
15544 			  if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15545 			    {
15546 			      if (off2 + 8 > input_section->size)
15547 				break;
15548 			      pinsn2 |= bfd_get_32 (input_bfd,
15549 						    contents + off2 + 4);
15550 			    }
15551 			  if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
15552 			    {
15553 			      addend += addend_off;
15554 			      rel->r_addend = addend;
15555 			      bfd_put_32 (input_bfd, pinsn >> 32,
15556 					  contents + offset);
15557 			      bfd_put_32 (input_bfd, pinsn,
15558 					  contents + offset + 4);
15559 			      bfd_put_32 (input_bfd, pinsn2 >> 32,
15560 					  contents + off2);
15561 			      if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15562 				bfd_put_32 (input_bfd, pinsn2,
15563 					    contents + off2 + 4);
15564 			    }
15565 			}
15566 		    }
15567 		}
15568 	    }
15569 	  break;
15570 	}
15571 
15572       tls_type = 0;
15573       save_unresolved_reloc = unresolved_reloc;
15574       switch (r_type)
15575 	{
15576 	default:
15577 	  /* xgettext:c-format */
15578 	  _bfd_error_handler (_("%pB: %s unsupported"),
15579 			      input_bfd, ppc64_elf_howto_table[r_type]->name);
15580 
15581 	  bfd_set_error (bfd_error_bad_value);
15582 	  ret = FALSE;
15583 	  goto copy_reloc;
15584 
15585 	case R_PPC64_NONE:
15586 	case R_PPC64_TLS:
15587 	case R_PPC64_TLSGD:
15588 	case R_PPC64_TLSLD:
15589 	case R_PPC64_TOCSAVE:
15590 	case R_PPC64_GNU_VTINHERIT:
15591 	case R_PPC64_GNU_VTENTRY:
15592 	case R_PPC64_ENTRY:
15593 	case R_PPC64_PCREL_OPT:
15594 	  goto copy_reloc;
15595 
15596 	  /* GOT16 relocations.  Like an ADDR16 using the symbol's
15597 	     address in the GOT as relocation value instead of the
15598 	     symbol's value itself.  Also, create a GOT entry for the
15599 	     symbol and put the symbol value there.  */
15600 	case R_PPC64_GOT_TLSGD16:
15601 	case R_PPC64_GOT_TLSGD16_LO:
15602 	case R_PPC64_GOT_TLSGD16_HI:
15603 	case R_PPC64_GOT_TLSGD16_HA:
15604 	case R_PPC64_GOT_TLSGD34:
15605 	  tls_type = TLS_TLS | TLS_GD;
15606 	  goto dogot;
15607 
15608 	case R_PPC64_GOT_TLSLD16:
15609 	case R_PPC64_GOT_TLSLD16_LO:
15610 	case R_PPC64_GOT_TLSLD16_HI:
15611 	case R_PPC64_GOT_TLSLD16_HA:
15612 	case R_PPC64_GOT_TLSLD34:
15613 	  tls_type = TLS_TLS | TLS_LD;
15614 	  goto dogot;
15615 
15616 	case R_PPC64_GOT_TPREL16_DS:
15617 	case R_PPC64_GOT_TPREL16_LO_DS:
15618 	case R_PPC64_GOT_TPREL16_HI:
15619 	case R_PPC64_GOT_TPREL16_HA:
15620 	case R_PPC64_GOT_TPREL34:
15621 	  tls_type = TLS_TLS | TLS_TPREL;
15622 	  goto dogot;
15623 
15624 	case R_PPC64_GOT_DTPREL16_DS:
15625 	case R_PPC64_GOT_DTPREL16_LO_DS:
15626 	case R_PPC64_GOT_DTPREL16_HI:
15627 	case R_PPC64_GOT_DTPREL16_HA:
15628 	case R_PPC64_GOT_DTPREL34:
15629 	  tls_type = TLS_TLS | TLS_DTPREL;
15630 	  goto dogot;
15631 
15632 	case R_PPC64_GOT16:
15633 	case R_PPC64_GOT16_LO:
15634 	case R_PPC64_GOT16_HI:
15635 	case R_PPC64_GOT16_HA:
15636 	case R_PPC64_GOT16_DS:
15637 	case R_PPC64_GOT16_LO_DS:
15638 	case R_PPC64_GOT_PCREL34:
15639 	dogot:
15640 	  {
15641 	    /* Relocation is to the entry for this symbol in the global
15642 	       offset table.  */
15643 	    asection *got;
15644 	    bfd_vma *offp;
15645 	    bfd_vma off;
15646 	    unsigned long indx = 0;
15647 	    struct got_entry *ent;
15648 
15649 	    if (tls_type == (TLS_TLS | TLS_LD)
15650 		&& SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15651 	      ent = ppc64_tlsld_got (input_bfd);
15652 	    else
15653 	      {
15654 		if (h != NULL)
15655 		  {
15656 		    if (!htab->elf.dynamic_sections_created
15657 			|| h->elf.dynindx == -1
15658 			|| SYMBOL_REFERENCES_LOCAL (info, &h->elf)
15659 			|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
15660 		      /* This is actually a static link, or it is a
15661 			 -Bsymbolic link and the symbol is defined
15662 			 locally, or the symbol was forced to be local
15663 			 because of a version file.  */
15664 		      ;
15665 		    else
15666 		      {
15667 			indx = h->elf.dynindx;
15668 			unresolved_reloc = FALSE;
15669 		      }
15670 		    ent = h->elf.got.glist;
15671 		  }
15672 		else
15673 		  {
15674 		    if (local_got_ents == NULL)
15675 		      abort ();
15676 		    ent = local_got_ents[r_symndx];
15677 		  }
15678 
15679 		for (; ent != NULL; ent = ent->next)
15680 		  if (ent->addend == orig_rel.r_addend
15681 		      && ent->owner == input_bfd
15682 		      && ent->tls_type == tls_type)
15683 		    break;
15684 	      }
15685 
15686 	    if (ent == NULL)
15687 	      abort ();
15688 	    if (ent->is_indirect)
15689 	      ent = ent->got.ent;
15690 	    offp = &ent->got.offset;
15691 	    got = ppc64_elf_tdata (ent->owner)->got;
15692 	    if (got == NULL)
15693 	      abort ();
15694 
15695 	    /* The offset must always be a multiple of 8.  We use the
15696 	       least significant bit to record whether we have already
15697 	       processed this entry.  */
15698 	    off = *offp;
15699 	    if ((off & 1) != 0)
15700 	      off &= ~1;
15701 	    else
15702 	      {
15703 		/* Generate relocs for the dynamic linker, except in
15704 		   the case of TLSLD where we'll use one entry per
15705 		   module.  */
15706 		asection *relgot;
15707 		bfd_boolean ifunc;
15708 
15709 		*offp = off | 1;
15710 		relgot = NULL;
15711 		ifunc = (h != NULL
15712 			 ? h->elf.type == STT_GNU_IFUNC
15713 			 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
15714 		if (ifunc)
15715 		  {
15716 		    relgot = htab->elf.irelplt;
15717 		    if (indx == 0)
15718 		      htab->local_ifunc_resolver = 1;
15719 		    else if (is_static_defined (&h->elf))
15720 		      htab->maybe_local_ifunc_resolver = 1;
15721 		  }
15722 		else if (indx != 0
15723 			 || (bfd_link_pic (info)
15724 			     && (h == NULL
15725 				 || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
15726 			     && !(tls_type != 0
15727 				  && bfd_link_executable (info)
15728 				  && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
15729 		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
15730 		if (relgot != NULL)
15731 		  {
15732 		    outrel.r_offset = (got->output_section->vma
15733 				       + got->output_offset
15734 				       + off);
15735 		    outrel.r_addend = orig_rel.r_addend;
15736 		    if (tls_type & (TLS_LD | TLS_GD))
15737 		      {
15738 			outrel.r_addend = 0;
15739 			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
15740 			if (tls_type == (TLS_TLS | TLS_GD))
15741 			  {
15742 			    loc = relgot->contents;
15743 			    loc += (relgot->reloc_count++
15744 				    * sizeof (Elf64_External_Rela));
15745 			    bfd_elf64_swap_reloca_out (output_bfd,
15746 						       &outrel, loc);
15747 			    outrel.r_offset += 8;
15748 			    outrel.r_addend = orig_rel.r_addend;
15749 			    outrel.r_info
15750 			      = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15751 			  }
15752 		      }
15753 		    else if (tls_type == (TLS_TLS | TLS_DTPREL))
15754 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15755 		    else if (tls_type == (TLS_TLS | TLS_TPREL))
15756 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
15757 		    else if (indx != 0)
15758 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
15759 		    else
15760 		      {
15761 			if (ifunc)
15762 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
15763 			else
15764 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
15765 
15766 			/* Write the .got section contents for the sake
15767 			   of prelink.  */
15768 			loc = got->contents + off;
15769 			bfd_put_64 (output_bfd, outrel.r_addend + relocation,
15770 				    loc);
15771 		      }
15772 
15773 		    if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
15774 		      {
15775 			outrel.r_addend += relocation;
15776 			if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
15777 			  {
15778 			    if (htab->elf.tls_sec == NULL)
15779 			      outrel.r_addend = 0;
15780 			    else
15781 			      outrel.r_addend -= htab->elf.tls_sec->vma;
15782 			  }
15783 		      }
15784 		    loc = relgot->contents;
15785 		    loc += (relgot->reloc_count++
15786 			    * sizeof (Elf64_External_Rela));
15787 		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
15788 		  }
15789 
15790 		/* Init the .got section contents here if we're not
15791 		   emitting a reloc.  */
15792 		else
15793 		  {
15794 		    relocation += orig_rel.r_addend;
15795 		    if (tls_type != 0)
15796 		      {
15797 			if (htab->elf.tls_sec == NULL)
15798 			  relocation = 0;
15799 			else
15800 			  {
15801 			    if (tls_type & TLS_LD)
15802 			      relocation = 0;
15803 			    else
15804 			      relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
15805 			    if (tls_type & TLS_TPREL)
15806 			      relocation += DTP_OFFSET - TP_OFFSET;
15807 			  }
15808 
15809 			if (tls_type & (TLS_GD | TLS_LD))
15810 			  {
15811 			    bfd_put_64 (output_bfd, relocation,
15812 					got->contents + off + 8);
15813 			    relocation = 1;
15814 			  }
15815 		      }
15816 		    bfd_put_64 (output_bfd, relocation,
15817 				got->contents + off);
15818 		  }
15819 	      }
15820 
15821 	    if (off >= (bfd_vma) -2)
15822 	      abort ();
15823 
15824 	    relocation = got->output_section->vma + got->output_offset + off;
15825 	    addend = 0;
15826 	    if (!(r_type == R_PPC64_GOT_PCREL34
15827 		  || r_type == R_PPC64_GOT_TLSGD34
15828 		  || r_type == R_PPC64_GOT_TLSLD34
15829 		  || r_type == R_PPC64_GOT_TPREL34
15830 		  || r_type == R_PPC64_GOT_DTPREL34))
15831 	      addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
15832 	  }
15833 	  break;
15834 
15835 	case R_PPC64_PLT16_HA:
15836 	case R_PPC64_PLT16_HI:
15837 	case R_PPC64_PLT16_LO:
15838 	case R_PPC64_PLT16_LO_DS:
15839 	case R_PPC64_PLT_PCREL34:
15840 	case R_PPC64_PLT_PCREL34_NOTOC:
15841 	case R_PPC64_PLT32:
15842 	case R_PPC64_PLT64:
15843 	case R_PPC64_PLTSEQ:
15844 	case R_PPC64_PLTSEQ_NOTOC:
15845 	case R_PPC64_PLTCALL:
15846 	case R_PPC64_PLTCALL_NOTOC:
15847 	  /* Relocation is to the entry for this symbol in the
15848 	     procedure linkage table.  */
15849 	  unresolved_reloc = TRUE;
15850 	  {
15851 	    struct plt_entry **plt_list = NULL;
15852 	    if (h != NULL)
15853 	      plt_list = &h->elf.plt.plist;
15854 	    else if (local_got_ents != NULL)
15855 	      {
15856 		struct plt_entry **local_plt = (struct plt_entry **)
15857 		  (local_got_ents + symtab_hdr->sh_info);
15858 		plt_list = local_plt + r_symndx;
15859 	      }
15860 	    if (plt_list)
15861 	      {
15862 		struct plt_entry *ent;
15863 
15864 		for (ent = *plt_list; ent != NULL; ent = ent->next)
15865 		  if (ent->plt.offset != (bfd_vma) -1
15866 		      && ent->addend == orig_rel.r_addend)
15867 		    {
15868 		      asection *plt;
15869 		      bfd_vma got;
15870 
15871 		      plt = htab->elf.splt;
15872 		      if (!htab->elf.dynamic_sections_created
15873 			  || h == NULL
15874 			  || h->elf.dynindx == -1)
15875 			{
15876 			  if (h != NULL
15877 			      ? h->elf.type == STT_GNU_IFUNC
15878 			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
15879 			    plt = htab->elf.iplt;
15880 			  else
15881 			    plt = htab->pltlocal;
15882 			}
15883 		      relocation = (plt->output_section->vma
15884 				    + plt->output_offset
15885 				    + ent->plt.offset);
15886 		      if (r_type == R_PPC64_PLT16_HA
15887 			  || r_type == R_PPC64_PLT16_HI
15888 			  || r_type == R_PPC64_PLT16_LO
15889 			  || r_type == R_PPC64_PLT16_LO_DS)
15890 			{
15891 			  got = (elf_gp (output_bfd)
15892 				 + htab->sec_info[input_section->id].toc_off);
15893 			  relocation -= got;
15894 			}
15895 		      addend = 0;
15896 		      unresolved_reloc = FALSE;
15897 		      break;
15898 		    }
15899 	      }
15900 	  }
15901 	  break;
15902 
15903 	case R_PPC64_TOC:
15904 	  /* Relocation value is TOC base.  */
15905 	  relocation = TOCstart;
15906 	  if (r_symndx == STN_UNDEF)
15907 	    relocation += htab->sec_info[input_section->id].toc_off;
15908 	  else if (unresolved_reloc)
15909 	    ;
15910 	  else if (sec != NULL && sec->id < htab->sec_info_arr_size)
15911 	    relocation += htab->sec_info[sec->id].toc_off;
15912 	  else
15913 	    unresolved_reloc = TRUE;
15914 	  goto dodyn;
15915 
15916 	  /* TOC16 relocs.  We want the offset relative to the TOC base,
15917 	     which is the address of the start of the TOC plus 0x8000.
15918 	     The TOC consists of sections .got, .toc, .tocbss, and .plt,
15919 	     in this order.  */
15920 	case R_PPC64_TOC16:
15921 	case R_PPC64_TOC16_LO:
15922 	case R_PPC64_TOC16_HI:
15923 	case R_PPC64_TOC16_DS:
15924 	case R_PPC64_TOC16_LO_DS:
15925 	case R_PPC64_TOC16_HA:
15926 	  addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
15927 	  if (h != NULL)
15928 	    goto dodyn;
15929 	  break;
15930 
15931 	  /* Relocate against the beginning of the section.  */
15932 	case R_PPC64_SECTOFF:
15933 	case R_PPC64_SECTOFF_LO:
15934 	case R_PPC64_SECTOFF_HI:
15935 	case R_PPC64_SECTOFF_DS:
15936 	case R_PPC64_SECTOFF_LO_DS:
15937 	case R_PPC64_SECTOFF_HA:
15938 	  if (sec != NULL)
15939 	    addend -= sec->output_section->vma;
15940 	  break;
15941 
15942 	case R_PPC64_REL16:
15943 	case R_PPC64_REL16_LO:
15944 	case R_PPC64_REL16_HI:
15945 	case R_PPC64_REL16_HA:
15946 	case R_PPC64_REL16_HIGH:
15947 	case R_PPC64_REL16_HIGHA:
15948 	case R_PPC64_REL16_HIGHER:
15949 	case R_PPC64_REL16_HIGHERA:
15950 	case R_PPC64_REL16_HIGHEST:
15951 	case R_PPC64_REL16_HIGHESTA:
15952 	case R_PPC64_REL16_HIGHER34:
15953 	case R_PPC64_REL16_HIGHERA34:
15954 	case R_PPC64_REL16_HIGHEST34:
15955 	case R_PPC64_REL16_HIGHESTA34:
15956 	case R_PPC64_REL16DX_HA:
15957 	case R_PPC64_REL14:
15958 	case R_PPC64_REL14_BRNTAKEN:
15959 	case R_PPC64_REL14_BRTAKEN:
15960 	case R_PPC64_REL24:
15961 	case R_PPC64_REL24_NOTOC:
15962 	case R_PPC64_PCREL34:
15963 	case R_PPC64_PCREL28:
15964 	  break;
15965 
15966 	case R_PPC64_TPREL16:
15967 	case R_PPC64_TPREL16_LO:
15968 	case R_PPC64_TPREL16_HI:
15969 	case R_PPC64_TPREL16_HA:
15970 	case R_PPC64_TPREL16_DS:
15971 	case R_PPC64_TPREL16_LO_DS:
15972 	case R_PPC64_TPREL16_HIGH:
15973 	case R_PPC64_TPREL16_HIGHA:
15974 	case R_PPC64_TPREL16_HIGHER:
15975 	case R_PPC64_TPREL16_HIGHERA:
15976 	case R_PPC64_TPREL16_HIGHEST:
15977 	case R_PPC64_TPREL16_HIGHESTA:
15978 	case R_PPC64_TPREL34:
15979 	  if (h != NULL
15980 	      && h->elf.root.type == bfd_link_hash_undefweak
15981 	      && h->elf.dynindx == -1)
15982 	    {
15983 	      /* Make this relocation against an undefined weak symbol
15984 		 resolve to zero.  This is really just a tweak, since
15985 		 code using weak externs ought to check that they are
15986 		 defined before using them.  */
15987 	      bfd_byte *p = contents + rel->r_offset - d_offset;
15988 
15989 	      insn = bfd_get_32 (input_bfd, p);
15990 	      insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
15991 	      if (insn != 0)
15992 		bfd_put_32 (input_bfd, insn, p);
15993 	      break;
15994 	    }
15995 	  if (htab->elf.tls_sec != NULL)
15996 	    addend -= htab->elf.tls_sec->vma + TP_OFFSET;
15997 	  /* The TPREL16 relocs shouldn't really be used in shared
15998 	     libs or with non-local symbols as that will result in
15999 	     DT_TEXTREL being set, but support them anyway.  */
16000 	  goto dodyn;
16001 
16002 	case R_PPC64_DTPREL16:
16003 	case R_PPC64_DTPREL16_LO:
16004 	case R_PPC64_DTPREL16_HI:
16005 	case R_PPC64_DTPREL16_HA:
16006 	case R_PPC64_DTPREL16_DS:
16007 	case R_PPC64_DTPREL16_LO_DS:
16008 	case R_PPC64_DTPREL16_HIGH:
16009 	case R_PPC64_DTPREL16_HIGHA:
16010 	case R_PPC64_DTPREL16_HIGHER:
16011 	case R_PPC64_DTPREL16_HIGHERA:
16012 	case R_PPC64_DTPREL16_HIGHEST:
16013 	case R_PPC64_DTPREL16_HIGHESTA:
16014 	case R_PPC64_DTPREL34:
16015 	  if (htab->elf.tls_sec != NULL)
16016 	    addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16017 	  break;
16018 
16019 	case R_PPC64_ADDR64_LOCAL:
16020 	  addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
16021 					      ? h->elf.other
16022 					      : sym->st_other);
16023 	  break;
16024 
16025 	case R_PPC64_DTPMOD64:
16026 	  relocation = 1;
16027 	  addend = 0;
16028 	  goto dodyn;
16029 
16030 	case R_PPC64_TPREL64:
16031 	  if (htab->elf.tls_sec != NULL)
16032 	    addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16033 	  goto dodyn;
16034 
16035 	case R_PPC64_DTPREL64:
16036 	  if (htab->elf.tls_sec != NULL)
16037 	    addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16038 	  /* Fall through.  */
16039 
16040 	  /* Relocations that may need to be propagated if this is a
16041 	     dynamic object.  */
16042 	case R_PPC64_REL30:
16043 	case R_PPC64_REL32:
16044 	case R_PPC64_REL64:
16045 	case R_PPC64_ADDR14:
16046 	case R_PPC64_ADDR14_BRNTAKEN:
16047 	case R_PPC64_ADDR14_BRTAKEN:
16048 	case R_PPC64_ADDR16:
16049 	case R_PPC64_ADDR16_DS:
16050 	case R_PPC64_ADDR16_HA:
16051 	case R_PPC64_ADDR16_HI:
16052 	case R_PPC64_ADDR16_HIGH:
16053 	case R_PPC64_ADDR16_HIGHA:
16054 	case R_PPC64_ADDR16_HIGHER:
16055 	case R_PPC64_ADDR16_HIGHERA:
16056 	case R_PPC64_ADDR16_HIGHEST:
16057 	case R_PPC64_ADDR16_HIGHESTA:
16058 	case R_PPC64_ADDR16_LO:
16059 	case R_PPC64_ADDR16_LO_DS:
16060 	case R_PPC64_ADDR16_HIGHER34:
16061 	case R_PPC64_ADDR16_HIGHERA34:
16062 	case R_PPC64_ADDR16_HIGHEST34:
16063 	case R_PPC64_ADDR16_HIGHESTA34:
16064 	case R_PPC64_ADDR24:
16065 	case R_PPC64_ADDR32:
16066 	case R_PPC64_ADDR64:
16067 	case R_PPC64_UADDR16:
16068 	case R_PPC64_UADDR32:
16069 	case R_PPC64_UADDR64:
16070 	case R_PPC64_D34:
16071 	case R_PPC64_D34_LO:
16072 	case R_PPC64_D34_HI30:
16073 	case R_PPC64_D34_HA30:
16074 	case R_PPC64_D28:
16075 	dodyn:
16076 	  if ((input_section->flags & SEC_ALLOC) == 0)
16077 	    break;
16078 
16079 	  if (NO_OPD_RELOCS && is_opd)
16080 	    break;
16081 
16082 	  if (bfd_link_pic (info)
16083 	      ? ((h == NULL
16084 		  || h->dyn_relocs != NULL)
16085 		 && ((h != NULL && pc_dynrelocs (h))
16086 		     || must_be_dyn_reloc (info, r_type)))
16087 	      : (h != NULL
16088 		 ? h->dyn_relocs != NULL
16089 		 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16090 	    {
16091 	      bfd_boolean skip, relocate;
16092 	      asection *sreloc;
16093 	      bfd_vma out_off;
16094 	      long indx = 0;
16095 
16096 	      /* When generating a dynamic object, these relocations
16097 		 are copied into the output file to be resolved at run
16098 		 time.  */
16099 
16100 	      skip = FALSE;
16101 	      relocate = FALSE;
16102 
16103 	      out_off = _bfd_elf_section_offset (output_bfd, info,
16104 						 input_section, rel->r_offset);
16105 	      if (out_off == (bfd_vma) -1)
16106 		skip = TRUE;
16107 	      else if (out_off == (bfd_vma) -2)
16108 		skip = TRUE, relocate = TRUE;
16109 	      out_off += (input_section->output_section->vma
16110 			  + input_section->output_offset);
16111 	      outrel.r_offset = out_off;
16112 	      outrel.r_addend = rel->r_addend;
16113 
16114 	      /* Optimize unaligned reloc use.  */
16115 	      if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
16116 		  || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
16117 		r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
16118 	      else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
16119 		       || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
16120 		r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
16121 	      else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
16122 		       || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
16123 		r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
16124 
16125 	      if (skip)
16126 		memset (&outrel, 0, sizeof outrel);
16127 	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16128 		       && !is_opd
16129 		       && r_type != R_PPC64_TOC)
16130 		{
16131 		  indx = h->elf.dynindx;
16132 		  BFD_ASSERT (indx != -1);
16133 		  outrel.r_info = ELF64_R_INFO (indx, r_type);
16134 		}
16135 	      else
16136 		{
16137 		  /* This symbol is local, or marked to become local,
16138 		     or this is an opd section reloc which must point
16139 		     at a local function.  */
16140 		  outrel.r_addend += relocation;
16141 		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
16142 		    {
16143 		      if (is_opd && h != NULL)
16144 			{
16145 			  /* Lie about opd entries.  This case occurs
16146 			     when building shared libraries and we
16147 			     reference a function in another shared
16148 			     lib.  The same thing happens for a weak
16149 			     definition in an application that's
16150 			     overridden by a strong definition in a
16151 			     shared lib.  (I believe this is a generic
16152 			     bug in binutils handling of weak syms.)
16153 			     In these cases we won't use the opd
16154 			     entry in this lib.  */
16155 			  unresolved_reloc = FALSE;
16156 			}
16157 		      if (!is_opd
16158 			  && r_type == R_PPC64_ADDR64
16159 			  && (h != NULL
16160 			      ? h->elf.type == STT_GNU_IFUNC
16161 			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16162 			outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16163 		      else
16164 			{
16165 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16166 
16167 			  /* We need to relocate .opd contents for ld.so.
16168 			     Prelink also wants simple and consistent rules
16169 			     for relocs.  This make all RELATIVE relocs have
16170 			     *r_offset equal to r_addend.  */
16171 			  relocate = TRUE;
16172 			}
16173 		    }
16174 		  else
16175 		    {
16176 		      if (h != NULL
16177 			  ? h->elf.type == STT_GNU_IFUNC
16178 			  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16179 			{
16180 			  info->callbacks->einfo
16181 			    /* xgettext:c-format */
16182 			    (_("%H: %s for indirect "
16183 			       "function `%pT' unsupported\n"),
16184 			     input_bfd, input_section, rel->r_offset,
16185 			     ppc64_elf_howto_table[r_type]->name,
16186 			     sym_name);
16187 			  ret = FALSE;
16188 			}
16189 		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
16190 			;
16191 		      else if (sec == NULL || sec->owner == NULL)
16192 			{
16193 			  bfd_set_error (bfd_error_bad_value);
16194 			  return FALSE;
16195 			}
16196 		      else
16197 			{
16198 			  asection *osec = sec->output_section;
16199 
16200 			  if ((osec->flags & SEC_THREAD_LOCAL) != 0)
16201 			    {
16202 			      /* TLS symbol values are relative to the
16203 				 TLS segment.  Dynamic relocations for
16204 				 local TLS symbols therefore can't be
16205 				 reduced to a relocation against their
16206 				 section symbol because it holds the
16207 				 address of the section, not a value
16208 				 relative to the TLS segment.  We could
16209 				 change the .tdata dynamic section symbol
16210 				 to be zero value but STN_UNDEF works
16211 				 and is used elsewhere, eg. for TPREL64
16212 				 GOT relocs against local TLS symbols.  */
16213 			      osec = htab->elf.tls_sec;
16214 			      indx = 0;
16215 			    }
16216 			  else
16217 			    {
16218 			      indx = elf_section_data (osec)->dynindx;
16219 			      if (indx == 0)
16220 				{
16221 				  if ((osec->flags & SEC_READONLY) == 0
16222 				      && htab->elf.data_index_section != NULL)
16223 				    osec = htab->elf.data_index_section;
16224 				  else
16225 				    osec = htab->elf.text_index_section;
16226 				  indx = elf_section_data (osec)->dynindx;
16227 				}
16228 			      BFD_ASSERT (indx != 0);
16229 			    }
16230 
16231 			  /* We are turning this relocation into one
16232 			     against a section symbol, so subtract out
16233 			     the output section's address but not the
16234 			     offset of the input section in the output
16235 			     section.  */
16236 			  outrel.r_addend -= osec->vma;
16237 			}
16238 
16239 		      outrel.r_info = ELF64_R_INFO (indx, r_type);
16240 		    }
16241 		}
16242 
16243 	      sreloc = elf_section_data (input_section)->sreloc;
16244 	      if (h != NULL
16245 		  ? h->elf.type == STT_GNU_IFUNC
16246 		  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16247 		{
16248 		  sreloc = htab->elf.irelplt;
16249 		  if (indx == 0)
16250 		    htab->local_ifunc_resolver = 1;
16251 		  else if (is_static_defined (&h->elf))
16252 		    htab->maybe_local_ifunc_resolver = 1;
16253 		}
16254 	      if (sreloc == NULL)
16255 		abort ();
16256 
16257 	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
16258 		  >= sreloc->size)
16259 		abort ();
16260 	      loc = sreloc->contents;
16261 	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
16262 	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16263 
16264 	      if (!warned_dynamic
16265 		  && !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
16266 		{
16267 		  info->callbacks->einfo
16268 		    /* xgettext:c-format */
16269 		    (_("%X%P: %pB: %s against %pT "
16270 		       "is not supported by glibc as a dynamic relocation\n"),
16271 		     input_bfd,
16272 		     ppc64_elf_howto_table[ELF64_R_TYPE (outrel.r_info)]->name,
16273 		     sym_name);
16274 		  warned_dynamic = TRUE;
16275 		}
16276 
16277 	      /* If this reloc is against an external symbol, it will
16278 		 be computed at runtime, so there's no need to do
16279 		 anything now.  However, for the sake of prelink ensure
16280 		 that the section contents are a known value.  */
16281 	      if (!relocate)
16282 		{
16283 		  unresolved_reloc = FALSE;
16284 		  /* The value chosen here is quite arbitrary as ld.so
16285 		     ignores section contents except for the special
16286 		     case of .opd where the contents might be accessed
16287 		     before relocation.  Choose zero, as that won't
16288 		     cause reloc overflow.  */
16289 		  relocation = 0;
16290 		  addend = 0;
16291 		  /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
16292 		     to improve backward compatibility with older
16293 		     versions of ld.  */
16294 		  if (r_type == R_PPC64_ADDR64)
16295 		    addend = outrel.r_addend;
16296 		  /* Adjust pc_relative relocs to have zero in *r_offset.  */
16297 		  else if (ppc64_elf_howto_table[r_type]->pc_relative)
16298 		    addend = outrel.r_offset;
16299 		}
16300 	    }
16301 	  break;
16302 
16303 	case R_PPC64_COPY:
16304 	case R_PPC64_GLOB_DAT:
16305 	case R_PPC64_JMP_SLOT:
16306 	case R_PPC64_JMP_IREL:
16307 	case R_PPC64_RELATIVE:
16308 	  /* We shouldn't ever see these dynamic relocs in relocatable
16309 	     files.  */
16310 	  /* Fall through.  */
16311 
16312 	case R_PPC64_PLTGOT16:
16313 	case R_PPC64_PLTGOT16_DS:
16314 	case R_PPC64_PLTGOT16_HA:
16315 	case R_PPC64_PLTGOT16_HI:
16316 	case R_PPC64_PLTGOT16_LO:
16317 	case R_PPC64_PLTGOT16_LO_DS:
16318 	case R_PPC64_PLTREL32:
16319 	case R_PPC64_PLTREL64:
16320 	  /* These ones haven't been implemented yet.  */
16321 
16322 	  info->callbacks->einfo
16323 	    /* xgettext:c-format */
16324 	    (_("%P: %pB: %s is not supported for `%pT'\n"),
16325 	     input_bfd,
16326 	     ppc64_elf_howto_table[r_type]->name, sym_name);
16327 
16328 	  bfd_set_error (bfd_error_invalid_operation);
16329 	  ret = FALSE;
16330 	  goto copy_reloc;
16331 	}
16332 
16333       /* Multi-instruction sequences that access the TOC can be
16334 	 optimized, eg. addis ra,r2,0; addi rb,ra,x;
16335 	 to		nop;	       addi rb,r2,x;  */
16336       switch (r_type)
16337 	{
16338 	default:
16339 	  break;
16340 
16341 	case R_PPC64_GOT_TLSLD16_HI:
16342 	case R_PPC64_GOT_TLSGD16_HI:
16343 	case R_PPC64_GOT_TPREL16_HI:
16344 	case R_PPC64_GOT_DTPREL16_HI:
16345 	case R_PPC64_GOT16_HI:
16346 	case R_PPC64_TOC16_HI:
16347 	  /* These relocs would only be useful if building up an
16348 	     offset to later add to r2, perhaps in an indexed
16349 	     addressing mode instruction.  Don't try to optimize.
16350 	     Unfortunately, the possibility of someone building up an
16351 	     offset like this or even with the HA relocs, means that
16352 	     we need to check the high insn when optimizing the low
16353 	     insn.  */
16354 	  break;
16355 
16356 	case R_PPC64_PLTCALL_NOTOC:
16357 	  if (!unresolved_reloc)
16358 	    htab->notoc_plt = 1;
16359 	  /* Fall through.  */
16360 	case R_PPC64_PLTCALL:
16361 	  if (unresolved_reloc)
16362 	    {
16363 	      /* No plt entry.  Make this into a direct call.  */
16364 	      bfd_byte *p = contents + rel->r_offset;
16365 	      insn = bfd_get_32 (input_bfd, p);
16366 	      insn &= 1;
16367 	      bfd_put_32 (input_bfd, B_DOT | insn, p);
16368 	      if (r_type == R_PPC64_PLTCALL)
16369 		bfd_put_32 (input_bfd, NOP, p + 4);
16370 	      unresolved_reloc = save_unresolved_reloc;
16371 	      r_type = R_PPC64_REL24;
16372 	    }
16373 	  break;
16374 
16375 	case R_PPC64_PLTSEQ_NOTOC:
16376 	case R_PPC64_PLTSEQ:
16377 	  if (unresolved_reloc)
16378 	    {
16379 	      unresolved_reloc = FALSE;
16380 	      goto nop_it;
16381 	    }
16382 	  break;
16383 
16384 	case R_PPC64_PLT_PCREL34_NOTOC:
16385 	  if (!unresolved_reloc)
16386 	    htab->notoc_plt = 1;
16387 	  /* Fall through.  */
16388 	case R_PPC64_PLT_PCREL34:
16389 	  if (unresolved_reloc)
16390 	    {
16391 	      bfd_byte *p = contents + rel->r_offset;
16392 	      bfd_put_32 (input_bfd, PNOP >> 32, p);
16393 	      bfd_put_32 (input_bfd, PNOP, p + 4);
16394 	      unresolved_reloc = FALSE;
16395 	      goto copy_reloc;
16396 	    }
16397 	  break;
16398 
16399 	case R_PPC64_PLT16_HA:
16400 	  if (unresolved_reloc)
16401 	    {
16402 	      unresolved_reloc = FALSE;
16403 	      goto nop_it;
16404 	    }
16405 	  /* Fall through.  */
16406 	case R_PPC64_GOT_TLSLD16_HA:
16407 	case R_PPC64_GOT_TLSGD16_HA:
16408 	case R_PPC64_GOT_TPREL16_HA:
16409 	case R_PPC64_GOT_DTPREL16_HA:
16410 	case R_PPC64_GOT16_HA:
16411 	case R_PPC64_TOC16_HA:
16412 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16413 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16414 	    {
16415 	      bfd_byte *p;
16416 	    nop_it:
16417 	      p = contents + (rel->r_offset & ~3);
16418 	      bfd_put_32 (input_bfd, NOP, p);
16419 	      goto copy_reloc;
16420 	    }
16421 	  break;
16422 
16423 	case R_PPC64_PLT16_LO:
16424 	case R_PPC64_PLT16_LO_DS:
16425 	  if (unresolved_reloc)
16426 	    {
16427 	      unresolved_reloc = FALSE;
16428 	      goto nop_it;
16429 	    }
16430 	  /* Fall through.  */
16431 	case R_PPC64_GOT_TLSLD16_LO:
16432 	case R_PPC64_GOT_TLSGD16_LO:
16433 	case R_PPC64_GOT_TPREL16_LO_DS:
16434 	case R_PPC64_GOT_DTPREL16_LO_DS:
16435 	case R_PPC64_GOT16_LO:
16436 	case R_PPC64_GOT16_LO_DS:
16437 	case R_PPC64_TOC16_LO:
16438 	case R_PPC64_TOC16_LO_DS:
16439 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16440 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16441 	    {
16442 	      bfd_byte *p = contents + (rel->r_offset & ~3);
16443 	      insn = bfd_get_32 (input_bfd, p);
16444 	      if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */)
16445 		{
16446 		  /* Transform addic to addi when we change reg.  */
16447 		  insn &= ~((0x3fu << 26) | (0x1f << 16));
16448 		  insn |= (14u << 26) | (2 << 16);
16449 		}
16450 	      else
16451 		{
16452 		  insn &= ~(0x1f << 16);
16453 		  insn |= 2 << 16;
16454 		}
16455 	      bfd_put_32 (input_bfd, insn, p);
16456 	    }
16457 	  break;
16458 
16459 	case R_PPC64_TPREL16_HA:
16460 	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16461 	    {
16462 	      bfd_byte *p = contents + (rel->r_offset & ~3);
16463 	      insn = bfd_get_32 (input_bfd, p);
16464 	      if ((insn & ((0x3fu << 26) | 0x1f << 16))
16465 		  != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
16466 		/* xgettext:c-format */
16467 		info->callbacks->minfo
16468 		  (_("%H: warning: %s unexpected insn %#x.\n"),
16469 		   input_bfd, input_section, rel->r_offset,
16470 		   ppc64_elf_howto_table[r_type]->name, insn);
16471 	      else
16472 		{
16473 		  bfd_put_32 (input_bfd, NOP, p);
16474 		  goto copy_reloc;
16475 		}
16476 	    }
16477 	  break;
16478 
16479 	case R_PPC64_TPREL16_LO:
16480 	case R_PPC64_TPREL16_LO_DS:
16481 	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16482 	    {
16483 	      bfd_byte *p = contents + (rel->r_offset & ~3);
16484 	      insn = bfd_get_32 (input_bfd, p);
16485 	      insn &= ~(0x1f << 16);
16486 	      insn |= 13 << 16;
16487 	      bfd_put_32 (input_bfd, insn, p);
16488 	    }
16489 	  break;
16490 	}
16491 
16492       /* Do any further special processing.  */
16493       switch (r_type)
16494 	{
16495 	default:
16496 	  break;
16497 
16498 	case R_PPC64_REL16_HA:
16499 	case R_PPC64_REL16_HIGHA:
16500 	case R_PPC64_REL16_HIGHERA:
16501 	case R_PPC64_REL16_HIGHESTA:
16502 	case R_PPC64_REL16DX_HA:
16503 	case R_PPC64_ADDR16_HA:
16504 	case R_PPC64_ADDR16_HIGHA:
16505 	case R_PPC64_ADDR16_HIGHERA:
16506 	case R_PPC64_ADDR16_HIGHESTA:
16507 	case R_PPC64_TOC16_HA:
16508 	case R_PPC64_SECTOFF_HA:
16509 	case R_PPC64_TPREL16_HA:
16510 	case R_PPC64_TPREL16_HIGHA:
16511 	case R_PPC64_TPREL16_HIGHERA:
16512 	case R_PPC64_TPREL16_HIGHESTA:
16513 	case R_PPC64_DTPREL16_HA:
16514 	case R_PPC64_DTPREL16_HIGHA:
16515 	case R_PPC64_DTPREL16_HIGHERA:
16516 	case R_PPC64_DTPREL16_HIGHESTA:
16517 	  /* It's just possible that this symbol is a weak symbol
16518 	     that's not actually defined anywhere. In that case,
16519 	     'sec' would be NULL, and we should leave the symbol
16520 	     alone (it will be set to zero elsewhere in the link).  */
16521 	  if (sec == NULL)
16522 	    break;
16523 	  /* Fall through.  */
16524 
16525 	case R_PPC64_GOT16_HA:
16526 	case R_PPC64_PLTGOT16_HA:
16527 	case R_PPC64_PLT16_HA:
16528 	case R_PPC64_GOT_TLSGD16_HA:
16529 	case R_PPC64_GOT_TLSLD16_HA:
16530 	case R_PPC64_GOT_TPREL16_HA:
16531 	case R_PPC64_GOT_DTPREL16_HA:
16532 	  /* Add 0x10000 if sign bit in 0:15 is set.
16533 	     Bits 0:15 are not used.  */
16534 	  addend += 0x8000;
16535 	  break;
16536 
16537 	case R_PPC64_D34_HA30:
16538 	case R_PPC64_ADDR16_HIGHERA34:
16539 	case R_PPC64_ADDR16_HIGHESTA34:
16540 	case R_PPC64_REL16_HIGHERA34:
16541 	case R_PPC64_REL16_HIGHESTA34:
16542 	  if (sec != NULL)
16543 	    addend += 1ULL << 33;
16544 	  break;
16545 
16546 	case R_PPC64_ADDR16_DS:
16547 	case R_PPC64_ADDR16_LO_DS:
16548 	case R_PPC64_GOT16_DS:
16549 	case R_PPC64_GOT16_LO_DS:
16550 	case R_PPC64_PLT16_LO_DS:
16551 	case R_PPC64_SECTOFF_DS:
16552 	case R_PPC64_SECTOFF_LO_DS:
16553 	case R_PPC64_TOC16_DS:
16554 	case R_PPC64_TOC16_LO_DS:
16555 	case R_PPC64_PLTGOT16_DS:
16556 	case R_PPC64_PLTGOT16_LO_DS:
16557 	case R_PPC64_GOT_TPREL16_DS:
16558 	case R_PPC64_GOT_TPREL16_LO_DS:
16559 	case R_PPC64_GOT_DTPREL16_DS:
16560 	case R_PPC64_GOT_DTPREL16_LO_DS:
16561 	case R_PPC64_TPREL16_DS:
16562 	case R_PPC64_TPREL16_LO_DS:
16563 	case R_PPC64_DTPREL16_DS:
16564 	case R_PPC64_DTPREL16_LO_DS:
16565 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16566 	  mask = 3;
16567 	  /* If this reloc is against an lq, lxv, or stxv insn, then
16568 	     the value must be a multiple of 16.  This is somewhat of
16569 	     a hack, but the "correct" way to do this by defining _DQ
16570 	     forms of all the _DS relocs bloats all reloc switches in
16571 	     this file.  It doesn't make much sense to use these
16572 	     relocs in data, so testing the insn should be safe.  */
16573 	  if ((insn & (0x3fu << 26)) == (56u << 26)
16574 	      || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1))
16575 	    mask = 15;
16576 	  relocation += addend;
16577 	  addend = insn & (mask ^ 3);
16578 	  if ((relocation & mask) != 0)
16579 	    {
16580 	      relocation ^= relocation & mask;
16581 	      info->callbacks->einfo
16582 		/* xgettext:c-format */
16583 		(_("%H: error: %s not a multiple of %u\n"),
16584 		 input_bfd, input_section, rel->r_offset,
16585 		 ppc64_elf_howto_table[r_type]->name,
16586 		 mask + 1);
16587 	      bfd_set_error (bfd_error_bad_value);
16588 	      ret = FALSE;
16589 	      goto copy_reloc;
16590 	    }
16591 	  break;
16592 	}
16593 
16594       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
16595 	 because such sections are not SEC_ALLOC and thus ld.so will
16596 	 not process them.  */
16597       howto = ppc64_elf_howto_table[(int) r_type];
16598       if (unresolved_reloc
16599 	  && !((input_section->flags & SEC_DEBUGGING) != 0
16600 	       && h->elf.def_dynamic)
16601 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
16602 				      rel->r_offset) != (bfd_vma) -1)
16603 	{
16604 	  info->callbacks->einfo
16605 	    /* xgettext:c-format */
16606 	    (_("%H: unresolvable %s against `%pT'\n"),
16607 	     input_bfd, input_section, rel->r_offset,
16608 	     howto->name,
16609 	     h->elf.root.root.string);
16610 	  ret = FALSE;
16611 	}
16612 
16613       /* 16-bit fields in insns mostly have signed values, but a
16614 	 few insns have 16-bit unsigned values.  Really, we should
16615 	 have different reloc types.  */
16616       if (howto->complain_on_overflow != complain_overflow_dont
16617 	  && howto->dst_mask == 0xffff
16618 	  && (input_section->flags & SEC_CODE) != 0)
16619 	{
16620 	  enum complain_overflow complain = complain_overflow_signed;
16621 
16622 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16623 	  if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
16624 	    complain = complain_overflow_bitfield;
16625 	  else if (howto->rightshift == 0
16626 		   ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
16627 		      || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
16628 		      || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
16629 		   : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */
16630 		      || (insn & (0x3fu << 26)) == 25u << 26 /* oris */
16631 		      || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */))
16632 	    complain = complain_overflow_unsigned;
16633 	  if (howto->complain_on_overflow != complain)
16634 	    {
16635 	      alt_howto = *howto;
16636 	      alt_howto.complain_on_overflow = complain;
16637 	      howto = &alt_howto;
16638 	    }
16639 	}
16640 
16641       switch (r_type)
16642 	{
16643 	  /* Split field relocs aren't handled by _bfd_final_link_relocate.  */
16644 	case R_PPC64_D34:
16645 	case R_PPC64_D34_LO:
16646 	case R_PPC64_D34_HI30:
16647 	case R_PPC64_D34_HA30:
16648 	case R_PPC64_PCREL34:
16649 	case R_PPC64_GOT_PCREL34:
16650 	case R_PPC64_TPREL34:
16651 	case R_PPC64_DTPREL34:
16652 	case R_PPC64_GOT_TLSGD34:
16653 	case R_PPC64_GOT_TLSLD34:
16654 	case R_PPC64_GOT_TPREL34:
16655 	case R_PPC64_GOT_DTPREL34:
16656 	case R_PPC64_PLT_PCREL34:
16657 	case R_PPC64_PLT_PCREL34_NOTOC:
16658 	case R_PPC64_D28:
16659 	case R_PPC64_PCREL28:
16660 	  if (rel->r_offset + 8 > input_section->size)
16661 	    r = bfd_reloc_outofrange;
16662 	  else
16663 	    {
16664 	      relocation += addend;
16665 	      if (howto->pc_relative)
16666 		relocation -= (rel->r_offset
16667 			       + input_section->output_offset
16668 			       + input_section->output_section->vma);
16669 	      relocation >>= howto->rightshift;
16670 
16671 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16672 	      pinsn <<= 32;
16673 	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
16674 
16675 	      pinsn &= ~howto->dst_mask;
16676 	      pinsn |= (((relocation << 16) | (relocation & 0xffff))
16677 			& howto->dst_mask);
16678 	      bfd_put_32 (input_bfd, pinsn >> 32, contents + rel->r_offset);
16679 	      bfd_put_32 (input_bfd, pinsn, contents + rel->r_offset + 4);
16680 	      r = bfd_reloc_ok;
16681 	      if (howto->complain_on_overflow == complain_overflow_signed
16682 		  && (relocation + (1ULL << (howto->bitsize - 1))
16683 		      >= 1ULL << howto->bitsize))
16684 		r = bfd_reloc_overflow;
16685 	    }
16686 	  break;
16687 
16688 	case R_PPC64_REL16DX_HA:
16689 	  if (rel->r_offset + 4 > input_section->size)
16690 	    r = bfd_reloc_outofrange;
16691 	  else
16692 	    {
16693 	      relocation += addend;
16694 	      relocation -= (rel->r_offset
16695 			     + input_section->output_offset
16696 			     + input_section->output_section->vma);
16697 	      relocation = (bfd_signed_vma) relocation >> 16;
16698 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16699 	      insn &= ~0x1fffc1;
16700 	      insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
16701 	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
16702 	      r = bfd_reloc_ok;
16703 	      if (relocation + 0x8000 > 0xffff)
16704 		r = bfd_reloc_overflow;
16705 	    }
16706 	  break;
16707 
16708 	default:
16709 	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
16710 					contents, rel->r_offset,
16711 					relocation, addend);
16712 	}
16713 
16714       if (r != bfd_reloc_ok)
16715 	{
16716 	  char *more_info = NULL;
16717 	  const char *reloc_name = howto->name;
16718 
16719 	  if (reloc_dest != DEST_NORMAL)
16720 	    {
16721 	      more_info = bfd_malloc (strlen (reloc_name) + 8);
16722 	      if (more_info != NULL)
16723 		{
16724 		  strcpy (more_info, reloc_name);
16725 		  strcat (more_info, (reloc_dest == DEST_OPD
16726 				      ? " (OPD)" : " (stub)"));
16727 		  reloc_name = more_info;
16728 		}
16729 	    }
16730 
16731 	  if (r == bfd_reloc_overflow)
16732 	    {
16733 	      /* On code like "if (foo) foo();" don't report overflow
16734 		 on a branch to zero when foo is undefined.  */
16735 	      if (!warned
16736 		  && (reloc_dest == DEST_STUB
16737 		      || !(h != NULL
16738 			   && (h->elf.root.type == bfd_link_hash_undefweak
16739 			       || h->elf.root.type == bfd_link_hash_undefined)
16740 			   && is_branch_reloc (r_type))))
16741 		info->callbacks->reloc_overflow (info, &h->elf.root,
16742 						 sym_name, reloc_name,
16743 						 orig_rel.r_addend,
16744 						 input_bfd, input_section,
16745 						 rel->r_offset);
16746 	    }
16747 	  else
16748 	    {
16749 	      info->callbacks->einfo
16750 		/* xgettext:c-format */
16751 		(_("%H: %s against `%pT': error %d\n"),
16752 		 input_bfd, input_section, rel->r_offset,
16753 		 reloc_name, sym_name, (int) r);
16754 	      ret = FALSE;
16755 	    }
16756 	  if (more_info != NULL)
16757 	    free (more_info);
16758 	}
16759     copy_reloc:
16760       if (wrel != rel)
16761 	*wrel = *rel;
16762     }
16763 
16764   if (wrel != rel)
16765     {
16766       Elf_Internal_Shdr *rel_hdr;
16767       size_t deleted = rel - wrel;
16768 
16769       rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
16770       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16771       if (rel_hdr->sh_size == 0)
16772 	{
16773 	  /* It is too late to remove an empty reloc section.  Leave
16774 	     one NONE reloc.
16775 	     ??? What is wrong with an empty section???  */
16776 	  rel_hdr->sh_size = rel_hdr->sh_entsize;
16777 	  deleted -= 1;
16778 	}
16779       rel_hdr = _bfd_elf_single_rel_hdr (input_section);
16780       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16781       input_section->reloc_count -= deleted;
16782     }
16783 
16784   /* If we're emitting relocations, then shortly after this function
16785      returns, reloc offsets and addends for this section will be
16786      adjusted.  Worse, reloc symbol indices will be for the output
16787      file rather than the input.  Save a copy of the relocs for
16788      opd_entry_value.  */
16789   if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
16790     {
16791       bfd_size_type amt;
16792       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
16793       rel = bfd_alloc (input_bfd, amt);
16794       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
16795       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
16796       if (rel == NULL)
16797 	return FALSE;
16798       memcpy (rel, relocs, amt);
16799     }
16800   return ret;
16801 }
16802 
16803 /* Adjust the value of any local symbols in opd sections.  */
16804 
16805 static int
16806 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
16807 			      const char *name ATTRIBUTE_UNUSED,
16808 			      Elf_Internal_Sym *elfsym,
16809 			      asection *input_sec,
16810 			      struct elf_link_hash_entry *h)
16811 {
16812   struct _opd_sec_data *opd;
16813   long adjust;
16814   bfd_vma value;
16815 
16816   if (h != NULL)
16817     return 1;
16818 
16819   opd = get_opd_info (input_sec);
16820   if (opd == NULL || opd->adjust == NULL)
16821     return 1;
16822 
16823   value = elfsym->st_value - input_sec->output_offset;
16824   if (!bfd_link_relocatable (info))
16825     value -= input_sec->output_section->vma;
16826 
16827   adjust = opd->adjust[OPD_NDX (value)];
16828   if (adjust == -1)
16829     return 2;
16830 
16831   elfsym->st_value += adjust;
16832   return 1;
16833 }
16834 
16835 /* Finish up dynamic symbol handling.  We set the contents of various
16836    dynamic sections here.  */
16837 
16838 static bfd_boolean
16839 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
16840 				 struct bfd_link_info *info,
16841 				 struct elf_link_hash_entry *h,
16842 				 Elf_Internal_Sym *sym)
16843 {
16844   struct ppc_link_hash_table *htab;
16845   struct plt_entry *ent;
16846 
16847   htab = ppc_hash_table (info);
16848   if (htab == NULL)
16849     return FALSE;
16850 
16851   if (!htab->opd_abi && !h->def_regular)
16852     for (ent = h->plt.plist; ent != NULL; ent = ent->next)
16853       if (ent->plt.offset != (bfd_vma) -1)
16854 	{
16855 	  /* Mark the symbol as undefined, rather than as
16856 	     defined in glink.  Leave the value if there were
16857 	     any relocations where pointer equality matters
16858 	     (this is a clue for the dynamic linker, to make
16859 	     function pointer comparisons work between an
16860 	     application and shared library), otherwise set it
16861 	     to zero.  */
16862 	  sym->st_shndx = SHN_UNDEF;
16863 	  if (!h->pointer_equality_needed)
16864 	    sym->st_value = 0;
16865 	  else if (!h->ref_regular_nonweak)
16866 	    {
16867 	      /* This breaks function pointer comparisons, but
16868 		 that is better than breaking tests for a NULL
16869 		 function pointer.  */
16870 	      sym->st_value = 0;
16871 	    }
16872 	  break;
16873 	}
16874 
16875   if (h->needs_copy
16876       && (h->root.type == bfd_link_hash_defined
16877 	  || h->root.type == bfd_link_hash_defweak)
16878       && (h->root.u.def.section == htab->elf.sdynbss
16879 	  || h->root.u.def.section == htab->elf.sdynrelro))
16880     {
16881       /* This symbol needs a copy reloc.  Set it up.  */
16882       Elf_Internal_Rela rela;
16883       asection *srel;
16884       bfd_byte *loc;
16885 
16886       if (h->dynindx == -1)
16887 	abort ();
16888 
16889       rela.r_offset = (h->root.u.def.value
16890 		       + h->root.u.def.section->output_section->vma
16891 		       + h->root.u.def.section->output_offset);
16892       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
16893       rela.r_addend = 0;
16894       if (h->root.u.def.section == htab->elf.sdynrelro)
16895 	srel = htab->elf.sreldynrelro;
16896       else
16897 	srel = htab->elf.srelbss;
16898       loc = srel->contents;
16899       loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
16900       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
16901     }
16902 
16903   return TRUE;
16904 }
16905 
16906 /* Used to decide how to sort relocs in an optimal manner for the
16907    dynamic linker, before writing them out.  */
16908 
16909 static enum elf_reloc_type_class
16910 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
16911 			    const asection *rel_sec,
16912 			    const Elf_Internal_Rela *rela)
16913 {
16914   enum elf_ppc64_reloc_type r_type;
16915   struct ppc_link_hash_table *htab = ppc_hash_table (info);
16916 
16917   if (rel_sec == htab->elf.irelplt)
16918     return reloc_class_ifunc;
16919 
16920   r_type = ELF64_R_TYPE (rela->r_info);
16921   switch (r_type)
16922     {
16923     case R_PPC64_RELATIVE:
16924       return reloc_class_relative;
16925     case R_PPC64_JMP_SLOT:
16926       return reloc_class_plt;
16927     case R_PPC64_COPY:
16928       return reloc_class_copy;
16929     default:
16930       return reloc_class_normal;
16931     }
16932 }
16933 
16934 /* Finish up the dynamic sections.  */
16935 
16936 static bfd_boolean
16937 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
16938 				   struct bfd_link_info *info)
16939 {
16940   struct ppc_link_hash_table *htab;
16941   bfd *dynobj;
16942   asection *sdyn;
16943 
16944   htab = ppc_hash_table (info);
16945   if (htab == NULL)
16946     return FALSE;
16947 
16948   dynobj = htab->elf.dynobj;
16949   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
16950 
16951   if (htab->elf.dynamic_sections_created)
16952     {
16953       Elf64_External_Dyn *dyncon, *dynconend;
16954 
16955       if (sdyn == NULL || htab->elf.sgot == NULL)
16956 	abort ();
16957 
16958       dyncon = (Elf64_External_Dyn *) sdyn->contents;
16959       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
16960       for (; dyncon < dynconend; dyncon++)
16961 	{
16962 	  Elf_Internal_Dyn dyn;
16963 	  asection *s;
16964 
16965 	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
16966 
16967 	  switch (dyn.d_tag)
16968 	    {
16969 	    default:
16970 	      continue;
16971 
16972 	    case DT_PPC64_GLINK:
16973 	      s = htab->glink;
16974 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16975 	      /* We stupidly defined DT_PPC64_GLINK to be the start
16976 		 of glink rather than the first entry point, which is
16977 		 what ld.so needs, and now have a bigger stub to
16978 		 support automatic multiple TOCs.  */
16979 	      dyn.d_un.d_ptr += GLINK_PLTRESOLVE_SIZE (htab) - 8 * 4;
16980 	      break;
16981 
16982 	    case DT_PPC64_OPD:
16983 	      s = bfd_get_section_by_name (output_bfd, ".opd");
16984 	      if (s == NULL)
16985 		continue;
16986 	      dyn.d_un.d_ptr = s->vma;
16987 	      break;
16988 
16989 	    case DT_PPC64_OPT:
16990 	      if ((htab->do_multi_toc && htab->multi_toc_needed)
16991 		  || htab->notoc_plt)
16992 		dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
16993 	      if (htab->has_plt_localentry0)
16994 		dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
16995 	      break;
16996 
16997 	    case DT_PPC64_OPDSZ:
16998 	      s = bfd_get_section_by_name (output_bfd, ".opd");
16999 	      if (s == NULL)
17000 		continue;
17001 	      dyn.d_un.d_val = s->size;
17002 	      break;
17003 
17004 	    case DT_PLTGOT:
17005 	      s = htab->elf.splt;
17006 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17007 	      break;
17008 
17009 	    case DT_JMPREL:
17010 	      s = htab->elf.srelplt;
17011 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17012 	      break;
17013 
17014 	    case DT_PLTRELSZ:
17015 	      dyn.d_un.d_val = htab->elf.srelplt->size;
17016 	      break;
17017 
17018 	    case DT_TEXTREL:
17019 	      if (htab->local_ifunc_resolver)
17020 		info->callbacks->einfo
17021 		  (_("%X%P: text relocations and GNU indirect "
17022 		     "functions will result in a segfault at runtime\n"));
17023 	      else if (htab->maybe_local_ifunc_resolver)
17024 		info->callbacks->einfo
17025 		  (_("%P: warning: text relocations and GNU indirect "
17026 		     "functions may result in a segfault at runtime\n"));
17027 	      continue;
17028 	    }
17029 
17030 	  bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
17031 	}
17032     }
17033 
17034   if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
17035       && htab->elf.sgot->output_section != bfd_abs_section_ptr)
17036     {
17037       /* Fill in the first entry in the global offset table.
17038 	 We use it to hold the link-time TOCbase.  */
17039       bfd_put_64 (output_bfd,
17040 		  elf_gp (output_bfd) + TOC_BASE_OFF,
17041 		  htab->elf.sgot->contents);
17042 
17043       /* Set .got entry size.  */
17044       elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
17045 	= 8;
17046     }
17047 
17048   if (htab->elf.splt != NULL && htab->elf.splt->size != 0
17049       && htab->elf.splt->output_section != bfd_abs_section_ptr)
17050     {
17051       /* Set .plt entry size.  */
17052       elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
17053 	= PLT_ENTRY_SIZE (htab);
17054     }
17055 
17056   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
17057      brlt ourselves if emitrelocations.  */
17058   if (htab->brlt != NULL
17059       && htab->brlt->reloc_count != 0
17060       && !_bfd_elf_link_output_relocs (output_bfd,
17061 				       htab->brlt,
17062 				       elf_section_data (htab->brlt)->rela.hdr,
17063 				       elf_section_data (htab->brlt)->relocs,
17064 				       NULL))
17065     return FALSE;
17066 
17067   if (htab->glink != NULL
17068       && htab->glink->reloc_count != 0
17069       && !_bfd_elf_link_output_relocs (output_bfd,
17070 				       htab->glink,
17071 				       elf_section_data (htab->glink)->rela.hdr,
17072 				       elf_section_data (htab->glink)->relocs,
17073 				       NULL))
17074     return FALSE;
17075 
17076 
17077   if (htab->glink_eh_frame != NULL
17078       && htab->glink_eh_frame->size != 0
17079       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
17080       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
17081 					   htab->glink_eh_frame,
17082 					   htab->glink_eh_frame->contents))
17083     return FALSE;
17084 
17085   /* We need to handle writing out multiple GOT sections ourselves,
17086      since we didn't add them to DYNOBJ.  We know dynobj is the first
17087      bfd.  */
17088   while ((dynobj = dynobj->link.next) != NULL)
17089     {
17090       asection *s;
17091 
17092       if (!is_ppc64_elf (dynobj))
17093 	continue;
17094 
17095       s = ppc64_elf_tdata (dynobj)->got;
17096       if (s != NULL
17097 	  && s->size != 0
17098 	  && s->output_section != bfd_abs_section_ptr
17099 	  && !bfd_set_section_contents (output_bfd, s->output_section,
17100 					s->contents, s->output_offset,
17101 					s->size))
17102 	return FALSE;
17103       s = ppc64_elf_tdata (dynobj)->relgot;
17104       if (s != NULL
17105 	  && s->size != 0
17106 	  && s->output_section != bfd_abs_section_ptr
17107 	  && !bfd_set_section_contents (output_bfd, s->output_section,
17108 					s->contents, s->output_offset,
17109 					s->size))
17110 	return FALSE;
17111     }
17112 
17113   return TRUE;
17114 }
17115 
17116 #include "elf64-target.h"
17117 
17118 /* FreeBSD support */
17119 
17120 #undef  TARGET_LITTLE_SYM
17121 #undef  TARGET_LITTLE_NAME
17122 
17123 #undef  TARGET_BIG_SYM
17124 #define TARGET_BIG_SYM	powerpc_elf64_fbsd_vec
17125 #undef  TARGET_BIG_NAME
17126 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
17127 
17128 #undef  ELF_OSABI
17129 #define	ELF_OSABI       ELFOSABI_FREEBSD
17130 
17131 #undef  elf64_bed
17132 #define elf64_bed	elf64_powerpc_fbsd_bed
17133 
17134 #include "elf64-target.h"
17135