elf64-ppc.c revision 1.9
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
41static bfd_reloc_status_type ppc64_elf_ha_reloc
42  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
43static bfd_reloc_status_type ppc64_elf_branch_reloc
44  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
45static bfd_reloc_status_type ppc64_elf_brtaken_reloc
46  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47static bfd_reloc_status_type ppc64_elf_sectoff_reloc
48  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
50  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51static bfd_reloc_status_type ppc64_elf_toc_reloc
52  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
54  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55static bfd_reloc_status_type ppc64_elf_toc64_reloc
56  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57static bfd_reloc_status_type ppc64_elf_prefix_reloc
58  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
59static bfd_reloc_status_type ppc64_elf_unhandled_reloc
60  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
61static 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_section_flags	      ppc64_elf_section_flags
129#define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
130#define elf_backend_merge_symbol	      ppc64_elf_merge_symbol
131#define elf_backend_get_reloc_section	      bfd_get_section_by_name
132
133/* The name of the dynamic interpreter.  This is put in the .interp
134   section.  */
135#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
136
137/* The size in bytes of an entry in the procedure linkage table.  */
138#define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
139#define LOCAL_PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 16 : 8)
140
141/* The initial size of the plt reserved for the dynamic linker.  */
142#define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
143
144/* Offsets to some stack save slots.  */
145#define STK_LR 16
146#define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
147/* This one is dodgy.  ELFv2 does not have a linker word, so use the
148   CR save slot.  Used only by optimised __tls_get_addr call stub,
149   relying on __tls_get_addr_opt not saving CR..  */
150#define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
151
152/* TOC base pointers offset from start of TOC.  */
153#define TOC_BASE_OFF	0x8000
154/* TOC base alignment.  */
155#define TOC_BASE_ALIGN	256
156
157/* Offset of tp and dtp pointers from start of TLS block.  */
158#define TP_OFFSET	0x7000
159#define DTP_OFFSET	0x8000
160
161/* .plt call stub instructions.  The normal stub is like this, but
162   sometimes the .plt entry crosses a 64k boundary and we need to
163   insert an addi to adjust r11.  */
164#define STD_R2_0R1	0xf8410000	/* std	 %r2,0+40(%r1)	     */
165#define ADDIS_R11_R2	0x3d620000	/* addis %r11,%r2,xxx@ha     */
166#define LD_R12_0R11	0xe98b0000	/* ld	 %r12,xxx+0@l(%r11)  */
167#define MTCTR_R12	0x7d8903a6	/* mtctr %r12		     */
168#define LD_R2_0R11	0xe84b0000	/* ld	 %r2,xxx+8@l(%r11)   */
169#define LD_R11_0R11	0xe96b0000	/* ld	 %r11,xxx+16@l(%r11) */
170#define BCTR		0x4e800420	/* bctr			     */
171
172#define ADDI_R11_R11	0x396b0000	/* addi %r11,%r11,off@l	 */
173#define ADDI_R12_R11	0x398b0000	/* addi %r12,%r11,off@l	 */
174#define ADDI_R12_R12	0x398c0000	/* addi %r12,%r12,off@l	 */
175#define ADDIS_R2_R2	0x3c420000	/* addis %r2,%r2,off@ha	 */
176#define ADDI_R2_R2	0x38420000	/* addi	 %r2,%r2,off@l	 */
177
178#define XOR_R2_R12_R12	0x7d826278	/* xor	 %r2,%r12,%r12	 */
179#define ADD_R11_R11_R2	0x7d6b1214	/* add	 %r11,%r11,%r2	 */
180#define XOR_R11_R12_R12	0x7d8b6278	/* xor	 %r11,%r12,%r12	 */
181#define ADD_R2_R2_R11	0x7c425a14	/* add	 %r2,%r2,%r11	 */
182#define CMPLDI_R2_0	0x28220000	/* cmpldi %r2,0		 */
183#define BNECTR		0x4ca20420	/* bnectr+		 */
184#define BNECTR_P4	0x4ce20420	/* bnectr+		 */
185
186#define LD_R12_0R2	0xe9820000	/* ld	 %r12,xxx+0(%r2) */
187#define LD_R11_0R2	0xe9620000	/* ld	 %r11,xxx+0(%r2) */
188#define LD_R2_0R2	0xe8420000	/* ld	 %r2,xxx+0(%r2)	 */
189
190#define LD_R2_0R1	0xe8410000	/* ld	 %r2,0(%r1)	 */
191#define LD_R2_0R12	0xe84c0000	/* ld	 %r2,0(%r12)	 */
192#define ADD_R2_R2_R12	0x7c426214	/* add	 %r2,%r2,%r12	 */
193
194#define LI_R11_0	0x39600000	/* li    %r11,0		*/
195#define LIS_R2		0x3c400000	/* lis %r2,xxx@ha	  */
196#define LIS_R11		0x3d600000	/* lis %r11,xxx@ha	  */
197#define LIS_R12		0x3d800000	/* lis %r12,xxx@ha	  */
198#define ADDIS_R2_R12	0x3c4c0000	/* addis %r2,%r12,xxx@ha  */
199#define ADDIS_R12_R2	0x3d820000	/* addis %r12,%r2,xxx@ha  */
200#define ADDIS_R12_R11	0x3d8b0000	/* addis %r12,%r11,xxx@ha */
201#define ADDIS_R12_R12	0x3d8c0000	/* addis %r12,%r12,xxx@ha */
202#define ORIS_R12_R12_0	0x658c0000	/* oris  %r12,%r12,xxx@hi */
203#define ORI_R11_R11_0	0x616b0000	/* ori   %r11,%r11,xxx@l  */
204#define ORI_R12_R12_0	0x618c0000	/* ori   %r12,%r12,xxx@l  */
205#define LD_R12_0R12	0xe98c0000	/* ld	 %r12,xxx@l(%r12) */
206#define SLDI_R11_R11_34	0x796b1746	/* sldi  %r11,%r11,34     */
207#define SLDI_R12_R12_32	0x799c07c6	/* sldi  %r12,%r12,32     */
208#define LDX_R12_R11_R12 0x7d8b602a	/* ldx   %r12,%r11,%r12   */
209#define ADD_R12_R11_R12 0x7d8b6214	/* add   %r12,%r11,%r12   */
210#define PADDI_R12_PC	0x0610000039800000ULL
211#define PLD_R12_PC	0x04100000e5800000ULL
212#define PNOP		0x0700000000000000ULL
213
214/* __glink_PLTresolve stub instructions.  We enter with the index in R0.  */
215#define GLINK_PLTRESOLVE_SIZE(htab)			\
216  (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
217					/* 0:				*/
218					/*  .quad plt0-1f		*/
219					/* __glink:			*/
220#define MFLR_R12	0x7d8802a6	/*  mflr %12			*/
221#define BCL_20_31	0x429f0005	/*  bcl 20,31,1f		*/
222					/* 1:				*/
223#define MFLR_R11	0x7d6802a6	/*  mflr %11			*/
224					/*  ld %2,(0b-1b)(%11)		*/
225#define MTLR_R12	0x7d8803a6	/*  mtlr %12			*/
226#define ADD_R11_R2_R11	0x7d625a14	/*  add %11,%2,%11		*/
227					/*  ld %12,0(%11)		*/
228					/*  ld %2,8(%11)		*/
229					/*  mtctr %12			*/
230					/*  ld %11,16(%11)		*/
231					/*  bctr			*/
232#define MFLR_R0		0x7c0802a6	/*  mflr %r0			*/
233#define MTLR_R0		0x7c0803a6	/*  mtlr %r0			*/
234#define SUB_R12_R12_R11	0x7d8b6050	/*  subf %r12,%r11,%r12		*/
235#define ADDI_R0_R12	0x380c0000	/*  addi %r0,%r12,0		*/
236#define SRDI_R0_R0_2	0x7800f082	/*  rldicl %r0,%r0,62,2		*/
237
238/* Pad with this.  */
239#define NOP		0x60000000
240
241/* Some other nops.  */
242#define CROR_151515	0x4def7b82
243#define CROR_313131	0x4ffffb82
244
245/* .glink entries for the first 32k functions are two instructions.  */
246#define LI_R0_0		0x38000000	/* li    %r0,0		*/
247#define B_DOT		0x48000000	/* b     .		*/
248
249/* After that, we need two instructions to load the index, followed by
250   a branch.  */
251#define LIS_R0_0	0x3c000000	/* lis   %r0,0		*/
252#define ORI_R0_R0_0	0x60000000	/* ori	 %r0,%r0,0	*/
253
254/* Instructions used by the save and restore reg functions.  */
255#define STD_R0_0R1	0xf8010000	/* std   %r0,0(%r1)	*/
256#define STD_R0_0R12	0xf80c0000	/* std   %r0,0(%r12)	*/
257#define LD_R0_0R1	0xe8010000	/* ld    %r0,0(%r1)	*/
258#define LD_R0_0R12	0xe80c0000	/* ld    %r0,0(%r12)	*/
259#define STFD_FR0_0R1	0xd8010000	/* stfd  %fr0,0(%r1)	*/
260#define LFD_FR0_0R1	0xc8010000	/* lfd   %fr0,0(%r1)	*/
261#define LI_R12_0	0x39800000	/* li    %r12,0		*/
262#define STVX_VR0_R12_R0	0x7c0c01ce	/* stvx  %v0,%r12,%r0	*/
263#define LVX_VR0_R12_R0	0x7c0c00ce	/* lvx   %v0,%r12,%r0	*/
264#define MTLR_R0		0x7c0803a6	/* mtlr  %r0		*/
265#define BLR		0x4e800020	/* blr			*/
266
267/* Since .opd is an array of descriptors and each entry will end up
268   with identical R_PPC64_RELATIVE relocs, there is really no need to
269   propagate .opd relocs;  The dynamic linker should be taught to
270   relocate .opd without reloc entries.  */
271#ifndef NO_OPD_RELOCS
272#define NO_OPD_RELOCS 0
273#endif
274
275#ifndef ARRAY_SIZE
276#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
277#endif
278
279static inline int
280abiversion (bfd *abfd)
281{
282  return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
283}
284
285static inline void
286set_abiversion (bfd *abfd, int ver)
287{
288  elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
289  elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
290}
291
292/* Relocation HOWTO's.  */
293/* Like other ELF RELA targets that don't apply multiple
294   field-altering relocations to the same localation, src_mask is
295   always zero and pcrel_offset is the same as pc_relative.
296   PowerPC can always use a zero bitpos, even when the field is not at
297   the LSB.  For example, a REL24 could use rightshift=2, bisize=24
298   and bitpos=2 which matches the ABI description, or as we do here,
299   rightshift=0, bitsize=26 and bitpos=0.  */
300#define HOW(type, size, bitsize, mask, rightshift, pc_relative, \
301	    complain, special_func)				\
302  HOWTO (type, rightshift, size, bitsize, pc_relative, 0,	\
303	 complain_overflow_ ## complain, special_func,		\
304	 #type, FALSE, 0, mask, pc_relative)
305
306static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
307
308static reloc_howto_type ppc64_elf_howto_raw[] =
309{
310  /* This reloc does nothing.  */
311  HOW (R_PPC64_NONE, 3, 0, 0, 0, FALSE, dont,
312       bfd_elf_generic_reloc),
313
314  /* A standard 32 bit relocation.  */
315  HOW (R_PPC64_ADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
316       bfd_elf_generic_reloc),
317
318  /* An absolute 26 bit branch; the lower two bits must be zero.
319     FIXME: we don't check that, we just clear them.  */
320  HOW (R_PPC64_ADDR24, 2, 26, 0x03fffffc, 0, FALSE, bitfield,
321       bfd_elf_generic_reloc),
322
323  /* A standard 16 bit relocation.  */
324  HOW (R_PPC64_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
325       bfd_elf_generic_reloc),
326
327  /* A 16 bit relocation without overflow.  */
328  HOW (R_PPC64_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
329       bfd_elf_generic_reloc),
330
331  /* Bits 16-31 of an address.  */
332  HOW (R_PPC64_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, signed,
333       bfd_elf_generic_reloc),
334
335  /* Bits 16-31 of an address, plus 1 if the contents of the low 16
336     bits, treated as a signed number, is negative.  */
337  HOW (R_PPC64_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, signed,
338       ppc64_elf_ha_reloc),
339
340  /* An absolute 16 bit branch; the lower two bits must be zero.
341     FIXME: we don't check that, we just clear them.  */
342  HOW (R_PPC64_ADDR14, 2, 16, 0x0000fffc, 0, FALSE, signed,
343       ppc64_elf_branch_reloc),
344
345  /* An absolute 16 bit branch, for which bit 10 should be set to
346     indicate that the branch is expected to be taken.  The lower two
347     bits must be zero.  */
348  HOW (R_PPC64_ADDR14_BRTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
349       ppc64_elf_brtaken_reloc),
350
351  /* An absolute 16 bit branch, for which bit 10 should be set to
352     indicate that the branch is not expected to be taken.  The lower
353     two bits must be zero.  */
354  HOW (R_PPC64_ADDR14_BRNTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
355       ppc64_elf_brtaken_reloc),
356
357  /* A relative 26 bit branch; the lower two bits must be zero.  */
358  HOW (R_PPC64_REL24, 2, 26, 0x03fffffc, 0, TRUE, signed,
359       ppc64_elf_branch_reloc),
360
361  /* A variant of R_PPC64_REL24, used when r2 is not the toc pointer.  */
362  HOW (R_PPC64_REL24_NOTOC, 2, 26, 0x03fffffc, 0, TRUE, signed,
363       ppc64_elf_branch_reloc),
364
365  /* A relative 16 bit branch; the lower two bits must be zero.  */
366  HOW (R_PPC64_REL14, 2, 16, 0x0000fffc, 0, TRUE, signed,
367       ppc64_elf_branch_reloc),
368
369  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
370     the branch is expected to be taken.  The lower two bits must be
371     zero.  */
372  HOW (R_PPC64_REL14_BRTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
373       ppc64_elf_brtaken_reloc),
374
375  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
376     the branch is not expected to be taken.  The lower two bits must
377     be zero.  */
378  HOW (R_PPC64_REL14_BRNTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
379       ppc64_elf_brtaken_reloc),
380
381  /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
382     symbol.  */
383  HOW (R_PPC64_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
384       ppc64_elf_unhandled_reloc),
385
386  /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
387     the symbol.  */
388  HOW (R_PPC64_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
389       ppc64_elf_unhandled_reloc),
390
391  /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
392     the symbol.  */
393  HOW (R_PPC64_GOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
394       ppc64_elf_unhandled_reloc),
395
396  /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
397     the symbol.  */
398  HOW (R_PPC64_GOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
399       ppc64_elf_unhandled_reloc),
400
401  /* This is used only by the dynamic linker.  The symbol should exist
402     both in the object being run and in some shared library.  The
403     dynamic linker copies the data addressed by the symbol from the
404     shared library into the object, because the object being
405     run has to have the data at some particular address.  */
406  HOW (R_PPC64_COPY, 0, 0, 0, 0, FALSE, dont,
407       ppc64_elf_unhandled_reloc),
408
409  /* Like R_PPC64_ADDR64, but used when setting global offset table
410     entries.  */
411  HOW (R_PPC64_GLOB_DAT, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
412       ppc64_elf_unhandled_reloc),
413
414  /* Created by the link editor.  Marks a procedure linkage table
415     entry for a symbol.  */
416  HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, FALSE, dont,
417       ppc64_elf_unhandled_reloc),
418
419  /* Used only by the dynamic linker.  When the object is run, this
420     doubleword64 is set to the load address of the object, plus the
421     addend.  */
422  HOW (R_PPC64_RELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
423       bfd_elf_generic_reloc),
424
425  /* Like R_PPC64_ADDR32, but may be unaligned.  */
426  HOW (R_PPC64_UADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
427       bfd_elf_generic_reloc),
428
429  /* Like R_PPC64_ADDR16, but may be unaligned.  */
430  HOW (R_PPC64_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
431       bfd_elf_generic_reloc),
432
433  /* 32-bit PC relative.  */
434  HOW (R_PPC64_REL32, 2, 32, 0xffffffff, 0, TRUE, signed,
435       bfd_elf_generic_reloc),
436
437  /* 32-bit relocation to the symbol's procedure linkage table.  */
438  HOW (R_PPC64_PLT32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
439       ppc64_elf_unhandled_reloc),
440
441  /* 32-bit PC relative relocation to the symbol's procedure linkage table.
442     FIXME: R_PPC64_PLTREL32 not supported.  */
443  HOW (R_PPC64_PLTREL32, 2, 32, 0xffffffff, 0, TRUE, signed,
444       ppc64_elf_unhandled_reloc),
445
446  /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
447     the symbol.  */
448  HOW (R_PPC64_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
449       ppc64_elf_unhandled_reloc),
450
451  /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
452     the symbol.  */
453  HOW (R_PPC64_PLT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
454       ppc64_elf_unhandled_reloc),
455
456  /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
457     the symbol.  */
458  HOW (R_PPC64_PLT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
459       ppc64_elf_unhandled_reloc),
460
461  /* 16-bit section relative relocation.  */
462  HOW (R_PPC64_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
463       ppc64_elf_sectoff_reloc),
464
465  /* Like R_PPC64_SECTOFF, but no overflow warning.  */
466  HOW (R_PPC64_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
467       ppc64_elf_sectoff_reloc),
468
469  /* 16-bit upper half section relative relocation.  */
470  HOW (R_PPC64_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, signed,
471       ppc64_elf_sectoff_reloc),
472
473  /* 16-bit upper half adjusted section relative relocation.  */
474  HOW (R_PPC64_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, signed,
475       ppc64_elf_sectoff_ha_reloc),
476
477  /* Like R_PPC64_REL24 without touching the two least significant bits.  */
478  HOW (R_PPC64_REL30, 2, 30, 0xfffffffc, 2, TRUE, dont,
479       bfd_elf_generic_reloc),
480
481  /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
482
483  /* A standard 64-bit relocation.  */
484  HOW (R_PPC64_ADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
485       bfd_elf_generic_reloc),
486
487  /* The bits 32-47 of an address.  */
488  HOW (R_PPC64_ADDR16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
489       bfd_elf_generic_reloc),
490
491  /* The bits 32-47 of an address, plus 1 if the contents of the low
492     16 bits, treated as a signed number, is negative.  */
493  HOW (R_PPC64_ADDR16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
494       ppc64_elf_ha_reloc),
495
496  /* The bits 48-63 of an address.  */
497  HOW (R_PPC64_ADDR16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
498       bfd_elf_generic_reloc),
499
500  /* The bits 48-63 of an address, plus 1 if the contents of the low
501     16 bits, treated as a signed number, is negative.  */
502  HOW (R_PPC64_ADDR16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
503       ppc64_elf_ha_reloc),
504
505  /* Like ADDR64, but may be unaligned.  */
506  HOW (R_PPC64_UADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
507       bfd_elf_generic_reloc),
508
509  /* 64-bit relative relocation.  */
510  HOW (R_PPC64_REL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
511       bfd_elf_generic_reloc),
512
513  /* 64-bit relocation to the symbol's procedure linkage table.  */
514  HOW (R_PPC64_PLT64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
515       ppc64_elf_unhandled_reloc),
516
517  /* 64-bit PC relative relocation to the symbol's procedure linkage
518     table.  */
519  /* FIXME: R_PPC64_PLTREL64 not supported.  */
520  HOW (R_PPC64_PLTREL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
521       ppc64_elf_unhandled_reloc),
522
523  /* 16 bit TOC-relative relocation.  */
524  /* R_PPC64_TOC16	  47	   half16*	S + A - .TOC.  */
525  HOW (R_PPC64_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
526       ppc64_elf_toc_reloc),
527
528  /* 16 bit TOC-relative relocation without overflow.  */
529  /* R_PPC64_TOC16_LO	  48	   half16	 #lo (S + A - .TOC.)  */
530  HOW (R_PPC64_TOC16_LO, 1, 16, 0xffff, 0, FALSE, dont,
531       ppc64_elf_toc_reloc),
532
533  /* 16 bit TOC-relative relocation, high 16 bits.  */
534  /* R_PPC64_TOC16_HI	  49	   half16	 #hi (S + A - .TOC.)  */
535  HOW (R_PPC64_TOC16_HI, 1, 16, 0xffff, 16, FALSE, signed,
536       ppc64_elf_toc_reloc),
537
538  /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
539     contents of the low 16 bits, treated as a signed number, is
540     negative.  */
541  /* R_PPC64_TOC16_HA	  50	   half16	 #ha (S + A - .TOC.)  */
542  HOW (R_PPC64_TOC16_HA, 1, 16, 0xffff, 16, FALSE, signed,
543       ppc64_elf_toc_ha_reloc),
544
545  /* 64-bit relocation; insert value of TOC base (.TOC.).  */
546  /* R_PPC64_TOC		  51	   doubleword64	 .TOC.  */
547  HOW (R_PPC64_TOC, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
548       ppc64_elf_toc64_reloc),
549
550  /* Like R_PPC64_GOT16, but also informs the link editor that the
551     value to relocate may (!) refer to a PLT entry which the link
552     editor (a) may replace with the symbol value.  If the link editor
553     is unable to fully resolve the symbol, it may (b) create a PLT
554     entry and store the address to the new PLT entry in the GOT.
555     This permits lazy resolution of function symbols at run time.
556     The link editor may also skip all of this and just (c) emit a
557     R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
558  /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
559    HOW (R_PPC64_PLTGOT16, 1, 16, 0xffff, 0, FALSE,signed,
560	  ppc64_elf_unhandled_reloc),
561
562  /* Like R_PPC64_PLTGOT16, but without overflow.  */
563  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
564  HOW (R_PPC64_PLTGOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
565       ppc64_elf_unhandled_reloc),
566
567  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
568  /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
569  HOW (R_PPC64_PLTGOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
570       ppc64_elf_unhandled_reloc),
571
572  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
573     1 if the contents of the low 16 bits, treated as a signed number,
574     is negative.  */
575  /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
576  HOW (R_PPC64_PLTGOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
577       ppc64_elf_unhandled_reloc),
578
579  /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
580  HOW (R_PPC64_ADDR16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
581       bfd_elf_generic_reloc),
582
583  /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
584  HOW (R_PPC64_ADDR16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
585       bfd_elf_generic_reloc),
586
587  /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
588  HOW (R_PPC64_GOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
589       ppc64_elf_unhandled_reloc),
590
591  /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
592  HOW (R_PPC64_GOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
593       ppc64_elf_unhandled_reloc),
594
595  /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
596  HOW (R_PPC64_PLT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
597       ppc64_elf_unhandled_reloc),
598
599  /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
600  HOW (R_PPC64_SECTOFF_DS, 1, 16, 0xfffc, 0, FALSE, signed,
601       ppc64_elf_sectoff_reloc),
602
603  /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
604  HOW (R_PPC64_SECTOFF_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
605       ppc64_elf_sectoff_reloc),
606
607  /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
608  HOW (R_PPC64_TOC16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
609       ppc64_elf_toc_reloc),
610
611  /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
612  HOW (R_PPC64_TOC16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
613       ppc64_elf_toc_reloc),
614
615  /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
616  /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
617  HOW (R_PPC64_PLTGOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
618       ppc64_elf_unhandled_reloc),
619
620  /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
621  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
622  HOW (R_PPC64_PLTGOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
623       ppc64_elf_unhandled_reloc),
624
625  /* Marker relocs for TLS.  */
626  HOW (R_PPC64_TLS, 2, 32, 0, 0, FALSE, dont,
627       bfd_elf_generic_reloc),
628
629  HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
630       bfd_elf_generic_reloc),
631
632  HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
633       bfd_elf_generic_reloc),
634
635  /* Marker reloc for optimizing r2 save in prologue rather than on
636     each plt call stub.  */
637  HOW (R_PPC64_TOCSAVE, 2, 32, 0, 0, FALSE, dont,
638       bfd_elf_generic_reloc),
639
640  /* Marker relocs on inline plt call instructions.  */
641  HOW (R_PPC64_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
642       bfd_elf_generic_reloc),
643
644  HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
645       bfd_elf_generic_reloc),
646
647  /* Computes the load module index of the load module that contains the
648     definition of its TLS sym.  */
649  HOW (R_PPC64_DTPMOD64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
650       ppc64_elf_unhandled_reloc),
651
652  /* Computes a dtv-relative displacement, the difference between the value
653     of sym+add and the base address of the thread-local storage block that
654     contains the definition of sym, minus 0x8000.  */
655  HOW (R_PPC64_DTPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
656       ppc64_elf_unhandled_reloc),
657
658  /* A 16 bit dtprel reloc.  */
659  HOW (R_PPC64_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
660       ppc64_elf_unhandled_reloc),
661
662  /* Like DTPREL16, but no overflow.  */
663  HOW (R_PPC64_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
664       ppc64_elf_unhandled_reloc),
665
666  /* Like DTPREL16_LO, but next higher group of 16 bits.  */
667  HOW (R_PPC64_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
668       ppc64_elf_unhandled_reloc),
669
670  /* Like DTPREL16_HI, but adjust for low 16 bits.  */
671  HOW (R_PPC64_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
672       ppc64_elf_unhandled_reloc),
673
674  /* Like DTPREL16_HI, but next higher group of 16 bits.  */
675  HOW (R_PPC64_DTPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
676       ppc64_elf_unhandled_reloc),
677
678  /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
679  HOW (R_PPC64_DTPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
680       ppc64_elf_unhandled_reloc),
681
682  /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
683  HOW (R_PPC64_DTPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
684       ppc64_elf_unhandled_reloc),
685
686  /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
687  HOW (R_PPC64_DTPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
688       ppc64_elf_unhandled_reloc),
689
690  /* Like DTPREL16, but for insns with a DS field.  */
691  HOW (R_PPC64_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
692       ppc64_elf_unhandled_reloc),
693
694  /* Like DTPREL16_DS, but no overflow.  */
695  HOW (R_PPC64_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
696       ppc64_elf_unhandled_reloc),
697
698  /* Computes a tp-relative displacement, the difference between the value of
699     sym+add and the value of the thread pointer (r13).  */
700  HOW (R_PPC64_TPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
701       ppc64_elf_unhandled_reloc),
702
703  /* A 16 bit tprel reloc.  */
704  HOW (R_PPC64_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
705       ppc64_elf_unhandled_reloc),
706
707  /* Like TPREL16, but no overflow.  */
708  HOW (R_PPC64_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
709       ppc64_elf_unhandled_reloc),
710
711  /* Like TPREL16_LO, but next higher group of 16 bits.  */
712  HOW (R_PPC64_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
713       ppc64_elf_unhandled_reloc),
714
715  /* Like TPREL16_HI, but adjust for low 16 bits.  */
716  HOW (R_PPC64_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
717       ppc64_elf_unhandled_reloc),
718
719  /* Like TPREL16_HI, but next higher group of 16 bits.  */
720  HOW (R_PPC64_TPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
721       ppc64_elf_unhandled_reloc),
722
723  /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
724  HOW (R_PPC64_TPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
725       ppc64_elf_unhandled_reloc),
726
727  /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
728  HOW (R_PPC64_TPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
729       ppc64_elf_unhandled_reloc),
730
731  /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
732  HOW (R_PPC64_TPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
733       ppc64_elf_unhandled_reloc),
734
735  /* Like TPREL16, but for insns with a DS field.  */
736  HOW (R_PPC64_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
737       ppc64_elf_unhandled_reloc),
738
739  /* Like TPREL16_DS, but no overflow.  */
740  HOW (R_PPC64_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
741       ppc64_elf_unhandled_reloc),
742
743  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
744     with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
745     to the first entry relative to the TOC base (r2).  */
746  HOW (R_PPC64_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
747       ppc64_elf_unhandled_reloc),
748
749  /* Like GOT_TLSGD16, but no overflow.  */
750  HOW (R_PPC64_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
751       ppc64_elf_unhandled_reloc),
752
753  /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
754  HOW (R_PPC64_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
755       ppc64_elf_unhandled_reloc),
756
757  /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
758  HOW (R_PPC64_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
759       ppc64_elf_unhandled_reloc),
760
761  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
762     with values (sym+add)@dtpmod and zero, and computes the offset to the
763     first entry relative to the TOC base (r2).  */
764  HOW (R_PPC64_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
765       ppc64_elf_unhandled_reloc),
766
767  /* Like GOT_TLSLD16, but no overflow.  */
768  HOW (R_PPC64_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
769       ppc64_elf_unhandled_reloc),
770
771  /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
772  HOW (R_PPC64_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
773       ppc64_elf_unhandled_reloc),
774
775  /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
776  HOW (R_PPC64_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
777       ppc64_elf_unhandled_reloc),
778
779  /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
780     the offset to the entry relative to the TOC base (r2).  */
781  HOW (R_PPC64_GOT_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
782       ppc64_elf_unhandled_reloc),
783
784  /* Like GOT_DTPREL16_DS, but no overflow.  */
785  HOW (R_PPC64_GOT_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
786       ppc64_elf_unhandled_reloc),
787
788  /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
789  HOW (R_PPC64_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
790       ppc64_elf_unhandled_reloc),
791
792  /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
793  HOW (R_PPC64_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
794       ppc64_elf_unhandled_reloc),
795
796  /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
797     offset to the entry relative to the TOC base (r2).  */
798  HOW (R_PPC64_GOT_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
799       ppc64_elf_unhandled_reloc),
800
801  /* Like GOT_TPREL16_DS, but no overflow.  */
802  HOW (R_PPC64_GOT_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
803       ppc64_elf_unhandled_reloc),
804
805  /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
806  HOW (R_PPC64_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
807       ppc64_elf_unhandled_reloc),
808
809  /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
810  HOW (R_PPC64_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
811       ppc64_elf_unhandled_reloc),
812
813  HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, FALSE, dont,
814       ppc64_elf_unhandled_reloc),
815
816  HOW (R_PPC64_IRELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
817       bfd_elf_generic_reloc),
818
819  /* A 16 bit relative relocation.  */
820  HOW (R_PPC64_REL16, 1, 16, 0xffff, 0, TRUE, signed,
821       bfd_elf_generic_reloc),
822
823  /* A 16 bit relative relocation without overflow.  */
824  HOW (R_PPC64_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
825       bfd_elf_generic_reloc),
826
827  /* The high order 16 bits of a relative address.  */
828  HOW (R_PPC64_REL16_HI, 1, 16, 0xffff, 16, TRUE, signed,
829       bfd_elf_generic_reloc),
830
831  /* The high order 16 bits of a relative address, plus 1 if the contents of
832     the low 16 bits, treated as a signed number, is negative.  */
833  HOW (R_PPC64_REL16_HA, 1, 16, 0xffff, 16, TRUE, signed,
834       ppc64_elf_ha_reloc),
835
836  HOW (R_PPC64_REL16_HIGH, 1, 16, 0xffff, 16, TRUE, dont,
837       bfd_elf_generic_reloc),
838
839  HOW (R_PPC64_REL16_HIGHA, 1, 16, 0xffff, 16, TRUE, dont,
840       ppc64_elf_ha_reloc),
841
842  HOW (R_PPC64_REL16_HIGHER, 1, 16, 0xffff, 32, TRUE, dont,
843       bfd_elf_generic_reloc),
844
845  HOW (R_PPC64_REL16_HIGHERA, 1, 16, 0xffff, 32, TRUE, dont,
846       ppc64_elf_ha_reloc),
847
848  HOW (R_PPC64_REL16_HIGHEST, 1, 16, 0xffff, 48, TRUE, dont,
849       bfd_elf_generic_reloc),
850
851  HOW (R_PPC64_REL16_HIGHESTA, 1, 16, 0xffff, 48, TRUE, dont,
852       ppc64_elf_ha_reloc),
853
854  /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
855  HOW (R_PPC64_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
856       ppc64_elf_ha_reloc),
857
858  /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
859  HOW (R_PPC64_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
860       ppc64_elf_ha_reloc),
861
862  /* Like R_PPC64_ADDR16_HI, but no overflow.  */
863  HOW (R_PPC64_ADDR16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
864       bfd_elf_generic_reloc),
865
866  /* Like R_PPC64_ADDR16_HA, but no overflow.  */
867  HOW (R_PPC64_ADDR16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
868       ppc64_elf_ha_reloc),
869
870  /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
871  HOW (R_PPC64_DTPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
872       ppc64_elf_unhandled_reloc),
873
874  /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
875  HOW (R_PPC64_DTPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
876       ppc64_elf_unhandled_reloc),
877
878  /* Like R_PPC64_TPREL16_HI, but no overflow.  */
879  HOW (R_PPC64_TPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
880       ppc64_elf_unhandled_reloc),
881
882  /* Like R_PPC64_TPREL16_HA, but no overflow.  */
883  HOW (R_PPC64_TPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
884       ppc64_elf_unhandled_reloc),
885
886  /* Marker reloc on ELFv2 large-model function entry.  */
887  HOW (R_PPC64_ENTRY, 2, 32, 0, 0, FALSE, dont,
888       bfd_elf_generic_reloc),
889
890  /* Like ADDR64, but use local entry point of function.  */
891  HOW (R_PPC64_ADDR64_LOCAL, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
892       bfd_elf_generic_reloc),
893
894  HOW (R_PPC64_PLTSEQ_NOTOC, 2, 32, 0, 0, FALSE, dont,
895       bfd_elf_generic_reloc),
896
897  HOW (R_PPC64_PLTCALL_NOTOC, 2, 32, 0, 0, FALSE, dont,
898       bfd_elf_generic_reloc),
899
900  HOW (R_PPC64_PCREL_OPT, 2, 32, 0, 0, FALSE, dont,
901       bfd_elf_generic_reloc),
902
903  HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
904       ppc64_elf_prefix_reloc),
905
906  HOW (R_PPC64_D34_LO, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, dont,
907       ppc64_elf_prefix_reloc),
908
909  HOW (R_PPC64_D34_HI30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
910       ppc64_elf_prefix_reloc),
911
912  HOW (R_PPC64_D34_HA30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
913       ppc64_elf_prefix_reloc),
914
915  HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
916       ppc64_elf_prefix_reloc),
917
918  HOW (R_PPC64_GOT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
919       ppc64_elf_unhandled_reloc),
920
921  HOW (R_PPC64_PLT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
922       ppc64_elf_unhandled_reloc),
923
924  HOW (R_PPC64_PLT_PCREL34_NOTOC, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
925       ppc64_elf_unhandled_reloc),
926
927  HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
928       ppc64_elf_unhandled_reloc),
929
930  HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
931       ppc64_elf_unhandled_reloc),
932
933  HOW (R_PPC64_GOT_TLSGD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
934       ppc64_elf_unhandled_reloc),
935
936  HOW (R_PPC64_GOT_TLSLD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
937       ppc64_elf_unhandled_reloc),
938
939  HOW (R_PPC64_GOT_TPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
940       ppc64_elf_unhandled_reloc),
941
942  HOW (R_PPC64_GOT_DTPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
943       ppc64_elf_unhandled_reloc),
944
945  HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
946       bfd_elf_generic_reloc),
947
948  HOW (R_PPC64_ADDR16_HIGHERA34, 1, 16, 0xffff, 34, FALSE, dont,
949       ppc64_elf_ha_reloc),
950
951  HOW (R_PPC64_ADDR16_HIGHEST34, 1, 16, 0xffff, 50, FALSE, dont,
952       bfd_elf_generic_reloc),
953
954  HOW (R_PPC64_ADDR16_HIGHESTA34, 1, 16, 0xffff, 50, FALSE, dont,
955       ppc64_elf_ha_reloc),
956
957  HOW (R_PPC64_REL16_HIGHER34, 1, 16, 0xffff, 34, TRUE, dont,
958       bfd_elf_generic_reloc),
959
960  HOW (R_PPC64_REL16_HIGHERA34, 1, 16, 0xffff, 34, TRUE, dont,
961       ppc64_elf_ha_reloc),
962
963  HOW (R_PPC64_REL16_HIGHEST34, 1, 16, 0xffff, 50, TRUE, dont,
964       bfd_elf_generic_reloc),
965
966  HOW (R_PPC64_REL16_HIGHESTA34, 1, 16, 0xffff, 50, TRUE, dont,
967       ppc64_elf_ha_reloc),
968
969  HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
970       ppc64_elf_prefix_reloc),
971
972  HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
973       ppc64_elf_prefix_reloc),
974
975  /* GNU extension to record C++ vtable hierarchy.  */
976  HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
977       NULL),
978
979  /* GNU extension to record C++ vtable member usage.  */
980  HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
981       NULL),
982};
983
984
985/* Initialize the ppc64_elf_howto_table, so that linear accesses can
986   be done.  */
987
988static void
989ppc_howto_init (void)
990{
991  unsigned int i, type;
992
993  for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
994    {
995      type = ppc64_elf_howto_raw[i].type;
996      BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
997      ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
998    }
999}
1000
1001static reloc_howto_type *
1002ppc64_elf_reloc_type_lookup (bfd *abfd, 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_TLSGD_PCREL34:	r = R_PPC64_GOT_TLSGD_PCREL34;
1283      break;
1284    case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:	r = R_PPC64_GOT_TLSLD_PCREL34;
1285      break;
1286    case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:	r = R_PPC64_GOT_TPREL_PCREL34;
1287      break;
1288    case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:	r = R_PPC64_GOT_DTPREL_PCREL34;
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
1319static reloc_howto_type *
1320ppc64_elf_reloc_name_lookup (bfd *abfd, const char *r_name)
1321{
1322  unsigned int i;
1323  static char *compat_map[][2] = {
1324    { "R_PPC64_GOT_TLSGD34", "R_PPC64_GOT_TLSGD_PCREL34" },
1325    { "R_PPC64_GOT_TLSLD34", "R_PPC64_GOT_TLSLD_PCREL34" },
1326    { "R_PPC64_GOT_TPREL34", "R_PPC64_GOT_TPREL_PCREL34" },
1327    { "R_PPC64_GOT_DTPREL34", "R_PPC64_GOT_DTPREL_PCREL34" }
1328  };
1329
1330  for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
1331    if (ppc64_elf_howto_raw[i].name != NULL
1332	&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
1333      return &ppc64_elf_howto_raw[i];
1334
1335  /* Handle old names of relocations in case they were used by
1336     .reloc directives.
1337     FIXME: Remove this soon.  Mapping the reloc names is very likely
1338     completely unnecessary.  */
1339  for (i = 0; i < ARRAY_SIZE (compat_map); i++)
1340    if (strcasecmp (compat_map[i][0], r_name) == 0)
1341      {
1342	_bfd_error_handler (_("warning: %s should be used rather than %s"),
1343			    compat_map[i][1], compat_map[i][0]);
1344	return ppc64_elf_reloc_name_lookup (abfd, compat_map[i][1]);
1345      }
1346
1347  return NULL;
1348}
1349
1350/* Set the howto pointer for a PowerPC ELF reloc.  */
1351
1352static bfd_boolean
1353ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
1354			 Elf_Internal_Rela *dst)
1355{
1356  unsigned int type;
1357
1358  /* Initialize howto table if needed.  */
1359  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1360    ppc_howto_init ();
1361
1362  type = ELF64_R_TYPE (dst->r_info);
1363  if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
1364    {
1365      /* xgettext:c-format */
1366      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1367			  abfd, type);
1368      bfd_set_error (bfd_error_bad_value);
1369      return FALSE;
1370    }
1371  cache_ptr->howto = ppc64_elf_howto_table[type];
1372  if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
1373    {
1374      /* xgettext:c-format */
1375      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1376			  abfd, type);
1377      bfd_set_error (bfd_error_bad_value);
1378      return FALSE;
1379    }
1380
1381  return TRUE;
1382}
1383
1384/* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
1385
1386static bfd_reloc_status_type
1387ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1388		    void *data, asection *input_section,
1389		    bfd *output_bfd, char **error_message)
1390{
1391  enum elf_ppc64_reloc_type r_type;
1392  long insn;
1393  bfd_size_type octets;
1394  bfd_vma value;
1395
1396  /* If this is a relocatable link (output_bfd test tells us), just
1397     call the generic function.  Any adjustment will be done at final
1398     link time.  */
1399  if (output_bfd != NULL)
1400    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1401				  input_section, output_bfd, error_message);
1402
1403  /* Adjust the addend for sign extension of the low 16 (or 34) bits.
1404     We won't actually be using the low bits, so trashing them
1405     doesn't matter.  */
1406  r_type = reloc_entry->howto->type;
1407  if (r_type == R_PPC64_ADDR16_HIGHERA34
1408      || r_type == R_PPC64_ADDR16_HIGHESTA34
1409      || r_type == R_PPC64_REL16_HIGHERA34
1410      || r_type == R_PPC64_REL16_HIGHESTA34)
1411    reloc_entry->addend += 1ULL << 33;
1412  else
1413    reloc_entry->addend += 1U << 15;
1414  if (r_type != R_PPC64_REL16DX_HA)
1415    return bfd_reloc_continue;
1416
1417  value = 0;
1418  if (!bfd_is_com_section (symbol->section))
1419    value = symbol->value;
1420  value += (reloc_entry->addend
1421	    + symbol->section->output_offset
1422	    + symbol->section->output_section->vma);
1423  value -= (reloc_entry->address
1424	    + input_section->output_offset
1425	    + input_section->output_section->vma);
1426  value = (bfd_signed_vma) value >> 16;
1427
1428  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1429  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1430  insn &= ~0x1fffc1;
1431  insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
1432  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1433  if (value + 0x8000 > 0xffff)
1434    return bfd_reloc_overflow;
1435  return bfd_reloc_ok;
1436}
1437
1438static bfd_reloc_status_type
1439ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1440			void *data, asection *input_section,
1441			bfd *output_bfd, char **error_message)
1442{
1443  if (output_bfd != NULL)
1444    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1445				  input_section, output_bfd, error_message);
1446
1447  if (strcmp (symbol->section->name, ".opd") == 0
1448      && (symbol->section->owner->flags & DYNAMIC) == 0)
1449    {
1450      bfd_vma dest = opd_entry_value (symbol->section,
1451				      symbol->value + reloc_entry->addend,
1452				      NULL, NULL, FALSE);
1453      if (dest != (bfd_vma) -1)
1454	reloc_entry->addend = dest - (symbol->value
1455				      + symbol->section->output_section->vma
1456				      + symbol->section->output_offset);
1457    }
1458  else
1459    {
1460      elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
1461
1462      if (symbol->section->owner != abfd
1463	  && symbol->section->owner != NULL
1464	  && abiversion (symbol->section->owner) >= 2)
1465	{
1466	  unsigned int i;
1467
1468	  for (i = 0; i < symbol->section->owner->symcount; ++i)
1469	    {
1470	      asymbol *symdef = symbol->section->owner->outsymbols[i];
1471
1472	      if (strcmp (symdef->name, symbol->name) == 0)
1473		{
1474		  elfsym = (elf_symbol_type *) symdef;
1475		  break;
1476		}
1477	    }
1478	}
1479      reloc_entry->addend
1480	+= PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
1481    }
1482  return bfd_reloc_continue;
1483}
1484
1485static bfd_reloc_status_type
1486ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1487			 void *data, asection *input_section,
1488			 bfd *output_bfd, char **error_message)
1489{
1490  long insn;
1491  enum elf_ppc64_reloc_type r_type;
1492  bfd_size_type octets;
1493  /* Assume 'at' branch hints.  */
1494  bfd_boolean is_isa_v2 = TRUE;
1495
1496  /* If this is a relocatable link (output_bfd test tells us), just
1497     call the generic function.  Any adjustment will be done at final
1498     link time.  */
1499  if (output_bfd != NULL)
1500    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1501				  input_section, output_bfd, error_message);
1502
1503  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1504  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1505  insn &= ~(0x01 << 21);
1506  r_type = reloc_entry->howto->type;
1507  if (r_type == R_PPC64_ADDR14_BRTAKEN
1508      || r_type == R_PPC64_REL14_BRTAKEN)
1509    insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
1510
1511  if (is_isa_v2)
1512    {
1513      /* Set 'a' bit.  This is 0b00010 in BO field for branch
1514	 on CR(BI) insns (BO == 001at or 011at), and 0b01000
1515	 for branch on CTR insns (BO == 1a00t or 1a01t).  */
1516      if ((insn & (0x14 << 21)) == (0x04 << 21))
1517	insn |= 0x02 << 21;
1518      else if ((insn & (0x14 << 21)) == (0x10 << 21))
1519	insn |= 0x08 << 21;
1520      else
1521	goto out;
1522    }
1523  else
1524    {
1525      bfd_vma target = 0;
1526      bfd_vma from;
1527
1528      if (!bfd_is_com_section (symbol->section))
1529	target = symbol->value;
1530      target += symbol->section->output_section->vma;
1531      target += symbol->section->output_offset;
1532      target += reloc_entry->addend;
1533
1534      from = (reloc_entry->address
1535	      + input_section->output_offset
1536	      + input_section->output_section->vma);
1537
1538      /* Invert 'y' bit if not the default.  */
1539      if ((bfd_signed_vma) (target - from) < 0)
1540	insn ^= 0x01 << 21;
1541    }
1542  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1543 out:
1544  return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
1545				 input_section, output_bfd, error_message);
1546}
1547
1548static bfd_reloc_status_type
1549ppc64_elf_sectoff_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  return bfd_reloc_continue;
1563}
1564
1565static bfd_reloc_status_type
1566ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1567			    void *data, asection *input_section,
1568			    bfd *output_bfd, char **error_message)
1569{
1570  /* If this is a relocatable link (output_bfd test tells us), just
1571     call the generic function.  Any adjustment will be done at final
1572     link time.  */
1573  if (output_bfd != NULL)
1574    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1575				  input_section, output_bfd, error_message);
1576
1577  /* Subtract the symbol section base address.  */
1578  reloc_entry->addend -= symbol->section->output_section->vma;
1579
1580  /* Adjust the addend for sign extension of the low 16 bits.  */
1581  reloc_entry->addend += 0x8000;
1582  return bfd_reloc_continue;
1583}
1584
1585static bfd_reloc_status_type
1586ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1587		     void *data, asection *input_section,
1588		     bfd *output_bfd, char **error_message)
1589{
1590  bfd_vma TOCstart;
1591
1592  /* If this is a relocatable link (output_bfd test tells us), just
1593     call the generic function.  Any adjustment will be done at final
1594     link time.  */
1595  if (output_bfd != NULL)
1596    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1597				  input_section, output_bfd, error_message);
1598
1599  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1600  if (TOCstart == 0)
1601    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1602
1603  /* Subtract the TOC base address.  */
1604  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1605  return bfd_reloc_continue;
1606}
1607
1608static bfd_reloc_status_type
1609ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1610			void *data, asection *input_section,
1611			bfd *output_bfd, char **error_message)
1612{
1613  bfd_vma TOCstart;
1614
1615  /* If this is a relocatable link (output_bfd test tells us), just
1616     call the generic function.  Any adjustment will be done at final
1617     link time.  */
1618  if (output_bfd != NULL)
1619    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1620				  input_section, output_bfd, error_message);
1621
1622  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1623  if (TOCstart == 0)
1624    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1625
1626  /* Subtract the TOC base address.  */
1627  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1628
1629  /* Adjust the addend for sign extension of the low 16 bits.  */
1630  reloc_entry->addend += 0x8000;
1631  return bfd_reloc_continue;
1632}
1633
1634static bfd_reloc_status_type
1635ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1636		       void *data, asection *input_section,
1637		       bfd *output_bfd, char **error_message)
1638{
1639  bfd_vma TOCstart;
1640  bfd_size_type octets;
1641
1642  /* If this is a relocatable link (output_bfd test tells us), just
1643     call the generic function.  Any adjustment will be done at final
1644     link time.  */
1645  if (output_bfd != NULL)
1646    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1647				  input_section, output_bfd, error_message);
1648
1649  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1650  if (TOCstart == 0)
1651    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1652
1653  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1654  bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
1655  return bfd_reloc_ok;
1656}
1657
1658static bfd_reloc_status_type
1659ppc64_elf_prefix_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1660			void *data, asection *input_section,
1661			bfd *output_bfd, char **error_message)
1662{
1663  uint64_t insn;
1664  bfd_vma targ;
1665
1666  if (output_bfd != NULL)
1667    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1668				  input_section, output_bfd, error_message);
1669
1670  insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1671  insn <<= 32;
1672  insn |= bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address + 4);
1673
1674  targ = (symbol->section->output_section->vma
1675	  + symbol->section->output_offset
1676	  + reloc_entry->addend);
1677  if (!bfd_is_com_section (symbol->section))
1678    targ += symbol->value;
1679  if (reloc_entry->howto->type == R_PPC64_D34_HA30)
1680    targ += 1ULL << 33;
1681  if (reloc_entry->howto->pc_relative)
1682    {
1683      bfd_vma from = (reloc_entry->address
1684		      + input_section->output_offset
1685		      + input_section->output_section->vma);
1686      targ -=from;
1687    }
1688  targ >>= reloc_entry->howto->rightshift;
1689  insn &= ~reloc_entry->howto->dst_mask;
1690  insn |= ((targ << 16) | (targ & 0xffff)) & reloc_entry->howto->dst_mask;
1691  bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + reloc_entry->address);
1692  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address + 4);
1693  if (reloc_entry->howto->complain_on_overflow == complain_overflow_signed
1694      && (targ + (1ULL << (reloc_entry->howto->bitsize - 1))
1695	  >= 1ULL << reloc_entry->howto->bitsize))
1696    return bfd_reloc_overflow;
1697  return bfd_reloc_ok;
1698}
1699
1700static bfd_reloc_status_type
1701ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1702			   void *data, asection *input_section,
1703			   bfd *output_bfd, char **error_message)
1704{
1705  /* If this is a relocatable link (output_bfd test tells us), just
1706     call the generic function.  Any adjustment will be done at final
1707     link time.  */
1708  if (output_bfd != NULL)
1709    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1710				  input_section, output_bfd, error_message);
1711
1712  if (error_message != NULL)
1713    {
1714      static char buf[60];
1715      sprintf (buf, "generic linker can't handle %s",
1716	       reloc_entry->howto->name);
1717      *error_message = buf;
1718    }
1719  return bfd_reloc_dangerous;
1720}
1721
1722/* Track GOT entries needed for a given symbol.  We might need more
1723   than one got entry per symbol.  */
1724struct got_entry
1725{
1726  struct got_entry *next;
1727
1728  /* The symbol addend that we'll be placing in the GOT.  */
1729  bfd_vma addend;
1730
1731  /* Unlike other ELF targets, we use separate GOT entries for the same
1732     symbol referenced from different input files.  This is to support
1733     automatic multiple TOC/GOT sections, where the TOC base can vary
1734     from one input file to another.  After partitioning into TOC groups
1735     we merge entries within the group.
1736
1737     Point to the BFD owning this GOT entry.  */
1738  bfd *owner;
1739
1740  /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
1741     TLS_TPREL or TLS_DTPREL for tls entries.  */
1742  unsigned char tls_type;
1743
1744  /* Non-zero if got.ent points to real entry.  */
1745  unsigned char is_indirect;
1746
1747  /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
1748  union
1749  {
1750    bfd_signed_vma refcount;
1751    bfd_vma offset;
1752    struct got_entry *ent;
1753  } got;
1754};
1755
1756/* The same for PLT.  */
1757struct plt_entry
1758{
1759  struct plt_entry *next;
1760
1761  bfd_vma addend;
1762
1763  union
1764  {
1765    bfd_signed_vma refcount;
1766    bfd_vma offset;
1767  } plt;
1768};
1769
1770struct ppc64_elf_obj_tdata
1771{
1772  struct elf_obj_tdata elf;
1773
1774  /* Shortcuts to dynamic linker sections.  */
1775  asection *got;
1776  asection *relgot;
1777
1778  /* Used during garbage collection.  We attach global symbols defined
1779     on removed .opd entries to this section so that the sym is removed.  */
1780  asection *deleted_section;
1781
1782  /* TLS local dynamic got entry handling.  Support for multiple GOT
1783     sections means we potentially need one of these for each input bfd.  */
1784  struct got_entry tlsld_got;
1785
1786  union
1787  {
1788    /* A copy of relocs before they are modified for --emit-relocs.  */
1789    Elf_Internal_Rela *relocs;
1790
1791    /* Section contents.  */
1792    bfd_byte *contents;
1793  } opd;
1794
1795  /* Nonzero if this bfd has small toc/got relocs, ie. that expect
1796     the reloc to be in the range -32768 to 32767.  */
1797  unsigned int has_small_toc_reloc : 1;
1798
1799  /* Set if toc/got ha relocs detected not using r2, or lo reloc
1800     instruction not one we handle.  */
1801  unsigned int unexpected_toc_insn : 1;
1802
1803  /* Set if PLT/GOT/TOC relocs that can be optimised are present in
1804     this file.  */
1805  unsigned int has_optrel : 1;
1806};
1807
1808#define ppc64_elf_tdata(bfd) \
1809  ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
1810
1811#define ppc64_tlsld_got(bfd) \
1812  (&ppc64_elf_tdata (bfd)->tlsld_got)
1813
1814#define is_ppc64_elf(bfd) \
1815  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
1816   && elf_object_id (bfd) == PPC64_ELF_DATA)
1817
1818/* Override the generic function because we store some extras.  */
1819
1820static bfd_boolean
1821ppc64_elf_mkobject (bfd *abfd)
1822{
1823  return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
1824				  PPC64_ELF_DATA);
1825}
1826
1827/* Fix bad default arch selected for a 64 bit input bfd when the
1828   default is 32 bit.  Also select arch based on apuinfo.  */
1829
1830static bfd_boolean
1831ppc64_elf_object_p (bfd *abfd)
1832{
1833  if (!abfd->arch_info->the_default)
1834    return TRUE;
1835
1836  if (abfd->arch_info->bits_per_word == 32)
1837    {
1838      Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
1839
1840      if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
1841	{
1842	  /* Relies on arch after 32 bit default being 64 bit default.  */
1843	  abfd->arch_info = abfd->arch_info->next;
1844	  BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
1845	}
1846    }
1847  return _bfd_elf_ppc_set_arch (abfd);
1848}
1849
1850/* Support for core dump NOTE sections.  */
1851
1852static bfd_boolean
1853ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
1854{
1855  size_t offset, size;
1856
1857  if (note->descsz != 504)
1858    return FALSE;
1859
1860  /* pr_cursig */
1861  elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
1862
1863  /* pr_pid */
1864  elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
1865
1866  /* pr_reg */
1867  offset = 112;
1868  size = 384;
1869
1870  /* Make a ".reg/999" section.  */
1871  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
1872					  size, note->descpos + offset);
1873}
1874
1875static bfd_boolean
1876ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
1877{
1878  if (note->descsz != 136)
1879    return FALSE;
1880
1881  elf_tdata (abfd)->core->pid
1882    = bfd_get_32 (abfd, note->descdata + 24);
1883  elf_tdata (abfd)->core->program
1884    = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
1885  elf_tdata (abfd)->core->command
1886    = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
1887
1888  return TRUE;
1889}
1890
1891static char *
1892ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
1893			   ...)
1894{
1895  switch (note_type)
1896    {
1897    default:
1898      return NULL;
1899
1900    case NT_PRPSINFO:
1901      {
1902	char data[136] ATTRIBUTE_NONSTRING;
1903	va_list ap;
1904
1905	va_start (ap, note_type);
1906	memset (data, 0, sizeof (data));
1907	strncpy (data + 40, va_arg (ap, const char *), 16);
1908#if GCC_VERSION == 8000 || GCC_VERSION == 8001
1909	DIAGNOSTIC_PUSH;
1910	/* GCC 8.0 and 8.1 warn about 80 equals destination size with
1911	   -Wstringop-truncation:
1912	   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
1913	 */
1914	DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
1915#endif
1916	strncpy (data + 56, va_arg (ap, const char *), 80);
1917#if GCC_VERSION == 8000 || GCC_VERSION == 8001
1918	DIAGNOSTIC_POP;
1919#endif
1920	va_end (ap);
1921	return elfcore_write_note (abfd, buf, bufsiz,
1922				   "CORE", note_type, data, sizeof (data));
1923      }
1924
1925    case NT_PRSTATUS:
1926      {
1927	char data[504];
1928	va_list ap;
1929	long pid;
1930	int cursig;
1931	const void *greg;
1932
1933	va_start (ap, note_type);
1934	memset (data, 0, 112);
1935	pid = va_arg (ap, long);
1936	bfd_put_32 (abfd, pid, data + 32);
1937	cursig = va_arg (ap, int);
1938	bfd_put_16 (abfd, cursig, data + 12);
1939	greg = va_arg (ap, const void *);
1940	memcpy (data + 112, greg, 384);
1941	memset (data + 496, 0, 8);
1942	va_end (ap);
1943	return elfcore_write_note (abfd, buf, bufsiz,
1944				   "CORE", note_type, data, sizeof (data));
1945      }
1946    }
1947}
1948
1949/* Add extra PPC sections.  */
1950
1951static const struct bfd_elf_special_section ppc64_elf_special_sections[] =
1952{
1953  { STRING_COMMA_LEN (".plt"),	  0, SHT_NOBITS,   0 },
1954  { STRING_COMMA_LEN (".sbss"),	 -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1955  { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1956  { STRING_COMMA_LEN (".toc"),	  0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1957  { STRING_COMMA_LEN (".toc1"),	  0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1958  { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
1959  { NULL,		      0,  0, 0,		   0 }
1960};
1961
1962enum _ppc64_sec_type {
1963  sec_normal = 0,
1964  sec_opd = 1,
1965  sec_toc = 2
1966};
1967
1968struct _ppc64_elf_section_data
1969{
1970  struct bfd_elf_section_data elf;
1971
1972  union
1973  {
1974    /* An array with one entry for each opd function descriptor,
1975       and some spares since opd entries may be either 16 or 24 bytes.  */
1976#define OPD_NDX(OFF) ((OFF) >> 4)
1977    struct _opd_sec_data
1978    {
1979      /* Points to the function code section for local opd entries.  */
1980      asection **func_sec;
1981
1982      /* After editing .opd, adjust references to opd local syms.  */
1983      long *adjust;
1984    } opd;
1985
1986    /* An array for toc sections, indexed by offset/8.  */
1987    struct _toc_sec_data
1988    {
1989      /* Specifies the relocation symbol index used at a given toc offset.  */
1990      unsigned *symndx;
1991
1992      /* And the relocation addend.  */
1993      bfd_vma *add;
1994    } toc;
1995  } u;
1996
1997  enum _ppc64_sec_type sec_type:2;
1998
1999  /* Flag set when small branches are detected.  Used to
2000     select suitable defaults for the stub group size.  */
2001  unsigned int has_14bit_branch:1;
2002
2003  /* Flag set when PLTCALL relocs are detected.  */
2004  unsigned int has_pltcall:1;
2005
2006  /* Flag set when section has PLT/GOT/TOC relocations that can be
2007     optimised.  */
2008  unsigned int has_optrel:1;
2009};
2010
2011#define ppc64_elf_section_data(sec) \
2012  ((struct _ppc64_elf_section_data *) elf_section_data (sec))
2013
2014static bfd_boolean
2015ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
2016{
2017  if (!sec->used_by_bfd)
2018    {
2019      struct _ppc64_elf_section_data *sdata;
2020      size_t amt = sizeof (*sdata);
2021
2022      sdata = bfd_zalloc (abfd, amt);
2023      if (sdata == NULL)
2024	return FALSE;
2025      sec->used_by_bfd = sdata;
2026    }
2027
2028  return _bfd_elf_new_section_hook (abfd, sec);
2029}
2030
2031static bfd_boolean
2032ppc64_elf_section_flags (const Elf_Internal_Shdr *hdr)
2033{
2034  const char *name = hdr->bfd_section->name;
2035
2036  if (strncmp (name, ".sbss", 5) == 0
2037      || strncmp (name, ".sdata", 6) == 0)
2038    hdr->bfd_section->flags |= SEC_SMALL_DATA;
2039
2040  return TRUE;
2041}
2042
2043static struct _opd_sec_data *
2044get_opd_info (asection * sec)
2045{
2046  if (sec != NULL
2047      && ppc64_elf_section_data (sec) != NULL
2048      && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2049    return &ppc64_elf_section_data (sec)->u.opd;
2050  return NULL;
2051}
2052
2053/* Parameters for the qsort hook.  */
2054static bfd_boolean synthetic_relocatable;
2055static asection *synthetic_opd;
2056
2057/* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
2058
2059static int
2060compare_symbols (const void *ap, const void *bp)
2061{
2062  const asymbol *a = *(const asymbol **) ap;
2063  const asymbol *b = *(const asymbol **) bp;
2064
2065  /* Section symbols first.  */
2066  if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2067    return -1;
2068  if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2069    return 1;
2070
2071  /* then .opd symbols.  */
2072  if (synthetic_opd != NULL)
2073    {
2074      if (strcmp (a->section->name, ".opd") == 0
2075	  && strcmp (b->section->name, ".opd") != 0)
2076	return -1;
2077      if (strcmp (a->section->name, ".opd") != 0
2078	  && strcmp (b->section->name, ".opd") == 0)
2079	return 1;
2080    }
2081
2082  /* then other code symbols.  */
2083  if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2084       == (SEC_CODE | SEC_ALLOC))
2085      && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2086	  != (SEC_CODE | SEC_ALLOC)))
2087    return -1;
2088
2089  if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2090       != (SEC_CODE | SEC_ALLOC))
2091      && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2092	  == (SEC_CODE | SEC_ALLOC)))
2093    return 1;
2094
2095  if (synthetic_relocatable)
2096    {
2097      if (a->section->id < b->section->id)
2098	return -1;
2099
2100      if (a->section->id > b->section->id)
2101	return 1;
2102    }
2103
2104  if (a->value + a->section->vma < b->value + b->section->vma)
2105    return -1;
2106
2107  if (a->value + a->section->vma > b->value + b->section->vma)
2108    return 1;
2109
2110  /* For syms with the same value, prefer strong dynamic global function
2111     syms over other syms.  */
2112  if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2113    return -1;
2114
2115  if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2116    return 1;
2117
2118  if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2119    return -1;
2120
2121  if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2122    return 1;
2123
2124  if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2125    return -1;
2126
2127  if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2128    return 1;
2129
2130  if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2131    return -1;
2132
2133  if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2134    return 1;
2135
2136  /* Finally, sort on where the symbol is in memory.  The symbols will
2137     be in at most two malloc'd blocks, one for static syms, one for
2138     dynamic syms, and we distinguish the two blocks above by testing
2139     BSF_DYNAMIC.  Since we are sorting the symbol pointers which were
2140     originally in the same order as the symbols (and we're not
2141     sorting the symbols themselves), this ensures a stable sort.  */
2142  if (a < b)
2143    return -1;
2144  if (a > b)
2145    return 1;
2146  return 0;
2147}
2148
2149/* Search SYMS for a symbol of the given VALUE.  */
2150
2151static asymbol *
2152sym_exists_at (asymbol **syms, size_t lo, size_t hi, unsigned int id,
2153	       bfd_vma value)
2154{
2155  size_t mid;
2156
2157  if (id == (unsigned) -1)
2158    {
2159      while (lo < hi)
2160	{
2161	  mid = (lo + hi) >> 1;
2162	  if (syms[mid]->value + syms[mid]->section->vma < value)
2163	    lo = mid + 1;
2164	  else if (syms[mid]->value + syms[mid]->section->vma > value)
2165	    hi = mid;
2166	  else
2167	    return syms[mid];
2168	}
2169    }
2170  else
2171    {
2172      while (lo < hi)
2173	{
2174	  mid = (lo + hi) >> 1;
2175	  if (syms[mid]->section->id < id)
2176	    lo = mid + 1;
2177	  else if (syms[mid]->section->id > id)
2178	    hi = mid;
2179	  else if (syms[mid]->value < value)
2180	    lo = mid + 1;
2181	  else if (syms[mid]->value > value)
2182	    hi = mid;
2183	  else
2184	    return syms[mid];
2185	}
2186    }
2187  return NULL;
2188}
2189
2190static bfd_boolean
2191section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
2192{
2193  bfd_vma vma = *(bfd_vma *) ptr;
2194  return ((section->flags & SEC_ALLOC) != 0
2195	  && section->vma <= vma
2196	  && vma < section->vma + section->size);
2197}
2198
2199/* Create synthetic symbols, effectively restoring "dot-symbol" function
2200   entry syms.  Also generate @plt symbols for the glink branch table.
2201   Returns count of synthetic symbols in RET or -1 on error.  */
2202
2203static long
2204ppc64_elf_get_synthetic_symtab (bfd *abfd,
2205				long static_count, asymbol **static_syms,
2206				long dyn_count, asymbol **dyn_syms,
2207				asymbol **ret)
2208{
2209  asymbol *s;
2210  size_t i, j, count;
2211  char *names;
2212  size_t symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2213  asection *opd = NULL;
2214  bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2215  asymbol **syms;
2216  int abi = abiversion (abfd);
2217
2218  *ret = NULL;
2219
2220  if (abi < 2)
2221    {
2222      opd = bfd_get_section_by_name (abfd, ".opd");
2223      if (opd == NULL && abi == 1)
2224	return 0;
2225    }
2226
2227  syms = NULL;
2228  codesecsym = 0;
2229  codesecsymend = 0;
2230  secsymend = 0;
2231  opdsymend = 0;
2232  symcount = 0;
2233  if (opd != NULL)
2234    {
2235      symcount = static_count;
2236      if (!relocatable)
2237	symcount += dyn_count;
2238      if (symcount == 0)
2239	return 0;
2240
2241      syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
2242      if (syms == NULL)
2243	return -1;
2244
2245      if (!relocatable && static_count != 0 && dyn_count != 0)
2246	{
2247	  /* Use both symbol tables.  */
2248	  memcpy (syms, static_syms, static_count * sizeof (*syms));
2249	  memcpy (syms + static_count, dyn_syms,
2250		  (dyn_count + 1) * sizeof (*syms));
2251	}
2252      else if (!relocatable && static_count == 0)
2253	memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
2254      else
2255	memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
2256
2257      /* Trim uninteresting symbols.  Interesting symbols are section,
2258	 function, and notype symbols.  */
2259      for (i = 0, j = 0; i < symcount; ++i)
2260	if ((syms[i]->flags & (BSF_FILE | BSF_OBJECT | BSF_THREAD_LOCAL
2261			       | BSF_RELC | BSF_SRELC)) == 0)
2262	  syms[j++] = syms[i];
2263      symcount = j;
2264
2265      synthetic_relocatable = relocatable;
2266      synthetic_opd = opd;
2267      qsort (syms, symcount, sizeof (*syms), compare_symbols);
2268
2269      if (!relocatable && symcount > 1)
2270	{
2271	  /* Trim duplicate syms, since we may have merged the normal
2272	     and dynamic symbols.  Actually, we only care about syms
2273	     that have different values, so trim any with the same
2274	     value.  Don't consider ifunc and ifunc resolver symbols
2275	     duplicates however, because GDB wants to know whether a
2276	     text symbol is an ifunc resolver.  */
2277	  for (i = 1, j = 1; i < symcount; ++i)
2278	    {
2279	      const asymbol *s0 = syms[i - 1];
2280	      const asymbol *s1 = syms[i];
2281
2282	      if ((s0->value + s0->section->vma
2283		   != s1->value + s1->section->vma)
2284		  || ((s0->flags & BSF_GNU_INDIRECT_FUNCTION)
2285		      != (s1->flags & BSF_GNU_INDIRECT_FUNCTION)))
2286		syms[j++] = syms[i];
2287	    }
2288	  symcount = j;
2289	}
2290
2291      i = 0;
2292      /* Note that here and in compare_symbols we can't compare opd and
2293	 sym->section directly.  With separate debug info files, the
2294	 symbols will be extracted from the debug file while abfd passed
2295	 to this function is the real binary.  */
2296      if (strcmp (syms[i]->section->name, ".opd") == 0)
2297	++i;
2298      codesecsym = i;
2299
2300      for (; i < symcount; ++i)
2301	if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC
2302					 | SEC_THREAD_LOCAL))
2303	     != (SEC_CODE | SEC_ALLOC))
2304	    || (syms[i]->flags & BSF_SECTION_SYM) == 0)
2305	  break;
2306      codesecsymend = i;
2307
2308      for (; i < symcount; ++i)
2309	if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
2310	  break;
2311      secsymend = i;
2312
2313      for (; i < symcount; ++i)
2314	if (strcmp (syms[i]->section->name, ".opd") != 0)
2315	  break;
2316      opdsymend = i;
2317
2318      for (; i < symcount; ++i)
2319	if (((syms[i]->section->flags
2320	      & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL)))
2321	    != (SEC_CODE | SEC_ALLOC))
2322	  break;
2323      symcount = i;
2324    }
2325  count = 0;
2326
2327  if (relocatable)
2328    {
2329      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2330      arelent *r;
2331      size_t size;
2332      size_t relcount;
2333
2334      if (opdsymend == secsymend)
2335	goto done;
2336
2337      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2338      relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
2339      if (relcount == 0)
2340	goto done;
2341
2342      if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
2343	{
2344	  count = -1;
2345	  goto done;
2346	}
2347
2348      size = 0;
2349      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2350	{
2351	  asymbol *sym;
2352
2353	  while (r < opd->relocation + relcount
2354		 && r->address < syms[i]->value + opd->vma)
2355	    ++r;
2356
2357	  if (r == opd->relocation + relcount)
2358	    break;
2359
2360	  if (r->address != syms[i]->value + opd->vma)
2361	    continue;
2362
2363	  if (r->howto->type != R_PPC64_ADDR64)
2364	    continue;
2365
2366	  sym = *r->sym_ptr_ptr;
2367	  if (!sym_exists_at (syms, opdsymend, symcount,
2368			      sym->section->id, sym->value + r->addend))
2369	    {
2370	      ++count;
2371	      size += sizeof (asymbol);
2372	      size += strlen (syms[i]->name) + 2;
2373	    }
2374	}
2375
2376      if (size == 0)
2377	goto done;
2378      s = *ret = bfd_malloc (size);
2379      if (s == NULL)
2380	{
2381	  count = -1;
2382	  goto done;
2383	}
2384
2385      names = (char *) (s + count);
2386
2387      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2388	{
2389	  asymbol *sym;
2390
2391	  while (r < opd->relocation + relcount
2392		 && r->address < syms[i]->value + opd->vma)
2393	    ++r;
2394
2395	  if (r == opd->relocation + relcount)
2396	    break;
2397
2398	  if (r->address != syms[i]->value + opd->vma)
2399	    continue;
2400
2401	  if (r->howto->type != R_PPC64_ADDR64)
2402	    continue;
2403
2404	  sym = *r->sym_ptr_ptr;
2405	  if (!sym_exists_at (syms, opdsymend, symcount,
2406			      sym->section->id, sym->value + r->addend))
2407	    {
2408	      size_t len;
2409
2410	      *s = *syms[i];
2411	      s->flags |= BSF_SYNTHETIC;
2412	      s->section = sym->section;
2413	      s->value = sym->value + r->addend;
2414	      s->name = names;
2415	      *names++ = '.';
2416	      len = strlen (syms[i]->name);
2417	      memcpy (names, syms[i]->name, len + 1);
2418	      names += len + 1;
2419	      /* Have udata.p point back to the original symbol this
2420		 synthetic symbol was derived from.  */
2421	      s->udata.p = syms[i];
2422	      s++;
2423	    }
2424	}
2425    }
2426  else
2427    {
2428      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2429      bfd_byte *contents = NULL;
2430      size_t size;
2431      size_t plt_count = 0;
2432      bfd_vma glink_vma = 0, resolv_vma = 0;
2433      asection *dynamic, *glink = NULL, *relplt = NULL;
2434      arelent *p;
2435
2436      if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
2437	{
2438	free_contents_and_exit_err:
2439	  count = -1;
2440	free_contents_and_exit:
2441	  free (contents);
2442	  goto done;
2443	}
2444
2445      size = 0;
2446      for (i = secsymend; i < opdsymend; ++i)
2447	{
2448	  bfd_vma ent;
2449
2450	  /* Ignore bogus symbols.  */
2451	  if (syms[i]->value > opd->size - 8)
2452	    continue;
2453
2454	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
2455	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2456	    {
2457	      ++count;
2458	      size += sizeof (asymbol);
2459	      size += strlen (syms[i]->name) + 2;
2460	    }
2461	}
2462
2463      /* Get start of .glink stubs from DT_PPC64_GLINK.  */
2464      if (dyn_count != 0
2465	  && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
2466	{
2467	  bfd_byte *dynbuf, *extdyn, *extdynend;
2468	  size_t extdynsize;
2469	  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
2470
2471	  if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
2472	    goto free_contents_and_exit_err;
2473
2474	  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
2475	  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
2476
2477	  extdyn = dynbuf;
2478	  extdynend = extdyn + dynamic->size;
2479	  for (; extdyn < extdynend; extdyn += extdynsize)
2480	    {
2481	      Elf_Internal_Dyn dyn;
2482	      (*swap_dyn_in) (abfd, extdyn, &dyn);
2483
2484	      if (dyn.d_tag == DT_NULL)
2485		break;
2486
2487	      if (dyn.d_tag == DT_PPC64_GLINK)
2488		{
2489		  /* The first glink stub starts at DT_PPC64_GLINK plus 32.
2490		     See comment in ppc64_elf_finish_dynamic_sections. */
2491		  glink_vma = dyn.d_un.d_val + 8 * 4;
2492		  /* The .glink section usually does not survive the final
2493		     link; search for the section (usually .text) where the
2494		     glink stubs now reside.  */
2495		  glink = bfd_sections_find_if (abfd, section_covers_vma,
2496						&glink_vma);
2497		  break;
2498		}
2499	    }
2500
2501	  free (dynbuf);
2502	}
2503
2504      if (glink != NULL)
2505	{
2506	  /* Determine __glink trampoline by reading the relative branch
2507	     from the first glink stub.  */
2508	  bfd_byte buf[4];
2509	  unsigned int off = 0;
2510
2511	  while (bfd_get_section_contents (abfd, glink, buf,
2512					   glink_vma + off - glink->vma, 4))
2513	    {
2514	      unsigned int insn = bfd_get_32 (abfd, buf);
2515	      insn ^= B_DOT;
2516	      if ((insn & ~0x3fffffc) == 0)
2517		{
2518		  resolv_vma
2519		    = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
2520		  break;
2521		}
2522	      off += 4;
2523	      if (off > 4)
2524		break;
2525	    }
2526
2527	  if (resolv_vma)
2528	    size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
2529
2530	  relplt = bfd_get_section_by_name (abfd, ".rela.plt");
2531	  if (relplt != NULL)
2532	    {
2533	      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2534	      if (!(*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
2535		goto free_contents_and_exit_err;
2536
2537	      plt_count = relplt->size / sizeof (Elf64_External_Rela);
2538	      size += plt_count * sizeof (asymbol);
2539
2540	      p = relplt->relocation;
2541	      for (i = 0; i < plt_count; i++, p++)
2542		{
2543		  size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
2544		  if (p->addend != 0)
2545		    size += sizeof ("+0x") - 1 + 16;
2546		}
2547	    }
2548	}
2549
2550      if (size == 0)
2551	goto free_contents_and_exit;
2552      s = *ret = bfd_malloc (size);
2553      if (s == NULL)
2554	goto free_contents_and_exit_err;
2555
2556      names = (char *) (s + count + plt_count + (resolv_vma != 0));
2557
2558      for (i = secsymend; i < opdsymend; ++i)
2559	{
2560	  bfd_vma ent;
2561
2562	  if (syms[i]->value > opd->size - 8)
2563	    continue;
2564
2565	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
2566	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2567	    {
2568	      size_t lo, hi;
2569	      size_t len;
2570	      asection *sec = abfd->sections;
2571
2572	      *s = *syms[i];
2573	      lo = codesecsym;
2574	      hi = codesecsymend;
2575	      while (lo < hi)
2576		{
2577		  size_t mid = (lo + hi) >> 1;
2578		  if (syms[mid]->section->vma < ent)
2579		    lo = mid + 1;
2580		  else if (syms[mid]->section->vma > ent)
2581		    hi = mid;
2582		  else
2583		    {
2584		      sec = syms[mid]->section;
2585		      break;
2586		    }
2587		}
2588
2589	      if (lo >= hi && lo > codesecsym)
2590		sec = syms[lo - 1]->section;
2591
2592	      for (; sec != NULL; sec = sec->next)
2593		{
2594		  if (sec->vma > ent)
2595		    break;
2596		  /* SEC_LOAD may not be set if SEC is from a separate debug
2597		     info file.  */
2598		  if ((sec->flags & SEC_ALLOC) == 0)
2599		    break;
2600		  if ((sec->flags & SEC_CODE) != 0)
2601		    s->section = sec;
2602		}
2603	      s->flags |= BSF_SYNTHETIC;
2604	      s->value = ent - s->section->vma;
2605	      s->name = names;
2606	      *names++ = '.';
2607	      len = strlen (syms[i]->name);
2608	      memcpy (names, syms[i]->name, len + 1);
2609	      names += len + 1;
2610	      /* Have udata.p point back to the original symbol this
2611		 synthetic symbol was derived from.  */
2612	      s->udata.p = syms[i];
2613	      s++;
2614	    }
2615	}
2616      free (contents);
2617
2618      if (glink != NULL && relplt != NULL)
2619	{
2620	  if (resolv_vma)
2621	    {
2622	      /* Add a symbol for the main glink trampoline.  */
2623	      memset (s, 0, sizeof *s);
2624	      s->the_bfd = abfd;
2625	      s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
2626	      s->section = glink;
2627	      s->value = resolv_vma - glink->vma;
2628	      s->name = names;
2629	      memcpy (names, "__glink_PLTresolve",
2630		      sizeof ("__glink_PLTresolve"));
2631	      names += sizeof ("__glink_PLTresolve");
2632	      s++;
2633	      count++;
2634	    }
2635
2636	  /* FIXME: It would be very much nicer to put sym@plt on the
2637	     stub rather than on the glink branch table entry.  The
2638	     objdump disassembler would then use a sensible symbol
2639	     name on plt calls.  The difficulty in doing so is
2640	     a) finding the stubs, and,
2641	     b) matching stubs against plt entries, and,
2642	     c) there can be multiple stubs for a given plt entry.
2643
2644	     Solving (a) could be done by code scanning, but older
2645	     ppc64 binaries used different stubs to current code.
2646	     (b) is the tricky one since you need to known the toc
2647	     pointer for at least one function that uses a pic stub to
2648	     be able to calculate the plt address referenced.
2649	     (c) means gdb would need to set multiple breakpoints (or
2650	     find the glink branch itself) when setting breakpoints
2651	     for pending shared library loads.  */
2652	  p = relplt->relocation;
2653	  for (i = 0; i < plt_count; i++, p++)
2654	    {
2655	      size_t len;
2656
2657	      *s = **p->sym_ptr_ptr;
2658	      /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
2659		 we are defining a symbol, ensure one of them is set.  */
2660	      if ((s->flags & BSF_LOCAL) == 0)
2661		s->flags |= BSF_GLOBAL;
2662	      s->flags |= BSF_SYNTHETIC;
2663	      s->section = glink;
2664	      s->value = glink_vma - glink->vma;
2665	      s->name = names;
2666	      s->udata.p = NULL;
2667	      len = strlen ((*p->sym_ptr_ptr)->name);
2668	      memcpy (names, (*p->sym_ptr_ptr)->name, len);
2669	      names += len;
2670	      if (p->addend != 0)
2671		{
2672		  memcpy (names, "+0x", sizeof ("+0x") - 1);
2673		  names += sizeof ("+0x") - 1;
2674		  bfd_sprintf_vma (abfd, names, p->addend);
2675		  names += strlen (names);
2676		}
2677	      memcpy (names, "@plt", sizeof ("@plt"));
2678	      names += sizeof ("@plt");
2679	      s++;
2680	      if (abi < 2)
2681		{
2682		  glink_vma += 8;
2683		  if (i >= 0x8000)
2684		    glink_vma += 4;
2685		}
2686	      else
2687		glink_vma += 4;
2688	    }
2689	  count += plt_count;
2690	}
2691    }
2692
2693 done:
2694  free (syms);
2695  return count;
2696}
2697
2698/* The following functions are specific to the ELF linker, while
2699   functions above are used generally.  Those named ppc64_elf_* are
2700   called by the main ELF linker code.  They appear in this file more
2701   or less in the order in which they are called.  eg.
2702   ppc64_elf_check_relocs is called early in the link process,
2703   ppc64_elf_finish_dynamic_sections is one of the last functions
2704   called.
2705
2706   PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
2707   functions have both a function code symbol and a function descriptor
2708   symbol.  A call to foo in a relocatable object file looks like:
2709
2710   .		.text
2711   .	x:
2712   .		bl	.foo
2713   .		nop
2714
2715   The function definition in another object file might be:
2716
2717   .		.section .opd
2718   .	foo:	.quad	.foo
2719   .		.quad	.TOC.@tocbase
2720   .		.quad	0
2721   .
2722   .		.text
2723   .	.foo:	blr
2724
2725   When the linker resolves the call during a static link, the branch
2726   unsurprisingly just goes to .foo and the .opd information is unused.
2727   If the function definition is in a shared library, things are a little
2728   different:  The call goes via a plt call stub, the opd information gets
2729   copied to the plt, and the linker patches the nop.
2730
2731   .	x:
2732   .		bl	.foo_stub
2733   .		ld	2,40(1)
2734   .
2735   .
2736   .	.foo_stub:
2737   .		std	2,40(1)			# in practice, the call stub
2738   .		addis	11,2,Lfoo@toc@ha	# is slightly optimized, but
2739   .		addi	11,11,Lfoo@toc@l	# this is the general idea
2740   .		ld	12,0(11)
2741   .		ld	2,8(11)
2742   .		mtctr	12
2743   .		ld	11,16(11)
2744   .		bctr
2745   .
2746   .		.section .plt
2747   .	Lfoo:	reloc (R_PPC64_JMP_SLOT, foo)
2748
2749   The "reloc ()" notation is supposed to indicate that the linker emits
2750   an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
2751   copying.
2752
2753   What are the difficulties here?  Well, firstly, the relocations
2754   examined by the linker in check_relocs are against the function code
2755   sym .foo, while the dynamic relocation in the plt is emitted against
2756   the function descriptor symbol, foo.  Somewhere along the line, we need
2757   to carefully copy dynamic link information from one symbol to the other.
2758   Secondly, the generic part of the elf linker will make .foo a dynamic
2759   symbol as is normal for most other backends.  We need foo dynamic
2760   instead, at least for an application final link.  However, when
2761   creating a shared library containing foo, we need to have both symbols
2762   dynamic so that references to .foo are satisfied during the early
2763   stages of linking.  Otherwise the linker might decide to pull in a
2764   definition from some other object, eg. a static library.
2765
2766   Update: As of August 2004, we support a new convention.  Function
2767   calls may use the function descriptor symbol, ie. "bl foo".  This
2768   behaves exactly as "bl .foo".  */
2769
2770/* Of those relocs that might be copied as dynamic relocs, this
2771   function selects those that must be copied when linking a shared
2772   library or PIE, even when the symbol is local.  */
2773
2774static int
2775must_be_dyn_reloc (struct bfd_link_info *info,
2776		   enum elf_ppc64_reloc_type r_type)
2777{
2778  switch (r_type)
2779    {
2780    default:
2781      /* Only relative relocs can be resolved when the object load
2782	 address isn't fixed.  DTPREL64 is excluded because the
2783	 dynamic linker needs to differentiate global dynamic from
2784	 local dynamic __tls_index pairs when PPC64_OPT_TLS is set.  */
2785      return 1;
2786
2787    case R_PPC64_REL32:
2788    case R_PPC64_REL64:
2789    case R_PPC64_REL30:
2790    case R_PPC64_TOC16:
2791    case R_PPC64_TOC16_DS:
2792    case R_PPC64_TOC16_LO:
2793    case R_PPC64_TOC16_HI:
2794    case R_PPC64_TOC16_HA:
2795    case R_PPC64_TOC16_LO_DS:
2796      return 0;
2797
2798    case R_PPC64_TPREL16:
2799    case R_PPC64_TPREL16_LO:
2800    case R_PPC64_TPREL16_HI:
2801    case R_PPC64_TPREL16_HA:
2802    case R_PPC64_TPREL16_DS:
2803    case R_PPC64_TPREL16_LO_DS:
2804    case R_PPC64_TPREL16_HIGH:
2805    case R_PPC64_TPREL16_HIGHA:
2806    case R_PPC64_TPREL16_HIGHER:
2807    case R_PPC64_TPREL16_HIGHERA:
2808    case R_PPC64_TPREL16_HIGHEST:
2809    case R_PPC64_TPREL16_HIGHESTA:
2810    case R_PPC64_TPREL64:
2811    case R_PPC64_TPREL34:
2812      /* These relocations are relative but in a shared library the
2813	 linker doesn't know the thread pointer base.  */
2814      return bfd_link_dll (info);
2815    }
2816}
2817
2818/* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
2819   copying dynamic variables from a shared lib into an app's .dynbss
2820   section, and instead use a dynamic relocation to point into the
2821   shared lib.  With code that gcc generates it is vital that this be
2822   enabled;  In the PowerPC64 ELFv1 ABI the address of a function is
2823   actually the address of a function descriptor which resides in the
2824   .opd section.  gcc uses the descriptor directly rather than going
2825   via the GOT as some other ABIs do, which means that initialized
2826   function pointers reference the descriptor.  Thus, a function
2827   pointer initialized to the address of a function in a shared
2828   library will either require a .dynbss copy and a copy reloc, or a
2829   dynamic reloc.  Using a .dynbss copy redefines the function
2830   descriptor symbol to point to the copy.  This presents a problem as
2831   a PLT entry for that function is also initialized from the function
2832   descriptor symbol and the copy may not be initialized first.  */
2833#define ELIMINATE_COPY_RELOCS 1
2834
2835/* Section name for stubs is the associated section name plus this
2836   string.  */
2837#define STUB_SUFFIX ".stub"
2838
2839/* Linker stubs.
2840   ppc_stub_long_branch:
2841   Used when a 14 bit branch (or even a 24 bit branch) can't reach its
2842   destination, but a 24 bit branch in a stub section will reach.
2843   .	b	dest
2844
2845   ppc_stub_plt_branch:
2846   Similar to the above, but a 24 bit branch in the stub section won't
2847   reach its destination.
2848   .	addis	%r12,%r2,xxx@toc@ha
2849   .	ld	%r12,xxx@toc@l(%r12)
2850   .	mtctr	%r12
2851   .	bctr
2852
2853   ppc_stub_plt_call:
2854   Used to call a function in a shared library.  If it so happens that
2855   the plt entry referenced crosses a 64k boundary, then an extra
2856   "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
2857   ppc_stub_plt_call_r2save starts with "std %r2,40(%r1)".
2858   .	addis	%r11,%r2,xxx@toc@ha
2859   .	ld	%r12,xxx+0@toc@l(%r11)
2860   .	mtctr	%r12
2861   .	ld	%r2,xxx+8@toc@l(%r11)
2862   .	ld	%r11,xxx+16@toc@l(%r11)
2863   .	bctr
2864
2865   ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
2866   code to adjust the value and save r2 to support multiple toc sections.
2867   A ppc_stub_long_branch with an r2 offset looks like:
2868   .	std	%r2,40(%r1)
2869   .	addis	%r2,%r2,off@ha
2870   .	addi	%r2,%r2,off@l
2871   .	b	dest
2872
2873   A ppc_stub_plt_branch with an r2 offset looks like:
2874   .	std	%r2,40(%r1)
2875   .	addis	%r12,%r2,xxx@toc@ha
2876   .	ld	%r12,xxx@toc@l(%r12)
2877   .	addis	%r2,%r2,off@ha
2878   .	addi	%r2,%r2,off@l
2879   .	mtctr	%r12
2880   .	bctr
2881
2882   All of the above stubs are shown as their ELFv1 variants.  ELFv2
2883   variants exist too, simpler for plt calls since a new toc pointer
2884   and static chain are not loaded by the stub.  In addition, ELFv2
2885   has some more complex stubs to handle calls marked with NOTOC
2886   relocs from functions where r2 is not a valid toc pointer.  These
2887   come in two flavours, the ones shown below, and _both variants that
2888   start with "std %r2,24(%r1)" to save r2 in the unlikely event that
2889   one call is from a function where r2 is used as the toc pointer but
2890   needs a toc adjusting stub for small-model multi-toc, and another
2891   call is from a function where r2 is not valid.
2892   ppc_stub_long_branch_notoc:
2893   .	mflr	%r12
2894   .	bcl	20,31,1f
2895   .  1:
2896   .	mflr	%r11
2897   .	mtlr	%r12
2898   .	addis	%r12,%r11,dest-1b@ha
2899   .	addi	%r12,%r12,dest-1b@l
2900   .	b	dest
2901
2902   ppc_stub_plt_branch_notoc:
2903   .	mflr	%r12
2904   .	bcl	20,31,1f
2905   .  1:
2906   .	mflr	%r11
2907   .	mtlr	%r12
2908   .	lis	%r12,xxx-1b@highest
2909   .	ori	%r12,%r12,xxx-1b@higher
2910   .	sldi	%r12,%r12,32
2911   .	oris	%r12,%r12,xxx-1b@high
2912   .	ori	%r12,%r12,xxx-1b@l
2913   .	add	%r12,%r11,%r12
2914   .	mtctr	%r12
2915   .	bctr
2916
2917   ppc_stub_plt_call_notoc:
2918   .	mflr	%r12
2919   .	bcl	20,31,1f
2920   .  1:
2921   .	mflr	%r11
2922   .	mtlr	%r12
2923   .	lis	%r12,xxx-1b@highest
2924   .	ori	%r12,%r12,xxx-1b@higher
2925   .	sldi	%r12,%r12,32
2926   .	oris	%r12,%r12,xxx-1b@high
2927   .	ori	%r12,%r12,xxx-1b@l
2928   .	ldx	%r12,%r11,%r12
2929   .	mtctr	%r12
2930   .	bctr
2931
2932   There are also ELFv1 power10 variants of these stubs.
2933   ppc_stub_long_branch_notoc:
2934   .	pla	%r12,dest@pcrel
2935   .	b	dest
2936   ppc_stub_plt_branch_notoc:
2937   .	lis	%r11,(dest-1f)@highesta34
2938   .	ori	%r11,%r11,(dest-1f)@highera34
2939   .	sldi	%r11,%r11,34
2940   . 1: pla	%r12,dest@pcrel
2941   .	add	%r12,%r11,%r12
2942   .	mtctr	%r12
2943   .	bctr
2944   ppc_stub_plt_call_notoc:
2945   .	lis	%r11,(xxx-1f)@highesta34
2946   .	ori	%r11,%r11,(xxx-1f)@highera34
2947   .	sldi	%r11,%r11,34
2948   . 1: pla	%r12,xxx@pcrel
2949   .	ldx	%r12,%r11,%r12
2950   .	mtctr	%r12
2951   .	bctr
2952
2953   In cases where the high instructions would add zero, they are
2954   omitted and following instructions modified in some cases.
2955   For example, a power10 ppc_stub_plt_call_notoc might simplify down
2956   to
2957   .	pld	%r12,xxx@pcrel
2958   .	mtctr	%r12
2959   .	bctr
2960
2961   For a given stub group (a set of sections all using the same toc
2962   pointer value) there will be just one stub type used for any
2963   particular function symbol.  For example, if printf is called from
2964   code with the tocsave optimization (ie. r2 saved in function
2965   prologue) and therefore calls use a ppc_stub_plt_call linkage stub,
2966   and from other code without the tocsave optimization requiring a
2967   ppc_stub_plt_call_r2save linkage stub, a single stub of the latter
2968   type will be created.  Calls with the tocsave optimization will
2969   enter this stub after the instruction saving r2.  A similar
2970   situation exists when calls are marked with R_PPC64_REL24_NOTOC
2971   relocations.  These require a ppc_stub_plt_call_notoc linkage stub
2972   to call an external function like printf.  If other calls to printf
2973   require a ppc_stub_plt_call linkage stub then a single
2974   ppc_stub_plt_call_notoc linkage stub will be used for both types of
2975   call.  If other calls to printf require a ppc_stub_plt_call_r2save
2976   linkage stub then a single ppc_stub_plt_call_both linkage stub will
2977   be created and calls not requiring r2 to be saved will enter the
2978   stub after the r2 save instruction.  There is an analogous
2979   hierarchy of long branch and plt branch stubs for local call
2980   linkage.  */
2981
2982enum ppc_stub_type
2983{
2984  ppc_stub_none,
2985  ppc_stub_long_branch,
2986  ppc_stub_long_branch_r2off,
2987  ppc_stub_long_branch_notoc,
2988  ppc_stub_long_branch_both, /* r2off and notoc variants both needed.  */
2989  ppc_stub_plt_branch,
2990  ppc_stub_plt_branch_r2off,
2991  ppc_stub_plt_branch_notoc,
2992  ppc_stub_plt_branch_both,
2993  ppc_stub_plt_call,
2994  ppc_stub_plt_call_r2save,
2995  ppc_stub_plt_call_notoc,
2996  ppc_stub_plt_call_both,
2997  ppc_stub_global_entry,
2998  ppc_stub_save_res
2999};
3000
3001/* Information on stub grouping.  */
3002struct map_stub
3003{
3004  /* The stub section.  */
3005  asection *stub_sec;
3006  /* This is the section to which stubs in the group will be attached.  */
3007  asection *link_sec;
3008  /* Next group.  */
3009  struct map_stub *next;
3010  /* Whether to emit a copy of register save/restore functions in this
3011     group.  */
3012  int needs_save_res;
3013  /* Current offset within stubs after the insn restoring lr in a
3014     _notoc or _both stub using bcl for pc-relative addressing, or
3015     after the insn restoring lr in a __tls_get_addr_opt plt stub.  */
3016  unsigned int lr_restore;
3017  /* Accumulated size of EH info emitted to describe return address
3018     if stubs modify lr.  Does not include 17 byte FDE header.  */
3019  unsigned int eh_size;
3020  /* Offset in glink_eh_frame to the start of EH info for this group.  */
3021  unsigned int eh_base;
3022};
3023
3024struct ppc_stub_hash_entry
3025{
3026  /* Base hash table entry structure.  */
3027  struct bfd_hash_entry root;
3028
3029  enum ppc_stub_type stub_type;
3030
3031  /* Group information.  */
3032  struct map_stub *group;
3033
3034  /* Offset within stub_sec of the beginning of this stub.  */
3035  bfd_vma stub_offset;
3036
3037  /* Given the symbol's value and its section we can determine its final
3038     value when building the stubs (so the stub knows where to jump.  */
3039  bfd_vma target_value;
3040  asection *target_section;
3041
3042  /* The symbol table entry, if any, that this was derived from.  */
3043  struct ppc_link_hash_entry *h;
3044  struct plt_entry *plt_ent;
3045
3046  /* Symbol type.  */
3047  unsigned char symtype;
3048
3049  /* Symbol st_other.  */
3050  unsigned char other;
3051};
3052
3053struct ppc_branch_hash_entry
3054{
3055  /* Base hash table entry structure.  */
3056  struct bfd_hash_entry root;
3057
3058  /* Offset within branch lookup table.  */
3059  unsigned int offset;
3060
3061  /* Generation marker.  */
3062  unsigned int iter;
3063};
3064
3065/* Used to track dynamic relocations for local symbols.  */
3066struct ppc_dyn_relocs
3067{
3068  struct ppc_dyn_relocs *next;
3069
3070  /* The input section of the reloc.  */
3071  asection *sec;
3072
3073  /* Total number of relocs copied for the input section.  */
3074  unsigned int count : 31;
3075
3076  /* Whether this entry is for STT_GNU_IFUNC symbols.  */
3077  unsigned int ifunc : 1;
3078};
3079
3080struct ppc_link_hash_entry
3081{
3082  struct elf_link_hash_entry elf;
3083
3084  union
3085  {
3086    /* A pointer to the most recently used stub hash entry against this
3087       symbol.  */
3088    struct ppc_stub_hash_entry *stub_cache;
3089
3090    /* A pointer to the next symbol starting with a '.'  */
3091    struct ppc_link_hash_entry *next_dot_sym;
3092  } u;
3093
3094  /* Link between function code and descriptor symbols.  */
3095  struct ppc_link_hash_entry *oh;
3096
3097  /* Flag function code and descriptor symbols.  */
3098  unsigned int is_func:1;
3099  unsigned int is_func_descriptor:1;
3100  unsigned int fake:1;
3101
3102  /* Whether global opd/toc sym has been adjusted or not.
3103     After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3104     should be set for all globals defined in any opd/toc section.  */
3105  unsigned int adjust_done:1;
3106
3107  /* Set if this is an out-of-line register save/restore function,
3108     with non-standard calling convention.  */
3109  unsigned int save_res:1;
3110
3111  /* Set if a duplicate symbol with non-zero localentry is detected,
3112     even when the duplicate symbol does not provide a definition.  */
3113  unsigned int non_zero_localentry:1;
3114
3115  /* Contexts in which symbol is used in the GOT (or TOC).
3116     Bits are or'd into the mask as the corresponding relocs are
3117     encountered during check_relocs, with TLS_TLS being set when any
3118     of the other TLS bits are set.  tls_optimize clears bits when
3119     optimizing to indicate the corresponding GOT entry type is not
3120     needed.  If set, TLS_TLS is never cleared.  tls_optimize may also
3121     set TLS_GDIE when a GD reloc turns into an IE one.
3122     These flags are also kept for local symbols.  */
3123#define TLS_TLS		 1	/* Any TLS reloc.  */
3124#define TLS_GD		 2	/* GD reloc. */
3125#define TLS_LD		 4	/* LD reloc. */
3126#define TLS_TPREL	 8	/* TPREL reloc, => IE. */
3127#define TLS_DTPREL	16	/* DTPREL reloc, => LD. */
3128#define TLS_MARK	32	/* __tls_get_addr call marked. */
3129#define TLS_GDIE	64	/* GOT TPREL reloc resulting from GD->IE. */
3130#define TLS_EXPLICIT   256	/* TOC section TLS reloc, not stored. */
3131  unsigned char tls_mask;
3132
3133  /* The above field is also used to mark function symbols.  In which
3134     case TLS_TLS will be 0.  */
3135#define PLT_IFUNC	 2	/* STT_GNU_IFUNC.  */
3136#define PLT_KEEP	 4	/* inline plt call requires plt entry.  */
3137#define NON_GOT        256	/* local symbol plt, not stored.  */
3138};
3139
3140static inline struct ppc_link_hash_entry *
3141ppc_elf_hash_entry (struct elf_link_hash_entry *ent)
3142{
3143  return (struct ppc_link_hash_entry *) ent;
3144}
3145
3146/* ppc64 ELF linker hash table.  */
3147
3148struct ppc_link_hash_table
3149{
3150  struct elf_link_hash_table elf;
3151
3152  /* The stub hash table.  */
3153  struct bfd_hash_table stub_hash_table;
3154
3155  /* Another hash table for plt_branch stubs.  */
3156  struct bfd_hash_table branch_hash_table;
3157
3158  /* Hash table for function prologue tocsave.  */
3159  htab_t tocsave_htab;
3160
3161  /* Various options and other info passed from the linker.  */
3162  struct ppc64_elf_params *params;
3163
3164  /* The size of sec_info below.  */
3165  unsigned int sec_info_arr_size;
3166
3167  /* Per-section array of extra section info.  Done this way rather
3168     than as part of ppc64_elf_section_data so we have the info for
3169     non-ppc64 sections.  */
3170  struct
3171  {
3172    /* Along with elf_gp, specifies the TOC pointer used by this section.  */
3173    bfd_vma toc_off;
3174
3175    union
3176    {
3177      /* The section group that this section belongs to.  */
3178      struct map_stub *group;
3179      /* A temp section list pointer.  */
3180      asection *list;
3181    } u;
3182  } *sec_info;
3183
3184  /* Linked list of groups.  */
3185  struct map_stub *group;
3186
3187  /* Temp used when calculating TOC pointers.  */
3188  bfd_vma toc_curr;
3189  bfd *toc_bfd;
3190  asection *toc_first_sec;
3191
3192  /* Used when adding symbols.  */
3193  struct ppc_link_hash_entry *dot_syms;
3194
3195  /* Shortcuts to get to dynamic linker sections.  */
3196  asection *glink;
3197  asection *global_entry;
3198  asection *sfpr;
3199  asection *pltlocal;
3200  asection *relpltlocal;
3201  asection *brlt;
3202  asection *relbrlt;
3203  asection *glink_eh_frame;
3204
3205  /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3206  struct ppc_link_hash_entry *tls_get_addr;
3207  struct ppc_link_hash_entry *tls_get_addr_fd;
3208  struct ppc_link_hash_entry *tga_desc;
3209  struct ppc_link_hash_entry *tga_desc_fd;
3210  struct map_stub *tga_group;
3211
3212  /* The size of reliplt used by got entry relocs.  */
3213  bfd_size_type got_reli_size;
3214
3215  /* Statistics.  */
3216  unsigned long stub_count[ppc_stub_global_entry];
3217
3218  /* Number of stubs against global syms.  */
3219  unsigned long stub_globals;
3220
3221  /* Set if we're linking code with function descriptors.  */
3222  unsigned int opd_abi:1;
3223
3224  /* Support for multiple toc sections.  */
3225  unsigned int do_multi_toc:1;
3226  unsigned int multi_toc_needed:1;
3227  unsigned int second_toc_pass:1;
3228  unsigned int do_toc_opt:1;
3229
3230  /* Set if tls optimization is enabled.  */
3231  unsigned int do_tls_opt:1;
3232
3233  /* Set if inline plt calls should be converted to direct calls.  */
3234  unsigned int can_convert_all_inline_plt:1;
3235
3236  /* Set on error.  */
3237  unsigned int stub_error:1;
3238
3239  /* Whether func_desc_adjust needs to be run over symbols.  */
3240  unsigned int need_func_desc_adj:1;
3241
3242  /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
3243  unsigned int has_plt_localentry0:1;
3244
3245  /* Whether calls are made via the PLT from NOTOC functions.  */
3246  unsigned int notoc_plt:1;
3247
3248  /* Whether any code linked seems to be Power10.  */
3249  unsigned int has_power10_relocs:1;
3250
3251  /* Incremented every time we size stubs.  */
3252  unsigned int stub_iteration;
3253};
3254
3255/* Rename some of the generic section flags to better document how they
3256   are used here.  */
3257
3258/* Nonzero if this section has TLS related relocations.  */
3259#define has_tls_reloc sec_flg0
3260
3261/* Nonzero if this section has a call to __tls_get_addr lacking marker
3262   relocations.  */
3263#define nomark_tls_get_addr sec_flg1
3264
3265/* Nonzero if this section has any toc or got relocs.  */
3266#define has_toc_reloc sec_flg2
3267
3268/* Nonzero if this section has a call to another section that uses
3269   the toc or got.  */
3270#define makes_toc_func_call sec_flg3
3271
3272/* Recursion protection when determining above flag.  */
3273#define call_check_in_progress sec_flg4
3274#define call_check_done sec_flg5
3275
3276/* Get the ppc64 ELF linker hash table from a link_info structure.  */
3277
3278#define ppc_hash_table(p) \
3279  ((is_elf_hash_table ((p)->hash)					\
3280    && elf_hash_table_id (elf_hash_table (p)) == PPC64_ELF_DATA)	\
3281   ? (struct ppc_link_hash_table *) (p)->hash : NULL)
3282
3283#define ppc_stub_hash_lookup(table, string, create, copy) \
3284  ((struct ppc_stub_hash_entry *) \
3285   bfd_hash_lookup ((table), (string), (create), (copy)))
3286
3287#define ppc_branch_hash_lookup(table, string, create, copy) \
3288  ((struct ppc_branch_hash_entry *) \
3289   bfd_hash_lookup ((table), (string), (create), (copy)))
3290
3291/* Create an entry in the stub hash table.  */
3292
3293static struct bfd_hash_entry *
3294stub_hash_newfunc (struct bfd_hash_entry *entry,
3295		   struct bfd_hash_table *table,
3296		   const char *string)
3297{
3298  /* Allocate the structure if it has not already been allocated by a
3299     subclass.  */
3300  if (entry == NULL)
3301    {
3302      entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3303      if (entry == NULL)
3304	return entry;
3305    }
3306
3307  /* Call the allocation method of the superclass.  */
3308  entry = bfd_hash_newfunc (entry, table, string);
3309  if (entry != NULL)
3310    {
3311      struct ppc_stub_hash_entry *eh;
3312
3313      /* Initialize the local fields.  */
3314      eh = (struct ppc_stub_hash_entry *) entry;
3315      eh->stub_type = ppc_stub_none;
3316      eh->group = NULL;
3317      eh->stub_offset = 0;
3318      eh->target_value = 0;
3319      eh->target_section = NULL;
3320      eh->h = NULL;
3321      eh->plt_ent = NULL;
3322      eh->other = 0;
3323    }
3324
3325  return entry;
3326}
3327
3328/* Create an entry in the branch hash table.  */
3329
3330static struct bfd_hash_entry *
3331branch_hash_newfunc (struct bfd_hash_entry *entry,
3332		     struct bfd_hash_table *table,
3333		     const char *string)
3334{
3335  /* Allocate the structure if it has not already been allocated by a
3336     subclass.  */
3337  if (entry == NULL)
3338    {
3339      entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3340      if (entry == NULL)
3341	return entry;
3342    }
3343
3344  /* Call the allocation method of the superclass.  */
3345  entry = bfd_hash_newfunc (entry, table, string);
3346  if (entry != NULL)
3347    {
3348      struct ppc_branch_hash_entry *eh;
3349
3350      /* Initialize the local fields.  */
3351      eh = (struct ppc_branch_hash_entry *) entry;
3352      eh->offset = 0;
3353      eh->iter = 0;
3354    }
3355
3356  return entry;
3357}
3358
3359/* Create an entry in a ppc64 ELF linker hash table.  */
3360
3361static struct bfd_hash_entry *
3362link_hash_newfunc (struct bfd_hash_entry *entry,
3363		   struct bfd_hash_table *table,
3364		   const char *string)
3365{
3366  /* Allocate the structure if it has not already been allocated by a
3367     subclass.  */
3368  if (entry == NULL)
3369    {
3370      entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3371      if (entry == NULL)
3372	return entry;
3373    }
3374
3375  /* Call the allocation method of the superclass.  */
3376  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3377  if (entry != NULL)
3378    {
3379      struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3380
3381      memset (&eh->u.stub_cache, 0,
3382	      (sizeof (struct ppc_link_hash_entry)
3383	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3384
3385      /* When making function calls, old ABI code references function entry
3386	 points (dot symbols), while new ABI code references the function
3387	 descriptor symbol.  We need to make any combination of reference and
3388	 definition work together, without breaking archive linking.
3389
3390	 For a defined function "foo" and an undefined call to "bar":
3391	 An old object defines "foo" and ".foo", references ".bar" (possibly
3392	 "bar" too).
3393	 A new object defines "foo" and references "bar".
3394
3395	 A new object thus has no problem with its undefined symbols being
3396	 satisfied by definitions in an old object.  On the other hand, the
3397	 old object won't have ".bar" satisfied by a new object.
3398
3399	 Keep a list of newly added dot-symbols.  */
3400
3401      if (string[0] == '.')
3402	{
3403	  struct ppc_link_hash_table *htab;
3404
3405	  htab = (struct ppc_link_hash_table *) table;
3406	  eh->u.next_dot_sym = htab->dot_syms;
3407	  htab->dot_syms = eh;
3408	}
3409    }
3410
3411  return entry;
3412}
3413
3414struct tocsave_entry
3415{
3416  asection *sec;
3417  bfd_vma offset;
3418};
3419
3420static hashval_t
3421tocsave_htab_hash (const void *p)
3422{
3423  const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3424  return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
3425}
3426
3427static int
3428tocsave_htab_eq (const void *p1, const void *p2)
3429{
3430  const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3431  const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3432  return e1->sec == e2->sec && e1->offset == e2->offset;
3433}
3434
3435/* Destroy a ppc64 ELF linker hash table.  */
3436
3437static void
3438ppc64_elf_link_hash_table_free (bfd *obfd)
3439{
3440  struct ppc_link_hash_table *htab;
3441
3442  htab = (struct ppc_link_hash_table *) obfd->link.hash;
3443  if (htab->tocsave_htab)
3444    htab_delete (htab->tocsave_htab);
3445  bfd_hash_table_free (&htab->branch_hash_table);
3446  bfd_hash_table_free (&htab->stub_hash_table);
3447  _bfd_elf_link_hash_table_free (obfd);
3448}
3449
3450/* Create a ppc64 ELF linker hash table.  */
3451
3452static struct bfd_link_hash_table *
3453ppc64_elf_link_hash_table_create (bfd *abfd)
3454{
3455  struct ppc_link_hash_table *htab;
3456  size_t amt = sizeof (struct ppc_link_hash_table);
3457
3458  htab = bfd_zmalloc (amt);
3459  if (htab == NULL)
3460    return NULL;
3461
3462  if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3463				      sizeof (struct ppc_link_hash_entry),
3464				      PPC64_ELF_DATA))
3465    {
3466      free (htab);
3467      return NULL;
3468    }
3469
3470  /* Init the stub hash table too.  */
3471  if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3472			    sizeof (struct ppc_stub_hash_entry)))
3473    {
3474      _bfd_elf_link_hash_table_free (abfd);
3475      return NULL;
3476    }
3477
3478  /* And the branch hash table.  */
3479  if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3480			    sizeof (struct ppc_branch_hash_entry)))
3481    {
3482      bfd_hash_table_free (&htab->stub_hash_table);
3483      _bfd_elf_link_hash_table_free (abfd);
3484      return NULL;
3485    }
3486
3487  htab->tocsave_htab = htab_try_create (1024,
3488					tocsave_htab_hash,
3489					tocsave_htab_eq,
3490					NULL);
3491  if (htab->tocsave_htab == NULL)
3492    {
3493      ppc64_elf_link_hash_table_free (abfd);
3494      return NULL;
3495    }
3496  htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
3497
3498  /* Initializing two fields of the union is just cosmetic.  We really
3499     only care about glist, but when compiled on a 32-bit host the
3500     bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3501     debugger inspection of these fields look nicer.  */
3502  htab->elf.init_got_refcount.refcount = 0;
3503  htab->elf.init_got_refcount.glist = NULL;
3504  htab->elf.init_plt_refcount.refcount = 0;
3505  htab->elf.init_plt_refcount.glist = NULL;
3506  htab->elf.init_got_offset.offset = 0;
3507  htab->elf.init_got_offset.glist = NULL;
3508  htab->elf.init_plt_offset.offset = 0;
3509  htab->elf.init_plt_offset.glist = NULL;
3510
3511  return &htab->elf.root;
3512}
3513
3514/* Create sections for linker generated code.  */
3515
3516static bfd_boolean
3517create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3518{
3519  struct ppc_link_hash_table *htab;
3520  flagword flags;
3521
3522  htab = ppc_hash_table (info);
3523
3524  flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3525	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3526  if (htab->params->save_restore_funcs)
3527    {
3528      /* Create .sfpr for code to save and restore fp regs.  */
3529      htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3530						       flags);
3531      if (htab->sfpr == NULL
3532	  || !bfd_set_section_alignment (htab->sfpr, 2))
3533	return FALSE;
3534    }
3535
3536  if (bfd_link_relocatable (info))
3537    return TRUE;
3538
3539  /* Create .glink for lazy dynamic linking support.  */
3540  htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3541						    flags);
3542  if (htab->glink == NULL
3543      || !bfd_set_section_alignment (htab->glink, 3))
3544    return FALSE;
3545
3546  /* The part of .glink used by global entry stubs, separate so that
3547     it can be aligned appropriately without affecting htab->glink.  */
3548  htab->global_entry = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3549							   flags);
3550  if (htab->global_entry == NULL
3551      || !bfd_set_section_alignment (htab->global_entry, 2))
3552    return FALSE;
3553
3554  if (!info->no_ld_generated_unwind_info)
3555    {
3556      flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
3557	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3558      htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
3559								 ".eh_frame",
3560								 flags);
3561      if (htab->glink_eh_frame == NULL
3562	  || !bfd_set_section_alignment (htab->glink_eh_frame, 2))
3563	return FALSE;
3564    }
3565
3566  flags = SEC_ALLOC | SEC_LINKER_CREATED;
3567  htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
3568  if (htab->elf.iplt == NULL
3569      || !bfd_set_section_alignment (htab->elf.iplt, 3))
3570    return FALSE;
3571
3572  flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3573	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3574  htab->elf.irelplt
3575    = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
3576  if (htab->elf.irelplt == NULL
3577      || !bfd_set_section_alignment (htab->elf.irelplt, 3))
3578    return FALSE;
3579
3580  /* Create branch lookup table for plt_branch stubs.  */
3581  flags = (SEC_ALLOC | SEC_LOAD
3582	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3583  htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3584						   flags);
3585  if (htab->brlt == NULL
3586      || !bfd_set_section_alignment (htab->brlt, 3))
3587    return FALSE;
3588
3589  /* Local plt entries, put in .branch_lt but a separate section for
3590     convenience.  */
3591  htab->pltlocal = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3592						       flags);
3593  if (htab->pltlocal == NULL
3594      || !bfd_set_section_alignment (htab->pltlocal, 3))
3595    return FALSE;
3596
3597  if (!bfd_link_pic (info))
3598    return TRUE;
3599
3600  flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3601	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3602  htab->relbrlt
3603    = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3604  if (htab->relbrlt == NULL
3605      || !bfd_set_section_alignment (htab->relbrlt, 3))
3606    return FALSE;
3607
3608  htab->relpltlocal
3609    = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3610  if (htab->relpltlocal == NULL
3611      || !bfd_set_section_alignment (htab->relpltlocal, 3))
3612    return FALSE;
3613
3614  return TRUE;
3615}
3616
3617/* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3618
3619bfd_boolean
3620ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
3621			 struct ppc64_elf_params *params)
3622{
3623  struct ppc_link_hash_table *htab;
3624
3625  elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
3626
3627/* Always hook our dynamic sections into the first bfd, which is the
3628   linker created stub bfd.  This ensures that the GOT header is at
3629   the start of the output TOC section.  */
3630  htab = ppc_hash_table (info);
3631  htab->elf.dynobj = params->stub_bfd;
3632  htab->params = params;
3633
3634  return create_linkage_sections (htab->elf.dynobj, info);
3635}
3636
3637/* Build a name for an entry in the stub hash table.  */
3638
3639static char *
3640ppc_stub_name (const asection *input_section,
3641	       const asection *sym_sec,
3642	       const struct ppc_link_hash_entry *h,
3643	       const Elf_Internal_Rela *rel)
3644{
3645  char *stub_name;
3646  ssize_t len;
3647
3648  /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3649     offsets from a sym as a branch target?  In fact, we could
3650     probably assume the addend is always zero.  */
3651  BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3652
3653  if (h)
3654    {
3655      len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3656      stub_name = bfd_malloc (len);
3657      if (stub_name == NULL)
3658	return stub_name;
3659
3660      len = sprintf (stub_name, "%08x.%s+%x",
3661		     input_section->id & 0xffffffff,
3662		     h->elf.root.root.string,
3663		     (int) rel->r_addend & 0xffffffff);
3664    }
3665  else
3666    {
3667      len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3668      stub_name = bfd_malloc (len);
3669      if (stub_name == NULL)
3670	return stub_name;
3671
3672      len = sprintf (stub_name, "%08x.%x:%x+%x",
3673		     input_section->id & 0xffffffff,
3674		     sym_sec->id & 0xffffffff,
3675		     (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3676		     (int) rel->r_addend & 0xffffffff);
3677    }
3678  if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3679    stub_name[len - 2] = 0;
3680  return stub_name;
3681}
3682
3683/* If mixing power10 with non-power10 code and --power10-stubs is not
3684   specified (or is auto) then calls using @notoc relocations that
3685   need a stub will utilize power10 instructions in the stub, and
3686   calls without @notoc relocations will not use power10 instructions.
3687   The two classes of stubs are stored in separate stub_hash_table
3688   entries having the same key string.  The two entries will always be
3689   adjacent on entry->root.next chain, even if hash table resizing
3690   occurs.  This function selects the correct entry to use.  */
3691
3692static struct ppc_stub_hash_entry *
3693select_alt_stub (struct ppc_stub_hash_entry *entry, bfd_boolean notoc)
3694{
3695  bfd_boolean have_notoc;
3696
3697  have_notoc = (entry->stub_type == ppc_stub_plt_call_notoc
3698		|| entry->stub_type == ppc_stub_plt_branch_notoc
3699		|| entry->stub_type == ppc_stub_long_branch_notoc);
3700
3701  if (have_notoc != notoc)
3702    {
3703      const char *stub_name = entry->root.string;
3704
3705      entry = (struct ppc_stub_hash_entry *) entry->root.next;
3706      if (entry != NULL
3707	  && entry->root.string != stub_name)
3708	entry = NULL;
3709    }
3710
3711  return entry;
3712}
3713
3714/* Look up an entry in the stub hash.  Stub entries are cached because
3715   creating the stub name takes a bit of time.  */
3716
3717static struct ppc_stub_hash_entry *
3718ppc_get_stub_entry (const asection *input_section,
3719		    const asection *sym_sec,
3720		    struct ppc_link_hash_entry *h,
3721		    const Elf_Internal_Rela *rel,
3722		    struct ppc_link_hash_table *htab)
3723{
3724  struct ppc_stub_hash_entry *stub_entry;
3725  struct map_stub *group;
3726
3727  /* If this input section is part of a group of sections sharing one
3728     stub section, then use the id of the first section in the group.
3729     Stub names need to include a section id, as there may well be
3730     more than one stub used to reach say, printf, and we need to
3731     distinguish between them.  */
3732  group = htab->sec_info[input_section->id].u.group;
3733  if (group == NULL)
3734    return NULL;
3735
3736  if (h != NULL && h->u.stub_cache != NULL
3737      && h->u.stub_cache->h == h
3738      && h->u.stub_cache->group == group)
3739    {
3740      stub_entry = h->u.stub_cache;
3741    }
3742  else
3743    {
3744      char *stub_name;
3745
3746      stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
3747      if (stub_name == NULL)
3748	return NULL;
3749
3750      stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3751					 stub_name, FALSE, FALSE);
3752      if (h != NULL)
3753	h->u.stub_cache = stub_entry;
3754
3755      free (stub_name);
3756    }
3757
3758  if (stub_entry != NULL && htab->params->power10_stubs == -1)
3759    {
3760      bfd_boolean notoc = ELF64_R_TYPE (rel->r_info) == R_PPC64_REL24_NOTOC;
3761
3762      stub_entry = select_alt_stub (stub_entry, notoc);
3763    }
3764
3765  return stub_entry;
3766}
3767
3768/* Add a new stub entry to the stub hash.  Not all fields of the new
3769   stub entry are initialised.  */
3770
3771static struct ppc_stub_hash_entry *
3772ppc_add_stub (const char *stub_name,
3773	      asection *section,
3774	      struct bfd_link_info *info)
3775{
3776  struct ppc_link_hash_table *htab = ppc_hash_table (info);
3777  struct map_stub *group;
3778  asection *link_sec;
3779  asection *stub_sec;
3780  struct ppc_stub_hash_entry *stub_entry;
3781
3782  group = htab->sec_info[section->id].u.group;
3783  link_sec = group->link_sec;
3784  stub_sec = group->stub_sec;
3785  if (stub_sec == NULL)
3786    {
3787      size_t namelen;
3788      bfd_size_type len;
3789      char *s_name;
3790
3791      namelen = strlen (link_sec->name);
3792      len = namelen + sizeof (STUB_SUFFIX);
3793      s_name = bfd_alloc (htab->params->stub_bfd, len);
3794      if (s_name == NULL)
3795	return NULL;
3796
3797      memcpy (s_name, link_sec->name, namelen);
3798      memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3799      stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
3800      if (stub_sec == NULL)
3801	return NULL;
3802      group->stub_sec = stub_sec;
3803    }
3804
3805  /* Enter this entry into the linker stub hash table.  */
3806  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3807				     TRUE, FALSE);
3808  if (stub_entry == NULL)
3809    {
3810      /* xgettext:c-format */
3811      _bfd_error_handler (_("%pB: cannot create stub entry %s"),
3812			  section->owner, stub_name);
3813      return NULL;
3814    }
3815
3816  stub_entry->group = group;
3817  stub_entry->stub_offset = 0;
3818  return stub_entry;
3819}
3820
3821/* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3822   not already done.  */
3823
3824static bfd_boolean
3825create_got_section (bfd *abfd, struct bfd_link_info *info)
3826{
3827  asection *got, *relgot;
3828  flagword flags;
3829  struct ppc_link_hash_table *htab = ppc_hash_table (info);
3830
3831  if (!is_ppc64_elf (abfd))
3832    return FALSE;
3833  if (htab == NULL)
3834    return FALSE;
3835
3836  if (!htab->elf.sgot
3837      && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
3838    return FALSE;
3839
3840  flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3841	   | SEC_LINKER_CREATED);
3842
3843  got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3844  if (!got
3845      || !bfd_set_section_alignment (got, 3))
3846    return FALSE;
3847
3848  relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3849					       flags | SEC_READONLY);
3850  if (!relgot
3851      || !bfd_set_section_alignment (relgot, 3))
3852    return FALSE;
3853
3854  ppc64_elf_tdata (abfd)->got = got;
3855  ppc64_elf_tdata (abfd)->relgot = relgot;
3856  return TRUE;
3857}
3858
3859/* Follow indirect and warning symbol links.  */
3860
3861static inline struct bfd_link_hash_entry *
3862follow_link (struct bfd_link_hash_entry *h)
3863{
3864  while (h->type == bfd_link_hash_indirect
3865	 || h->type == bfd_link_hash_warning)
3866    h = h->u.i.link;
3867  return h;
3868}
3869
3870static inline struct elf_link_hash_entry *
3871elf_follow_link (struct elf_link_hash_entry *h)
3872{
3873  return (struct elf_link_hash_entry *) follow_link (&h->root);
3874}
3875
3876static inline struct ppc_link_hash_entry *
3877ppc_follow_link (struct ppc_link_hash_entry *h)
3878{
3879  return ppc_elf_hash_entry (elf_follow_link (&h->elf));
3880}
3881
3882/* Merge PLT info on FROM with that on TO.  */
3883
3884static void
3885move_plt_plist (struct ppc_link_hash_entry *from,
3886		struct ppc_link_hash_entry *to)
3887{
3888  if (from->elf.plt.plist != NULL)
3889    {
3890      if (to->elf.plt.plist != NULL)
3891	{
3892	  struct plt_entry **entp;
3893	  struct plt_entry *ent;
3894
3895	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3896	    {
3897	      struct plt_entry *dent;
3898
3899	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3900		if (dent->addend == ent->addend)
3901		  {
3902		    dent->plt.refcount += ent->plt.refcount;
3903		    *entp = ent->next;
3904		    break;
3905		  }
3906	      if (dent == NULL)
3907		entp = &ent->next;
3908	    }
3909	  *entp = to->elf.plt.plist;
3910	}
3911
3912      to->elf.plt.plist = from->elf.plt.plist;
3913      from->elf.plt.plist = NULL;
3914    }
3915}
3916
3917/* Copy the extra info we tack onto an elf_link_hash_entry.  */
3918
3919static void
3920ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3921				struct elf_link_hash_entry *dir,
3922				struct elf_link_hash_entry *ind)
3923{
3924  struct ppc_link_hash_entry *edir, *eind;
3925
3926  edir = ppc_elf_hash_entry (dir);
3927  eind = ppc_elf_hash_entry (ind);
3928
3929  edir->is_func |= eind->is_func;
3930  edir->is_func_descriptor |= eind->is_func_descriptor;
3931  edir->tls_mask |= eind->tls_mask;
3932  if (eind->oh != NULL)
3933    edir->oh = ppc_follow_link (eind->oh);
3934
3935  if (edir->elf.versioned != versioned_hidden)
3936    edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
3937  edir->elf.ref_regular |= eind->elf.ref_regular;
3938  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
3939  edir->elf.non_got_ref |= eind->elf.non_got_ref;
3940  edir->elf.needs_plt |= eind->elf.needs_plt;
3941  edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
3942
3943  /* If we were called to copy over info for a weak sym, don't copy
3944     dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
3945     in order to simplify readonly_dynrelocs and save a field in the
3946     symbol hash entry, but that means dyn_relocs can't be used in any
3947     tests about a specific symbol, or affect other symbol flags which
3948     are then tested.  */
3949  if (eind->elf.root.type != bfd_link_hash_indirect)
3950    return;
3951
3952  /* Copy over any dynamic relocs we may have on the indirect sym.  */
3953  if (ind->dyn_relocs != NULL)
3954    {
3955      if (dir->dyn_relocs != NULL)
3956	{
3957	  struct elf_dyn_relocs **pp;
3958	  struct elf_dyn_relocs *p;
3959
3960	  /* Add reloc counts against the indirect sym to the direct sym
3961	     list.  Merge any entries against the same section.  */
3962	  for (pp = &ind->dyn_relocs; (p = *pp) != NULL; )
3963	    {
3964	      struct elf_dyn_relocs *q;
3965
3966	      for (q = dir->dyn_relocs; q != NULL; q = q->next)
3967		if (q->sec == p->sec)
3968		  {
3969		    q->pc_count += p->pc_count;
3970		    q->count += p->count;
3971		    *pp = p->next;
3972		    break;
3973		  }
3974	      if (q == NULL)
3975		pp = &p->next;
3976	    }
3977	  *pp = dir->dyn_relocs;
3978	}
3979
3980      dir->dyn_relocs = ind->dyn_relocs;
3981      ind->dyn_relocs = NULL;
3982    }
3983
3984  /* Copy over got entries that we may have already seen to the
3985     symbol which just became indirect.  */
3986  if (eind->elf.got.glist != NULL)
3987    {
3988      if (edir->elf.got.glist != NULL)
3989	{
3990	  struct got_entry **entp;
3991	  struct got_entry *ent;
3992
3993	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3994	    {
3995	      struct got_entry *dent;
3996
3997	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3998		if (dent->addend == ent->addend
3999		    && dent->owner == ent->owner
4000		    && dent->tls_type == ent->tls_type)
4001		  {
4002		    dent->got.refcount += ent->got.refcount;
4003		    *entp = ent->next;
4004		    break;
4005		  }
4006	      if (dent == NULL)
4007		entp = &ent->next;
4008	    }
4009	  *entp = edir->elf.got.glist;
4010	}
4011
4012      edir->elf.got.glist = eind->elf.got.glist;
4013      eind->elf.got.glist = NULL;
4014    }
4015
4016  /* And plt entries.  */
4017  move_plt_plist (eind, edir);
4018
4019  if (eind->elf.dynindx != -1)
4020    {
4021      if (edir->elf.dynindx != -1)
4022	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4023				edir->elf.dynstr_index);
4024      edir->elf.dynindx = eind->elf.dynindx;
4025      edir->elf.dynstr_index = eind->elf.dynstr_index;
4026      eind->elf.dynindx = -1;
4027      eind->elf.dynstr_index = 0;
4028    }
4029}
4030
4031/* Find the function descriptor hash entry from the given function code
4032   hash entry FH.  Link the entries via their OH fields.  */
4033
4034static struct ppc_link_hash_entry *
4035lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4036{
4037  struct ppc_link_hash_entry *fdh = fh->oh;
4038
4039  if (fdh == NULL)
4040    {
4041      const char *fd_name = fh->elf.root.root.string + 1;
4042
4043      fdh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, fd_name,
4044						      FALSE, FALSE, FALSE));
4045      if (fdh == NULL)
4046	return fdh;
4047
4048      fdh->is_func_descriptor = 1;
4049      fdh->oh = fh;
4050      fh->is_func = 1;
4051      fh->oh = fdh;
4052    }
4053
4054  fdh = ppc_follow_link (fdh);
4055  fdh->is_func_descriptor = 1;
4056  fdh->oh = fh;
4057  return fdh;
4058}
4059
4060/* Make a fake function descriptor sym for the undefined code sym FH.  */
4061
4062static struct ppc_link_hash_entry *
4063make_fdh (struct bfd_link_info *info,
4064	  struct ppc_link_hash_entry *fh)
4065{
4066  bfd *abfd = fh->elf.root.u.undef.abfd;
4067  struct bfd_link_hash_entry *bh = NULL;
4068  struct ppc_link_hash_entry *fdh;
4069  flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
4070		    ? BSF_WEAK
4071		    : BSF_GLOBAL);
4072
4073  if (!_bfd_generic_link_add_one_symbol (info, abfd,
4074					 fh->elf.root.root.string + 1,
4075					 flags, bfd_und_section_ptr, 0,
4076					 NULL, FALSE, FALSE, &bh))
4077    return NULL;
4078
4079  fdh = (struct ppc_link_hash_entry *) bh;
4080  fdh->elf.non_elf = 0;
4081  fdh->fake = 1;
4082  fdh->is_func_descriptor = 1;
4083  fdh->oh = fh;
4084  fh->is_func = 1;
4085  fh->oh = fdh;
4086  return fdh;
4087}
4088
4089/* Fix function descriptor symbols defined in .opd sections to be
4090   function type.  */
4091
4092static bfd_boolean
4093ppc64_elf_add_symbol_hook (bfd *ibfd,
4094			   struct bfd_link_info *info,
4095			   Elf_Internal_Sym *isym,
4096			   const char **name,
4097			   flagword *flags ATTRIBUTE_UNUSED,
4098			   asection **sec,
4099			   bfd_vma *value)
4100{
4101  if (*sec != NULL
4102      && strcmp ((*sec)->name, ".opd") == 0)
4103    {
4104      asection *code_sec;
4105
4106      if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4107	    || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
4108	isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4109
4110      /* If the symbol is a function defined in .opd, and the function
4111	 code is in a discarded group, let it appear to be undefined.  */
4112      if (!bfd_link_relocatable (info)
4113	  && (*sec)->reloc_count != 0
4114	  && opd_entry_value (*sec, *value, &code_sec, NULL,
4115			      FALSE) != (bfd_vma) -1
4116	  && discarded_section (code_sec))
4117	{
4118	  *sec = bfd_und_section_ptr;
4119	  isym->st_shndx = SHN_UNDEF;
4120	}
4121    }
4122  else if (*sec != NULL
4123	   && strcmp ((*sec)->name, ".toc") == 0
4124	   && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4125    {
4126      struct ppc_link_hash_table *htab = ppc_hash_table (info);
4127      if (htab != NULL)
4128	htab->params->object_in_toc = 1;
4129    }
4130
4131  if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4132    {
4133      if (abiversion (ibfd) == 0)
4134	set_abiversion (ibfd, 2);
4135      else if (abiversion (ibfd) == 1)
4136	{
4137	  _bfd_error_handler (_("symbol '%s' has invalid st_other"
4138				" for ABI version 1"), *name);
4139	  bfd_set_error (bfd_error_bad_value);
4140	  return FALSE;
4141	}
4142    }
4143
4144  return TRUE;
4145}
4146
4147/* Merge non-visibility st_other attributes: local entry point.  */
4148
4149static void
4150ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
4151				  const Elf_Internal_Sym *isym,
4152				  bfd_boolean definition,
4153				  bfd_boolean dynamic)
4154{
4155  if (definition && (!dynamic || !h->def_regular))
4156    h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
4157		| ELF_ST_VISIBILITY (h->other));
4158}
4159
4160/* Hook called on merging a symbol.  We use this to clear "fake" since
4161   we now have a real symbol.  */
4162
4163static bfd_boolean
4164ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
4165			const Elf_Internal_Sym *isym,
4166			asection **psec ATTRIBUTE_UNUSED,
4167			bfd_boolean newdef ATTRIBUTE_UNUSED,
4168			bfd_boolean olddef ATTRIBUTE_UNUSED,
4169			bfd *oldbfd ATTRIBUTE_UNUSED,
4170			const asection *oldsec ATTRIBUTE_UNUSED)
4171{
4172  ppc_elf_hash_entry (h)->fake = 0;
4173  if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4174    ppc_elf_hash_entry (h)->non_zero_localentry = 1;
4175  return TRUE;
4176}
4177
4178/* This function makes an old ABI object reference to ".bar" cause the
4179   inclusion of a new ABI object archive that defines "bar".
4180   NAME is a symbol defined in an archive.  Return a symbol in the hash
4181   table that might be satisfied by the archive symbols.  */
4182
4183static struct elf_link_hash_entry *
4184ppc64_elf_archive_symbol_lookup (bfd *abfd,
4185				 struct bfd_link_info *info,
4186				 const char *name)
4187{
4188  struct elf_link_hash_entry *h;
4189  char *dot_name;
4190  size_t len;
4191
4192  h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4193  if (h != NULL
4194      /* Don't return this sym if it is a fake function descriptor
4195	 created by add_symbol_adjust.  */
4196      && !ppc_elf_hash_entry (h)->fake)
4197    return h;
4198
4199  if (name[0] == '.')
4200    return h;
4201
4202  len = strlen (name);
4203  dot_name = bfd_alloc (abfd, len + 2);
4204  if (dot_name == NULL)
4205    return (struct elf_link_hash_entry *) -1;
4206  dot_name[0] = '.';
4207  memcpy (dot_name + 1, name, len + 1);
4208  h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4209  bfd_release (abfd, dot_name);
4210  if (h != NULL)
4211    return h;
4212
4213  if (strcmp (name, "__tls_get_addr_opt") == 0)
4214    h = _bfd_elf_archive_symbol_lookup (abfd, info, "__tls_get_addr_desc");
4215  return h;
4216}
4217
4218/* This function satisfies all old ABI object references to ".bar" if a
4219   new ABI object defines "bar".  Well, at least, undefined dot symbols
4220   are made weak.  This stops later archive searches from including an
4221   object if we already have a function descriptor definition.  It also
4222   prevents the linker complaining about undefined symbols.
4223   We also check and correct mismatched symbol visibility here.  The
4224   most restrictive visibility of the function descriptor and the
4225   function entry symbol is used.  */
4226
4227static bfd_boolean
4228add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4229{
4230  struct ppc_link_hash_table *htab;
4231  struct ppc_link_hash_entry *fdh;
4232
4233  if (eh->elf.root.type == bfd_link_hash_warning)
4234    eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4235
4236  if (eh->elf.root.type == bfd_link_hash_indirect)
4237    return TRUE;
4238
4239  if (eh->elf.root.root.string[0] != '.')
4240    abort ();
4241
4242  htab = ppc_hash_table (info);
4243  if (htab == NULL)
4244    return FALSE;
4245
4246  fdh = lookup_fdh (eh, htab);
4247  if (fdh == NULL
4248      && !bfd_link_relocatable (info)
4249      && (eh->elf.root.type == bfd_link_hash_undefined
4250	  || eh->elf.root.type == bfd_link_hash_undefweak)
4251      && eh->elf.ref_regular)
4252    {
4253      /* Make an undefined function descriptor sym, in order to
4254	 pull in an --as-needed shared lib.  Archives are handled
4255	 elsewhere.  */
4256      fdh = make_fdh (info, eh);
4257      if (fdh == NULL)
4258	return FALSE;
4259    }
4260
4261  if (fdh != NULL)
4262    {
4263      unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4264      unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4265
4266      /* Make both descriptor and entry symbol have the most
4267	 constraining visibility of either symbol.  */
4268      if (entry_vis < descr_vis)
4269	fdh->elf.other += entry_vis - descr_vis;
4270      else if (entry_vis > descr_vis)
4271	eh->elf.other += descr_vis - entry_vis;
4272
4273      /* Propagate reference flags from entry symbol to function
4274	 descriptor symbol.  */
4275      fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
4276      fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
4277      fdh->elf.ref_regular |= eh->elf.ref_regular;
4278      fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
4279
4280      if (!fdh->elf.forced_local
4281	  && fdh->elf.dynindx == -1
4282	  && fdh->elf.versioned != versioned_hidden
4283	  && (bfd_link_dll (info)
4284	      || fdh->elf.def_dynamic
4285	      || fdh->elf.ref_dynamic)
4286	  && (eh->elf.ref_regular
4287	      || eh->elf.def_regular))
4288	{
4289	  if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4290	    return FALSE;
4291	}
4292    }
4293
4294  return TRUE;
4295}
4296
4297/* Set up opd section info and abiversion for IBFD, and process list
4298   of dot-symbols we made in link_hash_newfunc.  */
4299
4300static bfd_boolean
4301ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
4302{
4303  struct ppc_link_hash_table *htab;
4304  struct ppc_link_hash_entry **p, *eh;
4305  asection *opd = bfd_get_section_by_name (ibfd, ".opd");
4306
4307  if (opd != NULL && opd->size != 0)
4308    {
4309      BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
4310      ppc64_elf_section_data (opd)->sec_type = sec_opd;
4311
4312      if (abiversion (ibfd) == 0)
4313	set_abiversion (ibfd, 1);
4314      else if (abiversion (ibfd) >= 2)
4315	{
4316	  /* xgettext:c-format */
4317	  _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
4318			      ibfd, abiversion (ibfd));
4319	  bfd_set_error (bfd_error_bad_value);
4320	  return FALSE;
4321	}
4322    }
4323
4324  if (is_ppc64_elf (info->output_bfd))
4325    {
4326      /* For input files without an explicit abiversion in e_flags
4327	 we should have flagged any with symbol st_other bits set
4328	 as ELFv1 and above flagged those with .opd as ELFv2.
4329	 Set the output abiversion if not yet set, and for any input
4330	 still ambiguous, take its abiversion from the output.
4331	 Differences in ABI are reported later.  */
4332      if (abiversion (info->output_bfd) == 0)
4333	set_abiversion (info->output_bfd, abiversion (ibfd));
4334      else if (abiversion (ibfd) == 0)
4335	set_abiversion (ibfd, abiversion (info->output_bfd));
4336    }
4337
4338  htab = ppc_hash_table (info);
4339  if (htab == NULL)
4340    return TRUE;
4341
4342  if (opd != NULL && opd->size != 0
4343      && (ibfd->flags & DYNAMIC) == 0
4344      && (opd->flags & SEC_RELOC) != 0
4345      && opd->reloc_count != 0
4346      && !bfd_is_abs_section (opd->output_section)
4347      && info->gc_sections)
4348    {
4349      /* Garbage collection needs some extra help with .opd sections.
4350	 We don't want to necessarily keep everything referenced by
4351	 relocs in .opd, as that would keep all functions.  Instead,
4352	 if we reference an .opd symbol (a function descriptor), we
4353	 want to keep the function code symbol's section.  This is
4354	 easy for global symbols, but for local syms we need to keep
4355	 information about the associated function section.  */
4356      bfd_size_type amt;
4357      asection **opd_sym_map;
4358      Elf_Internal_Shdr *symtab_hdr;
4359      Elf_Internal_Rela *relocs, *rel_end, *rel;
4360
4361      amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
4362      opd_sym_map = bfd_zalloc (ibfd, amt);
4363      if (opd_sym_map == NULL)
4364	return FALSE;
4365      ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
4366      relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
4367					  info->keep_memory);
4368      if (relocs == NULL)
4369	return FALSE;
4370      symtab_hdr = &elf_symtab_hdr (ibfd);
4371      rel_end = relocs + opd->reloc_count - 1;
4372      for (rel = relocs; rel < rel_end; rel++)
4373	{
4374	  enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
4375	  unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
4376
4377	  if (r_type == R_PPC64_ADDR64
4378	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
4379	      && r_symndx < symtab_hdr->sh_info)
4380	    {
4381	      Elf_Internal_Sym *isym;
4382	      asection *s;
4383
4384	      isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd,
4385					    r_symndx);
4386	      if (isym == NULL)
4387		{
4388		  if (elf_section_data (opd)->relocs != relocs)
4389		    free (relocs);
4390		  return FALSE;
4391		}
4392
4393	      s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
4394	      if (s != NULL && s != opd)
4395		opd_sym_map[OPD_NDX (rel->r_offset)] = s;
4396	    }
4397	}
4398      if (elf_section_data (opd)->relocs != relocs)
4399	free (relocs);
4400    }
4401
4402  p = &htab->dot_syms;
4403  while ((eh = *p) != NULL)
4404    {
4405      *p = NULL;
4406      if (&eh->elf == htab->elf.hgot)
4407	;
4408      else if (htab->elf.hgot == NULL
4409	       && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4410	htab->elf.hgot = &eh->elf;
4411      else if (abiversion (ibfd) <= 1)
4412	{
4413	  htab->need_func_desc_adj = 1;
4414	  if (!add_symbol_adjust (eh, info))
4415	    return FALSE;
4416	}
4417      p = &eh->u.next_dot_sym;
4418    }
4419  return TRUE;
4420}
4421
4422/* Undo hash table changes when an --as-needed input file is determined
4423   not to be needed.  */
4424
4425static bfd_boolean
4426ppc64_elf_notice_as_needed (bfd *ibfd,
4427			    struct bfd_link_info *info,
4428			    enum notice_asneeded_action act)
4429{
4430  if (act == notice_not_needed)
4431    {
4432      struct ppc_link_hash_table *htab = ppc_hash_table (info);
4433
4434      if (htab == NULL)
4435	return FALSE;
4436
4437      htab->dot_syms = NULL;
4438    }
4439  return _bfd_elf_notice_as_needed (ibfd, info, act);
4440}
4441
4442/* If --just-symbols against a final linked binary, then assume we need
4443   toc adjusting stubs when calling functions defined there.  */
4444
4445static void
4446ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4447{
4448  if ((sec->flags & SEC_CODE) != 0
4449      && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4450      && is_ppc64_elf (sec->owner))
4451    {
4452      if (abiversion (sec->owner) >= 2
4453	  || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4454	sec->has_toc_reloc = 1;
4455    }
4456  _bfd_elf_link_just_syms (sec, info);
4457}
4458
4459static struct plt_entry **
4460update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4461		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4462{
4463  struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4464  struct plt_entry **local_plt;
4465  unsigned char *local_got_tls_masks;
4466
4467  if (local_got_ents == NULL)
4468    {
4469      bfd_size_type size = symtab_hdr->sh_info;
4470
4471      size *= (sizeof (*local_got_ents)
4472	       + sizeof (*local_plt)
4473	       + sizeof (*local_got_tls_masks));
4474      local_got_ents = bfd_zalloc (abfd, size);
4475      if (local_got_ents == NULL)
4476	return NULL;
4477      elf_local_got_ents (abfd) = local_got_ents;
4478    }
4479
4480  if ((tls_type & (NON_GOT | TLS_EXPLICIT)) == 0)
4481    {
4482      struct got_entry *ent;
4483
4484      for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4485	if (ent->addend == r_addend
4486	    && ent->owner == abfd
4487	    && ent->tls_type == tls_type)
4488	  break;
4489      if (ent == NULL)
4490	{
4491	  size_t amt = sizeof (*ent);
4492	  ent = bfd_alloc (abfd, amt);
4493	  if (ent == NULL)
4494	    return FALSE;
4495	  ent->next = local_got_ents[r_symndx];
4496	  ent->addend = r_addend;
4497	  ent->owner = abfd;
4498	  ent->tls_type = tls_type;
4499	  ent->is_indirect = FALSE;
4500	  ent->got.refcount = 0;
4501	  local_got_ents[r_symndx] = ent;
4502	}
4503      ent->got.refcount += 1;
4504    }
4505
4506  local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4507  local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4508  local_got_tls_masks[r_symndx] |= tls_type & 0xff;
4509
4510  return local_plt + r_symndx;
4511}
4512
4513static bfd_boolean
4514update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4515{
4516  struct plt_entry *ent;
4517
4518  for (ent = *plist; ent != NULL; ent = ent->next)
4519    if (ent->addend == addend)
4520      break;
4521  if (ent == NULL)
4522    {
4523      size_t amt = sizeof (*ent);
4524      ent = bfd_alloc (abfd, amt);
4525      if (ent == NULL)
4526	return FALSE;
4527      ent->next = *plist;
4528      ent->addend = addend;
4529      ent->plt.refcount = 0;
4530      *plist = ent;
4531    }
4532  ent->plt.refcount += 1;
4533  return TRUE;
4534}
4535
4536static bfd_boolean
4537is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4538{
4539  return (r_type == R_PPC64_REL24
4540	  || r_type == R_PPC64_REL24_NOTOC
4541	  || r_type == R_PPC64_REL14
4542	  || r_type == R_PPC64_REL14_BRTAKEN
4543	  || r_type == R_PPC64_REL14_BRNTAKEN
4544	  || r_type == R_PPC64_ADDR24
4545	  || r_type == R_PPC64_ADDR14
4546	  || r_type == R_PPC64_ADDR14_BRTAKEN
4547	  || r_type == R_PPC64_ADDR14_BRNTAKEN
4548	  || r_type == R_PPC64_PLTCALL
4549	  || r_type == R_PPC64_PLTCALL_NOTOC);
4550}
4551
4552/* Relocs on inline plt call sequence insns prior to the call.  */
4553
4554static bfd_boolean
4555is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
4556{
4557  return (r_type == R_PPC64_PLT16_HA
4558	  || r_type == R_PPC64_PLT16_HI
4559	  || r_type == R_PPC64_PLT16_LO
4560	  || r_type == R_PPC64_PLT16_LO_DS
4561	  || r_type == R_PPC64_PLT_PCREL34
4562	  || r_type == R_PPC64_PLT_PCREL34_NOTOC
4563	  || r_type == R_PPC64_PLTSEQ
4564	  || r_type == R_PPC64_PLTSEQ_NOTOC);
4565}
4566
4567/* Look through the relocs for a section during the first phase, and
4568   calculate needed space in the global offset table, procedure
4569   linkage table, and dynamic reloc sections.  */
4570
4571static bfd_boolean
4572ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4573			asection *sec, const Elf_Internal_Rela *relocs)
4574{
4575  struct ppc_link_hash_table *htab;
4576  Elf_Internal_Shdr *symtab_hdr;
4577  struct elf_link_hash_entry **sym_hashes;
4578  const Elf_Internal_Rela *rel;
4579  const Elf_Internal_Rela *rel_end;
4580  asection *sreloc;
4581  struct elf_link_hash_entry *tga, *dottga;
4582  bfd_boolean is_opd;
4583
4584  if (bfd_link_relocatable (info))
4585    return TRUE;
4586
4587  BFD_ASSERT (is_ppc64_elf (abfd));
4588
4589  htab = ppc_hash_table (info);
4590  if (htab == NULL)
4591    return FALSE;
4592
4593  tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4594			      FALSE, FALSE, TRUE);
4595  dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4596				 FALSE, FALSE, TRUE);
4597  symtab_hdr = &elf_symtab_hdr (abfd);
4598  sym_hashes = elf_sym_hashes (abfd);
4599  sreloc = NULL;
4600  is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
4601  rel_end = relocs + sec->reloc_count;
4602  for (rel = relocs; rel < rel_end; rel++)
4603    {
4604      unsigned long r_symndx;
4605      struct elf_link_hash_entry *h;
4606      enum elf_ppc64_reloc_type r_type;
4607      int tls_type;
4608      struct _ppc64_elf_section_data *ppc64_sec;
4609      struct plt_entry **ifunc, **plt_list;
4610
4611      r_symndx = ELF64_R_SYM (rel->r_info);
4612      if (r_symndx < symtab_hdr->sh_info)
4613	h = NULL;
4614      else
4615	{
4616	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4617	  h = elf_follow_link (h);
4618
4619	  if (h == htab->elf.hgot)
4620	    sec->has_toc_reloc = 1;
4621	}
4622
4623      r_type = ELF64_R_TYPE (rel->r_info);
4624      switch (r_type)
4625	{
4626	case R_PPC64_D34:
4627	case R_PPC64_D34_LO:
4628	case R_PPC64_D34_HI30:
4629	case R_PPC64_D34_HA30:
4630	case R_PPC64_D28:
4631	case R_PPC64_TPREL34:
4632	case R_PPC64_DTPREL34:
4633	case R_PPC64_PCREL34:
4634	case R_PPC64_GOT_PCREL34:
4635	case R_PPC64_GOT_TLSGD_PCREL34:
4636	case R_PPC64_GOT_TLSLD_PCREL34:
4637	case R_PPC64_GOT_TPREL_PCREL34:
4638	case R_PPC64_GOT_DTPREL_PCREL34:
4639	case R_PPC64_PLT_PCREL34:
4640	case R_PPC64_PLT_PCREL34_NOTOC:
4641	case R_PPC64_PCREL28:
4642	  htab->has_power10_relocs = 1;
4643	  break;
4644	default:
4645	  break;
4646	}
4647
4648      switch (r_type)
4649	{
4650	case R_PPC64_PLT16_HA:
4651	case R_PPC64_GOT_TLSLD16_HA:
4652	case R_PPC64_GOT_TLSGD16_HA:
4653	case R_PPC64_GOT_TPREL16_HA:
4654	case R_PPC64_GOT_DTPREL16_HA:
4655	case R_PPC64_GOT16_HA:
4656	case R_PPC64_TOC16_HA:
4657	case R_PPC64_PLT16_LO:
4658	case R_PPC64_PLT16_LO_DS:
4659	case R_PPC64_GOT_TLSLD16_LO:
4660	case R_PPC64_GOT_TLSGD16_LO:
4661	case R_PPC64_GOT_TPREL16_LO_DS:
4662	case R_PPC64_GOT_DTPREL16_LO_DS:
4663	case R_PPC64_GOT16_LO:
4664	case R_PPC64_GOT16_LO_DS:
4665	case R_PPC64_TOC16_LO:
4666	case R_PPC64_TOC16_LO_DS:
4667	case R_PPC64_GOT_PCREL34:
4668	  ppc64_elf_tdata (abfd)->has_optrel = 1;
4669	  ppc64_elf_section_data (sec)->has_optrel = 1;
4670	  break;
4671	default:
4672	  break;
4673	}
4674
4675      ifunc = NULL;
4676      if (h != NULL)
4677	{
4678	  if (h->type == STT_GNU_IFUNC)
4679	    {
4680	      h->needs_plt = 1;
4681	      ifunc = &h->plt.plist;
4682	    }
4683	}
4684      else
4685	{
4686	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
4687							  abfd, r_symndx);
4688	  if (isym == NULL)
4689	    return FALSE;
4690
4691	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4692	    {
4693	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4694					     rel->r_addend,
4695					     NON_GOT | PLT_IFUNC);
4696	      if (ifunc == NULL)
4697		return FALSE;
4698	    }
4699	}
4700
4701      tls_type = 0;
4702      switch (r_type)
4703	{
4704	case R_PPC64_TLSGD:
4705	case R_PPC64_TLSLD:
4706	  /* These special tls relocs tie a call to __tls_get_addr with
4707	     its parameter symbol.  */
4708	  if (h != NULL)
4709	    ppc_elf_hash_entry (h)->tls_mask |= TLS_TLS | TLS_MARK;
4710	  else
4711	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4712					rel->r_addend,
4713					NON_GOT | TLS_TLS | TLS_MARK))
4714	      return FALSE;
4715	  sec->has_tls_reloc = 1;
4716	  break;
4717
4718	case R_PPC64_GOT_TLSLD16:
4719	case R_PPC64_GOT_TLSLD16_LO:
4720	case R_PPC64_GOT_TLSLD16_HI:
4721	case R_PPC64_GOT_TLSLD16_HA:
4722	case R_PPC64_GOT_TLSLD_PCREL34:
4723	  tls_type = TLS_TLS | TLS_LD;
4724	  goto dogottls;
4725
4726	case R_PPC64_GOT_TLSGD16:
4727	case R_PPC64_GOT_TLSGD16_LO:
4728	case R_PPC64_GOT_TLSGD16_HI:
4729	case R_PPC64_GOT_TLSGD16_HA:
4730	case R_PPC64_GOT_TLSGD_PCREL34:
4731	  tls_type = TLS_TLS | TLS_GD;
4732	  goto dogottls;
4733
4734	case R_PPC64_GOT_TPREL16_DS:
4735	case R_PPC64_GOT_TPREL16_LO_DS:
4736	case R_PPC64_GOT_TPREL16_HI:
4737	case R_PPC64_GOT_TPREL16_HA:
4738	case R_PPC64_GOT_TPREL_PCREL34:
4739	  if (bfd_link_dll (info))
4740	    info->flags |= DF_STATIC_TLS;
4741	  tls_type = TLS_TLS | TLS_TPREL;
4742	  goto dogottls;
4743
4744	case R_PPC64_GOT_DTPREL16_DS:
4745	case R_PPC64_GOT_DTPREL16_LO_DS:
4746	case R_PPC64_GOT_DTPREL16_HI:
4747	case R_PPC64_GOT_DTPREL16_HA:
4748	case R_PPC64_GOT_DTPREL_PCREL34:
4749	  tls_type = TLS_TLS | TLS_DTPREL;
4750	dogottls:
4751	  sec->has_tls_reloc = 1;
4752	  goto dogot;
4753
4754	case R_PPC64_GOT16:
4755	case R_PPC64_GOT16_LO:
4756	case R_PPC64_GOT16_HI:
4757	case R_PPC64_GOT16_HA:
4758	case R_PPC64_GOT16_DS:
4759	case R_PPC64_GOT16_LO_DS:
4760	case R_PPC64_GOT_PCREL34:
4761	dogot:
4762	  /* This symbol requires a global offset table entry.  */
4763	  sec->has_toc_reloc = 1;
4764	  if (r_type == R_PPC64_GOT_TLSLD16
4765	      || r_type == R_PPC64_GOT_TLSGD16
4766	      || r_type == R_PPC64_GOT_TPREL16_DS
4767	      || r_type == R_PPC64_GOT_DTPREL16_DS
4768	      || r_type == R_PPC64_GOT16
4769	      || r_type == R_PPC64_GOT16_DS)
4770	    {
4771	      htab->do_multi_toc = 1;
4772	      ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4773	    }
4774
4775	  if (ppc64_elf_tdata (abfd)->got == NULL
4776	      && !create_got_section (abfd, info))
4777	    return FALSE;
4778
4779	  if (h != NULL)
4780	    {
4781	      struct ppc_link_hash_entry *eh;
4782	      struct got_entry *ent;
4783
4784	      eh = ppc_elf_hash_entry (h);
4785	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4786		if (ent->addend == rel->r_addend
4787		    && ent->owner == abfd
4788		    && ent->tls_type == tls_type)
4789		  break;
4790	      if (ent == NULL)
4791		{
4792		  size_t amt = sizeof (*ent);
4793		  ent = bfd_alloc (abfd, amt);
4794		  if (ent == NULL)
4795		    return FALSE;
4796		  ent->next = eh->elf.got.glist;
4797		  ent->addend = rel->r_addend;
4798		  ent->owner = abfd;
4799		  ent->tls_type = tls_type;
4800		  ent->is_indirect = FALSE;
4801		  ent->got.refcount = 0;
4802		  eh->elf.got.glist = ent;
4803		}
4804	      ent->got.refcount += 1;
4805	      eh->tls_mask |= tls_type;
4806	    }
4807	  else
4808	    /* This is a global offset table entry for a local symbol.  */
4809	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4810					rel->r_addend, tls_type))
4811	      return FALSE;
4812	  break;
4813
4814	case R_PPC64_PLT16_HA:
4815	case R_PPC64_PLT16_HI:
4816	case R_PPC64_PLT16_LO:
4817	case R_PPC64_PLT16_LO_DS:
4818	case R_PPC64_PLT_PCREL34:
4819	case R_PPC64_PLT_PCREL34_NOTOC:
4820	case R_PPC64_PLT32:
4821	case R_PPC64_PLT64:
4822	  /* This symbol requires a procedure linkage table entry.  */
4823	  plt_list = ifunc;
4824	  if (h != NULL)
4825	    {
4826	      h->needs_plt = 1;
4827	      if (h->root.root.string[0] == '.'
4828		  && h->root.root.string[1] != '\0')
4829		ppc_elf_hash_entry (h)->is_func = 1;
4830	      ppc_elf_hash_entry (h)->tls_mask |= PLT_KEEP;
4831	      plt_list = &h->plt.plist;
4832	    }
4833	  if (plt_list == NULL)
4834	    plt_list = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4835					      rel->r_addend,
4836					      NON_GOT | PLT_KEEP);
4837	  if (!update_plt_info (abfd, plt_list, rel->r_addend))
4838	    return FALSE;
4839	  break;
4840
4841	  /* The following relocations don't need to propagate the
4842	     relocation if linking a shared object since they are
4843	     section relative.  */
4844	case R_PPC64_SECTOFF:
4845	case R_PPC64_SECTOFF_LO:
4846	case R_PPC64_SECTOFF_HI:
4847	case R_PPC64_SECTOFF_HA:
4848	case R_PPC64_SECTOFF_DS:
4849	case R_PPC64_SECTOFF_LO_DS:
4850	case R_PPC64_DTPREL16:
4851	case R_PPC64_DTPREL16_LO:
4852	case R_PPC64_DTPREL16_HI:
4853	case R_PPC64_DTPREL16_HA:
4854	case R_PPC64_DTPREL16_DS:
4855	case R_PPC64_DTPREL16_LO_DS:
4856	case R_PPC64_DTPREL16_HIGH:
4857	case R_PPC64_DTPREL16_HIGHA:
4858	case R_PPC64_DTPREL16_HIGHER:
4859	case R_PPC64_DTPREL16_HIGHERA:
4860	case R_PPC64_DTPREL16_HIGHEST:
4861	case R_PPC64_DTPREL16_HIGHESTA:
4862	  break;
4863
4864	  /* Nor do these.  */
4865	case R_PPC64_REL16:
4866	case R_PPC64_REL16_LO:
4867	case R_PPC64_REL16_HI:
4868	case R_PPC64_REL16_HA:
4869	case R_PPC64_REL16_HIGH:
4870	case R_PPC64_REL16_HIGHA:
4871	case R_PPC64_REL16_HIGHER:
4872	case R_PPC64_REL16_HIGHERA:
4873	case R_PPC64_REL16_HIGHEST:
4874	case R_PPC64_REL16_HIGHESTA:
4875	case R_PPC64_REL16_HIGHER34:
4876	case R_PPC64_REL16_HIGHERA34:
4877	case R_PPC64_REL16_HIGHEST34:
4878	case R_PPC64_REL16_HIGHESTA34:
4879	case R_PPC64_REL16DX_HA:
4880	  break;
4881
4882	  /* Not supported as a dynamic relocation.  */
4883	case R_PPC64_ADDR64_LOCAL:
4884	  if (bfd_link_pic (info))
4885	    {
4886	      if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
4887		ppc_howto_init ();
4888	      /* xgettext:c-format */
4889	      info->callbacks->einfo (_("%H: %s reloc unsupported "
4890					"in shared libraries and PIEs\n"),
4891				      abfd, sec, rel->r_offset,
4892				      ppc64_elf_howto_table[r_type]->name);
4893	      bfd_set_error (bfd_error_bad_value);
4894	      return FALSE;
4895	    }
4896	  break;
4897
4898	case R_PPC64_TOC16:
4899	case R_PPC64_TOC16_DS:
4900	  htab->do_multi_toc = 1;
4901	  ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4902	  /* Fall through.  */
4903	case R_PPC64_TOC16_LO:
4904	case R_PPC64_TOC16_HI:
4905	case R_PPC64_TOC16_HA:
4906	case R_PPC64_TOC16_LO_DS:
4907	  sec->has_toc_reloc = 1;
4908	  if (h != NULL && bfd_link_executable (info))
4909	    {
4910	      /* We may need a copy reloc.  */
4911	      h->non_got_ref = 1;
4912	      /* Strongly prefer a copy reloc over a dynamic reloc.
4913		 glibc ld.so as of 2019-08 will error out if one of
4914		 these relocations is emitted.  */
4915	      h->needs_copy = 1;
4916	      goto dodyn;
4917	    }
4918	  break;
4919
4920	  /* Marker reloc.  */
4921	case R_PPC64_ENTRY:
4922	  break;
4923
4924	  /* This relocation describes the C++ object vtable hierarchy.
4925	     Reconstruct it for later use during GC.  */
4926	case R_PPC64_GNU_VTINHERIT:
4927	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4928	    return FALSE;
4929	  break;
4930
4931	  /* This relocation describes which C++ vtable entries are actually
4932	     used.  Record for later use during GC.  */
4933	case R_PPC64_GNU_VTENTRY:
4934	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4935	    return FALSE;
4936	  break;
4937
4938	case R_PPC64_REL14:
4939	case R_PPC64_REL14_BRTAKEN:
4940	case R_PPC64_REL14_BRNTAKEN:
4941	  {
4942	    asection *dest = NULL;
4943
4944	    /* Heuristic: If jumping outside our section, chances are
4945	       we are going to need a stub.  */
4946	    if (h != NULL)
4947	      {
4948		/* If the sym is weak it may be overridden later, so
4949		   don't assume we know where a weak sym lives.  */
4950		if (h->root.type == bfd_link_hash_defined)
4951		  dest = h->root.u.def.section;
4952	      }
4953	    else
4954	      {
4955		Elf_Internal_Sym *isym;
4956
4957		isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
4958					      abfd, r_symndx);
4959		if (isym == NULL)
4960		  return FALSE;
4961
4962		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
4963	      }
4964
4965	    if (dest != sec)
4966	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4967	  }
4968	  goto rel24;
4969
4970	case R_PPC64_PLTCALL:
4971	case R_PPC64_PLTCALL_NOTOC:
4972	  ppc64_elf_section_data (sec)->has_pltcall = 1;
4973	  /* Fall through.  */
4974
4975	case R_PPC64_REL24:
4976	case R_PPC64_REL24_NOTOC:
4977	rel24:
4978	  plt_list = ifunc;
4979	  if (h != NULL)
4980	    {
4981	      h->needs_plt = 1;
4982	      if (h->root.root.string[0] == '.'
4983		  && h->root.root.string[1] != '\0')
4984		ppc_elf_hash_entry (h)->is_func = 1;
4985
4986	      if (h == tga || h == dottga)
4987		{
4988		  sec->has_tls_reloc = 1;
4989		  if (rel != relocs
4990		      && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
4991			  || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
4992		    /* We have a new-style __tls_get_addr call with
4993		       a marker reloc.  */
4994		    ;
4995		  else
4996		    /* Mark this section as having an old-style call.  */
4997		    sec->nomark_tls_get_addr = 1;
4998		}
4999	      plt_list = &h->plt.plist;
5000	    }
5001
5002	  /* We may need a .plt entry if the function this reloc
5003	     refers to is in a shared lib.  */
5004	  if (plt_list
5005	      && !update_plt_info (abfd, plt_list, rel->r_addend))
5006	    return FALSE;
5007	  break;
5008
5009	case R_PPC64_ADDR14:
5010	case R_PPC64_ADDR14_BRNTAKEN:
5011	case R_PPC64_ADDR14_BRTAKEN:
5012	case R_PPC64_ADDR24:
5013	  goto dodyn;
5014
5015	case R_PPC64_TPREL64:
5016	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
5017	  if (bfd_link_dll (info))
5018	    info->flags |= DF_STATIC_TLS;
5019	  goto dotlstoc;
5020
5021	case R_PPC64_DTPMOD64:
5022	  if (rel + 1 < rel_end
5023	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
5024	      && rel[1].r_offset == rel->r_offset + 8)
5025	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
5026	  else
5027	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
5028	  goto dotlstoc;
5029
5030	case R_PPC64_DTPREL64:
5031	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
5032	  if (rel != relocs
5033	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
5034	      && rel[-1].r_offset == rel->r_offset - 8)
5035	    /* This is the second reloc of a dtpmod, dtprel pair.
5036	       Don't mark with TLS_DTPREL.  */
5037	    goto dodyn;
5038
5039	dotlstoc:
5040	  sec->has_tls_reloc = 1;
5041	  if (h != NULL)
5042	    ppc_elf_hash_entry (h)->tls_mask |= tls_type & 0xff;
5043	  else
5044	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5045					rel->r_addend, tls_type))
5046	      return FALSE;
5047
5048	  ppc64_sec = ppc64_elf_section_data (sec);
5049	  if (ppc64_sec->sec_type != sec_toc)
5050	    {
5051	      bfd_size_type amt;
5052
5053	      /* One extra to simplify get_tls_mask.  */
5054	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5055	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5056	      if (ppc64_sec->u.toc.symndx == NULL)
5057		return FALSE;
5058	      amt = sec->size * sizeof (bfd_vma) / 8;
5059	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5060	      if (ppc64_sec->u.toc.add == NULL)
5061		return FALSE;
5062	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5063	      ppc64_sec->sec_type = sec_toc;
5064	    }
5065	  BFD_ASSERT (rel->r_offset % 8 == 0);
5066	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5067	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5068
5069	  /* Mark the second slot of a GD or LD entry.
5070	     -1 to indicate GD and -2 to indicate LD.  */
5071	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5072	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5073	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5074	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5075	  goto dodyn;
5076
5077	case R_PPC64_TPREL16_HI:
5078	case R_PPC64_TPREL16_HA:
5079	case R_PPC64_TPREL16_HIGH:
5080	case R_PPC64_TPREL16_HIGHA:
5081	case R_PPC64_TPREL16_HIGHER:
5082	case R_PPC64_TPREL16_HIGHERA:
5083	case R_PPC64_TPREL16_HIGHEST:
5084	case R_PPC64_TPREL16_HIGHESTA:
5085	  sec->has_tls_reloc = 1;
5086	  /* Fall through.  */
5087	case R_PPC64_TPREL34:
5088	case R_PPC64_TPREL16:
5089	case R_PPC64_TPREL16_DS:
5090	case R_PPC64_TPREL16_LO:
5091	case R_PPC64_TPREL16_LO_DS:
5092	  if (bfd_link_dll (info))
5093	    info->flags |= DF_STATIC_TLS;
5094	  goto dodyn;
5095
5096	case R_PPC64_ADDR64:
5097	  if (is_opd
5098	      && rel + 1 < rel_end
5099	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5100	    {
5101	      if (h != NULL)
5102		ppc_elf_hash_entry (h)->is_func = 1;
5103	    }
5104	  /* Fall through.  */
5105
5106	case R_PPC64_ADDR16:
5107	case R_PPC64_ADDR16_DS:
5108	case R_PPC64_ADDR16_HA:
5109	case R_PPC64_ADDR16_HI:
5110	case R_PPC64_ADDR16_HIGH:
5111	case R_PPC64_ADDR16_HIGHA:
5112	case R_PPC64_ADDR16_HIGHER:
5113	case R_PPC64_ADDR16_HIGHERA:
5114	case R_PPC64_ADDR16_HIGHEST:
5115	case R_PPC64_ADDR16_HIGHESTA:
5116	case R_PPC64_ADDR16_LO:
5117	case R_PPC64_ADDR16_LO_DS:
5118	case R_PPC64_D34:
5119	case R_PPC64_D34_LO:
5120	case R_PPC64_D34_HI30:
5121	case R_PPC64_D34_HA30:
5122	case R_PPC64_ADDR16_HIGHER34:
5123	case R_PPC64_ADDR16_HIGHERA34:
5124	case R_PPC64_ADDR16_HIGHEST34:
5125	case R_PPC64_ADDR16_HIGHESTA34:
5126	case R_PPC64_D28:
5127	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
5128	      && rel->r_addend == 0)
5129	    {
5130	      /* We may need a .plt entry if this reloc refers to a
5131		 function in a shared lib.  */
5132	      if (!update_plt_info (abfd, &h->plt.plist, 0))
5133		return FALSE;
5134	      h->pointer_equality_needed = 1;
5135	    }
5136	  /* Fall through.  */
5137
5138	case R_PPC64_REL30:
5139	case R_PPC64_REL32:
5140	case R_PPC64_REL64:
5141	case R_PPC64_ADDR32:
5142	case R_PPC64_UADDR16:
5143	case R_PPC64_UADDR32:
5144	case R_PPC64_UADDR64:
5145	case R_PPC64_TOC:
5146	  if (h != NULL && bfd_link_executable (info))
5147	    /* We may need a copy reloc.  */
5148	    h->non_got_ref = 1;
5149
5150	  /* Don't propagate .opd relocs.  */
5151	  if (NO_OPD_RELOCS && is_opd)
5152	    break;
5153
5154	  /* If we are creating a shared library, and this is a reloc
5155	     against a global symbol, or a non PC relative reloc
5156	     against a local symbol, then we need to copy the reloc
5157	     into the shared library.  However, if we are linking with
5158	     -Bsymbolic, we do not need to copy a reloc against a
5159	     global symbol which is defined in an object we are
5160	     including in the link (i.e., DEF_REGULAR is set).  At
5161	     this point we have not seen all the input files, so it is
5162	     possible that DEF_REGULAR is not set now but will be set
5163	     later (it is never cleared).  In case of a weak definition,
5164	     DEF_REGULAR may be cleared later by a strong definition in
5165	     a shared library.  We account for that possibility below by
5166	     storing information in the dyn_relocs field of the hash
5167	     table entry.  A similar situation occurs when creating
5168	     shared libraries and symbol visibility changes render the
5169	     symbol local.
5170
5171	     If on the other hand, we are creating an executable, we
5172	     may need to keep relocations for symbols satisfied by a
5173	     dynamic library if we manage to avoid copy relocs for the
5174	     symbol.  */
5175	dodyn:
5176	  if ((h != NULL
5177	       && (h->root.type == bfd_link_hash_defweak
5178		   || !h->def_regular))
5179	      || (h != NULL
5180		  && !bfd_link_executable (info)
5181		  && !SYMBOLIC_BIND (info, h))
5182	      || (bfd_link_pic (info)
5183		  && must_be_dyn_reloc (info, r_type))
5184	      || (!bfd_link_pic (info)
5185		  && ifunc != NULL))
5186	    {
5187	      /* We must copy these reloc types into the output file.
5188		 Create a reloc section in dynobj and make room for
5189		 this reloc.  */
5190	      if (sreloc == NULL)
5191		{
5192		  sreloc = _bfd_elf_make_dynamic_reloc_section
5193		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5194
5195		  if (sreloc == NULL)
5196		    return FALSE;
5197		}
5198
5199	      /* If this is a global symbol, we count the number of
5200		 relocations we need for this symbol.  */
5201	      if (h != NULL)
5202		{
5203		  struct elf_dyn_relocs *p;
5204		  struct elf_dyn_relocs **head;
5205
5206		  head = &h->dyn_relocs;
5207		  p = *head;
5208		  if (p == NULL || p->sec != sec)
5209		    {
5210		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5211		      if (p == NULL)
5212			return FALSE;
5213		      p->next = *head;
5214		      *head = p;
5215		      p->sec = sec;
5216		      p->count = 0;
5217		      p->pc_count = 0;
5218		    }
5219		  p->count += 1;
5220		  if (!must_be_dyn_reloc (info, r_type))
5221		    p->pc_count += 1;
5222		}
5223	      else
5224		{
5225		  /* Track dynamic relocs needed for local syms too.
5226		     We really need local syms available to do this
5227		     easily.  Oh well.  */
5228		  struct ppc_dyn_relocs *p;
5229		  struct ppc_dyn_relocs **head;
5230		  bfd_boolean is_ifunc;
5231		  asection *s;
5232		  void *vpp;
5233		  Elf_Internal_Sym *isym;
5234
5235		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
5236						abfd, r_symndx);
5237		  if (isym == NULL)
5238		    return FALSE;
5239
5240		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5241		  if (s == NULL)
5242		    s = sec;
5243
5244		  vpp = &elf_section_data (s)->local_dynrel;
5245		  head = (struct ppc_dyn_relocs **) vpp;
5246		  is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5247		  p = *head;
5248		  if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5249		    p = p->next;
5250		  if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5251		    {
5252		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5253		      if (p == NULL)
5254			return FALSE;
5255		      p->next = *head;
5256		      *head = p;
5257		      p->sec = sec;
5258		      p->ifunc = is_ifunc;
5259		      p->count = 0;
5260		    }
5261		  p->count += 1;
5262		}
5263	    }
5264	  break;
5265
5266	default:
5267	  break;
5268	}
5269    }
5270
5271  return TRUE;
5272}
5273
5274/* Merge backend specific data from an object file to the output
5275   object file when linking.  */
5276
5277static bfd_boolean
5278ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
5279{
5280  bfd *obfd = info->output_bfd;
5281  unsigned long iflags, oflags;
5282
5283  if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5284    return TRUE;
5285
5286  if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5287    return TRUE;
5288
5289  if (!_bfd_generic_verify_endian_match (ibfd, info))
5290    return FALSE;
5291
5292  iflags = elf_elfheader (ibfd)->e_flags;
5293  oflags = elf_elfheader (obfd)->e_flags;
5294
5295  if (iflags & ~EF_PPC64_ABI)
5296    {
5297      _bfd_error_handler
5298	/* xgettext:c-format */
5299	(_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
5300      bfd_set_error (bfd_error_bad_value);
5301      return FALSE;
5302    }
5303  else if (iflags != oflags && iflags != 0)
5304    {
5305      _bfd_error_handler
5306	/* xgettext:c-format */
5307	(_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
5308	 ibfd, iflags, oflags);
5309      bfd_set_error (bfd_error_bad_value);
5310      return FALSE;
5311    }
5312
5313  if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
5314    return FALSE;
5315
5316  /* Merge Tag_compatibility attributes and any common GNU ones.  */
5317  return _bfd_elf_merge_object_attributes (ibfd, info);
5318}
5319
5320static bfd_boolean
5321ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5322{
5323  /* Print normal ELF private data.  */
5324  _bfd_elf_print_private_bfd_data (abfd, ptr);
5325
5326  if (elf_elfheader (abfd)->e_flags != 0)
5327    {
5328      FILE *file = ptr;
5329
5330      fprintf (file, _("private flags = 0x%lx:"),
5331	       elf_elfheader (abfd)->e_flags);
5332
5333      if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5334	fprintf (file, _(" [abiv%ld]"),
5335		 elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5336      fputc ('\n', file);
5337    }
5338
5339  return TRUE;
5340}
5341
5342/* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5343   of the code entry point, and its section, which must be in the same
5344   object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
5345
5346static bfd_vma
5347opd_entry_value (asection *opd_sec,
5348		 bfd_vma offset,
5349		 asection **code_sec,
5350		 bfd_vma *code_off,
5351		 bfd_boolean in_code_sec)
5352{
5353  bfd *opd_bfd = opd_sec->owner;
5354  Elf_Internal_Rela *relocs;
5355  Elf_Internal_Rela *lo, *hi, *look;
5356  bfd_vma val;
5357
5358  /* No relocs implies we are linking a --just-symbols object, or looking
5359     at a final linked executable with addr2line or somesuch.  */
5360  if (opd_sec->reloc_count == 0)
5361    {
5362      bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5363
5364      if (contents == NULL)
5365	{
5366	  if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5367	    return (bfd_vma) -1;
5368	  ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5369	}
5370
5371      /* PR 17512: file: 64b9dfbb.  */
5372      if (offset + 7 >= opd_sec->size || offset + 7 < offset)
5373	return (bfd_vma) -1;
5374
5375      val = bfd_get_64 (opd_bfd, contents + offset);
5376      if (code_sec != NULL)
5377	{
5378	  asection *sec, *likely = NULL;
5379
5380	  if (in_code_sec)
5381	    {
5382	      sec = *code_sec;
5383	      if (sec->vma <= val
5384		  && val < sec->vma + sec->size)
5385		likely = sec;
5386	      else
5387		val = -1;
5388	    }
5389	  else
5390	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5391	      if (sec->vma <= val
5392		  && (sec->flags & SEC_LOAD) != 0
5393		  && (sec->flags & SEC_ALLOC) != 0)
5394		likely = sec;
5395	  if (likely != NULL)
5396	    {
5397	      *code_sec = likely;
5398	      if (code_off != NULL)
5399		*code_off = val - likely->vma;
5400	    }
5401	}
5402      return val;
5403    }
5404
5405  BFD_ASSERT (is_ppc64_elf (opd_bfd));
5406
5407  relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5408  if (relocs == NULL)
5409    relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5410  /* PR 17512: file: df8e1fd6.  */
5411  if (relocs == NULL)
5412    return (bfd_vma) -1;
5413
5414  /* Go find the opd reloc at the sym address.  */
5415  lo = relocs;
5416  hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5417  val = (bfd_vma) -1;
5418  while (lo < hi)
5419    {
5420      look = lo + (hi - lo) / 2;
5421      if (look->r_offset < offset)
5422	lo = look + 1;
5423      else if (look->r_offset > offset)
5424	hi = look;
5425      else
5426	{
5427	  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5428
5429	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5430	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5431	    {
5432	      unsigned long symndx = ELF64_R_SYM (look->r_info);
5433	      asection *sec = NULL;
5434
5435	      if (symndx >= symtab_hdr->sh_info
5436		  && elf_sym_hashes (opd_bfd) != NULL)
5437		{
5438		  struct elf_link_hash_entry **sym_hashes;
5439		  struct elf_link_hash_entry *rh;
5440
5441		  sym_hashes = elf_sym_hashes (opd_bfd);
5442		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
5443		  if (rh != NULL)
5444		    {
5445		      rh = elf_follow_link (rh);
5446		      if (rh->root.type != bfd_link_hash_defined
5447			  && rh->root.type != bfd_link_hash_defweak)
5448			break;
5449		      if (rh->root.u.def.section->owner == opd_bfd)
5450			{
5451			  val = rh->root.u.def.value;
5452			  sec = rh->root.u.def.section;
5453			}
5454		    }
5455		}
5456
5457	      if (sec == NULL)
5458		{
5459		  Elf_Internal_Sym *sym;
5460
5461		  if (symndx < symtab_hdr->sh_info)
5462		    {
5463		      sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5464		      if (sym == NULL)
5465			{
5466			  size_t symcnt = symtab_hdr->sh_info;
5467			  sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5468						      symcnt, 0,
5469						      NULL, NULL, NULL);
5470			  if (sym == NULL)
5471			    break;
5472			  symtab_hdr->contents = (bfd_byte *) sym;
5473			}
5474		      sym += symndx;
5475		    }
5476		  else
5477		    {
5478		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5479						  1, symndx,
5480						  NULL, NULL, NULL);
5481		      if (sym == NULL)
5482			break;
5483		    }
5484		  sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5485		  if (sec == NULL)
5486		    break;
5487		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5488		  val = sym->st_value;
5489		}
5490
5491	      val += look->r_addend;
5492	      if (code_off != NULL)
5493		*code_off = val;
5494	      if (code_sec != NULL)
5495		{
5496		  if (in_code_sec && *code_sec != sec)
5497		    return -1;
5498		  else
5499		    *code_sec = sec;
5500		}
5501	      if (sec->output_section != NULL)
5502		val += sec->output_section->vma + sec->output_offset;
5503	    }
5504	  break;
5505	}
5506    }
5507
5508  return val;
5509}
5510
5511/* If the ELF symbol SYM might be a function in SEC, return the
5512   function size and set *CODE_OFF to the function's entry point,
5513   otherwise return zero.  */
5514
5515static bfd_size_type
5516ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5517			      bfd_vma *code_off)
5518{
5519  bfd_size_type size;
5520
5521  if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5522		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5523    return 0;
5524
5525  size = 0;
5526  if (!(sym->flags & BSF_SYNTHETIC))
5527    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5528
5529  if (strcmp (sym->section->name, ".opd") == 0)
5530    {
5531      struct _opd_sec_data *opd = get_opd_info (sym->section);
5532      bfd_vma symval = sym->value;
5533
5534      if (opd != NULL
5535	  && opd->adjust != NULL
5536	  && elf_section_data (sym->section)->relocs != NULL)
5537	{
5538	  /* opd_entry_value will use cached relocs that have been
5539	     adjusted, but with raw symbols.  That means both local
5540	     and global symbols need adjusting.  */
5541	  long adjust = opd->adjust[OPD_NDX (symval)];
5542	  if (adjust == -1)
5543	    return 0;
5544	  symval += adjust;
5545	}
5546
5547      if (opd_entry_value (sym->section, symval,
5548			   &sec, code_off, TRUE) == (bfd_vma) -1)
5549	return 0;
5550      /* An old ABI binary with dot-syms has a size of 24 on the .opd
5551	 symbol.  This size has nothing to do with the code size of the
5552	 function, which is what we're supposed to return, but the
5553	 code size isn't available without looking up the dot-sym.
5554	 However, doing that would be a waste of time particularly
5555	 since elf_find_function will look at the dot-sym anyway.
5556	 Now, elf_find_function will keep the largest size of any
5557	 function sym found at the code address of interest, so return
5558	 1 here to avoid it incorrectly caching a larger function size
5559	 for a small function.  This does mean we return the wrong
5560	 size for a new-ABI function of size 24, but all that does is
5561	 disable caching for such functions.  */
5562      if (size == 24)
5563	size = 1;
5564    }
5565  else
5566    {
5567      if (sym->section != sec)
5568	return 0;
5569      *code_off = sym->value;
5570    }
5571  if (size == 0)
5572    size = 1;
5573  return size;
5574}
5575
5576/* Return true if symbol is a strong function defined in an ELFv2
5577   object with st_other localentry bits of zero, ie. its local entry
5578   point coincides with its global entry point.  */
5579
5580static bfd_boolean
5581is_elfv2_localentry0 (struct elf_link_hash_entry *h)
5582{
5583  return (h != NULL
5584	  && h->type == STT_FUNC
5585	  && h->root.type == bfd_link_hash_defined
5586	  && (STO_PPC64_LOCAL_MASK & h->other) == 0
5587	  && !ppc_elf_hash_entry (h)->non_zero_localentry
5588	  && is_ppc64_elf (h->root.u.def.section->owner)
5589	  && abiversion (h->root.u.def.section->owner) >= 2);
5590}
5591
5592/* Return true if symbol is defined in a regular object file.  */
5593
5594static bfd_boolean
5595is_static_defined (struct elf_link_hash_entry *h)
5596{
5597  return ((h->root.type == bfd_link_hash_defined
5598	   || h->root.type == bfd_link_hash_defweak)
5599	  && h->root.u.def.section != NULL
5600	  && h->root.u.def.section->output_section != NULL);
5601}
5602
5603/* If FDH is a function descriptor symbol, return the associated code
5604   entry symbol if it is defined.  Return NULL otherwise.  */
5605
5606static struct ppc_link_hash_entry *
5607defined_code_entry (struct ppc_link_hash_entry *fdh)
5608{
5609  if (fdh->is_func_descriptor)
5610    {
5611      struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5612      if (fh->elf.root.type == bfd_link_hash_defined
5613	  || fh->elf.root.type == bfd_link_hash_defweak)
5614	return fh;
5615    }
5616  return NULL;
5617}
5618
5619/* If FH is a function code entry symbol, return the associated
5620   function descriptor symbol if it is defined.  Return NULL otherwise.  */
5621
5622static struct ppc_link_hash_entry *
5623defined_func_desc (struct ppc_link_hash_entry *fh)
5624{
5625  if (fh->oh != NULL
5626      && fh->oh->is_func_descriptor)
5627    {
5628      struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5629      if (fdh->elf.root.type == bfd_link_hash_defined
5630	  || fdh->elf.root.type == bfd_link_hash_defweak)
5631	return fdh;
5632    }
5633  return NULL;
5634}
5635
5636/* Given H is a symbol that satisfies is_static_defined, return the
5637   value in the output file.  */
5638
5639static bfd_vma
5640defined_sym_val (struct elf_link_hash_entry *h)
5641{
5642  return (h->root.u.def.section->output_section->vma
5643	  + h->root.u.def.section->output_offset
5644	  + h->root.u.def.value);
5645}
5646
5647/* Return true if H matches __tls_get_addr or one of its variants.  */
5648
5649static bfd_boolean
5650is_tls_get_addr (struct elf_link_hash_entry *h,
5651		 struct ppc_link_hash_table *htab)
5652{
5653  return (h == (struct elf_link_hash_entry *) htab->tls_get_addr_fd
5654	  || h == (struct elf_link_hash_entry *) htab->tga_desc_fd
5655	  || h == (struct elf_link_hash_entry *) htab->tls_get_addr
5656	  || h == (struct elf_link_hash_entry *) htab->tga_desc);
5657}
5658
5659static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
5660
5661/* Garbage collect sections, after first dealing with dot-symbols.  */
5662
5663static bfd_boolean
5664ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5665{
5666  struct ppc_link_hash_table *htab = ppc_hash_table (info);
5667
5668  if (htab != NULL && htab->need_func_desc_adj)
5669    {
5670      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5671      htab->need_func_desc_adj = 0;
5672    }
5673  return bfd_elf_gc_sections (abfd, info);
5674}
5675
5676/* Mark all our entry sym sections, both opd and code section.  */
5677
5678static void
5679ppc64_elf_gc_keep (struct bfd_link_info *info)
5680{
5681  struct ppc_link_hash_table *htab = ppc_hash_table (info);
5682  struct bfd_sym_chain *sym;
5683
5684  if (htab == NULL)
5685    return;
5686
5687  for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5688    {
5689      struct ppc_link_hash_entry *eh, *fh;
5690      asection *sec;
5691
5692      eh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym->name,
5693						     FALSE, FALSE, TRUE));
5694      if (eh == NULL)
5695	continue;
5696      if (eh->elf.root.type != bfd_link_hash_defined
5697	  && eh->elf.root.type != bfd_link_hash_defweak)
5698	continue;
5699
5700      fh = defined_code_entry (eh);
5701      if (fh != NULL)
5702	{
5703	  sec = fh->elf.root.u.def.section;
5704	  sec->flags |= SEC_KEEP;
5705	}
5706      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5707	       && opd_entry_value (eh->elf.root.u.def.section,
5708				   eh->elf.root.u.def.value,
5709				   &sec, NULL, FALSE) != (bfd_vma) -1)
5710	sec->flags |= SEC_KEEP;
5711
5712      sec = eh->elf.root.u.def.section;
5713      sec->flags |= SEC_KEEP;
5714    }
5715}
5716
5717/* Mark sections containing dynamically referenced symbols.  When
5718   building shared libraries, we must assume that any visible symbol is
5719   referenced.  */
5720
5721static bfd_boolean
5722ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5723{
5724  struct bfd_link_info *info = (struct bfd_link_info *) inf;
5725  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
5726  struct ppc_link_hash_entry *fdh;
5727  struct bfd_elf_dynamic_list *d = info->dynamic_list;
5728
5729  /* Dynamic linking info is on the func descriptor sym.  */
5730  fdh = defined_func_desc (eh);
5731  if (fdh != NULL)
5732    eh = fdh;
5733
5734  if ((eh->elf.root.type == bfd_link_hash_defined
5735       || eh->elf.root.type == bfd_link_hash_defweak)
5736      && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
5737	  || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
5738	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5739	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5740	      && (!bfd_link_executable (info)
5741		  || info->gc_keep_exported
5742		  || info->export_dynamic
5743		  || (eh->elf.dynamic
5744		      && d != NULL
5745		      && (*d->match) (&d->head, NULL,
5746				      eh->elf.root.root.string)))
5747	      && (eh->elf.versioned >= versioned
5748		  || !bfd_hide_sym_by_version (info->version_info,
5749					       eh->elf.root.root.string)))))
5750    {
5751      asection *code_sec;
5752      struct ppc_link_hash_entry *fh;
5753
5754      eh->elf.root.u.def.section->flags |= SEC_KEEP;
5755
5756      /* Function descriptor syms cause the associated
5757	 function code sym section to be marked.  */
5758      fh = defined_code_entry (eh);
5759      if (fh != NULL)
5760	{
5761	  code_sec = fh->elf.root.u.def.section;
5762	  code_sec->flags |= SEC_KEEP;
5763	}
5764      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5765	       && opd_entry_value (eh->elf.root.u.def.section,
5766				   eh->elf.root.u.def.value,
5767				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
5768	code_sec->flags |= SEC_KEEP;
5769    }
5770
5771  return TRUE;
5772}
5773
5774/* Return the section that should be marked against GC for a given
5775   relocation.  */
5776
5777static asection *
5778ppc64_elf_gc_mark_hook (asection *sec,
5779			struct bfd_link_info *info,
5780			Elf_Internal_Rela *rel,
5781			struct elf_link_hash_entry *h,
5782			Elf_Internal_Sym *sym)
5783{
5784  asection *rsec;
5785
5786  /* Syms return NULL if we're marking .opd, so we avoid marking all
5787     function sections, as all functions are referenced in .opd.  */
5788  rsec = NULL;
5789  if (get_opd_info (sec) != NULL)
5790    return rsec;
5791
5792  if (h != NULL)
5793    {
5794      enum elf_ppc64_reloc_type r_type;
5795      struct ppc_link_hash_entry *eh, *fh, *fdh;
5796
5797      r_type = ELF64_R_TYPE (rel->r_info);
5798      switch (r_type)
5799	{
5800	case R_PPC64_GNU_VTINHERIT:
5801	case R_PPC64_GNU_VTENTRY:
5802	  break;
5803
5804	default:
5805	  switch (h->root.type)
5806	    {
5807	    case bfd_link_hash_defined:
5808	    case bfd_link_hash_defweak:
5809	      eh = ppc_elf_hash_entry (h);
5810	      fdh = defined_func_desc (eh);
5811	      if (fdh != NULL)
5812		{
5813		  /* -mcall-aixdesc code references the dot-symbol on
5814		     a call reloc.  Mark the function descriptor too
5815		     against garbage collection.  */
5816		  fdh->elf.mark = 1;
5817		  if (fdh->elf.is_weakalias)
5818		    weakdef (&fdh->elf)->mark = 1;
5819		  eh = fdh;
5820		}
5821
5822	      /* Function descriptor syms cause the associated
5823		 function code sym section to be marked.  */
5824	      fh = defined_code_entry (eh);
5825	      if (fh != NULL)
5826		{
5827		  /* They also mark their opd section.  */
5828		  eh->elf.root.u.def.section->gc_mark = 1;
5829
5830		  rsec = fh->elf.root.u.def.section;
5831		}
5832	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5833		       && opd_entry_value (eh->elf.root.u.def.section,
5834					   eh->elf.root.u.def.value,
5835					   &rsec, NULL, FALSE) != (bfd_vma) -1)
5836		eh->elf.root.u.def.section->gc_mark = 1;
5837	      else
5838		rsec = h->root.u.def.section;
5839	      break;
5840
5841	    case bfd_link_hash_common:
5842	      rsec = h->root.u.c.p->section;
5843	      break;
5844
5845	    default:
5846	      return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5847	    }
5848	}
5849    }
5850  else
5851    {
5852      struct _opd_sec_data *opd;
5853
5854      rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5855      opd = get_opd_info (rsec);
5856      if (opd != NULL && opd->func_sec != NULL)
5857	{
5858	  rsec->gc_mark = 1;
5859
5860	  rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
5861	}
5862    }
5863
5864  return rsec;
5865}
5866
5867/* The maximum size of .sfpr.  */
5868#define SFPR_MAX (218*4)
5869
5870struct sfpr_def_parms
5871{
5872  const char name[12];
5873  unsigned char lo, hi;
5874  bfd_byte *(*write_ent) (bfd *, bfd_byte *, int);
5875  bfd_byte *(*write_tail) (bfd *, bfd_byte *, int);
5876};
5877
5878/* Auto-generate _save*, _rest* functions in .sfpr.
5879   If STUB_SEC is non-null, define alias symbols in STUB_SEC
5880   instead.  */
5881
5882static bfd_boolean
5883sfpr_define (struct bfd_link_info *info,
5884	     const struct sfpr_def_parms *parm,
5885	     asection *stub_sec)
5886{
5887  struct ppc_link_hash_table *htab = ppc_hash_table (info);
5888  unsigned int i;
5889  size_t len = strlen (parm->name);
5890  bfd_boolean writing = FALSE;
5891  char sym[16];
5892
5893  if (htab == NULL)
5894    return FALSE;
5895
5896  memcpy (sym, parm->name, len);
5897  sym[len + 2] = 0;
5898
5899  for (i = parm->lo; i <= parm->hi; i++)
5900    {
5901      struct ppc_link_hash_entry *h;
5902
5903      sym[len + 0] = i / 10 + '0';
5904      sym[len + 1] = i % 10 + '0';
5905      h = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym,
5906						    writing, TRUE, TRUE));
5907      if (stub_sec != NULL)
5908	{
5909	  if (h != NULL
5910	      && h->elf.root.type == bfd_link_hash_defined
5911	      && h->elf.root.u.def.section == htab->sfpr)
5912	    {
5913	      struct elf_link_hash_entry *s;
5914	      char buf[32];
5915	      sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
5916	      s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
5917	      if (s == NULL)
5918		return FALSE;
5919	      if (s->root.type == bfd_link_hash_new)
5920		{
5921		  s->root.type = bfd_link_hash_defined;
5922		  s->root.u.def.section = stub_sec;
5923		  s->root.u.def.value = (stub_sec->size - htab->sfpr->size
5924					 + h->elf.root.u.def.value);
5925		  s->ref_regular = 1;
5926		  s->def_regular = 1;
5927		  s->ref_regular_nonweak = 1;
5928		  s->forced_local = 1;
5929		  s->non_elf = 0;
5930		  s->root.linker_def = 1;
5931		}
5932	    }
5933	  continue;
5934	}
5935      if (h != NULL)
5936	{
5937	  h->save_res = 1;
5938	  if (!h->elf.def_regular)
5939	    {
5940	      h->elf.root.type = bfd_link_hash_defined;
5941	      h->elf.root.u.def.section = htab->sfpr;
5942	      h->elf.root.u.def.value = htab->sfpr->size;
5943	      h->elf.type = STT_FUNC;
5944	      h->elf.def_regular = 1;
5945	      h->elf.non_elf = 0;
5946	      _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
5947	      writing = TRUE;
5948	      if (htab->sfpr->contents == NULL)
5949		{
5950		  htab->sfpr->contents
5951		    = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5952		  if (htab->sfpr->contents == NULL)
5953		    return FALSE;
5954		}
5955	    }
5956	}
5957      if (writing)
5958	{
5959	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5960	  if (i != parm->hi)
5961	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5962	  else
5963	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5964	  htab->sfpr->size = p - htab->sfpr->contents;
5965	}
5966    }
5967
5968  return TRUE;
5969}
5970
5971static bfd_byte *
5972savegpr0 (bfd *abfd, bfd_byte *p, int r)
5973{
5974  bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5975  return p + 4;
5976}
5977
5978static bfd_byte *
5979savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5980{
5981  p = savegpr0 (abfd, p, r);
5982  bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5983  p = p + 4;
5984  bfd_put_32 (abfd, BLR, p);
5985  return p + 4;
5986}
5987
5988static bfd_byte *
5989restgpr0 (bfd *abfd, bfd_byte *p, int r)
5990{
5991  bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5992  return p + 4;
5993}
5994
5995static bfd_byte *
5996restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5997{
5998  bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5999  p = p + 4;
6000  p = restgpr0 (abfd, p, r);
6001  bfd_put_32 (abfd, MTLR_R0, p);
6002  p = p + 4;
6003  if (r == 29)
6004    {
6005      p = restgpr0 (abfd, p, 30);
6006      p = restgpr0 (abfd, p, 31);
6007    }
6008  bfd_put_32 (abfd, BLR, p);
6009  return p + 4;
6010}
6011
6012static bfd_byte *
6013savegpr1 (bfd *abfd, bfd_byte *p, int r)
6014{
6015  bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6016  return p + 4;
6017}
6018
6019static bfd_byte *
6020savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
6021{
6022  p = savegpr1 (abfd, p, r);
6023  bfd_put_32 (abfd, BLR, p);
6024  return p + 4;
6025}
6026
6027static bfd_byte *
6028restgpr1 (bfd *abfd, bfd_byte *p, int r)
6029{
6030  bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6031  return p + 4;
6032}
6033
6034static bfd_byte *
6035restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
6036{
6037  p = restgpr1 (abfd, p, r);
6038  bfd_put_32 (abfd, BLR, p);
6039  return p + 4;
6040}
6041
6042static bfd_byte *
6043savefpr (bfd *abfd, bfd_byte *p, int r)
6044{
6045  bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6046  return p + 4;
6047}
6048
6049static bfd_byte *
6050savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6051{
6052  p = savefpr (abfd, p, r);
6053  bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
6054  p = p + 4;
6055  bfd_put_32 (abfd, BLR, p);
6056  return p + 4;
6057}
6058
6059static bfd_byte *
6060restfpr (bfd *abfd, bfd_byte *p, int r)
6061{
6062  bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6063  return p + 4;
6064}
6065
6066static bfd_byte *
6067restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6068{
6069  bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
6070  p = p + 4;
6071  p = restfpr (abfd, p, r);
6072  bfd_put_32 (abfd, MTLR_R0, p);
6073  p = p + 4;
6074  if (r == 29)
6075    {
6076      p = restfpr (abfd, p, 30);
6077      p = restfpr (abfd, p, 31);
6078    }
6079  bfd_put_32 (abfd, BLR, p);
6080  return p + 4;
6081}
6082
6083static bfd_byte *
6084savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6085{
6086  p = savefpr (abfd, p, r);
6087  bfd_put_32 (abfd, BLR, p);
6088  return p + 4;
6089}
6090
6091static bfd_byte *
6092restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6093{
6094  p = restfpr (abfd, p, r);
6095  bfd_put_32 (abfd, BLR, p);
6096  return p + 4;
6097}
6098
6099static bfd_byte *
6100savevr (bfd *abfd, bfd_byte *p, int r)
6101{
6102  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6103  p = p + 4;
6104  bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6105  return p + 4;
6106}
6107
6108static bfd_byte *
6109savevr_tail (bfd *abfd, bfd_byte *p, int r)
6110{
6111  p = savevr (abfd, p, r);
6112  bfd_put_32 (abfd, BLR, p);
6113  return p + 4;
6114}
6115
6116static bfd_byte *
6117restvr (bfd *abfd, bfd_byte *p, int r)
6118{
6119  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6120  p = p + 4;
6121  bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6122  return p + 4;
6123}
6124
6125static bfd_byte *
6126restvr_tail (bfd *abfd, bfd_byte *p, int r)
6127{
6128  p = restvr (abfd, p, r);
6129  bfd_put_32 (abfd, BLR, p);
6130  return p + 4;
6131}
6132
6133#define STDU_R1_0R1	0xf8210001
6134#define ADDI_R1_R1	0x38210000
6135
6136/* Emit prologue of wrapper preserving regs around a call to
6137   __tls_get_addr_opt.  */
6138
6139static bfd_byte *
6140tls_get_addr_prologue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
6141{
6142  unsigned int i;
6143
6144  bfd_put_32 (obfd, MFLR_R0, p);
6145  p += 4;
6146  bfd_put_32 (obfd, STD_R0_0R1 + 16, p);
6147  p += 4;
6148
6149  if (htab->opd_abi)
6150    {
6151      for (i = 4; i < 12; i++)
6152	{
6153	  bfd_put_32 (obfd,
6154		      STD_R0_0R1 | i << 21 | (-(13 - i) * 8 & 0xffff), p);
6155	  p += 4;
6156	}
6157      bfd_put_32 (obfd, STDU_R1_0R1 | (-128 & 0xffff), p);
6158      p += 4;
6159    }
6160  else
6161    {
6162      for (i = 4; i < 12; i++)
6163	{
6164	  bfd_put_32 (obfd,
6165		      STD_R0_0R1 | i << 21 | (-(12 - i) * 8 & 0xffff), p);
6166	  p += 4;
6167	}
6168      bfd_put_32 (obfd, STDU_R1_0R1 | (-96 & 0xffff), p);
6169      p += 4;
6170    }
6171  return p;
6172}
6173
6174/* Emit epilogue of wrapper preserving regs around a call to
6175   __tls_get_addr_opt.  */
6176
6177static bfd_byte *
6178tls_get_addr_epilogue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
6179{
6180  unsigned int i;
6181
6182  if (htab->opd_abi)
6183    {
6184      for (i = 4; i < 12; i++)
6185	{
6186	  bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (128 - (13 - i) * 8), p);
6187	  p += 4;
6188	}
6189      bfd_put_32 (obfd, ADDI_R1_R1 | 128, p);
6190      p += 4;
6191    }
6192  else
6193    {
6194      for (i = 4; i < 12; i++)
6195	{
6196	  bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (96 - (12 - i) * 8), p);
6197	  p += 4;
6198	}
6199      bfd_put_32 (obfd, ADDI_R1_R1 | 96, p);
6200      p += 4;
6201    }
6202  bfd_put_32 (obfd, LD_R0_0R1 | 16, p);
6203  p += 4;
6204  bfd_put_32 (obfd, MTLR_R0, p);
6205  p += 4;
6206  bfd_put_32 (obfd, BLR, p);
6207  p += 4;
6208  return p;
6209}
6210
6211/* Called via elf_link_hash_traverse to transfer dynamic linking
6212   information on function code symbol entries to their corresponding
6213   function descriptor symbol entries.  */
6214
6215static bfd_boolean
6216func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6217{
6218  struct bfd_link_info *info;
6219  struct ppc_link_hash_table *htab;
6220  struct ppc_link_hash_entry *fh;
6221  struct ppc_link_hash_entry *fdh;
6222  bfd_boolean force_local;
6223
6224  fh = ppc_elf_hash_entry (h);
6225  if (fh->elf.root.type == bfd_link_hash_indirect)
6226    return TRUE;
6227
6228  if (!fh->is_func)
6229    return TRUE;
6230
6231  if (fh->elf.root.root.string[0] != '.'
6232      || fh->elf.root.root.string[1] == '\0')
6233    return TRUE;
6234
6235  info = inf;
6236  htab = ppc_hash_table (info);
6237  if (htab == NULL)
6238    return FALSE;
6239
6240  /* Find the corresponding function descriptor symbol.  */
6241  fdh = lookup_fdh (fh, htab);
6242
6243  /* Resolve undefined references to dot-symbols as the value
6244     in the function descriptor, if we have one in a regular object.
6245     This is to satisfy cases like ".quad .foo".  Calls to functions
6246     in dynamic objects are handled elsewhere.  */
6247  if ((fh->elf.root.type == bfd_link_hash_undefined
6248       || fh->elf.root.type == bfd_link_hash_undefweak)
6249      && (fdh->elf.root.type == bfd_link_hash_defined
6250	  || fdh->elf.root.type == bfd_link_hash_defweak)
6251      && get_opd_info (fdh->elf.root.u.def.section) != NULL
6252      && opd_entry_value (fdh->elf.root.u.def.section,
6253			  fdh->elf.root.u.def.value,
6254			  &fh->elf.root.u.def.section,
6255			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6256    {
6257      fh->elf.root.type = fdh->elf.root.type;
6258      fh->elf.forced_local = 1;
6259      fh->elf.def_regular = fdh->elf.def_regular;
6260      fh->elf.def_dynamic = fdh->elf.def_dynamic;
6261    }
6262
6263  if (!fh->elf.dynamic)
6264    {
6265      struct plt_entry *ent;
6266
6267      for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6268	if (ent->plt.refcount > 0)
6269	  break;
6270      if (ent == NULL)
6271	return TRUE;
6272    }
6273
6274  /* Create a descriptor as undefined if necessary.  */
6275  if (fdh == NULL
6276      && !bfd_link_executable (info)
6277      && (fh->elf.root.type == bfd_link_hash_undefined
6278	  || fh->elf.root.type == bfd_link_hash_undefweak))
6279    {
6280      fdh = make_fdh (info, fh);
6281      if (fdh == NULL)
6282	return FALSE;
6283    }
6284
6285  /* We can't support overriding of symbols on a fake descriptor.  */
6286  if (fdh != NULL
6287      && fdh->fake
6288      && (fh->elf.root.type == bfd_link_hash_defined
6289	  || fh->elf.root.type == bfd_link_hash_defweak))
6290    _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6291
6292  /* Transfer dynamic linking information to the function descriptor.  */
6293  if (fdh != NULL)
6294    {
6295      fdh->elf.ref_regular |= fh->elf.ref_regular;
6296      fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6297      fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6298      fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6299      fdh->elf.dynamic |= fh->elf.dynamic;
6300      fdh->elf.needs_plt |= (fh->elf.needs_plt
6301			     || fh->elf.type == STT_FUNC
6302			     || fh->elf.type == STT_GNU_IFUNC);
6303      move_plt_plist (fh, fdh);
6304
6305      if (!fdh->elf.forced_local
6306	  && fh->elf.dynindx != -1)
6307	if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6308	  return FALSE;
6309    }
6310
6311  /* Now that the info is on the function descriptor, clear the
6312     function code sym info.  Any function code syms for which we
6313     don't have a definition in a regular file, we force local.
6314     This prevents a shared library from exporting syms that have
6315     been imported from another library.  Function code syms that
6316     are really in the library we must leave global to prevent the
6317     linker dragging in a definition from a static library.  */
6318  force_local = (!fh->elf.def_regular
6319		 || fdh == NULL
6320		 || !fdh->elf.def_regular
6321		 || fdh->elf.forced_local);
6322  _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6323
6324  return TRUE;
6325}
6326
6327static const struct sfpr_def_parms save_res_funcs[] =
6328  {
6329    { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6330    { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6331    { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6332    { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6333    { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6334    { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6335    { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6336    { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6337    { "._savef", 14, 31, savefpr, savefpr1_tail },
6338    { "._restf", 14, 31, restfpr, restfpr1_tail },
6339    { "_savevr_", 20, 31, savevr, savevr_tail },
6340    { "_restvr_", 20, 31, restvr, restvr_tail }
6341  };
6342
6343/* Called near the start of bfd_elf_size_dynamic_sections.  We use
6344   this hook to a) provide some gcc support functions, and b) transfer
6345   dynamic linking information gathered so far on function code symbol
6346   entries, to their corresponding function descriptor symbol entries.  */
6347
6348static bfd_boolean
6349ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6350			    struct bfd_link_info *info)
6351{
6352  struct ppc_link_hash_table *htab;
6353
6354  htab = ppc_hash_table (info);
6355  if (htab == NULL)
6356    return FALSE;
6357
6358  /* Provide any missing _save* and _rest* functions.  */
6359  if (htab->sfpr != NULL)
6360    {
6361      unsigned int i;
6362
6363      htab->sfpr->size = 0;
6364      for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
6365	if (!sfpr_define (info, &save_res_funcs[i], NULL))
6366	  return FALSE;
6367      if (htab->sfpr->size == 0)
6368	htab->sfpr->flags |= SEC_EXCLUDE;
6369    }
6370
6371  if (bfd_link_relocatable (info))
6372    return TRUE;
6373
6374  if (htab->elf.hgot != NULL)
6375    {
6376      _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6377      /* Make .TOC. defined so as to prevent it being made dynamic.
6378	 The wrong value here is fixed later in ppc64_elf_set_toc.  */
6379      if (!htab->elf.hgot->def_regular
6380	  || htab->elf.hgot->root.type != bfd_link_hash_defined)
6381	{
6382	  htab->elf.hgot->root.type = bfd_link_hash_defined;
6383	  htab->elf.hgot->root.u.def.value = 0;
6384	  htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
6385	  htab->elf.hgot->def_regular = 1;
6386	  htab->elf.hgot->root.linker_def = 1;
6387	}
6388      htab->elf.hgot->type = STT_OBJECT;
6389      htab->elf.hgot->other
6390	= (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
6391    }
6392
6393  if (htab->need_func_desc_adj)
6394    {
6395      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6396      htab->need_func_desc_adj = 0;
6397    }
6398
6399  return TRUE;
6400}
6401
6402/* Return true if we have dynamic relocs against H or any of its weak
6403   aliases, that apply to read-only sections.  Cannot be used after
6404   size_dynamic_sections.  */
6405
6406static bfd_boolean
6407alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
6408{
6409  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
6410  do
6411    {
6412      if (_bfd_elf_readonly_dynrelocs (&eh->elf))
6413	return TRUE;
6414      eh = ppc_elf_hash_entry (eh->elf.u.alias);
6415    }
6416  while (eh != NULL && &eh->elf != h);
6417
6418  return FALSE;
6419}
6420
6421/* Return whether EH has pc-relative dynamic relocs.  */
6422
6423static bfd_boolean
6424pc_dynrelocs (struct ppc_link_hash_entry *eh)
6425{
6426  struct elf_dyn_relocs *p;
6427
6428  for (p = eh->elf.dyn_relocs; p != NULL; p = p->next)
6429    if (p->pc_count != 0)
6430      return TRUE;
6431  return FALSE;
6432}
6433
6434/* Return true if a global entry stub will be created for H.  Valid
6435   for ELFv2 before plt entries have been allocated.  */
6436
6437static bfd_boolean
6438global_entry_stub (struct elf_link_hash_entry *h)
6439{
6440  struct plt_entry *pent;
6441
6442  if (!h->pointer_equality_needed
6443      || h->def_regular)
6444    return FALSE;
6445
6446  for (pent = h->plt.plist; pent != NULL; pent = pent->next)
6447    if (pent->plt.refcount > 0
6448	&& pent->addend == 0)
6449      return TRUE;
6450
6451  return FALSE;
6452}
6453
6454/* Adjust a symbol defined by a dynamic object and referenced by a
6455   regular object.  The current definition is in some section of the
6456   dynamic object, but we're not including those sections.  We have to
6457   change the definition to something the rest of the link can
6458   understand.  */
6459
6460static bfd_boolean
6461ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6462				 struct elf_link_hash_entry *h)
6463{
6464  struct ppc_link_hash_table *htab;
6465  asection *s, *srel;
6466
6467  htab = ppc_hash_table (info);
6468  if (htab == NULL)
6469    return FALSE;
6470
6471  /* Deal with function syms.  */
6472  if (h->type == STT_FUNC
6473      || h->type == STT_GNU_IFUNC
6474      || h->needs_plt)
6475    {
6476      bfd_boolean local = (ppc_elf_hash_entry (h)->save_res
6477			   || SYMBOL_CALLS_LOCAL (info, h)
6478			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
6479      /* Discard dyn_relocs when non-pic if we've decided that a
6480	 function symbol is local and not an ifunc.  We keep dynamic
6481	 relocs for ifuncs when local rather than always emitting a
6482	 plt call stub for them and defining the symbol on the call
6483	 stub.  We can't do that for ELFv1 anyway (a function symbol
6484	 is defined on a descriptor, not code) and it can be faster at
6485	 run-time due to not needing to bounce through a stub.  The
6486	 dyn_relocs for ifuncs will be applied even in a static
6487	 executable.  */
6488      if (!bfd_link_pic (info)
6489	  && h->type != STT_GNU_IFUNC
6490	  && local)
6491	h->dyn_relocs = NULL;
6492
6493      /* Clear procedure linkage table information for any symbol that
6494	 won't need a .plt entry.  */
6495      struct plt_entry *ent;
6496      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6497	if (ent->plt.refcount > 0)
6498	  break;
6499      if (ent == NULL
6500	  || (h->type != STT_GNU_IFUNC
6501	      && local
6502	      && (htab->can_convert_all_inline_plt
6503		  || (ppc_elf_hash_entry (h)->tls_mask
6504		      & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
6505	{
6506	  h->plt.plist = NULL;
6507	  h->needs_plt = 0;
6508	  h->pointer_equality_needed = 0;
6509	}
6510      else if (abiversion (info->output_bfd) >= 2)
6511	{
6512	  /* Taking a function's address in a read/write section
6513	     doesn't require us to define the function symbol in the
6514	     executable on a global entry stub.  A dynamic reloc can
6515	     be used instead.  The reason we prefer a few more dynamic
6516	     relocs is that calling via a global entry stub costs a
6517	     few more instructions, and pointer_equality_needed causes
6518	     extra work in ld.so when resolving these symbols.  */
6519	  if (global_entry_stub (h))
6520	    {
6521	      if (!_bfd_elf_readonly_dynrelocs (h))
6522		{
6523		  h->pointer_equality_needed = 0;
6524		  /* If we haven't seen a branch reloc and the symbol
6525		     isn't an ifunc then we don't need a plt entry.  */
6526		  if (!h->needs_plt)
6527		    h->plt.plist = NULL;
6528		}
6529	      else if (!bfd_link_pic (info))
6530		/* We are going to be defining the function symbol on the
6531		   plt stub, so no dyn_relocs needed when non-pic.  */
6532		h->dyn_relocs = NULL;
6533	    }
6534
6535	  /* ELFv2 function symbols can't have copy relocs.  */
6536	  return TRUE;
6537	}
6538      else if (!h->needs_plt
6539	       && !_bfd_elf_readonly_dynrelocs (h))
6540	{
6541	  /* If we haven't seen a branch reloc and the symbol isn't an
6542	     ifunc then we don't need a plt entry.  */
6543	  h->plt.plist = NULL;
6544	  h->pointer_equality_needed = 0;
6545	  return TRUE;
6546	}
6547    }
6548  else
6549    h->plt.plist = NULL;
6550
6551  /* If this is a weak symbol, and there is a real definition, the
6552     processor independent code will have arranged for us to see the
6553     real definition first, and we can just use the same value.  */
6554  if (h->is_weakalias)
6555    {
6556      struct elf_link_hash_entry *def = weakdef (h);
6557      BFD_ASSERT (def->root.type == bfd_link_hash_defined);
6558      h->root.u.def.section = def->root.u.def.section;
6559      h->root.u.def.value = def->root.u.def.value;
6560      if (def->root.u.def.section == htab->elf.sdynbss
6561	  || def->root.u.def.section == htab->elf.sdynrelro)
6562	h->dyn_relocs = NULL;
6563      return TRUE;
6564    }
6565
6566  /* If we are creating a shared library, we must presume that the
6567     only references to the symbol are via the global offset table.
6568     For such cases we need not do anything here; the relocations will
6569     be handled correctly by relocate_section.  */
6570  if (!bfd_link_executable (info))
6571    return TRUE;
6572
6573  /* If there are no references to this symbol that do not use the
6574     GOT, we don't need to generate a copy reloc.  */
6575  if (!h->non_got_ref)
6576    return TRUE;
6577
6578  /* Don't generate a copy reloc for symbols defined in the executable.  */
6579  if (!h->def_dynamic || !h->ref_regular || h->def_regular
6580
6581      /* If -z nocopyreloc was given, don't generate them either.  */
6582      || info->nocopyreloc
6583
6584      /* If we don't find any dynamic relocs in read-only sections, then
6585	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6586      || (ELIMINATE_COPY_RELOCS
6587	  && !h->needs_copy
6588	  && !alias_readonly_dynrelocs (h))
6589
6590      /* Protected variables do not work with .dynbss.  The copy in
6591	 .dynbss won't be used by the shared library with the protected
6592	 definition for the variable.  Text relocations are preferable
6593	 to an incorrect program.  */
6594      || h->protected_def)
6595    return TRUE;
6596
6597  if (h->type == STT_FUNC
6598      || h->type == STT_GNU_IFUNC)
6599    {
6600      /* .dynbss copies of function symbols only work if we have
6601	 ELFv1 dot-symbols.  ELFv1 compilers since 2004 default to not
6602	 use dot-symbols and set the function symbol size to the text
6603	 size of the function rather than the size of the descriptor.
6604	 That's wrong for copying a descriptor.  */
6605      if (ppc_elf_hash_entry (h)->oh == NULL
6606	  || !(h->size == 24 || h->size == 16))
6607	return TRUE;
6608
6609      /* We should never get here, but unfortunately there are old
6610	 versions of gcc (circa gcc-3.2) that improperly for the
6611	 ELFv1 ABI put initialized function pointers, vtable refs and
6612	 suchlike in read-only sections.  Allow them to proceed, but
6613	 warn that this might break at runtime.  */
6614      info->callbacks->einfo
6615	(_("%P: copy reloc against `%pT' requires lazy plt linking; "
6616	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6617	 h->root.root.string);
6618    }
6619
6620  /* This is a reference to a symbol defined by a dynamic object which
6621     is not a function.  */
6622
6623  /* We must allocate the symbol in our .dynbss section, which will
6624     become part of the .bss section of the executable.  There will be
6625     an entry for this symbol in the .dynsym section.  The dynamic
6626     object will contain position independent code, so all references
6627     from the dynamic object to this symbol will go through the global
6628     offset table.  The dynamic linker will use the .dynsym entry to
6629     determine the address it must put in the global offset table, so
6630     both the dynamic object and the regular object will refer to the
6631     same memory location for the variable.  */
6632  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
6633    {
6634      s = htab->elf.sdynrelro;
6635      srel = htab->elf.sreldynrelro;
6636    }
6637  else
6638    {
6639      s = htab->elf.sdynbss;
6640      srel = htab->elf.srelbss;
6641    }
6642  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6643    {
6644      /* We must generate a R_PPC64_COPY reloc to tell the dynamic
6645	 linker to copy the initial value out of the dynamic object
6646	 and into the runtime process image.  */
6647      srel->size += sizeof (Elf64_External_Rela);
6648      h->needs_copy = 1;
6649    }
6650
6651  /* We no longer want dyn_relocs.  */
6652  h->dyn_relocs = NULL;
6653  return _bfd_elf_adjust_dynamic_copy (info, h, s);
6654}
6655
6656/* If given a function descriptor symbol, hide both the function code
6657   sym and the descriptor.  */
6658static void
6659ppc64_elf_hide_symbol (struct bfd_link_info *info,
6660		       struct elf_link_hash_entry *h,
6661		       bfd_boolean force_local)
6662{
6663  struct ppc_link_hash_entry *eh;
6664  _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6665
6666  if (ppc_hash_table (info) == NULL)
6667    return;
6668
6669  eh = ppc_elf_hash_entry (h);
6670  if (eh->is_func_descriptor)
6671    {
6672      struct ppc_link_hash_entry *fh = eh->oh;
6673
6674      if (fh == NULL)
6675	{
6676	  const char *p, *q;
6677	  struct elf_link_hash_table *htab = elf_hash_table (info);
6678	  char save;
6679
6680	  /* We aren't supposed to use alloca in BFD because on
6681	     systems which do not have alloca the version in libiberty
6682	     calls xmalloc, which might cause the program to crash
6683	     when it runs out of memory.  This function doesn't have a
6684	     return status, so there's no way to gracefully return an
6685	     error.  So cheat.  We know that string[-1] can be safely
6686	     accessed;  It's either a string in an ELF string table,
6687	     or allocated in an objalloc structure.  */
6688
6689	  p = eh->elf.root.root.string - 1;
6690	  save = *p;
6691	  *(char *) p = '.';
6692	  fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6693							 FALSE, FALSE));
6694	  *(char *) p = save;
6695
6696	  /* Unfortunately, if it so happens that the string we were
6697	     looking for was allocated immediately before this string,
6698	     then we overwrote the string terminator.  That's the only
6699	     reason the lookup should fail.  */
6700	  if (fh == NULL)
6701	    {
6702	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6703	      while (q >= eh->elf.root.root.string && *q == *p)
6704		--q, --p;
6705	      if (q < eh->elf.root.root.string && *p == '.')
6706		fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6707							       FALSE, FALSE));
6708	    }
6709	  if (fh != NULL)
6710	    {
6711	      eh->oh = fh;
6712	      fh->oh = eh;
6713	    }
6714	}
6715      if (fh != NULL)
6716	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6717    }
6718}
6719
6720static bfd_boolean
6721get_sym_h (struct elf_link_hash_entry **hp,
6722	   Elf_Internal_Sym **symp,
6723	   asection **symsecp,
6724	   unsigned char **tls_maskp,
6725	   Elf_Internal_Sym **locsymsp,
6726	   unsigned long r_symndx,
6727	   bfd *ibfd)
6728{
6729  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6730
6731  if (r_symndx >= symtab_hdr->sh_info)
6732    {
6733      struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6734      struct elf_link_hash_entry *h;
6735
6736      h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6737      h = elf_follow_link (h);
6738
6739      if (hp != NULL)
6740	*hp = h;
6741
6742      if (symp != NULL)
6743	*symp = NULL;
6744
6745      if (symsecp != NULL)
6746	{
6747	  asection *symsec = NULL;
6748	  if (h->root.type == bfd_link_hash_defined
6749	      || h->root.type == bfd_link_hash_defweak)
6750	    symsec = h->root.u.def.section;
6751	  *symsecp = symsec;
6752	}
6753
6754      if (tls_maskp != NULL)
6755	*tls_maskp = &ppc_elf_hash_entry (h)->tls_mask;
6756    }
6757  else
6758    {
6759      Elf_Internal_Sym *sym;
6760      Elf_Internal_Sym *locsyms = *locsymsp;
6761
6762      if (locsyms == NULL)
6763	{
6764	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6765	  if (locsyms == NULL)
6766	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6767					    symtab_hdr->sh_info,
6768					    0, NULL, NULL, NULL);
6769	  if (locsyms == NULL)
6770	    return FALSE;
6771	  *locsymsp = locsyms;
6772	}
6773      sym = locsyms + r_symndx;
6774
6775      if (hp != NULL)
6776	*hp = NULL;
6777
6778      if (symp != NULL)
6779	*symp = sym;
6780
6781      if (symsecp != NULL)
6782	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6783
6784      if (tls_maskp != NULL)
6785	{
6786	  struct got_entry **lgot_ents;
6787	  unsigned char *tls_mask;
6788
6789	  tls_mask = NULL;
6790	  lgot_ents = elf_local_got_ents (ibfd);
6791	  if (lgot_ents != NULL)
6792	    {
6793	      struct plt_entry **local_plt = (struct plt_entry **)
6794		(lgot_ents + symtab_hdr->sh_info);
6795	      unsigned char *lgot_masks = (unsigned char *)
6796		(local_plt + symtab_hdr->sh_info);
6797	      tls_mask = &lgot_masks[r_symndx];
6798	    }
6799	  *tls_maskp = tls_mask;
6800	}
6801    }
6802  return TRUE;
6803}
6804
6805/* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6806   error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6807   type suitable for optimization, and 1 otherwise.  */
6808
6809static int
6810get_tls_mask (unsigned char **tls_maskp,
6811	      unsigned long *toc_symndx,
6812	      bfd_vma *toc_addend,
6813	      Elf_Internal_Sym **locsymsp,
6814	      const Elf_Internal_Rela *rel,
6815	      bfd *ibfd)
6816{
6817  unsigned long r_symndx;
6818  int next_r;
6819  struct elf_link_hash_entry *h;
6820  Elf_Internal_Sym *sym;
6821  asection *sec;
6822  bfd_vma off;
6823
6824  r_symndx = ELF64_R_SYM (rel->r_info);
6825  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6826    return 0;
6827
6828  if ((*tls_maskp != NULL
6829       && (**tls_maskp & TLS_TLS) != 0
6830       && **tls_maskp != (TLS_TLS | TLS_MARK))
6831      || sec == NULL
6832      || ppc64_elf_section_data (sec) == NULL
6833      || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6834    return 1;
6835
6836  /* Look inside a TOC section too.  */
6837  if (h != NULL)
6838    {
6839      BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6840      off = h->root.u.def.value;
6841    }
6842  else
6843    off = sym->st_value;
6844  off += rel->r_addend;
6845  BFD_ASSERT (off % 8 == 0);
6846  r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6847  next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6848  if (toc_symndx != NULL)
6849    *toc_symndx = r_symndx;
6850  if (toc_addend != NULL)
6851    *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6852  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6853    return 0;
6854  if ((h == NULL || is_static_defined (h))
6855      && (next_r == -1 || next_r == -2))
6856    return 1 - next_r;
6857  return 1;
6858}
6859
6860/* Find (or create) an entry in the tocsave hash table.  */
6861
6862static struct tocsave_entry *
6863tocsave_find (struct ppc_link_hash_table *htab,
6864	      enum insert_option insert,
6865	      Elf_Internal_Sym **local_syms,
6866	      const Elf_Internal_Rela *irela,
6867	      bfd *ibfd)
6868{
6869  unsigned long r_indx;
6870  struct elf_link_hash_entry *h;
6871  Elf_Internal_Sym *sym;
6872  struct tocsave_entry ent, *p;
6873  hashval_t hash;
6874  struct tocsave_entry **slot;
6875
6876  r_indx = ELF64_R_SYM (irela->r_info);
6877  if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6878    return NULL;
6879  if (ent.sec == NULL || ent.sec->output_section == NULL)
6880    {
6881      _bfd_error_handler
6882	(_("%pB: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
6883      return NULL;
6884    }
6885
6886  if (h != NULL)
6887    ent.offset = h->root.u.def.value;
6888  else
6889    ent.offset = sym->st_value;
6890  ent.offset += irela->r_addend;
6891
6892  hash = tocsave_htab_hash (&ent);
6893  slot = ((struct tocsave_entry **)
6894	  htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6895  if (slot == NULL)
6896    return NULL;
6897
6898  if (*slot == NULL)
6899    {
6900      p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6901      if (p == NULL)
6902	return NULL;
6903      *p = ent;
6904      *slot = p;
6905    }
6906  return *slot;
6907}
6908
6909/* Adjust all global syms defined in opd sections.  In gcc generated
6910   code for the old ABI, these will already have been done.  */
6911
6912static bfd_boolean
6913adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6914{
6915  struct ppc_link_hash_entry *eh;
6916  asection *sym_sec;
6917  struct _opd_sec_data *opd;
6918
6919  if (h->root.type == bfd_link_hash_indirect)
6920    return TRUE;
6921
6922  if (h->root.type != bfd_link_hash_defined
6923      && h->root.type != bfd_link_hash_defweak)
6924    return TRUE;
6925
6926  eh = ppc_elf_hash_entry (h);
6927  if (eh->adjust_done)
6928    return TRUE;
6929
6930  sym_sec = eh->elf.root.u.def.section;
6931  opd = get_opd_info (sym_sec);
6932  if (opd != NULL && opd->adjust != NULL)
6933    {
6934      long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
6935      if (adjust == -1)
6936	{
6937	  /* This entry has been deleted.  */
6938	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6939	  if (dsec == NULL)
6940	    {
6941	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6942		if (discarded_section (dsec))
6943		  {
6944		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6945		    break;
6946		  }
6947	    }
6948	  eh->elf.root.u.def.value = 0;
6949	  eh->elf.root.u.def.section = dsec;
6950	}
6951      else
6952	eh->elf.root.u.def.value += adjust;
6953      eh->adjust_done = 1;
6954    }
6955  return TRUE;
6956}
6957
6958/* Handles decrementing dynamic reloc counts for the reloc specified by
6959   R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
6960   have already been determined.  */
6961
6962static bfd_boolean
6963dec_dynrel_count (bfd_vma r_info,
6964		  asection *sec,
6965		  struct bfd_link_info *info,
6966		  Elf_Internal_Sym **local_syms,
6967		  struct elf_link_hash_entry *h,
6968		  Elf_Internal_Sym *sym)
6969{
6970  enum elf_ppc64_reloc_type r_type;
6971  asection *sym_sec = NULL;
6972
6973  /* Can this reloc be dynamic?  This switch, and later tests here
6974     should be kept in sync with the code in check_relocs.  */
6975  r_type = ELF64_R_TYPE (r_info);
6976  switch (r_type)
6977    {
6978    default:
6979      return TRUE;
6980
6981    case R_PPC64_TOC16:
6982    case R_PPC64_TOC16_DS:
6983    case R_PPC64_TOC16_LO:
6984    case R_PPC64_TOC16_HI:
6985    case R_PPC64_TOC16_HA:
6986    case R_PPC64_TOC16_LO_DS:
6987      if (h == NULL)
6988	return TRUE;
6989      break;
6990
6991    case R_PPC64_TPREL16:
6992    case R_PPC64_TPREL16_LO:
6993    case R_PPC64_TPREL16_HI:
6994    case R_PPC64_TPREL16_HA:
6995    case R_PPC64_TPREL16_DS:
6996    case R_PPC64_TPREL16_LO_DS:
6997    case R_PPC64_TPREL16_HIGH:
6998    case R_PPC64_TPREL16_HIGHA:
6999    case R_PPC64_TPREL16_HIGHER:
7000    case R_PPC64_TPREL16_HIGHERA:
7001    case R_PPC64_TPREL16_HIGHEST:
7002    case R_PPC64_TPREL16_HIGHESTA:
7003    case R_PPC64_TPREL64:
7004    case R_PPC64_TPREL34:
7005    case R_PPC64_DTPMOD64:
7006    case R_PPC64_DTPREL64:
7007    case R_PPC64_ADDR64:
7008    case R_PPC64_REL30:
7009    case R_PPC64_REL32:
7010    case R_PPC64_REL64:
7011    case R_PPC64_ADDR14:
7012    case R_PPC64_ADDR14_BRNTAKEN:
7013    case R_PPC64_ADDR14_BRTAKEN:
7014    case R_PPC64_ADDR16:
7015    case R_PPC64_ADDR16_DS:
7016    case R_PPC64_ADDR16_HA:
7017    case R_PPC64_ADDR16_HI:
7018    case R_PPC64_ADDR16_HIGH:
7019    case R_PPC64_ADDR16_HIGHA:
7020    case R_PPC64_ADDR16_HIGHER:
7021    case R_PPC64_ADDR16_HIGHERA:
7022    case R_PPC64_ADDR16_HIGHEST:
7023    case R_PPC64_ADDR16_HIGHESTA:
7024    case R_PPC64_ADDR16_LO:
7025    case R_PPC64_ADDR16_LO_DS:
7026    case R_PPC64_ADDR24:
7027    case R_PPC64_ADDR32:
7028    case R_PPC64_UADDR16:
7029    case R_PPC64_UADDR32:
7030    case R_PPC64_UADDR64:
7031    case R_PPC64_TOC:
7032    case R_PPC64_D34:
7033    case R_PPC64_D34_LO:
7034    case R_PPC64_D34_HI30:
7035    case R_PPC64_D34_HA30:
7036    case R_PPC64_ADDR16_HIGHER34:
7037    case R_PPC64_ADDR16_HIGHERA34:
7038    case R_PPC64_ADDR16_HIGHEST34:
7039    case R_PPC64_ADDR16_HIGHESTA34:
7040    case R_PPC64_D28:
7041      break;
7042    }
7043
7044  if (local_syms != NULL)
7045    {
7046      unsigned long r_symndx;
7047      bfd *ibfd = sec->owner;
7048
7049      r_symndx = ELF64_R_SYM (r_info);
7050      if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7051	return FALSE;
7052    }
7053
7054  if ((h != NULL
7055       && (h->root.type == bfd_link_hash_defweak
7056	   || !h->def_regular))
7057      || (h != NULL
7058	  && !bfd_link_executable (info)
7059	  && !SYMBOLIC_BIND (info, h))
7060      || (bfd_link_pic (info)
7061	  && must_be_dyn_reloc (info, r_type))
7062      || (!bfd_link_pic (info)
7063	  && (h != NULL
7064	      ? h->type == STT_GNU_IFUNC
7065	      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
7066    ;
7067  else
7068    return TRUE;
7069
7070  if (h != NULL)
7071    {
7072      struct elf_dyn_relocs *p;
7073      struct elf_dyn_relocs **pp;
7074      pp = &h->dyn_relocs;
7075
7076      /* elf_gc_sweep may have already removed all dyn relocs associated
7077	 with local syms for a given section.  Also, symbol flags are
7078	 changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7079	 report a dynreloc miscount.  */
7080      if (*pp == NULL && info->gc_sections)
7081	return TRUE;
7082
7083      while ((p = *pp) != NULL)
7084	{
7085	  if (p->sec == sec)
7086	    {
7087	      if (!must_be_dyn_reloc (info, r_type))
7088		p->pc_count -= 1;
7089	      p->count -= 1;
7090	      if (p->count == 0)
7091		*pp = p->next;
7092	      return TRUE;
7093	    }
7094	  pp = &p->next;
7095	}
7096    }
7097  else
7098    {
7099      struct ppc_dyn_relocs *p;
7100      struct ppc_dyn_relocs **pp;
7101      void *vpp;
7102      bfd_boolean is_ifunc;
7103
7104      if (local_syms == NULL)
7105	sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7106      if (sym_sec == NULL)
7107	sym_sec = sec;
7108
7109      vpp = &elf_section_data (sym_sec)->local_dynrel;
7110      pp = (struct ppc_dyn_relocs **) vpp;
7111
7112      if (*pp == NULL && info->gc_sections)
7113	return TRUE;
7114
7115      is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
7116      while ((p = *pp) != NULL)
7117	{
7118	  if (p->sec == sec && p->ifunc == is_ifunc)
7119	    {
7120	      p->count -= 1;
7121	      if (p->count == 0)
7122		*pp = p->next;
7123	      return TRUE;
7124	    }
7125	  pp = &p->next;
7126	}
7127    }
7128
7129  /* xgettext:c-format */
7130  _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
7131		      sec->owner, sec);
7132  bfd_set_error (bfd_error_bad_value);
7133  return FALSE;
7134}
7135
7136/* Remove unused Official Procedure Descriptor entries.  Currently we
7137   only remove those associated with functions in discarded link-once
7138   sections, or weakly defined functions that have been overridden.  It
7139   would be possible to remove many more entries for statically linked
7140   applications.  */
7141
7142bfd_boolean
7143ppc64_elf_edit_opd (struct bfd_link_info *info)
7144{
7145  bfd *ibfd;
7146  bfd_boolean some_edited = FALSE;
7147  asection *need_pad = NULL;
7148  struct ppc_link_hash_table *htab;
7149
7150  htab = ppc_hash_table (info);
7151  if (htab == NULL)
7152    return FALSE;
7153
7154  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7155    {
7156      asection *sec;
7157      Elf_Internal_Rela *relstart, *rel, *relend;
7158      Elf_Internal_Shdr *symtab_hdr;
7159      Elf_Internal_Sym *local_syms;
7160      struct _opd_sec_data *opd;
7161      bfd_boolean need_edit, add_aux_fields, broken;
7162      bfd_size_type cnt_16b = 0;
7163
7164      if (!is_ppc64_elf (ibfd))
7165	continue;
7166
7167      sec = bfd_get_section_by_name (ibfd, ".opd");
7168      if (sec == NULL || sec->size == 0)
7169	continue;
7170
7171      if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7172	continue;
7173
7174      if (sec->output_section == bfd_abs_section_ptr)
7175	continue;
7176
7177      /* Look through the section relocs.  */
7178      if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7179	continue;
7180
7181      local_syms = NULL;
7182      symtab_hdr = &elf_symtab_hdr (ibfd);
7183
7184      /* Read the relocations.  */
7185      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7186					    info->keep_memory);
7187      if (relstart == NULL)
7188	return FALSE;
7189
7190      /* First run through the relocs to check they are sane, and to
7191	 determine whether we need to edit this opd section.  */
7192      need_edit = FALSE;
7193      broken = FALSE;
7194      need_pad = sec;
7195      relend = relstart + sec->reloc_count;
7196      for (rel = relstart; rel < relend; )
7197	{
7198	  enum elf_ppc64_reloc_type r_type;
7199	  unsigned long r_symndx;
7200	  asection *sym_sec;
7201	  struct elf_link_hash_entry *h;
7202	  Elf_Internal_Sym *sym;
7203	  bfd_vma offset;
7204
7205	  /* .opd contains an array of 16 or 24 byte entries.  We're
7206	     only interested in the reloc pointing to a function entry
7207	     point.  */
7208	  offset = rel->r_offset;
7209	  if (rel + 1 == relend
7210	      || rel[1].r_offset != offset + 8)
7211	    {
7212	      /* If someone messes with .opd alignment then after a
7213		 "ld -r" we might have padding in the middle of .opd.
7214		 Also, there's nothing to prevent someone putting
7215		 something silly in .opd with the assembler.  No .opd
7216		 optimization for them!  */
7217	    broken_opd:
7218	      _bfd_error_handler
7219		(_("%pB: .opd is not a regular array of opd entries"), ibfd);
7220	      broken = TRUE;
7221	      break;
7222	    }
7223
7224	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7225	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7226	    {
7227	      _bfd_error_handler
7228		/* xgettext:c-format */
7229		(_("%pB: unexpected reloc type %u in .opd section"),
7230		 ibfd, r_type);
7231	      broken = TRUE;
7232	      break;
7233	    }
7234
7235	  r_symndx = ELF64_R_SYM (rel->r_info);
7236	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7237			  r_symndx, ibfd))
7238	    goto error_ret;
7239
7240	  if (sym_sec == NULL || sym_sec->owner == NULL)
7241	    {
7242	      const char *sym_name;
7243	      if (h != NULL)
7244		sym_name = h->root.root.string;
7245	      else
7246		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7247					     sym_sec);
7248
7249	      _bfd_error_handler
7250		/* xgettext:c-format */
7251		(_("%pB: undefined sym `%s' in .opd section"),
7252		 ibfd, sym_name);
7253	      broken = TRUE;
7254	      break;
7255	    }
7256
7257	  /* opd entries are always for functions defined in the
7258	     current input bfd.  If the symbol isn't defined in the
7259	     input bfd, then we won't be using the function in this
7260	     bfd;  It must be defined in a linkonce section in another
7261	     bfd, or is weak.  It's also possible that we are
7262	     discarding the function due to a linker script /DISCARD/,
7263	     which we test for via the output_section.  */
7264	  if (sym_sec->owner != ibfd
7265	      || sym_sec->output_section == bfd_abs_section_ptr)
7266	    need_edit = TRUE;
7267
7268	  rel += 2;
7269	  if (rel + 1 == relend
7270	      || (rel + 2 < relend
7271		  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7272	    ++rel;
7273
7274	  if (rel == relend)
7275	    {
7276	      if (sec->size == offset + 24)
7277		{
7278		  need_pad = NULL;
7279		  break;
7280		}
7281	      if (sec->size == offset + 16)
7282		{
7283		  cnt_16b++;
7284		  break;
7285		}
7286	      goto broken_opd;
7287	    }
7288	  else if (rel + 1 < relend
7289		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7290		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7291	    {
7292	      if (rel[0].r_offset == offset + 16)
7293		cnt_16b++;
7294	      else if (rel[0].r_offset != offset + 24)
7295		goto broken_opd;
7296	    }
7297	  else
7298	    goto broken_opd;
7299	}
7300
7301      add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7302
7303      if (!broken && (need_edit || add_aux_fields))
7304	{
7305	  Elf_Internal_Rela *write_rel;
7306	  Elf_Internal_Shdr *rel_hdr;
7307	  bfd_byte *rptr, *wptr;
7308	  bfd_byte *new_contents;
7309	  bfd_size_type amt;
7310
7311	  new_contents = NULL;
7312	  amt = OPD_NDX (sec->size) * sizeof (long);
7313	  opd = &ppc64_elf_section_data (sec)->u.opd;
7314	  opd->adjust = bfd_zalloc (sec->owner, amt);
7315	  if (opd->adjust == NULL)
7316	    return FALSE;
7317
7318	  /* This seems a waste of time as input .opd sections are all
7319	     zeros as generated by gcc, but I suppose there's no reason
7320	     this will always be so.  We might start putting something in
7321	     the third word of .opd entries.  */
7322	  if ((sec->flags & SEC_IN_MEMORY) == 0)
7323	    {
7324	      bfd_byte *loc;
7325	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7326		{
7327		  free (loc);
7328		error_ret:
7329		  if (symtab_hdr->contents != (unsigned char *) local_syms)
7330		    free (local_syms);
7331		  if (elf_section_data (sec)->relocs != relstart)
7332		    free (relstart);
7333		  return FALSE;
7334		}
7335	      sec->contents = loc;
7336	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7337	    }
7338
7339	  elf_section_data (sec)->relocs = relstart;
7340
7341	  new_contents = sec->contents;
7342	  if (add_aux_fields)
7343	    {
7344	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7345	      if (new_contents == NULL)
7346		return FALSE;
7347	      need_pad = NULL;
7348	    }
7349	  wptr = new_contents;
7350	  rptr = sec->contents;
7351	  write_rel = relstart;
7352	  for (rel = relstart; rel < relend; )
7353	    {
7354	      unsigned long r_symndx;
7355	      asection *sym_sec;
7356	      struct elf_link_hash_entry *h;
7357	      struct ppc_link_hash_entry *fdh = NULL;
7358	      Elf_Internal_Sym *sym;
7359	      long opd_ent_size;
7360	      Elf_Internal_Rela *next_rel;
7361	      bfd_boolean skip;
7362
7363	      r_symndx = ELF64_R_SYM (rel->r_info);
7364	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7365			      r_symndx, ibfd))
7366		goto error_ret;
7367
7368	      next_rel = rel + 2;
7369	      if (next_rel + 1 == relend
7370		  || (next_rel + 2 < relend
7371		      && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
7372		++next_rel;
7373
7374	      /* See if the .opd entry is full 24 byte or
7375		 16 byte (with fd_aux entry overlapped with next
7376		 fd_func).  */
7377	      opd_ent_size = 24;
7378	      if (next_rel == relend)
7379		{
7380		  if (sec->size == rel->r_offset + 16)
7381		    opd_ent_size = 16;
7382		}
7383	      else if (next_rel->r_offset == rel->r_offset + 16)
7384		opd_ent_size = 16;
7385
7386	      if (h != NULL
7387		  && h->root.root.string[0] == '.')
7388		{
7389		  fdh = ppc_elf_hash_entry (h)->oh;
7390		  if (fdh != NULL)
7391		    {
7392		      fdh = ppc_follow_link (fdh);
7393		      if (fdh->elf.root.type != bfd_link_hash_defined
7394			  && fdh->elf.root.type != bfd_link_hash_defweak)
7395			fdh = NULL;
7396		    }
7397		}
7398
7399	      skip = (sym_sec->owner != ibfd
7400		      || sym_sec->output_section == bfd_abs_section_ptr);
7401	      if (skip)
7402		{
7403		  if (fdh != NULL && sym_sec->owner == ibfd)
7404		    {
7405		      /* Arrange for the function descriptor sym
7406			 to be dropped.  */
7407		      fdh->elf.root.u.def.value = 0;
7408		      fdh->elf.root.u.def.section = sym_sec;
7409		    }
7410		  opd->adjust[OPD_NDX (rel->r_offset)] = -1;
7411
7412		  if (NO_OPD_RELOCS || bfd_link_relocatable (info))
7413		    rel = next_rel;
7414		  else
7415		    while (1)
7416		      {
7417			if (!dec_dynrel_count (rel->r_info, sec, info,
7418					       NULL, h, sym))
7419			  goto error_ret;
7420
7421			if (++rel == next_rel)
7422			  break;
7423
7424			r_symndx = ELF64_R_SYM (rel->r_info);
7425			if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7426					r_symndx, ibfd))
7427			  goto error_ret;
7428		      }
7429		}
7430	      else
7431		{
7432		  /* We'll be keeping this opd entry.  */
7433		  long adjust;
7434
7435		  if (fdh != NULL)
7436		    {
7437		      /* Redefine the function descriptor symbol to
7438			 this location in the opd section.  It is
7439			 necessary to update the value here rather
7440			 than using an array of adjustments as we do
7441			 for local symbols, because various places
7442			 in the generic ELF code use the value
7443			 stored in u.def.value.  */
7444		      fdh->elf.root.u.def.value = wptr - new_contents;
7445		      fdh->adjust_done = 1;
7446		    }
7447
7448		  /* Local syms are a bit tricky.  We could
7449		     tweak them as they can be cached, but
7450		     we'd need to look through the local syms
7451		     for the function descriptor sym which we
7452		     don't have at the moment.  So keep an
7453		     array of adjustments.  */
7454		  adjust = (wptr - new_contents) - (rptr - sec->contents);
7455		  opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
7456
7457		  if (wptr != rptr)
7458		    memcpy (wptr, rptr, opd_ent_size);
7459		  wptr += opd_ent_size;
7460		  if (add_aux_fields && opd_ent_size == 16)
7461		    {
7462		      memset (wptr, '\0', 8);
7463		      wptr += 8;
7464		    }
7465
7466		  /* We need to adjust any reloc offsets to point to the
7467		     new opd entries.  */
7468		  for ( ; rel != next_rel; ++rel)
7469		    {
7470		      rel->r_offset += adjust;
7471		      if (write_rel != rel)
7472			memcpy (write_rel, rel, sizeof (*rel));
7473		      ++write_rel;
7474		    }
7475		}
7476
7477	      rptr += opd_ent_size;
7478	    }
7479
7480	  sec->size = wptr - new_contents;
7481	  sec->reloc_count = write_rel - relstart;
7482	  if (add_aux_fields)
7483	    {
7484	      free (sec->contents);
7485	      sec->contents = new_contents;
7486	    }
7487
7488	  /* Fudge the header size too, as this is used later in
7489	     elf_bfd_final_link if we are emitting relocs.  */
7490	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
7491	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7492	  some_edited = TRUE;
7493	}
7494      else if (elf_section_data (sec)->relocs != relstart)
7495	free (relstart);
7496
7497      if (local_syms != NULL
7498	  && symtab_hdr->contents != (unsigned char *) local_syms)
7499	{
7500	  if (!info->keep_memory)
7501	    free (local_syms);
7502	  else
7503	    symtab_hdr->contents = (unsigned char *) local_syms;
7504	}
7505    }
7506
7507  if (some_edited)
7508    elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7509
7510  /* If we are doing a final link and the last .opd entry is just 16 byte
7511     long, add a 8 byte padding after it.  */
7512  if (need_pad != NULL && !bfd_link_relocatable (info))
7513    {
7514      bfd_byte *p;
7515
7516      if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7517	{
7518	  BFD_ASSERT (need_pad->size > 0);
7519
7520	  p = bfd_malloc (need_pad->size + 8);
7521	  if (p == NULL)
7522	    return FALSE;
7523
7524	  if (!bfd_get_section_contents (need_pad->owner, need_pad,
7525					 p, 0, need_pad->size))
7526	    return FALSE;
7527
7528	  need_pad->contents = p;
7529	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7530	}
7531      else
7532	{
7533	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7534	  if (p == NULL)
7535	    return FALSE;
7536
7537	  need_pad->contents = p;
7538	}
7539
7540      memset (need_pad->contents + need_pad->size, 0, 8);
7541      need_pad->size += 8;
7542    }
7543
7544  return TRUE;
7545}
7546
7547/* Analyze inline PLT call relocations to see whether calls to locally
7548   defined functions can be converted to direct calls.  */
7549
7550bfd_boolean
7551ppc64_elf_inline_plt (struct bfd_link_info *info)
7552{
7553  struct ppc_link_hash_table *htab;
7554  bfd *ibfd;
7555  asection *sec;
7556  bfd_vma low_vma, high_vma, limit;
7557
7558  htab = ppc_hash_table (info);
7559  if (htab == NULL)
7560    return FALSE;
7561
7562  /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
7563     reduced somewhat to cater for possible stubs that might be added
7564     between the call and its destination.  */
7565  if (htab->params->group_size < 0)
7566    {
7567      limit = -htab->params->group_size;
7568      if (limit == 1)
7569	limit = 0x1e00000;
7570    }
7571  else
7572    {
7573      limit = htab->params->group_size;
7574      if (limit == 1)
7575	limit = 0x1c00000;
7576    }
7577
7578  low_vma = -1;
7579  high_vma = 0;
7580  for (sec = info->output_bfd->sections; sec != NULL; sec = sec->next)
7581    if ((sec->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE))
7582      {
7583	if (low_vma > sec->vma)
7584	  low_vma = sec->vma;
7585	if (high_vma < sec->vma + sec->size)
7586	  high_vma = sec->vma + sec->size;
7587      }
7588
7589  /* If a "bl" can reach anywhere in local code sections, then we can
7590     convert all inline PLT sequences to direct calls when the symbol
7591     is local.  */
7592  if (high_vma - low_vma < limit)
7593    {
7594      htab->can_convert_all_inline_plt = 1;
7595      return TRUE;
7596    }
7597
7598  /* Otherwise, go looking through relocs for cases where a direct
7599     call won't reach.  Mark the symbol on any such reloc to disable
7600     the optimization and keep the PLT entry as it seems likely that
7601     this will be better than creating trampolines.  Note that this
7602     will disable the optimization for all inline PLT calls to a
7603     particular symbol, not just those that won't reach.  The
7604     difficulty in doing a more precise optimization is that the
7605     linker needs to make a decision depending on whether a
7606     particular R_PPC64_PLTCALL insn can be turned into a direct
7607     call, for each of the R_PPC64_PLTSEQ and R_PPC64_PLT16* insns in
7608     the sequence, and there is nothing that ties those relocs
7609     together except their symbol.  */
7610
7611  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7612    {
7613      Elf_Internal_Shdr *symtab_hdr;
7614      Elf_Internal_Sym *local_syms;
7615
7616      if (!is_ppc64_elf (ibfd))
7617	continue;
7618
7619      local_syms = NULL;
7620      symtab_hdr = &elf_symtab_hdr (ibfd);
7621
7622      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7623	if (ppc64_elf_section_data (sec)->has_pltcall
7624	    && !bfd_is_abs_section (sec->output_section))
7625	  {
7626	    Elf_Internal_Rela *relstart, *rel, *relend;
7627
7628	    /* Read the relocations.  */
7629	    relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7630						  info->keep_memory);
7631	    if (relstart == NULL)
7632	      return FALSE;
7633
7634	    relend = relstart + sec->reloc_count;
7635	    for (rel = relstart; rel < relend; rel++)
7636	      {
7637		enum elf_ppc64_reloc_type r_type;
7638		unsigned long r_symndx;
7639		asection *sym_sec;
7640		struct elf_link_hash_entry *h;
7641		Elf_Internal_Sym *sym;
7642		unsigned char *tls_maskp;
7643
7644		r_type = ELF64_R_TYPE (rel->r_info);
7645		if (r_type != R_PPC64_PLTCALL
7646		    && r_type != R_PPC64_PLTCALL_NOTOC)
7647		  continue;
7648
7649		r_symndx = ELF64_R_SYM (rel->r_info);
7650		if (!get_sym_h (&h, &sym, &sym_sec, &tls_maskp, &local_syms,
7651				r_symndx, ibfd))
7652		  {
7653		    if (elf_section_data (sec)->relocs != relstart)
7654		      free (relstart);
7655		    if (symtab_hdr->contents != (bfd_byte *) local_syms)
7656		      free (local_syms);
7657		    return FALSE;
7658		  }
7659
7660		if (sym_sec != NULL && sym_sec->output_section != NULL)
7661		  {
7662		    bfd_vma from, to;
7663		    if (h != NULL)
7664		      to = h->root.u.def.value;
7665		    else
7666		      to = sym->st_value;
7667		    to += (rel->r_addend
7668			   + sym_sec->output_offset
7669			   + sym_sec->output_section->vma);
7670		    from = (rel->r_offset
7671			    + sec->output_offset
7672			    + sec->output_section->vma);
7673		    if (to - from + limit < 2 * limit
7674			&& !(r_type == R_PPC64_PLTCALL_NOTOC
7675			     && (((h ? h->other : sym->st_other)
7676				  & STO_PPC64_LOCAL_MASK)
7677				 > 1 << STO_PPC64_LOCAL_BIT)))
7678		      *tls_maskp &= ~PLT_KEEP;
7679		  }
7680	      }
7681	    if (elf_section_data (sec)->relocs != relstart)
7682	      free (relstart);
7683	  }
7684
7685      if (local_syms != NULL
7686	  && symtab_hdr->contents != (unsigned char *) local_syms)
7687	{
7688	  if (!info->keep_memory)
7689	    free (local_syms);
7690	  else
7691	    symtab_hdr->contents = (unsigned char *) local_syms;
7692	}
7693    }
7694
7695  return TRUE;
7696}
7697
7698/* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7699
7700asection *
7701ppc64_elf_tls_setup (struct bfd_link_info *info)
7702{
7703  struct ppc_link_hash_table *htab;
7704  struct elf_link_hash_entry *tga, *tga_fd, *desc, *desc_fd;
7705
7706  htab = ppc_hash_table (info);
7707  if (htab == NULL)
7708    return NULL;
7709
7710  if (abiversion (info->output_bfd) == 1)
7711    htab->opd_abi = 1;
7712
7713  if (htab->params->no_multi_toc)
7714    htab->do_multi_toc = 0;
7715  else if (!htab->do_multi_toc)
7716    htab->params->no_multi_toc = 1;
7717
7718  /* Default to --no-plt-localentry, as this option can cause problems
7719     with symbol interposition.  For example, glibc libpthread.so and
7720     libc.so duplicate many pthread symbols, with a fallback
7721     implementation in libc.so.  In some cases the fallback does more
7722     work than the pthread implementation.  __pthread_condattr_destroy
7723     is one such symbol: the libpthread.so implementation is
7724     localentry:0 while the libc.so implementation is localentry:8.
7725     An app that "cleverly" uses dlopen to only load necessary
7726     libraries at runtime may omit loading libpthread.so when not
7727     running multi-threaded, which then results in the libc.so
7728     fallback symbols being used and ld.so complaining.  Now there
7729     are workarounds in ld (see non_zero_localentry) to detect the
7730     pthread situation, but that may not be the only case where
7731     --plt-localentry can cause trouble.  */
7732  if (htab->params->plt_localentry0 < 0)
7733    htab->params->plt_localentry0 = 0;
7734  if (htab->params->plt_localentry0
7735      && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
7736			       FALSE, FALSE, FALSE) == NULL)
7737    _bfd_error_handler
7738      (_("warning: --plt-localentry is especially dangerous without "
7739	 "ld.so support to detect ABI violations"));
7740
7741  tga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7742			      FALSE, FALSE, TRUE);
7743  htab->tls_get_addr = ppc_elf_hash_entry (tga);
7744
7745  /* Move dynamic linking info to the function descriptor sym.  */
7746  if (tga != NULL)
7747    func_desc_adjust (tga, info);
7748  tga_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7749				 FALSE, FALSE, TRUE);
7750  htab->tls_get_addr_fd = ppc_elf_hash_entry (tga_fd);
7751
7752  desc = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_desc",
7753			       FALSE, FALSE, TRUE);
7754  htab->tga_desc = ppc_elf_hash_entry (desc);
7755  if (desc != NULL)
7756    func_desc_adjust (desc, info);
7757  desc_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_desc",
7758				  FALSE, FALSE, TRUE);
7759  htab->tga_desc_fd = ppc_elf_hash_entry (desc_fd);
7760
7761  if (htab->params->tls_get_addr_opt)
7762    {
7763      struct elf_link_hash_entry *opt, *opt_fd;
7764
7765      opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7766				  FALSE, FALSE, TRUE);
7767      if (opt != NULL)
7768	func_desc_adjust (opt, info);
7769      opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7770				     FALSE, FALSE, TRUE);
7771      if (opt_fd != NULL
7772	  && (opt_fd->root.type == bfd_link_hash_defined
7773	      || opt_fd->root.type == bfd_link_hash_defweak))
7774	{
7775	  /* If glibc supports an optimized __tls_get_addr call stub,
7776	     signalled by the presence of __tls_get_addr_opt, and we'll
7777	     be calling __tls_get_addr via a plt call stub, then
7778	     make __tls_get_addr point to __tls_get_addr_opt.  */
7779	  if (!(htab->elf.dynamic_sections_created
7780		&& tga_fd != NULL
7781		&& (tga_fd->type == STT_FUNC
7782		    || tga_fd->needs_plt)
7783		&& !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7784		     || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd))))
7785	    tga_fd = NULL;
7786	  if (!(htab->elf.dynamic_sections_created
7787		&& desc_fd != NULL
7788		&& (desc_fd->type == STT_FUNC
7789		    || desc_fd->needs_plt)
7790		&& !(SYMBOL_CALLS_LOCAL (info, desc_fd)
7791		     || UNDEFWEAK_NO_DYNAMIC_RELOC (info, desc_fd))))
7792	    desc_fd = NULL;
7793
7794	  if (tga_fd != NULL || desc_fd != NULL)
7795	    {
7796	      struct plt_entry *ent = NULL;
7797
7798	      if (tga_fd != NULL)
7799		for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7800		  if (ent->plt.refcount > 0)
7801		    break;
7802	      if (ent == NULL && desc_fd != NULL)
7803		for (ent = desc_fd->plt.plist; ent != NULL; ent = ent->next)
7804		  if (ent->plt.refcount > 0)
7805		    break;
7806	      if (ent != NULL)
7807		{
7808		  if (tga_fd != NULL)
7809		    {
7810		      tga_fd->root.type = bfd_link_hash_indirect;
7811		      tga_fd->root.u.i.link = &opt_fd->root;
7812		      tga_fd->root.u.i.warning = NULL;
7813		      ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7814		    }
7815		  if (desc_fd != NULL)
7816		    {
7817		      desc_fd->root.type = bfd_link_hash_indirect;
7818		      desc_fd->root.u.i.link = &opt_fd->root;
7819		      desc_fd->root.u.i.warning = NULL;
7820		      ppc64_elf_copy_indirect_symbol (info, opt_fd, desc_fd);
7821		    }
7822		  opt_fd->mark = 1;
7823		  if (opt_fd->dynindx != -1)
7824		    {
7825		      /* Use __tls_get_addr_opt in dynamic relocations.  */
7826		      opt_fd->dynindx = -1;
7827		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7828					      opt_fd->dynstr_index);
7829		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7830			return NULL;
7831		    }
7832		  if (tga_fd != NULL)
7833		    {
7834		      htab->tls_get_addr_fd = ppc_elf_hash_entry (opt_fd);
7835		      tga = (struct elf_link_hash_entry *) htab->tls_get_addr;
7836		      if (opt != NULL && tga != NULL)
7837			{
7838			  tga->root.type = bfd_link_hash_indirect;
7839			  tga->root.u.i.link = &opt->root;
7840			  tga->root.u.i.warning = NULL;
7841			  ppc64_elf_copy_indirect_symbol (info, opt, tga);
7842			  opt->mark = 1;
7843			  _bfd_elf_link_hash_hide_symbol (info, opt,
7844							  tga->forced_local);
7845			  htab->tls_get_addr = ppc_elf_hash_entry (opt);
7846			}
7847		      htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7848		      htab->tls_get_addr_fd->is_func_descriptor = 1;
7849		      if (htab->tls_get_addr != NULL)
7850			{
7851			  htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7852			  htab->tls_get_addr->is_func = 1;
7853			}
7854		    }
7855		  if (desc_fd != NULL)
7856		    {
7857		      htab->tga_desc_fd = ppc_elf_hash_entry (opt_fd);
7858		      if (opt != NULL && desc != NULL)
7859			{
7860			  desc->root.type = bfd_link_hash_indirect;
7861			  desc->root.u.i.link = &opt->root;
7862			  desc->root.u.i.warning = NULL;
7863			  ppc64_elf_copy_indirect_symbol (info, opt, desc);
7864			  opt->mark = 1;
7865			  _bfd_elf_link_hash_hide_symbol (info, opt,
7866							  desc->forced_local);
7867			  htab->tga_desc = ppc_elf_hash_entry (opt);
7868			}
7869		      htab->tga_desc_fd->oh = htab->tga_desc;
7870		      htab->tga_desc_fd->is_func_descriptor = 1;
7871		      if (htab->tga_desc != NULL)
7872			{
7873			  htab->tga_desc->oh = htab->tga_desc_fd;
7874			  htab->tga_desc->is_func = 1;
7875			}
7876		    }
7877		}
7878	    }
7879	}
7880      else if (htab->params->tls_get_addr_opt < 0)
7881	htab->params->tls_get_addr_opt = 0;
7882    }
7883
7884  if (htab->tga_desc_fd != NULL
7885      && htab->params->tls_get_addr_opt
7886      && htab->params->no_tls_get_addr_regsave == -1)
7887    htab->params->no_tls_get_addr_regsave = 0;
7888
7889  return _bfd_elf_tls_setup (info->output_bfd, info);
7890}
7891
7892/* Return TRUE iff REL is a branch reloc with a global symbol matching
7893   any of HASH1, HASH2, HASH3, or HASH4.  */
7894
7895static bfd_boolean
7896branch_reloc_hash_match (const bfd *ibfd,
7897			 const Elf_Internal_Rela *rel,
7898			 const struct ppc_link_hash_entry *hash1,
7899			 const struct ppc_link_hash_entry *hash2,
7900			 const struct ppc_link_hash_entry *hash3,
7901			 const struct ppc_link_hash_entry *hash4)
7902{
7903  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7904  enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7905  unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7906
7907  if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7908    {
7909      struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7910      struct elf_link_hash_entry *h;
7911
7912      h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7913      h = elf_follow_link (h);
7914      if (h == (struct elf_link_hash_entry *) hash1
7915	  || h == (struct elf_link_hash_entry *) hash2
7916	  || h == (struct elf_link_hash_entry *) hash3
7917	  || h == (struct elf_link_hash_entry *) hash4)
7918	return TRUE;
7919    }
7920  return FALSE;
7921}
7922
7923/* Run through all the TLS relocs looking for optimization
7924   opportunities.  The linker has been hacked (see ppc64elf.em) to do
7925   a preliminary section layout so that we know the TLS segment
7926   offsets.  We can't optimize earlier because some optimizations need
7927   to know the tp offset, and we need to optimize before allocating
7928   dynamic relocations.  */
7929
7930bfd_boolean
7931ppc64_elf_tls_optimize (struct bfd_link_info *info)
7932{
7933  bfd *ibfd;
7934  asection *sec;
7935  struct ppc_link_hash_table *htab;
7936  unsigned char *toc_ref;
7937  int pass;
7938
7939  if (!bfd_link_executable (info))
7940    return TRUE;
7941
7942  htab = ppc_hash_table (info);
7943  if (htab == NULL)
7944    return FALSE;
7945
7946  htab->do_tls_opt = 1;
7947
7948  /* Make two passes over the relocs.  On the first pass, mark toc
7949     entries involved with tls relocs, and check that tls relocs
7950     involved in setting up a tls_get_addr call are indeed followed by
7951     such a call.  If they are not, we can't do any tls optimization.
7952     On the second pass twiddle tls_mask flags to notify
7953     relocate_section that optimization can be done, and adjust got
7954     and plt refcounts.  */
7955  toc_ref = NULL;
7956  for (pass = 0; pass < 2; ++pass)
7957    for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7958      {
7959	Elf_Internal_Sym *locsyms = NULL;
7960	asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7961
7962	for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7963	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7964	    {
7965	      Elf_Internal_Rela *relstart, *rel, *relend;
7966	      bfd_boolean found_tls_get_addr_arg = 0;
7967
7968	      /* Read the relocations.  */
7969	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7970						    info->keep_memory);
7971	      if (relstart == NULL)
7972		{
7973		  free (toc_ref);
7974		  return FALSE;
7975		}
7976
7977	      relend = relstart + sec->reloc_count;
7978	      for (rel = relstart; rel < relend; rel++)
7979		{
7980		  enum elf_ppc64_reloc_type r_type;
7981		  unsigned long r_symndx;
7982		  struct elf_link_hash_entry *h;
7983		  Elf_Internal_Sym *sym;
7984		  asection *sym_sec;
7985		  unsigned char *tls_mask;
7986		  unsigned int tls_set, tls_clear, tls_type = 0;
7987		  bfd_vma value;
7988		  bfd_boolean ok_tprel, is_local;
7989		  long toc_ref_index = 0;
7990		  int expecting_tls_get_addr = 0;
7991		  bfd_boolean ret = FALSE;
7992
7993		  r_symndx = ELF64_R_SYM (rel->r_info);
7994		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7995				  r_symndx, ibfd))
7996		    {
7997		    err_free_rel:
7998		      if (elf_section_data (sec)->relocs != relstart)
7999			free (relstart);
8000		      free (toc_ref);
8001		      if (elf_symtab_hdr (ibfd).contents
8002			  != (unsigned char *) locsyms)
8003			free (locsyms);
8004		      return ret;
8005		    }
8006
8007		  if (h != NULL)
8008		    {
8009		      if (h->root.type == bfd_link_hash_defined
8010			  || h->root.type == bfd_link_hash_defweak)
8011			value = h->root.u.def.value;
8012		      else if (h->root.type == bfd_link_hash_undefweak)
8013			value = 0;
8014		      else
8015			{
8016			  found_tls_get_addr_arg = 0;
8017			  continue;
8018			}
8019		    }
8020		  else
8021		    /* Symbols referenced by TLS relocs must be of type
8022		       STT_TLS.  So no need for .opd local sym adjust.  */
8023		    value = sym->st_value;
8024
8025		  ok_tprel = FALSE;
8026		  is_local = SYMBOL_REFERENCES_LOCAL (info, h);
8027		  if (is_local)
8028		    {
8029		      if (h != NULL
8030			  && h->root.type == bfd_link_hash_undefweak)
8031			ok_tprel = TRUE;
8032		      else if (sym_sec != NULL
8033			       && sym_sec->output_section != NULL)
8034			{
8035			  value += sym_sec->output_offset;
8036			  value += sym_sec->output_section->vma;
8037			  value -= htab->elf.tls_sec->vma + TP_OFFSET;
8038			  /* Note that even though the prefix insns
8039			     allow a 1<<33 offset we use the same test
8040			     as for addis;addi.  There may be a mix of
8041			     pcrel and non-pcrel code and the decision
8042			     to optimise is per symbol, not per TLS
8043			     sequence.  */
8044			  ok_tprel = value + 0x80008000ULL < 1ULL << 32;
8045			}
8046		    }
8047
8048		  r_type = ELF64_R_TYPE (rel->r_info);
8049		  /* If this section has old-style __tls_get_addr calls
8050		     without marker relocs, then check that each
8051		     __tls_get_addr call reloc is preceded by a reloc
8052		     that conceivably belongs to the __tls_get_addr arg
8053		     setup insn.  If we don't find matching arg setup
8054		     relocs, don't do any tls optimization.  */
8055		  if (pass == 0
8056		      && sec->nomark_tls_get_addr
8057		      && h != NULL
8058		      && is_tls_get_addr (h, htab)
8059		      && !found_tls_get_addr_arg
8060		      && is_branch_reloc (r_type))
8061		    {
8062		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
8063						"TLS optimization disabled\n"),
8064					      ibfd, sec, rel->r_offset);
8065		      ret = TRUE;
8066		      goto err_free_rel;
8067		    }
8068
8069		  found_tls_get_addr_arg = 0;
8070		  switch (r_type)
8071		    {
8072		    case R_PPC64_GOT_TLSLD16:
8073		    case R_PPC64_GOT_TLSLD16_LO:
8074		    case R_PPC64_GOT_TLSLD_PCREL34:
8075		      expecting_tls_get_addr = 1;
8076		      found_tls_get_addr_arg = 1;
8077		      /* Fall through.  */
8078
8079		    case R_PPC64_GOT_TLSLD16_HI:
8080		    case R_PPC64_GOT_TLSLD16_HA:
8081		      /* These relocs should never be against a symbol
8082			 defined in a shared lib.  Leave them alone if
8083			 that turns out to be the case.  */
8084		      if (!is_local)
8085			continue;
8086
8087		      /* LD -> LE */
8088		      tls_set = 0;
8089		      tls_clear = TLS_LD;
8090		      tls_type = TLS_TLS | TLS_LD;
8091		      break;
8092
8093		    case R_PPC64_GOT_TLSGD16:
8094		    case R_PPC64_GOT_TLSGD16_LO:
8095		    case R_PPC64_GOT_TLSGD_PCREL34:
8096		      expecting_tls_get_addr = 1;
8097		      found_tls_get_addr_arg = 1;
8098		      /* Fall through. */
8099
8100		    case R_PPC64_GOT_TLSGD16_HI:
8101		    case R_PPC64_GOT_TLSGD16_HA:
8102		      if (ok_tprel)
8103			/* GD -> LE */
8104			tls_set = 0;
8105		      else
8106			/* GD -> IE */
8107			tls_set = TLS_TLS | TLS_GDIE;
8108		      tls_clear = TLS_GD;
8109		      tls_type = TLS_TLS | TLS_GD;
8110		      break;
8111
8112		    case R_PPC64_GOT_TPREL_PCREL34:
8113		    case R_PPC64_GOT_TPREL16_DS:
8114		    case R_PPC64_GOT_TPREL16_LO_DS:
8115		    case R_PPC64_GOT_TPREL16_HI:
8116		    case R_PPC64_GOT_TPREL16_HA:
8117		      if (ok_tprel)
8118			{
8119			  /* IE -> LE */
8120			  tls_set = 0;
8121			  tls_clear = TLS_TPREL;
8122			  tls_type = TLS_TLS | TLS_TPREL;
8123			  break;
8124			}
8125		      continue;
8126
8127		    case R_PPC64_TLSLD:
8128		      if (!is_local)
8129			continue;
8130		      /* Fall through.  */
8131		    case R_PPC64_TLSGD:
8132		      if (rel + 1 < relend
8133			  && is_plt_seq_reloc (ELF64_R_TYPE (rel[1].r_info)))
8134			{
8135			  if (pass != 0
8136			      && (ELF64_R_TYPE (rel[1].r_info)
8137				  != R_PPC64_PLTSEQ)
8138			      && (ELF64_R_TYPE (rel[1].r_info)
8139				  != R_PPC64_PLTSEQ_NOTOC))
8140			    {
8141			      r_symndx = ELF64_R_SYM (rel[1].r_info);
8142			      if (!get_sym_h (&h, NULL, NULL, NULL, &locsyms,
8143					      r_symndx, ibfd))
8144				goto err_free_rel;
8145			      if (h != NULL)
8146				{
8147				  struct plt_entry *ent = NULL;
8148
8149				  for (ent = h->plt.plist;
8150				       ent != NULL;
8151				       ent = ent->next)
8152				    if (ent->addend == rel[1].r_addend)
8153				      break;
8154
8155				  if (ent != NULL
8156				      && ent->plt.refcount > 0)
8157				    ent->plt.refcount -= 1;
8158				}
8159			    }
8160			  continue;
8161			}
8162		      found_tls_get_addr_arg = 1;
8163		      /* Fall through.  */
8164
8165		    case R_PPC64_TLS:
8166		    case R_PPC64_TOC16:
8167		    case R_PPC64_TOC16_LO:
8168		      if (sym_sec == NULL || sym_sec != toc)
8169			continue;
8170
8171		      /* Mark this toc entry as referenced by a TLS
8172			 code sequence.  We can do that now in the
8173			 case of R_PPC64_TLS, and after checking for
8174			 tls_get_addr for the TOC16 relocs.  */
8175		      if (toc_ref == NULL)
8176			toc_ref
8177			  = bfd_zmalloc (toc->output_section->rawsize / 8);
8178		      if (toc_ref == NULL)
8179			goto err_free_rel;
8180
8181		      if (h != NULL)
8182			value = h->root.u.def.value;
8183		      else
8184			value = sym->st_value;
8185		      value += rel->r_addend;
8186		      if (value % 8 != 0)
8187			continue;
8188		      BFD_ASSERT (value < toc->size
8189				  && toc->output_offset % 8 == 0);
8190		      toc_ref_index = (value + toc->output_offset) / 8;
8191		      if (r_type == R_PPC64_TLS
8192			  || r_type == R_PPC64_TLSGD
8193			  || r_type == R_PPC64_TLSLD)
8194			{
8195			  toc_ref[toc_ref_index] = 1;
8196			  continue;
8197			}
8198
8199		      if (pass != 0 && toc_ref[toc_ref_index] == 0)
8200			continue;
8201
8202		      tls_set = 0;
8203		      tls_clear = 0;
8204		      expecting_tls_get_addr = 2;
8205		      break;
8206
8207		    case R_PPC64_TPREL64:
8208		      if (pass == 0
8209			  || sec != toc
8210			  || toc_ref == NULL
8211			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8212			continue;
8213		      if (ok_tprel)
8214			{
8215			  /* IE -> LE */
8216			  tls_set = TLS_EXPLICIT;
8217			  tls_clear = TLS_TPREL;
8218			  break;
8219			}
8220		      continue;
8221
8222		    case R_PPC64_DTPMOD64:
8223		      if (pass == 0
8224			  || sec != toc
8225			  || toc_ref == NULL
8226			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8227			continue;
8228		      if (rel + 1 < relend
8229			  && (rel[1].r_info
8230			      == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8231			  && rel[1].r_offset == rel->r_offset + 8)
8232			{
8233			  if (ok_tprel)
8234			    /* GD -> LE */
8235			    tls_set = TLS_EXPLICIT | TLS_GD;
8236			  else
8237			    /* GD -> IE */
8238			    tls_set = TLS_EXPLICIT | TLS_GD | TLS_GDIE;
8239			  tls_clear = TLS_GD;
8240			}
8241		      else
8242			{
8243			  if (!is_local)
8244			    continue;
8245
8246			  /* LD -> LE */
8247			  tls_set = TLS_EXPLICIT;
8248			  tls_clear = TLS_LD;
8249			}
8250		      break;
8251
8252		    case R_PPC64_TPREL16_HA:
8253		      if (pass == 0)
8254			{
8255			  unsigned char buf[4];
8256			  unsigned int insn;
8257			  bfd_vma off = rel->r_offset & ~3;
8258			  if (!bfd_get_section_contents (ibfd, sec, buf,
8259							 off, 4))
8260			    goto err_free_rel;
8261			  insn = bfd_get_32 (ibfd, buf);
8262			  /* addis rt,13,imm */
8263			  if ((insn & ((0x3fu << 26) | 0x1f << 16))
8264			      != ((15u << 26) | (13 << 16)))
8265			    {
8266			      /* xgettext:c-format */
8267			      info->callbacks->minfo
8268				(_("%H: warning: %s unexpected insn %#x.\n"),
8269				 ibfd, sec, off, "R_PPC64_TPREL16_HA", insn);
8270			      htab->do_tls_opt = 0;
8271			    }
8272			}
8273		      continue;
8274
8275		    case R_PPC64_TPREL16_HI:
8276		    case R_PPC64_TPREL16_HIGH:
8277		    case R_PPC64_TPREL16_HIGHA:
8278		    case R_PPC64_TPREL16_HIGHER:
8279		    case R_PPC64_TPREL16_HIGHERA:
8280		    case R_PPC64_TPREL16_HIGHEST:
8281		    case R_PPC64_TPREL16_HIGHESTA:
8282		      /* These can all be used in sequences along with
8283			 TPREL16_LO or TPREL16_LO_DS in ways we aren't
8284			 able to verify easily.  */
8285		      htab->do_tls_opt = 0;
8286		      continue;
8287
8288		    default:
8289		      continue;
8290		    }
8291
8292		  if (pass == 0)
8293		    {
8294		      if (!expecting_tls_get_addr
8295			  || !sec->nomark_tls_get_addr)
8296			continue;
8297
8298		      if (rel + 1 < relend
8299			  && branch_reloc_hash_match (ibfd, rel + 1,
8300						      htab->tls_get_addr_fd,
8301						      htab->tga_desc_fd,
8302						      htab->tls_get_addr,
8303						      htab->tga_desc))
8304			{
8305			  if (expecting_tls_get_addr == 2)
8306			    {
8307			      /* Check for toc tls entries.  */
8308			      unsigned char *toc_tls;
8309			      int retval;
8310
8311			      retval = get_tls_mask (&toc_tls, NULL, NULL,
8312						     &locsyms,
8313						     rel, ibfd);
8314			      if (retval == 0)
8315				goto err_free_rel;
8316			      if (toc_tls != NULL)
8317				{
8318				  if ((*toc_tls & TLS_TLS) != 0
8319				      && ((*toc_tls & (TLS_GD | TLS_LD)) != 0))
8320				    found_tls_get_addr_arg = 1;
8321				  if (retval > 1)
8322				    toc_ref[toc_ref_index] = 1;
8323				}
8324			    }
8325			  continue;
8326			}
8327
8328		      /* Uh oh, we didn't find the expected call.  We
8329			 could just mark this symbol to exclude it
8330			 from tls optimization but it's safer to skip
8331			 the entire optimization.  */
8332		      /* xgettext:c-format */
8333		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8334						"TLS optimization disabled\n"),
8335					      ibfd, sec, rel->r_offset);
8336		      ret = TRUE;
8337		      goto err_free_rel;
8338		    }
8339
8340		  /* If we don't have old-style __tls_get_addr calls
8341		     without TLSGD/TLSLD marker relocs, and we haven't
8342		     found a new-style __tls_get_addr call with a
8343		     marker for this symbol, then we either have a
8344		     broken object file or an -mlongcall style
8345		     indirect call to __tls_get_addr without a marker.
8346		     Disable optimization in this case.  */
8347		  if ((tls_clear & (TLS_GD | TLS_LD)) != 0
8348		      && (tls_set & TLS_EXPLICIT) == 0
8349		      && !sec->nomark_tls_get_addr
8350		      && ((*tls_mask & (TLS_TLS | TLS_MARK))
8351			  != (TLS_TLS | TLS_MARK)))
8352		    continue;
8353
8354		  if (expecting_tls_get_addr == 1 + !sec->nomark_tls_get_addr)
8355		    {
8356		      struct plt_entry *ent = NULL;
8357
8358		      if (htab->tls_get_addr_fd != NULL)
8359			for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8360			     ent != NULL;
8361			     ent = ent->next)
8362			  if (ent->addend == 0)
8363			    break;
8364
8365		      if (ent == NULL && htab->tga_desc_fd != NULL)
8366			for (ent = htab->tga_desc_fd->elf.plt.plist;
8367			     ent != NULL;
8368			     ent = ent->next)
8369			  if (ent->addend == 0)
8370			    break;
8371
8372		      if (ent == NULL && htab->tls_get_addr != NULL)
8373			for (ent = htab->tls_get_addr->elf.plt.plist;
8374			     ent != NULL;
8375			     ent = ent->next)
8376			  if (ent->addend == 0)
8377			    break;
8378
8379		      if (ent == NULL && htab->tga_desc != NULL)
8380			for (ent = htab->tga_desc->elf.plt.plist;
8381			     ent != NULL;
8382			     ent = ent->next)
8383			  if (ent->addend == 0)
8384			    break;
8385
8386		      if (ent != NULL
8387			  && ent->plt.refcount > 0)
8388			ent->plt.refcount -= 1;
8389		    }
8390
8391		  if (tls_clear == 0)
8392		    continue;
8393
8394		  if ((tls_set & TLS_EXPLICIT) == 0)
8395		    {
8396		      struct got_entry *ent;
8397
8398		      /* Adjust got entry for this reloc.  */
8399		      if (h != NULL)
8400			ent = h->got.glist;
8401		      else
8402			ent = elf_local_got_ents (ibfd)[r_symndx];
8403
8404		      for (; ent != NULL; ent = ent->next)
8405			if (ent->addend == rel->r_addend
8406			    && ent->owner == ibfd
8407			    && ent->tls_type == tls_type)
8408			  break;
8409		      if (ent == NULL)
8410			abort ();
8411
8412		      if (tls_set == 0)
8413			{
8414			  /* We managed to get rid of a got entry.  */
8415			  if (ent->got.refcount > 0)
8416			    ent->got.refcount -= 1;
8417			}
8418		    }
8419		  else
8420		    {
8421		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
8422			 we'll lose one or two dyn relocs.  */
8423		      if (!dec_dynrel_count (rel->r_info, sec, info,
8424					     NULL, h, sym))
8425			return FALSE;
8426
8427		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
8428			{
8429			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8430						 NULL, h, sym))
8431			    return FALSE;
8432			}
8433		    }
8434
8435		  *tls_mask |= tls_set & 0xff;
8436		  *tls_mask &= ~tls_clear;
8437		}
8438
8439	      if (elf_section_data (sec)->relocs != relstart)
8440		free (relstart);
8441	    }
8442
8443	if (locsyms != NULL
8444	    && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8445	  {
8446	    if (!info->keep_memory)
8447	      free (locsyms);
8448	    else
8449	      elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8450	  }
8451      }
8452
8453  free (toc_ref);
8454  return TRUE;
8455}
8456
8457/* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8458   the values of any global symbols in a toc section that has been
8459   edited.  Globals in toc sections should be a rarity, so this function
8460   sets a flag if any are found in toc sections other than the one just
8461   edited, so that further hash table traversals can be avoided.  */
8462
8463struct adjust_toc_info
8464{
8465  asection *toc;
8466  unsigned long *skip;
8467  bfd_boolean global_toc_syms;
8468};
8469
8470enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8471
8472static bfd_boolean
8473adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8474{
8475  struct ppc_link_hash_entry *eh;
8476  struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8477  unsigned long i;
8478
8479  if (h->root.type != bfd_link_hash_defined
8480      && h->root.type != bfd_link_hash_defweak)
8481    return TRUE;
8482
8483  eh = ppc_elf_hash_entry (h);
8484  if (eh->adjust_done)
8485    return TRUE;
8486
8487  if (eh->elf.root.u.def.section == toc_inf->toc)
8488    {
8489      if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8490	i = toc_inf->toc->rawsize >> 3;
8491      else
8492	i = eh->elf.root.u.def.value >> 3;
8493
8494      if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8495	{
8496	  _bfd_error_handler
8497	    (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8498	  do
8499	    ++i;
8500	  while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8501	  eh->elf.root.u.def.value = (bfd_vma) i << 3;
8502	}
8503
8504      eh->elf.root.u.def.value -= toc_inf->skip[i];
8505      eh->adjust_done = 1;
8506    }
8507  else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8508    toc_inf->global_toc_syms = TRUE;
8509
8510  return TRUE;
8511}
8512
8513/* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8514   on a _LO variety toc/got reloc.  */
8515
8516static bfd_boolean
8517ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8518{
8519  return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */
8520	  || (insn & (0x3fu << 26)) == 14u << 26 /* addi */
8521	  || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
8522	  || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
8523	  || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
8524	  || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
8525	  || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
8526	  || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
8527	  || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
8528	  || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
8529	  || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
8530	  || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
8531	  || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
8532	  || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
8533	  || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
8534	  || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */
8535	  || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8536	      /* Exclude lfqu by testing reloc.  If relocs are ever
8537		 defined for the reduced D field in psq_lu then those
8538		 will need testing too.  */
8539	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8540	  || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */
8541	      && (insn & 1) == 0)
8542	  || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */
8543	  || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8544	      /* Exclude stfqu.  psq_stu as above for psq_lu.  */
8545	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8546	  || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */
8547	      && (insn & 1) == 0));
8548}
8549
8550/* PCREL_OPT in one instance flags to the linker that a pair of insns:
8551     pld ra,symbol@got@pcrel
8552     load/store rt,off(ra)
8553   or
8554     pla ra,symbol@pcrel
8555     load/store rt,off(ra)
8556   may be translated to
8557     pload/pstore rt,symbol+off@pcrel
8558     nop.
8559   This function returns true if the optimization is possible, placing
8560   the prefix insn in *PINSN1, a NOP in *PINSN2 and the offset in *POFF.
8561
8562   On entry to this function, the linker has already determined that
8563   the pld can be replaced with pla: *PINSN1 is that pla insn,
8564   while *PINSN2 is the second instruction.  */
8565
8566static bfd_boolean
8567xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2, bfd_signed_vma *poff)
8568{
8569  uint64_t insn1 = *pinsn1;
8570  uint64_t insn2 = *pinsn2;
8571  bfd_signed_vma off;
8572
8573  if ((insn2 & (63ULL << 58)) == 1ULL << 58)
8574    {
8575      /* Check that regs match.  */
8576      if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8577	return FALSE;
8578
8579      /* P8LS or PMLS form, non-pcrel.  */
8580      if ((insn2 & (-1ULL << 50) & ~(1ULL << 56)) != (1ULL << 58))
8581	return FALSE;
8582
8583      *pinsn1 = (insn2 & ~(31 << 16) & ~0x3ffff0000ffffULL) | (1ULL << 52);
8584      *pinsn2 = PNOP;
8585      off = ((insn2 >> 16) & 0x3ffff0000ULL) | (insn2 & 0xffff);
8586      *poff = (off ^ 0x200000000ULL) - 0x200000000ULL;
8587      return TRUE;
8588    }
8589
8590  insn2 >>= 32;
8591
8592  /* Check that regs match.  */
8593  if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8594    return FALSE;
8595
8596  switch ((insn2 >> 26) & 63)
8597    {
8598    default:
8599      return FALSE;
8600
8601    case 32: /* lwz */
8602    case 34: /* lbz */
8603    case 36: /* stw */
8604    case 38: /* stb */
8605    case 40: /* lhz */
8606    case 42: /* lha */
8607    case 44: /* sth */
8608    case 48: /* lfs */
8609    case 50: /* lfd */
8610    case 52: /* stfs */
8611    case 54: /* stfd */
8612      /* These are the PMLS cases, where we just need to tack a prefix
8613	 on the insn.  */
8614      insn1 = ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
8615	       | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8616      off = insn2 & 0xffff;
8617      break;
8618
8619    case 58: /* lwa, ld */
8620      if ((insn2 & 1) != 0)
8621	return FALSE;
8622      insn1 = ((1ULL << 58) | (1ULL << 52)
8623	       | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
8624	       | (insn2 & (31ULL << 21)));
8625      off = insn2 & 0xfffc;
8626      break;
8627
8628    case 57: /* lxsd, lxssp */
8629      if ((insn2 & 3) < 2)
8630	return FALSE;
8631      insn1 = ((1ULL << 58) | (1ULL << 52)
8632	       | ((40ULL | (insn2 & 3)) << 26)
8633	       | (insn2 & (31ULL << 21)));
8634      off = insn2 & 0xfffc;
8635      break;
8636
8637    case 61: /* stxsd, stxssp, lxv, stxv  */
8638      if ((insn2 & 3) == 0)
8639	return FALSE;
8640      else if ((insn2 & 3) >= 2)
8641	{
8642	  insn1 = ((1ULL << 58) | (1ULL << 52)
8643		   | ((44ULL | (insn2 & 3)) << 26)
8644		   | (insn2 & (31ULL << 21)));
8645	  off = insn2 & 0xfffc;
8646	}
8647      else
8648	{
8649	  insn1 = ((1ULL << 58) | (1ULL << 52)
8650		   | ((50ULL | (insn2 & 4) | ((insn2 & 8) >> 3)) << 26)
8651		   | (insn2 & (31ULL << 21)));
8652	  off = insn2 & 0xfff0;
8653	}
8654      break;
8655
8656    case 56: /* lq */
8657      insn1 = ((1ULL << 58) | (1ULL << 52)
8658	       | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8659      off = insn2 & 0xffff;
8660      break;
8661
8662    case 6: /* lxvp, stxvp */
8663      if ((insn2 & 0xe) != 0)
8664	return FALSE;
8665      insn1 = ((1ULL << 58) | (1ULL << 52)
8666	       | ((insn2 & 1) == 0 ? 58ULL << 26 : 62ULL << 26)
8667	       | (insn2 & (31ULL << 21)));
8668      off = insn2 & 0xfff0;
8669      break;
8670
8671    case 62: /* std, stq */
8672      if ((insn2 & 1) != 0)
8673	return FALSE;
8674      insn1 = ((1ULL << 58) | (1ULL << 52)
8675	       | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
8676	       | (insn2 & (31ULL << 21)));
8677      off = insn2 & 0xfffc;
8678      break;
8679    }
8680
8681  *pinsn1 = insn1;
8682  *pinsn2 = (uint64_t) NOP << 32;
8683  *poff = (off ^ 0x8000) - 0x8000;
8684  return TRUE;
8685}
8686
8687/* Examine all relocs referencing .toc sections in order to remove
8688   unused .toc entries.  */
8689
8690bfd_boolean
8691ppc64_elf_edit_toc (struct bfd_link_info *info)
8692{
8693  bfd *ibfd;
8694  struct adjust_toc_info toc_inf;
8695  struct ppc_link_hash_table *htab = ppc_hash_table (info);
8696
8697  htab->do_toc_opt = 1;
8698  toc_inf.global_toc_syms = TRUE;
8699  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8700    {
8701      asection *toc, *sec;
8702      Elf_Internal_Shdr *symtab_hdr;
8703      Elf_Internal_Sym *local_syms;
8704      Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8705      unsigned long *skip, *drop;
8706      unsigned char *used;
8707      unsigned char *keep, last, some_unused;
8708
8709      if (!is_ppc64_elf (ibfd))
8710	continue;
8711
8712      toc = bfd_get_section_by_name (ibfd, ".toc");
8713      if (toc == NULL
8714	  || toc->size == 0
8715	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8716	  || discarded_section (toc))
8717	continue;
8718
8719      toc_relocs = NULL;
8720      local_syms = NULL;
8721      symtab_hdr = &elf_symtab_hdr (ibfd);
8722
8723      /* Look at sections dropped from the final link.  */
8724      skip = NULL;
8725      relstart = NULL;
8726      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8727	{
8728	  if (sec->reloc_count == 0
8729	      || !discarded_section (sec)
8730	      || get_opd_info (sec)
8731	      || (sec->flags & SEC_ALLOC) == 0
8732	      || (sec->flags & SEC_DEBUGGING) != 0)
8733	    continue;
8734
8735	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8736	  if (relstart == NULL)
8737	    goto error_ret;
8738
8739	  /* Run through the relocs to see which toc entries might be
8740	     unused.  */
8741	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8742	    {
8743	      enum elf_ppc64_reloc_type r_type;
8744	      unsigned long r_symndx;
8745	      asection *sym_sec;
8746	      struct elf_link_hash_entry *h;
8747	      Elf_Internal_Sym *sym;
8748	      bfd_vma val;
8749
8750	      r_type = ELF64_R_TYPE (rel->r_info);
8751	      switch (r_type)
8752		{
8753		default:
8754		  continue;
8755
8756		case R_PPC64_TOC16:
8757		case R_PPC64_TOC16_LO:
8758		case R_PPC64_TOC16_HI:
8759		case R_PPC64_TOC16_HA:
8760		case R_PPC64_TOC16_DS:
8761		case R_PPC64_TOC16_LO_DS:
8762		  break;
8763		}
8764
8765	      r_symndx = ELF64_R_SYM (rel->r_info);
8766	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8767			      r_symndx, ibfd))
8768		goto error_ret;
8769
8770	      if (sym_sec != toc)
8771		continue;
8772
8773	      if (h != NULL)
8774		val = h->root.u.def.value;
8775	      else
8776		val = sym->st_value;
8777	      val += rel->r_addend;
8778
8779	      if (val >= toc->size)
8780		continue;
8781
8782	      /* Anything in the toc ought to be aligned to 8 bytes.
8783		 If not, don't mark as unused.  */
8784	      if (val & 7)
8785		continue;
8786
8787	      if (skip == NULL)
8788		{
8789		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8790		  if (skip == NULL)
8791		    goto error_ret;
8792		}
8793
8794	      skip[val >> 3] = ref_from_discarded;
8795	    }
8796
8797	  if (elf_section_data (sec)->relocs != relstart)
8798	    free (relstart);
8799	}
8800
8801      /* For largetoc loads of address constants, we can convert
8802	 .  addis rx,2,addr@got@ha
8803	 .  ld ry,addr@got@l(rx)
8804	 to
8805	 .  addis rx,2,addr@toc@ha
8806	 .  addi ry,rx,addr@toc@l
8807	 when addr is within 2G of the toc pointer.  This then means
8808	 that the word storing "addr" in the toc is no longer needed.  */
8809
8810      if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8811	  && toc->output_section->rawsize < (bfd_vma) 1 << 31
8812	  && toc->reloc_count != 0)
8813	{
8814	  /* Read toc relocs.  */
8815	  toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8816						  info->keep_memory);
8817	  if (toc_relocs == NULL)
8818	    goto error_ret;
8819
8820	  for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8821	    {
8822	      enum elf_ppc64_reloc_type r_type;
8823	      unsigned long r_symndx;
8824	      asection *sym_sec;
8825	      struct elf_link_hash_entry *h;
8826	      Elf_Internal_Sym *sym;
8827	      bfd_vma val, addr;
8828
8829	      r_type = ELF64_R_TYPE (rel->r_info);
8830	      if (r_type != R_PPC64_ADDR64)
8831		continue;
8832
8833	      r_symndx = ELF64_R_SYM (rel->r_info);
8834	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8835			      r_symndx, ibfd))
8836		goto error_ret;
8837
8838	      if (sym_sec == NULL
8839		  || sym_sec->output_section == NULL
8840		  || discarded_section (sym_sec))
8841		continue;
8842
8843	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
8844		continue;
8845
8846	      if (h != NULL)
8847		{
8848		  if (h->type == STT_GNU_IFUNC)
8849		    continue;
8850		  val = h->root.u.def.value;
8851		}
8852	      else
8853		{
8854		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8855		    continue;
8856		  val = sym->st_value;
8857		}
8858	      val += rel->r_addend;
8859	      val += sym_sec->output_section->vma + sym_sec->output_offset;
8860
8861	      /* We don't yet know the exact toc pointer value, but we
8862		 know it will be somewhere in the toc section.  Don't
8863		 optimize if the difference from any possible toc
8864		 pointer is outside [ff..f80008000, 7fff7fff].  */
8865	      addr = toc->output_section->vma + TOC_BASE_OFF;
8866	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8867		continue;
8868
8869	      addr = toc->output_section->vma + toc->output_section->rawsize;
8870	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8871		continue;
8872
8873	      if (skip == NULL)
8874		{
8875		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8876		  if (skip == NULL)
8877		    goto error_ret;
8878		}
8879
8880	      skip[rel->r_offset >> 3]
8881		|= can_optimize | ((rel - toc_relocs) << 2);
8882	    }
8883	}
8884
8885      if (skip == NULL)
8886	continue;
8887
8888      used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8889      if (used == NULL)
8890	{
8891	error_ret:
8892	  if (symtab_hdr->contents != (unsigned char *) local_syms)
8893	    free (local_syms);
8894	  if (sec != NULL
8895	      && elf_section_data (sec)->relocs != relstart)
8896	    free (relstart);
8897	  if (elf_section_data (toc)->relocs != toc_relocs)
8898	    free (toc_relocs);
8899	  free (skip);
8900	  return FALSE;
8901	}
8902
8903      /* Now check all kept sections that might reference the toc.
8904	 Check the toc itself last.  */
8905      for (sec = (ibfd->sections == toc && toc->next ? toc->next
8906		  : ibfd->sections);
8907	   sec != NULL;
8908	   sec = (sec == toc ? NULL
8909		  : sec->next == NULL ? toc
8910		  : sec->next == toc && toc->next ? toc->next
8911		  : sec->next))
8912	{
8913	  int repeat;
8914
8915	  if (sec->reloc_count == 0
8916	      || discarded_section (sec)
8917	      || get_opd_info (sec)
8918	      || (sec->flags & SEC_ALLOC) == 0
8919	      || (sec->flags & SEC_DEBUGGING) != 0)
8920	    continue;
8921
8922	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8923						info->keep_memory);
8924	  if (relstart == NULL)
8925	    {
8926	      free (used);
8927	      goto error_ret;
8928	    }
8929
8930	  /* Mark toc entries referenced as used.  */
8931	  do
8932	    {
8933	      repeat = 0;
8934	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8935		{
8936		  enum elf_ppc64_reloc_type r_type;
8937		  unsigned long r_symndx;
8938		  asection *sym_sec;
8939		  struct elf_link_hash_entry *h;
8940		  Elf_Internal_Sym *sym;
8941		  bfd_vma val;
8942
8943		  r_type = ELF64_R_TYPE (rel->r_info);
8944		  switch (r_type)
8945		    {
8946		    case R_PPC64_TOC16:
8947		    case R_PPC64_TOC16_LO:
8948		    case R_PPC64_TOC16_HI:
8949		    case R_PPC64_TOC16_HA:
8950		    case R_PPC64_TOC16_DS:
8951		    case R_PPC64_TOC16_LO_DS:
8952		      /* In case we're taking addresses of toc entries.  */
8953		    case R_PPC64_ADDR64:
8954		      break;
8955
8956		    default:
8957		      continue;
8958		    }
8959
8960		  r_symndx = ELF64_R_SYM (rel->r_info);
8961		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8962				  r_symndx, ibfd))
8963		    {
8964		      free (used);
8965		      goto error_ret;
8966		    }
8967
8968		  if (sym_sec != toc)
8969		    continue;
8970
8971		  if (h != NULL)
8972		    val = h->root.u.def.value;
8973		  else
8974		    val = sym->st_value;
8975		  val += rel->r_addend;
8976
8977		  if (val >= toc->size)
8978		    continue;
8979
8980		  if ((skip[val >> 3] & can_optimize) != 0)
8981		    {
8982		      bfd_vma off;
8983		      unsigned char opc;
8984
8985		      switch (r_type)
8986			{
8987			case R_PPC64_TOC16_HA:
8988			  break;
8989
8990			case R_PPC64_TOC16_LO_DS:
8991			  off = rel->r_offset;
8992			  off += (bfd_big_endian (ibfd) ? -2 : 3);
8993			  if (!bfd_get_section_contents (ibfd, sec, &opc,
8994							 off, 1))
8995			    {
8996			      free (used);
8997			      goto error_ret;
8998			    }
8999			  if ((opc & (0x3f << 2)) == (58u << 2))
9000			    break;
9001			  /* Fall through.  */
9002
9003			default:
9004			  /* Wrong sort of reloc, or not a ld.  We may
9005			     as well clear ref_from_discarded too.  */
9006			  skip[val >> 3] = 0;
9007			}
9008		    }
9009
9010		  if (sec != toc)
9011		    used[val >> 3] = 1;
9012		  /* For the toc section, we only mark as used if this
9013		     entry itself isn't unused.  */
9014		  else if ((used[rel->r_offset >> 3]
9015			    || !(skip[rel->r_offset >> 3] & ref_from_discarded))
9016			   && !used[val >> 3])
9017		    {
9018		      /* Do all the relocs again, to catch reference
9019			 chains.  */
9020		      repeat = 1;
9021		      used[val >> 3] = 1;
9022		    }
9023		}
9024	    }
9025	  while (repeat);
9026
9027	  if (elf_section_data (sec)->relocs != relstart)
9028	    free (relstart);
9029	}
9030
9031      /* Merge the used and skip arrays.  Assume that TOC
9032	 doublewords not appearing as either used or unused belong
9033	 to an entry more than one doubleword in size.  */
9034      for (drop = skip, keep = used, last = 0, some_unused = 0;
9035	   drop < skip + (toc->size + 7) / 8;
9036	   ++drop, ++keep)
9037	{
9038	  if (*keep)
9039	    {
9040	      *drop &= ~ref_from_discarded;
9041	      if ((*drop & can_optimize) != 0)
9042		some_unused = 1;
9043	      last = 0;
9044	    }
9045	  else if ((*drop & ref_from_discarded) != 0)
9046	    {
9047	      some_unused = 1;
9048	      last = ref_from_discarded;
9049	    }
9050	  else
9051	    *drop = last;
9052	}
9053
9054      free (used);
9055
9056      if (some_unused)
9057	{
9058	  bfd_byte *contents, *src;
9059	  unsigned long off;
9060	  Elf_Internal_Sym *sym;
9061	  bfd_boolean local_toc_syms = FALSE;
9062
9063	  /* Shuffle the toc contents, and at the same time convert the
9064	     skip array from booleans into offsets.  */
9065	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
9066	    goto error_ret;
9067
9068	  elf_section_data (toc)->this_hdr.contents = contents;
9069
9070	  for (src = contents, off = 0, drop = skip;
9071	       src < contents + toc->size;
9072	       src += 8, ++drop)
9073	    {
9074	      if ((*drop & (can_optimize | ref_from_discarded)) != 0)
9075		off += 8;
9076	      else if (off != 0)
9077		{
9078		  *drop = off;
9079		  memcpy (src - off, src, 8);
9080		}
9081	    }
9082	  *drop = off;
9083	  toc->rawsize = toc->size;
9084	  toc->size = src - contents - off;
9085
9086	  /* Adjust addends for relocs against the toc section sym,
9087	     and optimize any accesses we can.  */
9088	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9089	    {
9090	      if (sec->reloc_count == 0
9091		  || discarded_section (sec))
9092		continue;
9093
9094	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9095						    info->keep_memory);
9096	      if (relstart == NULL)
9097		goto error_ret;
9098
9099	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9100		{
9101		  enum elf_ppc64_reloc_type r_type;
9102		  unsigned long r_symndx;
9103		  asection *sym_sec;
9104		  struct elf_link_hash_entry *h;
9105		  bfd_vma val;
9106
9107		  r_type = ELF64_R_TYPE (rel->r_info);
9108		  switch (r_type)
9109		    {
9110		    default:
9111		      continue;
9112
9113		    case R_PPC64_TOC16:
9114		    case R_PPC64_TOC16_LO:
9115		    case R_PPC64_TOC16_HI:
9116		    case R_PPC64_TOC16_HA:
9117		    case R_PPC64_TOC16_DS:
9118		    case R_PPC64_TOC16_LO_DS:
9119		    case R_PPC64_ADDR64:
9120		      break;
9121		    }
9122
9123		  r_symndx = ELF64_R_SYM (rel->r_info);
9124		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9125				  r_symndx, ibfd))
9126		    goto error_ret;
9127
9128		  if (sym_sec != toc)
9129		    continue;
9130
9131		  if (h != NULL)
9132		    val = h->root.u.def.value;
9133		  else
9134		    {
9135		      val = sym->st_value;
9136		      if (val != 0)
9137			local_toc_syms = TRUE;
9138		    }
9139
9140		  val += rel->r_addend;
9141
9142		  if (val > toc->rawsize)
9143		    val = toc->rawsize;
9144		  else if ((skip[val >> 3] & ref_from_discarded) != 0)
9145		    continue;
9146		  else if ((skip[val >> 3] & can_optimize) != 0)
9147		    {
9148		      Elf_Internal_Rela *tocrel
9149			= toc_relocs + (skip[val >> 3] >> 2);
9150		      unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
9151
9152		      switch (r_type)
9153			{
9154			case R_PPC64_TOC16_HA:
9155			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
9156			  break;
9157
9158			case R_PPC64_TOC16_LO_DS:
9159			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
9160			  break;
9161
9162			default:
9163			  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
9164			    ppc_howto_init ();
9165			  info->callbacks->einfo
9166			    /* xgettext:c-format */
9167			    (_("%H: %s references "
9168			       "optimized away TOC entry\n"),
9169			     ibfd, sec, rel->r_offset,
9170			     ppc64_elf_howto_table[r_type]->name);
9171			  bfd_set_error (bfd_error_bad_value);
9172			  goto error_ret;
9173			}
9174		      rel->r_addend = tocrel->r_addend;
9175		      elf_section_data (sec)->relocs = relstart;
9176		      continue;
9177		    }
9178
9179		  if (h != NULL || sym->st_value != 0)
9180		    continue;
9181
9182		  rel->r_addend -= skip[val >> 3];
9183		  elf_section_data (sec)->relocs = relstart;
9184		}
9185
9186	      if (elf_section_data (sec)->relocs != relstart)
9187		free (relstart);
9188	    }
9189
9190	  /* We shouldn't have local or global symbols defined in the TOC,
9191	     but handle them anyway.  */
9192	  if (local_syms != NULL)
9193	    for (sym = local_syms;
9194		 sym < local_syms + symtab_hdr->sh_info;
9195		 ++sym)
9196	      if (sym->st_value != 0
9197		  && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
9198		{
9199		  unsigned long i;
9200
9201		  if (sym->st_value > toc->rawsize)
9202		    i = toc->rawsize >> 3;
9203		  else
9204		    i = sym->st_value >> 3;
9205
9206		  if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
9207		    {
9208		      if (local_toc_syms)
9209			_bfd_error_handler
9210			  (_("%s defined on removed toc entry"),
9211			   bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
9212		      do
9213			++i;
9214		      while ((skip[i] & (ref_from_discarded | can_optimize)));
9215		      sym->st_value = (bfd_vma) i << 3;
9216		    }
9217
9218		  sym->st_value -= skip[i];
9219		  symtab_hdr->contents = (unsigned char *) local_syms;
9220		}
9221
9222	  /* Adjust any global syms defined in this toc input section.  */
9223	  if (toc_inf.global_toc_syms)
9224	    {
9225	      toc_inf.toc = toc;
9226	      toc_inf.skip = skip;
9227	      toc_inf.global_toc_syms = FALSE;
9228	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
9229				      &toc_inf);
9230	    }
9231
9232	  if (toc->reloc_count != 0)
9233	    {
9234	      Elf_Internal_Shdr *rel_hdr;
9235	      Elf_Internal_Rela *wrel;
9236	      bfd_size_type sz;
9237
9238	      /* Remove unused toc relocs, and adjust those we keep.  */
9239	      if (toc_relocs == NULL)
9240		toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9241							info->keep_memory);
9242	      if (toc_relocs == NULL)
9243		goto error_ret;
9244
9245	      wrel = toc_relocs;
9246	      for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9247		if ((skip[rel->r_offset >> 3]
9248		     & (ref_from_discarded | can_optimize)) == 0)
9249		  {
9250		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9251		    wrel->r_info = rel->r_info;
9252		    wrel->r_addend = rel->r_addend;
9253		    ++wrel;
9254		  }
9255		else if (!dec_dynrel_count (rel->r_info, toc, info,
9256					    &local_syms, NULL, NULL))
9257		  goto error_ret;
9258
9259	      elf_section_data (toc)->relocs = toc_relocs;
9260	      toc->reloc_count = wrel - toc_relocs;
9261	      rel_hdr = _bfd_elf_single_rel_hdr (toc);
9262	      sz = rel_hdr->sh_entsize;
9263	      rel_hdr->sh_size = toc->reloc_count * sz;
9264	    }
9265	}
9266      else if (elf_section_data (toc)->relocs != toc_relocs)
9267	free (toc_relocs);
9268
9269      if (local_syms != NULL
9270	  && symtab_hdr->contents != (unsigned char *) local_syms)
9271	{
9272	  if (!info->keep_memory)
9273	    free (local_syms);
9274	  else
9275	    symtab_hdr->contents = (unsigned char *) local_syms;
9276	}
9277      free (skip);
9278    }
9279
9280  /* Look for cases where we can change an indirect GOT access to
9281     a GOT relative or PC relative access, possibly reducing the
9282     number of GOT entries.  */
9283  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9284    {
9285      asection *sec;
9286      Elf_Internal_Shdr *symtab_hdr;
9287      Elf_Internal_Sym *local_syms;
9288      Elf_Internal_Rela *relstart, *rel;
9289      bfd_vma got;
9290
9291      if (!is_ppc64_elf (ibfd))
9292	continue;
9293
9294      if (!ppc64_elf_tdata (ibfd)->has_optrel)
9295	continue;
9296
9297      sec = ppc64_elf_tdata (ibfd)->got;
9298      got = 0;
9299      if (sec != NULL)
9300	got = sec->output_section->vma + sec->output_offset + 0x8000;
9301
9302      local_syms = NULL;
9303      symtab_hdr = &elf_symtab_hdr (ibfd);
9304
9305      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9306	{
9307	  if (sec->reloc_count == 0
9308	      || !ppc64_elf_section_data (sec)->has_optrel
9309	      || discarded_section (sec))
9310	    continue;
9311
9312	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9313						info->keep_memory);
9314	  if (relstart == NULL)
9315	    {
9316	    got_error_ret:
9317	      if (symtab_hdr->contents != (unsigned char *) local_syms)
9318		free (local_syms);
9319	      if (sec != NULL
9320		  && elf_section_data (sec)->relocs != relstart)
9321		free (relstart);
9322	      return FALSE;
9323	    }
9324
9325	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9326	    {
9327	      enum elf_ppc64_reloc_type r_type;
9328	      unsigned long r_symndx;
9329	      Elf_Internal_Sym *sym;
9330	      asection *sym_sec;
9331	      struct elf_link_hash_entry *h;
9332	      struct got_entry *ent;
9333	      bfd_vma val, pc;
9334	      unsigned char buf[8];
9335	      unsigned int insn;
9336	      enum {no_check, check_lo, check_ha} insn_check;
9337
9338	      r_type = ELF64_R_TYPE (rel->r_info);
9339	      switch (r_type)
9340		{
9341		default:
9342		  insn_check = no_check;
9343		  break;
9344
9345		case R_PPC64_PLT16_HA:
9346		case R_PPC64_GOT_TLSLD16_HA:
9347		case R_PPC64_GOT_TLSGD16_HA:
9348		case R_PPC64_GOT_TPREL16_HA:
9349		case R_PPC64_GOT_DTPREL16_HA:
9350		case R_PPC64_GOT16_HA:
9351		case R_PPC64_TOC16_HA:
9352		  insn_check = check_ha;
9353		  break;
9354
9355		case R_PPC64_PLT16_LO:
9356		case R_PPC64_PLT16_LO_DS:
9357		case R_PPC64_GOT_TLSLD16_LO:
9358		case R_PPC64_GOT_TLSGD16_LO:
9359		case R_PPC64_GOT_TPREL16_LO_DS:
9360		case R_PPC64_GOT_DTPREL16_LO_DS:
9361		case R_PPC64_GOT16_LO:
9362		case R_PPC64_GOT16_LO_DS:
9363		case R_PPC64_TOC16_LO:
9364		case R_PPC64_TOC16_LO_DS:
9365		  insn_check = check_lo;
9366		  break;
9367		}
9368
9369	      if (insn_check != no_check)
9370		{
9371		  bfd_vma off = rel->r_offset & ~3;
9372
9373		  if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
9374		    goto got_error_ret;
9375
9376		  insn = bfd_get_32 (ibfd, buf);
9377		  if (insn_check == check_lo
9378		      ? !ok_lo_toc_insn (insn, r_type)
9379		      : ((insn & ((0x3fu << 26) | 0x1f << 16))
9380			 != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9381		    {
9382		      char str[12];
9383
9384		      ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
9385		      sprintf (str, "%#08x", insn);
9386		      info->callbacks->einfo
9387			/* xgettext:c-format */
9388			(_("%H: got/toc optimization is not supported for"
9389			   " %s instruction\n"),
9390			 ibfd, sec, rel->r_offset & ~3, str);
9391		      continue;
9392		    }
9393		}
9394
9395	      switch (r_type)
9396		{
9397		/* Note that we don't delete GOT entries for
9398		   R_PPC64_GOT16_DS since we'd need a lot more
9399		   analysis.  For starters, the preliminary layout is
9400		   before the GOT, PLT, dynamic sections and stubs are
9401		   laid out.  Then we'd need to allow for changes in
9402		   distance between sections caused by alignment.  */
9403		default:
9404		  continue;
9405
9406		case R_PPC64_GOT16_HA:
9407		case R_PPC64_GOT16_LO_DS:
9408		case R_PPC64_GOT_PCREL34:
9409		  break;
9410		}
9411
9412	      r_symndx = ELF64_R_SYM (rel->r_info);
9413	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9414			      r_symndx, ibfd))
9415		goto got_error_ret;
9416
9417	      if (sym_sec == NULL
9418		  || sym_sec->output_section == NULL
9419		  || discarded_section (sym_sec))
9420		continue;
9421
9422	      if ((h ? h->type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC)
9423		continue;
9424
9425	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
9426		continue;
9427
9428	      if (h != NULL)
9429		val = h->root.u.def.value;
9430	      else
9431		val = sym->st_value;
9432	      val += rel->r_addend;
9433	      val += sym_sec->output_section->vma + sym_sec->output_offset;
9434
9435/* Fudge factor to allow for the fact that the preliminary layout
9436   isn't exact.  Reduce limits by this factor.  */
9437#define LIMIT_ADJUST(LIMIT) ((LIMIT) - (LIMIT) / 16)
9438
9439	      switch (r_type)
9440		{
9441		default:
9442		  continue;
9443
9444		case R_PPC64_GOT16_HA:
9445		  if (val - got + LIMIT_ADJUST (0x80008000ULL)
9446		      >= LIMIT_ADJUST (0x100000000ULL))
9447		    continue;
9448
9449		  if (!bfd_get_section_contents (ibfd, sec, buf,
9450						 rel->r_offset & ~3, 4))
9451		    goto got_error_ret;
9452		  insn = bfd_get_32 (ibfd, buf);
9453		  if (((insn & ((0x3fu << 26) | 0x1f << 16))
9454		       != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9455		    continue;
9456		  break;
9457
9458		case R_PPC64_GOT16_LO_DS:
9459		  if (val - got + LIMIT_ADJUST (0x80008000ULL)
9460		      >= LIMIT_ADJUST (0x100000000ULL))
9461		    continue;
9462		  if (!bfd_get_section_contents (ibfd, sec, buf,
9463						 rel->r_offset & ~3, 4))
9464		    goto got_error_ret;
9465		  insn = bfd_get_32 (ibfd, buf);
9466		  if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */)
9467		    continue;
9468		  break;
9469
9470		case R_PPC64_GOT_PCREL34:
9471		  pc = rel->r_offset;
9472		  pc += sec->output_section->vma + sec->output_offset;
9473		  if (val - pc + LIMIT_ADJUST (1ULL << 33)
9474		      >= LIMIT_ADJUST (1ULL << 34))
9475		    continue;
9476		  if (!bfd_get_section_contents (ibfd, sec, buf,
9477						 rel->r_offset & ~3, 8))
9478		    goto got_error_ret;
9479		  insn = bfd_get_32 (ibfd, buf);
9480		  if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
9481		    continue;
9482		  insn = bfd_get_32 (ibfd, buf + 4);
9483		  if ((insn & (0x3fu << 26)) != 57u << 26)
9484		    continue;
9485		  break;
9486		}
9487#undef LIMIT_ADJUST
9488
9489	      if (h != NULL)
9490		ent = h->got.glist;
9491	      else
9492		{
9493		  struct got_entry **local_got_ents = elf_local_got_ents (ibfd);
9494		  ent = local_got_ents[r_symndx];
9495		}
9496	      for (; ent != NULL; ent = ent->next)
9497		if (ent->addend == rel->r_addend
9498		    && ent->owner == ibfd
9499		    && ent->tls_type == 0)
9500		  break;
9501	      BFD_ASSERT (ent && ent->got.refcount > 0);
9502	      ent->got.refcount -= 1;
9503	    }
9504
9505	  if (elf_section_data (sec)->relocs != relstart)
9506	    free (relstart);
9507	}
9508
9509      if (local_syms != NULL
9510	  && symtab_hdr->contents != (unsigned char *) local_syms)
9511	{
9512	  if (!info->keep_memory)
9513	    free (local_syms);
9514	  else
9515	    symtab_hdr->contents = (unsigned char *) local_syms;
9516	}
9517    }
9518
9519  return TRUE;
9520}
9521
9522/* Return true iff input section I references the TOC using
9523   instructions limited to +/-32k offsets.  */
9524
9525bfd_boolean
9526ppc64_elf_has_small_toc_reloc (asection *i)
9527{
9528  return (is_ppc64_elf (i->owner)
9529	  && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9530}
9531
9532/* Allocate space for one GOT entry.  */
9533
9534static void
9535allocate_got (struct elf_link_hash_entry *h,
9536	      struct bfd_link_info *info,
9537	      struct got_entry *gent)
9538{
9539  struct ppc_link_hash_table *htab = ppc_hash_table (info);
9540  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
9541  int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9542		 ? 16 : 8);
9543  int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9544		  ? 2 : 1) * sizeof (Elf64_External_Rela);
9545  asection *got = ppc64_elf_tdata (gent->owner)->got;
9546
9547  gent->got.offset = got->size;
9548  got->size += entsize;
9549
9550  if (h->type == STT_GNU_IFUNC)
9551    {
9552      htab->elf.irelplt->size += rentsize;
9553      htab->got_reli_size += rentsize;
9554    }
9555  else if (((bfd_link_pic (info)
9556	     && !(gent->tls_type != 0
9557		  && bfd_link_executable (info)
9558		  && SYMBOL_REFERENCES_LOCAL (info, h)))
9559	    || (htab->elf.dynamic_sections_created
9560		&& h->dynindx != -1
9561		&& !SYMBOL_REFERENCES_LOCAL (info, h)))
9562	   && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9563    {
9564      asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9565      relgot->size += rentsize;
9566    }
9567}
9568
9569/* This function merges got entries in the same toc group.  */
9570
9571static void
9572merge_got_entries (struct got_entry **pent)
9573{
9574  struct got_entry *ent, *ent2;
9575
9576  for (ent = *pent; ent != NULL; ent = ent->next)
9577    if (!ent->is_indirect)
9578      for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9579	if (!ent2->is_indirect
9580	    && ent2->addend == ent->addend
9581	    && ent2->tls_type == ent->tls_type
9582	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
9583	  {
9584	    ent2->is_indirect = TRUE;
9585	    ent2->got.ent = ent;
9586	  }
9587}
9588
9589/* If H is undefined, make it dynamic if that makes sense.  */
9590
9591static bfd_boolean
9592ensure_undef_dynamic (struct bfd_link_info *info,
9593		      struct elf_link_hash_entry *h)
9594{
9595  struct elf_link_hash_table *htab = elf_hash_table (info);
9596
9597  if (htab->dynamic_sections_created
9598      && ((info->dynamic_undefined_weak != 0
9599	   && h->root.type == bfd_link_hash_undefweak)
9600	  || h->root.type == bfd_link_hash_undefined)
9601      && h->dynindx == -1
9602      && !h->forced_local
9603      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9604    return bfd_elf_link_record_dynamic_symbol (info, h);
9605  return TRUE;
9606}
9607
9608/* Allocate space in .plt, .got and associated reloc sections for
9609   dynamic relocs.  */
9610
9611static bfd_boolean
9612allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9613{
9614  struct bfd_link_info *info;
9615  struct ppc_link_hash_table *htab;
9616  asection *s;
9617  struct ppc_link_hash_entry *eh;
9618  struct got_entry **pgent, *gent;
9619
9620  if (h->root.type == bfd_link_hash_indirect)
9621    return TRUE;
9622
9623  info = (struct bfd_link_info *) inf;
9624  htab = ppc_hash_table (info);
9625  if (htab == NULL)
9626    return FALSE;
9627
9628  eh = ppc_elf_hash_entry (h);
9629  /* Run through the TLS GD got entries first if we're changing them
9630     to TPREL.  */
9631  if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE))
9632    for (gent = h->got.glist; gent != NULL; gent = gent->next)
9633      if (gent->got.refcount > 0
9634	  && (gent->tls_type & TLS_GD) != 0)
9635	{
9636	  /* This was a GD entry that has been converted to TPREL.  If
9637	     there happens to be a TPREL entry we can use that one.  */
9638	  struct got_entry *ent;
9639	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
9640	    if (ent->got.refcount > 0
9641		&& (ent->tls_type & TLS_TPREL) != 0
9642		&& ent->addend == gent->addend
9643		&& ent->owner == gent->owner)
9644	      {
9645		gent->got.refcount = 0;
9646		break;
9647	      }
9648
9649	  /* If not, then we'll be using our own TPREL entry.  */
9650	  if (gent->got.refcount != 0)
9651	    gent->tls_type = TLS_TLS | TLS_TPREL;
9652	}
9653
9654  /* Remove any list entry that won't generate a word in the GOT before
9655     we call merge_got_entries.  Otherwise we risk merging to empty
9656     entries.  */
9657  pgent = &h->got.glist;
9658  while ((gent = *pgent) != NULL)
9659    if (gent->got.refcount > 0)
9660      {
9661	if ((gent->tls_type & TLS_LD) != 0
9662	    && SYMBOL_REFERENCES_LOCAL (info, h))
9663	  {
9664	    ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9665	    *pgent = gent->next;
9666	  }
9667	else
9668	  pgent = &gent->next;
9669      }
9670    else
9671      *pgent = gent->next;
9672
9673  if (!htab->do_multi_toc)
9674    merge_got_entries (&h->got.glist);
9675
9676  for (gent = h->got.glist; gent != NULL; gent = gent->next)
9677    if (!gent->is_indirect)
9678      {
9679	/* Ensure we catch all the cases where this symbol should
9680	   be made dynamic.  */
9681	if (!ensure_undef_dynamic (info, h))
9682	  return FALSE;
9683
9684	if (!is_ppc64_elf (gent->owner))
9685	  abort ();
9686
9687	allocate_got (h, info, gent);
9688      }
9689
9690  /* If no dynamic sections we can't have dynamic relocs, except for
9691     IFUNCs which are handled even in static executables.  */
9692  if (!htab->elf.dynamic_sections_created
9693      && h->type != STT_GNU_IFUNC)
9694    h->dyn_relocs = NULL;
9695
9696  /* Discard relocs on undefined symbols that must be local.  */
9697  else if (h->root.type == bfd_link_hash_undefined
9698	   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9699    h->dyn_relocs = NULL;
9700
9701  /* Also discard relocs on undefined weak syms with non-default
9702     visibility, or when dynamic_undefined_weak says so.  */
9703  else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9704    h->dyn_relocs = NULL;
9705
9706  if (h->dyn_relocs != NULL)
9707    {
9708      struct elf_dyn_relocs *p, **pp;
9709
9710      /* In the shared -Bsymbolic case, discard space allocated for
9711	 dynamic pc-relative relocs against symbols which turn out to
9712	 be defined in regular objects.  For the normal shared case,
9713	 discard space for relocs that have become local due to symbol
9714	 visibility changes.  */
9715      if (bfd_link_pic (info))
9716	{
9717	  /* Relocs that use pc_count are those that appear on a call
9718	     insn, or certain REL relocs (see must_be_dyn_reloc) that
9719	     can be generated via assembly.  We want calls to
9720	     protected symbols to resolve directly to the function
9721	     rather than going via the plt.  If people want function
9722	     pointer comparisons to work as expected then they should
9723	     avoid writing weird assembly.  */
9724	  if (SYMBOL_CALLS_LOCAL (info, h))
9725	    {
9726	      for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
9727		{
9728		  p->count -= p->pc_count;
9729		  p->pc_count = 0;
9730		  if (p->count == 0)
9731		    *pp = p->next;
9732		  else
9733		    pp = &p->next;
9734		}
9735	    }
9736
9737	  if (h->dyn_relocs != NULL)
9738	    {
9739	      /* Ensure we catch all the cases where this symbol
9740		 should be made dynamic.  */
9741	      if (!ensure_undef_dynamic (info, h))
9742		return FALSE;
9743	    }
9744	}
9745
9746      /* For a fixed position executable, discard space for
9747	 relocs against symbols which are not dynamic.  */
9748      else if (h->type != STT_GNU_IFUNC)
9749	{
9750	  if (h->dynamic_adjusted
9751	      && !h->def_regular
9752	      && !ELF_COMMON_DEF_P (h))
9753	    {
9754	      /* Ensure we catch all the cases where this symbol
9755		 should be made dynamic.  */
9756	      if (!ensure_undef_dynamic (info, h))
9757		return FALSE;
9758
9759	      /* But if that didn't work out, discard dynamic relocs.  */
9760	      if (h->dynindx == -1)
9761		h->dyn_relocs = NULL;
9762	    }
9763	  else
9764	    h->dyn_relocs = NULL;
9765	}
9766
9767      /* Finally, allocate space.  */
9768      for (p = h->dyn_relocs; p != NULL; p = p->next)
9769	{
9770	  asection *sreloc = elf_section_data (p->sec)->sreloc;
9771	  if (eh->elf.type == STT_GNU_IFUNC)
9772	    sreloc = htab->elf.irelplt;
9773	  sreloc->size += p->count * sizeof (Elf64_External_Rela);
9774	}
9775    }
9776
9777  /* We might need a PLT entry when the symbol
9778     a) is dynamic, or
9779     b) is an ifunc, or
9780     c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
9781     d) has plt16 relocs and we are linking statically.  */
9782  if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
9783      || h->type == STT_GNU_IFUNC
9784      || (h->needs_plt && h->dynamic_adjusted)
9785      || (h->needs_plt
9786	  && h->def_regular
9787	  && !htab->elf.dynamic_sections_created
9788	  && !htab->can_convert_all_inline_plt
9789	  && (ppc_elf_hash_entry (h)->tls_mask
9790	      & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
9791    {
9792      struct plt_entry *pent;
9793      bfd_boolean doneone = FALSE;
9794      for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9795	if (pent->plt.refcount > 0)
9796	  {
9797	    if (!htab->elf.dynamic_sections_created
9798		|| h->dynindx == -1)
9799	      {
9800		if (h->type == STT_GNU_IFUNC)
9801		  {
9802		    s = htab->elf.iplt;
9803		    pent->plt.offset = s->size;
9804		    s->size += PLT_ENTRY_SIZE (htab);
9805		    s = htab->elf.irelplt;
9806		  }
9807		else
9808		  {
9809		    s = htab->pltlocal;
9810		    pent->plt.offset = s->size;
9811		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9812		    s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
9813		  }
9814	      }
9815	    else
9816	      {
9817		/* If this is the first .plt entry, make room for the special
9818		   first entry.  */
9819		s = htab->elf.splt;
9820		if (s->size == 0)
9821		  s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9822
9823		pent->plt.offset = s->size;
9824
9825		/* Make room for this entry.  */
9826		s->size += PLT_ENTRY_SIZE (htab);
9827
9828		/* Make room for the .glink code.  */
9829		s = htab->glink;
9830		if (s->size == 0)
9831		  s->size += GLINK_PLTRESOLVE_SIZE (htab);
9832		if (htab->opd_abi)
9833		  {
9834		    /* We need bigger stubs past index 32767.  */
9835		    if (s->size >= GLINK_PLTRESOLVE_SIZE (htab) + 32768*2*4)
9836		      s->size += 4;
9837		    s->size += 2*4;
9838		  }
9839		else
9840		  s->size += 4;
9841
9842		/* We also need to make an entry in the .rela.plt section.  */
9843		s = htab->elf.srelplt;
9844	      }
9845	    if (s != NULL)
9846	      s->size += sizeof (Elf64_External_Rela);
9847	    doneone = TRUE;
9848	  }
9849	else
9850	  pent->plt.offset = (bfd_vma) -1;
9851      if (!doneone)
9852	{
9853	  h->plt.plist = NULL;
9854	  h->needs_plt = 0;
9855	}
9856    }
9857  else
9858    {
9859      h->plt.plist = NULL;
9860      h->needs_plt = 0;
9861    }
9862
9863  return TRUE;
9864}
9865
9866#define PPC_LO(v) ((v) & 0xffff)
9867#define PPC_HI(v) (((v) >> 16) & 0xffff)
9868#define PPC_HA(v) PPC_HI ((v) + 0x8000)
9869#define D34(v) \
9870  ((((v) & 0x3ffff0000ULL) << 16) | (v & 0xffff))
9871#define HA34(v) ((v + (1ULL << 33)) >> 34)
9872
9873/* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9874   to set up space for global entry stubs.  These are put in glink,
9875   after the branch table.  */
9876
9877static bfd_boolean
9878size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9879{
9880  struct bfd_link_info *info;
9881  struct ppc_link_hash_table *htab;
9882  struct plt_entry *pent;
9883  asection *s, *plt;
9884
9885  if (h->root.type == bfd_link_hash_indirect)
9886    return TRUE;
9887
9888  if (!h->pointer_equality_needed)
9889    return TRUE;
9890
9891  if (h->def_regular)
9892    return TRUE;
9893
9894  info = inf;
9895  htab = ppc_hash_table (info);
9896  if (htab == NULL)
9897    return FALSE;
9898
9899  s = htab->global_entry;
9900  plt = htab->elf.splt;
9901  for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9902    if (pent->plt.offset != (bfd_vma) -1
9903	&& pent->addend == 0)
9904      {
9905	/* For ELFv2, if this symbol is not defined in a regular file
9906	   and we are not generating a shared library or pie, then we
9907	   need to define the symbol in the executable on a call stub.
9908	   This is to avoid text relocations.  */
9909	bfd_vma off, stub_align, stub_off, stub_size;
9910	unsigned int align_power;
9911
9912	stub_size = 16;
9913	stub_off = s->size;
9914	if (htab->params->plt_stub_align >= 0)
9915	  align_power = htab->params->plt_stub_align;
9916	else
9917	  align_power = -htab->params->plt_stub_align;
9918	/* Setting section alignment is delayed until we know it is
9919	   non-empty.  Otherwise the .text output section will be
9920	   aligned at least to plt_stub_align even when no global
9921	   entry stubs are needed.  */
9922	if (s->alignment_power < align_power)
9923	  s->alignment_power = align_power;
9924	stub_align = (bfd_vma) 1 << align_power;
9925	if (htab->params->plt_stub_align >= 0
9926	    || ((((stub_off + stub_size - 1) & -stub_align)
9927		 - (stub_off & -stub_align))
9928		> ((stub_size - 1) & -stub_align)))
9929	  stub_off = (stub_off + stub_align - 1) & -stub_align;
9930	off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
9931	off -= stub_off + s->output_offset + s->output_section->vma;
9932	/* Note that for --plt-stub-align negative we have a possible
9933	   dependency between stub offset and size.  Break that
9934	   dependency by assuming the max stub size when calculating
9935	   the stub offset.  */
9936	if (PPC_HA (off) == 0)
9937	  stub_size -= 4;
9938	h->root.type = bfd_link_hash_defined;
9939	h->root.u.def.section = s;
9940	h->root.u.def.value = stub_off;
9941	s->size = stub_off + stub_size;
9942	break;
9943      }
9944  return TRUE;
9945}
9946
9947/* Set the sizes of the dynamic sections.  */
9948
9949static bfd_boolean
9950ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9951				 struct bfd_link_info *info)
9952{
9953  struct ppc_link_hash_table *htab;
9954  bfd *dynobj;
9955  asection *s;
9956  bfd_boolean relocs;
9957  bfd *ibfd;
9958  struct got_entry *first_tlsld;
9959
9960  htab = ppc_hash_table (info);
9961  if (htab == NULL)
9962    return FALSE;
9963
9964  dynobj = htab->elf.dynobj;
9965  if (dynobj == NULL)
9966    abort ();
9967
9968  if (htab->elf.dynamic_sections_created)
9969    {
9970      /* Set the contents of the .interp section to the interpreter.  */
9971      if (bfd_link_executable (info) && !info->nointerp)
9972	{
9973	  s = bfd_get_linker_section (dynobj, ".interp");
9974	  if (s == NULL)
9975	    abort ();
9976	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9977	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9978	}
9979    }
9980
9981  /* Set up .got offsets for local syms, and space for local dynamic
9982     relocs.  */
9983  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9984    {
9985      struct got_entry **lgot_ents;
9986      struct got_entry **end_lgot_ents;
9987      struct plt_entry **local_plt;
9988      struct plt_entry **end_local_plt;
9989      unsigned char *lgot_masks;
9990      bfd_size_type locsymcount;
9991      Elf_Internal_Shdr *symtab_hdr;
9992
9993      if (!is_ppc64_elf (ibfd))
9994	continue;
9995
9996      for (s = ibfd->sections; s != NULL; s = s->next)
9997	{
9998	  struct ppc_dyn_relocs *p;
9999
10000	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
10001	    {
10002	      if (!bfd_is_abs_section (p->sec)
10003		  && bfd_is_abs_section (p->sec->output_section))
10004		{
10005		  /* Input section has been discarded, either because
10006		     it is a copy of a linkonce section or due to
10007		     linker script /DISCARD/, so we'll be discarding
10008		     the relocs too.  */
10009		}
10010	      else if (p->count != 0)
10011		{
10012		  asection *srel = elf_section_data (p->sec)->sreloc;
10013		  if (p->ifunc)
10014		    srel = htab->elf.irelplt;
10015		  srel->size += p->count * sizeof (Elf64_External_Rela);
10016		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
10017		    info->flags |= DF_TEXTREL;
10018		}
10019	    }
10020	}
10021
10022      lgot_ents = elf_local_got_ents (ibfd);
10023      if (!lgot_ents)
10024	continue;
10025
10026      symtab_hdr = &elf_symtab_hdr (ibfd);
10027      locsymcount = symtab_hdr->sh_info;
10028      end_lgot_ents = lgot_ents + locsymcount;
10029      local_plt = (struct plt_entry **) end_lgot_ents;
10030      end_local_plt = local_plt + locsymcount;
10031      lgot_masks = (unsigned char *) end_local_plt;
10032      s = ppc64_elf_tdata (ibfd)->got;
10033      for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
10034	{
10035	  struct got_entry **pent, *ent;
10036
10037	  pent = lgot_ents;
10038	  while ((ent = *pent) != NULL)
10039	    if (ent->got.refcount > 0)
10040	      {
10041		if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
10042		  {
10043		    ppc64_tlsld_got (ibfd)->got.refcount += 1;
10044		    *pent = ent->next;
10045		  }
10046		else
10047		  {
10048		    unsigned int ent_size = 8;
10049		    unsigned int rel_size = sizeof (Elf64_External_Rela);
10050
10051		    ent->got.offset = s->size;
10052		    if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
10053		      {
10054			ent_size *= 2;
10055			rel_size *= 2;
10056		      }
10057		    s->size += ent_size;
10058		    if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
10059		      {
10060			htab->elf.irelplt->size += rel_size;
10061			htab->got_reli_size += rel_size;
10062		      }
10063		    else if (bfd_link_pic (info)
10064			     && !(ent->tls_type != 0
10065				  && bfd_link_executable (info)))
10066		      {
10067			asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10068			srel->size += rel_size;
10069		      }
10070		    pent = &ent->next;
10071		  }
10072	      }
10073	    else
10074	      *pent = ent->next;
10075	}
10076
10077      /* Allocate space for plt calls to local syms.  */
10078      lgot_masks = (unsigned char *) end_local_plt;
10079      for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
10080	{
10081	  struct plt_entry *ent;
10082
10083	  for (ent = *local_plt; ent != NULL; ent = ent->next)
10084	    if (ent->plt.refcount > 0)
10085	      {
10086		if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
10087		  {
10088		    s = htab->elf.iplt;
10089		    ent->plt.offset = s->size;
10090		    s->size += PLT_ENTRY_SIZE (htab);
10091		    htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
10092		  }
10093		else if (htab->can_convert_all_inline_plt
10094			 || (*lgot_masks & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)
10095		  ent->plt.offset = (bfd_vma) -1;
10096		else
10097		  {
10098		    s = htab->pltlocal;
10099		    ent->plt.offset = s->size;
10100		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
10101		    if (bfd_link_pic (info))
10102		      htab->relpltlocal->size += sizeof (Elf64_External_Rela);
10103		  }
10104	      }
10105	    else
10106	      ent->plt.offset = (bfd_vma) -1;
10107	}
10108    }
10109
10110  /* Allocate global sym .plt and .got entries, and space for global
10111     sym dynamic relocs.  */
10112  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
10113
10114  if (!htab->opd_abi && !bfd_link_pic (info))
10115    elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
10116
10117  first_tlsld = NULL;
10118  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10119    {
10120      struct got_entry *ent;
10121
10122      if (!is_ppc64_elf (ibfd))
10123	continue;
10124
10125      ent = ppc64_tlsld_got (ibfd);
10126      if (ent->got.refcount > 0)
10127	{
10128	  if (!htab->do_multi_toc && first_tlsld != NULL)
10129	    {
10130	      ent->is_indirect = TRUE;
10131	      ent->got.ent = first_tlsld;
10132	    }
10133	  else
10134	    {
10135	      if (first_tlsld == NULL)
10136		first_tlsld = ent;
10137	      s = ppc64_elf_tdata (ibfd)->got;
10138	      ent->got.offset = s->size;
10139	      ent->owner = ibfd;
10140	      s->size += 16;
10141	      if (bfd_link_dll (info))
10142		{
10143		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10144		  srel->size += sizeof (Elf64_External_Rela);
10145		}
10146	    }
10147	}
10148      else
10149	ent->got.offset = (bfd_vma) -1;
10150    }
10151
10152  /* We now have determined the sizes of the various dynamic sections.
10153     Allocate memory for them.  */
10154  relocs = FALSE;
10155  for (s = dynobj->sections; s != NULL; s = s->next)
10156    {
10157      if ((s->flags & SEC_LINKER_CREATED) == 0)
10158	continue;
10159
10160      if (s == htab->brlt || s == htab->relbrlt)
10161	/* These haven't been allocated yet;  don't strip.  */
10162	continue;
10163      else if (s == htab->elf.sgot
10164	       || s == htab->elf.splt
10165	       || s == htab->elf.iplt
10166	       || s == htab->pltlocal
10167	       || s == htab->glink
10168	       || s == htab->global_entry
10169	       || s == htab->elf.sdynbss
10170	       || s == htab->elf.sdynrelro)
10171	{
10172	  /* Strip this section if we don't need it; see the
10173	     comment below.  */
10174	}
10175      else if (s == htab->glink_eh_frame)
10176	{
10177	  if (!bfd_is_abs_section (s->output_section))
10178	    /* Not sized yet.  */
10179	    continue;
10180	}
10181      else if (CONST_STRNEQ (s->name, ".rela"))
10182	{
10183	  if (s->size != 0)
10184	    {
10185	      if (s != htab->elf.srelplt)
10186		relocs = TRUE;
10187
10188	      /* We use the reloc_count field as a counter if we need
10189		 to copy relocs into the output file.  */
10190	      s->reloc_count = 0;
10191	    }
10192	}
10193      else
10194	{
10195	  /* It's not one of our sections, so don't allocate space.  */
10196	  continue;
10197	}
10198
10199      if (s->size == 0)
10200	{
10201	  /* If we don't need this section, strip it from the
10202	     output file.  This is mostly to handle .rela.bss and
10203	     .rela.plt.  We must create both sections in
10204	     create_dynamic_sections, because they must be created
10205	     before the linker maps input sections to output
10206	     sections.  The linker does that before
10207	     adjust_dynamic_symbol is called, and it is that
10208	     function which decides whether anything needs to go
10209	     into these sections.  */
10210	  s->flags |= SEC_EXCLUDE;
10211	  continue;
10212	}
10213
10214      if (bfd_is_abs_section (s->output_section))
10215	_bfd_error_handler (_("warning: discarding dynamic section %s"),
10216			    s->name);
10217
10218      if ((s->flags & SEC_HAS_CONTENTS) == 0)
10219	continue;
10220
10221      /* Allocate memory for the section contents.  We use bfd_zalloc
10222	 here in case unused entries are not reclaimed before the
10223	 section's contents are written out.  This should not happen,
10224	 but this way if it does we get a R_PPC64_NONE reloc in .rela
10225	 sections instead of garbage.
10226	 We also rely on the section contents being zero when writing
10227	 the GOT and .dynrelro.  */
10228      s->contents = bfd_zalloc (dynobj, s->size);
10229      if (s->contents == NULL)
10230	return FALSE;
10231    }
10232
10233  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10234    {
10235      if (!is_ppc64_elf (ibfd))
10236	continue;
10237
10238      s = ppc64_elf_tdata (ibfd)->got;
10239      if (s != NULL && s != htab->elf.sgot)
10240	{
10241	  if (s->size == 0)
10242	    s->flags |= SEC_EXCLUDE;
10243	  else
10244	    {
10245	      s->contents = bfd_zalloc (ibfd, s->size);
10246	      if (s->contents == NULL)
10247		return FALSE;
10248	    }
10249	}
10250      s = ppc64_elf_tdata (ibfd)->relgot;
10251      if (s != NULL)
10252	{
10253	  if (s->size == 0)
10254	    s->flags |= SEC_EXCLUDE;
10255	  else
10256	    {
10257	      s->contents = bfd_zalloc (ibfd, s->size);
10258	      if (s->contents == NULL)
10259		return FALSE;
10260	      relocs = TRUE;
10261	      s->reloc_count = 0;
10262	    }
10263	}
10264    }
10265
10266  if (htab->elf.dynamic_sections_created)
10267    {
10268      bfd_boolean tls_opt;
10269
10270      /* Add some entries to the .dynamic section.  We fill in the
10271	 values later, in ppc64_elf_finish_dynamic_sections, but we
10272	 must add the entries now so that we get the correct size for
10273	 the .dynamic section.  The DT_DEBUG entry is filled in by the
10274	 dynamic linker and used by the debugger.  */
10275#define add_dynamic_entry(TAG, VAL) \
10276  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
10277
10278      if (bfd_link_executable (info))
10279	{
10280	  if (!add_dynamic_entry (DT_DEBUG, 0))
10281	    return FALSE;
10282	}
10283
10284      if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
10285	{
10286	  if (!add_dynamic_entry (DT_PLTGOT, 0)
10287	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
10288	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
10289	      || !add_dynamic_entry (DT_JMPREL, 0)
10290	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
10291	    return FALSE;
10292	}
10293
10294      if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
10295	{
10296	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
10297	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
10298	    return FALSE;
10299	}
10300
10301      tls_opt = (htab->params->tls_get_addr_opt
10302		 && ((htab->tls_get_addr_fd != NULL
10303		      && htab->tls_get_addr_fd->elf.plt.plist != NULL)
10304		     || (htab->tga_desc_fd != NULL
10305			 && htab->tga_desc_fd->elf.plt.plist != NULL)));
10306      if (tls_opt || !htab->opd_abi)
10307	{
10308	  if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
10309	    return FALSE;
10310	}
10311
10312      if (relocs)
10313	{
10314	  if (!add_dynamic_entry (DT_RELA, 0)
10315	      || !add_dynamic_entry (DT_RELASZ, 0)
10316	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
10317	    return FALSE;
10318
10319	  /* If any dynamic relocs apply to a read-only section,
10320	     then we need a DT_TEXTREL entry.  */
10321	  if ((info->flags & DF_TEXTREL) == 0)
10322	    elf_link_hash_traverse (&htab->elf,
10323				    _bfd_elf_maybe_set_textrel, info);
10324
10325	  if ((info->flags & DF_TEXTREL) != 0)
10326	    {
10327	      if (!add_dynamic_entry (DT_TEXTREL, 0))
10328		return FALSE;
10329	    }
10330	}
10331    }
10332#undef add_dynamic_entry
10333
10334  return TRUE;
10335}
10336
10337/* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
10338
10339static bfd_boolean
10340ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
10341{
10342  if (h->plt.plist != NULL
10343      && !h->def_regular
10344      && !h->pointer_equality_needed)
10345    return FALSE;
10346
10347  return _bfd_elf_hash_symbol (h);
10348}
10349
10350/* Determine the type of stub needed, if any, for a call.  */
10351
10352static inline enum ppc_stub_type
10353ppc_type_of_stub (asection *input_sec,
10354		  const Elf_Internal_Rela *rel,
10355		  struct ppc_link_hash_entry **hash,
10356		  struct plt_entry **plt_ent,
10357		  bfd_vma destination,
10358		  unsigned long local_off)
10359{
10360  struct ppc_link_hash_entry *h = *hash;
10361  bfd_vma location;
10362  bfd_vma branch_offset;
10363  bfd_vma max_branch_offset;
10364  enum elf_ppc64_reloc_type r_type;
10365
10366  if (h != NULL)
10367    {
10368      struct plt_entry *ent;
10369      struct ppc_link_hash_entry *fdh = h;
10370      if (h->oh != NULL
10371	  && h->oh->is_func_descriptor)
10372	{
10373	  fdh = ppc_follow_link (h->oh);
10374	  *hash = fdh;
10375	}
10376
10377      for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10378	if (ent->addend == rel->r_addend
10379	    && ent->plt.offset != (bfd_vma) -1)
10380	  {
10381	    *plt_ent = ent;
10382	    return ppc_stub_plt_call;
10383	  }
10384
10385      /* Here, we know we don't have a plt entry.  If we don't have a
10386	 either a defined function descriptor or a defined entry symbol
10387	 in a regular object file, then it is pointless trying to make
10388	 any other type of stub.  */
10389      if (!is_static_defined (&fdh->elf)
10390	  && !is_static_defined (&h->elf))
10391	return ppc_stub_none;
10392    }
10393  else if (elf_local_got_ents (input_sec->owner) != NULL)
10394    {
10395      Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10396      struct plt_entry **local_plt = (struct plt_entry **)
10397	elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10398      unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10399
10400      if (local_plt[r_symndx] != NULL)
10401	{
10402	  struct plt_entry *ent;
10403
10404	  for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10405	    if (ent->addend == rel->r_addend
10406		&& ent->plt.offset != (bfd_vma) -1)
10407	      {
10408		*plt_ent = ent;
10409		return ppc_stub_plt_call;
10410	      }
10411	}
10412    }
10413
10414  /* Determine where the call point is.  */
10415  location = (input_sec->output_offset
10416	      + input_sec->output_section->vma
10417	      + rel->r_offset);
10418
10419  branch_offset = destination - location;
10420  r_type = ELF64_R_TYPE (rel->r_info);
10421
10422  /* Determine if a long branch stub is needed.  */
10423  max_branch_offset = 1 << 25;
10424  if (r_type == R_PPC64_REL14
10425      || r_type == R_PPC64_REL14_BRTAKEN
10426      || r_type == R_PPC64_REL14_BRNTAKEN)
10427    max_branch_offset = 1 << 15;
10428
10429  if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10430    /* We need a stub.  Figure out whether a long_branch or plt_branch
10431       is needed later.  */
10432    return ppc_stub_long_branch;
10433
10434  return ppc_stub_none;
10435}
10436
10437/* Gets the address of a label (1:) in r11 and builds an offset in r12,
10438   then adds it to r11 (LOAD false) or loads r12 from r11+r12 (LOAD true).
10439   .	mflr	%r12
10440   .	bcl	20,31,1f
10441   .1:	mflr	%r11
10442   .	mtlr	%r12
10443   .	lis	%r12,xxx-1b@highest
10444   .	ori	%r12,%r12,xxx-1b@higher
10445   .	sldi	%r12,%r12,32
10446   .	oris	%r12,%r12,xxx-1b@high
10447   .	ori	%r12,%r12,xxx-1b@l
10448   .	add/ldx	%r12,%r11,%r12  */
10449
10450static bfd_byte *
10451build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
10452{
10453  bfd_put_32 (abfd, MFLR_R12, p);
10454  p += 4;
10455  bfd_put_32 (abfd, BCL_20_31, p);
10456  p += 4;
10457  bfd_put_32 (abfd, MFLR_R11, p);
10458  p += 4;
10459  bfd_put_32 (abfd, MTLR_R12, p);
10460  p += 4;
10461  if (off + 0x8000 < 0x10000)
10462    {
10463      if (load)
10464	bfd_put_32 (abfd, LD_R12_0R11 + PPC_LO (off), p);
10465      else
10466	bfd_put_32 (abfd, ADDI_R12_R11 + PPC_LO (off), p);
10467      p += 4;
10468    }
10469  else if (off + 0x80008000ULL < 0x100000000ULL)
10470    {
10471      bfd_put_32 (abfd, ADDIS_R12_R11 + PPC_HA (off), p);
10472      p += 4;
10473      if (load)
10474	bfd_put_32 (abfd, LD_R12_0R12 + PPC_LO (off), p);
10475      else
10476	bfd_put_32 (abfd, ADDI_R12_R12 + PPC_LO (off), p);
10477      p += 4;
10478    }
10479  else
10480    {
10481      if (off + 0x800000000000ULL < 0x1000000000000ULL)
10482	{
10483	  bfd_put_32 (abfd, LI_R12_0 + ((off >> 32) & 0xffff), p);
10484	  p += 4;
10485	}
10486      else
10487	{
10488	  bfd_put_32 (abfd, LIS_R12 + ((off >> 48) & 0xffff), p);
10489	  p += 4;
10490	  if (((off >> 32) & 0xffff) != 0)
10491	    {
10492	      bfd_put_32 (abfd, ORI_R12_R12_0 + ((off >> 32) & 0xffff), p);
10493	      p += 4;
10494	    }
10495	}
10496      if (((off >> 32) & 0xffffffffULL) != 0)
10497	{
10498	  bfd_put_32 (abfd, SLDI_R12_R12_32, p);
10499	  p += 4;
10500	}
10501      if (PPC_HI (off) != 0)
10502	{
10503	  bfd_put_32 (abfd, ORIS_R12_R12_0 + PPC_HI (off), p);
10504	  p += 4;
10505	}
10506      if (PPC_LO (off) != 0)
10507	{
10508	  bfd_put_32 (abfd, ORI_R12_R12_0 + PPC_LO (off), p);
10509	  p += 4;
10510	}
10511      if (load)
10512	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10513      else
10514	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10515      p += 4;
10516    }
10517  return p;
10518}
10519
10520static unsigned int
10521size_offset (bfd_vma off)
10522{
10523  unsigned int size;
10524  if (off + 0x8000 < 0x10000)
10525    size = 4;
10526  else if (off + 0x80008000ULL < 0x100000000ULL)
10527    size = 8;
10528  else
10529    {
10530      if (off + 0x800000000000ULL < 0x1000000000000ULL)
10531	size = 4;
10532      else
10533	{
10534	  size = 4;
10535	  if (((off >> 32) & 0xffff) != 0)
10536	    size += 4;
10537	}
10538      if (((off >> 32) & 0xffffffffULL) != 0)
10539	size += 4;
10540      if (PPC_HI (off) != 0)
10541	size += 4;
10542      if (PPC_LO (off) != 0)
10543	size += 4;
10544      size += 4;
10545    }
10546  return size + 16;
10547}
10548
10549static unsigned int
10550num_relocs_for_offset (bfd_vma off)
10551{
10552  unsigned int num_rel;
10553  if (off + 0x8000 < 0x10000)
10554    num_rel = 1;
10555  else if (off + 0x80008000ULL < 0x100000000ULL)
10556    num_rel = 2;
10557  else
10558    {
10559      num_rel = 1;
10560      if (off + 0x800000000000ULL >= 0x1000000000000ULL
10561	  && ((off >> 32) & 0xffff) != 0)
10562	num_rel += 1;
10563      if (PPC_HI (off) != 0)
10564	num_rel += 1;
10565      if (PPC_LO (off) != 0)
10566	num_rel += 1;
10567    }
10568  return num_rel;
10569}
10570
10571static Elf_Internal_Rela *
10572emit_relocs_for_offset (struct bfd_link_info *info, Elf_Internal_Rela *r,
10573			bfd_vma roff, bfd_vma targ, bfd_vma off)
10574{
10575  bfd_vma relative_targ = targ - (roff - 8);
10576  if (bfd_big_endian (info->output_bfd))
10577    roff += 2;
10578  r->r_offset = roff;
10579  r->r_addend = relative_targ + roff;
10580  if (off + 0x8000 < 0x10000)
10581    r->r_info = ELF64_R_INFO (0, R_PPC64_REL16);
10582  else if (off + 0x80008000ULL < 0x100000000ULL)
10583    {
10584      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HA);
10585      ++r;
10586      roff += 4;
10587      r->r_offset = roff;
10588      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10589      r->r_addend = relative_targ + roff;
10590    }
10591  else
10592    {
10593      if (off + 0x800000000000ULL < 0x1000000000000ULL)
10594	r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10595      else
10596	{
10597	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHEST);
10598	  if (((off >> 32) & 0xffff) != 0)
10599	    {
10600	      ++r;
10601	      roff += 4;
10602	      r->r_offset = roff;
10603	      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10604	      r->r_addend = relative_targ + roff;
10605	    }
10606	}
10607      if (((off >> 32) & 0xffffffffULL) != 0)
10608	roff += 4;
10609      if (PPC_HI (off) != 0)
10610	{
10611	  ++r;
10612	  roff += 4;
10613	  r->r_offset = roff;
10614	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGH);
10615	  r->r_addend = relative_targ + roff;
10616	}
10617      if (PPC_LO (off) != 0)
10618	{
10619	  ++r;
10620	  roff += 4;
10621	  r->r_offset = roff;
10622	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10623	  r->r_addend = relative_targ + roff;
10624	}
10625    }
10626  return r;
10627}
10628
10629static bfd_byte *
10630build_power10_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
10631		      bfd_boolean load)
10632{
10633  uint64_t insn;
10634  if (off - odd + (1ULL << 33) < 1ULL << 34)
10635    {
10636      off -= odd;
10637      if (odd)
10638	{
10639	  bfd_put_32 (abfd, NOP, p);
10640	  p += 4;
10641	}
10642      if (load)
10643	insn = PLD_R12_PC;
10644      else
10645	insn = PADDI_R12_PC;
10646      insn |= D34 (off);
10647      bfd_put_32 (abfd, insn >> 32, p);
10648      p += 4;
10649      bfd_put_32 (abfd, insn, p);
10650    }
10651  /* The minimum value for paddi is -0x200000000.  The minimum value
10652     for li is -0x8000, which when shifted by 34 and added gives a
10653     minimum value of -0x2000200000000.  The maximum value is
10654     0x1ffffffff+0x7fff<<34 which is 0x2000200000000-1.  */
10655  else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10656    {
10657      off -= 8 - odd;
10658      bfd_put_32 (abfd, LI_R11_0 | (HA34 (off) & 0xffff), p);
10659      p += 4;
10660      if (!odd)
10661	{
10662	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10663	  p += 4;
10664	}
10665      insn = PADDI_R12_PC | D34 (off);
10666      bfd_put_32 (abfd, insn >> 32, p);
10667      p += 4;
10668      bfd_put_32 (abfd, insn, p);
10669      p += 4;
10670      if (odd)
10671	{
10672	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10673	  p += 4;
10674	}
10675      if (load)
10676	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10677      else
10678	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10679    }
10680  else
10681    {
10682      off -= odd + 8;
10683      bfd_put_32 (abfd, LIS_R11 | ((HA34 (off) >> 16) & 0x3fff), p);
10684      p += 4;
10685      bfd_put_32 (abfd, ORI_R11_R11_0 | (HA34 (off) & 0xffff), p);
10686      p += 4;
10687      if (odd)
10688	{
10689	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10690	  p += 4;
10691	}
10692      insn = PADDI_R12_PC | D34 (off);
10693      bfd_put_32 (abfd, insn >> 32, p);
10694      p += 4;
10695      bfd_put_32 (abfd, insn, p);
10696      p += 4;
10697      if (!odd)
10698	{
10699	  bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10700	  p += 4;
10701	}
10702      if (load)
10703	bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10704      else
10705	bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10706    }
10707  p += 4;
10708  return p;
10709}
10710
10711static unsigned int
10712size_power10_offset (bfd_vma off, int odd)
10713{
10714  if (off - odd + (1ULL << 33) < 1ULL << 34)
10715    return odd + 8;
10716  else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10717    return 20;
10718  else
10719    return 24;
10720}
10721
10722static unsigned int
10723num_relocs_for_power10_offset (bfd_vma off, int odd)
10724{
10725  if (off - odd + (1ULL << 33) < 1ULL << 34)
10726    return 1;
10727  else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10728    return 2;
10729  else
10730    return 3;
10731}
10732
10733static Elf_Internal_Rela *
10734emit_relocs_for_power10_offset (struct bfd_link_info *info,
10735				Elf_Internal_Rela *r, bfd_vma roff,
10736				bfd_vma targ, bfd_vma off, int odd)
10737{
10738  if (off - odd + (1ULL << 33) < 1ULL << 34)
10739    roff += odd;
10740  else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10741    {
10742      int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10743      r->r_offset = roff + d_offset;
10744      r->r_addend = targ + 8 - odd - d_offset;
10745      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10746      ++r;
10747      roff += 8 - odd;
10748    }
10749  else
10750    {
10751      int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10752      r->r_offset = roff + d_offset;
10753      r->r_addend = targ + 8 + odd - d_offset;
10754      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHESTA34);
10755      ++r;
10756      roff += 4;
10757      r->r_offset = roff + d_offset;
10758      r->r_addend = targ + 4 + odd - d_offset;
10759      r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10760      ++r;
10761      roff += 4 + odd;
10762    }
10763  r->r_offset = roff;
10764  r->r_addend = targ;
10765  r->r_info = ELF64_R_INFO (0, R_PPC64_PCREL34);
10766  return r;
10767}
10768
10769/* Emit .eh_frame opcode to advance pc by DELTA.  */
10770
10771static bfd_byte *
10772eh_advance (bfd *abfd, bfd_byte *eh, unsigned int delta)
10773{
10774  delta /= 4;
10775  if (delta < 64)
10776    *eh++ = DW_CFA_advance_loc + delta;
10777  else if (delta < 256)
10778    {
10779      *eh++ = DW_CFA_advance_loc1;
10780      *eh++ = delta;
10781    }
10782  else if (delta < 65536)
10783    {
10784      *eh++ = DW_CFA_advance_loc2;
10785      bfd_put_16 (abfd, delta, eh);
10786      eh += 2;
10787    }
10788  else
10789    {
10790      *eh++ = DW_CFA_advance_loc4;
10791      bfd_put_32 (abfd, delta, eh);
10792      eh += 4;
10793    }
10794  return eh;
10795}
10796
10797/* Size of required .eh_frame opcode to advance pc by DELTA.  */
10798
10799static unsigned int
10800eh_advance_size (unsigned int delta)
10801{
10802  if (delta < 64 * 4)
10803    /* DW_CFA_advance_loc+[1..63].  */
10804    return 1;
10805  if (delta < 256 * 4)
10806    /* DW_CFA_advance_loc1, byte.  */
10807    return 2;
10808  if (delta < 65536 * 4)
10809    /* DW_CFA_advance_loc2, 2 bytes.  */
10810    return 3;
10811  /* DW_CFA_advance_loc4, 4 bytes.  */
10812  return 5;
10813}
10814
10815/* With power7 weakly ordered memory model, it is possible for ld.so
10816   to update a plt entry in one thread and have another thread see a
10817   stale zero toc entry.  To avoid this we need some sort of acquire
10818   barrier in the call stub.  One solution is to make the load of the
10819   toc word seem to appear to depend on the load of the function entry
10820   word.  Another solution is to test for r2 being zero, and branch to
10821   the appropriate glink entry if so.
10822
10823   .	fake dep barrier	compare
10824   .	ld 12,xxx(2)		ld 12,xxx(2)
10825   .	mtctr 12		mtctr 12
10826   .	xor 11,12,12		ld 2,xxx+8(2)
10827   .	add 2,2,11		cmpldi 2,0
10828   .	ld 2,xxx+8(2)		bnectr+
10829   .	bctr			b <glink_entry>
10830
10831   The solution involving the compare turns out to be faster, so
10832   that's what we use unless the branch won't reach.  */
10833
10834#define ALWAYS_USE_FAKE_DEP 0
10835#define ALWAYS_EMIT_R2SAVE 0
10836
10837static inline unsigned int
10838plt_stub_size (struct ppc_link_hash_table *htab,
10839	       struct ppc_stub_hash_entry *stub_entry,
10840	       bfd_vma off)
10841{
10842  unsigned size;
10843
10844  if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
10845    {
10846      if (htab->params->power10_stubs != 0)
10847	{
10848	  bfd_vma start = (stub_entry->stub_offset
10849			   + stub_entry->group->stub_sec->output_offset
10850			   + stub_entry->group->stub_sec->output_section->vma);
10851	  if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10852	    start += 4;
10853	  size = 8 + size_power10_offset (off, start & 4);
10854	}
10855      else
10856	size = 8 + size_offset (off - 8);
10857      if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10858	size += 4;
10859      return size;
10860    }
10861
10862  size = 12;
10863  if (ALWAYS_EMIT_R2SAVE
10864      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10865    size += 4;
10866  if (PPC_HA (off) != 0)
10867    size += 4;
10868  if (htab->opd_abi)
10869    {
10870      size += 4;
10871      if (htab->params->plt_static_chain)
10872	size += 4;
10873      if (htab->params->plt_thread_safe
10874	  && htab->elf.dynamic_sections_created
10875	  && stub_entry->h != NULL
10876	  && stub_entry->h->elf.dynindx != -1)
10877	size += 8;
10878      if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10879	size += 4;
10880    }
10881  if (stub_entry->h != NULL
10882      && is_tls_get_addr (&stub_entry->h->elf, htab)
10883      && htab->params->tls_get_addr_opt)
10884    {
10885      if (htab->params->no_tls_get_addr_regsave)
10886	{
10887	  size += 7 * 4;
10888	  if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10889	    size += 6 * 4;
10890	}
10891      else
10892	{
10893	  size += 30 * 4;
10894	  if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10895	    size += 4;
10896	}
10897    }
10898  return size;
10899}
10900
10901/* Depending on the sign of plt_stub_align:
10902   If positive, return the padding to align to a 2**plt_stub_align
10903   boundary.
10904   If negative, if this stub would cross fewer 2**plt_stub_align
10905   boundaries if we align, then return the padding needed to do so.  */
10906
10907static inline unsigned int
10908plt_stub_pad (struct ppc_link_hash_table *htab,
10909	      struct ppc_stub_hash_entry *stub_entry,
10910	      bfd_vma plt_off)
10911{
10912  int stub_align;
10913  unsigned stub_size;
10914  bfd_vma stub_off = stub_entry->group->stub_sec->size;
10915
10916  if (htab->params->plt_stub_align >= 0)
10917    {
10918      stub_align = 1 << htab->params->plt_stub_align;
10919      if ((stub_off & (stub_align - 1)) != 0)
10920	return stub_align - (stub_off & (stub_align - 1));
10921      return 0;
10922    }
10923
10924  stub_align = 1 << -htab->params->plt_stub_align;
10925  stub_size = plt_stub_size (htab, stub_entry, plt_off);
10926  if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10927      > ((stub_size - 1) & -stub_align))
10928    return stub_align - (stub_off & (stub_align - 1));
10929  return 0;
10930}
10931
10932/* Build a .plt call stub.  */
10933
10934static inline bfd_byte *
10935build_plt_stub (struct ppc_link_hash_table *htab,
10936		struct ppc_stub_hash_entry *stub_entry,
10937		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10938{
10939  bfd *obfd = htab->params->stub_bfd;
10940  bfd_boolean plt_load_toc = htab->opd_abi;
10941  bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10942  bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10943				 && htab->elf.dynamic_sections_created
10944				 && stub_entry->h != NULL
10945				 && stub_entry->h->elf.dynindx != -1);
10946  bfd_boolean use_fake_dep = plt_thread_safe;
10947  bfd_vma cmp_branch_off = 0;
10948
10949  if (!ALWAYS_USE_FAKE_DEP
10950      && plt_load_toc
10951      && plt_thread_safe
10952      && !(stub_entry->h != NULL
10953	   && is_tls_get_addr (&stub_entry->h->elf, htab)
10954	   && htab->params->tls_get_addr_opt))
10955    {
10956      bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10957      bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10958			  / PLT_ENTRY_SIZE (htab));
10959      bfd_vma glinkoff = GLINK_PLTRESOLVE_SIZE (htab) + pltindex * 8;
10960      bfd_vma to, from;
10961
10962      if (pltindex > 32768)
10963	glinkoff += (pltindex - 32768) * 4;
10964      to = (glinkoff
10965	    + htab->glink->output_offset
10966	    + htab->glink->output_section->vma);
10967      from = (p - stub_entry->group->stub_sec->contents
10968	      + 4 * (ALWAYS_EMIT_R2SAVE
10969		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10970	      + 4 * (PPC_HA (offset) != 0)
10971	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10972		     != PPC_HA (offset))
10973	      + 4 * (plt_static_chain != 0)
10974	      + 20
10975	      + stub_entry->group->stub_sec->output_offset
10976	      + stub_entry->group->stub_sec->output_section->vma);
10977      cmp_branch_off = to - from;
10978      use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10979    }
10980
10981  if (PPC_HA (offset) != 0)
10982    {
10983      if (r != NULL)
10984	{
10985	  if (ALWAYS_EMIT_R2SAVE
10986	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10987	    r[0].r_offset += 4;
10988	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10989	  r[1].r_offset = r[0].r_offset + 4;
10990	  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10991	  r[1].r_addend = r[0].r_addend;
10992	  if (plt_load_toc)
10993	    {
10994	      if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10995		{
10996		  r[2].r_offset = r[1].r_offset + 4;
10997		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10998		  r[2].r_addend = r[0].r_addend;
10999		}
11000	      else
11001		{
11002		  r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
11003		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11004		  r[2].r_addend = r[0].r_addend + 8;
11005		  if (plt_static_chain)
11006		    {
11007		      r[3].r_offset = r[2].r_offset + 4;
11008		      r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11009		      r[3].r_addend = r[0].r_addend + 16;
11010		    }
11011		}
11012	    }
11013	}
11014      if (ALWAYS_EMIT_R2SAVE
11015	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11016	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
11017      if (plt_load_toc)
11018	{
11019	  bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p),	p += 4;
11020	  bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),	p += 4;
11021	}
11022      else
11023	{
11024	  bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
11025	  bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p),	p += 4;
11026	}
11027      if (plt_load_toc
11028	  && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
11029	{
11030	  bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p),	p += 4;
11031	  offset = 0;
11032	}
11033      bfd_put_32 (obfd, MTCTR_R12, p),				p += 4;
11034      if (plt_load_toc)
11035	{
11036	  if (use_fake_dep)
11037	    {
11038	      bfd_put_32 (obfd, XOR_R2_R12_R12, p),		p += 4;
11039	      bfd_put_32 (obfd, ADD_R11_R11_R2, p),		p += 4;
11040	    }
11041	  bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
11042	  if (plt_static_chain)
11043	    bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
11044	}
11045    }
11046  else
11047    {
11048      if (r != NULL)
11049	{
11050	  if (ALWAYS_EMIT_R2SAVE
11051	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11052	    r[0].r_offset += 4;
11053	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11054	  if (plt_load_toc)
11055	    {
11056	      if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
11057		{
11058		  r[1].r_offset = r[0].r_offset + 4;
11059		  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
11060		  r[1].r_addend = r[0].r_addend;
11061		}
11062	      else
11063		{
11064		  r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
11065		  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11066		  r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
11067		  if (plt_static_chain)
11068		    {
11069		      r[2].r_offset = r[1].r_offset + 4;
11070		      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11071		      r[2].r_addend = r[0].r_addend + 8;
11072		    }
11073		}
11074	    }
11075	}
11076      if (ALWAYS_EMIT_R2SAVE
11077	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11078	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
11079      bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),	p += 4;
11080      if (plt_load_toc
11081	  && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
11082	{
11083	  bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),	p += 4;
11084	  offset = 0;
11085	}
11086      bfd_put_32 (obfd, MTCTR_R12, p),				p += 4;
11087      if (plt_load_toc)
11088	{
11089	  if (use_fake_dep)
11090	    {
11091	      bfd_put_32 (obfd, XOR_R11_R12_R12, p),		p += 4;
11092	      bfd_put_32 (obfd, ADD_R2_R2_R11, p),		p += 4;
11093	    }
11094	  if (plt_static_chain)
11095	    bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
11096	  bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
11097	}
11098    }
11099  if (plt_load_toc && plt_thread_safe && !use_fake_dep)
11100    {
11101      bfd_put_32 (obfd, CMPLDI_R2_0, p),			p += 4;
11102      bfd_put_32 (obfd, BNECTR_P4, p),				p += 4;
11103      bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
11104    }
11105  else
11106    bfd_put_32 (obfd, BCTR, p),					p += 4;
11107  return p;
11108}
11109
11110/* Build a special .plt call stub for __tls_get_addr.  */
11111
11112#define LD_R0_0R3	0xe8030000
11113#define LD_R12_0R3	0xe9830000
11114#define MR_R0_R3	0x7c601b78
11115#define CMPDI_R0_0	0x2c200000
11116#define ADD_R3_R12_R13	0x7c6c6a14
11117#define BEQLR		0x4d820020
11118#define MR_R3_R0	0x7c030378
11119#define BCTRL		0x4e800421
11120
11121static inline bfd_byte *
11122build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
11123			 struct ppc_stub_hash_entry *stub_entry,
11124			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
11125{
11126  bfd *obfd = htab->params->stub_bfd;
11127  bfd_byte *loc = p;
11128  unsigned int i;
11129
11130  bfd_put_32 (obfd, LD_R0_0R3 + 0, p),		p += 4;
11131  bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
11132  bfd_put_32 (obfd, CMPDI_R0_0, p),		p += 4;
11133  bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
11134  bfd_put_32 (obfd, ADD_R3_R12_R13, p),		p += 4;
11135  bfd_put_32 (obfd, BEQLR, p),			p += 4;
11136  bfd_put_32 (obfd, MR_R3_R0, p),		p += 4;
11137  if (htab->params->no_tls_get_addr_regsave)
11138    {
11139      if (r != NULL)
11140	r[0].r_offset += 7 * 4;
11141      if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
11142	return build_plt_stub (htab, stub_entry, p, offset, r);
11143
11144      bfd_put_32 (obfd, MFLR_R0, p);
11145      p += 4;
11146      bfd_put_32 (obfd, STD_R0_0R1 + STK_LINKER (htab), p);
11147      p += 4;
11148
11149      if (r != NULL)
11150	r[0].r_offset += 2 * 4;
11151      p = build_plt_stub (htab, stub_entry, p, offset, r);
11152      bfd_put_32 (obfd, BCTRL, p - 4);
11153
11154      bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
11155      p += 4;
11156      bfd_put_32 (obfd, LD_R0_0R1 + STK_LINKER (htab), p);
11157      p += 4;
11158      bfd_put_32 (obfd, MTLR_R0, p);
11159      p += 4;
11160      bfd_put_32 (obfd, BLR, p);
11161      p += 4;
11162    }
11163  else
11164    {
11165      p = tls_get_addr_prologue (obfd, p, htab);
11166
11167      if (r != NULL)
11168	r[0].r_offset += 18 * 4;
11169
11170      p = build_plt_stub (htab, stub_entry, p, offset, r);
11171      bfd_put_32 (obfd, BCTRL, p - 4);
11172
11173      if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
11174	{
11175	  bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
11176	  p += 4;
11177	}
11178
11179      p = tls_get_addr_epilogue (obfd, p, htab);
11180    }
11181
11182  if (htab->glink_eh_frame != NULL
11183      && htab->glink_eh_frame->size != 0)
11184    {
11185      bfd_byte *base, *eh;
11186
11187      base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
11188      eh = base + stub_entry->group->eh_size;
11189      if (htab->params->no_tls_get_addr_regsave)
11190	{
11191	  unsigned int lr_used, delta;
11192	  lr_used = stub_entry->stub_offset + (p - 20 - loc);
11193	  delta = lr_used - stub_entry->group->lr_restore;
11194	  stub_entry->group->lr_restore = lr_used + 16;
11195	  eh = eh_advance (htab->elf.dynobj, eh, delta);
11196	  *eh++ = DW_CFA_offset_extended_sf;
11197	  *eh++ = 65;
11198	  *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
11199	  *eh++ = DW_CFA_advance_loc + 4;
11200	}
11201      else
11202	{
11203	  unsigned int cfa_updt, delta;
11204	  /* After the bctrl, lr has been modified so we need to emit
11205	     .eh_frame info saying the return address is on the stack.  In
11206	     fact we must put the EH info at or before the call rather
11207	     than after it, because the EH info for a call needs to be
11208	     specified by that point.
11209	     See libgcc/unwind-dw2.c execute_cfa_program.
11210	     Any stack pointer update must be described immediately after
11211	     the instruction making the change, and since the stdu occurs
11212	     after saving regs we put all the reg saves and the cfa
11213	     change there.  */
11214	  cfa_updt = stub_entry->stub_offset + 18 * 4;
11215	  delta = cfa_updt - stub_entry->group->lr_restore;
11216	  stub_entry->group->lr_restore
11217	    = stub_entry->stub_offset + (p - loc) - 4;
11218	  eh = eh_advance (htab->elf.dynobj, eh, delta);
11219	  *eh++ = DW_CFA_def_cfa_offset;
11220	  if (htab->opd_abi)
11221	    {
11222	      *eh++ = 128;
11223	      *eh++ = 1;
11224	    }
11225	  else
11226	    *eh++ = 96;
11227	  *eh++ = DW_CFA_offset_extended_sf;
11228	  *eh++ = 65;
11229	  *eh++ = (-16 / 8) & 0x7f;
11230	  for (i = 4; i < 12; i++)
11231	    {
11232	      *eh++ = DW_CFA_offset + i;
11233	      *eh++ = (htab->opd_abi ? 13 : 12) - i;
11234	    }
11235	  *eh++ = (DW_CFA_advance_loc
11236		   + (stub_entry->group->lr_restore - 8 - cfa_updt) / 4);
11237	  *eh++ = DW_CFA_def_cfa_offset;
11238	  *eh++ = 0;
11239	  for (i = 4; i < 12; i++)
11240	    *eh++ = DW_CFA_restore + i;
11241	  *eh++ = DW_CFA_advance_loc + 2;
11242	}
11243      *eh++ = DW_CFA_restore_extended;
11244      *eh++ = 65;
11245      stub_entry->group->eh_size = eh - base;
11246    }
11247  return p;
11248}
11249
11250static Elf_Internal_Rela *
11251get_relocs (asection *sec, int count)
11252{
11253  Elf_Internal_Rela *relocs;
11254  struct bfd_elf_section_data *elfsec_data;
11255
11256  elfsec_data = elf_section_data (sec);
11257  relocs = elfsec_data->relocs;
11258  if (relocs == NULL)
11259    {
11260      bfd_size_type relsize;
11261      relsize = sec->reloc_count * sizeof (*relocs);
11262      relocs = bfd_alloc (sec->owner, relsize);
11263      if (relocs == NULL)
11264	return NULL;
11265      elfsec_data->relocs = relocs;
11266      elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
11267					  sizeof (Elf_Internal_Shdr));
11268      if (elfsec_data->rela.hdr == NULL)
11269	return NULL;
11270      elfsec_data->rela.hdr->sh_size = (sec->reloc_count
11271					* sizeof (Elf64_External_Rela));
11272      elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
11273      sec->reloc_count = 0;
11274    }
11275  relocs += sec->reloc_count;
11276  sec->reloc_count += count;
11277  return relocs;
11278}
11279
11280/* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
11281   forms, to the equivalent relocs against the global symbol given by
11282   STUB_ENTRY->H.  */
11283
11284static bfd_boolean
11285use_global_in_relocs (struct ppc_link_hash_table *htab,
11286		      struct ppc_stub_hash_entry *stub_entry,
11287		      Elf_Internal_Rela *r, unsigned int num_rel)
11288{
11289  struct elf_link_hash_entry **hashes;
11290  unsigned long symndx;
11291  struct ppc_link_hash_entry *h;
11292  bfd_vma symval;
11293
11294  /* Relocs are always against symbols in their own object file.  Fake
11295     up global sym hashes for the stub bfd (which has no symbols).  */
11296  hashes = elf_sym_hashes (htab->params->stub_bfd);
11297  if (hashes == NULL)
11298    {
11299      bfd_size_type hsize;
11300
11301      /* When called the first time, stub_globals will contain the
11302	 total number of symbols seen during stub sizing.  After
11303	 allocating, stub_globals is used as an index to fill the
11304	 hashes array.  */
11305      hsize = (htab->stub_globals + 1) * sizeof (*hashes);
11306      hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
11307      if (hashes == NULL)
11308	return FALSE;
11309      elf_sym_hashes (htab->params->stub_bfd) = hashes;
11310      htab->stub_globals = 1;
11311    }
11312  symndx = htab->stub_globals++;
11313  h = stub_entry->h;
11314  hashes[symndx] = &h->elf;
11315  if (h->oh != NULL && h->oh->is_func)
11316    h = ppc_follow_link (h->oh);
11317  BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
11318	      || h->elf.root.type == bfd_link_hash_defweak);
11319  symval = defined_sym_val (&h->elf);
11320  while (num_rel-- != 0)
11321    {
11322      r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
11323      if (h->elf.root.u.def.section != stub_entry->target_section)
11324	{
11325	  /* H is an opd symbol.  The addend must be zero, and the
11326	     branch reloc is the only one we can convert.  */
11327	  r->r_addend = 0;
11328	  break;
11329	}
11330      else
11331	r->r_addend -= symval;
11332      --r;
11333    }
11334  return TRUE;
11335}
11336
11337static bfd_vma
11338get_r2off (struct bfd_link_info *info,
11339	   struct ppc_stub_hash_entry *stub_entry)
11340{
11341  struct ppc_link_hash_table *htab = ppc_hash_table (info);
11342  bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
11343
11344  if (r2off == 0)
11345    {
11346      /* Support linking -R objects.  Get the toc pointer from the
11347	 opd entry.  */
11348      char buf[8];
11349      if (!htab->opd_abi)
11350	return r2off;
11351      asection *opd = stub_entry->h->elf.root.u.def.section;
11352      bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
11353
11354      if (strcmp (opd->name, ".opd") != 0
11355	  || opd->reloc_count != 0)
11356	{
11357	  info->callbacks->einfo
11358	    (_("%P: cannot find opd entry toc for `%pT'\n"),
11359	     stub_entry->h->elf.root.root.string);
11360	  bfd_set_error (bfd_error_bad_value);
11361	  return (bfd_vma) -1;
11362	}
11363      if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
11364	return (bfd_vma) -1;
11365      r2off = bfd_get_64 (opd->owner, buf);
11366      r2off -= elf_gp (info->output_bfd);
11367    }
11368  r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
11369  return r2off;
11370}
11371
11372static bfd_boolean
11373ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11374{
11375  struct ppc_stub_hash_entry *stub_entry;
11376  struct ppc_branch_hash_entry *br_entry;
11377  struct bfd_link_info *info;
11378  struct ppc_link_hash_table *htab;
11379  bfd_byte *loc;
11380  bfd_byte *p, *relp;
11381  bfd_vma targ, off;
11382  Elf_Internal_Rela *r;
11383  asection *plt;
11384  int num_rel;
11385  int odd;
11386
11387  /* Massage our args to the form they really have.  */
11388  stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11389  info = in_arg;
11390
11391  /* Fail if the target section could not be assigned to an output
11392     section.  The user should fix his linker script.  */
11393  if (stub_entry->target_section != NULL
11394      && stub_entry->target_section->output_section == NULL
11395      && info->non_contiguous_regions)
11396    info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
11397			      "Retry without --enable-non-contiguous-regions.\n"),
11398			    stub_entry->target_section);
11399
11400  /* Same for the group.  */
11401  if (stub_entry->group->stub_sec != NULL
11402      && stub_entry->group->stub_sec->output_section == NULL
11403      && info->non_contiguous_regions)
11404    info->callbacks->einfo (_("%F%P: Could not assign group %pA target %pA to an "
11405			      "output section. Retry without "
11406			      "--enable-non-contiguous-regions.\n"),
11407			    stub_entry->group->stub_sec,
11408			    stub_entry->target_section);
11409
11410  htab = ppc_hash_table (info);
11411  if (htab == NULL)
11412    return FALSE;
11413
11414  BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
11415  loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
11416
11417  htab->stub_count[stub_entry->stub_type - 1] += 1;
11418  switch (stub_entry->stub_type)
11419    {
11420    case ppc_stub_long_branch:
11421    case ppc_stub_long_branch_r2off:
11422      /* Branches are relative.  This is where we are going to.  */
11423      targ = (stub_entry->target_value
11424	      + stub_entry->target_section->output_offset
11425	      + stub_entry->target_section->output_section->vma);
11426      targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11427
11428      /* And this is where we are coming from.  */
11429      off = (stub_entry->stub_offset
11430	     + stub_entry->group->stub_sec->output_offset
11431	     + stub_entry->group->stub_sec->output_section->vma);
11432      off = targ - off;
11433
11434      p = loc;
11435      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11436	{
11437	  bfd_vma r2off = get_r2off (info, stub_entry);
11438
11439	  if (r2off == (bfd_vma) -1)
11440	    {
11441	      htab->stub_error = TRUE;
11442	      return FALSE;
11443	    }
11444	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11445	  p += 4;
11446	  if (PPC_HA (r2off) != 0)
11447	    {
11448	      bfd_put_32 (htab->params->stub_bfd,
11449			  ADDIS_R2_R2 | PPC_HA (r2off), p);
11450	      p += 4;
11451	    }
11452	  if (PPC_LO (r2off) != 0)
11453	    {
11454	      bfd_put_32 (htab->params->stub_bfd,
11455			  ADDI_R2_R2 | PPC_LO (r2off), p);
11456	      p += 4;
11457	    }
11458	  off -= p - loc;
11459	}
11460      bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
11461      p += 4;
11462
11463      if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11464	{
11465	  _bfd_error_handler
11466	    (_("long branch stub `%s' offset overflow"),
11467	     stub_entry->root.string);
11468	  htab->stub_error = TRUE;
11469	  return FALSE;
11470	}
11471
11472      if (info->emitrelocations)
11473	{
11474	  r = get_relocs (stub_entry->group->stub_sec, 1);
11475	  if (r == NULL)
11476	    return FALSE;
11477	  r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
11478	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11479	  r->r_addend = targ;
11480	  if (stub_entry->h != NULL
11481	      && !use_global_in_relocs (htab, stub_entry, r, 1))
11482	    return FALSE;
11483	}
11484      break;
11485
11486    case ppc_stub_plt_branch:
11487    case ppc_stub_plt_branch_r2off:
11488      br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11489					 stub_entry->root.string + 9,
11490					 FALSE, FALSE);
11491      if (br_entry == NULL)
11492	{
11493	  _bfd_error_handler (_("can't find branch stub `%s'"),
11494			      stub_entry->root.string);
11495	  htab->stub_error = TRUE;
11496	  return FALSE;
11497	}
11498
11499      targ = (stub_entry->target_value
11500	      + stub_entry->target_section->output_offset
11501	      + stub_entry->target_section->output_section->vma);
11502      if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11503	targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11504
11505      bfd_put_64 (htab->brlt->owner, targ,
11506		  htab->brlt->contents + br_entry->offset);
11507
11508      if (br_entry->iter == htab->stub_iteration)
11509	{
11510	  br_entry->iter = 0;
11511
11512	  if (htab->relbrlt != NULL)
11513	    {
11514	      /* Create a reloc for the branch lookup table entry.  */
11515	      Elf_Internal_Rela rela;
11516	      bfd_byte *rl;
11517
11518	      rela.r_offset = (br_entry->offset
11519			       + htab->brlt->output_offset
11520			       + htab->brlt->output_section->vma);
11521	      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11522	      rela.r_addend = targ;
11523
11524	      rl = htab->relbrlt->contents;
11525	      rl += (htab->relbrlt->reloc_count++
11526		     * sizeof (Elf64_External_Rela));
11527	      bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
11528	    }
11529	  else if (info->emitrelocations)
11530	    {
11531	      r = get_relocs (htab->brlt, 1);
11532	      if (r == NULL)
11533		return FALSE;
11534	      /* brlt, being SEC_LINKER_CREATED does not go through the
11535		 normal reloc processing.  Symbols and offsets are not
11536		 translated from input file to output file form, so
11537		 set up the offset per the output file.  */
11538	      r->r_offset = (br_entry->offset
11539			     + htab->brlt->output_offset
11540			     + htab->brlt->output_section->vma);
11541	      r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11542	      r->r_addend = targ;
11543	    }
11544	}
11545
11546      targ = (br_entry->offset
11547	      + htab->brlt->output_offset
11548	      + htab->brlt->output_section->vma);
11549
11550      off = (elf_gp (info->output_bfd)
11551	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11552      off = targ - off;
11553
11554      if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11555	{
11556	  info->callbacks->einfo
11557	    (_("%P: linkage table error against `%pT'\n"),
11558	     stub_entry->root.string);
11559	  bfd_set_error (bfd_error_bad_value);
11560	  htab->stub_error = TRUE;
11561	  return FALSE;
11562	}
11563
11564      if (info->emitrelocations)
11565	{
11566	  r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11567	  if (r == NULL)
11568	    return FALSE;
11569	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11570	  if (bfd_big_endian (info->output_bfd))
11571	    r[0].r_offset += 2;
11572	  if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11573	    r[0].r_offset += 4;
11574	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11575	  r[0].r_addend = targ;
11576	  if (PPC_HA (off) != 0)
11577	    {
11578	      r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11579	      r[1].r_offset = r[0].r_offset + 4;
11580	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11581	      r[1].r_addend = r[0].r_addend;
11582	    }
11583	}
11584
11585      p = loc;
11586      if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11587	{
11588	  if (PPC_HA (off) != 0)
11589	    {
11590	      bfd_put_32 (htab->params->stub_bfd,
11591			  ADDIS_R12_R2 | PPC_HA (off), p);
11592	      p += 4;
11593	      bfd_put_32 (htab->params->stub_bfd,
11594			  LD_R12_0R12 | PPC_LO (off), p);
11595	    }
11596	  else
11597	    bfd_put_32 (htab->params->stub_bfd,
11598			LD_R12_0R2 | PPC_LO (off), p);
11599	}
11600      else
11601	{
11602	  bfd_vma r2off = get_r2off (info, stub_entry);
11603
11604	  if (r2off == (bfd_vma) -1)
11605	    {
11606	      htab->stub_error = TRUE;
11607	      return FALSE;
11608	    }
11609
11610	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11611	  p += 4;
11612	  if (PPC_HA (off) != 0)
11613	    {
11614	      bfd_put_32 (htab->params->stub_bfd,
11615			  ADDIS_R12_R2 | PPC_HA (off), p);
11616	      p += 4;
11617	      bfd_put_32 (htab->params->stub_bfd,
11618			  LD_R12_0R12 | PPC_LO (off), p);
11619	    }
11620	  else
11621	    bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
11622
11623	  if (PPC_HA (r2off) != 0)
11624	    {
11625	      p += 4;
11626	      bfd_put_32 (htab->params->stub_bfd,
11627			  ADDIS_R2_R2 | PPC_HA (r2off), p);
11628	    }
11629	  if (PPC_LO (r2off) != 0)
11630	    {
11631	      p += 4;
11632	      bfd_put_32 (htab->params->stub_bfd,
11633			  ADDI_R2_R2 | PPC_LO (r2off), p);
11634	    }
11635	}
11636      p += 4;
11637      bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11638      p += 4;
11639      bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11640      p += 4;
11641      break;
11642
11643    case ppc_stub_long_branch_notoc:
11644    case ppc_stub_long_branch_both:
11645    case ppc_stub_plt_branch_notoc:
11646    case ppc_stub_plt_branch_both:
11647    case ppc_stub_plt_call_notoc:
11648    case ppc_stub_plt_call_both:
11649      p = loc;
11650      off = (stub_entry->stub_offset
11651	     + stub_entry->group->stub_sec->output_offset
11652	     + stub_entry->group->stub_sec->output_section->vma);
11653      if (stub_entry->stub_type == ppc_stub_long_branch_both
11654	  || stub_entry->stub_type == ppc_stub_plt_branch_both
11655	  || stub_entry->stub_type == ppc_stub_plt_call_both)
11656	{
11657	  off += 4;
11658	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11659	  p += 4;
11660	}
11661      if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
11662	{
11663	  targ = stub_entry->plt_ent->plt.offset & ~1;
11664	  if (targ >= (bfd_vma) -2)
11665	    abort ();
11666
11667	  plt = htab->elf.splt;
11668	  if (!htab->elf.dynamic_sections_created
11669	      || stub_entry->h == NULL
11670	      || stub_entry->h->elf.dynindx == -1)
11671	    {
11672	      if (stub_entry->symtype == STT_GNU_IFUNC)
11673		plt = htab->elf.iplt;
11674	      else
11675		plt = htab->pltlocal;
11676	    }
11677	  targ += plt->output_offset + plt->output_section->vma;
11678	}
11679      else
11680	targ = (stub_entry->target_value
11681		+ stub_entry->target_section->output_offset
11682		+ stub_entry->target_section->output_section->vma);
11683      odd = off & 4;
11684      off = targ - off;
11685
11686      relp = p;
11687      num_rel = 0;
11688      if (htab->params->power10_stubs != 0)
11689	{
11690	  bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
11691	  p = build_power10_offset (htab->params->stub_bfd, p, off, odd, load);
11692	}
11693      else
11694	{
11695	  /* The notoc stubs calculate their target (either a PLT entry or
11696	     the global entry point of a function) relative to the PC
11697	     returned by the "bcl" two instructions past the start of the
11698	     sequence emitted by build_offset.  The offset is therefore 8
11699	     less than calculated from the start of the sequence.  */
11700	  off -= 8;
11701	  p = build_offset (htab->params->stub_bfd, p, off,
11702			    stub_entry->stub_type >= ppc_stub_plt_call_notoc);
11703	}
11704
11705      if (stub_entry->stub_type <= ppc_stub_long_branch_both)
11706	{
11707	  bfd_vma from;
11708	  num_rel = 1;
11709	  from = (stub_entry->stub_offset
11710		  + stub_entry->group->stub_sec->output_offset
11711		  + stub_entry->group->stub_sec->output_section->vma
11712		  + (p - loc));
11713	  bfd_put_32 (htab->params->stub_bfd,
11714		      B_DOT | ((targ - from) & 0x3fffffc), p);
11715	}
11716      else
11717	{
11718	  bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11719	  p += 4;
11720	  bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11721	}
11722      p += 4;
11723
11724      if (info->emitrelocations)
11725	{
11726	  bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
11727	  if (htab->params->power10_stubs != 0)
11728	    num_rel += num_relocs_for_power10_offset (off, odd);
11729	  else
11730	    {
11731	      num_rel += num_relocs_for_offset (off);
11732	      roff += 16;
11733	    }
11734	  r = get_relocs (stub_entry->group->stub_sec, num_rel);
11735	  if (r == NULL)
11736	    return FALSE;
11737	  if (htab->params->power10_stubs != 0)
11738	    r = emit_relocs_for_power10_offset (info, r, roff, targ, off, odd);
11739	  else
11740	    r = emit_relocs_for_offset (info, r, roff, targ, off);
11741	  if (stub_entry->stub_type == ppc_stub_long_branch_notoc
11742	      || stub_entry->stub_type == ppc_stub_long_branch_both)
11743	    {
11744	      ++r;
11745	      roff = p - 4 - stub_entry->group->stub_sec->contents;
11746	      r->r_offset = roff;
11747	      r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11748	      r->r_addend = targ;
11749	      if (stub_entry->h != NULL
11750		  && !use_global_in_relocs (htab, stub_entry, r, num_rel))
11751		return FALSE;
11752	    }
11753	}
11754
11755      if (htab->params->power10_stubs == 0
11756	  && htab->glink_eh_frame != NULL
11757	  && htab->glink_eh_frame->size != 0)
11758	{
11759	  bfd_byte *base, *eh;
11760	  unsigned int lr_used, delta;
11761
11762	  base = (htab->glink_eh_frame->contents
11763		  + stub_entry->group->eh_base + 17);
11764	  eh = base + stub_entry->group->eh_size;
11765	  lr_used = stub_entry->stub_offset + 8;
11766	  if (stub_entry->stub_type == ppc_stub_long_branch_both
11767	      || stub_entry->stub_type == ppc_stub_plt_branch_both
11768	      || stub_entry->stub_type == ppc_stub_plt_call_both)
11769	    lr_used += 4;
11770	  delta = lr_used - stub_entry->group->lr_restore;
11771	  stub_entry->group->lr_restore = lr_used + 8;
11772	  eh = eh_advance (htab->elf.dynobj, eh, delta);
11773	  *eh++ = DW_CFA_register;
11774	  *eh++ = 65;
11775	  *eh++ = 12;
11776	  *eh++ = DW_CFA_advance_loc + 2;
11777	  *eh++ = DW_CFA_restore_extended;
11778	  *eh++ = 65;
11779	  stub_entry->group->eh_size = eh - base;
11780	}
11781      break;
11782
11783    case ppc_stub_plt_call:
11784    case ppc_stub_plt_call_r2save:
11785      if (stub_entry->h != NULL
11786	  && stub_entry->h->is_func_descriptor
11787	  && stub_entry->h->oh != NULL)
11788	{
11789	  struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11790
11791	  /* If the old-ABI "dot-symbol" is undefined make it weak so
11792	     we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.  */
11793	  if (fh->elf.root.type == bfd_link_hash_undefined
11794	      && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11795		  || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11796	    fh->elf.root.type = bfd_link_hash_undefweak;
11797	}
11798
11799      /* Now build the stub.  */
11800      targ = stub_entry->plt_ent->plt.offset & ~1;
11801      if (targ >= (bfd_vma) -2)
11802	abort ();
11803
11804      plt = htab->elf.splt;
11805      if (!htab->elf.dynamic_sections_created
11806	  || stub_entry->h == NULL
11807	  || stub_entry->h->elf.dynindx == -1)
11808	{
11809	  if (stub_entry->symtype == STT_GNU_IFUNC)
11810	    plt = htab->elf.iplt;
11811	  else
11812	    plt = htab->pltlocal;
11813	}
11814      targ += plt->output_offset + plt->output_section->vma;
11815
11816      off = (elf_gp (info->output_bfd)
11817	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11818      off = targ - off;
11819
11820      if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11821	{
11822	  info->callbacks->einfo
11823	    /* xgettext:c-format */
11824	    (_("%P: linkage table error against `%pT'\n"),
11825	     stub_entry->h != NULL
11826	     ? stub_entry->h->elf.root.root.string
11827	     : "<local sym>");
11828	  bfd_set_error (bfd_error_bad_value);
11829	  htab->stub_error = TRUE;
11830	  return FALSE;
11831	}
11832
11833      r = NULL;
11834      if (info->emitrelocations)
11835	{
11836	  r = get_relocs (stub_entry->group->stub_sec,
11837			  ((PPC_HA (off) != 0)
11838			   + (htab->opd_abi
11839			      ? 2 + (htab->params->plt_static_chain
11840				     && PPC_HA (off + 16) == PPC_HA (off))
11841			      : 1)));
11842	  if (r == NULL)
11843	    return FALSE;
11844	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11845	  if (bfd_big_endian (info->output_bfd))
11846	    r[0].r_offset += 2;
11847	  r[0].r_addend = targ;
11848	}
11849      if (stub_entry->h != NULL
11850	  && is_tls_get_addr (&stub_entry->h->elf, htab)
11851	  && htab->params->tls_get_addr_opt)
11852	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11853      else
11854	p = build_plt_stub (htab, stub_entry, loc, off, r);
11855      break;
11856
11857    case ppc_stub_save_res:
11858      return TRUE;
11859
11860    default:
11861      BFD_FAIL ();
11862      return FALSE;
11863    }
11864
11865  stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
11866
11867  if (htab->params->emit_stub_syms)
11868    {
11869      struct elf_link_hash_entry *h;
11870      size_t len1, len2;
11871      char *name;
11872      const char *const stub_str[] = { "long_branch",
11873				       "long_branch",
11874				       "long_branch",
11875				       "long_branch",
11876				       "plt_branch",
11877				       "plt_branch",
11878				       "plt_branch",
11879				       "plt_branch",
11880				       "plt_call",
11881				       "plt_call",
11882				       "plt_call",
11883				       "plt_call" };
11884
11885      len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11886      len2 = strlen (stub_entry->root.string);
11887      name = bfd_malloc (len1 + len2 + 2);
11888      if (name == NULL)
11889	return FALSE;
11890      memcpy (name, stub_entry->root.string, 9);
11891      memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11892      memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11893      h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11894      if (h == NULL)
11895	return FALSE;
11896      if (h->root.type == bfd_link_hash_new)
11897	{
11898	  h->root.type = bfd_link_hash_defined;
11899	  h->root.u.def.section = stub_entry->group->stub_sec;
11900	  h->root.u.def.value = stub_entry->stub_offset;
11901	  h->ref_regular = 1;
11902	  h->def_regular = 1;
11903	  h->ref_regular_nonweak = 1;
11904	  h->forced_local = 1;
11905	  h->non_elf = 0;
11906	  h->root.linker_def = 1;
11907	}
11908    }
11909
11910  return TRUE;
11911}
11912
11913/* As above, but don't actually build the stub.  Just bump offset so
11914   we know stub section sizes, and select plt_branch stubs where
11915   long_branch stubs won't do.  */
11916
11917static bfd_boolean
11918ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11919{
11920  struct ppc_stub_hash_entry *stub_entry;
11921  struct bfd_link_info *info;
11922  struct ppc_link_hash_table *htab;
11923  asection *plt;
11924  bfd_vma targ, off, r2off;
11925  unsigned int size, extra, lr_used, delta, odd;
11926
11927  /* Massage our args to the form they really have.  */
11928  stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11929  info = in_arg;
11930
11931  htab = ppc_hash_table (info);
11932  if (htab == NULL)
11933    return FALSE;
11934
11935  /* Fail if the target section could not be assigned to an output
11936     section.  The user should fix his linker script.  */
11937  if (stub_entry->target_section != NULL
11938      && stub_entry->target_section->output_section == NULL
11939      && info->non_contiguous_regions)
11940    info->callbacks->einfo (_("%F%P: Could not assign %pA to an output section. "
11941			      "Retry without --enable-non-contiguous-regions.\n"),
11942			    stub_entry->target_section);
11943
11944  /* Same for the group.  */
11945  if (stub_entry->group->stub_sec != NULL
11946      && stub_entry->group->stub_sec->output_section == NULL
11947      && info->non_contiguous_regions)
11948    info->callbacks->einfo (_("%F%P: Could not assign group %pA target %pA to an "
11949			      "output section. Retry without "
11950			      "--enable-non-contiguous-regions.\n"),
11951			    stub_entry->group->stub_sec,
11952			    stub_entry->target_section);
11953
11954  /* Make a note of the offset within the stubs for this entry.  */
11955  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11956
11957  if (stub_entry->h != NULL
11958      && stub_entry->h->save_res
11959      && stub_entry->h->elf.root.type == bfd_link_hash_defined
11960      && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11961    {
11962      /* Don't make stubs to out-of-line register save/restore
11963	 functions.  Instead, emit copies of the functions.  */
11964      stub_entry->group->needs_save_res = 1;
11965      stub_entry->stub_type = ppc_stub_save_res;
11966      return TRUE;
11967    }
11968
11969  switch (stub_entry->stub_type)
11970    {
11971    case ppc_stub_plt_branch:
11972    case ppc_stub_plt_branch_r2off:
11973      /* Reset the stub type from the plt branch variant in case we now
11974	 can reach with a shorter stub.  */
11975      stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11976      /* Fall through.  */
11977    case ppc_stub_long_branch:
11978    case ppc_stub_long_branch_r2off:
11979      targ = (stub_entry->target_value
11980	      + stub_entry->target_section->output_offset
11981	      + stub_entry->target_section->output_section->vma);
11982      targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11983      off = (stub_entry->stub_offset
11984	     + stub_entry->group->stub_sec->output_offset
11985	     + stub_entry->group->stub_sec->output_section->vma);
11986
11987      size = 4;
11988      r2off = 0;
11989      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11990	{
11991	  r2off = get_r2off (info, stub_entry);
11992	  if (r2off == (bfd_vma) -1)
11993	    {
11994	      htab->stub_error = TRUE;
11995	      return FALSE;
11996	    }
11997	  size = 8;
11998	  if (PPC_HA (r2off) != 0)
11999	    size += 4;
12000	  if (PPC_LO (r2off) != 0)
12001	    size += 4;
12002	  off += size - 4;
12003	}
12004      off = targ - off;
12005
12006      /* If the branch offset is too big, use a ppc_stub_plt_branch.
12007	 Do the same for -R objects without function descriptors.  */
12008      if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
12009	   && r2off == 0
12010	   && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
12011	  || off + (1 << 25) >= (bfd_vma) (1 << 26))
12012	{
12013	  struct ppc_branch_hash_entry *br_entry;
12014
12015	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
12016					     stub_entry->root.string + 9,
12017					     TRUE, FALSE);
12018	  if (br_entry == NULL)
12019	    {
12020	      _bfd_error_handler (_("can't build branch stub `%s'"),
12021				  stub_entry->root.string);
12022	      htab->stub_error = TRUE;
12023	      return FALSE;
12024	    }
12025
12026	  if (br_entry->iter != htab->stub_iteration)
12027	    {
12028	      br_entry->iter = htab->stub_iteration;
12029	      br_entry->offset = htab->brlt->size;
12030	      htab->brlt->size += 8;
12031
12032	      if (htab->relbrlt != NULL)
12033		htab->relbrlt->size += sizeof (Elf64_External_Rela);
12034	      else if (info->emitrelocations)
12035		{
12036		  htab->brlt->reloc_count += 1;
12037		  htab->brlt->flags |= SEC_RELOC;
12038		}
12039	    }
12040
12041	  targ = (br_entry->offset
12042		  + htab->brlt->output_offset
12043		  + htab->brlt->output_section->vma);
12044	  off = (elf_gp (info->output_bfd)
12045		 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
12046	  off = targ - off;
12047
12048	  if (info->emitrelocations)
12049	    {
12050	      stub_entry->group->stub_sec->reloc_count
12051		+= 1 + (PPC_HA (off) != 0);
12052	      stub_entry->group->stub_sec->flags |= SEC_RELOC;
12053	    }
12054
12055	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
12056	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
12057	    {
12058	      size = 12;
12059	      if (PPC_HA (off) != 0)
12060		size = 16;
12061	    }
12062	  else
12063	    {
12064	      size = 16;
12065	      if (PPC_HA (off) != 0)
12066		size += 4;
12067
12068	      if (PPC_HA (r2off) != 0)
12069		size += 4;
12070	      if (PPC_LO (r2off) != 0)
12071		size += 4;
12072	    }
12073	}
12074      else if (info->emitrelocations)
12075	{
12076	  stub_entry->group->stub_sec->reloc_count += 1;
12077	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
12078	}
12079      break;
12080
12081    case ppc_stub_plt_branch_notoc:
12082    case ppc_stub_plt_branch_both:
12083      stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
12084      /* Fall through.  */
12085    case ppc_stub_long_branch_notoc:
12086    case ppc_stub_long_branch_both:
12087      off = (stub_entry->stub_offset
12088	     + stub_entry->group->stub_sec->output_offset
12089	     + stub_entry->group->stub_sec->output_section->vma);
12090      size = 0;
12091      if (stub_entry->stub_type == ppc_stub_long_branch_both)
12092	size = 4;
12093      off += size;
12094      targ = (stub_entry->target_value
12095	      + stub_entry->target_section->output_offset
12096	      + stub_entry->target_section->output_section->vma);
12097      odd = off & 4;
12098      off = targ - off;
12099
12100      if (info->emitrelocations)
12101	{
12102	  unsigned int num_rel;
12103	  if (htab->params->power10_stubs != 0)
12104	    num_rel = num_relocs_for_power10_offset (off, odd);
12105	  else
12106	    num_rel = num_relocs_for_offset (off - 8);
12107	  stub_entry->group->stub_sec->reloc_count += num_rel;
12108	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
12109	}
12110
12111      if (htab->params->power10_stubs != 0)
12112	extra = size_power10_offset (off, odd);
12113      else
12114	extra = size_offset (off - 8);
12115      /* Include branch insn plus those in the offset sequence.  */
12116      size += 4 + extra;
12117      /* The branch insn is at the end, or "extra" bytes along.  So
12118	 its offset will be "extra" bytes less that that already
12119	 calculated.  */
12120      off -= extra;
12121
12122      if (htab->params->power10_stubs == 0)
12123	{
12124	  /* After the bcl, lr has been modified so we need to emit
12125	     .eh_frame info saying the return address is in r12.  */
12126	  lr_used = stub_entry->stub_offset + 8;
12127	  if (stub_entry->stub_type == ppc_stub_long_branch_both)
12128	    lr_used += 4;
12129	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
12130	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
12131	     DW_CFA_restore_extended 65.  */
12132	  delta = lr_used - stub_entry->group->lr_restore;
12133	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12134	  stub_entry->group->lr_restore = lr_used + 8;
12135	}
12136
12137      /* If the branch can't reach, use a plt_branch.  */
12138      if (off + (1 << 25) >= (bfd_vma) (1 << 26))
12139	{
12140	  stub_entry->stub_type += (ppc_stub_plt_branch_notoc
12141				    - ppc_stub_long_branch_notoc);
12142	  size += 4;
12143	}
12144      else if (info->emitrelocations)
12145	stub_entry->group->stub_sec->reloc_count +=1;
12146      break;
12147
12148    case ppc_stub_plt_call_notoc:
12149    case ppc_stub_plt_call_both:
12150      off = (stub_entry->stub_offset
12151	     + stub_entry->group->stub_sec->output_offset
12152	     + stub_entry->group->stub_sec->output_section->vma);
12153      if (stub_entry->stub_type == ppc_stub_plt_call_both)
12154	off += 4;
12155      targ = stub_entry->plt_ent->plt.offset & ~1;
12156      if (targ >= (bfd_vma) -2)
12157	abort ();
12158
12159      plt = htab->elf.splt;
12160      if (!htab->elf.dynamic_sections_created
12161	  || stub_entry->h == NULL
12162	  || stub_entry->h->elf.dynindx == -1)
12163	{
12164	  if (stub_entry->symtype == STT_GNU_IFUNC)
12165	    plt = htab->elf.iplt;
12166	  else
12167	    plt = htab->pltlocal;
12168	}
12169      targ += plt->output_offset + plt->output_section->vma;
12170      odd = off & 4;
12171      off = targ - off;
12172
12173      if (htab->params->plt_stub_align != 0)
12174	{
12175	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
12176
12177	  stub_entry->group->stub_sec->size += pad;
12178	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
12179	  off -= pad;
12180	}
12181
12182      if (info->emitrelocations)
12183	{
12184	  unsigned int num_rel;
12185	  if (htab->params->power10_stubs != 0)
12186	    num_rel = num_relocs_for_power10_offset (off, odd);
12187	  else
12188	    num_rel = num_relocs_for_offset (off - 8);
12189	  stub_entry->group->stub_sec->reloc_count += num_rel;
12190	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
12191	}
12192
12193      size = plt_stub_size (htab, stub_entry, off);
12194
12195      if (htab->params->power10_stubs == 0)
12196	{
12197	  /* After the bcl, lr has been modified so we need to emit
12198	     .eh_frame info saying the return address is in r12.  */
12199	  lr_used = stub_entry->stub_offset + 8;
12200	  if (stub_entry->stub_type == ppc_stub_plt_call_both)
12201	    lr_used += 4;
12202	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
12203	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
12204	     DW_CFA_restore_extended 65.  */
12205	  delta = lr_used - stub_entry->group->lr_restore;
12206	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12207	  stub_entry->group->lr_restore = lr_used + 8;
12208	}
12209      break;
12210
12211    case ppc_stub_plt_call:
12212    case ppc_stub_plt_call_r2save:
12213      targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
12214      if (targ >= (bfd_vma) -2)
12215	abort ();
12216      plt = htab->elf.splt;
12217      if (!htab->elf.dynamic_sections_created
12218	  || stub_entry->h == NULL
12219	  || stub_entry->h->elf.dynindx == -1)
12220	{
12221	  if (stub_entry->symtype == STT_GNU_IFUNC)
12222	    plt = htab->elf.iplt;
12223	  else
12224	    plt = htab->pltlocal;
12225	}
12226      targ += plt->output_offset + plt->output_section->vma;
12227
12228      off = (elf_gp (info->output_bfd)
12229	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
12230      off = targ - off;
12231
12232      if (htab->params->plt_stub_align != 0)
12233	{
12234	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
12235
12236	  stub_entry->group->stub_sec->size += pad;
12237	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
12238	}
12239
12240      if (info->emitrelocations)
12241	{
12242	  stub_entry->group->stub_sec->reloc_count
12243	    += ((PPC_HA (off) != 0)
12244		+ (htab->opd_abi
12245		   ? 2 + (htab->params->plt_static_chain
12246			  && PPC_HA (off + 16) == PPC_HA (off))
12247		   : 1));
12248	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
12249	}
12250
12251      size = plt_stub_size (htab, stub_entry, off);
12252
12253      if (stub_entry->h != NULL
12254	  && is_tls_get_addr (&stub_entry->h->elf, htab)
12255	  && htab->params->tls_get_addr_opt
12256	  && stub_entry->stub_type == ppc_stub_plt_call_r2save)
12257	{
12258	  if (htab->params->no_tls_get_addr_regsave)
12259	    {
12260	      lr_used = stub_entry->stub_offset + size - 20;
12261	      /* The eh_frame info will consist of a DW_CFA_advance_loc
12262		 or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
12263		 DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
12264	      delta = lr_used - stub_entry->group->lr_restore;
12265	      stub_entry->group->eh_size += eh_advance_size (delta) + 6;
12266	    }
12267	  else
12268	    {
12269	      /* Adjustments to r1 need to be described.  */
12270	      unsigned int cfa_updt = stub_entry->stub_offset + 18 * 4;
12271	      delta = cfa_updt - stub_entry->group->lr_restore;
12272	      stub_entry->group->eh_size += eh_advance_size (delta);
12273	      stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
12274	    }
12275	  stub_entry->group->lr_restore = size - 4;
12276	}
12277      break;
12278
12279    default:
12280      BFD_FAIL ();
12281      return FALSE;
12282    }
12283
12284  stub_entry->group->stub_sec->size += size;
12285  return TRUE;
12286}
12287
12288/* Set up various things so that we can make a list of input sections
12289   for each output section included in the link.  Returns -1 on error,
12290   0 when no stubs will be needed, and 1 on success.  */
12291
12292int
12293ppc64_elf_setup_section_lists (struct bfd_link_info *info)
12294{
12295  unsigned int id;
12296  size_t amt;
12297  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12298
12299  if (htab == NULL)
12300    return -1;
12301
12302  htab->sec_info_arr_size = _bfd_section_id;
12303  amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
12304  htab->sec_info = bfd_zmalloc (amt);
12305  if (htab->sec_info == NULL)
12306    return -1;
12307
12308  /* Set toc_off for com, und, abs and ind sections.  */
12309  for (id = 0; id < 3; id++)
12310    htab->sec_info[id].toc_off = TOC_BASE_OFF;
12311
12312  return 1;
12313}
12314
12315/* Set up for first pass at multitoc partitioning.  */
12316
12317void
12318ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
12319{
12320  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12321
12322  htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
12323  htab->toc_bfd = NULL;
12324  htab->toc_first_sec = NULL;
12325}
12326
12327/* The linker repeatedly calls this function for each TOC input section
12328   and linker generated GOT section.  Group input bfds such that the toc
12329   within a group is less than 64k in size.  */
12330
12331bfd_boolean
12332ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
12333{
12334  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12335  bfd_vma addr, off, limit;
12336
12337  if (htab == NULL)
12338    return FALSE;
12339
12340  if (!htab->second_toc_pass)
12341    {
12342      /* Keep track of the first .toc or .got section for this input bfd.  */
12343      bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
12344
12345      if (new_bfd)
12346	{
12347	  htab->toc_bfd = isec->owner;
12348	  htab->toc_first_sec = isec;
12349	}
12350
12351      addr = isec->output_offset + isec->output_section->vma;
12352      off = addr - htab->toc_curr;
12353      limit = 0x80008000;
12354      if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
12355	limit = 0x10000;
12356      if (off + isec->size > limit)
12357	{
12358	  addr = (htab->toc_first_sec->output_offset
12359		  + htab->toc_first_sec->output_section->vma);
12360	  htab->toc_curr = addr;
12361	  htab->toc_curr &= -TOC_BASE_ALIGN;
12362	}
12363
12364      /* toc_curr is the base address of this toc group.  Set elf_gp
12365	 for the input section to be the offset relative to the
12366	 output toc base plus 0x8000.  Making the input elf_gp an
12367	 offset allows us to move the toc as a whole without
12368	 recalculating input elf_gp.  */
12369      off = htab->toc_curr - elf_gp (info->output_bfd);
12370      off += TOC_BASE_OFF;
12371
12372      /* Die if someone uses a linker script that doesn't keep input
12373	 file .toc and .got together.  */
12374      if (new_bfd
12375	  && elf_gp (isec->owner) != 0
12376	  && elf_gp (isec->owner) != off)
12377	return FALSE;
12378
12379      elf_gp (isec->owner) = off;
12380      return TRUE;
12381    }
12382
12383  /* During the second pass toc_first_sec points to the start of
12384     a toc group, and toc_curr is used to track the old elf_gp.
12385     We use toc_bfd to ensure we only look at each bfd once.  */
12386  if (htab->toc_bfd == isec->owner)
12387    return TRUE;
12388  htab->toc_bfd = isec->owner;
12389
12390  if (htab->toc_first_sec == NULL
12391      || htab->toc_curr != elf_gp (isec->owner))
12392    {
12393      htab->toc_curr = elf_gp (isec->owner);
12394      htab->toc_first_sec = isec;
12395    }
12396  addr = (htab->toc_first_sec->output_offset
12397	  + htab->toc_first_sec->output_section->vma);
12398  off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
12399  elf_gp (isec->owner) = off;
12400
12401  return TRUE;
12402}
12403
12404/* Called via elf_link_hash_traverse to merge GOT entries for global
12405   symbol H.  */
12406
12407static bfd_boolean
12408merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12409{
12410  if (h->root.type == bfd_link_hash_indirect)
12411    return TRUE;
12412
12413  merge_got_entries (&h->got.glist);
12414
12415  return TRUE;
12416}
12417
12418/* Called via elf_link_hash_traverse to allocate GOT entries for global
12419   symbol H.  */
12420
12421static bfd_boolean
12422reallocate_got (struct elf_link_hash_entry *h, void *inf)
12423{
12424  struct got_entry *gent;
12425
12426  if (h->root.type == bfd_link_hash_indirect)
12427    return TRUE;
12428
12429  for (gent = h->got.glist; gent != NULL; gent = gent->next)
12430    if (!gent->is_indirect)
12431      allocate_got (h, (struct bfd_link_info *) inf, gent);
12432  return TRUE;
12433}
12434
12435/* Called on the first multitoc pass after the last call to
12436   ppc64_elf_next_toc_section.  This function removes duplicate GOT
12437   entries.  */
12438
12439bfd_boolean
12440ppc64_elf_layout_multitoc (struct bfd_link_info *info)
12441{
12442  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12443  struct bfd *ibfd, *ibfd2;
12444  bfd_boolean done_something;
12445
12446  htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
12447
12448  if (!htab->do_multi_toc)
12449    return FALSE;
12450
12451  /* Merge global sym got entries within a toc group.  */
12452  elf_link_hash_traverse (&htab->elf, merge_global_got, info);
12453
12454  /* And tlsld_got.  */
12455  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12456    {
12457      struct got_entry *ent, *ent2;
12458
12459      if (!is_ppc64_elf (ibfd))
12460	continue;
12461
12462      ent = ppc64_tlsld_got (ibfd);
12463      if (!ent->is_indirect
12464	  && ent->got.offset != (bfd_vma) -1)
12465	{
12466	  for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
12467	    {
12468	      if (!is_ppc64_elf (ibfd2))
12469		continue;
12470
12471	      ent2 = ppc64_tlsld_got (ibfd2);
12472	      if (!ent2->is_indirect
12473		  && ent2->got.offset != (bfd_vma) -1
12474		  && elf_gp (ibfd2) == elf_gp (ibfd))
12475		{
12476		  ent2->is_indirect = TRUE;
12477		  ent2->got.ent = ent;
12478		}
12479	    }
12480	}
12481    }
12482
12483  /* Zap sizes of got sections.  */
12484  htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
12485  htab->elf.irelplt->size -= htab->got_reli_size;
12486  htab->got_reli_size = 0;
12487
12488  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12489    {
12490      asection *got, *relgot;
12491
12492      if (!is_ppc64_elf (ibfd))
12493	continue;
12494
12495      got = ppc64_elf_tdata (ibfd)->got;
12496      if (got != NULL)
12497	{
12498	  got->rawsize = got->size;
12499	  got->size = 0;
12500	  relgot = ppc64_elf_tdata (ibfd)->relgot;
12501	  relgot->rawsize = relgot->size;
12502	  relgot->size = 0;
12503	}
12504    }
12505
12506  /* Now reallocate the got, local syms first.  We don't need to
12507     allocate section contents again since we never increase size.  */
12508  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12509    {
12510      struct got_entry **lgot_ents;
12511      struct got_entry **end_lgot_ents;
12512      struct plt_entry **local_plt;
12513      struct plt_entry **end_local_plt;
12514      unsigned char *lgot_masks;
12515      bfd_size_type locsymcount;
12516      Elf_Internal_Shdr *symtab_hdr;
12517      asection *s;
12518
12519      if (!is_ppc64_elf (ibfd))
12520	continue;
12521
12522      lgot_ents = elf_local_got_ents (ibfd);
12523      if (!lgot_ents)
12524	continue;
12525
12526      symtab_hdr = &elf_symtab_hdr (ibfd);
12527      locsymcount = symtab_hdr->sh_info;
12528      end_lgot_ents = lgot_ents + locsymcount;
12529      local_plt = (struct plt_entry **) end_lgot_ents;
12530      end_local_plt = local_plt + locsymcount;
12531      lgot_masks = (unsigned char *) end_local_plt;
12532      s = ppc64_elf_tdata (ibfd)->got;
12533      for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
12534	{
12535	  struct got_entry *ent;
12536
12537	  for (ent = *lgot_ents; ent != NULL; ent = ent->next)
12538	    {
12539	      unsigned int ent_size = 8;
12540	      unsigned int rel_size = sizeof (Elf64_External_Rela);
12541
12542	      ent->got.offset = s->size;
12543	      if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
12544		{
12545		  ent_size *= 2;
12546		  rel_size *= 2;
12547		}
12548	      s->size += ent_size;
12549	      if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
12550		{
12551		  htab->elf.irelplt->size += rel_size;
12552		  htab->got_reli_size += rel_size;
12553		}
12554	      else if (bfd_link_pic (info)
12555		       && !(ent->tls_type != 0
12556			    && bfd_link_executable (info)))
12557		{
12558		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12559		  srel->size += rel_size;
12560		}
12561	    }
12562	}
12563    }
12564
12565  elf_link_hash_traverse (&htab->elf, reallocate_got, info);
12566
12567  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12568    {
12569      struct got_entry *ent;
12570
12571      if (!is_ppc64_elf (ibfd))
12572	continue;
12573
12574      ent = ppc64_tlsld_got (ibfd);
12575      if (!ent->is_indirect
12576	  && ent->got.offset != (bfd_vma) -1)
12577	{
12578	  asection *s = ppc64_elf_tdata (ibfd)->got;
12579	  ent->got.offset = s->size;
12580	  s->size += 16;
12581	  if (bfd_link_dll (info))
12582	    {
12583	      asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12584	      srel->size += sizeof (Elf64_External_Rela);
12585	    }
12586	}
12587    }
12588
12589  done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
12590  if (!done_something)
12591    for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12592      {
12593	asection *got;
12594
12595	if (!is_ppc64_elf (ibfd))
12596	  continue;
12597
12598	got = ppc64_elf_tdata (ibfd)->got;
12599	if (got != NULL)
12600	  {
12601	    done_something = got->rawsize != got->size;
12602	    if (done_something)
12603	      break;
12604	  }
12605      }
12606
12607  if (done_something)
12608    (*htab->params->layout_sections_again) ();
12609
12610  /* Set up for second pass over toc sections to recalculate elf_gp
12611     on input sections.  */
12612  htab->toc_bfd = NULL;
12613  htab->toc_first_sec = NULL;
12614  htab->second_toc_pass = TRUE;
12615  return done_something;
12616}
12617
12618/* Called after second pass of multitoc partitioning.  */
12619
12620void
12621ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
12622{
12623  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12624
12625  /* After the second pass, toc_curr tracks the TOC offset used
12626     for code sections below in ppc64_elf_next_input_section.  */
12627  htab->toc_curr = TOC_BASE_OFF;
12628}
12629
12630/* No toc references were found in ISEC.  If the code in ISEC makes no
12631   calls, then there's no need to use toc adjusting stubs when branching
12632   into ISEC.  Actually, indirect calls from ISEC are OK as they will
12633   load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
12634   needed, and 2 if a cyclical call-graph was found but no other reason
12635   for a stub was detected.  If called from the top level, a return of
12636   2 means the same as a return of 0.  */
12637
12638static int
12639toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
12640{
12641  int ret;
12642
12643  /* Mark this section as checked.  */
12644  isec->call_check_done = 1;
12645
12646  /* We know none of our code bearing sections will need toc stubs.  */
12647  if ((isec->flags & SEC_LINKER_CREATED) != 0)
12648    return 0;
12649
12650  if (isec->size == 0)
12651    return 0;
12652
12653  if (isec->output_section == NULL)
12654    return 0;
12655
12656  ret = 0;
12657  if (isec->reloc_count != 0)
12658    {
12659      Elf_Internal_Rela *relstart, *rel;
12660      Elf_Internal_Sym *local_syms;
12661      struct ppc_link_hash_table *htab;
12662
12663      relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
12664					    info->keep_memory);
12665      if (relstart == NULL)
12666	return -1;
12667
12668      /* Look for branches to outside of this section.  */
12669      local_syms = NULL;
12670      htab = ppc_hash_table (info);
12671      if (htab == NULL)
12672	return -1;
12673
12674      for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
12675	{
12676	  enum elf_ppc64_reloc_type r_type;
12677	  unsigned long r_symndx;
12678	  struct elf_link_hash_entry *h;
12679	  struct ppc_link_hash_entry *eh;
12680	  Elf_Internal_Sym *sym;
12681	  asection *sym_sec;
12682	  struct _opd_sec_data *opd;
12683	  bfd_vma sym_value;
12684	  bfd_vma dest;
12685
12686	  r_type = ELF64_R_TYPE (rel->r_info);
12687	  if (r_type != R_PPC64_REL24
12688	      && r_type != R_PPC64_REL24_NOTOC
12689	      && r_type != R_PPC64_REL14
12690	      && r_type != R_PPC64_REL14_BRTAKEN
12691	      && r_type != R_PPC64_REL14_BRNTAKEN
12692	      && r_type != R_PPC64_PLTCALL
12693	      && r_type != R_PPC64_PLTCALL_NOTOC)
12694	    continue;
12695
12696	  r_symndx = ELF64_R_SYM (rel->r_info);
12697	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
12698			  isec->owner))
12699	    {
12700	      ret = -1;
12701	      break;
12702	    }
12703
12704	  /* Calls to dynamic lib functions go through a plt call stub
12705	     that uses r2.  */
12706	  eh = ppc_elf_hash_entry (h);
12707	  if (eh != NULL
12708	      && (eh->elf.plt.plist != NULL
12709		  || (eh->oh != NULL
12710		      && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
12711	    {
12712	      ret = 1;
12713	      break;
12714	    }
12715
12716	  if (sym_sec == NULL)
12717	    /* Ignore other undefined symbols.  */
12718	    continue;
12719
12720	  /* Assume branches to other sections not included in the
12721	     link need stubs too, to cover -R and absolute syms.  */
12722	  if (sym_sec->output_section == NULL)
12723	    {
12724	      ret = 1;
12725	      break;
12726	    }
12727
12728	  if (h == NULL)
12729	    sym_value = sym->st_value;
12730	  else
12731	    {
12732	      if (h->root.type != bfd_link_hash_defined
12733		  && h->root.type != bfd_link_hash_defweak)
12734		abort ();
12735	      sym_value = h->root.u.def.value;
12736	    }
12737	  sym_value += rel->r_addend;
12738
12739	  /* If this branch reloc uses an opd sym, find the code section.  */
12740	  opd = get_opd_info (sym_sec);
12741	  if (opd != NULL)
12742	    {
12743	      if (h == NULL && opd->adjust != NULL)
12744		{
12745		  long adjust;
12746
12747		  adjust = opd->adjust[OPD_NDX (sym_value)];
12748		  if (adjust == -1)
12749		    /* Assume deleted functions won't ever be called.  */
12750		    continue;
12751		  sym_value += adjust;
12752		}
12753
12754	      dest = opd_entry_value (sym_sec, sym_value,
12755				      &sym_sec, NULL, FALSE);
12756	      if (dest == (bfd_vma) -1)
12757		continue;
12758	    }
12759	  else
12760	    dest = (sym_value
12761		    + sym_sec->output_offset
12762		    + sym_sec->output_section->vma);
12763
12764	  /* Ignore branch to self.  */
12765	  if (sym_sec == isec)
12766	    continue;
12767
12768	  /* If the called function uses the toc, we need a stub.  */
12769	  if (sym_sec->has_toc_reloc
12770	      || sym_sec->makes_toc_func_call)
12771	    {
12772	      ret = 1;
12773	      break;
12774	    }
12775
12776	  /* Assume any branch that needs a long branch stub might in fact
12777	     need a plt_branch stub.  A plt_branch stub uses r2.  */
12778	  else if (dest - (isec->output_offset
12779			   + isec->output_section->vma
12780			   + rel->r_offset) + (1 << 25)
12781		   >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
12782							     ? h->other
12783							     : sym->st_other))
12784	    {
12785	      ret = 1;
12786	      break;
12787	    }
12788
12789	  /* If calling back to a section in the process of being
12790	     tested, we can't say for sure that no toc adjusting stubs
12791	     are needed, so don't return zero.  */
12792	  else if (sym_sec->call_check_in_progress)
12793	    ret = 2;
12794
12795	  /* Branches to another section that itself doesn't have any TOC
12796	     references are OK.  Recursively call ourselves to check.  */
12797	  else if (!sym_sec->call_check_done)
12798	    {
12799	      int recur;
12800
12801	      /* Mark current section as indeterminate, so that other
12802		 sections that call back to current won't be marked as
12803		 known.  */
12804	      isec->call_check_in_progress = 1;
12805	      recur = toc_adjusting_stub_needed (info, sym_sec);
12806	      isec->call_check_in_progress = 0;
12807
12808	      if (recur != 0)
12809		{
12810		  ret = recur;
12811		  if (recur != 2)
12812		    break;
12813		}
12814	    }
12815	}
12816
12817      if (elf_symtab_hdr (isec->owner).contents
12818	  != (unsigned char *) local_syms)
12819	free (local_syms);
12820      if (elf_section_data (isec)->relocs != relstart)
12821	free (relstart);
12822    }
12823
12824  if ((ret & 1) == 0
12825      && isec->map_head.s != NULL
12826      && (strcmp (isec->output_section->name, ".init") == 0
12827	  || strcmp (isec->output_section->name, ".fini") == 0))
12828    {
12829      if (isec->map_head.s->has_toc_reloc
12830	  || isec->map_head.s->makes_toc_func_call)
12831	ret = 1;
12832      else if (!isec->map_head.s->call_check_done)
12833	{
12834	  int recur;
12835	  isec->call_check_in_progress = 1;
12836	  recur = toc_adjusting_stub_needed (info, isec->map_head.s);
12837	  isec->call_check_in_progress = 0;
12838	  if (recur != 0)
12839	    ret = recur;
12840	}
12841    }
12842
12843  if (ret == 1)
12844    isec->makes_toc_func_call = 1;
12845
12846  return ret;
12847}
12848
12849/* The linker repeatedly calls this function for each input section,
12850   in the order that input sections are linked into output sections.
12851   Build lists of input sections to determine groupings between which
12852   we may insert linker stubs.  */
12853
12854bfd_boolean
12855ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12856{
12857  struct ppc_link_hash_table *htab = ppc_hash_table (info);
12858
12859  if (htab == NULL)
12860    return FALSE;
12861
12862  if ((isec->output_section->flags & SEC_CODE) != 0
12863      && isec->output_section->id < htab->sec_info_arr_size)
12864    {
12865      /* This happens to make the list in reverse order,
12866	 which is what we want.  */
12867      htab->sec_info[isec->id].u.list
12868	= htab->sec_info[isec->output_section->id].u.list;
12869      htab->sec_info[isec->output_section->id].u.list = isec;
12870    }
12871
12872  if (htab->multi_toc_needed)
12873    {
12874      /* Analyse sections that aren't already flagged as needing a
12875	 valid toc pointer.  Exclude .fixup for the linux kernel.
12876	 .fixup contains branches, but only back to the function that
12877	 hit an exception.  */
12878      if (!(isec->has_toc_reloc
12879	    || (isec->flags & SEC_CODE) == 0
12880	    || strcmp (isec->name, ".fixup") == 0
12881	    || isec->call_check_done))
12882	{
12883	  if (toc_adjusting_stub_needed (info, isec) < 0)
12884	    return FALSE;
12885	}
12886      /* Make all sections use the TOC assigned for this object file.
12887	 This will be wrong for pasted sections;  We fix that in
12888	 check_pasted_section().  */
12889      if (elf_gp (isec->owner) != 0)
12890	htab->toc_curr = elf_gp (isec->owner);
12891    }
12892
12893  htab->sec_info[isec->id].toc_off = htab->toc_curr;
12894  return TRUE;
12895}
12896
12897/* Check that all .init and .fini sections use the same toc, if they
12898   have toc relocs.  */
12899
12900static bfd_boolean
12901check_pasted_section (struct bfd_link_info *info, const char *name)
12902{
12903  asection *o = bfd_get_section_by_name (info->output_bfd, name);
12904
12905  if (o != NULL)
12906    {
12907      struct ppc_link_hash_table *htab = ppc_hash_table (info);
12908      bfd_vma toc_off = 0;
12909      asection *i;
12910
12911      for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12912	if (i->has_toc_reloc)
12913	  {
12914	    if (toc_off == 0)
12915	      toc_off = htab->sec_info[i->id].toc_off;
12916	    else if (toc_off != htab->sec_info[i->id].toc_off)
12917	      return FALSE;
12918	  }
12919
12920      if (toc_off == 0)
12921	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12922	  if (i->makes_toc_func_call)
12923	    {
12924	      toc_off = htab->sec_info[i->id].toc_off;
12925	      break;
12926	    }
12927
12928      /* Make sure the whole pasted function uses the same toc offset.  */
12929      if (toc_off != 0)
12930	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12931	  htab->sec_info[i->id].toc_off = toc_off;
12932    }
12933  return TRUE;
12934}
12935
12936bfd_boolean
12937ppc64_elf_check_init_fini (struct bfd_link_info *info)
12938{
12939  return (check_pasted_section (info, ".init")
12940	  & check_pasted_section (info, ".fini"));
12941}
12942
12943/* See whether we can group stub sections together.  Grouping stub
12944   sections may result in fewer stubs.  More importantly, we need to
12945   put all .init* and .fini* stubs at the beginning of the .init or
12946   .fini output sections respectively, because glibc splits the
12947   _init and _fini functions into multiple parts.  Putting a stub in
12948   the middle of a function is not a good idea.  */
12949
12950static bfd_boolean
12951group_sections (struct bfd_link_info *info,
12952		bfd_size_type stub_group_size,
12953		bfd_boolean stubs_always_before_branch)
12954{
12955  struct ppc_link_hash_table *htab;
12956  asection *osec;
12957  bfd_boolean suppress_size_errors;
12958
12959  htab = ppc_hash_table (info);
12960  if (htab == NULL)
12961    return FALSE;
12962
12963  suppress_size_errors = FALSE;
12964  if (stub_group_size == 1)
12965    {
12966      /* Default values.  */
12967      if (stubs_always_before_branch)
12968	stub_group_size = 0x1e00000;
12969      else
12970	stub_group_size = 0x1c00000;
12971      suppress_size_errors = TRUE;
12972    }
12973
12974  for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12975    {
12976      asection *tail;
12977
12978      if (osec->id >= htab->sec_info_arr_size)
12979	continue;
12980
12981      tail = htab->sec_info[osec->id].u.list;
12982      while (tail != NULL)
12983	{
12984	  asection *curr;
12985	  asection *prev;
12986	  bfd_size_type total;
12987	  bfd_boolean big_sec;
12988	  bfd_vma curr_toc;
12989	  struct map_stub *group;
12990	  bfd_size_type group_size;
12991
12992	  curr = tail;
12993	  total = tail->size;
12994	  group_size = (ppc64_elf_section_data (tail) != NULL
12995			&& ppc64_elf_section_data (tail)->has_14bit_branch
12996			? stub_group_size >> 10 : stub_group_size);
12997
12998	  big_sec = total > group_size;
12999	  if (big_sec && !suppress_size_errors)
13000	    /* xgettext:c-format */
13001	    _bfd_error_handler (_("%pB section %pA exceeds stub group size"),
13002				tail->owner, tail);
13003	  curr_toc = htab->sec_info[tail->id].toc_off;
13004
13005	  while ((prev = htab->sec_info[curr->id].u.list) != NULL
13006		 && ((total += curr->output_offset - prev->output_offset)
13007		     < (ppc64_elf_section_data (prev) != NULL
13008			&& ppc64_elf_section_data (prev)->has_14bit_branch
13009			? (group_size = stub_group_size >> 10) : group_size))
13010		 && htab->sec_info[prev->id].toc_off == curr_toc)
13011	    curr = prev;
13012
13013	  /* OK, the size from the start of CURR to the end is less
13014	     than group_size and thus can be handled by one stub
13015	     section.  (or the tail section is itself larger than
13016	     group_size, in which case we may be toast.)  We should
13017	     really be keeping track of the total size of stubs added
13018	     here, as stubs contribute to the final output section
13019	     size.  That's a little tricky, and this way will only
13020	     break if stubs added make the total size more than 2^25,
13021	     ie. for the default stub_group_size, if stubs total more
13022	     than 2097152 bytes, or nearly 75000 plt call stubs.  */
13023	  group = bfd_alloc (curr->owner, sizeof (*group));
13024	  if (group == NULL)
13025	    return FALSE;
13026	  group->link_sec = curr;
13027	  group->stub_sec = NULL;
13028	  group->needs_save_res = 0;
13029	  group->lr_restore = 0;
13030	  group->eh_size = 0;
13031	  group->eh_base = 0;
13032	  group->next = htab->group;
13033	  htab->group = group;
13034	  do
13035	    {
13036	      prev = htab->sec_info[tail->id].u.list;
13037	      /* Set up this stub group.  */
13038	      htab->sec_info[tail->id].u.group = group;
13039	    }
13040	  while (tail != curr && (tail = prev) != NULL);
13041
13042	  /* But wait, there's more!  Input sections up to group_size
13043	     bytes before the stub section can be handled by it too.
13044	     Don't do this if we have a really large section after the
13045	     stubs, as adding more stubs increases the chance that
13046	     branches may not reach into the stub section.  */
13047	  if (!stubs_always_before_branch && !big_sec)
13048	    {
13049	      total = 0;
13050	      while (prev != NULL
13051		     && ((total += tail->output_offset - prev->output_offset)
13052			 < (ppc64_elf_section_data (prev) != NULL
13053			    && ppc64_elf_section_data (prev)->has_14bit_branch
13054			    ? (group_size = stub_group_size >> 10)
13055			    : group_size))
13056		     && htab->sec_info[prev->id].toc_off == curr_toc)
13057		{
13058		  tail = prev;
13059		  prev = htab->sec_info[tail->id].u.list;
13060		  htab->sec_info[tail->id].u.group = group;
13061		}
13062	    }
13063	  tail = prev;
13064	}
13065    }
13066  return TRUE;
13067}
13068
13069static const unsigned char glink_eh_frame_cie[] =
13070{
13071  0, 0, 0, 16,				/* length.  */
13072  0, 0, 0, 0,				/* id.  */
13073  1,					/* CIE version.  */
13074  'z', 'R', 0,				/* Augmentation string.  */
13075  4,					/* Code alignment.  */
13076  0x78,					/* Data alignment.  */
13077  65,					/* RA reg.  */
13078  1,					/* Augmentation size.  */
13079  DW_EH_PE_pcrel | DW_EH_PE_sdata4,	/* FDE encoding.  */
13080  DW_CFA_def_cfa, 1, 0			/* def_cfa: r1 offset 0.  */
13081};
13082
13083/* Stripping output sections is normally done before dynamic section
13084   symbols have been allocated.  This function is called later, and
13085   handles cases like htab->brlt which is mapped to its own output
13086   section.  */
13087
13088static void
13089maybe_strip_output (struct bfd_link_info *info, asection *isec)
13090{
13091  if (isec->size == 0
13092      && isec->output_section->size == 0
13093      && !(isec->output_section->flags & SEC_KEEP)
13094      && !bfd_section_removed_from_list (info->output_bfd,
13095					 isec->output_section)
13096      && elf_section_data (isec->output_section)->dynindx == 0)
13097    {
13098      isec->output_section->flags |= SEC_EXCLUDE;
13099      bfd_section_list_remove (info->output_bfd, isec->output_section);
13100      info->output_bfd->section_count--;
13101    }
13102}
13103
13104/* Determine and set the size of the stub section for a final link.
13105
13106   The basic idea here is to examine all the relocations looking for
13107   PC-relative calls to a target that is unreachable with a "bl"
13108   instruction.  */
13109
13110bfd_boolean
13111ppc64_elf_size_stubs (struct bfd_link_info *info)
13112{
13113  bfd_size_type stub_group_size;
13114  bfd_boolean stubs_always_before_branch;
13115  struct ppc_link_hash_table *htab = ppc_hash_table (info);
13116
13117  if (htab == NULL)
13118    return FALSE;
13119
13120  if (htab->params->power10_stubs == -1 && !htab->has_power10_relocs)
13121    htab->params->power10_stubs = 0;
13122
13123  if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
13124    htab->params->plt_thread_safe = 1;
13125  if (!htab->opd_abi)
13126    htab->params->plt_thread_safe = 0;
13127  else if (htab->params->plt_thread_safe == -1)
13128    {
13129      static const char *const thread_starter[] =
13130	{
13131	  "pthread_create",
13132	  /* libstdc++ */
13133	  "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
13134	  /* librt */
13135	  "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
13136	  "mq_notify", "create_timer",
13137	  /* libanl */
13138	  "getaddrinfo_a",
13139	  /* libgomp */
13140	  "GOMP_parallel",
13141	  "GOMP_parallel_start",
13142	  "GOMP_parallel_loop_static",
13143	  "GOMP_parallel_loop_static_start",
13144	  "GOMP_parallel_loop_dynamic",
13145	  "GOMP_parallel_loop_dynamic_start",
13146	  "GOMP_parallel_loop_guided",
13147	  "GOMP_parallel_loop_guided_start",
13148	  "GOMP_parallel_loop_runtime",
13149	  "GOMP_parallel_loop_runtime_start",
13150	  "GOMP_parallel_sections",
13151	  "GOMP_parallel_sections_start",
13152	  /* libgo */
13153	  "__go_go",
13154	};
13155      unsigned i;
13156
13157      for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
13158	{
13159	  struct elf_link_hash_entry *h;
13160	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
13161				    FALSE, FALSE, TRUE);
13162	  htab->params->plt_thread_safe = h != NULL && h->ref_regular;
13163	  if (htab->params->plt_thread_safe)
13164	    break;
13165	}
13166    }
13167  stubs_always_before_branch = htab->params->group_size < 0;
13168  if (htab->params->group_size < 0)
13169    stub_group_size = -htab->params->group_size;
13170  else
13171    stub_group_size = htab->params->group_size;
13172
13173  if (!group_sections (info, stub_group_size, stubs_always_before_branch))
13174    return FALSE;
13175
13176  htab->tga_group = NULL;
13177  if (!htab->params->no_tls_get_addr_regsave
13178      && htab->tga_desc_fd != NULL
13179      && (htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefined
13180	  || htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefweak)
13181      && htab->tls_get_addr_fd != NULL
13182      && is_static_defined (&htab->tls_get_addr_fd->elf))
13183    {
13184      asection *sym_sec, *code_sec, *stub_sec;
13185      bfd_vma sym_value;
13186      struct _opd_sec_data *opd;
13187
13188      sym_sec = htab->tls_get_addr_fd->elf.root.u.def.section;
13189      sym_value = defined_sym_val (&htab->tls_get_addr_fd->elf);
13190      code_sec = sym_sec;
13191      opd = get_opd_info (sym_sec);
13192      if (opd != NULL)
13193	opd_entry_value (sym_sec, sym_value, &code_sec, NULL, FALSE);
13194      htab->tga_group = htab->sec_info[code_sec->id].u.group;
13195      stub_sec = (*htab->params->add_stub_section) (".tga_desc.stub",
13196						    htab->tga_group->link_sec);
13197      if (stub_sec == NULL)
13198	return FALSE;
13199      htab->tga_group->stub_sec = stub_sec;
13200
13201      htab->tga_desc_fd->elf.root.type = bfd_link_hash_defined;
13202      htab->tga_desc_fd->elf.root.u.def.section = stub_sec;
13203      htab->tga_desc_fd->elf.root.u.def.value = 0;
13204      htab->tga_desc_fd->elf.type = STT_FUNC;
13205      htab->tga_desc_fd->elf.def_regular = 1;
13206      htab->tga_desc_fd->elf.non_elf = 0;
13207      _bfd_elf_link_hash_hide_symbol (info, &htab->tga_desc_fd->elf, TRUE);
13208    }
13209
13210#define STUB_SHRINK_ITER 20
13211  /* Loop until no stubs added.  After iteration 20 of this loop we may
13212     exit on a stub section shrinking.  This is to break out of a
13213     pathological case where adding stubs on one iteration decreases
13214     section gaps (perhaps due to alignment), which then requires
13215     fewer or smaller stubs on the next iteration.  */
13216
13217  while (1)
13218    {
13219      bfd *input_bfd;
13220      unsigned int bfd_indx;
13221      struct map_stub *group;
13222
13223      htab->stub_iteration += 1;
13224
13225      for (input_bfd = info->input_bfds, bfd_indx = 0;
13226	   input_bfd != NULL;
13227	   input_bfd = input_bfd->link.next, bfd_indx++)
13228	{
13229	  Elf_Internal_Shdr *symtab_hdr;
13230	  asection *section;
13231	  Elf_Internal_Sym *local_syms = NULL;
13232
13233	  if (!is_ppc64_elf (input_bfd))
13234	    continue;
13235
13236	  /* We'll need the symbol table in a second.  */
13237	  symtab_hdr = &elf_symtab_hdr (input_bfd);
13238	  if (symtab_hdr->sh_info == 0)
13239	    continue;
13240
13241	  /* Walk over each section attached to the input bfd.  */
13242	  for (section = input_bfd->sections;
13243	       section != NULL;
13244	       section = section->next)
13245	    {
13246	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
13247
13248	      /* If there aren't any relocs, then there's nothing more
13249		 to do.  */
13250	      if ((section->flags & SEC_RELOC) == 0
13251		  || (section->flags & SEC_ALLOC) == 0
13252		  || (section->flags & SEC_LOAD) == 0
13253		  || (section->flags & SEC_CODE) == 0
13254		  || section->reloc_count == 0)
13255		continue;
13256
13257	      /* If this section is a link-once section that will be
13258		 discarded, then don't create any stubs.  */
13259	      if (section->output_section == NULL
13260		  || section->output_section->owner != info->output_bfd)
13261		continue;
13262
13263	      /* Get the relocs.  */
13264	      internal_relocs
13265		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
13266					     info->keep_memory);
13267	      if (internal_relocs == NULL)
13268		goto error_ret_free_local;
13269
13270	      /* Now examine each relocation.  */
13271	      irela = internal_relocs;
13272	      irelaend = irela + section->reloc_count;
13273	      for (; irela < irelaend; irela++)
13274		{
13275		  enum elf_ppc64_reloc_type r_type;
13276		  unsigned int r_indx;
13277		  enum ppc_stub_type stub_type;
13278		  struct ppc_stub_hash_entry *stub_entry;
13279		  asection *sym_sec, *code_sec;
13280		  bfd_vma sym_value, code_value;
13281		  bfd_vma destination;
13282		  unsigned long local_off;
13283		  bfd_boolean ok_dest;
13284		  struct ppc_link_hash_entry *hash;
13285		  struct ppc_link_hash_entry *fdh;
13286		  struct elf_link_hash_entry *h;
13287		  Elf_Internal_Sym *sym;
13288		  char *stub_name;
13289		  const asection *id_sec;
13290		  struct _opd_sec_data *opd;
13291		  struct plt_entry *plt_ent;
13292
13293		  r_type = ELF64_R_TYPE (irela->r_info);
13294		  r_indx = ELF64_R_SYM (irela->r_info);
13295
13296		  if (r_type >= R_PPC64_max)
13297		    {
13298		      bfd_set_error (bfd_error_bad_value);
13299		      goto error_ret_free_internal;
13300		    }
13301
13302		  /* Only look for stubs on branch instructions.  */
13303		  if (r_type != R_PPC64_REL24
13304		      && r_type != R_PPC64_REL24_NOTOC
13305		      && r_type != R_PPC64_REL14
13306		      && r_type != R_PPC64_REL14_BRTAKEN
13307		      && r_type != R_PPC64_REL14_BRNTAKEN)
13308		    continue;
13309
13310		  /* Now determine the call target, its name, value,
13311		     section.  */
13312		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
13313				  r_indx, input_bfd))
13314		    goto error_ret_free_internal;
13315		  hash = ppc_elf_hash_entry (h);
13316
13317		  ok_dest = FALSE;
13318		  fdh = NULL;
13319		  sym_value = 0;
13320		  if (hash == NULL)
13321		    {
13322		      sym_value = sym->st_value;
13323		      if (sym_sec != NULL
13324			  && sym_sec->output_section != NULL)
13325			ok_dest = TRUE;
13326		    }
13327		  else if (hash->elf.root.type == bfd_link_hash_defined
13328			   || hash->elf.root.type == bfd_link_hash_defweak)
13329		    {
13330		      sym_value = hash->elf.root.u.def.value;
13331		      if (sym_sec->output_section != NULL)
13332			ok_dest = TRUE;
13333		    }
13334		  else if (hash->elf.root.type == bfd_link_hash_undefweak
13335			   || hash->elf.root.type == bfd_link_hash_undefined)
13336		    {
13337		      /* Recognise an old ABI func code entry sym, and
13338			 use the func descriptor sym instead if it is
13339			 defined.  */
13340		      if (hash->elf.root.root.string[0] == '.'
13341			  && hash->oh != NULL)
13342			{
13343			  fdh = ppc_follow_link (hash->oh);
13344			  if (fdh->elf.root.type == bfd_link_hash_defined
13345			      || fdh->elf.root.type == bfd_link_hash_defweak)
13346			    {
13347			      sym_sec = fdh->elf.root.u.def.section;
13348			      sym_value = fdh->elf.root.u.def.value;
13349			      if (sym_sec->output_section != NULL)
13350				ok_dest = TRUE;
13351			    }
13352			  else
13353			    fdh = NULL;
13354			}
13355		    }
13356		  else
13357		    {
13358		      bfd_set_error (bfd_error_bad_value);
13359		      goto error_ret_free_internal;
13360		    }
13361
13362		  destination = 0;
13363		  local_off = 0;
13364		  if (ok_dest)
13365		    {
13366		      sym_value += irela->r_addend;
13367		      destination = (sym_value
13368				     + sym_sec->output_offset
13369				     + sym_sec->output_section->vma);
13370		      local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
13371							    ? hash->elf.other
13372							    : sym->st_other);
13373		    }
13374
13375		  code_sec = sym_sec;
13376		  code_value = sym_value;
13377		  opd = get_opd_info (sym_sec);
13378		  if (opd != NULL)
13379		    {
13380		      bfd_vma dest;
13381
13382		      if (hash == NULL && opd->adjust != NULL)
13383			{
13384			  long adjust = opd->adjust[OPD_NDX (sym_value)];
13385			  if (adjust == -1)
13386			    continue;
13387			  code_value += adjust;
13388			  sym_value += adjust;
13389			}
13390		      dest = opd_entry_value (sym_sec, sym_value,
13391					      &code_sec, &code_value, FALSE);
13392		      if (dest != (bfd_vma) -1)
13393			{
13394			  destination = dest;
13395			  if (fdh != NULL)
13396			    {
13397			      /* Fixup old ABI sym to point at code
13398				 entry.  */
13399			      hash->elf.root.type = bfd_link_hash_defweak;
13400			      hash->elf.root.u.def.section = code_sec;
13401			      hash->elf.root.u.def.value = code_value;
13402			    }
13403			}
13404		    }
13405
13406		  /* Determine what (if any) linker stub is needed.  */
13407		  plt_ent = NULL;
13408		  stub_type = ppc_type_of_stub (section, irela, &hash,
13409						&plt_ent, destination,
13410						local_off);
13411
13412		  if (r_type == R_PPC64_REL24_NOTOC)
13413		    {
13414		      if (stub_type == ppc_stub_plt_call)
13415			stub_type = ppc_stub_plt_call_notoc;
13416		      else if (stub_type == ppc_stub_long_branch
13417			       || (code_sec != NULL
13418				   && code_sec->output_section != NULL
13419				   && (((hash ? hash->elf.other : sym->st_other)
13420					& STO_PPC64_LOCAL_MASK)
13421				       > 1 << STO_PPC64_LOCAL_BIT)))
13422			stub_type = ppc_stub_long_branch_notoc;
13423		    }
13424		  else if (stub_type != ppc_stub_plt_call)
13425		    {
13426		      /* Check whether we need a TOC adjusting stub.
13427			 Since the linker pastes together pieces from
13428			 different object files when creating the
13429			 _init and _fini functions, it may be that a
13430			 call to what looks like a local sym is in
13431			 fact a call needing a TOC adjustment.  */
13432		      if ((code_sec != NULL
13433			   && code_sec->output_section != NULL
13434			   && (code_sec->has_toc_reloc
13435			       || code_sec->makes_toc_func_call)
13436			   && (htab->sec_info[code_sec->id].toc_off
13437			       != htab->sec_info[section->id].toc_off))
13438			  || (((hash ? hash->elf.other : sym->st_other)
13439			       & STO_PPC64_LOCAL_MASK)
13440			      == 1 << STO_PPC64_LOCAL_BIT))
13441			stub_type = ppc_stub_long_branch_r2off;
13442		    }
13443
13444		  if (stub_type == ppc_stub_none)
13445		    continue;
13446
13447		  /* __tls_get_addr calls might be eliminated.  */
13448		  if (stub_type != ppc_stub_plt_call
13449		      && stub_type != ppc_stub_plt_call_notoc
13450		      && hash != NULL
13451		      && is_tls_get_addr (&hash->elf, htab)
13452		      && section->has_tls_reloc
13453		      && irela != internal_relocs)
13454		    {
13455		      /* Get tls info.  */
13456		      unsigned char *tls_mask;
13457
13458		      if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
13459					 irela - 1, input_bfd))
13460			goto error_ret_free_internal;
13461		      if ((*tls_mask & TLS_TLS) != 0
13462			  && (*tls_mask & (TLS_GD | TLS_LD)) == 0)
13463			continue;
13464		    }
13465
13466		  if (stub_type == ppc_stub_plt_call)
13467		    {
13468		      if (!htab->opd_abi
13469			  && htab->params->plt_localentry0 != 0
13470			  && is_elfv2_localentry0 (&hash->elf))
13471			htab->has_plt_localentry0 = 1;
13472		      else if (irela + 1 < irelaend
13473			       && irela[1].r_offset == irela->r_offset + 4
13474			       && (ELF64_R_TYPE (irela[1].r_info)
13475				   == R_PPC64_TOCSAVE))
13476			{
13477			  if (!tocsave_find (htab, INSERT,
13478					     &local_syms, irela + 1, input_bfd))
13479			    goto error_ret_free_internal;
13480			}
13481		      else
13482			stub_type = ppc_stub_plt_call_r2save;
13483		    }
13484
13485		  /* Support for grouping stub sections.  */
13486		  id_sec = htab->sec_info[section->id].u.group->link_sec;
13487
13488		  /* Get the name of this stub.  */
13489		  stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
13490		  if (!stub_name)
13491		    goto error_ret_free_internal;
13492
13493		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
13494						     stub_name, FALSE, FALSE);
13495		  if (stub_entry != NULL)
13496		    {
13497		      enum ppc_stub_type old_type;
13498
13499		      /* A stub has already been created, but it may
13500			 not be the required type.  We shouldn't be
13501			 transitioning from plt_call to long_branch
13502			 stubs or vice versa, but we might be
13503			 upgrading from plt_call to plt_call_r2save or
13504			 from long_branch to long_branch_r2off.  */
13505		      free (stub_name);
13506		      if (htab->params->power10_stubs == -1)
13507			{
13508			  /* For --power10-stubs=auto, don't merge _notoc
13509			     and other varieties of stubs.  (The _both
13510			     variety won't be created.)  */
13511			  bfd_boolean notoc = r_type == R_PPC64_REL24_NOTOC;
13512			  struct ppc_stub_hash_entry *alt_stub
13513			    = select_alt_stub (stub_entry, notoc);
13514
13515			  if (alt_stub == NULL)
13516			    {
13517			      alt_stub = (struct ppc_stub_hash_entry *)
13518				stub_hash_newfunc (NULL,
13519						   &htab->stub_hash_table,
13520						   stub_entry->root.string);
13521			      if (alt_stub == NULL)
13522				{
13523				  /* xgettext:c-format */
13524				  _bfd_error_handler
13525				    (_("%pB: cannot create stub entry %s"),
13526				     section->owner, stub_entry->root.string);
13527				  goto error_ret_free_internal;
13528				}
13529			      *alt_stub = *stub_entry;
13530			      stub_entry->root.next = &alt_stub->root;
13531			      if (notoc)
13532				/* Sort notoc stubs first, for no good
13533				   reason.  */
13534				alt_stub = stub_entry;
13535			      alt_stub->stub_type = stub_type;
13536			    }
13537			  stub_entry = alt_stub;
13538			}
13539		      old_type = stub_entry->stub_type;
13540		      switch (old_type)
13541			{
13542			default:
13543			  abort ();
13544
13545			case ppc_stub_save_res:
13546			  continue;
13547
13548			case ppc_stub_plt_call:
13549			case ppc_stub_plt_call_r2save:
13550			case ppc_stub_plt_call_notoc:
13551			case ppc_stub_plt_call_both:
13552			  if (stub_type == ppc_stub_plt_call)
13553			    continue;
13554			  else if (stub_type == ppc_stub_plt_call_r2save)
13555			    {
13556			      if (old_type == ppc_stub_plt_call_notoc)
13557				stub_type = ppc_stub_plt_call_both;
13558			    }
13559			  else if (stub_type == ppc_stub_plt_call_notoc)
13560			    {
13561			      if (old_type == ppc_stub_plt_call_r2save)
13562				stub_type = ppc_stub_plt_call_both;
13563			    }
13564			  else
13565			    abort ();
13566			  break;
13567
13568			case ppc_stub_plt_branch:
13569			case ppc_stub_plt_branch_r2off:
13570			case ppc_stub_plt_branch_notoc:
13571			case ppc_stub_plt_branch_both:
13572			  old_type += (ppc_stub_long_branch
13573				       - ppc_stub_plt_branch);
13574			  /* Fall through.  */
13575			case ppc_stub_long_branch:
13576			case ppc_stub_long_branch_r2off:
13577			case ppc_stub_long_branch_notoc:
13578			case ppc_stub_long_branch_both:
13579			  if (stub_type == ppc_stub_long_branch)
13580			    continue;
13581			  else if (stub_type == ppc_stub_long_branch_r2off)
13582			    {
13583			      if (old_type == ppc_stub_long_branch_notoc)
13584				stub_type = ppc_stub_long_branch_both;
13585			    }
13586			  else if (stub_type == ppc_stub_long_branch_notoc)
13587			    {
13588			      if (old_type == ppc_stub_long_branch_r2off)
13589				stub_type = ppc_stub_long_branch_both;
13590			    }
13591			  else
13592			    abort ();
13593			  break;
13594			}
13595		      if (old_type < stub_type)
13596			stub_entry->stub_type = stub_type;
13597		      continue;
13598		    }
13599
13600		  stub_entry = ppc_add_stub (stub_name, section, info);
13601		  if (stub_entry == NULL)
13602		    {
13603		      free (stub_name);
13604		    error_ret_free_internal:
13605		      if (elf_section_data (section)->relocs == NULL)
13606			free (internal_relocs);
13607		    error_ret_free_local:
13608		      if (symtab_hdr->contents
13609			  != (unsigned char *) local_syms)
13610			free (local_syms);
13611		      return FALSE;
13612		    }
13613
13614		  stub_entry->stub_type = stub_type;
13615		  if (stub_type >= ppc_stub_plt_call
13616		      && stub_type <= ppc_stub_plt_call_both)
13617		    {
13618		      stub_entry->target_value = sym_value;
13619		      stub_entry->target_section = sym_sec;
13620		    }
13621		  else
13622		    {
13623		      stub_entry->target_value = code_value;
13624		      stub_entry->target_section = code_sec;
13625		    }
13626		  stub_entry->h = hash;
13627		  stub_entry->plt_ent = plt_ent;
13628		  stub_entry->symtype
13629		    = hash ? hash->elf.type : ELF_ST_TYPE (sym->st_info);
13630		  stub_entry->other = hash ? hash->elf.other : sym->st_other;
13631
13632		  if (hash != NULL
13633		      && (hash->elf.root.type == bfd_link_hash_defined
13634			  || hash->elf.root.type == bfd_link_hash_defweak))
13635		    htab->stub_globals += 1;
13636		}
13637
13638	      /* We're done with the internal relocs, free them.  */
13639	      if (elf_section_data (section)->relocs != internal_relocs)
13640		free (internal_relocs);
13641	    }
13642
13643	  if (local_syms != NULL
13644	      && symtab_hdr->contents != (unsigned char *) local_syms)
13645	    {
13646	      if (!info->keep_memory)
13647		free (local_syms);
13648	      else
13649		symtab_hdr->contents = (unsigned char *) local_syms;
13650	    }
13651	}
13652
13653      /* We may have added some stubs.  Find out the new size of the
13654	 stub sections.  */
13655      for (group = htab->group; group != NULL; group = group->next)
13656	{
13657	  group->lr_restore = 0;
13658	  group->eh_size = 0;
13659	  if (group->stub_sec != NULL)
13660	    {
13661	      asection *stub_sec = group->stub_sec;
13662
13663	      if (htab->stub_iteration <= STUB_SHRINK_ITER
13664		  || stub_sec->rawsize < stub_sec->size)
13665		/* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
13666		stub_sec->rawsize = stub_sec->size;
13667	      stub_sec->size = 0;
13668	      stub_sec->reloc_count = 0;
13669	      stub_sec->flags &= ~SEC_RELOC;
13670	    }
13671	}
13672      if (htab->tga_group != NULL)
13673	{
13674	  /* See emit_tga_desc and emit_tga_desc_eh_frame.  */
13675	  htab->tga_group->eh_size
13676	    = 1 + 2 + (htab->opd_abi != 0) + 3 + 8 * 2 + 3 + 8 + 3;
13677	  htab->tga_group->lr_restore = 23 * 4;
13678	  htab->tga_group->stub_sec->size = 24 * 4;
13679	}
13680
13681      if (htab->stub_iteration <= STUB_SHRINK_ITER
13682	  || htab->brlt->rawsize < htab->brlt->size)
13683	htab->brlt->rawsize = htab->brlt->size;
13684      htab->brlt->size = 0;
13685      htab->brlt->reloc_count = 0;
13686      htab->brlt->flags &= ~SEC_RELOC;
13687      if (htab->relbrlt != NULL)
13688	htab->relbrlt->size = 0;
13689
13690      bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
13691
13692      for (group = htab->group; group != NULL; group = group->next)
13693	if (group->needs_save_res)
13694	  group->stub_sec->size += htab->sfpr->size;
13695
13696      if (info->emitrelocations
13697	  && htab->glink != NULL && htab->glink->size != 0)
13698	{
13699	  htab->glink->reloc_count = 1;
13700	  htab->glink->flags |= SEC_RELOC;
13701	}
13702
13703      if (htab->glink_eh_frame != NULL
13704	  && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
13705	  && htab->glink_eh_frame->output_section->size > 8)
13706	{
13707	  size_t size = 0, align = 4;
13708
13709	  for (group = htab->group; group != NULL; group = group->next)
13710	    if (group->eh_size != 0)
13711	      size += (group->eh_size + 17 + align - 1) & -align;
13712	  if (htab->glink != NULL && htab->glink->size != 0)
13713	    size += (24 + align - 1) & -align;
13714	  if (size != 0)
13715	    size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13716	  align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13717	  size = (size + align - 1) & -align;
13718	  htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
13719	  htab->glink_eh_frame->size = size;
13720	}
13721
13722      if (htab->params->plt_stub_align != 0)
13723	for (group = htab->group; group != NULL; group = group->next)
13724	  if (group->stub_sec != NULL)
13725	    {
13726	      int align = abs (htab->params->plt_stub_align);
13727	      group->stub_sec->size
13728		= (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
13729	    }
13730
13731      for (group = htab->group; group != NULL; group = group->next)
13732	if (group->stub_sec != NULL
13733	    && group->stub_sec->rawsize != group->stub_sec->size
13734	    && (htab->stub_iteration <= STUB_SHRINK_ITER
13735		|| group->stub_sec->rawsize < group->stub_sec->size))
13736	  break;
13737
13738      if (group == NULL
13739	  && (htab->brlt->rawsize == htab->brlt->size
13740	      || (htab->stub_iteration > STUB_SHRINK_ITER
13741		  && htab->brlt->rawsize > htab->brlt->size))
13742	  && (htab->glink_eh_frame == NULL
13743	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)
13744	  && (htab->tga_group == NULL
13745	      || htab->stub_iteration > 1))
13746	break;
13747
13748      /* Ask the linker to do its stuff.  */
13749      (*htab->params->layout_sections_again) ();
13750    }
13751
13752  if (htab->glink_eh_frame != NULL
13753      && htab->glink_eh_frame->size != 0)
13754    {
13755      bfd_vma val;
13756      bfd_byte *p, *last_fde;
13757      size_t last_fde_len, size, align, pad;
13758      struct map_stub *group;
13759
13760      /* It is necessary to at least have a rough outline of the
13761	 linker generated CIEs and FDEs written before
13762	 bfd_elf_discard_info is run, in order for these FDEs to be
13763	 indexed in .eh_frame_hdr.  */
13764      p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
13765      if (p == NULL)
13766	return FALSE;
13767      htab->glink_eh_frame->contents = p;
13768      last_fde = p;
13769      align = 4;
13770
13771      memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
13772      /* CIE length (rewrite in case little-endian).  */
13773      last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
13774      bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13775      p += last_fde_len + 4;
13776
13777      for (group = htab->group; group != NULL; group = group->next)
13778	if (group->eh_size != 0)
13779	  {
13780	    group->eh_base = p - htab->glink_eh_frame->contents;
13781	    last_fde = p;
13782	    last_fde_len = ((group->eh_size + 17 + align - 1) & -align) - 4;
13783	    /* FDE length.  */
13784	    bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13785	    p += 4;
13786	    /* CIE pointer.  */
13787	    val = p - htab->glink_eh_frame->contents;
13788	    bfd_put_32 (htab->elf.dynobj, val, p);
13789	    p += 4;
13790	    /* Offset to stub section, written later.  */
13791	    p += 4;
13792	    /* stub section size.  */
13793	    bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
13794	    p += 4;
13795	    /* Augmentation.  */
13796	    p += 1;
13797	    /* Make sure we don't have all nops.  This is enough for
13798	       elf-eh-frame.c to detect the last non-nop opcode.  */
13799	    p[group->eh_size - 1] = DW_CFA_advance_loc + 1;
13800	    p = last_fde + last_fde_len + 4;
13801	  }
13802      if (htab->glink != NULL && htab->glink->size != 0)
13803	{
13804	  last_fde = p;
13805	  last_fde_len = ((24 + align - 1) & -align) - 4;
13806	  /* FDE length.  */
13807	  bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13808	  p += 4;
13809	  /* CIE pointer.  */
13810	  val = p - htab->glink_eh_frame->contents;
13811	  bfd_put_32 (htab->elf.dynobj, val, p);
13812	  p += 4;
13813	  /* Offset to .glink, written later.  */
13814	  p += 4;
13815	  /* .glink size.  */
13816	  bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
13817	  p += 4;
13818	  /* Augmentation.  */
13819	  p += 1;
13820
13821	  *p++ = DW_CFA_advance_loc + 1;
13822	  *p++ = DW_CFA_register;
13823	  *p++ = 65;
13824	  *p++ = htab->opd_abi ? 12 : 0;
13825	  *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
13826	  *p++ = DW_CFA_restore_extended;
13827	  *p++ = 65;
13828	  p += ((24 + align - 1) & -align) - 24;
13829	}
13830      /* Subsume any padding into the last FDE if user .eh_frame
13831	 sections are aligned more than glink_eh_frame.  Otherwise any
13832	 zero padding will be seen as a terminator.  */
13833      align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13834      size = p - htab->glink_eh_frame->contents;
13835      pad = ((size + align - 1) & -align) - size;
13836      htab->glink_eh_frame->size = size + pad;
13837      bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
13838    }
13839
13840  maybe_strip_output (info, htab->brlt);
13841  if (htab->relbrlt != NULL)
13842    maybe_strip_output (info, htab->relbrlt);
13843  if (htab->glink_eh_frame != NULL)
13844    maybe_strip_output (info, htab->glink_eh_frame);
13845
13846  return TRUE;
13847}
13848
13849/* Called after we have determined section placement.  If sections
13850   move, we'll be called again.  Provide a value for TOCstart.  */
13851
13852bfd_vma
13853ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
13854{
13855  asection *s;
13856  bfd_vma TOCstart, adjust;
13857
13858  if (info != NULL)
13859    {
13860      struct elf_link_hash_entry *h;
13861      struct elf_link_hash_table *htab = elf_hash_table (info);
13862
13863      if (is_elf_hash_table (htab)
13864	  && htab->hgot != NULL)
13865	h = htab->hgot;
13866      else
13867	{
13868	  h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
13869	  if (is_elf_hash_table (htab))
13870	    htab->hgot = h;
13871	}
13872      if (h != NULL
13873	  && h->root.type == bfd_link_hash_defined
13874	  && !h->root.linker_def
13875	  && (!is_elf_hash_table (htab)
13876	      || h->def_regular))
13877	{
13878	  TOCstart = defined_sym_val (h) - TOC_BASE_OFF;
13879	  _bfd_set_gp_value (obfd, TOCstart);
13880	  return TOCstart;
13881	}
13882    }
13883
13884  /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
13885     order.  The TOC starts where the first of these sections starts.  */
13886  s = bfd_get_section_by_name (obfd, ".got");
13887  if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13888    s = bfd_get_section_by_name (obfd, ".toc");
13889  if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13890    s = bfd_get_section_by_name (obfd, ".tocbss");
13891  if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13892    s = bfd_get_section_by_name (obfd, ".plt");
13893  if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13894    {
13895      /* This may happen for
13896	 o  references to TOC base (SYM@toc / TOC[tc0]) without a
13897	 .toc directive
13898	 o  bad linker script
13899	 o --gc-sections and empty TOC sections
13900
13901	 FIXME: Warn user?  */
13902
13903      /* Look for a likely section.  We probably won't even be
13904	 using TOCstart.  */
13905      for (s = obfd->sections; s != NULL; s = s->next)
13906	if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
13907			 | SEC_EXCLUDE))
13908	    == (SEC_ALLOC | SEC_SMALL_DATA))
13909	  break;
13910      if (s == NULL)
13911	for (s = obfd->sections; s != NULL; s = s->next)
13912	  if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
13913	      == (SEC_ALLOC | SEC_SMALL_DATA))
13914	    break;
13915      if (s == NULL)
13916	for (s = obfd->sections; s != NULL; s = s->next)
13917	  if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
13918	      == SEC_ALLOC)
13919	    break;
13920      if (s == NULL)
13921	for (s = obfd->sections; s != NULL; s = s->next)
13922	  if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
13923	    break;
13924    }
13925
13926  TOCstart = 0;
13927  if (s != NULL)
13928    TOCstart = s->output_section->vma + s->output_offset;
13929
13930  /* Force alignment.  */
13931  adjust = TOCstart & (TOC_BASE_ALIGN - 1);
13932  TOCstart -= adjust;
13933  _bfd_set_gp_value (obfd, TOCstart);
13934
13935  if (info != NULL && s != NULL)
13936    {
13937      struct ppc_link_hash_table *htab = ppc_hash_table (info);
13938
13939      if (htab != NULL)
13940	{
13941	  if (htab->elf.hgot != NULL)
13942	    {
13943	      htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
13944	      htab->elf.hgot->root.u.def.section = s;
13945	    }
13946	}
13947      else
13948	{
13949	  struct bfd_link_hash_entry *bh = NULL;
13950	  _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
13951					    s, TOC_BASE_OFF - adjust,
13952					    NULL, FALSE, FALSE, &bh);
13953	}
13954    }
13955  return TOCstart;
13956}
13957
13958/* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
13959   write out any global entry stubs, and PLT relocations.  */
13960
13961static bfd_boolean
13962build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
13963{
13964  struct bfd_link_info *info;
13965  struct ppc_link_hash_table *htab;
13966  struct plt_entry *ent;
13967  asection *s;
13968
13969  if (h->root.type == bfd_link_hash_indirect)
13970    return TRUE;
13971
13972  info = inf;
13973  htab = ppc_hash_table (info);
13974  if (htab == NULL)
13975    return FALSE;
13976
13977  for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13978    if (ent->plt.offset != (bfd_vma) -1)
13979      {
13980	/* This symbol has an entry in the procedure linkage
13981	   table.  Set it up.  */
13982	Elf_Internal_Rela rela;
13983	asection *plt, *relplt;
13984	bfd_byte *loc;
13985
13986	if (!htab->elf.dynamic_sections_created
13987	    || h->dynindx == -1)
13988	  {
13989	    if (!(h->def_regular
13990		  && (h->root.type == bfd_link_hash_defined
13991		      || h->root.type == bfd_link_hash_defweak)))
13992	      continue;
13993	    if (h->type == STT_GNU_IFUNC)
13994	      {
13995		plt = htab->elf.iplt;
13996		relplt = htab->elf.irelplt;
13997		htab->elf.ifunc_resolvers = TRUE;
13998		if (htab->opd_abi)
13999		  rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14000		else
14001		  rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14002	      }
14003	    else
14004	      {
14005		plt = htab->pltlocal;
14006		if (bfd_link_pic (info))
14007		  {
14008		    relplt = htab->relpltlocal;
14009		    if (htab->opd_abi)
14010		      rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
14011		    else
14012		      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
14013		  }
14014		else
14015		  relplt = NULL;
14016	      }
14017	    rela.r_addend = defined_sym_val (h) + ent->addend;
14018
14019	    if (relplt == NULL)
14020	      {
14021		loc = plt->contents + ent->plt.offset;
14022		bfd_put_64 (info->output_bfd, rela.r_addend, loc);
14023		if (htab->opd_abi)
14024		  {
14025		    bfd_vma toc = elf_gp (info->output_bfd);
14026		    toc += htab->sec_info[h->root.u.def.section->id].toc_off;
14027		    bfd_put_64 (info->output_bfd, toc, loc + 8);
14028		  }
14029	      }
14030	    else
14031	      {
14032		rela.r_offset = (plt->output_section->vma
14033				 + plt->output_offset
14034				 + ent->plt.offset);
14035		loc = relplt->contents + (relplt->reloc_count++
14036					  * sizeof (Elf64_External_Rela));
14037		bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
14038	      }
14039	  }
14040	else
14041	  {
14042	    rela.r_offset = (htab->elf.splt->output_section->vma
14043			     + htab->elf.splt->output_offset
14044			     + ent->plt.offset);
14045	    rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
14046	    rela.r_addend = ent->addend;
14047	    loc = (htab->elf.srelplt->contents
14048		   + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
14049		      / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
14050	    if (h->type == STT_GNU_IFUNC && is_static_defined (h))
14051	      htab->elf.ifunc_resolvers = TRUE;
14052	    bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
14053	  }
14054      }
14055
14056  if (!h->pointer_equality_needed)
14057    return TRUE;
14058
14059  if (h->def_regular)
14060    return TRUE;
14061
14062  s = htab->global_entry;
14063  if (s == NULL || s->size == 0)
14064    return TRUE;
14065
14066  for (ent = h->plt.plist; ent != NULL; ent = ent->next)
14067    if (ent->plt.offset != (bfd_vma) -1
14068	&& ent->addend == 0)
14069      {
14070	bfd_byte *p;
14071	asection *plt;
14072	bfd_vma off;
14073
14074	p = s->contents + h->root.u.def.value;
14075	plt = htab->elf.splt;
14076	if (!htab->elf.dynamic_sections_created
14077	    || h->dynindx == -1)
14078	  {
14079	    if (h->type == STT_GNU_IFUNC)
14080	      plt = htab->elf.iplt;
14081	    else
14082	      plt = htab->pltlocal;
14083	  }
14084	off = ent->plt.offset + plt->output_offset + plt->output_section->vma;
14085	off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
14086
14087	if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
14088	  {
14089	    info->callbacks->einfo
14090	      (_("%P: linkage table error against `%pT'\n"),
14091	       h->root.root.string);
14092	    bfd_set_error (bfd_error_bad_value);
14093	    htab->stub_error = TRUE;
14094	  }
14095
14096	htab->stub_count[ppc_stub_global_entry - 1] += 1;
14097	if (htab->params->emit_stub_syms)
14098	  {
14099	    size_t len = strlen (h->root.root.string);
14100	    char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
14101
14102	    if (name == NULL)
14103	      return FALSE;
14104
14105	    sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
14106	    h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
14107	    if (h == NULL)
14108	      return FALSE;
14109	    if (h->root.type == bfd_link_hash_new)
14110	      {
14111		h->root.type = bfd_link_hash_defined;
14112		h->root.u.def.section = s;
14113		h->root.u.def.value = p - s->contents;
14114		h->ref_regular = 1;
14115		h->def_regular = 1;
14116		h->ref_regular_nonweak = 1;
14117		h->forced_local = 1;
14118		h->non_elf = 0;
14119		h->root.linker_def = 1;
14120	      }
14121	  }
14122
14123	if (PPC_HA (off) != 0)
14124	  {
14125	    bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
14126	    p += 4;
14127	  }
14128	bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
14129	p += 4;
14130	bfd_put_32 (s->owner, MTCTR_R12, p);
14131	p += 4;
14132	bfd_put_32 (s->owner, BCTR, p);
14133	break;
14134      }
14135  return TRUE;
14136}
14137
14138/* Write PLT relocs for locals.  */
14139
14140static bfd_boolean
14141write_plt_relocs_for_local_syms (struct bfd_link_info *info)
14142{
14143  struct ppc_link_hash_table *htab = ppc_hash_table (info);
14144  bfd *ibfd;
14145
14146  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
14147    {
14148      struct got_entry **lgot_ents, **end_lgot_ents;
14149      struct plt_entry **local_plt, **lplt, **end_local_plt;
14150      Elf_Internal_Shdr *symtab_hdr;
14151      bfd_size_type locsymcount;
14152      Elf_Internal_Sym *local_syms = NULL;
14153      struct plt_entry *ent;
14154
14155      if (!is_ppc64_elf (ibfd))
14156	continue;
14157
14158      lgot_ents = elf_local_got_ents (ibfd);
14159      if (!lgot_ents)
14160	continue;
14161
14162      symtab_hdr = &elf_symtab_hdr (ibfd);
14163      locsymcount = symtab_hdr->sh_info;
14164      end_lgot_ents = lgot_ents + locsymcount;
14165      local_plt = (struct plt_entry **) end_lgot_ents;
14166      end_local_plt = local_plt + locsymcount;
14167      for (lplt = local_plt; lplt < end_local_plt; ++lplt)
14168	for (ent = *lplt; ent != NULL; ent = ent->next)
14169	  if (ent->plt.offset != (bfd_vma) -1)
14170	    {
14171	      Elf_Internal_Sym *sym;
14172	      asection *sym_sec;
14173	      asection *plt, *relplt;
14174	      bfd_byte *loc;
14175	      bfd_vma val;
14176
14177	      if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
14178			      lplt - local_plt, ibfd))
14179		{
14180		  if (symtab_hdr->contents != (unsigned char *) local_syms)
14181		    free (local_syms);
14182		  return FALSE;
14183		}
14184
14185	      val = sym->st_value + ent->addend;
14186	      if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
14187		val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
14188	      if (sym_sec != NULL && sym_sec->output_section != NULL)
14189		val += sym_sec->output_offset + sym_sec->output_section->vma;
14190
14191	      if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14192		{
14193		  htab->elf.ifunc_resolvers = TRUE;
14194		  plt = htab->elf.iplt;
14195		  relplt = htab->elf.irelplt;
14196		}
14197	      else
14198		{
14199		  plt = htab->pltlocal;
14200		  relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
14201		}
14202
14203	      if (relplt == NULL)
14204		{
14205		  loc = plt->contents + ent->plt.offset;
14206		  bfd_put_64 (info->output_bfd, val, loc);
14207		  if (htab->opd_abi)
14208		    {
14209		      bfd_vma toc = elf_gp (ibfd);
14210		      bfd_put_64 (info->output_bfd, toc, loc + 8);
14211		    }
14212		}
14213	      else
14214		{
14215		  Elf_Internal_Rela rela;
14216		  rela.r_offset = (ent->plt.offset
14217				   + plt->output_offset
14218				   + plt->output_section->vma);
14219		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14220		    {
14221		      if (htab->opd_abi)
14222			rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14223		      else
14224			rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14225		    }
14226		  else
14227		    {
14228		      if (htab->opd_abi)
14229			rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
14230		      else
14231			rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
14232		    }
14233		  rela.r_addend = val;
14234		  loc = relplt->contents + (relplt->reloc_count++
14235					    * sizeof (Elf64_External_Rela));
14236		  bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
14237		}
14238	    }
14239
14240      if (local_syms != NULL
14241	  && symtab_hdr->contents != (unsigned char *) local_syms)
14242	{
14243	  if (!info->keep_memory)
14244	    free (local_syms);
14245	  else
14246	    symtab_hdr->contents = (unsigned char *) local_syms;
14247	}
14248    }
14249  return TRUE;
14250}
14251
14252/* Emit the static wrapper function preserving registers around a
14253   __tls_get_addr_opt call.  */
14254
14255static bfd_boolean
14256emit_tga_desc (struct ppc_link_hash_table *htab)
14257{
14258  asection *stub_sec = htab->tga_group->stub_sec;
14259  unsigned int cfa_updt = 11 * 4;
14260  bfd_byte *p;
14261  bfd_vma to, from, delta;
14262
14263  BFD_ASSERT (htab->tga_desc_fd->elf.root.type == bfd_link_hash_defined
14264	      && htab->tga_desc_fd->elf.root.u.def.section == stub_sec
14265	      && htab->tga_desc_fd->elf.root.u.def.value == 0);
14266  to = defined_sym_val (&htab->tls_get_addr_fd->elf);
14267  from = defined_sym_val (&htab->tga_desc_fd->elf) + cfa_updt;
14268  delta = to - from;
14269  if (delta + (1 << 25) >= 1 << 26)
14270    {
14271      _bfd_error_handler (_("__tls_get_addr call offset overflow"));
14272      htab->stub_error = TRUE;
14273      return FALSE;
14274    }
14275
14276  p = stub_sec->contents;
14277  p = tls_get_addr_prologue (htab->elf.dynobj, p, htab);
14278  bfd_put_32 (stub_sec->owner, B_DOT | 1 | (delta & 0x3fffffc), p);
14279  p += 4;
14280  p = tls_get_addr_epilogue (htab->elf.dynobj, p, htab);
14281  return stub_sec->size == (bfd_size_type) (p - stub_sec->contents);
14282}
14283
14284/* Emit eh_frame describing the static wrapper function.  */
14285
14286static bfd_byte *
14287emit_tga_desc_eh_frame (struct ppc_link_hash_table *htab, bfd_byte *p)
14288{
14289  unsigned int cfa_updt = 11 * 4;
14290  unsigned int i;
14291
14292  *p++ = DW_CFA_advance_loc + cfa_updt / 4;
14293  *p++ = DW_CFA_def_cfa_offset;
14294  if (htab->opd_abi)
14295    {
14296      *p++ = 128;
14297      *p++ = 1;
14298    }
14299  else
14300    *p++ = 96;
14301  *p++ = DW_CFA_offset_extended_sf;
14302  *p++ = 65;
14303  *p++ = (-16 / 8) & 0x7f;
14304  for (i = 4; i < 12; i++)
14305    {
14306      *p++ = DW_CFA_offset + i;
14307      *p++ = (htab->opd_abi ? 13 : 12) - i;
14308    }
14309  *p++ = DW_CFA_advance_loc + 10;
14310  *p++ = DW_CFA_def_cfa_offset;
14311  *p++ = 0;
14312  for (i = 4; i < 12; i++)
14313    *p++ = DW_CFA_restore + i;
14314  *p++ = DW_CFA_advance_loc + 2;
14315  *p++ = DW_CFA_restore_extended;
14316  *p++ = 65;
14317  return p;
14318}
14319
14320/* Build all the stubs associated with the current output file.
14321   The stubs are kept in a hash table attached to the main linker
14322   hash table.  This function is called via gldelf64ppc_finish.  */
14323
14324bfd_boolean
14325ppc64_elf_build_stubs (struct bfd_link_info *info,
14326		       char **stats)
14327{
14328  struct ppc_link_hash_table *htab = ppc_hash_table (info);
14329  struct map_stub *group;
14330  asection *stub_sec;
14331  bfd_byte *p;
14332  int stub_sec_count = 0;
14333
14334  if (htab == NULL)
14335    return FALSE;
14336
14337  /* Allocate memory to hold the linker stubs.  */
14338  for (group = htab->group; group != NULL; group = group->next)
14339    {
14340      group->eh_size = 0;
14341      group->lr_restore = 0;
14342      if ((stub_sec = group->stub_sec) != NULL
14343	  && stub_sec->size != 0)
14344	{
14345	  stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
14346					   stub_sec->size);
14347	  if (stub_sec->contents == NULL)
14348	    return FALSE;
14349	  stub_sec->size = 0;
14350	}
14351    }
14352
14353  if (htab->glink != NULL && htab->glink->size != 0)
14354    {
14355      unsigned int indx;
14356      bfd_vma plt0;
14357
14358      /* Build the .glink plt call stub.  */
14359      if (htab->params->emit_stub_syms)
14360	{
14361	  struct elf_link_hash_entry *h;
14362	  h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
14363				    TRUE, FALSE, FALSE);
14364	  if (h == NULL)
14365	    return FALSE;
14366	  if (h->root.type == bfd_link_hash_new)
14367	    {
14368	      h->root.type = bfd_link_hash_defined;
14369	      h->root.u.def.section = htab->glink;
14370	      h->root.u.def.value = 8;
14371	      h->ref_regular = 1;
14372	      h->def_regular = 1;
14373	      h->ref_regular_nonweak = 1;
14374	      h->forced_local = 1;
14375	      h->non_elf = 0;
14376	      h->root.linker_def = 1;
14377	    }
14378	}
14379      plt0 = (htab->elf.splt->output_section->vma
14380	      + htab->elf.splt->output_offset
14381	      - 16);
14382      if (info->emitrelocations)
14383	{
14384	  Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
14385	  if (r == NULL)
14386	    return FALSE;
14387	  r->r_offset = (htab->glink->output_offset
14388			 + htab->glink->output_section->vma);
14389	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
14390	  r->r_addend = plt0;
14391	}
14392      p = htab->glink->contents;
14393      plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
14394      bfd_put_64 (htab->glink->owner, plt0, p);
14395      p += 8;
14396      if (htab->opd_abi)
14397	{
14398	  bfd_put_32 (htab->glink->owner, MFLR_R12, p);
14399	  p += 4;
14400	  bfd_put_32 (htab->glink->owner, BCL_20_31, p);
14401	  p += 4;
14402	  bfd_put_32 (htab->glink->owner, MFLR_R11, p);
14403	  p += 4;
14404	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
14405	  p += 4;
14406	  bfd_put_32 (htab->glink->owner, MTLR_R12, p);
14407	  p += 4;
14408	  bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
14409	  p += 4;
14410	  bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
14411	  p += 4;
14412	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
14413	  p += 4;
14414	  bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
14415	  p += 4;
14416	  bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
14417	  p += 4;
14418	}
14419      else
14420	{
14421	  bfd_put_32 (htab->glink->owner, MFLR_R0, p);
14422	  p += 4;
14423	  bfd_put_32 (htab->glink->owner, BCL_20_31, p);
14424	  p += 4;
14425	  bfd_put_32 (htab->glink->owner, MFLR_R11, p);
14426	  p += 4;
14427	  bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
14428	  p += 4;
14429	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
14430	  p += 4;
14431	  bfd_put_32 (htab->glink->owner, MTLR_R0, p);
14432	  p += 4;
14433	  bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
14434	  p += 4;
14435	  bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
14436	  p += 4;
14437	  bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
14438	  p += 4;
14439	  bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
14440	  p += 4;
14441	  bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
14442	  p += 4;
14443	  bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
14444	  p += 4;
14445	  bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
14446	  p += 4;
14447	}
14448      bfd_put_32 (htab->glink->owner, BCTR, p);
14449      p += 4;
14450      BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
14451
14452      /* Build the .glink lazy link call stubs.  */
14453      indx = 0;
14454      while (p < htab->glink->contents + htab->glink->size)
14455	{
14456	  if (htab->opd_abi)
14457	    {
14458	      if (indx < 0x8000)
14459		{
14460		  bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
14461		  p += 4;
14462		}
14463	      else
14464		{
14465		  bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
14466		  p += 4;
14467		  bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
14468			      p);
14469		  p += 4;
14470		}
14471	    }
14472	  bfd_put_32 (htab->glink->owner,
14473		      B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
14474	  indx++;
14475	  p += 4;
14476	}
14477    }
14478
14479  if (htab->tga_group != NULL)
14480    {
14481      htab->tga_group->lr_restore = 23 * 4;
14482      htab->tga_group->stub_sec->size = 24 * 4;
14483      if (!emit_tga_desc (htab))
14484	return FALSE;
14485      if (htab->glink_eh_frame != NULL
14486	  && htab->glink_eh_frame->size != 0)
14487	{
14488	  size_t align = 4;
14489
14490	  p = htab->glink_eh_frame->contents;
14491	  p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14492	  p += 17;
14493	  htab->tga_group->eh_size = emit_tga_desc_eh_frame (htab, p) - p;
14494	}
14495    }
14496
14497  /* Build .glink global entry stubs, and PLT relocs for globals.  */
14498  elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
14499
14500  if (!write_plt_relocs_for_local_syms (info))
14501    return FALSE;
14502
14503  if (htab->brlt != NULL && htab->brlt->size != 0)
14504    {
14505      htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
14506					 htab->brlt->size);
14507      if (htab->brlt->contents == NULL)
14508	return FALSE;
14509    }
14510  if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
14511    {
14512      htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
14513					    htab->relbrlt->size);
14514      if (htab->relbrlt->contents == NULL)
14515	return FALSE;
14516    }
14517
14518  /* Build the stubs as directed by the stub hash table.  */
14519  bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
14520
14521  for (group = htab->group; group != NULL; group = group->next)
14522    if (group->needs_save_res)
14523      group->stub_sec->size += htab->sfpr->size;
14524
14525  if (htab->relbrlt != NULL)
14526    htab->relbrlt->reloc_count = 0;
14527
14528  if (htab->params->plt_stub_align != 0)
14529    for (group = htab->group; group != NULL; group = group->next)
14530      if ((stub_sec = group->stub_sec) != NULL)
14531	{
14532	  int align = abs (htab->params->plt_stub_align);
14533	  stub_sec->size = (stub_sec->size + (1 << align) - 1) & -(1 << align);
14534	}
14535
14536  for (group = htab->group; group != NULL; group = group->next)
14537    if (group->needs_save_res)
14538      {
14539	stub_sec = group->stub_sec;
14540	memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
14541		htab->sfpr->contents, htab->sfpr->size);
14542	if (htab->params->emit_stub_syms)
14543	  {
14544	    unsigned int i;
14545
14546	    for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
14547	      if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
14548		return FALSE;
14549	  }
14550      }
14551
14552  if (htab->glink_eh_frame != NULL
14553      && htab->glink_eh_frame->size != 0)
14554    {
14555      bfd_vma val;
14556      size_t align = 4;
14557
14558      p = htab->glink_eh_frame->contents;
14559      p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14560
14561      for (group = htab->group; group != NULL; group = group->next)
14562	if (group->eh_size != 0)
14563	  {
14564	    /* Offset to stub section.  */
14565	    val = (group->stub_sec->output_section->vma
14566		   + group->stub_sec->output_offset);
14567	    val -= (htab->glink_eh_frame->output_section->vma
14568		    + htab->glink_eh_frame->output_offset
14569		    + (p + 8 - htab->glink_eh_frame->contents));
14570	    if (val + 0x80000000 > 0xffffffff)
14571	      {
14572		_bfd_error_handler
14573		  (_("%s offset too large for .eh_frame sdata4 encoding"),
14574		   group->stub_sec->name);
14575		return FALSE;
14576	      }
14577	    bfd_put_32 (htab->elf.dynobj, val, p + 8);
14578	    p += (group->eh_size + 17 + 3) & -4;
14579	  }
14580      if (htab->glink != NULL && htab->glink->size != 0)
14581	{
14582	  /* Offset to .glink.  */
14583	  val = (htab->glink->output_section->vma
14584		 + htab->glink->output_offset
14585		 + 8);
14586	  val -= (htab->glink_eh_frame->output_section->vma
14587		  + htab->glink_eh_frame->output_offset
14588		  + (p + 8 - htab->glink_eh_frame->contents));
14589	  if (val + 0x80000000 > 0xffffffff)
14590	    {
14591	      _bfd_error_handler
14592		(_("%s offset too large for .eh_frame sdata4 encoding"),
14593		 htab->glink->name);
14594	      return FALSE;
14595	    }
14596	  bfd_put_32 (htab->elf.dynobj, val, p + 8);
14597	  p += (24 + align - 1) & -align;
14598	}
14599    }
14600
14601  for (group = htab->group; group != NULL; group = group->next)
14602    if ((stub_sec = group->stub_sec) != NULL)
14603      {
14604	stub_sec_count += 1;
14605	if (stub_sec->rawsize != stub_sec->size
14606	    && (htab->stub_iteration <= STUB_SHRINK_ITER
14607		|| stub_sec->rawsize < stub_sec->size))
14608	  break;
14609      }
14610
14611  if (group != NULL)
14612    {
14613      htab->stub_error = TRUE;
14614      _bfd_error_handler (_("stubs don't match calculated size"));
14615    }
14616
14617  if (htab->stub_error)
14618    return FALSE;
14619
14620  if (stats != NULL)
14621    {
14622      char *groupmsg;
14623      if (asprintf (&groupmsg,
14624		    ngettext ("linker stubs in %u group\n",
14625			      "linker stubs in %u groups\n",
14626			      stub_sec_count),
14627		    stub_sec_count) < 0)
14628	*stats = NULL;
14629      else
14630	{
14631	  if (asprintf (stats, _("%s"
14632				 "  branch         %lu\n"
14633				 "  branch toc adj %lu\n"
14634				 "  branch notoc   %lu\n"
14635				 "  branch both    %lu\n"
14636				 "  long branch    %lu\n"
14637				 "  long toc adj   %lu\n"
14638				 "  long notoc     %lu\n"
14639				 "  long both      %lu\n"
14640				 "  plt call       %lu\n"
14641				 "  plt call save  %lu\n"
14642				 "  plt call notoc %lu\n"
14643				 "  plt call both  %lu\n"
14644				 "  global entry   %lu"),
14645			groupmsg,
14646			htab->stub_count[ppc_stub_long_branch - 1],
14647			htab->stub_count[ppc_stub_long_branch_r2off - 1],
14648			htab->stub_count[ppc_stub_long_branch_notoc - 1],
14649			htab->stub_count[ppc_stub_long_branch_both - 1],
14650			htab->stub_count[ppc_stub_plt_branch - 1],
14651			htab->stub_count[ppc_stub_plt_branch_r2off - 1],
14652			htab->stub_count[ppc_stub_plt_branch_notoc - 1],
14653			htab->stub_count[ppc_stub_plt_branch_both - 1],
14654			htab->stub_count[ppc_stub_plt_call - 1],
14655			htab->stub_count[ppc_stub_plt_call_r2save - 1],
14656			htab->stub_count[ppc_stub_plt_call_notoc - 1],
14657			htab->stub_count[ppc_stub_plt_call_both - 1],
14658			htab->stub_count[ppc_stub_global_entry - 1]) < 0)
14659	    *stats = NULL;
14660	  free (groupmsg);
14661	}
14662    }
14663  return TRUE;
14664}
14665
14666/* What to do when ld finds relocations against symbols defined in
14667   discarded sections.  */
14668
14669static unsigned int
14670ppc64_elf_action_discarded (asection *sec)
14671{
14672  if (strcmp (".opd", sec->name) == 0)
14673    return 0;
14674
14675  if (strcmp (".toc", sec->name) == 0)
14676    return 0;
14677
14678  if (strcmp (".toc1", sec->name) == 0)
14679    return 0;
14680
14681  return _bfd_elf_default_action_discarded (sec);
14682}
14683
14684/* These are the dynamic relocations supported by glibc.  */
14685
14686static bfd_boolean
14687ppc64_glibc_dynamic_reloc (enum elf_ppc64_reloc_type r_type)
14688{
14689  switch (r_type)
14690    {
14691    case R_PPC64_RELATIVE:
14692    case R_PPC64_NONE:
14693    case R_PPC64_ADDR64:
14694    case R_PPC64_GLOB_DAT:
14695    case R_PPC64_IRELATIVE:
14696    case R_PPC64_JMP_IREL:
14697    case R_PPC64_JMP_SLOT:
14698    case R_PPC64_DTPMOD64:
14699    case R_PPC64_DTPREL64:
14700    case R_PPC64_TPREL64:
14701    case R_PPC64_TPREL16_LO_DS:
14702    case R_PPC64_TPREL16_DS:
14703    case R_PPC64_TPREL16:
14704    case R_PPC64_TPREL16_LO:
14705    case R_PPC64_TPREL16_HI:
14706    case R_PPC64_TPREL16_HIGH:
14707    case R_PPC64_TPREL16_HA:
14708    case R_PPC64_TPREL16_HIGHA:
14709    case R_PPC64_TPREL16_HIGHER:
14710    case R_PPC64_TPREL16_HIGHEST:
14711    case R_PPC64_TPREL16_HIGHERA:
14712    case R_PPC64_TPREL16_HIGHESTA:
14713    case R_PPC64_ADDR16_LO_DS:
14714    case R_PPC64_ADDR16_LO:
14715    case R_PPC64_ADDR16_HI:
14716    case R_PPC64_ADDR16_HIGH:
14717    case R_PPC64_ADDR16_HA:
14718    case R_PPC64_ADDR16_HIGHA:
14719    case R_PPC64_REL30:
14720    case R_PPC64_COPY:
14721    case R_PPC64_UADDR64:
14722    case R_PPC64_UADDR32:
14723    case R_PPC64_ADDR32:
14724    case R_PPC64_ADDR24:
14725    case R_PPC64_ADDR16:
14726    case R_PPC64_UADDR16:
14727    case R_PPC64_ADDR16_DS:
14728    case R_PPC64_ADDR16_HIGHER:
14729    case R_PPC64_ADDR16_HIGHEST:
14730    case R_PPC64_ADDR16_HIGHERA:
14731    case R_PPC64_ADDR16_HIGHESTA:
14732    case R_PPC64_ADDR14:
14733    case R_PPC64_ADDR14_BRTAKEN:
14734    case R_PPC64_ADDR14_BRNTAKEN:
14735    case R_PPC64_REL32:
14736    case R_PPC64_REL64:
14737      return TRUE;
14738
14739    default:
14740      return FALSE;
14741    }
14742}
14743
14744/* The RELOCATE_SECTION function is called by the ELF backend linker
14745   to handle the relocations for a section.
14746
14747   The relocs are always passed as Rela structures; if the section
14748   actually uses Rel structures, the r_addend field will always be
14749   zero.
14750
14751   This function is responsible for adjust the section contents as
14752   necessary, and (if using Rela relocs and generating a
14753   relocatable output file) adjusting the reloc addend as
14754   necessary.
14755
14756   This function does not have to worry about setting the reloc
14757   address or the reloc symbol index.
14758
14759   LOCAL_SYMS is a pointer to the swapped in local symbols.
14760
14761   LOCAL_SECTIONS is an array giving the section in the input file
14762   corresponding to the st_shndx field of each local symbol.
14763
14764   The global hash table entry for the global symbols can be found
14765   via elf_sym_hashes (input_bfd).
14766
14767   When generating relocatable output, this function must handle
14768   STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
14769   going to be the section symbol corresponding to the output
14770   section, which means that the addend must be adjusted
14771   accordingly.  */
14772
14773static bfd_boolean
14774ppc64_elf_relocate_section (bfd *output_bfd,
14775			    struct bfd_link_info *info,
14776			    bfd *input_bfd,
14777			    asection *input_section,
14778			    bfd_byte *contents,
14779			    Elf_Internal_Rela *relocs,
14780			    Elf_Internal_Sym *local_syms,
14781			    asection **local_sections)
14782{
14783  struct ppc_link_hash_table *htab;
14784  Elf_Internal_Shdr *symtab_hdr;
14785  struct elf_link_hash_entry **sym_hashes;
14786  Elf_Internal_Rela *rel;
14787  Elf_Internal_Rela *wrel;
14788  Elf_Internal_Rela *relend;
14789  Elf_Internal_Rela outrel;
14790  bfd_byte *loc;
14791  struct got_entry **local_got_ents;
14792  bfd_vma TOCstart;
14793  bfd_boolean ret = TRUE;
14794  bfd_boolean is_opd;
14795  /* Assume 'at' branch hints.  */
14796  bfd_boolean is_isa_v2 = TRUE;
14797  bfd_boolean warned_dynamic = FALSE;
14798  bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
14799
14800  /* Initialize howto table if needed.  */
14801  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
14802    ppc_howto_init ();
14803
14804  htab = ppc_hash_table (info);
14805  if (htab == NULL)
14806    return FALSE;
14807
14808  /* Don't relocate stub sections.  */
14809  if (input_section->owner == htab->params->stub_bfd)
14810    return TRUE;
14811
14812  if (!is_ppc64_elf (input_bfd))
14813    {
14814      bfd_set_error (bfd_error_wrong_format);
14815      return FALSE;
14816    }
14817
14818  local_got_ents = elf_local_got_ents (input_bfd);
14819  TOCstart = elf_gp (output_bfd);
14820  symtab_hdr = &elf_symtab_hdr (input_bfd);
14821  sym_hashes = elf_sym_hashes (input_bfd);
14822  is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
14823
14824  rel = wrel = relocs;
14825  relend = relocs + input_section->reloc_count;
14826  for (; rel < relend; wrel++, rel++)
14827    {
14828      enum elf_ppc64_reloc_type r_type;
14829      bfd_vma addend;
14830      bfd_reloc_status_type r;
14831      Elf_Internal_Sym *sym;
14832      asection *sec;
14833      struct elf_link_hash_entry *h_elf;
14834      struct ppc_link_hash_entry *h;
14835      struct ppc_link_hash_entry *fdh;
14836      const char *sym_name;
14837      unsigned long r_symndx, toc_symndx;
14838      bfd_vma toc_addend;
14839      unsigned char tls_mask, tls_gd, tls_type;
14840      unsigned char sym_type;
14841      bfd_vma relocation;
14842      bfd_boolean unresolved_reloc, save_unresolved_reloc;
14843      bfd_boolean warned;
14844      enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
14845      unsigned int insn;
14846      unsigned int mask;
14847      struct ppc_stub_hash_entry *stub_entry;
14848      bfd_vma max_br_offset;
14849      bfd_vma from;
14850      Elf_Internal_Rela orig_rel;
14851      reloc_howto_type *howto;
14852      struct reloc_howto_struct alt_howto;
14853      uint64_t pinsn;
14854      bfd_vma offset;
14855
14856    again:
14857      orig_rel = *rel;
14858
14859      r_type = ELF64_R_TYPE (rel->r_info);
14860      r_symndx = ELF64_R_SYM (rel->r_info);
14861
14862      /* For old style R_PPC64_TOC relocs with a zero symbol, use the
14863	 symbol of the previous ADDR64 reloc.  The symbol gives us the
14864	 proper TOC base to use.  */
14865      if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
14866	  && wrel != relocs
14867	  && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
14868	  && is_opd)
14869	r_symndx = ELF64_R_SYM (wrel[-1].r_info);
14870
14871      sym = NULL;
14872      sec = NULL;
14873      h_elf = NULL;
14874      sym_name = NULL;
14875      unresolved_reloc = FALSE;
14876      warned = FALSE;
14877
14878      if (r_symndx < symtab_hdr->sh_info)
14879	{
14880	  /* It's a local symbol.  */
14881	  struct _opd_sec_data *opd;
14882
14883	  sym = local_syms + r_symndx;
14884	  sec = local_sections[r_symndx];
14885	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
14886	  sym_type = ELF64_ST_TYPE (sym->st_info);
14887	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
14888	  opd = get_opd_info (sec);
14889	  if (opd != NULL && opd->adjust != NULL)
14890	    {
14891	      long adjust = opd->adjust[OPD_NDX (sym->st_value
14892						 + rel->r_addend)];
14893	      if (adjust == -1)
14894		relocation = 0;
14895	      else
14896		{
14897		  /* If this is a relocation against the opd section sym
14898		     and we have edited .opd, adjust the reloc addend so
14899		     that ld -r and ld --emit-relocs output is correct.
14900		     If it is a reloc against some other .opd symbol,
14901		     then the symbol value will be adjusted later.  */
14902		  if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
14903		    rel->r_addend += adjust;
14904		  else
14905		    relocation += adjust;
14906		}
14907	    }
14908	}
14909      else
14910	{
14911	  bfd_boolean ignored;
14912
14913	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
14914				   r_symndx, symtab_hdr, sym_hashes,
14915				   h_elf, sec, relocation,
14916				   unresolved_reloc, warned, ignored);
14917	  sym_name = h_elf->root.root.string;
14918	  sym_type = h_elf->type;
14919	  if (sec != NULL
14920	      && sec->owner == output_bfd
14921	      && strcmp (sec->name, ".opd") == 0)
14922	    {
14923	      /* This is a symbol defined in a linker script.  All
14924		 such are defined in output sections, even those
14925		 defined by simple assignment from a symbol defined in
14926		 an input section.  Transfer the symbol to an
14927		 appropriate input .opd section, so that a branch to
14928		 this symbol will be mapped to the location specified
14929		 by the opd entry.  */
14930	      struct bfd_link_order *lo;
14931	      for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
14932		if (lo->type == bfd_indirect_link_order)
14933		  {
14934		    asection *isec = lo->u.indirect.section;
14935		    if (h_elf->root.u.def.value >= isec->output_offset
14936			&& h_elf->root.u.def.value < (isec->output_offset
14937						      + isec->size))
14938		      {
14939			h_elf->root.u.def.value -= isec->output_offset;
14940			h_elf->root.u.def.section = isec;
14941			sec = isec;
14942			break;
14943		      }
14944		  }
14945	    }
14946	}
14947      h = ppc_elf_hash_entry (h_elf);
14948
14949      if (sec != NULL && discarded_section (sec))
14950	{
14951	  _bfd_clear_contents (ppc64_elf_howto_table[r_type],
14952			       input_bfd, input_section,
14953			       contents, rel->r_offset);
14954	  wrel->r_offset = rel->r_offset;
14955	  wrel->r_info = 0;
14956	  wrel->r_addend = 0;
14957
14958	  /* For ld -r, remove relocations in debug sections against
14959	     symbols defined in discarded sections.  Not done for
14960	     non-debug to preserve relocs in .eh_frame which the
14961	     eh_frame editing code expects to be present.  */
14962	  if (bfd_link_relocatable (info)
14963	      && (input_section->flags & SEC_DEBUGGING))
14964	    wrel--;
14965
14966	  continue;
14967	}
14968
14969      if (bfd_link_relocatable (info))
14970	goto copy_reloc;
14971
14972      if (h != NULL && &h->elf == htab->elf.hgot)
14973	{
14974	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14975	  sec = bfd_abs_section_ptr;
14976	  unresolved_reloc = FALSE;
14977	}
14978
14979      /* TLS optimizations.  Replace instruction sequences and relocs
14980	 based on information we collected in tls_optimize.  We edit
14981	 RELOCS so that --emit-relocs will output something sensible
14982	 for the final instruction stream.  */
14983      tls_mask = 0;
14984      tls_gd = 0;
14985      toc_symndx = 0;
14986      if (h != NULL)
14987	tls_mask = h->tls_mask;
14988      else if (local_got_ents != NULL)
14989	{
14990	  struct plt_entry **local_plt = (struct plt_entry **)
14991	    (local_got_ents + symtab_hdr->sh_info);
14992	  unsigned char *lgot_masks = (unsigned char *)
14993	    (local_plt + symtab_hdr->sh_info);
14994	  tls_mask = lgot_masks[r_symndx];
14995	}
14996      if (((tls_mask & TLS_TLS) == 0 || tls_mask == (TLS_TLS | TLS_MARK))
14997	  && (r_type == R_PPC64_TLS
14998	      || r_type == R_PPC64_TLSGD
14999	      || r_type == R_PPC64_TLSLD))
15000	{
15001	  /* Check for toc tls entries.  */
15002	  unsigned char *toc_tls;
15003
15004	  if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
15005			     &local_syms, rel, input_bfd))
15006	    return FALSE;
15007
15008	  if (toc_tls)
15009	    tls_mask = *toc_tls;
15010	}
15011
15012      /* Check that tls relocs are used with tls syms, and non-tls
15013	 relocs are used with non-tls syms.  */
15014      if (r_symndx != STN_UNDEF
15015	  && r_type != R_PPC64_NONE
15016	  && (h == NULL
15017	      || h->elf.root.type == bfd_link_hash_defined
15018	      || h->elf.root.type == bfd_link_hash_defweak)
15019	  && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
15020	{
15021	  if ((tls_mask & TLS_TLS) != 0
15022	      && (r_type == R_PPC64_TLS
15023		  || r_type == R_PPC64_TLSGD
15024		  || r_type == R_PPC64_TLSLD))
15025	    /* R_PPC64_TLS is OK against a symbol in the TOC.  */
15026	    ;
15027	  else
15028	    info->callbacks->einfo
15029	      (!IS_PPC64_TLS_RELOC (r_type)
15030	       /* xgettext:c-format */
15031	       ? _("%H: %s used with TLS symbol `%pT'\n")
15032	       /* xgettext:c-format */
15033	       : _("%H: %s used with non-TLS symbol `%pT'\n"),
15034	       input_bfd, input_section, rel->r_offset,
15035	       ppc64_elf_howto_table[r_type]->name,
15036	       sym_name);
15037	}
15038
15039      /* Ensure reloc mapping code below stays sane.  */
15040      if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
15041	  || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
15042	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
15043	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
15044	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
15045	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
15046	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
15047	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
15048	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
15049	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
15050	abort ();
15051
15052      switch (r_type)
15053	{
15054	default:
15055	  break;
15056
15057	case R_PPC64_LO_DS_OPT:
15058	  insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
15059	  if ((insn & (0x3fu << 26)) != 58u << 26)
15060	    abort ();
15061	  insn += (14u << 26) - (58u << 26);
15062	  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
15063	  r_type = R_PPC64_TOC16_LO;
15064	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15065	  break;
15066
15067	case R_PPC64_TOC16:
15068	case R_PPC64_TOC16_LO:
15069	case R_PPC64_TOC16_DS:
15070	case R_PPC64_TOC16_LO_DS:
15071	  {
15072	    /* Check for toc tls entries.  */
15073	    unsigned char *toc_tls;
15074	    int retval;
15075
15076	    retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
15077				   &local_syms, rel, input_bfd);
15078	    if (retval == 0)
15079	      return FALSE;
15080
15081	    if (toc_tls)
15082	      {
15083		tls_mask = *toc_tls;
15084		if (r_type == R_PPC64_TOC16_DS
15085		    || r_type == R_PPC64_TOC16_LO_DS)
15086		  {
15087		    if ((tls_mask & TLS_TLS) != 0
15088			&& (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
15089		      goto toctprel;
15090		  }
15091		else
15092		  {
15093		    /* If we found a GD reloc pair, then we might be
15094		       doing a GD->IE transition.  */
15095		    if (retval == 2)
15096		      {
15097			tls_gd = TLS_GDIE;
15098			if ((tls_mask & TLS_TLS) != 0
15099			    && (tls_mask & TLS_GD) == 0)
15100			  goto tls_ldgd_opt;
15101		      }
15102		    else if (retval == 3)
15103		      {
15104			if ((tls_mask & TLS_TLS) != 0
15105			    && (tls_mask & TLS_LD) == 0)
15106			  goto tls_ldgd_opt;
15107		      }
15108		  }
15109	      }
15110	  }
15111	  break;
15112
15113	case R_PPC64_GOT_TPREL16_HI:
15114	case R_PPC64_GOT_TPREL16_HA:
15115	  if ((tls_mask & TLS_TLS) != 0
15116	      && (tls_mask & TLS_TPREL) == 0)
15117	    {
15118	      rel->r_offset -= d_offset;
15119	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15120	      r_type = R_PPC64_NONE;
15121	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15122	    }
15123	  break;
15124
15125	case R_PPC64_GOT_TPREL16_DS:
15126	case R_PPC64_GOT_TPREL16_LO_DS:
15127	  if ((tls_mask & TLS_TLS) != 0
15128	      && (tls_mask & TLS_TPREL) == 0)
15129	    {
15130	    toctprel:
15131	      insn = bfd_get_32 (input_bfd,
15132				 contents + rel->r_offset - d_offset);
15133	      insn &= 31 << 21;
15134	      insn |= 0x3c0d0000;	/* addis 0,13,0 */
15135	      bfd_put_32 (input_bfd, insn,
15136			  contents + rel->r_offset - d_offset);
15137	      r_type = R_PPC64_TPREL16_HA;
15138	      if (toc_symndx != 0)
15139		{
15140		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
15141		  rel->r_addend = toc_addend;
15142		  /* We changed the symbol.  Start over in order to
15143		     get h, sym, sec etc. right.  */
15144		  goto again;
15145		}
15146	      else
15147		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15148	    }
15149	  break;
15150
15151	case R_PPC64_GOT_TPREL_PCREL34:
15152	  if ((tls_mask & TLS_TLS) != 0
15153	      && (tls_mask & TLS_TPREL) == 0)
15154	    {
15155	      /* pld ra,sym@got@tprel@pcrel -> paddi ra,r13,sym@tprel  */
15156	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15157	      pinsn <<= 32;
15158	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15159	      pinsn += ((2ULL << 56) + (-1ULL << 52)
15160			+ (14ULL << 26) - (57ULL << 26) + (13ULL << 16));
15161	      bfd_put_32 (input_bfd, pinsn >> 32,
15162			  contents + rel->r_offset);
15163	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15164			  contents + rel->r_offset + 4);
15165	      r_type = R_PPC64_TPREL34;
15166	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15167	    }
15168	  break;
15169
15170	case R_PPC64_TLS:
15171	  if ((tls_mask & TLS_TLS) != 0
15172	      && (tls_mask & TLS_TPREL) == 0)
15173	    {
15174	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15175	      insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
15176	      if (insn == 0)
15177		break;
15178	      if ((rel->r_offset & 3) == 0)
15179		{
15180		  bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15181		  /* Was PPC64_TLS which sits on insn boundary, now
15182		     PPC64_TPREL16_LO which is at low-order half-word.  */
15183		  rel->r_offset += d_offset;
15184		  r_type = R_PPC64_TPREL16_LO;
15185		  if (toc_symndx != 0)
15186		    {
15187		      rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
15188		      rel->r_addend = toc_addend;
15189		      /* We changed the symbol.  Start over in order to
15190			 get h, sym, sec etc. right.  */
15191		      goto again;
15192		    }
15193		  else
15194		    rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15195		}
15196	      else if ((rel->r_offset & 3) == 1)
15197		{
15198		  /* For pcrel IE to LE we already have the full
15199		     offset and thus don't need an addi here.  A nop
15200		     or mr will do.  */
15201		  if ((insn & (0x3fu << 26)) == 14 << 26)
15202		    {
15203		      /* Extract regs from addi rt,ra,si.  */
15204		      unsigned int rt = (insn >> 21) & 0x1f;
15205		      unsigned int ra = (insn >> 16) & 0x1f;
15206		      if (rt == ra)
15207			insn = NOP;
15208		      else
15209			{
15210			  /* Build or ra,rs,rb with rb==rs, ie. mr ra,rs.  */
15211			  insn = (rt << 16) | (ra << 21) | (ra << 11);
15212			  insn |= (31u << 26) | (444u << 1);
15213			}
15214		    }
15215		  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - 1);
15216		}
15217	    }
15218	  break;
15219
15220	case R_PPC64_GOT_TLSGD16_HI:
15221	case R_PPC64_GOT_TLSGD16_HA:
15222	  tls_gd = TLS_GDIE;
15223	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15224	    goto tls_gdld_hi;
15225	  break;
15226
15227	case R_PPC64_GOT_TLSLD16_HI:
15228	case R_PPC64_GOT_TLSLD16_HA:
15229	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15230	    {
15231	    tls_gdld_hi:
15232	      if ((tls_mask & tls_gd) != 0)
15233		r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
15234			  + R_PPC64_GOT_TPREL16_DS);
15235	      else
15236		{
15237		  rel->r_offset -= d_offset;
15238		  bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15239		  r_type = R_PPC64_NONE;
15240		}
15241	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15242	    }
15243	  break;
15244
15245	case R_PPC64_GOT_TLSGD16:
15246	case R_PPC64_GOT_TLSGD16_LO:
15247	  tls_gd = TLS_GDIE;
15248	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15249	    goto tls_ldgd_opt;
15250	  break;
15251
15252	case R_PPC64_GOT_TLSLD16:
15253	case R_PPC64_GOT_TLSLD16_LO:
15254	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15255	    {
15256	      unsigned int insn1, insn2;
15257
15258	    tls_ldgd_opt:
15259	      offset = (bfd_vma) -1;
15260	      /* If not using the newer R_PPC64_TLSGD/LD to mark
15261		 __tls_get_addr calls, we must trust that the call
15262		 stays with its arg setup insns, ie. that the next
15263		 reloc is the __tls_get_addr call associated with
15264		 the current reloc.  Edit both insns.  */
15265	      if (input_section->nomark_tls_get_addr
15266		  && rel + 1 < relend
15267		  && branch_reloc_hash_match (input_bfd, rel + 1,
15268					      htab->tls_get_addr_fd,
15269					      htab->tga_desc_fd,
15270					      htab->tls_get_addr,
15271					      htab->tga_desc))
15272		offset = rel[1].r_offset;
15273	      /* We read the low GOT_TLS (or TOC16) insn because we
15274		 need to keep the destination reg.  It may be
15275		 something other than the usual r3, and moved to r3
15276		 before the call by intervening code.  */
15277	      insn1 = bfd_get_32 (input_bfd,
15278				  contents + rel->r_offset - d_offset);
15279	      if ((tls_mask & tls_gd) != 0)
15280		{
15281		  /* IE */
15282		  insn1 &= (0x1f << 21) | (0x1f << 16);
15283		  insn1 |= 58u << 26;	/* ld */
15284		  insn2 = 0x7c636a14;	/* add 3,3,13 */
15285		  if (offset != (bfd_vma) -1)
15286		    rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15287		  if (r_type == R_PPC64_TOC16
15288		      || r_type == R_PPC64_TOC16_LO)
15289		    r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
15290		  else
15291		    r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 1)) & 1)
15292			      + R_PPC64_GOT_TPREL16_DS);
15293		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15294		}
15295	      else
15296		{
15297		  /* LE */
15298		  insn1 &= 0x1f << 21;
15299		  insn1 |= 0x3c0d0000;	/* addis r,13,0 */
15300		  insn2 = 0x38630000;	/* addi 3,3,0 */
15301		  if (tls_gd == 0)
15302		    {
15303		      /* Was an LD reloc.  */
15304		      r_symndx = STN_UNDEF;
15305		      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15306		    }
15307		  else if (toc_symndx != 0)
15308		    {
15309		      r_symndx = toc_symndx;
15310		      rel->r_addend = toc_addend;
15311		    }
15312		  r_type = R_PPC64_TPREL16_HA;
15313		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15314		  if (offset != (bfd_vma) -1)
15315		    {
15316		      rel[1].r_info = ELF64_R_INFO (r_symndx,
15317						    R_PPC64_TPREL16_LO);
15318		      rel[1].r_offset = offset + d_offset;
15319		      rel[1].r_addend = rel->r_addend;
15320		    }
15321		}
15322	      bfd_put_32 (input_bfd, insn1,
15323			  contents + rel->r_offset - d_offset);
15324	      if (offset != (bfd_vma) -1)
15325		{
15326		  bfd_put_32 (input_bfd, insn2, contents + offset);
15327		  if (offset + 8 <= input_section->size)
15328		    {
15329		      insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15330		      if (insn2 == LD_R2_0R1 + STK_TOC (htab))
15331			bfd_put_32 (input_bfd, NOP, contents + offset + 4);
15332		    }
15333		}
15334	      if ((tls_mask & tls_gd) == 0
15335		  && (tls_gd == 0 || toc_symndx != 0))
15336		{
15337		  /* We changed the symbol.  Start over in order
15338		     to get h, sym, sec etc. right.  */
15339		  goto again;
15340		}
15341	    }
15342	  break;
15343
15344	case R_PPC64_GOT_TLSGD_PCREL34:
15345	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
15346	    {
15347	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15348	      pinsn <<= 32;
15349	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15350	      if ((tls_mask & TLS_GDIE) != 0)
15351		{
15352		  /* IE, pla -> pld  */
15353		  pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
15354		  r_type = R_PPC64_GOT_TPREL_PCREL34;
15355		}
15356	      else
15357		{
15358		  /* LE, pla pcrel -> paddi r13  */
15359		  pinsn += (-1ULL << 52) + (13ULL << 16);
15360		  r_type = R_PPC64_TPREL34;
15361		}
15362	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15363	      bfd_put_32 (input_bfd, pinsn >> 32,
15364			  contents + rel->r_offset);
15365	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15366			  contents + rel->r_offset + 4);
15367	    }
15368	  break;
15369
15370	case R_PPC64_GOT_TLSLD_PCREL34:
15371	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
15372	    {
15373	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15374	      pinsn <<= 32;
15375	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15376	      pinsn += (-1ULL << 52) + (13ULL << 16);
15377	      bfd_put_32 (input_bfd, pinsn >> 32,
15378			  contents + rel->r_offset);
15379	      bfd_put_32 (input_bfd, pinsn & 0xffffffff,
15380			  contents + rel->r_offset + 4);
15381	      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15382	      r_symndx = STN_UNDEF;
15383	      r_type = R_PPC64_TPREL34;
15384	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15385	      goto again;
15386	    }
15387	  break;
15388
15389	case R_PPC64_TLSGD:
15390	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
15391	      && rel + 1 < relend)
15392	    {
15393	      unsigned int insn2;
15394	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
15395
15396	      offset = rel->r_offset;
15397	      if (is_plt_seq_reloc (r_type1))
15398		{
15399		  bfd_put_32 (output_bfd, NOP, contents + offset);
15400		  if (r_type1 == R_PPC64_PLT_PCREL34
15401		      || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
15402		    bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15403		  rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15404		  break;
15405		}
15406
15407	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
15408		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15409
15410	      if ((tls_mask & TLS_GDIE) != 0)
15411		{
15412		  /* IE */
15413		  r_type = R_PPC64_NONE;
15414		  insn2 = 0x7c636a14;	/* add 3,3,13 */
15415		}
15416	      else
15417		{
15418		  /* LE */
15419		  if (toc_symndx != 0)
15420		    {
15421		      r_symndx = toc_symndx;
15422		      rel->r_addend = toc_addend;
15423		    }
15424		  if (r_type1 == R_PPC64_REL24_NOTOC
15425		      || r_type1 == R_PPC64_PLTCALL_NOTOC)
15426		    {
15427		      r_type = R_PPC64_NONE;
15428		      insn2 = NOP;
15429		    }
15430		  else
15431		    {
15432		      rel->r_offset = offset + d_offset;
15433		      r_type = R_PPC64_TPREL16_LO;
15434		      insn2 = 0x38630000;	/* addi 3,3,0 */
15435		    }
15436		}
15437	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15438	      /* Zap the reloc on the _tls_get_addr call too.  */
15439	      BFD_ASSERT (offset == rel[1].r_offset);
15440	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15441	      bfd_put_32 (input_bfd, insn2, contents + offset);
15442	      if ((tls_mask & TLS_GDIE) == 0
15443		  && toc_symndx != 0
15444		  && r_type != R_PPC64_NONE)
15445		goto again;
15446	    }
15447	  break;
15448
15449	case R_PPC64_TLSLD:
15450	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
15451	      && rel + 1 < relend)
15452	    {
15453	      unsigned int insn2;
15454	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
15455
15456	      offset = rel->r_offset;
15457	      if (is_plt_seq_reloc (r_type1))
15458		{
15459		  bfd_put_32 (output_bfd, NOP, contents + offset);
15460		  if (r_type1 == R_PPC64_PLT_PCREL34
15461		      || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
15462		    bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15463		  rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15464		  break;
15465		}
15466
15467	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
15468		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
15469
15470	      if (r_type1 == R_PPC64_REL24_NOTOC
15471		  || r_type1 == R_PPC64_PLTCALL_NOTOC)
15472		{
15473		  r_type = R_PPC64_NONE;
15474		  insn2 = NOP;
15475		}
15476	      else
15477		{
15478		  rel->r_offset = offset + d_offset;
15479		  r_symndx = STN_UNDEF;
15480		  r_type = R_PPC64_TPREL16_LO;
15481		  rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
15482		  insn2 = 0x38630000;	/* addi 3,3,0 */
15483		}
15484	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15485	      /* Zap the reloc on the _tls_get_addr call too.  */
15486	      BFD_ASSERT (offset == rel[1].r_offset);
15487	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
15488	      bfd_put_32 (input_bfd, insn2, contents + offset);
15489	      if (r_type != R_PPC64_NONE)
15490		goto again;
15491	    }
15492	  break;
15493
15494	case R_PPC64_DTPMOD64:
15495	  if (rel + 1 < relend
15496	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
15497	      && rel[1].r_offset == rel->r_offset + 8)
15498	    {
15499	      if ((tls_mask & TLS_GD) == 0)
15500		{
15501		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
15502		  if ((tls_mask & TLS_GDIE) != 0)
15503		    r_type = R_PPC64_TPREL64;
15504		  else
15505		    {
15506		      bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15507		      r_type = R_PPC64_NONE;
15508		    }
15509		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15510		}
15511	    }
15512	  else
15513	    {
15514	      if ((tls_mask & TLS_LD) == 0)
15515		{
15516		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15517		  r_type = R_PPC64_NONE;
15518		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15519		}
15520	    }
15521	  break;
15522
15523	case R_PPC64_TPREL64:
15524	  if ((tls_mask & TLS_TPREL) == 0)
15525	    {
15526	      r_type = R_PPC64_NONE;
15527	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15528	    }
15529	  break;
15530
15531	case R_PPC64_ENTRY:
15532	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
15533	  if (!bfd_link_pic (info)
15534	      && !info->traditional_format
15535	      && relocation + 0x80008000 <= 0xffffffff)
15536	    {
15537	      unsigned int insn1, insn2;
15538
15539	      insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15540	      insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15541	      if ((insn1 & ~0xfffc) == LD_R2_0R12
15542		  && insn2 == ADD_R2_R2_R12)
15543		{
15544		  bfd_put_32 (input_bfd,
15545			      LIS_R2 + PPC_HA (relocation),
15546			      contents + rel->r_offset);
15547		  bfd_put_32 (input_bfd,
15548			      ADDI_R2_R2 + PPC_LO (relocation),
15549			      contents + rel->r_offset + 4);
15550		}
15551	    }
15552	  else
15553	    {
15554	      relocation -= (rel->r_offset
15555			     + input_section->output_offset
15556			     + input_section->output_section->vma);
15557	      if (relocation + 0x80008000 <= 0xffffffff)
15558		{
15559		  unsigned int insn1, insn2;
15560
15561		  insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15562		  insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15563		  if ((insn1 & ~0xfffc) == LD_R2_0R12
15564		      && insn2 == ADD_R2_R2_R12)
15565		    {
15566		      bfd_put_32 (input_bfd,
15567				  ADDIS_R2_R12 + PPC_HA (relocation),
15568				  contents + rel->r_offset);
15569		      bfd_put_32 (input_bfd,
15570				  ADDI_R2_R2 + PPC_LO (relocation),
15571				  contents + rel->r_offset + 4);
15572		    }
15573		}
15574	    }
15575	  break;
15576
15577	case R_PPC64_REL16_HA:
15578	  /* If we are generating a non-PIC executable, edit
15579	     .	0:	addis 2,12,.TOC.-0b@ha
15580	     .		addi 2,2,.TOC.-0b@l
15581	     used by ELFv2 global entry points to set up r2, to
15582	     .		lis 2,.TOC.@ha
15583	     .		addi 2,2,.TOC.@l
15584	     if .TOC. is in range.  */
15585	  if (!bfd_link_pic (info)
15586	      && !info->traditional_format
15587	      && !htab->opd_abi
15588	      && rel->r_addend == d_offset
15589	      && h != NULL && &h->elf == htab->elf.hgot
15590	      && rel + 1 < relend
15591	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
15592	      && rel[1].r_offset == rel->r_offset + 4
15593	      && rel[1].r_addend == rel->r_addend + 4
15594	      && relocation + 0x80008000 <= 0xffffffff)
15595	    {
15596	      unsigned int insn1, insn2;
15597	      offset = rel->r_offset - d_offset;
15598	      insn1 = bfd_get_32 (input_bfd, contents + offset);
15599	      insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15600	      if ((insn1 & 0xffff0000) == ADDIS_R2_R12
15601		  && (insn2 & 0xffff0000) == ADDI_R2_R2)
15602		{
15603		  r_type = R_PPC64_ADDR16_HA;
15604		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15605		  rel->r_addend -= d_offset;
15606		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
15607		  rel[1].r_addend -= d_offset + 4;
15608		  bfd_put_32 (input_bfd, LIS_R2, contents + offset);
15609		}
15610	    }
15611	  break;
15612	}
15613
15614      /* Handle other relocations that tweak non-addend part of insn.  */
15615      insn = 0;
15616      max_br_offset = 1 << 25;
15617      addend = rel->r_addend;
15618      reloc_dest = DEST_NORMAL;
15619      switch (r_type)
15620	{
15621	default:
15622	  break;
15623
15624	case R_PPC64_TOCSAVE:
15625	  if (relocation + addend == (rel->r_offset
15626				      + input_section->output_offset
15627				      + input_section->output_section->vma)
15628	      && tocsave_find (htab, NO_INSERT,
15629			       &local_syms, rel, input_bfd))
15630	    {
15631	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15632	      if (insn == NOP
15633		  || insn == CROR_151515 || insn == CROR_313131)
15634		bfd_put_32 (input_bfd,
15635			    STD_R2_0R1 + STK_TOC (htab),
15636			    contents + rel->r_offset);
15637	    }
15638	  break;
15639
15640	  /* Branch taken prediction relocations.  */
15641	case R_PPC64_ADDR14_BRTAKEN:
15642	case R_PPC64_REL14_BRTAKEN:
15643	  insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
15644	  /* Fall through.  */
15645
15646	  /* Branch not taken prediction relocations.  */
15647	case R_PPC64_ADDR14_BRNTAKEN:
15648	case R_PPC64_REL14_BRNTAKEN:
15649	  insn |= bfd_get_32 (input_bfd,
15650			      contents + rel->r_offset) & ~(0x01 << 21);
15651	  /* Fall through.  */
15652
15653	case R_PPC64_REL14:
15654	  max_br_offset = 1 << 15;
15655	  /* Fall through.  */
15656
15657	case R_PPC64_REL24:
15658	case R_PPC64_REL24_NOTOC:
15659	case R_PPC64_PLTCALL:
15660	case R_PPC64_PLTCALL_NOTOC:
15661	  /* Calls to functions with a different TOC, such as calls to
15662	     shared objects, need to alter the TOC pointer.  This is
15663	     done using a linkage stub.  A REL24 branching to these
15664	     linkage stubs needs to be followed by a nop, as the nop
15665	     will be replaced with an instruction to restore the TOC
15666	     base pointer.  */
15667	  fdh = h;
15668	  if (h != NULL
15669	      && h->oh != NULL
15670	      && h->oh->is_func_descriptor)
15671	    fdh = ppc_follow_link (h->oh);
15672	  stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
15673					   htab);
15674	  if ((r_type == R_PPC64_PLTCALL
15675	       || r_type == R_PPC64_PLTCALL_NOTOC)
15676	      && stub_entry != NULL
15677	      && stub_entry->stub_type >= ppc_stub_plt_call
15678	      && stub_entry->stub_type <= ppc_stub_plt_call_both)
15679	    stub_entry = NULL;
15680
15681	  if (stub_entry != NULL
15682	      && ((stub_entry->stub_type >= ppc_stub_plt_call
15683		   && stub_entry->stub_type <= ppc_stub_plt_call_both)
15684		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15685		  || stub_entry->stub_type == ppc_stub_plt_branch_both
15686		  || stub_entry->stub_type == ppc_stub_long_branch_r2off
15687		  || stub_entry->stub_type == ppc_stub_long_branch_both))
15688	    {
15689	      bfd_boolean can_plt_call = FALSE;
15690
15691	      if (stub_entry->stub_type == ppc_stub_plt_call
15692		  && !htab->opd_abi
15693		  && htab->params->plt_localentry0 != 0
15694		  && h != NULL
15695		  && is_elfv2_localentry0 (&h->elf))
15696		{
15697		  /* The function doesn't use or change r2.  */
15698		  can_plt_call = TRUE;
15699		}
15700	      else if (r_type == R_PPC64_REL24_NOTOC)
15701		{
15702		  /* NOTOC calls don't need to restore r2.  */
15703		  can_plt_call = TRUE;
15704		}
15705
15706	      /* All of these stubs may modify r2, so there must be a
15707		 branch and link followed by a nop.  The nop is
15708		 replaced by an insn to restore r2.  */
15709	      else if (rel->r_offset + 8 <= input_section->size)
15710		{
15711		  unsigned long br;
15712
15713		  br = bfd_get_32 (input_bfd,
15714				   contents + rel->r_offset);
15715		  if ((br & 1) != 0)
15716		    {
15717		      unsigned long nop;
15718
15719		      nop = bfd_get_32 (input_bfd,
15720					contents + rel->r_offset + 4);
15721		      if (nop == LD_R2_0R1 + STK_TOC (htab))
15722			can_plt_call = TRUE;
15723		      else if (nop == NOP
15724			       || nop == CROR_151515
15725			       || nop == CROR_313131)
15726			{
15727			  if (h != NULL
15728			      && is_tls_get_addr (&h->elf, htab)
15729			      && htab->params->tls_get_addr_opt)
15730			    {
15731			      /* Special stub used, leave nop alone.  */
15732			    }
15733			  else
15734			    bfd_put_32 (input_bfd,
15735					LD_R2_0R1 + STK_TOC (htab),
15736					contents + rel->r_offset + 4);
15737			  can_plt_call = TRUE;
15738			}
15739		    }
15740		}
15741
15742	      if (!can_plt_call && h != NULL)
15743		{
15744		  const char *name = h->elf.root.root.string;
15745
15746		  if (*name == '.')
15747		    ++name;
15748
15749		  if (strncmp (name, "__libc_start_main", 17) == 0
15750		      && (name[17] == 0 || name[17] == '@'))
15751		    {
15752		      /* Allow crt1 branch to go via a toc adjusting
15753			 stub.  Other calls that never return could do
15754			 the same, if we could detect such.  */
15755		      can_plt_call = TRUE;
15756		    }
15757		}
15758
15759	      if (!can_plt_call)
15760		{
15761		  /* g++ as of 20130507 emits self-calls without a
15762		     following nop.  This is arguably wrong since we
15763		     have conflicting information.  On the one hand a
15764		     global symbol and on the other a local call
15765		     sequence, but don't error for this special case.
15766		     It isn't possible to cheaply verify we have
15767		     exactly such a call.  Allow all calls to the same
15768		     section.  */
15769		  asection *code_sec = sec;
15770
15771		  if (get_opd_info (sec) != NULL)
15772		    {
15773		      bfd_vma off = (relocation + addend
15774				     - sec->output_section->vma
15775				     - sec->output_offset);
15776
15777		      opd_entry_value (sec, off, &code_sec, NULL, FALSE);
15778		    }
15779		  if (code_sec == input_section)
15780		    can_plt_call = TRUE;
15781		}
15782
15783	      if (!can_plt_call)
15784		{
15785		  if (stub_entry->stub_type >= ppc_stub_plt_call
15786		      && stub_entry->stub_type <= ppc_stub_plt_call_both)
15787		    info->callbacks->einfo
15788		      /* xgettext:c-format */
15789		      (_("%H: call to `%pT' lacks nop, can't restore toc; "
15790			 "(plt call stub)\n"),
15791		       input_bfd, input_section, rel->r_offset, sym_name);
15792		  else
15793		    info->callbacks->einfo
15794		      /* xgettext:c-format */
15795		      (_("%H: call to `%pT' lacks nop, can't restore toc; "
15796			 "(toc save/adjust stub)\n"),
15797		       input_bfd, input_section, rel->r_offset, sym_name);
15798
15799		  bfd_set_error (bfd_error_bad_value);
15800		  ret = FALSE;
15801		}
15802
15803	      if (can_plt_call
15804		  && stub_entry->stub_type >= ppc_stub_plt_call
15805		  && stub_entry->stub_type <= ppc_stub_plt_call_both)
15806		unresolved_reloc = FALSE;
15807	    }
15808
15809	  if ((stub_entry == NULL
15810	       || stub_entry->stub_type == ppc_stub_long_branch
15811	       || stub_entry->stub_type == ppc_stub_plt_branch)
15812	      && get_opd_info (sec) != NULL)
15813	    {
15814	      /* The branch destination is the value of the opd entry. */
15815	      bfd_vma off = (relocation + addend
15816			     - sec->output_section->vma
15817			     - sec->output_offset);
15818	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
15819	      if (dest != (bfd_vma) -1)
15820		{
15821		  relocation = dest;
15822		  addend = 0;
15823		  reloc_dest = DEST_OPD;
15824		}
15825	    }
15826
15827	  /* If the branch is out of reach we ought to have a long
15828	     branch stub.  */
15829	  from = (rel->r_offset
15830		  + input_section->output_offset
15831		  + input_section->output_section->vma);
15832
15833	  relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
15834						  ? fdh->elf.other
15835						  : sym->st_other);
15836
15837	  if (stub_entry != NULL
15838	      && (stub_entry->stub_type == ppc_stub_long_branch
15839		  || stub_entry->stub_type == ppc_stub_plt_branch)
15840	      && (r_type == R_PPC64_ADDR14_BRTAKEN
15841		  || r_type == R_PPC64_ADDR14_BRNTAKEN
15842		  || (relocation + addend - from + max_br_offset
15843		      < 2 * max_br_offset)))
15844	    /* Don't use the stub if this branch is in range.  */
15845	    stub_entry = NULL;
15846
15847	  if (stub_entry != NULL
15848	      && (stub_entry->stub_type == ppc_stub_long_branch_notoc
15849		  || stub_entry->stub_type == ppc_stub_long_branch_both
15850		  || stub_entry->stub_type == ppc_stub_plt_branch_notoc
15851		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
15852	      && (r_type != R_PPC64_REL24_NOTOC
15853		  || ((fdh ? fdh->elf.other : sym->st_other)
15854		      & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
15855	      && (relocation + addend - from + max_br_offset
15856		  < 2 * max_br_offset))
15857	    stub_entry = NULL;
15858
15859	  if (stub_entry != NULL
15860	      && (stub_entry->stub_type == ppc_stub_long_branch_r2off
15861		  || stub_entry->stub_type == ppc_stub_long_branch_both
15862		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15863		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
15864	      && r_type == R_PPC64_REL24_NOTOC
15865	      && (relocation + addend - from + max_br_offset
15866		  < 2 * max_br_offset))
15867	    stub_entry = NULL;
15868
15869	  if (stub_entry != NULL)
15870	    {
15871	      /* Munge up the value and addend so that we call the stub
15872		 rather than the procedure directly.  */
15873	      asection *stub_sec = stub_entry->group->stub_sec;
15874
15875	      if (stub_entry->stub_type == ppc_stub_save_res)
15876		relocation += (stub_sec->output_offset
15877			       + stub_sec->output_section->vma
15878			       + stub_sec->size - htab->sfpr->size
15879			       - htab->sfpr->output_offset
15880			       - htab->sfpr->output_section->vma);
15881	      else
15882		relocation = (stub_entry->stub_offset
15883			      + stub_sec->output_offset
15884			      + stub_sec->output_section->vma);
15885	      addend = 0;
15886	      reloc_dest = DEST_STUB;
15887
15888	      if (((stub_entry->stub_type == ppc_stub_plt_call
15889		    && ALWAYS_EMIT_R2SAVE)
15890		   || stub_entry->stub_type == ppc_stub_plt_call_r2save
15891		   || stub_entry->stub_type == ppc_stub_plt_call_both)
15892		  && !(h != NULL
15893		       && is_tls_get_addr (&h->elf, htab)
15894		       && htab->params->tls_get_addr_opt)
15895		  && rel + 1 < relend
15896		  && rel[1].r_offset == rel->r_offset + 4
15897		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
15898		relocation += 4;
15899	      else if ((stub_entry->stub_type == ppc_stub_long_branch_both
15900			|| stub_entry->stub_type == ppc_stub_plt_branch_both
15901			|| stub_entry->stub_type == ppc_stub_plt_call_both)
15902		       && r_type == R_PPC64_REL24_NOTOC)
15903		relocation += 4;
15904
15905	      if (r_type == R_PPC64_REL24_NOTOC
15906		  && (stub_entry->stub_type == ppc_stub_plt_call_notoc
15907		      || stub_entry->stub_type == ppc_stub_plt_call_both))
15908		htab->notoc_plt = 1;
15909	    }
15910
15911	  if (insn != 0)
15912	    {
15913	      if (is_isa_v2)
15914		{
15915		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
15916		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
15917		     for branch on CTR insns (BO == 1a00t or 1a01t).  */
15918		  if ((insn & (0x14 << 21)) == (0x04 << 21))
15919		    insn |= 0x02 << 21;
15920		  else if ((insn & (0x14 << 21)) == (0x10 << 21))
15921		    insn |= 0x08 << 21;
15922		  else
15923		    break;
15924		}
15925	      else
15926		{
15927		  /* Invert 'y' bit if not the default.  */
15928		  if ((bfd_signed_vma) (relocation + addend - from) < 0)
15929		    insn ^= 0x01 << 21;
15930		}
15931
15932	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15933	    }
15934
15935	  /* NOP out calls to undefined weak functions.
15936	     We can thus call a weak function without first
15937	     checking whether the function is defined.  */
15938	  else if (h != NULL
15939		   && h->elf.root.type == bfd_link_hash_undefweak
15940		   && h->elf.dynindx == -1
15941		   && (r_type == R_PPC64_REL24
15942		       || r_type == R_PPC64_REL24_NOTOC)
15943		   && relocation == 0
15944		   && addend == 0)
15945	    {
15946	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15947	      goto copy_reloc;
15948	    }
15949	  break;
15950
15951	case R_PPC64_GOT16_DS:
15952	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
15953	      || !htab->do_toc_opt)
15954	    break;
15955	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
15956	  if (relocation + addend - from + 0x8000 < 0x10000
15957	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
15958	    {
15959	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15960	      if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15961		{
15962		  insn += (14u << 26) - (58u << 26);
15963		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15964		  r_type = R_PPC64_TOC16;
15965		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15966		}
15967	    }
15968	  break;
15969
15970	case R_PPC64_GOT16_LO_DS:
15971	case R_PPC64_GOT16_HA:
15972	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
15973	      || !htab->do_toc_opt)
15974	    break;
15975	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
15976	  if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
15977	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
15978	    {
15979	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15980	      if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15981		{
15982		  insn += (14u << 26) - (58u << 26);
15983		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15984		  r_type = R_PPC64_TOC16_LO;
15985		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15986		}
15987	      else if ((insn & (0x3fu << 26)) == 15u << 26 /* addis */)
15988		{
15989		  r_type = R_PPC64_TOC16_HA;
15990		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15991		}
15992	    }
15993	  break;
15994
15995	case R_PPC64_GOT_PCREL34:
15996	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
15997	      || !htab->do_toc_opt)
15998	    break;
15999	  from = (rel->r_offset
16000		  + input_section->output_section->vma
16001		  + input_section->output_offset);
16002	  if (!(relocation - from + (1ULL << 33) < 1ULL << 34
16003		&& (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
16004	    break;
16005
16006	  offset = rel->r_offset;
16007	  pinsn = bfd_get_32 (input_bfd, contents + offset);
16008	  pinsn <<= 32;
16009	  pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
16010	  if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
16011	      != ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
16012	    break;
16013
16014	  /* Replace with paddi.  */
16015	  pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
16016	  r_type = R_PPC64_PCREL34;
16017	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
16018	  bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
16019	  bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
16020	  /* Fall through.  */
16021
16022	case R_PPC64_PCREL34:
16023	  if (!htab->params->no_pcrel_opt
16024	      && rel + 1 < relend
16025	      && rel[1].r_offset == rel->r_offset
16026	      && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT)
16027	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
16028	    {
16029	      offset = rel->r_offset;
16030	      pinsn = bfd_get_32 (input_bfd, contents + offset);
16031	      pinsn <<= 32;
16032	      pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
16033	      if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
16034		   == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
16035		       | (14ULL << 26) /* paddi */))
16036		{
16037		  bfd_vma off2 = rel[1].r_addend;
16038		  if (off2 == 0)
16039		    /* zero means next insn.  */
16040		    off2 = 8;
16041		  off2 += offset;
16042		  if (off2 + 4 <= input_section->size)
16043		    {
16044		      uint64_t pinsn2;
16045		      bfd_signed_vma addend_off;
16046		      pinsn2 = bfd_get_32 (input_bfd, contents + off2);
16047		      pinsn2 <<= 32;
16048		      if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
16049			{
16050			  if (off2 + 8 > input_section->size)
16051			    break;
16052			  pinsn2 |= bfd_get_32 (input_bfd,
16053						contents + off2 + 4);
16054			}
16055		      if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
16056			{
16057			  addend += addend_off;
16058			  rel->r_addend = addend;
16059			  bfd_put_32 (input_bfd, pinsn >> 32,
16060				      contents + offset);
16061			  bfd_put_32 (input_bfd, pinsn,
16062				      contents + offset + 4);
16063			  bfd_put_32 (input_bfd, pinsn2 >> 32,
16064				      contents + off2);
16065			  if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
16066			    bfd_put_32 (input_bfd, pinsn2,
16067					contents + off2 + 4);
16068			}
16069		    }
16070		}
16071	    }
16072	  break;
16073	}
16074
16075      tls_type = 0;
16076      save_unresolved_reloc = unresolved_reloc;
16077      switch (r_type)
16078	{
16079	default:
16080	  /* xgettext:c-format */
16081	  _bfd_error_handler (_("%pB: %s unsupported"),
16082			      input_bfd, ppc64_elf_howto_table[r_type]->name);
16083
16084	  bfd_set_error (bfd_error_bad_value);
16085	  ret = FALSE;
16086	  goto copy_reloc;
16087
16088	case R_PPC64_NONE:
16089	case R_PPC64_TLS:
16090	case R_PPC64_TLSGD:
16091	case R_PPC64_TLSLD:
16092	case R_PPC64_TOCSAVE:
16093	case R_PPC64_GNU_VTINHERIT:
16094	case R_PPC64_GNU_VTENTRY:
16095	case R_PPC64_ENTRY:
16096	case R_PPC64_PCREL_OPT:
16097	  goto copy_reloc;
16098
16099	  /* GOT16 relocations.  Like an ADDR16 using the symbol's
16100	     address in the GOT as relocation value instead of the
16101	     symbol's value itself.  Also, create a GOT entry for the
16102	     symbol and put the symbol value there.  */
16103	case R_PPC64_GOT_TLSGD16:
16104	case R_PPC64_GOT_TLSGD16_LO:
16105	case R_PPC64_GOT_TLSGD16_HI:
16106	case R_PPC64_GOT_TLSGD16_HA:
16107	case R_PPC64_GOT_TLSGD_PCREL34:
16108	  tls_type = TLS_TLS | TLS_GD;
16109	  goto dogot;
16110
16111	case R_PPC64_GOT_TLSLD16:
16112	case R_PPC64_GOT_TLSLD16_LO:
16113	case R_PPC64_GOT_TLSLD16_HI:
16114	case R_PPC64_GOT_TLSLD16_HA:
16115	case R_PPC64_GOT_TLSLD_PCREL34:
16116	  tls_type = TLS_TLS | TLS_LD;
16117	  goto dogot;
16118
16119	case R_PPC64_GOT_TPREL16_DS:
16120	case R_PPC64_GOT_TPREL16_LO_DS:
16121	case R_PPC64_GOT_TPREL16_HI:
16122	case R_PPC64_GOT_TPREL16_HA:
16123	case R_PPC64_GOT_TPREL_PCREL34:
16124	  tls_type = TLS_TLS | TLS_TPREL;
16125	  goto dogot;
16126
16127	case R_PPC64_GOT_DTPREL16_DS:
16128	case R_PPC64_GOT_DTPREL16_LO_DS:
16129	case R_PPC64_GOT_DTPREL16_HI:
16130	case R_PPC64_GOT_DTPREL16_HA:
16131	case R_PPC64_GOT_DTPREL_PCREL34:
16132	  tls_type = TLS_TLS | TLS_DTPREL;
16133	  goto dogot;
16134
16135	case R_PPC64_GOT16:
16136	case R_PPC64_GOT16_LO:
16137	case R_PPC64_GOT16_HI:
16138	case R_PPC64_GOT16_HA:
16139	case R_PPC64_GOT16_DS:
16140	case R_PPC64_GOT16_LO_DS:
16141	case R_PPC64_GOT_PCREL34:
16142	dogot:
16143	  {
16144	    /* Relocation is to the entry for this symbol in the global
16145	       offset table.  */
16146	    asection *got;
16147	    bfd_vma *offp;
16148	    bfd_vma off;
16149	    unsigned long indx = 0;
16150	    struct got_entry *ent;
16151
16152	    if (tls_type == (TLS_TLS | TLS_LD)
16153		&& (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
16154	      ent = ppc64_tlsld_got (input_bfd);
16155	    else
16156	      {
16157		if (h != NULL)
16158		  {
16159		    if (!htab->elf.dynamic_sections_created
16160			|| h->elf.dynindx == -1
16161			|| SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16162			|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
16163		      /* This is actually a static link, or it is a
16164			 -Bsymbolic link and the symbol is defined
16165			 locally, or the symbol was forced to be local
16166			 because of a version file.  */
16167		      ;
16168		    else
16169		      {
16170			indx = h->elf.dynindx;
16171			unresolved_reloc = FALSE;
16172		      }
16173		    ent = h->elf.got.glist;
16174		  }
16175		else
16176		  {
16177		    if (local_got_ents == NULL)
16178		      abort ();
16179		    ent = local_got_ents[r_symndx];
16180		  }
16181
16182		for (; ent != NULL; ent = ent->next)
16183		  if (ent->addend == orig_rel.r_addend
16184		      && ent->owner == input_bfd
16185		      && ent->tls_type == tls_type)
16186		    break;
16187	      }
16188
16189	    if (ent == NULL)
16190	      abort ();
16191	    if (ent->is_indirect)
16192	      ent = ent->got.ent;
16193	    offp = &ent->got.offset;
16194	    got = ppc64_elf_tdata (ent->owner)->got;
16195	    if (got == NULL)
16196	      abort ();
16197
16198	    /* The offset must always be a multiple of 8.  We use the
16199	       least significant bit to record whether we have already
16200	       processed this entry.  */
16201	    off = *offp;
16202	    if ((off & 1) != 0)
16203	      off &= ~1;
16204	    else
16205	      {
16206		/* Generate relocs for the dynamic linker, except in
16207		   the case of TLSLD where we'll use one entry per
16208		   module.  */
16209		asection *relgot;
16210		bfd_boolean ifunc;
16211
16212		*offp = off | 1;
16213		relgot = NULL;
16214		ifunc = (h != NULL
16215			 ? h->elf.type == STT_GNU_IFUNC
16216			 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
16217		if (ifunc)
16218		  {
16219		    relgot = htab->elf.irelplt;
16220		    if (indx == 0 || is_static_defined (&h->elf))
16221		      htab->elf.ifunc_resolvers = TRUE;
16222		  }
16223		else if (indx != 0
16224			 || (bfd_link_pic (info)
16225			     && (h == NULL
16226				 || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
16227			     && !(tls_type != 0
16228				  && bfd_link_executable (info)
16229				  && (h == NULL
16230				      || SYMBOL_REFERENCES_LOCAL (info,
16231								  &h->elf)))))
16232		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
16233		if (relgot != NULL)
16234		  {
16235		    outrel.r_offset = (got->output_section->vma
16236				       + got->output_offset
16237				       + off);
16238		    outrel.r_addend = orig_rel.r_addend;
16239		    if (tls_type & (TLS_LD | TLS_GD))
16240		      {
16241			outrel.r_addend = 0;
16242			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
16243			if (tls_type == (TLS_TLS | TLS_GD))
16244			  {
16245			    loc = relgot->contents;
16246			    loc += (relgot->reloc_count++
16247				    * sizeof (Elf64_External_Rela));
16248			    bfd_elf64_swap_reloca_out (output_bfd,
16249						       &outrel, loc);
16250			    outrel.r_offset += 8;
16251			    outrel.r_addend = orig_rel.r_addend;
16252			    outrel.r_info
16253			      = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
16254			  }
16255		      }
16256		    else if (tls_type == (TLS_TLS | TLS_DTPREL))
16257		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
16258		    else if (tls_type == (TLS_TLS | TLS_TPREL))
16259		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
16260		    else if (indx != 0)
16261		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
16262		    else
16263		      {
16264			if (ifunc)
16265			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16266			else
16267			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16268
16269			/* Write the .got section contents for the sake
16270			   of prelink.  */
16271			loc = got->contents + off;
16272			bfd_put_64 (output_bfd, outrel.r_addend + relocation,
16273				    loc);
16274		      }
16275
16276		    if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
16277		      {
16278			outrel.r_addend += relocation;
16279			if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
16280			  {
16281			    if (htab->elf.tls_sec == NULL)
16282			      outrel.r_addend = 0;
16283			    else
16284			      outrel.r_addend -= htab->elf.tls_sec->vma;
16285			  }
16286		      }
16287		    loc = relgot->contents;
16288		    loc += (relgot->reloc_count++
16289			    * sizeof (Elf64_External_Rela));
16290		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16291		  }
16292
16293		/* Init the .got section contents here if we're not
16294		   emitting a reloc.  */
16295		else
16296		  {
16297		    relocation += orig_rel.r_addend;
16298		    if (tls_type != 0)
16299		      {
16300			if (htab->elf.tls_sec == NULL)
16301			  relocation = 0;
16302			else
16303			  {
16304			    if (tls_type & TLS_LD)
16305			      relocation = 0;
16306			    else
16307			      relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
16308			    if (tls_type & TLS_TPREL)
16309			      relocation += DTP_OFFSET - TP_OFFSET;
16310			  }
16311
16312			if (tls_type & (TLS_GD | TLS_LD))
16313			  {
16314			    bfd_put_64 (output_bfd, relocation,
16315					got->contents + off + 8);
16316			    relocation = 1;
16317			  }
16318		      }
16319		    bfd_put_64 (output_bfd, relocation,
16320				got->contents + off);
16321		  }
16322	      }
16323
16324	    if (off >= (bfd_vma) -2)
16325	      abort ();
16326
16327	    relocation = got->output_section->vma + got->output_offset + off;
16328	    addend = 0;
16329	    if (!(r_type == R_PPC64_GOT_PCREL34
16330		  || r_type == R_PPC64_GOT_TLSGD_PCREL34
16331		  || r_type == R_PPC64_GOT_TLSLD_PCREL34
16332		  || r_type == R_PPC64_GOT_TPREL_PCREL34
16333		  || r_type == R_PPC64_GOT_DTPREL_PCREL34))
16334	      addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
16335	  }
16336	  break;
16337
16338	case R_PPC64_PLT16_HA:
16339	case R_PPC64_PLT16_HI:
16340	case R_PPC64_PLT16_LO:
16341	case R_PPC64_PLT16_LO_DS:
16342	case R_PPC64_PLT_PCREL34:
16343	case R_PPC64_PLT_PCREL34_NOTOC:
16344	case R_PPC64_PLT32:
16345	case R_PPC64_PLT64:
16346	case R_PPC64_PLTSEQ:
16347	case R_PPC64_PLTSEQ_NOTOC:
16348	case R_PPC64_PLTCALL:
16349	case R_PPC64_PLTCALL_NOTOC:
16350	  /* Relocation is to the entry for this symbol in the
16351	     procedure linkage table.  */
16352	  unresolved_reloc = TRUE;
16353	  {
16354	    struct plt_entry **plt_list = NULL;
16355	    if (h != NULL)
16356	      plt_list = &h->elf.plt.plist;
16357	    else if (local_got_ents != NULL)
16358	      {
16359		struct plt_entry **local_plt = (struct plt_entry **)
16360		  (local_got_ents + symtab_hdr->sh_info);
16361		plt_list = local_plt + r_symndx;
16362	      }
16363	    if (plt_list)
16364	      {
16365		struct plt_entry *ent;
16366
16367		for (ent = *plt_list; ent != NULL; ent = ent->next)
16368		  if (ent->plt.offset != (bfd_vma) -1
16369		      && ent->addend == orig_rel.r_addend)
16370		    {
16371		      asection *plt;
16372		      bfd_vma got;
16373
16374		      plt = htab->elf.splt;
16375		      if (!htab->elf.dynamic_sections_created
16376			  || h == NULL
16377			  || h->elf.dynindx == -1)
16378			{
16379			  if (h != NULL
16380			      ? h->elf.type == STT_GNU_IFUNC
16381			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16382			    plt = htab->elf.iplt;
16383			  else
16384			    plt = htab->pltlocal;
16385			}
16386		      relocation = (plt->output_section->vma
16387				    + plt->output_offset
16388				    + ent->plt.offset);
16389		      if (r_type == R_PPC64_PLT16_HA
16390			  || r_type == R_PPC64_PLT16_HI
16391			  || r_type == R_PPC64_PLT16_LO
16392			  || r_type == R_PPC64_PLT16_LO_DS)
16393			{
16394			  got = (elf_gp (output_bfd)
16395				 + htab->sec_info[input_section->id].toc_off);
16396			  relocation -= got;
16397			}
16398		      addend = 0;
16399		      unresolved_reloc = FALSE;
16400		      break;
16401		    }
16402	      }
16403	  }
16404	  break;
16405
16406	case R_PPC64_TOC:
16407	  /* Relocation value is TOC base.  */
16408	  relocation = TOCstart;
16409	  if (r_symndx == STN_UNDEF)
16410	    relocation += htab->sec_info[input_section->id].toc_off;
16411	  else if (unresolved_reloc)
16412	    ;
16413	  else if (sec != NULL && sec->id < htab->sec_info_arr_size)
16414	    relocation += htab->sec_info[sec->id].toc_off;
16415	  else
16416	    unresolved_reloc = TRUE;
16417	  goto dodyn;
16418
16419	  /* TOC16 relocs.  We want the offset relative to the TOC base,
16420	     which is the address of the start of the TOC plus 0x8000.
16421	     The TOC consists of sections .got, .toc, .tocbss, and .plt,
16422	     in this order.  */
16423	case R_PPC64_TOC16:
16424	case R_PPC64_TOC16_LO:
16425	case R_PPC64_TOC16_HI:
16426	case R_PPC64_TOC16_DS:
16427	case R_PPC64_TOC16_LO_DS:
16428	case R_PPC64_TOC16_HA:
16429	  addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
16430	  if (h != NULL)
16431	    goto dodyn;
16432	  break;
16433
16434	  /* Relocate against the beginning of the section.  */
16435	case R_PPC64_SECTOFF:
16436	case R_PPC64_SECTOFF_LO:
16437	case R_PPC64_SECTOFF_HI:
16438	case R_PPC64_SECTOFF_DS:
16439	case R_PPC64_SECTOFF_LO_DS:
16440	case R_PPC64_SECTOFF_HA:
16441	  if (sec != NULL)
16442	    addend -= sec->output_section->vma;
16443	  break;
16444
16445	case R_PPC64_REL16:
16446	case R_PPC64_REL16_LO:
16447	case R_PPC64_REL16_HI:
16448	case R_PPC64_REL16_HA:
16449	case R_PPC64_REL16_HIGH:
16450	case R_PPC64_REL16_HIGHA:
16451	case R_PPC64_REL16_HIGHER:
16452	case R_PPC64_REL16_HIGHERA:
16453	case R_PPC64_REL16_HIGHEST:
16454	case R_PPC64_REL16_HIGHESTA:
16455	case R_PPC64_REL16_HIGHER34:
16456	case R_PPC64_REL16_HIGHERA34:
16457	case R_PPC64_REL16_HIGHEST34:
16458	case R_PPC64_REL16_HIGHESTA34:
16459	case R_PPC64_REL16DX_HA:
16460	case R_PPC64_REL14:
16461	case R_PPC64_REL14_BRNTAKEN:
16462	case R_PPC64_REL14_BRTAKEN:
16463	case R_PPC64_REL24:
16464	case R_PPC64_REL24_NOTOC:
16465	case R_PPC64_PCREL34:
16466	case R_PPC64_PCREL28:
16467	  break;
16468
16469	case R_PPC64_TPREL16:
16470	case R_PPC64_TPREL16_LO:
16471	case R_PPC64_TPREL16_HI:
16472	case R_PPC64_TPREL16_HA:
16473	case R_PPC64_TPREL16_DS:
16474	case R_PPC64_TPREL16_LO_DS:
16475	case R_PPC64_TPREL16_HIGH:
16476	case R_PPC64_TPREL16_HIGHA:
16477	case R_PPC64_TPREL16_HIGHER:
16478	case R_PPC64_TPREL16_HIGHERA:
16479	case R_PPC64_TPREL16_HIGHEST:
16480	case R_PPC64_TPREL16_HIGHESTA:
16481	case R_PPC64_TPREL34:
16482	  if (h != NULL
16483	      && h->elf.root.type == bfd_link_hash_undefweak
16484	      && h->elf.dynindx == -1)
16485	    {
16486	      /* Make this relocation against an undefined weak symbol
16487		 resolve to zero.  This is really just a tweak, since
16488		 code using weak externs ought to check that they are
16489		 defined before using them.  */
16490	      bfd_byte *p = contents + rel->r_offset - d_offset;
16491
16492	      insn = bfd_get_32 (input_bfd, p);
16493	      insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
16494	      if (insn != 0)
16495		bfd_put_32 (input_bfd, insn, p);
16496	      break;
16497	    }
16498	  if (htab->elf.tls_sec != NULL)
16499	    addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16500	  /* The TPREL16 relocs shouldn't really be used in shared
16501	     libs or with non-local symbols as that will result in
16502	     DT_TEXTREL being set, but support them anyway.  */
16503	  goto dodyn;
16504
16505	case R_PPC64_DTPREL16:
16506	case R_PPC64_DTPREL16_LO:
16507	case R_PPC64_DTPREL16_HI:
16508	case R_PPC64_DTPREL16_HA:
16509	case R_PPC64_DTPREL16_DS:
16510	case R_PPC64_DTPREL16_LO_DS:
16511	case R_PPC64_DTPREL16_HIGH:
16512	case R_PPC64_DTPREL16_HIGHA:
16513	case R_PPC64_DTPREL16_HIGHER:
16514	case R_PPC64_DTPREL16_HIGHERA:
16515	case R_PPC64_DTPREL16_HIGHEST:
16516	case R_PPC64_DTPREL16_HIGHESTA:
16517	case R_PPC64_DTPREL34:
16518	  if (htab->elf.tls_sec != NULL)
16519	    addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16520	  break;
16521
16522	case R_PPC64_ADDR64_LOCAL:
16523	  addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
16524					      ? h->elf.other
16525					      : sym->st_other);
16526	  break;
16527
16528	case R_PPC64_DTPMOD64:
16529	  relocation = 1;
16530	  addend = 0;
16531	  goto dodyn;
16532
16533	case R_PPC64_TPREL64:
16534	  if (htab->elf.tls_sec != NULL)
16535	    addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16536	  goto dodyn;
16537
16538	case R_PPC64_DTPREL64:
16539	  if (htab->elf.tls_sec != NULL)
16540	    addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16541	  /* Fall through.  */
16542
16543	  /* Relocations that may need to be propagated if this is a
16544	     dynamic object.  */
16545	case R_PPC64_REL30:
16546	case R_PPC64_REL32:
16547	case R_PPC64_REL64:
16548	case R_PPC64_ADDR14:
16549	case R_PPC64_ADDR14_BRNTAKEN:
16550	case R_PPC64_ADDR14_BRTAKEN:
16551	case R_PPC64_ADDR16:
16552	case R_PPC64_ADDR16_DS:
16553	case R_PPC64_ADDR16_HA:
16554	case R_PPC64_ADDR16_HI:
16555	case R_PPC64_ADDR16_HIGH:
16556	case R_PPC64_ADDR16_HIGHA:
16557	case R_PPC64_ADDR16_HIGHER:
16558	case R_PPC64_ADDR16_HIGHERA:
16559	case R_PPC64_ADDR16_HIGHEST:
16560	case R_PPC64_ADDR16_HIGHESTA:
16561	case R_PPC64_ADDR16_LO:
16562	case R_PPC64_ADDR16_LO_DS:
16563	case R_PPC64_ADDR16_HIGHER34:
16564	case R_PPC64_ADDR16_HIGHERA34:
16565	case R_PPC64_ADDR16_HIGHEST34:
16566	case R_PPC64_ADDR16_HIGHESTA34:
16567	case R_PPC64_ADDR24:
16568	case R_PPC64_ADDR32:
16569	case R_PPC64_ADDR64:
16570	case R_PPC64_UADDR16:
16571	case R_PPC64_UADDR32:
16572	case R_PPC64_UADDR64:
16573	case R_PPC64_D34:
16574	case R_PPC64_D34_LO:
16575	case R_PPC64_D34_HI30:
16576	case R_PPC64_D34_HA30:
16577	case R_PPC64_D28:
16578	dodyn:
16579	  if ((input_section->flags & SEC_ALLOC) == 0)
16580	    break;
16581
16582	  if (NO_OPD_RELOCS && is_opd)
16583	    break;
16584
16585	  if (bfd_link_pic (info)
16586	      ? ((h == NULL
16587		  || h->elf.dyn_relocs != NULL)
16588		 && ((h != NULL && pc_dynrelocs (h))
16589		     || must_be_dyn_reloc (info, r_type)))
16590	      : (h != NULL
16591		 ? h->elf.dyn_relocs != NULL
16592		 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16593	    {
16594	      bfd_boolean skip, relocate;
16595	      asection *sreloc;
16596	      bfd_vma out_off;
16597	      long indx = 0;
16598
16599	      /* When generating a dynamic object, these relocations
16600		 are copied into the output file to be resolved at run
16601		 time.  */
16602
16603	      skip = FALSE;
16604	      relocate = FALSE;
16605
16606	      out_off = _bfd_elf_section_offset (output_bfd, info,
16607						 input_section, rel->r_offset);
16608	      if (out_off == (bfd_vma) -1)
16609		skip = TRUE;
16610	      else if (out_off == (bfd_vma) -2)
16611		skip = TRUE, relocate = TRUE;
16612	      out_off += (input_section->output_section->vma
16613			  + input_section->output_offset);
16614	      outrel.r_offset = out_off;
16615	      outrel.r_addend = rel->r_addend;
16616
16617	      /* Optimize unaligned reloc use.  */
16618	      if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
16619		  || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
16620		r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
16621	      else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
16622		       || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
16623		r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
16624	      else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
16625		       || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
16626		r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
16627
16628	      if (skip)
16629		memset (&outrel, 0, sizeof outrel);
16630	      else if (h != NULL
16631		       && !SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16632		       && !is_opd
16633		       && r_type != R_PPC64_TOC)
16634		{
16635		  indx = h->elf.dynindx;
16636		  BFD_ASSERT (indx != -1);
16637		  outrel.r_info = ELF64_R_INFO (indx, r_type);
16638		}
16639	      else
16640		{
16641		  /* This symbol is local, or marked to become local,
16642		     or this is an opd section reloc which must point
16643		     at a local function.  */
16644		  outrel.r_addend += relocation;
16645		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
16646		    {
16647		      if (is_opd && h != NULL)
16648			{
16649			  /* Lie about opd entries.  This case occurs
16650			     when building shared libraries and we
16651			     reference a function in another shared
16652			     lib.  The same thing happens for a weak
16653			     definition in an application that's
16654			     overridden by a strong definition in a
16655			     shared lib.  (I believe this is a generic
16656			     bug in binutils handling of weak syms.)
16657			     In these cases we won't use the opd
16658			     entry in this lib.  */
16659			  unresolved_reloc = FALSE;
16660			}
16661		      if (!is_opd
16662			  && r_type == R_PPC64_ADDR64
16663			  && (h != NULL
16664			      ? h->elf.type == STT_GNU_IFUNC
16665			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16666			outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16667		      else
16668			{
16669			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16670
16671			  /* We need to relocate .opd contents for ld.so.
16672			     Prelink also wants simple and consistent rules
16673			     for relocs.  This make all RELATIVE relocs have
16674			     *r_offset equal to r_addend.  */
16675			  relocate = TRUE;
16676			}
16677		    }
16678		  else
16679		    {
16680		      if (h != NULL
16681			  ? h->elf.type == STT_GNU_IFUNC
16682			  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16683			{
16684			  info->callbacks->einfo
16685			    /* xgettext:c-format */
16686			    (_("%H: %s for indirect "
16687			       "function `%pT' unsupported\n"),
16688			     input_bfd, input_section, rel->r_offset,
16689			     ppc64_elf_howto_table[r_type]->name,
16690			     sym_name);
16691			  ret = FALSE;
16692			}
16693		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
16694			;
16695		      else if (sec == NULL || sec->owner == NULL)
16696			{
16697			  bfd_set_error (bfd_error_bad_value);
16698			  return FALSE;
16699			}
16700		      else
16701			{
16702			  asection *osec = sec->output_section;
16703
16704			  if ((osec->flags & SEC_THREAD_LOCAL) != 0)
16705			    {
16706			      /* TLS symbol values are relative to the
16707				 TLS segment.  Dynamic relocations for
16708				 local TLS symbols therefore can't be
16709				 reduced to a relocation against their
16710				 section symbol because it holds the
16711				 address of the section, not a value
16712				 relative to the TLS segment.  We could
16713				 change the .tdata dynamic section symbol
16714				 to be zero value but STN_UNDEF works
16715				 and is used elsewhere, eg. for TPREL64
16716				 GOT relocs against local TLS symbols.  */
16717			      osec = htab->elf.tls_sec;
16718			      indx = 0;
16719			    }
16720			  else
16721			    {
16722			      indx = elf_section_data (osec)->dynindx;
16723			      if (indx == 0)
16724				{
16725				  if ((osec->flags & SEC_READONLY) == 0
16726				      && htab->elf.data_index_section != NULL)
16727				    osec = htab->elf.data_index_section;
16728				  else
16729				    osec = htab->elf.text_index_section;
16730				  indx = elf_section_data (osec)->dynindx;
16731				}
16732			      BFD_ASSERT (indx != 0);
16733			    }
16734
16735			  /* We are turning this relocation into one
16736			     against a section symbol, so subtract out
16737			     the output section's address but not the
16738			     offset of the input section in the output
16739			     section.  */
16740			  outrel.r_addend -= osec->vma;
16741			}
16742
16743		      outrel.r_info = ELF64_R_INFO (indx, r_type);
16744		    }
16745		}
16746
16747	      sreloc = elf_section_data (input_section)->sreloc;
16748	      if (h != NULL
16749		  ? h->elf.type == STT_GNU_IFUNC
16750		  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16751		{
16752		  sreloc = htab->elf.irelplt;
16753		  if (indx == 0 || is_static_defined (&h->elf))
16754		    htab->elf.ifunc_resolvers = TRUE;
16755		}
16756	      if (sreloc == NULL)
16757		abort ();
16758
16759	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
16760		  >= sreloc->size)
16761		abort ();
16762	      loc = sreloc->contents;
16763	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
16764	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16765
16766	      if (!warned_dynamic
16767		  && !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
16768		{
16769		  info->callbacks->einfo
16770		    /* xgettext:c-format */
16771		    (_("%X%P: %pB: %s against %pT "
16772		       "is not supported by glibc as a dynamic relocation\n"),
16773		     input_bfd,
16774		     ppc64_elf_howto_table[ELF64_R_TYPE (outrel.r_info)]->name,
16775		     sym_name);
16776		  warned_dynamic = TRUE;
16777		}
16778
16779	      /* If this reloc is against an external symbol, it will
16780		 be computed at runtime, so there's no need to do
16781		 anything now.  However, for the sake of prelink ensure
16782		 that the section contents are a known value.  */
16783	      if (!relocate)
16784		{
16785		  unresolved_reloc = FALSE;
16786		  /* The value chosen here is quite arbitrary as ld.so
16787		     ignores section contents except for the special
16788		     case of .opd where the contents might be accessed
16789		     before relocation.  Choose zero, as that won't
16790		     cause reloc overflow.  */
16791		  relocation = 0;
16792		  addend = 0;
16793		  /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
16794		     to improve backward compatibility with older
16795		     versions of ld.  */
16796		  if (r_type == R_PPC64_ADDR64)
16797		    addend = outrel.r_addend;
16798		  /* Adjust pc_relative relocs to have zero in *r_offset.  */
16799		  else if (ppc64_elf_howto_table[r_type]->pc_relative)
16800		    addend = outrel.r_offset;
16801		}
16802	    }
16803	  break;
16804
16805	case R_PPC64_COPY:
16806	case R_PPC64_GLOB_DAT:
16807	case R_PPC64_JMP_SLOT:
16808	case R_PPC64_JMP_IREL:
16809	case R_PPC64_RELATIVE:
16810	  /* We shouldn't ever see these dynamic relocs in relocatable
16811	     files.  */
16812	  /* Fall through.  */
16813
16814	case R_PPC64_PLTGOT16:
16815	case R_PPC64_PLTGOT16_DS:
16816	case R_PPC64_PLTGOT16_HA:
16817	case R_PPC64_PLTGOT16_HI:
16818	case R_PPC64_PLTGOT16_LO:
16819	case R_PPC64_PLTGOT16_LO_DS:
16820	case R_PPC64_PLTREL32:
16821	case R_PPC64_PLTREL64:
16822	  /* These ones haven't been implemented yet.  */
16823
16824	  info->callbacks->einfo
16825	    /* xgettext:c-format */
16826	    (_("%P: %pB: %s is not supported for `%pT'\n"),
16827	     input_bfd,
16828	     ppc64_elf_howto_table[r_type]->name, sym_name);
16829
16830	  bfd_set_error (bfd_error_invalid_operation);
16831	  ret = FALSE;
16832	  goto copy_reloc;
16833	}
16834
16835      /* Multi-instruction sequences that access the TOC can be
16836	 optimized, eg. addis ra,r2,0; addi rb,ra,x;
16837	 to		nop;	       addi rb,r2,x;  */
16838      switch (r_type)
16839	{
16840	default:
16841	  break;
16842
16843	case R_PPC64_GOT_TLSLD16_HI:
16844	case R_PPC64_GOT_TLSGD16_HI:
16845	case R_PPC64_GOT_TPREL16_HI:
16846	case R_PPC64_GOT_DTPREL16_HI:
16847	case R_PPC64_GOT16_HI:
16848	case R_PPC64_TOC16_HI:
16849	  /* These relocs would only be useful if building up an
16850	     offset to later add to r2, perhaps in an indexed
16851	     addressing mode instruction.  Don't try to optimize.
16852	     Unfortunately, the possibility of someone building up an
16853	     offset like this or even with the HA relocs, means that
16854	     we need to check the high insn when optimizing the low
16855	     insn.  */
16856	  break;
16857
16858	case R_PPC64_PLTCALL_NOTOC:
16859	  if (!unresolved_reloc)
16860	    htab->notoc_plt = 1;
16861	  /* Fall through.  */
16862	case R_PPC64_PLTCALL:
16863	  if (unresolved_reloc)
16864	    {
16865	      /* No plt entry.  Make this into a direct call.  */
16866	      bfd_byte *p = contents + rel->r_offset;
16867	      insn = bfd_get_32 (input_bfd, p);
16868	      insn &= 1;
16869	      bfd_put_32 (input_bfd, B_DOT | insn, p);
16870	      if (r_type == R_PPC64_PLTCALL)
16871		bfd_put_32 (input_bfd, NOP, p + 4);
16872	      unresolved_reloc = save_unresolved_reloc;
16873	      r_type = R_PPC64_REL24;
16874	    }
16875	  break;
16876
16877	case R_PPC64_PLTSEQ_NOTOC:
16878	case R_PPC64_PLTSEQ:
16879	  if (unresolved_reloc)
16880	    {
16881	      unresolved_reloc = FALSE;
16882	      goto nop_it;
16883	    }
16884	  break;
16885
16886	case R_PPC64_PLT_PCREL34_NOTOC:
16887	  if (!unresolved_reloc)
16888	    htab->notoc_plt = 1;
16889	  /* Fall through.  */
16890	case R_PPC64_PLT_PCREL34:
16891	  if (unresolved_reloc)
16892	    {
16893	      bfd_byte *p = contents + rel->r_offset;
16894	      bfd_put_32 (input_bfd, PNOP >> 32, p);
16895	      bfd_put_32 (input_bfd, PNOP, p + 4);
16896	      unresolved_reloc = FALSE;
16897	      goto copy_reloc;
16898	    }
16899	  break;
16900
16901	case R_PPC64_PLT16_HA:
16902	  if (unresolved_reloc)
16903	    {
16904	      unresolved_reloc = FALSE;
16905	      goto nop_it;
16906	    }
16907	  /* Fall through.  */
16908	case R_PPC64_GOT_TLSLD16_HA:
16909	case R_PPC64_GOT_TLSGD16_HA:
16910	case R_PPC64_GOT_TPREL16_HA:
16911	case R_PPC64_GOT_DTPREL16_HA:
16912	case R_PPC64_GOT16_HA:
16913	case R_PPC64_TOC16_HA:
16914	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16915	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16916	    {
16917	      bfd_byte *p;
16918	    nop_it:
16919	      p = contents + (rel->r_offset & ~3);
16920	      bfd_put_32 (input_bfd, NOP, p);
16921	      goto copy_reloc;
16922	    }
16923	  break;
16924
16925	case R_PPC64_PLT16_LO:
16926	case R_PPC64_PLT16_LO_DS:
16927	  if (unresolved_reloc)
16928	    {
16929	      unresolved_reloc = FALSE;
16930	      goto nop_it;
16931	    }
16932	  /* Fall through.  */
16933	case R_PPC64_GOT_TLSLD16_LO:
16934	case R_PPC64_GOT_TLSGD16_LO:
16935	case R_PPC64_GOT_TPREL16_LO_DS:
16936	case R_PPC64_GOT_DTPREL16_LO_DS:
16937	case R_PPC64_GOT16_LO:
16938	case R_PPC64_GOT16_LO_DS:
16939	case R_PPC64_TOC16_LO:
16940	case R_PPC64_TOC16_LO_DS:
16941	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16942	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16943	    {
16944	      bfd_byte *p = contents + (rel->r_offset & ~3);
16945	      insn = bfd_get_32 (input_bfd, p);
16946	      if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */)
16947		{
16948		  /* Transform addic to addi when we change reg.  */
16949		  insn &= ~((0x3fu << 26) | (0x1f << 16));
16950		  insn |= (14u << 26) | (2 << 16);
16951		}
16952	      else
16953		{
16954		  insn &= ~(0x1f << 16);
16955		  insn |= 2 << 16;
16956		}
16957	      bfd_put_32 (input_bfd, insn, p);
16958	    }
16959	  break;
16960
16961	case R_PPC64_TPREL16_HA:
16962	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16963	    {
16964	      bfd_byte *p = contents + (rel->r_offset & ~3);
16965	      bfd_put_32 (input_bfd, NOP, p);
16966	      goto copy_reloc;
16967	    }
16968	  break;
16969
16970	case R_PPC64_TPREL16_LO:
16971	case R_PPC64_TPREL16_LO_DS:
16972	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16973	    {
16974	      bfd_byte *p = contents + (rel->r_offset & ~3);
16975	      insn = bfd_get_32 (input_bfd, p);
16976	      insn &= ~(0x1f << 16);
16977	      insn |= 13 << 16;
16978	      bfd_put_32 (input_bfd, insn, p);
16979	    }
16980	  break;
16981	}
16982
16983      /* Do any further special processing.  */
16984      switch (r_type)
16985	{
16986	default:
16987	  break;
16988
16989	case R_PPC64_REL16_HA:
16990	case R_PPC64_REL16_HIGHA:
16991	case R_PPC64_REL16_HIGHERA:
16992	case R_PPC64_REL16_HIGHESTA:
16993	case R_PPC64_REL16DX_HA:
16994	case R_PPC64_ADDR16_HA:
16995	case R_PPC64_ADDR16_HIGHA:
16996	case R_PPC64_ADDR16_HIGHERA:
16997	case R_PPC64_ADDR16_HIGHESTA:
16998	case R_PPC64_TOC16_HA:
16999	case R_PPC64_SECTOFF_HA:
17000	case R_PPC64_TPREL16_HA:
17001	case R_PPC64_TPREL16_HIGHA:
17002	case R_PPC64_TPREL16_HIGHERA:
17003	case R_PPC64_TPREL16_HIGHESTA:
17004	case R_PPC64_DTPREL16_HA:
17005	case R_PPC64_DTPREL16_HIGHA:
17006	case R_PPC64_DTPREL16_HIGHERA:
17007	case R_PPC64_DTPREL16_HIGHESTA:
17008	  /* It's just possible that this symbol is a weak symbol
17009	     that's not actually defined anywhere. In that case,
17010	     'sec' would be NULL, and we should leave the symbol
17011	     alone (it will be set to zero elsewhere in the link).  */
17012	  if (sec == NULL)
17013	    break;
17014	  /* Fall through.  */
17015
17016	case R_PPC64_GOT16_HA:
17017	case R_PPC64_PLTGOT16_HA:
17018	case R_PPC64_PLT16_HA:
17019	case R_PPC64_GOT_TLSGD16_HA:
17020	case R_PPC64_GOT_TLSLD16_HA:
17021	case R_PPC64_GOT_TPREL16_HA:
17022	case R_PPC64_GOT_DTPREL16_HA:
17023	  /* Add 0x10000 if sign bit in 0:15 is set.
17024	     Bits 0:15 are not used.  */
17025	  addend += 0x8000;
17026	  break;
17027
17028	case R_PPC64_D34_HA30:
17029	case R_PPC64_ADDR16_HIGHERA34:
17030	case R_PPC64_ADDR16_HIGHESTA34:
17031	case R_PPC64_REL16_HIGHERA34:
17032	case R_PPC64_REL16_HIGHESTA34:
17033	  if (sec != NULL)
17034	    addend += 1ULL << 33;
17035	  break;
17036
17037	case R_PPC64_ADDR16_DS:
17038	case R_PPC64_ADDR16_LO_DS:
17039	case R_PPC64_GOT16_DS:
17040	case R_PPC64_GOT16_LO_DS:
17041	case R_PPC64_PLT16_LO_DS:
17042	case R_PPC64_SECTOFF_DS:
17043	case R_PPC64_SECTOFF_LO_DS:
17044	case R_PPC64_TOC16_DS:
17045	case R_PPC64_TOC16_LO_DS:
17046	case R_PPC64_PLTGOT16_DS:
17047	case R_PPC64_PLTGOT16_LO_DS:
17048	case R_PPC64_GOT_TPREL16_DS:
17049	case R_PPC64_GOT_TPREL16_LO_DS:
17050	case R_PPC64_GOT_DTPREL16_DS:
17051	case R_PPC64_GOT_DTPREL16_LO_DS:
17052	case R_PPC64_TPREL16_DS:
17053	case R_PPC64_TPREL16_LO_DS:
17054	case R_PPC64_DTPREL16_DS:
17055	case R_PPC64_DTPREL16_LO_DS:
17056	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
17057	  mask = 3;
17058	  /* If this reloc is against an lq, lxv, or stxv insn, then
17059	     the value must be a multiple of 16.  This is somewhat of
17060	     a hack, but the "correct" way to do this by defining _DQ
17061	     forms of all the _DS relocs bloats all reloc switches in
17062	     this file.  It doesn't make much sense to use these
17063	     relocs in data, so testing the insn should be safe.  */
17064	  if ((insn & (0x3fu << 26)) == (56u << 26)
17065	      || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1))
17066	    mask = 15;
17067	  relocation += addend;
17068	  addend = insn & (mask ^ 3);
17069	  if ((relocation & mask) != 0)
17070	    {
17071	      relocation ^= relocation & mask;
17072	      info->callbacks->einfo
17073		/* xgettext:c-format */
17074		(_("%H: error: %s not a multiple of %u\n"),
17075		 input_bfd, input_section, rel->r_offset,
17076		 ppc64_elf_howto_table[r_type]->name,
17077		 mask + 1);
17078	      bfd_set_error (bfd_error_bad_value);
17079	      ret = FALSE;
17080	      goto copy_reloc;
17081	    }
17082	  break;
17083	}
17084
17085      /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
17086	 because such sections are not SEC_ALLOC and thus ld.so will
17087	 not process them.  */
17088      howto = ppc64_elf_howto_table[(int) r_type];
17089      if (unresolved_reloc
17090	  && !((input_section->flags & SEC_DEBUGGING) != 0
17091	       && h->elf.def_dynamic)
17092	  && _bfd_elf_section_offset (output_bfd, info, input_section,
17093				      rel->r_offset) != (bfd_vma) -1)
17094	{
17095	  info->callbacks->einfo
17096	    /* xgettext:c-format */
17097	    (_("%H: unresolvable %s against `%pT'\n"),
17098	     input_bfd, input_section, rel->r_offset,
17099	     howto->name,
17100	     h->elf.root.root.string);
17101	  ret = FALSE;
17102	}
17103
17104      /* 16-bit fields in insns mostly have signed values, but a
17105	 few insns have 16-bit unsigned values.  Really, we should
17106	 have different reloc types.  */
17107      if (howto->complain_on_overflow != complain_overflow_dont
17108	  && howto->dst_mask == 0xffff
17109	  && (input_section->flags & SEC_CODE) != 0)
17110	{
17111	  enum complain_overflow complain = complain_overflow_signed;
17112
17113	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
17114	  if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
17115	    complain = complain_overflow_bitfield;
17116	  else if (howto->rightshift == 0
17117		   ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
17118		      || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
17119		      || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
17120		   : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */
17121		      || (insn & (0x3fu << 26)) == 25u << 26 /* oris */
17122		      || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */))
17123	    complain = complain_overflow_unsigned;
17124	  if (howto->complain_on_overflow != complain)
17125	    {
17126	      alt_howto = *howto;
17127	      alt_howto.complain_on_overflow = complain;
17128	      howto = &alt_howto;
17129	    }
17130	}
17131
17132      switch (r_type)
17133	{
17134	  /* Split field relocs aren't handled by _bfd_final_link_relocate.  */
17135	case R_PPC64_D34:
17136	case R_PPC64_D34_LO:
17137	case R_PPC64_D34_HI30:
17138	case R_PPC64_D34_HA30:
17139	case R_PPC64_PCREL34:
17140	case R_PPC64_GOT_PCREL34:
17141	case R_PPC64_TPREL34:
17142	case R_PPC64_DTPREL34:
17143	case R_PPC64_GOT_TLSGD_PCREL34:
17144	case R_PPC64_GOT_TLSLD_PCREL34:
17145	case R_PPC64_GOT_TPREL_PCREL34:
17146	case R_PPC64_GOT_DTPREL_PCREL34:
17147	case R_PPC64_PLT_PCREL34:
17148	case R_PPC64_PLT_PCREL34_NOTOC:
17149	case R_PPC64_D28:
17150	case R_PPC64_PCREL28:
17151	  if (rel->r_offset + 8 > input_section->size)
17152	    r = bfd_reloc_outofrange;
17153	  else
17154	    {
17155	      relocation += addend;
17156	      if (howto->pc_relative)
17157		relocation -= (rel->r_offset
17158			       + input_section->output_offset
17159			       + input_section->output_section->vma);
17160	      relocation >>= howto->rightshift;
17161
17162	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
17163	      pinsn <<= 32;
17164	      pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
17165
17166	      pinsn &= ~howto->dst_mask;
17167	      pinsn |= (((relocation << 16) | (relocation & 0xffff))
17168			& howto->dst_mask);
17169	      bfd_put_32 (input_bfd, pinsn >> 32, contents + rel->r_offset);
17170	      bfd_put_32 (input_bfd, pinsn, contents + rel->r_offset + 4);
17171	      r = bfd_reloc_ok;
17172	      if (howto->complain_on_overflow == complain_overflow_signed
17173		  && (relocation + (1ULL << (howto->bitsize - 1))
17174		      >= 1ULL << howto->bitsize))
17175		r = bfd_reloc_overflow;
17176	    }
17177	  break;
17178
17179	case R_PPC64_REL16DX_HA:
17180	  if (rel->r_offset + 4 > input_section->size)
17181	    r = bfd_reloc_outofrange;
17182	  else
17183	    {
17184	      relocation += addend;
17185	      relocation -= (rel->r_offset
17186			     + input_section->output_offset
17187			     + input_section->output_section->vma);
17188	      relocation = (bfd_signed_vma) relocation >> 16;
17189	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
17190	      insn &= ~0x1fffc1;
17191	      insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
17192	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
17193	      r = bfd_reloc_ok;
17194	      if (relocation + 0x8000 > 0xffff)
17195		r = bfd_reloc_overflow;
17196	    }
17197	  break;
17198
17199	default:
17200	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
17201					contents, rel->r_offset,
17202					relocation, addend);
17203	}
17204
17205      if (r != bfd_reloc_ok)
17206	{
17207	  char *more_info = NULL;
17208	  const char *reloc_name = howto->name;
17209
17210	  if (reloc_dest != DEST_NORMAL)
17211	    {
17212	      more_info = bfd_malloc (strlen (reloc_name) + 8);
17213	      if (more_info != NULL)
17214		{
17215		  strcpy (more_info, reloc_name);
17216		  strcat (more_info, (reloc_dest == DEST_OPD
17217				      ? " (OPD)" : " (stub)"));
17218		  reloc_name = more_info;
17219		}
17220	    }
17221
17222	  if (r == bfd_reloc_overflow)
17223	    {
17224	      /* On code like "if (foo) foo();" don't report overflow
17225		 on a branch to zero when foo is undefined.  */
17226	      if (!warned
17227		  && (reloc_dest == DEST_STUB
17228		      || !(h != NULL
17229			   && (h->elf.root.type == bfd_link_hash_undefweak
17230			       || h->elf.root.type == bfd_link_hash_undefined)
17231			   && is_branch_reloc (r_type))))
17232		info->callbacks->reloc_overflow
17233		  (info, (struct bfd_link_hash_entry *) h, sym_name,
17234		   reloc_name, orig_rel.r_addend, input_bfd, input_section,
17235		   rel->r_offset);
17236	    }
17237	  else
17238	    {
17239	      info->callbacks->einfo
17240		/* xgettext:c-format */
17241		(_("%H: %s against `%pT': error %d\n"),
17242		 input_bfd, input_section, rel->r_offset,
17243		 reloc_name, sym_name, (int) r);
17244	      ret = FALSE;
17245	    }
17246	  free (more_info);
17247	}
17248    copy_reloc:
17249      if (wrel != rel)
17250	*wrel = *rel;
17251    }
17252
17253  if (wrel != rel)
17254    {
17255      Elf_Internal_Shdr *rel_hdr;
17256      size_t deleted = rel - wrel;
17257
17258      rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
17259      rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
17260      if (rel_hdr->sh_size == 0)
17261	{
17262	  /* It is too late to remove an empty reloc section.  Leave
17263	     one NONE reloc.
17264	     ??? What is wrong with an empty section???  */
17265	  rel_hdr->sh_size = rel_hdr->sh_entsize;
17266	  deleted -= 1;
17267	}
17268      rel_hdr = _bfd_elf_single_rel_hdr (input_section);
17269      rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
17270      input_section->reloc_count -= deleted;
17271    }
17272
17273  /* If we're emitting relocations, then shortly after this function
17274     returns, reloc offsets and addends for this section will be
17275     adjusted.  Worse, reloc symbol indices will be for the output
17276     file rather than the input.  Save a copy of the relocs for
17277     opd_entry_value.  */
17278  if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
17279    {
17280      bfd_size_type amt;
17281      amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
17282      rel = bfd_alloc (input_bfd, amt);
17283      BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
17284      ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
17285      if (rel == NULL)
17286	return FALSE;
17287      memcpy (rel, relocs, amt);
17288    }
17289  return ret;
17290}
17291
17292/* Adjust the value of any local symbols in opd sections.  */
17293
17294static int
17295ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
17296			      const char *name ATTRIBUTE_UNUSED,
17297			      Elf_Internal_Sym *elfsym,
17298			      asection *input_sec,
17299			      struct elf_link_hash_entry *h)
17300{
17301  struct _opd_sec_data *opd;
17302  long adjust;
17303  bfd_vma value;
17304
17305  if (h != NULL)
17306    return 1;
17307
17308  opd = get_opd_info (input_sec);
17309  if (opd == NULL || opd->adjust == NULL)
17310    return 1;
17311
17312  value = elfsym->st_value - input_sec->output_offset;
17313  if (!bfd_link_relocatable (info))
17314    value -= input_sec->output_section->vma;
17315
17316  adjust = opd->adjust[OPD_NDX (value)];
17317  if (adjust == -1)
17318    return 2;
17319
17320  elfsym->st_value += adjust;
17321  return 1;
17322}
17323
17324/* Finish up dynamic symbol handling.  We set the contents of various
17325   dynamic sections here.  */
17326
17327static bfd_boolean
17328ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
17329				 struct bfd_link_info *info,
17330				 struct elf_link_hash_entry *h,
17331				 Elf_Internal_Sym *sym)
17332{
17333  struct ppc_link_hash_table *htab;
17334  struct plt_entry *ent;
17335
17336  htab = ppc_hash_table (info);
17337  if (htab == NULL)
17338    return FALSE;
17339
17340  if (!htab->opd_abi && !h->def_regular)
17341    for (ent = h->plt.plist; ent != NULL; ent = ent->next)
17342      if (ent->plt.offset != (bfd_vma) -1)
17343	{
17344	  /* Mark the symbol as undefined, rather than as
17345	     defined in glink.  Leave the value if there were
17346	     any relocations where pointer equality matters
17347	     (this is a clue for the dynamic linker, to make
17348	     function pointer comparisons work between an
17349	     application and shared library), otherwise set it
17350	     to zero.  */
17351	  sym->st_shndx = SHN_UNDEF;
17352	  if (!h->pointer_equality_needed)
17353	    sym->st_value = 0;
17354	  else if (!h->ref_regular_nonweak)
17355	    {
17356	      /* This breaks function pointer comparisons, but
17357		 that is better than breaking tests for a NULL
17358		 function pointer.  */
17359	      sym->st_value = 0;
17360	    }
17361	  break;
17362	}
17363
17364  if (h->needs_copy
17365      && (h->root.type == bfd_link_hash_defined
17366	  || h->root.type == bfd_link_hash_defweak)
17367      && (h->root.u.def.section == htab->elf.sdynbss
17368	  || h->root.u.def.section == htab->elf.sdynrelro))
17369    {
17370      /* This symbol needs a copy reloc.  Set it up.  */
17371      Elf_Internal_Rela rela;
17372      asection *srel;
17373      bfd_byte *loc;
17374
17375      if (h->dynindx == -1)
17376	abort ();
17377
17378      rela.r_offset = defined_sym_val (h);
17379      rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
17380      rela.r_addend = 0;
17381      if (h->root.u.def.section == htab->elf.sdynrelro)
17382	srel = htab->elf.sreldynrelro;
17383      else
17384	srel = htab->elf.srelbss;
17385      loc = srel->contents;
17386      loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
17387      bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
17388    }
17389
17390  return TRUE;
17391}
17392
17393/* Used to decide how to sort relocs in an optimal manner for the
17394   dynamic linker, before writing them out.  */
17395
17396static enum elf_reloc_type_class
17397ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
17398			    const asection *rel_sec,
17399			    const Elf_Internal_Rela *rela)
17400{
17401  enum elf_ppc64_reloc_type r_type;
17402  struct ppc_link_hash_table *htab = ppc_hash_table (info);
17403
17404  if (rel_sec == htab->elf.irelplt)
17405    return reloc_class_ifunc;
17406
17407  r_type = ELF64_R_TYPE (rela->r_info);
17408  switch (r_type)
17409    {
17410    case R_PPC64_RELATIVE:
17411      return reloc_class_relative;
17412    case R_PPC64_JMP_SLOT:
17413      return reloc_class_plt;
17414    case R_PPC64_COPY:
17415      return reloc_class_copy;
17416    default:
17417      return reloc_class_normal;
17418    }
17419}
17420
17421/* Finish up the dynamic sections.  */
17422
17423static bfd_boolean
17424ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
17425				   struct bfd_link_info *info)
17426{
17427  struct ppc_link_hash_table *htab;
17428  bfd *dynobj;
17429  asection *sdyn;
17430
17431  htab = ppc_hash_table (info);
17432  if (htab == NULL)
17433    return FALSE;
17434
17435  dynobj = htab->elf.dynobj;
17436  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
17437
17438  if (htab->elf.dynamic_sections_created)
17439    {
17440      Elf64_External_Dyn *dyncon, *dynconend;
17441
17442      if (sdyn == NULL || htab->elf.sgot == NULL)
17443	abort ();
17444
17445      dyncon = (Elf64_External_Dyn *) sdyn->contents;
17446      dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
17447      for (; dyncon < dynconend; dyncon++)
17448	{
17449	  Elf_Internal_Dyn dyn;
17450	  asection *s;
17451
17452	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
17453
17454	  switch (dyn.d_tag)
17455	    {
17456	    default:
17457	      continue;
17458
17459	    case DT_PPC64_GLINK:
17460	      s = htab->glink;
17461	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17462	      /* We stupidly defined DT_PPC64_GLINK to be the start
17463		 of glink rather than the first entry point, which is
17464		 what ld.so needs, and now have a bigger stub to
17465		 support automatic multiple TOCs.  */
17466	      dyn.d_un.d_ptr += GLINK_PLTRESOLVE_SIZE (htab) - 8 * 4;
17467	      break;
17468
17469	    case DT_PPC64_OPD:
17470	      s = bfd_get_section_by_name (output_bfd, ".opd");
17471	      if (s == NULL)
17472		continue;
17473	      dyn.d_un.d_ptr = s->vma;
17474	      break;
17475
17476	    case DT_PPC64_OPT:
17477	      if ((htab->do_multi_toc && htab->multi_toc_needed)
17478		  || htab->notoc_plt)
17479		dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
17480	      if (htab->has_plt_localentry0)
17481		dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
17482	      break;
17483
17484	    case DT_PPC64_OPDSZ:
17485	      s = bfd_get_section_by_name (output_bfd, ".opd");
17486	      if (s == NULL)
17487		continue;
17488	      dyn.d_un.d_val = s->size;
17489	      break;
17490
17491	    case DT_PLTGOT:
17492	      s = htab->elf.splt;
17493	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17494	      break;
17495
17496	    case DT_JMPREL:
17497	      s = htab->elf.srelplt;
17498	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
17499	      break;
17500
17501	    case DT_PLTRELSZ:
17502	      dyn.d_un.d_val = htab->elf.srelplt->size;
17503	      break;
17504
17505	    case DT_TEXTREL:
17506	      if (htab->elf.ifunc_resolvers)
17507		info->callbacks->einfo
17508		  (_("%P: warning: text relocations and GNU indirect "
17509		     "functions may result in a segfault at runtime\n"));
17510	      continue;
17511	    }
17512
17513	  bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
17514	}
17515    }
17516
17517  if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
17518      && htab->elf.sgot->output_section != bfd_abs_section_ptr)
17519    {
17520      /* Fill in the first entry in the global offset table.
17521	 We use it to hold the link-time TOCbase.  */
17522      bfd_put_64 (output_bfd,
17523		  elf_gp (output_bfd) + TOC_BASE_OFF,
17524		  htab->elf.sgot->contents);
17525
17526      /* Set .got entry size.  */
17527      elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
17528	= 8;
17529    }
17530
17531  if (htab->elf.splt != NULL && htab->elf.splt->size != 0
17532      && htab->elf.splt->output_section != bfd_abs_section_ptr)
17533    {
17534      /* Set .plt entry size.  */
17535      elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
17536	= PLT_ENTRY_SIZE (htab);
17537    }
17538
17539  /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
17540     brlt ourselves if emitrelocations.  */
17541  if (htab->brlt != NULL
17542      && htab->brlt->reloc_count != 0
17543      && !_bfd_elf_link_output_relocs (output_bfd,
17544				       htab->brlt,
17545				       elf_section_data (htab->brlt)->rela.hdr,
17546				       elf_section_data (htab->brlt)->relocs,
17547				       NULL))
17548    return FALSE;
17549
17550  if (htab->glink != NULL
17551      && htab->glink->reloc_count != 0
17552      && !_bfd_elf_link_output_relocs (output_bfd,
17553				       htab->glink,
17554				       elf_section_data (htab->glink)->rela.hdr,
17555				       elf_section_data (htab->glink)->relocs,
17556				       NULL))
17557    return FALSE;
17558
17559
17560  if (htab->glink_eh_frame != NULL
17561      && htab->glink_eh_frame->size != 0
17562      && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
17563      && !_bfd_elf_write_section_eh_frame (output_bfd, info,
17564					   htab->glink_eh_frame,
17565					   htab->glink_eh_frame->contents))
17566    return FALSE;
17567
17568  /* We need to handle writing out multiple GOT sections ourselves,
17569     since we didn't add them to DYNOBJ.  We know dynobj is the first
17570     bfd.  */
17571  while ((dynobj = dynobj->link.next) != NULL)
17572    {
17573      asection *s;
17574
17575      if (!is_ppc64_elf (dynobj))
17576	continue;
17577
17578      s = ppc64_elf_tdata (dynobj)->got;
17579      if (s != NULL
17580	  && s->size != 0
17581	  && s->output_section != bfd_abs_section_ptr
17582	  && !bfd_set_section_contents (output_bfd, s->output_section,
17583					s->contents, s->output_offset,
17584					s->size))
17585	return FALSE;
17586      s = ppc64_elf_tdata (dynobj)->relgot;
17587      if (s != NULL
17588	  && s->size != 0
17589	  && s->output_section != bfd_abs_section_ptr
17590	  && !bfd_set_section_contents (output_bfd, s->output_section,
17591					s->contents, s->output_offset,
17592					s->size))
17593	return FALSE;
17594    }
17595
17596  return TRUE;
17597}
17598
17599#include "elf64-target.h"
17600
17601/* FreeBSD support */
17602
17603#undef  TARGET_LITTLE_SYM
17604#undef  TARGET_LITTLE_NAME
17605
17606#undef  TARGET_BIG_SYM
17607#define TARGET_BIG_SYM	powerpc_elf64_fbsd_vec
17608#undef  TARGET_BIG_NAME
17609#define TARGET_BIG_NAME "elf64-powerpc-freebsd"
17610
17611#undef  ELF_OSABI
17612#define	ELF_OSABI       ELFOSABI_FREEBSD
17613
17614#undef  elf64_bed
17615#define elf64_bed	elf64_powerpc_fbsd_bed
17616
17617#include "elf64-target.h"
17618