xref: /netbsd-src/external/gpl3/binutils/dist/bfd/elf64-ppc.c (revision 75f6d617e282811cb173c2ccfbf5df0dd71f7045)
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
3    2009, 2010, 2011, 2012 Free Software Foundation, Inc.
4    Written by Linus Nordberg, Swox AB <info@swox.com>,
5    based on elf32-ppc.c by Ian Lance Taylor.
6    Largely rewritten by Alan Modra.
7 
8    This file is part of BFD, the Binary File Descriptor library.
9 
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14 
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19 
20    You should have received a copy of the GNU General Public License along
21    with this program; if not, write to the Free Software Foundation, Inc.,
22    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
23 
24 
25 /* The 64-bit PowerPC ELF ABI may be found at
26    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
27    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
28 
29 #include "sysdep.h"
30 #include <stdarg.h>
31 #include "bfd.h"
32 #include "bfdlink.h"
33 #include "libbfd.h"
34 #include "elf-bfd.h"
35 #include "elf/ppc64.h"
36 #include "elf64-ppc.h"
37 #include "dwarf2.h"
38 
39 static bfd_reloc_status_type ppc64_elf_ha_reloc
40   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
41 static bfd_reloc_status_type ppc64_elf_branch_reloc
42   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
43 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
44   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
45 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
46   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
48   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49 static bfd_reloc_status_type ppc64_elf_toc_reloc
50   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
52   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53 static bfd_reloc_status_type ppc64_elf_toc64_reloc
54   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
56   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57 static bfd_vma opd_entry_value
58   (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
59 
60 #define TARGET_LITTLE_SYM	bfd_elf64_powerpcle_vec
61 #define TARGET_LITTLE_NAME	"elf64-powerpcle"
62 #define TARGET_BIG_SYM		bfd_elf64_powerpc_vec
63 #define TARGET_BIG_NAME		"elf64-powerpc"
64 #define ELF_ARCH		bfd_arch_powerpc
65 #define ELF_TARGET_ID		PPC64_ELF_DATA
66 #define ELF_MACHINE_CODE	EM_PPC64
67 #define ELF_MAXPAGESIZE		0x10000
68 #define ELF_COMMONPAGESIZE	0x1000
69 #define elf_info_to_howto	ppc64_elf_info_to_howto
70 
71 #define elf_backend_want_got_sym 0
72 #define elf_backend_want_plt_sym 0
73 #define elf_backend_plt_alignment 3
74 #define elf_backend_plt_not_loaded 1
75 #define elf_backend_got_header_size 8
76 #define elf_backend_can_gc_sections 1
77 #define elf_backend_can_refcount 1
78 #define elf_backend_rela_normal 1
79 #define elf_backend_default_execstack 0
80 
81 #define bfd_elf64_mkobject		      ppc64_elf_mkobject
82 #define bfd_elf64_bfd_reloc_type_lookup	      ppc64_elf_reloc_type_lookup
83 #define bfd_elf64_bfd_reloc_name_lookup	      ppc64_elf_reloc_name_lookup
84 #define bfd_elf64_bfd_merge_private_bfd_data  _bfd_generic_verify_endian_match
85 #define bfd_elf64_new_section_hook	      ppc64_elf_new_section_hook
86 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
87 #define bfd_elf64_bfd_link_hash_table_free    ppc64_elf_link_hash_table_free
88 #define bfd_elf64_get_synthetic_symtab	      ppc64_elf_get_synthetic_symtab
89 #define bfd_elf64_bfd_link_just_syms	      ppc64_elf_link_just_syms
90 
91 #define elf_backend_object_p		      ppc64_elf_object_p
92 #define elf_backend_grok_prstatus	      ppc64_elf_grok_prstatus
93 #define elf_backend_grok_psinfo		      ppc64_elf_grok_psinfo
94 #define elf_backend_write_core_note	      ppc64_elf_write_core_note
95 #define elf_backend_create_dynamic_sections   ppc64_elf_create_dynamic_sections
96 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
97 #define elf_backend_add_symbol_hook	      ppc64_elf_add_symbol_hook
98 #define elf_backend_check_directives	      ppc64_elf_process_dot_syms
99 #define elf_backend_as_needed_cleanup	      ppc64_elf_as_needed_cleanup
100 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
101 #define elf_backend_check_relocs	      ppc64_elf_check_relocs
102 #define elf_backend_gc_keep		      ppc64_elf_gc_keep
103 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
104 #define elf_backend_gc_mark_hook	      ppc64_elf_gc_mark_hook
105 #define elf_backend_gc_sweep_hook	      ppc64_elf_gc_sweep_hook
106 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
107 #define elf_backend_hide_symbol		      ppc64_elf_hide_symbol
108 #define elf_backend_maybe_function_sym	      ppc64_elf_maybe_function_sym
109 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
110 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
111 #define elf_backend_init_index_section	      _bfd_elf_init_2_index_sections
112 #define elf_backend_action_discarded	      ppc64_elf_action_discarded
113 #define elf_backend_relocate_section	      ppc64_elf_relocate_section
114 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
115 #define elf_backend_reloc_type_class	      ppc64_elf_reloc_type_class
116 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
117 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
118 #define elf_backend_special_sections	      ppc64_elf_special_sections
119 #define elf_backend_post_process_headers      _bfd_elf_set_osabi
120 
121 /* The name of the dynamic interpreter.  This is put in the .interp
122    section.  */
123 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
124 
125 /* The size in bytes of an entry in the procedure linkage table.  */
126 #define PLT_ENTRY_SIZE 24
127 
128 /* The initial size of the plt reserved for the dynamic linker.  */
129 #define PLT_INITIAL_ENTRY_SIZE PLT_ENTRY_SIZE
130 
131 /* TOC base pointers offset from start of TOC.  */
132 #define TOC_BASE_OFF	0x8000
133 
134 /* Offset of tp and dtp pointers from start of TLS block.  */
135 #define TP_OFFSET	0x7000
136 #define DTP_OFFSET	0x8000
137 
138 /* .plt call stub instructions.  The normal stub is like this, but
139    sometimes the .plt entry crosses a 64k boundary and we need to
140    insert an addi to adjust r12.  */
141 #define PLT_CALL_STUB_SIZE (7*4)
142 #define ADDIS_R12_R2	0x3d820000	/* addis %r12,%r2,xxx@ha     */
143 #define STD_R2_40R1	0xf8410028	/* std	 %r2,40(%r1)	     */
144 #define LD_R11_0R12	0xe96c0000	/* ld	 %r11,xxx+0@l(%r12)  */
145 #define MTCTR_R11	0x7d6903a6	/* mtctr %r11		     */
146 #define LD_R2_0R12	0xe84c0000	/* ld	 %r2,xxx+8@l(%r12)   */
147 					/* ld	 %r11,xxx+16@l(%r12) */
148 #define BCTR		0x4e800420	/* bctr			     */
149 
150 
151 #define ADDIS_R12_R12	0x3d8c0000	/* addis %r12,%r12,off@ha  */
152 #define ADDI_R12_R12	0x398c0000	/* addi %r12,%r12,off@l  */
153 #define ADDIS_R2_R2	0x3c420000	/* addis %r2,%r2,off@ha  */
154 #define ADDI_R2_R2	0x38420000	/* addi  %r2,%r2,off@l   */
155 
156 #define XOR_R11_R11_R11	0x7d6b5a78	/* xor   %r11,%r11,%r11  */
157 #define ADD_R12_R12_R11	0x7d8c5a14	/* add   %r12,%r12,%r11  */
158 #define ADD_R2_R2_R11	0x7c425a14	/* add   %r2,%r2,%r11    */
159 #define CMPLDI_R2_0	0x28220000	/* cmpldi %r2,0          */
160 #define BNECTR		0x4ca20420	/* bnectr+               */
161 #define BNECTR_P4	0x4ce20420	/* bnectr+               */
162 
163 #define LD_R11_0R2	0xe9620000	/* ld	 %r11,xxx+0(%r2) */
164 #define LD_R2_0R2	0xe8420000	/* ld	 %r2,xxx+0(%r2)  */
165 
166 #define LD_R2_40R1	0xe8410028	/* ld    %r2,40(%r1)     */
167 
168 /* glink call stub instructions.  We enter with the index in R0.  */
169 #define GLINK_CALL_STUB_SIZE (16*4)
170 					/* 0:				*/
171 					/*  .quad plt0-1f		*/
172 					/* __glink:			*/
173 #define MFLR_R12	0x7d8802a6	/*  mflr %12			*/
174 #define BCL_20_31	0x429f0005	/*  bcl 20,31,1f		*/
175 					/* 1:				*/
176 #define MFLR_R11	0x7d6802a6	/*  mflr %11			*/
177 #define LD_R2_M16R11	0xe84bfff0	/*  ld %2,(0b-1b)(%11)		*/
178 #define MTLR_R12	0x7d8803a6	/*  mtlr %12			*/
179 #define ADD_R12_R2_R11	0x7d825a14	/*  add %12,%2,%11		*/
180 					/*  ld %11,0(%12)		*/
181 					/*  ld %2,8(%12)		*/
182 					/*  mtctr %11			*/
183 					/*  ld %11,16(%12)		*/
184 					/*  bctr			*/
185 
186 /* Pad with this.  */
187 #define NOP		0x60000000
188 
189 /* Some other nops.  */
190 #define CROR_151515	0x4def7b82
191 #define CROR_313131	0x4ffffb82
192 
193 /* .glink entries for the first 32k functions are two instructions.  */
194 #define LI_R0_0		0x38000000	/* li    %r0,0		*/
195 #define B_DOT		0x48000000	/* b     .		*/
196 
197 /* After that, we need two instructions to load the index, followed by
198    a branch.  */
199 #define LIS_R0_0	0x3c000000	/* lis   %r0,0		*/
200 #define ORI_R0_R0_0	0x60000000	/* ori	 %r0,%r0,0	*/
201 
202 /* Instructions used by the save and restore reg functions.  */
203 #define STD_R0_0R1	0xf8010000	/* std   %r0,0(%r1)	*/
204 #define STD_R0_0R12	0xf80c0000	/* std   %r0,0(%r12)	*/
205 #define LD_R0_0R1	0xe8010000	/* ld    %r0,0(%r1)	*/
206 #define LD_R0_0R12	0xe80c0000	/* ld    %r0,0(%r12)	*/
207 #define STFD_FR0_0R1	0xd8010000	/* stfd  %fr0,0(%r1)	*/
208 #define LFD_FR0_0R1	0xc8010000	/* lfd   %fr0,0(%r1)	*/
209 #define LI_R12_0	0x39800000	/* li    %r12,0		*/
210 #define STVX_VR0_R12_R0	0x7c0c01ce	/* stvx  %v0,%r12,%r0	*/
211 #define LVX_VR0_R12_R0	0x7c0c00ce	/* lvx   %v0,%r12,%r0	*/
212 #define MTLR_R0		0x7c0803a6	/* mtlr  %r0		*/
213 #define BLR		0x4e800020	/* blr			*/
214 
215 /* Since .opd is an array of descriptors and each entry will end up
216    with identical R_PPC64_RELATIVE relocs, there is really no need to
217    propagate .opd relocs;  The dynamic linker should be taught to
218    relocate .opd without reloc entries.  */
219 #ifndef NO_OPD_RELOCS
220 #define NO_OPD_RELOCS 0
221 #endif
222 
223 #define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
224 
225 /* Relocation HOWTO's.  */
226 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
227 
228 static reloc_howto_type ppc64_elf_howto_raw[] = {
229   /* This reloc does nothing.  */
230   HOWTO (R_PPC64_NONE,		/* type */
231 	 0,			/* rightshift */
232 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
233 	 32,			/* bitsize */
234 	 FALSE,			/* pc_relative */
235 	 0,			/* bitpos */
236 	 complain_overflow_dont, /* complain_on_overflow */
237 	 bfd_elf_generic_reloc,	/* special_function */
238 	 "R_PPC64_NONE",	/* name */
239 	 FALSE,			/* partial_inplace */
240 	 0,			/* src_mask */
241 	 0,			/* dst_mask */
242 	 FALSE),		/* pcrel_offset */
243 
244   /* A standard 32 bit relocation.  */
245   HOWTO (R_PPC64_ADDR32,	/* type */
246 	 0,			/* rightshift */
247 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
248 	 32,			/* bitsize */
249 	 FALSE,			/* pc_relative */
250 	 0,			/* bitpos */
251 	 complain_overflow_bitfield, /* complain_on_overflow */
252 	 bfd_elf_generic_reloc,	/* special_function */
253 	 "R_PPC64_ADDR32",	/* name */
254 	 FALSE,			/* partial_inplace */
255 	 0,			/* src_mask */
256 	 0xffffffff,		/* dst_mask */
257 	 FALSE),		/* pcrel_offset */
258 
259   /* An absolute 26 bit branch; the lower two bits must be zero.
260      FIXME: we don't check that, we just clear them.  */
261   HOWTO (R_PPC64_ADDR24,	/* type */
262 	 0,			/* rightshift */
263 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
264 	 26,			/* bitsize */
265 	 FALSE,			/* pc_relative */
266 	 0,			/* bitpos */
267 	 complain_overflow_bitfield, /* complain_on_overflow */
268 	 bfd_elf_generic_reloc,	/* special_function */
269 	 "R_PPC64_ADDR24",	/* name */
270 	 FALSE,			/* partial_inplace */
271 	 0,			/* src_mask */
272 	 0x03fffffc,		/* dst_mask */
273 	 FALSE),		/* pcrel_offset */
274 
275   /* A standard 16 bit relocation.  */
276   HOWTO (R_PPC64_ADDR16,	/* type */
277 	 0,			/* rightshift */
278 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
279 	 16,			/* bitsize */
280 	 FALSE,			/* pc_relative */
281 	 0,			/* bitpos */
282 	 complain_overflow_bitfield, /* complain_on_overflow */
283 	 bfd_elf_generic_reloc,	/* special_function */
284 	 "R_PPC64_ADDR16",	/* name */
285 	 FALSE,			/* partial_inplace */
286 	 0,			/* src_mask */
287 	 0xffff,		/* dst_mask */
288 	 FALSE),		/* pcrel_offset */
289 
290   /* A 16 bit relocation without overflow.  */
291   HOWTO (R_PPC64_ADDR16_LO,	/* type */
292 	 0,			/* rightshift */
293 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
294 	 16,			/* bitsize */
295 	 FALSE,			/* pc_relative */
296 	 0,			/* bitpos */
297 	 complain_overflow_dont,/* complain_on_overflow */
298 	 bfd_elf_generic_reloc,	/* special_function */
299 	 "R_PPC64_ADDR16_LO",	/* name */
300 	 FALSE,			/* partial_inplace */
301 	 0,			/* src_mask */
302 	 0xffff,		/* dst_mask */
303 	 FALSE),		/* pcrel_offset */
304 
305   /* Bits 16-31 of an address.  */
306   HOWTO (R_PPC64_ADDR16_HI,	/* type */
307 	 16,			/* rightshift */
308 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
309 	 16,			/* bitsize */
310 	 FALSE,			/* pc_relative */
311 	 0,			/* bitpos */
312 	 complain_overflow_dont, /* complain_on_overflow */
313 	 bfd_elf_generic_reloc,	/* special_function */
314 	 "R_PPC64_ADDR16_HI",	/* name */
315 	 FALSE,			/* partial_inplace */
316 	 0,			/* src_mask */
317 	 0xffff,		/* dst_mask */
318 	 FALSE),		/* pcrel_offset */
319 
320   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
321      bits, treated as a signed number, is negative.  */
322   HOWTO (R_PPC64_ADDR16_HA,	/* type */
323 	 16,			/* rightshift */
324 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
325 	 16,			/* bitsize */
326 	 FALSE,			/* pc_relative */
327 	 0,			/* bitpos */
328 	 complain_overflow_dont, /* complain_on_overflow */
329 	 ppc64_elf_ha_reloc,	/* special_function */
330 	 "R_PPC64_ADDR16_HA",	/* name */
331 	 FALSE,			/* partial_inplace */
332 	 0,			/* src_mask */
333 	 0xffff,		/* dst_mask */
334 	 FALSE),		/* pcrel_offset */
335 
336   /* An absolute 16 bit branch; the lower two bits must be zero.
337      FIXME: we don't check that, we just clear them.  */
338   HOWTO (R_PPC64_ADDR14,	/* type */
339 	 0,			/* rightshift */
340 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
341 	 16,			/* bitsize */
342 	 FALSE,			/* pc_relative */
343 	 0,			/* bitpos */
344 	 complain_overflow_bitfield, /* complain_on_overflow */
345 	 ppc64_elf_branch_reloc, /* special_function */
346 	 "R_PPC64_ADDR14",	/* name */
347 	 FALSE,			/* partial_inplace */
348 	 0,			/* src_mask */
349 	 0x0000fffc,		/* dst_mask */
350 	 FALSE),		/* pcrel_offset */
351 
352   /* An absolute 16 bit branch, for which bit 10 should be set to
353      indicate that the branch is expected to be taken.  The lower two
354      bits must be zero.  */
355   HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
356 	 0,			/* rightshift */
357 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
358 	 16,			/* bitsize */
359 	 FALSE,			/* pc_relative */
360 	 0,			/* bitpos */
361 	 complain_overflow_bitfield, /* complain_on_overflow */
362 	 ppc64_elf_brtaken_reloc, /* special_function */
363 	 "R_PPC64_ADDR14_BRTAKEN",/* name */
364 	 FALSE,			/* partial_inplace */
365 	 0,			/* src_mask */
366 	 0x0000fffc,		/* dst_mask */
367 	 FALSE),		/* pcrel_offset */
368 
369   /* An absolute 16 bit branch, for which bit 10 should be set to
370      indicate that the branch is not expected to be taken.  The lower
371      two bits must be zero.  */
372   HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
373 	 0,			/* rightshift */
374 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
375 	 16,			/* bitsize */
376 	 FALSE,			/* pc_relative */
377 	 0,			/* bitpos */
378 	 complain_overflow_bitfield, /* complain_on_overflow */
379 	 ppc64_elf_brtaken_reloc, /* special_function */
380 	 "R_PPC64_ADDR14_BRNTAKEN",/* name */
381 	 FALSE,			/* partial_inplace */
382 	 0,			/* src_mask */
383 	 0x0000fffc,		/* dst_mask */
384 	 FALSE),		/* pcrel_offset */
385 
386   /* A relative 26 bit branch; the lower two bits must be zero.  */
387   HOWTO (R_PPC64_REL24,		/* type */
388 	 0,			/* rightshift */
389 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
390 	 26,			/* bitsize */
391 	 TRUE,			/* pc_relative */
392 	 0,			/* bitpos */
393 	 complain_overflow_signed, /* complain_on_overflow */
394 	 ppc64_elf_branch_reloc, /* special_function */
395 	 "R_PPC64_REL24",	/* name */
396 	 FALSE,			/* partial_inplace */
397 	 0,			/* src_mask */
398 	 0x03fffffc,		/* dst_mask */
399 	 TRUE),			/* pcrel_offset */
400 
401   /* A relative 16 bit branch; the lower two bits must be zero.  */
402   HOWTO (R_PPC64_REL14,		/* type */
403 	 0,			/* rightshift */
404 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
405 	 16,			/* bitsize */
406 	 TRUE,			/* pc_relative */
407 	 0,			/* bitpos */
408 	 complain_overflow_signed, /* complain_on_overflow */
409 	 ppc64_elf_branch_reloc, /* special_function */
410 	 "R_PPC64_REL14",	/* name */
411 	 FALSE,			/* partial_inplace */
412 	 0,			/* src_mask */
413 	 0x0000fffc,		/* dst_mask */
414 	 TRUE),			/* pcrel_offset */
415 
416   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
417      the branch is expected to be taken.  The lower two bits must be
418      zero.  */
419   HOWTO (R_PPC64_REL14_BRTAKEN,	/* type */
420 	 0,			/* rightshift */
421 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
422 	 16,			/* bitsize */
423 	 TRUE,			/* pc_relative */
424 	 0,			/* bitpos */
425 	 complain_overflow_signed, /* complain_on_overflow */
426 	 ppc64_elf_brtaken_reloc, /* special_function */
427 	 "R_PPC64_REL14_BRTAKEN", /* name */
428 	 FALSE,			/* partial_inplace */
429 	 0,			/* src_mask */
430 	 0x0000fffc,		/* dst_mask */
431 	 TRUE),			/* pcrel_offset */
432 
433   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
434      the branch is not expected to be taken.  The lower two bits must
435      be zero.  */
436   HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
437 	 0,			/* rightshift */
438 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
439 	 16,			/* bitsize */
440 	 TRUE,			/* pc_relative */
441 	 0,			/* bitpos */
442 	 complain_overflow_signed, /* complain_on_overflow */
443 	 ppc64_elf_brtaken_reloc, /* special_function */
444 	 "R_PPC64_REL14_BRNTAKEN",/* name */
445 	 FALSE,			/* partial_inplace */
446 	 0,			/* src_mask */
447 	 0x0000fffc,		/* dst_mask */
448 	 TRUE),			/* pcrel_offset */
449 
450   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
451      symbol.  */
452   HOWTO (R_PPC64_GOT16,		/* type */
453 	 0,			/* rightshift */
454 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
455 	 16,			/* bitsize */
456 	 FALSE,			/* pc_relative */
457 	 0,			/* bitpos */
458 	 complain_overflow_signed, /* complain_on_overflow */
459 	 ppc64_elf_unhandled_reloc, /* special_function */
460 	 "R_PPC64_GOT16",	/* name */
461 	 FALSE,			/* partial_inplace */
462 	 0,			/* src_mask */
463 	 0xffff,		/* dst_mask */
464 	 FALSE),		/* pcrel_offset */
465 
466   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
467      the symbol.  */
468   HOWTO (R_PPC64_GOT16_LO,	/* type */
469 	 0,			/* rightshift */
470 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
471 	 16,			/* bitsize */
472 	 FALSE,			/* pc_relative */
473 	 0,			/* bitpos */
474 	 complain_overflow_dont, /* complain_on_overflow */
475 	 ppc64_elf_unhandled_reloc, /* special_function */
476 	 "R_PPC64_GOT16_LO",	/* name */
477 	 FALSE,			/* partial_inplace */
478 	 0,			/* src_mask */
479 	 0xffff,		/* dst_mask */
480 	 FALSE),		/* pcrel_offset */
481 
482   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
483      the symbol.  */
484   HOWTO (R_PPC64_GOT16_HI,	/* type */
485 	 16,			/* rightshift */
486 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
487 	 16,			/* bitsize */
488 	 FALSE,			/* pc_relative */
489 	 0,			/* bitpos */
490 	 complain_overflow_dont,/* complain_on_overflow */
491 	 ppc64_elf_unhandled_reloc, /* special_function */
492 	 "R_PPC64_GOT16_HI",	/* name */
493 	 FALSE,			/* partial_inplace */
494 	 0,			/* src_mask */
495 	 0xffff,		/* dst_mask */
496 	 FALSE),		/* pcrel_offset */
497 
498   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
499      the symbol.  */
500   HOWTO (R_PPC64_GOT16_HA,	/* type */
501 	 16,			/* rightshift */
502 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
503 	 16,			/* bitsize */
504 	 FALSE,			/* pc_relative */
505 	 0,			/* bitpos */
506 	 complain_overflow_dont,/* complain_on_overflow */
507 	 ppc64_elf_unhandled_reloc, /* special_function */
508 	 "R_PPC64_GOT16_HA",	/* name */
509 	 FALSE,			/* partial_inplace */
510 	 0,			/* src_mask */
511 	 0xffff,		/* dst_mask */
512 	 FALSE),		/* pcrel_offset */
513 
514   /* This is used only by the dynamic linker.  The symbol should exist
515      both in the object being run and in some shared library.  The
516      dynamic linker copies the data addressed by the symbol from the
517      shared library into the object, because the object being
518      run has to have the data at some particular address.  */
519   HOWTO (R_PPC64_COPY,		/* type */
520 	 0,			/* rightshift */
521 	 0,			/* this one is variable size */
522 	 0,			/* bitsize */
523 	 FALSE,			/* pc_relative */
524 	 0,			/* bitpos */
525 	 complain_overflow_dont, /* complain_on_overflow */
526 	 ppc64_elf_unhandled_reloc, /* special_function */
527 	 "R_PPC64_COPY",	/* name */
528 	 FALSE,			/* partial_inplace */
529 	 0,			/* src_mask */
530 	 0,			/* dst_mask */
531 	 FALSE),		/* pcrel_offset */
532 
533   /* Like R_PPC64_ADDR64, but used when setting global offset table
534      entries.  */
535   HOWTO (R_PPC64_GLOB_DAT,	/* type */
536 	 0,			/* rightshift */
537 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
538 	 64,			/* bitsize */
539 	 FALSE,			/* pc_relative */
540 	 0,			/* bitpos */
541 	 complain_overflow_dont, /* complain_on_overflow */
542 	 ppc64_elf_unhandled_reloc,  /* special_function */
543 	 "R_PPC64_GLOB_DAT",	/* name */
544 	 FALSE,			/* partial_inplace */
545 	 0,			/* src_mask */
546 	 ONES (64),		/* dst_mask */
547 	 FALSE),		/* pcrel_offset */
548 
549   /* Created by the link editor.  Marks a procedure linkage table
550      entry for a symbol.  */
551   HOWTO (R_PPC64_JMP_SLOT,	/* type */
552 	 0,			/* rightshift */
553 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
554 	 0,			/* bitsize */
555 	 FALSE,			/* pc_relative */
556 	 0,			/* bitpos */
557 	 complain_overflow_dont, /* complain_on_overflow */
558 	 ppc64_elf_unhandled_reloc, /* special_function */
559 	 "R_PPC64_JMP_SLOT",	/* name */
560 	 FALSE,			/* partial_inplace */
561 	 0,			/* src_mask */
562 	 0,			/* dst_mask */
563 	 FALSE),		/* pcrel_offset */
564 
565   /* Used only by the dynamic linker.  When the object is run, this
566      doubleword64 is set to the load address of the object, plus the
567      addend.  */
568   HOWTO (R_PPC64_RELATIVE,	/* type */
569 	 0,			/* rightshift */
570 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
571 	 64,			/* bitsize */
572 	 FALSE,			/* pc_relative */
573 	 0,			/* bitpos */
574 	 complain_overflow_dont, /* complain_on_overflow */
575 	 bfd_elf_generic_reloc,	/* special_function */
576 	 "R_PPC64_RELATIVE",	/* name */
577 	 FALSE,			/* partial_inplace */
578 	 0,			/* src_mask */
579 	 ONES (64),		/* dst_mask */
580 	 FALSE),		/* pcrel_offset */
581 
582   /* Like R_PPC64_ADDR32, but may be unaligned.  */
583   HOWTO (R_PPC64_UADDR32,	/* type */
584 	 0,			/* rightshift */
585 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
586 	 32,			/* bitsize */
587 	 FALSE,			/* pc_relative */
588 	 0,			/* bitpos */
589 	 complain_overflow_bitfield, /* complain_on_overflow */
590 	 bfd_elf_generic_reloc,	/* special_function */
591 	 "R_PPC64_UADDR32",	/* name */
592 	 FALSE,			/* partial_inplace */
593 	 0,			/* src_mask */
594 	 0xffffffff,		/* dst_mask */
595 	 FALSE),		/* pcrel_offset */
596 
597   /* Like R_PPC64_ADDR16, but may be unaligned.  */
598   HOWTO (R_PPC64_UADDR16,	/* type */
599 	 0,			/* rightshift */
600 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
601 	 16,			/* bitsize */
602 	 FALSE,			/* pc_relative */
603 	 0,			/* bitpos */
604 	 complain_overflow_bitfield, /* complain_on_overflow */
605 	 bfd_elf_generic_reloc,	/* special_function */
606 	 "R_PPC64_UADDR16",	/* name */
607 	 FALSE,			/* partial_inplace */
608 	 0,			/* src_mask */
609 	 0xffff,		/* dst_mask */
610 	 FALSE),		/* pcrel_offset */
611 
612   /* 32-bit PC relative.  */
613   HOWTO (R_PPC64_REL32,		/* type */
614 	 0,			/* rightshift */
615 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
616 	 32,			/* bitsize */
617 	 TRUE,			/* pc_relative */
618 	 0,			/* bitpos */
619 	 /* FIXME: Verify.  Was complain_overflow_bitfield.  */
620 	 complain_overflow_signed, /* complain_on_overflow */
621 	 bfd_elf_generic_reloc,	/* special_function */
622 	 "R_PPC64_REL32",	/* name */
623 	 FALSE,			/* partial_inplace */
624 	 0,			/* src_mask */
625 	 0xffffffff,		/* dst_mask */
626 	 TRUE),			/* pcrel_offset */
627 
628   /* 32-bit relocation to the symbol's procedure linkage table.  */
629   HOWTO (R_PPC64_PLT32,		/* type */
630 	 0,			/* rightshift */
631 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
632 	 32,			/* bitsize */
633 	 FALSE,			/* pc_relative */
634 	 0,			/* bitpos */
635 	 complain_overflow_bitfield, /* complain_on_overflow */
636 	 ppc64_elf_unhandled_reloc, /* special_function */
637 	 "R_PPC64_PLT32",	/* name */
638 	 FALSE,			/* partial_inplace */
639 	 0,			/* src_mask */
640 	 0xffffffff,		/* dst_mask */
641 	 FALSE),		/* pcrel_offset */
642 
643   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
644      FIXME: R_PPC64_PLTREL32 not supported.  */
645   HOWTO (R_PPC64_PLTREL32,	/* type */
646 	 0,			/* rightshift */
647 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
648 	 32,			/* bitsize */
649 	 TRUE,			/* pc_relative */
650 	 0,			/* bitpos */
651 	 complain_overflow_signed, /* complain_on_overflow */
652 	 bfd_elf_generic_reloc,	/* special_function */
653 	 "R_PPC64_PLTREL32",	/* name */
654 	 FALSE,			/* partial_inplace */
655 	 0,			/* src_mask */
656 	 0xffffffff,		/* dst_mask */
657 	 TRUE),			/* pcrel_offset */
658 
659   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
660      the symbol.  */
661   HOWTO (R_PPC64_PLT16_LO,	/* type */
662 	 0,			/* rightshift */
663 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
664 	 16,			/* bitsize */
665 	 FALSE,			/* pc_relative */
666 	 0,			/* bitpos */
667 	 complain_overflow_dont, /* complain_on_overflow */
668 	 ppc64_elf_unhandled_reloc, /* special_function */
669 	 "R_PPC64_PLT16_LO",	/* name */
670 	 FALSE,			/* partial_inplace */
671 	 0,			/* src_mask */
672 	 0xffff,		/* dst_mask */
673 	 FALSE),		/* pcrel_offset */
674 
675   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
676      the symbol.  */
677   HOWTO (R_PPC64_PLT16_HI,	/* type */
678 	 16,			/* rightshift */
679 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
680 	 16,			/* bitsize */
681 	 FALSE,			/* pc_relative */
682 	 0,			/* bitpos */
683 	 complain_overflow_dont, /* complain_on_overflow */
684 	 ppc64_elf_unhandled_reloc, /* special_function */
685 	 "R_PPC64_PLT16_HI",	/* name */
686 	 FALSE,			/* partial_inplace */
687 	 0,			/* src_mask */
688 	 0xffff,		/* dst_mask */
689 	 FALSE),		/* pcrel_offset */
690 
691   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
692      the symbol.  */
693   HOWTO (R_PPC64_PLT16_HA,	/* type */
694 	 16,			/* rightshift */
695 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
696 	 16,			/* bitsize */
697 	 FALSE,			/* pc_relative */
698 	 0,			/* bitpos */
699 	 complain_overflow_dont, /* complain_on_overflow */
700 	 ppc64_elf_unhandled_reloc, /* special_function */
701 	 "R_PPC64_PLT16_HA",	/* name */
702 	 FALSE,			/* partial_inplace */
703 	 0,			/* src_mask */
704 	 0xffff,		/* dst_mask */
705 	 FALSE),		/* pcrel_offset */
706 
707   /* 16-bit section relative relocation.  */
708   HOWTO (R_PPC64_SECTOFF,	/* type */
709 	 0,			/* rightshift */
710 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
711 	 16,			/* bitsize */
712 	 FALSE,			/* pc_relative */
713 	 0,			/* bitpos */
714 	 complain_overflow_bitfield, /* complain_on_overflow */
715 	 ppc64_elf_sectoff_reloc, /* special_function */
716 	 "R_PPC64_SECTOFF",	/* name */
717 	 FALSE,			/* partial_inplace */
718 	 0,			/* src_mask */
719 	 0xffff,		/* dst_mask */
720 	 FALSE),		/* pcrel_offset */
721 
722   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
723   HOWTO (R_PPC64_SECTOFF_LO,	/* type */
724 	 0,			/* rightshift */
725 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
726 	 16,			/* bitsize */
727 	 FALSE,			/* pc_relative */
728 	 0,			/* bitpos */
729 	 complain_overflow_dont, /* complain_on_overflow */
730 	 ppc64_elf_sectoff_reloc, /* special_function */
731 	 "R_PPC64_SECTOFF_LO",	/* name */
732 	 FALSE,			/* partial_inplace */
733 	 0,			/* src_mask */
734 	 0xffff,		/* dst_mask */
735 	 FALSE),		/* pcrel_offset */
736 
737   /* 16-bit upper half section relative relocation.  */
738   HOWTO (R_PPC64_SECTOFF_HI,	/* type */
739 	 16,			/* rightshift */
740 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
741 	 16,			/* bitsize */
742 	 FALSE,			/* pc_relative */
743 	 0,			/* bitpos */
744 	 complain_overflow_dont, /* complain_on_overflow */
745 	 ppc64_elf_sectoff_reloc, /* special_function */
746 	 "R_PPC64_SECTOFF_HI",	/* name */
747 	 FALSE,			/* partial_inplace */
748 	 0,			/* src_mask */
749 	 0xffff,		/* dst_mask */
750 	 FALSE),		/* pcrel_offset */
751 
752   /* 16-bit upper half adjusted section relative relocation.  */
753   HOWTO (R_PPC64_SECTOFF_HA,	/* type */
754 	 16,			/* rightshift */
755 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
756 	 16,			/* bitsize */
757 	 FALSE,			/* pc_relative */
758 	 0,			/* bitpos */
759 	 complain_overflow_dont, /* complain_on_overflow */
760 	 ppc64_elf_sectoff_ha_reloc, /* special_function */
761 	 "R_PPC64_SECTOFF_HA",	/* name */
762 	 FALSE,			/* partial_inplace */
763 	 0,			/* src_mask */
764 	 0xffff,		/* dst_mask */
765 	 FALSE),		/* pcrel_offset */
766 
767   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
768   HOWTO (R_PPC64_REL30,		/* type */
769 	 2,			/* rightshift */
770 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
771 	 30,			/* bitsize */
772 	 TRUE,			/* pc_relative */
773 	 0,			/* bitpos */
774 	 complain_overflow_dont, /* complain_on_overflow */
775 	 bfd_elf_generic_reloc, /* special_function */
776 	 "R_PPC64_REL30",	/* name */
777 	 FALSE,			/* partial_inplace */
778 	 0,			/* src_mask */
779 	 0xfffffffc,		/* dst_mask */
780 	 TRUE),			/* pcrel_offset */
781 
782   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
783 
784   /* A standard 64-bit relocation.  */
785   HOWTO (R_PPC64_ADDR64,	/* type */
786 	 0,			/* rightshift */
787 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
788 	 64,			/* bitsize */
789 	 FALSE,			/* pc_relative */
790 	 0,			/* bitpos */
791 	 complain_overflow_dont, /* complain_on_overflow */
792 	 bfd_elf_generic_reloc,	/* special_function */
793 	 "R_PPC64_ADDR64",	/* name */
794 	 FALSE,			/* partial_inplace */
795 	 0,			/* src_mask */
796 	 ONES (64),		/* dst_mask */
797 	 FALSE),		/* pcrel_offset */
798 
799   /* The bits 32-47 of an address.  */
800   HOWTO (R_PPC64_ADDR16_HIGHER,	/* type */
801 	 32,			/* rightshift */
802 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
803 	 16,			/* bitsize */
804 	 FALSE,			/* pc_relative */
805 	 0,			/* bitpos */
806 	 complain_overflow_dont, /* complain_on_overflow */
807 	 bfd_elf_generic_reloc,	/* special_function */
808 	 "R_PPC64_ADDR16_HIGHER", /* name */
809 	 FALSE,			/* partial_inplace */
810 	 0,			/* src_mask */
811 	 0xffff,		/* dst_mask */
812 	 FALSE),		/* pcrel_offset */
813 
814   /* The bits 32-47 of an address, plus 1 if the contents of the low
815      16 bits, treated as a signed number, is negative.  */
816   HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
817 	 32,			/* rightshift */
818 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
819 	 16,			/* bitsize */
820 	 FALSE,			/* pc_relative */
821 	 0,			/* bitpos */
822 	 complain_overflow_dont, /* complain_on_overflow */
823 	 ppc64_elf_ha_reloc,	/* special_function */
824 	 "R_PPC64_ADDR16_HIGHERA", /* name */
825 	 FALSE,			/* partial_inplace */
826 	 0,			/* src_mask */
827 	 0xffff,		/* dst_mask */
828 	 FALSE),		/* pcrel_offset */
829 
830   /* The bits 48-63 of an address.  */
831   HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
832 	 48,			/* rightshift */
833 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
834 	 16,			/* bitsize */
835 	 FALSE,			/* pc_relative */
836 	 0,			/* bitpos */
837 	 complain_overflow_dont, /* complain_on_overflow */
838 	 bfd_elf_generic_reloc,	/* special_function */
839 	 "R_PPC64_ADDR16_HIGHEST", /* name */
840 	 FALSE,			/* partial_inplace */
841 	 0,			/* src_mask */
842 	 0xffff,		/* dst_mask */
843 	 FALSE),		/* pcrel_offset */
844 
845   /* The bits 48-63 of an address, plus 1 if the contents of the low
846      16 bits, treated as a signed number, is negative.  */
847   HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
848 	 48,			/* rightshift */
849 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
850 	 16,			/* bitsize */
851 	 FALSE,			/* pc_relative */
852 	 0,			/* bitpos */
853 	 complain_overflow_dont, /* complain_on_overflow */
854 	 ppc64_elf_ha_reloc,	/* special_function */
855 	 "R_PPC64_ADDR16_HIGHESTA", /* name */
856 	 FALSE,			/* partial_inplace */
857 	 0,			/* src_mask */
858 	 0xffff,		/* dst_mask */
859 	 FALSE),		/* pcrel_offset */
860 
861   /* Like ADDR64, but may be unaligned.  */
862   HOWTO (R_PPC64_UADDR64,	/* type */
863 	 0,			/* rightshift */
864 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
865 	 64,			/* bitsize */
866 	 FALSE,			/* pc_relative */
867 	 0,			/* bitpos */
868 	 complain_overflow_dont, /* complain_on_overflow */
869 	 bfd_elf_generic_reloc,	/* special_function */
870 	 "R_PPC64_UADDR64",	/* name */
871 	 FALSE,			/* partial_inplace */
872 	 0,			/* src_mask */
873 	 ONES (64),		/* dst_mask */
874 	 FALSE),		/* pcrel_offset */
875 
876   /* 64-bit relative relocation.  */
877   HOWTO (R_PPC64_REL64,		/* type */
878 	 0,			/* rightshift */
879 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
880 	 64,			/* bitsize */
881 	 TRUE,			/* pc_relative */
882 	 0,			/* bitpos */
883 	 complain_overflow_dont, /* complain_on_overflow */
884 	 bfd_elf_generic_reloc,	/* special_function */
885 	 "R_PPC64_REL64",	/* name */
886 	 FALSE,			/* partial_inplace */
887 	 0,			/* src_mask */
888 	 ONES (64),		/* dst_mask */
889 	 TRUE),			/* pcrel_offset */
890 
891   /* 64-bit relocation to the symbol's procedure linkage table.  */
892   HOWTO (R_PPC64_PLT64,		/* type */
893 	 0,			/* rightshift */
894 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
895 	 64,			/* bitsize */
896 	 FALSE,			/* pc_relative */
897 	 0,			/* bitpos */
898 	 complain_overflow_dont, /* complain_on_overflow */
899 	 ppc64_elf_unhandled_reloc, /* special_function */
900 	 "R_PPC64_PLT64",	/* name */
901 	 FALSE,			/* partial_inplace */
902 	 0,			/* src_mask */
903 	 ONES (64),		/* dst_mask */
904 	 FALSE),		/* pcrel_offset */
905 
906   /* 64-bit PC relative relocation to the symbol's procedure linkage
907      table.  */
908   /* FIXME: R_PPC64_PLTREL64 not supported.  */
909   HOWTO (R_PPC64_PLTREL64,	/* type */
910 	 0,			/* rightshift */
911 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
912 	 64,			/* bitsize */
913 	 TRUE,			/* pc_relative */
914 	 0,			/* bitpos */
915 	 complain_overflow_dont, /* complain_on_overflow */
916 	 ppc64_elf_unhandled_reloc, /* special_function */
917 	 "R_PPC64_PLTREL64",	/* name */
918 	 FALSE,			/* partial_inplace */
919 	 0,			/* src_mask */
920 	 ONES (64),		/* dst_mask */
921 	 TRUE),			/* pcrel_offset */
922 
923   /* 16 bit TOC-relative relocation.  */
924 
925   /* R_PPC64_TOC16	  47	   half16*	S + A - .TOC.  */
926   HOWTO (R_PPC64_TOC16,		/* type */
927 	 0,			/* rightshift */
928 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
929 	 16,			/* bitsize */
930 	 FALSE,			/* pc_relative */
931 	 0,			/* bitpos */
932 	 complain_overflow_signed, /* complain_on_overflow */
933 	 ppc64_elf_toc_reloc,	/* special_function */
934 	 "R_PPC64_TOC16",	/* name */
935 	 FALSE,			/* partial_inplace */
936 	 0,			/* src_mask */
937 	 0xffff,		/* dst_mask */
938 	 FALSE),		/* pcrel_offset */
939 
940   /* 16 bit TOC-relative relocation without overflow.  */
941 
942   /* R_PPC64_TOC16_LO	  48	   half16	 #lo (S + A - .TOC.)  */
943   HOWTO (R_PPC64_TOC16_LO,	/* type */
944 	 0,			/* rightshift */
945 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
946 	 16,			/* bitsize */
947 	 FALSE,			/* pc_relative */
948 	 0,			/* bitpos */
949 	 complain_overflow_dont, /* complain_on_overflow */
950 	 ppc64_elf_toc_reloc,	/* special_function */
951 	 "R_PPC64_TOC16_LO",	/* name */
952 	 FALSE,			/* partial_inplace */
953 	 0,			/* src_mask */
954 	 0xffff,		/* dst_mask */
955 	 FALSE),		/* pcrel_offset */
956 
957   /* 16 bit TOC-relative relocation, high 16 bits.  */
958 
959   /* R_PPC64_TOC16_HI	  49	   half16	 #hi (S + A - .TOC.)  */
960   HOWTO (R_PPC64_TOC16_HI,	/* type */
961 	 16,			/* rightshift */
962 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
963 	 16,			/* bitsize */
964 	 FALSE,			/* pc_relative */
965 	 0,			/* bitpos */
966 	 complain_overflow_dont, /* complain_on_overflow */
967 	 ppc64_elf_toc_reloc,	/* special_function */
968 	 "R_PPC64_TOC16_HI",	/* name */
969 	 FALSE,			/* partial_inplace */
970 	 0,			/* src_mask */
971 	 0xffff,		/* dst_mask */
972 	 FALSE),		/* pcrel_offset */
973 
974   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
975      contents of the low 16 bits, treated as a signed number, is
976      negative.  */
977 
978   /* R_PPC64_TOC16_HA	  50	   half16	 #ha (S + A - .TOC.)  */
979   HOWTO (R_PPC64_TOC16_HA,	/* type */
980 	 16,			/* rightshift */
981 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
982 	 16,			/* bitsize */
983 	 FALSE,			/* pc_relative */
984 	 0,			/* bitpos */
985 	 complain_overflow_dont, /* complain_on_overflow */
986 	 ppc64_elf_toc_ha_reloc, /* special_function */
987 	 "R_PPC64_TOC16_HA",	/* name */
988 	 FALSE,			/* partial_inplace */
989 	 0,			/* src_mask */
990 	 0xffff,		/* dst_mask */
991 	 FALSE),		/* pcrel_offset */
992 
993   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
994 
995   /* R_PPC64_TOC		  51	   doubleword64	 .TOC.  */
996   HOWTO (R_PPC64_TOC,		/* type */
997 	 0,			/* rightshift */
998 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
999 	 64,			/* bitsize */
1000 	 FALSE,			/* pc_relative */
1001 	 0,			/* bitpos */
1002 	 complain_overflow_bitfield, /* complain_on_overflow */
1003 	 ppc64_elf_toc64_reloc,	/* special_function */
1004 	 "R_PPC64_TOC",		/* name */
1005 	 FALSE,			/* partial_inplace */
1006 	 0,			/* src_mask */
1007 	 ONES (64),		/* dst_mask */
1008 	 FALSE),		/* pcrel_offset */
1009 
1010   /* Like R_PPC64_GOT16, but also informs the link editor that the
1011      value to relocate may (!) refer to a PLT entry which the link
1012      editor (a) may replace with the symbol value.  If the link editor
1013      is unable to fully resolve the symbol, it may (b) create a PLT
1014      entry and store the address to the new PLT entry in the GOT.
1015      This permits lazy resolution of function symbols at run time.
1016      The link editor may also skip all of this and just (c) emit a
1017      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
1018   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
1019     HOWTO (R_PPC64_PLTGOT16,	/* type */
1020 	 0,			/* rightshift */
1021 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1022 	 16,			/* bitsize */
1023 	 FALSE,			/* pc_relative */
1024 	 0,			/* bitpos */
1025 	 complain_overflow_signed, /* complain_on_overflow */
1026 	 ppc64_elf_unhandled_reloc, /* special_function */
1027 	 "R_PPC64_PLTGOT16",	/* name */
1028 	 FALSE,			/* partial_inplace */
1029 	 0,			/* src_mask */
1030 	 0xffff,		/* dst_mask */
1031 	 FALSE),		/* pcrel_offset */
1032 
1033   /* Like R_PPC64_PLTGOT16, but without overflow.  */
1034   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1035   HOWTO (R_PPC64_PLTGOT16_LO,	/* type */
1036 	 0,			/* rightshift */
1037 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1038 	 16,			/* bitsize */
1039 	 FALSE,			/* pc_relative */
1040 	 0,			/* bitpos */
1041 	 complain_overflow_dont, /* complain_on_overflow */
1042 	 ppc64_elf_unhandled_reloc, /* special_function */
1043 	 "R_PPC64_PLTGOT16_LO",	/* name */
1044 	 FALSE,			/* partial_inplace */
1045 	 0,			/* src_mask */
1046 	 0xffff,		/* dst_mask */
1047 	 FALSE),		/* pcrel_offset */
1048 
1049   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
1050   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
1051   HOWTO (R_PPC64_PLTGOT16_HI,	/* type */
1052 	 16,			/* rightshift */
1053 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1054 	 16,			/* bitsize */
1055 	 FALSE,			/* pc_relative */
1056 	 0,			/* bitpos */
1057 	 complain_overflow_dont, /* complain_on_overflow */
1058 	 ppc64_elf_unhandled_reloc, /* special_function */
1059 	 "R_PPC64_PLTGOT16_HI",	/* name */
1060 	 FALSE,			/* partial_inplace */
1061 	 0,			/* src_mask */
1062 	 0xffff,		/* dst_mask */
1063 	 FALSE),		/* pcrel_offset */
1064 
1065   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
1066      1 if the contents of the low 16 bits, treated as a signed number,
1067      is negative.  */
1068   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
1069   HOWTO (R_PPC64_PLTGOT16_HA,	/* type */
1070 	 16,			/* rightshift */
1071 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1072 	 16,			/* bitsize */
1073 	 FALSE,			/* pc_relative */
1074 	 0,			/* bitpos */
1075 	 complain_overflow_dont,/* complain_on_overflow */
1076 	 ppc64_elf_unhandled_reloc, /* special_function */
1077 	 "R_PPC64_PLTGOT16_HA",	/* name */
1078 	 FALSE,			/* partial_inplace */
1079 	 0,			/* src_mask */
1080 	 0xffff,		/* dst_mask */
1081 	 FALSE),		/* pcrel_offset */
1082 
1083   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
1084   HOWTO (R_PPC64_ADDR16_DS,	/* type */
1085 	 0,			/* rightshift */
1086 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1087 	 16,			/* bitsize */
1088 	 FALSE,			/* pc_relative */
1089 	 0,			/* bitpos */
1090 	 complain_overflow_bitfield, /* complain_on_overflow */
1091 	 bfd_elf_generic_reloc,	/* special_function */
1092 	 "R_PPC64_ADDR16_DS",	/* name */
1093 	 FALSE,			/* partial_inplace */
1094 	 0,			/* src_mask */
1095 	 0xfffc,		/* dst_mask */
1096 	 FALSE),		/* pcrel_offset */
1097 
1098   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
1099   HOWTO (R_PPC64_ADDR16_LO_DS,	/* type */
1100 	 0,			/* rightshift */
1101 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1102 	 16,			/* bitsize */
1103 	 FALSE,			/* pc_relative */
1104 	 0,			/* bitpos */
1105 	 complain_overflow_dont,/* complain_on_overflow */
1106 	 bfd_elf_generic_reloc,	/* special_function */
1107 	 "R_PPC64_ADDR16_LO_DS",/* name */
1108 	 FALSE,			/* partial_inplace */
1109 	 0,			/* src_mask */
1110 	 0xfffc,		/* dst_mask */
1111 	 FALSE),		/* pcrel_offset */
1112 
1113   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
1114   HOWTO (R_PPC64_GOT16_DS,	/* type */
1115 	 0,			/* rightshift */
1116 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1117 	 16,			/* bitsize */
1118 	 FALSE,			/* pc_relative */
1119 	 0,			/* bitpos */
1120 	 complain_overflow_signed, /* complain_on_overflow */
1121 	 ppc64_elf_unhandled_reloc, /* special_function */
1122 	 "R_PPC64_GOT16_DS",	/* name */
1123 	 FALSE,			/* partial_inplace */
1124 	 0,			/* src_mask */
1125 	 0xfffc,		/* dst_mask */
1126 	 FALSE),		/* pcrel_offset */
1127 
1128   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
1129   HOWTO (R_PPC64_GOT16_LO_DS,	/* type */
1130 	 0,			/* rightshift */
1131 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1132 	 16,			/* bitsize */
1133 	 FALSE,			/* pc_relative */
1134 	 0,			/* bitpos */
1135 	 complain_overflow_dont, /* complain_on_overflow */
1136 	 ppc64_elf_unhandled_reloc, /* special_function */
1137 	 "R_PPC64_GOT16_LO_DS",	/* name */
1138 	 FALSE,			/* partial_inplace */
1139 	 0,			/* src_mask */
1140 	 0xfffc,		/* dst_mask */
1141 	 FALSE),		/* pcrel_offset */
1142 
1143   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
1144   HOWTO (R_PPC64_PLT16_LO_DS,	/* type */
1145 	 0,			/* rightshift */
1146 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1147 	 16,			/* bitsize */
1148 	 FALSE,			/* pc_relative */
1149 	 0,			/* bitpos */
1150 	 complain_overflow_dont, /* complain_on_overflow */
1151 	 ppc64_elf_unhandled_reloc, /* special_function */
1152 	 "R_PPC64_PLT16_LO_DS",	/* name */
1153 	 FALSE,			/* partial_inplace */
1154 	 0,			/* src_mask */
1155 	 0xfffc,		/* dst_mask */
1156 	 FALSE),		/* pcrel_offset */
1157 
1158   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
1159   HOWTO (R_PPC64_SECTOFF_DS,	/* type */
1160 	 0,			/* rightshift */
1161 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1162 	 16,			/* bitsize */
1163 	 FALSE,			/* pc_relative */
1164 	 0,			/* bitpos */
1165 	 complain_overflow_bitfield, /* complain_on_overflow */
1166 	 ppc64_elf_sectoff_reloc, /* special_function */
1167 	 "R_PPC64_SECTOFF_DS",	/* name */
1168 	 FALSE,			/* partial_inplace */
1169 	 0,			/* src_mask */
1170 	 0xfffc,		/* dst_mask */
1171 	 FALSE),		/* pcrel_offset */
1172 
1173   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
1174   HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
1175 	 0,			/* rightshift */
1176 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1177 	 16,			/* bitsize */
1178 	 FALSE,			/* pc_relative */
1179 	 0,			/* bitpos */
1180 	 complain_overflow_dont, /* complain_on_overflow */
1181 	 ppc64_elf_sectoff_reloc, /* special_function */
1182 	 "R_PPC64_SECTOFF_LO_DS",/* name */
1183 	 FALSE,			/* partial_inplace */
1184 	 0,			/* src_mask */
1185 	 0xfffc,		/* dst_mask */
1186 	 FALSE),		/* pcrel_offset */
1187 
1188   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
1189   HOWTO (R_PPC64_TOC16_DS,	/* type */
1190 	 0,			/* rightshift */
1191 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1192 	 16,			/* bitsize */
1193 	 FALSE,			/* pc_relative */
1194 	 0,			/* bitpos */
1195 	 complain_overflow_signed, /* complain_on_overflow */
1196 	 ppc64_elf_toc_reloc,	/* special_function */
1197 	 "R_PPC64_TOC16_DS",	/* name */
1198 	 FALSE,			/* partial_inplace */
1199 	 0,			/* src_mask */
1200 	 0xfffc,		/* dst_mask */
1201 	 FALSE),		/* pcrel_offset */
1202 
1203   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
1204   HOWTO (R_PPC64_TOC16_LO_DS,	/* type */
1205 	 0,			/* rightshift */
1206 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1207 	 16,			/* bitsize */
1208 	 FALSE,			/* pc_relative */
1209 	 0,			/* bitpos */
1210 	 complain_overflow_dont, /* complain_on_overflow */
1211 	 ppc64_elf_toc_reloc,	/* special_function */
1212 	 "R_PPC64_TOC16_LO_DS",	/* name */
1213 	 FALSE,			/* partial_inplace */
1214 	 0,			/* src_mask */
1215 	 0xfffc,		/* dst_mask */
1216 	 FALSE),		/* pcrel_offset */
1217 
1218   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
1219   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
1220   HOWTO (R_PPC64_PLTGOT16_DS,	/* type */
1221 	 0,			/* rightshift */
1222 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1223 	 16,			/* bitsize */
1224 	 FALSE,			/* pc_relative */
1225 	 0,			/* bitpos */
1226 	 complain_overflow_signed, /* complain_on_overflow */
1227 	 ppc64_elf_unhandled_reloc, /* special_function */
1228 	 "R_PPC64_PLTGOT16_DS",	/* name */
1229 	 FALSE,			/* partial_inplace */
1230 	 0,			/* src_mask */
1231 	 0xfffc,		/* dst_mask */
1232 	 FALSE),		/* pcrel_offset */
1233 
1234   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
1235   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1236   HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
1237 	 0,			/* rightshift */
1238 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1239 	 16,			/* bitsize */
1240 	 FALSE,			/* pc_relative */
1241 	 0,			/* bitpos */
1242 	 complain_overflow_dont, /* complain_on_overflow */
1243 	 ppc64_elf_unhandled_reloc, /* special_function */
1244 	 "R_PPC64_PLTGOT16_LO_DS",/* name */
1245 	 FALSE,			/* partial_inplace */
1246 	 0,			/* src_mask */
1247 	 0xfffc,		/* dst_mask */
1248 	 FALSE),		/* pcrel_offset */
1249 
1250   /* Marker relocs for TLS.  */
1251   HOWTO (R_PPC64_TLS,
1252 	 0,			/* rightshift */
1253 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1254 	 32,			/* bitsize */
1255 	 FALSE,			/* pc_relative */
1256 	 0,			/* bitpos */
1257 	 complain_overflow_dont, /* complain_on_overflow */
1258 	 bfd_elf_generic_reloc,	/* special_function */
1259 	 "R_PPC64_TLS",		/* name */
1260 	 FALSE,			/* partial_inplace */
1261 	 0,			/* src_mask */
1262 	 0,			/* dst_mask */
1263 	 FALSE),		/* pcrel_offset */
1264 
1265   HOWTO (R_PPC64_TLSGD,
1266 	 0,			/* rightshift */
1267 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1268 	 32,			/* bitsize */
1269 	 FALSE,			/* pc_relative */
1270 	 0,			/* bitpos */
1271 	 complain_overflow_dont, /* complain_on_overflow */
1272 	 bfd_elf_generic_reloc,	/* special_function */
1273 	 "R_PPC64_TLSGD",	/* name */
1274 	 FALSE,			/* partial_inplace */
1275 	 0,			/* src_mask */
1276 	 0,			/* dst_mask */
1277 	 FALSE),		/* pcrel_offset */
1278 
1279   HOWTO (R_PPC64_TLSLD,
1280 	 0,			/* rightshift */
1281 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1282 	 32,			/* bitsize */
1283 	 FALSE,			/* pc_relative */
1284 	 0,			/* bitpos */
1285 	 complain_overflow_dont, /* complain_on_overflow */
1286 	 bfd_elf_generic_reloc,	/* special_function */
1287 	 "R_PPC64_TLSLD",	/* name */
1288 	 FALSE,			/* partial_inplace */
1289 	 0,			/* src_mask */
1290 	 0,			/* dst_mask */
1291 	 FALSE),		/* pcrel_offset */
1292 
1293   HOWTO (R_PPC64_TOCSAVE,
1294 	 0,			/* rightshift */
1295 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1296 	 32,			/* bitsize */
1297 	 FALSE,			/* pc_relative */
1298 	 0,			/* bitpos */
1299 	 complain_overflow_dont, /* complain_on_overflow */
1300 	 bfd_elf_generic_reloc,	/* special_function */
1301 	 "R_PPC64_TOCSAVE",	/* name */
1302 	 FALSE,			/* partial_inplace */
1303 	 0,			/* src_mask */
1304 	 0,			/* dst_mask */
1305 	 FALSE),		/* pcrel_offset */
1306 
1307   /* Computes the load module index of the load module that contains the
1308      definition of its TLS sym.  */
1309   HOWTO (R_PPC64_DTPMOD64,
1310 	 0,			/* rightshift */
1311 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1312 	 64,			/* bitsize */
1313 	 FALSE,			/* pc_relative */
1314 	 0,			/* bitpos */
1315 	 complain_overflow_dont, /* complain_on_overflow */
1316 	 ppc64_elf_unhandled_reloc, /* special_function */
1317 	 "R_PPC64_DTPMOD64",	/* name */
1318 	 FALSE,			/* partial_inplace */
1319 	 0,			/* src_mask */
1320 	 ONES (64),		/* dst_mask */
1321 	 FALSE),		/* pcrel_offset */
1322 
1323   /* Computes a dtv-relative displacement, the difference between the value
1324      of sym+add and the base address of the thread-local storage block that
1325      contains the definition of sym, minus 0x8000.  */
1326   HOWTO (R_PPC64_DTPREL64,
1327 	 0,			/* rightshift */
1328 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1329 	 64,			/* bitsize */
1330 	 FALSE,			/* pc_relative */
1331 	 0,			/* bitpos */
1332 	 complain_overflow_dont, /* complain_on_overflow */
1333 	 ppc64_elf_unhandled_reloc, /* special_function */
1334 	 "R_PPC64_DTPREL64",	/* name */
1335 	 FALSE,			/* partial_inplace */
1336 	 0,			/* src_mask */
1337 	 ONES (64),		/* dst_mask */
1338 	 FALSE),		/* pcrel_offset */
1339 
1340   /* A 16 bit dtprel reloc.  */
1341   HOWTO (R_PPC64_DTPREL16,
1342 	 0,			/* rightshift */
1343 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1344 	 16,			/* bitsize */
1345 	 FALSE,			/* pc_relative */
1346 	 0,			/* bitpos */
1347 	 complain_overflow_signed, /* complain_on_overflow */
1348 	 ppc64_elf_unhandled_reloc, /* special_function */
1349 	 "R_PPC64_DTPREL16",	/* name */
1350 	 FALSE,			/* partial_inplace */
1351 	 0,			/* src_mask */
1352 	 0xffff,		/* dst_mask */
1353 	 FALSE),		/* pcrel_offset */
1354 
1355   /* Like DTPREL16, but no overflow.  */
1356   HOWTO (R_PPC64_DTPREL16_LO,
1357 	 0,			/* rightshift */
1358 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1359 	 16,			/* bitsize */
1360 	 FALSE,			/* pc_relative */
1361 	 0,			/* bitpos */
1362 	 complain_overflow_dont, /* complain_on_overflow */
1363 	 ppc64_elf_unhandled_reloc, /* special_function */
1364 	 "R_PPC64_DTPREL16_LO",	/* name */
1365 	 FALSE,			/* partial_inplace */
1366 	 0,			/* src_mask */
1367 	 0xffff,		/* dst_mask */
1368 	 FALSE),		/* pcrel_offset */
1369 
1370   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
1371   HOWTO (R_PPC64_DTPREL16_HI,
1372 	 16,			/* rightshift */
1373 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1374 	 16,			/* bitsize */
1375 	 FALSE,			/* pc_relative */
1376 	 0,			/* bitpos */
1377 	 complain_overflow_dont, /* complain_on_overflow */
1378 	 ppc64_elf_unhandled_reloc, /* special_function */
1379 	 "R_PPC64_DTPREL16_HI",	/* name */
1380 	 FALSE,			/* partial_inplace */
1381 	 0,			/* src_mask */
1382 	 0xffff,		/* dst_mask */
1383 	 FALSE),		/* pcrel_offset */
1384 
1385   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
1386   HOWTO (R_PPC64_DTPREL16_HA,
1387 	 16,			/* rightshift */
1388 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1389 	 16,			/* bitsize */
1390 	 FALSE,			/* pc_relative */
1391 	 0,			/* bitpos */
1392 	 complain_overflow_dont, /* complain_on_overflow */
1393 	 ppc64_elf_unhandled_reloc, /* special_function */
1394 	 "R_PPC64_DTPREL16_HA",	/* name */
1395 	 FALSE,			/* partial_inplace */
1396 	 0,			/* src_mask */
1397 	 0xffff,		/* dst_mask */
1398 	 FALSE),		/* pcrel_offset */
1399 
1400   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
1401   HOWTO (R_PPC64_DTPREL16_HIGHER,
1402 	 32,			/* rightshift */
1403 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1404 	 16,			/* bitsize */
1405 	 FALSE,			/* pc_relative */
1406 	 0,			/* bitpos */
1407 	 complain_overflow_dont, /* complain_on_overflow */
1408 	 ppc64_elf_unhandled_reloc, /* special_function */
1409 	 "R_PPC64_DTPREL16_HIGHER", /* name */
1410 	 FALSE,			/* partial_inplace */
1411 	 0,			/* src_mask */
1412 	 0xffff,		/* dst_mask */
1413 	 FALSE),		/* pcrel_offset */
1414 
1415   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
1416   HOWTO (R_PPC64_DTPREL16_HIGHERA,
1417 	 32,			/* rightshift */
1418 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1419 	 16,			/* bitsize */
1420 	 FALSE,			/* pc_relative */
1421 	 0,			/* bitpos */
1422 	 complain_overflow_dont, /* complain_on_overflow */
1423 	 ppc64_elf_unhandled_reloc, /* special_function */
1424 	 "R_PPC64_DTPREL16_HIGHERA", /* name */
1425 	 FALSE,			/* partial_inplace */
1426 	 0,			/* src_mask */
1427 	 0xffff,		/* dst_mask */
1428 	 FALSE),		/* pcrel_offset */
1429 
1430   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
1431   HOWTO (R_PPC64_DTPREL16_HIGHEST,
1432 	 48,			/* rightshift */
1433 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1434 	 16,			/* bitsize */
1435 	 FALSE,			/* pc_relative */
1436 	 0,			/* bitpos */
1437 	 complain_overflow_dont, /* complain_on_overflow */
1438 	 ppc64_elf_unhandled_reloc, /* special_function */
1439 	 "R_PPC64_DTPREL16_HIGHEST", /* name */
1440 	 FALSE,			/* partial_inplace */
1441 	 0,			/* src_mask */
1442 	 0xffff,		/* dst_mask */
1443 	 FALSE),		/* pcrel_offset */
1444 
1445   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
1446   HOWTO (R_PPC64_DTPREL16_HIGHESTA,
1447 	 48,			/* rightshift */
1448 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1449 	 16,			/* bitsize */
1450 	 FALSE,			/* pc_relative */
1451 	 0,			/* bitpos */
1452 	 complain_overflow_dont, /* complain_on_overflow */
1453 	 ppc64_elf_unhandled_reloc, /* special_function */
1454 	 "R_PPC64_DTPREL16_HIGHESTA", /* name */
1455 	 FALSE,			/* partial_inplace */
1456 	 0,			/* src_mask */
1457 	 0xffff,		/* dst_mask */
1458 	 FALSE),		/* pcrel_offset */
1459 
1460   /* Like DTPREL16, but for insns with a DS field.  */
1461   HOWTO (R_PPC64_DTPREL16_DS,
1462 	 0,			/* rightshift */
1463 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1464 	 16,			/* bitsize */
1465 	 FALSE,			/* pc_relative */
1466 	 0,			/* bitpos */
1467 	 complain_overflow_signed, /* complain_on_overflow */
1468 	 ppc64_elf_unhandled_reloc, /* special_function */
1469 	 "R_PPC64_DTPREL16_DS",	/* name */
1470 	 FALSE,			/* partial_inplace */
1471 	 0,			/* src_mask */
1472 	 0xfffc,		/* dst_mask */
1473 	 FALSE),		/* pcrel_offset */
1474 
1475   /* Like DTPREL16_DS, but no overflow.  */
1476   HOWTO (R_PPC64_DTPREL16_LO_DS,
1477 	 0,			/* rightshift */
1478 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1479 	 16,			/* bitsize */
1480 	 FALSE,			/* pc_relative */
1481 	 0,			/* bitpos */
1482 	 complain_overflow_dont, /* complain_on_overflow */
1483 	 ppc64_elf_unhandled_reloc, /* special_function */
1484 	 "R_PPC64_DTPREL16_LO_DS", /* name */
1485 	 FALSE,			/* partial_inplace */
1486 	 0,			/* src_mask */
1487 	 0xfffc,		/* dst_mask */
1488 	 FALSE),		/* pcrel_offset */
1489 
1490   /* Computes a tp-relative displacement, the difference between the value of
1491      sym+add and the value of the thread pointer (r13).  */
1492   HOWTO (R_PPC64_TPREL64,
1493 	 0,			/* rightshift */
1494 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1495 	 64,			/* bitsize */
1496 	 FALSE,			/* pc_relative */
1497 	 0,			/* bitpos */
1498 	 complain_overflow_dont, /* complain_on_overflow */
1499 	 ppc64_elf_unhandled_reloc, /* special_function */
1500 	 "R_PPC64_TPREL64",	/* name */
1501 	 FALSE,			/* partial_inplace */
1502 	 0,			/* src_mask */
1503 	 ONES (64),		/* dst_mask */
1504 	 FALSE),		/* pcrel_offset */
1505 
1506   /* A 16 bit tprel reloc.  */
1507   HOWTO (R_PPC64_TPREL16,
1508 	 0,			/* rightshift */
1509 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1510 	 16,			/* bitsize */
1511 	 FALSE,			/* pc_relative */
1512 	 0,			/* bitpos */
1513 	 complain_overflow_signed, /* complain_on_overflow */
1514 	 ppc64_elf_unhandled_reloc, /* special_function */
1515 	 "R_PPC64_TPREL16",	/* name */
1516 	 FALSE,			/* partial_inplace */
1517 	 0,			/* src_mask */
1518 	 0xffff,		/* dst_mask */
1519 	 FALSE),		/* pcrel_offset */
1520 
1521   /* Like TPREL16, but no overflow.  */
1522   HOWTO (R_PPC64_TPREL16_LO,
1523 	 0,			/* rightshift */
1524 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1525 	 16,			/* bitsize */
1526 	 FALSE,			/* pc_relative */
1527 	 0,			/* bitpos */
1528 	 complain_overflow_dont, /* complain_on_overflow */
1529 	 ppc64_elf_unhandled_reloc, /* special_function */
1530 	 "R_PPC64_TPREL16_LO",	/* name */
1531 	 FALSE,			/* partial_inplace */
1532 	 0,			/* src_mask */
1533 	 0xffff,		/* dst_mask */
1534 	 FALSE),		/* pcrel_offset */
1535 
1536   /* Like TPREL16_LO, but next higher group of 16 bits.  */
1537   HOWTO (R_PPC64_TPREL16_HI,
1538 	 16,			/* rightshift */
1539 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1540 	 16,			/* bitsize */
1541 	 FALSE,			/* pc_relative */
1542 	 0,			/* bitpos */
1543 	 complain_overflow_dont, /* complain_on_overflow */
1544 	 ppc64_elf_unhandled_reloc, /* special_function */
1545 	 "R_PPC64_TPREL16_HI",	/* name */
1546 	 FALSE,			/* partial_inplace */
1547 	 0,			/* src_mask */
1548 	 0xffff,		/* dst_mask */
1549 	 FALSE),		/* pcrel_offset */
1550 
1551   /* Like TPREL16_HI, but adjust for low 16 bits.  */
1552   HOWTO (R_PPC64_TPREL16_HA,
1553 	 16,			/* rightshift */
1554 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1555 	 16,			/* bitsize */
1556 	 FALSE,			/* pc_relative */
1557 	 0,			/* bitpos */
1558 	 complain_overflow_dont, /* complain_on_overflow */
1559 	 ppc64_elf_unhandled_reloc, /* special_function */
1560 	 "R_PPC64_TPREL16_HA",	/* name */
1561 	 FALSE,			/* partial_inplace */
1562 	 0,			/* src_mask */
1563 	 0xffff,		/* dst_mask */
1564 	 FALSE),		/* pcrel_offset */
1565 
1566   /* Like TPREL16_HI, but next higher group of 16 bits.  */
1567   HOWTO (R_PPC64_TPREL16_HIGHER,
1568 	 32,			/* rightshift */
1569 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1570 	 16,			/* bitsize */
1571 	 FALSE,			/* pc_relative */
1572 	 0,			/* bitpos */
1573 	 complain_overflow_dont, /* complain_on_overflow */
1574 	 ppc64_elf_unhandled_reloc, /* special_function */
1575 	 "R_PPC64_TPREL16_HIGHER",	/* name */
1576 	 FALSE,			/* partial_inplace */
1577 	 0,			/* src_mask */
1578 	 0xffff,		/* dst_mask */
1579 	 FALSE),		/* pcrel_offset */
1580 
1581   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
1582   HOWTO (R_PPC64_TPREL16_HIGHERA,
1583 	 32,			/* rightshift */
1584 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1585 	 16,			/* bitsize */
1586 	 FALSE,			/* pc_relative */
1587 	 0,			/* bitpos */
1588 	 complain_overflow_dont, /* complain_on_overflow */
1589 	 ppc64_elf_unhandled_reloc, /* special_function */
1590 	 "R_PPC64_TPREL16_HIGHERA", /* name */
1591 	 FALSE,			/* partial_inplace */
1592 	 0,			/* src_mask */
1593 	 0xffff,		/* dst_mask */
1594 	 FALSE),		/* pcrel_offset */
1595 
1596   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
1597   HOWTO (R_PPC64_TPREL16_HIGHEST,
1598 	 48,			/* rightshift */
1599 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1600 	 16,			/* bitsize */
1601 	 FALSE,			/* pc_relative */
1602 	 0,			/* bitpos */
1603 	 complain_overflow_dont, /* complain_on_overflow */
1604 	 ppc64_elf_unhandled_reloc, /* special_function */
1605 	 "R_PPC64_TPREL16_HIGHEST", /* name */
1606 	 FALSE,			/* partial_inplace */
1607 	 0,			/* src_mask */
1608 	 0xffff,		/* dst_mask */
1609 	 FALSE),		/* pcrel_offset */
1610 
1611   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
1612   HOWTO (R_PPC64_TPREL16_HIGHESTA,
1613 	 48,			/* rightshift */
1614 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1615 	 16,			/* bitsize */
1616 	 FALSE,			/* pc_relative */
1617 	 0,			/* bitpos */
1618 	 complain_overflow_dont, /* complain_on_overflow */
1619 	 ppc64_elf_unhandled_reloc, /* special_function */
1620 	 "R_PPC64_TPREL16_HIGHESTA", /* name */
1621 	 FALSE,			/* partial_inplace */
1622 	 0,			/* src_mask */
1623 	 0xffff,		/* dst_mask */
1624 	 FALSE),		/* pcrel_offset */
1625 
1626   /* Like TPREL16, but for insns with a DS field.  */
1627   HOWTO (R_PPC64_TPREL16_DS,
1628 	 0,			/* rightshift */
1629 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1630 	 16,			/* bitsize */
1631 	 FALSE,			/* pc_relative */
1632 	 0,			/* bitpos */
1633 	 complain_overflow_signed, /* complain_on_overflow */
1634 	 ppc64_elf_unhandled_reloc, /* special_function */
1635 	 "R_PPC64_TPREL16_DS",	/* name */
1636 	 FALSE,			/* partial_inplace */
1637 	 0,			/* src_mask */
1638 	 0xfffc,		/* dst_mask */
1639 	 FALSE),		/* pcrel_offset */
1640 
1641   /* Like TPREL16_DS, but no overflow.  */
1642   HOWTO (R_PPC64_TPREL16_LO_DS,
1643 	 0,			/* rightshift */
1644 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1645 	 16,			/* bitsize */
1646 	 FALSE,			/* pc_relative */
1647 	 0,			/* bitpos */
1648 	 complain_overflow_dont, /* complain_on_overflow */
1649 	 ppc64_elf_unhandled_reloc, /* special_function */
1650 	 "R_PPC64_TPREL16_LO_DS", /* name */
1651 	 FALSE,			/* partial_inplace */
1652 	 0,			/* src_mask */
1653 	 0xfffc,		/* dst_mask */
1654 	 FALSE),		/* pcrel_offset */
1655 
1656   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1657      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
1658      to the first entry relative to the TOC base (r2).  */
1659   HOWTO (R_PPC64_GOT_TLSGD16,
1660 	 0,			/* rightshift */
1661 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1662 	 16,			/* bitsize */
1663 	 FALSE,			/* pc_relative */
1664 	 0,			/* bitpos */
1665 	 complain_overflow_signed, /* complain_on_overflow */
1666 	 ppc64_elf_unhandled_reloc, /* special_function */
1667 	 "R_PPC64_GOT_TLSGD16",	/* name */
1668 	 FALSE,			/* partial_inplace */
1669 	 0,			/* src_mask */
1670 	 0xffff,		/* dst_mask */
1671 	 FALSE),		/* pcrel_offset */
1672 
1673   /* Like GOT_TLSGD16, but no overflow.  */
1674   HOWTO (R_PPC64_GOT_TLSGD16_LO,
1675 	 0,			/* rightshift */
1676 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1677 	 16,			/* bitsize */
1678 	 FALSE,			/* pc_relative */
1679 	 0,			/* bitpos */
1680 	 complain_overflow_dont, /* complain_on_overflow */
1681 	 ppc64_elf_unhandled_reloc, /* special_function */
1682 	 "R_PPC64_GOT_TLSGD16_LO", /* name */
1683 	 FALSE,			/* partial_inplace */
1684 	 0,			/* src_mask */
1685 	 0xffff,		/* dst_mask */
1686 	 FALSE),		/* pcrel_offset */
1687 
1688   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
1689   HOWTO (R_PPC64_GOT_TLSGD16_HI,
1690 	 16,			/* rightshift */
1691 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1692 	 16,			/* bitsize */
1693 	 FALSE,			/* pc_relative */
1694 	 0,			/* bitpos */
1695 	 complain_overflow_dont, /* complain_on_overflow */
1696 	 ppc64_elf_unhandled_reloc, /* special_function */
1697 	 "R_PPC64_GOT_TLSGD16_HI", /* name */
1698 	 FALSE,			/* partial_inplace */
1699 	 0,			/* src_mask */
1700 	 0xffff,		/* dst_mask */
1701 	 FALSE),		/* pcrel_offset */
1702 
1703   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
1704   HOWTO (R_PPC64_GOT_TLSGD16_HA,
1705 	 16,			/* rightshift */
1706 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1707 	 16,			/* bitsize */
1708 	 FALSE,			/* pc_relative */
1709 	 0,			/* bitpos */
1710 	 complain_overflow_dont, /* complain_on_overflow */
1711 	 ppc64_elf_unhandled_reloc, /* special_function */
1712 	 "R_PPC64_GOT_TLSGD16_HA", /* name */
1713 	 FALSE,			/* partial_inplace */
1714 	 0,			/* src_mask */
1715 	 0xffff,		/* dst_mask */
1716 	 FALSE),		/* pcrel_offset */
1717 
1718   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1719      with values (sym+add)@dtpmod and zero, and computes the offset to the
1720      first entry relative to the TOC base (r2).  */
1721   HOWTO (R_PPC64_GOT_TLSLD16,
1722 	 0,			/* rightshift */
1723 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1724 	 16,			/* bitsize */
1725 	 FALSE,			/* pc_relative */
1726 	 0,			/* bitpos */
1727 	 complain_overflow_signed, /* complain_on_overflow */
1728 	 ppc64_elf_unhandled_reloc, /* special_function */
1729 	 "R_PPC64_GOT_TLSLD16",	/* name */
1730 	 FALSE,			/* partial_inplace */
1731 	 0,			/* src_mask */
1732 	 0xffff,		/* dst_mask */
1733 	 FALSE),		/* pcrel_offset */
1734 
1735   /* Like GOT_TLSLD16, but no overflow.  */
1736   HOWTO (R_PPC64_GOT_TLSLD16_LO,
1737 	 0,			/* rightshift */
1738 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1739 	 16,			/* bitsize */
1740 	 FALSE,			/* pc_relative */
1741 	 0,			/* bitpos */
1742 	 complain_overflow_dont, /* complain_on_overflow */
1743 	 ppc64_elf_unhandled_reloc, /* special_function */
1744 	 "R_PPC64_GOT_TLSLD16_LO", /* name */
1745 	 FALSE,			/* partial_inplace */
1746 	 0,			/* src_mask */
1747 	 0xffff,		/* dst_mask */
1748 	 FALSE),		/* pcrel_offset */
1749 
1750   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
1751   HOWTO (R_PPC64_GOT_TLSLD16_HI,
1752 	 16,			/* rightshift */
1753 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1754 	 16,			/* bitsize */
1755 	 FALSE,			/* pc_relative */
1756 	 0,			/* bitpos */
1757 	 complain_overflow_dont, /* complain_on_overflow */
1758 	 ppc64_elf_unhandled_reloc, /* special_function */
1759 	 "R_PPC64_GOT_TLSLD16_HI", /* name */
1760 	 FALSE,			/* partial_inplace */
1761 	 0,			/* src_mask */
1762 	 0xffff,		/* dst_mask */
1763 	 FALSE),		/* pcrel_offset */
1764 
1765   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
1766   HOWTO (R_PPC64_GOT_TLSLD16_HA,
1767 	 16,			/* rightshift */
1768 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1769 	 16,			/* bitsize */
1770 	 FALSE,			/* pc_relative */
1771 	 0,			/* bitpos */
1772 	 complain_overflow_dont, /* complain_on_overflow */
1773 	 ppc64_elf_unhandled_reloc, /* special_function */
1774 	 "R_PPC64_GOT_TLSLD16_HA", /* name */
1775 	 FALSE,			/* partial_inplace */
1776 	 0,			/* src_mask */
1777 	 0xffff,		/* dst_mask */
1778 	 FALSE),		/* pcrel_offset */
1779 
1780   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
1781      the offset to the entry relative to the TOC base (r2).  */
1782   HOWTO (R_PPC64_GOT_DTPREL16_DS,
1783 	 0,			/* rightshift */
1784 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1785 	 16,			/* bitsize */
1786 	 FALSE,			/* pc_relative */
1787 	 0,			/* bitpos */
1788 	 complain_overflow_signed, /* complain_on_overflow */
1789 	 ppc64_elf_unhandled_reloc, /* special_function */
1790 	 "R_PPC64_GOT_DTPREL16_DS", /* name */
1791 	 FALSE,			/* partial_inplace */
1792 	 0,			/* src_mask */
1793 	 0xfffc,		/* dst_mask */
1794 	 FALSE),		/* pcrel_offset */
1795 
1796   /* Like GOT_DTPREL16_DS, but no overflow.  */
1797   HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
1798 	 0,			/* rightshift */
1799 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1800 	 16,			/* bitsize */
1801 	 FALSE,			/* pc_relative */
1802 	 0,			/* bitpos */
1803 	 complain_overflow_dont, /* complain_on_overflow */
1804 	 ppc64_elf_unhandled_reloc, /* special_function */
1805 	 "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
1806 	 FALSE,			/* partial_inplace */
1807 	 0,			/* src_mask */
1808 	 0xfffc,		/* dst_mask */
1809 	 FALSE),		/* pcrel_offset */
1810 
1811   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
1812   HOWTO (R_PPC64_GOT_DTPREL16_HI,
1813 	 16,			/* rightshift */
1814 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1815 	 16,			/* bitsize */
1816 	 FALSE,			/* pc_relative */
1817 	 0,			/* bitpos */
1818 	 complain_overflow_dont, /* complain_on_overflow */
1819 	 ppc64_elf_unhandled_reloc, /* special_function */
1820 	 "R_PPC64_GOT_DTPREL16_HI", /* name */
1821 	 FALSE,			/* partial_inplace */
1822 	 0,			/* src_mask */
1823 	 0xffff,		/* dst_mask */
1824 	 FALSE),		/* pcrel_offset */
1825 
1826   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
1827   HOWTO (R_PPC64_GOT_DTPREL16_HA,
1828 	 16,			/* rightshift */
1829 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1830 	 16,			/* bitsize */
1831 	 FALSE,			/* pc_relative */
1832 	 0,			/* bitpos */
1833 	 complain_overflow_dont, /* complain_on_overflow */
1834 	 ppc64_elf_unhandled_reloc, /* special_function */
1835 	 "R_PPC64_GOT_DTPREL16_HA", /* name */
1836 	 FALSE,			/* partial_inplace */
1837 	 0,			/* src_mask */
1838 	 0xffff,		/* dst_mask */
1839 	 FALSE),		/* pcrel_offset */
1840 
1841   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
1842      offset to the entry relative to the TOC base (r2).  */
1843   HOWTO (R_PPC64_GOT_TPREL16_DS,
1844 	 0,			/* rightshift */
1845 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1846 	 16,			/* bitsize */
1847 	 FALSE,			/* pc_relative */
1848 	 0,			/* bitpos */
1849 	 complain_overflow_signed, /* complain_on_overflow */
1850 	 ppc64_elf_unhandled_reloc, /* special_function */
1851 	 "R_PPC64_GOT_TPREL16_DS", /* name */
1852 	 FALSE,			/* partial_inplace */
1853 	 0,			/* src_mask */
1854 	 0xfffc,		/* dst_mask */
1855 	 FALSE),		/* pcrel_offset */
1856 
1857   /* Like GOT_TPREL16_DS, but no overflow.  */
1858   HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
1859 	 0,			/* rightshift */
1860 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1861 	 16,			/* bitsize */
1862 	 FALSE,			/* pc_relative */
1863 	 0,			/* bitpos */
1864 	 complain_overflow_dont, /* complain_on_overflow */
1865 	 ppc64_elf_unhandled_reloc, /* special_function */
1866 	 "R_PPC64_GOT_TPREL16_LO_DS", /* name */
1867 	 FALSE,			/* partial_inplace */
1868 	 0,			/* src_mask */
1869 	 0xfffc,		/* dst_mask */
1870 	 FALSE),		/* pcrel_offset */
1871 
1872   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
1873   HOWTO (R_PPC64_GOT_TPREL16_HI,
1874 	 16,			/* rightshift */
1875 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1876 	 16,			/* bitsize */
1877 	 FALSE,			/* pc_relative */
1878 	 0,			/* bitpos */
1879 	 complain_overflow_dont, /* complain_on_overflow */
1880 	 ppc64_elf_unhandled_reloc, /* special_function */
1881 	 "R_PPC64_GOT_TPREL16_HI", /* name */
1882 	 FALSE,			/* partial_inplace */
1883 	 0,			/* src_mask */
1884 	 0xffff,		/* dst_mask */
1885 	 FALSE),		/* pcrel_offset */
1886 
1887   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
1888   HOWTO (R_PPC64_GOT_TPREL16_HA,
1889 	 16,			/* rightshift */
1890 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1891 	 16,			/* bitsize */
1892 	 FALSE,			/* pc_relative */
1893 	 0,			/* bitpos */
1894 	 complain_overflow_dont, /* complain_on_overflow */
1895 	 ppc64_elf_unhandled_reloc, /* special_function */
1896 	 "R_PPC64_GOT_TPREL16_HA", /* name */
1897 	 FALSE,			/* partial_inplace */
1898 	 0,			/* src_mask */
1899 	 0xffff,		/* dst_mask */
1900 	 FALSE),		/* pcrel_offset */
1901 
1902   HOWTO (R_PPC64_JMP_IREL,	/* type */
1903 	 0,			/* rightshift */
1904 	 0,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
1905 	 0,			/* bitsize */
1906 	 FALSE,			/* pc_relative */
1907 	 0,			/* bitpos */
1908 	 complain_overflow_dont, /* complain_on_overflow */
1909 	 ppc64_elf_unhandled_reloc, /* special_function */
1910 	 "R_PPC64_JMP_IREL",	/* name */
1911 	 FALSE,			/* partial_inplace */
1912 	 0,			/* src_mask */
1913 	 0,			/* dst_mask */
1914 	 FALSE),		/* pcrel_offset */
1915 
1916   HOWTO (R_PPC64_IRELATIVE,	/* type */
1917 	 0,			/* rightshift */
1918 	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
1919 	 64,			/* bitsize */
1920 	 FALSE,			/* pc_relative */
1921 	 0,			/* bitpos */
1922 	 complain_overflow_dont, /* complain_on_overflow */
1923 	 bfd_elf_generic_reloc,	/* special_function */
1924 	 "R_PPC64_IRELATIVE",	/* name */
1925 	 FALSE,			/* partial_inplace */
1926 	 0,			/* src_mask */
1927 	 ONES (64),		/* dst_mask */
1928 	 FALSE),		/* pcrel_offset */
1929 
1930   /* A 16 bit relative relocation.  */
1931   HOWTO (R_PPC64_REL16,		/* type */
1932 	 0,			/* rightshift */
1933 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1934 	 16,			/* bitsize */
1935 	 TRUE,			/* pc_relative */
1936 	 0,			/* bitpos */
1937 	 complain_overflow_bitfield, /* complain_on_overflow */
1938 	 bfd_elf_generic_reloc,	/* special_function */
1939 	 "R_PPC64_REL16",	/* name */
1940 	 FALSE,			/* partial_inplace */
1941 	 0,			/* src_mask */
1942 	 0xffff,		/* dst_mask */
1943 	 TRUE),			/* pcrel_offset */
1944 
1945   /* A 16 bit relative relocation without overflow.  */
1946   HOWTO (R_PPC64_REL16_LO,	/* type */
1947 	 0,			/* rightshift */
1948 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1949 	 16,			/* bitsize */
1950 	 TRUE,			/* pc_relative */
1951 	 0,			/* bitpos */
1952 	 complain_overflow_dont,/* complain_on_overflow */
1953 	 bfd_elf_generic_reloc,	/* special_function */
1954 	 "R_PPC64_REL16_LO",	/* name */
1955 	 FALSE,			/* partial_inplace */
1956 	 0,			/* src_mask */
1957 	 0xffff,		/* dst_mask */
1958 	 TRUE),			/* pcrel_offset */
1959 
1960   /* The high order 16 bits of a relative address.  */
1961   HOWTO (R_PPC64_REL16_HI,	/* type */
1962 	 16,			/* rightshift */
1963 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1964 	 16,			/* bitsize */
1965 	 TRUE,			/* pc_relative */
1966 	 0,			/* bitpos */
1967 	 complain_overflow_dont, /* complain_on_overflow */
1968 	 bfd_elf_generic_reloc,	/* special_function */
1969 	 "R_PPC64_REL16_HI",	/* name */
1970 	 FALSE,			/* partial_inplace */
1971 	 0,			/* src_mask */
1972 	 0xffff,		/* dst_mask */
1973 	 TRUE),			/* pcrel_offset */
1974 
1975   /* The high order 16 bits of a relative address, plus 1 if the contents of
1976      the low 16 bits, treated as a signed number, is negative.  */
1977   HOWTO (R_PPC64_REL16_HA,	/* type */
1978 	 16,			/* rightshift */
1979 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1980 	 16,			/* bitsize */
1981 	 TRUE,			/* pc_relative */
1982 	 0,			/* bitpos */
1983 	 complain_overflow_dont, /* complain_on_overflow */
1984 	 ppc64_elf_ha_reloc,	/* special_function */
1985 	 "R_PPC64_REL16_HA",	/* name */
1986 	 FALSE,			/* partial_inplace */
1987 	 0,			/* src_mask */
1988 	 0xffff,		/* dst_mask */
1989 	 TRUE),			/* pcrel_offset */
1990 
1991   /* GNU extension to record C++ vtable hierarchy.  */
1992   HOWTO (R_PPC64_GNU_VTINHERIT,	/* type */
1993 	 0,			/* rightshift */
1994 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
1995 	 0,			/* bitsize */
1996 	 FALSE,			/* pc_relative */
1997 	 0,			/* bitpos */
1998 	 complain_overflow_dont, /* complain_on_overflow */
1999 	 NULL,			/* special_function */
2000 	 "R_PPC64_GNU_VTINHERIT", /* name */
2001 	 FALSE,			/* partial_inplace */
2002 	 0,			/* src_mask */
2003 	 0,			/* dst_mask */
2004 	 FALSE),		/* pcrel_offset */
2005 
2006   /* GNU extension to record C++ vtable member usage.  */
2007   HOWTO (R_PPC64_GNU_VTENTRY,	/* type */
2008 	 0,			/* rightshift */
2009 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
2010 	 0,			/* bitsize */
2011 	 FALSE,			/* pc_relative */
2012 	 0,			/* bitpos */
2013 	 complain_overflow_dont, /* complain_on_overflow */
2014 	 NULL,			/* special_function */
2015 	 "R_PPC64_GNU_VTENTRY",	/* name */
2016 	 FALSE,			/* partial_inplace */
2017 	 0,			/* src_mask */
2018 	 0,			/* dst_mask */
2019 	 FALSE),		/* pcrel_offset */
2020 };
2021 
2022 
2023 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
2024    be done.  */
2025 
2026 static void
2027 ppc_howto_init (void)
2028 {
2029   unsigned int i, type;
2030 
2031   for (i = 0;
2032        i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
2033        i++)
2034     {
2035       type = ppc64_elf_howto_raw[i].type;
2036       BFD_ASSERT (type < (sizeof (ppc64_elf_howto_table)
2037 			  / sizeof (ppc64_elf_howto_table[0])));
2038       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
2039     }
2040 }
2041 
2042 static reloc_howto_type *
2043 ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2044 			     bfd_reloc_code_real_type code)
2045 {
2046   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
2047 
2048   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2049     /* Initialize howto table if needed.  */
2050     ppc_howto_init ();
2051 
2052   switch (code)
2053     {
2054     default:
2055       return NULL;
2056 
2057     case BFD_RELOC_NONE:			r = R_PPC64_NONE;
2058       break;
2059     case BFD_RELOC_32:				r = R_PPC64_ADDR32;
2060       break;
2061     case BFD_RELOC_PPC_BA26:			r = R_PPC64_ADDR24;
2062       break;
2063     case BFD_RELOC_16:				r = R_PPC64_ADDR16;
2064       break;
2065     case BFD_RELOC_LO16:			r = R_PPC64_ADDR16_LO;
2066       break;
2067     case BFD_RELOC_HI16:			r = R_PPC64_ADDR16_HI;
2068       break;
2069     case BFD_RELOC_HI16_S:			r = R_PPC64_ADDR16_HA;
2070       break;
2071     case BFD_RELOC_PPC_BA16:			r = R_PPC64_ADDR14;
2072       break;
2073     case BFD_RELOC_PPC_BA16_BRTAKEN:		r = R_PPC64_ADDR14_BRTAKEN;
2074       break;
2075     case BFD_RELOC_PPC_BA16_BRNTAKEN:		r = R_PPC64_ADDR14_BRNTAKEN;
2076       break;
2077     case BFD_RELOC_PPC_B26:			r = R_PPC64_REL24;
2078       break;
2079     case BFD_RELOC_PPC_B16:			r = R_PPC64_REL14;
2080       break;
2081     case BFD_RELOC_PPC_B16_BRTAKEN:		r = R_PPC64_REL14_BRTAKEN;
2082       break;
2083     case BFD_RELOC_PPC_B16_BRNTAKEN:		r = R_PPC64_REL14_BRNTAKEN;
2084       break;
2085     case BFD_RELOC_16_GOTOFF:			r = R_PPC64_GOT16;
2086       break;
2087     case BFD_RELOC_LO16_GOTOFF:			r = R_PPC64_GOT16_LO;
2088       break;
2089     case BFD_RELOC_HI16_GOTOFF:			r = R_PPC64_GOT16_HI;
2090       break;
2091     case BFD_RELOC_HI16_S_GOTOFF:		r = R_PPC64_GOT16_HA;
2092       break;
2093     case BFD_RELOC_PPC_COPY:			r = R_PPC64_COPY;
2094       break;
2095     case BFD_RELOC_PPC_GLOB_DAT:		r = R_PPC64_GLOB_DAT;
2096       break;
2097     case BFD_RELOC_32_PCREL:			r = R_PPC64_REL32;
2098       break;
2099     case BFD_RELOC_32_PLTOFF:			r = R_PPC64_PLT32;
2100       break;
2101     case BFD_RELOC_32_PLT_PCREL:		r = R_PPC64_PLTREL32;
2102       break;
2103     case BFD_RELOC_LO16_PLTOFF:			r = R_PPC64_PLT16_LO;
2104       break;
2105     case BFD_RELOC_HI16_PLTOFF:			r = R_PPC64_PLT16_HI;
2106       break;
2107     case BFD_RELOC_HI16_S_PLTOFF:		r = R_PPC64_PLT16_HA;
2108       break;
2109     case BFD_RELOC_16_BASEREL:			r = R_PPC64_SECTOFF;
2110       break;
2111     case BFD_RELOC_LO16_BASEREL:		r = R_PPC64_SECTOFF_LO;
2112       break;
2113     case BFD_RELOC_HI16_BASEREL:		r = R_PPC64_SECTOFF_HI;
2114       break;
2115     case BFD_RELOC_HI16_S_BASEREL:		r = R_PPC64_SECTOFF_HA;
2116       break;
2117     case BFD_RELOC_CTOR:			r = R_PPC64_ADDR64;
2118       break;
2119     case BFD_RELOC_64:				r = R_PPC64_ADDR64;
2120       break;
2121     case BFD_RELOC_PPC64_HIGHER:		r = R_PPC64_ADDR16_HIGHER;
2122       break;
2123     case BFD_RELOC_PPC64_HIGHER_S:		r = R_PPC64_ADDR16_HIGHERA;
2124       break;
2125     case BFD_RELOC_PPC64_HIGHEST:		r = R_PPC64_ADDR16_HIGHEST;
2126       break;
2127     case BFD_RELOC_PPC64_HIGHEST_S:		r = R_PPC64_ADDR16_HIGHESTA;
2128       break;
2129     case BFD_RELOC_64_PCREL:			r = R_PPC64_REL64;
2130       break;
2131     case BFD_RELOC_64_PLTOFF:			r = R_PPC64_PLT64;
2132       break;
2133     case BFD_RELOC_64_PLT_PCREL:		r = R_PPC64_PLTREL64;
2134       break;
2135     case BFD_RELOC_PPC_TOC16:			r = R_PPC64_TOC16;
2136       break;
2137     case BFD_RELOC_PPC64_TOC16_LO:		r = R_PPC64_TOC16_LO;
2138       break;
2139     case BFD_RELOC_PPC64_TOC16_HI:		r = R_PPC64_TOC16_HI;
2140       break;
2141     case BFD_RELOC_PPC64_TOC16_HA:		r = R_PPC64_TOC16_HA;
2142       break;
2143     case BFD_RELOC_PPC64_TOC:			r = R_PPC64_TOC;
2144       break;
2145     case BFD_RELOC_PPC64_PLTGOT16:		r = R_PPC64_PLTGOT16;
2146       break;
2147     case BFD_RELOC_PPC64_PLTGOT16_LO:		r = R_PPC64_PLTGOT16_LO;
2148       break;
2149     case BFD_RELOC_PPC64_PLTGOT16_HI:		r = R_PPC64_PLTGOT16_HI;
2150       break;
2151     case BFD_RELOC_PPC64_PLTGOT16_HA:		r = R_PPC64_PLTGOT16_HA;
2152       break;
2153     case BFD_RELOC_PPC64_ADDR16_DS:		r = R_PPC64_ADDR16_DS;
2154       break;
2155     case BFD_RELOC_PPC64_ADDR16_LO_DS:		r = R_PPC64_ADDR16_LO_DS;
2156       break;
2157     case BFD_RELOC_PPC64_GOT16_DS:		r = R_PPC64_GOT16_DS;
2158       break;
2159     case BFD_RELOC_PPC64_GOT16_LO_DS:		r = R_PPC64_GOT16_LO_DS;
2160       break;
2161     case BFD_RELOC_PPC64_PLT16_LO_DS:		r = R_PPC64_PLT16_LO_DS;
2162       break;
2163     case BFD_RELOC_PPC64_SECTOFF_DS:		r = R_PPC64_SECTOFF_DS;
2164       break;
2165     case BFD_RELOC_PPC64_SECTOFF_LO_DS:		r = R_PPC64_SECTOFF_LO_DS;
2166       break;
2167     case BFD_RELOC_PPC64_TOC16_DS:		r = R_PPC64_TOC16_DS;
2168       break;
2169     case BFD_RELOC_PPC64_TOC16_LO_DS:		r = R_PPC64_TOC16_LO_DS;
2170       break;
2171     case BFD_RELOC_PPC64_PLTGOT16_DS:		r = R_PPC64_PLTGOT16_DS;
2172       break;
2173     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:	r = R_PPC64_PLTGOT16_LO_DS;
2174       break;
2175     case BFD_RELOC_PPC_TLS:			r = R_PPC64_TLS;
2176       break;
2177     case BFD_RELOC_PPC_TLSGD:			r = R_PPC64_TLSGD;
2178       break;
2179     case BFD_RELOC_PPC_TLSLD:			r = R_PPC64_TLSLD;
2180       break;
2181     case BFD_RELOC_PPC_DTPMOD:			r = R_PPC64_DTPMOD64;
2182       break;
2183     case BFD_RELOC_PPC_TPREL16:			r = R_PPC64_TPREL16;
2184       break;
2185     case BFD_RELOC_PPC_TPREL16_LO:		r = R_PPC64_TPREL16_LO;
2186       break;
2187     case BFD_RELOC_PPC_TPREL16_HI:		r = R_PPC64_TPREL16_HI;
2188       break;
2189     case BFD_RELOC_PPC_TPREL16_HA:		r = R_PPC64_TPREL16_HA;
2190       break;
2191     case BFD_RELOC_PPC_TPREL:			r = R_PPC64_TPREL64;
2192       break;
2193     case BFD_RELOC_PPC_DTPREL16:		r = R_PPC64_DTPREL16;
2194       break;
2195     case BFD_RELOC_PPC_DTPREL16_LO:		r = R_PPC64_DTPREL16_LO;
2196       break;
2197     case BFD_RELOC_PPC_DTPREL16_HI:		r = R_PPC64_DTPREL16_HI;
2198       break;
2199     case BFD_RELOC_PPC_DTPREL16_HA:		r = R_PPC64_DTPREL16_HA;
2200       break;
2201     case BFD_RELOC_PPC_DTPREL:			r = R_PPC64_DTPREL64;
2202       break;
2203     case BFD_RELOC_PPC_GOT_TLSGD16:		r = R_PPC64_GOT_TLSGD16;
2204       break;
2205     case BFD_RELOC_PPC_GOT_TLSGD16_LO:		r = R_PPC64_GOT_TLSGD16_LO;
2206       break;
2207     case BFD_RELOC_PPC_GOT_TLSGD16_HI:		r = R_PPC64_GOT_TLSGD16_HI;
2208       break;
2209     case BFD_RELOC_PPC_GOT_TLSGD16_HA:		r = R_PPC64_GOT_TLSGD16_HA;
2210       break;
2211     case BFD_RELOC_PPC_GOT_TLSLD16:		r = R_PPC64_GOT_TLSLD16;
2212       break;
2213     case BFD_RELOC_PPC_GOT_TLSLD16_LO:		r = R_PPC64_GOT_TLSLD16_LO;
2214       break;
2215     case BFD_RELOC_PPC_GOT_TLSLD16_HI:		r = R_PPC64_GOT_TLSLD16_HI;
2216       break;
2217     case BFD_RELOC_PPC_GOT_TLSLD16_HA:		r = R_PPC64_GOT_TLSLD16_HA;
2218       break;
2219     case BFD_RELOC_PPC_GOT_TPREL16:		r = R_PPC64_GOT_TPREL16_DS;
2220       break;
2221     case BFD_RELOC_PPC_GOT_TPREL16_LO:		r = R_PPC64_GOT_TPREL16_LO_DS;
2222       break;
2223     case BFD_RELOC_PPC_GOT_TPREL16_HI:		r = R_PPC64_GOT_TPREL16_HI;
2224       break;
2225     case BFD_RELOC_PPC_GOT_TPREL16_HA:		r = R_PPC64_GOT_TPREL16_HA;
2226       break;
2227     case BFD_RELOC_PPC_GOT_DTPREL16:		r = R_PPC64_GOT_DTPREL16_DS;
2228       break;
2229     case BFD_RELOC_PPC_GOT_DTPREL16_LO:		r = R_PPC64_GOT_DTPREL16_LO_DS;
2230       break;
2231     case BFD_RELOC_PPC_GOT_DTPREL16_HI:		r = R_PPC64_GOT_DTPREL16_HI;
2232       break;
2233     case BFD_RELOC_PPC_GOT_DTPREL16_HA:		r = R_PPC64_GOT_DTPREL16_HA;
2234       break;
2235     case BFD_RELOC_PPC64_TPREL16_DS:		r = R_PPC64_TPREL16_DS;
2236       break;
2237     case BFD_RELOC_PPC64_TPREL16_LO_DS:		r = R_PPC64_TPREL16_LO_DS;
2238       break;
2239     case BFD_RELOC_PPC64_TPREL16_HIGHER:	r = R_PPC64_TPREL16_HIGHER;
2240       break;
2241     case BFD_RELOC_PPC64_TPREL16_HIGHERA:	r = R_PPC64_TPREL16_HIGHERA;
2242       break;
2243     case BFD_RELOC_PPC64_TPREL16_HIGHEST:	r = R_PPC64_TPREL16_HIGHEST;
2244       break;
2245     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:	r = R_PPC64_TPREL16_HIGHESTA;
2246       break;
2247     case BFD_RELOC_PPC64_DTPREL16_DS:		r = R_PPC64_DTPREL16_DS;
2248       break;
2249     case BFD_RELOC_PPC64_DTPREL16_LO_DS:	r = R_PPC64_DTPREL16_LO_DS;
2250       break;
2251     case BFD_RELOC_PPC64_DTPREL16_HIGHER:	r = R_PPC64_DTPREL16_HIGHER;
2252       break;
2253     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:	r = R_PPC64_DTPREL16_HIGHERA;
2254       break;
2255     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:	r = R_PPC64_DTPREL16_HIGHEST;
2256       break;
2257     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:	r = R_PPC64_DTPREL16_HIGHESTA;
2258       break;
2259     case BFD_RELOC_16_PCREL:			r = R_PPC64_REL16;
2260       break;
2261     case BFD_RELOC_LO16_PCREL:			r = R_PPC64_REL16_LO;
2262       break;
2263     case BFD_RELOC_HI16_PCREL:			r = R_PPC64_REL16_HI;
2264       break;
2265     case BFD_RELOC_HI16_S_PCREL:		r = R_PPC64_REL16_HA;
2266       break;
2267     case BFD_RELOC_VTABLE_INHERIT:		r = R_PPC64_GNU_VTINHERIT;
2268       break;
2269     case BFD_RELOC_VTABLE_ENTRY:		r = R_PPC64_GNU_VTENTRY;
2270       break;
2271     }
2272 
2273   return ppc64_elf_howto_table[r];
2274 };
2275 
2276 static reloc_howto_type *
2277 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2278 			     const char *r_name)
2279 {
2280   unsigned int i;
2281 
2282   for (i = 0;
2283        i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
2284        i++)
2285     if (ppc64_elf_howto_raw[i].name != NULL
2286 	&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
2287       return &ppc64_elf_howto_raw[i];
2288 
2289   return NULL;
2290 }
2291 
2292 /* Set the howto pointer for a PowerPC ELF reloc.  */
2293 
2294 static void
2295 ppc64_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
2296 			 Elf_Internal_Rela *dst)
2297 {
2298   unsigned int type;
2299 
2300   /* Initialize howto table if needed.  */
2301   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2302     ppc_howto_init ();
2303 
2304   type = ELF64_R_TYPE (dst->r_info);
2305   if (type >= (sizeof (ppc64_elf_howto_table)
2306 	       / sizeof (ppc64_elf_howto_table[0])))
2307     {
2308       (*_bfd_error_handler) (_("%B: invalid relocation type %d"),
2309 			     abfd, (int) type);
2310       type = R_PPC64_NONE;
2311     }
2312   cache_ptr->howto = ppc64_elf_howto_table[type];
2313 }
2314 
2315 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
2316 
2317 static bfd_reloc_status_type
2318 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2319 		    void *data, asection *input_section,
2320 		    bfd *output_bfd, char **error_message)
2321 {
2322   /* If this is a relocatable link (output_bfd test tells us), just
2323      call the generic function.  Any adjustment will be done at final
2324      link time.  */
2325   if (output_bfd != NULL)
2326     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2327 				  input_section, output_bfd, error_message);
2328 
2329   /* Adjust the addend for sign extension of the low 16 bits.
2330      We won't actually be using the low 16 bits, so trashing them
2331      doesn't matter.  */
2332   reloc_entry->addend += 0x8000;
2333   return bfd_reloc_continue;
2334 }
2335 
2336 static bfd_reloc_status_type
2337 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2338 			void *data, asection *input_section,
2339 			bfd *output_bfd, char **error_message)
2340 {
2341   if (output_bfd != NULL)
2342     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2343 				  input_section, output_bfd, error_message);
2344 
2345   if (strcmp (symbol->section->name, ".opd") == 0
2346       && (symbol->section->owner->flags & DYNAMIC) == 0)
2347     {
2348       bfd_vma dest = opd_entry_value (symbol->section,
2349 				      symbol->value + reloc_entry->addend,
2350 				      NULL, NULL, FALSE);
2351       if (dest != (bfd_vma) -1)
2352 	reloc_entry->addend = dest - (symbol->value
2353 				      + symbol->section->output_section->vma
2354 				      + symbol->section->output_offset);
2355     }
2356   return bfd_reloc_continue;
2357 }
2358 
2359 static bfd_reloc_status_type
2360 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2361 			 void *data, asection *input_section,
2362 			 bfd *output_bfd, char **error_message)
2363 {
2364   long insn;
2365   enum elf_ppc64_reloc_type r_type;
2366   bfd_size_type octets;
2367   /* Assume 'at' branch hints.  */
2368   bfd_boolean is_isa_v2 = TRUE;
2369 
2370   /* If this is a relocatable link (output_bfd test tells us), just
2371      call the generic function.  Any adjustment will be done at final
2372      link time.  */
2373   if (output_bfd != NULL)
2374     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2375 				  input_section, output_bfd, error_message);
2376 
2377   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2378   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2379   insn &= ~(0x01 << 21);
2380   r_type = reloc_entry->howto->type;
2381   if (r_type == R_PPC64_ADDR14_BRTAKEN
2382       || r_type == R_PPC64_REL14_BRTAKEN)
2383     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
2384 
2385   if (is_isa_v2)
2386     {
2387       /* Set 'a' bit.  This is 0b00010 in BO field for branch
2388 	 on CR(BI) insns (BO == 001at or 011at), and 0b01000
2389 	 for branch on CTR insns (BO == 1a00t or 1a01t).  */
2390       if ((insn & (0x14 << 21)) == (0x04 << 21))
2391 	insn |= 0x02 << 21;
2392       else if ((insn & (0x14 << 21)) == (0x10 << 21))
2393 	insn |= 0x08 << 21;
2394       else
2395 	goto out;
2396     }
2397   else
2398     {
2399       bfd_vma target = 0;
2400       bfd_vma from;
2401 
2402       if (!bfd_is_com_section (symbol->section))
2403 	target = symbol->value;
2404       target += symbol->section->output_section->vma;
2405       target += symbol->section->output_offset;
2406       target += reloc_entry->addend;
2407 
2408       from = (reloc_entry->address
2409 	      + input_section->output_offset
2410 	      + input_section->output_section->vma);
2411 
2412       /* Invert 'y' bit if not the default.  */
2413       if ((bfd_signed_vma) (target - from) < 0)
2414 	insn ^= 0x01 << 21;
2415     }
2416   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2417  out:
2418   return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
2419 				 input_section, output_bfd, error_message);
2420 }
2421 
2422 static bfd_reloc_status_type
2423 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2424 			 void *data, asection *input_section,
2425 			 bfd *output_bfd, char **error_message)
2426 {
2427   /* If this is a relocatable link (output_bfd test tells us), just
2428      call the generic function.  Any adjustment will be done at final
2429      link time.  */
2430   if (output_bfd != NULL)
2431     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2432 				  input_section, output_bfd, error_message);
2433 
2434   /* Subtract the symbol section base address.  */
2435   reloc_entry->addend -= symbol->section->output_section->vma;
2436   return bfd_reloc_continue;
2437 }
2438 
2439 static bfd_reloc_status_type
2440 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2441 			    void *data, asection *input_section,
2442 			    bfd *output_bfd, char **error_message)
2443 {
2444   /* If this is a relocatable link (output_bfd test tells us), just
2445      call the generic function.  Any adjustment will be done at final
2446      link time.  */
2447   if (output_bfd != NULL)
2448     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2449 				  input_section, output_bfd, error_message);
2450 
2451   /* Subtract the symbol section base address.  */
2452   reloc_entry->addend -= symbol->section->output_section->vma;
2453 
2454   /* Adjust the addend for sign extension of the low 16 bits.  */
2455   reloc_entry->addend += 0x8000;
2456   return bfd_reloc_continue;
2457 }
2458 
2459 static bfd_reloc_status_type
2460 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2461 		     void *data, asection *input_section,
2462 		     bfd *output_bfd, char **error_message)
2463 {
2464   bfd_vma TOCstart;
2465 
2466   /* If this is a relocatable link (output_bfd test tells us), just
2467      call the generic function.  Any adjustment will be done at final
2468      link time.  */
2469   if (output_bfd != NULL)
2470     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2471 				  input_section, output_bfd, error_message);
2472 
2473   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2474   if (TOCstart == 0)
2475     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2476 
2477   /* Subtract the TOC base address.  */
2478   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2479   return bfd_reloc_continue;
2480 }
2481 
2482 static bfd_reloc_status_type
2483 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2484 			void *data, asection *input_section,
2485 			bfd *output_bfd, char **error_message)
2486 {
2487   bfd_vma TOCstart;
2488 
2489   /* If this is a relocatable link (output_bfd test tells us), just
2490      call the generic function.  Any adjustment will be done at final
2491      link time.  */
2492   if (output_bfd != NULL)
2493     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2494 				  input_section, output_bfd, error_message);
2495 
2496   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2497   if (TOCstart == 0)
2498     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2499 
2500   /* Subtract the TOC base address.  */
2501   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2502 
2503   /* Adjust the addend for sign extension of the low 16 bits.  */
2504   reloc_entry->addend += 0x8000;
2505   return bfd_reloc_continue;
2506 }
2507 
2508 static bfd_reloc_status_type
2509 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2510 		       void *data, asection *input_section,
2511 		       bfd *output_bfd, char **error_message)
2512 {
2513   bfd_vma TOCstart;
2514   bfd_size_type octets;
2515 
2516   /* If this is a relocatable link (output_bfd test tells us), just
2517      call the generic function.  Any adjustment will be done at final
2518      link time.  */
2519   if (output_bfd != NULL)
2520     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2521 				  input_section, output_bfd, error_message);
2522 
2523   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2524   if (TOCstart == 0)
2525     TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2526 
2527   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2528   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
2529   return bfd_reloc_ok;
2530 }
2531 
2532 static bfd_reloc_status_type
2533 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2534 			   void *data, asection *input_section,
2535 			   bfd *output_bfd, char **error_message)
2536 {
2537   /* If this is a relocatable link (output_bfd test tells us), just
2538      call the generic function.  Any adjustment will be done at final
2539      link time.  */
2540   if (output_bfd != NULL)
2541     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2542 				  input_section, output_bfd, error_message);
2543 
2544   if (error_message != NULL)
2545     {
2546       static char buf[60];
2547       sprintf (buf, "generic linker can't handle %s",
2548 	       reloc_entry->howto->name);
2549       *error_message = buf;
2550     }
2551   return bfd_reloc_dangerous;
2552 }
2553 
2554 /* Track GOT entries needed for a given symbol.  We might need more
2555    than one got entry per symbol.  */
2556 struct got_entry
2557 {
2558   struct got_entry *next;
2559 
2560   /* The symbol addend that we'll be placing in the GOT.  */
2561   bfd_vma addend;
2562 
2563   /* Unlike other ELF targets, we use separate GOT entries for the same
2564      symbol referenced from different input files.  This is to support
2565      automatic multiple TOC/GOT sections, where the TOC base can vary
2566      from one input file to another.  After partitioning into TOC groups
2567      we merge entries within the group.
2568 
2569      Point to the BFD owning this GOT entry.  */
2570   bfd *owner;
2571 
2572   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
2573      TLS_TPREL or TLS_DTPREL for tls entries.  */
2574   unsigned char tls_type;
2575 
2576   /* Non-zero if got.ent points to real entry.  */
2577   unsigned char is_indirect;
2578 
2579   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
2580   union
2581     {
2582       bfd_signed_vma refcount;
2583       bfd_vma offset;
2584       struct got_entry *ent;
2585     } got;
2586 };
2587 
2588 /* The same for PLT.  */
2589 struct plt_entry
2590 {
2591   struct plt_entry *next;
2592 
2593   bfd_vma addend;
2594 
2595   union
2596     {
2597       bfd_signed_vma refcount;
2598       bfd_vma offset;
2599     } plt;
2600 };
2601 
2602 struct ppc64_elf_obj_tdata
2603 {
2604   struct elf_obj_tdata elf;
2605 
2606   /* Shortcuts to dynamic linker sections.  */
2607   asection *got;
2608   asection *relgot;
2609 
2610   /* Used during garbage collection.  We attach global symbols defined
2611      on removed .opd entries to this section so that the sym is removed.  */
2612   asection *deleted_section;
2613 
2614   /* TLS local dynamic got entry handling.  Support for multiple GOT
2615      sections means we potentially need one of these for each input bfd.  */
2616   struct got_entry tlsld_got;
2617 
2618   /* A copy of relocs before they are modified for --emit-relocs.  */
2619   Elf_Internal_Rela *opd_relocs;
2620 
2621   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
2622      the reloc to be in the range -32768 to 32767.  */
2623   unsigned int has_small_toc_reloc : 1;
2624 
2625   /* Set if toc/got ha relocs detected not using r2, or lo reloc
2626      instruction not one we handle.  */
2627   unsigned int unexpected_toc_insn : 1;
2628 };
2629 
2630 #define ppc64_elf_tdata(bfd) \
2631   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
2632 
2633 #define ppc64_tlsld_got(bfd) \
2634   (&ppc64_elf_tdata (bfd)->tlsld_got)
2635 
2636 #define is_ppc64_elf(bfd) \
2637   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
2638    && elf_object_id (bfd) == PPC64_ELF_DATA)
2639 
2640 /* Override the generic function because we store some extras.  */
2641 
2642 static bfd_boolean
2643 ppc64_elf_mkobject (bfd *abfd)
2644 {
2645   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
2646 				  PPC64_ELF_DATA);
2647 }
2648 
2649 /* Fix bad default arch selected for a 64 bit input bfd when the
2650    default is 32 bit.  */
2651 
2652 static bfd_boolean
2653 ppc64_elf_object_p (bfd *abfd)
2654 {
2655   if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32)
2656     {
2657       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
2658 
2659       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
2660 	{
2661 	  /* Relies on arch after 32 bit default being 64 bit default.  */
2662 	  abfd->arch_info = abfd->arch_info->next;
2663 	  BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
2664 	}
2665     }
2666   return TRUE;
2667 }
2668 
2669 /* Support for core dump NOTE sections.  */
2670 
2671 static bfd_boolean
2672 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
2673 {
2674   size_t offset, size;
2675 
2676   if (note->descsz != 504)
2677     return FALSE;
2678 
2679   /* pr_cursig */
2680   elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
2681 
2682   /* pr_pid */
2683   elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32);
2684 
2685   /* pr_reg */
2686   offset = 112;
2687   size = 384;
2688 
2689   /* Make a ".reg/999" section.  */
2690   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
2691 					  size, note->descpos + offset);
2692 }
2693 
2694 static bfd_boolean
2695 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
2696 {
2697   if (note->descsz != 136)
2698     return FALSE;
2699 
2700   elf_tdata (abfd)->core_pid
2701     = bfd_get_32 (abfd, note->descdata + 24);
2702   elf_tdata (abfd)->core_program
2703     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
2704   elf_tdata (abfd)->core_command
2705     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
2706 
2707   return TRUE;
2708 }
2709 
2710 static char *
2711 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
2712 			   ...)
2713 {
2714   switch (note_type)
2715     {
2716     default:
2717       return NULL;
2718 
2719     case NT_PRPSINFO:
2720       {
2721 	char data[136];
2722 	va_list ap;
2723 
2724 	va_start (ap, note_type);
2725 	memset (data, 0, sizeof (data));
2726 	strncpy (data + 40, va_arg (ap, const char *), 16);
2727 	strncpy (data + 56, va_arg (ap, const char *), 80);
2728 	va_end (ap);
2729 	return elfcore_write_note (abfd, buf, bufsiz,
2730 				   "CORE", note_type, data, sizeof (data));
2731       }
2732 
2733     case NT_PRSTATUS:
2734       {
2735 	char data[504];
2736 	va_list ap;
2737 	long pid;
2738 	int cursig;
2739 	const void *greg;
2740 
2741 	va_start (ap, note_type);
2742 	memset (data, 0, 112);
2743 	pid = va_arg (ap, long);
2744 	bfd_put_32 (abfd, pid, data + 32);
2745 	cursig = va_arg (ap, int);
2746 	bfd_put_16 (abfd, cursig, data + 12);
2747 	greg = va_arg (ap, const void *);
2748 	memcpy (data + 112, greg, 384);
2749 	memset (data + 496, 0, 8);
2750 	va_end (ap);
2751 	return elfcore_write_note (abfd, buf, bufsiz,
2752 				   "CORE", note_type, data, sizeof (data));
2753       }
2754     }
2755 }
2756 
2757 /* Add extra PPC sections.  */
2758 
2759 static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
2760 {
2761   { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
2762   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2763   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2764   { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2765   { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2766   { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2767   { NULL,                     0,  0, 0,            0 }
2768 };
2769 
2770 enum _ppc64_sec_type {
2771   sec_normal = 0,
2772   sec_opd = 1,
2773   sec_toc = 2
2774 };
2775 
2776 struct _ppc64_elf_section_data
2777 {
2778   struct bfd_elf_section_data elf;
2779 
2780   union
2781   {
2782     /* An array with one entry for each opd function descriptor.  */
2783     struct _opd_sec_data
2784     {
2785       /* Points to the function code section for local opd entries.  */
2786       asection **func_sec;
2787 
2788       /* After editing .opd, adjust references to opd local syms.  */
2789       long *adjust;
2790     } opd;
2791 
2792     /* An array for toc sections, indexed by offset/8.  */
2793     struct _toc_sec_data
2794     {
2795       /* Specifies the relocation symbol index used at a given toc offset.  */
2796       unsigned *symndx;
2797 
2798       /* And the relocation addend.  */
2799       bfd_vma *add;
2800     } toc;
2801   } u;
2802 
2803   enum _ppc64_sec_type sec_type:2;
2804 
2805   /* Flag set when small branches are detected.  Used to
2806      select suitable defaults for the stub group size.  */
2807   unsigned int has_14bit_branch:1;
2808 };
2809 
2810 #define ppc64_elf_section_data(sec) \
2811   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
2812 
2813 static bfd_boolean
2814 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
2815 {
2816   if (!sec->used_by_bfd)
2817     {
2818       struct _ppc64_elf_section_data *sdata;
2819       bfd_size_type amt = sizeof (*sdata);
2820 
2821       sdata = bfd_zalloc (abfd, amt);
2822       if (sdata == NULL)
2823 	return FALSE;
2824       sec->used_by_bfd = sdata;
2825     }
2826 
2827   return _bfd_elf_new_section_hook (abfd, sec);
2828 }
2829 
2830 static struct _opd_sec_data *
2831 get_opd_info (asection * sec)
2832 {
2833   if (sec != NULL
2834       && ppc64_elf_section_data (sec) != NULL
2835       && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2836     return &ppc64_elf_section_data (sec)->u.opd;
2837   return NULL;
2838 }
2839 
2840 /* Parameters for the qsort hook.  */
2841 static bfd_boolean synthetic_relocatable;
2842 
2843 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
2844 
2845 static int
2846 compare_symbols (const void *ap, const void *bp)
2847 {
2848   const asymbol *a = * (const asymbol **) ap;
2849   const asymbol *b = * (const asymbol **) bp;
2850 
2851   /* Section symbols first.  */
2852   if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2853     return -1;
2854   if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2855     return 1;
2856 
2857   /* then .opd symbols.  */
2858   if (strcmp (a->section->name, ".opd") == 0
2859       && strcmp (b->section->name, ".opd") != 0)
2860     return -1;
2861   if (strcmp (a->section->name, ".opd") != 0
2862       && strcmp (b->section->name, ".opd") == 0)
2863     return 1;
2864 
2865   /* then other code symbols.  */
2866   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2867       == (SEC_CODE | SEC_ALLOC)
2868       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2869 	 != (SEC_CODE | SEC_ALLOC))
2870     return -1;
2871 
2872   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2873       != (SEC_CODE | SEC_ALLOC)
2874       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2875 	 == (SEC_CODE | SEC_ALLOC))
2876     return 1;
2877 
2878   if (synthetic_relocatable)
2879     {
2880       if (a->section->id < b->section->id)
2881 	return -1;
2882 
2883       if (a->section->id > b->section->id)
2884 	return 1;
2885     }
2886 
2887   if (a->value + a->section->vma < b->value + b->section->vma)
2888     return -1;
2889 
2890   if (a->value + a->section->vma > b->value + b->section->vma)
2891     return 1;
2892 
2893   /* For syms with the same value, prefer strong dynamic global function
2894      syms over other syms.  */
2895   if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2896     return -1;
2897 
2898   if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2899     return 1;
2900 
2901   if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2902     return -1;
2903 
2904   if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2905     return 1;
2906 
2907   if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2908     return -1;
2909 
2910   if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2911     return 1;
2912 
2913   if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2914     return -1;
2915 
2916   if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2917     return 1;
2918 
2919   return 0;
2920 }
2921 
2922 /* Search SYMS for a symbol of the given VALUE.  */
2923 
2924 static asymbol *
2925 sym_exists_at (asymbol **syms, long lo, long hi, int id, bfd_vma value)
2926 {
2927   long mid;
2928 
2929   if (id == -1)
2930     {
2931       while (lo < hi)
2932 	{
2933 	  mid = (lo + hi) >> 1;
2934 	  if (syms[mid]->value + syms[mid]->section->vma < value)
2935 	    lo = mid + 1;
2936 	  else if (syms[mid]->value + syms[mid]->section->vma > value)
2937 	    hi = mid;
2938 	  else
2939 	    return syms[mid];
2940 	}
2941     }
2942   else
2943     {
2944       while (lo < hi)
2945 	{
2946 	  mid = (lo + hi) >> 1;
2947 	  if (syms[mid]->section->id < id)
2948 	    lo = mid + 1;
2949 	  else if (syms[mid]->section->id > id)
2950 	    hi = mid;
2951 	  else if (syms[mid]->value < value)
2952 	    lo = mid + 1;
2953 	  else if (syms[mid]->value > value)
2954 	    hi = mid;
2955 	  else
2956 	    return syms[mid];
2957 	}
2958     }
2959   return NULL;
2960 }
2961 
2962 static bfd_boolean
2963 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
2964 {
2965   bfd_vma vma = *(bfd_vma *) ptr;
2966   return ((section->flags & SEC_ALLOC) != 0
2967 	  && section->vma <= vma
2968 	  && vma < section->vma + section->size);
2969 }
2970 
2971 /* Create synthetic symbols, effectively restoring "dot-symbol" function
2972    entry syms.  Also generate @plt symbols for the glink branch table.  */
2973 
2974 static long
2975 ppc64_elf_get_synthetic_symtab (bfd *abfd,
2976 				long static_count, asymbol **static_syms,
2977 				long dyn_count, asymbol **dyn_syms,
2978 				asymbol **ret)
2979 {
2980   asymbol *s;
2981   long i;
2982   long count;
2983   char *names;
2984   long symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2985   asection *opd;
2986   bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2987   asymbol **syms;
2988 
2989   *ret = NULL;
2990 
2991   opd = bfd_get_section_by_name (abfd, ".opd");
2992   if (opd == NULL)
2993     return 0;
2994 
2995   symcount = static_count;
2996   if (!relocatable)
2997     symcount += dyn_count;
2998   if (symcount == 0)
2999     return 0;
3000 
3001   syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
3002   if (syms == NULL)
3003     return -1;
3004 
3005   if (!relocatable && static_count != 0 && dyn_count != 0)
3006     {
3007       /* Use both symbol tables.  */
3008       memcpy (syms, static_syms, static_count * sizeof (*syms));
3009       memcpy (syms + static_count, dyn_syms, (dyn_count + 1) * sizeof (*syms));
3010     }
3011   else if (!relocatable && static_count == 0)
3012     memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
3013   else
3014     memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
3015 
3016   synthetic_relocatable = relocatable;
3017   qsort (syms, symcount, sizeof (*syms), compare_symbols);
3018 
3019   if (!relocatable && symcount > 1)
3020     {
3021       long j;
3022       /* Trim duplicate syms, since we may have merged the normal and
3023 	 dynamic symbols.  Actually, we only care about syms that have
3024 	 different values, so trim any with the same value.  */
3025       for (i = 1, j = 1; i < symcount; ++i)
3026 	if (syms[i - 1]->value + syms[i - 1]->section->vma
3027 	    != syms[i]->value + syms[i]->section->vma)
3028 	  syms[j++] = syms[i];
3029       symcount = j;
3030     }
3031 
3032   i = 0;
3033   if (strcmp (syms[i]->section->name, ".opd") == 0)
3034     ++i;
3035   codesecsym = i;
3036 
3037   for (; i < symcount; ++i)
3038     if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3039 	 != (SEC_CODE | SEC_ALLOC))
3040 	|| (syms[i]->flags & BSF_SECTION_SYM) == 0)
3041       break;
3042   codesecsymend = i;
3043 
3044   for (; i < symcount; ++i)
3045     if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
3046       break;
3047   secsymend = i;
3048 
3049   for (; i < symcount; ++i)
3050     if (strcmp (syms[i]->section->name, ".opd") != 0)
3051       break;
3052   opdsymend = i;
3053 
3054   for (; i < symcount; ++i)
3055     if ((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3056 	!= (SEC_CODE | SEC_ALLOC))
3057       break;
3058   symcount = i;
3059 
3060   count = 0;
3061 
3062   if (relocatable)
3063     {
3064       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3065       arelent *r;
3066       size_t size;
3067       long relcount;
3068 
3069       if (opdsymend == secsymend)
3070 	goto done;
3071 
3072       slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3073       relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
3074       if (relcount == 0)
3075 	goto done;
3076 
3077       if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
3078 	{
3079 	  count = -1;
3080 	  goto done;
3081 	}
3082 
3083       size = 0;
3084       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3085 	{
3086 	  asymbol *sym;
3087 
3088 	  while (r < opd->relocation + relcount
3089 		 && r->address < syms[i]->value + opd->vma)
3090 	    ++r;
3091 
3092 	  if (r == opd->relocation + relcount)
3093 	    break;
3094 
3095 	  if (r->address != syms[i]->value + opd->vma)
3096 	    continue;
3097 
3098 	  if (r->howto->type != R_PPC64_ADDR64)
3099 	    continue;
3100 
3101 	  sym = *r->sym_ptr_ptr;
3102 	  if (!sym_exists_at (syms, opdsymend, symcount,
3103 			      sym->section->id, sym->value + r->addend))
3104 	    {
3105 	      ++count;
3106 	      size += sizeof (asymbol);
3107 	      size += strlen (syms[i]->name) + 2;
3108 	    }
3109 	}
3110 
3111       s = *ret = bfd_malloc (size);
3112       if (s == NULL)
3113 	{
3114 	  count = -1;
3115 	  goto done;
3116 	}
3117 
3118       names = (char *) (s + count);
3119 
3120       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3121 	{
3122 	  asymbol *sym;
3123 
3124 	  while (r < opd->relocation + relcount
3125 		 && r->address < syms[i]->value + opd->vma)
3126 	    ++r;
3127 
3128 	  if (r == opd->relocation + relcount)
3129 	    break;
3130 
3131 	  if (r->address != syms[i]->value + opd->vma)
3132 	    continue;
3133 
3134 	  if (r->howto->type != R_PPC64_ADDR64)
3135 	    continue;
3136 
3137 	  sym = *r->sym_ptr_ptr;
3138 	  if (!sym_exists_at (syms, opdsymend, symcount,
3139 			      sym->section->id, sym->value + r->addend))
3140 	    {
3141 	      size_t len;
3142 
3143 	      *s = *syms[i];
3144 	      s->flags |= BSF_SYNTHETIC;
3145 	      s->section = sym->section;
3146 	      s->value = sym->value + r->addend;
3147 	      s->name = names;
3148 	      *names++ = '.';
3149 	      len = strlen (syms[i]->name);
3150 	      memcpy (names, syms[i]->name, len + 1);
3151 	      names += len + 1;
3152 	      /* Have udata.p point back to the original symbol this
3153 		 synthetic symbol was derived from.  */
3154 	      s->udata.p = syms[i];
3155 	      s++;
3156 	    }
3157 	}
3158     }
3159   else
3160     {
3161       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3162       bfd_byte *contents;
3163       size_t size;
3164       long plt_count = 0;
3165       bfd_vma glink_vma = 0, resolv_vma = 0;
3166       asection *dynamic, *glink = NULL, *relplt = NULL;
3167       arelent *p;
3168 
3169       if (!bfd_malloc_and_get_section (abfd, opd, &contents))
3170 	{
3171 	  if (contents)
3172 	    {
3173 	    free_contents_and_exit:
3174 	      free (contents);
3175 	    }
3176 	  count = -1;
3177 	  goto done;
3178 	}
3179 
3180       size = 0;
3181       for (i = secsymend; i < opdsymend; ++i)
3182 	{
3183 	  bfd_vma ent;
3184 
3185 	  /* Ignore bogus symbols.  */
3186 	  if (syms[i]->value > opd->size - 8)
3187 	    continue;
3188 
3189 	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
3190 	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3191 	    {
3192 	      ++count;
3193 	      size += sizeof (asymbol);
3194 	      size += strlen (syms[i]->name) + 2;
3195 	    }
3196 	}
3197 
3198       /* Get start of .glink stubs from DT_PPC64_GLINK.  */
3199       if (dyn_count != 0
3200 	  && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
3201 	{
3202 	  bfd_byte *dynbuf, *extdyn, *extdynend;
3203 	  size_t extdynsize;
3204 	  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
3205 
3206 	  if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
3207 	    goto free_contents_and_exit;
3208 
3209 	  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
3210 	  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
3211 
3212 	  extdyn = dynbuf;
3213 	  extdynend = extdyn + dynamic->size;
3214 	  for (; extdyn < extdynend; extdyn += extdynsize)
3215 	    {
3216 	      Elf_Internal_Dyn dyn;
3217 	      (*swap_dyn_in) (abfd, extdyn, &dyn);
3218 
3219 	      if (dyn.d_tag == DT_NULL)
3220 		break;
3221 
3222 	      if (dyn.d_tag == DT_PPC64_GLINK)
3223 		{
3224 		  /* The first glink stub starts at offset 32; see comment in
3225 		     ppc64_elf_finish_dynamic_sections. */
3226 		  glink_vma = dyn.d_un.d_val + 32;
3227 		  /* The .glink section usually does not survive the final
3228 		     link; search for the section (usually .text) where the
3229 		     glink stubs now reside.  */
3230 		  glink = bfd_sections_find_if (abfd, section_covers_vma,
3231 						&glink_vma);
3232 		  break;
3233 		}
3234 	    }
3235 
3236 	  free (dynbuf);
3237 	}
3238 
3239       if (glink != NULL)
3240 	{
3241 	  /* Determine __glink trampoline by reading the relative branch
3242 	     from the first glink stub.  */
3243 	  bfd_byte buf[4];
3244 	  if (bfd_get_section_contents (abfd, glink, buf,
3245 					glink_vma + 4 - glink->vma, 4))
3246 	    {
3247 	      unsigned int insn = bfd_get_32 (abfd, buf);
3248 	      insn ^= B_DOT;
3249 	      if ((insn & ~0x3fffffc) == 0)
3250 		resolv_vma = glink_vma + 4 + (insn ^ 0x2000000) - 0x2000000;
3251 	    }
3252 
3253 	  if (resolv_vma)
3254 	    size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
3255 
3256 	  relplt = bfd_get_section_by_name (abfd, ".rela.plt");
3257 	  if (relplt != NULL)
3258 	    {
3259 	      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3260 	      if (! (*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
3261 		goto free_contents_and_exit;
3262 
3263 	      plt_count = relplt->size / sizeof (Elf64_External_Rela);
3264 	      size += plt_count * sizeof (asymbol);
3265 
3266 	      p = relplt->relocation;
3267 	      for (i = 0; i < plt_count; i++, p++)
3268 		{
3269 		  size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
3270 		  if (p->addend != 0)
3271 		    size += sizeof ("+0x") - 1 + 16;
3272 		}
3273 	    }
3274 	}
3275 
3276       s = *ret = bfd_malloc (size);
3277       if (s == NULL)
3278 	goto free_contents_and_exit;
3279 
3280       names = (char *) (s + count + plt_count + (resolv_vma != 0));
3281 
3282       for (i = secsymend; i < opdsymend; ++i)
3283 	{
3284 	  bfd_vma ent;
3285 
3286 	  if (syms[i]->value > opd->size - 8)
3287 	    continue;
3288 
3289 	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
3290 	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3291 	    {
3292 	      long lo, hi;
3293 	      size_t len;
3294 	      asection *sec = abfd->sections;
3295 
3296 	      *s = *syms[i];
3297 	      lo = codesecsym;
3298 	      hi = codesecsymend;
3299 	      while (lo < hi)
3300 		{
3301 		  long mid = (lo + hi) >> 1;
3302 		  if (syms[mid]->section->vma < ent)
3303 		    lo = mid + 1;
3304 		  else if (syms[mid]->section->vma > ent)
3305 		    hi = mid;
3306 		  else
3307 		    {
3308 		      sec = syms[mid]->section;
3309 		      break;
3310 		    }
3311 		}
3312 
3313 	      if (lo >= hi && lo > codesecsym)
3314 		sec = syms[lo - 1]->section;
3315 
3316 	      for (; sec != NULL; sec = sec->next)
3317 		{
3318 		  if (sec->vma > ent)
3319 		    break;
3320 		  /* SEC_LOAD may not be set if SEC is from a separate debug
3321 		     info file.  */
3322 		  if ((sec->flags & SEC_ALLOC) == 0)
3323 		    break;
3324 		  if ((sec->flags & SEC_CODE) != 0)
3325 		    s->section = sec;
3326 		}
3327 	      s->flags |= BSF_SYNTHETIC;
3328 	      s->value = ent - s->section->vma;
3329 	      s->name = names;
3330 	      *names++ = '.';
3331 	      len = strlen (syms[i]->name);
3332 	      memcpy (names, syms[i]->name, len + 1);
3333 	      names += len + 1;
3334 	      /* Have udata.p point back to the original symbol this
3335 		 synthetic symbol was derived from.  */
3336 	      s->udata.p = syms[i];
3337 	      s++;
3338 	    }
3339 	}
3340       free (contents);
3341 
3342       if (glink != NULL && relplt != NULL)
3343 	{
3344 	  if (resolv_vma)
3345 	    {
3346 	      /* Add a symbol for the main glink trampoline.  */
3347 	      memset (s, 0, sizeof *s);
3348 	      s->the_bfd = abfd;
3349 	      s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
3350 	      s->section = glink;
3351 	      s->value = resolv_vma - glink->vma;
3352 	      s->name = names;
3353 	      memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve"));
3354 	      names += sizeof ("__glink_PLTresolve");
3355 	      s++;
3356 	      count++;
3357 	    }
3358 
3359 	  /* FIXME: It would be very much nicer to put sym@plt on the
3360 	     stub rather than on the glink branch table entry.  The
3361 	     objdump disassembler would then use a sensible symbol
3362 	     name on plt calls.  The difficulty in doing so is
3363 	     a) finding the stubs, and,
3364 	     b) matching stubs against plt entries, and,
3365 	     c) there can be multiple stubs for a given plt entry.
3366 
3367 	     Solving (a) could be done by code scanning, but older
3368 	     ppc64 binaries used different stubs to current code.
3369 	     (b) is the tricky one since you need to known the toc
3370 	     pointer for at least one function that uses a pic stub to
3371 	     be able to calculate the plt address referenced.
3372 	     (c) means gdb would need to set multiple breakpoints (or
3373 	     find the glink branch itself) when setting breakpoints
3374 	     for pending shared library loads.  */
3375 	  p = relplt->relocation;
3376 	  for (i = 0; i < plt_count; i++, p++)
3377 	    {
3378 	      size_t len;
3379 
3380 	      *s = **p->sym_ptr_ptr;
3381 	      /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
3382 		 we are defining a symbol, ensure one of them is set.  */
3383 	      if ((s->flags & BSF_LOCAL) == 0)
3384 		s->flags |= BSF_GLOBAL;
3385 	      s->flags |= BSF_SYNTHETIC;
3386 	      s->section = glink;
3387 	      s->value = glink_vma - glink->vma;
3388 	      s->name = names;
3389 	      s->udata.p = NULL;
3390 	      len = strlen ((*p->sym_ptr_ptr)->name);
3391 	      memcpy (names, (*p->sym_ptr_ptr)->name, len);
3392 	      names += len;
3393 	      if (p->addend != 0)
3394 		{
3395 		  memcpy (names, "+0x", sizeof ("+0x") - 1);
3396 		  names += sizeof ("+0x") - 1;
3397 		  bfd_sprintf_vma (abfd, names, p->addend);
3398 		  names += strlen (names);
3399 		}
3400 	      memcpy (names, "@plt", sizeof ("@plt"));
3401 	      names += sizeof ("@plt");
3402 	      s++;
3403 	      glink_vma += 8;
3404 	      if (i >= 0x8000)
3405 		glink_vma += 4;
3406 	    }
3407 	  count += plt_count;
3408 	}
3409     }
3410 
3411  done:
3412   free (syms);
3413   return count;
3414 }
3415 
3416 /* The following functions are specific to the ELF linker, while
3417    functions above are used generally.  Those named ppc64_elf_* are
3418    called by the main ELF linker code.  They appear in this file more
3419    or less in the order in which they are called.  eg.
3420    ppc64_elf_check_relocs is called early in the link process,
3421    ppc64_elf_finish_dynamic_sections is one of the last functions
3422    called.
3423 
3424    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
3425    functions have both a function code symbol and a function descriptor
3426    symbol.  A call to foo in a relocatable object file looks like:
3427 
3428    .		.text
3429    .	x:
3430    .		bl	.foo
3431    .		nop
3432 
3433    The function definition in another object file might be:
3434 
3435    .		.section .opd
3436    .	foo:	.quad	.foo
3437    .		.quad	.TOC.@tocbase
3438    .		.quad	0
3439    .
3440    .		.text
3441    .	.foo:	blr
3442 
3443    When the linker resolves the call during a static link, the branch
3444    unsurprisingly just goes to .foo and the .opd information is unused.
3445    If the function definition is in a shared library, things are a little
3446    different:  The call goes via a plt call stub, the opd information gets
3447    copied to the plt, and the linker patches the nop.
3448 
3449    .	x:
3450    .		bl	.foo_stub
3451    .		ld	2,40(1)
3452    .
3453    .
3454    .	.foo_stub:
3455    .		addis	12,2,Lfoo@toc@ha	# in practice, the call stub
3456    .		addi	12,12,Lfoo@toc@l	# is slightly optimized, but
3457    .		std	2,40(1)			# this is the general idea
3458    .		ld	11,0(12)
3459    .		ld	2,8(12)
3460    .		mtctr	11
3461    .		ld	11,16(12)
3462    .		bctr
3463    .
3464    .		.section .plt
3465    .	Lfoo:	reloc (R_PPC64_JMP_SLOT, foo)
3466 
3467    The "reloc ()" notation is supposed to indicate that the linker emits
3468    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
3469    copying.
3470 
3471    What are the difficulties here?  Well, firstly, the relocations
3472    examined by the linker in check_relocs are against the function code
3473    sym .foo, while the dynamic relocation in the plt is emitted against
3474    the function descriptor symbol, foo.  Somewhere along the line, we need
3475    to carefully copy dynamic link information from one symbol to the other.
3476    Secondly, the generic part of the elf linker will make .foo a dynamic
3477    symbol as is normal for most other backends.  We need foo dynamic
3478    instead, at least for an application final link.  However, when
3479    creating a shared library containing foo, we need to have both symbols
3480    dynamic so that references to .foo are satisfied during the early
3481    stages of linking.  Otherwise the linker might decide to pull in a
3482    definition from some other object, eg. a static library.
3483 
3484    Update: As of August 2004, we support a new convention.  Function
3485    calls may use the function descriptor symbol, ie. "bl foo".  This
3486    behaves exactly as "bl .foo".  */
3487 
3488 /* Of those relocs that might be copied as dynamic relocs, this function
3489    selects those that must be copied when linking a shared library,
3490    even when the symbol is local.  */
3491 
3492 static int
3493 must_be_dyn_reloc (struct bfd_link_info *info,
3494 		   enum elf_ppc64_reloc_type r_type)
3495 {
3496   switch (r_type)
3497     {
3498     default:
3499       return 1;
3500 
3501     case R_PPC64_REL32:
3502     case R_PPC64_REL64:
3503     case R_PPC64_REL30:
3504       return 0;
3505 
3506     case R_PPC64_TPREL16:
3507     case R_PPC64_TPREL16_LO:
3508     case R_PPC64_TPREL16_HI:
3509     case R_PPC64_TPREL16_HA:
3510     case R_PPC64_TPREL16_DS:
3511     case R_PPC64_TPREL16_LO_DS:
3512     case R_PPC64_TPREL16_HIGHER:
3513     case R_PPC64_TPREL16_HIGHERA:
3514     case R_PPC64_TPREL16_HIGHEST:
3515     case R_PPC64_TPREL16_HIGHESTA:
3516     case R_PPC64_TPREL64:
3517       return !info->executable;
3518     }
3519 }
3520 
3521 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
3522    copying dynamic variables from a shared lib into an app's dynbss
3523    section, and instead use a dynamic relocation to point into the
3524    shared lib.  With code that gcc generates, it's vital that this be
3525    enabled;  In the PowerPC64 ABI, the address of a function is actually
3526    the address of a function descriptor, which resides in the .opd
3527    section.  gcc uses the descriptor directly rather than going via the
3528    GOT as some other ABI's do, which means that initialized function
3529    pointers must reference the descriptor.  Thus, a function pointer
3530    initialized to the address of a function in a shared library will
3531    either require a copy reloc, or a dynamic reloc.  Using a copy reloc
3532    redefines the function descriptor symbol to point to the copy.  This
3533    presents a problem as a plt entry for that function is also
3534    initialized from the function descriptor symbol and the copy reloc
3535    may not be initialized first.  */
3536 #define ELIMINATE_COPY_RELOCS 1
3537 
3538 /* Section name for stubs is the associated section name plus this
3539    string.  */
3540 #define STUB_SUFFIX ".stub"
3541 
3542 /* Linker stubs.
3543    ppc_stub_long_branch:
3544    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
3545    destination, but a 24 bit branch in a stub section will reach.
3546    .	b	dest
3547 
3548    ppc_stub_plt_branch:
3549    Similar to the above, but a 24 bit branch in the stub section won't
3550    reach its destination.
3551    .	addis	%r12,%r2,xxx@toc@ha
3552    .	ld	%r11,xxx@toc@l(%r12)
3553    .	mtctr	%r11
3554    .	bctr
3555 
3556    ppc_stub_plt_call:
3557    Used to call a function in a shared library.  If it so happens that
3558    the plt entry referenced crosses a 64k boundary, then an extra
3559    "addi %r12,%r12,xxx@toc@l" will be inserted before the "mtctr".
3560    .	addis	%r12,%r2,xxx@toc@ha
3561    .	std	%r2,40(%r1)
3562    .	ld	%r11,xxx+0@toc@l(%r12)
3563    .	mtctr	%r11
3564    .	ld	%r2,xxx+8@toc@l(%r12)
3565    .	ld	%r11,xxx+16@toc@l(%r12)
3566    .	bctr
3567 
3568    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
3569    code to adjust the value and save r2 to support multiple toc sections.
3570    A ppc_stub_long_branch with an r2 offset looks like:
3571    .	std	%r2,40(%r1)
3572    .	addis	%r2,%r2,off@ha
3573    .	addi	%r2,%r2,off@l
3574    .	b	dest
3575 
3576    A ppc_stub_plt_branch with an r2 offset looks like:
3577    .	std	%r2,40(%r1)
3578    .	addis	%r12,%r2,xxx@toc@ha
3579    .	ld	%r11,xxx@toc@l(%r12)
3580    .	addis	%r2,%r2,off@ha
3581    .	addi	%r2,%r2,off@l
3582    .	mtctr	%r11
3583    .	bctr
3584 
3585    In cases where the "addis" instruction would add zero, the "addis" is
3586    omitted and following instructions modified slightly in some cases.
3587 */
3588 
3589 enum ppc_stub_type {
3590   ppc_stub_none,
3591   ppc_stub_long_branch,
3592   ppc_stub_long_branch_r2off,
3593   ppc_stub_plt_branch,
3594   ppc_stub_plt_branch_r2off,
3595   ppc_stub_plt_call,
3596   ppc_stub_plt_call_r2save
3597 };
3598 
3599 struct ppc_stub_hash_entry {
3600 
3601   /* Base hash table entry structure.  */
3602   struct bfd_hash_entry root;
3603 
3604   enum ppc_stub_type stub_type;
3605 
3606   /* The stub section.  */
3607   asection *stub_sec;
3608 
3609   /* Offset within stub_sec of the beginning of this stub.  */
3610   bfd_vma stub_offset;
3611 
3612   /* Given the symbol's value and its section we can determine its final
3613      value when building the stubs (so the stub knows where to jump.  */
3614   bfd_vma target_value;
3615   asection *target_section;
3616 
3617   /* The symbol table entry, if any, that this was derived from.  */
3618   struct ppc_link_hash_entry *h;
3619   struct plt_entry *plt_ent;
3620 
3621   /* Where this stub is being called from, or, in the case of combined
3622      stub sections, the first input section in the group.  */
3623   asection *id_sec;
3624 };
3625 
3626 struct ppc_branch_hash_entry {
3627 
3628   /* Base hash table entry structure.  */
3629   struct bfd_hash_entry root;
3630 
3631   /* Offset within branch lookup table.  */
3632   unsigned int offset;
3633 
3634   /* Generation marker.  */
3635   unsigned int iter;
3636 };
3637 
3638 struct ppc_link_hash_entry
3639 {
3640   struct elf_link_hash_entry elf;
3641 
3642   union {
3643     /* A pointer to the most recently used stub hash entry against this
3644        symbol.  */
3645     struct ppc_stub_hash_entry *stub_cache;
3646 
3647     /* A pointer to the next symbol starting with a '.'  */
3648     struct ppc_link_hash_entry *next_dot_sym;
3649   } u;
3650 
3651   /* Track dynamic relocs copied for this symbol.  */
3652   struct elf_dyn_relocs *dyn_relocs;
3653 
3654   /* Link between function code and descriptor symbols.  */
3655   struct ppc_link_hash_entry *oh;
3656 
3657   /* Flag function code and descriptor symbols.  */
3658   unsigned int is_func:1;
3659   unsigned int is_func_descriptor:1;
3660   unsigned int fake:1;
3661 
3662   /* Whether global opd/toc sym has been adjusted or not.
3663      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3664      should be set for all globals defined in any opd/toc section.  */
3665   unsigned int adjust_done:1;
3666 
3667   /* Set if we twiddled this symbol to weak at some stage.  */
3668   unsigned int was_undefined:1;
3669 
3670   /* Contexts in which symbol is used in the GOT (or TOC).
3671      TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
3672      corresponding relocs are encountered during check_relocs.
3673      tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
3674      indicate the corresponding GOT entry type is not needed.
3675      tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
3676      a TPREL one.  We use a separate flag rather than setting TPREL
3677      just for convenience in distinguishing the two cases.  */
3678 #define TLS_GD		 1	/* GD reloc. */
3679 #define TLS_LD		 2	/* LD reloc. */
3680 #define TLS_TPREL	 4	/* TPREL reloc, => IE. */
3681 #define TLS_DTPREL	 8	/* DTPREL reloc, => LD. */
3682 #define TLS_TLS		16	/* Any TLS reloc.  */
3683 #define TLS_EXPLICIT	32	/* Marks TOC section TLS relocs. */
3684 #define TLS_TPRELGD	64	/* TPREL reloc resulting from GD->IE. */
3685 #define PLT_IFUNC      128	/* STT_GNU_IFUNC.  */
3686   unsigned char tls_mask;
3687 };
3688 
3689 /* ppc64 ELF linker hash table.  */
3690 
3691 struct ppc_link_hash_table
3692 {
3693   struct elf_link_hash_table elf;
3694 
3695   /* The stub hash table.  */
3696   struct bfd_hash_table stub_hash_table;
3697 
3698   /* Another hash table for plt_branch stubs.  */
3699   struct bfd_hash_table branch_hash_table;
3700 
3701   /* Hash table for function prologue tocsave.  */
3702   htab_t tocsave_htab;
3703 
3704   /* Linker stub bfd.  */
3705   bfd *stub_bfd;
3706 
3707   /* Linker call-backs.  */
3708   asection * (*add_stub_section) (const char *, asection *);
3709   void (*layout_sections_again) (void);
3710 
3711   /* Array to keep track of which stub sections have been created, and
3712      information on stub grouping.  */
3713   struct map_stub {
3714     /* This is the section to which stubs in the group will be attached.  */
3715     asection *link_sec;
3716     /* The stub section.  */
3717     asection *stub_sec;
3718     /* Along with elf_gp, specifies the TOC pointer used in this group.  */
3719     bfd_vma toc_off;
3720   } *stub_group;
3721 
3722   /* Temp used when calculating TOC pointers.  */
3723   bfd_vma toc_curr;
3724   bfd *toc_bfd;
3725   asection *toc_first_sec;
3726 
3727   /* Highest input section id.  */
3728   int top_id;
3729 
3730   /* Highest output section index.  */
3731   int top_index;
3732 
3733   /* Used when adding symbols.  */
3734   struct ppc_link_hash_entry *dot_syms;
3735 
3736   /* List of input sections for each output section.  */
3737   asection **input_list;
3738 
3739   /* Short-cuts to get to dynamic linker sections.  */
3740   asection *got;
3741   asection *plt;
3742   asection *relplt;
3743   asection *iplt;
3744   asection *reliplt;
3745   asection *dynbss;
3746   asection *relbss;
3747   asection *glink;
3748   asection *sfpr;
3749   asection *brlt;
3750   asection *relbrlt;
3751   asection *glink_eh_frame;
3752 
3753   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3754   struct ppc_link_hash_entry *tls_get_addr;
3755   struct ppc_link_hash_entry *tls_get_addr_fd;
3756 
3757   /* The size of reliplt used by got entry relocs.  */
3758   bfd_size_type got_reli_size;
3759 
3760   /* Statistics.  */
3761   unsigned long stub_count[ppc_stub_plt_call_r2save];
3762 
3763   /* Number of stubs against global syms.  */
3764   unsigned long stub_globals;
3765 
3766   /* Alignment of PLT call stubs.  */
3767   unsigned int plt_stub_align:4;
3768 
3769   /* Set if PLT call stubs should load r11.  */
3770   unsigned int plt_static_chain:1;
3771 
3772   /* Set if PLT call stubs need a read-read barrier.  */
3773   unsigned int plt_thread_safe:1;
3774 
3775   /* Set if we should emit symbols for stubs.  */
3776   unsigned int emit_stub_syms:1;
3777 
3778   /* Set if __tls_get_addr optimization should not be done.  */
3779   unsigned int no_tls_get_addr_opt:1;
3780 
3781   /* Support for multiple toc sections.  */
3782   unsigned int do_multi_toc:1;
3783   unsigned int multi_toc_needed:1;
3784   unsigned int second_toc_pass:1;
3785   unsigned int do_toc_opt:1;
3786 
3787   /* Set on error.  */
3788   unsigned int stub_error:1;
3789 
3790   /* Temp used by ppc64_elf_process_dot_syms.  */
3791   unsigned int twiddled_syms:1;
3792 
3793   /* Incremented every time we size stubs.  */
3794   unsigned int stub_iteration;
3795 
3796   /* Small local sym cache.  */
3797   struct sym_cache sym_cache;
3798 };
3799 
3800 /* Rename some of the generic section flags to better document how they
3801    are used here.  */
3802 
3803 /* Nonzero if this section has TLS related relocations.  */
3804 #define has_tls_reloc sec_flg0
3805 
3806 /* Nonzero if this section has a call to __tls_get_addr.  */
3807 #define has_tls_get_addr_call sec_flg1
3808 
3809 /* Nonzero if this section has any toc or got relocs.  */
3810 #define has_toc_reloc sec_flg2
3811 
3812 /* Nonzero if this section has a call to another section that uses
3813    the toc or got.  */
3814 #define makes_toc_func_call sec_flg3
3815 
3816 /* Recursion protection when determining above flag.  */
3817 #define call_check_in_progress sec_flg4
3818 #define call_check_done sec_flg5
3819 
3820 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3821 
3822 #define ppc_hash_table(p) \
3823   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3824   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3825 
3826 #define ppc_stub_hash_lookup(table, string, create, copy) \
3827   ((struct ppc_stub_hash_entry *) \
3828    bfd_hash_lookup ((table), (string), (create), (copy)))
3829 
3830 #define ppc_branch_hash_lookup(table, string, create, copy) \
3831   ((struct ppc_branch_hash_entry *) \
3832    bfd_hash_lookup ((table), (string), (create), (copy)))
3833 
3834 /* Create an entry in the stub hash table.  */
3835 
3836 static struct bfd_hash_entry *
3837 stub_hash_newfunc (struct bfd_hash_entry *entry,
3838 		   struct bfd_hash_table *table,
3839 		   const char *string)
3840 {
3841   /* Allocate the structure if it has not already been allocated by a
3842      subclass.  */
3843   if (entry == NULL)
3844     {
3845       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3846       if (entry == NULL)
3847 	return entry;
3848     }
3849 
3850   /* Call the allocation method of the superclass.  */
3851   entry = bfd_hash_newfunc (entry, table, string);
3852   if (entry != NULL)
3853     {
3854       struct ppc_stub_hash_entry *eh;
3855 
3856       /* Initialize the local fields.  */
3857       eh = (struct ppc_stub_hash_entry *) entry;
3858       eh->stub_type = ppc_stub_none;
3859       eh->stub_sec = NULL;
3860       eh->stub_offset = 0;
3861       eh->target_value = 0;
3862       eh->target_section = NULL;
3863       eh->h = NULL;
3864       eh->id_sec = NULL;
3865     }
3866 
3867   return entry;
3868 }
3869 
3870 /* Create an entry in the branch hash table.  */
3871 
3872 static struct bfd_hash_entry *
3873 branch_hash_newfunc (struct bfd_hash_entry *entry,
3874 		     struct bfd_hash_table *table,
3875 		     const char *string)
3876 {
3877   /* Allocate the structure if it has not already been allocated by a
3878      subclass.  */
3879   if (entry == NULL)
3880     {
3881       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3882       if (entry == NULL)
3883 	return entry;
3884     }
3885 
3886   /* Call the allocation method of the superclass.  */
3887   entry = bfd_hash_newfunc (entry, table, string);
3888   if (entry != NULL)
3889     {
3890       struct ppc_branch_hash_entry *eh;
3891 
3892       /* Initialize the local fields.  */
3893       eh = (struct ppc_branch_hash_entry *) entry;
3894       eh->offset = 0;
3895       eh->iter = 0;
3896     }
3897 
3898   return entry;
3899 }
3900 
3901 /* Create an entry in a ppc64 ELF linker hash table.  */
3902 
3903 static struct bfd_hash_entry *
3904 link_hash_newfunc (struct bfd_hash_entry *entry,
3905 		   struct bfd_hash_table *table,
3906 		   const char *string)
3907 {
3908   /* Allocate the structure if it has not already been allocated by a
3909      subclass.  */
3910   if (entry == NULL)
3911     {
3912       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3913       if (entry == NULL)
3914 	return entry;
3915     }
3916 
3917   /* Call the allocation method of the superclass.  */
3918   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3919   if (entry != NULL)
3920     {
3921       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3922 
3923       memset (&eh->u.stub_cache, 0,
3924 	      (sizeof (struct ppc_link_hash_entry)
3925 	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3926 
3927       /* When making function calls, old ABI code references function entry
3928 	 points (dot symbols), while new ABI code references the function
3929 	 descriptor symbol.  We need to make any combination of reference and
3930 	 definition work together, without breaking archive linking.
3931 
3932 	 For a defined function "foo" and an undefined call to "bar":
3933 	 An old object defines "foo" and ".foo", references ".bar" (possibly
3934 	 "bar" too).
3935 	 A new object defines "foo" and references "bar".
3936 
3937 	 A new object thus has no problem with its undefined symbols being
3938 	 satisfied by definitions in an old object.  On the other hand, the
3939 	 old object won't have ".bar" satisfied by a new object.
3940 
3941 	 Keep a list of newly added dot-symbols.  */
3942 
3943       if (string[0] == '.')
3944 	{
3945 	  struct ppc_link_hash_table *htab;
3946 
3947 	  htab = (struct ppc_link_hash_table *) table;
3948 	  eh->u.next_dot_sym = htab->dot_syms;
3949 	  htab->dot_syms = eh;
3950 	}
3951     }
3952 
3953   return entry;
3954 }
3955 
3956 struct tocsave_entry {
3957   asection *sec;
3958   bfd_vma offset;
3959 };
3960 
3961 static hashval_t
3962 tocsave_htab_hash (const void *p)
3963 {
3964   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3965   return ((bfd_vma)(intptr_t) e->sec ^ e->offset) >> 3;
3966 }
3967 
3968 static int
3969 tocsave_htab_eq (const void *p1, const void *p2)
3970 {
3971   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3972   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3973   return e1->sec == e2->sec && e1->offset == e2->offset;
3974 }
3975 
3976 /* Create a ppc64 ELF linker hash table.  */
3977 
3978 static struct bfd_link_hash_table *
3979 ppc64_elf_link_hash_table_create (bfd *abfd)
3980 {
3981   struct ppc_link_hash_table *htab;
3982   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3983 
3984   htab = bfd_zmalloc (amt);
3985   if (htab == NULL)
3986     return NULL;
3987 
3988   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3989 				      sizeof (struct ppc_link_hash_entry),
3990 				      PPC64_ELF_DATA))
3991     {
3992       free (htab);
3993       return NULL;
3994     }
3995 
3996   /* Init the stub hash table too.  */
3997   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3998 			    sizeof (struct ppc_stub_hash_entry)))
3999     return NULL;
4000 
4001   /* And the branch hash table.  */
4002   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
4003 			    sizeof (struct ppc_branch_hash_entry)))
4004     return NULL;
4005 
4006   htab->tocsave_htab = htab_try_create (1024,
4007 					tocsave_htab_hash,
4008 					tocsave_htab_eq,
4009 					NULL);
4010   if (htab->tocsave_htab == NULL)
4011     return NULL;
4012 
4013   /* Initializing two fields of the union is just cosmetic.  We really
4014      only care about glist, but when compiled on a 32-bit host the
4015      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
4016      debugger inspection of these fields look nicer.  */
4017   htab->elf.init_got_refcount.refcount = 0;
4018   htab->elf.init_got_refcount.glist = NULL;
4019   htab->elf.init_plt_refcount.refcount = 0;
4020   htab->elf.init_plt_refcount.glist = NULL;
4021   htab->elf.init_got_offset.offset = 0;
4022   htab->elf.init_got_offset.glist = NULL;
4023   htab->elf.init_plt_offset.offset = 0;
4024   htab->elf.init_plt_offset.glist = NULL;
4025 
4026   return &htab->elf.root;
4027 }
4028 
4029 /* Free the derived linker hash table.  */
4030 
4031 static void
4032 ppc64_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
4033 {
4034   struct ppc_link_hash_table *htab = (struct ppc_link_hash_table *) hash;
4035 
4036   bfd_hash_table_free (&htab->stub_hash_table);
4037   bfd_hash_table_free (&htab->branch_hash_table);
4038   if (htab->tocsave_htab)
4039     htab_delete (htab->tocsave_htab);
4040   _bfd_generic_link_hash_table_free (hash);
4041 }
4042 
4043 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
4044 
4045 void
4046 ppc64_elf_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
4047 {
4048   struct ppc_link_hash_table *htab;
4049 
4050   elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS64;
4051 
4052 /* Always hook our dynamic sections into the first bfd, which is the
4053    linker created stub bfd.  This ensures that the GOT header is at
4054    the start of the output TOC section.  */
4055   htab = ppc_hash_table (info);
4056   if (htab == NULL)
4057     return;
4058   htab->stub_bfd = abfd;
4059   htab->elf.dynobj = abfd;
4060 }
4061 
4062 /* Build a name for an entry in the stub hash table.  */
4063 
4064 static char *
4065 ppc_stub_name (const asection *input_section,
4066 	       const asection *sym_sec,
4067 	       const struct ppc_link_hash_entry *h,
4068 	       const Elf_Internal_Rela *rel)
4069 {
4070   char *stub_name;
4071   bfd_size_type len;
4072 
4073   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
4074      offsets from a sym as a branch target?  In fact, we could
4075      probably assume the addend is always zero.  */
4076   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
4077 
4078   if (h)
4079     {
4080       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
4081       stub_name = bfd_malloc (len);
4082       if (stub_name == NULL)
4083 	return stub_name;
4084 
4085       sprintf (stub_name, "%08x.%s+%x",
4086 	       input_section->id & 0xffffffff,
4087 	       h->elf.root.root.string,
4088 	       (int) rel->r_addend & 0xffffffff);
4089     }
4090   else
4091     {
4092       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
4093       stub_name = bfd_malloc (len);
4094       if (stub_name == NULL)
4095 	return stub_name;
4096 
4097       sprintf (stub_name, "%08x.%x:%x+%x",
4098 	       input_section->id & 0xffffffff,
4099 	       sym_sec->id & 0xffffffff,
4100 	       (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
4101 	       (int) rel->r_addend & 0xffffffff);
4102     }
4103   if (stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
4104     stub_name[len - 2] = 0;
4105   return stub_name;
4106 }
4107 
4108 /* Look up an entry in the stub hash.  Stub entries are cached because
4109    creating the stub name takes a bit of time.  */
4110 
4111 static struct ppc_stub_hash_entry *
4112 ppc_get_stub_entry (const asection *input_section,
4113 		    const asection *sym_sec,
4114 		    struct ppc_link_hash_entry *h,
4115 		    const Elf_Internal_Rela *rel,
4116 		    struct ppc_link_hash_table *htab)
4117 {
4118   struct ppc_stub_hash_entry *stub_entry;
4119   const asection *id_sec;
4120 
4121   /* If this input section is part of a group of sections sharing one
4122      stub section, then use the id of the first section in the group.
4123      Stub names need to include a section id, as there may well be
4124      more than one stub used to reach say, printf, and we need to
4125      distinguish between them.  */
4126   id_sec = htab->stub_group[input_section->id].link_sec;
4127 
4128   if (h != NULL && h->u.stub_cache != NULL
4129       && h->u.stub_cache->h == h
4130       && h->u.stub_cache->id_sec == id_sec)
4131     {
4132       stub_entry = h->u.stub_cache;
4133     }
4134   else
4135     {
4136       char *stub_name;
4137 
4138       stub_name = ppc_stub_name (id_sec, sym_sec, h, rel);
4139       if (stub_name == NULL)
4140 	return NULL;
4141 
4142       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
4143 					 stub_name, FALSE, FALSE);
4144       if (h != NULL)
4145 	h->u.stub_cache = stub_entry;
4146 
4147       free (stub_name);
4148     }
4149 
4150   return stub_entry;
4151 }
4152 
4153 /* Add a new stub entry to the stub hash.  Not all fields of the new
4154    stub entry are initialised.  */
4155 
4156 static struct ppc_stub_hash_entry *
4157 ppc_add_stub (const char *stub_name,
4158 	      asection *section,
4159 	      struct bfd_link_info *info)
4160 {
4161   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4162   asection *link_sec;
4163   asection *stub_sec;
4164   struct ppc_stub_hash_entry *stub_entry;
4165 
4166   link_sec = htab->stub_group[section->id].link_sec;
4167   stub_sec = htab->stub_group[section->id].stub_sec;
4168   if (stub_sec == NULL)
4169     {
4170       stub_sec = htab->stub_group[link_sec->id].stub_sec;
4171       if (stub_sec == NULL)
4172 	{
4173 	  size_t namelen;
4174 	  bfd_size_type len;
4175 	  char *s_name;
4176 
4177 	  namelen = strlen (link_sec->name);
4178 	  len = namelen + sizeof (STUB_SUFFIX);
4179 	  s_name = bfd_alloc (htab->stub_bfd, len);
4180 	  if (s_name == NULL)
4181 	    return NULL;
4182 
4183 	  memcpy (s_name, link_sec->name, namelen);
4184 	  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
4185 	  stub_sec = (*htab->add_stub_section) (s_name, link_sec);
4186 	  if (stub_sec == NULL)
4187 	    return NULL;
4188 	  htab->stub_group[link_sec->id].stub_sec = stub_sec;
4189 	}
4190       htab->stub_group[section->id].stub_sec = stub_sec;
4191     }
4192 
4193   /* Enter this entry into the linker stub hash table.  */
4194   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
4195 				     TRUE, FALSE);
4196   if (stub_entry == NULL)
4197     {
4198       info->callbacks->einfo (_("%P: %B: cannot create stub entry %s\n"),
4199 			      section->owner, stub_name);
4200       return NULL;
4201     }
4202 
4203   stub_entry->stub_sec = stub_sec;
4204   stub_entry->stub_offset = 0;
4205   stub_entry->id_sec = link_sec;
4206   return stub_entry;
4207 }
4208 
4209 /* Create sections for linker generated code.  */
4210 
4211 static bfd_boolean
4212 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
4213 {
4214   struct ppc_link_hash_table *htab;
4215   flagword flags;
4216 
4217   htab = ppc_hash_table (info);
4218   if (htab == NULL)
4219     return FALSE;
4220 
4221   /* Create .sfpr for code to save and restore fp regs.  */
4222   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
4223 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4224   htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
4225 						   flags);
4226   if (htab->sfpr == NULL
4227       || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
4228     return FALSE;
4229 
4230   /* Create .glink for lazy dynamic linking support.  */
4231   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
4232 						    flags);
4233   if (htab->glink == NULL
4234       || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
4235     return FALSE;
4236 
4237   if (!info->no_ld_generated_unwind_info)
4238     {
4239       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
4240 	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4241       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
4242 								 ".eh_frame",
4243 								 flags);
4244       if (htab->glink_eh_frame == NULL
4245 	  || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
4246 	return FALSE;
4247     }
4248 
4249   flags = SEC_ALLOC | SEC_LINKER_CREATED;
4250   htab->iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
4251   if (htab->iplt == NULL
4252       || ! bfd_set_section_alignment (dynobj, htab->iplt, 3))
4253     return FALSE;
4254 
4255   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4256 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4257   htab->reliplt = bfd_make_section_anyway_with_flags (dynobj,
4258 						      ".rela.iplt",
4259 						      flags);
4260   if (htab->reliplt == NULL
4261       || ! bfd_set_section_alignment (dynobj, htab->reliplt, 3))
4262     return FALSE;
4263 
4264   /* Create branch lookup table for plt_branch stubs.  */
4265   flags = (SEC_ALLOC | SEC_LOAD
4266 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4267   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
4268 						   flags);
4269   if (htab->brlt == NULL
4270       || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
4271     return FALSE;
4272 
4273   if (!info->shared)
4274     return TRUE;
4275 
4276   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4277 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4278   htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
4279 						      ".rela.branch_lt",
4280 						      flags);
4281   if (htab->relbrlt == NULL
4282       || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
4283     return FALSE;
4284 
4285   return TRUE;
4286 }
4287 
4288 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
4289    not already done.  */
4290 
4291 static bfd_boolean
4292 create_got_section (bfd *abfd, struct bfd_link_info *info)
4293 {
4294   asection *got, *relgot;
4295   flagword flags;
4296   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4297 
4298   if (!is_ppc64_elf (abfd))
4299     return FALSE;
4300   if (htab == NULL)
4301     return FALSE;
4302 
4303   if (!htab->got)
4304     {
4305       if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
4306 	return FALSE;
4307 
4308       htab->got = bfd_get_linker_section (htab->elf.dynobj, ".got");
4309       if (!htab->got)
4310 	abort ();
4311     }
4312 
4313   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4314 	   | SEC_LINKER_CREATED);
4315 
4316   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4317   if (!got
4318       || !bfd_set_section_alignment (abfd, got, 3))
4319     return FALSE;
4320 
4321   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
4322 					       flags | SEC_READONLY);
4323   if (!relgot
4324       || ! bfd_set_section_alignment (abfd, relgot, 3))
4325     return FALSE;
4326 
4327   ppc64_elf_tdata (abfd)->got = got;
4328   ppc64_elf_tdata (abfd)->relgot = relgot;
4329   return TRUE;
4330 }
4331 
4332 /* Create the dynamic sections, and set up shortcuts.  */
4333 
4334 static bfd_boolean
4335 ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
4336 {
4337   struct ppc_link_hash_table *htab;
4338 
4339   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
4340     return FALSE;
4341 
4342   htab = ppc_hash_table (info);
4343   if (htab == NULL)
4344     return FALSE;
4345 
4346   if (!htab->got)
4347     htab->got = bfd_get_linker_section (dynobj, ".got");
4348   htab->plt = bfd_get_linker_section (dynobj, ".plt");
4349   htab->relplt = bfd_get_linker_section (dynobj, ".rela.plt");
4350   htab->dynbss = bfd_get_linker_section (dynobj, ".dynbss");
4351   if (!info->shared)
4352     htab->relbss = bfd_get_linker_section (dynobj, ".rela.bss");
4353 
4354   if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
4355       || (!info->shared && !htab->relbss))
4356     abort ();
4357 
4358   return TRUE;
4359 }
4360 
4361 /* Follow indirect and warning symbol links.  */
4362 
4363 static inline struct bfd_link_hash_entry *
4364 follow_link (struct bfd_link_hash_entry *h)
4365 {
4366   while (h->type == bfd_link_hash_indirect
4367 	 || h->type == bfd_link_hash_warning)
4368     h = h->u.i.link;
4369   return h;
4370 }
4371 
4372 static inline struct elf_link_hash_entry *
4373 elf_follow_link (struct elf_link_hash_entry *h)
4374 {
4375   return (struct elf_link_hash_entry *) follow_link (&h->root);
4376 }
4377 
4378 static inline struct ppc_link_hash_entry *
4379 ppc_follow_link (struct ppc_link_hash_entry *h)
4380 {
4381   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
4382 }
4383 
4384 /* Merge PLT info on FROM with that on TO.  */
4385 
4386 static void
4387 move_plt_plist (struct ppc_link_hash_entry *from,
4388 		struct ppc_link_hash_entry *to)
4389 {
4390   if (from->elf.plt.plist != NULL)
4391     {
4392       if (to->elf.plt.plist != NULL)
4393 	{
4394 	  struct plt_entry **entp;
4395 	  struct plt_entry *ent;
4396 
4397 	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
4398 	    {
4399 	      struct plt_entry *dent;
4400 
4401 	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
4402 		if (dent->addend == ent->addend)
4403 		  {
4404 		    dent->plt.refcount += ent->plt.refcount;
4405 		    *entp = ent->next;
4406 		    break;
4407 		  }
4408 	      if (dent == NULL)
4409 		entp = &ent->next;
4410 	    }
4411 	  *entp = to->elf.plt.plist;
4412 	}
4413 
4414       to->elf.plt.plist = from->elf.plt.plist;
4415       from->elf.plt.plist = NULL;
4416     }
4417 }
4418 
4419 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
4420 
4421 static void
4422 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
4423 				struct elf_link_hash_entry *dir,
4424 				struct elf_link_hash_entry *ind)
4425 {
4426   struct ppc_link_hash_entry *edir, *eind;
4427 
4428   edir = (struct ppc_link_hash_entry *) dir;
4429   eind = (struct ppc_link_hash_entry *) ind;
4430 
4431   edir->is_func |= eind->is_func;
4432   edir->is_func_descriptor |= eind->is_func_descriptor;
4433   edir->tls_mask |= eind->tls_mask;
4434   if (eind->oh != NULL)
4435     edir->oh = ppc_follow_link (eind->oh);
4436 
4437   /* If called to transfer flags for a weakdef during processing
4438      of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
4439      We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
4440   if (!(ELIMINATE_COPY_RELOCS
4441 	&& eind->elf.root.type != bfd_link_hash_indirect
4442 	&& edir->elf.dynamic_adjusted))
4443     edir->elf.non_got_ref |= eind->elf.non_got_ref;
4444 
4445   edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
4446   edir->elf.ref_regular |= eind->elf.ref_regular;
4447   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
4448   edir->elf.needs_plt |= eind->elf.needs_plt;
4449 
4450   /* Copy over any dynamic relocs we may have on the indirect sym.  */
4451   if (eind->dyn_relocs != NULL)
4452     {
4453       if (edir->dyn_relocs != NULL)
4454 	{
4455 	  struct elf_dyn_relocs **pp;
4456 	  struct elf_dyn_relocs *p;
4457 
4458 	  /* Add reloc counts against the indirect sym to the direct sym
4459 	     list.  Merge any entries against the same section.  */
4460 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
4461 	    {
4462 	      struct elf_dyn_relocs *q;
4463 
4464 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
4465 		if (q->sec == p->sec)
4466 		  {
4467 		    q->pc_count += p->pc_count;
4468 		    q->count += p->count;
4469 		    *pp = p->next;
4470 		    break;
4471 		  }
4472 	      if (q == NULL)
4473 		pp = &p->next;
4474 	    }
4475 	  *pp = edir->dyn_relocs;
4476 	}
4477 
4478       edir->dyn_relocs = eind->dyn_relocs;
4479       eind->dyn_relocs = NULL;
4480     }
4481 
4482   /* If we were called to copy over info for a weak sym, that's all.
4483      You might think dyn_relocs need not be copied over;  After all,
4484      both syms will be dynamic or both non-dynamic so we're just
4485      moving reloc accounting around.  However, ELIMINATE_COPY_RELOCS
4486      code in ppc64_elf_adjust_dynamic_symbol needs to check for
4487      dyn_relocs in read-only sections, and it does so on what is the
4488      DIR sym here.  */
4489   if (eind->elf.root.type != bfd_link_hash_indirect)
4490     return;
4491 
4492   /* Copy over got entries that we may have already seen to the
4493      symbol which just became indirect.  */
4494   if (eind->elf.got.glist != NULL)
4495     {
4496       if (edir->elf.got.glist != NULL)
4497 	{
4498 	  struct got_entry **entp;
4499 	  struct got_entry *ent;
4500 
4501 	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
4502 	    {
4503 	      struct got_entry *dent;
4504 
4505 	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
4506 		if (dent->addend == ent->addend
4507 		    && dent->owner == ent->owner
4508 		    && dent->tls_type == ent->tls_type)
4509 		  {
4510 		    dent->got.refcount += ent->got.refcount;
4511 		    *entp = ent->next;
4512 		    break;
4513 		  }
4514 	      if (dent == NULL)
4515 		entp = &ent->next;
4516 	    }
4517 	  *entp = edir->elf.got.glist;
4518 	}
4519 
4520       edir->elf.got.glist = eind->elf.got.glist;
4521       eind->elf.got.glist = NULL;
4522     }
4523 
4524   /* And plt entries.  */
4525   move_plt_plist (eind, edir);
4526 
4527   if (eind->elf.dynindx != -1)
4528     {
4529       if (edir->elf.dynindx != -1)
4530 	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4531 				edir->elf.dynstr_index);
4532       edir->elf.dynindx = eind->elf.dynindx;
4533       edir->elf.dynstr_index = eind->elf.dynstr_index;
4534       eind->elf.dynindx = -1;
4535       eind->elf.dynstr_index = 0;
4536     }
4537 }
4538 
4539 /* Find the function descriptor hash entry from the given function code
4540    hash entry FH.  Link the entries via their OH fields.  */
4541 
4542 static struct ppc_link_hash_entry *
4543 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4544 {
4545   struct ppc_link_hash_entry *fdh = fh->oh;
4546 
4547   if (fdh == NULL)
4548     {
4549       const char *fd_name = fh->elf.root.root.string + 1;
4550 
4551       fdh = (struct ppc_link_hash_entry *)
4552 	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
4553       if (fdh == NULL)
4554 	return fdh;
4555 
4556       fdh->is_func_descriptor = 1;
4557       fdh->oh = fh;
4558       fh->is_func = 1;
4559       fh->oh = fdh;
4560     }
4561 
4562   return ppc_follow_link (fdh);
4563 }
4564 
4565 /* Make a fake function descriptor sym for the code sym FH.  */
4566 
4567 static struct ppc_link_hash_entry *
4568 make_fdh (struct bfd_link_info *info,
4569 	  struct ppc_link_hash_entry *fh)
4570 {
4571   bfd *abfd;
4572   asymbol *newsym;
4573   struct bfd_link_hash_entry *bh;
4574   struct ppc_link_hash_entry *fdh;
4575 
4576   abfd = fh->elf.root.u.undef.abfd;
4577   newsym = bfd_make_empty_symbol (abfd);
4578   newsym->name = fh->elf.root.root.string + 1;
4579   newsym->section = bfd_und_section_ptr;
4580   newsym->value = 0;
4581   newsym->flags = BSF_WEAK;
4582 
4583   bh = NULL;
4584   if (!_bfd_generic_link_add_one_symbol (info, abfd, newsym->name,
4585 					 newsym->flags, newsym->section,
4586 					 newsym->value, NULL, FALSE, FALSE,
4587 					 &bh))
4588     return NULL;
4589 
4590   fdh = (struct ppc_link_hash_entry *) bh;
4591   fdh->elf.non_elf = 0;
4592   fdh->fake = 1;
4593   fdh->is_func_descriptor = 1;
4594   fdh->oh = fh;
4595   fh->is_func = 1;
4596   fh->oh = fdh;
4597   return fdh;
4598 }
4599 
4600 /* Fix function descriptor symbols defined in .opd sections to be
4601    function type.  */
4602 
4603 static bfd_boolean
4604 ppc64_elf_add_symbol_hook (bfd *ibfd,
4605 			   struct bfd_link_info *info,
4606 			   Elf_Internal_Sym *isym,
4607 			   const char **name ATTRIBUTE_UNUSED,
4608 			   flagword *flags ATTRIBUTE_UNUSED,
4609 			   asection **sec,
4610 			   bfd_vma *value ATTRIBUTE_UNUSED)
4611 {
4612   if ((ibfd->flags & DYNAMIC) == 0
4613       && ELF_ST_BIND (isym->st_info) == STB_GNU_UNIQUE)
4614     elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4615 
4616   if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4617     {
4618       if ((ibfd->flags & DYNAMIC) == 0)
4619 	elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4620     }
4621   else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC)
4622     ;
4623   else if (*sec != NULL
4624 	   && strcmp ((*sec)->name, ".opd") == 0)
4625     isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4626 
4627   return TRUE;
4628 }
4629 
4630 /* This function makes an old ABI object reference to ".bar" cause the
4631    inclusion of a new ABI object archive that defines "bar".
4632    NAME is a symbol defined in an archive.  Return a symbol in the hash
4633    table that might be satisfied by the archive symbols.  */
4634 
4635 static struct elf_link_hash_entry *
4636 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4637 				 struct bfd_link_info *info,
4638 				 const char *name)
4639 {
4640   struct elf_link_hash_entry *h;
4641   char *dot_name;
4642   size_t len;
4643 
4644   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4645   if (h != NULL
4646       /* Don't return this sym if it is a fake function descriptor
4647 	 created by add_symbol_adjust.  */
4648       && !(h->root.type == bfd_link_hash_undefweak
4649 	   && ((struct ppc_link_hash_entry *) h)->fake))
4650     return h;
4651 
4652   if (name[0] == '.')
4653     return h;
4654 
4655   len = strlen (name);
4656   dot_name = bfd_alloc (abfd, len + 2);
4657   if (dot_name == NULL)
4658     return (struct elf_link_hash_entry *) 0 - 1;
4659   dot_name[0] = '.';
4660   memcpy (dot_name + 1, name, len + 1);
4661   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4662   bfd_release (abfd, dot_name);
4663   return h;
4664 }
4665 
4666 /* This function satisfies all old ABI object references to ".bar" if a
4667    new ABI object defines "bar".  Well, at least, undefined dot symbols
4668    are made weak.  This stops later archive searches from including an
4669    object if we already have a function descriptor definition.  It also
4670    prevents the linker complaining about undefined symbols.
4671    We also check and correct mismatched symbol visibility here.  The
4672    most restrictive visibility of the function descriptor and the
4673    function entry symbol is used.  */
4674 
4675 static bfd_boolean
4676 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4677 {
4678   struct ppc_link_hash_table *htab;
4679   struct ppc_link_hash_entry *fdh;
4680 
4681   if (eh->elf.root.type == bfd_link_hash_indirect)
4682     return TRUE;
4683 
4684   if (eh->elf.root.type == bfd_link_hash_warning)
4685     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4686 
4687   if (eh->elf.root.root.string[0] != '.')
4688     abort ();
4689 
4690   htab = ppc_hash_table (info);
4691   if (htab == NULL)
4692     return FALSE;
4693 
4694   fdh = lookup_fdh (eh, htab);
4695   if (fdh == NULL)
4696     {
4697       if (!info->relocatable
4698 	  && (eh->elf.root.type == bfd_link_hash_undefined
4699 	      || eh->elf.root.type == bfd_link_hash_undefweak)
4700 	  && eh->elf.ref_regular)
4701 	{
4702 	  /* Make an undefweak function descriptor sym, which is enough to
4703 	     pull in an --as-needed shared lib, but won't cause link
4704 	     errors.  Archives are handled elsewhere.  */
4705 	  fdh = make_fdh (info, eh);
4706 	  if (fdh == NULL)
4707 	    return FALSE;
4708 	  fdh->elf.ref_regular = 1;
4709 	}
4710     }
4711   else
4712     {
4713       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4714       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4715       if (entry_vis < descr_vis)
4716 	fdh->elf.other += entry_vis - descr_vis;
4717       else if (entry_vis > descr_vis)
4718 	eh->elf.other += descr_vis - entry_vis;
4719 
4720       if ((fdh->elf.root.type == bfd_link_hash_defined
4721 	   || fdh->elf.root.type == bfd_link_hash_defweak)
4722 	  && eh->elf.root.type == bfd_link_hash_undefined)
4723 	{
4724 	  eh->elf.root.type = bfd_link_hash_undefweak;
4725 	  eh->was_undefined = 1;
4726 	  htab->twiddled_syms = 1;
4727 	}
4728     }
4729 
4730   return TRUE;
4731 }
4732 
4733 /* Process list of dot-symbols we made in link_hash_newfunc.  */
4734 
4735 static bfd_boolean
4736 ppc64_elf_process_dot_syms (bfd *ibfd, struct bfd_link_info *info)
4737 {
4738   struct ppc_link_hash_table *htab;
4739   struct ppc_link_hash_entry **p, *eh;
4740 
4741   if (!is_ppc64_elf (info->output_bfd))
4742     return TRUE;
4743   htab = ppc_hash_table (info);
4744   if (htab == NULL)
4745     return FALSE;
4746 
4747   if (is_ppc64_elf (ibfd))
4748     {
4749       p = &htab->dot_syms;
4750       while ((eh = *p) != NULL)
4751 	{
4752 	  *p = NULL;
4753 	  if (!add_symbol_adjust (eh, info))
4754 	    return FALSE;
4755 	  p = &eh->u.next_dot_sym;
4756 	}
4757     }
4758 
4759   /* Clear the list for non-ppc64 input files.  */
4760   p = &htab->dot_syms;
4761   while ((eh = *p) != NULL)
4762     {
4763       *p = NULL;
4764       p = &eh->u.next_dot_sym;
4765     }
4766 
4767   /* We need to fix the undefs list for any syms we have twiddled to
4768      undef_weak.  */
4769   if (htab->twiddled_syms)
4770     {
4771       bfd_link_repair_undef_list (&htab->elf.root);
4772       htab->twiddled_syms = 0;
4773     }
4774   return TRUE;
4775 }
4776 
4777 /* Undo hash table changes when an --as-needed input file is determined
4778    not to be needed.  */
4779 
4780 static bfd_boolean
4781 ppc64_elf_as_needed_cleanup (bfd *ibfd ATTRIBUTE_UNUSED,
4782 			     struct bfd_link_info *info)
4783 {
4784   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4785 
4786   if (htab == NULL)
4787     return FALSE;
4788 
4789   htab->dot_syms = NULL;
4790   return TRUE;
4791 }
4792 
4793 /* If --just-symbols against a final linked binary, then assume we need
4794    toc adjusting stubs when calling functions defined there.  */
4795 
4796 static void
4797 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4798 {
4799   if ((sec->flags & SEC_CODE) != 0
4800       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4801       && is_ppc64_elf (sec->owner))
4802     {
4803       asection *got = bfd_get_section_by_name (sec->owner, ".got");
4804       if (got != NULL
4805 	  && got->size >= elf_backend_got_header_size
4806 	  && bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4807 	sec->has_toc_reloc = 1;
4808     }
4809   _bfd_elf_link_just_syms (sec, info);
4810 }
4811 
4812 static struct plt_entry **
4813 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4814 		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4815 {
4816   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4817   struct plt_entry **local_plt;
4818   unsigned char *local_got_tls_masks;
4819 
4820   if (local_got_ents == NULL)
4821     {
4822       bfd_size_type size = symtab_hdr->sh_info;
4823 
4824       size *= (sizeof (*local_got_ents)
4825 	       + sizeof (*local_plt)
4826 	       + sizeof (*local_got_tls_masks));
4827       local_got_ents = bfd_zalloc (abfd, size);
4828       if (local_got_ents == NULL)
4829 	return NULL;
4830       elf_local_got_ents (abfd) = local_got_ents;
4831     }
4832 
4833   if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0)
4834     {
4835       struct got_entry *ent;
4836 
4837       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4838 	if (ent->addend == r_addend
4839 	    && ent->owner == abfd
4840 	    && ent->tls_type == tls_type)
4841 	  break;
4842       if (ent == NULL)
4843 	{
4844 	  bfd_size_type amt = sizeof (*ent);
4845 	  ent = bfd_alloc (abfd, amt);
4846 	  if (ent == NULL)
4847 	    return FALSE;
4848 	  ent->next = local_got_ents[r_symndx];
4849 	  ent->addend = r_addend;
4850 	  ent->owner = abfd;
4851 	  ent->tls_type = tls_type;
4852 	  ent->is_indirect = FALSE;
4853 	  ent->got.refcount = 0;
4854 	  local_got_ents[r_symndx] = ent;
4855 	}
4856       ent->got.refcount += 1;
4857     }
4858 
4859   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4860   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4861   local_got_tls_masks[r_symndx] |= tls_type;
4862 
4863   return local_plt + r_symndx;
4864 }
4865 
4866 static bfd_boolean
4867 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4868 {
4869   struct plt_entry *ent;
4870 
4871   for (ent = *plist; ent != NULL; ent = ent->next)
4872     if (ent->addend == addend)
4873       break;
4874   if (ent == NULL)
4875     {
4876       bfd_size_type amt = sizeof (*ent);
4877       ent = bfd_alloc (abfd, amt);
4878       if (ent == NULL)
4879 	return FALSE;
4880       ent->next = *plist;
4881       ent->addend = addend;
4882       ent->plt.refcount = 0;
4883       *plist = ent;
4884     }
4885   ent->plt.refcount += 1;
4886   return TRUE;
4887 }
4888 
4889 static bfd_boolean
4890 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4891 {
4892   return (r_type == R_PPC64_REL24
4893 	  || r_type == R_PPC64_REL14
4894 	  || r_type == R_PPC64_REL14_BRTAKEN
4895 	  || r_type == R_PPC64_REL14_BRNTAKEN
4896 	  || r_type == R_PPC64_ADDR24
4897 	  || r_type == R_PPC64_ADDR14
4898 	  || r_type == R_PPC64_ADDR14_BRTAKEN
4899 	  || r_type == R_PPC64_ADDR14_BRNTAKEN);
4900 }
4901 
4902 /* Look through the relocs for a section during the first phase, and
4903    calculate needed space in the global offset table, procedure
4904    linkage table, and dynamic reloc sections.  */
4905 
4906 static bfd_boolean
4907 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4908 			asection *sec, const Elf_Internal_Rela *relocs)
4909 {
4910   struct ppc_link_hash_table *htab;
4911   Elf_Internal_Shdr *symtab_hdr;
4912   struct elf_link_hash_entry **sym_hashes;
4913   const Elf_Internal_Rela *rel;
4914   const Elf_Internal_Rela *rel_end;
4915   asection *sreloc;
4916   asection **opd_sym_map;
4917   struct elf_link_hash_entry *tga, *dottga;
4918 
4919   if (info->relocatable)
4920     return TRUE;
4921 
4922   /* Don't do anything special with non-loaded, non-alloced sections.
4923      In particular, any relocs in such sections should not affect GOT
4924      and PLT reference counting (ie. we don't allow them to create GOT
4925      or PLT entries), there's no possibility or desire to optimize TLS
4926      relocs, and there's not much point in propagating relocs to shared
4927      libs that the dynamic linker won't relocate.  */
4928   if ((sec->flags & SEC_ALLOC) == 0)
4929     return TRUE;
4930 
4931   BFD_ASSERT (is_ppc64_elf (abfd));
4932 
4933   htab = ppc_hash_table (info);
4934   if (htab == NULL)
4935     return FALSE;
4936 
4937   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4938 			      FALSE, FALSE, TRUE);
4939   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4940 				 FALSE, FALSE, TRUE);
4941   symtab_hdr = &elf_symtab_hdr (abfd);
4942   sym_hashes = elf_sym_hashes (abfd);
4943   sreloc = NULL;
4944   opd_sym_map = NULL;
4945   if (strcmp (sec->name, ".opd") == 0)
4946     {
4947       /* Garbage collection needs some extra help with .opd sections.
4948 	 We don't want to necessarily keep everything referenced by
4949 	 relocs in .opd, as that would keep all functions.  Instead,
4950 	 if we reference an .opd symbol (a function descriptor), we
4951 	 want to keep the function code symbol's section.  This is
4952 	 easy for global symbols, but for local syms we need to keep
4953 	 information about the associated function section.  */
4954       bfd_size_type amt;
4955 
4956       amt = sec->size * sizeof (*opd_sym_map) / 8;
4957       opd_sym_map = bfd_zalloc (abfd, amt);
4958       if (opd_sym_map == NULL)
4959 	return FALSE;
4960       ppc64_elf_section_data (sec)->u.opd.func_sec = opd_sym_map;
4961       BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
4962       ppc64_elf_section_data (sec)->sec_type = sec_opd;
4963     }
4964 
4965   if (htab->sfpr == NULL
4966       && !create_linkage_sections (htab->elf.dynobj, info))
4967     return FALSE;
4968 
4969   rel_end = relocs + sec->reloc_count;
4970   for (rel = relocs; rel < rel_end; rel++)
4971     {
4972       unsigned long r_symndx;
4973       struct elf_link_hash_entry *h;
4974       enum elf_ppc64_reloc_type r_type;
4975       int tls_type;
4976       struct _ppc64_elf_section_data *ppc64_sec;
4977       struct plt_entry **ifunc;
4978 
4979       r_symndx = ELF64_R_SYM (rel->r_info);
4980       if (r_symndx < symtab_hdr->sh_info)
4981 	h = NULL;
4982       else
4983 	{
4984 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4985 	  h = elf_follow_link (h);
4986 	}
4987 
4988       tls_type = 0;
4989       ifunc = NULL;
4990       if (h != NULL)
4991 	{
4992 	  if (h->type == STT_GNU_IFUNC)
4993 	    {
4994 	      h->needs_plt = 1;
4995 	      ifunc = &h->plt.plist;
4996 	    }
4997 	}
4998       else
4999 	{
5000 	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5001 							  abfd, r_symndx);
5002 	  if (isym == NULL)
5003 	    return FALSE;
5004 
5005 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
5006 	    {
5007 	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
5008 					     rel->r_addend, PLT_IFUNC);
5009 	      if (ifunc == NULL)
5010 		return FALSE;
5011 	    }
5012 	}
5013       r_type = ELF64_R_TYPE (rel->r_info);
5014       if (is_branch_reloc (r_type))
5015 	{
5016 	  if (h != NULL && (h == tga || h == dottga))
5017 	    {
5018 	      if (rel != relocs
5019 		  && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
5020 		      || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
5021 		/* We have a new-style __tls_get_addr call with a marker
5022 		   reloc.  */
5023 		;
5024 	      else
5025 		/* Mark this section as having an old-style call.  */
5026 		sec->has_tls_get_addr_call = 1;
5027 	    }
5028 
5029 	  /* STT_GNU_IFUNC symbols must have a PLT entry.  */
5030 	  if (ifunc != NULL
5031 	      && !update_plt_info (abfd, ifunc, rel->r_addend))
5032 	    return FALSE;
5033 	}
5034 
5035       switch (r_type)
5036 	{
5037 	case R_PPC64_TLSGD:
5038 	case R_PPC64_TLSLD:
5039 	  /* These special tls relocs tie a call to __tls_get_addr with
5040 	     its parameter symbol.  */
5041 	  break;
5042 
5043 	case R_PPC64_GOT_TLSLD16:
5044 	case R_PPC64_GOT_TLSLD16_LO:
5045 	case R_PPC64_GOT_TLSLD16_HI:
5046 	case R_PPC64_GOT_TLSLD16_HA:
5047 	  tls_type = TLS_TLS | TLS_LD;
5048 	  goto dogottls;
5049 
5050 	case R_PPC64_GOT_TLSGD16:
5051 	case R_PPC64_GOT_TLSGD16_LO:
5052 	case R_PPC64_GOT_TLSGD16_HI:
5053 	case R_PPC64_GOT_TLSGD16_HA:
5054 	  tls_type = TLS_TLS | TLS_GD;
5055 	  goto dogottls;
5056 
5057 	case R_PPC64_GOT_TPREL16_DS:
5058 	case R_PPC64_GOT_TPREL16_LO_DS:
5059 	case R_PPC64_GOT_TPREL16_HI:
5060 	case R_PPC64_GOT_TPREL16_HA:
5061 	  if (!info->executable)
5062 	    info->flags |= DF_STATIC_TLS;
5063 	  tls_type = TLS_TLS | TLS_TPREL;
5064 	  goto dogottls;
5065 
5066 	case R_PPC64_GOT_DTPREL16_DS:
5067 	case R_PPC64_GOT_DTPREL16_LO_DS:
5068 	case R_PPC64_GOT_DTPREL16_HI:
5069 	case R_PPC64_GOT_DTPREL16_HA:
5070 	  tls_type = TLS_TLS | TLS_DTPREL;
5071 	dogottls:
5072 	  sec->has_tls_reloc = 1;
5073 	  /* Fall thru */
5074 
5075 	case R_PPC64_GOT16:
5076 	case R_PPC64_GOT16_DS:
5077 	case R_PPC64_GOT16_HA:
5078 	case R_PPC64_GOT16_HI:
5079 	case R_PPC64_GOT16_LO:
5080 	case R_PPC64_GOT16_LO_DS:
5081 	  /* This symbol requires a global offset table entry.  */
5082 	  sec->has_toc_reloc = 1;
5083 	  if (r_type == R_PPC64_GOT_TLSLD16
5084 	      || r_type == R_PPC64_GOT_TLSGD16
5085 	      || r_type == R_PPC64_GOT_TPREL16_DS
5086 	      || r_type == R_PPC64_GOT_DTPREL16_DS
5087 	      || r_type == R_PPC64_GOT16
5088 	      || r_type == R_PPC64_GOT16_DS)
5089 	    {
5090 	      htab->do_multi_toc = 1;
5091 	      ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5092 	    }
5093 
5094 	  if (ppc64_elf_tdata (abfd)->got == NULL
5095 	      && !create_got_section (abfd, info))
5096 	    return FALSE;
5097 
5098 	  if (h != NULL)
5099 	    {
5100 	      struct ppc_link_hash_entry *eh;
5101 	      struct got_entry *ent;
5102 
5103 	      eh = (struct ppc_link_hash_entry *) h;
5104 	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
5105 		if (ent->addend == rel->r_addend
5106 		    && ent->owner == abfd
5107 		    && ent->tls_type == tls_type)
5108 		  break;
5109 	      if (ent == NULL)
5110 		{
5111 		  bfd_size_type amt = sizeof (*ent);
5112 		  ent = bfd_alloc (abfd, amt);
5113 		  if (ent == NULL)
5114 		    return FALSE;
5115 		  ent->next = eh->elf.got.glist;
5116 		  ent->addend = rel->r_addend;
5117 		  ent->owner = abfd;
5118 		  ent->tls_type = tls_type;
5119 		  ent->is_indirect = FALSE;
5120 		  ent->got.refcount = 0;
5121 		  eh->elf.got.glist = ent;
5122 		}
5123 	      ent->got.refcount += 1;
5124 	      eh->tls_mask |= tls_type;
5125 	    }
5126 	  else
5127 	    /* This is a global offset table entry for a local symbol.  */
5128 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5129 					rel->r_addend, tls_type))
5130 	      return FALSE;
5131 	  break;
5132 
5133 	case R_PPC64_PLT16_HA:
5134 	case R_PPC64_PLT16_HI:
5135 	case R_PPC64_PLT16_LO:
5136 	case R_PPC64_PLT32:
5137 	case R_PPC64_PLT64:
5138 	  /* This symbol requires a procedure linkage table entry.  We
5139 	     actually build the entry in adjust_dynamic_symbol,
5140 	     because this might be a case of linking PIC code without
5141 	     linking in any dynamic objects, in which case we don't
5142 	     need to generate a procedure linkage table after all.  */
5143 	  if (h == NULL)
5144 	    {
5145 	      /* It does not make sense to have a procedure linkage
5146 		 table entry for a local symbol.  */
5147 	      bfd_set_error (bfd_error_bad_value);
5148 	      return FALSE;
5149 	    }
5150 	  else
5151 	    {
5152 	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5153 		return FALSE;
5154 	      h->needs_plt = 1;
5155 	      if (h->root.root.string[0] == '.'
5156 		  && h->root.root.string[1] != '\0')
5157 		((struct ppc_link_hash_entry *) h)->is_func = 1;
5158 	    }
5159 	  break;
5160 
5161 	  /* The following relocations don't need to propagate the
5162 	     relocation if linking a shared object since they are
5163 	     section relative.  */
5164 	case R_PPC64_SECTOFF:
5165 	case R_PPC64_SECTOFF_LO:
5166 	case R_PPC64_SECTOFF_HI:
5167 	case R_PPC64_SECTOFF_HA:
5168 	case R_PPC64_SECTOFF_DS:
5169 	case R_PPC64_SECTOFF_LO_DS:
5170 	case R_PPC64_DTPREL16:
5171 	case R_PPC64_DTPREL16_LO:
5172 	case R_PPC64_DTPREL16_HI:
5173 	case R_PPC64_DTPREL16_HA:
5174 	case R_PPC64_DTPREL16_DS:
5175 	case R_PPC64_DTPREL16_LO_DS:
5176 	case R_PPC64_DTPREL16_HIGHER:
5177 	case R_PPC64_DTPREL16_HIGHERA:
5178 	case R_PPC64_DTPREL16_HIGHEST:
5179 	case R_PPC64_DTPREL16_HIGHESTA:
5180 	  break;
5181 
5182 	  /* Nor do these.  */
5183 	case R_PPC64_REL16:
5184 	case R_PPC64_REL16_LO:
5185 	case R_PPC64_REL16_HI:
5186 	case R_PPC64_REL16_HA:
5187 	  break;
5188 
5189 	case R_PPC64_TOC16:
5190 	case R_PPC64_TOC16_DS:
5191 	  htab->do_multi_toc = 1;
5192 	  ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5193 	case R_PPC64_TOC16_LO:
5194 	case R_PPC64_TOC16_HI:
5195 	case R_PPC64_TOC16_HA:
5196 	case R_PPC64_TOC16_LO_DS:
5197 	  sec->has_toc_reloc = 1;
5198 	  break;
5199 
5200 	  /* This relocation describes the C++ object vtable hierarchy.
5201 	     Reconstruct it for later use during GC.  */
5202 	case R_PPC64_GNU_VTINHERIT:
5203 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5204 	    return FALSE;
5205 	  break;
5206 
5207 	  /* This relocation describes which C++ vtable entries are actually
5208 	     used.  Record for later use during GC.  */
5209 	case R_PPC64_GNU_VTENTRY:
5210 	  BFD_ASSERT (h != NULL);
5211 	  if (h != NULL
5212 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
5213 	    return FALSE;
5214 	  break;
5215 
5216 	case R_PPC64_REL14:
5217 	case R_PPC64_REL14_BRTAKEN:
5218 	case R_PPC64_REL14_BRNTAKEN:
5219 	  {
5220 	    asection *dest = NULL;
5221 
5222 	    /* Heuristic: If jumping outside our section, chances are
5223 	       we are going to need a stub.  */
5224 	    if (h != NULL)
5225 	      {
5226 		/* If the sym is weak it may be overridden later, so
5227 		   don't assume we know where a weak sym lives.  */
5228 		if (h->root.type == bfd_link_hash_defined)
5229 		  dest = h->root.u.def.section;
5230 	      }
5231 	    else
5232 	      {
5233 		Elf_Internal_Sym *isym;
5234 
5235 		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5236 					      abfd, r_symndx);
5237 		if (isym == NULL)
5238 		  return FALSE;
5239 
5240 		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
5241 	      }
5242 
5243 	    if (dest != sec)
5244 	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
5245 	  }
5246 	  /* Fall through.  */
5247 
5248 	case R_PPC64_REL24:
5249 	  if (h != NULL && ifunc == NULL)
5250 	    {
5251 	      /* We may need a .plt entry if the function this reloc
5252 		 refers to is in a shared lib.  */
5253 	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5254 		return FALSE;
5255 	      h->needs_plt = 1;
5256 	      if (h->root.root.string[0] == '.'
5257 		  && h->root.root.string[1] != '\0')
5258 		((struct ppc_link_hash_entry *) h)->is_func = 1;
5259 	      if (h == tga || h == dottga)
5260 		sec->has_tls_reloc = 1;
5261 	    }
5262 	  break;
5263 
5264 	case R_PPC64_TPREL64:
5265 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
5266 	  if (!info->executable)
5267 	    info->flags |= DF_STATIC_TLS;
5268 	  goto dotlstoc;
5269 
5270 	case R_PPC64_DTPMOD64:
5271 	  if (rel + 1 < rel_end
5272 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
5273 	      && rel[1].r_offset == rel->r_offset + 8)
5274 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
5275 	  else
5276 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
5277 	  goto dotlstoc;
5278 
5279 	case R_PPC64_DTPREL64:
5280 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
5281 	  if (rel != relocs
5282 	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
5283 	      && rel[-1].r_offset == rel->r_offset - 8)
5284 	    /* This is the second reloc of a dtpmod, dtprel pair.
5285 	       Don't mark with TLS_DTPREL.  */
5286 	    goto dodyn;
5287 
5288 	dotlstoc:
5289 	  sec->has_tls_reloc = 1;
5290 	  if (h != NULL)
5291 	    {
5292 	      struct ppc_link_hash_entry *eh;
5293 	      eh = (struct ppc_link_hash_entry *) h;
5294 	      eh->tls_mask |= tls_type;
5295 	    }
5296 	  else
5297 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5298 					rel->r_addend, tls_type))
5299 	      return FALSE;
5300 
5301 	  ppc64_sec = ppc64_elf_section_data (sec);
5302 	  if (ppc64_sec->sec_type != sec_toc)
5303 	    {
5304 	      bfd_size_type amt;
5305 
5306 	      /* One extra to simplify get_tls_mask.  */
5307 	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5308 	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5309 	      if (ppc64_sec->u.toc.symndx == NULL)
5310 		return FALSE;
5311 	      amt = sec->size * sizeof (bfd_vma) / 8;
5312 	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5313 	      if (ppc64_sec->u.toc.add == NULL)
5314 		return FALSE;
5315 	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5316 	      ppc64_sec->sec_type = sec_toc;
5317 	    }
5318 	  BFD_ASSERT (rel->r_offset % 8 == 0);
5319 	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5320 	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5321 
5322 	  /* Mark the second slot of a GD or LD entry.
5323 	     -1 to indicate GD and -2 to indicate LD.  */
5324 	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5325 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5326 	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5327 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5328 	  goto dodyn;
5329 
5330 	case R_PPC64_TPREL16:
5331 	case R_PPC64_TPREL16_LO:
5332 	case R_PPC64_TPREL16_HI:
5333 	case R_PPC64_TPREL16_HA:
5334 	case R_PPC64_TPREL16_DS:
5335 	case R_PPC64_TPREL16_LO_DS:
5336 	case R_PPC64_TPREL16_HIGHER:
5337 	case R_PPC64_TPREL16_HIGHERA:
5338 	case R_PPC64_TPREL16_HIGHEST:
5339 	case R_PPC64_TPREL16_HIGHESTA:
5340 	  if (info->shared)
5341 	    {
5342 	      if (!info->executable)
5343 		info->flags |= DF_STATIC_TLS;
5344 	      goto dodyn;
5345 	    }
5346 	  break;
5347 
5348 	case R_PPC64_ADDR64:
5349 	  if (opd_sym_map != NULL
5350 	      && rel + 1 < rel_end
5351 	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5352 	    {
5353 	      if (h != NULL)
5354 		{
5355 		  if (h->root.root.string[0] == '.'
5356 		      && h->root.root.string[1] != 0
5357 		      && lookup_fdh ((struct ppc_link_hash_entry *) h, htab))
5358 		    ;
5359 		  else
5360 		    ((struct ppc_link_hash_entry *) h)->is_func = 1;
5361 		}
5362 	      else
5363 		{
5364 		  asection *s;
5365 		  Elf_Internal_Sym *isym;
5366 
5367 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5368 						abfd, r_symndx);
5369 		  if (isym == NULL)
5370 		    return FALSE;
5371 
5372 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5373 		  if (s != NULL && s != sec)
5374 		    opd_sym_map[rel->r_offset / 8] = s;
5375 		}
5376 	    }
5377 	  /* Fall through.  */
5378 
5379 	case R_PPC64_REL30:
5380 	case R_PPC64_REL32:
5381 	case R_PPC64_REL64:
5382 	case R_PPC64_ADDR14:
5383 	case R_PPC64_ADDR14_BRNTAKEN:
5384 	case R_PPC64_ADDR14_BRTAKEN:
5385 	case R_PPC64_ADDR16:
5386 	case R_PPC64_ADDR16_DS:
5387 	case R_PPC64_ADDR16_HA:
5388 	case R_PPC64_ADDR16_HI:
5389 	case R_PPC64_ADDR16_HIGHER:
5390 	case R_PPC64_ADDR16_HIGHERA:
5391 	case R_PPC64_ADDR16_HIGHEST:
5392 	case R_PPC64_ADDR16_HIGHESTA:
5393 	case R_PPC64_ADDR16_LO:
5394 	case R_PPC64_ADDR16_LO_DS:
5395 	case R_PPC64_ADDR24:
5396 	case R_PPC64_ADDR32:
5397 	case R_PPC64_UADDR16:
5398 	case R_PPC64_UADDR32:
5399 	case R_PPC64_UADDR64:
5400 	case R_PPC64_TOC:
5401 	  if (h != NULL && !info->shared)
5402 	    /* We may need a copy reloc.  */
5403 	    h->non_got_ref = 1;
5404 
5405 	  /* Don't propagate .opd relocs.  */
5406 	  if (NO_OPD_RELOCS && opd_sym_map != NULL)
5407 	    break;
5408 
5409 	  /* If we are creating a shared library, and this is a reloc
5410 	     against a global symbol, or a non PC relative reloc
5411 	     against a local symbol, then we need to copy the reloc
5412 	     into the shared library.  However, if we are linking with
5413 	     -Bsymbolic, we do not need to copy a reloc against a
5414 	     global symbol which is defined in an object we are
5415 	     including in the link (i.e., DEF_REGULAR is set).  At
5416 	     this point we have not seen all the input files, so it is
5417 	     possible that DEF_REGULAR is not set now but will be set
5418 	     later (it is never cleared).  In case of a weak definition,
5419 	     DEF_REGULAR may be cleared later by a strong definition in
5420 	     a shared library.  We account for that possibility below by
5421 	     storing information in the dyn_relocs field of the hash
5422 	     table entry.  A similar situation occurs when creating
5423 	     shared libraries and symbol visibility changes render the
5424 	     symbol local.
5425 
5426 	     If on the other hand, we are creating an executable, we
5427 	     may need to keep relocations for symbols satisfied by a
5428 	     dynamic library if we manage to avoid copy relocs for the
5429 	     symbol.  */
5430 	dodyn:
5431 	  if ((info->shared
5432 	       && (must_be_dyn_reloc (info, r_type)
5433 		   || (h != NULL
5434 		       && (! info->symbolic
5435 			   || h->root.type == bfd_link_hash_defweak
5436 			   || !h->def_regular))))
5437 	      || (ELIMINATE_COPY_RELOCS
5438 		  && !info->shared
5439 		  && h != NULL
5440 		  && (h->root.type == bfd_link_hash_defweak
5441 		      || !h->def_regular))
5442 	      || (!info->shared
5443 		  && ifunc != NULL))
5444 	    {
5445 	      struct elf_dyn_relocs *p;
5446 	      struct elf_dyn_relocs **head;
5447 
5448 	      /* We must copy these reloc types into the output file.
5449 		 Create a reloc section in dynobj and make room for
5450 		 this reloc.  */
5451 	      if (sreloc == NULL)
5452 		{
5453 		  sreloc = _bfd_elf_make_dynamic_reloc_section
5454 		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5455 
5456 		  if (sreloc == NULL)
5457 		    return FALSE;
5458 		}
5459 
5460 	      /* If this is a global symbol, we count the number of
5461 		 relocations we need for this symbol.  */
5462 	      if (h != NULL)
5463 		{
5464 		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5465 		}
5466 	      else
5467 		{
5468 		  /* Track dynamic relocs needed for local syms too.
5469 		     We really need local syms available to do this
5470 		     easily.  Oh well.  */
5471 		  asection *s;
5472 		  void *vpp;
5473 		  Elf_Internal_Sym *isym;
5474 
5475 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5476 						abfd, r_symndx);
5477 		  if (isym == NULL)
5478 		    return FALSE;
5479 
5480 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5481 		  if (s == NULL)
5482 		    s = sec;
5483 
5484 		  vpp = &elf_section_data (s)->local_dynrel;
5485 		  head = (struct elf_dyn_relocs **) vpp;
5486 		}
5487 
5488 	      p = *head;
5489 	      if (p == NULL || p->sec != sec)
5490 		{
5491 		  p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5492 		  if (p == NULL)
5493 		    return FALSE;
5494 		  p->next = *head;
5495 		  *head = p;
5496 		  p->sec = sec;
5497 		  p->count = 0;
5498 		  p->pc_count = 0;
5499 		}
5500 
5501 	      p->count += 1;
5502 	      if (!must_be_dyn_reloc (info, r_type))
5503 		p->pc_count += 1;
5504 	    }
5505 	  break;
5506 
5507 	default:
5508 	  break;
5509 	}
5510     }
5511 
5512   return TRUE;
5513 }
5514 
5515 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5516    of the code entry point, and its section.  */
5517 
5518 static bfd_vma
5519 opd_entry_value (asection *opd_sec,
5520 		 bfd_vma offset,
5521 		 asection **code_sec,
5522 		 bfd_vma *code_off,
5523 		 bfd_boolean in_code_sec)
5524 {
5525   bfd *opd_bfd = opd_sec->owner;
5526   Elf_Internal_Rela *relocs;
5527   Elf_Internal_Rela *lo, *hi, *look;
5528   bfd_vma val;
5529 
5530   /* No relocs implies we are linking a --just-symbols object, or looking
5531      at a final linked executable with addr2line or somesuch.  */
5532   if (opd_sec->reloc_count == 0)
5533     {
5534       char buf[8];
5535 
5536       if (!bfd_get_section_contents (opd_bfd, opd_sec, buf, offset, 8))
5537 	return (bfd_vma) -1;
5538 
5539       val = bfd_get_64 (opd_bfd, buf);
5540       if (code_sec != NULL)
5541 	{
5542 	  asection *sec, *likely = NULL;
5543 
5544 	  if (in_code_sec)
5545 	    {
5546 	      sec = *code_sec;
5547 	      if (sec->vma <= val
5548 		  && val < sec->vma + sec->size)
5549 		likely = sec;
5550 	      else
5551 		val = -1;
5552 	    }
5553 	  else
5554 	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5555 	      if (sec->vma <= val
5556 		  && (sec->flags & SEC_LOAD) != 0
5557 		  && (sec->flags & SEC_ALLOC) != 0)
5558 		likely = sec;
5559 	  if (likely != NULL)
5560 	    {
5561 	      *code_sec = likely;
5562 	      if (code_off != NULL)
5563 		*code_off = val - likely->vma;
5564 	    }
5565 	}
5566       return val;
5567     }
5568 
5569   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5570 
5571   relocs = ppc64_elf_tdata (opd_bfd)->opd_relocs;
5572   if (relocs == NULL)
5573     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5574 
5575   /* Go find the opd reloc at the sym address.  */
5576   lo = relocs;
5577   BFD_ASSERT (lo != NULL);
5578   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5579   val = (bfd_vma) -1;
5580   while (lo < hi)
5581     {
5582       look = lo + (hi - lo) / 2;
5583       if (look->r_offset < offset)
5584 	lo = look + 1;
5585       else if (look->r_offset > offset)
5586 	hi = look;
5587       else
5588 	{
5589 	  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5590 
5591 	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5592 	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5593 	    {
5594 	      unsigned long symndx = ELF64_R_SYM (look->r_info);
5595 	      asection *sec;
5596 
5597 	      if (symndx < symtab_hdr->sh_info
5598 		  || elf_sym_hashes (opd_bfd) == NULL)
5599 		{
5600 		  Elf_Internal_Sym *sym;
5601 
5602 		  sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5603 		  if (sym == NULL)
5604 		    {
5605 		      size_t symcnt = symtab_hdr->sh_info;
5606 		      if (elf_sym_hashes (opd_bfd) == NULL)
5607 			symcnt = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
5608 		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, symcnt,
5609 						  0, NULL, NULL, NULL);
5610 		      if (sym == NULL)
5611 			break;
5612 		      symtab_hdr->contents = (bfd_byte *) sym;
5613 		    }
5614 
5615 		  sym += symndx;
5616 		  val = sym->st_value;
5617 		  sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5618 		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5619 		}
5620 	      else
5621 		{
5622 		  struct elf_link_hash_entry **sym_hashes;
5623 		  struct elf_link_hash_entry *rh;
5624 
5625 		  sym_hashes = elf_sym_hashes (opd_bfd);
5626 		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
5627 		  rh = elf_follow_link (rh);
5628 		  BFD_ASSERT (rh->root.type == bfd_link_hash_defined
5629 			      || rh->root.type == bfd_link_hash_defweak);
5630 		  val = rh->root.u.def.value;
5631 		  sec = rh->root.u.def.section;
5632 		}
5633 	      val += look->r_addend;
5634 	      if (code_off != NULL)
5635 		*code_off = val;
5636 	      if (code_sec != NULL)
5637 		{
5638 		  if (in_code_sec && *code_sec != sec)
5639 		    return -1;
5640 		  else
5641 		    *code_sec = sec;
5642 		}
5643 	      if (sec != NULL && sec->output_section != NULL)
5644 		val += sec->output_section->vma + sec->output_offset;
5645 	    }
5646 	  break;
5647 	}
5648     }
5649 
5650   return val;
5651 }
5652 
5653 /* If the ELF symbol SYM might be a function in SEC, return the
5654    function size and set *CODE_OFF to the function's entry point,
5655    otherwise return zero.  */
5656 
5657 static bfd_size_type
5658 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5659 			      bfd_vma *code_off)
5660 {
5661   bfd_size_type size;
5662 
5663   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5664 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5665     return 0;
5666 
5667   size = 0;
5668   if (!(sym->flags & BSF_SYNTHETIC))
5669     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5670 
5671   if (strcmp (sym->section->name, ".opd") == 0)
5672     {
5673       if (opd_entry_value (sym->section, sym->value,
5674 			   &sec, code_off, TRUE) == (bfd_vma) -1)
5675 	return 0;
5676       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5677 	 symbol.  This size has nothing to do with the code size of the
5678 	 function, which is what we're supposed to return, but the
5679 	 code size isn't available without looking up the dot-sym.
5680 	 However, doing that would be a waste of time particularly
5681 	 since elf_find_function will look at the dot-sym anyway.
5682 	 Now, elf_find_function will keep the largest size of any
5683 	 function sym found at the code address of interest, so return
5684 	 1 here to avoid it incorrectly caching a larger function size
5685 	 for a small function.  This does mean we return the wrong
5686 	 size for a new-ABI function of size 24, but all that does is
5687 	 disable caching for such functions.  */
5688       if (size == 24)
5689 	size = 1;
5690     }
5691   else
5692     {
5693       if (sym->section != sec)
5694 	return 0;
5695       *code_off = sym->value;
5696     }
5697   if (size == 0)
5698     size = 1;
5699   return size;
5700 }
5701 
5702 /* Return true if symbol is defined in a regular object file.  */
5703 
5704 static bfd_boolean
5705 is_static_defined (struct elf_link_hash_entry *h)
5706 {
5707   return ((h->root.type == bfd_link_hash_defined
5708 	   || h->root.type == bfd_link_hash_defweak)
5709 	  && h->root.u.def.section != NULL
5710 	  && h->root.u.def.section->output_section != NULL);
5711 }
5712 
5713 /* If FDH is a function descriptor symbol, return the associated code
5714    entry symbol if it is defined.  Return NULL otherwise.  */
5715 
5716 static struct ppc_link_hash_entry *
5717 defined_code_entry (struct ppc_link_hash_entry *fdh)
5718 {
5719   if (fdh->is_func_descriptor)
5720     {
5721       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5722       if (fh->elf.root.type == bfd_link_hash_defined
5723 	  || fh->elf.root.type == bfd_link_hash_defweak)
5724 	return fh;
5725     }
5726   return NULL;
5727 }
5728 
5729 /* If FH is a function code entry symbol, return the associated
5730    function descriptor symbol if it is defined.  Return NULL otherwise.  */
5731 
5732 static struct ppc_link_hash_entry *
5733 defined_func_desc (struct ppc_link_hash_entry *fh)
5734 {
5735   if (fh->oh != NULL
5736       && fh->oh->is_func_descriptor)
5737     {
5738       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5739       if (fdh->elf.root.type == bfd_link_hash_defined
5740 	  || fdh->elf.root.type == bfd_link_hash_defweak)
5741 	return fdh;
5742     }
5743   return NULL;
5744 }
5745 
5746 /* Mark all our entry sym sections, both opd and code section.  */
5747 
5748 static void
5749 ppc64_elf_gc_keep (struct bfd_link_info *info)
5750 {
5751   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5752   struct bfd_sym_chain *sym;
5753 
5754   if (htab == NULL)
5755     return;
5756 
5757   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5758     {
5759       struct ppc_link_hash_entry *eh, *fh;
5760       asection *sec;
5761 
5762       eh = (struct ppc_link_hash_entry *)
5763 	elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
5764       if (eh == NULL)
5765 	continue;
5766       if (eh->elf.root.type != bfd_link_hash_defined
5767 	  && eh->elf.root.type != bfd_link_hash_defweak)
5768 	continue;
5769 
5770       fh = defined_code_entry (eh);
5771       if (fh != NULL)
5772 	{
5773 	  sec = fh->elf.root.u.def.section;
5774 	  sec->flags |= SEC_KEEP;
5775 	}
5776       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5777 	       && opd_entry_value (eh->elf.root.u.def.section,
5778 				   eh->elf.root.u.def.value,
5779 				   &sec, NULL, FALSE) != (bfd_vma) -1)
5780 	sec->flags |= SEC_KEEP;
5781 
5782       sec = eh->elf.root.u.def.section;
5783       sec->flags |= SEC_KEEP;
5784     }
5785 }
5786 
5787 /* Mark sections containing dynamically referenced symbols.  When
5788    building shared libraries, we must assume that any visible symbol is
5789    referenced.  */
5790 
5791 static bfd_boolean
5792 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5793 {
5794   struct bfd_link_info *info = (struct bfd_link_info *) inf;
5795   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
5796   struct ppc_link_hash_entry *fdh;
5797 
5798   /* Dynamic linking info is on the func descriptor sym.  */
5799   fdh = defined_func_desc (eh);
5800   if (fdh != NULL)
5801     eh = fdh;
5802 
5803   if ((eh->elf.root.type == bfd_link_hash_defined
5804        || eh->elf.root.type == bfd_link_hash_defweak)
5805       && (eh->elf.ref_dynamic
5806 	  || (!info->executable
5807 	      && eh->elf.def_regular
5808 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5809 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5810 	      && (strchr (eh->elf.root.root.string, ELF_VER_CHR) != NULL
5811 		  || !bfd_hide_sym_by_version (info->version_info,
5812 					       eh->elf.root.root.string)))))
5813     {
5814       asection *code_sec;
5815       struct ppc_link_hash_entry *fh;
5816 
5817       eh->elf.root.u.def.section->flags |= SEC_KEEP;
5818 
5819       /* Function descriptor syms cause the associated
5820 	 function code sym section to be marked.  */
5821       fh = defined_code_entry (eh);
5822       if (fh != NULL)
5823 	{
5824 	  code_sec = fh->elf.root.u.def.section;
5825 	  code_sec->flags |= SEC_KEEP;
5826 	}
5827       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5828 	       && opd_entry_value (eh->elf.root.u.def.section,
5829 				   eh->elf.root.u.def.value,
5830 				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
5831 	code_sec->flags |= SEC_KEEP;
5832     }
5833 
5834   return TRUE;
5835 }
5836 
5837 /* Return the section that should be marked against GC for a given
5838    relocation.  */
5839 
5840 static asection *
5841 ppc64_elf_gc_mark_hook (asection *sec,
5842 			struct bfd_link_info *info,
5843 			Elf_Internal_Rela *rel,
5844 			struct elf_link_hash_entry *h,
5845 			Elf_Internal_Sym *sym)
5846 {
5847   asection *rsec;
5848 
5849   /* Syms return NULL if we're marking .opd, so we avoid marking all
5850      function sections, as all functions are referenced in .opd.  */
5851   rsec = NULL;
5852   if (get_opd_info (sec) != NULL)
5853     return rsec;
5854 
5855   if (h != NULL)
5856     {
5857       enum elf_ppc64_reloc_type r_type;
5858       struct ppc_link_hash_entry *eh, *fh, *fdh;
5859 
5860       r_type = ELF64_R_TYPE (rel->r_info);
5861       switch (r_type)
5862 	{
5863 	case R_PPC64_GNU_VTINHERIT:
5864 	case R_PPC64_GNU_VTENTRY:
5865 	  break;
5866 
5867 	default:
5868 	  switch (h->root.type)
5869 	    {
5870 	    case bfd_link_hash_defined:
5871 	    case bfd_link_hash_defweak:
5872 	      eh = (struct ppc_link_hash_entry *) h;
5873 	      fdh = defined_func_desc (eh);
5874 	      if (fdh != NULL)
5875 		eh = fdh;
5876 
5877 	      /* Function descriptor syms cause the associated
5878 		 function code sym section to be marked.  */
5879 	      fh = defined_code_entry (eh);
5880 	      if (fh != NULL)
5881 		{
5882 		  /* They also mark their opd section.  */
5883 		  eh->elf.root.u.def.section->gc_mark = 1;
5884 
5885 		  rsec = fh->elf.root.u.def.section;
5886 		}
5887 	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5888 		       && opd_entry_value (eh->elf.root.u.def.section,
5889 					   eh->elf.root.u.def.value,
5890 					   &rsec, NULL, FALSE) != (bfd_vma) -1)
5891 		eh->elf.root.u.def.section->gc_mark = 1;
5892 	      else
5893 		rsec = h->root.u.def.section;
5894 	      break;
5895 
5896 	    case bfd_link_hash_common:
5897 	      rsec = h->root.u.c.p->section;
5898 	      break;
5899 
5900 	    default:
5901 	      return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5902 	    }
5903 	}
5904     }
5905   else
5906     {
5907       struct _opd_sec_data *opd;
5908 
5909       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5910       opd = get_opd_info (rsec);
5911       if (opd != NULL && opd->func_sec != NULL)
5912 	{
5913 	  rsec->gc_mark = 1;
5914 
5915 	  rsec = opd->func_sec[(sym->st_value + rel->r_addend) / 8];
5916 	}
5917     }
5918 
5919   return rsec;
5920 }
5921 
5922 /* Update the .got, .plt. and dynamic reloc reference counts for the
5923    section being removed.  */
5924 
5925 static bfd_boolean
5926 ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
5927 			 asection *sec, const Elf_Internal_Rela *relocs)
5928 {
5929   struct ppc_link_hash_table *htab;
5930   Elf_Internal_Shdr *symtab_hdr;
5931   struct elf_link_hash_entry **sym_hashes;
5932   struct got_entry **local_got_ents;
5933   const Elf_Internal_Rela *rel, *relend;
5934 
5935   if (info->relocatable)
5936     return TRUE;
5937 
5938   if ((sec->flags & SEC_ALLOC) == 0)
5939     return TRUE;
5940 
5941   elf_section_data (sec)->local_dynrel = NULL;
5942 
5943   htab = ppc_hash_table (info);
5944   if (htab == NULL)
5945     return FALSE;
5946 
5947   symtab_hdr = &elf_symtab_hdr (abfd);
5948   sym_hashes = elf_sym_hashes (abfd);
5949   local_got_ents = elf_local_got_ents (abfd);
5950 
5951   relend = relocs + sec->reloc_count;
5952   for (rel = relocs; rel < relend; rel++)
5953     {
5954       unsigned long r_symndx;
5955       enum elf_ppc64_reloc_type r_type;
5956       struct elf_link_hash_entry *h = NULL;
5957       unsigned char tls_type = 0;
5958 
5959       r_symndx = ELF64_R_SYM (rel->r_info);
5960       r_type = ELF64_R_TYPE (rel->r_info);
5961       if (r_symndx >= symtab_hdr->sh_info)
5962 	{
5963 	  struct ppc_link_hash_entry *eh;
5964 	  struct elf_dyn_relocs **pp;
5965 	  struct elf_dyn_relocs *p;
5966 
5967 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5968 	  h = elf_follow_link (h);
5969 	  eh = (struct ppc_link_hash_entry *) h;
5970 
5971 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
5972 	    if (p->sec == sec)
5973 	      {
5974 		/* Everything must go for SEC.  */
5975 		*pp = p->next;
5976 		break;
5977 	      }
5978 	}
5979 
5980       if (is_branch_reloc (r_type))
5981 	{
5982 	  struct plt_entry **ifunc = NULL;
5983 	  if (h != NULL)
5984 	    {
5985 	      if (h->type == STT_GNU_IFUNC)
5986 		ifunc = &h->plt.plist;
5987 	    }
5988 	  else if (local_got_ents != NULL)
5989 	    {
5990 	      struct plt_entry **local_plt = (struct plt_entry **)
5991 		(local_got_ents + symtab_hdr->sh_info);
5992 	      unsigned char *local_got_tls_masks = (unsigned char *)
5993 		(local_plt + symtab_hdr->sh_info);
5994 	      if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0)
5995 		ifunc = local_plt + r_symndx;
5996 	    }
5997 	  if (ifunc != NULL)
5998 	    {
5999 	      struct plt_entry *ent;
6000 
6001 	      for (ent = *ifunc; ent != NULL; ent = ent->next)
6002 		if (ent->addend == rel->r_addend)
6003 		  break;
6004 	      if (ent == NULL)
6005 		abort ();
6006 	      if (ent->plt.refcount > 0)
6007 		ent->plt.refcount -= 1;
6008 	      continue;
6009 	    }
6010 	}
6011 
6012       switch (r_type)
6013 	{
6014 	case R_PPC64_GOT_TLSLD16:
6015 	case R_PPC64_GOT_TLSLD16_LO:
6016 	case R_PPC64_GOT_TLSLD16_HI:
6017 	case R_PPC64_GOT_TLSLD16_HA:
6018 	  tls_type = TLS_TLS | TLS_LD;
6019 	  goto dogot;
6020 
6021 	case R_PPC64_GOT_TLSGD16:
6022 	case R_PPC64_GOT_TLSGD16_LO:
6023 	case R_PPC64_GOT_TLSGD16_HI:
6024 	case R_PPC64_GOT_TLSGD16_HA:
6025 	  tls_type = TLS_TLS | TLS_GD;
6026 	  goto dogot;
6027 
6028 	case R_PPC64_GOT_TPREL16_DS:
6029 	case R_PPC64_GOT_TPREL16_LO_DS:
6030 	case R_PPC64_GOT_TPREL16_HI:
6031 	case R_PPC64_GOT_TPREL16_HA:
6032 	  tls_type = TLS_TLS | TLS_TPREL;
6033 	  goto dogot;
6034 
6035 	case R_PPC64_GOT_DTPREL16_DS:
6036 	case R_PPC64_GOT_DTPREL16_LO_DS:
6037 	case R_PPC64_GOT_DTPREL16_HI:
6038 	case R_PPC64_GOT_DTPREL16_HA:
6039 	  tls_type = TLS_TLS | TLS_DTPREL;
6040 	  goto dogot;
6041 
6042 	case R_PPC64_GOT16:
6043 	case R_PPC64_GOT16_DS:
6044 	case R_PPC64_GOT16_HA:
6045 	case R_PPC64_GOT16_HI:
6046 	case R_PPC64_GOT16_LO:
6047 	case R_PPC64_GOT16_LO_DS:
6048 	dogot:
6049 	  {
6050 	    struct got_entry *ent;
6051 
6052 	    if (h != NULL)
6053 	      ent = h->got.glist;
6054 	    else
6055 	      ent = local_got_ents[r_symndx];
6056 
6057 	    for (; ent != NULL; ent = ent->next)
6058 	      if (ent->addend == rel->r_addend
6059 		  && ent->owner == abfd
6060 		  && ent->tls_type == tls_type)
6061 		break;
6062 	    if (ent == NULL)
6063 	      abort ();
6064 	    if (ent->got.refcount > 0)
6065 	      ent->got.refcount -= 1;
6066 	  }
6067 	  break;
6068 
6069 	case R_PPC64_PLT16_HA:
6070 	case R_PPC64_PLT16_HI:
6071 	case R_PPC64_PLT16_LO:
6072 	case R_PPC64_PLT32:
6073 	case R_PPC64_PLT64:
6074 	case R_PPC64_REL14:
6075 	case R_PPC64_REL14_BRNTAKEN:
6076 	case R_PPC64_REL14_BRTAKEN:
6077 	case R_PPC64_REL24:
6078 	  if (h != NULL)
6079 	    {
6080 	      struct plt_entry *ent;
6081 
6082 	      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6083 		if (ent->addend == rel->r_addend)
6084 		  break;
6085 	      if (ent != NULL && ent->plt.refcount > 0)
6086 		ent->plt.refcount -= 1;
6087 	    }
6088 	  break;
6089 
6090 	default:
6091 	  break;
6092 	}
6093     }
6094   return TRUE;
6095 }
6096 
6097 /* The maximum size of .sfpr.  */
6098 #define SFPR_MAX (218*4)
6099 
6100 struct sfpr_def_parms
6101 {
6102   const char name[12];
6103   unsigned char lo, hi;
6104   bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
6105   bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
6106 };
6107 
6108 /* Auto-generate _save*, _rest* functions in .sfpr.  */
6109 
6110 static bfd_boolean
6111 sfpr_define (struct bfd_link_info *info, const struct sfpr_def_parms *parm)
6112 {
6113   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6114   unsigned int i;
6115   size_t len = strlen (parm->name);
6116   bfd_boolean writing = FALSE;
6117   char sym[16];
6118 
6119   if (htab == NULL)
6120     return FALSE;
6121 
6122   memcpy (sym, parm->name, len);
6123   sym[len + 2] = 0;
6124 
6125   for (i = parm->lo; i <= parm->hi; i++)
6126     {
6127       struct elf_link_hash_entry *h;
6128 
6129       sym[len + 0] = i / 10 + '0';
6130       sym[len + 1] = i % 10 + '0';
6131       h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
6132       if (h != NULL
6133 	  && !h->def_regular)
6134 	{
6135 	  h->root.type = bfd_link_hash_defined;
6136 	  h->root.u.def.section = htab->sfpr;
6137 	  h->root.u.def.value = htab->sfpr->size;
6138 	  h->type = STT_FUNC;
6139 	  h->def_regular = 1;
6140 	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
6141 	  writing = TRUE;
6142 	  if (htab->sfpr->contents == NULL)
6143 	    {
6144 	      htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
6145 	      if (htab->sfpr->contents == NULL)
6146 		return FALSE;
6147 	    }
6148 	}
6149       if (writing)
6150 	{
6151 	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
6152 	  if (i != parm->hi)
6153 	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
6154 	  else
6155 	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
6156 	  htab->sfpr->size = p - htab->sfpr->contents;
6157 	}
6158     }
6159 
6160   return TRUE;
6161 }
6162 
6163 static bfd_byte *
6164 savegpr0 (bfd *abfd, bfd_byte *p, int r)
6165 {
6166   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6167   return p + 4;
6168 }
6169 
6170 static bfd_byte *
6171 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
6172 {
6173   p = savegpr0 (abfd, p, r);
6174   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6175   p = p + 4;
6176   bfd_put_32 (abfd, BLR, p);
6177   return p + 4;
6178 }
6179 
6180 static bfd_byte *
6181 restgpr0 (bfd *abfd, bfd_byte *p, int r)
6182 {
6183   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6184   return p + 4;
6185 }
6186 
6187 static bfd_byte *
6188 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
6189 {
6190   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6191   p = p + 4;
6192   p = restgpr0 (abfd, p, r);
6193   bfd_put_32 (abfd, MTLR_R0, p);
6194   p = p + 4;
6195   if (r == 29)
6196     {
6197       p = restgpr0 (abfd, p, 30);
6198       p = restgpr0 (abfd, p, 31);
6199     }
6200   bfd_put_32 (abfd, BLR, p);
6201   return p + 4;
6202 }
6203 
6204 static bfd_byte *
6205 savegpr1 (bfd *abfd, bfd_byte *p, int r)
6206 {
6207   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6208   return p + 4;
6209 }
6210 
6211 static bfd_byte *
6212 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
6213 {
6214   p = savegpr1 (abfd, p, r);
6215   bfd_put_32 (abfd, BLR, p);
6216   return p + 4;
6217 }
6218 
6219 static bfd_byte *
6220 restgpr1 (bfd *abfd, bfd_byte *p, int r)
6221 {
6222   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6223   return p + 4;
6224 }
6225 
6226 static bfd_byte *
6227 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
6228 {
6229   p = restgpr1 (abfd, p, r);
6230   bfd_put_32 (abfd, BLR, p);
6231   return p + 4;
6232 }
6233 
6234 static bfd_byte *
6235 savefpr (bfd *abfd, bfd_byte *p, int r)
6236 {
6237   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6238   return p + 4;
6239 }
6240 
6241 static bfd_byte *
6242 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6243 {
6244   p = savefpr (abfd, p, r);
6245   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6246   p = p + 4;
6247   bfd_put_32 (abfd, BLR, p);
6248   return p + 4;
6249 }
6250 
6251 static bfd_byte *
6252 restfpr (bfd *abfd, bfd_byte *p, int r)
6253 {
6254   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6255   return p + 4;
6256 }
6257 
6258 static bfd_byte *
6259 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6260 {
6261   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6262   p = p + 4;
6263   p = restfpr (abfd, p, r);
6264   bfd_put_32 (abfd, MTLR_R0, p);
6265   p = p + 4;
6266   if (r == 29)
6267     {
6268       p = restfpr (abfd, p, 30);
6269       p = restfpr (abfd, p, 31);
6270     }
6271   bfd_put_32 (abfd, BLR, p);
6272   return p + 4;
6273 }
6274 
6275 static bfd_byte *
6276 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6277 {
6278   p = savefpr (abfd, p, r);
6279   bfd_put_32 (abfd, BLR, p);
6280   return p + 4;
6281 }
6282 
6283 static bfd_byte *
6284 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6285 {
6286   p = restfpr (abfd, p, r);
6287   bfd_put_32 (abfd, BLR, p);
6288   return p + 4;
6289 }
6290 
6291 static bfd_byte *
6292 savevr (bfd *abfd, bfd_byte *p, int r)
6293 {
6294   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6295   p = p + 4;
6296   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6297   return p + 4;
6298 }
6299 
6300 static bfd_byte *
6301 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6302 {
6303   p = savevr (abfd, p, r);
6304   bfd_put_32 (abfd, BLR, p);
6305   return p + 4;
6306 }
6307 
6308 static bfd_byte *
6309 restvr (bfd *abfd, bfd_byte *p, int r)
6310 {
6311   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6312   p = p + 4;
6313   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6314   return p + 4;
6315 }
6316 
6317 static bfd_byte *
6318 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6319 {
6320   p = restvr (abfd, p, r);
6321   bfd_put_32 (abfd, BLR, p);
6322   return p + 4;
6323 }
6324 
6325 /* Called via elf_link_hash_traverse to transfer dynamic linking
6326    information on function code symbol entries to their corresponding
6327    function descriptor symbol entries.  */
6328 
6329 static bfd_boolean
6330 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6331 {
6332   struct bfd_link_info *info;
6333   struct ppc_link_hash_table *htab;
6334   struct plt_entry *ent;
6335   struct ppc_link_hash_entry *fh;
6336   struct ppc_link_hash_entry *fdh;
6337   bfd_boolean force_local;
6338 
6339   fh = (struct ppc_link_hash_entry *) h;
6340   if (fh->elf.root.type == bfd_link_hash_indirect)
6341     return TRUE;
6342 
6343   info = inf;
6344   htab = ppc_hash_table (info);
6345   if (htab == NULL)
6346     return FALSE;
6347 
6348   /* Resolve undefined references to dot-symbols as the value
6349      in the function descriptor, if we have one in a regular object.
6350      This is to satisfy cases like ".quad .foo".  Calls to functions
6351      in dynamic objects are handled elsewhere.  */
6352   if (fh->elf.root.type == bfd_link_hash_undefweak
6353       && fh->was_undefined
6354       && (fdh = defined_func_desc (fh)) != NULL
6355       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6356       && opd_entry_value (fdh->elf.root.u.def.section,
6357 			  fdh->elf.root.u.def.value,
6358 			  &fh->elf.root.u.def.section,
6359 			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6360     {
6361       fh->elf.root.type = fdh->elf.root.type;
6362       fh->elf.forced_local = 1;
6363       fh->elf.def_regular = fdh->elf.def_regular;
6364       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6365     }
6366 
6367   /* If this is a function code symbol, transfer dynamic linking
6368      information to the function descriptor symbol.  */
6369   if (!fh->is_func)
6370     return TRUE;
6371 
6372   for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6373     if (ent->plt.refcount > 0)
6374       break;
6375   if (ent == NULL
6376       || fh->elf.root.root.string[0] != '.'
6377       || fh->elf.root.root.string[1] == '\0')
6378     return TRUE;
6379 
6380   /* Find the corresponding function descriptor symbol.  Create it
6381      as undefined if necessary.  */
6382 
6383   fdh = lookup_fdh (fh, htab);
6384   if (fdh == NULL
6385       && !info->executable
6386       && (fh->elf.root.type == bfd_link_hash_undefined
6387 	  || fh->elf.root.type == bfd_link_hash_undefweak))
6388     {
6389       fdh = make_fdh (info, fh);
6390       if (fdh == NULL)
6391 	return FALSE;
6392     }
6393 
6394   /* Fake function descriptors are made undefweak.  If the function
6395      code symbol is strong undefined, make the fake sym the same.
6396      If the function code symbol is defined, then force the fake
6397      descriptor local;  We can't support overriding of symbols in a
6398      shared library on a fake descriptor.  */
6399 
6400   if (fdh != NULL
6401       && fdh->fake
6402       && fdh->elf.root.type == bfd_link_hash_undefweak)
6403     {
6404       if (fh->elf.root.type == bfd_link_hash_undefined)
6405 	{
6406 	  fdh->elf.root.type = bfd_link_hash_undefined;
6407 	  bfd_link_add_undef (&htab->elf.root, &fdh->elf.root);
6408 	}
6409       else if (fh->elf.root.type == bfd_link_hash_defined
6410 	       || fh->elf.root.type == bfd_link_hash_defweak)
6411 	{
6412 	  _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6413 	}
6414     }
6415 
6416   if (fdh != NULL
6417       && !fdh->elf.forced_local
6418       && (!info->executable
6419 	  || fdh->elf.def_dynamic
6420 	  || fdh->elf.ref_dynamic
6421 	  || (fdh->elf.root.type == bfd_link_hash_undefweak
6422 	      && ELF_ST_VISIBILITY (fdh->elf.other) == STV_DEFAULT)))
6423     {
6424       if (fdh->elf.dynindx == -1)
6425 	if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6426 	  return FALSE;
6427       fdh->elf.ref_regular |= fh->elf.ref_regular;
6428       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6429       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6430       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6431       if (ELF_ST_VISIBILITY (fh->elf.other) == STV_DEFAULT)
6432 	{
6433 	  move_plt_plist (fh, fdh);
6434 	  fdh->elf.needs_plt = 1;
6435 	}
6436       fdh->is_func_descriptor = 1;
6437       fdh->oh = fh;
6438       fh->oh = fdh;
6439     }
6440 
6441   /* Now that the info is on the function descriptor, clear the
6442      function code sym info.  Any function code syms for which we
6443      don't have a definition in a regular file, we force local.
6444      This prevents a shared library from exporting syms that have
6445      been imported from another library.  Function code syms that
6446      are really in the library we must leave global to prevent the
6447      linker dragging in a definition from a static library.  */
6448   force_local = (!fh->elf.def_regular
6449 		 || fdh == NULL
6450 		 || !fdh->elf.def_regular
6451 		 || fdh->elf.forced_local);
6452   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6453 
6454   return TRUE;
6455 }
6456 
6457 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6458    this hook to a) provide some gcc support functions, and b) transfer
6459    dynamic linking information gathered so far on function code symbol
6460    entries, to their corresponding function descriptor symbol entries.  */
6461 
6462 static bfd_boolean
6463 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6464 			    struct bfd_link_info *info)
6465 {
6466   struct ppc_link_hash_table *htab;
6467   unsigned int i;
6468   static const struct sfpr_def_parms funcs[] =
6469     {
6470       { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6471       { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6472       { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6473       { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6474       { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6475       { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6476       { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6477       { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6478       { "._savef", 14, 31, savefpr, savefpr1_tail },
6479       { "._restf", 14, 31, restfpr, restfpr1_tail },
6480       { "_savevr_", 20, 31, savevr, savevr_tail },
6481       { "_restvr_", 20, 31, restvr, restvr_tail }
6482     };
6483 
6484   htab = ppc_hash_table (info);
6485   if (htab == NULL)
6486     return FALSE;
6487 
6488   if (htab->sfpr == NULL)
6489     /* We don't have any relocs.  */
6490     return TRUE;
6491 
6492   /* Provide any missing _save* and _rest* functions.  */
6493   htab->sfpr->size = 0;
6494   if (!info->relocatable)
6495     for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
6496       if (!sfpr_define (info, &funcs[i]))
6497 	return FALSE;
6498 
6499   elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6500 
6501   if (htab->sfpr->size == 0)
6502     htab->sfpr->flags |= SEC_EXCLUDE;
6503 
6504   return TRUE;
6505 }
6506 
6507 /* Adjust a symbol defined by a dynamic object and referenced by a
6508    regular object.  The current definition is in some section of the
6509    dynamic object, but we're not including those sections.  We have to
6510    change the definition to something the rest of the link can
6511    understand.  */
6512 
6513 static bfd_boolean
6514 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6515 				 struct elf_link_hash_entry *h)
6516 {
6517   struct ppc_link_hash_table *htab;
6518   asection *s;
6519 
6520   htab = ppc_hash_table (info);
6521   if (htab == NULL)
6522     return FALSE;
6523 
6524   /* Deal with function syms.  */
6525   if (h->type == STT_FUNC
6526       || h->type == STT_GNU_IFUNC
6527       || h->needs_plt)
6528     {
6529       /* Clear procedure linkage table information for any symbol that
6530 	 won't need a .plt entry.  */
6531       struct plt_entry *ent;
6532       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6533 	if (ent->plt.refcount > 0)
6534 	  break;
6535       if (ent == NULL
6536 	  || (h->type != STT_GNU_IFUNC
6537 	      && (SYMBOL_CALLS_LOCAL (info, h)
6538 		  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
6539 		      && h->root.type == bfd_link_hash_undefweak))))
6540 	{
6541 	  h->plt.plist = NULL;
6542 	  h->needs_plt = 0;
6543 	}
6544     }
6545   else
6546     h->plt.plist = NULL;
6547 
6548   /* If this is a weak symbol, and there is a real definition, the
6549      processor independent code will have arranged for us to see the
6550      real definition first, and we can just use the same value.  */
6551   if (h->u.weakdef != NULL)
6552     {
6553       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
6554 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
6555       h->root.u.def.section = h->u.weakdef->root.u.def.section;
6556       h->root.u.def.value = h->u.weakdef->root.u.def.value;
6557       if (ELIMINATE_COPY_RELOCS)
6558 	h->non_got_ref = h->u.weakdef->non_got_ref;
6559       return TRUE;
6560     }
6561 
6562   /* If we are creating a shared library, we must presume that the
6563      only references to the symbol are via the global offset table.
6564      For such cases we need not do anything here; the relocations will
6565      be handled correctly by relocate_section.  */
6566   if (info->shared)
6567     return TRUE;
6568 
6569   /* If there are no references to this symbol that do not use the
6570      GOT, we don't need to generate a copy reloc.  */
6571   if (!h->non_got_ref)
6572     return TRUE;
6573 
6574   /* Don't generate a copy reloc for symbols defined in the executable.  */
6575   if (!h->def_dynamic || !h->ref_regular || h->def_regular)
6576     return TRUE;
6577 
6578   if (ELIMINATE_COPY_RELOCS)
6579     {
6580       struct ppc_link_hash_entry * eh;
6581       struct elf_dyn_relocs *p;
6582 
6583       eh = (struct ppc_link_hash_entry *) h;
6584       for (p = eh->dyn_relocs; p != NULL; p = p->next)
6585 	{
6586 	  s = p->sec->output_section;
6587 	  if (s != NULL && (s->flags & SEC_READONLY) != 0)
6588 	    break;
6589 	}
6590 
6591       /* If we didn't find any dynamic relocs in read-only sections, then
6592 	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6593       if (p == NULL)
6594 	{
6595 	  h->non_got_ref = 0;
6596 	  return TRUE;
6597 	}
6598     }
6599 
6600   if (h->plt.plist != NULL)
6601     {
6602       /* We should never get here, but unfortunately there are versions
6603 	 of gcc out there that improperly (for this ABI) put initialized
6604 	 function pointers, vtable refs and suchlike in read-only
6605 	 sections.  Allow them to proceed, but warn that this might
6606 	 break at runtime.  */
6607       info->callbacks->einfo
6608 	(_("%P: copy reloc against `%T' requires lazy plt linking; "
6609 	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6610 	 h->root.root.string);
6611     }
6612 
6613   /* This is a reference to a symbol defined by a dynamic object which
6614      is not a function.  */
6615 
6616   /* We must allocate the symbol in our .dynbss section, which will
6617      become part of the .bss section of the executable.  There will be
6618      an entry for this symbol in the .dynsym section.  The dynamic
6619      object will contain position independent code, so all references
6620      from the dynamic object to this symbol will go through the global
6621      offset table.  The dynamic linker will use the .dynsym entry to
6622      determine the address it must put in the global offset table, so
6623      both the dynamic object and the regular object will refer to the
6624      same memory location for the variable.  */
6625 
6626   /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
6627      to copy the initial value out of the dynamic object and into the
6628      runtime process image.  We need to remember the offset into the
6629      .rela.bss section we are going to use.  */
6630   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6631     {
6632       htab->relbss->size += sizeof (Elf64_External_Rela);
6633       h->needs_copy = 1;
6634     }
6635 
6636   s = htab->dynbss;
6637 
6638   return _bfd_elf_adjust_dynamic_copy (h, s);
6639 }
6640 
6641 /* If given a function descriptor symbol, hide both the function code
6642    sym and the descriptor.  */
6643 static void
6644 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6645 		       struct elf_link_hash_entry *h,
6646 		       bfd_boolean force_local)
6647 {
6648   struct ppc_link_hash_entry *eh;
6649   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6650 
6651   eh = (struct ppc_link_hash_entry *) h;
6652   if (eh->is_func_descriptor)
6653     {
6654       struct ppc_link_hash_entry *fh = eh->oh;
6655 
6656       if (fh == NULL)
6657 	{
6658 	  const char *p, *q;
6659 	  struct ppc_link_hash_table *htab;
6660 	  char save;
6661 
6662 	  /* We aren't supposed to use alloca in BFD because on
6663 	     systems which do not have alloca the version in libiberty
6664 	     calls xmalloc, which might cause the program to crash
6665 	     when it runs out of memory.  This function doesn't have a
6666 	     return status, so there's no way to gracefully return an
6667 	     error.  So cheat.  We know that string[-1] can be safely
6668 	     accessed;  It's either a string in an ELF string table,
6669 	     or allocated in an objalloc structure.  */
6670 
6671 	  p = eh->elf.root.root.string - 1;
6672 	  save = *p;
6673 	  *(char *) p = '.';
6674 	  htab = ppc_hash_table (info);
6675 	  if (htab == NULL)
6676 	    return;
6677 
6678 	  fh = (struct ppc_link_hash_entry *)
6679 	    elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6680 	  *(char *) p = save;
6681 
6682 	  /* Unfortunately, if it so happens that the string we were
6683 	     looking for was allocated immediately before this string,
6684 	     then we overwrote the string terminator.  That's the only
6685 	     reason the lookup should fail.  */
6686 	  if (fh == NULL)
6687 	    {
6688 	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6689 	      while (q >= eh->elf.root.root.string && *q == *p)
6690 		--q, --p;
6691 	      if (q < eh->elf.root.root.string && *p == '.')
6692 		fh = (struct ppc_link_hash_entry *)
6693 		  elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6694 	    }
6695 	  if (fh != NULL)
6696 	    {
6697 	      eh->oh = fh;
6698 	      fh->oh = eh;
6699 	    }
6700 	}
6701       if (fh != NULL)
6702 	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6703     }
6704 }
6705 
6706 static bfd_boolean
6707 get_sym_h (struct elf_link_hash_entry **hp,
6708 	   Elf_Internal_Sym **symp,
6709 	   asection **symsecp,
6710 	   unsigned char **tls_maskp,
6711 	   Elf_Internal_Sym **locsymsp,
6712 	   unsigned long r_symndx,
6713 	   bfd *ibfd)
6714 {
6715   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6716 
6717   if (r_symndx >= symtab_hdr->sh_info)
6718     {
6719       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6720       struct elf_link_hash_entry *h;
6721 
6722       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6723       h = elf_follow_link (h);
6724 
6725       if (hp != NULL)
6726 	*hp = h;
6727 
6728       if (symp != NULL)
6729 	*symp = NULL;
6730 
6731       if (symsecp != NULL)
6732 	{
6733 	  asection *symsec = NULL;
6734 	  if (h->root.type == bfd_link_hash_defined
6735 	      || h->root.type == bfd_link_hash_defweak)
6736 	    symsec = h->root.u.def.section;
6737 	  *symsecp = symsec;
6738 	}
6739 
6740       if (tls_maskp != NULL)
6741 	{
6742 	  struct ppc_link_hash_entry *eh;
6743 
6744 	  eh = (struct ppc_link_hash_entry *) h;
6745 	  *tls_maskp = &eh->tls_mask;
6746 	}
6747     }
6748   else
6749     {
6750       Elf_Internal_Sym *sym;
6751       Elf_Internal_Sym *locsyms = *locsymsp;
6752 
6753       if (locsyms == NULL)
6754 	{
6755 	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6756 	  if (locsyms == NULL)
6757 	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6758 					    symtab_hdr->sh_info,
6759 					    0, NULL, NULL, NULL);
6760 	  if (locsyms == NULL)
6761 	    return FALSE;
6762 	  *locsymsp = locsyms;
6763 	}
6764       sym = locsyms + r_symndx;
6765 
6766       if (hp != NULL)
6767 	*hp = NULL;
6768 
6769       if (symp != NULL)
6770 	*symp = sym;
6771 
6772       if (symsecp != NULL)
6773 	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6774 
6775       if (tls_maskp != NULL)
6776 	{
6777 	  struct got_entry **lgot_ents;
6778 	  unsigned char *tls_mask;
6779 
6780 	  tls_mask = NULL;
6781 	  lgot_ents = elf_local_got_ents (ibfd);
6782 	  if (lgot_ents != NULL)
6783 	    {
6784 	      struct plt_entry **local_plt = (struct plt_entry **)
6785 		(lgot_ents + symtab_hdr->sh_info);
6786 	      unsigned char *lgot_masks = (unsigned char *)
6787 		(local_plt + symtab_hdr->sh_info);
6788 	      tls_mask = &lgot_masks[r_symndx];
6789 	    }
6790 	  *tls_maskp = tls_mask;
6791 	}
6792     }
6793   return TRUE;
6794 }
6795 
6796 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6797    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6798    type suitable for optimization, and 1 otherwise.  */
6799 
6800 static int
6801 get_tls_mask (unsigned char **tls_maskp,
6802 	      unsigned long *toc_symndx,
6803 	      bfd_vma *toc_addend,
6804 	      Elf_Internal_Sym **locsymsp,
6805 	      const Elf_Internal_Rela *rel,
6806 	      bfd *ibfd)
6807 {
6808   unsigned long r_symndx;
6809   int next_r;
6810   struct elf_link_hash_entry *h;
6811   Elf_Internal_Sym *sym;
6812   asection *sec;
6813   bfd_vma off;
6814 
6815   r_symndx = ELF64_R_SYM (rel->r_info);
6816   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6817     return 0;
6818 
6819   if ((*tls_maskp != NULL && **tls_maskp != 0)
6820       || sec == NULL
6821       || ppc64_elf_section_data (sec) == NULL
6822       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6823     return 1;
6824 
6825   /* Look inside a TOC section too.  */
6826   if (h != NULL)
6827     {
6828       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6829       off = h->root.u.def.value;
6830     }
6831   else
6832     off = sym->st_value;
6833   off += rel->r_addend;
6834   BFD_ASSERT (off % 8 == 0);
6835   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6836   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6837   if (toc_symndx != NULL)
6838     *toc_symndx = r_symndx;
6839   if (toc_addend != NULL)
6840     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6841   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6842     return 0;
6843   if ((h == NULL || is_static_defined (h))
6844       && (next_r == -1 || next_r == -2))
6845     return 1 - next_r;
6846   return 1;
6847 }
6848 
6849 /* Find (or create) an entry in the tocsave hash table.  */
6850 
6851 static struct tocsave_entry *
6852 tocsave_find (struct ppc_link_hash_table *htab,
6853 	      enum insert_option insert,
6854 	      Elf_Internal_Sym **local_syms,
6855 	      const Elf_Internal_Rela *irela,
6856 	      bfd *ibfd)
6857 {
6858   unsigned long r_indx;
6859   struct elf_link_hash_entry *h;
6860   Elf_Internal_Sym *sym;
6861   struct tocsave_entry ent, *p;
6862   hashval_t hash;
6863   struct tocsave_entry **slot;
6864 
6865   r_indx = ELF64_R_SYM (irela->r_info);
6866   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6867     return NULL;
6868   if (ent.sec == NULL || ent.sec->output_section == NULL)
6869     {
6870       (*_bfd_error_handler)
6871 	(_("%B: undefined symbol on R_PPC64_TOCSAVE relocation"));
6872       return NULL;
6873     }
6874 
6875   if (h != NULL)
6876     ent.offset = h->root.u.def.value;
6877   else
6878     ent.offset = sym->st_value;
6879   ent.offset += irela->r_addend;
6880 
6881   hash = tocsave_htab_hash (&ent);
6882   slot = ((struct tocsave_entry **)
6883 	  htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6884   if (slot == NULL)
6885     return NULL;
6886 
6887   if (*slot == NULL)
6888     {
6889       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6890       if (p == NULL)
6891 	return NULL;
6892       *p = ent;
6893       *slot = p;
6894     }
6895   return *slot;
6896 }
6897 
6898 /* Adjust all global syms defined in opd sections.  In gcc generated
6899    code for the old ABI, these will already have been done.  */
6900 
6901 static bfd_boolean
6902 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6903 {
6904   struct ppc_link_hash_entry *eh;
6905   asection *sym_sec;
6906   struct _opd_sec_data *opd;
6907 
6908   if (h->root.type == bfd_link_hash_indirect)
6909     return TRUE;
6910 
6911   if (h->root.type != bfd_link_hash_defined
6912       && h->root.type != bfd_link_hash_defweak)
6913     return TRUE;
6914 
6915   eh = (struct ppc_link_hash_entry *) h;
6916   if (eh->adjust_done)
6917     return TRUE;
6918 
6919   sym_sec = eh->elf.root.u.def.section;
6920   opd = get_opd_info (sym_sec);
6921   if (opd != NULL && opd->adjust != NULL)
6922     {
6923       long adjust = opd->adjust[eh->elf.root.u.def.value / 8];
6924       if (adjust == -1)
6925 	{
6926 	  /* This entry has been deleted.  */
6927 	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6928 	  if (dsec == NULL)
6929 	    {
6930 	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6931 		if (discarded_section (dsec))
6932 		  {
6933 		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6934 		    break;
6935 		  }
6936 	    }
6937 	  eh->elf.root.u.def.value = 0;
6938 	  eh->elf.root.u.def.section = dsec;
6939 	}
6940       else
6941 	eh->elf.root.u.def.value += adjust;
6942       eh->adjust_done = 1;
6943     }
6944   return TRUE;
6945 }
6946 
6947 /* Handles decrementing dynamic reloc counts for the reloc specified by
6948    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM_SEC
6949    have already been determined.  */
6950 
6951 static bfd_boolean
6952 dec_dynrel_count (bfd_vma r_info,
6953 		  asection *sec,
6954 		  struct bfd_link_info *info,
6955 		  Elf_Internal_Sym **local_syms,
6956 		  struct elf_link_hash_entry *h,
6957 		  asection *sym_sec)
6958 {
6959   enum elf_ppc64_reloc_type r_type;
6960   struct elf_dyn_relocs *p;
6961   struct elf_dyn_relocs **pp;
6962 
6963   /* Can this reloc be dynamic?  This switch, and later tests here
6964      should be kept in sync with the code in check_relocs.  */
6965   r_type = ELF64_R_TYPE (r_info);
6966   switch (r_type)
6967     {
6968     default:
6969       return TRUE;
6970 
6971     case R_PPC64_TPREL16:
6972     case R_PPC64_TPREL16_LO:
6973     case R_PPC64_TPREL16_HI:
6974     case R_PPC64_TPREL16_HA:
6975     case R_PPC64_TPREL16_DS:
6976     case R_PPC64_TPREL16_LO_DS:
6977     case R_PPC64_TPREL16_HIGHER:
6978     case R_PPC64_TPREL16_HIGHERA:
6979     case R_PPC64_TPREL16_HIGHEST:
6980     case R_PPC64_TPREL16_HIGHESTA:
6981       if (!info->shared)
6982 	return TRUE;
6983 
6984     case R_PPC64_TPREL64:
6985     case R_PPC64_DTPMOD64:
6986     case R_PPC64_DTPREL64:
6987     case R_PPC64_ADDR64:
6988     case R_PPC64_REL30:
6989     case R_PPC64_REL32:
6990     case R_PPC64_REL64:
6991     case R_PPC64_ADDR14:
6992     case R_PPC64_ADDR14_BRNTAKEN:
6993     case R_PPC64_ADDR14_BRTAKEN:
6994     case R_PPC64_ADDR16:
6995     case R_PPC64_ADDR16_DS:
6996     case R_PPC64_ADDR16_HA:
6997     case R_PPC64_ADDR16_HI:
6998     case R_PPC64_ADDR16_HIGHER:
6999     case R_PPC64_ADDR16_HIGHERA:
7000     case R_PPC64_ADDR16_HIGHEST:
7001     case R_PPC64_ADDR16_HIGHESTA:
7002     case R_PPC64_ADDR16_LO:
7003     case R_PPC64_ADDR16_LO_DS:
7004     case R_PPC64_ADDR24:
7005     case R_PPC64_ADDR32:
7006     case R_PPC64_UADDR16:
7007     case R_PPC64_UADDR32:
7008     case R_PPC64_UADDR64:
7009     case R_PPC64_TOC:
7010       break;
7011     }
7012 
7013   if (local_syms != NULL)
7014     {
7015       unsigned long r_symndx;
7016       Elf_Internal_Sym *sym;
7017       bfd *ibfd = sec->owner;
7018 
7019       r_symndx = ELF64_R_SYM (r_info);
7020       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7021 	return FALSE;
7022     }
7023 
7024   if ((info->shared
7025        && (must_be_dyn_reloc (info, r_type)
7026 	   || (h != NULL
7027 	       && (!info->symbolic
7028 		   || h->root.type == bfd_link_hash_defweak
7029 		   || !h->def_regular))))
7030       || (ELIMINATE_COPY_RELOCS
7031 	  && !info->shared
7032 	  && h != NULL
7033 	  && (h->root.type == bfd_link_hash_defweak
7034 	      || !h->def_regular)))
7035     ;
7036   else
7037     return TRUE;
7038 
7039   if (h != NULL)
7040     pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
7041   else
7042     {
7043       if (sym_sec != NULL)
7044 	{
7045 	  void *vpp = &elf_section_data (sym_sec)->local_dynrel;
7046 	  pp = (struct elf_dyn_relocs **) vpp;
7047 	}
7048       else
7049 	{
7050 	  void *vpp = &elf_section_data (sec)->local_dynrel;
7051 	  pp = (struct elf_dyn_relocs **) vpp;
7052 	}
7053     }
7054 
7055   /* elf_gc_sweep may have already removed all dyn relocs associated
7056      with local syms for a given section.  Also, symbol flags are
7057      changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7058      report a dynreloc miscount.  */
7059   if (*pp == NULL && info->gc_sections)
7060     return TRUE;
7061 
7062   while ((p = *pp) != NULL)
7063     {
7064       if (p->sec == sec)
7065 	{
7066 	  if (!must_be_dyn_reloc (info, r_type))
7067 	    p->pc_count -= 1;
7068 	  p->count -= 1;
7069 	  if (p->count == 0)
7070 	    *pp = p->next;
7071 	  return TRUE;
7072 	}
7073       pp = &p->next;
7074     }
7075 
7076   info->callbacks->einfo (_("%P: dynreloc miscount for %B, section %A\n"),
7077 			  sec->owner, sec);
7078   bfd_set_error (bfd_error_bad_value);
7079   return FALSE;
7080 }
7081 
7082 /* Remove unused Official Procedure Descriptor entries.  Currently we
7083    only remove those associated with functions in discarded link-once
7084    sections, or weakly defined functions that have been overridden.  It
7085    would be possible to remove many more entries for statically linked
7086    applications.  */
7087 
7088 bfd_boolean
7089 ppc64_elf_edit_opd (struct bfd_link_info *info, bfd_boolean non_overlapping)
7090 {
7091   bfd *ibfd;
7092   bfd_boolean some_edited = FALSE;
7093   asection *need_pad = NULL;
7094 
7095   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7096     {
7097       asection *sec;
7098       Elf_Internal_Rela *relstart, *rel, *relend;
7099       Elf_Internal_Shdr *symtab_hdr;
7100       Elf_Internal_Sym *local_syms;
7101       bfd_vma offset;
7102       struct _opd_sec_data *opd;
7103       bfd_boolean need_edit, add_aux_fields;
7104       bfd_size_type cnt_16b = 0;
7105 
7106       if (!is_ppc64_elf (ibfd))
7107 	continue;
7108 
7109       sec = bfd_get_section_by_name (ibfd, ".opd");
7110       if (sec == NULL || sec->size == 0)
7111 	continue;
7112 
7113       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7114 	continue;
7115 
7116       if (sec->output_section == bfd_abs_section_ptr)
7117 	continue;
7118 
7119       /* Look through the section relocs.  */
7120       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7121 	continue;
7122 
7123       local_syms = NULL;
7124       symtab_hdr = &elf_symtab_hdr (ibfd);
7125 
7126       /* Read the relocations.  */
7127       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7128 					    info->keep_memory);
7129       if (relstart == NULL)
7130 	return FALSE;
7131 
7132       /* First run through the relocs to check they are sane, and to
7133 	 determine whether we need to edit this opd section.  */
7134       need_edit = FALSE;
7135       need_pad = sec;
7136       offset = 0;
7137       relend = relstart + sec->reloc_count;
7138       for (rel = relstart; rel < relend; )
7139 	{
7140 	  enum elf_ppc64_reloc_type r_type;
7141 	  unsigned long r_symndx;
7142 	  asection *sym_sec;
7143 	  struct elf_link_hash_entry *h;
7144 	  Elf_Internal_Sym *sym;
7145 
7146 	  /* .opd contains a regular array of 16 or 24 byte entries.  We're
7147 	     only interested in the reloc pointing to a function entry
7148 	     point.  */
7149 	  if (rel->r_offset != offset
7150 	      || rel + 1 >= relend
7151 	      || (rel + 1)->r_offset != offset + 8)
7152 	    {
7153 	      /* If someone messes with .opd alignment then after a
7154 		 "ld -r" we might have padding in the middle of .opd.
7155 		 Also, there's nothing to prevent someone putting
7156 		 something silly in .opd with the assembler.  No .opd
7157 		 optimization for them!  */
7158 	    broken_opd:
7159 	      (*_bfd_error_handler)
7160 		(_("%B: .opd is not a regular array of opd entries"), ibfd);
7161 	      need_edit = FALSE;
7162 	      break;
7163 	    }
7164 
7165 	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7166 	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7167 	    {
7168 	      (*_bfd_error_handler)
7169 		(_("%B: unexpected reloc type %u in .opd section"),
7170 		 ibfd, r_type);
7171 	      need_edit = FALSE;
7172 	      break;
7173 	    }
7174 
7175 	  r_symndx = ELF64_R_SYM (rel->r_info);
7176 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7177 			  r_symndx, ibfd))
7178 	    goto error_ret;
7179 
7180 	  if (sym_sec == NULL || sym_sec->owner == NULL)
7181 	    {
7182 	      const char *sym_name;
7183 	      if (h != NULL)
7184 		sym_name = h->root.root.string;
7185 	      else
7186 		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7187 					     sym_sec);
7188 
7189 	      (*_bfd_error_handler)
7190 		(_("%B: undefined sym `%s' in .opd section"),
7191 		 ibfd, sym_name);
7192 	      need_edit = FALSE;
7193 	      break;
7194 	    }
7195 
7196 	  /* opd entries are always for functions defined in the
7197 	     current input bfd.  If the symbol isn't defined in the
7198 	     input bfd, then we won't be using the function in this
7199 	     bfd;  It must be defined in a linkonce section in another
7200 	     bfd, or is weak.  It's also possible that we are
7201 	     discarding the function due to a linker script /DISCARD/,
7202 	     which we test for via the output_section.  */
7203 	  if (sym_sec->owner != ibfd
7204 	      || sym_sec->output_section == bfd_abs_section_ptr)
7205 	    need_edit = TRUE;
7206 
7207 	  rel += 2;
7208 	  if (rel == relend
7209 	      || (rel + 1 == relend && rel->r_offset == offset + 16))
7210 	    {
7211 	      if (sec->size == offset + 24)
7212 		{
7213 		  need_pad = NULL;
7214 		  break;
7215 		}
7216 	      if (rel == relend && sec->size == offset + 16)
7217 		{
7218 		  cnt_16b++;
7219 		  break;
7220 		}
7221 	      goto broken_opd;
7222 	    }
7223 
7224 	  if (rel->r_offset == offset + 24)
7225 	    offset += 24;
7226 	  else if (rel->r_offset != offset + 16)
7227 	    goto broken_opd;
7228 	  else if (rel + 1 < relend
7229 		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7230 		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7231 	    {
7232 	      offset += 16;
7233 	      cnt_16b++;
7234 	    }
7235 	  else if (rel + 2 < relend
7236 		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_ADDR64
7237 		   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC)
7238 	    {
7239 	      offset += 24;
7240 	      rel += 1;
7241 	    }
7242 	  else
7243 	    goto broken_opd;
7244 	}
7245 
7246       add_aux_fields = non_overlapping && cnt_16b > 0;
7247 
7248       if (need_edit || add_aux_fields)
7249 	{
7250 	  Elf_Internal_Rela *write_rel;
7251 	  Elf_Internal_Shdr *rel_hdr;
7252 	  bfd_byte *rptr, *wptr;
7253 	  bfd_byte *new_contents;
7254 	  bfd_boolean skip;
7255 	  long opd_ent_size;
7256 	  bfd_size_type amt;
7257 
7258 	  new_contents = NULL;
7259 	  amt = sec->size * sizeof (long) / 8;
7260 	  opd = &ppc64_elf_section_data (sec)->u.opd;
7261 	  opd->adjust = bfd_zalloc (sec->owner, amt);
7262 	  if (opd->adjust == NULL)
7263 	    return FALSE;
7264 	  ppc64_elf_section_data (sec)->sec_type = sec_opd;
7265 
7266 	  /* This seems a waste of time as input .opd sections are all
7267 	     zeros as generated by gcc, but I suppose there's no reason
7268 	     this will always be so.  We might start putting something in
7269 	     the third word of .opd entries.  */
7270 	  if ((sec->flags & SEC_IN_MEMORY) == 0)
7271 	    {
7272 	      bfd_byte *loc;
7273 	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7274 		{
7275 		  if (loc != NULL)
7276 		    free (loc);
7277 		error_ret:
7278 		  if (local_syms != NULL
7279 		      && symtab_hdr->contents != (unsigned char *) local_syms)
7280 		    free (local_syms);
7281 		  if (elf_section_data (sec)->relocs != relstart)
7282 		    free (relstart);
7283 		  return FALSE;
7284 		}
7285 	      sec->contents = loc;
7286 	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7287 	    }
7288 
7289 	  elf_section_data (sec)->relocs = relstart;
7290 
7291 	  new_contents = sec->contents;
7292 	  if (add_aux_fields)
7293 	    {
7294 	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7295 	      if (new_contents == NULL)
7296 		return FALSE;
7297 	      need_pad = FALSE;
7298 	    }
7299 	  wptr = new_contents;
7300 	  rptr = sec->contents;
7301 
7302 	  write_rel = relstart;
7303 	  skip = FALSE;
7304 	  offset = 0;
7305 	  opd_ent_size = 0;
7306 	  for (rel = relstart; rel < relend; rel++)
7307 	    {
7308 	      unsigned long r_symndx;
7309 	      asection *sym_sec;
7310 	      struct elf_link_hash_entry *h;
7311 	      Elf_Internal_Sym *sym;
7312 
7313 	      r_symndx = ELF64_R_SYM (rel->r_info);
7314 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7315 			      r_symndx, ibfd))
7316 		goto error_ret;
7317 
7318 	      if (rel->r_offset == offset)
7319 		{
7320 		  struct ppc_link_hash_entry *fdh = NULL;
7321 
7322 		  /* See if the .opd entry is full 24 byte or
7323 		     16 byte (with fd_aux entry overlapped with next
7324 		     fd_func).  */
7325 		  opd_ent_size = 24;
7326 		  if ((rel + 2 == relend && sec->size == offset + 16)
7327 		      || (rel + 3 < relend
7328 			  && rel[2].r_offset == offset + 16
7329 			  && rel[3].r_offset == offset + 24
7330 			  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_ADDR64
7331 			  && ELF64_R_TYPE (rel[3].r_info) == R_PPC64_TOC))
7332 		    opd_ent_size = 16;
7333 
7334 		  if (h != NULL
7335 		      && h->root.root.string[0] == '.')
7336 		    {
7337 		      struct ppc_link_hash_table *htab;
7338 
7339 		      htab = ppc_hash_table (info);
7340 		      if (htab != NULL)
7341 			fdh = lookup_fdh ((struct ppc_link_hash_entry *) h,
7342 					  htab);
7343 		      if (fdh != NULL
7344 			  && fdh->elf.root.type != bfd_link_hash_defined
7345 			  && fdh->elf.root.type != bfd_link_hash_defweak)
7346 			fdh = NULL;
7347 		    }
7348 
7349 		  skip = (sym_sec->owner != ibfd
7350 			  || sym_sec->output_section == bfd_abs_section_ptr);
7351 		  if (skip)
7352 		    {
7353 		      if (fdh != NULL && sym_sec->owner == ibfd)
7354 			{
7355 			  /* Arrange for the function descriptor sym
7356 			     to be dropped.  */
7357 			  fdh->elf.root.u.def.value = 0;
7358 			  fdh->elf.root.u.def.section = sym_sec;
7359 			}
7360 		      opd->adjust[rel->r_offset / 8] = -1;
7361 		    }
7362 		  else
7363 		    {
7364 		      /* We'll be keeping this opd entry.  */
7365 
7366 		      if (fdh != NULL)
7367 			{
7368 			  /* Redefine the function descriptor symbol to
7369 			     this location in the opd section.  It is
7370 			     necessary to update the value here rather
7371 			     than using an array of adjustments as we do
7372 			     for local symbols, because various places
7373 			     in the generic ELF code use the value
7374 			     stored in u.def.value.  */
7375 			  fdh->elf.root.u.def.value = wptr - new_contents;
7376 			  fdh->adjust_done = 1;
7377 			}
7378 
7379 		      /* Local syms are a bit tricky.  We could
7380 			 tweak them as they can be cached, but
7381 			 we'd need to look through the local syms
7382 			 for the function descriptor sym which we
7383 			 don't have at the moment.  So keep an
7384 			 array of adjustments.  */
7385 		      opd->adjust[rel->r_offset / 8]
7386 			= (wptr - new_contents) - (rptr - sec->contents);
7387 
7388 		      if (wptr != rptr)
7389 			memcpy (wptr, rptr, opd_ent_size);
7390 		      wptr += opd_ent_size;
7391 		      if (add_aux_fields && opd_ent_size == 16)
7392 			{
7393 			  memset (wptr, '\0', 8);
7394 			  wptr += 8;
7395 			}
7396 		    }
7397 		  rptr += opd_ent_size;
7398 		  offset += opd_ent_size;
7399 		}
7400 
7401 	      if (skip)
7402 		{
7403 		  if (!NO_OPD_RELOCS
7404 		      && !info->relocatable
7405 		      && !dec_dynrel_count (rel->r_info, sec, info,
7406 					    NULL, h, sym_sec))
7407 		    goto error_ret;
7408 		}
7409 	      else
7410 		{
7411 		  /* We need to adjust any reloc offsets to point to the
7412 		     new opd entries.  While we're at it, we may as well
7413 		     remove redundant relocs.  */
7414 		  rel->r_offset += opd->adjust[(offset - opd_ent_size) / 8];
7415 		  if (write_rel != rel)
7416 		    memcpy (write_rel, rel, sizeof (*rel));
7417 		  ++write_rel;
7418 		}
7419 	    }
7420 
7421 	  sec->size = wptr - new_contents;
7422 	  sec->reloc_count = write_rel - relstart;
7423 	  if (add_aux_fields)
7424 	    {
7425 	      free (sec->contents);
7426 	      sec->contents = new_contents;
7427 	    }
7428 
7429 	  /* Fudge the header size too, as this is used later in
7430 	     elf_bfd_final_link if we are emitting relocs.  */
7431 	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
7432 	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7433 	  some_edited = TRUE;
7434 	}
7435       else if (elf_section_data (sec)->relocs != relstart)
7436 	free (relstart);
7437 
7438       if (local_syms != NULL
7439 	  && symtab_hdr->contents != (unsigned char *) local_syms)
7440 	{
7441 	  if (!info->keep_memory)
7442 	    free (local_syms);
7443 	  else
7444 	    symtab_hdr->contents = (unsigned char *) local_syms;
7445 	}
7446     }
7447 
7448   if (some_edited)
7449     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7450 
7451   /* If we are doing a final link and the last .opd entry is just 16 byte
7452      long, add a 8 byte padding after it.  */
7453   if (need_pad != NULL && !info->relocatable)
7454     {
7455       bfd_byte *p;
7456 
7457       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7458 	{
7459 	  BFD_ASSERT (need_pad->size > 0);
7460 
7461 	  p = bfd_malloc (need_pad->size + 8);
7462 	  if (p == NULL)
7463 	    return FALSE;
7464 
7465 	  if (! bfd_get_section_contents (need_pad->owner, need_pad,
7466 					  p, 0, need_pad->size))
7467 	    return FALSE;
7468 
7469 	  need_pad->contents = p;
7470 	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7471 	}
7472       else
7473 	{
7474 	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7475 	  if (p == NULL)
7476 	    return FALSE;
7477 
7478 	  need_pad->contents = p;
7479 	}
7480 
7481       memset (need_pad->contents + need_pad->size, 0, 8);
7482       need_pad->size += 8;
7483     }
7484 
7485   return TRUE;
7486 }
7487 
7488 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7489 
7490 asection *
7491 ppc64_elf_tls_setup (struct bfd_link_info *info,
7492 		     int no_tls_get_addr_opt,
7493 		     int *no_multi_toc)
7494 {
7495   struct ppc_link_hash_table *htab;
7496 
7497   htab = ppc_hash_table (info);
7498   if (htab == NULL)
7499     return NULL;
7500 
7501   if (*no_multi_toc)
7502     htab->do_multi_toc = 0;
7503   else if (!htab->do_multi_toc)
7504     *no_multi_toc = 1;
7505 
7506   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7507 			elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7508 					      FALSE, FALSE, TRUE));
7509   /* Move dynamic linking info to the function descriptor sym.  */
7510   if (htab->tls_get_addr != NULL)
7511     func_desc_adjust (&htab->tls_get_addr->elf, info);
7512   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7513 			   elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7514 						 FALSE, FALSE, TRUE));
7515   if (!no_tls_get_addr_opt)
7516     {
7517       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7518 
7519       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7520 				  FALSE, FALSE, TRUE);
7521       if (opt != NULL)
7522 	func_desc_adjust (opt, info);
7523       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7524 				     FALSE, FALSE, TRUE);
7525       if (opt_fd != NULL
7526 	  && (opt_fd->root.type == bfd_link_hash_defined
7527 	      || opt_fd->root.type == bfd_link_hash_defweak))
7528 	{
7529 	  /* If glibc supports an optimized __tls_get_addr call stub,
7530 	     signalled by the presence of __tls_get_addr_opt, and we'll
7531 	     be calling __tls_get_addr via a plt call stub, then
7532 	     make __tls_get_addr point to __tls_get_addr_opt.  */
7533 	  tga_fd = &htab->tls_get_addr_fd->elf;
7534 	  if (htab->elf.dynamic_sections_created
7535 	      && tga_fd != NULL
7536 	      && (tga_fd->type == STT_FUNC
7537 		  || tga_fd->needs_plt)
7538 	      && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7539 		   || (ELF_ST_VISIBILITY (tga_fd->other) != STV_DEFAULT
7540 		       && tga_fd->root.type == bfd_link_hash_undefweak)))
7541 	    {
7542 	      struct plt_entry *ent;
7543 
7544 	      for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7545 		if (ent->plt.refcount > 0)
7546 		  break;
7547 	      if (ent != NULL)
7548 		{
7549 		  tga_fd->root.type = bfd_link_hash_indirect;
7550 		  tga_fd->root.u.i.link = &opt_fd->root;
7551 		  ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7552 		  if (opt_fd->dynindx != -1)
7553 		    {
7554 		      /* Use __tls_get_addr_opt in dynamic relocations.  */
7555 		      opt_fd->dynindx = -1;
7556 		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7557 					      opt_fd->dynstr_index);
7558 		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7559 			return NULL;
7560 		    }
7561 		  htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd;
7562 		  tga = &htab->tls_get_addr->elf;
7563 		  if (opt != NULL && tga != NULL)
7564 		    {
7565 		      tga->root.type = bfd_link_hash_indirect;
7566 		      tga->root.u.i.link = &opt->root;
7567 		      ppc64_elf_copy_indirect_symbol (info, opt, tga);
7568 		      _bfd_elf_link_hash_hide_symbol (info, opt,
7569 						      tga->forced_local);
7570 		      htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
7571 		    }
7572 		  htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7573 		  htab->tls_get_addr_fd->is_func_descriptor = 1;
7574 		  if (htab->tls_get_addr != NULL)
7575 		    {
7576 		      htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7577 		      htab->tls_get_addr->is_func = 1;
7578 		    }
7579 		}
7580 	    }
7581 	}
7582       else
7583 	no_tls_get_addr_opt = TRUE;
7584     }
7585   htab->no_tls_get_addr_opt = no_tls_get_addr_opt;
7586   return _bfd_elf_tls_setup (info->output_bfd, info);
7587 }
7588 
7589 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7590    HASH1 or HASH2.  */
7591 
7592 static bfd_boolean
7593 branch_reloc_hash_match (const bfd *ibfd,
7594 			 const Elf_Internal_Rela *rel,
7595 			 const struct ppc_link_hash_entry *hash1,
7596 			 const struct ppc_link_hash_entry *hash2)
7597 {
7598   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7599   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7600   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7601 
7602   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7603     {
7604       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7605       struct elf_link_hash_entry *h;
7606 
7607       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7608       h = elf_follow_link (h);
7609       if (h == &hash1->elf || h == &hash2->elf)
7610 	return TRUE;
7611     }
7612   return FALSE;
7613 }
7614 
7615 /* Run through all the TLS relocs looking for optimization
7616    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7617    a preliminary section layout so that we know the TLS segment
7618    offsets.  We can't optimize earlier because some optimizations need
7619    to know the tp offset, and we need to optimize before allocating
7620    dynamic relocations.  */
7621 
7622 bfd_boolean
7623 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7624 {
7625   bfd *ibfd;
7626   asection *sec;
7627   struct ppc_link_hash_table *htab;
7628   unsigned char *toc_ref;
7629   int pass;
7630 
7631   if (info->relocatable || !info->executable)
7632     return TRUE;
7633 
7634   htab = ppc_hash_table (info);
7635   if (htab == NULL)
7636     return FALSE;
7637 
7638   /* Make two passes over the relocs.  On the first pass, mark toc
7639      entries involved with tls relocs, and check that tls relocs
7640      involved in setting up a tls_get_addr call are indeed followed by
7641      such a call.  If they are not, we can't do any tls optimization.
7642      On the second pass twiddle tls_mask flags to notify
7643      relocate_section that optimization can be done, and adjust got
7644      and plt refcounts.  */
7645   toc_ref = NULL;
7646   for (pass = 0; pass < 2; ++pass)
7647     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7648       {
7649 	Elf_Internal_Sym *locsyms = NULL;
7650 	asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7651 
7652 	for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7653 	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7654 	    {
7655 	      Elf_Internal_Rela *relstart, *rel, *relend;
7656 	      bfd_boolean found_tls_get_addr_arg = 0;
7657 
7658 	      /* Read the relocations.  */
7659 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7660 						    info->keep_memory);
7661 	      if (relstart == NULL)
7662 		return FALSE;
7663 
7664 	      relend = relstart + sec->reloc_count;
7665 	      for (rel = relstart; rel < relend; rel++)
7666 		{
7667 		  enum elf_ppc64_reloc_type r_type;
7668 		  unsigned long r_symndx;
7669 		  struct elf_link_hash_entry *h;
7670 		  Elf_Internal_Sym *sym;
7671 		  asection *sym_sec;
7672 		  unsigned char *tls_mask;
7673 		  unsigned char tls_set, tls_clear, tls_type = 0;
7674 		  bfd_vma value;
7675 		  bfd_boolean ok_tprel, is_local;
7676 		  long toc_ref_index = 0;
7677 		  int expecting_tls_get_addr = 0;
7678 		  bfd_boolean ret = FALSE;
7679 
7680 		  r_symndx = ELF64_R_SYM (rel->r_info);
7681 		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7682 				  r_symndx, ibfd))
7683 		    {
7684 		    err_free_rel:
7685 		      if (elf_section_data (sec)->relocs != relstart)
7686 			free (relstart);
7687 		      if (toc_ref != NULL)
7688 			free (toc_ref);
7689 		      if (locsyms != NULL
7690 			  && (elf_symtab_hdr (ibfd).contents
7691 			      != (unsigned char *) locsyms))
7692 			free (locsyms);
7693 		      return ret;
7694 		    }
7695 
7696 		  if (h != NULL)
7697 		    {
7698 		      if (h->root.type == bfd_link_hash_defined
7699 			  || h->root.type == bfd_link_hash_defweak)
7700 			value = h->root.u.def.value;
7701 		      else if (h->root.type == bfd_link_hash_undefweak)
7702 			value = 0;
7703 		      else
7704 			{
7705 			  found_tls_get_addr_arg = 0;
7706 			  continue;
7707 			}
7708 		    }
7709 		  else
7710 		    /* Symbols referenced by TLS relocs must be of type
7711 		       STT_TLS.  So no need for .opd local sym adjust.  */
7712 		    value = sym->st_value;
7713 
7714 		  ok_tprel = FALSE;
7715 		  is_local = FALSE;
7716 		  if (h == NULL
7717 		      || !h->def_dynamic)
7718 		    {
7719 		      is_local = TRUE;
7720 		      if (h != NULL
7721 			  && h->root.type == bfd_link_hash_undefweak)
7722 			ok_tprel = TRUE;
7723 		      else
7724 			{
7725 			  value += sym_sec->output_offset;
7726 			  value += sym_sec->output_section->vma;
7727 			  value -= htab->elf.tls_sec->vma;
7728 			  ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
7729 				      < (bfd_vma) 1 << 32);
7730 			}
7731 		    }
7732 
7733 		  r_type = ELF64_R_TYPE (rel->r_info);
7734 		  /* If this section has old-style __tls_get_addr calls
7735 		     without marker relocs, then check that each
7736 		     __tls_get_addr call reloc is preceded by a reloc
7737 		     that conceivably belongs to the __tls_get_addr arg
7738 		     setup insn.  If we don't find matching arg setup
7739 		     relocs, don't do any tls optimization.  */
7740 		  if (pass == 0
7741 		      && sec->has_tls_get_addr_call
7742 		      && h != NULL
7743 		      && (h == &htab->tls_get_addr->elf
7744 			  || h == &htab->tls_get_addr_fd->elf)
7745 		      && !found_tls_get_addr_arg
7746 		      && is_branch_reloc (r_type))
7747 		    {
7748 		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
7749 						"TLS optimization disabled\n"),
7750 					      ibfd, sec, rel->r_offset);
7751 		      ret = TRUE;
7752 		      goto err_free_rel;
7753 		    }
7754 
7755 		  found_tls_get_addr_arg = 0;
7756 		  switch (r_type)
7757 		    {
7758 		    case R_PPC64_GOT_TLSLD16:
7759 		    case R_PPC64_GOT_TLSLD16_LO:
7760 		      expecting_tls_get_addr = 1;
7761 		      found_tls_get_addr_arg = 1;
7762 		      /* Fall thru */
7763 
7764 		    case R_PPC64_GOT_TLSLD16_HI:
7765 		    case R_PPC64_GOT_TLSLD16_HA:
7766 		      /* These relocs should never be against a symbol
7767 			 defined in a shared lib.  Leave them alone if
7768 			 that turns out to be the case.  */
7769 		      if (!is_local)
7770 			continue;
7771 
7772 		      /* LD -> LE */
7773 		      tls_set = 0;
7774 		      tls_clear = TLS_LD;
7775 		      tls_type = TLS_TLS | TLS_LD;
7776 		      break;
7777 
7778 		    case R_PPC64_GOT_TLSGD16:
7779 		    case R_PPC64_GOT_TLSGD16_LO:
7780 		      expecting_tls_get_addr = 1;
7781 		      found_tls_get_addr_arg = 1;
7782 		      /* Fall thru */
7783 
7784 		    case R_PPC64_GOT_TLSGD16_HI:
7785 		    case R_PPC64_GOT_TLSGD16_HA:
7786 		      if (ok_tprel)
7787 			/* GD -> LE */
7788 			tls_set = 0;
7789 		      else
7790 			/* GD -> IE */
7791 			tls_set = TLS_TLS | TLS_TPRELGD;
7792 		      tls_clear = TLS_GD;
7793 		      tls_type = TLS_TLS | TLS_GD;
7794 		      break;
7795 
7796 		    case R_PPC64_GOT_TPREL16_DS:
7797 		    case R_PPC64_GOT_TPREL16_LO_DS:
7798 		    case R_PPC64_GOT_TPREL16_HI:
7799 		    case R_PPC64_GOT_TPREL16_HA:
7800 		      if (ok_tprel)
7801 			{
7802 			  /* IE -> LE */
7803 			  tls_set = 0;
7804 			  tls_clear = TLS_TPREL;
7805 			  tls_type = TLS_TLS | TLS_TPREL;
7806 			  break;
7807 			}
7808 		      continue;
7809 
7810 		    case R_PPC64_TLSGD:
7811 		    case R_PPC64_TLSLD:
7812 		      found_tls_get_addr_arg = 1;
7813 		      /* Fall thru */
7814 
7815 		    case R_PPC64_TLS:
7816 		    case R_PPC64_TOC16:
7817 		    case R_PPC64_TOC16_LO:
7818 		      if (sym_sec == NULL || sym_sec != toc)
7819 			continue;
7820 
7821 		      /* Mark this toc entry as referenced by a TLS
7822 			 code sequence.  We can do that now in the
7823 			 case of R_PPC64_TLS, and after checking for
7824 			 tls_get_addr for the TOC16 relocs.  */
7825 		      if (toc_ref == NULL)
7826 			toc_ref = bfd_zmalloc (toc->output_section->rawsize / 8);
7827 		      if (toc_ref == NULL)
7828 			goto err_free_rel;
7829 
7830 		      if (h != NULL)
7831 			value = h->root.u.def.value;
7832 		      else
7833 			value = sym->st_value;
7834 		      value += rel->r_addend;
7835 		      BFD_ASSERT (value < toc->size && value % 8 == 0);
7836 		      toc_ref_index = (value + toc->output_offset) / 8;
7837 		      if (r_type == R_PPC64_TLS
7838 			  || r_type == R_PPC64_TLSGD
7839 			  || r_type == R_PPC64_TLSLD)
7840 			{
7841 			  toc_ref[toc_ref_index] = 1;
7842 			  continue;
7843 			}
7844 
7845 		      if (pass != 0 && toc_ref[toc_ref_index] == 0)
7846 			continue;
7847 
7848 		      tls_set = 0;
7849 		      tls_clear = 0;
7850 		      expecting_tls_get_addr = 2;
7851 		      break;
7852 
7853 		    case R_PPC64_TPREL64:
7854 		      if (pass == 0
7855 			  || sec != toc
7856 			  || toc_ref == NULL
7857 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7858 			continue;
7859 		      if (ok_tprel)
7860 			{
7861 			  /* IE -> LE */
7862 			  tls_set = TLS_EXPLICIT;
7863 			  tls_clear = TLS_TPREL;
7864 			  break;
7865 			}
7866 		      continue;
7867 
7868 		    case R_PPC64_DTPMOD64:
7869 		      if (pass == 0
7870 			  || sec != toc
7871 			  || toc_ref == NULL
7872 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7873 			continue;
7874 		      if (rel + 1 < relend
7875 			  && (rel[1].r_info
7876 			      == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
7877 			  && rel[1].r_offset == rel->r_offset + 8)
7878 			{
7879 			  if (ok_tprel)
7880 			    /* GD -> LE */
7881 			    tls_set = TLS_EXPLICIT | TLS_GD;
7882 			  else
7883 			    /* GD -> IE */
7884 			    tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
7885 			  tls_clear = TLS_GD;
7886 			}
7887 		      else
7888 			{
7889 			  if (!is_local)
7890 			    continue;
7891 
7892 			  /* LD -> LE */
7893 			  tls_set = TLS_EXPLICIT;
7894 			  tls_clear = TLS_LD;
7895 			}
7896 		      break;
7897 
7898 		    default:
7899 		      continue;
7900 		    }
7901 
7902 		  if (pass == 0)
7903 		    {
7904 		      if (!expecting_tls_get_addr
7905 			  || !sec->has_tls_get_addr_call)
7906 			continue;
7907 
7908 		      if (rel + 1 < relend
7909 			  && branch_reloc_hash_match (ibfd, rel + 1,
7910 						      htab->tls_get_addr,
7911 						      htab->tls_get_addr_fd))
7912 			{
7913 			  if (expecting_tls_get_addr == 2)
7914 			    {
7915 			      /* Check for toc tls entries.  */
7916 			      unsigned char *toc_tls;
7917 			      int retval;
7918 
7919 			      retval = get_tls_mask (&toc_tls, NULL, NULL,
7920 						     &locsyms,
7921 						     rel, ibfd);
7922 			      if (retval == 0)
7923 				goto err_free_rel;
7924 			      if (toc_tls != NULL)
7925 				{
7926 				  if ((*toc_tls & (TLS_GD | TLS_LD)) != 0)
7927 				    found_tls_get_addr_arg = 1;
7928 				  if (retval > 1)
7929 				    toc_ref[toc_ref_index] = 1;
7930 				}
7931 			    }
7932 			  continue;
7933 			}
7934 
7935 		      if (expecting_tls_get_addr != 1)
7936 			continue;
7937 
7938 		      /* Uh oh, we didn't find the expected call.  We
7939 			 could just mark this symbol to exclude it
7940 			 from tls optimization but it's safer to skip
7941 			 the entire optimization.  */
7942 		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
7943 						"TLS optimization disabled\n"),
7944 					      ibfd, sec, rel->r_offset);
7945 		      ret = TRUE;
7946 		      goto err_free_rel;
7947 		    }
7948 
7949 		  if (expecting_tls_get_addr && htab->tls_get_addr != NULL)
7950 		    {
7951 		      struct plt_entry *ent;
7952 		      for (ent = htab->tls_get_addr->elf.plt.plist;
7953 			   ent != NULL;
7954 			   ent = ent->next)
7955 			if (ent->addend == 0)
7956 			  {
7957 			    if (ent->plt.refcount > 0)
7958 			      {
7959 				ent->plt.refcount -= 1;
7960 				expecting_tls_get_addr = 0;
7961 			      }
7962 			    break;
7963 			  }
7964 		    }
7965 
7966 		  if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL)
7967 		    {
7968 		      struct plt_entry *ent;
7969 		      for (ent = htab->tls_get_addr_fd->elf.plt.plist;
7970 			   ent != NULL;
7971 			   ent = ent->next)
7972 			if (ent->addend == 0)
7973 			  {
7974 			    if (ent->plt.refcount > 0)
7975 			      ent->plt.refcount -= 1;
7976 			    break;
7977 			  }
7978 		    }
7979 
7980 		  if (tls_clear == 0)
7981 		    continue;
7982 
7983 		  if ((tls_set & TLS_EXPLICIT) == 0)
7984 		    {
7985 		      struct got_entry *ent;
7986 
7987 		      /* Adjust got entry for this reloc.  */
7988 		      if (h != NULL)
7989 			ent = h->got.glist;
7990 		      else
7991 			ent = elf_local_got_ents (ibfd)[r_symndx];
7992 
7993 		      for (; ent != NULL; ent = ent->next)
7994 			if (ent->addend == rel->r_addend
7995 			    && ent->owner == ibfd
7996 			    && ent->tls_type == tls_type)
7997 			  break;
7998 		      if (ent == NULL)
7999 			abort ();
8000 
8001 		      if (tls_set == 0)
8002 			{
8003 			  /* We managed to get rid of a got entry.  */
8004 			  if (ent->got.refcount > 0)
8005 			    ent->got.refcount -= 1;
8006 			}
8007 		    }
8008 		  else
8009 		    {
8010 		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
8011 			 we'll lose one or two dyn relocs.  */
8012 		      if (!dec_dynrel_count (rel->r_info, sec, info,
8013 					     NULL, h, sym_sec))
8014 			return FALSE;
8015 
8016 		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
8017 			{
8018 			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8019 						 NULL, h, sym_sec))
8020 			    return FALSE;
8021 			}
8022 		    }
8023 
8024 		  *tls_mask |= tls_set;
8025 		  *tls_mask &= ~tls_clear;
8026 		}
8027 
8028 	      if (elf_section_data (sec)->relocs != relstart)
8029 		free (relstart);
8030 	    }
8031 
8032 	if (locsyms != NULL
8033 	    && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8034 	  {
8035 	    if (!info->keep_memory)
8036 	      free (locsyms);
8037 	    else
8038 	      elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8039 	  }
8040       }
8041 
8042   if (toc_ref != NULL)
8043     free (toc_ref);
8044   return TRUE;
8045 }
8046 
8047 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8048    the values of any global symbols in a toc section that has been
8049    edited.  Globals in toc sections should be a rarity, so this function
8050    sets a flag if any are found in toc sections other than the one just
8051    edited, so that futher hash table traversals can be avoided.  */
8052 
8053 struct adjust_toc_info
8054 {
8055   asection *toc;
8056   unsigned long *skip;
8057   bfd_boolean global_toc_syms;
8058 };
8059 
8060 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8061 
8062 static bfd_boolean
8063 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8064 {
8065   struct ppc_link_hash_entry *eh;
8066   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8067   unsigned long i;
8068 
8069   if (h->root.type != bfd_link_hash_defined
8070       && h->root.type != bfd_link_hash_defweak)
8071     return TRUE;
8072 
8073   eh = (struct ppc_link_hash_entry *) h;
8074   if (eh->adjust_done)
8075     return TRUE;
8076 
8077   if (eh->elf.root.u.def.section == toc_inf->toc)
8078     {
8079       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8080 	i = toc_inf->toc->rawsize >> 3;
8081       else
8082 	i = eh->elf.root.u.def.value >> 3;
8083 
8084       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8085 	{
8086 	  (*_bfd_error_handler)
8087 	    (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8088 	  do
8089 	    ++i;
8090 	  while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8091 	  eh->elf.root.u.def.value = (bfd_vma) i << 3;
8092 	}
8093 
8094       eh->elf.root.u.def.value -= toc_inf->skip[i];
8095       eh->adjust_done = 1;
8096     }
8097   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8098     toc_inf->global_toc_syms = TRUE;
8099 
8100   return TRUE;
8101 }
8102 
8103 /* Return TRUE iff INSN is one we expect on a _LO variety toc/got reloc.  */
8104 
8105 static bfd_boolean
8106 ok_lo_toc_insn (unsigned int insn)
8107 {
8108   return ((insn & (0x3f << 26)) == 14u << 26 /* addi */
8109 	  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
8110 	  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
8111 	  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
8112 	  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
8113 	  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
8114 	  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
8115 	  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
8116 	  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
8117 	  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
8118 	  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
8119 	  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
8120 	  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
8121 	  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
8122 	  || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */
8123 	      && (insn & 3) != 1)
8124 	  || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */
8125 	      && ((insn & 3) == 0 || (insn & 3) == 3))
8126 	  || (insn & (0x3f << 26)) == 12u << 26 /* addic */);
8127 }
8128 
8129 /* Examine all relocs referencing .toc sections in order to remove
8130    unused .toc entries.  */
8131 
8132 bfd_boolean
8133 ppc64_elf_edit_toc (struct bfd_link_info *info)
8134 {
8135   bfd *ibfd;
8136   struct adjust_toc_info toc_inf;
8137   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8138 
8139   htab->do_toc_opt = 1;
8140   toc_inf.global_toc_syms = TRUE;
8141   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
8142     {
8143       asection *toc, *sec;
8144       Elf_Internal_Shdr *symtab_hdr;
8145       Elf_Internal_Sym *local_syms;
8146       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8147       unsigned long *skip, *drop;
8148       unsigned char *used;
8149       unsigned char *keep, last, some_unused;
8150 
8151       if (!is_ppc64_elf (ibfd))
8152 	continue;
8153 
8154       toc = bfd_get_section_by_name (ibfd, ".toc");
8155       if (toc == NULL
8156 	  || toc->size == 0
8157 	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8158 	  || discarded_section (toc))
8159 	continue;
8160 
8161       toc_relocs = NULL;
8162       local_syms = NULL;
8163       symtab_hdr = &elf_symtab_hdr (ibfd);
8164 
8165       /* Look at sections dropped from the final link.  */
8166       skip = NULL;
8167       relstart = NULL;
8168       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8169 	{
8170 	  if (sec->reloc_count == 0
8171 	      || !discarded_section (sec)
8172 	      || get_opd_info (sec)
8173 	      || (sec->flags & SEC_ALLOC) == 0
8174 	      || (sec->flags & SEC_DEBUGGING) != 0)
8175 	    continue;
8176 
8177 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8178 	  if (relstart == NULL)
8179 	    goto error_ret;
8180 
8181 	  /* Run through the relocs to see which toc entries might be
8182 	     unused.  */
8183 	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8184 	    {
8185 	      enum elf_ppc64_reloc_type r_type;
8186 	      unsigned long r_symndx;
8187 	      asection *sym_sec;
8188 	      struct elf_link_hash_entry *h;
8189 	      Elf_Internal_Sym *sym;
8190 	      bfd_vma val;
8191 
8192 	      r_type = ELF64_R_TYPE (rel->r_info);
8193 	      switch (r_type)
8194 		{
8195 		default:
8196 		  continue;
8197 
8198 		case R_PPC64_TOC16:
8199 		case R_PPC64_TOC16_LO:
8200 		case R_PPC64_TOC16_HI:
8201 		case R_PPC64_TOC16_HA:
8202 		case R_PPC64_TOC16_DS:
8203 		case R_PPC64_TOC16_LO_DS:
8204 		  break;
8205 		}
8206 
8207 	      r_symndx = ELF64_R_SYM (rel->r_info);
8208 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8209 			      r_symndx, ibfd))
8210 		goto error_ret;
8211 
8212 	      if (sym_sec != toc)
8213 		continue;
8214 
8215 	      if (h != NULL)
8216 		val = h->root.u.def.value;
8217 	      else
8218 		val = sym->st_value;
8219 	      val += rel->r_addend;
8220 
8221 	      if (val >= toc->size)
8222 		continue;
8223 
8224 	      /* Anything in the toc ought to be aligned to 8 bytes.
8225 		 If not, don't mark as unused.  */
8226 	      if (val & 7)
8227 		continue;
8228 
8229 	      if (skip == NULL)
8230 		{
8231 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8232 		  if (skip == NULL)
8233 		    goto error_ret;
8234 		}
8235 
8236 	      skip[val >> 3] = ref_from_discarded;
8237 	    }
8238 
8239 	  if (elf_section_data (sec)->relocs != relstart)
8240 	    free (relstart);
8241 	}
8242 
8243       /* For largetoc loads of address constants, we can convert
8244 	 .  addis rx,2,addr@got@ha
8245 	 .  ld ry,addr@got@l(rx)
8246 	 to
8247 	 .  addis rx,2,addr@toc@ha
8248 	 .  addi ry,rx,addr@toc@l
8249 	 when addr is within 2G of the toc pointer.  This then means
8250 	 that the word storing "addr" in the toc is no longer needed.  */
8251 
8252       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8253 	  && toc->output_section->rawsize < (bfd_vma) 1 << 31
8254 	  && toc->reloc_count != 0)
8255 	{
8256 	  /* Read toc relocs.  */
8257 	  toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8258 						  info->keep_memory);
8259 	  if (toc_relocs == NULL)
8260 	    goto error_ret;
8261 
8262 	  for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8263 	    {
8264 	      enum elf_ppc64_reloc_type r_type;
8265 	      unsigned long r_symndx;
8266 	      asection *sym_sec;
8267 	      struct elf_link_hash_entry *h;
8268 	      Elf_Internal_Sym *sym;
8269 	      bfd_vma val, addr;
8270 
8271 	      r_type = ELF64_R_TYPE (rel->r_info);
8272 	      if (r_type != R_PPC64_ADDR64)
8273 		continue;
8274 
8275 	      r_symndx = ELF64_R_SYM (rel->r_info);
8276 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8277 			      r_symndx, ibfd))
8278 		goto error_ret;
8279 
8280 	      if (sym_sec == NULL
8281 		  || discarded_section (sym_sec))
8282 		continue;
8283 
8284 	      if (!SYMBOL_CALLS_LOCAL (info, h))
8285 		continue;
8286 
8287 	      if (h != NULL)
8288 		{
8289 		  if (h->type == STT_GNU_IFUNC)
8290 		    continue;
8291 		  val = h->root.u.def.value;
8292 		}
8293 	      else
8294 		{
8295 		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8296 		    continue;
8297 		  val = sym->st_value;
8298 		}
8299 	      val += rel->r_addend;
8300 	      val += sym_sec->output_section->vma + sym_sec->output_offset;
8301 
8302 	      /* We don't yet know the exact toc pointer value, but we
8303 		 know it will be somewhere in the toc section.  Don't
8304 		 optimize if the difference from any possible toc
8305 		 pointer is outside [ff..f80008000, 7fff7fff].  */
8306 	      addr = toc->output_section->vma + TOC_BASE_OFF;
8307 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8308 		continue;
8309 
8310 	      addr = toc->output_section->vma + toc->output_section->rawsize;
8311 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8312 		continue;
8313 
8314 	      if (skip == NULL)
8315 		{
8316 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8317 		  if (skip == NULL)
8318 		    goto error_ret;
8319 		}
8320 
8321 	      skip[rel->r_offset >> 3]
8322 		|= can_optimize | ((rel - toc_relocs) << 2);
8323 	    }
8324 	}
8325 
8326       if (skip == NULL)
8327 	continue;
8328 
8329       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8330       if (used == NULL)
8331 	{
8332 	error_ret:
8333 	  if (local_syms != NULL
8334 	      && symtab_hdr->contents != (unsigned char *) local_syms)
8335 	    free (local_syms);
8336 	  if (sec != NULL
8337 	      && relstart != NULL
8338 	      && elf_section_data (sec)->relocs != relstart)
8339 	    free (relstart);
8340 	  if (toc_relocs != NULL
8341 	      && elf_section_data (toc)->relocs != toc_relocs)
8342 	    free (toc_relocs);
8343 	  if (skip != NULL)
8344 	    free (skip);
8345 	  return FALSE;
8346 	}
8347 
8348       /* Now check all kept sections that might reference the toc.
8349 	 Check the toc itself last.  */
8350       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8351 		  : ibfd->sections);
8352 	   sec != NULL;
8353 	   sec = (sec == toc ? NULL
8354 		  : sec->next == NULL ? toc
8355 		  : sec->next == toc && toc->next ? toc->next
8356 		  : sec->next))
8357 	{
8358 	  int repeat;
8359 
8360 	  if (sec->reloc_count == 0
8361 	      || discarded_section (sec)
8362 	      || get_opd_info (sec)
8363 	      || (sec->flags & SEC_ALLOC) == 0
8364 	      || (sec->flags & SEC_DEBUGGING) != 0)
8365 	    continue;
8366 
8367 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8368 						info->keep_memory);
8369 	  if (relstart == NULL)
8370 	    goto error_ret;
8371 
8372 	  /* Mark toc entries referenced as used.  */
8373 	  do
8374 	    {
8375 	      repeat = 0;
8376 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8377 		{
8378 		  enum elf_ppc64_reloc_type r_type;
8379 		  unsigned long r_symndx;
8380 		  asection *sym_sec;
8381 		  struct elf_link_hash_entry *h;
8382 		  Elf_Internal_Sym *sym;
8383 		  bfd_vma val;
8384 		  enum {no_check, check_lo, check_ha} insn_check;
8385 
8386 		  r_type = ELF64_R_TYPE (rel->r_info);
8387 		  switch (r_type)
8388 		    {
8389 		    default:
8390 		      insn_check = no_check;
8391 		      break;
8392 
8393 		    case R_PPC64_GOT_TLSLD16_HA:
8394 		    case R_PPC64_GOT_TLSGD16_HA:
8395 		    case R_PPC64_GOT_TPREL16_HA:
8396 		    case R_PPC64_GOT_DTPREL16_HA:
8397 		    case R_PPC64_GOT16_HA:
8398 		    case R_PPC64_TOC16_HA:
8399 		      insn_check = check_ha;
8400 		      break;
8401 
8402 		    case R_PPC64_GOT_TLSLD16_LO:
8403 		    case R_PPC64_GOT_TLSGD16_LO:
8404 		    case R_PPC64_GOT_TPREL16_LO_DS:
8405 		    case R_PPC64_GOT_DTPREL16_LO_DS:
8406 		    case R_PPC64_GOT16_LO:
8407 		    case R_PPC64_GOT16_LO_DS:
8408 		    case R_PPC64_TOC16_LO:
8409 		    case R_PPC64_TOC16_LO_DS:
8410 		      insn_check = check_lo;
8411 		      break;
8412 		    }
8413 
8414 		  if (insn_check != no_check)
8415 		    {
8416 		      bfd_vma off = rel->r_offset & ~3;
8417 		      unsigned char buf[4];
8418 		      unsigned int insn;
8419 
8420 		      if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
8421 			{
8422 			  free (used);
8423 			  goto error_ret;
8424 			}
8425 		      insn = bfd_get_32 (ibfd, buf);
8426 		      if (insn_check == check_lo
8427 			  ? !ok_lo_toc_insn (insn)
8428 			  : ((insn & ((0x3f << 26) | 0x1f << 16))
8429 			     != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
8430 			{
8431 			  char str[12];
8432 
8433 			  ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
8434 			  sprintf (str, "%#08x", insn);
8435 			  info->callbacks->einfo
8436 			    (_("%P: %H: toc optimization is not supported for"
8437 			       " %s instruction.\n"),
8438 			     ibfd, sec, rel->r_offset & ~3, str);
8439 			}
8440 		    }
8441 
8442 		  switch (r_type)
8443 		    {
8444 		    case R_PPC64_TOC16:
8445 		    case R_PPC64_TOC16_LO:
8446 		    case R_PPC64_TOC16_HI:
8447 		    case R_PPC64_TOC16_HA:
8448 		    case R_PPC64_TOC16_DS:
8449 		    case R_PPC64_TOC16_LO_DS:
8450 		      /* In case we're taking addresses of toc entries.  */
8451 		    case R_PPC64_ADDR64:
8452 		      break;
8453 
8454 		    default:
8455 		      continue;
8456 		    }
8457 
8458 		  r_symndx = ELF64_R_SYM (rel->r_info);
8459 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8460 				  r_symndx, ibfd))
8461 		    {
8462 		      free (used);
8463 		      goto error_ret;
8464 		    }
8465 
8466 		  if (sym_sec != toc)
8467 		    continue;
8468 
8469 		  if (h != NULL)
8470 		    val = h->root.u.def.value;
8471 		  else
8472 		    val = sym->st_value;
8473 		  val += rel->r_addend;
8474 
8475 		  if (val >= toc->size)
8476 		    continue;
8477 
8478 		  if ((skip[val >> 3] & can_optimize) != 0)
8479 		    {
8480 		      bfd_vma off;
8481 		      unsigned char opc;
8482 
8483 		      switch (r_type)
8484 			{
8485 			case R_PPC64_TOC16_HA:
8486 			  break;
8487 
8488 			case R_PPC64_TOC16_LO_DS:
8489 			  off = rel->r_offset;
8490 			  off += (bfd_big_endian (ibfd) ? -2 : 3);
8491 			  if (!bfd_get_section_contents (ibfd, sec, &opc,
8492 							 off, 1))
8493 			    {
8494 			      free (used);
8495 			      goto error_ret;
8496 			    }
8497 			  if ((opc & (0x3f << 2)) == (58u << 2))
8498 			    break;
8499 			  /* Fall thru */
8500 
8501 			default:
8502 			  /* Wrong sort of reloc, or not a ld.  We may
8503 			     as well clear ref_from_discarded too.  */
8504 			  skip[val >> 3] = 0;
8505 			}
8506 		    }
8507 
8508 		  if (sec != toc)
8509 		    used[val >> 3] = 1;
8510 		  /* For the toc section, we only mark as used if this
8511 		     entry itself isn't unused.  */
8512 		  else if ((used[rel->r_offset >> 3]
8513 			    || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8514 			   && !used[val >> 3])
8515 		    {
8516 		      /* Do all the relocs again, to catch reference
8517 			 chains.  */
8518 		      repeat = 1;
8519 		      used[val >> 3] = 1;
8520 		    }
8521 		}
8522 	    }
8523 	  while (repeat);
8524 
8525 	  if (elf_section_data (sec)->relocs != relstart)
8526 	    free (relstart);
8527 	}
8528 
8529       /* Merge the used and skip arrays.  Assume that TOC
8530 	 doublewords not appearing as either used or unused belong
8531 	 to to an entry more than one doubleword in size.  */
8532       for (drop = skip, keep = used, last = 0, some_unused = 0;
8533 	   drop < skip + (toc->size + 7) / 8;
8534 	   ++drop, ++keep)
8535 	{
8536 	  if (*keep)
8537 	    {
8538 	      *drop &= ~ref_from_discarded;
8539 	      if ((*drop & can_optimize) != 0)
8540 		some_unused = 1;
8541 	      last = 0;
8542 	    }
8543 	  else if ((*drop & ref_from_discarded) != 0)
8544 	    {
8545 	      some_unused = 1;
8546 	      last = ref_from_discarded;
8547 	    }
8548 	  else
8549 	    *drop = last;
8550 	}
8551 
8552       free (used);
8553 
8554       if (some_unused)
8555 	{
8556 	  bfd_byte *contents, *src;
8557 	  unsigned long off;
8558 	  Elf_Internal_Sym *sym;
8559 	  bfd_boolean local_toc_syms = FALSE;
8560 
8561 	  /* Shuffle the toc contents, and at the same time convert the
8562 	     skip array from booleans into offsets.  */
8563 	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8564 	    goto error_ret;
8565 
8566 	  elf_section_data (toc)->this_hdr.contents = contents;
8567 
8568 	  for (src = contents, off = 0, drop = skip;
8569 	       src < contents + toc->size;
8570 	       src += 8, ++drop)
8571 	    {
8572 	      if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8573 		off += 8;
8574 	      else if (off != 0)
8575 		{
8576 		  *drop = off;
8577 		  memcpy (src - off, src, 8);
8578 		}
8579 	    }
8580 	  *drop = off;
8581 	  toc->rawsize = toc->size;
8582 	  toc->size = src - contents - off;
8583 
8584 	  /* Adjust addends for relocs against the toc section sym,
8585 	     and optimize any accesses we can.  */
8586 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8587 	    {
8588 	      if (sec->reloc_count == 0
8589 		  || discarded_section (sec))
8590 		continue;
8591 
8592 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8593 						    info->keep_memory);
8594 	      if (relstart == NULL)
8595 		goto error_ret;
8596 
8597 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8598 		{
8599 		  enum elf_ppc64_reloc_type r_type;
8600 		  unsigned long r_symndx;
8601 		  asection *sym_sec;
8602 		  struct elf_link_hash_entry *h;
8603 		  bfd_vma val;
8604 
8605 		  r_type = ELF64_R_TYPE (rel->r_info);
8606 		  switch (r_type)
8607 		    {
8608 		    default:
8609 		      continue;
8610 
8611 		    case R_PPC64_TOC16:
8612 		    case R_PPC64_TOC16_LO:
8613 		    case R_PPC64_TOC16_HI:
8614 		    case R_PPC64_TOC16_HA:
8615 		    case R_PPC64_TOC16_DS:
8616 		    case R_PPC64_TOC16_LO_DS:
8617 		    case R_PPC64_ADDR64:
8618 		      break;
8619 		    }
8620 
8621 		  r_symndx = ELF64_R_SYM (rel->r_info);
8622 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8623 				  r_symndx, ibfd))
8624 		    goto error_ret;
8625 
8626 		  if (sym_sec != toc)
8627 		    continue;
8628 
8629 		  if (h != NULL)
8630 		    val = h->root.u.def.value;
8631 		  else
8632 		    {
8633 		      val = sym->st_value;
8634 		      if (val != 0)
8635 			local_toc_syms = TRUE;
8636 		    }
8637 
8638 		  val += rel->r_addend;
8639 
8640 		  if (val > toc->rawsize)
8641 		    val = toc->rawsize;
8642 		  else if ((skip[val >> 3] & ref_from_discarded) != 0)
8643 		    continue;
8644 		  else if ((skip[val >> 3] & can_optimize) != 0)
8645 		    {
8646 		      Elf_Internal_Rela *tocrel
8647 			= toc_relocs + (skip[val >> 3] >> 2);
8648 		      unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8649 
8650 		      switch (r_type)
8651 			{
8652 			case R_PPC64_TOC16_HA:
8653 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8654 			  break;
8655 
8656 			case R_PPC64_TOC16_LO_DS:
8657 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8658 			  break;
8659 
8660 			default:
8661 			  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8662 			    ppc_howto_init ();
8663 			  info->callbacks->einfo
8664 			    (_("%P: %H: %s references "
8665 			       "optimized away TOC entry\n"),
8666 			     ibfd, sec, rel->r_offset,
8667 			     ppc64_elf_howto_table[r_type]->name);
8668 			  bfd_set_error (bfd_error_bad_value);
8669 			  goto error_ret;
8670 			}
8671 		      rel->r_addend = tocrel->r_addend;
8672 		      elf_section_data (sec)->relocs = relstart;
8673 		      continue;
8674 		    }
8675 
8676 		  if (h != NULL || sym->st_value != 0)
8677 		    continue;
8678 
8679 		  rel->r_addend -= skip[val >> 3];
8680 		  elf_section_data (sec)->relocs = relstart;
8681 		}
8682 
8683 	      if (elf_section_data (sec)->relocs != relstart)
8684 		free (relstart);
8685 	    }
8686 
8687 	  /* We shouldn't have local or global symbols defined in the TOC,
8688 	     but handle them anyway.  */
8689 	  if (local_syms != NULL)
8690 	    for (sym = local_syms;
8691 		 sym < local_syms + symtab_hdr->sh_info;
8692 		 ++sym)
8693 	      if (sym->st_value != 0
8694 		  && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
8695 		{
8696 		  unsigned long i;
8697 
8698 		  if (sym->st_value > toc->rawsize)
8699 		    i = toc->rawsize >> 3;
8700 		  else
8701 		    i = sym->st_value >> 3;
8702 
8703 		  if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
8704 		    {
8705 		      if (local_toc_syms)
8706 			(*_bfd_error_handler)
8707 			  (_("%s defined on removed toc entry"),
8708 			   bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
8709 		      do
8710 			++i;
8711 		      while ((skip[i] & (ref_from_discarded | can_optimize)));
8712 		      sym->st_value = (bfd_vma) i << 3;
8713 		    }
8714 
8715 		  sym->st_value -= skip[i];
8716 		  symtab_hdr->contents = (unsigned char *) local_syms;
8717 		}
8718 
8719 	  /* Adjust any global syms defined in this toc input section.  */
8720 	  if (toc_inf.global_toc_syms)
8721 	    {
8722 	      toc_inf.toc = toc;
8723 	      toc_inf.skip = skip;
8724 	      toc_inf.global_toc_syms = FALSE;
8725 	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
8726 				      &toc_inf);
8727 	    }
8728 
8729 	  if (toc->reloc_count != 0)
8730 	    {
8731 	      Elf_Internal_Shdr *rel_hdr;
8732 	      Elf_Internal_Rela *wrel;
8733 	      bfd_size_type sz;
8734 
8735 	      /* Remove unused toc relocs, and adjust those we keep.  */
8736 	      if (toc_relocs == NULL)
8737 		toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8738 							info->keep_memory);
8739 	      if (toc_relocs == NULL)
8740 		goto error_ret;
8741 
8742 	      wrel = toc_relocs;
8743 	      for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8744 		if ((skip[rel->r_offset >> 3]
8745 		     & (ref_from_discarded | can_optimize)) == 0)
8746 		  {
8747 		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
8748 		    wrel->r_info = rel->r_info;
8749 		    wrel->r_addend = rel->r_addend;
8750 		    ++wrel;
8751 		  }
8752 		else if (!dec_dynrel_count (rel->r_info, toc, info,
8753 					    &local_syms, NULL, NULL))
8754 		  goto error_ret;
8755 
8756 	      elf_section_data (toc)->relocs = toc_relocs;
8757 	      toc->reloc_count = wrel - toc_relocs;
8758 	      rel_hdr = _bfd_elf_single_rel_hdr (toc);
8759 	      sz = rel_hdr->sh_entsize;
8760 	      rel_hdr->sh_size = toc->reloc_count * sz;
8761 	    }
8762 	}
8763       else if (toc_relocs != NULL
8764 	       && elf_section_data (toc)->relocs != toc_relocs)
8765 	free (toc_relocs);
8766 
8767       if (local_syms != NULL
8768 	  && symtab_hdr->contents != (unsigned char *) local_syms)
8769 	{
8770 	  if (!info->keep_memory)
8771 	    free (local_syms);
8772 	  else
8773 	    symtab_hdr->contents = (unsigned char *) local_syms;
8774 	}
8775       free (skip);
8776     }
8777 
8778   return TRUE;
8779 }
8780 
8781 /* Return true iff input section I references the TOC using
8782    instructions limited to +/-32k offsets.  */
8783 
8784 bfd_boolean
8785 ppc64_elf_has_small_toc_reloc (asection *i)
8786 {
8787   return (is_ppc64_elf (i->owner)
8788 	  && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
8789 }
8790 
8791 /* Allocate space for one GOT entry.  */
8792 
8793 static void
8794 allocate_got (struct elf_link_hash_entry *h,
8795 	      struct bfd_link_info *info,
8796 	      struct got_entry *gent)
8797 {
8798   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8799   bfd_boolean dyn;
8800   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
8801   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
8802 		 ? 16 : 8);
8803   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
8804 		  ? 2 : 1) * sizeof (Elf64_External_Rela);
8805   asection *got = ppc64_elf_tdata (gent->owner)->got;
8806 
8807   gent->got.offset = got->size;
8808   got->size += entsize;
8809 
8810   dyn = htab->elf.dynamic_sections_created;
8811   if ((info->shared
8812        || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
8813 	    && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8814 		|| h->root.type != bfd_link_hash_undefweak))
8815     {
8816       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
8817       relgot->size += rentsize;
8818     }
8819   else if (h->type == STT_GNU_IFUNC)
8820     {
8821       asection *relgot = htab->reliplt;
8822       relgot->size += rentsize;
8823       htab->got_reli_size += rentsize;
8824     }
8825 }
8826 
8827 /* This function merges got entries in the same toc group.  */
8828 
8829 static void
8830 merge_got_entries (struct got_entry **pent)
8831 {
8832   struct got_entry *ent, *ent2;
8833 
8834   for (ent = *pent; ent != NULL; ent = ent->next)
8835     if (!ent->is_indirect)
8836       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
8837 	if (!ent2->is_indirect
8838 	    && ent2->addend == ent->addend
8839 	    && ent2->tls_type == ent->tls_type
8840 	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
8841 	  {
8842 	    ent2->is_indirect = TRUE;
8843 	    ent2->got.ent = ent;
8844 	  }
8845 }
8846 
8847 /* Allocate space in .plt, .got and associated reloc sections for
8848    dynamic relocs.  */
8849 
8850 static bfd_boolean
8851 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8852 {
8853   struct bfd_link_info *info;
8854   struct ppc_link_hash_table *htab;
8855   asection *s;
8856   struct ppc_link_hash_entry *eh;
8857   struct elf_dyn_relocs *p;
8858   struct got_entry **pgent, *gent;
8859 
8860   if (h->root.type == bfd_link_hash_indirect)
8861     return TRUE;
8862 
8863   info = (struct bfd_link_info *) inf;
8864   htab = ppc_hash_table (info);
8865   if (htab == NULL)
8866     return FALSE;
8867 
8868   if ((htab->elf.dynamic_sections_created
8869        && h->dynindx != -1
8870        && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
8871       || h->type == STT_GNU_IFUNC)
8872     {
8873       struct plt_entry *pent;
8874       bfd_boolean doneone = FALSE;
8875       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
8876 	if (pent->plt.refcount > 0)
8877 	  {
8878 	    if (!htab->elf.dynamic_sections_created
8879 		|| h->dynindx == -1)
8880 	      {
8881 		s = htab->iplt;
8882 		pent->plt.offset = s->size;
8883 		s->size += PLT_ENTRY_SIZE;
8884 		s = htab->reliplt;
8885 	      }
8886 	    else
8887 	      {
8888 		/* If this is the first .plt entry, make room for the special
8889 		   first entry.  */
8890 		s = htab->plt;
8891 		if (s->size == 0)
8892 		  s->size += PLT_INITIAL_ENTRY_SIZE;
8893 
8894 		pent->plt.offset = s->size;
8895 
8896 		/* Make room for this entry.  */
8897 		s->size += PLT_ENTRY_SIZE;
8898 
8899 		/* Make room for the .glink code.  */
8900 		s = htab->glink;
8901 		if (s->size == 0)
8902 		  s->size += GLINK_CALL_STUB_SIZE;
8903 		/* We need bigger stubs past index 32767.  */
8904 		if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
8905 		  s->size += 4;
8906 		s->size += 2*4;
8907 
8908 		/* We also need to make an entry in the .rela.plt section.  */
8909 		s = htab->relplt;
8910 	      }
8911 	    s->size += sizeof (Elf64_External_Rela);
8912 	    doneone = TRUE;
8913 	  }
8914 	else
8915 	  pent->plt.offset = (bfd_vma) -1;
8916       if (!doneone)
8917 	{
8918 	  h->plt.plist = NULL;
8919 	  h->needs_plt = 0;
8920 	}
8921     }
8922   else
8923     {
8924       h->plt.plist = NULL;
8925       h->needs_plt = 0;
8926     }
8927 
8928   eh = (struct ppc_link_hash_entry *) h;
8929   /* Run through the TLS GD got entries first if we're changing them
8930      to TPREL.  */
8931   if ((eh->tls_mask & TLS_TPRELGD) != 0)
8932     for (gent = h->got.glist; gent != NULL; gent = gent->next)
8933       if (gent->got.refcount > 0
8934 	  && (gent->tls_type & TLS_GD) != 0)
8935 	{
8936 	  /* This was a GD entry that has been converted to TPREL.  If
8937 	     there happens to be a TPREL entry we can use that one.  */
8938 	  struct got_entry *ent;
8939 	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
8940 	    if (ent->got.refcount > 0
8941 		&& (ent->tls_type & TLS_TPREL) != 0
8942 		&& ent->addend == gent->addend
8943 		&& ent->owner == gent->owner)
8944 	      {
8945 		gent->got.refcount = 0;
8946 		break;
8947 	      }
8948 
8949 	  /* If not, then we'll be using our own TPREL entry.  */
8950 	  if (gent->got.refcount != 0)
8951 	    gent->tls_type = TLS_TLS | TLS_TPREL;
8952 	}
8953 
8954   /* Remove any list entry that won't generate a word in the GOT before
8955      we call merge_got_entries.  Otherwise we risk merging to empty
8956      entries.  */
8957   pgent = &h->got.glist;
8958   while ((gent = *pgent) != NULL)
8959     if (gent->got.refcount > 0)
8960       {
8961 	if ((gent->tls_type & TLS_LD) != 0
8962 	    && !h->def_dynamic)
8963 	  {
8964 	    ppc64_tlsld_got (gent->owner)->got.refcount += 1;
8965 	    *pgent = gent->next;
8966 	  }
8967 	else
8968 	  pgent = &gent->next;
8969       }
8970     else
8971       *pgent = gent->next;
8972 
8973   if (!htab->do_multi_toc)
8974     merge_got_entries (&h->got.glist);
8975 
8976   for (gent = h->got.glist; gent != NULL; gent = gent->next)
8977     if (!gent->is_indirect)
8978       {
8979 	/* Make sure this symbol is output as a dynamic symbol.
8980 	   Undefined weak syms won't yet be marked as dynamic,
8981 	   nor will all TLS symbols.  */
8982 	if (h->dynindx == -1
8983 	    && !h->forced_local
8984 	    && h->type != STT_GNU_IFUNC
8985 	    && htab->elf.dynamic_sections_created)
8986 	  {
8987 	    if (! bfd_elf_link_record_dynamic_symbol (info, h))
8988 	      return FALSE;
8989 	  }
8990 
8991 	if (!is_ppc64_elf (gent->owner))
8992 	  abort ();
8993 
8994 	allocate_got (h, info, gent);
8995       }
8996 
8997   if (eh->dyn_relocs == NULL
8998       || (!htab->elf.dynamic_sections_created
8999 	  && h->type != STT_GNU_IFUNC))
9000     return TRUE;
9001 
9002   /* In the shared -Bsymbolic case, discard space allocated for
9003      dynamic pc-relative relocs against symbols which turn out to be
9004      defined in regular objects.  For the normal shared case, discard
9005      space for relocs that have become local due to symbol visibility
9006      changes.  */
9007 
9008   if (info->shared)
9009     {
9010       /* Relocs that use pc_count are those that appear on a call insn,
9011 	 or certain REL relocs (see must_be_dyn_reloc) that can be
9012 	 generated via assembly.  We want calls to protected symbols to
9013 	 resolve directly to the function rather than going via the plt.
9014 	 If people want function pointer comparisons to work as expected
9015 	 then they should avoid writing weird assembly.  */
9016       if (SYMBOL_CALLS_LOCAL (info, h))
9017 	{
9018 	  struct elf_dyn_relocs **pp;
9019 
9020 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9021 	    {
9022 	      p->count -= p->pc_count;
9023 	      p->pc_count = 0;
9024 	      if (p->count == 0)
9025 		*pp = p->next;
9026 	      else
9027 		pp = &p->next;
9028 	    }
9029 	}
9030 
9031       /* Also discard relocs on undefined weak syms with non-default
9032 	 visibility.  */
9033       if (eh->dyn_relocs != NULL
9034 	  && h->root.type == bfd_link_hash_undefweak)
9035 	{
9036 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9037 	    eh->dyn_relocs = NULL;
9038 
9039 	  /* Make sure this symbol is output as a dynamic symbol.
9040 	     Undefined weak syms won't yet be marked as dynamic.  */
9041 	  else if (h->dynindx == -1
9042 		   && !h->forced_local)
9043 	    {
9044 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9045 		return FALSE;
9046 	    }
9047 	}
9048     }
9049   else if (h->type == STT_GNU_IFUNC)
9050     {
9051       if (!h->non_got_ref)
9052 	eh->dyn_relocs = NULL;
9053     }
9054   else if (ELIMINATE_COPY_RELOCS)
9055     {
9056       /* For the non-shared case, discard space for relocs against
9057 	 symbols which turn out to need copy relocs or are not
9058 	 dynamic.  */
9059 
9060       if (!h->non_got_ref
9061 	  && !h->def_regular)
9062 	{
9063 	  /* Make sure this symbol is output as a dynamic symbol.
9064 	     Undefined weak syms won't yet be marked as dynamic.  */
9065 	  if (h->dynindx == -1
9066 	      && !h->forced_local)
9067 	    {
9068 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9069 		return FALSE;
9070 	    }
9071 
9072 	  /* If that succeeded, we know we'll be keeping all the
9073 	     relocs.  */
9074 	  if (h->dynindx != -1)
9075 	    goto keep;
9076 	}
9077 
9078       eh->dyn_relocs = NULL;
9079 
9080     keep: ;
9081     }
9082 
9083   /* Finally, allocate space.  */
9084   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9085     {
9086       asection *sreloc = elf_section_data (p->sec)->sreloc;
9087       if (!htab->elf.dynamic_sections_created)
9088 	sreloc = htab->reliplt;
9089       sreloc->size += p->count * sizeof (Elf64_External_Rela);
9090     }
9091 
9092   return TRUE;
9093 }
9094 
9095 /* Find any dynamic relocs that apply to read-only sections.  */
9096 
9097 static bfd_boolean
9098 readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9099 {
9100   struct ppc_link_hash_entry *eh;
9101   struct elf_dyn_relocs *p;
9102 
9103   eh = (struct ppc_link_hash_entry *) h;
9104   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9105     {
9106       asection *s = p->sec->output_section;
9107 
9108       if (s != NULL && (s->flags & SEC_READONLY) != 0)
9109 	{
9110 	  struct bfd_link_info *info = inf;
9111 
9112           if (info->warn_shared_textrel)
9113             (*_bfd_error_handler)
9114               (_("warning: dynamic relocation in readonly section `%s'"),
9115               h->root.root.string);
9116 	  info->flags |= DF_TEXTREL;
9117 
9118 	  /* Not an error, just cut short the traversal.  */
9119 	  return FALSE;
9120 	}
9121     }
9122   return TRUE;
9123 }
9124 
9125 /* Set the sizes of the dynamic sections.  */
9126 
9127 static bfd_boolean
9128 ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
9129 				 struct bfd_link_info *info)
9130 {
9131   struct ppc_link_hash_table *htab;
9132   bfd *dynobj;
9133   asection *s;
9134   bfd_boolean relocs;
9135   bfd *ibfd;
9136   struct got_entry *first_tlsld;
9137 
9138   htab = ppc_hash_table (info);
9139   if (htab == NULL)
9140     return FALSE;
9141 
9142   dynobj = htab->elf.dynobj;
9143   if (dynobj == NULL)
9144     abort ();
9145 
9146   if (htab->elf.dynamic_sections_created)
9147     {
9148       /* Set the contents of the .interp section to the interpreter.  */
9149       if (info->executable)
9150 	{
9151 	  s = bfd_get_linker_section (dynobj, ".interp");
9152 	  if (s == NULL)
9153 	    abort ();
9154 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9155 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9156 	}
9157     }
9158 
9159   /* Set up .got offsets for local syms, and space for local dynamic
9160      relocs.  */
9161   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9162     {
9163       struct got_entry **lgot_ents;
9164       struct got_entry **end_lgot_ents;
9165       struct plt_entry **local_plt;
9166       struct plt_entry **end_local_plt;
9167       unsigned char *lgot_masks;
9168       bfd_size_type locsymcount;
9169       Elf_Internal_Shdr *symtab_hdr;
9170       asection *srel;
9171 
9172       if (!is_ppc64_elf (ibfd))
9173 	continue;
9174 
9175       for (s = ibfd->sections; s != NULL; s = s->next)
9176 	{
9177 	  struct elf_dyn_relocs *p;
9178 
9179 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9180 	    {
9181 	      if (!bfd_is_abs_section (p->sec)
9182 		  && bfd_is_abs_section (p->sec->output_section))
9183 		{
9184 		  /* Input section has been discarded, either because
9185 		     it is a copy of a linkonce section or due to
9186 		     linker script /DISCARD/, so we'll be discarding
9187 		     the relocs too.  */
9188 		}
9189 	      else if (p->count != 0)
9190 		{
9191 		  srel = elf_section_data (p->sec)->sreloc;
9192 		  if (!htab->elf.dynamic_sections_created)
9193 		    srel = htab->reliplt;
9194 		  srel->size += p->count * sizeof (Elf64_External_Rela);
9195 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9196 		    {
9197 		      if (info->warn_shared_textrel)
9198 			(*_bfd_error_handler)
9199 			  (_("warning: dynamic relocation in readonly section `%s'"),
9200 			  p->sec->output_section->name);
9201 		      info->flags |= DF_TEXTREL;
9202 		    }
9203 		}
9204 	    }
9205 	}
9206 
9207       lgot_ents = elf_local_got_ents (ibfd);
9208       if (!lgot_ents)
9209 	continue;
9210 
9211       symtab_hdr = &elf_symtab_hdr (ibfd);
9212       locsymcount = symtab_hdr->sh_info;
9213       end_lgot_ents = lgot_ents + locsymcount;
9214       local_plt = (struct plt_entry **) end_lgot_ents;
9215       end_local_plt = local_plt + locsymcount;
9216       lgot_masks = (unsigned char *) end_local_plt;
9217       s = ppc64_elf_tdata (ibfd)->got;
9218       srel = ppc64_elf_tdata (ibfd)->relgot;
9219       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9220 	{
9221 	  struct got_entry **pent, *ent;
9222 
9223 	  pent = lgot_ents;
9224 	  while ((ent = *pent) != NULL)
9225 	    if (ent->got.refcount > 0)
9226 	      {
9227 		if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9228 		  {
9229 		    ppc64_tlsld_got (ibfd)->got.refcount += 1;
9230 		    *pent = ent->next;
9231 		  }
9232 		else
9233 		  {
9234 		    unsigned int num = 1;
9235 		    ent->got.offset = s->size;
9236 		    if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9237 		      num = 2;
9238 		    s->size += num * 8;
9239 		    if (info->shared)
9240 		      srel->size += num * sizeof (Elf64_External_Rela);
9241 		    else if ((*lgot_masks & PLT_IFUNC) != 0)
9242 		      {
9243 			htab->reliplt->size
9244 			  += num * sizeof (Elf64_External_Rela);
9245 			htab->got_reli_size
9246 			  += num * sizeof (Elf64_External_Rela);
9247 		      }
9248 		    pent = &ent->next;
9249 		  }
9250 	      }
9251 	    else
9252 	      *pent = ent->next;
9253 	}
9254 
9255       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
9256       for (; local_plt < end_local_plt; ++local_plt)
9257 	{
9258 	  struct plt_entry *ent;
9259 
9260 	  for (ent = *local_plt; ent != NULL; ent = ent->next)
9261 	    if (ent->plt.refcount > 0)
9262 	      {
9263 		s = htab->iplt;
9264 		ent->plt.offset = s->size;
9265 		s->size += PLT_ENTRY_SIZE;
9266 
9267 		htab->reliplt->size += sizeof (Elf64_External_Rela);
9268 	      }
9269 	    else
9270 	      ent->plt.offset = (bfd_vma) -1;
9271 	}
9272     }
9273 
9274   /* Allocate global sym .plt and .got entries, and space for global
9275      sym dynamic relocs.  */
9276   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9277 
9278   first_tlsld = NULL;
9279   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9280     {
9281       struct got_entry *ent;
9282 
9283       if (!is_ppc64_elf (ibfd))
9284 	continue;
9285 
9286       ent = ppc64_tlsld_got (ibfd);
9287       if (ent->got.refcount > 0)
9288 	{
9289 	  if (!htab->do_multi_toc && first_tlsld != NULL)
9290 	    {
9291 	      ent->is_indirect = TRUE;
9292 	      ent->got.ent = first_tlsld;
9293 	    }
9294 	  else
9295 	    {
9296 	      if (first_tlsld == NULL)
9297 		first_tlsld = ent;
9298 	      s = ppc64_elf_tdata (ibfd)->got;
9299 	      ent->got.offset = s->size;
9300 	      ent->owner = ibfd;
9301 	      s->size += 16;
9302 	      if (info->shared)
9303 		{
9304 		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9305 		  srel->size += sizeof (Elf64_External_Rela);
9306 		}
9307 	    }
9308 	}
9309       else
9310 	ent->got.offset = (bfd_vma) -1;
9311     }
9312 
9313   /* We now have determined the sizes of the various dynamic sections.
9314      Allocate memory for them.  */
9315   relocs = FALSE;
9316   for (s = dynobj->sections; s != NULL; s = s->next)
9317     {
9318       if ((s->flags & SEC_LINKER_CREATED) == 0)
9319 	continue;
9320 
9321       if (s == htab->brlt || s == htab->relbrlt)
9322 	/* These haven't been allocated yet;  don't strip.  */
9323 	continue;
9324       else if (s == htab->got
9325 	       || s == htab->plt
9326 	       || s == htab->iplt
9327 	       || s == htab->glink
9328 	       || s == htab->dynbss)
9329 	{
9330 	  /* Strip this section if we don't need it; see the
9331 	     comment below.  */
9332 	}
9333       else if (s == htab->glink_eh_frame)
9334 	{
9335 	  if (!bfd_is_abs_section (s->output_section))
9336 	    /* Not sized yet.  */
9337 	    continue;
9338 	}
9339       else if (CONST_STRNEQ (s->name, ".rela"))
9340 	{
9341 	  if (s->size != 0)
9342 	    {
9343 	      if (s != htab->relplt)
9344 		relocs = TRUE;
9345 
9346 	      /* We use the reloc_count field as a counter if we need
9347 		 to copy relocs into the output file.  */
9348 	      s->reloc_count = 0;
9349 	    }
9350 	}
9351       else
9352 	{
9353 	  /* It's not one of our sections, so don't allocate space.  */
9354 	  continue;
9355 	}
9356 
9357       if (s->size == 0)
9358 	{
9359 	  /* If we don't need this section, strip it from the
9360 	     output file.  This is mostly to handle .rela.bss and
9361 	     .rela.plt.  We must create both sections in
9362 	     create_dynamic_sections, because they must be created
9363 	     before the linker maps input sections to output
9364 	     sections.  The linker does that before
9365 	     adjust_dynamic_symbol is called, and it is that
9366 	     function which decides whether anything needs to go
9367 	     into these sections.  */
9368 	  s->flags |= SEC_EXCLUDE;
9369 	  continue;
9370 	}
9371 
9372       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9373 	continue;
9374 
9375       /* Allocate memory for the section contents.  We use bfd_zalloc
9376 	 here in case unused entries are not reclaimed before the
9377 	 section's contents are written out.  This should not happen,
9378 	 but this way if it does we get a R_PPC64_NONE reloc in .rela
9379 	 sections instead of garbage.
9380 	 We also rely on the section contents being zero when writing
9381 	 the GOT.  */
9382       s->contents = bfd_zalloc (dynobj, s->size);
9383       if (s->contents == NULL)
9384 	return FALSE;
9385     }
9386 
9387   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9388     {
9389       if (!is_ppc64_elf (ibfd))
9390 	continue;
9391 
9392       s = ppc64_elf_tdata (ibfd)->got;
9393       if (s != NULL && s != htab->got)
9394 	{
9395 	  if (s->size == 0)
9396 	    s->flags |= SEC_EXCLUDE;
9397 	  else
9398 	    {
9399 	      s->contents = bfd_zalloc (ibfd, s->size);
9400 	      if (s->contents == NULL)
9401 		return FALSE;
9402 	    }
9403 	}
9404       s = ppc64_elf_tdata (ibfd)->relgot;
9405       if (s != NULL)
9406 	{
9407 	  if (s->size == 0)
9408 	    s->flags |= SEC_EXCLUDE;
9409 	  else
9410 	    {
9411 	      s->contents = bfd_zalloc (ibfd, s->size);
9412 	      if (s->contents == NULL)
9413 		return FALSE;
9414 	      relocs = TRUE;
9415 	      s->reloc_count = 0;
9416 	    }
9417 	}
9418     }
9419 
9420   if (htab->elf.dynamic_sections_created)
9421     {
9422       /* Add some entries to the .dynamic section.  We fill in the
9423 	 values later, in ppc64_elf_finish_dynamic_sections, but we
9424 	 must add the entries now so that we get the correct size for
9425 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
9426 	 dynamic linker and used by the debugger.  */
9427 #define add_dynamic_entry(TAG, VAL) \
9428   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
9429 
9430       if (info->executable)
9431 	{
9432 	  if (!add_dynamic_entry (DT_DEBUG, 0))
9433 	    return FALSE;
9434 	}
9435 
9436       if (htab->plt != NULL && htab->plt->size != 0)
9437 	{
9438 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
9439 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
9440 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
9441 	      || !add_dynamic_entry (DT_JMPREL, 0)
9442 	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
9443 	    return FALSE;
9444 	}
9445 
9446       if (NO_OPD_RELOCS)
9447 	{
9448 	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
9449 	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
9450 	    return FALSE;
9451 	}
9452 
9453       if (!htab->no_tls_get_addr_opt
9454 	  && htab->tls_get_addr_fd != NULL
9455 	  && htab->tls_get_addr_fd->elf.plt.plist != NULL
9456 	  && !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
9457 	return FALSE;
9458 
9459       if (relocs)
9460 	{
9461 	  if (!add_dynamic_entry (DT_RELA, 0)
9462 	      || !add_dynamic_entry (DT_RELASZ, 0)
9463 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
9464 	    return FALSE;
9465 
9466 	  /* If any dynamic relocs apply to a read-only section,
9467 	     then we need a DT_TEXTREL entry.  */
9468 	  if ((info->flags & DF_TEXTREL) == 0)
9469 	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
9470 
9471 	  if ((info->flags & DF_TEXTREL) != 0)
9472 	    {
9473 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
9474 		return FALSE;
9475 	    }
9476 	}
9477     }
9478 #undef add_dynamic_entry
9479 
9480   return TRUE;
9481 }
9482 
9483 /* Determine the type of stub needed, if any, for a call.  */
9484 
9485 static inline enum ppc_stub_type
9486 ppc_type_of_stub (asection *input_sec,
9487 		  const Elf_Internal_Rela *rel,
9488 		  struct ppc_link_hash_entry **hash,
9489 		  struct plt_entry **plt_ent,
9490 		  bfd_vma destination)
9491 {
9492   struct ppc_link_hash_entry *h = *hash;
9493   bfd_vma location;
9494   bfd_vma branch_offset;
9495   bfd_vma max_branch_offset;
9496   enum elf_ppc64_reloc_type r_type;
9497 
9498   if (h != NULL)
9499     {
9500       struct plt_entry *ent;
9501       struct ppc_link_hash_entry *fdh = h;
9502       if (h->oh != NULL
9503 	  && h->oh->is_func_descriptor)
9504 	{
9505 	  fdh = ppc_follow_link (h->oh);
9506 	  *hash = fdh;
9507 	}
9508 
9509       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
9510 	if (ent->addend == rel->r_addend
9511 	    && ent->plt.offset != (bfd_vma) -1)
9512 	  {
9513 	    *plt_ent = ent;
9514 	    return ppc_stub_plt_call;
9515 	  }
9516 
9517       /* Here, we know we don't have a plt entry.  If we don't have a
9518 	 either a defined function descriptor or a defined entry symbol
9519 	 in a regular object file, then it is pointless trying to make
9520 	 any other type of stub.  */
9521       if (!is_static_defined (&fdh->elf)
9522 	  && !is_static_defined (&h->elf))
9523 	return ppc_stub_none;
9524     }
9525   else if (elf_local_got_ents (input_sec->owner) != NULL)
9526     {
9527       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
9528       struct plt_entry **local_plt = (struct plt_entry **)
9529 	elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
9530       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
9531 
9532       if (local_plt[r_symndx] != NULL)
9533 	{
9534 	  struct plt_entry *ent;
9535 
9536 	  for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
9537 	    if (ent->addend == rel->r_addend
9538 		&& ent->plt.offset != (bfd_vma) -1)
9539 	      {
9540 		*plt_ent = ent;
9541 		return ppc_stub_plt_call;
9542 	      }
9543 	}
9544     }
9545 
9546   /* Determine where the call point is.  */
9547   location = (input_sec->output_offset
9548 	      + input_sec->output_section->vma
9549 	      + rel->r_offset);
9550 
9551   branch_offset = destination - location;
9552   r_type = ELF64_R_TYPE (rel->r_info);
9553 
9554   /* Determine if a long branch stub is needed.  */
9555   max_branch_offset = 1 << 25;
9556   if (r_type != R_PPC64_REL24)
9557     max_branch_offset = 1 << 15;
9558 
9559   if (branch_offset + max_branch_offset >= 2 * max_branch_offset)
9560     /* We need a stub.  Figure out whether a long_branch or plt_branch
9561        is needed later.  */
9562     return ppc_stub_long_branch;
9563 
9564   return ppc_stub_none;
9565 }
9566 
9567 /* With power7 weakly ordered memory model, it is possible for ld.so
9568    to update a plt entry in one thread and have another thread see a
9569    stale zero toc entry.  To avoid this we need some sort of acquire
9570    barrier in the call stub.  One solution is to make the load of the
9571    toc word seem to appear to depend on the load of the function entry
9572    word.  Another solution is to test for r2 being zero, and branch to
9573    the appropriate glink entry if so.
9574 
9575    .	fake dep barrier	compare
9576    .	ld 11,xxx(2)		ld 11,xxx(2)
9577    .	mtctr 11		mtctr 11
9578    .	xor 11,11,11		ld 2,xxx+8(2)
9579    .	add 2,2,11		cmpldi 2,0
9580    .	ld 2,xxx+8(2)		bnectr+
9581    .	bctr			b <glink_entry>
9582 
9583    The solution involving the compare turns out to be faster, so
9584    that's what we use unless the branch won't reach.  */
9585 
9586 #define ALWAYS_USE_FAKE_DEP 0
9587 #define ALWAYS_EMIT_R2SAVE 0
9588 
9589 #define PPC_LO(v) ((v) & 0xffff)
9590 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9591 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9592 
9593 static inline unsigned int
9594 plt_stub_size (struct ppc_link_hash_table *htab,
9595 	       struct ppc_stub_hash_entry *stub_entry,
9596 	       bfd_vma off)
9597 {
9598   unsigned size = PLT_CALL_STUB_SIZE;
9599 
9600   if (!(ALWAYS_EMIT_R2SAVE
9601 	|| stub_entry->stub_type == ppc_stub_plt_call_r2save))
9602     size -= 4;
9603   if (!htab->plt_static_chain)
9604     size -= 4;
9605   if (htab->plt_thread_safe)
9606     size += 8;
9607   if (PPC_HA (off) == 0)
9608     size -= 4;
9609   if (PPC_HA (off + 8 + 8 * htab->plt_static_chain) != PPC_HA (off))
9610     size += 4;
9611   if (stub_entry->h != NULL
9612       && (stub_entry->h == htab->tls_get_addr_fd
9613 	  || stub_entry->h == htab->tls_get_addr)
9614       && !htab->no_tls_get_addr_opt)
9615     size += 13 * 4;
9616   return size;
9617 }
9618 
9619 /* If this stub would cross fewer 2**plt_stub_align boundaries if we align,
9620    then return the padding needed to do so.  */
9621 static inline unsigned int
9622 plt_stub_pad (struct ppc_link_hash_table *htab,
9623 	      struct ppc_stub_hash_entry *stub_entry,
9624 	      bfd_vma plt_off)
9625 {
9626   int stub_align = 1 << htab->plt_stub_align;
9627   unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
9628   bfd_vma stub_off = stub_entry->stub_sec->size;
9629 
9630   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
9631       > (stub_size & -stub_align))
9632     return stub_align - (stub_off & (stub_align - 1));
9633   return 0;
9634 }
9635 
9636 /* Build a .plt call stub.  */
9637 
9638 static inline bfd_byte *
9639 build_plt_stub (struct ppc_link_hash_table *htab,
9640 		struct ppc_stub_hash_entry *stub_entry,
9641 		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
9642 {
9643   bfd *obfd = htab->stub_bfd;
9644   bfd_boolean plt_static_chain = htab->plt_static_chain;
9645   bfd_boolean plt_thread_safe = htab->plt_thread_safe;
9646   bfd_boolean use_fake_dep = plt_thread_safe;
9647   bfd_vma cmp_branch_off = 0;
9648 
9649   if (!ALWAYS_USE_FAKE_DEP
9650       && plt_thread_safe
9651       && !(stub_entry->h != NULL
9652 	   && (stub_entry->h == htab->tls_get_addr_fd
9653 	       || stub_entry->h == htab->tls_get_addr)
9654 	   && !htab->no_tls_get_addr_opt))
9655     {
9656       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
9657       bfd_vma pltindex = (pltoff - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE;
9658       bfd_vma glinkoff = GLINK_CALL_STUB_SIZE + pltindex * 8;
9659       bfd_vma to, from;
9660 
9661       if (pltindex > 32768)
9662 	glinkoff += (pltindex - 32768) * 4;
9663       to = (glinkoff
9664 	    + htab->glink->output_offset
9665 	    + htab->glink->output_section->vma);
9666       from = (p - stub_entry->stub_sec->contents
9667 	      + 4 * (ALWAYS_EMIT_R2SAVE
9668 		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9669 	      + 4 * (PPC_HA (offset) != 0)
9670 	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
9671 		     != PPC_HA (offset))
9672 	      + 4 * (plt_static_chain != 0)
9673 	      + 20
9674 	      + stub_entry->stub_sec->output_offset
9675 	      + stub_entry->stub_sec->output_section->vma);
9676       cmp_branch_off = to - from;
9677       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
9678     }
9679 
9680   if (PPC_HA (offset) != 0)
9681     {
9682       if (r != NULL)
9683 	{
9684 	  if (ALWAYS_EMIT_R2SAVE
9685 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9686 	    r[0].r_offset += 4;
9687 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
9688 	  r[1].r_offset = r[0].r_offset + 4;
9689 	  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9690 	  r[1].r_addend = r[0].r_addend;
9691 	  if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9692 	    {
9693 	      r[2].r_offset = r[1].r_offset + 4;
9694 	      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
9695 	      r[2].r_addend = r[0].r_addend;
9696 	    }
9697 	  else
9698 	    {
9699 	      r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
9700 	      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9701 	      r[2].r_addend = r[0].r_addend + 8;
9702 	      if (plt_static_chain)
9703 		{
9704 		  r[3].r_offset = r[2].r_offset + 4;
9705 		  r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9706 		  r[3].r_addend = r[0].r_addend + 16;
9707 		}
9708 	    }
9709 	}
9710       if (ALWAYS_EMIT_R2SAVE
9711 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9712 	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
9713       bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
9714       bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),	p += 4;
9715       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9716 	{
9717 	  bfd_put_32 (obfd, ADDI_R12_R12 | PPC_LO (offset), p),	p += 4;
9718 	  offset = 0;
9719 	}
9720       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
9721       if (use_fake_dep)
9722 	{
9723 	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
9724 	  bfd_put_32 (obfd, ADD_R12_R12_R11, p),		p += 4;
9725 	}
9726       bfd_put_32 (obfd, LD_R2_0R12 | PPC_LO (offset + 8), p),	p += 4;
9727       if (plt_static_chain)
9728 	bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset + 16), p), p += 4;
9729     }
9730   else
9731     {
9732       if (r != NULL)
9733 	{
9734 	  if (ALWAYS_EMIT_R2SAVE
9735 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9736 	    r[0].r_offset += 4;
9737 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9738 	  if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9739 	    {
9740 	      r[1].r_offset = r[0].r_offset + 4;
9741 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
9742 	      r[1].r_addend = r[0].r_addend;
9743 	    }
9744 	  else
9745 	    {
9746 	      r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
9747 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9748 	      r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
9749 	      if (plt_static_chain)
9750 		{
9751 		  r[2].r_offset = r[1].r_offset + 4;
9752 		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9753 		  r[2].r_addend = r[0].r_addend + 8;
9754 		}
9755 	    }
9756 	}
9757       if (ALWAYS_EMIT_R2SAVE
9758 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9759 	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
9760       bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset), p),	p += 4;
9761       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9762 	{
9763 	  bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),	p += 4;
9764 	  offset = 0;
9765 	}
9766       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
9767       if (use_fake_dep)
9768 	{
9769 	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
9770 	  bfd_put_32 (obfd, ADD_R2_R2_R11, p),			p += 4;
9771 	}
9772       if (plt_static_chain)
9773 	bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
9774       bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p),	p += 4;
9775     }
9776   if (plt_thread_safe && !use_fake_dep)
9777     {
9778       bfd_put_32 (obfd, CMPLDI_R2_0, p),			p += 4;
9779       bfd_put_32 (obfd, BNECTR_P4, p),				p += 4;
9780       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
9781     }
9782   else
9783     bfd_put_32 (obfd, BCTR, p),					p += 4;
9784   return p;
9785 }
9786 
9787 /* Build a special .plt call stub for __tls_get_addr.  */
9788 
9789 #define LD_R11_0R3	0xe9630000
9790 #define LD_R12_0R3	0xe9830000
9791 #define MR_R0_R3	0x7c601b78
9792 #define CMPDI_R11_0	0x2c2b0000
9793 #define ADD_R3_R12_R13	0x7c6c6a14
9794 #define BEQLR		0x4d820020
9795 #define MR_R3_R0	0x7c030378
9796 #define MFLR_R11	0x7d6802a6
9797 #define STD_R11_0R1	0xf9610000
9798 #define BCTRL		0x4e800421
9799 #define LD_R11_0R1	0xe9610000
9800 #define LD_R2_0R1	0xe8410000
9801 #define MTLR_R11	0x7d6803a6
9802 
9803 static inline bfd_byte *
9804 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
9805 			 struct ppc_stub_hash_entry *stub_entry,
9806 			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
9807 {
9808   bfd *obfd = htab->stub_bfd;
9809 
9810   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),		p += 4;
9811   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
9812   bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
9813   bfd_put_32 (obfd, CMPDI_R11_0, p),		p += 4;
9814   bfd_put_32 (obfd, ADD_R3_R12_R13, p),		p += 4;
9815   bfd_put_32 (obfd, BEQLR, p),			p += 4;
9816   bfd_put_32 (obfd, MR_R3_R0, p),		p += 4;
9817   bfd_put_32 (obfd, MFLR_R11, p),		p += 4;
9818   bfd_put_32 (obfd, STD_R11_0R1 + 32, p),	p += 4;
9819 
9820   if (r != NULL)
9821     r[0].r_offset += 9 * 4;
9822   p = build_plt_stub (htab, stub_entry, p, offset, r);
9823   bfd_put_32 (obfd, BCTRL, p - 4);
9824 
9825   bfd_put_32 (obfd, LD_R11_0R1 + 32, p),	p += 4;
9826   bfd_put_32 (obfd, LD_R2_0R1 + 40, p),		p += 4;
9827   bfd_put_32 (obfd, MTLR_R11, p),		p += 4;
9828   bfd_put_32 (obfd, BLR, p),			p += 4;
9829 
9830   return p;
9831 }
9832 
9833 static Elf_Internal_Rela *
9834 get_relocs (asection *sec, int count)
9835 {
9836   Elf_Internal_Rela *relocs;
9837   struct bfd_elf_section_data *elfsec_data;
9838 
9839   elfsec_data = elf_section_data (sec);
9840   relocs = elfsec_data->relocs;
9841   if (relocs == NULL)
9842     {
9843       bfd_size_type relsize;
9844       relsize = sec->reloc_count * sizeof (*relocs);
9845       relocs = bfd_alloc (sec->owner, relsize);
9846       if (relocs == NULL)
9847 	return NULL;
9848       elfsec_data->relocs = relocs;
9849       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
9850 					  sizeof (Elf_Internal_Shdr));
9851       if (elfsec_data->rela.hdr == NULL)
9852 	return NULL;
9853       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
9854 					* sizeof (Elf64_External_Rela));
9855       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
9856       sec->reloc_count = 0;
9857     }
9858   relocs += sec->reloc_count;
9859   sec->reloc_count += count;
9860   return relocs;
9861 }
9862 
9863 static bfd_vma
9864 get_r2off (struct bfd_link_info *info,
9865 	   struct ppc_stub_hash_entry *stub_entry)
9866 {
9867   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9868   bfd_vma r2off = htab->stub_group[stub_entry->target_section->id].toc_off;
9869 
9870   if (r2off == 0)
9871     {
9872       /* Support linking -R objects.  Get the toc pointer from the
9873 	 opd entry.  */
9874       char buf[8];
9875       asection *opd = stub_entry->h->elf.root.u.def.section;
9876       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
9877 
9878       if (strcmp (opd->name, ".opd") != 0
9879 	  || opd->reloc_count != 0)
9880 	{
9881 	  info->callbacks->einfo (_("%P: cannot find opd entry toc for `%T'\n"),
9882 				  stub_entry->h->elf.root.root.string);
9883 	  bfd_set_error (bfd_error_bad_value);
9884 	  return 0;
9885 	}
9886       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
9887 	return 0;
9888       r2off = bfd_get_64 (opd->owner, buf);
9889       r2off -= elf_gp (info->output_bfd);
9890     }
9891   r2off -= htab->stub_group[stub_entry->id_sec->id].toc_off;
9892   return r2off;
9893 }
9894 
9895 static bfd_boolean
9896 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
9897 {
9898   struct ppc_stub_hash_entry *stub_entry;
9899   struct ppc_branch_hash_entry *br_entry;
9900   struct bfd_link_info *info;
9901   struct ppc_link_hash_table *htab;
9902   bfd_byte *loc;
9903   bfd_byte *p;
9904   bfd_vma dest, off;
9905   int size;
9906   Elf_Internal_Rela *r;
9907   asection *plt;
9908 
9909   /* Massage our args to the form they really have.  */
9910   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
9911   info = in_arg;
9912 
9913   htab = ppc_hash_table (info);
9914   if (htab == NULL)
9915     return FALSE;
9916 
9917   /* Make a note of the offset within the stubs for this entry.  */
9918   stub_entry->stub_offset = stub_entry->stub_sec->size;
9919   loc = stub_entry->stub_sec->contents + stub_entry->stub_offset;
9920 
9921   htab->stub_count[stub_entry->stub_type - 1] += 1;
9922   switch (stub_entry->stub_type)
9923     {
9924     case ppc_stub_long_branch:
9925     case ppc_stub_long_branch_r2off:
9926       /* Branches are relative.  This is where we are going to.  */
9927       off = dest = (stub_entry->target_value
9928 		    + stub_entry->target_section->output_offset
9929 		    + stub_entry->target_section->output_section->vma);
9930 
9931       /* And this is where we are coming from.  */
9932       off -= (stub_entry->stub_offset
9933 	      + stub_entry->stub_sec->output_offset
9934 	      + stub_entry->stub_sec->output_section->vma);
9935 
9936       size = 4;
9937       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
9938 	{
9939 	  bfd_vma r2off = get_r2off (info, stub_entry);
9940 
9941 	  if (r2off == 0)
9942 	    {
9943 	      htab->stub_error = TRUE;
9944 	      return FALSE;
9945 	    }
9946 	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
9947 	  loc += 4;
9948 	  size = 12;
9949 	  if (PPC_HA (r2off) != 0)
9950 	    {
9951 	      size = 16;
9952 	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
9953 	      loc += 4;
9954 	    }
9955 	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
9956 	  loc += 4;
9957 	  off -= size - 4;
9958 	}
9959       bfd_put_32 (htab->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
9960 
9961       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
9962 	{
9963 	  info->callbacks->einfo
9964 	    (_("%P: long branch stub `%s' offset overflow\n"),
9965 	     stub_entry->root.string);
9966 	  htab->stub_error = TRUE;
9967 	  return FALSE;
9968 	}
9969 
9970       if (info->emitrelocations)
9971 	{
9972 	  r = get_relocs (stub_entry->stub_sec, 1);
9973 	  if (r == NULL)
9974 	    return FALSE;
9975 	  r->r_offset = loc - stub_entry->stub_sec->contents;
9976 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
9977 	  r->r_addend = dest;
9978 	  if (stub_entry->h != NULL)
9979 	    {
9980 	      struct elf_link_hash_entry **hashes;
9981 	      unsigned long symndx;
9982 	      struct ppc_link_hash_entry *h;
9983 
9984 	      hashes = elf_sym_hashes (htab->stub_bfd);
9985 	      if (hashes == NULL)
9986 		{
9987 		  bfd_size_type hsize;
9988 
9989 		  hsize = (htab->stub_globals + 1) * sizeof (*hashes);
9990 		  hashes = bfd_zalloc (htab->stub_bfd, hsize);
9991 		  if (hashes == NULL)
9992 		    return FALSE;
9993 		  elf_sym_hashes (htab->stub_bfd) = hashes;
9994 		  htab->stub_globals = 1;
9995 		}
9996 	      symndx = htab->stub_globals++;
9997 	      h = stub_entry->h;
9998 	      hashes[symndx] = &h->elf;
9999 	      r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24);
10000 	      if (h->oh != NULL && h->oh->is_func)
10001 		h = ppc_follow_link (h->oh);
10002 	      if (h->elf.root.u.def.section != stub_entry->target_section)
10003 		/* H is an opd symbol.  The addend must be zero.  */
10004 		r->r_addend = 0;
10005 	      else
10006 		{
10007 		  off = (h->elf.root.u.def.value
10008 			 + h->elf.root.u.def.section->output_offset
10009 			 + h->elf.root.u.def.section->output_section->vma);
10010 		  r->r_addend -= off;
10011 		}
10012 	    }
10013 	}
10014       break;
10015 
10016     case ppc_stub_plt_branch:
10017     case ppc_stub_plt_branch_r2off:
10018       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10019 					 stub_entry->root.string + 9,
10020 					 FALSE, FALSE);
10021       if (br_entry == NULL)
10022 	{
10023 	  info->callbacks->einfo (_("%P: can't find branch stub `%s'\n"),
10024 				  stub_entry->root.string);
10025 	  htab->stub_error = TRUE;
10026 	  return FALSE;
10027 	}
10028 
10029       dest = (stub_entry->target_value
10030 	      + stub_entry->target_section->output_offset
10031 	      + stub_entry->target_section->output_section->vma);
10032 
10033       bfd_put_64 (htab->brlt->owner, dest,
10034 		  htab->brlt->contents + br_entry->offset);
10035 
10036       if (br_entry->iter == htab->stub_iteration)
10037 	{
10038 	  br_entry->iter = 0;
10039 
10040 	  if (htab->relbrlt != NULL)
10041 	    {
10042 	      /* Create a reloc for the branch lookup table entry.  */
10043 	      Elf_Internal_Rela rela;
10044 	      bfd_byte *rl;
10045 
10046 	      rela.r_offset = (br_entry->offset
10047 			       + htab->brlt->output_offset
10048 			       + htab->brlt->output_section->vma);
10049 	      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10050 	      rela.r_addend = dest;
10051 
10052 	      rl = htab->relbrlt->contents;
10053 	      rl += (htab->relbrlt->reloc_count++
10054 		     * sizeof (Elf64_External_Rela));
10055 	      bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
10056 	    }
10057 	  else if (info->emitrelocations)
10058 	    {
10059 	      r = get_relocs (htab->brlt, 1);
10060 	      if (r == NULL)
10061 		return FALSE;
10062 	      /* brlt, being SEC_LINKER_CREATED does not go through the
10063 		 normal reloc processing.  Symbols and offsets are not
10064 		 translated from input file to output file form, so
10065 		 set up the offset per the output file.  */
10066 	      r->r_offset = (br_entry->offset
10067 			     + htab->brlt->output_offset
10068 			     + htab->brlt->output_section->vma);
10069 	      r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10070 	      r->r_addend = dest;
10071 	    }
10072 	}
10073 
10074       dest = (br_entry->offset
10075 	      + htab->brlt->output_offset
10076 	      + htab->brlt->output_section->vma);
10077 
10078       off = (dest
10079 	     - elf_gp (htab->brlt->output_section->owner)
10080 	     - htab->stub_group[stub_entry->id_sec->id].toc_off);
10081 
10082       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10083 	{
10084 	  info->callbacks->einfo
10085 	    (_("%P: linkage table error against `%T'\n"),
10086 	     stub_entry->root.string);
10087 	  bfd_set_error (bfd_error_bad_value);
10088 	  htab->stub_error = TRUE;
10089 	  return FALSE;
10090 	}
10091 
10092       if (info->emitrelocations)
10093 	{
10094 	  r = get_relocs (stub_entry->stub_sec, 1 + (PPC_HA (off) != 0));
10095 	  if (r == NULL)
10096 	    return FALSE;
10097 	  r[0].r_offset = loc - stub_entry->stub_sec->contents;
10098 	  if (bfd_big_endian (info->output_bfd))
10099 	    r[0].r_offset += 2;
10100 	  if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
10101 	    r[0].r_offset += 4;
10102 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10103 	  r[0].r_addend = dest;
10104 	  if (PPC_HA (off) != 0)
10105 	    {
10106 	      r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10107 	      r[1].r_offset = r[0].r_offset + 4;
10108 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10109 	      r[1].r_addend = r[0].r_addend;
10110 	    }
10111 	}
10112 
10113       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10114 	{
10115 	  if (PPC_HA (off) != 0)
10116 	    {
10117 	      size = 16;
10118 	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc);
10119 	      loc += 4;
10120 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc);
10121 	    }
10122 	  else
10123 	    {
10124 	      size = 12;
10125 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc);
10126 	    }
10127 	}
10128       else
10129 	{
10130 	  bfd_vma r2off = get_r2off (info, stub_entry);
10131 
10132 	  if (r2off == 0)
10133 	    {
10134 	      htab->stub_error = TRUE;
10135 	      return FALSE;
10136 	    }
10137 
10138 	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
10139 	  loc += 4;
10140 	  size = 20;
10141 	  if (PPC_HA (off) != 0)
10142 	    {
10143 	      size += 4;
10144 	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc);
10145 	      loc += 4;
10146 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc);
10147 	      loc += 4;
10148 	    }
10149 	  else
10150 	    {
10151 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc);
10152 	      loc += 4;
10153 	    }
10154 
10155 	  if (PPC_HA (r2off) != 0)
10156 	    {
10157 	      size += 4;
10158 	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
10159 	      loc += 4;
10160 	    }
10161 	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
10162 	}
10163       loc += 4;
10164       bfd_put_32 (htab->stub_bfd, MTCTR_R11, loc);
10165       loc += 4;
10166       bfd_put_32 (htab->stub_bfd, BCTR, loc);
10167       break;
10168 
10169     case ppc_stub_plt_call:
10170     case ppc_stub_plt_call_r2save:
10171       if (stub_entry->h != NULL
10172 	  && stub_entry->h->is_func_descriptor
10173 	  && stub_entry->h->oh != NULL)
10174 	{
10175 	  struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
10176 
10177 	  /* If the old-ABI "dot-symbol" is undefined make it weak so
10178 	     we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.
10179 	     FIXME: We used to define the symbol on one of the call
10180 	     stubs instead, which is why we test symbol section id
10181 	     against htab->top_id in various places.  Likely all
10182 	     these checks could now disappear.  */
10183 	  if (fh->elf.root.type == bfd_link_hash_undefined)
10184 	    fh->elf.root.type = bfd_link_hash_undefweak;
10185 	  /* Stop undo_symbol_twiddle changing it back to undefined.  */
10186 	  fh->was_undefined = 0;
10187 	}
10188 
10189       /* Now build the stub.  */
10190       dest = stub_entry->plt_ent->plt.offset & ~1;
10191       if (dest >= (bfd_vma) -2)
10192 	abort ();
10193 
10194       plt = htab->plt;
10195       if (!htab->elf.dynamic_sections_created
10196 	  || stub_entry->h == NULL
10197 	  || stub_entry->h->elf.dynindx == -1)
10198 	plt = htab->iplt;
10199 
10200       dest += plt->output_offset + plt->output_section->vma;
10201 
10202       if (stub_entry->h == NULL
10203 	  && (stub_entry->plt_ent->plt.offset & 1) == 0)
10204 	{
10205 	  Elf_Internal_Rela rela;
10206 	  bfd_byte *rl;
10207 
10208 	  rela.r_offset = dest;
10209 	  rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
10210 	  rela.r_addend = (stub_entry->target_value
10211 			   + stub_entry->target_section->output_offset
10212 			   + stub_entry->target_section->output_section->vma);
10213 
10214 	  rl = (htab->reliplt->contents
10215 		+ (htab->reliplt->reloc_count++
10216 		   * sizeof (Elf64_External_Rela)));
10217 	  bfd_elf64_swap_reloca_out (info->output_bfd, &rela, rl);
10218 	  stub_entry->plt_ent->plt.offset |= 1;
10219 	}
10220 
10221       off = (dest
10222 	     - elf_gp (plt->output_section->owner)
10223 	     - htab->stub_group[stub_entry->id_sec->id].toc_off);
10224 
10225       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10226 	{
10227 	  info->callbacks->einfo
10228 	    (_("%P: linkage table error against `%T'\n"),
10229 	     stub_entry->h != NULL
10230 	     ? stub_entry->h->elf.root.root.string
10231 	     : "<local sym>");
10232 	  bfd_set_error (bfd_error_bad_value);
10233 	  htab->stub_error = TRUE;
10234 	  return FALSE;
10235 	}
10236 
10237       if (htab->plt_stub_align != 0)
10238 	{
10239 	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
10240 
10241 	  stub_entry->stub_sec->size += pad;
10242 	  stub_entry->stub_offset = stub_entry->stub_sec->size;
10243 	  loc += pad;
10244 	}
10245 
10246       r = NULL;
10247       if (info->emitrelocations)
10248 	{
10249 	  r = get_relocs (stub_entry->stub_sec,
10250 			  (2
10251 			   + (PPC_HA (off) != 0)
10252 			   + (htab->plt_static_chain
10253 			      && PPC_HA (off + 16) == PPC_HA (off))));
10254 	  if (r == NULL)
10255 	    return FALSE;
10256 	  r[0].r_offset = loc - stub_entry->stub_sec->contents;
10257 	  if (bfd_big_endian (info->output_bfd))
10258 	    r[0].r_offset += 2;
10259 	  r[0].r_addend = dest;
10260 	}
10261       if (stub_entry->h != NULL
10262 	  && (stub_entry->h == htab->tls_get_addr_fd
10263 	      || stub_entry->h == htab->tls_get_addr)
10264 	  && !htab->no_tls_get_addr_opt)
10265 	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
10266       else
10267 	p = build_plt_stub (htab, stub_entry, loc, off, r);
10268       size = p - loc;
10269       break;
10270 
10271     default:
10272       BFD_FAIL ();
10273       return FALSE;
10274     }
10275 
10276   stub_entry->stub_sec->size += size;
10277 
10278   if (htab->emit_stub_syms)
10279     {
10280       struct elf_link_hash_entry *h;
10281       size_t len1, len2;
10282       char *name;
10283       const char *const stub_str[] = { "long_branch",
10284 				       "long_branch_r2off",
10285 				       "plt_branch",
10286 				       "plt_branch_r2off",
10287 				       "plt_call",
10288 				       "plt_call" };
10289 
10290       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
10291       len2 = strlen (stub_entry->root.string);
10292       name = bfd_malloc (len1 + len2 + 2);
10293       if (name == NULL)
10294 	return FALSE;
10295       memcpy (name, stub_entry->root.string, 9);
10296       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
10297       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
10298       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
10299       if (h == NULL)
10300 	return FALSE;
10301       if (h->root.type == bfd_link_hash_new)
10302 	{
10303 	  h->root.type = bfd_link_hash_defined;
10304 	  h->root.u.def.section = stub_entry->stub_sec;
10305 	  h->root.u.def.value = stub_entry->stub_offset;
10306 	  h->ref_regular = 1;
10307 	  h->def_regular = 1;
10308 	  h->ref_regular_nonweak = 1;
10309 	  h->forced_local = 1;
10310 	  h->non_elf = 0;
10311 	}
10312     }
10313 
10314   return TRUE;
10315 }
10316 
10317 /* As above, but don't actually build the stub.  Just bump offset so
10318    we know stub section sizes, and select plt_branch stubs where
10319    long_branch stubs won't do.  */
10320 
10321 static bfd_boolean
10322 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10323 {
10324   struct ppc_stub_hash_entry *stub_entry;
10325   struct bfd_link_info *info;
10326   struct ppc_link_hash_table *htab;
10327   bfd_vma off;
10328   int size;
10329 
10330   /* Massage our args to the form they really have.  */
10331   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10332   info = in_arg;
10333 
10334   htab = ppc_hash_table (info);
10335   if (htab == NULL)
10336     return FALSE;
10337 
10338   if (stub_entry->stub_type == ppc_stub_plt_call
10339       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10340     {
10341       asection *plt;
10342       off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
10343       if (off >= (bfd_vma) -2)
10344 	abort ();
10345       plt = htab->plt;
10346       if (!htab->elf.dynamic_sections_created
10347 	  || stub_entry->h == NULL
10348 	  || stub_entry->h->elf.dynindx == -1)
10349 	plt = htab->iplt;
10350       off += (plt->output_offset
10351 	      + plt->output_section->vma
10352 	      - elf_gp (plt->output_section->owner)
10353 	      - htab->stub_group[stub_entry->id_sec->id].toc_off);
10354 
10355       size = plt_stub_size (htab, stub_entry, off);
10356       if (htab->plt_stub_align)
10357 	size += plt_stub_pad (htab, stub_entry, off);
10358       if (info->emitrelocations)
10359 	{
10360 	  stub_entry->stub_sec->reloc_count
10361 	    += (2
10362 		+ (PPC_HA (off) != 0)
10363 		+ (htab->plt_static_chain
10364 		   && PPC_HA (off + 16) == PPC_HA (off)));
10365 	  stub_entry->stub_sec->flags |= SEC_RELOC;
10366 	}
10367     }
10368   else
10369     {
10370       /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
10371 	 variants.  */
10372       bfd_vma r2off = 0;
10373 
10374       off = (stub_entry->target_value
10375 	     + stub_entry->target_section->output_offset
10376 	     + stub_entry->target_section->output_section->vma);
10377       off -= (stub_entry->stub_sec->size
10378 	      + stub_entry->stub_sec->output_offset
10379 	      + stub_entry->stub_sec->output_section->vma);
10380 
10381       /* Reset the stub type from the plt variant in case we now
10382 	 can reach with a shorter stub.  */
10383       if (stub_entry->stub_type >= ppc_stub_plt_branch)
10384 	stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
10385 
10386       size = 4;
10387       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10388 	{
10389 	  r2off = get_r2off (info, stub_entry);
10390 	  if (r2off == 0)
10391 	    {
10392 	      htab->stub_error = TRUE;
10393 	      return FALSE;
10394 	    }
10395 	  size = 12;
10396 	  if (PPC_HA (r2off) != 0)
10397 	    size = 16;
10398 	  off -= size - 4;
10399 	}
10400 
10401       /* If the branch offset if too big, use a ppc_stub_plt_branch.  */
10402       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
10403 	{
10404 	  struct ppc_branch_hash_entry *br_entry;
10405 
10406 	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10407 					     stub_entry->root.string + 9,
10408 					     TRUE, FALSE);
10409 	  if (br_entry == NULL)
10410 	    {
10411 	      info->callbacks->einfo (_("%P: can't build branch stub `%s'\n"),
10412 				      stub_entry->root.string);
10413 	      htab->stub_error = TRUE;
10414 	      return FALSE;
10415 	    }
10416 
10417 	  if (br_entry->iter != htab->stub_iteration)
10418 	    {
10419 	      br_entry->iter = htab->stub_iteration;
10420 	      br_entry->offset = htab->brlt->size;
10421 	      htab->brlt->size += 8;
10422 
10423 	      if (htab->relbrlt != NULL)
10424 		htab->relbrlt->size += sizeof (Elf64_External_Rela);
10425 	      else if (info->emitrelocations)
10426 		{
10427 		  htab->brlt->reloc_count += 1;
10428 		  htab->brlt->flags |= SEC_RELOC;
10429 		}
10430 	    }
10431 
10432 	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
10433 	  off = (br_entry->offset
10434 		 + htab->brlt->output_offset
10435 		 + htab->brlt->output_section->vma
10436 		 - elf_gp (htab->brlt->output_section->owner)
10437 		 - htab->stub_group[stub_entry->id_sec->id].toc_off);
10438 
10439 	  if (info->emitrelocations)
10440 	    {
10441 	      stub_entry->stub_sec->reloc_count += 1 + (PPC_HA (off) != 0);
10442 	      stub_entry->stub_sec->flags |= SEC_RELOC;
10443 	    }
10444 
10445 	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10446 	    {
10447 	      size = 12;
10448 	      if (PPC_HA (off) != 0)
10449 		size = 16;
10450 	    }
10451 	  else
10452 	    {
10453 	      size = 20;
10454 	      if (PPC_HA (off) != 0)
10455 		size += 4;
10456 
10457 	      if (PPC_HA (r2off) != 0)
10458 		size += 4;
10459 	    }
10460 	}
10461       else if (info->emitrelocations)
10462 	{
10463 	  stub_entry->stub_sec->reloc_count += 1;
10464 	  stub_entry->stub_sec->flags |= SEC_RELOC;
10465 	}
10466     }
10467 
10468   stub_entry->stub_sec->size += size;
10469   return TRUE;
10470 }
10471 
10472 /* Set up various things so that we can make a list of input sections
10473    for each output section included in the link.  Returns -1 on error,
10474    0 when no stubs will be needed, and 1 on success.  */
10475 
10476 int
10477 ppc64_elf_setup_section_lists
10478   (struct bfd_link_info *info,
10479    asection *(*add_stub_section) (const char *, asection *),
10480    void (*layout_sections_again) (void))
10481 {
10482   bfd *input_bfd;
10483   int top_id, top_index, id;
10484   asection *section;
10485   asection **input_list;
10486   bfd_size_type amt;
10487   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10488 
10489   if (htab == NULL)
10490     return -1;
10491   /* Stash our params away.  */
10492   htab->add_stub_section = add_stub_section;
10493   htab->layout_sections_again = layout_sections_again;
10494 
10495   if (htab->brlt == NULL)
10496     return 0;
10497 
10498   /* Find the top input section id.  */
10499   for (input_bfd = info->input_bfds, top_id = 3;
10500        input_bfd != NULL;
10501        input_bfd = input_bfd->link_next)
10502     {
10503       for (section = input_bfd->sections;
10504 	   section != NULL;
10505 	   section = section->next)
10506 	{
10507 	  if (top_id < section->id)
10508 	    top_id = section->id;
10509 	}
10510     }
10511 
10512   htab->top_id = top_id;
10513   amt = sizeof (struct map_stub) * (top_id + 1);
10514   htab->stub_group = bfd_zmalloc (amt);
10515   if (htab->stub_group == NULL)
10516     return -1;
10517 
10518   /* Set toc_off for com, und, abs and ind sections.  */
10519   for (id = 0; id < 3; id++)
10520     htab->stub_group[id].toc_off = TOC_BASE_OFF;
10521 
10522   /* We can't use output_bfd->section_count here to find the top output
10523      section index as some sections may have been removed, and
10524      strip_excluded_output_sections doesn't renumber the indices.  */
10525   for (section = info->output_bfd->sections, top_index = 0;
10526        section != NULL;
10527        section = section->next)
10528     {
10529       if (top_index < section->index)
10530 	top_index = section->index;
10531     }
10532 
10533   htab->top_index = top_index;
10534   amt = sizeof (asection *) * (top_index + 1);
10535   input_list = bfd_zmalloc (amt);
10536   htab->input_list = input_list;
10537   if (input_list == NULL)
10538     return -1;
10539 
10540   return 1;
10541 }
10542 
10543 /* Set up for first pass at multitoc partitioning.  */
10544 
10545 void
10546 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
10547 {
10548   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10549 
10550   elf_gp (info->output_bfd) = ppc64_elf_toc (info->output_bfd);
10551   htab->toc_curr = elf_gp (info->output_bfd);
10552   htab->toc_bfd = NULL;
10553   htab->toc_first_sec = NULL;
10554 }
10555 
10556 /* The linker repeatedly calls this function for each TOC input section
10557    and linker generated GOT section.  Group input bfds such that the toc
10558    within a group is less than 64k in size.  */
10559 
10560 bfd_boolean
10561 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
10562 {
10563   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10564   bfd_vma addr, off, limit;
10565 
10566   if (htab == NULL)
10567     return FALSE;
10568 
10569   if (!htab->second_toc_pass)
10570     {
10571       /* Keep track of the first .toc or .got section for this input bfd.  */
10572       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
10573 
10574       if (new_bfd)
10575 	{
10576 	  htab->toc_bfd = isec->owner;
10577 	  htab->toc_first_sec = isec;
10578 	}
10579 
10580       addr = isec->output_offset + isec->output_section->vma;
10581       off = addr - htab->toc_curr;
10582       limit = 0x80008000;
10583       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
10584 	limit = 0x10000;
10585       if (off + isec->size > limit)
10586 	{
10587 	  addr = (htab->toc_first_sec->output_offset
10588 		  + htab->toc_first_sec->output_section->vma);
10589 	  htab->toc_curr = addr;
10590 	}
10591 
10592       /* toc_curr is the base address of this toc group.  Set elf_gp
10593 	 for the input section to be the offset relative to the
10594 	 output toc base plus 0x8000.  Making the input elf_gp an
10595 	 offset allows us to move the toc as a whole without
10596 	 recalculating input elf_gp.  */
10597       off = htab->toc_curr - elf_gp (isec->output_section->owner);
10598       off += TOC_BASE_OFF;
10599 
10600       /* Die if someone uses a linker script that doesn't keep input
10601 	 file .toc and .got together.  */
10602       if (new_bfd
10603 	  && elf_gp (isec->owner) != 0
10604 	  && elf_gp (isec->owner) != off)
10605 	return FALSE;
10606 
10607       elf_gp (isec->owner) = off;
10608       return TRUE;
10609     }
10610 
10611   /* During the second pass toc_first_sec points to the start of
10612      a toc group, and toc_curr is used to track the old elf_gp.
10613      We use toc_bfd to ensure we only look at each bfd once.  */
10614   if (htab->toc_bfd == isec->owner)
10615     return TRUE;
10616   htab->toc_bfd = isec->owner;
10617 
10618   if (htab->toc_first_sec == NULL
10619       || htab->toc_curr != elf_gp (isec->owner))
10620     {
10621       htab->toc_curr = elf_gp (isec->owner);
10622       htab->toc_first_sec = isec;
10623     }
10624   addr = (htab->toc_first_sec->output_offset
10625 	  + htab->toc_first_sec->output_section->vma);
10626   off = addr - elf_gp (isec->output_section->owner) + TOC_BASE_OFF;
10627   elf_gp (isec->owner) = off;
10628 
10629   return TRUE;
10630 }
10631 
10632 /* Called via elf_link_hash_traverse to merge GOT entries for global
10633    symbol H.  */
10634 
10635 static bfd_boolean
10636 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
10637 {
10638   if (h->root.type == bfd_link_hash_indirect)
10639     return TRUE;
10640 
10641   merge_got_entries (&h->got.glist);
10642 
10643   return TRUE;
10644 }
10645 
10646 /* Called via elf_link_hash_traverse to allocate GOT entries for global
10647    symbol H.  */
10648 
10649 static bfd_boolean
10650 reallocate_got (struct elf_link_hash_entry *h, void *inf)
10651 {
10652   struct got_entry *gent;
10653 
10654   if (h->root.type == bfd_link_hash_indirect)
10655     return TRUE;
10656 
10657   for (gent = h->got.glist; gent != NULL; gent = gent->next)
10658     if (!gent->is_indirect)
10659       allocate_got (h, (struct bfd_link_info *) inf, gent);
10660   return TRUE;
10661 }
10662 
10663 /* Called on the first multitoc pass after the last call to
10664    ppc64_elf_next_toc_section.  This function removes duplicate GOT
10665    entries.  */
10666 
10667 bfd_boolean
10668 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
10669 {
10670   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10671   struct bfd *ibfd, *ibfd2;
10672   bfd_boolean done_something;
10673 
10674   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
10675 
10676   if (!htab->do_multi_toc)
10677     return FALSE;
10678 
10679   /* Merge global sym got entries within a toc group.  */
10680   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
10681 
10682   /* And tlsld_got.  */
10683   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10684     {
10685       struct got_entry *ent, *ent2;
10686 
10687       if (!is_ppc64_elf (ibfd))
10688 	continue;
10689 
10690       ent = ppc64_tlsld_got (ibfd);
10691       if (!ent->is_indirect
10692 	  && ent->got.offset != (bfd_vma) -1)
10693 	{
10694 	  for (ibfd2 = ibfd->link_next; ibfd2 != NULL; ibfd2 = ibfd2->link_next)
10695 	    {
10696 	      if (!is_ppc64_elf (ibfd2))
10697 		continue;
10698 
10699 	      ent2 = ppc64_tlsld_got (ibfd2);
10700 	      if (!ent2->is_indirect
10701 		  && ent2->got.offset != (bfd_vma) -1
10702 		  && elf_gp (ibfd2) == elf_gp (ibfd))
10703 		{
10704 		  ent2->is_indirect = TRUE;
10705 		  ent2->got.ent = ent;
10706 		}
10707 	    }
10708 	}
10709     }
10710 
10711   /* Zap sizes of got sections.  */
10712   htab->reliplt->rawsize = htab->reliplt->size;
10713   htab->reliplt->size -= htab->got_reli_size;
10714   htab->got_reli_size = 0;
10715 
10716   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10717     {
10718       asection *got, *relgot;
10719 
10720       if (!is_ppc64_elf (ibfd))
10721 	continue;
10722 
10723       got = ppc64_elf_tdata (ibfd)->got;
10724       if (got != NULL)
10725 	{
10726 	  got->rawsize = got->size;
10727 	  got->size = 0;
10728 	  relgot = ppc64_elf_tdata (ibfd)->relgot;
10729 	  relgot->rawsize = relgot->size;
10730 	  relgot->size = 0;
10731 	}
10732     }
10733 
10734   /* Now reallocate the got, local syms first.  We don't need to
10735      allocate section contents again since we never increase size.  */
10736   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10737     {
10738       struct got_entry **lgot_ents;
10739       struct got_entry **end_lgot_ents;
10740       struct plt_entry **local_plt;
10741       struct plt_entry **end_local_plt;
10742       unsigned char *lgot_masks;
10743       bfd_size_type locsymcount;
10744       Elf_Internal_Shdr *symtab_hdr;
10745       asection *s, *srel;
10746 
10747       if (!is_ppc64_elf (ibfd))
10748 	continue;
10749 
10750       lgot_ents = elf_local_got_ents (ibfd);
10751       if (!lgot_ents)
10752 	continue;
10753 
10754       symtab_hdr = &elf_symtab_hdr (ibfd);
10755       locsymcount = symtab_hdr->sh_info;
10756       end_lgot_ents = lgot_ents + locsymcount;
10757       local_plt = (struct plt_entry **) end_lgot_ents;
10758       end_local_plt = local_plt + locsymcount;
10759       lgot_masks = (unsigned char *) end_local_plt;
10760       s = ppc64_elf_tdata (ibfd)->got;
10761       srel = ppc64_elf_tdata (ibfd)->relgot;
10762       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
10763 	{
10764 	  struct got_entry *ent;
10765 
10766 	  for (ent = *lgot_ents; ent != NULL; ent = ent->next)
10767 	    {
10768 	      unsigned int num = 1;
10769 	      ent->got.offset = s->size;
10770 	      if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
10771 		num = 2;
10772 	      s->size += num * 8;
10773 	      if (info->shared)
10774 		srel->size += num * sizeof (Elf64_External_Rela);
10775 	      else if ((*lgot_masks & PLT_IFUNC) != 0)
10776 		{
10777 		  htab->reliplt->size
10778 		    += num * sizeof (Elf64_External_Rela);
10779 		  htab->got_reli_size
10780 		    += num * sizeof (Elf64_External_Rela);
10781 		}
10782 	    }
10783 	}
10784     }
10785 
10786   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
10787 
10788   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10789     {
10790       struct got_entry *ent;
10791 
10792       if (!is_ppc64_elf (ibfd))
10793 	continue;
10794 
10795       ent = ppc64_tlsld_got (ibfd);
10796       if (!ent->is_indirect
10797 	  && ent->got.offset != (bfd_vma) -1)
10798 	{
10799 	  asection *s = ppc64_elf_tdata (ibfd)->got;
10800 	  ent->got.offset = s->size;
10801 	  s->size += 16;
10802 	  if (info->shared)
10803 	    {
10804 	      asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10805 	      srel->size += sizeof (Elf64_External_Rela);
10806 	    }
10807 	}
10808     }
10809 
10810   done_something = htab->reliplt->rawsize != htab->reliplt->size;
10811   if (!done_something)
10812     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10813       {
10814 	asection *got;
10815 
10816 	if (!is_ppc64_elf (ibfd))
10817 	  continue;
10818 
10819 	got = ppc64_elf_tdata (ibfd)->got;
10820 	if (got != NULL)
10821 	  {
10822 	    done_something = got->rawsize != got->size;
10823 	    if (done_something)
10824 	      break;
10825 	  }
10826       }
10827 
10828   if (done_something)
10829     (*htab->layout_sections_again) ();
10830 
10831   /* Set up for second pass over toc sections to recalculate elf_gp
10832      on input sections.  */
10833   htab->toc_bfd = NULL;
10834   htab->toc_first_sec = NULL;
10835   htab->second_toc_pass = TRUE;
10836   return done_something;
10837 }
10838 
10839 /* Called after second pass of multitoc partitioning.  */
10840 
10841 void
10842 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
10843 {
10844   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10845 
10846   /* After the second pass, toc_curr tracks the TOC offset used
10847      for code sections below in ppc64_elf_next_input_section.  */
10848   htab->toc_curr = TOC_BASE_OFF;
10849 }
10850 
10851 /* No toc references were found in ISEC.  If the code in ISEC makes no
10852    calls, then there's no need to use toc adjusting stubs when branching
10853    into ISEC.  Actually, indirect calls from ISEC are OK as they will
10854    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
10855    needed, and 2 if a cyclical call-graph was found but no other reason
10856    for a stub was detected.  If called from the top level, a return of
10857    2 means the same as a return of 0.  */
10858 
10859 static int
10860 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
10861 {
10862   int ret;
10863 
10864   /* Mark this section as checked.  */
10865   isec->call_check_done = 1;
10866 
10867   /* We know none of our code bearing sections will need toc stubs.  */
10868   if ((isec->flags & SEC_LINKER_CREATED) != 0)
10869     return 0;
10870 
10871   if (isec->size == 0)
10872     return 0;
10873 
10874   if (isec->output_section == NULL)
10875     return 0;
10876 
10877   ret = 0;
10878   if (isec->reloc_count != 0)
10879     {
10880       Elf_Internal_Rela *relstart, *rel;
10881       Elf_Internal_Sym *local_syms;
10882       struct ppc_link_hash_table *htab;
10883 
10884       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
10885 					    info->keep_memory);
10886       if (relstart == NULL)
10887 	return -1;
10888 
10889       /* Look for branches to outside of this section.  */
10890       local_syms = NULL;
10891       htab = ppc_hash_table (info);
10892       if (htab == NULL)
10893 	return -1;
10894 
10895       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
10896 	{
10897 	  enum elf_ppc64_reloc_type r_type;
10898 	  unsigned long r_symndx;
10899 	  struct elf_link_hash_entry *h;
10900 	  struct ppc_link_hash_entry *eh;
10901 	  Elf_Internal_Sym *sym;
10902 	  asection *sym_sec;
10903 	  struct _opd_sec_data *opd;
10904 	  bfd_vma sym_value;
10905 	  bfd_vma dest;
10906 
10907 	  r_type = ELF64_R_TYPE (rel->r_info);
10908 	  if (r_type != R_PPC64_REL24
10909 	      && r_type != R_PPC64_REL14
10910 	      && r_type != R_PPC64_REL14_BRTAKEN
10911 	      && r_type != R_PPC64_REL14_BRNTAKEN)
10912 	    continue;
10913 
10914 	  r_symndx = ELF64_R_SYM (rel->r_info);
10915 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
10916 			  isec->owner))
10917 	    {
10918 	      ret = -1;
10919 	      break;
10920 	    }
10921 
10922 	  /* Calls to dynamic lib functions go through a plt call stub
10923 	     that uses r2.  */
10924 	  eh = (struct ppc_link_hash_entry *) h;
10925 	  if (eh != NULL
10926 	      && (eh->elf.plt.plist != NULL
10927 		  || (eh->oh != NULL
10928 		      && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
10929 	    {
10930 	      ret = 1;
10931 	      break;
10932 	    }
10933 
10934 	  if (sym_sec == NULL)
10935 	    /* Ignore other undefined symbols.  */
10936 	    continue;
10937 
10938 	  /* Assume branches to other sections not included in the
10939 	     link need stubs too, to cover -R and absolute syms.  */
10940 	  if (sym_sec->output_section == NULL)
10941 	    {
10942 	      ret = 1;
10943 	      break;
10944 	    }
10945 
10946 	  if (h == NULL)
10947 	    sym_value = sym->st_value;
10948 	  else
10949 	    {
10950 	      if (h->root.type != bfd_link_hash_defined
10951 		  && h->root.type != bfd_link_hash_defweak)
10952 		abort ();
10953 	      sym_value = h->root.u.def.value;
10954 	    }
10955 	  sym_value += rel->r_addend;
10956 
10957 	  /* If this branch reloc uses an opd sym, find the code section.  */
10958 	  opd = get_opd_info (sym_sec);
10959 	  if (opd != NULL)
10960 	    {
10961 	      if (h == NULL && opd->adjust != NULL)
10962 		{
10963 		  long adjust;
10964 
10965 		  adjust = opd->adjust[sym->st_value / 8];
10966 		  if (adjust == -1)
10967 		    /* Assume deleted functions won't ever be called.  */
10968 		    continue;
10969 		  sym_value += adjust;
10970 		}
10971 
10972 	      dest = opd_entry_value (sym_sec, sym_value,
10973 				      &sym_sec, NULL, FALSE);
10974 	      if (dest == (bfd_vma) -1)
10975 		continue;
10976 	    }
10977 	  else
10978 	    dest = (sym_value
10979 		    + sym_sec->output_offset
10980 		    + sym_sec->output_section->vma);
10981 
10982 	  /* Ignore branch to self.  */
10983 	  if (sym_sec == isec)
10984 	    continue;
10985 
10986 	  /* If the called function uses the toc, we need a stub.  */
10987 	  if (sym_sec->has_toc_reloc
10988 	      || sym_sec->makes_toc_func_call)
10989 	    {
10990 	      ret = 1;
10991 	      break;
10992 	    }
10993 
10994 	  /* Assume any branch that needs a long branch stub might in fact
10995 	     need a plt_branch stub.  A plt_branch stub uses r2.  */
10996 	  else if (dest - (isec->output_offset
10997 			   + isec->output_section->vma
10998 			   + rel->r_offset) + (1 << 25) >= (2 << 25))
10999 	    {
11000 	      ret = 1;
11001 	      break;
11002 	    }
11003 
11004 	  /* If calling back to a section in the process of being
11005 	     tested, we can't say for sure that no toc adjusting stubs
11006 	     are needed, so don't return zero.  */
11007 	  else if (sym_sec->call_check_in_progress)
11008 	    ret = 2;
11009 
11010 	  /* Branches to another section that itself doesn't have any TOC
11011 	     references are OK.  Recursively call ourselves to check.  */
11012 	  else if (!sym_sec->call_check_done)
11013 	    {
11014 	      int recur;
11015 
11016 	      /* Mark current section as indeterminate, so that other
11017 		 sections that call back to current won't be marked as
11018 		 known.  */
11019 	      isec->call_check_in_progress = 1;
11020 	      recur = toc_adjusting_stub_needed (info, sym_sec);
11021 	      isec->call_check_in_progress = 0;
11022 
11023 	      if (recur != 0)
11024 		{
11025 		  ret = recur;
11026 		  if (recur != 2)
11027 		    break;
11028 		}
11029 	    }
11030 	}
11031 
11032       if (local_syms != NULL
11033 	  && (elf_symtab_hdr (isec->owner).contents
11034 	      != (unsigned char *) local_syms))
11035 	free (local_syms);
11036       if (elf_section_data (isec)->relocs != relstart)
11037 	free (relstart);
11038     }
11039 
11040   if ((ret & 1) == 0
11041       && isec->map_head.s != NULL
11042       && (strcmp (isec->output_section->name, ".init") == 0
11043 	  || strcmp (isec->output_section->name, ".fini") == 0))
11044     {
11045       if (isec->map_head.s->has_toc_reloc
11046 	  || isec->map_head.s->makes_toc_func_call)
11047 	ret = 1;
11048       else if (!isec->map_head.s->call_check_done)
11049 	{
11050 	  int recur;
11051 	  isec->call_check_in_progress = 1;
11052 	  recur = toc_adjusting_stub_needed (info, isec->map_head.s);
11053 	  isec->call_check_in_progress = 0;
11054 	  if (recur != 0)
11055 	    ret = recur;
11056 	}
11057     }
11058 
11059   if (ret == 1)
11060     isec->makes_toc_func_call = 1;
11061 
11062   return ret;
11063 }
11064 
11065 /* The linker repeatedly calls this function for each input section,
11066    in the order that input sections are linked into output sections.
11067    Build lists of input sections to determine groupings between which
11068    we may insert linker stubs.  */
11069 
11070 bfd_boolean
11071 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
11072 {
11073   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11074 
11075   if (htab == NULL)
11076     return FALSE;
11077 
11078   if ((isec->output_section->flags & SEC_CODE) != 0
11079       && isec->output_section->index <= htab->top_index)
11080     {
11081       asection **list = htab->input_list + isec->output_section->index;
11082       /* Steal the link_sec pointer for our list.  */
11083 #define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
11084       /* This happens to make the list in reverse order,
11085 	 which is what we want.  */
11086       PREV_SEC (isec) = *list;
11087       *list = isec;
11088     }
11089 
11090   if (htab->multi_toc_needed)
11091     {
11092       /* If a code section has a function that uses the TOC then we need
11093 	 to use the right TOC (obviously).  Also, make sure that .opd gets
11094 	 the correct TOC value for R_PPC64_TOC relocs that don't have or
11095 	 can't find their function symbol (shouldn't ever happen now).
11096 	 Also specially treat .fixup for the linux kernel.  .fixup
11097 	 contains branches, but only back to the function that hit an
11098 	 exception.  */
11099       if (isec->has_toc_reloc
11100 	  || (isec->flags & SEC_CODE) == 0
11101 	  || strcmp (isec->name, ".fixup") == 0)
11102 	{
11103 	  if (elf_gp (isec->owner) != 0)
11104 	    htab->toc_curr = elf_gp (isec->owner);
11105 	}
11106       else
11107 	{
11108 	  if (!isec->call_check_done
11109 	      && toc_adjusting_stub_needed (info, isec) < 0)
11110 	    return FALSE;
11111 	  /* If we make a local call from this section, ie. a branch
11112 	     without a following nop, then we have no place to put a
11113 	     toc restoring insn.  We must use the same toc group as
11114 	     the callee.
11115 	     Testing makes_toc_func_call actually tests for *any*
11116 	     calls to functions that need a good toc pointer.  A more
11117 	     precise test would be better, as this one will set
11118 	     incorrect values for pasted .init/.fini fragments.
11119 	     (Fixed later in check_pasted_section.)  */
11120 	  if (isec->makes_toc_func_call
11121 	      && elf_gp (isec->owner) != 0)
11122 	    htab->toc_curr = elf_gp (isec->owner);
11123 	}
11124     }
11125 
11126   /* Functions that don't use the TOC can belong in any TOC group.
11127      Use the last TOC base.  */
11128   htab->stub_group[isec->id].toc_off = htab->toc_curr;
11129   return TRUE;
11130 }
11131 
11132 /* Check that all .init and .fini sections use the same toc, if they
11133    have toc relocs.  */
11134 
11135 static bfd_boolean
11136 check_pasted_section (struct bfd_link_info *info, const char *name)
11137 {
11138   asection *o = bfd_get_section_by_name (info->output_bfd, name);
11139 
11140   if (o != NULL)
11141     {
11142       struct ppc_link_hash_table *htab = ppc_hash_table (info);
11143       bfd_vma toc_off = 0;
11144       asection *i;
11145 
11146       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11147 	if (i->has_toc_reloc)
11148 	  {
11149 	    if (toc_off == 0)
11150 	      toc_off = htab->stub_group[i->id].toc_off;
11151 	    else if (toc_off != htab->stub_group[i->id].toc_off)
11152 	      return FALSE;
11153 	  }
11154 
11155       if (toc_off == 0)
11156 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11157 	  if (i->makes_toc_func_call)
11158 	    {
11159 	      toc_off = htab->stub_group[i->id].toc_off;
11160 	      break;
11161 	    }
11162 
11163       /* Make sure the whole pasted function uses the same toc offset.  */
11164       if (toc_off != 0)
11165 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11166 	  htab->stub_group[i->id].toc_off = toc_off;
11167     }
11168   return TRUE;
11169 }
11170 
11171 bfd_boolean
11172 ppc64_elf_check_init_fini (struct bfd_link_info *info)
11173 {
11174   return (check_pasted_section (info, ".init")
11175 	  & check_pasted_section (info, ".fini"));
11176 }
11177 
11178 /* See whether we can group stub sections together.  Grouping stub
11179    sections may result in fewer stubs.  More importantly, we need to
11180    put all .init* and .fini* stubs at the beginning of the .init or
11181    .fini output sections respectively, because glibc splits the
11182    _init and _fini functions into multiple parts.  Putting a stub in
11183    the middle of a function is not a good idea.  */
11184 
11185 static void
11186 group_sections (struct ppc_link_hash_table *htab,
11187 		bfd_size_type stub_group_size,
11188 		bfd_boolean stubs_always_before_branch)
11189 {
11190   asection **list;
11191   bfd_size_type stub14_group_size;
11192   bfd_boolean suppress_size_errors;
11193 
11194   suppress_size_errors = FALSE;
11195   stub14_group_size = stub_group_size;
11196   if (stub_group_size == 1)
11197     {
11198       /* Default values.  */
11199       if (stubs_always_before_branch)
11200 	{
11201 	  stub_group_size = 0x1e00000;
11202 	  stub14_group_size = 0x7800;
11203 	}
11204       else
11205 	{
11206 	  stub_group_size = 0x1c00000;
11207 	  stub14_group_size = 0x7000;
11208 	}
11209       suppress_size_errors = TRUE;
11210     }
11211 
11212   list = htab->input_list + htab->top_index;
11213   do
11214     {
11215       asection *tail = *list;
11216       while (tail != NULL)
11217 	{
11218 	  asection *curr;
11219 	  asection *prev;
11220 	  bfd_size_type total;
11221 	  bfd_boolean big_sec;
11222 	  bfd_vma curr_toc;
11223 
11224 	  curr = tail;
11225 	  total = tail->size;
11226 	  big_sec = total > (ppc64_elf_section_data (tail) != NULL
11227 			     && ppc64_elf_section_data (tail)->has_14bit_branch
11228 			     ? stub14_group_size : stub_group_size);
11229 	  if (big_sec && !suppress_size_errors)
11230 	    (*_bfd_error_handler) (_("%B section %A exceeds stub group size"),
11231 				     tail->owner, tail);
11232 	  curr_toc = htab->stub_group[tail->id].toc_off;
11233 
11234 	  while ((prev = PREV_SEC (curr)) != NULL
11235 		 && ((total += curr->output_offset - prev->output_offset)
11236 		     < (ppc64_elf_section_data (prev) != NULL
11237 			&& ppc64_elf_section_data (prev)->has_14bit_branch
11238 			? stub14_group_size : stub_group_size))
11239 		 && htab->stub_group[prev->id].toc_off == curr_toc)
11240 	    curr = prev;
11241 
11242 	  /* OK, the size from the start of CURR to the end is less
11243 	     than stub_group_size and thus can be handled by one stub
11244 	     section.  (or the tail section is itself larger than
11245 	     stub_group_size, in which case we may be toast.)  We
11246 	     should really be keeping track of the total size of stubs
11247 	     added here, as stubs contribute to the final output
11248 	     section size.  That's a little tricky, and this way will
11249 	     only break if stubs added make the total size more than
11250 	     2^25, ie. for the default stub_group_size, if stubs total
11251 	     more than 2097152 bytes, or nearly 75000 plt call stubs.  */
11252 	  do
11253 	    {
11254 	      prev = PREV_SEC (tail);
11255 	      /* Set up this stub group.  */
11256 	      htab->stub_group[tail->id].link_sec = curr;
11257 	    }
11258 	  while (tail != curr && (tail = prev) != NULL);
11259 
11260 	  /* But wait, there's more!  Input sections up to stub_group_size
11261 	     bytes before the stub section can be handled by it too.
11262 	     Don't do this if we have a really large section after the
11263 	     stubs, as adding more stubs increases the chance that
11264 	     branches may not reach into the stub section.  */
11265 	  if (!stubs_always_before_branch && !big_sec)
11266 	    {
11267 	      total = 0;
11268 	      while (prev != NULL
11269 		     && ((total += tail->output_offset - prev->output_offset)
11270 			 < (ppc64_elf_section_data (prev) != NULL
11271 			    && ppc64_elf_section_data (prev)->has_14bit_branch
11272 			    ? stub14_group_size : stub_group_size))
11273 		     && htab->stub_group[prev->id].toc_off == curr_toc)
11274 		{
11275 		  tail = prev;
11276 		  prev = PREV_SEC (tail);
11277 		  htab->stub_group[tail->id].link_sec = curr;
11278 		}
11279 	    }
11280 	  tail = prev;
11281 	}
11282     }
11283   while (list-- != htab->input_list);
11284   free (htab->input_list);
11285 #undef PREV_SEC
11286 }
11287 
11288 static const unsigned char glink_eh_frame_cie[] =
11289 {
11290   0, 0, 0, 16,				/* length.  */
11291   0, 0, 0, 0,				/* id.  */
11292   1,					/* CIE version.  */
11293   'z', 'R', 0,				/* Augmentation string.  */
11294   4,					/* Code alignment.  */
11295   0x78,					/* Data alignment.  */
11296   65,					/* RA reg.  */
11297   1,					/* Augmentation size.  */
11298   DW_EH_PE_pcrel | DW_EH_PE_sdata4,	/* FDE encoding.  */
11299   DW_CFA_def_cfa, 1, 0			/* def_cfa: r1 offset 0.  */
11300 };
11301 
11302 /* Stripping output sections is normally done before dynamic section
11303    symbols have been allocated.  This function is called later, and
11304    handles cases like htab->brlt which is mapped to its own output
11305    section.  */
11306 
11307 static void
11308 maybe_strip_output (struct bfd_link_info *info, asection *isec)
11309 {
11310   if (isec->size == 0
11311       && isec->output_section->size == 0
11312       && !(isec->output_section->flags & SEC_KEEP)
11313       && !bfd_section_removed_from_list (info->output_bfd,
11314 					 isec->output_section)
11315       && elf_section_data (isec->output_section)->dynindx == 0)
11316     {
11317       isec->output_section->flags |= SEC_EXCLUDE;
11318       bfd_section_list_remove (info->output_bfd, isec->output_section);
11319       info->output_bfd->section_count--;
11320     }
11321 }
11322 
11323 /* Determine and set the size of the stub section for a final link.
11324 
11325    The basic idea here is to examine all the relocations looking for
11326    PC-relative calls to a target that is unreachable with a "bl"
11327    instruction.  */
11328 
11329 bfd_boolean
11330 ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
11331 		      bfd_boolean plt_static_chain, int plt_thread_safe,
11332 		      int plt_stub_align)
11333 {
11334   bfd_size_type stub_group_size;
11335   bfd_boolean stubs_always_before_branch;
11336   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11337 
11338   if (htab == NULL)
11339     return FALSE;
11340 
11341   htab->plt_static_chain = plt_static_chain;
11342   htab->plt_stub_align = plt_stub_align;
11343   if (plt_thread_safe == -1 && !info->executable)
11344     plt_thread_safe = 1;
11345   if (plt_thread_safe == -1)
11346     {
11347       static const char *const thread_starter[] =
11348 	{
11349 	  "pthread_create",
11350 	  /* libstdc++ */
11351 	  "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
11352 	  /* librt */
11353 	  "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
11354 	  "mq_notify", "create_timer",
11355 	  /* libanl */
11356 	  "getaddrinfo_a",
11357 	  /* libgomp */
11358 	  "GOMP_parallel_start",
11359 	  "GOMP_parallel_loop_static_start",
11360 	  "GOMP_parallel_loop_dynamic_start",
11361 	  "GOMP_parallel_loop_guided_start",
11362 	  "GOMP_parallel_loop_runtime_start",
11363 	  "GOMP_parallel_sections_start",
11364 	};
11365       unsigned i;
11366 
11367       for (i = 0; i < sizeof (thread_starter)/ sizeof (thread_starter[0]); i++)
11368 	{
11369 	  struct elf_link_hash_entry *h;
11370 	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
11371 				    FALSE, FALSE, TRUE);
11372 	  plt_thread_safe = h != NULL && h->ref_regular;
11373 	  if (plt_thread_safe)
11374 	    break;
11375 	}
11376     }
11377   htab->plt_thread_safe = plt_thread_safe;
11378   stubs_always_before_branch = group_size < 0;
11379   if (group_size < 0)
11380     stub_group_size = -group_size;
11381   else
11382     stub_group_size = group_size;
11383 
11384   group_sections (htab, stub_group_size, stubs_always_before_branch);
11385 
11386   while (1)
11387     {
11388       bfd *input_bfd;
11389       unsigned int bfd_indx;
11390       asection *stub_sec;
11391 
11392       htab->stub_iteration += 1;
11393 
11394       for (input_bfd = info->input_bfds, bfd_indx = 0;
11395 	   input_bfd != NULL;
11396 	   input_bfd = input_bfd->link_next, bfd_indx++)
11397 	{
11398 	  Elf_Internal_Shdr *symtab_hdr;
11399 	  asection *section;
11400 	  Elf_Internal_Sym *local_syms = NULL;
11401 
11402 	  if (!is_ppc64_elf (input_bfd))
11403 	    continue;
11404 
11405 	  /* We'll need the symbol table in a second.  */
11406 	  symtab_hdr = &elf_symtab_hdr (input_bfd);
11407 	  if (symtab_hdr->sh_info == 0)
11408 	    continue;
11409 
11410 	  /* Walk over each section attached to the input bfd.  */
11411 	  for (section = input_bfd->sections;
11412 	       section != NULL;
11413 	       section = section->next)
11414 	    {
11415 	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
11416 
11417 	      /* If there aren't any relocs, then there's nothing more
11418 		 to do.  */
11419 	      if ((section->flags & SEC_RELOC) == 0
11420 		  || (section->flags & SEC_ALLOC) == 0
11421 		  || (section->flags & SEC_LOAD) == 0
11422 		  || (section->flags & SEC_CODE) == 0
11423 		  || section->reloc_count == 0)
11424 		continue;
11425 
11426 	      /* If this section is a link-once section that will be
11427 		 discarded, then don't create any stubs.  */
11428 	      if (section->output_section == NULL
11429 		  || section->output_section->owner != info->output_bfd)
11430 		continue;
11431 
11432 	      /* Get the relocs.  */
11433 	      internal_relocs
11434 		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
11435 					     info->keep_memory);
11436 	      if (internal_relocs == NULL)
11437 		goto error_ret_free_local;
11438 
11439 	      /* Now examine each relocation.  */
11440 	      irela = internal_relocs;
11441 	      irelaend = irela + section->reloc_count;
11442 	      for (; irela < irelaend; irela++)
11443 		{
11444 		  enum elf_ppc64_reloc_type r_type;
11445 		  unsigned int r_indx;
11446 		  enum ppc_stub_type stub_type;
11447 		  struct ppc_stub_hash_entry *stub_entry;
11448 		  asection *sym_sec, *code_sec;
11449 		  bfd_vma sym_value, code_value;
11450 		  bfd_vma destination;
11451 		  bfd_boolean ok_dest;
11452 		  struct ppc_link_hash_entry *hash;
11453 		  struct ppc_link_hash_entry *fdh;
11454 		  struct elf_link_hash_entry *h;
11455 		  Elf_Internal_Sym *sym;
11456 		  char *stub_name;
11457 		  const asection *id_sec;
11458 		  struct _opd_sec_data *opd;
11459 		  struct plt_entry *plt_ent;
11460 
11461 		  r_type = ELF64_R_TYPE (irela->r_info);
11462 		  r_indx = ELF64_R_SYM (irela->r_info);
11463 
11464 		  if (r_type >= R_PPC64_max)
11465 		    {
11466 		      bfd_set_error (bfd_error_bad_value);
11467 		      goto error_ret_free_internal;
11468 		    }
11469 
11470 		  /* Only look for stubs on branch instructions.  */
11471 		  if (r_type != R_PPC64_REL24
11472 		      && r_type != R_PPC64_REL14
11473 		      && r_type != R_PPC64_REL14_BRTAKEN
11474 		      && r_type != R_PPC64_REL14_BRNTAKEN)
11475 		    continue;
11476 
11477 		  /* Now determine the call target, its name, value,
11478 		     section.  */
11479 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
11480 				  r_indx, input_bfd))
11481 		    goto error_ret_free_internal;
11482 		  hash = (struct ppc_link_hash_entry *) h;
11483 
11484 		  ok_dest = FALSE;
11485 		  fdh = NULL;
11486 		  sym_value = 0;
11487 		  if (hash == NULL)
11488 		    {
11489 		      sym_value = sym->st_value;
11490 		      ok_dest = TRUE;
11491 		    }
11492 		  else if (hash->elf.root.type == bfd_link_hash_defined
11493 			   || hash->elf.root.type == bfd_link_hash_defweak)
11494 		    {
11495 		      sym_value = hash->elf.root.u.def.value;
11496 		      if (sym_sec->output_section != NULL)
11497 			ok_dest = TRUE;
11498 		    }
11499 		  else if (hash->elf.root.type == bfd_link_hash_undefweak
11500 			   || hash->elf.root.type == bfd_link_hash_undefined)
11501 		    {
11502 		      /* Recognise an old ABI func code entry sym, and
11503 			 use the func descriptor sym instead if it is
11504 			 defined.  */
11505 		      if (hash->elf.root.root.string[0] == '.'
11506 			  && (fdh = lookup_fdh (hash, htab)) != NULL)
11507 			{
11508 			  if (fdh->elf.root.type == bfd_link_hash_defined
11509 			      || fdh->elf.root.type == bfd_link_hash_defweak)
11510 			    {
11511 			      sym_sec = fdh->elf.root.u.def.section;
11512 			      sym_value = fdh->elf.root.u.def.value;
11513 			      if (sym_sec->output_section != NULL)
11514 				ok_dest = TRUE;
11515 			    }
11516 			  else
11517 			    fdh = NULL;
11518 			}
11519 		    }
11520 		  else
11521 		    {
11522 		      bfd_set_error (bfd_error_bad_value);
11523 		      goto error_ret_free_internal;
11524 		    }
11525 
11526 		  destination = 0;
11527 		  if (ok_dest)
11528 		    {
11529 		      sym_value += irela->r_addend;
11530 		      destination = (sym_value
11531 				     + sym_sec->output_offset
11532 				     + sym_sec->output_section->vma);
11533 		    }
11534 
11535 		  code_sec = sym_sec;
11536 		  code_value = sym_value;
11537 		  opd = get_opd_info (sym_sec);
11538 		  if (opd != NULL)
11539 		    {
11540 		      bfd_vma dest;
11541 
11542 		      if (hash == NULL && opd->adjust != NULL)
11543 			{
11544 			  long adjust = opd->adjust[sym_value / 8];
11545 			  if (adjust == -1)
11546 			    continue;
11547 			  code_value += adjust;
11548 			  sym_value += adjust;
11549 			}
11550 		      dest = opd_entry_value (sym_sec, sym_value,
11551 					      &code_sec, &code_value, FALSE);
11552 		      if (dest != (bfd_vma) -1)
11553 			{
11554 			  destination = dest;
11555 			  if (fdh != NULL)
11556 			    {
11557 			      /* Fixup old ABI sym to point at code
11558 				 entry.  */
11559 			      hash->elf.root.type = bfd_link_hash_defweak;
11560 			      hash->elf.root.u.def.section = code_sec;
11561 			      hash->elf.root.u.def.value = code_value;
11562 			    }
11563 			}
11564 		    }
11565 
11566 		  /* Determine what (if any) linker stub is needed.  */
11567 		  plt_ent = NULL;
11568 		  stub_type = ppc_type_of_stub (section, irela, &hash,
11569 						&plt_ent, destination);
11570 
11571 		  if (stub_type != ppc_stub_plt_call)
11572 		    {
11573 		      /* Check whether we need a TOC adjusting stub.
11574 			 Since the linker pastes together pieces from
11575 			 different object files when creating the
11576 			 _init and _fini functions, it may be that a
11577 			 call to what looks like a local sym is in
11578 			 fact a call needing a TOC adjustment.  */
11579 		      if (code_sec != NULL
11580 			  && code_sec->output_section != NULL
11581 			  && (htab->stub_group[code_sec->id].toc_off
11582 			      != htab->stub_group[section->id].toc_off)
11583 			  && (code_sec->has_toc_reloc
11584 			      || code_sec->makes_toc_func_call))
11585 			stub_type = ppc_stub_long_branch_r2off;
11586 		    }
11587 
11588 		  if (stub_type == ppc_stub_none)
11589 		    continue;
11590 
11591 		  /* __tls_get_addr calls might be eliminated.  */
11592 		  if (stub_type != ppc_stub_plt_call
11593 		      && hash != NULL
11594 		      && (hash == htab->tls_get_addr
11595 			  || hash == htab->tls_get_addr_fd)
11596 		      && section->has_tls_reloc
11597 		      && irela != internal_relocs)
11598 		    {
11599 		      /* Get tls info.  */
11600 		      unsigned char *tls_mask;
11601 
11602 		      if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
11603 					 irela - 1, input_bfd))
11604 			goto error_ret_free_internal;
11605 		      if (*tls_mask != 0)
11606 			continue;
11607 		    }
11608 
11609 		  if (stub_type == ppc_stub_plt_call
11610 		      && irela + 1 < irelaend
11611 		      && irela[1].r_offset == irela->r_offset + 4
11612 		      && ELF64_R_TYPE (irela[1].r_info) == R_PPC64_TOCSAVE)
11613 		    {
11614 		      if (!tocsave_find (htab, INSERT,
11615 					 &local_syms, irela + 1, input_bfd))
11616 			goto error_ret_free_internal;
11617 		    }
11618 		  else if (stub_type == ppc_stub_plt_call)
11619 		    stub_type = ppc_stub_plt_call_r2save;
11620 
11621 		  /* Support for grouping stub sections.  */
11622 		  id_sec = htab->stub_group[section->id].link_sec;
11623 
11624 		  /* Get the name of this stub.  */
11625 		  stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
11626 		  if (!stub_name)
11627 		    goto error_ret_free_internal;
11628 
11629 		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
11630 						     stub_name, FALSE, FALSE);
11631 		  if (stub_entry != NULL)
11632 		    {
11633 		      /* The proper stub has already been created.  */
11634 		      free (stub_name);
11635 		      if (stub_type == ppc_stub_plt_call_r2save)
11636 			stub_entry->stub_type = stub_type;
11637 		      continue;
11638 		    }
11639 
11640 		  stub_entry = ppc_add_stub (stub_name, section, info);
11641 		  if (stub_entry == NULL)
11642 		    {
11643 		      free (stub_name);
11644 		    error_ret_free_internal:
11645 		      if (elf_section_data (section)->relocs == NULL)
11646 			free (internal_relocs);
11647 		    error_ret_free_local:
11648 		      if (local_syms != NULL
11649 			  && (symtab_hdr->contents
11650 			      != (unsigned char *) local_syms))
11651 			free (local_syms);
11652 		      return FALSE;
11653 		    }
11654 
11655 		  stub_entry->stub_type = stub_type;
11656 		  if (stub_type != ppc_stub_plt_call
11657 		      && stub_type != ppc_stub_plt_call_r2save)
11658 		    {
11659 		      stub_entry->target_value = code_value;
11660 		      stub_entry->target_section = code_sec;
11661 		    }
11662 		  else
11663 		    {
11664 		      stub_entry->target_value = sym_value;
11665 		      stub_entry->target_section = sym_sec;
11666 		    }
11667 		  stub_entry->h = hash;
11668 		  stub_entry->plt_ent = plt_ent;
11669 
11670 		  if (stub_entry->h != NULL)
11671 		    htab->stub_globals += 1;
11672 		}
11673 
11674 	      /* We're done with the internal relocs, free them.  */
11675 	      if (elf_section_data (section)->relocs != internal_relocs)
11676 		free (internal_relocs);
11677 	    }
11678 
11679 	  if (local_syms != NULL
11680 	      && symtab_hdr->contents != (unsigned char *) local_syms)
11681 	    {
11682 	      if (!info->keep_memory)
11683 		free (local_syms);
11684 	      else
11685 		symtab_hdr->contents = (unsigned char *) local_syms;
11686 	    }
11687 	}
11688 
11689       /* We may have added some stubs.  Find out the new size of the
11690 	 stub sections.  */
11691       for (stub_sec = htab->stub_bfd->sections;
11692 	   stub_sec != NULL;
11693 	   stub_sec = stub_sec->next)
11694 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11695 	  {
11696 	    stub_sec->rawsize = stub_sec->size;
11697 	    stub_sec->size = 0;
11698 	    stub_sec->reloc_count = 0;
11699 	    stub_sec->flags &= ~SEC_RELOC;
11700 	  }
11701 
11702       htab->brlt->size = 0;
11703       htab->brlt->reloc_count = 0;
11704       htab->brlt->flags &= ~SEC_RELOC;
11705       if (htab->relbrlt != NULL)
11706 	htab->relbrlt->size = 0;
11707 
11708       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
11709 
11710       if (info->emitrelocations
11711 	  && htab->glink != NULL && htab->glink->size != 0)
11712 	{
11713 	  htab->glink->reloc_count = 1;
11714 	  htab->glink->flags |= SEC_RELOC;
11715 	}
11716 
11717       if (htab->glink_eh_frame != NULL
11718 	  && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
11719 	  && htab->glink_eh_frame->output_section->size != 0)
11720 	{
11721 	  size_t size = 0, align;
11722 
11723 	  for (stub_sec = htab->stub_bfd->sections;
11724 	       stub_sec != NULL;
11725 	       stub_sec = stub_sec->next)
11726 	    if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11727 	      size += 20;
11728 	  if (htab->glink != NULL && htab->glink->size != 0)
11729 	    size += 24;
11730 	  if (size != 0)
11731 	    size += sizeof (glink_eh_frame_cie);
11732 	  align = 1;
11733 	  align <<= htab->glink_eh_frame->output_section->alignment_power;
11734 	  align -= 1;
11735 	  size = (size + align) & ~align;
11736 	  htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
11737 	  htab->glink_eh_frame->size = size;
11738 	}
11739 
11740       if (htab->plt_stub_align != 0)
11741 	for (stub_sec = htab->stub_bfd->sections;
11742 	     stub_sec != NULL;
11743 	     stub_sec = stub_sec->next)
11744 	  if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11745 	    stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
11746 			      & (-1 << htab->plt_stub_align));
11747 
11748       for (stub_sec = htab->stub_bfd->sections;
11749 	   stub_sec != NULL;
11750 	   stub_sec = stub_sec->next)
11751 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
11752 	    && stub_sec->rawsize != stub_sec->size)
11753 	  break;
11754 
11755       /* Exit from this loop when no stubs have been added, and no stubs
11756 	 have changed size.  */
11757       if (stub_sec == NULL
11758 	  && (htab->glink_eh_frame == NULL
11759 	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
11760 	break;
11761 
11762       /* Ask the linker to do its stuff.  */
11763       (*htab->layout_sections_again) ();
11764     }
11765 
11766   maybe_strip_output (info, htab->brlt);
11767   if (htab->glink_eh_frame != NULL)
11768     maybe_strip_output (info, htab->glink_eh_frame);
11769 
11770   return TRUE;
11771 }
11772 
11773 /* Called after we have determined section placement.  If sections
11774    move, we'll be called again.  Provide a value for TOCstart.  */
11775 
11776 bfd_vma
11777 ppc64_elf_toc (bfd *obfd)
11778 {
11779   asection *s;
11780   bfd_vma TOCstart;
11781 
11782   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
11783      order.  The TOC starts where the first of these sections starts.  */
11784   s = bfd_get_section_by_name (obfd, ".got");
11785   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11786     s = bfd_get_section_by_name (obfd, ".toc");
11787   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11788     s = bfd_get_section_by_name (obfd, ".tocbss");
11789   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11790     s = bfd_get_section_by_name (obfd, ".plt");
11791   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11792     {
11793       /* This may happen for
11794 	 o  references to TOC base (SYM@toc / TOC[tc0]) without a
11795 	 .toc directive
11796 	 o  bad linker script
11797 	 o --gc-sections and empty TOC sections
11798 
11799 	 FIXME: Warn user?  */
11800 
11801       /* Look for a likely section.  We probably won't even be
11802 	 using TOCstart.  */
11803       for (s = obfd->sections; s != NULL; s = s->next)
11804 	if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
11805 			 | SEC_EXCLUDE))
11806 	    == (SEC_ALLOC | SEC_SMALL_DATA))
11807 	  break;
11808       if (s == NULL)
11809 	for (s = obfd->sections; s != NULL; s = s->next)
11810 	  if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
11811 	      == (SEC_ALLOC | SEC_SMALL_DATA))
11812 	    break;
11813       if (s == NULL)
11814 	for (s = obfd->sections; s != NULL; s = s->next)
11815 	  if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
11816 	      == SEC_ALLOC)
11817 	    break;
11818       if (s == NULL)
11819 	for (s = obfd->sections; s != NULL; s = s->next)
11820 	  if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
11821 	    break;
11822     }
11823 
11824   TOCstart = 0;
11825   if (s != NULL)
11826     TOCstart = s->output_section->vma + s->output_offset;
11827 
11828   return TOCstart;
11829 }
11830 
11831 /* Build all the stubs associated with the current output file.
11832    The stubs are kept in a hash table attached to the main linker
11833    hash table.  This function is called via gldelf64ppc_finish.  */
11834 
11835 bfd_boolean
11836 ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
11837 		       struct bfd_link_info *info,
11838 		       char **stats)
11839 {
11840   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11841   asection *stub_sec;
11842   bfd_byte *p;
11843   int stub_sec_count = 0;
11844 
11845   if (htab == NULL)
11846     return FALSE;
11847 
11848   htab->emit_stub_syms = emit_stub_syms;
11849 
11850   /* Allocate memory to hold the linker stubs.  */
11851   for (stub_sec = htab->stub_bfd->sections;
11852        stub_sec != NULL;
11853        stub_sec = stub_sec->next)
11854     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
11855 	&& stub_sec->size != 0)
11856       {
11857 	stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
11858 	if (stub_sec->contents == NULL)
11859 	  return FALSE;
11860 	/* We want to check that built size is the same as calculated
11861 	   size.  rawsize is a convenient location to use.  */
11862 	stub_sec->rawsize = stub_sec->size;
11863 	stub_sec->size = 0;
11864       }
11865 
11866   if (htab->glink != NULL && htab->glink->size != 0)
11867     {
11868       unsigned int indx;
11869       bfd_vma plt0;
11870 
11871       /* Build the .glink plt call stub.  */
11872       if (htab->emit_stub_syms)
11873 	{
11874 	  struct elf_link_hash_entry *h;
11875 	  h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
11876 				    TRUE, FALSE, FALSE);
11877 	  if (h == NULL)
11878 	    return FALSE;
11879 	  if (h->root.type == bfd_link_hash_new)
11880 	    {
11881 	      h->root.type = bfd_link_hash_defined;
11882 	      h->root.u.def.section = htab->glink;
11883 	      h->root.u.def.value = 8;
11884 	      h->ref_regular = 1;
11885 	      h->def_regular = 1;
11886 	      h->ref_regular_nonweak = 1;
11887 	      h->forced_local = 1;
11888 	      h->non_elf = 0;
11889 	    }
11890 	}
11891       plt0 = htab->plt->output_section->vma + htab->plt->output_offset - 16;
11892       if (info->emitrelocations)
11893 	{
11894 	  Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
11895 	  if (r == NULL)
11896 	    return FALSE;
11897 	  r->r_offset = (htab->glink->output_offset
11898 			 + htab->glink->output_section->vma);
11899 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
11900 	  r->r_addend = plt0;
11901 	}
11902       p = htab->glink->contents;
11903       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
11904       bfd_put_64 (htab->glink->owner, plt0, p);
11905       p += 8;
11906       bfd_put_32 (htab->glink->owner, MFLR_R12, p);
11907       p += 4;
11908       bfd_put_32 (htab->glink->owner, BCL_20_31, p);
11909       p += 4;
11910       bfd_put_32 (htab->glink->owner, MFLR_R11, p);
11911       p += 4;
11912       bfd_put_32 (htab->glink->owner, LD_R2_M16R11, p);
11913       p += 4;
11914       bfd_put_32 (htab->glink->owner, MTLR_R12, p);
11915       p += 4;
11916       bfd_put_32 (htab->glink->owner, ADD_R12_R2_R11, p);
11917       p += 4;
11918       bfd_put_32 (htab->glink->owner, LD_R11_0R12, p);
11919       p += 4;
11920       bfd_put_32 (htab->glink->owner, LD_R2_0R12 | 8, p);
11921       p += 4;
11922       bfd_put_32 (htab->glink->owner, MTCTR_R11, p);
11923       p += 4;
11924       bfd_put_32 (htab->glink->owner, LD_R11_0R12 | 16, p);
11925       p += 4;
11926       bfd_put_32 (htab->glink->owner, BCTR, p);
11927       p += 4;
11928       while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
11929 	{
11930 	  bfd_put_32 (htab->glink->owner, NOP, p);
11931 	  p += 4;
11932 	}
11933 
11934       /* Build the .glink lazy link call stubs.  */
11935       indx = 0;
11936       while (p < htab->glink->contents + htab->glink->size)
11937 	{
11938 	  if (indx < 0x8000)
11939 	    {
11940 	      bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
11941 	      p += 4;
11942 	    }
11943 	  else
11944 	    {
11945 	      bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
11946 	      p += 4;
11947 	      bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx), p);
11948 	      p += 4;
11949 	    }
11950 	  bfd_put_32 (htab->glink->owner,
11951 		      B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
11952 	  indx++;
11953 	  p += 4;
11954 	}
11955       htab->glink->rawsize = p - htab->glink->contents;
11956     }
11957 
11958   if (htab->brlt->size != 0)
11959     {
11960       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
11961 					 htab->brlt->size);
11962       if (htab->brlt->contents == NULL)
11963 	return FALSE;
11964     }
11965   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
11966     {
11967       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
11968 					    htab->relbrlt->size);
11969       if (htab->relbrlt->contents == NULL)
11970 	return FALSE;
11971     }
11972 
11973   if (htab->glink_eh_frame != NULL
11974       && htab->glink_eh_frame->size != 0)
11975     {
11976       bfd_vma val;
11977       bfd_byte *last_fde;
11978       size_t last_fde_len, size, align, pad;
11979 
11980       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
11981       if (p == NULL)
11982 	return FALSE;
11983       htab->glink_eh_frame->contents = p;
11984       last_fde = p;
11985 
11986       htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
11987 
11988       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
11989       /* CIE length (rewrite in case little-endian).  */
11990       last_fde_len = sizeof (glink_eh_frame_cie) - 4;
11991       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
11992       p += sizeof (glink_eh_frame_cie);
11993 
11994       for (stub_sec = htab->stub_bfd->sections;
11995 	   stub_sec != NULL;
11996 	   stub_sec = stub_sec->next)
11997 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11998 	  {
11999 	    last_fde = p;
12000 	    last_fde_len = 16;
12001 	    /* FDE length.  */
12002 	    bfd_put_32 (htab->elf.dynobj, 16, p);
12003 	    p += 4;
12004 	    /* CIE pointer.  */
12005 	    val = p - htab->glink_eh_frame->contents;
12006 	    bfd_put_32 (htab->elf.dynobj, val, p);
12007 	    p += 4;
12008 	    /* Offset to stub section.  */
12009 	    val = (stub_sec->output_section->vma
12010 		   + stub_sec->output_offset);
12011 	    val -= (htab->glink_eh_frame->output_section->vma
12012 		    + htab->glink_eh_frame->output_offset);
12013 	    val -= p - htab->glink_eh_frame->contents;
12014 	    if (val + 0x80000000 > 0xffffffff)
12015 	      {
12016 		info->callbacks->einfo
12017 		  (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12018 		   stub_sec->name);
12019 		return FALSE;
12020 	      }
12021 	    bfd_put_32 (htab->elf.dynobj, val, p);
12022 	    p += 4;
12023 	    /* stub section size.  */
12024 	    bfd_put_32 (htab->elf.dynobj, stub_sec->rawsize, p);
12025 	    p += 4;
12026 	    /* Augmentation.  */
12027 	    p += 1;
12028 	    /* Pad.  */
12029 	    p += 3;
12030 	  }
12031       if (htab->glink != NULL && htab->glink->size != 0)
12032 	{
12033 	  last_fde = p;
12034 	  last_fde_len = 20;
12035 	  /* FDE length.  */
12036 	  bfd_put_32 (htab->elf.dynobj, 20, p);
12037 	  p += 4;
12038 	  /* CIE pointer.  */
12039 	  val = p - htab->glink_eh_frame->contents;
12040 	  bfd_put_32 (htab->elf.dynobj, val, p);
12041 	  p += 4;
12042 	  /* Offset to .glink.  */
12043 	  val = (htab->glink->output_section->vma
12044 		 + htab->glink->output_offset
12045 		 + 8);
12046 	  val -= (htab->glink_eh_frame->output_section->vma
12047 		  + htab->glink_eh_frame->output_offset);
12048 	  val -= p - htab->glink_eh_frame->contents;
12049 	  if (val + 0x80000000 > 0xffffffff)
12050 	    {
12051 	      info->callbacks->einfo
12052 		(_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12053 		 htab->glink->name);
12054 	      return FALSE;
12055 	    }
12056 	  bfd_put_32 (htab->elf.dynobj, val, p);
12057 	  p += 4;
12058 	  /* .glink size.  */
12059 	  bfd_put_32 (htab->elf.dynobj, htab->glink->rawsize - 8, p);
12060 	  p += 4;
12061 	  /* Augmentation.  */
12062 	  p += 1;
12063 
12064 	  *p++ = DW_CFA_advance_loc + 1;
12065 	  *p++ = DW_CFA_register;
12066 	  *p++ = 65;
12067 	  *p++ = 12;
12068 	  *p++ = DW_CFA_advance_loc + 4;
12069 	  *p++ = DW_CFA_restore_extended;
12070 	  *p++ = 65;
12071 	}
12072       /* Subsume any padding into the last FDE if user .eh_frame
12073 	 sections are aligned more than glink_eh_frame.  Otherwise any
12074 	 zero padding will be seen as a terminator.  */
12075       size = p - htab->glink_eh_frame->contents;
12076       align = 1;
12077       align <<= htab->glink_eh_frame->output_section->alignment_power;
12078       align -= 1;
12079       pad = ((size + align) & ~align) - size;
12080       htab->glink_eh_frame->size = size + pad;
12081       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
12082     }
12083 
12084   /* Build the stubs as directed by the stub hash table.  */
12085   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
12086 
12087   if (htab->relbrlt != NULL)
12088     htab->relbrlt->reloc_count = 0;
12089 
12090   if (htab->plt_stub_align != 0)
12091     for (stub_sec = htab->stub_bfd->sections;
12092 	 stub_sec != NULL;
12093 	 stub_sec = stub_sec->next)
12094       if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12095 	stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
12096 			  & (-1 << htab->plt_stub_align));
12097 
12098   for (stub_sec = htab->stub_bfd->sections;
12099        stub_sec != NULL;
12100        stub_sec = stub_sec->next)
12101     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12102       {
12103 	stub_sec_count += 1;
12104 	if (stub_sec->rawsize != stub_sec->size)
12105 	  break;
12106       }
12107 
12108   if (stub_sec != NULL
12109       || htab->glink->rawsize != htab->glink->size
12110       || (htab->glink_eh_frame != NULL
12111 	  && htab->glink_eh_frame->rawsize != htab->glink_eh_frame->size))
12112     {
12113       htab->stub_error = TRUE;
12114       info->callbacks->einfo (_("%P: stubs don't match calculated size\n"));
12115     }
12116 
12117   if (htab->stub_error)
12118     return FALSE;
12119 
12120   if (stats != NULL)
12121     {
12122       *stats = bfd_malloc (500);
12123       if (*stats == NULL)
12124 	return FALSE;
12125 
12126       sprintf (*stats, _("linker stubs in %u group%s\n"
12127 			 "  branch       %lu\n"
12128 			 "  toc adjust   %lu\n"
12129 			 "  long branch  %lu\n"
12130 			 "  long toc adj %lu\n"
12131 			 "  plt call     %lu\n"
12132 			 "  plt call toc %lu"),
12133 	       stub_sec_count,
12134 	       stub_sec_count == 1 ? "" : "s",
12135 	       htab->stub_count[ppc_stub_long_branch - 1],
12136 	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
12137 	       htab->stub_count[ppc_stub_plt_branch - 1],
12138 	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
12139 	       htab->stub_count[ppc_stub_plt_call - 1],
12140 	       htab->stub_count[ppc_stub_plt_call_r2save - 1]);
12141     }
12142   return TRUE;
12143 }
12144 
12145 /* This function undoes the changes made by add_symbol_adjust.  */
12146 
12147 static bfd_boolean
12148 undo_symbol_twiddle (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12149 {
12150   struct ppc_link_hash_entry *eh;
12151 
12152   if (h->root.type == bfd_link_hash_indirect)
12153     return TRUE;
12154 
12155   eh = (struct ppc_link_hash_entry *) h;
12156   if (eh->elf.root.type != bfd_link_hash_undefweak || !eh->was_undefined)
12157     return TRUE;
12158 
12159   eh->elf.root.type = bfd_link_hash_undefined;
12160   return TRUE;
12161 }
12162 
12163 void
12164 ppc64_elf_restore_symbols (struct bfd_link_info *info)
12165 {
12166   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12167 
12168   if (htab != NULL)
12169     elf_link_hash_traverse (&htab->elf, undo_symbol_twiddle, info);
12170 }
12171 
12172 /* What to do when ld finds relocations against symbols defined in
12173    discarded sections.  */
12174 
12175 static unsigned int
12176 ppc64_elf_action_discarded (asection *sec)
12177 {
12178   if (strcmp (".opd", sec->name) == 0)
12179     return 0;
12180 
12181   if (strcmp (".toc", sec->name) == 0)
12182     return 0;
12183 
12184   if (strcmp (".toc1", sec->name) == 0)
12185     return 0;
12186 
12187   return _bfd_elf_default_action_discarded (sec);
12188 }
12189 
12190 /* The RELOCATE_SECTION function is called by the ELF backend linker
12191    to handle the relocations for a section.
12192 
12193    The relocs are always passed as Rela structures; if the section
12194    actually uses Rel structures, the r_addend field will always be
12195    zero.
12196 
12197    This function is responsible for adjust the section contents as
12198    necessary, and (if using Rela relocs and generating a
12199    relocatable output file) adjusting the reloc addend as
12200    necessary.
12201 
12202    This function does not have to worry about setting the reloc
12203    address or the reloc symbol index.
12204 
12205    LOCAL_SYMS is a pointer to the swapped in local symbols.
12206 
12207    LOCAL_SECTIONS is an array giving the section in the input file
12208    corresponding to the st_shndx field of each local symbol.
12209 
12210    The global hash table entry for the global symbols can be found
12211    via elf_sym_hashes (input_bfd).
12212 
12213    When generating relocatable output, this function must handle
12214    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
12215    going to be the section symbol corresponding to the output
12216    section, which means that the addend must be adjusted
12217    accordingly.  */
12218 
12219 static bfd_boolean
12220 ppc64_elf_relocate_section (bfd *output_bfd,
12221 			    struct bfd_link_info *info,
12222 			    bfd *input_bfd,
12223 			    asection *input_section,
12224 			    bfd_byte *contents,
12225 			    Elf_Internal_Rela *relocs,
12226 			    Elf_Internal_Sym *local_syms,
12227 			    asection **local_sections)
12228 {
12229   struct ppc_link_hash_table *htab;
12230   Elf_Internal_Shdr *symtab_hdr;
12231   struct elf_link_hash_entry **sym_hashes;
12232   Elf_Internal_Rela *rel;
12233   Elf_Internal_Rela *relend;
12234   Elf_Internal_Rela outrel;
12235   bfd_byte *loc;
12236   struct got_entry **local_got_ents;
12237   bfd_vma TOCstart;
12238   bfd_boolean ret = TRUE;
12239   bfd_boolean is_opd;
12240   /* Assume 'at' branch hints.  */
12241   bfd_boolean is_isa_v2 = TRUE;
12242   bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
12243 
12244   /* Initialize howto table if needed.  */
12245   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
12246     ppc_howto_init ();
12247 
12248   htab = ppc_hash_table (info);
12249   if (htab == NULL)
12250     return FALSE;
12251 
12252   /* Don't relocate stub sections.  */
12253   if (input_section->owner == htab->stub_bfd)
12254     return TRUE;
12255 
12256   BFD_ASSERT (is_ppc64_elf (input_bfd));
12257 
12258   local_got_ents = elf_local_got_ents (input_bfd);
12259   TOCstart = elf_gp (output_bfd);
12260   symtab_hdr = &elf_symtab_hdr (input_bfd);
12261   sym_hashes = elf_sym_hashes (input_bfd);
12262   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
12263 
12264   rel = relocs;
12265   relend = relocs + input_section->reloc_count;
12266   for (; rel < relend; rel++)
12267     {
12268       enum elf_ppc64_reloc_type r_type;
12269       bfd_vma addend;
12270       bfd_reloc_status_type r;
12271       Elf_Internal_Sym *sym;
12272       asection *sec;
12273       struct elf_link_hash_entry *h_elf;
12274       struct ppc_link_hash_entry *h;
12275       struct ppc_link_hash_entry *fdh;
12276       const char *sym_name;
12277       unsigned long r_symndx, toc_symndx;
12278       bfd_vma toc_addend;
12279       unsigned char tls_mask, tls_gd, tls_type;
12280       unsigned char sym_type;
12281       bfd_vma relocation;
12282       bfd_boolean unresolved_reloc;
12283       bfd_boolean warned;
12284       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
12285       unsigned int insn;
12286       unsigned int mask;
12287       struct ppc_stub_hash_entry *stub_entry;
12288       bfd_vma max_br_offset;
12289       bfd_vma from;
12290       const Elf_Internal_Rela orig_rel = *rel;
12291 
12292       r_type = ELF64_R_TYPE (rel->r_info);
12293       r_symndx = ELF64_R_SYM (rel->r_info);
12294 
12295       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
12296 	 symbol of the previous ADDR64 reloc.  The symbol gives us the
12297 	 proper TOC base to use.  */
12298       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
12299 	  && rel != relocs
12300 	  && ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
12301 	  && is_opd)
12302 	r_symndx = ELF64_R_SYM (rel[-1].r_info);
12303 
12304       sym = NULL;
12305       sec = NULL;
12306       h_elf = NULL;
12307       sym_name = NULL;
12308       unresolved_reloc = FALSE;
12309       warned = FALSE;
12310 
12311       if (r_symndx < symtab_hdr->sh_info)
12312 	{
12313 	  /* It's a local symbol.  */
12314 	  struct _opd_sec_data *opd;
12315 
12316 	  sym = local_syms + r_symndx;
12317 	  sec = local_sections[r_symndx];
12318 	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
12319 	  sym_type = ELF64_ST_TYPE (sym->st_info);
12320 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
12321 	  opd = get_opd_info (sec);
12322 	  if (opd != NULL && opd->adjust != NULL)
12323 	    {
12324 	      long adjust = opd->adjust[(sym->st_value + rel->r_addend) / 8];
12325 	      if (adjust == -1)
12326 		relocation = 0;
12327 	      else
12328 		{
12329 		  /* If this is a relocation against the opd section sym
12330 		     and we have edited .opd, adjust the reloc addend so
12331 		     that ld -r and ld --emit-relocs output is correct.
12332 		     If it is a reloc against some other .opd symbol,
12333 		     then the symbol value will be adjusted later.  */
12334 		  if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
12335 		    rel->r_addend += adjust;
12336 		  else
12337 		    relocation += adjust;
12338 		}
12339 	    }
12340 	}
12341       else
12342 	{
12343 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
12344 				   r_symndx, symtab_hdr, sym_hashes,
12345 				   h_elf, sec, relocation,
12346 				   unresolved_reloc, warned);
12347 	  sym_name = h_elf->root.root.string;
12348 	  sym_type = h_elf->type;
12349 	  if (sec != NULL
12350 	      && sec->owner == output_bfd
12351 	      && strcmp (sec->name, ".opd") == 0)
12352 	    {
12353 	      /* This is a symbol defined in a linker script.  All
12354 		 such are defined in output sections, even those
12355 		 defined by simple assignment from a symbol defined in
12356 		 an input section.  Transfer the symbol to an
12357 		 appropriate input .opd section, so that a branch to
12358 		 this symbol will be mapped to the location specified
12359 		 by the opd entry.  */
12360 	      struct bfd_link_order *lo;
12361 	      for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
12362 		if (lo->type == bfd_indirect_link_order)
12363 		  {
12364 		    asection *isec = lo->u.indirect.section;
12365 		    if (h_elf->root.u.def.value >= isec->output_offset
12366 			&& h_elf->root.u.def.value < (isec->output_offset
12367 						      + isec->size))
12368 		      {
12369 			h_elf->root.u.def.value -= isec->output_offset;
12370 			h_elf->root.u.def.section = isec;
12371 			sec = isec;
12372 			break;
12373 		      }
12374 		  }
12375 	    }
12376 	}
12377       h = (struct ppc_link_hash_entry *) h_elf;
12378 
12379       if (sec != NULL && discarded_section (sec))
12380 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
12381 					 rel, 1, relend,
12382 					 ppc64_elf_howto_table[r_type], 0,
12383 					 contents);
12384 
12385       if (info->relocatable)
12386 	continue;
12387 
12388       /* TLS optimizations.  Replace instruction sequences and relocs
12389 	 based on information we collected in tls_optimize.  We edit
12390 	 RELOCS so that --emit-relocs will output something sensible
12391 	 for the final instruction stream.  */
12392       tls_mask = 0;
12393       tls_gd = 0;
12394       toc_symndx = 0;
12395       if (h != NULL)
12396 	tls_mask = h->tls_mask;
12397       else if (local_got_ents != NULL)
12398 	{
12399 	  struct plt_entry **local_plt = (struct plt_entry **)
12400 	    (local_got_ents + symtab_hdr->sh_info);
12401 	  unsigned char *lgot_masks = (unsigned char *)
12402 	    (local_plt + symtab_hdr->sh_info);
12403 	  tls_mask = lgot_masks[r_symndx];
12404 	}
12405       if (tls_mask == 0
12406 	  && (r_type == R_PPC64_TLS
12407 	      || r_type == R_PPC64_TLSGD
12408 	      || r_type == R_PPC64_TLSLD))
12409 	{
12410 	  /* Check for toc tls entries.  */
12411 	  unsigned char *toc_tls;
12412 
12413 	  if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12414 			     &local_syms, rel, input_bfd))
12415 	    return FALSE;
12416 
12417 	  if (toc_tls)
12418 	    tls_mask = *toc_tls;
12419 	}
12420 
12421       /* Check that tls relocs are used with tls syms, and non-tls
12422 	 relocs are used with non-tls syms.  */
12423       if (r_symndx != STN_UNDEF
12424 	  && r_type != R_PPC64_NONE
12425 	  && (h == NULL
12426 	      || h->elf.root.type == bfd_link_hash_defined
12427 	      || h->elf.root.type == bfd_link_hash_defweak)
12428 	  && (IS_PPC64_TLS_RELOC (r_type)
12429 	      != (sym_type == STT_TLS
12430 		  || (sym_type == STT_SECTION
12431 		      && (sec->flags & SEC_THREAD_LOCAL) != 0))))
12432 	{
12433 	  if (tls_mask != 0
12434 	      && (r_type == R_PPC64_TLS
12435 		  || r_type == R_PPC64_TLSGD
12436 		  || r_type == R_PPC64_TLSLD))
12437 	    /* R_PPC64_TLS is OK against a symbol in the TOC.  */
12438 	    ;
12439 	  else
12440 	    info->callbacks->einfo
12441 	      (!IS_PPC64_TLS_RELOC (r_type)
12442 	       ? _("%P: %H: %s used with TLS symbol `%T'\n")
12443 	       : _("%P: %H: %s used with non-TLS symbol `%T'\n"),
12444 	       input_bfd, input_section, rel->r_offset,
12445 	       ppc64_elf_howto_table[r_type]->name,
12446 	       sym_name);
12447 	}
12448 
12449       /* Ensure reloc mapping code below stays sane.  */
12450       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
12451 	  || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
12452 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
12453 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
12454 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
12455 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
12456 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
12457 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
12458 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
12459 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
12460 	abort ();
12461 
12462       switch (r_type)
12463 	{
12464 	default:
12465 	  break;
12466 
12467 	case R_PPC64_LO_DS_OPT:
12468 	  insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12469 	  if ((insn & (0x3f << 26)) != 58u << 26)
12470 	    abort ();
12471 	  insn += (14u << 26) - (58u << 26);
12472 	  bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12473 	  r_type = R_PPC64_TOC16_LO;
12474 	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12475 	  break;
12476 
12477 	case R_PPC64_TOC16:
12478 	case R_PPC64_TOC16_LO:
12479 	case R_PPC64_TOC16_DS:
12480 	case R_PPC64_TOC16_LO_DS:
12481 	  {
12482 	    /* Check for toc tls entries.  */
12483 	    unsigned char *toc_tls;
12484 	    int retval;
12485 
12486 	    retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12487 				   &local_syms, rel, input_bfd);
12488 	    if (retval == 0)
12489 	      return FALSE;
12490 
12491 	    if (toc_tls)
12492 	      {
12493 		tls_mask = *toc_tls;
12494 		if (r_type == R_PPC64_TOC16_DS
12495 		    || r_type == R_PPC64_TOC16_LO_DS)
12496 		  {
12497 		    if (tls_mask != 0
12498 			&& (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
12499 		      goto toctprel;
12500 		  }
12501 		else
12502 		  {
12503 		    /* If we found a GD reloc pair, then we might be
12504 		       doing a GD->IE transition.  */
12505 		    if (retval == 2)
12506 		      {
12507 			tls_gd = TLS_TPRELGD;
12508 			if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12509 			  goto tls_ldgd_opt;
12510 		      }
12511 		    else if (retval == 3)
12512 		      {
12513 			if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12514 			  goto tls_ldgd_opt;
12515 		      }
12516 		  }
12517 	      }
12518 	  }
12519 	  break;
12520 
12521 	case R_PPC64_GOT_TPREL16_HI:
12522 	case R_PPC64_GOT_TPREL16_HA:
12523 	  if (tls_mask != 0
12524 	      && (tls_mask & TLS_TPREL) == 0)
12525 	    {
12526 	      rel->r_offset -= d_offset;
12527 	      bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12528 	      r_type = R_PPC64_NONE;
12529 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12530 	    }
12531 	  break;
12532 
12533 	case R_PPC64_GOT_TPREL16_DS:
12534 	case R_PPC64_GOT_TPREL16_LO_DS:
12535 	  if (tls_mask != 0
12536 	      && (tls_mask & TLS_TPREL) == 0)
12537 	    {
12538 	    toctprel:
12539 	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12540 	      insn &= 31 << 21;
12541 	      insn |= 0x3c0d0000;	/* addis 0,13,0 */
12542 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12543 	      r_type = R_PPC64_TPREL16_HA;
12544 	      if (toc_symndx != 0)
12545 		{
12546 		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12547 		  rel->r_addend = toc_addend;
12548 		  /* We changed the symbol.  Start over in order to
12549 		     get h, sym, sec etc. right.  */
12550 		  rel--;
12551 		  continue;
12552 		}
12553 	      else
12554 		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12555 	    }
12556 	  break;
12557 
12558 	case R_PPC64_TLS:
12559 	  if (tls_mask != 0
12560 	      && (tls_mask & TLS_TPREL) == 0)
12561 	    {
12562 	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset);
12563 	      insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
12564 	      if (insn == 0)
12565 		abort ();
12566 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
12567 	      /* Was PPC64_TLS which sits on insn boundary, now
12568 		 PPC64_TPREL16_LO which is at low-order half-word.  */
12569 	      rel->r_offset += d_offset;
12570 	      r_type = R_PPC64_TPREL16_LO;
12571 	      if (toc_symndx != 0)
12572 		{
12573 		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12574 		  rel->r_addend = toc_addend;
12575 		  /* We changed the symbol.  Start over in order to
12576 		     get h, sym, sec etc. right.  */
12577 		  rel--;
12578 		  continue;
12579 		}
12580 	      else
12581 		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12582 	    }
12583 	  break;
12584 
12585 	case R_PPC64_GOT_TLSGD16_HI:
12586 	case R_PPC64_GOT_TLSGD16_HA:
12587 	  tls_gd = TLS_TPRELGD;
12588 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12589 	    goto tls_gdld_hi;
12590 	  break;
12591 
12592 	case R_PPC64_GOT_TLSLD16_HI:
12593 	case R_PPC64_GOT_TLSLD16_HA:
12594 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12595 	    {
12596 	    tls_gdld_hi:
12597 	      if ((tls_mask & tls_gd) != 0)
12598 		r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12599 			  + R_PPC64_GOT_TPREL16_DS);
12600 	      else
12601 		{
12602 		  rel->r_offset -= d_offset;
12603 		  bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12604 		  r_type = R_PPC64_NONE;
12605 		}
12606 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12607 	    }
12608 	  break;
12609 
12610 	case R_PPC64_GOT_TLSGD16:
12611 	case R_PPC64_GOT_TLSGD16_LO:
12612 	  tls_gd = TLS_TPRELGD;
12613 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12614 	    goto tls_ldgd_opt;
12615 	  break;
12616 
12617 	case R_PPC64_GOT_TLSLD16:
12618 	case R_PPC64_GOT_TLSLD16_LO:
12619 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12620 	    {
12621 	      unsigned int insn1, insn2, insn3;
12622 	      bfd_vma offset;
12623 
12624 	    tls_ldgd_opt:
12625 	      offset = (bfd_vma) -1;
12626 	      /* If not using the newer R_PPC64_TLSGD/LD to mark
12627 		 __tls_get_addr calls, we must trust that the call
12628 		 stays with its arg setup insns, ie. that the next
12629 		 reloc is the __tls_get_addr call associated with
12630 		 the current reloc.  Edit both insns.  */
12631 	      if (input_section->has_tls_get_addr_call
12632 		  && rel + 1 < relend
12633 		  && branch_reloc_hash_match (input_bfd, rel + 1,
12634 					      htab->tls_get_addr,
12635 					      htab->tls_get_addr_fd))
12636 		offset = rel[1].r_offset;
12637 	      if ((tls_mask & tls_gd) != 0)
12638 		{
12639 		  /* IE */
12640 		  insn1 = bfd_get_32 (output_bfd,
12641 				      contents + rel->r_offset - d_offset);
12642 		  insn1 &= (1 << 26) - (1 << 2);
12643 		  insn1 |= 58 << 26;	/* ld */
12644 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
12645 		  if (offset != (bfd_vma) -1)
12646 		    rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12647 		  if ((tls_mask & TLS_EXPLICIT) == 0)
12648 		    r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12649 			      + R_PPC64_GOT_TPREL16_DS);
12650 		  else
12651 		    r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
12652 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12653 		}
12654 	      else
12655 		{
12656 		  /* LE */
12657 		  insn1 = 0x3c6d0000;	/* addis 3,13,0 */
12658 		  insn2 = 0x38630000;	/* addi 3,3,0 */
12659 		  if (tls_gd == 0)
12660 		    {
12661 		      /* Was an LD reloc.  */
12662 		      if (toc_symndx)
12663 			sec = local_sections[toc_symndx];
12664 		      for (r_symndx = 0;
12665 			   r_symndx < symtab_hdr->sh_info;
12666 			   r_symndx++)
12667 			if (local_sections[r_symndx] == sec)
12668 			  break;
12669 		      if (r_symndx >= symtab_hdr->sh_info)
12670 			r_symndx = STN_UNDEF;
12671 		      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
12672 		      if (r_symndx != STN_UNDEF)
12673 			rel->r_addend -= (local_syms[r_symndx].st_value
12674 					  + sec->output_offset
12675 					  + sec->output_section->vma);
12676 		    }
12677 		  else if (toc_symndx != 0)
12678 		    {
12679 		      r_symndx = toc_symndx;
12680 		      rel->r_addend = toc_addend;
12681 		    }
12682 		  r_type = R_PPC64_TPREL16_HA;
12683 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12684 		  if (offset != (bfd_vma) -1)
12685 		    {
12686 		      rel[1].r_info = ELF64_R_INFO (r_symndx,
12687 						    R_PPC64_TPREL16_LO);
12688 		      rel[1].r_offset = offset + d_offset;
12689 		      rel[1].r_addend = rel->r_addend;
12690 		    }
12691 		}
12692 	      bfd_put_32 (output_bfd, insn1,
12693 			  contents + rel->r_offset - d_offset);
12694 	      if (offset != (bfd_vma) -1)
12695 		{
12696 		  insn3 = bfd_get_32 (output_bfd,
12697 				      contents + offset + 4);
12698 		  if (insn3 == NOP
12699 		      || insn3 == CROR_151515 || insn3 == CROR_313131)
12700 		    {
12701 		      rel[1].r_offset += 4;
12702 		      bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12703 		      insn2 = NOP;
12704 		    }
12705 		  bfd_put_32 (output_bfd, insn2, contents + offset);
12706 		}
12707 	      if ((tls_mask & tls_gd) == 0
12708 		  && (tls_gd == 0 || toc_symndx != 0))
12709 		{
12710 		  /* We changed the symbol.  Start over in order
12711 		     to get h, sym, sec etc. right.  */
12712 		  rel--;
12713 		  continue;
12714 		}
12715 	    }
12716 	  break;
12717 
12718 	case R_PPC64_TLSGD:
12719 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12720 	    {
12721 	      unsigned int insn2, insn3;
12722 	      bfd_vma offset = rel->r_offset;
12723 
12724 	      if ((tls_mask & TLS_TPRELGD) != 0)
12725 		{
12726 		  /* IE */
12727 		  r_type = R_PPC64_NONE;
12728 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
12729 		}
12730 	      else
12731 		{
12732 		  /* LE */
12733 		  if (toc_symndx != 0)
12734 		    {
12735 		      r_symndx = toc_symndx;
12736 		      rel->r_addend = toc_addend;
12737 		    }
12738 		  r_type = R_PPC64_TPREL16_LO;
12739 		  rel->r_offset = offset + d_offset;
12740 		  insn2 = 0x38630000;	/* addi 3,3,0 */
12741 		}
12742 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12743 	      /* Zap the reloc on the _tls_get_addr call too.  */
12744 	      BFD_ASSERT (offset == rel[1].r_offset);
12745 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12746 	      insn3 = bfd_get_32 (output_bfd,
12747 				  contents + offset + 4);
12748 	      if (insn3 == NOP
12749 		  || insn3 == CROR_151515 || insn3 == CROR_313131)
12750 		{
12751 		  rel->r_offset += 4;
12752 		  bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12753 		  insn2 = NOP;
12754 		}
12755 	      bfd_put_32 (output_bfd, insn2, contents + offset);
12756 	      if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0)
12757 		{
12758 		  rel--;
12759 		  continue;
12760 		}
12761 	    }
12762 	  break;
12763 
12764 	case R_PPC64_TLSLD:
12765 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12766 	    {
12767 	      unsigned int insn2, insn3;
12768 	      bfd_vma offset = rel->r_offset;
12769 
12770 	      if (toc_symndx)
12771 		sec = local_sections[toc_symndx];
12772 	      for (r_symndx = 0;
12773 		   r_symndx < symtab_hdr->sh_info;
12774 		   r_symndx++)
12775 		if (local_sections[r_symndx] == sec)
12776 		  break;
12777 	      if (r_symndx >= symtab_hdr->sh_info)
12778 		r_symndx = STN_UNDEF;
12779 	      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
12780 	      if (r_symndx != STN_UNDEF)
12781 		rel->r_addend -= (local_syms[r_symndx].st_value
12782 				  + sec->output_offset
12783 				  + sec->output_section->vma);
12784 
12785 	      r_type = R_PPC64_TPREL16_LO;
12786 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12787 	      rel->r_offset = offset + d_offset;
12788 	      /* Zap the reloc on the _tls_get_addr call too.  */
12789 	      BFD_ASSERT (offset == rel[1].r_offset);
12790 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12791 	      insn2 = 0x38630000;	/* addi 3,3,0 */
12792 	      insn3 = bfd_get_32 (output_bfd,
12793 				  contents + offset + 4);
12794 	      if (insn3 == NOP
12795 		  || insn3 == CROR_151515 || insn3 == CROR_313131)
12796 		{
12797 		  rel->r_offset += 4;
12798 		  bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12799 		  insn2 = NOP;
12800 		}
12801 	      bfd_put_32 (output_bfd, insn2, contents + offset);
12802 	      rel--;
12803 	      continue;
12804 	    }
12805 	  break;
12806 
12807 	case R_PPC64_DTPMOD64:
12808 	  if (rel + 1 < relend
12809 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
12810 	      && rel[1].r_offset == rel->r_offset + 8)
12811 	    {
12812 	      if ((tls_mask & TLS_GD) == 0)
12813 		{
12814 		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
12815 		  if ((tls_mask & TLS_TPRELGD) != 0)
12816 		    r_type = R_PPC64_TPREL64;
12817 		  else
12818 		    {
12819 		      bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
12820 		      r_type = R_PPC64_NONE;
12821 		    }
12822 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12823 		}
12824 	    }
12825 	  else
12826 	    {
12827 	      if ((tls_mask & TLS_LD) == 0)
12828 		{
12829 		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
12830 		  r_type = R_PPC64_NONE;
12831 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12832 		}
12833 	    }
12834 	  break;
12835 
12836 	case R_PPC64_TPREL64:
12837 	  if ((tls_mask & TLS_TPREL) == 0)
12838 	    {
12839 	      r_type = R_PPC64_NONE;
12840 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12841 	    }
12842 	  break;
12843 	}
12844 
12845       /* Handle other relocations that tweak non-addend part of insn.  */
12846       insn = 0;
12847       max_br_offset = 1 << 25;
12848       addend = rel->r_addend;
12849       reloc_dest = DEST_NORMAL;
12850       switch (r_type)
12851 	{
12852 	default:
12853 	  break;
12854 
12855 	case R_PPC64_TOCSAVE:
12856 	  if (relocation + addend == (rel->r_offset
12857 				      + input_section->output_offset
12858 				      + input_section->output_section->vma)
12859 	      && tocsave_find (htab, NO_INSERT,
12860 			       &local_syms, rel, input_bfd))
12861 	    {
12862 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
12863 	      if (insn == NOP
12864 		  || insn == CROR_151515 || insn == CROR_313131)
12865 		bfd_put_32 (input_bfd, STD_R2_40R1,
12866 			    contents + rel->r_offset);
12867 	    }
12868 	  break;
12869 
12870 	  /* Branch taken prediction relocations.  */
12871 	case R_PPC64_ADDR14_BRTAKEN:
12872 	case R_PPC64_REL14_BRTAKEN:
12873 	  insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
12874 	  /* Fall thru.  */
12875 
12876 	  /* Branch not taken prediction relocations.  */
12877 	case R_PPC64_ADDR14_BRNTAKEN:
12878 	case R_PPC64_REL14_BRNTAKEN:
12879 	  insn |= bfd_get_32 (output_bfd,
12880 			      contents + rel->r_offset) & ~(0x01 << 21);
12881 	  /* Fall thru.  */
12882 
12883 	case R_PPC64_REL14:
12884 	  max_br_offset = 1 << 15;
12885 	  /* Fall thru.  */
12886 
12887 	case R_PPC64_REL24:
12888 	  /* Calls to functions with a different TOC, such as calls to
12889 	     shared objects, need to alter the TOC pointer.  This is
12890 	     done using a linkage stub.  A REL24 branching to these
12891 	     linkage stubs needs to be followed by a nop, as the nop
12892 	     will be replaced with an instruction to restore the TOC
12893 	     base pointer.  */
12894 	  fdh = h;
12895 	  if (h != NULL
12896 	      && h->oh != NULL
12897 	      && h->oh->is_func_descriptor)
12898 	    fdh = ppc_follow_link (h->oh);
12899 	  stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
12900 					   htab);
12901 	  if (stub_entry != NULL
12902 	      && (stub_entry->stub_type == ppc_stub_plt_call
12903 		  || stub_entry->stub_type == ppc_stub_plt_call_r2save
12904 		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
12905 		  || stub_entry->stub_type == ppc_stub_long_branch_r2off))
12906 	    {
12907 	      bfd_boolean can_plt_call = FALSE;
12908 
12909 	      /* All of these stubs will modify r2, so there must be a
12910 		 branch and link followed by a nop.  The nop is
12911 		 replaced by an insn to restore r2.  */
12912 	      if (rel->r_offset + 8 <= input_section->size)
12913 		{
12914 		  unsigned long br;
12915 
12916 		  br = bfd_get_32 (input_bfd,
12917 				   contents + rel->r_offset);
12918 		  if ((br & 1) != 0)
12919 		    {
12920 		      unsigned long nop;
12921 
12922 		      nop = bfd_get_32 (input_bfd,
12923 					contents + rel->r_offset + 4);
12924 		      if (nop == NOP
12925 			  || nop == CROR_151515 || nop == CROR_313131)
12926 			{
12927 			  if (h != NULL
12928 			      && (h == htab->tls_get_addr_fd
12929 				  || h == htab->tls_get_addr)
12930 			      && !htab->no_tls_get_addr_opt)
12931 			    {
12932 			      /* Special stub used, leave nop alone.  */
12933 			    }
12934 			  else
12935 			    bfd_put_32 (input_bfd, LD_R2_40R1,
12936 					contents + rel->r_offset + 4);
12937 			  can_plt_call = TRUE;
12938 			}
12939 		    }
12940 		}
12941 
12942 	      if (!can_plt_call && h != NULL)
12943 		{
12944 		  const char *name = h->elf.root.root.string;
12945 
12946 		  if (*name == '.')
12947 		    ++name;
12948 
12949 		  if (strncmp (name, "__libc_start_main", 17) == 0
12950 		      && (name[17] == 0 || name[17] == '@'))
12951 		    {
12952 		      /* Allow crt1 branch to go via a toc adjusting
12953 			 stub.  Other calls that never return could do
12954 			 the same, if we could detect such.  */
12955 		      can_plt_call = TRUE;
12956 		    }
12957 		}
12958 
12959 	      if (!can_plt_call)
12960 		{
12961 		  /* g++ as of 20130507 emits self-calls without a
12962 		     following nop.  This is arguably wrong since we
12963 		     have conflicting information.  On the one hand a
12964 		     global symbol and on the other a local call
12965 		     sequence, but don't error for this special case.
12966 		     It isn't possible to cheaply verify we have
12967 		     exactly such a call.  Allow all calls to the same
12968 		     section.  */
12969 		  asection *code_sec = sec;
12970 
12971 		  if (get_opd_info (sec) != NULL)
12972 		    {
12973 		      bfd_vma off = (relocation + addend
12974 				     - sec->output_section->vma
12975 				     - sec->output_offset);
12976 
12977 		      opd_entry_value (sec, off, &code_sec, NULL, FALSE);
12978 		    }
12979 		  if (code_sec == input_section)
12980 		    can_plt_call = TRUE;
12981 		}
12982 
12983 	      if (!can_plt_call)
12984 		{
12985 
12986 		  if (stub_entry->stub_type == ppc_stub_plt_call
12987 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
12988 		    info->callbacks->einfo
12989 		      (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
12990 			 "recompile with -fPIC"),
12991 		       input_bfd, input_section, rel->r_offset, sym_name);
12992 		  else
12993 		    info->callbacks->einfo
12994 		      (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
12995 			 "(-mcmodel=small toc adjust stub)"),
12996 		       input_bfd, input_section, rel->r_offset, sym_name);
12997 		  bfd_set_error (bfd_error_bad_value);
12998 		  ret = FALSE;
12999 		}
13000 
13001 	      if (can_plt_call
13002 		  && (stub_entry->stub_type == ppc_stub_plt_call
13003 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save))
13004 		unresolved_reloc = FALSE;
13005 	    }
13006 
13007 	  if ((stub_entry == NULL
13008 	       || stub_entry->stub_type == ppc_stub_long_branch
13009 	       || stub_entry->stub_type == ppc_stub_plt_branch)
13010 	      && get_opd_info (sec) != NULL)
13011 	    {
13012 	      /* The branch destination is the value of the opd entry. */
13013 	      bfd_vma off = (relocation + addend
13014 			     - sec->output_section->vma
13015 			     - sec->output_offset);
13016 	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
13017 	      if (dest != (bfd_vma) -1)
13018 		{
13019 		  relocation = dest;
13020 		  addend = 0;
13021 		  reloc_dest = DEST_OPD;
13022 		}
13023 	    }
13024 
13025 	  /* If the branch is out of reach we ought to have a long
13026 	     branch stub.  */
13027 	  from = (rel->r_offset
13028 		  + input_section->output_offset
13029 		  + input_section->output_section->vma);
13030 
13031 	  if (stub_entry != NULL
13032 	      && (stub_entry->stub_type == ppc_stub_long_branch
13033 		  || stub_entry->stub_type == ppc_stub_plt_branch)
13034 	      && (r_type == R_PPC64_ADDR14_BRTAKEN
13035 		  || r_type == R_PPC64_ADDR14_BRNTAKEN
13036 		  || (relocation + addend - from + max_br_offset
13037 		      < 2 * max_br_offset)))
13038 	    /* Don't use the stub if this branch is in range.  */
13039 	    stub_entry = NULL;
13040 
13041 	  if (stub_entry != NULL)
13042 	    {
13043 	      /* Munge up the value and addend so that we call the stub
13044 		 rather than the procedure directly.  */
13045 	      relocation = (stub_entry->stub_offset
13046 			    + stub_entry->stub_sec->output_offset
13047 			    + stub_entry->stub_sec->output_section->vma);
13048 	      addend = 0;
13049 	      reloc_dest = DEST_STUB;
13050 
13051  	      if ((stub_entry->stub_type == ppc_stub_plt_call
13052 		   || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13053 		  && (ALWAYS_EMIT_R2SAVE
13054 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13055 		  && rel + 1 < relend
13056 		  && rel[1].r_offset == rel->r_offset + 4
13057 		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
13058 		relocation += 4;
13059 	    }
13060 
13061 	  if (insn != 0)
13062 	    {
13063 	      if (is_isa_v2)
13064 		{
13065 		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
13066 		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
13067 		     for branch on CTR insns (BO == 1a00t or 1a01t).  */
13068 		  if ((insn & (0x14 << 21)) == (0x04 << 21))
13069 		    insn |= 0x02 << 21;
13070 		  else if ((insn & (0x14 << 21)) == (0x10 << 21))
13071 		    insn |= 0x08 << 21;
13072 		  else
13073 		    break;
13074 		}
13075 	      else
13076 		{
13077 		  /* Invert 'y' bit if not the default.  */
13078 		  if ((bfd_signed_vma) (relocation + addend - from) < 0)
13079 		    insn ^= 0x01 << 21;
13080 		}
13081 
13082 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
13083 	    }
13084 
13085 	  /* NOP out calls to undefined weak functions.
13086 	     We can thus call a weak function without first
13087 	     checking whether the function is defined.  */
13088 	  else if (h != NULL
13089 		   && h->elf.root.type == bfd_link_hash_undefweak
13090 		   && h->elf.dynindx == -1
13091 		   && r_type == R_PPC64_REL24
13092 		   && relocation == 0
13093 		   && addend == 0)
13094 	    {
13095 	      bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
13096 	      continue;
13097 	    }
13098 	  break;
13099 	}
13100 
13101       /* Set `addend'.  */
13102       tls_type = 0;
13103       switch (r_type)
13104 	{
13105 	default:
13106 	  info->callbacks->einfo
13107 	    (_("%P: %B: unknown relocation type %d for `%T'\n"),
13108 	     input_bfd, (int) r_type, sym_name);
13109 
13110 	  bfd_set_error (bfd_error_bad_value);
13111 	  ret = FALSE;
13112 	  continue;
13113 
13114 	case R_PPC64_NONE:
13115 	case R_PPC64_TLS:
13116 	case R_PPC64_TLSGD:
13117 	case R_PPC64_TLSLD:
13118 	case R_PPC64_TOCSAVE:
13119 	case R_PPC64_GNU_VTINHERIT:
13120 	case R_PPC64_GNU_VTENTRY:
13121 	  continue;
13122 
13123 	  /* GOT16 relocations.  Like an ADDR16 using the symbol's
13124 	     address in the GOT as relocation value instead of the
13125 	     symbol's value itself.  Also, create a GOT entry for the
13126 	     symbol and put the symbol value there.  */
13127 	case R_PPC64_GOT_TLSGD16:
13128 	case R_PPC64_GOT_TLSGD16_LO:
13129 	case R_PPC64_GOT_TLSGD16_HI:
13130 	case R_PPC64_GOT_TLSGD16_HA:
13131 	  tls_type = TLS_TLS | TLS_GD;
13132 	  goto dogot;
13133 
13134 	case R_PPC64_GOT_TLSLD16:
13135 	case R_PPC64_GOT_TLSLD16_LO:
13136 	case R_PPC64_GOT_TLSLD16_HI:
13137 	case R_PPC64_GOT_TLSLD16_HA:
13138 	  tls_type = TLS_TLS | TLS_LD;
13139 	  goto dogot;
13140 
13141 	case R_PPC64_GOT_TPREL16_DS:
13142 	case R_PPC64_GOT_TPREL16_LO_DS:
13143 	case R_PPC64_GOT_TPREL16_HI:
13144 	case R_PPC64_GOT_TPREL16_HA:
13145 	  tls_type = TLS_TLS | TLS_TPREL;
13146 	  goto dogot;
13147 
13148 	case R_PPC64_GOT_DTPREL16_DS:
13149 	case R_PPC64_GOT_DTPREL16_LO_DS:
13150 	case R_PPC64_GOT_DTPREL16_HI:
13151 	case R_PPC64_GOT_DTPREL16_HA:
13152 	  tls_type = TLS_TLS | TLS_DTPREL;
13153 	  goto dogot;
13154 
13155 	case R_PPC64_GOT16:
13156 	case R_PPC64_GOT16_LO:
13157 	case R_PPC64_GOT16_HI:
13158 	case R_PPC64_GOT16_HA:
13159 	case R_PPC64_GOT16_DS:
13160 	case R_PPC64_GOT16_LO_DS:
13161 	dogot:
13162 	  {
13163 	    /* Relocation is to the entry for this symbol in the global
13164 	       offset table.  */
13165 	    asection *got;
13166 	    bfd_vma *offp;
13167 	    bfd_vma off;
13168 	    unsigned long indx = 0;
13169 	    struct got_entry *ent;
13170 
13171 	    if (tls_type == (TLS_TLS | TLS_LD)
13172 		&& (h == NULL
13173 		    || !h->elf.def_dynamic))
13174 	      ent = ppc64_tlsld_got (input_bfd);
13175 	    else
13176 	      {
13177 
13178 		if (h != NULL)
13179 		  {
13180 		    bfd_boolean dyn = htab->elf.dynamic_sections_created;
13181 		    if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
13182 							  &h->elf)
13183 			|| (info->shared
13184 			    && SYMBOL_CALLS_LOCAL (info, &h->elf)))
13185 		      /* This is actually a static link, or it is a
13186 			 -Bsymbolic link and the symbol is defined
13187 			 locally, or the symbol was forced to be local
13188 			 because of a version file.  */
13189 		      ;
13190 		    else
13191 		      {
13192 			BFD_ASSERT (h->elf.dynindx != -1);
13193 			indx = h->elf.dynindx;
13194 			unresolved_reloc = FALSE;
13195 		      }
13196 		    ent = h->elf.got.glist;
13197 		  }
13198 		else
13199 		  {
13200 		    if (local_got_ents == NULL)
13201 		      abort ();
13202 		    ent = local_got_ents[r_symndx];
13203 		  }
13204 
13205 		for (; ent != NULL; ent = ent->next)
13206 		  if (ent->addend == orig_rel.r_addend
13207 		      && ent->owner == input_bfd
13208 		      && ent->tls_type == tls_type)
13209 		    break;
13210 	      }
13211 
13212 	    if (ent == NULL)
13213 	      abort ();
13214 	    if (ent->is_indirect)
13215 	      ent = ent->got.ent;
13216 	    offp = &ent->got.offset;
13217 	    got = ppc64_elf_tdata (ent->owner)->got;
13218 	    if (got == NULL)
13219 	      abort ();
13220 
13221 	    /* The offset must always be a multiple of 8.  We use the
13222 	       least significant bit to record whether we have already
13223 	       processed this entry.  */
13224 	    off = *offp;
13225 	    if ((off & 1) != 0)
13226 	      off &= ~1;
13227 	    else
13228 	      {
13229 		/* Generate relocs for the dynamic linker, except in
13230 		   the case of TLSLD where we'll use one entry per
13231 		   module.  */
13232 		asection *relgot;
13233 		bfd_boolean ifunc;
13234 
13235 		*offp = off | 1;
13236 		relgot = NULL;
13237 		ifunc = (h != NULL
13238 			 ? h->elf.type == STT_GNU_IFUNC
13239 			 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
13240 		if ((info->shared || indx != 0)
13241 		    && (h == NULL
13242 			|| (tls_type == (TLS_TLS | TLS_LD)
13243 			    && !h->elf.def_dynamic)
13244 			|| ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13245 			|| h->elf.root.type != bfd_link_hash_undefweak))
13246 		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
13247 		else if (ifunc)
13248 		  relgot = htab->reliplt;
13249 		if (relgot != NULL)
13250 		  {
13251 		    outrel.r_offset = (got->output_section->vma
13252 				       + got->output_offset
13253 				       + off);
13254 		    outrel.r_addend = addend;
13255 		    if (tls_type & (TLS_LD | TLS_GD))
13256 		      {
13257 			outrel.r_addend = 0;
13258 			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
13259 			if (tls_type == (TLS_TLS | TLS_GD))
13260 			  {
13261 			    loc = relgot->contents;
13262 			    loc += (relgot->reloc_count++
13263 				    * sizeof (Elf64_External_Rela));
13264 			    bfd_elf64_swap_reloca_out (output_bfd,
13265 						       &outrel, loc);
13266 			    outrel.r_offset += 8;
13267 			    outrel.r_addend = addend;
13268 			    outrel.r_info
13269 			      = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13270 			  }
13271 		      }
13272 		    else if (tls_type == (TLS_TLS | TLS_DTPREL))
13273 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13274 		    else if (tls_type == (TLS_TLS | TLS_TPREL))
13275 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
13276 		    else if (indx != 0)
13277 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
13278 		    else
13279 		      {
13280 			if (ifunc)
13281 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13282 			else
13283 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13284 
13285 			/* Write the .got section contents for the sake
13286 			   of prelink.  */
13287 			loc = got->contents + off;
13288 			bfd_put_64 (output_bfd, outrel.r_addend + relocation,
13289 				    loc);
13290 		      }
13291 
13292 		    if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
13293 		      {
13294 			outrel.r_addend += relocation;
13295 			if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
13296 			  outrel.r_addend -= htab->elf.tls_sec->vma;
13297 		      }
13298 		    loc = relgot->contents;
13299 		    loc += (relgot->reloc_count++
13300 			    * sizeof (Elf64_External_Rela));
13301 		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
13302 		  }
13303 
13304 		/* Init the .got section contents here if we're not
13305 		   emitting a reloc.  */
13306 		else
13307 		  {
13308 		    relocation += addend;
13309 		    if (tls_type == (TLS_TLS | TLS_LD))
13310 		      relocation = 1;
13311 		    else if (tls_type != 0)
13312 		      {
13313 			relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
13314 			if (tls_type == (TLS_TLS | TLS_TPREL))
13315 			  relocation += DTP_OFFSET - TP_OFFSET;
13316 
13317 			if (tls_type == (TLS_TLS | TLS_GD))
13318 			  {
13319 			    bfd_put_64 (output_bfd, relocation,
13320 					got->contents + off + 8);
13321 			    relocation = 1;
13322 			  }
13323 		      }
13324 
13325 		    bfd_put_64 (output_bfd, relocation,
13326 				got->contents + off);
13327 		  }
13328 	      }
13329 
13330 	    if (off >= (bfd_vma) -2)
13331 	      abort ();
13332 
13333 	    relocation = got->output_section->vma + got->output_offset + off;
13334 	    addend = -(TOCstart + htab->stub_group[input_section->id].toc_off);
13335 	  }
13336 	  break;
13337 
13338 	case R_PPC64_PLT16_HA:
13339 	case R_PPC64_PLT16_HI:
13340 	case R_PPC64_PLT16_LO:
13341 	case R_PPC64_PLT32:
13342 	case R_PPC64_PLT64:
13343 	  /* Relocation is to the entry for this symbol in the
13344 	     procedure linkage table.  */
13345 
13346 	  /* Resolve a PLT reloc against a local symbol directly,
13347 	     without using the procedure linkage table.  */
13348 	  if (h == NULL)
13349 	    break;
13350 
13351 	  /* It's possible that we didn't make a PLT entry for this
13352 	     symbol.  This happens when statically linking PIC code,
13353 	     or when using -Bsymbolic.  Go find a match if there is a
13354 	     PLT entry.  */
13355 	  if (htab->plt != NULL)
13356 	    {
13357 	      struct plt_entry *ent;
13358 	      for (ent = h->elf.plt.plist; ent != NULL; ent = ent->next)
13359 		if (ent->addend == orig_rel.r_addend
13360 		    && ent->plt.offset != (bfd_vma) -1)
13361 		  {
13362 		    relocation = (htab->plt->output_section->vma
13363 				  + htab->plt->output_offset
13364 				  + ent->plt.offset);
13365 		    unresolved_reloc = FALSE;
13366 		  }
13367 	    }
13368 	  break;
13369 
13370 	case R_PPC64_TOC:
13371 	  /* Relocation value is TOC base.  */
13372 	  relocation = TOCstart;
13373 	  if (r_symndx == STN_UNDEF)
13374 	    relocation += htab->stub_group[input_section->id].toc_off;
13375 	  else if (unresolved_reloc)
13376 	    ;
13377 	  else if (sec != NULL && sec->id <= htab->top_id)
13378 	    relocation += htab->stub_group[sec->id].toc_off;
13379 	  else
13380 	    unresolved_reloc = TRUE;
13381 	  goto dodyn;
13382 
13383 	  /* TOC16 relocs.  We want the offset relative to the TOC base,
13384 	     which is the address of the start of the TOC plus 0x8000.
13385 	     The TOC consists of sections .got, .toc, .tocbss, and .plt,
13386 	     in this order.  */
13387 	case R_PPC64_TOC16:
13388 	case R_PPC64_TOC16_LO:
13389 	case R_PPC64_TOC16_HI:
13390 	case R_PPC64_TOC16_DS:
13391 	case R_PPC64_TOC16_LO_DS:
13392 	case R_PPC64_TOC16_HA:
13393 	  addend -= TOCstart + htab->stub_group[input_section->id].toc_off;
13394 	  break;
13395 
13396 	  /* Relocate against the beginning of the section.  */
13397 	case R_PPC64_SECTOFF:
13398 	case R_PPC64_SECTOFF_LO:
13399 	case R_PPC64_SECTOFF_HI:
13400 	case R_PPC64_SECTOFF_DS:
13401 	case R_PPC64_SECTOFF_LO_DS:
13402 	case R_PPC64_SECTOFF_HA:
13403 	  if (sec != NULL)
13404 	    addend -= sec->output_section->vma;
13405 	  break;
13406 
13407 	case R_PPC64_REL16:
13408 	case R_PPC64_REL16_LO:
13409 	case R_PPC64_REL16_HI:
13410 	case R_PPC64_REL16_HA:
13411 	  break;
13412 
13413 	case R_PPC64_REL14:
13414 	case R_PPC64_REL14_BRNTAKEN:
13415 	case R_PPC64_REL14_BRTAKEN:
13416 	case R_PPC64_REL24:
13417 	  break;
13418 
13419 	case R_PPC64_TPREL16:
13420 	case R_PPC64_TPREL16_LO:
13421 	case R_PPC64_TPREL16_HI:
13422 	case R_PPC64_TPREL16_HA:
13423 	case R_PPC64_TPREL16_DS:
13424 	case R_PPC64_TPREL16_LO_DS:
13425 	case R_PPC64_TPREL16_HIGHER:
13426 	case R_PPC64_TPREL16_HIGHERA:
13427 	case R_PPC64_TPREL16_HIGHEST:
13428 	case R_PPC64_TPREL16_HIGHESTA:
13429 	  if (h != NULL
13430 	      && h->elf.root.type == bfd_link_hash_undefweak
13431 	      && h->elf.dynindx == -1)
13432 	    {
13433 	      /* Make this relocation against an undefined weak symbol
13434 		 resolve to zero.  This is really just a tweak, since
13435 		 code using weak externs ought to check that they are
13436 		 defined before using them.  */
13437 	      bfd_byte *p = contents + rel->r_offset - d_offset;
13438 
13439 	      insn = bfd_get_32 (output_bfd, p);
13440 	      insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
13441 	      if (insn != 0)
13442 		bfd_put_32 (output_bfd, insn, p);
13443 	      break;
13444 	    }
13445 	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13446 	  if (info->shared)
13447 	    /* The TPREL16 relocs shouldn't really be used in shared
13448 	       libs as they will result in DT_TEXTREL being set, but
13449 	       support them anyway.  */
13450 	    goto dodyn;
13451 	  break;
13452 
13453 	case R_PPC64_DTPREL16:
13454 	case R_PPC64_DTPREL16_LO:
13455 	case R_PPC64_DTPREL16_HI:
13456 	case R_PPC64_DTPREL16_HA:
13457 	case R_PPC64_DTPREL16_DS:
13458 	case R_PPC64_DTPREL16_LO_DS:
13459 	case R_PPC64_DTPREL16_HIGHER:
13460 	case R_PPC64_DTPREL16_HIGHERA:
13461 	case R_PPC64_DTPREL16_HIGHEST:
13462 	case R_PPC64_DTPREL16_HIGHESTA:
13463 	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13464 	  break;
13465 
13466 	case R_PPC64_DTPMOD64:
13467 	  relocation = 1;
13468 	  addend = 0;
13469 	  goto dodyn;
13470 
13471 	case R_PPC64_TPREL64:
13472 	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13473 	  goto dodyn;
13474 
13475 	case R_PPC64_DTPREL64:
13476 	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13477 	  /* Fall thru */
13478 
13479 	  /* Relocations that may need to be propagated if this is a
13480 	     dynamic object.  */
13481 	case R_PPC64_REL30:
13482 	case R_PPC64_REL32:
13483 	case R_PPC64_REL64:
13484 	case R_PPC64_ADDR14:
13485 	case R_PPC64_ADDR14_BRNTAKEN:
13486 	case R_PPC64_ADDR14_BRTAKEN:
13487 	case R_PPC64_ADDR16:
13488 	case R_PPC64_ADDR16_DS:
13489 	case R_PPC64_ADDR16_HA:
13490 	case R_PPC64_ADDR16_HI:
13491 	case R_PPC64_ADDR16_HIGHER:
13492 	case R_PPC64_ADDR16_HIGHERA:
13493 	case R_PPC64_ADDR16_HIGHEST:
13494 	case R_PPC64_ADDR16_HIGHESTA:
13495 	case R_PPC64_ADDR16_LO:
13496 	case R_PPC64_ADDR16_LO_DS:
13497 	case R_PPC64_ADDR24:
13498 	case R_PPC64_ADDR32:
13499 	case R_PPC64_ADDR64:
13500 	case R_PPC64_UADDR16:
13501 	case R_PPC64_UADDR32:
13502 	case R_PPC64_UADDR64:
13503 	dodyn:
13504 	  if ((input_section->flags & SEC_ALLOC) == 0)
13505 	    break;
13506 
13507 	  if (NO_OPD_RELOCS && is_opd)
13508 	    break;
13509 
13510 	  if ((info->shared
13511 	       && (h == NULL
13512 		   || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13513 		   || h->elf.root.type != bfd_link_hash_undefweak)
13514 	       && (must_be_dyn_reloc (info, r_type)
13515 		   || !SYMBOL_CALLS_LOCAL (info, &h->elf)))
13516 	      || (ELIMINATE_COPY_RELOCS
13517 		  && !info->shared
13518 		  && h != NULL
13519 		  && h->elf.dynindx != -1
13520 		  && !h->elf.non_got_ref
13521 		  && !h->elf.def_regular)
13522 	      || (!info->shared
13523 		  && (h != NULL
13524 		      ? h->elf.type == STT_GNU_IFUNC
13525 		      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
13526 	    {
13527 	      bfd_boolean skip, relocate;
13528 	      asection *sreloc;
13529 	      bfd_vma out_off;
13530 
13531 	      /* When generating a dynamic object, these relocations
13532 		 are copied into the output file to be resolved at run
13533 		 time.  */
13534 
13535 	      skip = FALSE;
13536 	      relocate = FALSE;
13537 
13538 	      out_off = _bfd_elf_section_offset (output_bfd, info,
13539 						 input_section, rel->r_offset);
13540 	      if (out_off == (bfd_vma) -1)
13541 		skip = TRUE;
13542 	      else if (out_off == (bfd_vma) -2)
13543 		skip = TRUE, relocate = TRUE;
13544 	      out_off += (input_section->output_section->vma
13545 			  + input_section->output_offset);
13546 	      outrel.r_offset = out_off;
13547 	      outrel.r_addend = rel->r_addend;
13548 
13549 	      /* Optimize unaligned reloc use.  */
13550 	      if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
13551 		  || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
13552 		r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
13553 	      else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
13554 		       || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
13555 		r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
13556 	      else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
13557 		       || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
13558 		r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
13559 
13560 	      if (skip)
13561 		memset (&outrel, 0, sizeof outrel);
13562 	      else if (!SYMBOL_CALLS_LOCAL (info, &h->elf)
13563 		       && !is_opd
13564 		       && r_type != R_PPC64_TOC)
13565 		{
13566 		  BFD_ASSERT (h->elf.dynindx != -1);
13567 		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
13568 		}
13569 	      else
13570 		{
13571 		  /* This symbol is local, or marked to become local,
13572 		     or this is an opd section reloc which must point
13573 		     at a local function.  */
13574 		  outrel.r_addend += relocation;
13575 		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
13576 		    {
13577 		      if (is_opd && h != NULL)
13578 			{
13579 			  /* Lie about opd entries.  This case occurs
13580 			     when building shared libraries and we
13581 			     reference a function in another shared
13582 			     lib.  The same thing happens for a weak
13583 			     definition in an application that's
13584 			     overridden by a strong definition in a
13585 			     shared lib.  (I believe this is a generic
13586 			     bug in binutils handling of weak syms.)
13587 			     In these cases we won't use the opd
13588 			     entry in this lib.  */
13589 			  unresolved_reloc = FALSE;
13590 			}
13591 		      if (!is_opd
13592 			  && r_type == R_PPC64_ADDR64
13593 			  && (h != NULL
13594 			      ? h->elf.type == STT_GNU_IFUNC
13595 			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
13596 			outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13597 		      else
13598 			{
13599 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13600 
13601 			  /* We need to relocate .opd contents for ld.so.
13602 			     Prelink also wants simple and consistent rules
13603 			     for relocs.  This make all RELATIVE relocs have
13604 			     *r_offset equal to r_addend.  */
13605 			  relocate = TRUE;
13606 			}
13607 		    }
13608 		  else
13609 		    {
13610 		      long indx = 0;
13611 
13612 		      if (h != NULL
13613 			  ? h->elf.type == STT_GNU_IFUNC
13614 			  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13615 			{
13616 			  info->callbacks->einfo
13617 			    (_("%P: %H: %s for indirect "
13618 			       "function `%T' unsupported\n"),
13619 			     input_bfd, input_section, rel->r_offset,
13620 			     ppc64_elf_howto_table[r_type]->name,
13621 			     sym_name);
13622 			  ret = FALSE;
13623 			}
13624 		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
13625 			;
13626 		      else if (sec == NULL || sec->owner == NULL)
13627 			{
13628 			  bfd_set_error (bfd_error_bad_value);
13629 			  return FALSE;
13630 			}
13631 		      else
13632 			{
13633 			  asection *osec;
13634 
13635 			  osec = sec->output_section;
13636 			  indx = elf_section_data (osec)->dynindx;
13637 
13638 			  if (indx == 0)
13639 			    {
13640 			      if ((osec->flags & SEC_READONLY) == 0
13641 				  && htab->elf.data_index_section != NULL)
13642 				osec = htab->elf.data_index_section;
13643 			      else
13644 				osec = htab->elf.text_index_section;
13645 			      indx = elf_section_data (osec)->dynindx;
13646 			    }
13647 			  BFD_ASSERT (indx != 0);
13648 
13649 			  /* We are turning this relocation into one
13650 			     against a section symbol, so subtract out
13651 			     the output section's address but not the
13652 			     offset of the input section in the output
13653 			     section.  */
13654 			  outrel.r_addend -= osec->vma;
13655 			}
13656 
13657 		      outrel.r_info = ELF64_R_INFO (indx, r_type);
13658 		    }
13659 		}
13660 
13661 	      sreloc = elf_section_data (input_section)->sreloc;
13662 	      if (!htab->elf.dynamic_sections_created)
13663 		sreloc = htab->reliplt;
13664 	      if (sreloc == NULL)
13665 		abort ();
13666 
13667 	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
13668 		  >= sreloc->size)
13669 		abort ();
13670 	      loc = sreloc->contents;
13671 	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
13672 	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
13673 
13674 	      /* If this reloc is against an external symbol, it will
13675 		 be computed at runtime, so there's no need to do
13676 		 anything now.  However, for the sake of prelink ensure
13677 		 that the section contents are a known value.  */
13678 	      if (! relocate)
13679 		{
13680 		  unresolved_reloc = FALSE;
13681 		  /* The value chosen here is quite arbitrary as ld.so
13682 		     ignores section contents except for the special
13683 		     case of .opd where the contents might be accessed
13684 		     before relocation.  Choose zero, as that won't
13685 		     cause reloc overflow.  */
13686 		  relocation = 0;
13687 		  addend = 0;
13688 		  /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
13689 		     to improve backward compatibility with older
13690 		     versions of ld.  */
13691 		  if (r_type == R_PPC64_ADDR64)
13692 		    addend = outrel.r_addend;
13693 		  /* Adjust pc_relative relocs to have zero in *r_offset.  */
13694 		  else if (ppc64_elf_howto_table[r_type]->pc_relative)
13695 		    addend = (input_section->output_section->vma
13696 			      + input_section->output_offset
13697 			      + rel->r_offset);
13698 		}
13699 	    }
13700 	  break;
13701 
13702 	case R_PPC64_COPY:
13703 	case R_PPC64_GLOB_DAT:
13704 	case R_PPC64_JMP_SLOT:
13705 	case R_PPC64_JMP_IREL:
13706 	case R_PPC64_RELATIVE:
13707 	  /* We shouldn't ever see these dynamic relocs in relocatable
13708 	     files.  */
13709 	  /* Fall through.  */
13710 
13711 	case R_PPC64_PLTGOT16:
13712 	case R_PPC64_PLTGOT16_DS:
13713 	case R_PPC64_PLTGOT16_HA:
13714 	case R_PPC64_PLTGOT16_HI:
13715 	case R_PPC64_PLTGOT16_LO:
13716 	case R_PPC64_PLTGOT16_LO_DS:
13717 	case R_PPC64_PLTREL32:
13718 	case R_PPC64_PLTREL64:
13719 	  /* These ones haven't been implemented yet.  */
13720 
13721 	  info->callbacks->einfo
13722 	    (_("%P: %B: %s is not supported for `%T'\n"),
13723 	     input_bfd,
13724 	     ppc64_elf_howto_table[r_type]->name, sym_name);
13725 
13726 	  bfd_set_error (bfd_error_invalid_operation);
13727 	  ret = FALSE;
13728 	  continue;
13729 	}
13730 
13731       /* Multi-instruction sequences that access the TOC can be
13732 	 optimized, eg. addis ra,r2,0; addi rb,ra,x;
13733 	 to             nop;           addi rb,r2,x;  */
13734       switch (r_type)
13735 	{
13736 	default:
13737 	  break;
13738 
13739 	case R_PPC64_GOT_TLSLD16_HI:
13740 	case R_PPC64_GOT_TLSGD16_HI:
13741 	case R_PPC64_GOT_TPREL16_HI:
13742 	case R_PPC64_GOT_DTPREL16_HI:
13743 	case R_PPC64_GOT16_HI:
13744 	case R_PPC64_TOC16_HI:
13745 	  /* These relocs would only be useful if building up an
13746 	     offset to later add to r2, perhaps in an indexed
13747 	     addressing mode instruction.  Don't try to optimize.
13748 	     Unfortunately, the possibility of someone building up an
13749 	     offset like this or even with the HA relocs, means that
13750 	     we need to check the high insn when optimizing the low
13751 	     insn.  */
13752 	  break;
13753 
13754 	case R_PPC64_GOT_TLSLD16_HA:
13755 	case R_PPC64_GOT_TLSGD16_HA:
13756 	case R_PPC64_GOT_TPREL16_HA:
13757 	case R_PPC64_GOT_DTPREL16_HA:
13758 	case R_PPC64_GOT16_HA:
13759 	case R_PPC64_TOC16_HA:
13760 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
13761 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
13762 	    {
13763 	      bfd_byte *p = contents + (rel->r_offset & ~3);
13764 	      bfd_put_32 (input_bfd, NOP, p);
13765 	    }
13766 	  break;
13767 
13768 	case R_PPC64_GOT_TLSLD16_LO:
13769 	case R_PPC64_GOT_TLSGD16_LO:
13770 	case R_PPC64_GOT_TPREL16_LO_DS:
13771 	case R_PPC64_GOT_DTPREL16_LO_DS:
13772 	case R_PPC64_GOT16_LO:
13773 	case R_PPC64_GOT16_LO_DS:
13774 	case R_PPC64_TOC16_LO:
13775 	case R_PPC64_TOC16_LO_DS:
13776 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
13777 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
13778 	    {
13779 	      bfd_byte *p = contents + (rel->r_offset & ~3);
13780 	      insn = bfd_get_32 (input_bfd, p);
13781 	      if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
13782 		{
13783 		  /* Transform addic to addi when we change reg.  */
13784 		  insn &= ~((0x3f << 26) | (0x1f << 16));
13785 		  insn |= (14u << 26) | (2 << 16);
13786 		}
13787 	      else
13788 		{
13789 		  insn &= ~(0x1f << 16);
13790 		  insn |= 2 << 16;
13791 		}
13792 	      bfd_put_32 (input_bfd, insn, p);
13793 	    }
13794 	  break;
13795 	}
13796 
13797       /* Do any further special processing.  */
13798       switch (r_type)
13799 	{
13800 	default:
13801 	  break;
13802 
13803 	case R_PPC64_ADDR16_HA:
13804 	case R_PPC64_REL16_HA:
13805 	case R_PPC64_ADDR16_HIGHERA:
13806 	case R_PPC64_ADDR16_HIGHESTA:
13807 	case R_PPC64_TOC16_HA:
13808 	case R_PPC64_SECTOFF_HA:
13809 	case R_PPC64_TPREL16_HA:
13810 	case R_PPC64_DTPREL16_HA:
13811 	case R_PPC64_TPREL16_HIGHER:
13812 	case R_PPC64_TPREL16_HIGHERA:
13813 	case R_PPC64_TPREL16_HIGHEST:
13814 	case R_PPC64_TPREL16_HIGHESTA:
13815 	case R_PPC64_DTPREL16_HIGHER:
13816 	case R_PPC64_DTPREL16_HIGHERA:
13817 	case R_PPC64_DTPREL16_HIGHEST:
13818 	case R_PPC64_DTPREL16_HIGHESTA:
13819 	  /* It's just possible that this symbol is a weak symbol
13820 	     that's not actually defined anywhere. In that case,
13821 	     'sec' would be NULL, and we should leave the symbol
13822 	     alone (it will be set to zero elsewhere in the link).  */
13823 	  if (sec == NULL)
13824 	    break;
13825 	  /* Fall thru */
13826 
13827 	case R_PPC64_GOT16_HA:
13828 	case R_PPC64_PLTGOT16_HA:
13829 	case R_PPC64_PLT16_HA:
13830 	case R_PPC64_GOT_TLSGD16_HA:
13831 	case R_PPC64_GOT_TLSLD16_HA:
13832 	case R_PPC64_GOT_TPREL16_HA:
13833 	case R_PPC64_GOT_DTPREL16_HA:
13834 	  /* Add 0x10000 if sign bit in 0:15 is set.
13835 	     Bits 0:15 are not used.  */
13836 	  addend += 0x8000;
13837 	  break;
13838 
13839 	case R_PPC64_ADDR16_DS:
13840 	case R_PPC64_ADDR16_LO_DS:
13841 	case R_PPC64_GOT16_DS:
13842 	case R_PPC64_GOT16_LO_DS:
13843 	case R_PPC64_PLT16_LO_DS:
13844 	case R_PPC64_SECTOFF_DS:
13845 	case R_PPC64_SECTOFF_LO_DS:
13846 	case R_PPC64_TOC16_DS:
13847 	case R_PPC64_TOC16_LO_DS:
13848 	case R_PPC64_PLTGOT16_DS:
13849 	case R_PPC64_PLTGOT16_LO_DS:
13850 	case R_PPC64_GOT_TPREL16_DS:
13851 	case R_PPC64_GOT_TPREL16_LO_DS:
13852 	case R_PPC64_GOT_DTPREL16_DS:
13853 	case R_PPC64_GOT_DTPREL16_LO_DS:
13854 	case R_PPC64_TPREL16_DS:
13855 	case R_PPC64_TPREL16_LO_DS:
13856 	case R_PPC64_DTPREL16_DS:
13857 	case R_PPC64_DTPREL16_LO_DS:
13858 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
13859 	  mask = 3;
13860 	  /* If this reloc is against an lq insn, then the value must be
13861 	     a multiple of 16.  This is somewhat of a hack, but the
13862 	     "correct" way to do this by defining _DQ forms of all the
13863 	     _DS relocs bloats all reloc switches in this file.  It
13864 	     doesn't seem to make much sense to use any of these relocs
13865 	     in data, so testing the insn should be safe.  */
13866 	  if ((insn & (0x3f << 26)) == (56u << 26))
13867 	    mask = 15;
13868 	  if (((relocation + addend) & mask) != 0)
13869 	    {
13870 	      info->callbacks->einfo
13871 		(_("%P: %H: error: %s not a multiple of %u\n"),
13872 		 input_bfd, input_section, rel->r_offset,
13873 		 ppc64_elf_howto_table[r_type]->name,
13874 		 mask + 1);
13875 	      bfd_set_error (bfd_error_bad_value);
13876 	      ret = FALSE;
13877 	      continue;
13878 	    }
13879 	  break;
13880 	}
13881 
13882       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
13883 	 because such sections are not SEC_ALLOC and thus ld.so will
13884 	 not process them.  */
13885       if (unresolved_reloc
13886 	  && !((input_section->flags & SEC_DEBUGGING) != 0
13887 	       && h->elf.def_dynamic)
13888 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
13889 				      rel->r_offset) != (bfd_vma) -1)
13890 	{
13891 	  info->callbacks->einfo
13892 	    (_("%P: %H: unresolvable %s against `%T'\n"),
13893 	     input_bfd, input_section, rel->r_offset,
13894 	     ppc64_elf_howto_table[(int) r_type]->name,
13895 	     h->elf.root.root.string);
13896 	  ret = FALSE;
13897 	}
13898 
13899       r = _bfd_final_link_relocate (ppc64_elf_howto_table[(int) r_type],
13900 				    input_bfd,
13901 				    input_section,
13902 				    contents,
13903 				    rel->r_offset,
13904 				    relocation,
13905 				    addend);
13906 
13907       if (r != bfd_reloc_ok)
13908 	{
13909 	  char *more_info = NULL;
13910 	  const char *reloc_name = ppc64_elf_howto_table[r_type]->name;
13911 
13912 	  if (reloc_dest != DEST_NORMAL)
13913 	    {
13914 	      more_info = bfd_malloc (strlen (reloc_name) + 8);
13915 	      if (more_info != NULL)
13916 		{
13917 		  strcpy (more_info, reloc_name);
13918 		  strcat (more_info, (reloc_dest == DEST_OPD
13919 				      ? " (OPD)" : " (stub)"));
13920 		  reloc_name = more_info;
13921 		}
13922 	    }
13923 
13924 	  if (r == bfd_reloc_overflow)
13925 	    {
13926 	      if (warned)
13927 		continue;
13928 	      if (h != NULL
13929 		  && h->elf.root.type == bfd_link_hash_undefweak
13930 		  && ppc64_elf_howto_table[r_type]->pc_relative)
13931 		{
13932 		  /* Assume this is a call protected by other code that
13933 		     detects the symbol is undefined.  If this is the case,
13934 		     we can safely ignore the overflow.  If not, the
13935 		     program is hosed anyway, and a little warning isn't
13936 		     going to help.  */
13937 
13938 		  continue;
13939 		}
13940 
13941 	      if (!((*info->callbacks->reloc_overflow)
13942 		    (info, &h->elf.root, sym_name,
13943 		     reloc_name, orig_rel.r_addend,
13944 		     input_bfd, input_section, rel->r_offset)))
13945 		return FALSE;
13946 	    }
13947 	  else
13948 	    {
13949 	      info->callbacks->einfo
13950 		(_("%P: %H: %s against `%T': error %d\n"),
13951 		 input_bfd, input_section, rel->r_offset,
13952 		 reloc_name, sym_name, (int) r);
13953 	      ret = FALSE;
13954 	    }
13955 	  if (more_info != NULL)
13956 	    free (more_info);
13957 	}
13958     }
13959 
13960   /* If we're emitting relocations, then shortly after this function
13961      returns, reloc offsets and addends for this section will be
13962      adjusted.  Worse, reloc symbol indices will be for the output
13963      file rather than the input.  Save a copy of the relocs for
13964      opd_entry_value.  */
13965   if (is_opd && (info->emitrelocations || info->relocatable))
13966     {
13967       bfd_size_type amt;
13968       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
13969       rel = bfd_alloc (input_bfd, amt);
13970       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd_relocs == NULL);
13971       ppc64_elf_tdata (input_bfd)->opd_relocs = rel;
13972       if (rel == NULL)
13973 	return FALSE;
13974       memcpy (rel, relocs, amt);
13975     }
13976   return ret;
13977 }
13978 
13979 /* Adjust the value of any local symbols in opd sections.  */
13980 
13981 static int
13982 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
13983 			      const char *name ATTRIBUTE_UNUSED,
13984 			      Elf_Internal_Sym *elfsym,
13985 			      asection *input_sec,
13986 			      struct elf_link_hash_entry *h)
13987 {
13988   struct _opd_sec_data *opd;
13989   long adjust;
13990   bfd_vma value;
13991 
13992   if (h != NULL)
13993     return 1;
13994 
13995   opd = get_opd_info (input_sec);
13996   if (opd == NULL || opd->adjust == NULL)
13997     return 1;
13998 
13999   value = elfsym->st_value - input_sec->output_offset;
14000   if (!info->relocatable)
14001     value -= input_sec->output_section->vma;
14002 
14003   adjust = opd->adjust[value / 8];
14004   if (adjust == -1)
14005     return 2;
14006 
14007   elfsym->st_value += adjust;
14008   return 1;
14009 }
14010 
14011 /* Finish up dynamic symbol handling.  We set the contents of various
14012    dynamic sections here.  */
14013 
14014 static bfd_boolean
14015 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
14016 				 struct bfd_link_info *info,
14017 				 struct elf_link_hash_entry *h,
14018 				 Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
14019 {
14020   struct ppc_link_hash_table *htab;
14021   struct plt_entry *ent;
14022   Elf_Internal_Rela rela;
14023   bfd_byte *loc;
14024 
14025   htab = ppc_hash_table (info);
14026   if (htab == NULL)
14027     return FALSE;
14028 
14029   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
14030     if (ent->plt.offset != (bfd_vma) -1)
14031       {
14032 	/* This symbol has an entry in the procedure linkage
14033 	   table.  Set it up.  */
14034 	if (!htab->elf.dynamic_sections_created
14035 	    || h->dynindx == -1)
14036 	  {
14037 	    BFD_ASSERT (h->type == STT_GNU_IFUNC
14038 			&& h->def_regular
14039 			&& (h->root.type == bfd_link_hash_defined
14040 			    || h->root.type == bfd_link_hash_defweak));
14041 	    rela.r_offset = (htab->iplt->output_section->vma
14042 			     + htab->iplt->output_offset
14043 			     + ent->plt.offset);
14044 	    rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14045 	    rela.r_addend = (h->root.u.def.value
14046 			     + h->root.u.def.section->output_offset
14047 			     + h->root.u.def.section->output_section->vma
14048 			     + ent->addend);
14049 	    loc = (htab->reliplt->contents
14050 		   + (htab->reliplt->reloc_count++
14051 		      * sizeof (Elf64_External_Rela)));
14052 	  }
14053 	else
14054 	  {
14055 	    rela.r_offset = (htab->plt->output_section->vma
14056 			     + htab->plt->output_offset
14057 			     + ent->plt.offset);
14058 	    rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
14059 	    rela.r_addend = ent->addend;
14060 	    loc = (htab->relplt->contents
14061 		   + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE)
14062 		      / (PLT_ENTRY_SIZE / sizeof (Elf64_External_Rela))));
14063 	  }
14064 	bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14065       }
14066 
14067   if (h->needs_copy)
14068     {
14069       /* This symbol needs a copy reloc.  Set it up.  */
14070 
14071       if (h->dynindx == -1
14072 	  || (h->root.type != bfd_link_hash_defined
14073 	      && h->root.type != bfd_link_hash_defweak)
14074 	  || htab->relbss == NULL)
14075 	abort ();
14076 
14077       rela.r_offset = (h->root.u.def.value
14078 		       + h->root.u.def.section->output_section->vma
14079 		       + h->root.u.def.section->output_offset);
14080       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
14081       rela.r_addend = 0;
14082       loc = htab->relbss->contents;
14083       loc += htab->relbss->reloc_count++ * sizeof (Elf64_External_Rela);
14084       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14085     }
14086 
14087   return TRUE;
14088 }
14089 
14090 /* Used to decide how to sort relocs in an optimal manner for the
14091    dynamic linker, before writing them out.  */
14092 
14093 static enum elf_reloc_type_class
14094 ppc64_elf_reloc_type_class (const Elf_Internal_Rela *rela)
14095 {
14096   enum elf_ppc64_reloc_type r_type;
14097 
14098   r_type = ELF64_R_TYPE (rela->r_info);
14099   switch (r_type)
14100     {
14101     case R_PPC64_RELATIVE:
14102       return reloc_class_relative;
14103     case R_PPC64_JMP_SLOT:
14104       return reloc_class_plt;
14105     case R_PPC64_COPY:
14106       return reloc_class_copy;
14107     default:
14108       return reloc_class_normal;
14109     }
14110 }
14111 
14112 /* Finish up the dynamic sections.  */
14113 
14114 static bfd_boolean
14115 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
14116 				   struct bfd_link_info *info)
14117 {
14118   struct ppc_link_hash_table *htab;
14119   bfd *dynobj;
14120   asection *sdyn;
14121 
14122   htab = ppc_hash_table (info);
14123   if (htab == NULL)
14124     return FALSE;
14125 
14126   dynobj = htab->elf.dynobj;
14127   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
14128 
14129   if (htab->elf.dynamic_sections_created)
14130     {
14131       Elf64_External_Dyn *dyncon, *dynconend;
14132 
14133       if (sdyn == NULL || htab->got == NULL)
14134 	abort ();
14135 
14136       dyncon = (Elf64_External_Dyn *) sdyn->contents;
14137       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
14138       for (; dyncon < dynconend; dyncon++)
14139 	{
14140 	  Elf_Internal_Dyn dyn;
14141 	  asection *s;
14142 
14143 	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
14144 
14145 	  switch (dyn.d_tag)
14146 	    {
14147 	    default:
14148 	      continue;
14149 
14150 	    case DT_PPC64_GLINK:
14151 	      s = htab->glink;
14152 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14153 	      /* We stupidly defined DT_PPC64_GLINK to be the start
14154 		 of glink rather than the first entry point, which is
14155 		 what ld.so needs, and now have a bigger stub to
14156 		 support automatic multiple TOCs.  */
14157 	      dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 32;
14158 	      break;
14159 
14160 	    case DT_PPC64_OPD:
14161 	      s = bfd_get_section_by_name (output_bfd, ".opd");
14162 	      if (s == NULL)
14163 		continue;
14164 	      dyn.d_un.d_ptr = s->vma;
14165 	      break;
14166 
14167 	    case DT_PPC64_OPDSZ:
14168 	      s = bfd_get_section_by_name (output_bfd, ".opd");
14169 	      if (s == NULL)
14170 		continue;
14171 	      dyn.d_un.d_val = s->size;
14172 	      break;
14173 
14174 	    case DT_PLTGOT:
14175 	      s = htab->plt;
14176 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14177 	      break;
14178 
14179 	    case DT_JMPREL:
14180 	      s = htab->relplt;
14181 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14182 	      break;
14183 
14184 	    case DT_PLTRELSZ:
14185 	      dyn.d_un.d_val = htab->relplt->size;
14186 	      break;
14187 
14188 	    case DT_RELASZ:
14189 	      /* Don't count procedure linkage table relocs in the
14190 		 overall reloc count.  */
14191 	      s = htab->relplt;
14192 	      if (s == NULL)
14193 		continue;
14194 	      dyn.d_un.d_val -= s->size;
14195 	      break;
14196 
14197 	    case DT_RELA:
14198 	      /* We may not be using the standard ELF linker script.
14199 		 If .rela.plt is the first .rela section, we adjust
14200 		 DT_RELA to not include it.  */
14201 	      s = htab->relplt;
14202 	      if (s == NULL)
14203 		continue;
14204 	      if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset)
14205 		continue;
14206 	      dyn.d_un.d_ptr += s->size;
14207 	      break;
14208 	    }
14209 
14210 	  bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
14211 	}
14212     }
14213 
14214   if (htab->got != NULL && htab->got->size != 0)
14215     {
14216       /* Fill in the first entry in the global offset table.
14217 	 We use it to hold the link-time TOCbase.  */
14218       bfd_put_64 (output_bfd,
14219 		  elf_gp (output_bfd) + TOC_BASE_OFF,
14220 		  htab->got->contents);
14221 
14222       /* Set .got entry size.  */
14223       elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 8;
14224     }
14225 
14226   if (htab->plt != NULL && htab->plt->size != 0)
14227     {
14228       /* Set .plt entry size.  */
14229       elf_section_data (htab->plt->output_section)->this_hdr.sh_entsize
14230 	= PLT_ENTRY_SIZE;
14231     }
14232 
14233   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
14234      brlt ourselves if emitrelocations.  */
14235   if (htab->brlt != NULL
14236       && htab->brlt->reloc_count != 0
14237       && !_bfd_elf_link_output_relocs (output_bfd,
14238 				       htab->brlt,
14239 				       elf_section_data (htab->brlt)->rela.hdr,
14240 				       elf_section_data (htab->brlt)->relocs,
14241 				       NULL))
14242     return FALSE;
14243 
14244   if (htab->glink != NULL
14245       && htab->glink->reloc_count != 0
14246       && !_bfd_elf_link_output_relocs (output_bfd,
14247 				       htab->glink,
14248 				       elf_section_data (htab->glink)->rela.hdr,
14249 				       elf_section_data (htab->glink)->relocs,
14250 				       NULL))
14251     return FALSE;
14252 
14253 
14254   if (htab->glink_eh_frame != NULL
14255       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
14256       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
14257 					   htab->glink_eh_frame,
14258 					   htab->glink_eh_frame->contents))
14259     return FALSE;
14260 
14261   /* We need to handle writing out multiple GOT sections ourselves,
14262      since we didn't add them to DYNOBJ.  We know dynobj is the first
14263      bfd.  */
14264   while ((dynobj = dynobj->link_next) != NULL)
14265     {
14266       asection *s;
14267 
14268       if (!is_ppc64_elf (dynobj))
14269 	continue;
14270 
14271       s = ppc64_elf_tdata (dynobj)->got;
14272       if (s != NULL
14273 	  && s->size != 0
14274 	  && s->output_section != bfd_abs_section_ptr
14275 	  && !bfd_set_section_contents (output_bfd, s->output_section,
14276 					s->contents, s->output_offset,
14277 					s->size))
14278 	return FALSE;
14279       s = ppc64_elf_tdata (dynobj)->relgot;
14280       if (s != NULL
14281 	  && s->size != 0
14282 	  && s->output_section != bfd_abs_section_ptr
14283 	  && !bfd_set_section_contents (output_bfd, s->output_section,
14284 					s->contents, s->output_offset,
14285 					s->size))
14286 	return FALSE;
14287     }
14288 
14289   return TRUE;
14290 }
14291 
14292 #include "elf64-target.h"
14293 
14294 /* FreeBSD support */
14295 
14296 #undef  TARGET_LITTLE_SYM
14297 #undef  TARGET_LITTLE_NAME
14298 
14299 #undef  TARGET_BIG_SYM
14300 #define TARGET_BIG_SYM	bfd_elf64_powerpc_freebsd_vec
14301 #undef  TARGET_BIG_NAME
14302 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
14303 
14304 #undef  ELF_OSABI
14305 #define	ELF_OSABI       ELFOSABI_FREEBSD
14306 
14307 #undef  elf64_bed
14308 #define elf64_bed	elf64_powerpc_fbsd_bed
14309 
14310 #include "elf64-target.h"
14311 
14312