xref: /netbsd-src/external/gpl3/binutils/dist/bfd/elf64-ppc.c (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
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   /* And the reloc addend that this was derived from.  */
3622   bfd_vma addend;
3623 
3624   /* Where this stub is being called from, or, in the case of combined
3625      stub sections, the first input section in the group.  */
3626   asection *id_sec;
3627 };
3628 
3629 struct ppc_branch_hash_entry {
3630 
3631   /* Base hash table entry structure.  */
3632   struct bfd_hash_entry root;
3633 
3634   /* Offset within branch lookup table.  */
3635   unsigned int offset;
3636 
3637   /* Generation marker.  */
3638   unsigned int iter;
3639 };
3640 
3641 struct ppc_link_hash_entry
3642 {
3643   struct elf_link_hash_entry elf;
3644 
3645   union {
3646     /* A pointer to the most recently used stub hash entry against this
3647        symbol.  */
3648     struct ppc_stub_hash_entry *stub_cache;
3649 
3650     /* A pointer to the next symbol starting with a '.'  */
3651     struct ppc_link_hash_entry *next_dot_sym;
3652   } u;
3653 
3654   /* Track dynamic relocs copied for this symbol.  */
3655   struct elf_dyn_relocs *dyn_relocs;
3656 
3657   /* Link between function code and descriptor symbols.  */
3658   struct ppc_link_hash_entry *oh;
3659 
3660   /* Flag function code and descriptor symbols.  */
3661   unsigned int is_func:1;
3662   unsigned int is_func_descriptor:1;
3663   unsigned int fake:1;
3664 
3665   /* Whether global opd/toc sym has been adjusted or not.
3666      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3667      should be set for all globals defined in any opd/toc section.  */
3668   unsigned int adjust_done:1;
3669 
3670   /* Set if we twiddled this symbol to weak at some stage.  */
3671   unsigned int was_undefined:1;
3672 
3673   /* Contexts in which symbol is used in the GOT (or TOC).
3674      TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
3675      corresponding relocs are encountered during check_relocs.
3676      tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
3677      indicate the corresponding GOT entry type is not needed.
3678      tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
3679      a TPREL one.  We use a separate flag rather than setting TPREL
3680      just for convenience in distinguishing the two cases.  */
3681 #define TLS_GD		 1	/* GD reloc. */
3682 #define TLS_LD		 2	/* LD reloc. */
3683 #define TLS_TPREL	 4	/* TPREL reloc, => IE. */
3684 #define TLS_DTPREL	 8	/* DTPREL reloc, => LD. */
3685 #define TLS_TLS		16	/* Any TLS reloc.  */
3686 #define TLS_EXPLICIT	32	/* Marks TOC section TLS relocs. */
3687 #define TLS_TPRELGD	64	/* TPREL reloc resulting from GD->IE. */
3688 #define PLT_IFUNC      128	/* STT_GNU_IFUNC.  */
3689   unsigned char tls_mask;
3690 };
3691 
3692 /* ppc64 ELF linker hash table.  */
3693 
3694 struct ppc_link_hash_table
3695 {
3696   struct elf_link_hash_table elf;
3697 
3698   /* The stub hash table.  */
3699   struct bfd_hash_table stub_hash_table;
3700 
3701   /* Another hash table for plt_branch stubs.  */
3702   struct bfd_hash_table branch_hash_table;
3703 
3704   /* Hash table for function prologue tocsave.  */
3705   htab_t tocsave_htab;
3706 
3707   /* Linker stub bfd.  */
3708   bfd *stub_bfd;
3709 
3710   /* Linker call-backs.  */
3711   asection * (*add_stub_section) (const char *, asection *);
3712   void (*layout_sections_again) (void);
3713 
3714   /* Array to keep track of which stub sections have been created, and
3715      information on stub grouping.  */
3716   struct map_stub {
3717     /* This is the section to which stubs in the group will be attached.  */
3718     asection *link_sec;
3719     /* The stub section.  */
3720     asection *stub_sec;
3721     /* Along with elf_gp, specifies the TOC pointer used in this group.  */
3722     bfd_vma toc_off;
3723   } *stub_group;
3724 
3725   /* Temp used when calculating TOC pointers.  */
3726   bfd_vma toc_curr;
3727   bfd *toc_bfd;
3728   asection *toc_first_sec;
3729 
3730   /* Highest input section id.  */
3731   int top_id;
3732 
3733   /* Highest output section index.  */
3734   int top_index;
3735 
3736   /* Used when adding symbols.  */
3737   struct ppc_link_hash_entry *dot_syms;
3738 
3739   /* List of input sections for each output section.  */
3740   asection **input_list;
3741 
3742   /* Short-cuts to get to dynamic linker sections.  */
3743   asection *got;
3744   asection *plt;
3745   asection *relplt;
3746   asection *iplt;
3747   asection *reliplt;
3748   asection *dynbss;
3749   asection *relbss;
3750   asection *glink;
3751   asection *sfpr;
3752   asection *brlt;
3753   asection *relbrlt;
3754   asection *glink_eh_frame;
3755 
3756   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3757   struct ppc_link_hash_entry *tls_get_addr;
3758   struct ppc_link_hash_entry *tls_get_addr_fd;
3759 
3760   /* The size of reliplt used by got entry relocs.  */
3761   bfd_size_type got_reli_size;
3762 
3763   /* Statistics.  */
3764   unsigned long stub_count[ppc_stub_plt_call_r2save];
3765 
3766   /* Number of stubs against global syms.  */
3767   unsigned long stub_globals;
3768 
3769   /* Alignment of PLT call stubs.  */
3770   unsigned int plt_stub_align:4;
3771 
3772   /* Set if PLT call stubs should load r11.  */
3773   unsigned int plt_static_chain:1;
3774 
3775   /* Set if PLT call stubs need a read-read barrier.  */
3776   unsigned int plt_thread_safe:1;
3777 
3778   /* Set if we should emit symbols for stubs.  */
3779   unsigned int emit_stub_syms:1;
3780 
3781   /* Set if __tls_get_addr optimization should not be done.  */
3782   unsigned int no_tls_get_addr_opt:1;
3783 
3784   /* Support for multiple toc sections.  */
3785   unsigned int do_multi_toc:1;
3786   unsigned int multi_toc_needed:1;
3787   unsigned int second_toc_pass:1;
3788   unsigned int do_toc_opt:1;
3789 
3790   /* Set on error.  */
3791   unsigned int stub_error:1;
3792 
3793   /* Temp used by ppc64_elf_process_dot_syms.  */
3794   unsigned int twiddled_syms:1;
3795 
3796   /* Incremented every time we size stubs.  */
3797   unsigned int stub_iteration;
3798 
3799   /* Small local sym cache.  */
3800   struct sym_cache sym_cache;
3801 };
3802 
3803 /* Rename some of the generic section flags to better document how they
3804    are used here.  */
3805 
3806 /* Nonzero if this section has TLS related relocations.  */
3807 #define has_tls_reloc sec_flg0
3808 
3809 /* Nonzero if this section has a call to __tls_get_addr.  */
3810 #define has_tls_get_addr_call sec_flg1
3811 
3812 /* Nonzero if this section has any toc or got relocs.  */
3813 #define has_toc_reloc sec_flg2
3814 
3815 /* Nonzero if this section has a call to another section that uses
3816    the toc or got.  */
3817 #define makes_toc_func_call sec_flg3
3818 
3819 /* Recursion protection when determining above flag.  */
3820 #define call_check_in_progress sec_flg4
3821 #define call_check_done sec_flg5
3822 
3823 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3824 
3825 #define ppc_hash_table(p) \
3826   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3827   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3828 
3829 #define ppc_stub_hash_lookup(table, string, create, copy) \
3830   ((struct ppc_stub_hash_entry *) \
3831    bfd_hash_lookup ((table), (string), (create), (copy)))
3832 
3833 #define ppc_branch_hash_lookup(table, string, create, copy) \
3834   ((struct ppc_branch_hash_entry *) \
3835    bfd_hash_lookup ((table), (string), (create), (copy)))
3836 
3837 /* Create an entry in the stub hash table.  */
3838 
3839 static struct bfd_hash_entry *
3840 stub_hash_newfunc (struct bfd_hash_entry *entry,
3841 		   struct bfd_hash_table *table,
3842 		   const char *string)
3843 {
3844   /* Allocate the structure if it has not already been allocated by a
3845      subclass.  */
3846   if (entry == NULL)
3847     {
3848       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3849       if (entry == NULL)
3850 	return entry;
3851     }
3852 
3853   /* Call the allocation method of the superclass.  */
3854   entry = bfd_hash_newfunc (entry, table, string);
3855   if (entry != NULL)
3856     {
3857       struct ppc_stub_hash_entry *eh;
3858 
3859       /* Initialize the local fields.  */
3860       eh = (struct ppc_stub_hash_entry *) entry;
3861       eh->stub_type = ppc_stub_none;
3862       eh->stub_sec = NULL;
3863       eh->stub_offset = 0;
3864       eh->target_value = 0;
3865       eh->target_section = NULL;
3866       eh->h = NULL;
3867       eh->id_sec = NULL;
3868     }
3869 
3870   return entry;
3871 }
3872 
3873 /* Create an entry in the branch hash table.  */
3874 
3875 static struct bfd_hash_entry *
3876 branch_hash_newfunc (struct bfd_hash_entry *entry,
3877 		     struct bfd_hash_table *table,
3878 		     const char *string)
3879 {
3880   /* Allocate the structure if it has not already been allocated by a
3881      subclass.  */
3882   if (entry == NULL)
3883     {
3884       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3885       if (entry == NULL)
3886 	return entry;
3887     }
3888 
3889   /* Call the allocation method of the superclass.  */
3890   entry = bfd_hash_newfunc (entry, table, string);
3891   if (entry != NULL)
3892     {
3893       struct ppc_branch_hash_entry *eh;
3894 
3895       /* Initialize the local fields.  */
3896       eh = (struct ppc_branch_hash_entry *) entry;
3897       eh->offset = 0;
3898       eh->iter = 0;
3899     }
3900 
3901   return entry;
3902 }
3903 
3904 /* Create an entry in a ppc64 ELF linker hash table.  */
3905 
3906 static struct bfd_hash_entry *
3907 link_hash_newfunc (struct bfd_hash_entry *entry,
3908 		   struct bfd_hash_table *table,
3909 		   const char *string)
3910 {
3911   /* Allocate the structure if it has not already been allocated by a
3912      subclass.  */
3913   if (entry == NULL)
3914     {
3915       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3916       if (entry == NULL)
3917 	return entry;
3918     }
3919 
3920   /* Call the allocation method of the superclass.  */
3921   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3922   if (entry != NULL)
3923     {
3924       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3925 
3926       memset (&eh->u.stub_cache, 0,
3927 	      (sizeof (struct ppc_link_hash_entry)
3928 	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3929 
3930       /* When making function calls, old ABI code references function entry
3931 	 points (dot symbols), while new ABI code references the function
3932 	 descriptor symbol.  We need to make any combination of reference and
3933 	 definition work together, without breaking archive linking.
3934 
3935 	 For a defined function "foo" and an undefined call to "bar":
3936 	 An old object defines "foo" and ".foo", references ".bar" (possibly
3937 	 "bar" too).
3938 	 A new object defines "foo" and references "bar".
3939 
3940 	 A new object thus has no problem with its undefined symbols being
3941 	 satisfied by definitions in an old object.  On the other hand, the
3942 	 old object won't have ".bar" satisfied by a new object.
3943 
3944 	 Keep a list of newly added dot-symbols.  */
3945 
3946       if (string[0] == '.')
3947 	{
3948 	  struct ppc_link_hash_table *htab;
3949 
3950 	  htab = (struct ppc_link_hash_table *) table;
3951 	  eh->u.next_dot_sym = htab->dot_syms;
3952 	  htab->dot_syms = eh;
3953 	}
3954     }
3955 
3956   return entry;
3957 }
3958 
3959 struct tocsave_entry {
3960   asection *sec;
3961   bfd_vma offset;
3962 };
3963 
3964 static hashval_t
3965 tocsave_htab_hash (const void *p)
3966 {
3967   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3968   return ((bfd_vma)(intptr_t) e->sec ^ e->offset) >> 3;
3969 }
3970 
3971 static int
3972 tocsave_htab_eq (const void *p1, const void *p2)
3973 {
3974   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3975   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3976   return e1->sec == e2->sec && e1->offset == e2->offset;
3977 }
3978 
3979 /* Create a ppc64 ELF linker hash table.  */
3980 
3981 static struct bfd_link_hash_table *
3982 ppc64_elf_link_hash_table_create (bfd *abfd)
3983 {
3984   struct ppc_link_hash_table *htab;
3985   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3986 
3987   htab = bfd_zmalloc (amt);
3988   if (htab == NULL)
3989     return NULL;
3990 
3991   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3992 				      sizeof (struct ppc_link_hash_entry),
3993 				      PPC64_ELF_DATA))
3994     {
3995       free (htab);
3996       return NULL;
3997     }
3998 
3999   /* Init the stub hash table too.  */
4000   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
4001 			    sizeof (struct ppc_stub_hash_entry)))
4002     return NULL;
4003 
4004   /* And the branch hash table.  */
4005   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
4006 			    sizeof (struct ppc_branch_hash_entry)))
4007     return NULL;
4008 
4009   htab->tocsave_htab = htab_try_create (1024,
4010 					tocsave_htab_hash,
4011 					tocsave_htab_eq,
4012 					NULL);
4013   if (htab->tocsave_htab == NULL)
4014     return NULL;
4015 
4016   /* Initializing two fields of the union is just cosmetic.  We really
4017      only care about glist, but when compiled on a 32-bit host the
4018      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
4019      debugger inspection of these fields look nicer.  */
4020   htab->elf.init_got_refcount.refcount = 0;
4021   htab->elf.init_got_refcount.glist = NULL;
4022   htab->elf.init_plt_refcount.refcount = 0;
4023   htab->elf.init_plt_refcount.glist = NULL;
4024   htab->elf.init_got_offset.offset = 0;
4025   htab->elf.init_got_offset.glist = NULL;
4026   htab->elf.init_plt_offset.offset = 0;
4027   htab->elf.init_plt_offset.glist = NULL;
4028 
4029   return &htab->elf.root;
4030 }
4031 
4032 /* Free the derived linker hash table.  */
4033 
4034 static void
4035 ppc64_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
4036 {
4037   struct ppc_link_hash_table *htab = (struct ppc_link_hash_table *) hash;
4038 
4039   bfd_hash_table_free (&htab->stub_hash_table);
4040   bfd_hash_table_free (&htab->branch_hash_table);
4041   if (htab->tocsave_htab)
4042     htab_delete (htab->tocsave_htab);
4043   _bfd_generic_link_hash_table_free (hash);
4044 }
4045 
4046 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
4047 
4048 void
4049 ppc64_elf_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
4050 {
4051   struct ppc_link_hash_table *htab;
4052 
4053   elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS64;
4054 
4055 /* Always hook our dynamic sections into the first bfd, which is the
4056    linker created stub bfd.  This ensures that the GOT header is at
4057    the start of the output TOC section.  */
4058   htab = ppc_hash_table (info);
4059   if (htab == NULL)
4060     return;
4061   htab->stub_bfd = abfd;
4062   htab->elf.dynobj = abfd;
4063 }
4064 
4065 /* Build a name for an entry in the stub hash table.  */
4066 
4067 static char *
4068 ppc_stub_name (const asection *input_section,
4069 	       const asection *sym_sec,
4070 	       const struct ppc_link_hash_entry *h,
4071 	       const Elf_Internal_Rela *rel)
4072 {
4073   char *stub_name;
4074   bfd_size_type len;
4075 
4076   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
4077      offsets from a sym as a branch target?  In fact, we could
4078      probably assume the addend is always zero.  */
4079   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
4080 
4081   if (h)
4082     {
4083       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
4084       stub_name = bfd_malloc (len);
4085       if (stub_name == NULL)
4086 	return stub_name;
4087 
4088       sprintf (stub_name, "%08x.%s+%x",
4089 	       input_section->id & 0xffffffff,
4090 	       h->elf.root.root.string,
4091 	       (int) rel->r_addend & 0xffffffff);
4092     }
4093   else
4094     {
4095       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
4096       stub_name = bfd_malloc (len);
4097       if (stub_name == NULL)
4098 	return stub_name;
4099 
4100       sprintf (stub_name, "%08x.%x:%x+%x",
4101 	       input_section->id & 0xffffffff,
4102 	       sym_sec->id & 0xffffffff,
4103 	       (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
4104 	       (int) rel->r_addend & 0xffffffff);
4105     }
4106   if (stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
4107     stub_name[len - 2] = 0;
4108   return stub_name;
4109 }
4110 
4111 /* Look up an entry in the stub hash.  Stub entries are cached because
4112    creating the stub name takes a bit of time.  */
4113 
4114 static struct ppc_stub_hash_entry *
4115 ppc_get_stub_entry (const asection *input_section,
4116 		    const asection *sym_sec,
4117 		    struct ppc_link_hash_entry *h,
4118 		    const Elf_Internal_Rela *rel,
4119 		    struct ppc_link_hash_table *htab)
4120 {
4121   struct ppc_stub_hash_entry *stub_entry;
4122   const asection *id_sec;
4123 
4124   /* If this input section is part of a group of sections sharing one
4125      stub section, then use the id of the first section in the group.
4126      Stub names need to include a section id, as there may well be
4127      more than one stub used to reach say, printf, and we need to
4128      distinguish between them.  */
4129   id_sec = htab->stub_group[input_section->id].link_sec;
4130 
4131   if (h != NULL && h->u.stub_cache != NULL
4132       && h->u.stub_cache->h == h
4133       && h->u.stub_cache->id_sec == id_sec)
4134     {
4135       stub_entry = h->u.stub_cache;
4136     }
4137   else
4138     {
4139       char *stub_name;
4140 
4141       stub_name = ppc_stub_name (id_sec, sym_sec, h, rel);
4142       if (stub_name == NULL)
4143 	return NULL;
4144 
4145       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
4146 					 stub_name, FALSE, FALSE);
4147       if (h != NULL)
4148 	h->u.stub_cache = stub_entry;
4149 
4150       free (stub_name);
4151     }
4152 
4153   return stub_entry;
4154 }
4155 
4156 /* Add a new stub entry to the stub hash.  Not all fields of the new
4157    stub entry are initialised.  */
4158 
4159 static struct ppc_stub_hash_entry *
4160 ppc_add_stub (const char *stub_name,
4161 	      asection *section,
4162 	      struct bfd_link_info *info)
4163 {
4164   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4165   asection *link_sec;
4166   asection *stub_sec;
4167   struct ppc_stub_hash_entry *stub_entry;
4168 
4169   link_sec = htab->stub_group[section->id].link_sec;
4170   stub_sec = htab->stub_group[section->id].stub_sec;
4171   if (stub_sec == NULL)
4172     {
4173       stub_sec = htab->stub_group[link_sec->id].stub_sec;
4174       if (stub_sec == NULL)
4175 	{
4176 	  size_t namelen;
4177 	  bfd_size_type len;
4178 	  char *s_name;
4179 
4180 	  namelen = strlen (link_sec->name);
4181 	  len = namelen + sizeof (STUB_SUFFIX);
4182 	  s_name = bfd_alloc (htab->stub_bfd, len);
4183 	  if (s_name == NULL)
4184 	    return NULL;
4185 
4186 	  memcpy (s_name, link_sec->name, namelen);
4187 	  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
4188 	  stub_sec = (*htab->add_stub_section) (s_name, link_sec);
4189 	  if (stub_sec == NULL)
4190 	    return NULL;
4191 	  htab->stub_group[link_sec->id].stub_sec = stub_sec;
4192 	}
4193       htab->stub_group[section->id].stub_sec = stub_sec;
4194     }
4195 
4196   /* Enter this entry into the linker stub hash table.  */
4197   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
4198 				     TRUE, FALSE);
4199   if (stub_entry == NULL)
4200     {
4201       info->callbacks->einfo (_("%P: %B: cannot create stub entry %s\n"),
4202 			      section->owner, stub_name);
4203       return NULL;
4204     }
4205 
4206   stub_entry->stub_sec = stub_sec;
4207   stub_entry->stub_offset = 0;
4208   stub_entry->id_sec = link_sec;
4209   return stub_entry;
4210 }
4211 
4212 /* Create sections for linker generated code.  */
4213 
4214 static bfd_boolean
4215 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
4216 {
4217   struct ppc_link_hash_table *htab;
4218   flagword flags;
4219 
4220   htab = ppc_hash_table (info);
4221   if (htab == NULL)
4222     return FALSE;
4223 
4224   /* Create .sfpr for code to save and restore fp regs.  */
4225   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
4226 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4227   htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
4228 						   flags);
4229   if (htab->sfpr == NULL
4230       || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
4231     return FALSE;
4232 
4233   /* Create .glink for lazy dynamic linking support.  */
4234   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
4235 						    flags);
4236   if (htab->glink == NULL
4237       || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
4238     return FALSE;
4239 
4240   if (!info->no_ld_generated_unwind_info)
4241     {
4242       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
4243 	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4244       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
4245 								 ".eh_frame",
4246 								 flags);
4247       if (htab->glink_eh_frame == NULL
4248 	  || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
4249 	return FALSE;
4250     }
4251 
4252   flags = SEC_ALLOC | SEC_LINKER_CREATED;
4253   htab->iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
4254   if (htab->iplt == NULL
4255       || ! bfd_set_section_alignment (dynobj, htab->iplt, 3))
4256     return FALSE;
4257 
4258   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4259 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4260   htab->reliplt = bfd_make_section_anyway_with_flags (dynobj,
4261 						      ".rela.iplt",
4262 						      flags);
4263   if (htab->reliplt == NULL
4264       || ! bfd_set_section_alignment (dynobj, htab->reliplt, 3))
4265     return FALSE;
4266 
4267   /* Create branch lookup table for plt_branch stubs.  */
4268   flags = (SEC_ALLOC | SEC_LOAD
4269 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4270   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
4271 						   flags);
4272   if (htab->brlt == NULL
4273       || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
4274     return FALSE;
4275 
4276   if (!info->shared)
4277     return TRUE;
4278 
4279   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4280 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4281   htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
4282 						      ".rela.branch_lt",
4283 						      flags);
4284   if (htab->relbrlt == NULL
4285       || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
4286     return FALSE;
4287 
4288   return TRUE;
4289 }
4290 
4291 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
4292    not already done.  */
4293 
4294 static bfd_boolean
4295 create_got_section (bfd *abfd, struct bfd_link_info *info)
4296 {
4297   asection *got, *relgot;
4298   flagword flags;
4299   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4300 
4301   if (!is_ppc64_elf (abfd))
4302     return FALSE;
4303   if (htab == NULL)
4304     return FALSE;
4305 
4306   if (!htab->got)
4307     {
4308       if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
4309 	return FALSE;
4310 
4311       htab->got = bfd_get_linker_section (htab->elf.dynobj, ".got");
4312       if (!htab->got)
4313 	abort ();
4314     }
4315 
4316   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4317 	   | SEC_LINKER_CREATED);
4318 
4319   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4320   if (!got
4321       || !bfd_set_section_alignment (abfd, got, 3))
4322     return FALSE;
4323 
4324   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
4325 					       flags | SEC_READONLY);
4326   if (!relgot
4327       || ! bfd_set_section_alignment (abfd, relgot, 3))
4328     return FALSE;
4329 
4330   ppc64_elf_tdata (abfd)->got = got;
4331   ppc64_elf_tdata (abfd)->relgot = relgot;
4332   return TRUE;
4333 }
4334 
4335 /* Create the dynamic sections, and set up shortcuts.  */
4336 
4337 static bfd_boolean
4338 ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
4339 {
4340   struct ppc_link_hash_table *htab;
4341 
4342   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
4343     return FALSE;
4344 
4345   htab = ppc_hash_table (info);
4346   if (htab == NULL)
4347     return FALSE;
4348 
4349   if (!htab->got)
4350     htab->got = bfd_get_linker_section (dynobj, ".got");
4351   htab->plt = bfd_get_linker_section (dynobj, ".plt");
4352   htab->relplt = bfd_get_linker_section (dynobj, ".rela.plt");
4353   htab->dynbss = bfd_get_linker_section (dynobj, ".dynbss");
4354   if (!info->shared)
4355     htab->relbss = bfd_get_linker_section (dynobj, ".rela.bss");
4356 
4357   if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
4358       || (!info->shared && !htab->relbss))
4359     abort ();
4360 
4361   return TRUE;
4362 }
4363 
4364 /* Follow indirect and warning symbol links.  */
4365 
4366 static inline struct bfd_link_hash_entry *
4367 follow_link (struct bfd_link_hash_entry *h)
4368 {
4369   while (h->type == bfd_link_hash_indirect
4370 	 || h->type == bfd_link_hash_warning)
4371     h = h->u.i.link;
4372   return h;
4373 }
4374 
4375 static inline struct elf_link_hash_entry *
4376 elf_follow_link (struct elf_link_hash_entry *h)
4377 {
4378   return (struct elf_link_hash_entry *) follow_link (&h->root);
4379 }
4380 
4381 static inline struct ppc_link_hash_entry *
4382 ppc_follow_link (struct ppc_link_hash_entry *h)
4383 {
4384   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
4385 }
4386 
4387 /* Merge PLT info on FROM with that on TO.  */
4388 
4389 static void
4390 move_plt_plist (struct ppc_link_hash_entry *from,
4391 		struct ppc_link_hash_entry *to)
4392 {
4393   if (from->elf.plt.plist != NULL)
4394     {
4395       if (to->elf.plt.plist != NULL)
4396 	{
4397 	  struct plt_entry **entp;
4398 	  struct plt_entry *ent;
4399 
4400 	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
4401 	    {
4402 	      struct plt_entry *dent;
4403 
4404 	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
4405 		if (dent->addend == ent->addend)
4406 		  {
4407 		    dent->plt.refcount += ent->plt.refcount;
4408 		    *entp = ent->next;
4409 		    break;
4410 		  }
4411 	      if (dent == NULL)
4412 		entp = &ent->next;
4413 	    }
4414 	  *entp = to->elf.plt.plist;
4415 	}
4416 
4417       to->elf.plt.plist = from->elf.plt.plist;
4418       from->elf.plt.plist = NULL;
4419     }
4420 }
4421 
4422 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
4423 
4424 static void
4425 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
4426 				struct elf_link_hash_entry *dir,
4427 				struct elf_link_hash_entry *ind)
4428 {
4429   struct ppc_link_hash_entry *edir, *eind;
4430 
4431   edir = (struct ppc_link_hash_entry *) dir;
4432   eind = (struct ppc_link_hash_entry *) ind;
4433 
4434   edir->is_func |= eind->is_func;
4435   edir->is_func_descriptor |= eind->is_func_descriptor;
4436   edir->tls_mask |= eind->tls_mask;
4437   if (eind->oh != NULL)
4438     edir->oh = ppc_follow_link (eind->oh);
4439 
4440   /* If called to transfer flags for a weakdef during processing
4441      of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
4442      We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
4443   if (!(ELIMINATE_COPY_RELOCS
4444 	&& eind->elf.root.type != bfd_link_hash_indirect
4445 	&& edir->elf.dynamic_adjusted))
4446     edir->elf.non_got_ref |= eind->elf.non_got_ref;
4447 
4448   edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
4449   edir->elf.ref_regular |= eind->elf.ref_regular;
4450   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
4451   edir->elf.needs_plt |= eind->elf.needs_plt;
4452 
4453   /* Copy over any dynamic relocs we may have on the indirect sym.  */
4454   if (eind->dyn_relocs != NULL)
4455     {
4456       if (edir->dyn_relocs != NULL)
4457 	{
4458 	  struct elf_dyn_relocs **pp;
4459 	  struct elf_dyn_relocs *p;
4460 
4461 	  /* Add reloc counts against the indirect sym to the direct sym
4462 	     list.  Merge any entries against the same section.  */
4463 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
4464 	    {
4465 	      struct elf_dyn_relocs *q;
4466 
4467 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
4468 		if (q->sec == p->sec)
4469 		  {
4470 		    q->pc_count += p->pc_count;
4471 		    q->count += p->count;
4472 		    *pp = p->next;
4473 		    break;
4474 		  }
4475 	      if (q == NULL)
4476 		pp = &p->next;
4477 	    }
4478 	  *pp = edir->dyn_relocs;
4479 	}
4480 
4481       edir->dyn_relocs = eind->dyn_relocs;
4482       eind->dyn_relocs = NULL;
4483     }
4484 
4485   /* If we were called to copy over info for a weak sym, that's all.
4486      You might think dyn_relocs need not be copied over;  After all,
4487      both syms will be dynamic or both non-dynamic so we're just
4488      moving reloc accounting around.  However, ELIMINATE_COPY_RELOCS
4489      code in ppc64_elf_adjust_dynamic_symbol needs to check for
4490      dyn_relocs in read-only sections, and it does so on what is the
4491      DIR sym here.  */
4492   if (eind->elf.root.type != bfd_link_hash_indirect)
4493     return;
4494 
4495   /* Copy over got entries that we may have already seen to the
4496      symbol which just became indirect.  */
4497   if (eind->elf.got.glist != NULL)
4498     {
4499       if (edir->elf.got.glist != NULL)
4500 	{
4501 	  struct got_entry **entp;
4502 	  struct got_entry *ent;
4503 
4504 	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
4505 	    {
4506 	      struct got_entry *dent;
4507 
4508 	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
4509 		if (dent->addend == ent->addend
4510 		    && dent->owner == ent->owner
4511 		    && dent->tls_type == ent->tls_type)
4512 		  {
4513 		    dent->got.refcount += ent->got.refcount;
4514 		    *entp = ent->next;
4515 		    break;
4516 		  }
4517 	      if (dent == NULL)
4518 		entp = &ent->next;
4519 	    }
4520 	  *entp = edir->elf.got.glist;
4521 	}
4522 
4523       edir->elf.got.glist = eind->elf.got.glist;
4524       eind->elf.got.glist = NULL;
4525     }
4526 
4527   /* And plt entries.  */
4528   move_plt_plist (eind, edir);
4529 
4530   if (eind->elf.dynindx != -1)
4531     {
4532       if (edir->elf.dynindx != -1)
4533 	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4534 				edir->elf.dynstr_index);
4535       edir->elf.dynindx = eind->elf.dynindx;
4536       edir->elf.dynstr_index = eind->elf.dynstr_index;
4537       eind->elf.dynindx = -1;
4538       eind->elf.dynstr_index = 0;
4539     }
4540 }
4541 
4542 /* Find the function descriptor hash entry from the given function code
4543    hash entry FH.  Link the entries via their OH fields.  */
4544 
4545 static struct ppc_link_hash_entry *
4546 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4547 {
4548   struct ppc_link_hash_entry *fdh = fh->oh;
4549 
4550   if (fdh == NULL)
4551     {
4552       const char *fd_name = fh->elf.root.root.string + 1;
4553 
4554       fdh = (struct ppc_link_hash_entry *)
4555 	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
4556       if (fdh == NULL)
4557 	return fdh;
4558 
4559       fdh->is_func_descriptor = 1;
4560       fdh->oh = fh;
4561       fh->is_func = 1;
4562       fh->oh = fdh;
4563     }
4564 
4565   return ppc_follow_link (fdh);
4566 }
4567 
4568 /* Make a fake function descriptor sym for the code sym FH.  */
4569 
4570 static struct ppc_link_hash_entry *
4571 make_fdh (struct bfd_link_info *info,
4572 	  struct ppc_link_hash_entry *fh)
4573 {
4574   bfd *abfd;
4575   asymbol *newsym;
4576   struct bfd_link_hash_entry *bh;
4577   struct ppc_link_hash_entry *fdh;
4578 
4579   abfd = fh->elf.root.u.undef.abfd;
4580   newsym = bfd_make_empty_symbol (abfd);
4581   newsym->name = fh->elf.root.root.string + 1;
4582   newsym->section = bfd_und_section_ptr;
4583   newsym->value = 0;
4584   newsym->flags = BSF_WEAK;
4585 
4586   bh = NULL;
4587   if (!_bfd_generic_link_add_one_symbol (info, abfd, newsym->name,
4588 					 newsym->flags, newsym->section,
4589 					 newsym->value, NULL, FALSE, FALSE,
4590 					 &bh))
4591     return NULL;
4592 
4593   fdh = (struct ppc_link_hash_entry *) bh;
4594   fdh->elf.non_elf = 0;
4595   fdh->fake = 1;
4596   fdh->is_func_descriptor = 1;
4597   fdh->oh = fh;
4598   fh->is_func = 1;
4599   fh->oh = fdh;
4600   return fdh;
4601 }
4602 
4603 /* Fix function descriptor symbols defined in .opd sections to be
4604    function type.  */
4605 
4606 static bfd_boolean
4607 ppc64_elf_add_symbol_hook (bfd *ibfd,
4608 			   struct bfd_link_info *info,
4609 			   Elf_Internal_Sym *isym,
4610 			   const char **name ATTRIBUTE_UNUSED,
4611 			   flagword *flags ATTRIBUTE_UNUSED,
4612 			   asection **sec,
4613 			   bfd_vma *value ATTRIBUTE_UNUSED)
4614 {
4615   if ((ibfd->flags & DYNAMIC) == 0
4616       && ELF_ST_BIND (isym->st_info) == STB_GNU_UNIQUE)
4617     elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4618 
4619   if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4620     {
4621       if ((ibfd->flags & DYNAMIC) == 0)
4622 	elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4623     }
4624   else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC)
4625     ;
4626   else if (*sec != NULL
4627 	   && strcmp ((*sec)->name, ".opd") == 0)
4628     isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4629 
4630   return TRUE;
4631 }
4632 
4633 /* This function makes an old ABI object reference to ".bar" cause the
4634    inclusion of a new ABI object archive that defines "bar".
4635    NAME is a symbol defined in an archive.  Return a symbol in the hash
4636    table that might be satisfied by the archive symbols.  */
4637 
4638 static struct elf_link_hash_entry *
4639 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4640 				 struct bfd_link_info *info,
4641 				 const char *name)
4642 {
4643   struct elf_link_hash_entry *h;
4644   char *dot_name;
4645   size_t len;
4646 
4647   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4648   if (h != NULL
4649       /* Don't return this sym if it is a fake function descriptor
4650 	 created by add_symbol_adjust.  */
4651       && !(h->root.type == bfd_link_hash_undefweak
4652 	   && ((struct ppc_link_hash_entry *) h)->fake))
4653     return h;
4654 
4655   if (name[0] == '.')
4656     return h;
4657 
4658   len = strlen (name);
4659   dot_name = bfd_alloc (abfd, len + 2);
4660   if (dot_name == NULL)
4661     return (struct elf_link_hash_entry *) 0 - 1;
4662   dot_name[0] = '.';
4663   memcpy (dot_name + 1, name, len + 1);
4664   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4665   bfd_release (abfd, dot_name);
4666   return h;
4667 }
4668 
4669 /* This function satisfies all old ABI object references to ".bar" if a
4670    new ABI object defines "bar".  Well, at least, undefined dot symbols
4671    are made weak.  This stops later archive searches from including an
4672    object if we already have a function descriptor definition.  It also
4673    prevents the linker complaining about undefined symbols.
4674    We also check and correct mismatched symbol visibility here.  The
4675    most restrictive visibility of the function descriptor and the
4676    function entry symbol is used.  */
4677 
4678 static bfd_boolean
4679 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4680 {
4681   struct ppc_link_hash_table *htab;
4682   struct ppc_link_hash_entry *fdh;
4683 
4684   if (eh->elf.root.type == bfd_link_hash_indirect)
4685     return TRUE;
4686 
4687   if (eh->elf.root.type == bfd_link_hash_warning)
4688     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4689 
4690   if (eh->elf.root.root.string[0] != '.')
4691     abort ();
4692 
4693   htab = ppc_hash_table (info);
4694   if (htab == NULL)
4695     return FALSE;
4696 
4697   fdh = lookup_fdh (eh, htab);
4698   if (fdh == NULL)
4699     {
4700       if (!info->relocatable
4701 	  && (eh->elf.root.type == bfd_link_hash_undefined
4702 	      || eh->elf.root.type == bfd_link_hash_undefweak)
4703 	  && eh->elf.ref_regular)
4704 	{
4705 	  /* Make an undefweak function descriptor sym, which is enough to
4706 	     pull in an --as-needed shared lib, but won't cause link
4707 	     errors.  Archives are handled elsewhere.  */
4708 	  fdh = make_fdh (info, eh);
4709 	  if (fdh == NULL)
4710 	    return FALSE;
4711 	  fdh->elf.ref_regular = 1;
4712 	}
4713     }
4714   else
4715     {
4716       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4717       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4718       if (entry_vis < descr_vis)
4719 	fdh->elf.other += entry_vis - descr_vis;
4720       else if (entry_vis > descr_vis)
4721 	eh->elf.other += descr_vis - entry_vis;
4722 
4723       if ((fdh->elf.root.type == bfd_link_hash_defined
4724 	   || fdh->elf.root.type == bfd_link_hash_defweak)
4725 	  && eh->elf.root.type == bfd_link_hash_undefined)
4726 	{
4727 	  eh->elf.root.type = bfd_link_hash_undefweak;
4728 	  eh->was_undefined = 1;
4729 	  htab->twiddled_syms = 1;
4730 	}
4731     }
4732 
4733   return TRUE;
4734 }
4735 
4736 /* Process list of dot-symbols we made in link_hash_newfunc.  */
4737 
4738 static bfd_boolean
4739 ppc64_elf_process_dot_syms (bfd *ibfd, struct bfd_link_info *info)
4740 {
4741   struct ppc_link_hash_table *htab;
4742   struct ppc_link_hash_entry **p, *eh;
4743 
4744   if (!is_ppc64_elf (info->output_bfd))
4745     return TRUE;
4746   htab = ppc_hash_table (info);
4747   if (htab == NULL)
4748     return FALSE;
4749 
4750   if (is_ppc64_elf (ibfd))
4751     {
4752       p = &htab->dot_syms;
4753       while ((eh = *p) != NULL)
4754 	{
4755 	  *p = NULL;
4756 	  if (!add_symbol_adjust (eh, info))
4757 	    return FALSE;
4758 	  p = &eh->u.next_dot_sym;
4759 	}
4760     }
4761 
4762   /* Clear the list for non-ppc64 input files.  */
4763   p = &htab->dot_syms;
4764   while ((eh = *p) != NULL)
4765     {
4766       *p = NULL;
4767       p = &eh->u.next_dot_sym;
4768     }
4769 
4770   /* We need to fix the undefs list for any syms we have twiddled to
4771      undef_weak.  */
4772   if (htab->twiddled_syms)
4773     {
4774       bfd_link_repair_undef_list (&htab->elf.root);
4775       htab->twiddled_syms = 0;
4776     }
4777   return TRUE;
4778 }
4779 
4780 /* Undo hash table changes when an --as-needed input file is determined
4781    not to be needed.  */
4782 
4783 static bfd_boolean
4784 ppc64_elf_as_needed_cleanup (bfd *ibfd ATTRIBUTE_UNUSED,
4785 			     struct bfd_link_info *info)
4786 {
4787   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4788 
4789   if (htab == NULL)
4790     return FALSE;
4791 
4792   htab->dot_syms = NULL;
4793   return TRUE;
4794 }
4795 
4796 /* If --just-symbols against a final linked binary, then assume we need
4797    toc adjusting stubs when calling functions defined there.  */
4798 
4799 static void
4800 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4801 {
4802   if ((sec->flags & SEC_CODE) != 0
4803       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4804       && is_ppc64_elf (sec->owner))
4805     {
4806       asection *got = bfd_get_section_by_name (sec->owner, ".got");
4807       if (got != NULL
4808 	  && got->size >= elf_backend_got_header_size
4809 	  && bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4810 	sec->has_toc_reloc = 1;
4811     }
4812   _bfd_elf_link_just_syms (sec, info);
4813 }
4814 
4815 static struct plt_entry **
4816 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4817 		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4818 {
4819   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4820   struct plt_entry **local_plt;
4821   unsigned char *local_got_tls_masks;
4822 
4823   if (local_got_ents == NULL)
4824     {
4825       bfd_size_type size = symtab_hdr->sh_info;
4826 
4827       size *= (sizeof (*local_got_ents)
4828 	       + sizeof (*local_plt)
4829 	       + sizeof (*local_got_tls_masks));
4830       local_got_ents = bfd_zalloc (abfd, size);
4831       if (local_got_ents == NULL)
4832 	return NULL;
4833       elf_local_got_ents (abfd) = local_got_ents;
4834     }
4835 
4836   if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0)
4837     {
4838       struct got_entry *ent;
4839 
4840       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4841 	if (ent->addend == r_addend
4842 	    && ent->owner == abfd
4843 	    && ent->tls_type == tls_type)
4844 	  break;
4845       if (ent == NULL)
4846 	{
4847 	  bfd_size_type amt = sizeof (*ent);
4848 	  ent = bfd_alloc (abfd, amt);
4849 	  if (ent == NULL)
4850 	    return FALSE;
4851 	  ent->next = local_got_ents[r_symndx];
4852 	  ent->addend = r_addend;
4853 	  ent->owner = abfd;
4854 	  ent->tls_type = tls_type;
4855 	  ent->is_indirect = FALSE;
4856 	  ent->got.refcount = 0;
4857 	  local_got_ents[r_symndx] = ent;
4858 	}
4859       ent->got.refcount += 1;
4860     }
4861 
4862   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4863   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4864   local_got_tls_masks[r_symndx] |= tls_type;
4865 
4866   return local_plt + r_symndx;
4867 }
4868 
4869 static bfd_boolean
4870 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4871 {
4872   struct plt_entry *ent;
4873 
4874   for (ent = *plist; ent != NULL; ent = ent->next)
4875     if (ent->addend == addend)
4876       break;
4877   if (ent == NULL)
4878     {
4879       bfd_size_type amt = sizeof (*ent);
4880       ent = bfd_alloc (abfd, amt);
4881       if (ent == NULL)
4882 	return FALSE;
4883       ent->next = *plist;
4884       ent->addend = addend;
4885       ent->plt.refcount = 0;
4886       *plist = ent;
4887     }
4888   ent->plt.refcount += 1;
4889   return TRUE;
4890 }
4891 
4892 static bfd_boolean
4893 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4894 {
4895   return (r_type == R_PPC64_REL24
4896 	  || r_type == R_PPC64_REL14
4897 	  || r_type == R_PPC64_REL14_BRTAKEN
4898 	  || r_type == R_PPC64_REL14_BRNTAKEN
4899 	  || r_type == R_PPC64_ADDR24
4900 	  || r_type == R_PPC64_ADDR14
4901 	  || r_type == R_PPC64_ADDR14_BRTAKEN
4902 	  || r_type == R_PPC64_ADDR14_BRNTAKEN);
4903 }
4904 
4905 /* Look through the relocs for a section during the first phase, and
4906    calculate needed space in the global offset table, procedure
4907    linkage table, and dynamic reloc sections.  */
4908 
4909 static bfd_boolean
4910 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4911 			asection *sec, const Elf_Internal_Rela *relocs)
4912 {
4913   struct ppc_link_hash_table *htab;
4914   Elf_Internal_Shdr *symtab_hdr;
4915   struct elf_link_hash_entry **sym_hashes;
4916   const Elf_Internal_Rela *rel;
4917   const Elf_Internal_Rela *rel_end;
4918   asection *sreloc;
4919   asection **opd_sym_map;
4920   struct elf_link_hash_entry *tga, *dottga;
4921 
4922   if (info->relocatable)
4923     return TRUE;
4924 
4925   /* Don't do anything special with non-loaded, non-alloced sections.
4926      In particular, any relocs in such sections should not affect GOT
4927      and PLT reference counting (ie. we don't allow them to create GOT
4928      or PLT entries), there's no possibility or desire to optimize TLS
4929      relocs, and there's not much point in propagating relocs to shared
4930      libs that the dynamic linker won't relocate.  */
4931   if ((sec->flags & SEC_ALLOC) == 0)
4932     return TRUE;
4933 
4934   BFD_ASSERT (is_ppc64_elf (abfd));
4935 
4936   htab = ppc_hash_table (info);
4937   if (htab == NULL)
4938     return FALSE;
4939 
4940   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4941 			      FALSE, FALSE, TRUE);
4942   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4943 				 FALSE, FALSE, TRUE);
4944   symtab_hdr = &elf_symtab_hdr (abfd);
4945   sym_hashes = elf_sym_hashes (abfd);
4946   sreloc = NULL;
4947   opd_sym_map = NULL;
4948   if (strcmp (sec->name, ".opd") == 0)
4949     {
4950       /* Garbage collection needs some extra help with .opd sections.
4951 	 We don't want to necessarily keep everything referenced by
4952 	 relocs in .opd, as that would keep all functions.  Instead,
4953 	 if we reference an .opd symbol (a function descriptor), we
4954 	 want to keep the function code symbol's section.  This is
4955 	 easy for global symbols, but for local syms we need to keep
4956 	 information about the associated function section.  */
4957       bfd_size_type amt;
4958 
4959       amt = sec->size * sizeof (*opd_sym_map) / 8;
4960       opd_sym_map = bfd_zalloc (abfd, amt);
4961       if (opd_sym_map == NULL)
4962 	return FALSE;
4963       ppc64_elf_section_data (sec)->u.opd.func_sec = opd_sym_map;
4964       BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
4965       ppc64_elf_section_data (sec)->sec_type = sec_opd;
4966     }
4967 
4968   if (htab->sfpr == NULL
4969       && !create_linkage_sections (htab->elf.dynobj, info))
4970     return FALSE;
4971 
4972   rel_end = relocs + sec->reloc_count;
4973   for (rel = relocs; rel < rel_end; rel++)
4974     {
4975       unsigned long r_symndx;
4976       struct elf_link_hash_entry *h;
4977       enum elf_ppc64_reloc_type r_type;
4978       int tls_type;
4979       struct _ppc64_elf_section_data *ppc64_sec;
4980       struct plt_entry **ifunc;
4981 
4982       r_symndx = ELF64_R_SYM (rel->r_info);
4983       if (r_symndx < symtab_hdr->sh_info)
4984 	h = NULL;
4985       else
4986 	{
4987 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4988 	  h = elf_follow_link (h);
4989 	}
4990 
4991       tls_type = 0;
4992       ifunc = NULL;
4993       if (h != NULL)
4994 	{
4995 	  if (h->type == STT_GNU_IFUNC)
4996 	    {
4997 	      h->needs_plt = 1;
4998 	      ifunc = &h->plt.plist;
4999 	    }
5000 	}
5001       else
5002 	{
5003 	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5004 							  abfd, r_symndx);
5005 	  if (isym == NULL)
5006 	    return FALSE;
5007 
5008 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
5009 	    {
5010 	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
5011 					     rel->r_addend, PLT_IFUNC);
5012 	      if (ifunc == NULL)
5013 		return FALSE;
5014 	    }
5015 	}
5016       r_type = ELF64_R_TYPE (rel->r_info);
5017       if (is_branch_reloc (r_type))
5018 	{
5019 	  if (h != NULL && (h == tga || h == dottga))
5020 	    {
5021 	      if (rel != relocs
5022 		  && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
5023 		      || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
5024 		/* We have a new-style __tls_get_addr call with a marker
5025 		   reloc.  */
5026 		;
5027 	      else
5028 		/* Mark this section as having an old-style call.  */
5029 		sec->has_tls_get_addr_call = 1;
5030 	    }
5031 
5032 	  /* STT_GNU_IFUNC symbols must have a PLT entry.  */
5033 	  if (ifunc != NULL
5034 	      && !update_plt_info (abfd, ifunc, rel->r_addend))
5035 	    return FALSE;
5036 	}
5037 
5038       switch (r_type)
5039 	{
5040 	case R_PPC64_TLSGD:
5041 	case R_PPC64_TLSLD:
5042 	  /* These special tls relocs tie a call to __tls_get_addr with
5043 	     its parameter symbol.  */
5044 	  break;
5045 
5046 	case R_PPC64_GOT_TLSLD16:
5047 	case R_PPC64_GOT_TLSLD16_LO:
5048 	case R_PPC64_GOT_TLSLD16_HI:
5049 	case R_PPC64_GOT_TLSLD16_HA:
5050 	  tls_type = TLS_TLS | TLS_LD;
5051 	  goto dogottls;
5052 
5053 	case R_PPC64_GOT_TLSGD16:
5054 	case R_PPC64_GOT_TLSGD16_LO:
5055 	case R_PPC64_GOT_TLSGD16_HI:
5056 	case R_PPC64_GOT_TLSGD16_HA:
5057 	  tls_type = TLS_TLS | TLS_GD;
5058 	  goto dogottls;
5059 
5060 	case R_PPC64_GOT_TPREL16_DS:
5061 	case R_PPC64_GOT_TPREL16_LO_DS:
5062 	case R_PPC64_GOT_TPREL16_HI:
5063 	case R_PPC64_GOT_TPREL16_HA:
5064 	  if (!info->executable)
5065 	    info->flags |= DF_STATIC_TLS;
5066 	  tls_type = TLS_TLS | TLS_TPREL;
5067 	  goto dogottls;
5068 
5069 	case R_PPC64_GOT_DTPREL16_DS:
5070 	case R_PPC64_GOT_DTPREL16_LO_DS:
5071 	case R_PPC64_GOT_DTPREL16_HI:
5072 	case R_PPC64_GOT_DTPREL16_HA:
5073 	  tls_type = TLS_TLS | TLS_DTPREL;
5074 	dogottls:
5075 	  sec->has_tls_reloc = 1;
5076 	  /* Fall thru */
5077 
5078 	case R_PPC64_GOT16:
5079 	case R_PPC64_GOT16_DS:
5080 	case R_PPC64_GOT16_HA:
5081 	case R_PPC64_GOT16_HI:
5082 	case R_PPC64_GOT16_LO:
5083 	case R_PPC64_GOT16_LO_DS:
5084 	  /* This symbol requires a global offset table entry.  */
5085 	  sec->has_toc_reloc = 1;
5086 	  if (r_type == R_PPC64_GOT_TLSLD16
5087 	      || r_type == R_PPC64_GOT_TLSGD16
5088 	      || r_type == R_PPC64_GOT_TPREL16_DS
5089 	      || r_type == R_PPC64_GOT_DTPREL16_DS
5090 	      || r_type == R_PPC64_GOT16
5091 	      || r_type == R_PPC64_GOT16_DS)
5092 	    {
5093 	      htab->do_multi_toc = 1;
5094 	      ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5095 	    }
5096 
5097 	  if (ppc64_elf_tdata (abfd)->got == NULL
5098 	      && !create_got_section (abfd, info))
5099 	    return FALSE;
5100 
5101 	  if (h != NULL)
5102 	    {
5103 	      struct ppc_link_hash_entry *eh;
5104 	      struct got_entry *ent;
5105 
5106 	      eh = (struct ppc_link_hash_entry *) h;
5107 	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
5108 		if (ent->addend == rel->r_addend
5109 		    && ent->owner == abfd
5110 		    && ent->tls_type == tls_type)
5111 		  break;
5112 	      if (ent == NULL)
5113 		{
5114 		  bfd_size_type amt = sizeof (*ent);
5115 		  ent = bfd_alloc (abfd, amt);
5116 		  if (ent == NULL)
5117 		    return FALSE;
5118 		  ent->next = eh->elf.got.glist;
5119 		  ent->addend = rel->r_addend;
5120 		  ent->owner = abfd;
5121 		  ent->tls_type = tls_type;
5122 		  ent->is_indirect = FALSE;
5123 		  ent->got.refcount = 0;
5124 		  eh->elf.got.glist = ent;
5125 		}
5126 	      ent->got.refcount += 1;
5127 	      eh->tls_mask |= tls_type;
5128 	    }
5129 	  else
5130 	    /* This is a global offset table entry for a local symbol.  */
5131 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5132 					rel->r_addend, tls_type))
5133 	      return FALSE;
5134 	  break;
5135 
5136 	case R_PPC64_PLT16_HA:
5137 	case R_PPC64_PLT16_HI:
5138 	case R_PPC64_PLT16_LO:
5139 	case R_PPC64_PLT32:
5140 	case R_PPC64_PLT64:
5141 	  /* This symbol requires a procedure linkage table entry.  We
5142 	     actually build the entry in adjust_dynamic_symbol,
5143 	     because this might be a case of linking PIC code without
5144 	     linking in any dynamic objects, in which case we don't
5145 	     need to generate a procedure linkage table after all.  */
5146 	  if (h == NULL)
5147 	    {
5148 	      /* It does not make sense to have a procedure linkage
5149 		 table entry for a local symbol.  */
5150 	      bfd_set_error (bfd_error_bad_value);
5151 	      return FALSE;
5152 	    }
5153 	  else
5154 	    {
5155 	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5156 		return FALSE;
5157 	      h->needs_plt = 1;
5158 	      if (h->root.root.string[0] == '.'
5159 		  && h->root.root.string[1] != '\0')
5160 		((struct ppc_link_hash_entry *) h)->is_func = 1;
5161 	    }
5162 	  break;
5163 
5164 	  /* The following relocations don't need to propagate the
5165 	     relocation if linking a shared object since they are
5166 	     section relative.  */
5167 	case R_PPC64_SECTOFF:
5168 	case R_PPC64_SECTOFF_LO:
5169 	case R_PPC64_SECTOFF_HI:
5170 	case R_PPC64_SECTOFF_HA:
5171 	case R_PPC64_SECTOFF_DS:
5172 	case R_PPC64_SECTOFF_LO_DS:
5173 	case R_PPC64_DTPREL16:
5174 	case R_PPC64_DTPREL16_LO:
5175 	case R_PPC64_DTPREL16_HI:
5176 	case R_PPC64_DTPREL16_HA:
5177 	case R_PPC64_DTPREL16_DS:
5178 	case R_PPC64_DTPREL16_LO_DS:
5179 	case R_PPC64_DTPREL16_HIGHER:
5180 	case R_PPC64_DTPREL16_HIGHERA:
5181 	case R_PPC64_DTPREL16_HIGHEST:
5182 	case R_PPC64_DTPREL16_HIGHESTA:
5183 	  break;
5184 
5185 	  /* Nor do these.  */
5186 	case R_PPC64_REL16:
5187 	case R_PPC64_REL16_LO:
5188 	case R_PPC64_REL16_HI:
5189 	case R_PPC64_REL16_HA:
5190 	  break;
5191 
5192 	case R_PPC64_TOC16:
5193 	case R_PPC64_TOC16_DS:
5194 	  htab->do_multi_toc = 1;
5195 	  ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5196 	case R_PPC64_TOC16_LO:
5197 	case R_PPC64_TOC16_HI:
5198 	case R_PPC64_TOC16_HA:
5199 	case R_PPC64_TOC16_LO_DS:
5200 	  sec->has_toc_reloc = 1;
5201 	  break;
5202 
5203 	  /* This relocation describes the C++ object vtable hierarchy.
5204 	     Reconstruct it for later use during GC.  */
5205 	case R_PPC64_GNU_VTINHERIT:
5206 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5207 	    return FALSE;
5208 	  break;
5209 
5210 	  /* This relocation describes which C++ vtable entries are actually
5211 	     used.  Record for later use during GC.  */
5212 	case R_PPC64_GNU_VTENTRY:
5213 	  BFD_ASSERT (h != NULL);
5214 	  if (h != NULL
5215 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
5216 	    return FALSE;
5217 	  break;
5218 
5219 	case R_PPC64_REL14:
5220 	case R_PPC64_REL14_BRTAKEN:
5221 	case R_PPC64_REL14_BRNTAKEN:
5222 	  {
5223 	    asection *dest = NULL;
5224 
5225 	    /* Heuristic: If jumping outside our section, chances are
5226 	       we are going to need a stub.  */
5227 	    if (h != NULL)
5228 	      {
5229 		/* If the sym is weak it may be overridden later, so
5230 		   don't assume we know where a weak sym lives.  */
5231 		if (h->root.type == bfd_link_hash_defined)
5232 		  dest = h->root.u.def.section;
5233 	      }
5234 	    else
5235 	      {
5236 		Elf_Internal_Sym *isym;
5237 
5238 		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5239 					      abfd, r_symndx);
5240 		if (isym == NULL)
5241 		  return FALSE;
5242 
5243 		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
5244 	      }
5245 
5246 	    if (dest != sec)
5247 	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
5248 	  }
5249 	  /* Fall through.  */
5250 
5251 	case R_PPC64_REL24:
5252 	  if (h != NULL && ifunc == NULL)
5253 	    {
5254 	      /* We may need a .plt entry if the function this reloc
5255 		 refers to is in a shared lib.  */
5256 	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5257 		return FALSE;
5258 	      h->needs_plt = 1;
5259 	      if (h->root.root.string[0] == '.'
5260 		  && h->root.root.string[1] != '\0')
5261 		((struct ppc_link_hash_entry *) h)->is_func = 1;
5262 	      if (h == tga || h == dottga)
5263 		sec->has_tls_reloc = 1;
5264 	    }
5265 	  break;
5266 
5267 	case R_PPC64_TPREL64:
5268 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
5269 	  if (!info->executable)
5270 	    info->flags |= DF_STATIC_TLS;
5271 	  goto dotlstoc;
5272 
5273 	case R_PPC64_DTPMOD64:
5274 	  if (rel + 1 < rel_end
5275 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
5276 	      && rel[1].r_offset == rel->r_offset + 8)
5277 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
5278 	  else
5279 	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
5280 	  goto dotlstoc;
5281 
5282 	case R_PPC64_DTPREL64:
5283 	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
5284 	  if (rel != relocs
5285 	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
5286 	      && rel[-1].r_offset == rel->r_offset - 8)
5287 	    /* This is the second reloc of a dtpmod, dtprel pair.
5288 	       Don't mark with TLS_DTPREL.  */
5289 	    goto dodyn;
5290 
5291 	dotlstoc:
5292 	  sec->has_tls_reloc = 1;
5293 	  if (h != NULL)
5294 	    {
5295 	      struct ppc_link_hash_entry *eh;
5296 	      eh = (struct ppc_link_hash_entry *) h;
5297 	      eh->tls_mask |= tls_type;
5298 	    }
5299 	  else
5300 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5301 					rel->r_addend, tls_type))
5302 	      return FALSE;
5303 
5304 	  ppc64_sec = ppc64_elf_section_data (sec);
5305 	  if (ppc64_sec->sec_type != sec_toc)
5306 	    {
5307 	      bfd_size_type amt;
5308 
5309 	      /* One extra to simplify get_tls_mask.  */
5310 	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5311 	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5312 	      if (ppc64_sec->u.toc.symndx == NULL)
5313 		return FALSE;
5314 	      amt = sec->size * sizeof (bfd_vma) / 8;
5315 	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5316 	      if (ppc64_sec->u.toc.add == NULL)
5317 		return FALSE;
5318 	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5319 	      ppc64_sec->sec_type = sec_toc;
5320 	    }
5321 	  BFD_ASSERT (rel->r_offset % 8 == 0);
5322 	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5323 	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5324 
5325 	  /* Mark the second slot of a GD or LD entry.
5326 	     -1 to indicate GD and -2 to indicate LD.  */
5327 	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5328 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5329 	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5330 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5331 	  goto dodyn;
5332 
5333 	case R_PPC64_TPREL16:
5334 	case R_PPC64_TPREL16_LO:
5335 	case R_PPC64_TPREL16_HI:
5336 	case R_PPC64_TPREL16_HA:
5337 	case R_PPC64_TPREL16_DS:
5338 	case R_PPC64_TPREL16_LO_DS:
5339 	case R_PPC64_TPREL16_HIGHER:
5340 	case R_PPC64_TPREL16_HIGHERA:
5341 	case R_PPC64_TPREL16_HIGHEST:
5342 	case R_PPC64_TPREL16_HIGHESTA:
5343 	  if (info->shared)
5344 	    {
5345 	      if (!info->executable)
5346 		info->flags |= DF_STATIC_TLS;
5347 	      goto dodyn;
5348 	    }
5349 	  break;
5350 
5351 	case R_PPC64_ADDR64:
5352 	  if (opd_sym_map != NULL
5353 	      && rel + 1 < rel_end
5354 	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5355 	    {
5356 	      if (h != NULL)
5357 		{
5358 		  if (h->root.root.string[0] == '.'
5359 		      && h->root.root.string[1] != 0
5360 		      && lookup_fdh ((struct ppc_link_hash_entry *) h, htab))
5361 		    ;
5362 		  else
5363 		    ((struct ppc_link_hash_entry *) h)->is_func = 1;
5364 		}
5365 	      else
5366 		{
5367 		  asection *s;
5368 		  Elf_Internal_Sym *isym;
5369 
5370 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5371 						abfd, r_symndx);
5372 		  if (isym == NULL)
5373 		    return FALSE;
5374 
5375 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5376 		  if (s != NULL && s != sec)
5377 		    opd_sym_map[rel->r_offset / 8] = s;
5378 		}
5379 	    }
5380 	  /* Fall through.  */
5381 
5382 	case R_PPC64_REL30:
5383 	case R_PPC64_REL32:
5384 	case R_PPC64_REL64:
5385 	case R_PPC64_ADDR14:
5386 	case R_PPC64_ADDR14_BRNTAKEN:
5387 	case R_PPC64_ADDR14_BRTAKEN:
5388 	case R_PPC64_ADDR16:
5389 	case R_PPC64_ADDR16_DS:
5390 	case R_PPC64_ADDR16_HA:
5391 	case R_PPC64_ADDR16_HI:
5392 	case R_PPC64_ADDR16_HIGHER:
5393 	case R_PPC64_ADDR16_HIGHERA:
5394 	case R_PPC64_ADDR16_HIGHEST:
5395 	case R_PPC64_ADDR16_HIGHESTA:
5396 	case R_PPC64_ADDR16_LO:
5397 	case R_PPC64_ADDR16_LO_DS:
5398 	case R_PPC64_ADDR24:
5399 	case R_PPC64_ADDR32:
5400 	case R_PPC64_UADDR16:
5401 	case R_PPC64_UADDR32:
5402 	case R_PPC64_UADDR64:
5403 	case R_PPC64_TOC:
5404 	  if (h != NULL && !info->shared)
5405 	    /* We may need a copy reloc.  */
5406 	    h->non_got_ref = 1;
5407 
5408 	  /* Don't propagate .opd relocs.  */
5409 	  if (NO_OPD_RELOCS && opd_sym_map != NULL)
5410 	    break;
5411 
5412 	  /* If we are creating a shared library, and this is a reloc
5413 	     against a global symbol, or a non PC relative reloc
5414 	     against a local symbol, then we need to copy the reloc
5415 	     into the shared library.  However, if we are linking with
5416 	     -Bsymbolic, we do not need to copy a reloc against a
5417 	     global symbol which is defined in an object we are
5418 	     including in the link (i.e., DEF_REGULAR is set).  At
5419 	     this point we have not seen all the input files, so it is
5420 	     possible that DEF_REGULAR is not set now but will be set
5421 	     later (it is never cleared).  In case of a weak definition,
5422 	     DEF_REGULAR may be cleared later by a strong definition in
5423 	     a shared library.  We account for that possibility below by
5424 	     storing information in the dyn_relocs field of the hash
5425 	     table entry.  A similar situation occurs when creating
5426 	     shared libraries and symbol visibility changes render the
5427 	     symbol local.
5428 
5429 	     If on the other hand, we are creating an executable, we
5430 	     may need to keep relocations for symbols satisfied by a
5431 	     dynamic library if we manage to avoid copy relocs for the
5432 	     symbol.  */
5433 	dodyn:
5434 	  if ((info->shared
5435 	       && (must_be_dyn_reloc (info, r_type)
5436 		   || (h != NULL
5437 		       && (! info->symbolic
5438 			   || h->root.type == bfd_link_hash_defweak
5439 			   || !h->def_regular))))
5440 	      || (ELIMINATE_COPY_RELOCS
5441 		  && !info->shared
5442 		  && h != NULL
5443 		  && (h->root.type == bfd_link_hash_defweak
5444 		      || !h->def_regular))
5445 	      || (!info->shared
5446 		  && ifunc != NULL))
5447 	    {
5448 	      struct elf_dyn_relocs *p;
5449 	      struct elf_dyn_relocs **head;
5450 
5451 	      /* We must copy these reloc types into the output file.
5452 		 Create a reloc section in dynobj and make room for
5453 		 this reloc.  */
5454 	      if (sreloc == NULL)
5455 		{
5456 		  sreloc = _bfd_elf_make_dynamic_reloc_section
5457 		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5458 
5459 		  if (sreloc == NULL)
5460 		    return FALSE;
5461 		}
5462 
5463 	      /* If this is a global symbol, we count the number of
5464 		 relocations we need for this symbol.  */
5465 	      if (h != NULL)
5466 		{
5467 		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5468 		}
5469 	      else
5470 		{
5471 		  /* Track dynamic relocs needed for local syms too.
5472 		     We really need local syms available to do this
5473 		     easily.  Oh well.  */
5474 		  asection *s;
5475 		  void *vpp;
5476 		  Elf_Internal_Sym *isym;
5477 
5478 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5479 						abfd, r_symndx);
5480 		  if (isym == NULL)
5481 		    return FALSE;
5482 
5483 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5484 		  if (s == NULL)
5485 		    s = sec;
5486 
5487 		  vpp = &elf_section_data (s)->local_dynrel;
5488 		  head = (struct elf_dyn_relocs **) vpp;
5489 		}
5490 
5491 	      p = *head;
5492 	      if (p == NULL || p->sec != sec)
5493 		{
5494 		  p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5495 		  if (p == NULL)
5496 		    return FALSE;
5497 		  p->next = *head;
5498 		  *head = p;
5499 		  p->sec = sec;
5500 		  p->count = 0;
5501 		  p->pc_count = 0;
5502 		}
5503 
5504 	      p->count += 1;
5505 	      if (!must_be_dyn_reloc (info, r_type))
5506 		p->pc_count += 1;
5507 	    }
5508 	  break;
5509 
5510 	default:
5511 	  break;
5512 	}
5513     }
5514 
5515   return TRUE;
5516 }
5517 
5518 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5519    of the code entry point, and its section.  */
5520 
5521 static bfd_vma
5522 opd_entry_value (asection *opd_sec,
5523 		 bfd_vma offset,
5524 		 asection **code_sec,
5525 		 bfd_vma *code_off,
5526 		 bfd_boolean in_code_sec)
5527 {
5528   bfd *opd_bfd = opd_sec->owner;
5529   Elf_Internal_Rela *relocs;
5530   Elf_Internal_Rela *lo, *hi, *look;
5531   bfd_vma val;
5532 
5533   /* No relocs implies we are linking a --just-symbols object, or looking
5534      at a final linked executable with addr2line or somesuch.  */
5535   if (opd_sec->reloc_count == 0)
5536     {
5537       char buf[8];
5538 
5539       if (!bfd_get_section_contents (opd_bfd, opd_sec, buf, offset, 8))
5540 	return (bfd_vma) -1;
5541 
5542       val = bfd_get_64 (opd_bfd, buf);
5543       if (code_sec != NULL)
5544 	{
5545 	  asection *sec, *likely = NULL;
5546 
5547 	  if (in_code_sec)
5548 	    {
5549 	      sec = *code_sec;
5550 	      if (sec->vma <= val
5551 		  && val < sec->vma + sec->size)
5552 		likely = sec;
5553 	      else
5554 		val = -1;
5555 	    }
5556 	  else
5557 	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5558 	      if (sec->vma <= val
5559 		  && (sec->flags & SEC_LOAD) != 0
5560 		  && (sec->flags & SEC_ALLOC) != 0)
5561 		likely = sec;
5562 	  if (likely != NULL)
5563 	    {
5564 	      *code_sec = likely;
5565 	      if (code_off != NULL)
5566 		*code_off = val - likely->vma;
5567 	    }
5568 	}
5569       return val;
5570     }
5571 
5572   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5573 
5574   relocs = ppc64_elf_tdata (opd_bfd)->opd_relocs;
5575   if (relocs == NULL)
5576     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5577 
5578   /* Go find the opd reloc at the sym address.  */
5579   lo = relocs;
5580   BFD_ASSERT (lo != NULL);
5581   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5582   val = (bfd_vma) -1;
5583   while (lo < hi)
5584     {
5585       look = lo + (hi - lo) / 2;
5586       if (look->r_offset < offset)
5587 	lo = look + 1;
5588       else if (look->r_offset > offset)
5589 	hi = look;
5590       else
5591 	{
5592 	  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5593 
5594 	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5595 	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5596 	    {
5597 	      unsigned long symndx = ELF64_R_SYM (look->r_info);
5598 	      asection *sec;
5599 
5600 	      if (symndx < symtab_hdr->sh_info
5601 		  || elf_sym_hashes (opd_bfd) == NULL)
5602 		{
5603 		  Elf_Internal_Sym *sym;
5604 
5605 		  sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5606 		  if (sym == NULL)
5607 		    {
5608 		      size_t symcnt = symtab_hdr->sh_info;
5609 		      if (elf_sym_hashes (opd_bfd) == NULL)
5610 			symcnt = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
5611 		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, symcnt,
5612 						  0, NULL, NULL, NULL);
5613 		      if (sym == NULL)
5614 			break;
5615 		      symtab_hdr->contents = (bfd_byte *) sym;
5616 		    }
5617 
5618 		  sym += symndx;
5619 		  val = sym->st_value;
5620 		  sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5621 		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5622 		}
5623 	      else
5624 		{
5625 		  struct elf_link_hash_entry **sym_hashes;
5626 		  struct elf_link_hash_entry *rh;
5627 
5628 		  sym_hashes = elf_sym_hashes (opd_bfd);
5629 		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
5630 		  rh = elf_follow_link (rh);
5631 		  BFD_ASSERT (rh->root.type == bfd_link_hash_defined
5632 			      || rh->root.type == bfd_link_hash_defweak);
5633 		  val = rh->root.u.def.value;
5634 		  sec = rh->root.u.def.section;
5635 		}
5636 	      val += look->r_addend;
5637 	      if (code_off != NULL)
5638 		*code_off = val;
5639 	      if (code_sec != NULL)
5640 		{
5641 		  if (in_code_sec && *code_sec != sec)
5642 		    return -1;
5643 		  else
5644 		    *code_sec = sec;
5645 		}
5646 	      if (sec != NULL && sec->output_section != NULL)
5647 		val += sec->output_section->vma + sec->output_offset;
5648 	    }
5649 	  break;
5650 	}
5651     }
5652 
5653   return val;
5654 }
5655 
5656 /* If the ELF symbol SYM might be a function in SEC, return the
5657    function size and set *CODE_OFF to the function's entry point,
5658    otherwise return zero.  */
5659 
5660 static bfd_size_type
5661 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5662 			      bfd_vma *code_off)
5663 {
5664   bfd_size_type size;
5665 
5666   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5667 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5668     return 0;
5669 
5670   size = 0;
5671   if (!(sym->flags & BSF_SYNTHETIC))
5672     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5673 
5674   if (strcmp (sym->section->name, ".opd") == 0)
5675     {
5676       if (opd_entry_value (sym->section, sym->value,
5677 			   &sec, code_off, TRUE) == (bfd_vma) -1)
5678 	return 0;
5679       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5680 	 symbol.  This size has nothing to do with the code size of the
5681 	 function, which is what we're supposed to return, but the
5682 	 code size isn't available without looking up the dot-sym.
5683 	 However, doing that would be a waste of time particularly
5684 	 since elf_find_function will look at the dot-sym anyway.
5685 	 Now, elf_find_function will keep the largest size of any
5686 	 function sym found at the code address of interest, so return
5687 	 1 here to avoid it incorrectly caching a larger function size
5688 	 for a small function.  This does mean we return the wrong
5689 	 size for a new-ABI function of size 24, but all that does is
5690 	 disable caching for such functions.  */
5691       if (size == 24)
5692 	size = 1;
5693     }
5694   else
5695     {
5696       if (sym->section != sec)
5697 	return 0;
5698       *code_off = sym->value;
5699     }
5700   if (size == 0)
5701     size = 1;
5702   return size;
5703 }
5704 
5705 /* Return true if symbol is defined in a regular object file.  */
5706 
5707 static bfd_boolean
5708 is_static_defined (struct elf_link_hash_entry *h)
5709 {
5710   return ((h->root.type == bfd_link_hash_defined
5711 	   || h->root.type == bfd_link_hash_defweak)
5712 	  && h->root.u.def.section != NULL
5713 	  && h->root.u.def.section->output_section != NULL);
5714 }
5715 
5716 /* If FDH is a function descriptor symbol, return the associated code
5717    entry symbol if it is defined.  Return NULL otherwise.  */
5718 
5719 static struct ppc_link_hash_entry *
5720 defined_code_entry (struct ppc_link_hash_entry *fdh)
5721 {
5722   if (fdh->is_func_descriptor)
5723     {
5724       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5725       if (fh->elf.root.type == bfd_link_hash_defined
5726 	  || fh->elf.root.type == bfd_link_hash_defweak)
5727 	return fh;
5728     }
5729   return NULL;
5730 }
5731 
5732 /* If FH is a function code entry symbol, return the associated
5733    function descriptor symbol if it is defined.  Return NULL otherwise.  */
5734 
5735 static struct ppc_link_hash_entry *
5736 defined_func_desc (struct ppc_link_hash_entry *fh)
5737 {
5738   if (fh->oh != NULL
5739       && fh->oh->is_func_descriptor)
5740     {
5741       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5742       if (fdh->elf.root.type == bfd_link_hash_defined
5743 	  || fdh->elf.root.type == bfd_link_hash_defweak)
5744 	return fdh;
5745     }
5746   return NULL;
5747 }
5748 
5749 /* Mark all our entry sym sections, both opd and code section.  */
5750 
5751 static void
5752 ppc64_elf_gc_keep (struct bfd_link_info *info)
5753 {
5754   struct ppc_link_hash_table *htab = ppc_hash_table (info);
5755   struct bfd_sym_chain *sym;
5756 
5757   if (htab == NULL)
5758     return;
5759 
5760   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5761     {
5762       struct ppc_link_hash_entry *eh, *fh;
5763       asection *sec;
5764 
5765       eh = (struct ppc_link_hash_entry *)
5766 	elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
5767       if (eh == NULL)
5768 	continue;
5769       if (eh->elf.root.type != bfd_link_hash_defined
5770 	  && eh->elf.root.type != bfd_link_hash_defweak)
5771 	continue;
5772 
5773       fh = defined_code_entry (eh);
5774       if (fh != NULL)
5775 	{
5776 	  sec = fh->elf.root.u.def.section;
5777 	  sec->flags |= SEC_KEEP;
5778 	}
5779       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5780 	       && opd_entry_value (eh->elf.root.u.def.section,
5781 				   eh->elf.root.u.def.value,
5782 				   &sec, NULL, FALSE) != (bfd_vma) -1)
5783 	sec->flags |= SEC_KEEP;
5784 
5785       sec = eh->elf.root.u.def.section;
5786       sec->flags |= SEC_KEEP;
5787     }
5788 }
5789 
5790 /* Mark sections containing dynamically referenced symbols.  When
5791    building shared libraries, we must assume that any visible symbol is
5792    referenced.  */
5793 
5794 static bfd_boolean
5795 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5796 {
5797   struct bfd_link_info *info = (struct bfd_link_info *) inf;
5798   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
5799   struct ppc_link_hash_entry *fdh;
5800 
5801   /* Dynamic linking info is on the func descriptor sym.  */
5802   fdh = defined_func_desc (eh);
5803   if (fdh != NULL)
5804     eh = fdh;
5805 
5806   if ((eh->elf.root.type == bfd_link_hash_defined
5807        || eh->elf.root.type == bfd_link_hash_defweak)
5808       && (eh->elf.ref_dynamic
5809 	  || (!info->executable
5810 	      && eh->elf.def_regular
5811 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5812 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5813 	      && (strchr (eh->elf.root.root.string, ELF_VER_CHR) != NULL
5814 		  || !bfd_hide_sym_by_version (info->version_info,
5815 					       eh->elf.root.root.string)))))
5816     {
5817       asection *code_sec;
5818       struct ppc_link_hash_entry *fh;
5819 
5820       eh->elf.root.u.def.section->flags |= SEC_KEEP;
5821 
5822       /* Function descriptor syms cause the associated
5823 	 function code sym section to be marked.  */
5824       fh = defined_code_entry (eh);
5825       if (fh != NULL)
5826 	{
5827 	  code_sec = fh->elf.root.u.def.section;
5828 	  code_sec->flags |= SEC_KEEP;
5829 	}
5830       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5831 	       && opd_entry_value (eh->elf.root.u.def.section,
5832 				   eh->elf.root.u.def.value,
5833 				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
5834 	code_sec->flags |= SEC_KEEP;
5835     }
5836 
5837   return TRUE;
5838 }
5839 
5840 /* Return the section that should be marked against GC for a given
5841    relocation.  */
5842 
5843 static asection *
5844 ppc64_elf_gc_mark_hook (asection *sec,
5845 			struct bfd_link_info *info,
5846 			Elf_Internal_Rela *rel,
5847 			struct elf_link_hash_entry *h,
5848 			Elf_Internal_Sym *sym)
5849 {
5850   asection *rsec;
5851 
5852   /* Syms return NULL if we're marking .opd, so we avoid marking all
5853      function sections, as all functions are referenced in .opd.  */
5854   rsec = NULL;
5855   if (get_opd_info (sec) != NULL)
5856     return rsec;
5857 
5858   if (h != NULL)
5859     {
5860       enum elf_ppc64_reloc_type r_type;
5861       struct ppc_link_hash_entry *eh, *fh, *fdh;
5862 
5863       r_type = ELF64_R_TYPE (rel->r_info);
5864       switch (r_type)
5865 	{
5866 	case R_PPC64_GNU_VTINHERIT:
5867 	case R_PPC64_GNU_VTENTRY:
5868 	  break;
5869 
5870 	default:
5871 	  switch (h->root.type)
5872 	    {
5873 	    case bfd_link_hash_defined:
5874 	    case bfd_link_hash_defweak:
5875 	      eh = (struct ppc_link_hash_entry *) h;
5876 	      fdh = defined_func_desc (eh);
5877 	      if (fdh != NULL)
5878 		eh = fdh;
5879 
5880 	      /* Function descriptor syms cause the associated
5881 		 function code sym section to be marked.  */
5882 	      fh = defined_code_entry (eh);
5883 	      if (fh != NULL)
5884 		{
5885 		  /* They also mark their opd section.  */
5886 		  eh->elf.root.u.def.section->gc_mark = 1;
5887 
5888 		  rsec = fh->elf.root.u.def.section;
5889 		}
5890 	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5891 		       && opd_entry_value (eh->elf.root.u.def.section,
5892 					   eh->elf.root.u.def.value,
5893 					   &rsec, NULL, FALSE) != (bfd_vma) -1)
5894 		eh->elf.root.u.def.section->gc_mark = 1;
5895 	      else
5896 		rsec = h->root.u.def.section;
5897 	      break;
5898 
5899 	    case bfd_link_hash_common:
5900 	      rsec = h->root.u.c.p->section;
5901 	      break;
5902 
5903 	    default:
5904 	      return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5905 	    }
5906 	}
5907     }
5908   else
5909     {
5910       struct _opd_sec_data *opd;
5911 
5912       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5913       opd = get_opd_info (rsec);
5914       if (opd != NULL && opd->func_sec != NULL)
5915 	{
5916 	  rsec->gc_mark = 1;
5917 
5918 	  rsec = opd->func_sec[(sym->st_value + rel->r_addend) / 8];
5919 	}
5920     }
5921 
5922   return rsec;
5923 }
5924 
5925 /* Update the .got, .plt. and dynamic reloc reference counts for the
5926    section being removed.  */
5927 
5928 static bfd_boolean
5929 ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
5930 			 asection *sec, const Elf_Internal_Rela *relocs)
5931 {
5932   struct ppc_link_hash_table *htab;
5933   Elf_Internal_Shdr *symtab_hdr;
5934   struct elf_link_hash_entry **sym_hashes;
5935   struct got_entry **local_got_ents;
5936   const Elf_Internal_Rela *rel, *relend;
5937 
5938   if (info->relocatable)
5939     return TRUE;
5940 
5941   if ((sec->flags & SEC_ALLOC) == 0)
5942     return TRUE;
5943 
5944   elf_section_data (sec)->local_dynrel = NULL;
5945 
5946   htab = ppc_hash_table (info);
5947   if (htab == NULL)
5948     return FALSE;
5949 
5950   symtab_hdr = &elf_symtab_hdr (abfd);
5951   sym_hashes = elf_sym_hashes (abfd);
5952   local_got_ents = elf_local_got_ents (abfd);
5953 
5954   relend = relocs + sec->reloc_count;
5955   for (rel = relocs; rel < relend; rel++)
5956     {
5957       unsigned long r_symndx;
5958       enum elf_ppc64_reloc_type r_type;
5959       struct elf_link_hash_entry *h = NULL;
5960       unsigned char tls_type = 0;
5961 
5962       r_symndx = ELF64_R_SYM (rel->r_info);
5963       r_type = ELF64_R_TYPE (rel->r_info);
5964       if (r_symndx >= symtab_hdr->sh_info)
5965 	{
5966 	  struct ppc_link_hash_entry *eh;
5967 	  struct elf_dyn_relocs **pp;
5968 	  struct elf_dyn_relocs *p;
5969 
5970 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5971 	  h = elf_follow_link (h);
5972 	  eh = (struct ppc_link_hash_entry *) h;
5973 
5974 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
5975 	    if (p->sec == sec)
5976 	      {
5977 		/* Everything must go for SEC.  */
5978 		*pp = p->next;
5979 		break;
5980 	      }
5981 	}
5982 
5983       if (is_branch_reloc (r_type))
5984 	{
5985 	  struct plt_entry **ifunc = NULL;
5986 	  if (h != NULL)
5987 	    {
5988 	      if (h->type == STT_GNU_IFUNC)
5989 		ifunc = &h->plt.plist;
5990 	    }
5991 	  else if (local_got_ents != NULL)
5992 	    {
5993 	      struct plt_entry **local_plt = (struct plt_entry **)
5994 		(local_got_ents + symtab_hdr->sh_info);
5995 	      unsigned char *local_got_tls_masks = (unsigned char *)
5996 		(local_plt + symtab_hdr->sh_info);
5997 	      if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0)
5998 		ifunc = local_plt + r_symndx;
5999 	    }
6000 	  if (ifunc != NULL)
6001 	    {
6002 	      struct plt_entry *ent;
6003 
6004 	      for (ent = *ifunc; ent != NULL; ent = ent->next)
6005 		if (ent->addend == rel->r_addend)
6006 		  break;
6007 	      if (ent == NULL)
6008 		abort ();
6009 	      if (ent->plt.refcount > 0)
6010 		ent->plt.refcount -= 1;
6011 	      continue;
6012 	    }
6013 	}
6014 
6015       switch (r_type)
6016 	{
6017 	case R_PPC64_GOT_TLSLD16:
6018 	case R_PPC64_GOT_TLSLD16_LO:
6019 	case R_PPC64_GOT_TLSLD16_HI:
6020 	case R_PPC64_GOT_TLSLD16_HA:
6021 	  tls_type = TLS_TLS | TLS_LD;
6022 	  goto dogot;
6023 
6024 	case R_PPC64_GOT_TLSGD16:
6025 	case R_PPC64_GOT_TLSGD16_LO:
6026 	case R_PPC64_GOT_TLSGD16_HI:
6027 	case R_PPC64_GOT_TLSGD16_HA:
6028 	  tls_type = TLS_TLS | TLS_GD;
6029 	  goto dogot;
6030 
6031 	case R_PPC64_GOT_TPREL16_DS:
6032 	case R_PPC64_GOT_TPREL16_LO_DS:
6033 	case R_PPC64_GOT_TPREL16_HI:
6034 	case R_PPC64_GOT_TPREL16_HA:
6035 	  tls_type = TLS_TLS | TLS_TPREL;
6036 	  goto dogot;
6037 
6038 	case R_PPC64_GOT_DTPREL16_DS:
6039 	case R_PPC64_GOT_DTPREL16_LO_DS:
6040 	case R_PPC64_GOT_DTPREL16_HI:
6041 	case R_PPC64_GOT_DTPREL16_HA:
6042 	  tls_type = TLS_TLS | TLS_DTPREL;
6043 	  goto dogot;
6044 
6045 	case R_PPC64_GOT16:
6046 	case R_PPC64_GOT16_DS:
6047 	case R_PPC64_GOT16_HA:
6048 	case R_PPC64_GOT16_HI:
6049 	case R_PPC64_GOT16_LO:
6050 	case R_PPC64_GOT16_LO_DS:
6051 	dogot:
6052 	  {
6053 	    struct got_entry *ent;
6054 
6055 	    if (h != NULL)
6056 	      ent = h->got.glist;
6057 	    else
6058 	      ent = local_got_ents[r_symndx];
6059 
6060 	    for (; ent != NULL; ent = ent->next)
6061 	      if (ent->addend == rel->r_addend
6062 		  && ent->owner == abfd
6063 		  && ent->tls_type == tls_type)
6064 		break;
6065 	    if (ent == NULL)
6066 	      abort ();
6067 	    if (ent->got.refcount > 0)
6068 	      ent->got.refcount -= 1;
6069 	  }
6070 	  break;
6071 
6072 	case R_PPC64_PLT16_HA:
6073 	case R_PPC64_PLT16_HI:
6074 	case R_PPC64_PLT16_LO:
6075 	case R_PPC64_PLT32:
6076 	case R_PPC64_PLT64:
6077 	case R_PPC64_REL14:
6078 	case R_PPC64_REL14_BRNTAKEN:
6079 	case R_PPC64_REL14_BRTAKEN:
6080 	case R_PPC64_REL24:
6081 	  if (h != NULL)
6082 	    {
6083 	      struct plt_entry *ent;
6084 
6085 	      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6086 		if (ent->addend == rel->r_addend)
6087 		  break;
6088 	      if (ent != NULL && ent->plt.refcount > 0)
6089 		ent->plt.refcount -= 1;
6090 	    }
6091 	  break;
6092 
6093 	default:
6094 	  break;
6095 	}
6096     }
6097   return TRUE;
6098 }
6099 
6100 /* The maximum size of .sfpr.  */
6101 #define SFPR_MAX (218*4)
6102 
6103 struct sfpr_def_parms
6104 {
6105   const char name[12];
6106   unsigned char lo, hi;
6107   bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
6108   bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
6109 };
6110 
6111 /* Auto-generate _save*, _rest* functions in .sfpr.  */
6112 
6113 static bfd_boolean
6114 sfpr_define (struct bfd_link_info *info, const struct sfpr_def_parms *parm)
6115 {
6116   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6117   unsigned int i;
6118   size_t len = strlen (parm->name);
6119   bfd_boolean writing = FALSE;
6120   char sym[16];
6121 
6122   if (htab == NULL)
6123     return FALSE;
6124 
6125   memcpy (sym, parm->name, len);
6126   sym[len + 2] = 0;
6127 
6128   for (i = parm->lo; i <= parm->hi; i++)
6129     {
6130       struct elf_link_hash_entry *h;
6131 
6132       sym[len + 0] = i / 10 + '0';
6133       sym[len + 1] = i % 10 + '0';
6134       h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
6135       if (h != NULL
6136 	  && !h->def_regular)
6137 	{
6138 	  h->root.type = bfd_link_hash_defined;
6139 	  h->root.u.def.section = htab->sfpr;
6140 	  h->root.u.def.value = htab->sfpr->size;
6141 	  h->type = STT_FUNC;
6142 	  h->def_regular = 1;
6143 	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
6144 	  writing = TRUE;
6145 	  if (htab->sfpr->contents == NULL)
6146 	    {
6147 	      htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
6148 	      if (htab->sfpr->contents == NULL)
6149 		return FALSE;
6150 	    }
6151 	}
6152       if (writing)
6153 	{
6154 	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
6155 	  if (i != parm->hi)
6156 	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
6157 	  else
6158 	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
6159 	  htab->sfpr->size = p - htab->sfpr->contents;
6160 	}
6161     }
6162 
6163   return TRUE;
6164 }
6165 
6166 static bfd_byte *
6167 savegpr0 (bfd *abfd, bfd_byte *p, int r)
6168 {
6169   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6170   return p + 4;
6171 }
6172 
6173 static bfd_byte *
6174 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
6175 {
6176   p = savegpr0 (abfd, p, r);
6177   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6178   p = p + 4;
6179   bfd_put_32 (abfd, BLR, p);
6180   return p + 4;
6181 }
6182 
6183 static bfd_byte *
6184 restgpr0 (bfd *abfd, bfd_byte *p, int r)
6185 {
6186   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6187   return p + 4;
6188 }
6189 
6190 static bfd_byte *
6191 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
6192 {
6193   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6194   p = p + 4;
6195   p = restgpr0 (abfd, p, r);
6196   bfd_put_32 (abfd, MTLR_R0, p);
6197   p = p + 4;
6198   if (r == 29)
6199     {
6200       p = restgpr0 (abfd, p, 30);
6201       p = restgpr0 (abfd, p, 31);
6202     }
6203   bfd_put_32 (abfd, BLR, p);
6204   return p + 4;
6205 }
6206 
6207 static bfd_byte *
6208 savegpr1 (bfd *abfd, bfd_byte *p, int r)
6209 {
6210   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6211   return p + 4;
6212 }
6213 
6214 static bfd_byte *
6215 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
6216 {
6217   p = savegpr1 (abfd, p, r);
6218   bfd_put_32 (abfd, BLR, p);
6219   return p + 4;
6220 }
6221 
6222 static bfd_byte *
6223 restgpr1 (bfd *abfd, bfd_byte *p, int r)
6224 {
6225   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6226   return p + 4;
6227 }
6228 
6229 static bfd_byte *
6230 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
6231 {
6232   p = restgpr1 (abfd, p, r);
6233   bfd_put_32 (abfd, BLR, p);
6234   return p + 4;
6235 }
6236 
6237 static bfd_byte *
6238 savefpr (bfd *abfd, bfd_byte *p, int r)
6239 {
6240   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6241   return p + 4;
6242 }
6243 
6244 static bfd_byte *
6245 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6246 {
6247   p = savefpr (abfd, p, r);
6248   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6249   p = p + 4;
6250   bfd_put_32 (abfd, BLR, p);
6251   return p + 4;
6252 }
6253 
6254 static bfd_byte *
6255 restfpr (bfd *abfd, bfd_byte *p, int r)
6256 {
6257   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6258   return p + 4;
6259 }
6260 
6261 static bfd_byte *
6262 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6263 {
6264   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6265   p = p + 4;
6266   p = restfpr (abfd, p, r);
6267   bfd_put_32 (abfd, MTLR_R0, p);
6268   p = p + 4;
6269   if (r == 29)
6270     {
6271       p = restfpr (abfd, p, 30);
6272       p = restfpr (abfd, p, 31);
6273     }
6274   bfd_put_32 (abfd, BLR, p);
6275   return p + 4;
6276 }
6277 
6278 static bfd_byte *
6279 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6280 {
6281   p = savefpr (abfd, p, r);
6282   bfd_put_32 (abfd, BLR, p);
6283   return p + 4;
6284 }
6285 
6286 static bfd_byte *
6287 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6288 {
6289   p = restfpr (abfd, p, r);
6290   bfd_put_32 (abfd, BLR, p);
6291   return p + 4;
6292 }
6293 
6294 static bfd_byte *
6295 savevr (bfd *abfd, bfd_byte *p, int r)
6296 {
6297   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6298   p = p + 4;
6299   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6300   return p + 4;
6301 }
6302 
6303 static bfd_byte *
6304 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6305 {
6306   p = savevr (abfd, p, r);
6307   bfd_put_32 (abfd, BLR, p);
6308   return p + 4;
6309 }
6310 
6311 static bfd_byte *
6312 restvr (bfd *abfd, bfd_byte *p, int r)
6313 {
6314   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6315   p = p + 4;
6316   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6317   return p + 4;
6318 }
6319 
6320 static bfd_byte *
6321 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6322 {
6323   p = restvr (abfd, p, r);
6324   bfd_put_32 (abfd, BLR, p);
6325   return p + 4;
6326 }
6327 
6328 /* Called via elf_link_hash_traverse to transfer dynamic linking
6329    information on function code symbol entries to their corresponding
6330    function descriptor symbol entries.  */
6331 
6332 static bfd_boolean
6333 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6334 {
6335   struct bfd_link_info *info;
6336   struct ppc_link_hash_table *htab;
6337   struct plt_entry *ent;
6338   struct ppc_link_hash_entry *fh;
6339   struct ppc_link_hash_entry *fdh;
6340   bfd_boolean force_local;
6341 
6342   fh = (struct ppc_link_hash_entry *) h;
6343   if (fh->elf.root.type == bfd_link_hash_indirect)
6344     return TRUE;
6345 
6346   info = inf;
6347   htab = ppc_hash_table (info);
6348   if (htab == NULL)
6349     return FALSE;
6350 
6351   /* Resolve undefined references to dot-symbols as the value
6352      in the function descriptor, if we have one in a regular object.
6353      This is to satisfy cases like ".quad .foo".  Calls to functions
6354      in dynamic objects are handled elsewhere.  */
6355   if (fh->elf.root.type == bfd_link_hash_undefweak
6356       && fh->was_undefined
6357       && (fdh = defined_func_desc (fh)) != NULL
6358       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6359       && opd_entry_value (fdh->elf.root.u.def.section,
6360 			  fdh->elf.root.u.def.value,
6361 			  &fh->elf.root.u.def.section,
6362 			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6363     {
6364       fh->elf.root.type = fdh->elf.root.type;
6365       fh->elf.forced_local = 1;
6366       fh->elf.def_regular = fdh->elf.def_regular;
6367       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6368     }
6369 
6370   /* If this is a function code symbol, transfer dynamic linking
6371      information to the function descriptor symbol.  */
6372   if (!fh->is_func)
6373     return TRUE;
6374 
6375   for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6376     if (ent->plt.refcount > 0)
6377       break;
6378   if (ent == NULL
6379       || fh->elf.root.root.string[0] != '.'
6380       || fh->elf.root.root.string[1] == '\0')
6381     return TRUE;
6382 
6383   /* Find the corresponding function descriptor symbol.  Create it
6384      as undefined if necessary.  */
6385 
6386   fdh = lookup_fdh (fh, htab);
6387   if (fdh == NULL
6388       && !info->executable
6389       && (fh->elf.root.type == bfd_link_hash_undefined
6390 	  || fh->elf.root.type == bfd_link_hash_undefweak))
6391     {
6392       fdh = make_fdh (info, fh);
6393       if (fdh == NULL)
6394 	return FALSE;
6395     }
6396 
6397   /* Fake function descriptors are made undefweak.  If the function
6398      code symbol is strong undefined, make the fake sym the same.
6399      If the function code symbol is defined, then force the fake
6400      descriptor local;  We can't support overriding of symbols in a
6401      shared library on a fake descriptor.  */
6402 
6403   if (fdh != NULL
6404       && fdh->fake
6405       && fdh->elf.root.type == bfd_link_hash_undefweak)
6406     {
6407       if (fh->elf.root.type == bfd_link_hash_undefined)
6408 	{
6409 	  fdh->elf.root.type = bfd_link_hash_undefined;
6410 	  bfd_link_add_undef (&htab->elf.root, &fdh->elf.root);
6411 	}
6412       else if (fh->elf.root.type == bfd_link_hash_defined
6413 	       || fh->elf.root.type == bfd_link_hash_defweak)
6414 	{
6415 	  _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6416 	}
6417     }
6418 
6419   if (fdh != NULL
6420       && !fdh->elf.forced_local
6421       && (!info->executable
6422 	  || fdh->elf.def_dynamic
6423 	  || fdh->elf.ref_dynamic
6424 	  || (fdh->elf.root.type == bfd_link_hash_undefweak
6425 	      && ELF_ST_VISIBILITY (fdh->elf.other) == STV_DEFAULT)))
6426     {
6427       if (fdh->elf.dynindx == -1)
6428 	if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6429 	  return FALSE;
6430       fdh->elf.ref_regular |= fh->elf.ref_regular;
6431       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6432       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6433       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6434       if (ELF_ST_VISIBILITY (fh->elf.other) == STV_DEFAULT)
6435 	{
6436 	  move_plt_plist (fh, fdh);
6437 	  fdh->elf.needs_plt = 1;
6438 	}
6439       fdh->is_func_descriptor = 1;
6440       fdh->oh = fh;
6441       fh->oh = fdh;
6442     }
6443 
6444   /* Now that the info is on the function descriptor, clear the
6445      function code sym info.  Any function code syms for which we
6446      don't have a definition in a regular file, we force local.
6447      This prevents a shared library from exporting syms that have
6448      been imported from another library.  Function code syms that
6449      are really in the library we must leave global to prevent the
6450      linker dragging in a definition from a static library.  */
6451   force_local = (!fh->elf.def_regular
6452 		 || fdh == NULL
6453 		 || !fdh->elf.def_regular
6454 		 || fdh->elf.forced_local);
6455   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6456 
6457   return TRUE;
6458 }
6459 
6460 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6461    this hook to a) provide some gcc support functions, and b) transfer
6462    dynamic linking information gathered so far on function code symbol
6463    entries, to their corresponding function descriptor symbol entries.  */
6464 
6465 static bfd_boolean
6466 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6467 			    struct bfd_link_info *info)
6468 {
6469   struct ppc_link_hash_table *htab;
6470   unsigned int i;
6471   static const struct sfpr_def_parms funcs[] =
6472     {
6473       { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6474       { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6475       { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6476       { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6477       { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6478       { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6479       { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6480       { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6481       { "._savef", 14, 31, savefpr, savefpr1_tail },
6482       { "._restf", 14, 31, restfpr, restfpr1_tail },
6483       { "_savevr_", 20, 31, savevr, savevr_tail },
6484       { "_restvr_", 20, 31, restvr, restvr_tail }
6485     };
6486 
6487   htab = ppc_hash_table (info);
6488   if (htab == NULL)
6489     return FALSE;
6490 
6491   if (htab->sfpr == NULL)
6492     /* We don't have any relocs.  */
6493     return TRUE;
6494 
6495   /* Provide any missing _save* and _rest* functions.  */
6496   htab->sfpr->size = 0;
6497   if (!info->relocatable)
6498     for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
6499       if (!sfpr_define (info, &funcs[i]))
6500 	return FALSE;
6501 
6502   elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6503 
6504   if (htab->sfpr->size == 0)
6505     htab->sfpr->flags |= SEC_EXCLUDE;
6506 
6507   return TRUE;
6508 }
6509 
6510 /* Adjust a symbol defined by a dynamic object and referenced by a
6511    regular object.  The current definition is in some section of the
6512    dynamic object, but we're not including those sections.  We have to
6513    change the definition to something the rest of the link can
6514    understand.  */
6515 
6516 static bfd_boolean
6517 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6518 				 struct elf_link_hash_entry *h)
6519 {
6520   struct ppc_link_hash_table *htab;
6521   asection *s;
6522 
6523   htab = ppc_hash_table (info);
6524   if (htab == NULL)
6525     return FALSE;
6526 
6527   /* Deal with function syms.  */
6528   if (h->type == STT_FUNC
6529       || h->type == STT_GNU_IFUNC
6530       || h->needs_plt)
6531     {
6532       /* Clear procedure linkage table information for any symbol that
6533 	 won't need a .plt entry.  */
6534       struct plt_entry *ent;
6535       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6536 	if (ent->plt.refcount > 0)
6537 	  break;
6538       if (ent == NULL
6539 	  || (h->type != STT_GNU_IFUNC
6540 	      && (SYMBOL_CALLS_LOCAL (info, h)
6541 		  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
6542 		      && h->root.type == bfd_link_hash_undefweak))))
6543 	{
6544 	  h->plt.plist = NULL;
6545 	  h->needs_plt = 0;
6546 	}
6547     }
6548   else
6549     h->plt.plist = NULL;
6550 
6551   /* If this is a weak symbol, and there is a real definition, the
6552      processor independent code will have arranged for us to see the
6553      real definition first, and we can just use the same value.  */
6554   if (h->u.weakdef != NULL)
6555     {
6556       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
6557 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
6558       h->root.u.def.section = h->u.weakdef->root.u.def.section;
6559       h->root.u.def.value = h->u.weakdef->root.u.def.value;
6560       if (ELIMINATE_COPY_RELOCS)
6561 	h->non_got_ref = h->u.weakdef->non_got_ref;
6562       return TRUE;
6563     }
6564 
6565   /* If we are creating a shared library, we must presume that the
6566      only references to the symbol are via the global offset table.
6567      For such cases we need not do anything here; the relocations will
6568      be handled correctly by relocate_section.  */
6569   if (info->shared)
6570     return TRUE;
6571 
6572   /* If there are no references to this symbol that do not use the
6573      GOT, we don't need to generate a copy reloc.  */
6574   if (!h->non_got_ref)
6575     return TRUE;
6576 
6577   /* Don't generate a copy reloc for symbols defined in the executable.  */
6578   if (!h->def_dynamic || !h->ref_regular || h->def_regular)
6579     return TRUE;
6580 
6581   if (ELIMINATE_COPY_RELOCS)
6582     {
6583       struct ppc_link_hash_entry * eh;
6584       struct elf_dyn_relocs *p;
6585 
6586       eh = (struct ppc_link_hash_entry *) h;
6587       for (p = eh->dyn_relocs; p != NULL; p = p->next)
6588 	{
6589 	  s = p->sec->output_section;
6590 	  if (s != NULL && (s->flags & SEC_READONLY) != 0)
6591 	    break;
6592 	}
6593 
6594       /* If we didn't find any dynamic relocs in read-only sections, then
6595 	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6596       if (p == NULL)
6597 	{
6598 	  h->non_got_ref = 0;
6599 	  return TRUE;
6600 	}
6601     }
6602 
6603   if (h->plt.plist != NULL)
6604     {
6605       /* We should never get here, but unfortunately there are versions
6606 	 of gcc out there that improperly (for this ABI) put initialized
6607 	 function pointers, vtable refs and suchlike in read-only
6608 	 sections.  Allow them to proceed, but warn that this might
6609 	 break at runtime.  */
6610       info->callbacks->einfo
6611 	(_("%P: copy reloc against `%T' requires lazy plt linking; "
6612 	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6613 	 h->root.root.string);
6614     }
6615 
6616   /* This is a reference to a symbol defined by a dynamic object which
6617      is not a function.  */
6618 
6619   /* We must allocate the symbol in our .dynbss section, which will
6620      become part of the .bss section of the executable.  There will be
6621      an entry for this symbol in the .dynsym section.  The dynamic
6622      object will contain position independent code, so all references
6623      from the dynamic object to this symbol will go through the global
6624      offset table.  The dynamic linker will use the .dynsym entry to
6625      determine the address it must put in the global offset table, so
6626      both the dynamic object and the regular object will refer to the
6627      same memory location for the variable.  */
6628 
6629   /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
6630      to copy the initial value out of the dynamic object and into the
6631      runtime process image.  We need to remember the offset into the
6632      .rela.bss section we are going to use.  */
6633   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6634     {
6635       htab->relbss->size += sizeof (Elf64_External_Rela);
6636       h->needs_copy = 1;
6637     }
6638 
6639   s = htab->dynbss;
6640 
6641   return _bfd_elf_adjust_dynamic_copy (h, s);
6642 }
6643 
6644 /* If given a function descriptor symbol, hide both the function code
6645    sym and the descriptor.  */
6646 static void
6647 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6648 		       struct elf_link_hash_entry *h,
6649 		       bfd_boolean force_local)
6650 {
6651   struct ppc_link_hash_entry *eh;
6652   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6653 
6654   eh = (struct ppc_link_hash_entry *) h;
6655   if (eh->is_func_descriptor)
6656     {
6657       struct ppc_link_hash_entry *fh = eh->oh;
6658 
6659       if (fh == NULL)
6660 	{
6661 	  const char *p, *q;
6662 	  struct ppc_link_hash_table *htab;
6663 	  char save;
6664 
6665 	  /* We aren't supposed to use alloca in BFD because on
6666 	     systems which do not have alloca the version in libiberty
6667 	     calls xmalloc, which might cause the program to crash
6668 	     when it runs out of memory.  This function doesn't have a
6669 	     return status, so there's no way to gracefully return an
6670 	     error.  So cheat.  We know that string[-1] can be safely
6671 	     accessed;  It's either a string in an ELF string table,
6672 	     or allocated in an objalloc structure.  */
6673 
6674 	  p = eh->elf.root.root.string - 1;
6675 	  save = *p;
6676 	  *(char *) p = '.';
6677 	  htab = ppc_hash_table (info);
6678 	  if (htab == NULL)
6679 	    return;
6680 
6681 	  fh = (struct ppc_link_hash_entry *)
6682 	    elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6683 	  *(char *) p = save;
6684 
6685 	  /* Unfortunately, if it so happens that the string we were
6686 	     looking for was allocated immediately before this string,
6687 	     then we overwrote the string terminator.  That's the only
6688 	     reason the lookup should fail.  */
6689 	  if (fh == NULL)
6690 	    {
6691 	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6692 	      while (q >= eh->elf.root.root.string && *q == *p)
6693 		--q, --p;
6694 	      if (q < eh->elf.root.root.string && *p == '.')
6695 		fh = (struct ppc_link_hash_entry *)
6696 		  elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6697 	    }
6698 	  if (fh != NULL)
6699 	    {
6700 	      eh->oh = fh;
6701 	      fh->oh = eh;
6702 	    }
6703 	}
6704       if (fh != NULL)
6705 	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6706     }
6707 }
6708 
6709 static bfd_boolean
6710 get_sym_h (struct elf_link_hash_entry **hp,
6711 	   Elf_Internal_Sym **symp,
6712 	   asection **symsecp,
6713 	   unsigned char **tls_maskp,
6714 	   Elf_Internal_Sym **locsymsp,
6715 	   unsigned long r_symndx,
6716 	   bfd *ibfd)
6717 {
6718   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6719 
6720   if (r_symndx >= symtab_hdr->sh_info)
6721     {
6722       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6723       struct elf_link_hash_entry *h;
6724 
6725       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6726       h = elf_follow_link (h);
6727 
6728       if (hp != NULL)
6729 	*hp = h;
6730 
6731       if (symp != NULL)
6732 	*symp = NULL;
6733 
6734       if (symsecp != NULL)
6735 	{
6736 	  asection *symsec = NULL;
6737 	  if (h->root.type == bfd_link_hash_defined
6738 	      || h->root.type == bfd_link_hash_defweak)
6739 	    symsec = h->root.u.def.section;
6740 	  *symsecp = symsec;
6741 	}
6742 
6743       if (tls_maskp != NULL)
6744 	{
6745 	  struct ppc_link_hash_entry *eh;
6746 
6747 	  eh = (struct ppc_link_hash_entry *) h;
6748 	  *tls_maskp = &eh->tls_mask;
6749 	}
6750     }
6751   else
6752     {
6753       Elf_Internal_Sym *sym;
6754       Elf_Internal_Sym *locsyms = *locsymsp;
6755 
6756       if (locsyms == NULL)
6757 	{
6758 	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6759 	  if (locsyms == NULL)
6760 	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6761 					    symtab_hdr->sh_info,
6762 					    0, NULL, NULL, NULL);
6763 	  if (locsyms == NULL)
6764 	    return FALSE;
6765 	  *locsymsp = locsyms;
6766 	}
6767       sym = locsyms + r_symndx;
6768 
6769       if (hp != NULL)
6770 	*hp = NULL;
6771 
6772       if (symp != NULL)
6773 	*symp = sym;
6774 
6775       if (symsecp != NULL)
6776 	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6777 
6778       if (tls_maskp != NULL)
6779 	{
6780 	  struct got_entry **lgot_ents;
6781 	  unsigned char *tls_mask;
6782 
6783 	  tls_mask = NULL;
6784 	  lgot_ents = elf_local_got_ents (ibfd);
6785 	  if (lgot_ents != NULL)
6786 	    {
6787 	      struct plt_entry **local_plt = (struct plt_entry **)
6788 		(lgot_ents + symtab_hdr->sh_info);
6789 	      unsigned char *lgot_masks = (unsigned char *)
6790 		(local_plt + symtab_hdr->sh_info);
6791 	      tls_mask = &lgot_masks[r_symndx];
6792 	    }
6793 	  *tls_maskp = tls_mask;
6794 	}
6795     }
6796   return TRUE;
6797 }
6798 
6799 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6800    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6801    type suitable for optimization, and 1 otherwise.  */
6802 
6803 static int
6804 get_tls_mask (unsigned char **tls_maskp,
6805 	      unsigned long *toc_symndx,
6806 	      bfd_vma *toc_addend,
6807 	      Elf_Internal_Sym **locsymsp,
6808 	      const Elf_Internal_Rela *rel,
6809 	      bfd *ibfd)
6810 {
6811   unsigned long r_symndx;
6812   int next_r;
6813   struct elf_link_hash_entry *h;
6814   Elf_Internal_Sym *sym;
6815   asection *sec;
6816   bfd_vma off;
6817 
6818   r_symndx = ELF64_R_SYM (rel->r_info);
6819   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6820     return 0;
6821 
6822   if ((*tls_maskp != NULL && **tls_maskp != 0)
6823       || sec == NULL
6824       || ppc64_elf_section_data (sec) == NULL
6825       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6826     return 1;
6827 
6828   /* Look inside a TOC section too.  */
6829   if (h != NULL)
6830     {
6831       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6832       off = h->root.u.def.value;
6833     }
6834   else
6835     off = sym->st_value;
6836   off += rel->r_addend;
6837   BFD_ASSERT (off % 8 == 0);
6838   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6839   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6840   if (toc_symndx != NULL)
6841     *toc_symndx = r_symndx;
6842   if (toc_addend != NULL)
6843     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6844   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6845     return 0;
6846   if ((h == NULL || is_static_defined (h))
6847       && (next_r == -1 || next_r == -2))
6848     return 1 - next_r;
6849   return 1;
6850 }
6851 
6852 /* Find (or create) an entry in the tocsave hash table.  */
6853 
6854 static struct tocsave_entry *
6855 tocsave_find (struct ppc_link_hash_table *htab,
6856 	      enum insert_option insert,
6857 	      Elf_Internal_Sym **local_syms,
6858 	      const Elf_Internal_Rela *irela,
6859 	      bfd *ibfd)
6860 {
6861   unsigned long r_indx;
6862   struct elf_link_hash_entry *h;
6863   Elf_Internal_Sym *sym;
6864   struct tocsave_entry ent, *p;
6865   hashval_t hash;
6866   struct tocsave_entry **slot;
6867 
6868   r_indx = ELF64_R_SYM (irela->r_info);
6869   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6870     return NULL;
6871   if (ent.sec == NULL || ent.sec->output_section == NULL)
6872     {
6873       (*_bfd_error_handler)
6874 	(_("%B: undefined symbol on R_PPC64_TOCSAVE relocation"));
6875       return NULL;
6876     }
6877 
6878   if (h != NULL)
6879     ent.offset = h->root.u.def.value;
6880   else
6881     ent.offset = sym->st_value;
6882   ent.offset += irela->r_addend;
6883 
6884   hash = tocsave_htab_hash (&ent);
6885   slot = ((struct tocsave_entry **)
6886 	  htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6887   if (slot == NULL)
6888     return NULL;
6889 
6890   if (*slot == NULL)
6891     {
6892       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6893       if (p == NULL)
6894 	return NULL;
6895       *p = ent;
6896       *slot = p;
6897     }
6898   return *slot;
6899 }
6900 
6901 /* Adjust all global syms defined in opd sections.  In gcc generated
6902    code for the old ABI, these will already have been done.  */
6903 
6904 static bfd_boolean
6905 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6906 {
6907   struct ppc_link_hash_entry *eh;
6908   asection *sym_sec;
6909   struct _opd_sec_data *opd;
6910 
6911   if (h->root.type == bfd_link_hash_indirect)
6912     return TRUE;
6913 
6914   if (h->root.type != bfd_link_hash_defined
6915       && h->root.type != bfd_link_hash_defweak)
6916     return TRUE;
6917 
6918   eh = (struct ppc_link_hash_entry *) h;
6919   if (eh->adjust_done)
6920     return TRUE;
6921 
6922   sym_sec = eh->elf.root.u.def.section;
6923   opd = get_opd_info (sym_sec);
6924   if (opd != NULL && opd->adjust != NULL)
6925     {
6926       long adjust = opd->adjust[eh->elf.root.u.def.value / 8];
6927       if (adjust == -1)
6928 	{
6929 	  /* This entry has been deleted.  */
6930 	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6931 	  if (dsec == NULL)
6932 	    {
6933 	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6934 		if (discarded_section (dsec))
6935 		  {
6936 		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6937 		    break;
6938 		  }
6939 	    }
6940 	  eh->elf.root.u.def.value = 0;
6941 	  eh->elf.root.u.def.section = dsec;
6942 	}
6943       else
6944 	eh->elf.root.u.def.value += adjust;
6945       eh->adjust_done = 1;
6946     }
6947   return TRUE;
6948 }
6949 
6950 /* Handles decrementing dynamic reloc counts for the reloc specified by
6951    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM_SEC
6952    have already been determined.  */
6953 
6954 static bfd_boolean
6955 dec_dynrel_count (bfd_vma r_info,
6956 		  asection *sec,
6957 		  struct bfd_link_info *info,
6958 		  Elf_Internal_Sym **local_syms,
6959 		  struct elf_link_hash_entry *h,
6960 		  asection *sym_sec)
6961 {
6962   enum elf_ppc64_reloc_type r_type;
6963   struct elf_dyn_relocs *p;
6964   struct elf_dyn_relocs **pp;
6965 
6966   /* Can this reloc be dynamic?  This switch, and later tests here
6967      should be kept in sync with the code in check_relocs.  */
6968   r_type = ELF64_R_TYPE (r_info);
6969   switch (r_type)
6970     {
6971     default:
6972       return TRUE;
6973 
6974     case R_PPC64_TPREL16:
6975     case R_PPC64_TPREL16_LO:
6976     case R_PPC64_TPREL16_HI:
6977     case R_PPC64_TPREL16_HA:
6978     case R_PPC64_TPREL16_DS:
6979     case R_PPC64_TPREL16_LO_DS:
6980     case R_PPC64_TPREL16_HIGHER:
6981     case R_PPC64_TPREL16_HIGHERA:
6982     case R_PPC64_TPREL16_HIGHEST:
6983     case R_PPC64_TPREL16_HIGHESTA:
6984       if (!info->shared)
6985 	return TRUE;
6986 
6987     case R_PPC64_TPREL64:
6988     case R_PPC64_DTPMOD64:
6989     case R_PPC64_DTPREL64:
6990     case R_PPC64_ADDR64:
6991     case R_PPC64_REL30:
6992     case R_PPC64_REL32:
6993     case R_PPC64_REL64:
6994     case R_PPC64_ADDR14:
6995     case R_PPC64_ADDR14_BRNTAKEN:
6996     case R_PPC64_ADDR14_BRTAKEN:
6997     case R_PPC64_ADDR16:
6998     case R_PPC64_ADDR16_DS:
6999     case R_PPC64_ADDR16_HA:
7000     case R_PPC64_ADDR16_HI:
7001     case R_PPC64_ADDR16_HIGHER:
7002     case R_PPC64_ADDR16_HIGHERA:
7003     case R_PPC64_ADDR16_HIGHEST:
7004     case R_PPC64_ADDR16_HIGHESTA:
7005     case R_PPC64_ADDR16_LO:
7006     case R_PPC64_ADDR16_LO_DS:
7007     case R_PPC64_ADDR24:
7008     case R_PPC64_ADDR32:
7009     case R_PPC64_UADDR16:
7010     case R_PPC64_UADDR32:
7011     case R_PPC64_UADDR64:
7012     case R_PPC64_TOC:
7013       break;
7014     }
7015 
7016   if (local_syms != NULL)
7017     {
7018       unsigned long r_symndx;
7019       Elf_Internal_Sym *sym;
7020       bfd *ibfd = sec->owner;
7021 
7022       r_symndx = ELF64_R_SYM (r_info);
7023       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7024 	return FALSE;
7025     }
7026 
7027   if ((info->shared
7028        && (must_be_dyn_reloc (info, r_type)
7029 	   || (h != NULL
7030 	       && (!info->symbolic
7031 		   || h->root.type == bfd_link_hash_defweak
7032 		   || !h->def_regular))))
7033       || (ELIMINATE_COPY_RELOCS
7034 	  && !info->shared
7035 	  && h != NULL
7036 	  && (h->root.type == bfd_link_hash_defweak
7037 	      || !h->def_regular)))
7038     ;
7039   else
7040     return TRUE;
7041 
7042   if (h != NULL)
7043     pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
7044   else
7045     {
7046       if (sym_sec != NULL)
7047 	{
7048 	  void *vpp = &elf_section_data (sym_sec)->local_dynrel;
7049 	  pp = (struct elf_dyn_relocs **) vpp;
7050 	}
7051       else
7052 	{
7053 	  void *vpp = &elf_section_data (sec)->local_dynrel;
7054 	  pp = (struct elf_dyn_relocs **) vpp;
7055 	}
7056     }
7057 
7058   /* elf_gc_sweep may have already removed all dyn relocs associated
7059      with local syms for a given section.  Also, symbol flags are
7060      changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7061      report a dynreloc miscount.  */
7062   if (*pp == NULL && info->gc_sections)
7063     return TRUE;
7064 
7065   while ((p = *pp) != NULL)
7066     {
7067       if (p->sec == sec)
7068 	{
7069 	  if (!must_be_dyn_reloc (info, r_type))
7070 	    p->pc_count -= 1;
7071 	  p->count -= 1;
7072 	  if (p->count == 0)
7073 	    *pp = p->next;
7074 	  return TRUE;
7075 	}
7076       pp = &p->next;
7077     }
7078 
7079   info->callbacks->einfo (_("%P: dynreloc miscount for %B, section %A\n"),
7080 			  sec->owner, sec);
7081   bfd_set_error (bfd_error_bad_value);
7082   return FALSE;
7083 }
7084 
7085 /* Remove unused Official Procedure Descriptor entries.  Currently we
7086    only remove those associated with functions in discarded link-once
7087    sections, or weakly defined functions that have been overridden.  It
7088    would be possible to remove many more entries for statically linked
7089    applications.  */
7090 
7091 bfd_boolean
7092 ppc64_elf_edit_opd (struct bfd_link_info *info, bfd_boolean non_overlapping)
7093 {
7094   bfd *ibfd;
7095   bfd_boolean some_edited = FALSE;
7096   asection *need_pad = NULL;
7097 
7098   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7099     {
7100       asection *sec;
7101       Elf_Internal_Rela *relstart, *rel, *relend;
7102       Elf_Internal_Shdr *symtab_hdr;
7103       Elf_Internal_Sym *local_syms;
7104       bfd_vma offset;
7105       struct _opd_sec_data *opd;
7106       bfd_boolean need_edit, add_aux_fields;
7107       bfd_size_type cnt_16b = 0;
7108 
7109       if (!is_ppc64_elf (ibfd))
7110 	continue;
7111 
7112       sec = bfd_get_section_by_name (ibfd, ".opd");
7113       if (sec == NULL || sec->size == 0)
7114 	continue;
7115 
7116       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7117 	continue;
7118 
7119       if (sec->output_section == bfd_abs_section_ptr)
7120 	continue;
7121 
7122       /* Look through the section relocs.  */
7123       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7124 	continue;
7125 
7126       local_syms = NULL;
7127       symtab_hdr = &elf_symtab_hdr (ibfd);
7128 
7129       /* Read the relocations.  */
7130       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7131 					    info->keep_memory);
7132       if (relstart == NULL)
7133 	return FALSE;
7134 
7135       /* First run through the relocs to check they are sane, and to
7136 	 determine whether we need to edit this opd section.  */
7137       need_edit = FALSE;
7138       need_pad = sec;
7139       offset = 0;
7140       relend = relstart + sec->reloc_count;
7141       for (rel = relstart; rel < relend; )
7142 	{
7143 	  enum elf_ppc64_reloc_type r_type;
7144 	  unsigned long r_symndx;
7145 	  asection *sym_sec;
7146 	  struct elf_link_hash_entry *h;
7147 	  Elf_Internal_Sym *sym;
7148 
7149 	  /* .opd contains a regular array of 16 or 24 byte entries.  We're
7150 	     only interested in the reloc pointing to a function entry
7151 	     point.  */
7152 	  if (rel->r_offset != offset
7153 	      || rel + 1 >= relend
7154 	      || (rel + 1)->r_offset != offset + 8)
7155 	    {
7156 	      /* If someone messes with .opd alignment then after a
7157 		 "ld -r" we might have padding in the middle of .opd.
7158 		 Also, there's nothing to prevent someone putting
7159 		 something silly in .opd with the assembler.  No .opd
7160 		 optimization for them!  */
7161 	    broken_opd:
7162 	      (*_bfd_error_handler)
7163 		(_("%B: .opd is not a regular array of opd entries"), ibfd);
7164 	      need_edit = FALSE;
7165 	      break;
7166 	    }
7167 
7168 	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7169 	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7170 	    {
7171 	      (*_bfd_error_handler)
7172 		(_("%B: unexpected reloc type %u in .opd section"),
7173 		 ibfd, r_type);
7174 	      need_edit = FALSE;
7175 	      break;
7176 	    }
7177 
7178 	  r_symndx = ELF64_R_SYM (rel->r_info);
7179 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7180 			  r_symndx, ibfd))
7181 	    goto error_ret;
7182 
7183 	  if (sym_sec == NULL || sym_sec->owner == NULL)
7184 	    {
7185 	      const char *sym_name;
7186 	      if (h != NULL)
7187 		sym_name = h->root.root.string;
7188 	      else
7189 		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7190 					     sym_sec);
7191 
7192 	      (*_bfd_error_handler)
7193 		(_("%B: undefined sym `%s' in .opd section"),
7194 		 ibfd, sym_name);
7195 	      need_edit = FALSE;
7196 	      break;
7197 	    }
7198 
7199 	  /* opd entries are always for functions defined in the
7200 	     current input bfd.  If the symbol isn't defined in the
7201 	     input bfd, then we won't be using the function in this
7202 	     bfd;  It must be defined in a linkonce section in another
7203 	     bfd, or is weak.  It's also possible that we are
7204 	     discarding the function due to a linker script /DISCARD/,
7205 	     which we test for via the output_section.  */
7206 	  if (sym_sec->owner != ibfd
7207 	      || sym_sec->output_section == bfd_abs_section_ptr)
7208 	    need_edit = TRUE;
7209 
7210 	  rel += 2;
7211 	  if (rel == relend
7212 	      || (rel + 1 == relend && rel->r_offset == offset + 16))
7213 	    {
7214 	      if (sec->size == offset + 24)
7215 		{
7216 		  need_pad = NULL;
7217 		  break;
7218 		}
7219 	      if (rel == relend && sec->size == offset + 16)
7220 		{
7221 		  cnt_16b++;
7222 		  break;
7223 		}
7224 	      goto broken_opd;
7225 	    }
7226 
7227 	  if (rel->r_offset == offset + 24)
7228 	    offset += 24;
7229 	  else if (rel->r_offset != offset + 16)
7230 	    goto broken_opd;
7231 	  else if (rel + 1 < relend
7232 		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7233 		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7234 	    {
7235 	      offset += 16;
7236 	      cnt_16b++;
7237 	    }
7238 	  else if (rel + 2 < relend
7239 		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_ADDR64
7240 		   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC)
7241 	    {
7242 	      offset += 24;
7243 	      rel += 1;
7244 	    }
7245 	  else
7246 	    goto broken_opd;
7247 	}
7248 
7249       add_aux_fields = non_overlapping && cnt_16b > 0;
7250 
7251       if (need_edit || add_aux_fields)
7252 	{
7253 	  Elf_Internal_Rela *write_rel;
7254 	  Elf_Internal_Shdr *rel_hdr;
7255 	  bfd_byte *rptr, *wptr;
7256 	  bfd_byte *new_contents;
7257 	  bfd_boolean skip;
7258 	  long opd_ent_size;
7259 	  bfd_size_type amt;
7260 
7261 	  new_contents = NULL;
7262 	  amt = sec->size * sizeof (long) / 8;
7263 	  opd = &ppc64_elf_section_data (sec)->u.opd;
7264 	  opd->adjust = bfd_zalloc (sec->owner, amt);
7265 	  if (opd->adjust == NULL)
7266 	    return FALSE;
7267 	  ppc64_elf_section_data (sec)->sec_type = sec_opd;
7268 
7269 	  /* This seems a waste of time as input .opd sections are all
7270 	     zeros as generated by gcc, but I suppose there's no reason
7271 	     this will always be so.  We might start putting something in
7272 	     the third word of .opd entries.  */
7273 	  if ((sec->flags & SEC_IN_MEMORY) == 0)
7274 	    {
7275 	      bfd_byte *loc;
7276 	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7277 		{
7278 		  if (loc != NULL)
7279 		    free (loc);
7280 		error_ret:
7281 		  if (local_syms != NULL
7282 		      && symtab_hdr->contents != (unsigned char *) local_syms)
7283 		    free (local_syms);
7284 		  if (elf_section_data (sec)->relocs != relstart)
7285 		    free (relstart);
7286 		  return FALSE;
7287 		}
7288 	      sec->contents = loc;
7289 	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7290 	    }
7291 
7292 	  elf_section_data (sec)->relocs = relstart;
7293 
7294 	  new_contents = sec->contents;
7295 	  if (add_aux_fields)
7296 	    {
7297 	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7298 	      if (new_contents == NULL)
7299 		return FALSE;
7300 	      need_pad = FALSE;
7301 	    }
7302 	  wptr = new_contents;
7303 	  rptr = sec->contents;
7304 
7305 	  write_rel = relstart;
7306 	  skip = FALSE;
7307 	  offset = 0;
7308 	  opd_ent_size = 0;
7309 	  for (rel = relstart; rel < relend; rel++)
7310 	    {
7311 	      unsigned long r_symndx;
7312 	      asection *sym_sec;
7313 	      struct elf_link_hash_entry *h;
7314 	      Elf_Internal_Sym *sym;
7315 
7316 	      r_symndx = ELF64_R_SYM (rel->r_info);
7317 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7318 			      r_symndx, ibfd))
7319 		goto error_ret;
7320 
7321 	      if (rel->r_offset == offset)
7322 		{
7323 		  struct ppc_link_hash_entry *fdh = NULL;
7324 
7325 		  /* See if the .opd entry is full 24 byte or
7326 		     16 byte (with fd_aux entry overlapped with next
7327 		     fd_func).  */
7328 		  opd_ent_size = 24;
7329 		  if ((rel + 2 == relend && sec->size == offset + 16)
7330 		      || (rel + 3 < relend
7331 			  && rel[2].r_offset == offset + 16
7332 			  && rel[3].r_offset == offset + 24
7333 			  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_ADDR64
7334 			  && ELF64_R_TYPE (rel[3].r_info) == R_PPC64_TOC))
7335 		    opd_ent_size = 16;
7336 
7337 		  if (h != NULL
7338 		      && h->root.root.string[0] == '.')
7339 		    {
7340 		      struct ppc_link_hash_table *htab;
7341 
7342 		      htab = ppc_hash_table (info);
7343 		      if (htab != NULL)
7344 			fdh = lookup_fdh ((struct ppc_link_hash_entry *) h,
7345 					  htab);
7346 		      if (fdh != NULL
7347 			  && fdh->elf.root.type != bfd_link_hash_defined
7348 			  && fdh->elf.root.type != bfd_link_hash_defweak)
7349 			fdh = NULL;
7350 		    }
7351 
7352 		  skip = (sym_sec->owner != ibfd
7353 			  || sym_sec->output_section == bfd_abs_section_ptr);
7354 		  if (skip)
7355 		    {
7356 		      if (fdh != NULL && sym_sec->owner == ibfd)
7357 			{
7358 			  /* Arrange for the function descriptor sym
7359 			     to be dropped.  */
7360 			  fdh->elf.root.u.def.value = 0;
7361 			  fdh->elf.root.u.def.section = sym_sec;
7362 			}
7363 		      opd->adjust[rel->r_offset / 8] = -1;
7364 		    }
7365 		  else
7366 		    {
7367 		      /* We'll be keeping this opd entry.  */
7368 
7369 		      if (fdh != NULL)
7370 			{
7371 			  /* Redefine the function descriptor symbol to
7372 			     this location in the opd section.  It is
7373 			     necessary to update the value here rather
7374 			     than using an array of adjustments as we do
7375 			     for local symbols, because various places
7376 			     in the generic ELF code use the value
7377 			     stored in u.def.value.  */
7378 			  fdh->elf.root.u.def.value = wptr - new_contents;
7379 			  fdh->adjust_done = 1;
7380 			}
7381 
7382 		      /* Local syms are a bit tricky.  We could
7383 			 tweak them as they can be cached, but
7384 			 we'd need to look through the local syms
7385 			 for the function descriptor sym which we
7386 			 don't have at the moment.  So keep an
7387 			 array of adjustments.  */
7388 		      opd->adjust[rel->r_offset / 8]
7389 			= (wptr - new_contents) - (rptr - sec->contents);
7390 
7391 		      if (wptr != rptr)
7392 			memcpy (wptr, rptr, opd_ent_size);
7393 		      wptr += opd_ent_size;
7394 		      if (add_aux_fields && opd_ent_size == 16)
7395 			{
7396 			  memset (wptr, '\0', 8);
7397 			  wptr += 8;
7398 			}
7399 		    }
7400 		  rptr += opd_ent_size;
7401 		  offset += opd_ent_size;
7402 		}
7403 
7404 	      if (skip)
7405 		{
7406 		  if (!NO_OPD_RELOCS
7407 		      && !info->relocatable
7408 		      && !dec_dynrel_count (rel->r_info, sec, info,
7409 					    NULL, h, sym_sec))
7410 		    goto error_ret;
7411 		}
7412 	      else
7413 		{
7414 		  /* We need to adjust any reloc offsets to point to the
7415 		     new opd entries.  While we're at it, we may as well
7416 		     remove redundant relocs.  */
7417 		  rel->r_offset += opd->adjust[(offset - opd_ent_size) / 8];
7418 		  if (write_rel != rel)
7419 		    memcpy (write_rel, rel, sizeof (*rel));
7420 		  ++write_rel;
7421 		}
7422 	    }
7423 
7424 	  sec->size = wptr - new_contents;
7425 	  sec->reloc_count = write_rel - relstart;
7426 	  if (add_aux_fields)
7427 	    {
7428 	      free (sec->contents);
7429 	      sec->contents = new_contents;
7430 	    }
7431 
7432 	  /* Fudge the header size too, as this is used later in
7433 	     elf_bfd_final_link if we are emitting relocs.  */
7434 	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
7435 	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7436 	  some_edited = TRUE;
7437 	}
7438       else if (elf_section_data (sec)->relocs != relstart)
7439 	free (relstart);
7440 
7441       if (local_syms != NULL
7442 	  && symtab_hdr->contents != (unsigned char *) local_syms)
7443 	{
7444 	  if (!info->keep_memory)
7445 	    free (local_syms);
7446 	  else
7447 	    symtab_hdr->contents = (unsigned char *) local_syms;
7448 	}
7449     }
7450 
7451   if (some_edited)
7452     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7453 
7454   /* If we are doing a final link and the last .opd entry is just 16 byte
7455      long, add a 8 byte padding after it.  */
7456   if (need_pad != NULL && !info->relocatable)
7457     {
7458       bfd_byte *p;
7459 
7460       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7461 	{
7462 	  BFD_ASSERT (need_pad->size > 0);
7463 
7464 	  p = bfd_malloc (need_pad->size + 8);
7465 	  if (p == NULL)
7466 	    return FALSE;
7467 
7468 	  if (! bfd_get_section_contents (need_pad->owner, need_pad,
7469 					  p, 0, need_pad->size))
7470 	    return FALSE;
7471 
7472 	  need_pad->contents = p;
7473 	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7474 	}
7475       else
7476 	{
7477 	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7478 	  if (p == NULL)
7479 	    return FALSE;
7480 
7481 	  need_pad->contents = p;
7482 	}
7483 
7484       memset (need_pad->contents + need_pad->size, 0, 8);
7485       need_pad->size += 8;
7486     }
7487 
7488   return TRUE;
7489 }
7490 
7491 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7492 
7493 asection *
7494 ppc64_elf_tls_setup (struct bfd_link_info *info,
7495 		     int no_tls_get_addr_opt,
7496 		     int *no_multi_toc)
7497 {
7498   struct ppc_link_hash_table *htab;
7499 
7500   htab = ppc_hash_table (info);
7501   if (htab == NULL)
7502     return NULL;
7503 
7504   if (*no_multi_toc)
7505     htab->do_multi_toc = 0;
7506   else if (!htab->do_multi_toc)
7507     *no_multi_toc = 1;
7508 
7509   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7510 			elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7511 					      FALSE, FALSE, TRUE));
7512   /* Move dynamic linking info to the function descriptor sym.  */
7513   if (htab->tls_get_addr != NULL)
7514     func_desc_adjust (&htab->tls_get_addr->elf, info);
7515   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7516 			   elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7517 						 FALSE, FALSE, TRUE));
7518   if (!no_tls_get_addr_opt)
7519     {
7520       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7521 
7522       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7523 				  FALSE, FALSE, TRUE);
7524       if (opt != NULL)
7525 	func_desc_adjust (opt, info);
7526       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7527 				     FALSE, FALSE, TRUE);
7528       if (opt_fd != NULL
7529 	  && (opt_fd->root.type == bfd_link_hash_defined
7530 	      || opt_fd->root.type == bfd_link_hash_defweak))
7531 	{
7532 	  /* If glibc supports an optimized __tls_get_addr call stub,
7533 	     signalled by the presence of __tls_get_addr_opt, and we'll
7534 	     be calling __tls_get_addr via a plt call stub, then
7535 	     make __tls_get_addr point to __tls_get_addr_opt.  */
7536 	  tga_fd = &htab->tls_get_addr_fd->elf;
7537 	  if (htab->elf.dynamic_sections_created
7538 	      && tga_fd != NULL
7539 	      && (tga_fd->type == STT_FUNC
7540 		  || tga_fd->needs_plt)
7541 	      && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7542 		   || (ELF_ST_VISIBILITY (tga_fd->other) != STV_DEFAULT
7543 		       && tga_fd->root.type == bfd_link_hash_undefweak)))
7544 	    {
7545 	      struct plt_entry *ent;
7546 
7547 	      for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7548 		if (ent->plt.refcount > 0)
7549 		  break;
7550 	      if (ent != NULL)
7551 		{
7552 		  tga_fd->root.type = bfd_link_hash_indirect;
7553 		  tga_fd->root.u.i.link = &opt_fd->root;
7554 		  ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7555 		  if (opt_fd->dynindx != -1)
7556 		    {
7557 		      /* Use __tls_get_addr_opt in dynamic relocations.  */
7558 		      opt_fd->dynindx = -1;
7559 		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7560 					      opt_fd->dynstr_index);
7561 		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7562 			return NULL;
7563 		    }
7564 		  htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd;
7565 		  tga = &htab->tls_get_addr->elf;
7566 		  if (opt != NULL && tga != NULL)
7567 		    {
7568 		      tga->root.type = bfd_link_hash_indirect;
7569 		      tga->root.u.i.link = &opt->root;
7570 		      ppc64_elf_copy_indirect_symbol (info, opt, tga);
7571 		      _bfd_elf_link_hash_hide_symbol (info, opt,
7572 						      tga->forced_local);
7573 		      htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
7574 		    }
7575 		  htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7576 		  htab->tls_get_addr_fd->is_func_descriptor = 1;
7577 		  if (htab->tls_get_addr != NULL)
7578 		    {
7579 		      htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7580 		      htab->tls_get_addr->is_func = 1;
7581 		    }
7582 		}
7583 	    }
7584 	}
7585       else
7586 	no_tls_get_addr_opt = TRUE;
7587     }
7588   htab->no_tls_get_addr_opt = no_tls_get_addr_opt;
7589   return _bfd_elf_tls_setup (info->output_bfd, info);
7590 }
7591 
7592 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7593    HASH1 or HASH2.  */
7594 
7595 static bfd_boolean
7596 branch_reloc_hash_match (const bfd *ibfd,
7597 			 const Elf_Internal_Rela *rel,
7598 			 const struct ppc_link_hash_entry *hash1,
7599 			 const struct ppc_link_hash_entry *hash2)
7600 {
7601   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7602   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7603   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7604 
7605   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7606     {
7607       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7608       struct elf_link_hash_entry *h;
7609 
7610       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7611       h = elf_follow_link (h);
7612       if (h == &hash1->elf || h == &hash2->elf)
7613 	return TRUE;
7614     }
7615   return FALSE;
7616 }
7617 
7618 /* Run through all the TLS relocs looking for optimization
7619    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7620    a preliminary section layout so that we know the TLS segment
7621    offsets.  We can't optimize earlier because some optimizations need
7622    to know the tp offset, and we need to optimize before allocating
7623    dynamic relocations.  */
7624 
7625 bfd_boolean
7626 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7627 {
7628   bfd *ibfd;
7629   asection *sec;
7630   struct ppc_link_hash_table *htab;
7631   unsigned char *toc_ref;
7632   int pass;
7633 
7634   if (info->relocatable || !info->executable)
7635     return TRUE;
7636 
7637   htab = ppc_hash_table (info);
7638   if (htab == NULL)
7639     return FALSE;
7640 
7641   /* Make two passes over the relocs.  On the first pass, mark toc
7642      entries involved with tls relocs, and check that tls relocs
7643      involved in setting up a tls_get_addr call are indeed followed by
7644      such a call.  If they are not, we can't do any tls optimization.
7645      On the second pass twiddle tls_mask flags to notify
7646      relocate_section that optimization can be done, and adjust got
7647      and plt refcounts.  */
7648   toc_ref = NULL;
7649   for (pass = 0; pass < 2; ++pass)
7650     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7651       {
7652 	Elf_Internal_Sym *locsyms = NULL;
7653 	asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7654 
7655 	for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7656 	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7657 	    {
7658 	      Elf_Internal_Rela *relstart, *rel, *relend;
7659 	      bfd_boolean found_tls_get_addr_arg = 0;
7660 
7661 	      /* Read the relocations.  */
7662 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7663 						    info->keep_memory);
7664 	      if (relstart == NULL)
7665 		return FALSE;
7666 
7667 	      relend = relstart + sec->reloc_count;
7668 	      for (rel = relstart; rel < relend; rel++)
7669 		{
7670 		  enum elf_ppc64_reloc_type r_type;
7671 		  unsigned long r_symndx;
7672 		  struct elf_link_hash_entry *h;
7673 		  Elf_Internal_Sym *sym;
7674 		  asection *sym_sec;
7675 		  unsigned char *tls_mask;
7676 		  unsigned char tls_set, tls_clear, tls_type = 0;
7677 		  bfd_vma value;
7678 		  bfd_boolean ok_tprel, is_local;
7679 		  long toc_ref_index = 0;
7680 		  int expecting_tls_get_addr = 0;
7681 		  bfd_boolean ret = FALSE;
7682 
7683 		  r_symndx = ELF64_R_SYM (rel->r_info);
7684 		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7685 				  r_symndx, ibfd))
7686 		    {
7687 		    err_free_rel:
7688 		      if (elf_section_data (sec)->relocs != relstart)
7689 			free (relstart);
7690 		      if (toc_ref != NULL)
7691 			free (toc_ref);
7692 		      if (locsyms != NULL
7693 			  && (elf_symtab_hdr (ibfd).contents
7694 			      != (unsigned char *) locsyms))
7695 			free (locsyms);
7696 		      return ret;
7697 		    }
7698 
7699 		  if (h != NULL)
7700 		    {
7701 		      if (h->root.type == bfd_link_hash_defined
7702 			  || h->root.type == bfd_link_hash_defweak)
7703 			value = h->root.u.def.value;
7704 		      else if (h->root.type == bfd_link_hash_undefweak)
7705 			value = 0;
7706 		      else
7707 			{
7708 			  found_tls_get_addr_arg = 0;
7709 			  continue;
7710 			}
7711 		    }
7712 		  else
7713 		    /* Symbols referenced by TLS relocs must be of type
7714 		       STT_TLS.  So no need for .opd local sym adjust.  */
7715 		    value = sym->st_value;
7716 
7717 		  ok_tprel = FALSE;
7718 		  is_local = FALSE;
7719 		  if (h == NULL
7720 		      || !h->def_dynamic)
7721 		    {
7722 		      is_local = TRUE;
7723 		      if (h != NULL
7724 			  && h->root.type == bfd_link_hash_undefweak)
7725 			ok_tprel = TRUE;
7726 		      else
7727 			{
7728 			  value += sym_sec->output_offset;
7729 			  value += sym_sec->output_section->vma;
7730 			  value -= htab->elf.tls_sec->vma;
7731 			  ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
7732 				      < (bfd_vma) 1 << 32);
7733 			}
7734 		    }
7735 
7736 		  r_type = ELF64_R_TYPE (rel->r_info);
7737 		  /* If this section has old-style __tls_get_addr calls
7738 		     without marker relocs, then check that each
7739 		     __tls_get_addr call reloc is preceded by a reloc
7740 		     that conceivably belongs to the __tls_get_addr arg
7741 		     setup insn.  If we don't find matching arg setup
7742 		     relocs, don't do any tls optimization.  */
7743 		  if (pass == 0
7744 		      && sec->has_tls_get_addr_call
7745 		      && h != NULL
7746 		      && (h == &htab->tls_get_addr->elf
7747 			  || h == &htab->tls_get_addr_fd->elf)
7748 		      && !found_tls_get_addr_arg
7749 		      && is_branch_reloc (r_type))
7750 		    {
7751 		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
7752 						"TLS optimization disabled\n"),
7753 					      ibfd, sec, rel->r_offset);
7754 		      ret = TRUE;
7755 		      goto err_free_rel;
7756 		    }
7757 
7758 		  found_tls_get_addr_arg = 0;
7759 		  switch (r_type)
7760 		    {
7761 		    case R_PPC64_GOT_TLSLD16:
7762 		    case R_PPC64_GOT_TLSLD16_LO:
7763 		      expecting_tls_get_addr = 1;
7764 		      found_tls_get_addr_arg = 1;
7765 		      /* Fall thru */
7766 
7767 		    case R_PPC64_GOT_TLSLD16_HI:
7768 		    case R_PPC64_GOT_TLSLD16_HA:
7769 		      /* These relocs should never be against a symbol
7770 			 defined in a shared lib.  Leave them alone if
7771 			 that turns out to be the case.  */
7772 		      if (!is_local)
7773 			continue;
7774 
7775 		      /* LD -> LE */
7776 		      tls_set = 0;
7777 		      tls_clear = TLS_LD;
7778 		      tls_type = TLS_TLS | TLS_LD;
7779 		      break;
7780 
7781 		    case R_PPC64_GOT_TLSGD16:
7782 		    case R_PPC64_GOT_TLSGD16_LO:
7783 		      expecting_tls_get_addr = 1;
7784 		      found_tls_get_addr_arg = 1;
7785 		      /* Fall thru */
7786 
7787 		    case R_PPC64_GOT_TLSGD16_HI:
7788 		    case R_PPC64_GOT_TLSGD16_HA:
7789 		      if (ok_tprel)
7790 			/* GD -> LE */
7791 			tls_set = 0;
7792 		      else
7793 			/* GD -> IE */
7794 			tls_set = TLS_TLS | TLS_TPRELGD;
7795 		      tls_clear = TLS_GD;
7796 		      tls_type = TLS_TLS | TLS_GD;
7797 		      break;
7798 
7799 		    case R_PPC64_GOT_TPREL16_DS:
7800 		    case R_PPC64_GOT_TPREL16_LO_DS:
7801 		    case R_PPC64_GOT_TPREL16_HI:
7802 		    case R_PPC64_GOT_TPREL16_HA:
7803 		      if (ok_tprel)
7804 			{
7805 			  /* IE -> LE */
7806 			  tls_set = 0;
7807 			  tls_clear = TLS_TPREL;
7808 			  tls_type = TLS_TLS | TLS_TPREL;
7809 			  break;
7810 			}
7811 		      continue;
7812 
7813 		    case R_PPC64_TLSGD:
7814 		    case R_PPC64_TLSLD:
7815 		      found_tls_get_addr_arg = 1;
7816 		      /* Fall thru */
7817 
7818 		    case R_PPC64_TLS:
7819 		    case R_PPC64_TOC16:
7820 		    case R_PPC64_TOC16_LO:
7821 		      if (sym_sec == NULL || sym_sec != toc)
7822 			continue;
7823 
7824 		      /* Mark this toc entry as referenced by a TLS
7825 			 code sequence.  We can do that now in the
7826 			 case of R_PPC64_TLS, and after checking for
7827 			 tls_get_addr for the TOC16 relocs.  */
7828 		      if (toc_ref == NULL)
7829 			toc_ref = bfd_zmalloc (toc->output_section->rawsize / 8);
7830 		      if (toc_ref == NULL)
7831 			goto err_free_rel;
7832 
7833 		      if (h != NULL)
7834 			value = h->root.u.def.value;
7835 		      else
7836 			value = sym->st_value;
7837 		      value += rel->r_addend;
7838 		      BFD_ASSERT (value < toc->size && value % 8 == 0);
7839 		      toc_ref_index = (value + toc->output_offset) / 8;
7840 		      if (r_type == R_PPC64_TLS
7841 			  || r_type == R_PPC64_TLSGD
7842 			  || r_type == R_PPC64_TLSLD)
7843 			{
7844 			  toc_ref[toc_ref_index] = 1;
7845 			  continue;
7846 			}
7847 
7848 		      if (pass != 0 && toc_ref[toc_ref_index] == 0)
7849 			continue;
7850 
7851 		      tls_set = 0;
7852 		      tls_clear = 0;
7853 		      expecting_tls_get_addr = 2;
7854 		      break;
7855 
7856 		    case R_PPC64_TPREL64:
7857 		      if (pass == 0
7858 			  || sec != toc
7859 			  || toc_ref == NULL
7860 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7861 			continue;
7862 		      if (ok_tprel)
7863 			{
7864 			  /* IE -> LE */
7865 			  tls_set = TLS_EXPLICIT;
7866 			  tls_clear = TLS_TPREL;
7867 			  break;
7868 			}
7869 		      continue;
7870 
7871 		    case R_PPC64_DTPMOD64:
7872 		      if (pass == 0
7873 			  || sec != toc
7874 			  || toc_ref == NULL
7875 			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
7876 			continue;
7877 		      if (rel + 1 < relend
7878 			  && (rel[1].r_info
7879 			      == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
7880 			  && rel[1].r_offset == rel->r_offset + 8)
7881 			{
7882 			  if (ok_tprel)
7883 			    /* GD -> LE */
7884 			    tls_set = TLS_EXPLICIT | TLS_GD;
7885 			  else
7886 			    /* GD -> IE */
7887 			    tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
7888 			  tls_clear = TLS_GD;
7889 			}
7890 		      else
7891 			{
7892 			  if (!is_local)
7893 			    continue;
7894 
7895 			  /* LD -> LE */
7896 			  tls_set = TLS_EXPLICIT;
7897 			  tls_clear = TLS_LD;
7898 			}
7899 		      break;
7900 
7901 		    default:
7902 		      continue;
7903 		    }
7904 
7905 		  if (pass == 0)
7906 		    {
7907 		      if (!expecting_tls_get_addr
7908 			  || !sec->has_tls_get_addr_call)
7909 			continue;
7910 
7911 		      if (rel + 1 < relend
7912 			  && branch_reloc_hash_match (ibfd, rel + 1,
7913 						      htab->tls_get_addr,
7914 						      htab->tls_get_addr_fd))
7915 			{
7916 			  if (expecting_tls_get_addr == 2)
7917 			    {
7918 			      /* Check for toc tls entries.  */
7919 			      unsigned char *toc_tls;
7920 			      int retval;
7921 
7922 			      retval = get_tls_mask (&toc_tls, NULL, NULL,
7923 						     &locsyms,
7924 						     rel, ibfd);
7925 			      if (retval == 0)
7926 				goto err_free_rel;
7927 			      if (toc_tls != NULL)
7928 				{
7929 				  if ((*toc_tls & (TLS_GD | TLS_LD)) != 0)
7930 				    found_tls_get_addr_arg = 1;
7931 				  if (retval > 1)
7932 				    toc_ref[toc_ref_index] = 1;
7933 				}
7934 			    }
7935 			  continue;
7936 			}
7937 
7938 		      if (expecting_tls_get_addr != 1)
7939 			continue;
7940 
7941 		      /* Uh oh, we didn't find the expected call.  We
7942 			 could just mark this symbol to exclude it
7943 			 from tls optimization but it's safer to skip
7944 			 the entire optimization.  */
7945 		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
7946 						"TLS optimization disabled\n"),
7947 					      ibfd, sec, rel->r_offset);
7948 		      ret = TRUE;
7949 		      goto err_free_rel;
7950 		    }
7951 
7952 		  if (expecting_tls_get_addr && htab->tls_get_addr != NULL)
7953 		    {
7954 		      struct plt_entry *ent;
7955 		      for (ent = htab->tls_get_addr->elf.plt.plist;
7956 			   ent != NULL;
7957 			   ent = ent->next)
7958 			if (ent->addend == 0)
7959 			  {
7960 			    if (ent->plt.refcount > 0)
7961 			      {
7962 				ent->plt.refcount -= 1;
7963 				expecting_tls_get_addr = 0;
7964 			      }
7965 			    break;
7966 			  }
7967 		    }
7968 
7969 		  if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL)
7970 		    {
7971 		      struct plt_entry *ent;
7972 		      for (ent = htab->tls_get_addr_fd->elf.plt.plist;
7973 			   ent != NULL;
7974 			   ent = ent->next)
7975 			if (ent->addend == 0)
7976 			  {
7977 			    if (ent->plt.refcount > 0)
7978 			      ent->plt.refcount -= 1;
7979 			    break;
7980 			  }
7981 		    }
7982 
7983 		  if (tls_clear == 0)
7984 		    continue;
7985 
7986 		  if ((tls_set & TLS_EXPLICIT) == 0)
7987 		    {
7988 		      struct got_entry *ent;
7989 
7990 		      /* Adjust got entry for this reloc.  */
7991 		      if (h != NULL)
7992 			ent = h->got.glist;
7993 		      else
7994 			ent = elf_local_got_ents (ibfd)[r_symndx];
7995 
7996 		      for (; ent != NULL; ent = ent->next)
7997 			if (ent->addend == rel->r_addend
7998 			    && ent->owner == ibfd
7999 			    && ent->tls_type == tls_type)
8000 			  break;
8001 		      if (ent == NULL)
8002 			abort ();
8003 
8004 		      if (tls_set == 0)
8005 			{
8006 			  /* We managed to get rid of a got entry.  */
8007 			  if (ent->got.refcount > 0)
8008 			    ent->got.refcount -= 1;
8009 			}
8010 		    }
8011 		  else
8012 		    {
8013 		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
8014 			 we'll lose one or two dyn relocs.  */
8015 		      if (!dec_dynrel_count (rel->r_info, sec, info,
8016 					     NULL, h, sym_sec))
8017 			return FALSE;
8018 
8019 		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
8020 			{
8021 			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8022 						 NULL, h, sym_sec))
8023 			    return FALSE;
8024 			}
8025 		    }
8026 
8027 		  *tls_mask |= tls_set;
8028 		  *tls_mask &= ~tls_clear;
8029 		}
8030 
8031 	      if (elf_section_data (sec)->relocs != relstart)
8032 		free (relstart);
8033 	    }
8034 
8035 	if (locsyms != NULL
8036 	    && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8037 	  {
8038 	    if (!info->keep_memory)
8039 	      free (locsyms);
8040 	    else
8041 	      elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8042 	  }
8043       }
8044 
8045   if (toc_ref != NULL)
8046     free (toc_ref);
8047   return TRUE;
8048 }
8049 
8050 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8051    the values of any global symbols in a toc section that has been
8052    edited.  Globals in toc sections should be a rarity, so this function
8053    sets a flag if any are found in toc sections other than the one just
8054    edited, so that futher hash table traversals can be avoided.  */
8055 
8056 struct adjust_toc_info
8057 {
8058   asection *toc;
8059   unsigned long *skip;
8060   bfd_boolean global_toc_syms;
8061 };
8062 
8063 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8064 
8065 static bfd_boolean
8066 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8067 {
8068   struct ppc_link_hash_entry *eh;
8069   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8070   unsigned long i;
8071 
8072   if (h->root.type != bfd_link_hash_defined
8073       && h->root.type != bfd_link_hash_defweak)
8074     return TRUE;
8075 
8076   eh = (struct ppc_link_hash_entry *) h;
8077   if (eh->adjust_done)
8078     return TRUE;
8079 
8080   if (eh->elf.root.u.def.section == toc_inf->toc)
8081     {
8082       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8083 	i = toc_inf->toc->rawsize >> 3;
8084       else
8085 	i = eh->elf.root.u.def.value >> 3;
8086 
8087       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8088 	{
8089 	  (*_bfd_error_handler)
8090 	    (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8091 	  do
8092 	    ++i;
8093 	  while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8094 	  eh->elf.root.u.def.value = (bfd_vma) i << 3;
8095 	}
8096 
8097       eh->elf.root.u.def.value -= toc_inf->skip[i];
8098       eh->adjust_done = 1;
8099     }
8100   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8101     toc_inf->global_toc_syms = TRUE;
8102 
8103   return TRUE;
8104 }
8105 
8106 /* Return TRUE iff INSN is one we expect on a _LO variety toc/got reloc.  */
8107 
8108 static bfd_boolean
8109 ok_lo_toc_insn (unsigned int insn)
8110 {
8111   return ((insn & (0x3f << 26)) == 14u << 26 /* addi */
8112 	  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
8113 	  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
8114 	  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
8115 	  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
8116 	  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
8117 	  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
8118 	  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
8119 	  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
8120 	  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
8121 	  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
8122 	  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
8123 	  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
8124 	  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
8125 	  || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */
8126 	      && (insn & 3) != 1)
8127 	  || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */
8128 	      && ((insn & 3) == 0 || (insn & 3) == 3))
8129 	  || (insn & (0x3f << 26)) == 12u << 26 /* addic */);
8130 }
8131 
8132 /* Examine all relocs referencing .toc sections in order to remove
8133    unused .toc entries.  */
8134 
8135 bfd_boolean
8136 ppc64_elf_edit_toc (struct bfd_link_info *info)
8137 {
8138   bfd *ibfd;
8139   struct adjust_toc_info toc_inf;
8140   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8141 
8142   htab->do_toc_opt = 1;
8143   toc_inf.global_toc_syms = TRUE;
8144   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
8145     {
8146       asection *toc, *sec;
8147       Elf_Internal_Shdr *symtab_hdr;
8148       Elf_Internal_Sym *local_syms;
8149       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8150       unsigned long *skip, *drop;
8151       unsigned char *used;
8152       unsigned char *keep, last, some_unused;
8153 
8154       if (!is_ppc64_elf (ibfd))
8155 	continue;
8156 
8157       toc = bfd_get_section_by_name (ibfd, ".toc");
8158       if (toc == NULL
8159 	  || toc->size == 0
8160 	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8161 	  || discarded_section (toc))
8162 	continue;
8163 
8164       toc_relocs = NULL;
8165       local_syms = NULL;
8166       symtab_hdr = &elf_symtab_hdr (ibfd);
8167 
8168       /* Look at sections dropped from the final link.  */
8169       skip = NULL;
8170       relstart = NULL;
8171       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8172 	{
8173 	  if (sec->reloc_count == 0
8174 	      || !discarded_section (sec)
8175 	      || get_opd_info (sec)
8176 	      || (sec->flags & SEC_ALLOC) == 0
8177 	      || (sec->flags & SEC_DEBUGGING) != 0)
8178 	    continue;
8179 
8180 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8181 	  if (relstart == NULL)
8182 	    goto error_ret;
8183 
8184 	  /* Run through the relocs to see which toc entries might be
8185 	     unused.  */
8186 	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8187 	    {
8188 	      enum elf_ppc64_reloc_type r_type;
8189 	      unsigned long r_symndx;
8190 	      asection *sym_sec;
8191 	      struct elf_link_hash_entry *h;
8192 	      Elf_Internal_Sym *sym;
8193 	      bfd_vma val;
8194 
8195 	      r_type = ELF64_R_TYPE (rel->r_info);
8196 	      switch (r_type)
8197 		{
8198 		default:
8199 		  continue;
8200 
8201 		case R_PPC64_TOC16:
8202 		case R_PPC64_TOC16_LO:
8203 		case R_PPC64_TOC16_HI:
8204 		case R_PPC64_TOC16_HA:
8205 		case R_PPC64_TOC16_DS:
8206 		case R_PPC64_TOC16_LO_DS:
8207 		  break;
8208 		}
8209 
8210 	      r_symndx = ELF64_R_SYM (rel->r_info);
8211 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8212 			      r_symndx, ibfd))
8213 		goto error_ret;
8214 
8215 	      if (sym_sec != toc)
8216 		continue;
8217 
8218 	      if (h != NULL)
8219 		val = h->root.u.def.value;
8220 	      else
8221 		val = sym->st_value;
8222 	      val += rel->r_addend;
8223 
8224 	      if (val >= toc->size)
8225 		continue;
8226 
8227 	      /* Anything in the toc ought to be aligned to 8 bytes.
8228 		 If not, don't mark as unused.  */
8229 	      if (val & 7)
8230 		continue;
8231 
8232 	      if (skip == NULL)
8233 		{
8234 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8235 		  if (skip == NULL)
8236 		    goto error_ret;
8237 		}
8238 
8239 	      skip[val >> 3] = ref_from_discarded;
8240 	    }
8241 
8242 	  if (elf_section_data (sec)->relocs != relstart)
8243 	    free (relstart);
8244 	}
8245 
8246       /* For largetoc loads of address constants, we can convert
8247 	 .  addis rx,2,addr@got@ha
8248 	 .  ld ry,addr@got@l(rx)
8249 	 to
8250 	 .  addis rx,2,addr@toc@ha
8251 	 .  addi ry,rx,addr@toc@l
8252 	 when addr is within 2G of the toc pointer.  This then means
8253 	 that the word storing "addr" in the toc is no longer needed.  */
8254 
8255       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8256 	  && toc->output_section->rawsize < (bfd_vma) 1 << 31
8257 	  && toc->reloc_count != 0)
8258 	{
8259 	  /* Read toc relocs.  */
8260 	  toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8261 						  info->keep_memory);
8262 	  if (toc_relocs == NULL)
8263 	    goto error_ret;
8264 
8265 	  for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8266 	    {
8267 	      enum elf_ppc64_reloc_type r_type;
8268 	      unsigned long r_symndx;
8269 	      asection *sym_sec;
8270 	      struct elf_link_hash_entry *h;
8271 	      Elf_Internal_Sym *sym;
8272 	      bfd_vma val, addr;
8273 
8274 	      r_type = ELF64_R_TYPE (rel->r_info);
8275 	      if (r_type != R_PPC64_ADDR64)
8276 		continue;
8277 
8278 	      r_symndx = ELF64_R_SYM (rel->r_info);
8279 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8280 			      r_symndx, ibfd))
8281 		goto error_ret;
8282 
8283 	      if (sym_sec == NULL
8284 		  || discarded_section (sym_sec))
8285 		continue;
8286 
8287 	      if (!SYMBOL_CALLS_LOCAL (info, h))
8288 		continue;
8289 
8290 	      if (h != NULL)
8291 		{
8292 		  if (h->type == STT_GNU_IFUNC)
8293 		    continue;
8294 		  val = h->root.u.def.value;
8295 		}
8296 	      else
8297 		{
8298 		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8299 		    continue;
8300 		  val = sym->st_value;
8301 		}
8302 	      val += rel->r_addend;
8303 	      val += sym_sec->output_section->vma + sym_sec->output_offset;
8304 
8305 	      /* We don't yet know the exact toc pointer value, but we
8306 		 know it will be somewhere in the toc section.  Don't
8307 		 optimize if the difference from any possible toc
8308 		 pointer is outside [ff..f80008000, 7fff7fff].  */
8309 	      addr = toc->output_section->vma + TOC_BASE_OFF;
8310 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8311 		continue;
8312 
8313 	      addr = toc->output_section->vma + toc->output_section->rawsize;
8314 	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8315 		continue;
8316 
8317 	      if (skip == NULL)
8318 		{
8319 		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8320 		  if (skip == NULL)
8321 		    goto error_ret;
8322 		}
8323 
8324 	      skip[rel->r_offset >> 3]
8325 		|= can_optimize | ((rel - toc_relocs) << 2);
8326 	    }
8327 	}
8328 
8329       if (skip == NULL)
8330 	continue;
8331 
8332       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8333       if (used == NULL)
8334 	{
8335 	error_ret:
8336 	  if (local_syms != NULL
8337 	      && symtab_hdr->contents != (unsigned char *) local_syms)
8338 	    free (local_syms);
8339 	  if (sec != NULL
8340 	      && relstart != NULL
8341 	      && elf_section_data (sec)->relocs != relstart)
8342 	    free (relstart);
8343 	  if (toc_relocs != NULL
8344 	      && elf_section_data (toc)->relocs != toc_relocs)
8345 	    free (toc_relocs);
8346 	  if (skip != NULL)
8347 	    free (skip);
8348 	  return FALSE;
8349 	}
8350 
8351       /* Now check all kept sections that might reference the toc.
8352 	 Check the toc itself last.  */
8353       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8354 		  : ibfd->sections);
8355 	   sec != NULL;
8356 	   sec = (sec == toc ? NULL
8357 		  : sec->next == NULL ? toc
8358 		  : sec->next == toc && toc->next ? toc->next
8359 		  : sec->next))
8360 	{
8361 	  int repeat;
8362 
8363 	  if (sec->reloc_count == 0
8364 	      || discarded_section (sec)
8365 	      || get_opd_info (sec)
8366 	      || (sec->flags & SEC_ALLOC) == 0
8367 	      || (sec->flags & SEC_DEBUGGING) != 0)
8368 	    continue;
8369 
8370 	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8371 						info->keep_memory);
8372 	  if (relstart == NULL)
8373 	    goto error_ret;
8374 
8375 	  /* Mark toc entries referenced as used.  */
8376 	  do
8377 	    {
8378 	      repeat = 0;
8379 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8380 		{
8381 		  enum elf_ppc64_reloc_type r_type;
8382 		  unsigned long r_symndx;
8383 		  asection *sym_sec;
8384 		  struct elf_link_hash_entry *h;
8385 		  Elf_Internal_Sym *sym;
8386 		  bfd_vma val;
8387 		  enum {no_check, check_lo, check_ha} insn_check;
8388 
8389 		  r_type = ELF64_R_TYPE (rel->r_info);
8390 		  switch (r_type)
8391 		    {
8392 		    default:
8393 		      insn_check = no_check;
8394 		      break;
8395 
8396 		    case R_PPC64_GOT_TLSLD16_HA:
8397 		    case R_PPC64_GOT_TLSGD16_HA:
8398 		    case R_PPC64_GOT_TPREL16_HA:
8399 		    case R_PPC64_GOT_DTPREL16_HA:
8400 		    case R_PPC64_GOT16_HA:
8401 		    case R_PPC64_TOC16_HA:
8402 		      insn_check = check_ha;
8403 		      break;
8404 
8405 		    case R_PPC64_GOT_TLSLD16_LO:
8406 		    case R_PPC64_GOT_TLSGD16_LO:
8407 		    case R_PPC64_GOT_TPREL16_LO_DS:
8408 		    case R_PPC64_GOT_DTPREL16_LO_DS:
8409 		    case R_PPC64_GOT16_LO:
8410 		    case R_PPC64_GOT16_LO_DS:
8411 		    case R_PPC64_TOC16_LO:
8412 		    case R_PPC64_TOC16_LO_DS:
8413 		      insn_check = check_lo;
8414 		      break;
8415 		    }
8416 
8417 		  if (insn_check != no_check)
8418 		    {
8419 		      bfd_vma off = rel->r_offset & ~3;
8420 		      unsigned char buf[4];
8421 		      unsigned int insn;
8422 
8423 		      if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
8424 			{
8425 			  free (used);
8426 			  goto error_ret;
8427 			}
8428 		      insn = bfd_get_32 (ibfd, buf);
8429 		      if (insn_check == check_lo
8430 			  ? !ok_lo_toc_insn (insn)
8431 			  : ((insn & ((0x3f << 26) | 0x1f << 16))
8432 			     != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
8433 			{
8434 			  char str[12];
8435 
8436 			  ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
8437 			  sprintf (str, "%#08x", insn);
8438 			  info->callbacks->einfo
8439 			    (_("%P: %H: toc optimization is not supported for"
8440 			       " %s instruction.\n"),
8441 			     ibfd, sec, rel->r_offset & ~3, str);
8442 			}
8443 		    }
8444 
8445 		  switch (r_type)
8446 		    {
8447 		    case R_PPC64_TOC16:
8448 		    case R_PPC64_TOC16_LO:
8449 		    case R_PPC64_TOC16_HI:
8450 		    case R_PPC64_TOC16_HA:
8451 		    case R_PPC64_TOC16_DS:
8452 		    case R_PPC64_TOC16_LO_DS:
8453 		      /* In case we're taking addresses of toc entries.  */
8454 		    case R_PPC64_ADDR64:
8455 		      break;
8456 
8457 		    default:
8458 		      continue;
8459 		    }
8460 
8461 		  r_symndx = ELF64_R_SYM (rel->r_info);
8462 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8463 				  r_symndx, ibfd))
8464 		    {
8465 		      free (used);
8466 		      goto error_ret;
8467 		    }
8468 
8469 		  if (sym_sec != toc)
8470 		    continue;
8471 
8472 		  if (h != NULL)
8473 		    val = h->root.u.def.value;
8474 		  else
8475 		    val = sym->st_value;
8476 		  val += rel->r_addend;
8477 
8478 		  if (val >= toc->size)
8479 		    continue;
8480 
8481 		  if ((skip[val >> 3] & can_optimize) != 0)
8482 		    {
8483 		      bfd_vma off;
8484 		      unsigned char opc;
8485 
8486 		      switch (r_type)
8487 			{
8488 			case R_PPC64_TOC16_HA:
8489 			  break;
8490 
8491 			case R_PPC64_TOC16_LO_DS:
8492 			  off = rel->r_offset;
8493 			  off += (bfd_big_endian (ibfd) ? -2 : 3);
8494 			  if (!bfd_get_section_contents (ibfd, sec, &opc,
8495 							 off, 1))
8496 			    {
8497 			      free (used);
8498 			      goto error_ret;
8499 			    }
8500 			  if ((opc & (0x3f << 2)) == (58u << 2))
8501 			    break;
8502 			  /* Fall thru */
8503 
8504 			default:
8505 			  /* Wrong sort of reloc, or not a ld.  We may
8506 			     as well clear ref_from_discarded too.  */
8507 			  skip[val >> 3] = 0;
8508 			}
8509 		    }
8510 
8511 		  if (sec != toc)
8512 		    used[val >> 3] = 1;
8513 		  /* For the toc section, we only mark as used if this
8514 		     entry itself isn't unused.  */
8515 		  else if ((used[rel->r_offset >> 3]
8516 			    || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8517 			   && !used[val >> 3])
8518 		    {
8519 		      /* Do all the relocs again, to catch reference
8520 			 chains.  */
8521 		      repeat = 1;
8522 		      used[val >> 3] = 1;
8523 		    }
8524 		}
8525 	    }
8526 	  while (repeat);
8527 
8528 	  if (elf_section_data (sec)->relocs != relstart)
8529 	    free (relstart);
8530 	}
8531 
8532       /* Merge the used and skip arrays.  Assume that TOC
8533 	 doublewords not appearing as either used or unused belong
8534 	 to to an entry more than one doubleword in size.  */
8535       for (drop = skip, keep = used, last = 0, some_unused = 0;
8536 	   drop < skip + (toc->size + 7) / 8;
8537 	   ++drop, ++keep)
8538 	{
8539 	  if (*keep)
8540 	    {
8541 	      *drop &= ~ref_from_discarded;
8542 	      if ((*drop & can_optimize) != 0)
8543 		some_unused = 1;
8544 	      last = 0;
8545 	    }
8546 	  else if ((*drop & ref_from_discarded) != 0)
8547 	    {
8548 	      some_unused = 1;
8549 	      last = ref_from_discarded;
8550 	    }
8551 	  else
8552 	    *drop = last;
8553 	}
8554 
8555       free (used);
8556 
8557       if (some_unused)
8558 	{
8559 	  bfd_byte *contents, *src;
8560 	  unsigned long off;
8561 	  Elf_Internal_Sym *sym;
8562 	  bfd_boolean local_toc_syms = FALSE;
8563 
8564 	  /* Shuffle the toc contents, and at the same time convert the
8565 	     skip array from booleans into offsets.  */
8566 	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8567 	    goto error_ret;
8568 
8569 	  elf_section_data (toc)->this_hdr.contents = contents;
8570 
8571 	  for (src = contents, off = 0, drop = skip;
8572 	       src < contents + toc->size;
8573 	       src += 8, ++drop)
8574 	    {
8575 	      if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8576 		off += 8;
8577 	      else if (off != 0)
8578 		{
8579 		  *drop = off;
8580 		  memcpy (src - off, src, 8);
8581 		}
8582 	    }
8583 	  *drop = off;
8584 	  toc->rawsize = toc->size;
8585 	  toc->size = src - contents - off;
8586 
8587 	  /* Adjust addends for relocs against the toc section sym,
8588 	     and optimize any accesses we can.  */
8589 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8590 	    {
8591 	      if (sec->reloc_count == 0
8592 		  || discarded_section (sec))
8593 		continue;
8594 
8595 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8596 						    info->keep_memory);
8597 	      if (relstart == NULL)
8598 		goto error_ret;
8599 
8600 	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8601 		{
8602 		  enum elf_ppc64_reloc_type r_type;
8603 		  unsigned long r_symndx;
8604 		  asection *sym_sec;
8605 		  struct elf_link_hash_entry *h;
8606 		  bfd_vma val;
8607 
8608 		  r_type = ELF64_R_TYPE (rel->r_info);
8609 		  switch (r_type)
8610 		    {
8611 		    default:
8612 		      continue;
8613 
8614 		    case R_PPC64_TOC16:
8615 		    case R_PPC64_TOC16_LO:
8616 		    case R_PPC64_TOC16_HI:
8617 		    case R_PPC64_TOC16_HA:
8618 		    case R_PPC64_TOC16_DS:
8619 		    case R_PPC64_TOC16_LO_DS:
8620 		    case R_PPC64_ADDR64:
8621 		      break;
8622 		    }
8623 
8624 		  r_symndx = ELF64_R_SYM (rel->r_info);
8625 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8626 				  r_symndx, ibfd))
8627 		    goto error_ret;
8628 
8629 		  if (sym_sec != toc)
8630 		    continue;
8631 
8632 		  if (h != NULL)
8633 		    val = h->root.u.def.value;
8634 		  else
8635 		    {
8636 		      val = sym->st_value;
8637 		      if (val != 0)
8638 			local_toc_syms = TRUE;
8639 		    }
8640 
8641 		  val += rel->r_addend;
8642 
8643 		  if (val > toc->rawsize)
8644 		    val = toc->rawsize;
8645 		  else if ((skip[val >> 3] & ref_from_discarded) != 0)
8646 		    continue;
8647 		  else if ((skip[val >> 3] & can_optimize) != 0)
8648 		    {
8649 		      Elf_Internal_Rela *tocrel
8650 			= toc_relocs + (skip[val >> 3] >> 2);
8651 		      unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8652 
8653 		      switch (r_type)
8654 			{
8655 			case R_PPC64_TOC16_HA:
8656 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8657 			  break;
8658 
8659 			case R_PPC64_TOC16_LO_DS:
8660 			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8661 			  break;
8662 
8663 			default:
8664 			  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8665 			    ppc_howto_init ();
8666 			  info->callbacks->einfo
8667 			    (_("%P: %H: %s references "
8668 			       "optimized away TOC entry\n"),
8669 			     ibfd, sec, rel->r_offset,
8670 			     ppc64_elf_howto_table[r_type]->name);
8671 			  bfd_set_error (bfd_error_bad_value);
8672 			  goto error_ret;
8673 			}
8674 		      rel->r_addend = tocrel->r_addend;
8675 		      elf_section_data (sec)->relocs = relstart;
8676 		      continue;
8677 		    }
8678 
8679 		  if (h != NULL || sym->st_value != 0)
8680 		    continue;
8681 
8682 		  rel->r_addend -= skip[val >> 3];
8683 		  elf_section_data (sec)->relocs = relstart;
8684 		}
8685 
8686 	      if (elf_section_data (sec)->relocs != relstart)
8687 		free (relstart);
8688 	    }
8689 
8690 	  /* We shouldn't have local or global symbols defined in the TOC,
8691 	     but handle them anyway.  */
8692 	  if (local_syms != NULL)
8693 	    for (sym = local_syms;
8694 		 sym < local_syms + symtab_hdr->sh_info;
8695 		 ++sym)
8696 	      if (sym->st_value != 0
8697 		  && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
8698 		{
8699 		  unsigned long i;
8700 
8701 		  if (sym->st_value > toc->rawsize)
8702 		    i = toc->rawsize >> 3;
8703 		  else
8704 		    i = sym->st_value >> 3;
8705 
8706 		  if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
8707 		    {
8708 		      if (local_toc_syms)
8709 			(*_bfd_error_handler)
8710 			  (_("%s defined on removed toc entry"),
8711 			   bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
8712 		      do
8713 			++i;
8714 		      while ((skip[i] & (ref_from_discarded | can_optimize)));
8715 		      sym->st_value = (bfd_vma) i << 3;
8716 		    }
8717 
8718 		  sym->st_value -= skip[i];
8719 		  symtab_hdr->contents = (unsigned char *) local_syms;
8720 		}
8721 
8722 	  /* Adjust any global syms defined in this toc input section.  */
8723 	  if (toc_inf.global_toc_syms)
8724 	    {
8725 	      toc_inf.toc = toc;
8726 	      toc_inf.skip = skip;
8727 	      toc_inf.global_toc_syms = FALSE;
8728 	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
8729 				      &toc_inf);
8730 	    }
8731 
8732 	  if (toc->reloc_count != 0)
8733 	    {
8734 	      Elf_Internal_Shdr *rel_hdr;
8735 	      Elf_Internal_Rela *wrel;
8736 	      bfd_size_type sz;
8737 
8738 	      /* Remove unused toc relocs, and adjust those we keep.  */
8739 	      if (toc_relocs == NULL)
8740 		toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8741 							info->keep_memory);
8742 	      if (toc_relocs == NULL)
8743 		goto error_ret;
8744 
8745 	      wrel = toc_relocs;
8746 	      for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8747 		if ((skip[rel->r_offset >> 3]
8748 		     & (ref_from_discarded | can_optimize)) == 0)
8749 		  {
8750 		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
8751 		    wrel->r_info = rel->r_info;
8752 		    wrel->r_addend = rel->r_addend;
8753 		    ++wrel;
8754 		  }
8755 		else if (!dec_dynrel_count (rel->r_info, toc, info,
8756 					    &local_syms, NULL, NULL))
8757 		  goto error_ret;
8758 
8759 	      elf_section_data (toc)->relocs = toc_relocs;
8760 	      toc->reloc_count = wrel - toc_relocs;
8761 	      rel_hdr = _bfd_elf_single_rel_hdr (toc);
8762 	      sz = rel_hdr->sh_entsize;
8763 	      rel_hdr->sh_size = toc->reloc_count * sz;
8764 	    }
8765 	}
8766       else if (toc_relocs != NULL
8767 	       && elf_section_data (toc)->relocs != toc_relocs)
8768 	free (toc_relocs);
8769 
8770       if (local_syms != NULL
8771 	  && symtab_hdr->contents != (unsigned char *) local_syms)
8772 	{
8773 	  if (!info->keep_memory)
8774 	    free (local_syms);
8775 	  else
8776 	    symtab_hdr->contents = (unsigned char *) local_syms;
8777 	}
8778       free (skip);
8779     }
8780 
8781   return TRUE;
8782 }
8783 
8784 /* Return true iff input section I references the TOC using
8785    instructions limited to +/-32k offsets.  */
8786 
8787 bfd_boolean
8788 ppc64_elf_has_small_toc_reloc (asection *i)
8789 {
8790   return (is_ppc64_elf (i->owner)
8791 	  && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
8792 }
8793 
8794 /* Allocate space for one GOT entry.  */
8795 
8796 static void
8797 allocate_got (struct elf_link_hash_entry *h,
8798 	      struct bfd_link_info *info,
8799 	      struct got_entry *gent)
8800 {
8801   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8802   bfd_boolean dyn;
8803   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
8804   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
8805 		 ? 16 : 8);
8806   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
8807 		  ? 2 : 1) * sizeof (Elf64_External_Rela);
8808   asection *got = ppc64_elf_tdata (gent->owner)->got;
8809 
8810   gent->got.offset = got->size;
8811   got->size += entsize;
8812 
8813   dyn = htab->elf.dynamic_sections_created;
8814   if ((info->shared
8815        || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
8816 	    && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8817 		|| h->root.type != bfd_link_hash_undefweak))
8818     {
8819       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
8820       relgot->size += rentsize;
8821     }
8822   else if (h->type == STT_GNU_IFUNC)
8823     {
8824       asection *relgot = htab->reliplt;
8825       relgot->size += rentsize;
8826       htab->got_reli_size += rentsize;
8827     }
8828 }
8829 
8830 /* This function merges got entries in the same toc group.  */
8831 
8832 static void
8833 merge_got_entries (struct got_entry **pent)
8834 {
8835   struct got_entry *ent, *ent2;
8836 
8837   for (ent = *pent; ent != NULL; ent = ent->next)
8838     if (!ent->is_indirect)
8839       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
8840 	if (!ent2->is_indirect
8841 	    && ent2->addend == ent->addend
8842 	    && ent2->tls_type == ent->tls_type
8843 	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
8844 	  {
8845 	    ent2->is_indirect = TRUE;
8846 	    ent2->got.ent = ent;
8847 	  }
8848 }
8849 
8850 /* Allocate space in .plt, .got and associated reloc sections for
8851    dynamic relocs.  */
8852 
8853 static bfd_boolean
8854 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8855 {
8856   struct bfd_link_info *info;
8857   struct ppc_link_hash_table *htab;
8858   asection *s;
8859   struct ppc_link_hash_entry *eh;
8860   struct elf_dyn_relocs *p;
8861   struct got_entry **pgent, *gent;
8862 
8863   if (h->root.type == bfd_link_hash_indirect)
8864     return TRUE;
8865 
8866   info = (struct bfd_link_info *) inf;
8867   htab = ppc_hash_table (info);
8868   if (htab == NULL)
8869     return FALSE;
8870 
8871   if ((htab->elf.dynamic_sections_created
8872        && h->dynindx != -1
8873        && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
8874       || h->type == STT_GNU_IFUNC)
8875     {
8876       struct plt_entry *pent;
8877       bfd_boolean doneone = FALSE;
8878       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
8879 	if (pent->plt.refcount > 0)
8880 	  {
8881 	    if (!htab->elf.dynamic_sections_created
8882 		|| h->dynindx == -1)
8883 	      {
8884 		s = htab->iplt;
8885 		pent->plt.offset = s->size;
8886 		s->size += PLT_ENTRY_SIZE;
8887 		s = htab->reliplt;
8888 	      }
8889 	    else
8890 	      {
8891 		/* If this is the first .plt entry, make room for the special
8892 		   first entry.  */
8893 		s = htab->plt;
8894 		if (s->size == 0)
8895 		  s->size += PLT_INITIAL_ENTRY_SIZE;
8896 
8897 		pent->plt.offset = s->size;
8898 
8899 		/* Make room for this entry.  */
8900 		s->size += PLT_ENTRY_SIZE;
8901 
8902 		/* Make room for the .glink code.  */
8903 		s = htab->glink;
8904 		if (s->size == 0)
8905 		  s->size += GLINK_CALL_STUB_SIZE;
8906 		/* We need bigger stubs past index 32767.  */
8907 		if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
8908 		  s->size += 4;
8909 		s->size += 2*4;
8910 
8911 		/* We also need to make an entry in the .rela.plt section.  */
8912 		s = htab->relplt;
8913 	      }
8914 	    s->size += sizeof (Elf64_External_Rela);
8915 	    doneone = TRUE;
8916 	  }
8917 	else
8918 	  pent->plt.offset = (bfd_vma) -1;
8919       if (!doneone)
8920 	{
8921 	  h->plt.plist = NULL;
8922 	  h->needs_plt = 0;
8923 	}
8924     }
8925   else
8926     {
8927       h->plt.plist = NULL;
8928       h->needs_plt = 0;
8929     }
8930 
8931   eh = (struct ppc_link_hash_entry *) h;
8932   /* Run through the TLS GD got entries first if we're changing them
8933      to TPREL.  */
8934   if ((eh->tls_mask & TLS_TPRELGD) != 0)
8935     for (gent = h->got.glist; gent != NULL; gent = gent->next)
8936       if (gent->got.refcount > 0
8937 	  && (gent->tls_type & TLS_GD) != 0)
8938 	{
8939 	  /* This was a GD entry that has been converted to TPREL.  If
8940 	     there happens to be a TPREL entry we can use that one.  */
8941 	  struct got_entry *ent;
8942 	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
8943 	    if (ent->got.refcount > 0
8944 		&& (ent->tls_type & TLS_TPREL) != 0
8945 		&& ent->addend == gent->addend
8946 		&& ent->owner == gent->owner)
8947 	      {
8948 		gent->got.refcount = 0;
8949 		break;
8950 	      }
8951 
8952 	  /* If not, then we'll be using our own TPREL entry.  */
8953 	  if (gent->got.refcount != 0)
8954 	    gent->tls_type = TLS_TLS | TLS_TPREL;
8955 	}
8956 
8957   /* Remove any list entry that won't generate a word in the GOT before
8958      we call merge_got_entries.  Otherwise we risk merging to empty
8959      entries.  */
8960   pgent = &h->got.glist;
8961   while ((gent = *pgent) != NULL)
8962     if (gent->got.refcount > 0)
8963       {
8964 	if ((gent->tls_type & TLS_LD) != 0
8965 	    && !h->def_dynamic)
8966 	  {
8967 	    ppc64_tlsld_got (gent->owner)->got.refcount += 1;
8968 	    *pgent = gent->next;
8969 	  }
8970 	else
8971 	  pgent = &gent->next;
8972       }
8973     else
8974       *pgent = gent->next;
8975 
8976   if (!htab->do_multi_toc)
8977     merge_got_entries (&h->got.glist);
8978 
8979   for (gent = h->got.glist; gent != NULL; gent = gent->next)
8980     if (!gent->is_indirect)
8981       {
8982 	/* Make sure this symbol is output as a dynamic symbol.
8983 	   Undefined weak syms won't yet be marked as dynamic,
8984 	   nor will all TLS symbols.  */
8985 	if (h->dynindx == -1
8986 	    && !h->forced_local
8987 	    && h->type != STT_GNU_IFUNC
8988 	    && htab->elf.dynamic_sections_created)
8989 	  {
8990 	    if (! bfd_elf_link_record_dynamic_symbol (info, h))
8991 	      return FALSE;
8992 	  }
8993 
8994 	if (!is_ppc64_elf (gent->owner))
8995 	  abort ();
8996 
8997 	allocate_got (h, info, gent);
8998       }
8999 
9000   if (eh->dyn_relocs == NULL
9001       || (!htab->elf.dynamic_sections_created
9002 	  && h->type != STT_GNU_IFUNC))
9003     return TRUE;
9004 
9005   /* In the shared -Bsymbolic case, discard space allocated for
9006      dynamic pc-relative relocs against symbols which turn out to be
9007      defined in regular objects.  For the normal shared case, discard
9008      space for relocs that have become local due to symbol visibility
9009      changes.  */
9010 
9011   if (info->shared)
9012     {
9013       /* Relocs that use pc_count are those that appear on a call insn,
9014 	 or certain REL relocs (see must_be_dyn_reloc) that can be
9015 	 generated via assembly.  We want calls to protected symbols to
9016 	 resolve directly to the function rather than going via the plt.
9017 	 If people want function pointer comparisons to work as expected
9018 	 then they should avoid writing weird assembly.  */
9019       if (SYMBOL_CALLS_LOCAL (info, h))
9020 	{
9021 	  struct elf_dyn_relocs **pp;
9022 
9023 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9024 	    {
9025 	      p->count -= p->pc_count;
9026 	      p->pc_count = 0;
9027 	      if (p->count == 0)
9028 		*pp = p->next;
9029 	      else
9030 		pp = &p->next;
9031 	    }
9032 	}
9033 
9034       /* Also discard relocs on undefined weak syms with non-default
9035 	 visibility.  */
9036       if (eh->dyn_relocs != NULL
9037 	  && h->root.type == bfd_link_hash_undefweak)
9038 	{
9039 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9040 	    eh->dyn_relocs = NULL;
9041 
9042 	  /* Make sure this symbol is output as a dynamic symbol.
9043 	     Undefined weak syms won't yet be marked as dynamic.  */
9044 	  else if (h->dynindx == -1
9045 		   && !h->forced_local)
9046 	    {
9047 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9048 		return FALSE;
9049 	    }
9050 	}
9051     }
9052   else if (h->type == STT_GNU_IFUNC)
9053     {
9054       if (!h->non_got_ref)
9055 	eh->dyn_relocs = NULL;
9056     }
9057   else if (ELIMINATE_COPY_RELOCS)
9058     {
9059       /* For the non-shared case, discard space for relocs against
9060 	 symbols which turn out to need copy relocs or are not
9061 	 dynamic.  */
9062 
9063       if (!h->non_got_ref
9064 	  && !h->def_regular)
9065 	{
9066 	  /* Make sure this symbol is output as a dynamic symbol.
9067 	     Undefined weak syms won't yet be marked as dynamic.  */
9068 	  if (h->dynindx == -1
9069 	      && !h->forced_local)
9070 	    {
9071 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9072 		return FALSE;
9073 	    }
9074 
9075 	  /* If that succeeded, we know we'll be keeping all the
9076 	     relocs.  */
9077 	  if (h->dynindx != -1)
9078 	    goto keep;
9079 	}
9080 
9081       eh->dyn_relocs = NULL;
9082 
9083     keep: ;
9084     }
9085 
9086   /* Finally, allocate space.  */
9087   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9088     {
9089       asection *sreloc = elf_section_data (p->sec)->sreloc;
9090       if (!htab->elf.dynamic_sections_created)
9091 	sreloc = htab->reliplt;
9092       sreloc->size += p->count * sizeof (Elf64_External_Rela);
9093     }
9094 
9095   return TRUE;
9096 }
9097 
9098 /* Find any dynamic relocs that apply to read-only sections.  */
9099 
9100 static bfd_boolean
9101 readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9102 {
9103   struct ppc_link_hash_entry *eh;
9104   struct elf_dyn_relocs *p;
9105 
9106   eh = (struct ppc_link_hash_entry *) h;
9107   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9108     {
9109       asection *s = p->sec->output_section;
9110 
9111       if (s != NULL && (s->flags & SEC_READONLY) != 0)
9112 	{
9113 	  struct bfd_link_info *info = inf;
9114 
9115           if (info->warn_shared_textrel)
9116             (*_bfd_error_handler)
9117               (_("warning: dynamic relocation in readonly section `%s'"),
9118               h->root.root.string);
9119 	  info->flags |= DF_TEXTREL;
9120 
9121 	  /* Not an error, just cut short the traversal.  */
9122 	  return FALSE;
9123 	}
9124     }
9125   return TRUE;
9126 }
9127 
9128 /* Set the sizes of the dynamic sections.  */
9129 
9130 static bfd_boolean
9131 ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
9132 				 struct bfd_link_info *info)
9133 {
9134   struct ppc_link_hash_table *htab;
9135   bfd *dynobj;
9136   asection *s;
9137   bfd_boolean relocs;
9138   bfd *ibfd;
9139   struct got_entry *first_tlsld;
9140 
9141   htab = ppc_hash_table (info);
9142   if (htab == NULL)
9143     return FALSE;
9144 
9145   dynobj = htab->elf.dynobj;
9146   if (dynobj == NULL)
9147     abort ();
9148 
9149   if (htab->elf.dynamic_sections_created)
9150     {
9151       /* Set the contents of the .interp section to the interpreter.  */
9152       if (info->executable)
9153 	{
9154 	  s = bfd_get_linker_section (dynobj, ".interp");
9155 	  if (s == NULL)
9156 	    abort ();
9157 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9158 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9159 	}
9160     }
9161 
9162   /* Set up .got offsets for local syms, and space for local dynamic
9163      relocs.  */
9164   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9165     {
9166       struct got_entry **lgot_ents;
9167       struct got_entry **end_lgot_ents;
9168       struct plt_entry **local_plt;
9169       struct plt_entry **end_local_plt;
9170       unsigned char *lgot_masks;
9171       bfd_size_type locsymcount;
9172       Elf_Internal_Shdr *symtab_hdr;
9173       asection *srel;
9174 
9175       if (!is_ppc64_elf (ibfd))
9176 	continue;
9177 
9178       for (s = ibfd->sections; s != NULL; s = s->next)
9179 	{
9180 	  struct elf_dyn_relocs *p;
9181 
9182 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9183 	    {
9184 	      if (!bfd_is_abs_section (p->sec)
9185 		  && bfd_is_abs_section (p->sec->output_section))
9186 		{
9187 		  /* Input section has been discarded, either because
9188 		     it is a copy of a linkonce section or due to
9189 		     linker script /DISCARD/, so we'll be discarding
9190 		     the relocs too.  */
9191 		}
9192 	      else if (p->count != 0)
9193 		{
9194 		  srel = elf_section_data (p->sec)->sreloc;
9195 		  if (!htab->elf.dynamic_sections_created)
9196 		    srel = htab->reliplt;
9197 		  srel->size += p->count * sizeof (Elf64_External_Rela);
9198 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9199 		    {
9200 		      if (info->warn_shared_textrel)
9201 			(*_bfd_error_handler)
9202 			  (_("warning: dynamic relocation in readonly section `%s'"),
9203 			  p->sec->output_section->name);
9204 		      info->flags |= DF_TEXTREL;
9205 		    }
9206 		}
9207 	    }
9208 	}
9209 
9210       lgot_ents = elf_local_got_ents (ibfd);
9211       if (!lgot_ents)
9212 	continue;
9213 
9214       symtab_hdr = &elf_symtab_hdr (ibfd);
9215       locsymcount = symtab_hdr->sh_info;
9216       end_lgot_ents = lgot_ents + locsymcount;
9217       local_plt = (struct plt_entry **) end_lgot_ents;
9218       end_local_plt = local_plt + locsymcount;
9219       lgot_masks = (unsigned char *) end_local_plt;
9220       s = ppc64_elf_tdata (ibfd)->got;
9221       srel = ppc64_elf_tdata (ibfd)->relgot;
9222       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9223 	{
9224 	  struct got_entry **pent, *ent;
9225 
9226 	  pent = lgot_ents;
9227 	  while ((ent = *pent) != NULL)
9228 	    if (ent->got.refcount > 0)
9229 	      {
9230 		if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9231 		  {
9232 		    ppc64_tlsld_got (ibfd)->got.refcount += 1;
9233 		    *pent = ent->next;
9234 		  }
9235 		else
9236 		  {
9237 		    unsigned int num = 1;
9238 		    ent->got.offset = s->size;
9239 		    if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9240 		      num = 2;
9241 		    s->size += num * 8;
9242 		    if (info->shared)
9243 		      srel->size += num * sizeof (Elf64_External_Rela);
9244 		    else if ((*lgot_masks & PLT_IFUNC) != 0)
9245 		      {
9246 			htab->reliplt->size
9247 			  += num * sizeof (Elf64_External_Rela);
9248 			htab->got_reli_size
9249 			  += num * sizeof (Elf64_External_Rela);
9250 		      }
9251 		    pent = &ent->next;
9252 		  }
9253 	      }
9254 	    else
9255 	      *pent = ent->next;
9256 	}
9257 
9258       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
9259       for (; local_plt < end_local_plt; ++local_plt)
9260 	{
9261 	  struct plt_entry *ent;
9262 
9263 	  for (ent = *local_plt; ent != NULL; ent = ent->next)
9264 	    if (ent->plt.refcount > 0)
9265 	      {
9266 		s = htab->iplt;
9267 		ent->plt.offset = s->size;
9268 		s->size += PLT_ENTRY_SIZE;
9269 
9270 		htab->reliplt->size += sizeof (Elf64_External_Rela);
9271 	      }
9272 	    else
9273 	      ent->plt.offset = (bfd_vma) -1;
9274 	}
9275     }
9276 
9277   /* Allocate global sym .plt and .got entries, and space for global
9278      sym dynamic relocs.  */
9279   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9280 
9281   first_tlsld = NULL;
9282   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9283     {
9284       struct got_entry *ent;
9285 
9286       if (!is_ppc64_elf (ibfd))
9287 	continue;
9288 
9289       ent = ppc64_tlsld_got (ibfd);
9290       if (ent->got.refcount > 0)
9291 	{
9292 	  if (!htab->do_multi_toc && first_tlsld != NULL)
9293 	    {
9294 	      ent->is_indirect = TRUE;
9295 	      ent->got.ent = first_tlsld;
9296 	    }
9297 	  else
9298 	    {
9299 	      if (first_tlsld == NULL)
9300 		first_tlsld = ent;
9301 	      s = ppc64_elf_tdata (ibfd)->got;
9302 	      ent->got.offset = s->size;
9303 	      ent->owner = ibfd;
9304 	      s->size += 16;
9305 	      if (info->shared)
9306 		{
9307 		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9308 		  srel->size += sizeof (Elf64_External_Rela);
9309 		}
9310 	    }
9311 	}
9312       else
9313 	ent->got.offset = (bfd_vma) -1;
9314     }
9315 
9316   /* We now have determined the sizes of the various dynamic sections.
9317      Allocate memory for them.  */
9318   relocs = FALSE;
9319   for (s = dynobj->sections; s != NULL; s = s->next)
9320     {
9321       if ((s->flags & SEC_LINKER_CREATED) == 0)
9322 	continue;
9323 
9324       if (s == htab->brlt || s == htab->relbrlt)
9325 	/* These haven't been allocated yet;  don't strip.  */
9326 	continue;
9327       else if (s == htab->got
9328 	       || s == htab->plt
9329 	       || s == htab->iplt
9330 	       || s == htab->glink
9331 	       || s == htab->dynbss)
9332 	{
9333 	  /* Strip this section if we don't need it; see the
9334 	     comment below.  */
9335 	}
9336       else if (s == htab->glink_eh_frame)
9337 	{
9338 	  if (!bfd_is_abs_section (s->output_section))
9339 	    /* Not sized yet.  */
9340 	    continue;
9341 	}
9342       else if (CONST_STRNEQ (s->name, ".rela"))
9343 	{
9344 	  if (s->size != 0)
9345 	    {
9346 	      if (s != htab->relplt)
9347 		relocs = TRUE;
9348 
9349 	      /* We use the reloc_count field as a counter if we need
9350 		 to copy relocs into the output file.  */
9351 	      s->reloc_count = 0;
9352 	    }
9353 	}
9354       else
9355 	{
9356 	  /* It's not one of our sections, so don't allocate space.  */
9357 	  continue;
9358 	}
9359 
9360       if (s->size == 0)
9361 	{
9362 	  /* If we don't need this section, strip it from the
9363 	     output file.  This is mostly to handle .rela.bss and
9364 	     .rela.plt.  We must create both sections in
9365 	     create_dynamic_sections, because they must be created
9366 	     before the linker maps input sections to output
9367 	     sections.  The linker does that before
9368 	     adjust_dynamic_symbol is called, and it is that
9369 	     function which decides whether anything needs to go
9370 	     into these sections.  */
9371 	  s->flags |= SEC_EXCLUDE;
9372 	  continue;
9373 	}
9374 
9375       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9376 	continue;
9377 
9378       /* Allocate memory for the section contents.  We use bfd_zalloc
9379 	 here in case unused entries are not reclaimed before the
9380 	 section's contents are written out.  This should not happen,
9381 	 but this way if it does we get a R_PPC64_NONE reloc in .rela
9382 	 sections instead of garbage.
9383 	 We also rely on the section contents being zero when writing
9384 	 the GOT.  */
9385       s->contents = bfd_zalloc (dynobj, s->size);
9386       if (s->contents == NULL)
9387 	return FALSE;
9388     }
9389 
9390   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9391     {
9392       if (!is_ppc64_elf (ibfd))
9393 	continue;
9394 
9395       s = ppc64_elf_tdata (ibfd)->got;
9396       if (s != NULL && s != htab->got)
9397 	{
9398 	  if (s->size == 0)
9399 	    s->flags |= SEC_EXCLUDE;
9400 	  else
9401 	    {
9402 	      s->contents = bfd_zalloc (ibfd, s->size);
9403 	      if (s->contents == NULL)
9404 		return FALSE;
9405 	    }
9406 	}
9407       s = ppc64_elf_tdata (ibfd)->relgot;
9408       if (s != NULL)
9409 	{
9410 	  if (s->size == 0)
9411 	    s->flags |= SEC_EXCLUDE;
9412 	  else
9413 	    {
9414 	      s->contents = bfd_zalloc (ibfd, s->size);
9415 	      if (s->contents == NULL)
9416 		return FALSE;
9417 	      relocs = TRUE;
9418 	      s->reloc_count = 0;
9419 	    }
9420 	}
9421     }
9422 
9423   if (htab->elf.dynamic_sections_created)
9424     {
9425       /* Add some entries to the .dynamic section.  We fill in the
9426 	 values later, in ppc64_elf_finish_dynamic_sections, but we
9427 	 must add the entries now so that we get the correct size for
9428 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
9429 	 dynamic linker and used by the debugger.  */
9430 #define add_dynamic_entry(TAG, VAL) \
9431   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
9432 
9433       if (info->executable)
9434 	{
9435 	  if (!add_dynamic_entry (DT_DEBUG, 0))
9436 	    return FALSE;
9437 	}
9438 
9439       if (htab->plt != NULL && htab->plt->size != 0)
9440 	{
9441 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
9442 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
9443 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
9444 	      || !add_dynamic_entry (DT_JMPREL, 0)
9445 	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
9446 	    return FALSE;
9447 	}
9448 
9449       if (NO_OPD_RELOCS)
9450 	{
9451 	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
9452 	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
9453 	    return FALSE;
9454 	}
9455 
9456       if (!htab->no_tls_get_addr_opt
9457 	  && htab->tls_get_addr_fd != NULL
9458 	  && htab->tls_get_addr_fd->elf.plt.plist != NULL
9459 	  && !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
9460 	return FALSE;
9461 
9462       if (relocs)
9463 	{
9464 	  if (!add_dynamic_entry (DT_RELA, 0)
9465 	      || !add_dynamic_entry (DT_RELASZ, 0)
9466 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
9467 	    return FALSE;
9468 
9469 	  /* If any dynamic relocs apply to a read-only section,
9470 	     then we need a DT_TEXTREL entry.  */
9471 	  if ((info->flags & DF_TEXTREL) == 0)
9472 	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
9473 
9474 	  if ((info->flags & DF_TEXTREL) != 0)
9475 	    {
9476 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
9477 		return FALSE;
9478 	    }
9479 	}
9480     }
9481 #undef add_dynamic_entry
9482 
9483   return TRUE;
9484 }
9485 
9486 /* Determine the type of stub needed, if any, for a call.  */
9487 
9488 static inline enum ppc_stub_type
9489 ppc_type_of_stub (asection *input_sec,
9490 		  const Elf_Internal_Rela *rel,
9491 		  struct ppc_link_hash_entry **hash,
9492 		  struct plt_entry **plt_ent,
9493 		  bfd_vma destination)
9494 {
9495   struct ppc_link_hash_entry *h = *hash;
9496   bfd_vma location;
9497   bfd_vma branch_offset;
9498   bfd_vma max_branch_offset;
9499   enum elf_ppc64_reloc_type r_type;
9500 
9501   if (h != NULL)
9502     {
9503       struct plt_entry *ent;
9504       struct ppc_link_hash_entry *fdh = h;
9505       if (h->oh != NULL
9506 	  && h->oh->is_func_descriptor)
9507 	{
9508 	  fdh = ppc_follow_link (h->oh);
9509 	  *hash = fdh;
9510 	}
9511 
9512       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
9513 	if (ent->addend == rel->r_addend
9514 	    && ent->plt.offset != (bfd_vma) -1)
9515 	  {
9516 	    *plt_ent = ent;
9517 	    return ppc_stub_plt_call;
9518 	  }
9519 
9520       /* Here, we know we don't have a plt entry.  If we don't have a
9521 	 either a defined function descriptor or a defined entry symbol
9522 	 in a regular object file, then it is pointless trying to make
9523 	 any other type of stub.  */
9524       if (!is_static_defined (&fdh->elf)
9525 	  && !is_static_defined (&h->elf))
9526 	return ppc_stub_none;
9527     }
9528   else if (elf_local_got_ents (input_sec->owner) != NULL)
9529     {
9530       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
9531       struct plt_entry **local_plt = (struct plt_entry **)
9532 	elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
9533       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
9534 
9535       if (local_plt[r_symndx] != NULL)
9536 	{
9537 	  struct plt_entry *ent;
9538 
9539 	  for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
9540 	    if (ent->addend == rel->r_addend
9541 		&& ent->plt.offset != (bfd_vma) -1)
9542 	      {
9543 		*plt_ent = ent;
9544 		return ppc_stub_plt_call;
9545 	      }
9546 	}
9547     }
9548 
9549   /* Determine where the call point is.  */
9550   location = (input_sec->output_offset
9551 	      + input_sec->output_section->vma
9552 	      + rel->r_offset);
9553 
9554   branch_offset = destination - location;
9555   r_type = ELF64_R_TYPE (rel->r_info);
9556 
9557   /* Determine if a long branch stub is needed.  */
9558   max_branch_offset = 1 << 25;
9559   if (r_type != R_PPC64_REL24)
9560     max_branch_offset = 1 << 15;
9561 
9562   if (branch_offset + max_branch_offset >= 2 * max_branch_offset)
9563     /* We need a stub.  Figure out whether a long_branch or plt_branch
9564        is needed later.  */
9565     return ppc_stub_long_branch;
9566 
9567   return ppc_stub_none;
9568 }
9569 
9570 /* With power7 weakly ordered memory model, it is possible for ld.so
9571    to update a plt entry in one thread and have another thread see a
9572    stale zero toc entry.  To avoid this we need some sort of acquire
9573    barrier in the call stub.  One solution is to make the load of the
9574    toc word seem to appear to depend on the load of the function entry
9575    word.  Another solution is to test for r2 being zero, and branch to
9576    the appropriate glink entry if so.
9577 
9578    .	fake dep barrier	compare
9579    .	ld 11,xxx(2)		ld 11,xxx(2)
9580    .	mtctr 11		mtctr 11
9581    .	xor 11,11,11		ld 2,xxx+8(2)
9582    .	add 2,2,11		cmpldi 2,0
9583    .	ld 2,xxx+8(2)		bnectr+
9584    .	bctr			b <glink_entry>
9585 
9586    The solution involving the compare turns out to be faster, so
9587    that's what we use unless the branch won't reach.  */
9588 
9589 #define ALWAYS_USE_FAKE_DEP 0
9590 #define ALWAYS_EMIT_R2SAVE 0
9591 
9592 #define PPC_LO(v) ((v) & 0xffff)
9593 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9594 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9595 
9596 static inline unsigned int
9597 plt_stub_size (struct ppc_link_hash_table *htab,
9598 	       struct ppc_stub_hash_entry *stub_entry,
9599 	       bfd_vma off)
9600 {
9601   unsigned size = PLT_CALL_STUB_SIZE;
9602 
9603   if (!(ALWAYS_EMIT_R2SAVE
9604 	|| stub_entry->stub_type == ppc_stub_plt_call_r2save))
9605     size -= 4;
9606   if (!htab->plt_static_chain)
9607     size -= 4;
9608   if (htab->plt_thread_safe)
9609     size += 8;
9610   if (PPC_HA (off) == 0)
9611     size -= 4;
9612   if (PPC_HA (off + 8 + 8 * htab->plt_static_chain) != PPC_HA (off))
9613     size += 4;
9614   if (stub_entry->h != NULL
9615       && (stub_entry->h == htab->tls_get_addr_fd
9616 	  || stub_entry->h == htab->tls_get_addr)
9617       && !htab->no_tls_get_addr_opt)
9618     size += 13 * 4;
9619   return size;
9620 }
9621 
9622 /* If this stub would cross fewer 2**plt_stub_align boundaries if we align,
9623    then return the padding needed to do so.  */
9624 static inline unsigned int
9625 plt_stub_pad (struct ppc_link_hash_table *htab,
9626 	      struct ppc_stub_hash_entry *stub_entry,
9627 	      bfd_vma plt_off)
9628 {
9629   int stub_align = 1 << htab->plt_stub_align;
9630   unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
9631   bfd_vma stub_off = stub_entry->stub_sec->size;
9632 
9633   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
9634       > (stub_size & -stub_align))
9635     return stub_align - (stub_off & (stub_align - 1));
9636   return 0;
9637 }
9638 
9639 /* Build a .plt call stub.  */
9640 
9641 static inline bfd_byte *
9642 build_plt_stub (struct ppc_link_hash_table *htab,
9643 		struct ppc_stub_hash_entry *stub_entry,
9644 		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
9645 {
9646   bfd *obfd = htab->stub_bfd;
9647   bfd_boolean plt_static_chain = htab->plt_static_chain;
9648   bfd_boolean plt_thread_safe = htab->plt_thread_safe;
9649   bfd_boolean use_fake_dep = plt_thread_safe;
9650   bfd_vma cmp_branch_off = 0;
9651 
9652   if (!ALWAYS_USE_FAKE_DEP
9653       && plt_thread_safe
9654       && !(stub_entry->h != NULL
9655 	   && (stub_entry->h == htab->tls_get_addr_fd
9656 	       || stub_entry->h == htab->tls_get_addr)
9657 	   && !htab->no_tls_get_addr_opt))
9658     {
9659       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
9660       bfd_vma pltindex = (pltoff - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE;
9661       bfd_vma glinkoff = GLINK_CALL_STUB_SIZE + pltindex * 8;
9662       bfd_vma to, from;
9663 
9664       if (pltindex > 32768)
9665 	glinkoff += (pltindex - 32768) * 4;
9666       to = (glinkoff
9667 	    + htab->glink->output_offset
9668 	    + htab->glink->output_section->vma);
9669       from = (p - stub_entry->stub_sec->contents
9670 	      + 4 * (ALWAYS_EMIT_R2SAVE
9671 		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9672 	      + 4 * (PPC_HA (offset) != 0)
9673 	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
9674 		     != PPC_HA (offset))
9675 	      + 4 * (plt_static_chain != 0)
9676 	      + 20
9677 	      + stub_entry->stub_sec->output_offset
9678 	      + stub_entry->stub_sec->output_section->vma);
9679       cmp_branch_off = to - from;
9680       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
9681     }
9682 
9683   if (PPC_HA (offset) != 0)
9684     {
9685       if (r != NULL)
9686 	{
9687 	  if (ALWAYS_EMIT_R2SAVE
9688 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9689 	    r[0].r_offset += 4;
9690 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
9691 	  r[1].r_offset = r[0].r_offset + 4;
9692 	  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9693 	  r[1].r_addend = r[0].r_addend;
9694 	  if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9695 	    {
9696 	      r[2].r_offset = r[1].r_offset + 4;
9697 	      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
9698 	      r[2].r_addend = r[0].r_addend;
9699 	    }
9700 	  else
9701 	    {
9702 	      r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
9703 	      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9704 	      r[2].r_addend = r[0].r_addend + 8;
9705 	      if (plt_static_chain)
9706 		{
9707 		  r[3].r_offset = r[2].r_offset + 4;
9708 		  r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9709 		  r[3].r_addend = r[0].r_addend + 16;
9710 		}
9711 	    }
9712 	}
9713       if (ALWAYS_EMIT_R2SAVE
9714 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9715 	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
9716       bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
9717       bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),	p += 4;
9718       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9719 	{
9720 	  bfd_put_32 (obfd, ADDI_R12_R12 | PPC_LO (offset), p),	p += 4;
9721 	  offset = 0;
9722 	}
9723       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
9724       if (use_fake_dep)
9725 	{
9726 	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
9727 	  bfd_put_32 (obfd, ADD_R12_R12_R11, p),		p += 4;
9728 	}
9729       bfd_put_32 (obfd, LD_R2_0R12 | PPC_LO (offset + 8), p),	p += 4;
9730       if (plt_static_chain)
9731 	bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset + 16), p), p += 4;
9732     }
9733   else
9734     {
9735       if (r != NULL)
9736 	{
9737 	  if (ALWAYS_EMIT_R2SAVE
9738 	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9739 	    r[0].r_offset += 4;
9740 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9741 	  if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9742 	    {
9743 	      r[1].r_offset = r[0].r_offset + 4;
9744 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
9745 	      r[1].r_addend = r[0].r_addend;
9746 	    }
9747 	  else
9748 	    {
9749 	      r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
9750 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9751 	      r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
9752 	      if (plt_static_chain)
9753 		{
9754 		  r[2].r_offset = r[1].r_offset + 4;
9755 		  r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
9756 		  r[2].r_addend = r[0].r_addend + 8;
9757 		}
9758 	    }
9759 	}
9760       if (ALWAYS_EMIT_R2SAVE
9761 	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9762 	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
9763       bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset), p),	p += 4;
9764       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
9765 	{
9766 	  bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),	p += 4;
9767 	  offset = 0;
9768 	}
9769       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
9770       if (use_fake_dep)
9771 	{
9772 	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
9773 	  bfd_put_32 (obfd, ADD_R2_R2_R11, p),			p += 4;
9774 	}
9775       if (plt_static_chain)
9776 	bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
9777       bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p),	p += 4;
9778     }
9779   if (plt_thread_safe && !use_fake_dep)
9780     {
9781       bfd_put_32 (obfd, CMPLDI_R2_0, p),			p += 4;
9782       bfd_put_32 (obfd, BNECTR_P4, p),				p += 4;
9783       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
9784     }
9785   else
9786     bfd_put_32 (obfd, BCTR, p),					p += 4;
9787   return p;
9788 }
9789 
9790 /* Build a special .plt call stub for __tls_get_addr.  */
9791 
9792 #define LD_R11_0R3	0xe9630000
9793 #define LD_R12_0R3	0xe9830000
9794 #define MR_R0_R3	0x7c601b78
9795 #define CMPDI_R11_0	0x2c2b0000
9796 #define ADD_R3_R12_R13	0x7c6c6a14
9797 #define BEQLR		0x4d820020
9798 #define MR_R3_R0	0x7c030378
9799 #define MFLR_R11	0x7d6802a6
9800 #define STD_R11_0R1	0xf9610000
9801 #define BCTRL		0x4e800421
9802 #define LD_R11_0R1	0xe9610000
9803 #define LD_R2_0R1	0xe8410000
9804 #define MTLR_R11	0x7d6803a6
9805 
9806 static inline bfd_byte *
9807 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
9808 			 struct ppc_stub_hash_entry *stub_entry,
9809 			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
9810 {
9811   bfd *obfd = htab->stub_bfd;
9812 
9813   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),		p += 4;
9814   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
9815   bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
9816   bfd_put_32 (obfd, CMPDI_R11_0, p),		p += 4;
9817   bfd_put_32 (obfd, ADD_R3_R12_R13, p),		p += 4;
9818   bfd_put_32 (obfd, BEQLR, p),			p += 4;
9819   bfd_put_32 (obfd, MR_R3_R0, p),		p += 4;
9820   bfd_put_32 (obfd, MFLR_R11, p),		p += 4;
9821   bfd_put_32 (obfd, STD_R11_0R1 + 32, p),	p += 4;
9822 
9823   if (r != NULL)
9824     r[0].r_offset += 9 * 4;
9825   p = build_plt_stub (htab, stub_entry, p, offset, r);
9826   bfd_put_32 (obfd, BCTRL, p - 4);
9827 
9828   bfd_put_32 (obfd, LD_R11_0R1 + 32, p),	p += 4;
9829   bfd_put_32 (obfd, LD_R2_0R1 + 40, p),		p += 4;
9830   bfd_put_32 (obfd, MTLR_R11, p),		p += 4;
9831   bfd_put_32 (obfd, BLR, p),			p += 4;
9832 
9833   return p;
9834 }
9835 
9836 static Elf_Internal_Rela *
9837 get_relocs (asection *sec, int count)
9838 {
9839   Elf_Internal_Rela *relocs;
9840   struct bfd_elf_section_data *elfsec_data;
9841 
9842   elfsec_data = elf_section_data (sec);
9843   relocs = elfsec_data->relocs;
9844   if (relocs == NULL)
9845     {
9846       bfd_size_type relsize;
9847       relsize = sec->reloc_count * sizeof (*relocs);
9848       relocs = bfd_alloc (sec->owner, relsize);
9849       if (relocs == NULL)
9850 	return NULL;
9851       elfsec_data->relocs = relocs;
9852       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
9853 					  sizeof (Elf_Internal_Shdr));
9854       if (elfsec_data->rela.hdr == NULL)
9855 	return NULL;
9856       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
9857 					* sizeof (Elf64_External_Rela));
9858       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
9859       sec->reloc_count = 0;
9860     }
9861   relocs += sec->reloc_count;
9862   sec->reloc_count += count;
9863   return relocs;
9864 }
9865 
9866 static bfd_vma
9867 get_r2off (struct bfd_link_info *info,
9868 	   struct ppc_stub_hash_entry *stub_entry)
9869 {
9870   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9871   bfd_vma r2off = htab->stub_group[stub_entry->target_section->id].toc_off;
9872 
9873   if (r2off == 0)
9874     {
9875       /* Support linking -R objects.  Get the toc pointer from the
9876 	 opd entry.  */
9877       char buf[8];
9878       asection *opd = stub_entry->h->elf.root.u.def.section;
9879       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
9880 
9881       if (strcmp (opd->name, ".opd") != 0
9882 	  || opd->reloc_count != 0)
9883 	{
9884 	  info->callbacks->einfo (_("%P: cannot find opd entry toc for `%T'\n"),
9885 				  stub_entry->h->elf.root.root.string);
9886 	  bfd_set_error (bfd_error_bad_value);
9887 	  return 0;
9888 	}
9889       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
9890 	return 0;
9891       r2off = bfd_get_64 (opd->owner, buf);
9892       r2off -= elf_gp (info->output_bfd);
9893     }
9894   r2off -= htab->stub_group[stub_entry->id_sec->id].toc_off;
9895   return r2off;
9896 }
9897 
9898 static bfd_boolean
9899 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
9900 {
9901   struct ppc_stub_hash_entry *stub_entry;
9902   struct ppc_branch_hash_entry *br_entry;
9903   struct bfd_link_info *info;
9904   struct ppc_link_hash_table *htab;
9905   bfd_byte *loc;
9906   bfd_byte *p;
9907   bfd_vma dest, off;
9908   int size;
9909   Elf_Internal_Rela *r;
9910   asection *plt;
9911 
9912   /* Massage our args to the form they really have.  */
9913   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
9914   info = in_arg;
9915 
9916   htab = ppc_hash_table (info);
9917   if (htab == NULL)
9918     return FALSE;
9919 
9920   /* Make a note of the offset within the stubs for this entry.  */
9921   stub_entry->stub_offset = stub_entry->stub_sec->size;
9922   loc = stub_entry->stub_sec->contents + stub_entry->stub_offset;
9923 
9924   htab->stub_count[stub_entry->stub_type - 1] += 1;
9925   switch (stub_entry->stub_type)
9926     {
9927     case ppc_stub_long_branch:
9928     case ppc_stub_long_branch_r2off:
9929       /* Branches are relative.  This is where we are going to.  */
9930       off = dest = (stub_entry->target_value
9931 		    + stub_entry->target_section->output_offset
9932 		    + stub_entry->target_section->output_section->vma);
9933 
9934       /* And this is where we are coming from.  */
9935       off -= (stub_entry->stub_offset
9936 	      + stub_entry->stub_sec->output_offset
9937 	      + stub_entry->stub_sec->output_section->vma);
9938 
9939       size = 4;
9940       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
9941 	{
9942 	  bfd_vma r2off = get_r2off (info, stub_entry);
9943 
9944 	  if (r2off == 0)
9945 	    {
9946 	      htab->stub_error = TRUE;
9947 	      return FALSE;
9948 	    }
9949 	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
9950 	  loc += 4;
9951 	  size = 12;
9952 	  if (PPC_HA (r2off) != 0)
9953 	    {
9954 	      size = 16;
9955 	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
9956 	      loc += 4;
9957 	    }
9958 	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
9959 	  loc += 4;
9960 	  off -= size - 4;
9961 	}
9962       bfd_put_32 (htab->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
9963 
9964       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
9965 	{
9966 	  info->callbacks->einfo
9967 	    (_("%P: long branch stub `%s' offset overflow\n"),
9968 	     stub_entry->root.string);
9969 	  htab->stub_error = TRUE;
9970 	  return FALSE;
9971 	}
9972 
9973       if (info->emitrelocations)
9974 	{
9975 	  r = get_relocs (stub_entry->stub_sec, 1);
9976 	  if (r == NULL)
9977 	    return FALSE;
9978 	  r->r_offset = loc - stub_entry->stub_sec->contents;
9979 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
9980 	  r->r_addend = dest;
9981 	  if (stub_entry->h != NULL)
9982 	    {
9983 	      struct elf_link_hash_entry **hashes;
9984 	      unsigned long symndx;
9985 	      struct ppc_link_hash_entry *h;
9986 
9987 	      hashes = elf_sym_hashes (htab->stub_bfd);
9988 	      if (hashes == NULL)
9989 		{
9990 		  bfd_size_type hsize;
9991 
9992 		  hsize = (htab->stub_globals + 1) * sizeof (*hashes);
9993 		  hashes = bfd_zalloc (htab->stub_bfd, hsize);
9994 		  if (hashes == NULL)
9995 		    return FALSE;
9996 		  elf_sym_hashes (htab->stub_bfd) = hashes;
9997 		  htab->stub_globals = 1;
9998 		}
9999 	      symndx = htab->stub_globals++;
10000 	      h = stub_entry->h;
10001 	      hashes[symndx] = &h->elf;
10002 	      r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24);
10003 	      if (h->oh != NULL && h->oh->is_func)
10004 		h = ppc_follow_link (h->oh);
10005 	      if (h->elf.root.u.def.section != stub_entry->target_section)
10006 		/* H is an opd symbol.  The addend must be zero.  */
10007 		r->r_addend = 0;
10008 	      else
10009 		{
10010 		  off = (h->elf.root.u.def.value
10011 			 + h->elf.root.u.def.section->output_offset
10012 			 + h->elf.root.u.def.section->output_section->vma);
10013 		  r->r_addend -= off;
10014 		}
10015 	    }
10016 	}
10017       break;
10018 
10019     case ppc_stub_plt_branch:
10020     case ppc_stub_plt_branch_r2off:
10021       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10022 					 stub_entry->root.string + 9,
10023 					 FALSE, FALSE);
10024       if (br_entry == NULL)
10025 	{
10026 	  info->callbacks->einfo (_("%P: can't find branch stub `%s'\n"),
10027 				  stub_entry->root.string);
10028 	  htab->stub_error = TRUE;
10029 	  return FALSE;
10030 	}
10031 
10032       dest = (stub_entry->target_value
10033 	      + stub_entry->target_section->output_offset
10034 	      + stub_entry->target_section->output_section->vma);
10035 
10036       bfd_put_64 (htab->brlt->owner, dest,
10037 		  htab->brlt->contents + br_entry->offset);
10038 
10039       if (br_entry->iter == htab->stub_iteration)
10040 	{
10041 	  br_entry->iter = 0;
10042 
10043 	  if (htab->relbrlt != NULL)
10044 	    {
10045 	      /* Create a reloc for the branch lookup table entry.  */
10046 	      Elf_Internal_Rela rela;
10047 	      bfd_byte *rl;
10048 
10049 	      rela.r_offset = (br_entry->offset
10050 			       + htab->brlt->output_offset
10051 			       + htab->brlt->output_section->vma);
10052 	      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10053 	      rela.r_addend = dest;
10054 
10055 	      rl = htab->relbrlt->contents;
10056 	      rl += (htab->relbrlt->reloc_count++
10057 		     * sizeof (Elf64_External_Rela));
10058 	      bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
10059 	    }
10060 	  else if (info->emitrelocations)
10061 	    {
10062 	      r = get_relocs (htab->brlt, 1);
10063 	      if (r == NULL)
10064 		return FALSE;
10065 	      /* brlt, being SEC_LINKER_CREATED does not go through the
10066 		 normal reloc processing.  Symbols and offsets are not
10067 		 translated from input file to output file form, so
10068 		 set up the offset per the output file.  */
10069 	      r->r_offset = (br_entry->offset
10070 			     + htab->brlt->output_offset
10071 			     + htab->brlt->output_section->vma);
10072 	      r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10073 	      r->r_addend = dest;
10074 	    }
10075 	}
10076 
10077       dest = (br_entry->offset
10078 	      + htab->brlt->output_offset
10079 	      + htab->brlt->output_section->vma);
10080 
10081       off = (dest
10082 	     - elf_gp (htab->brlt->output_section->owner)
10083 	     - htab->stub_group[stub_entry->id_sec->id].toc_off);
10084 
10085       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10086 	{
10087 	  info->callbacks->einfo
10088 	    (_("%P: linkage table error against `%T'\n"),
10089 	     stub_entry->root.string);
10090 	  bfd_set_error (bfd_error_bad_value);
10091 	  htab->stub_error = TRUE;
10092 	  return FALSE;
10093 	}
10094 
10095       if (info->emitrelocations)
10096 	{
10097 	  r = get_relocs (stub_entry->stub_sec, 1 + (PPC_HA (off) != 0));
10098 	  if (r == NULL)
10099 	    return FALSE;
10100 	  r[0].r_offset = loc - stub_entry->stub_sec->contents;
10101 	  if (bfd_big_endian (info->output_bfd))
10102 	    r[0].r_offset += 2;
10103 	  if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
10104 	    r[0].r_offset += 4;
10105 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10106 	  r[0].r_addend = dest;
10107 	  if (PPC_HA (off) != 0)
10108 	    {
10109 	      r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10110 	      r[1].r_offset = r[0].r_offset + 4;
10111 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10112 	      r[1].r_addend = r[0].r_addend;
10113 	    }
10114 	}
10115 
10116       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10117 	{
10118 	  if (PPC_HA (off) != 0)
10119 	    {
10120 	      size = 16;
10121 	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc);
10122 	      loc += 4;
10123 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc);
10124 	    }
10125 	  else
10126 	    {
10127 	      size = 12;
10128 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc);
10129 	    }
10130 	}
10131       else
10132 	{
10133 	  bfd_vma r2off = get_r2off (info, stub_entry);
10134 
10135 	  if (r2off == 0)
10136 	    {
10137 	      htab->stub_error = TRUE;
10138 	      return FALSE;
10139 	    }
10140 
10141 	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
10142 	  loc += 4;
10143 	  size = 20;
10144 	  if (PPC_HA (off) != 0)
10145 	    {
10146 	      size += 4;
10147 	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc);
10148 	      loc += 4;
10149 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc);
10150 	      loc += 4;
10151 	    }
10152 	  else
10153 	    {
10154 	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc);
10155 	      loc += 4;
10156 	    }
10157 
10158 	  if (PPC_HA (r2off) != 0)
10159 	    {
10160 	      size += 4;
10161 	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
10162 	      loc += 4;
10163 	    }
10164 	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
10165 	}
10166       loc += 4;
10167       bfd_put_32 (htab->stub_bfd, MTCTR_R11, loc);
10168       loc += 4;
10169       bfd_put_32 (htab->stub_bfd, BCTR, loc);
10170       break;
10171 
10172     case ppc_stub_plt_call:
10173     case ppc_stub_plt_call_r2save:
10174       if (stub_entry->h != NULL
10175 	  && stub_entry->h->is_func_descriptor
10176 	  && stub_entry->h->oh != NULL)
10177 	{
10178 	  struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
10179 
10180 	  /* If the old-ABI "dot-symbol" is undefined make it weak so
10181 	     we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.
10182 	     FIXME: We used to define the symbol on one of the call
10183 	     stubs instead, which is why we test symbol section id
10184 	     against htab->top_id in various places.  Likely all
10185 	     these checks could now disappear.  */
10186 	  if (fh->elf.root.type == bfd_link_hash_undefined)
10187 	    fh->elf.root.type = bfd_link_hash_undefweak;
10188 	  /* Stop undo_symbol_twiddle changing it back to undefined.  */
10189 	  fh->was_undefined = 0;
10190 	}
10191 
10192       /* Now build the stub.  */
10193       dest = stub_entry->plt_ent->plt.offset & ~1;
10194       if (dest >= (bfd_vma) -2)
10195 	abort ();
10196 
10197       plt = htab->plt;
10198       if (!htab->elf.dynamic_sections_created
10199 	  || stub_entry->h == NULL
10200 	  || stub_entry->h->elf.dynindx == -1)
10201 	plt = htab->iplt;
10202 
10203       dest += plt->output_offset + plt->output_section->vma;
10204 
10205       if (stub_entry->h == NULL
10206 	  && (stub_entry->plt_ent->plt.offset & 1) == 0)
10207 	{
10208 	  Elf_Internal_Rela rela;
10209 	  bfd_byte *rl;
10210 
10211 	  rela.r_offset = dest;
10212 	  rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
10213 	  rela.r_addend = (stub_entry->target_value
10214 			   + stub_entry->target_section->output_offset
10215 			   + stub_entry->target_section->output_section->vma);
10216 
10217 	  rl = (htab->reliplt->contents
10218 		+ (htab->reliplt->reloc_count++
10219 		   * sizeof (Elf64_External_Rela)));
10220 	  bfd_elf64_swap_reloca_out (info->output_bfd, &rela, rl);
10221 	  stub_entry->plt_ent->plt.offset |= 1;
10222 	}
10223 
10224       off = (dest
10225 	     - elf_gp (plt->output_section->owner)
10226 	     - htab->stub_group[stub_entry->id_sec->id].toc_off);
10227 
10228       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10229 	{
10230 	  info->callbacks->einfo
10231 	    (_("%P: linkage table error against `%T'\n"),
10232 	     stub_entry->h != NULL
10233 	     ? stub_entry->h->elf.root.root.string
10234 	     : "<local sym>");
10235 	  bfd_set_error (bfd_error_bad_value);
10236 	  htab->stub_error = TRUE;
10237 	  return FALSE;
10238 	}
10239 
10240       if (htab->plt_stub_align != 0)
10241 	{
10242 	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
10243 
10244 	  stub_entry->stub_sec->size += pad;
10245 	  stub_entry->stub_offset = stub_entry->stub_sec->size;
10246 	  loc += pad;
10247 	}
10248 
10249       r = NULL;
10250       if (info->emitrelocations)
10251 	{
10252 	  r = get_relocs (stub_entry->stub_sec,
10253 			  (2
10254 			   + (PPC_HA (off) != 0)
10255 			   + (htab->plt_static_chain
10256 			      && PPC_HA (off + 16) == PPC_HA (off))));
10257 	  if (r == NULL)
10258 	    return FALSE;
10259 	  r[0].r_offset = loc - stub_entry->stub_sec->contents;
10260 	  if (bfd_big_endian (info->output_bfd))
10261 	    r[0].r_offset += 2;
10262 	  r[0].r_addend = dest;
10263 	}
10264       if (stub_entry->h != NULL
10265 	  && (stub_entry->h == htab->tls_get_addr_fd
10266 	      || stub_entry->h == htab->tls_get_addr)
10267 	  && !htab->no_tls_get_addr_opt)
10268 	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
10269       else
10270 	p = build_plt_stub (htab, stub_entry, loc, off, r);
10271       size = p - loc;
10272       break;
10273 
10274     default:
10275       BFD_FAIL ();
10276       return FALSE;
10277     }
10278 
10279   stub_entry->stub_sec->size += size;
10280 
10281   if (htab->emit_stub_syms)
10282     {
10283       struct elf_link_hash_entry *h;
10284       size_t len1, len2;
10285       char *name;
10286       const char *const stub_str[] = { "long_branch",
10287 				       "long_branch_r2off",
10288 				       "plt_branch",
10289 				       "plt_branch_r2off",
10290 				       "plt_call",
10291 				       "plt_call" };
10292 
10293       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
10294       len2 = strlen (stub_entry->root.string);
10295       name = bfd_malloc (len1 + len2 + 2);
10296       if (name == NULL)
10297 	return FALSE;
10298       memcpy (name, stub_entry->root.string, 9);
10299       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
10300       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
10301       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
10302       if (h == NULL)
10303 	return FALSE;
10304       if (h->root.type == bfd_link_hash_new)
10305 	{
10306 	  h->root.type = bfd_link_hash_defined;
10307 	  h->root.u.def.section = stub_entry->stub_sec;
10308 	  h->root.u.def.value = stub_entry->stub_offset;
10309 	  h->ref_regular = 1;
10310 	  h->def_regular = 1;
10311 	  h->ref_regular_nonweak = 1;
10312 	  h->forced_local = 1;
10313 	  h->non_elf = 0;
10314 	}
10315     }
10316 
10317   return TRUE;
10318 }
10319 
10320 /* As above, but don't actually build the stub.  Just bump offset so
10321    we know stub section sizes, and select plt_branch stubs where
10322    long_branch stubs won't do.  */
10323 
10324 static bfd_boolean
10325 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10326 {
10327   struct ppc_stub_hash_entry *stub_entry;
10328   struct bfd_link_info *info;
10329   struct ppc_link_hash_table *htab;
10330   bfd_vma off;
10331   int size;
10332 
10333   /* Massage our args to the form they really have.  */
10334   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10335   info = in_arg;
10336 
10337   htab = ppc_hash_table (info);
10338   if (htab == NULL)
10339     return FALSE;
10340 
10341   if (stub_entry->stub_type == ppc_stub_plt_call
10342       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10343     {
10344       asection *plt;
10345       off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
10346       if (off >= (bfd_vma) -2)
10347 	abort ();
10348       plt = htab->plt;
10349       if (!htab->elf.dynamic_sections_created
10350 	  || stub_entry->h == NULL
10351 	  || stub_entry->h->elf.dynindx == -1)
10352 	plt = htab->iplt;
10353       off += (plt->output_offset
10354 	      + plt->output_section->vma
10355 	      - elf_gp (plt->output_section->owner)
10356 	      - htab->stub_group[stub_entry->id_sec->id].toc_off);
10357 
10358       size = plt_stub_size (htab, stub_entry, off);
10359       if (htab->plt_stub_align)
10360 	size += plt_stub_pad (htab, stub_entry, off);
10361       if (info->emitrelocations)
10362 	{
10363 	  stub_entry->stub_sec->reloc_count
10364 	    += (2
10365 		+ (PPC_HA (off) != 0)
10366 		+ (htab->plt_static_chain
10367 		   && PPC_HA (off + 16) == PPC_HA (off)));
10368 	  stub_entry->stub_sec->flags |= SEC_RELOC;
10369 	}
10370     }
10371   else
10372     {
10373       /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
10374 	 variants.  */
10375       bfd_vma r2off = 0;
10376 
10377       off = (stub_entry->target_value
10378 	     + stub_entry->target_section->output_offset
10379 	     + stub_entry->target_section->output_section->vma);
10380       off -= (stub_entry->stub_sec->size
10381 	      + stub_entry->stub_sec->output_offset
10382 	      + stub_entry->stub_sec->output_section->vma);
10383 
10384       /* Reset the stub type from the plt variant in case we now
10385 	 can reach with a shorter stub.  */
10386       if (stub_entry->stub_type >= ppc_stub_plt_branch)
10387 	stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
10388 
10389       size = 4;
10390       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10391 	{
10392 	  r2off = get_r2off (info, stub_entry);
10393 	  if (r2off == 0)
10394 	    {
10395 	      htab->stub_error = TRUE;
10396 	      return FALSE;
10397 	    }
10398 	  size = 12;
10399 	  if (PPC_HA (r2off) != 0)
10400 	    size = 16;
10401 	  off -= size - 4;
10402 	}
10403 
10404       /* If the branch offset if too big, use a ppc_stub_plt_branch.  */
10405       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
10406 	{
10407 	  struct ppc_branch_hash_entry *br_entry;
10408 
10409 	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10410 					     stub_entry->root.string + 9,
10411 					     TRUE, FALSE);
10412 	  if (br_entry == NULL)
10413 	    {
10414 	      info->callbacks->einfo (_("%P: can't build branch stub `%s'\n"),
10415 				      stub_entry->root.string);
10416 	      htab->stub_error = TRUE;
10417 	      return FALSE;
10418 	    }
10419 
10420 	  if (br_entry->iter != htab->stub_iteration)
10421 	    {
10422 	      br_entry->iter = htab->stub_iteration;
10423 	      br_entry->offset = htab->brlt->size;
10424 	      htab->brlt->size += 8;
10425 
10426 	      if (htab->relbrlt != NULL)
10427 		htab->relbrlt->size += sizeof (Elf64_External_Rela);
10428 	      else if (info->emitrelocations)
10429 		{
10430 		  htab->brlt->reloc_count += 1;
10431 		  htab->brlt->flags |= SEC_RELOC;
10432 		}
10433 	    }
10434 
10435 	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
10436 	  off = (br_entry->offset
10437 		 + htab->brlt->output_offset
10438 		 + htab->brlt->output_section->vma
10439 		 - elf_gp (htab->brlt->output_section->owner)
10440 		 - htab->stub_group[stub_entry->id_sec->id].toc_off);
10441 
10442 	  if (info->emitrelocations)
10443 	    {
10444 	      stub_entry->stub_sec->reloc_count += 1 + (PPC_HA (off) != 0);
10445 	      stub_entry->stub_sec->flags |= SEC_RELOC;
10446 	    }
10447 
10448 	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10449 	    {
10450 	      size = 12;
10451 	      if (PPC_HA (off) != 0)
10452 		size = 16;
10453 	    }
10454 	  else
10455 	    {
10456 	      size = 20;
10457 	      if (PPC_HA (off) != 0)
10458 		size += 4;
10459 
10460 	      if (PPC_HA (r2off) != 0)
10461 		size += 4;
10462 	    }
10463 	}
10464       else if (info->emitrelocations)
10465 	{
10466 	  stub_entry->stub_sec->reloc_count += 1;
10467 	  stub_entry->stub_sec->flags |= SEC_RELOC;
10468 	}
10469     }
10470 
10471   stub_entry->stub_sec->size += size;
10472   return TRUE;
10473 }
10474 
10475 /* Set up various things so that we can make a list of input sections
10476    for each output section included in the link.  Returns -1 on error,
10477    0 when no stubs will be needed, and 1 on success.  */
10478 
10479 int
10480 ppc64_elf_setup_section_lists
10481   (struct bfd_link_info *info,
10482    asection *(*add_stub_section) (const char *, asection *),
10483    void (*layout_sections_again) (void))
10484 {
10485   bfd *input_bfd;
10486   int top_id, top_index, id;
10487   asection *section;
10488   asection **input_list;
10489   bfd_size_type amt;
10490   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10491 
10492   if (htab == NULL)
10493     return -1;
10494   /* Stash our params away.  */
10495   htab->add_stub_section = add_stub_section;
10496   htab->layout_sections_again = layout_sections_again;
10497 
10498   if (htab->brlt == NULL)
10499     return 0;
10500 
10501   /* Find the top input section id.  */
10502   for (input_bfd = info->input_bfds, top_id = 3;
10503        input_bfd != NULL;
10504        input_bfd = input_bfd->link_next)
10505     {
10506       for (section = input_bfd->sections;
10507 	   section != NULL;
10508 	   section = section->next)
10509 	{
10510 	  if (top_id < section->id)
10511 	    top_id = section->id;
10512 	}
10513     }
10514 
10515   htab->top_id = top_id;
10516   amt = sizeof (struct map_stub) * (top_id + 1);
10517   htab->stub_group = bfd_zmalloc (amt);
10518   if (htab->stub_group == NULL)
10519     return -1;
10520 
10521   /* Set toc_off for com, und, abs and ind sections.  */
10522   for (id = 0; id < 3; id++)
10523     htab->stub_group[id].toc_off = TOC_BASE_OFF;
10524 
10525   /* We can't use output_bfd->section_count here to find the top output
10526      section index as some sections may have been removed, and
10527      strip_excluded_output_sections doesn't renumber the indices.  */
10528   for (section = info->output_bfd->sections, top_index = 0;
10529        section != NULL;
10530        section = section->next)
10531     {
10532       if (top_index < section->index)
10533 	top_index = section->index;
10534     }
10535 
10536   htab->top_index = top_index;
10537   amt = sizeof (asection *) * (top_index + 1);
10538   input_list = bfd_zmalloc (amt);
10539   htab->input_list = input_list;
10540   if (input_list == NULL)
10541     return -1;
10542 
10543   return 1;
10544 }
10545 
10546 /* Set up for first pass at multitoc partitioning.  */
10547 
10548 void
10549 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
10550 {
10551   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10552 
10553   elf_gp (info->output_bfd) = ppc64_elf_toc (info->output_bfd);
10554   htab->toc_curr = elf_gp (info->output_bfd);
10555   htab->toc_bfd = NULL;
10556   htab->toc_first_sec = NULL;
10557 }
10558 
10559 /* The linker repeatedly calls this function for each TOC input section
10560    and linker generated GOT section.  Group input bfds such that the toc
10561    within a group is less than 64k in size.  */
10562 
10563 bfd_boolean
10564 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
10565 {
10566   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10567   bfd_vma addr, off, limit;
10568 
10569   if (htab == NULL)
10570     return FALSE;
10571 
10572   if (!htab->second_toc_pass)
10573     {
10574       /* Keep track of the first .toc or .got section for this input bfd.  */
10575       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
10576 
10577       if (new_bfd)
10578 	{
10579 	  htab->toc_bfd = isec->owner;
10580 	  htab->toc_first_sec = isec;
10581 	}
10582 
10583       addr = isec->output_offset + isec->output_section->vma;
10584       off = addr - htab->toc_curr;
10585       limit = 0x80008000;
10586       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
10587 	limit = 0x10000;
10588       if (off + isec->size > limit)
10589 	{
10590 	  addr = (htab->toc_first_sec->output_offset
10591 		  + htab->toc_first_sec->output_section->vma);
10592 	  htab->toc_curr = addr;
10593 	}
10594 
10595       /* toc_curr is the base address of this toc group.  Set elf_gp
10596 	 for the input section to be the offset relative to the
10597 	 output toc base plus 0x8000.  Making the input elf_gp an
10598 	 offset allows us to move the toc as a whole without
10599 	 recalculating input elf_gp.  */
10600       off = htab->toc_curr - elf_gp (isec->output_section->owner);
10601       off += TOC_BASE_OFF;
10602 
10603       /* Die if someone uses a linker script that doesn't keep input
10604 	 file .toc and .got together.  */
10605       if (new_bfd
10606 	  && elf_gp (isec->owner) != 0
10607 	  && elf_gp (isec->owner) != off)
10608 	return FALSE;
10609 
10610       elf_gp (isec->owner) = off;
10611       return TRUE;
10612     }
10613 
10614   /* During the second pass toc_first_sec points to the start of
10615      a toc group, and toc_curr is used to track the old elf_gp.
10616      We use toc_bfd to ensure we only look at each bfd once.  */
10617   if (htab->toc_bfd == isec->owner)
10618     return TRUE;
10619   htab->toc_bfd = isec->owner;
10620 
10621   if (htab->toc_first_sec == NULL
10622       || htab->toc_curr != elf_gp (isec->owner))
10623     {
10624       htab->toc_curr = elf_gp (isec->owner);
10625       htab->toc_first_sec = isec;
10626     }
10627   addr = (htab->toc_first_sec->output_offset
10628 	  + htab->toc_first_sec->output_section->vma);
10629   off = addr - elf_gp (isec->output_section->owner) + TOC_BASE_OFF;
10630   elf_gp (isec->owner) = off;
10631 
10632   return TRUE;
10633 }
10634 
10635 /* Called via elf_link_hash_traverse to merge GOT entries for global
10636    symbol H.  */
10637 
10638 static bfd_boolean
10639 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
10640 {
10641   if (h->root.type == bfd_link_hash_indirect)
10642     return TRUE;
10643 
10644   merge_got_entries (&h->got.glist);
10645 
10646   return TRUE;
10647 }
10648 
10649 /* Called via elf_link_hash_traverse to allocate GOT entries for global
10650    symbol H.  */
10651 
10652 static bfd_boolean
10653 reallocate_got (struct elf_link_hash_entry *h, void *inf)
10654 {
10655   struct got_entry *gent;
10656 
10657   if (h->root.type == bfd_link_hash_indirect)
10658     return TRUE;
10659 
10660   for (gent = h->got.glist; gent != NULL; gent = gent->next)
10661     if (!gent->is_indirect)
10662       allocate_got (h, (struct bfd_link_info *) inf, gent);
10663   return TRUE;
10664 }
10665 
10666 /* Called on the first multitoc pass after the last call to
10667    ppc64_elf_next_toc_section.  This function removes duplicate GOT
10668    entries.  */
10669 
10670 bfd_boolean
10671 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
10672 {
10673   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10674   struct bfd *ibfd, *ibfd2;
10675   bfd_boolean done_something;
10676 
10677   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
10678 
10679   if (!htab->do_multi_toc)
10680     return FALSE;
10681 
10682   /* Merge global sym got entries within a toc group.  */
10683   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
10684 
10685   /* And tlsld_got.  */
10686   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10687     {
10688       struct got_entry *ent, *ent2;
10689 
10690       if (!is_ppc64_elf (ibfd))
10691 	continue;
10692 
10693       ent = ppc64_tlsld_got (ibfd);
10694       if (!ent->is_indirect
10695 	  && ent->got.offset != (bfd_vma) -1)
10696 	{
10697 	  for (ibfd2 = ibfd->link_next; ibfd2 != NULL; ibfd2 = ibfd2->link_next)
10698 	    {
10699 	      if (!is_ppc64_elf (ibfd2))
10700 		continue;
10701 
10702 	      ent2 = ppc64_tlsld_got (ibfd2);
10703 	      if (!ent2->is_indirect
10704 		  && ent2->got.offset != (bfd_vma) -1
10705 		  && elf_gp (ibfd2) == elf_gp (ibfd))
10706 		{
10707 		  ent2->is_indirect = TRUE;
10708 		  ent2->got.ent = ent;
10709 		}
10710 	    }
10711 	}
10712     }
10713 
10714   /* Zap sizes of got sections.  */
10715   htab->reliplt->rawsize = htab->reliplt->size;
10716   htab->reliplt->size -= htab->got_reli_size;
10717   htab->got_reli_size = 0;
10718 
10719   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10720     {
10721       asection *got, *relgot;
10722 
10723       if (!is_ppc64_elf (ibfd))
10724 	continue;
10725 
10726       got = ppc64_elf_tdata (ibfd)->got;
10727       if (got != NULL)
10728 	{
10729 	  got->rawsize = got->size;
10730 	  got->size = 0;
10731 	  relgot = ppc64_elf_tdata (ibfd)->relgot;
10732 	  relgot->rawsize = relgot->size;
10733 	  relgot->size = 0;
10734 	}
10735     }
10736 
10737   /* Now reallocate the got, local syms first.  We don't need to
10738      allocate section contents again since we never increase size.  */
10739   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10740     {
10741       struct got_entry **lgot_ents;
10742       struct got_entry **end_lgot_ents;
10743       struct plt_entry **local_plt;
10744       struct plt_entry **end_local_plt;
10745       unsigned char *lgot_masks;
10746       bfd_size_type locsymcount;
10747       Elf_Internal_Shdr *symtab_hdr;
10748       asection *s, *srel;
10749 
10750       if (!is_ppc64_elf (ibfd))
10751 	continue;
10752 
10753       lgot_ents = elf_local_got_ents (ibfd);
10754       if (!lgot_ents)
10755 	continue;
10756 
10757       symtab_hdr = &elf_symtab_hdr (ibfd);
10758       locsymcount = symtab_hdr->sh_info;
10759       end_lgot_ents = lgot_ents + locsymcount;
10760       local_plt = (struct plt_entry **) end_lgot_ents;
10761       end_local_plt = local_plt + locsymcount;
10762       lgot_masks = (unsigned char *) end_local_plt;
10763       s = ppc64_elf_tdata (ibfd)->got;
10764       srel = ppc64_elf_tdata (ibfd)->relgot;
10765       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
10766 	{
10767 	  struct got_entry *ent;
10768 
10769 	  for (ent = *lgot_ents; ent != NULL; ent = ent->next)
10770 	    {
10771 	      unsigned int num = 1;
10772 	      ent->got.offset = s->size;
10773 	      if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
10774 		num = 2;
10775 	      s->size += num * 8;
10776 	      if (info->shared)
10777 		srel->size += num * sizeof (Elf64_External_Rela);
10778 	      else if ((*lgot_masks & PLT_IFUNC) != 0)
10779 		{
10780 		  htab->reliplt->size
10781 		    += num * sizeof (Elf64_External_Rela);
10782 		  htab->got_reli_size
10783 		    += num * sizeof (Elf64_External_Rela);
10784 		}
10785 	    }
10786 	}
10787     }
10788 
10789   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
10790 
10791   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10792     {
10793       struct got_entry *ent;
10794 
10795       if (!is_ppc64_elf (ibfd))
10796 	continue;
10797 
10798       ent = ppc64_tlsld_got (ibfd);
10799       if (!ent->is_indirect
10800 	  && ent->got.offset != (bfd_vma) -1)
10801 	{
10802 	  asection *s = ppc64_elf_tdata (ibfd)->got;
10803 	  ent->got.offset = s->size;
10804 	  s->size += 16;
10805 	  if (info->shared)
10806 	    {
10807 	      asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10808 	      srel->size += sizeof (Elf64_External_Rela);
10809 	    }
10810 	}
10811     }
10812 
10813   done_something = htab->reliplt->rawsize != htab->reliplt->size;
10814   if (!done_something)
10815     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10816       {
10817 	asection *got;
10818 
10819 	if (!is_ppc64_elf (ibfd))
10820 	  continue;
10821 
10822 	got = ppc64_elf_tdata (ibfd)->got;
10823 	if (got != NULL)
10824 	  {
10825 	    done_something = got->rawsize != got->size;
10826 	    if (done_something)
10827 	      break;
10828 	  }
10829       }
10830 
10831   if (done_something)
10832     (*htab->layout_sections_again) ();
10833 
10834   /* Set up for second pass over toc sections to recalculate elf_gp
10835      on input sections.  */
10836   htab->toc_bfd = NULL;
10837   htab->toc_first_sec = NULL;
10838   htab->second_toc_pass = TRUE;
10839   return done_something;
10840 }
10841 
10842 /* Called after second pass of multitoc partitioning.  */
10843 
10844 void
10845 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
10846 {
10847   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10848 
10849   /* After the second pass, toc_curr tracks the TOC offset used
10850      for code sections below in ppc64_elf_next_input_section.  */
10851   htab->toc_curr = TOC_BASE_OFF;
10852 }
10853 
10854 /* No toc references were found in ISEC.  If the code in ISEC makes no
10855    calls, then there's no need to use toc adjusting stubs when branching
10856    into ISEC.  Actually, indirect calls from ISEC are OK as they will
10857    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
10858    needed, and 2 if a cyclical call-graph was found but no other reason
10859    for a stub was detected.  If called from the top level, a return of
10860    2 means the same as a return of 0.  */
10861 
10862 static int
10863 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
10864 {
10865   int ret;
10866 
10867   /* Mark this section as checked.  */
10868   isec->call_check_done = 1;
10869 
10870   /* We know none of our code bearing sections will need toc stubs.  */
10871   if ((isec->flags & SEC_LINKER_CREATED) != 0)
10872     return 0;
10873 
10874   if (isec->size == 0)
10875     return 0;
10876 
10877   if (isec->output_section == NULL)
10878     return 0;
10879 
10880   ret = 0;
10881   if (isec->reloc_count != 0)
10882     {
10883       Elf_Internal_Rela *relstart, *rel;
10884       Elf_Internal_Sym *local_syms;
10885       struct ppc_link_hash_table *htab;
10886 
10887       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
10888 					    info->keep_memory);
10889       if (relstart == NULL)
10890 	return -1;
10891 
10892       /* Look for branches to outside of this section.  */
10893       local_syms = NULL;
10894       htab = ppc_hash_table (info);
10895       if (htab == NULL)
10896 	return -1;
10897 
10898       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
10899 	{
10900 	  enum elf_ppc64_reloc_type r_type;
10901 	  unsigned long r_symndx;
10902 	  struct elf_link_hash_entry *h;
10903 	  struct ppc_link_hash_entry *eh;
10904 	  Elf_Internal_Sym *sym;
10905 	  asection *sym_sec;
10906 	  struct _opd_sec_data *opd;
10907 	  bfd_vma sym_value;
10908 	  bfd_vma dest;
10909 
10910 	  r_type = ELF64_R_TYPE (rel->r_info);
10911 	  if (r_type != R_PPC64_REL24
10912 	      && r_type != R_PPC64_REL14
10913 	      && r_type != R_PPC64_REL14_BRTAKEN
10914 	      && r_type != R_PPC64_REL14_BRNTAKEN)
10915 	    continue;
10916 
10917 	  r_symndx = ELF64_R_SYM (rel->r_info);
10918 	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
10919 			  isec->owner))
10920 	    {
10921 	      ret = -1;
10922 	      break;
10923 	    }
10924 
10925 	  /* Calls to dynamic lib functions go through a plt call stub
10926 	     that uses r2.  */
10927 	  eh = (struct ppc_link_hash_entry *) h;
10928 	  if (eh != NULL
10929 	      && (eh->elf.plt.plist != NULL
10930 		  || (eh->oh != NULL
10931 		      && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
10932 	    {
10933 	      ret = 1;
10934 	      break;
10935 	    }
10936 
10937 	  if (sym_sec == NULL)
10938 	    /* Ignore other undefined symbols.  */
10939 	    continue;
10940 
10941 	  /* Assume branches to other sections not included in the
10942 	     link need stubs too, to cover -R and absolute syms.  */
10943 	  if (sym_sec->output_section == NULL)
10944 	    {
10945 	      ret = 1;
10946 	      break;
10947 	    }
10948 
10949 	  if (h == NULL)
10950 	    sym_value = sym->st_value;
10951 	  else
10952 	    {
10953 	      if (h->root.type != bfd_link_hash_defined
10954 		  && h->root.type != bfd_link_hash_defweak)
10955 		abort ();
10956 	      sym_value = h->root.u.def.value;
10957 	    }
10958 	  sym_value += rel->r_addend;
10959 
10960 	  /* If this branch reloc uses an opd sym, find the code section.  */
10961 	  opd = get_opd_info (sym_sec);
10962 	  if (opd != NULL)
10963 	    {
10964 	      if (h == NULL && opd->adjust != NULL)
10965 		{
10966 		  long adjust;
10967 
10968 		  adjust = opd->adjust[sym->st_value / 8];
10969 		  if (adjust == -1)
10970 		    /* Assume deleted functions won't ever be called.  */
10971 		    continue;
10972 		  sym_value += adjust;
10973 		}
10974 
10975 	      dest = opd_entry_value (sym_sec, sym_value,
10976 				      &sym_sec, NULL, FALSE);
10977 	      if (dest == (bfd_vma) -1)
10978 		continue;
10979 	    }
10980 	  else
10981 	    dest = (sym_value
10982 		    + sym_sec->output_offset
10983 		    + sym_sec->output_section->vma);
10984 
10985 	  /* Ignore branch to self.  */
10986 	  if (sym_sec == isec)
10987 	    continue;
10988 
10989 	  /* If the called function uses the toc, we need a stub.  */
10990 	  if (sym_sec->has_toc_reloc
10991 	      || sym_sec->makes_toc_func_call)
10992 	    {
10993 	      ret = 1;
10994 	      break;
10995 	    }
10996 
10997 	  /* Assume any branch that needs a long branch stub might in fact
10998 	     need a plt_branch stub.  A plt_branch stub uses r2.  */
10999 	  else if (dest - (isec->output_offset
11000 			   + isec->output_section->vma
11001 			   + rel->r_offset) + (1 << 25) >= (2 << 25))
11002 	    {
11003 	      ret = 1;
11004 	      break;
11005 	    }
11006 
11007 	  /* If calling back to a section in the process of being
11008 	     tested, we can't say for sure that no toc adjusting stubs
11009 	     are needed, so don't return zero.  */
11010 	  else if (sym_sec->call_check_in_progress)
11011 	    ret = 2;
11012 
11013 	  /* Branches to another section that itself doesn't have any TOC
11014 	     references are OK.  Recursively call ourselves to check.  */
11015 	  else if (!sym_sec->call_check_done)
11016 	    {
11017 	      int recur;
11018 
11019 	      /* Mark current section as indeterminate, so that other
11020 		 sections that call back to current won't be marked as
11021 		 known.  */
11022 	      isec->call_check_in_progress = 1;
11023 	      recur = toc_adjusting_stub_needed (info, sym_sec);
11024 	      isec->call_check_in_progress = 0;
11025 
11026 	      if (recur != 0)
11027 		{
11028 		  ret = recur;
11029 		  if (recur != 2)
11030 		    break;
11031 		}
11032 	    }
11033 	}
11034 
11035       if (local_syms != NULL
11036 	  && (elf_symtab_hdr (isec->owner).contents
11037 	      != (unsigned char *) local_syms))
11038 	free (local_syms);
11039       if (elf_section_data (isec)->relocs != relstart)
11040 	free (relstart);
11041     }
11042 
11043   if ((ret & 1) == 0
11044       && isec->map_head.s != NULL
11045       && (strcmp (isec->output_section->name, ".init") == 0
11046 	  || strcmp (isec->output_section->name, ".fini") == 0))
11047     {
11048       if (isec->map_head.s->has_toc_reloc
11049 	  || isec->map_head.s->makes_toc_func_call)
11050 	ret = 1;
11051       else if (!isec->map_head.s->call_check_done)
11052 	{
11053 	  int recur;
11054 	  isec->call_check_in_progress = 1;
11055 	  recur = toc_adjusting_stub_needed (info, isec->map_head.s);
11056 	  isec->call_check_in_progress = 0;
11057 	  if (recur != 0)
11058 	    ret = recur;
11059 	}
11060     }
11061 
11062   if (ret == 1)
11063     isec->makes_toc_func_call = 1;
11064 
11065   return ret;
11066 }
11067 
11068 /* The linker repeatedly calls this function for each input section,
11069    in the order that input sections are linked into output sections.
11070    Build lists of input sections to determine groupings between which
11071    we may insert linker stubs.  */
11072 
11073 bfd_boolean
11074 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
11075 {
11076   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11077 
11078   if (htab == NULL)
11079     return FALSE;
11080 
11081   if ((isec->output_section->flags & SEC_CODE) != 0
11082       && isec->output_section->index <= htab->top_index)
11083     {
11084       asection **list = htab->input_list + isec->output_section->index;
11085       /* Steal the link_sec pointer for our list.  */
11086 #define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
11087       /* This happens to make the list in reverse order,
11088 	 which is what we want.  */
11089       PREV_SEC (isec) = *list;
11090       *list = isec;
11091     }
11092 
11093   if (htab->multi_toc_needed)
11094     {
11095       /* If a code section has a function that uses the TOC then we need
11096 	 to use the right TOC (obviously).  Also, make sure that .opd gets
11097 	 the correct TOC value for R_PPC64_TOC relocs that don't have or
11098 	 can't find their function symbol (shouldn't ever happen now).
11099 	 Also specially treat .fixup for the linux kernel.  .fixup
11100 	 contains branches, but only back to the function that hit an
11101 	 exception.  */
11102       if (isec->has_toc_reloc
11103 	  || (isec->flags & SEC_CODE) == 0
11104 	  || strcmp (isec->name, ".fixup") == 0)
11105 	{
11106 	  if (elf_gp (isec->owner) != 0)
11107 	    htab->toc_curr = elf_gp (isec->owner);
11108 	}
11109       else
11110 	{
11111 	  if (!isec->call_check_done
11112 	      && toc_adjusting_stub_needed (info, isec) < 0)
11113 	    return FALSE;
11114 	  /* If we make a local call from this section, ie. a branch
11115 	     without a following nop, then we have no place to put a
11116 	     toc restoring insn.  We must use the same toc group as
11117 	     the callee.
11118 	     Testing makes_toc_func_call actually tests for *any*
11119 	     calls to functions that need a good toc pointer.  A more
11120 	     precise test would be better, as this one will set
11121 	     incorrect values for pasted .init/.fini fragments.
11122 	     (Fixed later in check_pasted_section.)  */
11123 	  if (isec->makes_toc_func_call
11124 	      && elf_gp (isec->owner) != 0)
11125 	    htab->toc_curr = elf_gp (isec->owner);
11126 	}
11127     }
11128 
11129   /* Functions that don't use the TOC can belong in any TOC group.
11130      Use the last TOC base.  */
11131   htab->stub_group[isec->id].toc_off = htab->toc_curr;
11132   return TRUE;
11133 }
11134 
11135 /* Check that all .init and .fini sections use the same toc, if they
11136    have toc relocs.  */
11137 
11138 static bfd_boolean
11139 check_pasted_section (struct bfd_link_info *info, const char *name)
11140 {
11141   asection *o = bfd_get_section_by_name (info->output_bfd, name);
11142 
11143   if (o != NULL)
11144     {
11145       struct ppc_link_hash_table *htab = ppc_hash_table (info);
11146       bfd_vma toc_off = 0;
11147       asection *i;
11148 
11149       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11150 	if (i->has_toc_reloc)
11151 	  {
11152 	    if (toc_off == 0)
11153 	      toc_off = htab->stub_group[i->id].toc_off;
11154 	    else if (toc_off != htab->stub_group[i->id].toc_off)
11155 	      return FALSE;
11156 	  }
11157 
11158       if (toc_off == 0)
11159 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11160 	  if (i->makes_toc_func_call)
11161 	    {
11162 	      toc_off = htab->stub_group[i->id].toc_off;
11163 	      break;
11164 	    }
11165 
11166       /* Make sure the whole pasted function uses the same toc offset.  */
11167       if (toc_off != 0)
11168 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11169 	  htab->stub_group[i->id].toc_off = toc_off;
11170     }
11171   return TRUE;
11172 }
11173 
11174 bfd_boolean
11175 ppc64_elf_check_init_fini (struct bfd_link_info *info)
11176 {
11177   return (check_pasted_section (info, ".init")
11178 	  & check_pasted_section (info, ".fini"));
11179 }
11180 
11181 /* See whether we can group stub sections together.  Grouping stub
11182    sections may result in fewer stubs.  More importantly, we need to
11183    put all .init* and .fini* stubs at the beginning of the .init or
11184    .fini output sections respectively, because glibc splits the
11185    _init and _fini functions into multiple parts.  Putting a stub in
11186    the middle of a function is not a good idea.  */
11187 
11188 static void
11189 group_sections (struct ppc_link_hash_table *htab,
11190 		bfd_size_type stub_group_size,
11191 		bfd_boolean stubs_always_before_branch)
11192 {
11193   asection **list;
11194   bfd_size_type stub14_group_size;
11195   bfd_boolean suppress_size_errors;
11196 
11197   suppress_size_errors = FALSE;
11198   stub14_group_size = stub_group_size;
11199   if (stub_group_size == 1)
11200     {
11201       /* Default values.  */
11202       if (stubs_always_before_branch)
11203 	{
11204 	  stub_group_size = 0x1e00000;
11205 	  stub14_group_size = 0x7800;
11206 	}
11207       else
11208 	{
11209 	  stub_group_size = 0x1c00000;
11210 	  stub14_group_size = 0x7000;
11211 	}
11212       suppress_size_errors = TRUE;
11213     }
11214 
11215   list = htab->input_list + htab->top_index;
11216   do
11217     {
11218       asection *tail = *list;
11219       while (tail != NULL)
11220 	{
11221 	  asection *curr;
11222 	  asection *prev;
11223 	  bfd_size_type total;
11224 	  bfd_boolean big_sec;
11225 	  bfd_vma curr_toc;
11226 
11227 	  curr = tail;
11228 	  total = tail->size;
11229 	  big_sec = total > (ppc64_elf_section_data (tail) != NULL
11230 			     && ppc64_elf_section_data (tail)->has_14bit_branch
11231 			     ? stub14_group_size : stub_group_size);
11232 	  if (big_sec && !suppress_size_errors)
11233 	    (*_bfd_error_handler) (_("%B section %A exceeds stub group size"),
11234 				     tail->owner, tail);
11235 	  curr_toc = htab->stub_group[tail->id].toc_off;
11236 
11237 	  while ((prev = PREV_SEC (curr)) != NULL
11238 		 && ((total += curr->output_offset - prev->output_offset)
11239 		     < (ppc64_elf_section_data (prev) != NULL
11240 			&& ppc64_elf_section_data (prev)->has_14bit_branch
11241 			? stub14_group_size : stub_group_size))
11242 		 && htab->stub_group[prev->id].toc_off == curr_toc)
11243 	    curr = prev;
11244 
11245 	  /* OK, the size from the start of CURR to the end is less
11246 	     than stub_group_size and thus can be handled by one stub
11247 	     section.  (or the tail section is itself larger than
11248 	     stub_group_size, in which case we may be toast.)  We
11249 	     should really be keeping track of the total size of stubs
11250 	     added here, as stubs contribute to the final output
11251 	     section size.  That's a little tricky, and this way will
11252 	     only break if stubs added make the total size more than
11253 	     2^25, ie. for the default stub_group_size, if stubs total
11254 	     more than 2097152 bytes, or nearly 75000 plt call stubs.  */
11255 	  do
11256 	    {
11257 	      prev = PREV_SEC (tail);
11258 	      /* Set up this stub group.  */
11259 	      htab->stub_group[tail->id].link_sec = curr;
11260 	    }
11261 	  while (tail != curr && (tail = prev) != NULL);
11262 
11263 	  /* But wait, there's more!  Input sections up to stub_group_size
11264 	     bytes before the stub section can be handled by it too.
11265 	     Don't do this if we have a really large section after the
11266 	     stubs, as adding more stubs increases the chance that
11267 	     branches may not reach into the stub section.  */
11268 	  if (!stubs_always_before_branch && !big_sec)
11269 	    {
11270 	      total = 0;
11271 	      while (prev != NULL
11272 		     && ((total += tail->output_offset - prev->output_offset)
11273 			 < (ppc64_elf_section_data (prev) != NULL
11274 			    && ppc64_elf_section_data (prev)->has_14bit_branch
11275 			    ? stub14_group_size : stub_group_size))
11276 		     && htab->stub_group[prev->id].toc_off == curr_toc)
11277 		{
11278 		  tail = prev;
11279 		  prev = PREV_SEC (tail);
11280 		  htab->stub_group[tail->id].link_sec = curr;
11281 		}
11282 	    }
11283 	  tail = prev;
11284 	}
11285     }
11286   while (list-- != htab->input_list);
11287   free (htab->input_list);
11288 #undef PREV_SEC
11289 }
11290 
11291 static const unsigned char glink_eh_frame_cie[] =
11292 {
11293   0, 0, 0, 16,				/* length.  */
11294   0, 0, 0, 0,				/* id.  */
11295   1,					/* CIE version.  */
11296   'z', 'R', 0,				/* Augmentation string.  */
11297   4,					/* Code alignment.  */
11298   0x78,					/* Data alignment.  */
11299   65,					/* RA reg.  */
11300   1,					/* Augmentation size.  */
11301   DW_EH_PE_pcrel | DW_EH_PE_sdata4,	/* FDE encoding.  */
11302   DW_CFA_def_cfa, 1, 0			/* def_cfa: r1 offset 0.  */
11303 };
11304 
11305 /* Stripping output sections is normally done before dynamic section
11306    symbols have been allocated.  This function is called later, and
11307    handles cases like htab->brlt which is mapped to its own output
11308    section.  */
11309 
11310 static void
11311 maybe_strip_output (struct bfd_link_info *info, asection *isec)
11312 {
11313   if (isec->size == 0
11314       && isec->output_section->size == 0
11315       && !(isec->output_section->flags & SEC_KEEP)
11316       && !bfd_section_removed_from_list (info->output_bfd,
11317 					 isec->output_section)
11318       && elf_section_data (isec->output_section)->dynindx == 0)
11319     {
11320       isec->output_section->flags |= SEC_EXCLUDE;
11321       bfd_section_list_remove (info->output_bfd, isec->output_section);
11322       info->output_bfd->section_count--;
11323     }
11324 }
11325 
11326 /* Determine and set the size of the stub section for a final link.
11327 
11328    The basic idea here is to examine all the relocations looking for
11329    PC-relative calls to a target that is unreachable with a "bl"
11330    instruction.  */
11331 
11332 bfd_boolean
11333 ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
11334 		      bfd_boolean plt_static_chain, int plt_thread_safe,
11335 		      int plt_stub_align)
11336 {
11337   bfd_size_type stub_group_size;
11338   bfd_boolean stubs_always_before_branch;
11339   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11340 
11341   if (htab == NULL)
11342     return FALSE;
11343 
11344   htab->plt_static_chain = plt_static_chain;
11345   htab->plt_stub_align = plt_stub_align;
11346   if (plt_thread_safe == -1 && !info->executable)
11347     plt_thread_safe = 1;
11348   if (plt_thread_safe == -1)
11349     {
11350       static const char *const thread_starter[] =
11351 	{
11352 	  "pthread_create",
11353 	  /* libstdc++ */
11354 	  "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
11355 	  /* librt */
11356 	  "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
11357 	  "mq_notify", "create_timer",
11358 	  /* libanl */
11359 	  "getaddrinfo_a",
11360 	  /* libgomp */
11361 	  "GOMP_parallel_start",
11362 	  "GOMP_parallel_loop_static_start",
11363 	  "GOMP_parallel_loop_dynamic_start",
11364 	  "GOMP_parallel_loop_guided_start",
11365 	  "GOMP_parallel_loop_runtime_start",
11366 	  "GOMP_parallel_sections_start",
11367 	};
11368       unsigned i;
11369 
11370       for (i = 0; i < sizeof (thread_starter)/ sizeof (thread_starter[0]); i++)
11371 	{
11372 	  struct elf_link_hash_entry *h;
11373 	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
11374 				    FALSE, FALSE, TRUE);
11375 	  plt_thread_safe = h != NULL && h->ref_regular;
11376 	  if (plt_thread_safe)
11377 	    break;
11378 	}
11379     }
11380   htab->plt_thread_safe = plt_thread_safe;
11381   stubs_always_before_branch = group_size < 0;
11382   if (group_size < 0)
11383     stub_group_size = -group_size;
11384   else
11385     stub_group_size = group_size;
11386 
11387   group_sections (htab, stub_group_size, stubs_always_before_branch);
11388 
11389   while (1)
11390     {
11391       bfd *input_bfd;
11392       unsigned int bfd_indx;
11393       asection *stub_sec;
11394 
11395       htab->stub_iteration += 1;
11396 
11397       for (input_bfd = info->input_bfds, bfd_indx = 0;
11398 	   input_bfd != NULL;
11399 	   input_bfd = input_bfd->link_next, bfd_indx++)
11400 	{
11401 	  Elf_Internal_Shdr *symtab_hdr;
11402 	  asection *section;
11403 	  Elf_Internal_Sym *local_syms = NULL;
11404 
11405 	  if (!is_ppc64_elf (input_bfd))
11406 	    continue;
11407 
11408 	  /* We'll need the symbol table in a second.  */
11409 	  symtab_hdr = &elf_symtab_hdr (input_bfd);
11410 	  if (symtab_hdr->sh_info == 0)
11411 	    continue;
11412 
11413 	  /* Walk over each section attached to the input bfd.  */
11414 	  for (section = input_bfd->sections;
11415 	       section != NULL;
11416 	       section = section->next)
11417 	    {
11418 	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
11419 
11420 	      /* If there aren't any relocs, then there's nothing more
11421 		 to do.  */
11422 	      if ((section->flags & SEC_RELOC) == 0
11423 		  || (section->flags & SEC_ALLOC) == 0
11424 		  || (section->flags & SEC_LOAD) == 0
11425 		  || (section->flags & SEC_CODE) == 0
11426 		  || section->reloc_count == 0)
11427 		continue;
11428 
11429 	      /* If this section is a link-once section that will be
11430 		 discarded, then don't create any stubs.  */
11431 	      if (section->output_section == NULL
11432 		  || section->output_section->owner != info->output_bfd)
11433 		continue;
11434 
11435 	      /* Get the relocs.  */
11436 	      internal_relocs
11437 		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
11438 					     info->keep_memory);
11439 	      if (internal_relocs == NULL)
11440 		goto error_ret_free_local;
11441 
11442 	      /* Now examine each relocation.  */
11443 	      irela = internal_relocs;
11444 	      irelaend = irela + section->reloc_count;
11445 	      for (; irela < irelaend; irela++)
11446 		{
11447 		  enum elf_ppc64_reloc_type r_type;
11448 		  unsigned int r_indx;
11449 		  enum ppc_stub_type stub_type;
11450 		  struct ppc_stub_hash_entry *stub_entry;
11451 		  asection *sym_sec, *code_sec;
11452 		  bfd_vma sym_value, code_value;
11453 		  bfd_vma destination;
11454 		  bfd_boolean ok_dest;
11455 		  struct ppc_link_hash_entry *hash;
11456 		  struct ppc_link_hash_entry *fdh;
11457 		  struct elf_link_hash_entry *h;
11458 		  Elf_Internal_Sym *sym;
11459 		  char *stub_name;
11460 		  const asection *id_sec;
11461 		  struct _opd_sec_data *opd;
11462 		  struct plt_entry *plt_ent;
11463 
11464 		  r_type = ELF64_R_TYPE (irela->r_info);
11465 		  r_indx = ELF64_R_SYM (irela->r_info);
11466 
11467 		  if (r_type >= R_PPC64_max)
11468 		    {
11469 		      bfd_set_error (bfd_error_bad_value);
11470 		      goto error_ret_free_internal;
11471 		    }
11472 
11473 		  /* Only look for stubs on branch instructions.  */
11474 		  if (r_type != R_PPC64_REL24
11475 		      && r_type != R_PPC64_REL14
11476 		      && r_type != R_PPC64_REL14_BRTAKEN
11477 		      && r_type != R_PPC64_REL14_BRNTAKEN)
11478 		    continue;
11479 
11480 		  /* Now determine the call target, its name, value,
11481 		     section.  */
11482 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
11483 				  r_indx, input_bfd))
11484 		    goto error_ret_free_internal;
11485 		  hash = (struct ppc_link_hash_entry *) h;
11486 
11487 		  ok_dest = FALSE;
11488 		  fdh = NULL;
11489 		  sym_value = 0;
11490 		  if (hash == NULL)
11491 		    {
11492 		      sym_value = sym->st_value;
11493 		      ok_dest = TRUE;
11494 		    }
11495 		  else if (hash->elf.root.type == bfd_link_hash_defined
11496 			   || hash->elf.root.type == bfd_link_hash_defweak)
11497 		    {
11498 		      sym_value = hash->elf.root.u.def.value;
11499 		      if (sym_sec->output_section != NULL)
11500 			ok_dest = TRUE;
11501 		    }
11502 		  else if (hash->elf.root.type == bfd_link_hash_undefweak
11503 			   || hash->elf.root.type == bfd_link_hash_undefined)
11504 		    {
11505 		      /* Recognise an old ABI func code entry sym, and
11506 			 use the func descriptor sym instead if it is
11507 			 defined.  */
11508 		      if (hash->elf.root.root.string[0] == '.'
11509 			  && (fdh = lookup_fdh (hash, htab)) != NULL)
11510 			{
11511 			  if (fdh->elf.root.type == bfd_link_hash_defined
11512 			      || fdh->elf.root.type == bfd_link_hash_defweak)
11513 			    {
11514 			      sym_sec = fdh->elf.root.u.def.section;
11515 			      sym_value = fdh->elf.root.u.def.value;
11516 			      if (sym_sec->output_section != NULL)
11517 				ok_dest = TRUE;
11518 			    }
11519 			  else
11520 			    fdh = NULL;
11521 			}
11522 		    }
11523 		  else
11524 		    {
11525 		      bfd_set_error (bfd_error_bad_value);
11526 		      goto error_ret_free_internal;
11527 		    }
11528 
11529 		  destination = 0;
11530 		  if (ok_dest)
11531 		    {
11532 		      sym_value += irela->r_addend;
11533 		      destination = (sym_value
11534 				     + sym_sec->output_offset
11535 				     + sym_sec->output_section->vma);
11536 		    }
11537 
11538 		  code_sec = sym_sec;
11539 		  code_value = sym_value;
11540 		  opd = get_opd_info (sym_sec);
11541 		  if (opd != NULL)
11542 		    {
11543 		      bfd_vma dest;
11544 
11545 		      if (hash == NULL && opd->adjust != NULL)
11546 			{
11547 			  long adjust = opd->adjust[sym_value / 8];
11548 			  if (adjust == -1)
11549 			    continue;
11550 			  code_value += adjust;
11551 			  sym_value += adjust;
11552 			}
11553 		      dest = opd_entry_value (sym_sec, sym_value,
11554 					      &code_sec, &code_value, FALSE);
11555 		      if (dest != (bfd_vma) -1)
11556 			{
11557 			  destination = dest;
11558 			  if (fdh != NULL)
11559 			    {
11560 			      /* Fixup old ABI sym to point at code
11561 				 entry.  */
11562 			      hash->elf.root.type = bfd_link_hash_defweak;
11563 			      hash->elf.root.u.def.section = code_sec;
11564 			      hash->elf.root.u.def.value = code_value;
11565 			    }
11566 			}
11567 		    }
11568 
11569 		  /* Determine what (if any) linker stub is needed.  */
11570 		  plt_ent = NULL;
11571 		  stub_type = ppc_type_of_stub (section, irela, &hash,
11572 						&plt_ent, destination);
11573 
11574 		  if (stub_type != ppc_stub_plt_call)
11575 		    {
11576 		      /* Check whether we need a TOC adjusting stub.
11577 			 Since the linker pastes together pieces from
11578 			 different object files when creating the
11579 			 _init and _fini functions, it may be that a
11580 			 call to what looks like a local sym is in
11581 			 fact a call needing a TOC adjustment.  */
11582 		      if (code_sec != NULL
11583 			  && code_sec->output_section != NULL
11584 			  && (htab->stub_group[code_sec->id].toc_off
11585 			      != htab->stub_group[section->id].toc_off)
11586 			  && (code_sec->has_toc_reloc
11587 			      || code_sec->makes_toc_func_call))
11588 			stub_type = ppc_stub_long_branch_r2off;
11589 		    }
11590 
11591 		  if (stub_type == ppc_stub_none)
11592 		    continue;
11593 
11594 		  /* __tls_get_addr calls might be eliminated.  */
11595 		  if (stub_type != ppc_stub_plt_call
11596 		      && hash != NULL
11597 		      && (hash == htab->tls_get_addr
11598 			  || hash == htab->tls_get_addr_fd)
11599 		      && section->has_tls_reloc
11600 		      && irela != internal_relocs)
11601 		    {
11602 		      /* Get tls info.  */
11603 		      unsigned char *tls_mask;
11604 
11605 		      if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
11606 					 irela - 1, input_bfd))
11607 			goto error_ret_free_internal;
11608 		      if (*tls_mask != 0)
11609 			continue;
11610 		    }
11611 
11612 		  if (stub_type == ppc_stub_plt_call
11613 		      && irela + 1 < irelaend
11614 		      && irela[1].r_offset == irela->r_offset + 4
11615 		      && ELF64_R_TYPE (irela[1].r_info) == R_PPC64_TOCSAVE)
11616 		    {
11617 		      if (!tocsave_find (htab, INSERT,
11618 					 &local_syms, irela + 1, input_bfd))
11619 			goto error_ret_free_internal;
11620 		    }
11621 		  else if (stub_type == ppc_stub_plt_call)
11622 		    stub_type = ppc_stub_plt_call_r2save;
11623 
11624 		  /* Support for grouping stub sections.  */
11625 		  id_sec = htab->stub_group[section->id].link_sec;
11626 
11627 		  /* Get the name of this stub.  */
11628 		  stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
11629 		  if (!stub_name)
11630 		    goto error_ret_free_internal;
11631 
11632 		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
11633 						     stub_name, FALSE, FALSE);
11634 		  if (stub_entry != NULL)
11635 		    {
11636 		      /* The proper stub has already been created.  */
11637 		      free (stub_name);
11638 		      if (stub_type == ppc_stub_plt_call_r2save)
11639 			stub_entry->stub_type = stub_type;
11640 		      continue;
11641 		    }
11642 
11643 		  stub_entry = ppc_add_stub (stub_name, section, info);
11644 		  if (stub_entry == NULL)
11645 		    {
11646 		      free (stub_name);
11647 		    error_ret_free_internal:
11648 		      if (elf_section_data (section)->relocs == NULL)
11649 			free (internal_relocs);
11650 		    error_ret_free_local:
11651 		      if (local_syms != NULL
11652 			  && (symtab_hdr->contents
11653 			      != (unsigned char *) local_syms))
11654 			free (local_syms);
11655 		      return FALSE;
11656 		    }
11657 
11658 		  stub_entry->stub_type = stub_type;
11659 		  if (stub_type != ppc_stub_plt_call
11660 		      && stub_type != ppc_stub_plt_call_r2save)
11661 		    {
11662 		      stub_entry->target_value = code_value;
11663 		      stub_entry->target_section = code_sec;
11664 		    }
11665 		  else
11666 		    {
11667 		      stub_entry->target_value = sym_value;
11668 		      stub_entry->target_section = sym_sec;
11669 		    }
11670 		  stub_entry->h = hash;
11671 		  stub_entry->plt_ent = plt_ent;
11672 		  stub_entry->addend = irela->r_addend;
11673 
11674 		  if (stub_entry->h != NULL)
11675 		    htab->stub_globals += 1;
11676 		}
11677 
11678 	      /* We're done with the internal relocs, free them.  */
11679 	      if (elf_section_data (section)->relocs != internal_relocs)
11680 		free (internal_relocs);
11681 	    }
11682 
11683 	  if (local_syms != NULL
11684 	      && symtab_hdr->contents != (unsigned char *) local_syms)
11685 	    {
11686 	      if (!info->keep_memory)
11687 		free (local_syms);
11688 	      else
11689 		symtab_hdr->contents = (unsigned char *) local_syms;
11690 	    }
11691 	}
11692 
11693       /* We may have added some stubs.  Find out the new size of the
11694 	 stub sections.  */
11695       for (stub_sec = htab->stub_bfd->sections;
11696 	   stub_sec != NULL;
11697 	   stub_sec = stub_sec->next)
11698 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11699 	  {
11700 	    stub_sec->rawsize = stub_sec->size;
11701 	    stub_sec->size = 0;
11702 	    stub_sec->reloc_count = 0;
11703 	    stub_sec->flags &= ~SEC_RELOC;
11704 	  }
11705 
11706       htab->brlt->size = 0;
11707       htab->brlt->reloc_count = 0;
11708       htab->brlt->flags &= ~SEC_RELOC;
11709       if (htab->relbrlt != NULL)
11710 	htab->relbrlt->size = 0;
11711 
11712       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
11713 
11714       if (info->emitrelocations
11715 	  && htab->glink != NULL && htab->glink->size != 0)
11716 	{
11717 	  htab->glink->reloc_count = 1;
11718 	  htab->glink->flags |= SEC_RELOC;
11719 	}
11720 
11721       if (htab->glink_eh_frame != NULL
11722 	  && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
11723 	  && htab->glink_eh_frame->output_section->size != 0)
11724 	{
11725 	  size_t size = 0, align;
11726 
11727 	  for (stub_sec = htab->stub_bfd->sections;
11728 	       stub_sec != NULL;
11729 	       stub_sec = stub_sec->next)
11730 	    if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11731 	      size += 20;
11732 	  if (htab->glink != NULL && htab->glink->size != 0)
11733 	    size += 24;
11734 	  if (size != 0)
11735 	    size += sizeof (glink_eh_frame_cie);
11736 	  align = 1;
11737 	  align <<= htab->glink_eh_frame->output_section->alignment_power;
11738 	  align -= 1;
11739 	  size = (size + align) & ~align;
11740 	  htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
11741 	  htab->glink_eh_frame->size = size;
11742 	}
11743 
11744       if (htab->plt_stub_align != 0)
11745 	for (stub_sec = htab->stub_bfd->sections;
11746 	     stub_sec != NULL;
11747 	     stub_sec = stub_sec->next)
11748 	  if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
11749 	    stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
11750 			      & (-1 << htab->plt_stub_align));
11751 
11752       for (stub_sec = htab->stub_bfd->sections;
11753 	   stub_sec != NULL;
11754 	   stub_sec = stub_sec->next)
11755 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
11756 	    && stub_sec->rawsize != stub_sec->size)
11757 	  break;
11758 
11759       /* Exit from this loop when no stubs have been added, and no stubs
11760 	 have changed size.  */
11761       if (stub_sec == NULL
11762 	  && (htab->glink_eh_frame == NULL
11763 	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
11764 	break;
11765 
11766       /* Ask the linker to do its stuff.  */
11767       (*htab->layout_sections_again) ();
11768     }
11769 
11770   maybe_strip_output (info, htab->brlt);
11771   if (htab->glink_eh_frame != NULL)
11772     maybe_strip_output (info, htab->glink_eh_frame);
11773 
11774   return TRUE;
11775 }
11776 
11777 /* Called after we have determined section placement.  If sections
11778    move, we'll be called again.  Provide a value for TOCstart.  */
11779 
11780 bfd_vma
11781 ppc64_elf_toc (bfd *obfd)
11782 {
11783   asection *s;
11784   bfd_vma TOCstart;
11785 
11786   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
11787      order.  The TOC starts where the first of these sections starts.  */
11788   s = bfd_get_section_by_name (obfd, ".got");
11789   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11790     s = bfd_get_section_by_name (obfd, ".toc");
11791   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11792     s = bfd_get_section_by_name (obfd, ".tocbss");
11793   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11794     s = bfd_get_section_by_name (obfd, ".plt");
11795   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
11796     {
11797       /* This may happen for
11798 	 o  references to TOC base (SYM@toc / TOC[tc0]) without a
11799 	 .toc directive
11800 	 o  bad linker script
11801 	 o --gc-sections and empty TOC sections
11802 
11803 	 FIXME: Warn user?  */
11804 
11805       /* Look for a likely section.  We probably won't even be
11806 	 using TOCstart.  */
11807       for (s = obfd->sections; s != NULL; s = s->next)
11808 	if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
11809 			 | SEC_EXCLUDE))
11810 	    == (SEC_ALLOC | SEC_SMALL_DATA))
11811 	  break;
11812       if (s == NULL)
11813 	for (s = obfd->sections; s != NULL; s = s->next)
11814 	  if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
11815 	      == (SEC_ALLOC | SEC_SMALL_DATA))
11816 	    break;
11817       if (s == NULL)
11818 	for (s = obfd->sections; s != NULL; s = s->next)
11819 	  if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
11820 	      == SEC_ALLOC)
11821 	    break;
11822       if (s == NULL)
11823 	for (s = obfd->sections; s != NULL; s = s->next)
11824 	  if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
11825 	    break;
11826     }
11827 
11828   TOCstart = 0;
11829   if (s != NULL)
11830     TOCstart = s->output_section->vma + s->output_offset;
11831 
11832   return TOCstart;
11833 }
11834 
11835 /* Build all the stubs associated with the current output file.
11836    The stubs are kept in a hash table attached to the main linker
11837    hash table.  This function is called via gldelf64ppc_finish.  */
11838 
11839 bfd_boolean
11840 ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
11841 		       struct bfd_link_info *info,
11842 		       char **stats)
11843 {
11844   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11845   asection *stub_sec;
11846   bfd_byte *p;
11847   int stub_sec_count = 0;
11848 
11849   if (htab == NULL)
11850     return FALSE;
11851 
11852   htab->emit_stub_syms = emit_stub_syms;
11853 
11854   /* Allocate memory to hold the linker stubs.  */
11855   for (stub_sec = htab->stub_bfd->sections;
11856        stub_sec != NULL;
11857        stub_sec = stub_sec->next)
11858     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
11859 	&& stub_sec->size != 0)
11860       {
11861 	stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
11862 	if (stub_sec->contents == NULL)
11863 	  return FALSE;
11864 	/* We want to check that built size is the same as calculated
11865 	   size.  rawsize is a convenient location to use.  */
11866 	stub_sec->rawsize = stub_sec->size;
11867 	stub_sec->size = 0;
11868       }
11869 
11870   if (htab->glink != NULL && htab->glink->size != 0)
11871     {
11872       unsigned int indx;
11873       bfd_vma plt0;
11874 
11875       /* Build the .glink plt call stub.  */
11876       if (htab->emit_stub_syms)
11877 	{
11878 	  struct elf_link_hash_entry *h;
11879 	  h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
11880 				    TRUE, FALSE, FALSE);
11881 	  if (h == NULL)
11882 	    return FALSE;
11883 	  if (h->root.type == bfd_link_hash_new)
11884 	    {
11885 	      h->root.type = bfd_link_hash_defined;
11886 	      h->root.u.def.section = htab->glink;
11887 	      h->root.u.def.value = 8;
11888 	      h->ref_regular = 1;
11889 	      h->def_regular = 1;
11890 	      h->ref_regular_nonweak = 1;
11891 	      h->forced_local = 1;
11892 	      h->non_elf = 0;
11893 	    }
11894 	}
11895       plt0 = htab->plt->output_section->vma + htab->plt->output_offset - 16;
11896       if (info->emitrelocations)
11897 	{
11898 	  Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
11899 	  if (r == NULL)
11900 	    return FALSE;
11901 	  r->r_offset = (htab->glink->output_offset
11902 			 + htab->glink->output_section->vma);
11903 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
11904 	  r->r_addend = plt0;
11905 	}
11906       p = htab->glink->contents;
11907       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
11908       bfd_put_64 (htab->glink->owner, plt0, p);
11909       p += 8;
11910       bfd_put_32 (htab->glink->owner, MFLR_R12, p);
11911       p += 4;
11912       bfd_put_32 (htab->glink->owner, BCL_20_31, p);
11913       p += 4;
11914       bfd_put_32 (htab->glink->owner, MFLR_R11, p);
11915       p += 4;
11916       bfd_put_32 (htab->glink->owner, LD_R2_M16R11, p);
11917       p += 4;
11918       bfd_put_32 (htab->glink->owner, MTLR_R12, p);
11919       p += 4;
11920       bfd_put_32 (htab->glink->owner, ADD_R12_R2_R11, p);
11921       p += 4;
11922       bfd_put_32 (htab->glink->owner, LD_R11_0R12, p);
11923       p += 4;
11924       bfd_put_32 (htab->glink->owner, LD_R2_0R12 | 8, p);
11925       p += 4;
11926       bfd_put_32 (htab->glink->owner, MTCTR_R11, p);
11927       p += 4;
11928       bfd_put_32 (htab->glink->owner, LD_R11_0R12 | 16, p);
11929       p += 4;
11930       bfd_put_32 (htab->glink->owner, BCTR, p);
11931       p += 4;
11932       while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
11933 	{
11934 	  bfd_put_32 (htab->glink->owner, NOP, p);
11935 	  p += 4;
11936 	}
11937 
11938       /* Build the .glink lazy link call stubs.  */
11939       indx = 0;
11940       while (p < htab->glink->contents + htab->glink->size)
11941 	{
11942 	  if (indx < 0x8000)
11943 	    {
11944 	      bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
11945 	      p += 4;
11946 	    }
11947 	  else
11948 	    {
11949 	      bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
11950 	      p += 4;
11951 	      bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx), p);
11952 	      p += 4;
11953 	    }
11954 	  bfd_put_32 (htab->glink->owner,
11955 		      B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
11956 	  indx++;
11957 	  p += 4;
11958 	}
11959       htab->glink->rawsize = p - htab->glink->contents;
11960     }
11961 
11962   if (htab->brlt->size != 0)
11963     {
11964       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
11965 					 htab->brlt->size);
11966       if (htab->brlt->contents == NULL)
11967 	return FALSE;
11968     }
11969   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
11970     {
11971       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
11972 					    htab->relbrlt->size);
11973       if (htab->relbrlt->contents == NULL)
11974 	return FALSE;
11975     }
11976 
11977   if (htab->glink_eh_frame != NULL
11978       && htab->glink_eh_frame->size != 0)
11979     {
11980       bfd_vma val;
11981       bfd_byte *last_fde;
11982       size_t last_fde_len, size, align, pad;
11983 
11984       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
11985       if (p == NULL)
11986 	return FALSE;
11987       htab->glink_eh_frame->contents = p;
11988       last_fde = p;
11989 
11990       htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
11991 
11992       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
11993       /* CIE length (rewrite in case little-endian).  */
11994       last_fde_len = sizeof (glink_eh_frame_cie) - 4;
11995       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
11996       p += sizeof (glink_eh_frame_cie);
11997 
11998       for (stub_sec = htab->stub_bfd->sections;
11999 	   stub_sec != NULL;
12000 	   stub_sec = stub_sec->next)
12001 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12002 	  {
12003 	    last_fde = p;
12004 	    last_fde_len = 16;
12005 	    /* FDE length.  */
12006 	    bfd_put_32 (htab->elf.dynobj, 16, p);
12007 	    p += 4;
12008 	    /* CIE pointer.  */
12009 	    val = p - htab->glink_eh_frame->contents;
12010 	    bfd_put_32 (htab->elf.dynobj, val, p);
12011 	    p += 4;
12012 	    /* Offset to stub section.  */
12013 	    val = (stub_sec->output_section->vma
12014 		   + stub_sec->output_offset);
12015 	    val -= (htab->glink_eh_frame->output_section->vma
12016 		    + htab->glink_eh_frame->output_offset);
12017 	    val -= p - htab->glink_eh_frame->contents;
12018 	    if (val + 0x80000000 > 0xffffffff)
12019 	      {
12020 		info->callbacks->einfo
12021 		  (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12022 		   stub_sec->name);
12023 		return FALSE;
12024 	      }
12025 	    bfd_put_32 (htab->elf.dynobj, val, p);
12026 	    p += 4;
12027 	    /* stub section size.  */
12028 	    bfd_put_32 (htab->elf.dynobj, stub_sec->rawsize, p);
12029 	    p += 4;
12030 	    /* Augmentation.  */
12031 	    p += 1;
12032 	    /* Pad.  */
12033 	    p += 3;
12034 	  }
12035       if (htab->glink != NULL && htab->glink->size != 0)
12036 	{
12037 	  last_fde = p;
12038 	  last_fde_len = 20;
12039 	  /* FDE length.  */
12040 	  bfd_put_32 (htab->elf.dynobj, 20, p);
12041 	  p += 4;
12042 	  /* CIE pointer.  */
12043 	  val = p - htab->glink_eh_frame->contents;
12044 	  bfd_put_32 (htab->elf.dynobj, val, p);
12045 	  p += 4;
12046 	  /* Offset to .glink.  */
12047 	  val = (htab->glink->output_section->vma
12048 		 + htab->glink->output_offset
12049 		 + 8);
12050 	  val -= (htab->glink_eh_frame->output_section->vma
12051 		  + htab->glink_eh_frame->output_offset);
12052 	  val -= p - htab->glink_eh_frame->contents;
12053 	  if (val + 0x80000000 > 0xffffffff)
12054 	    {
12055 	      info->callbacks->einfo
12056 		(_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12057 		 htab->glink->name);
12058 	      return FALSE;
12059 	    }
12060 	  bfd_put_32 (htab->elf.dynobj, val, p);
12061 	  p += 4;
12062 	  /* .glink size.  */
12063 	  bfd_put_32 (htab->elf.dynobj, htab->glink->rawsize - 8, p);
12064 	  p += 4;
12065 	  /* Augmentation.  */
12066 	  p += 1;
12067 
12068 	  *p++ = DW_CFA_advance_loc + 1;
12069 	  *p++ = DW_CFA_register;
12070 	  *p++ = 65;
12071 	  *p++ = 12;
12072 	  *p++ = DW_CFA_advance_loc + 4;
12073 	  *p++ = DW_CFA_restore_extended;
12074 	  *p++ = 65;
12075 	}
12076       /* Subsume any padding into the last FDE if user .eh_frame
12077 	 sections are aligned more than glink_eh_frame.  Otherwise any
12078 	 zero padding will be seen as a terminator.  */
12079       size = p - htab->glink_eh_frame->contents;
12080       align = 1;
12081       align <<= htab->glink_eh_frame->output_section->alignment_power;
12082       align -= 1;
12083       pad = ((size + align) & ~align) - size;
12084       htab->glink_eh_frame->size = size + pad;
12085       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
12086     }
12087 
12088   /* Build the stubs as directed by the stub hash table.  */
12089   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
12090 
12091   if (htab->relbrlt != NULL)
12092     htab->relbrlt->reloc_count = 0;
12093 
12094   if (htab->plt_stub_align != 0)
12095     for (stub_sec = htab->stub_bfd->sections;
12096 	 stub_sec != NULL;
12097 	 stub_sec = stub_sec->next)
12098       if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12099 	stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
12100 			  & (-1 << htab->plt_stub_align));
12101 
12102   for (stub_sec = htab->stub_bfd->sections;
12103        stub_sec != NULL;
12104        stub_sec = stub_sec->next)
12105     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12106       {
12107 	stub_sec_count += 1;
12108 	if (stub_sec->rawsize != stub_sec->size)
12109 	  break;
12110       }
12111 
12112   if (stub_sec != NULL
12113       || htab->glink->rawsize != htab->glink->size
12114       || (htab->glink_eh_frame != NULL
12115 	  && htab->glink_eh_frame->rawsize != htab->glink_eh_frame->size))
12116     {
12117       htab->stub_error = TRUE;
12118       info->callbacks->einfo (_("%P: stubs don't match calculated size\n"));
12119     }
12120 
12121   if (htab->stub_error)
12122     return FALSE;
12123 
12124   if (stats != NULL)
12125     {
12126       *stats = bfd_malloc (500);
12127       if (*stats == NULL)
12128 	return FALSE;
12129 
12130       sprintf (*stats, _("linker stubs in %u group%s\n"
12131 			 "  branch       %lu\n"
12132 			 "  toc adjust   %lu\n"
12133 			 "  long branch  %lu\n"
12134 			 "  long toc adj %lu\n"
12135 			 "  plt call     %lu\n"
12136 			 "  plt call toc %lu"),
12137 	       stub_sec_count,
12138 	       stub_sec_count == 1 ? "" : "s",
12139 	       htab->stub_count[ppc_stub_long_branch - 1],
12140 	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
12141 	       htab->stub_count[ppc_stub_plt_branch - 1],
12142 	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
12143 	       htab->stub_count[ppc_stub_plt_call - 1],
12144 	       htab->stub_count[ppc_stub_plt_call_r2save - 1]);
12145     }
12146   return TRUE;
12147 }
12148 
12149 /* This function undoes the changes made by add_symbol_adjust.  */
12150 
12151 static bfd_boolean
12152 undo_symbol_twiddle (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12153 {
12154   struct ppc_link_hash_entry *eh;
12155 
12156   if (h->root.type == bfd_link_hash_indirect)
12157     return TRUE;
12158 
12159   eh = (struct ppc_link_hash_entry *) h;
12160   if (eh->elf.root.type != bfd_link_hash_undefweak || !eh->was_undefined)
12161     return TRUE;
12162 
12163   eh->elf.root.type = bfd_link_hash_undefined;
12164   return TRUE;
12165 }
12166 
12167 void
12168 ppc64_elf_restore_symbols (struct bfd_link_info *info)
12169 {
12170   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12171 
12172   if (htab != NULL)
12173     elf_link_hash_traverse (&htab->elf, undo_symbol_twiddle, info);
12174 }
12175 
12176 /* What to do when ld finds relocations against symbols defined in
12177    discarded sections.  */
12178 
12179 static unsigned int
12180 ppc64_elf_action_discarded (asection *sec)
12181 {
12182   if (strcmp (".opd", sec->name) == 0)
12183     return 0;
12184 
12185   if (strcmp (".toc", sec->name) == 0)
12186     return 0;
12187 
12188   if (strcmp (".toc1", sec->name) == 0)
12189     return 0;
12190 
12191   return _bfd_elf_default_action_discarded (sec);
12192 }
12193 
12194 /* The RELOCATE_SECTION function is called by the ELF backend linker
12195    to handle the relocations for a section.
12196 
12197    The relocs are always passed as Rela structures; if the section
12198    actually uses Rel structures, the r_addend field will always be
12199    zero.
12200 
12201    This function is responsible for adjust the section contents as
12202    necessary, and (if using Rela relocs and generating a
12203    relocatable output file) adjusting the reloc addend as
12204    necessary.
12205 
12206    This function does not have to worry about setting the reloc
12207    address or the reloc symbol index.
12208 
12209    LOCAL_SYMS is a pointer to the swapped in local symbols.
12210 
12211    LOCAL_SECTIONS is an array giving the section in the input file
12212    corresponding to the st_shndx field of each local symbol.
12213 
12214    The global hash table entry for the global symbols can be found
12215    via elf_sym_hashes (input_bfd).
12216 
12217    When generating relocatable output, this function must handle
12218    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
12219    going to be the section symbol corresponding to the output
12220    section, which means that the addend must be adjusted
12221    accordingly.  */
12222 
12223 static bfd_boolean
12224 ppc64_elf_relocate_section (bfd *output_bfd,
12225 			    struct bfd_link_info *info,
12226 			    bfd *input_bfd,
12227 			    asection *input_section,
12228 			    bfd_byte *contents,
12229 			    Elf_Internal_Rela *relocs,
12230 			    Elf_Internal_Sym *local_syms,
12231 			    asection **local_sections)
12232 {
12233   struct ppc_link_hash_table *htab;
12234   Elf_Internal_Shdr *symtab_hdr;
12235   struct elf_link_hash_entry **sym_hashes;
12236   Elf_Internal_Rela *rel;
12237   Elf_Internal_Rela *relend;
12238   Elf_Internal_Rela outrel;
12239   bfd_byte *loc;
12240   struct got_entry **local_got_ents;
12241   bfd_vma TOCstart;
12242   bfd_boolean ret = TRUE;
12243   bfd_boolean is_opd;
12244   /* Assume 'at' branch hints.  */
12245   bfd_boolean is_isa_v2 = TRUE;
12246   bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
12247 
12248   /* Initialize howto table if needed.  */
12249   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
12250     ppc_howto_init ();
12251 
12252   htab = ppc_hash_table (info);
12253   if (htab == NULL)
12254     return FALSE;
12255 
12256   /* Don't relocate stub sections.  */
12257   if (input_section->owner == htab->stub_bfd)
12258     return TRUE;
12259 
12260   BFD_ASSERT (is_ppc64_elf (input_bfd));
12261 
12262   local_got_ents = elf_local_got_ents (input_bfd);
12263   TOCstart = elf_gp (output_bfd);
12264   symtab_hdr = &elf_symtab_hdr (input_bfd);
12265   sym_hashes = elf_sym_hashes (input_bfd);
12266   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
12267 
12268   rel = relocs;
12269   relend = relocs + input_section->reloc_count;
12270   for (; rel < relend; rel++)
12271     {
12272       enum elf_ppc64_reloc_type r_type;
12273       bfd_vma addend;
12274       bfd_reloc_status_type r;
12275       Elf_Internal_Sym *sym;
12276       asection *sec;
12277       struct elf_link_hash_entry *h_elf;
12278       struct ppc_link_hash_entry *h;
12279       struct ppc_link_hash_entry *fdh;
12280       const char *sym_name;
12281       unsigned long r_symndx, toc_symndx;
12282       bfd_vma toc_addend;
12283       unsigned char tls_mask, tls_gd, tls_type;
12284       unsigned char sym_type;
12285       bfd_vma relocation;
12286       bfd_boolean unresolved_reloc;
12287       bfd_boolean warned;
12288       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
12289       unsigned int insn;
12290       unsigned int mask;
12291       struct ppc_stub_hash_entry *stub_entry;
12292       bfd_vma max_br_offset;
12293       bfd_vma from;
12294       const Elf_Internal_Rela orig_rel = *rel;
12295 
12296       r_type = ELF64_R_TYPE (rel->r_info);
12297       r_symndx = ELF64_R_SYM (rel->r_info);
12298 
12299       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
12300 	 symbol of the previous ADDR64 reloc.  The symbol gives us the
12301 	 proper TOC base to use.  */
12302       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
12303 	  && rel != relocs
12304 	  && ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
12305 	  && is_opd)
12306 	r_symndx = ELF64_R_SYM (rel[-1].r_info);
12307 
12308       sym = NULL;
12309       sec = NULL;
12310       h_elf = NULL;
12311       sym_name = NULL;
12312       unresolved_reloc = FALSE;
12313       warned = FALSE;
12314 
12315       if (r_symndx < symtab_hdr->sh_info)
12316 	{
12317 	  /* It's a local symbol.  */
12318 	  struct _opd_sec_data *opd;
12319 
12320 	  sym = local_syms + r_symndx;
12321 	  sec = local_sections[r_symndx];
12322 	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
12323 	  sym_type = ELF64_ST_TYPE (sym->st_info);
12324 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
12325 	  opd = get_opd_info (sec);
12326 	  if (opd != NULL && opd->adjust != NULL)
12327 	    {
12328 	      long adjust = opd->adjust[(sym->st_value + rel->r_addend) / 8];
12329 	      if (adjust == -1)
12330 		relocation = 0;
12331 	      else
12332 		{
12333 		  /* If this is a relocation against the opd section sym
12334 		     and we have edited .opd, adjust the reloc addend so
12335 		     that ld -r and ld --emit-relocs output is correct.
12336 		     If it is a reloc against some other .opd symbol,
12337 		     then the symbol value will be adjusted later.  */
12338 		  if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
12339 		    rel->r_addend += adjust;
12340 		  else
12341 		    relocation += adjust;
12342 		}
12343 	    }
12344 	}
12345       else
12346 	{
12347 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
12348 				   r_symndx, symtab_hdr, sym_hashes,
12349 				   h_elf, sec, relocation,
12350 				   unresolved_reloc, warned);
12351 	  sym_name = h_elf->root.root.string;
12352 	  sym_type = h_elf->type;
12353 	  if (sec != NULL
12354 	      && sec->owner == output_bfd
12355 	      && strcmp (sec->name, ".opd") == 0)
12356 	    {
12357 	      /* This is a symbol defined in a linker script.  All
12358 		 such are defined in output sections, even those
12359 		 defined by simple assignment from a symbol defined in
12360 		 an input section.  Transfer the symbol to an
12361 		 appropriate input .opd section, so that a branch to
12362 		 this symbol will be mapped to the location specified
12363 		 by the opd entry.  */
12364 	      struct bfd_link_order *lo;
12365 	      for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
12366 		if (lo->type == bfd_indirect_link_order)
12367 		  {
12368 		    asection *isec = lo->u.indirect.section;
12369 		    if (h_elf->root.u.def.value >= isec->output_offset
12370 			&& h_elf->root.u.def.value < (isec->output_offset
12371 						      + isec->size))
12372 		      {
12373 			h_elf->root.u.def.value -= isec->output_offset;
12374 			h_elf->root.u.def.section = isec;
12375 			sec = isec;
12376 			break;
12377 		      }
12378 		  }
12379 	    }
12380 	}
12381       h = (struct ppc_link_hash_entry *) h_elf;
12382 
12383       if (sec != NULL && discarded_section (sec))
12384 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
12385 					 rel, 1, relend,
12386 					 ppc64_elf_howto_table[r_type], 0,
12387 					 contents);
12388 
12389       if (info->relocatable)
12390 	continue;
12391 
12392       /* TLS optimizations.  Replace instruction sequences and relocs
12393 	 based on information we collected in tls_optimize.  We edit
12394 	 RELOCS so that --emit-relocs will output something sensible
12395 	 for the final instruction stream.  */
12396       tls_mask = 0;
12397       tls_gd = 0;
12398       toc_symndx = 0;
12399       if (h != NULL)
12400 	tls_mask = h->tls_mask;
12401       else if (local_got_ents != NULL)
12402 	{
12403 	  struct plt_entry **local_plt = (struct plt_entry **)
12404 	    (local_got_ents + symtab_hdr->sh_info);
12405 	  unsigned char *lgot_masks = (unsigned char *)
12406 	    (local_plt + symtab_hdr->sh_info);
12407 	  tls_mask = lgot_masks[r_symndx];
12408 	}
12409       if (tls_mask == 0
12410 	  && (r_type == R_PPC64_TLS
12411 	      || r_type == R_PPC64_TLSGD
12412 	      || r_type == R_PPC64_TLSLD))
12413 	{
12414 	  /* Check for toc tls entries.  */
12415 	  unsigned char *toc_tls;
12416 
12417 	  if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12418 			     &local_syms, rel, input_bfd))
12419 	    return FALSE;
12420 
12421 	  if (toc_tls)
12422 	    tls_mask = *toc_tls;
12423 	}
12424 
12425       /* Check that tls relocs are used with tls syms, and non-tls
12426 	 relocs are used with non-tls syms.  */
12427       if (r_symndx != STN_UNDEF
12428 	  && r_type != R_PPC64_NONE
12429 	  && (h == NULL
12430 	      || h->elf.root.type == bfd_link_hash_defined
12431 	      || h->elf.root.type == bfd_link_hash_defweak)
12432 	  && (IS_PPC64_TLS_RELOC (r_type)
12433 	      != (sym_type == STT_TLS
12434 		  || (sym_type == STT_SECTION
12435 		      && (sec->flags & SEC_THREAD_LOCAL) != 0))))
12436 	{
12437 	  if (tls_mask != 0
12438 	      && (r_type == R_PPC64_TLS
12439 		  || r_type == R_PPC64_TLSGD
12440 		  || r_type == R_PPC64_TLSLD))
12441 	    /* R_PPC64_TLS is OK against a symbol in the TOC.  */
12442 	    ;
12443 	  else
12444 	    info->callbacks->einfo
12445 	      (!IS_PPC64_TLS_RELOC (r_type)
12446 	       ? _("%P: %H: %s used with TLS symbol `%T'\n")
12447 	       : _("%P: %H: %s used with non-TLS symbol `%T'\n"),
12448 	       input_bfd, input_section, rel->r_offset,
12449 	       ppc64_elf_howto_table[r_type]->name,
12450 	       sym_name);
12451 	}
12452 
12453       /* Ensure reloc mapping code below stays sane.  */
12454       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
12455 	  || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
12456 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
12457 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
12458 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
12459 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
12460 	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
12461 	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
12462 	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
12463 	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
12464 	abort ();
12465 
12466       switch (r_type)
12467 	{
12468 	default:
12469 	  break;
12470 
12471 	case R_PPC64_LO_DS_OPT:
12472 	  insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12473 	  if ((insn & (0x3f << 26)) != 58u << 26)
12474 	    abort ();
12475 	  insn += (14u << 26) - (58u << 26);
12476 	  bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12477 	  r_type = R_PPC64_TOC16_LO;
12478 	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12479 	  break;
12480 
12481 	case R_PPC64_TOC16:
12482 	case R_PPC64_TOC16_LO:
12483 	case R_PPC64_TOC16_DS:
12484 	case R_PPC64_TOC16_LO_DS:
12485 	  {
12486 	    /* Check for toc tls entries.  */
12487 	    unsigned char *toc_tls;
12488 	    int retval;
12489 
12490 	    retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12491 				   &local_syms, rel, input_bfd);
12492 	    if (retval == 0)
12493 	      return FALSE;
12494 
12495 	    if (toc_tls)
12496 	      {
12497 		tls_mask = *toc_tls;
12498 		if (r_type == R_PPC64_TOC16_DS
12499 		    || r_type == R_PPC64_TOC16_LO_DS)
12500 		  {
12501 		    if (tls_mask != 0
12502 			&& (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
12503 		      goto toctprel;
12504 		  }
12505 		else
12506 		  {
12507 		    /* If we found a GD reloc pair, then we might be
12508 		       doing a GD->IE transition.  */
12509 		    if (retval == 2)
12510 		      {
12511 			tls_gd = TLS_TPRELGD;
12512 			if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12513 			  goto tls_ldgd_opt;
12514 		      }
12515 		    else if (retval == 3)
12516 		      {
12517 			if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12518 			  goto tls_ldgd_opt;
12519 		      }
12520 		  }
12521 	      }
12522 	  }
12523 	  break;
12524 
12525 	case R_PPC64_GOT_TPREL16_HI:
12526 	case R_PPC64_GOT_TPREL16_HA:
12527 	  if (tls_mask != 0
12528 	      && (tls_mask & TLS_TPREL) == 0)
12529 	    {
12530 	      rel->r_offset -= d_offset;
12531 	      bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12532 	      r_type = R_PPC64_NONE;
12533 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12534 	    }
12535 	  break;
12536 
12537 	case R_PPC64_GOT_TPREL16_DS:
12538 	case R_PPC64_GOT_TPREL16_LO_DS:
12539 	  if (tls_mask != 0
12540 	      && (tls_mask & TLS_TPREL) == 0)
12541 	    {
12542 	    toctprel:
12543 	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12544 	      insn &= 31 << 21;
12545 	      insn |= 0x3c0d0000;	/* addis 0,13,0 */
12546 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12547 	      r_type = R_PPC64_TPREL16_HA;
12548 	      if (toc_symndx != 0)
12549 		{
12550 		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12551 		  rel->r_addend = toc_addend;
12552 		  /* We changed the symbol.  Start over in order to
12553 		     get h, sym, sec etc. right.  */
12554 		  rel--;
12555 		  continue;
12556 		}
12557 	      else
12558 		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12559 	    }
12560 	  break;
12561 
12562 	case R_PPC64_TLS:
12563 	  if (tls_mask != 0
12564 	      && (tls_mask & TLS_TPREL) == 0)
12565 	    {
12566 	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset);
12567 	      insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
12568 	      if (insn == 0)
12569 		abort ();
12570 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
12571 	      /* Was PPC64_TLS which sits on insn boundary, now
12572 		 PPC64_TPREL16_LO which is at low-order half-word.  */
12573 	      rel->r_offset += d_offset;
12574 	      r_type = R_PPC64_TPREL16_LO;
12575 	      if (toc_symndx != 0)
12576 		{
12577 		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12578 		  rel->r_addend = toc_addend;
12579 		  /* We changed the symbol.  Start over in order to
12580 		     get h, sym, sec etc. right.  */
12581 		  rel--;
12582 		  continue;
12583 		}
12584 	      else
12585 		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12586 	    }
12587 	  break;
12588 
12589 	case R_PPC64_GOT_TLSGD16_HI:
12590 	case R_PPC64_GOT_TLSGD16_HA:
12591 	  tls_gd = TLS_TPRELGD;
12592 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12593 	    goto tls_gdld_hi;
12594 	  break;
12595 
12596 	case R_PPC64_GOT_TLSLD16_HI:
12597 	case R_PPC64_GOT_TLSLD16_HA:
12598 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12599 	    {
12600 	    tls_gdld_hi:
12601 	      if ((tls_mask & tls_gd) != 0)
12602 		r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12603 			  + R_PPC64_GOT_TPREL16_DS);
12604 	      else
12605 		{
12606 		  rel->r_offset -= d_offset;
12607 		  bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12608 		  r_type = R_PPC64_NONE;
12609 		}
12610 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12611 	    }
12612 	  break;
12613 
12614 	case R_PPC64_GOT_TLSGD16:
12615 	case R_PPC64_GOT_TLSGD16_LO:
12616 	  tls_gd = TLS_TPRELGD;
12617 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12618 	    goto tls_ldgd_opt;
12619 	  break;
12620 
12621 	case R_PPC64_GOT_TLSLD16:
12622 	case R_PPC64_GOT_TLSLD16_LO:
12623 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12624 	    {
12625 	      unsigned int insn1, insn2, insn3;
12626 	      bfd_vma offset;
12627 
12628 	    tls_ldgd_opt:
12629 	      offset = (bfd_vma) -1;
12630 	      /* If not using the newer R_PPC64_TLSGD/LD to mark
12631 		 __tls_get_addr calls, we must trust that the call
12632 		 stays with its arg setup insns, ie. that the next
12633 		 reloc is the __tls_get_addr call associated with
12634 		 the current reloc.  Edit both insns.  */
12635 	      if (input_section->has_tls_get_addr_call
12636 		  && rel + 1 < relend
12637 		  && branch_reloc_hash_match (input_bfd, rel + 1,
12638 					      htab->tls_get_addr,
12639 					      htab->tls_get_addr_fd))
12640 		offset = rel[1].r_offset;
12641 	      if ((tls_mask & tls_gd) != 0)
12642 		{
12643 		  /* IE */
12644 		  insn1 = bfd_get_32 (output_bfd,
12645 				      contents + rel->r_offset - d_offset);
12646 		  insn1 &= (1 << 26) - (1 << 2);
12647 		  insn1 |= 58 << 26;	/* ld */
12648 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
12649 		  if (offset != (bfd_vma) -1)
12650 		    rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12651 		  if ((tls_mask & TLS_EXPLICIT) == 0)
12652 		    r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12653 			      + R_PPC64_GOT_TPREL16_DS);
12654 		  else
12655 		    r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
12656 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12657 		}
12658 	      else
12659 		{
12660 		  /* LE */
12661 		  insn1 = 0x3c6d0000;	/* addis 3,13,0 */
12662 		  insn2 = 0x38630000;	/* addi 3,3,0 */
12663 		  if (tls_gd == 0)
12664 		    {
12665 		      /* Was an LD reloc.  */
12666 		      if (toc_symndx)
12667 			sec = local_sections[toc_symndx];
12668 		      for (r_symndx = 0;
12669 			   r_symndx < symtab_hdr->sh_info;
12670 			   r_symndx++)
12671 			if (local_sections[r_symndx] == sec)
12672 			  break;
12673 		      if (r_symndx >= symtab_hdr->sh_info)
12674 			r_symndx = STN_UNDEF;
12675 		      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
12676 		      if (r_symndx != STN_UNDEF)
12677 			rel->r_addend -= (local_syms[r_symndx].st_value
12678 					  + sec->output_offset
12679 					  + sec->output_section->vma);
12680 		    }
12681 		  else if (toc_symndx != 0)
12682 		    {
12683 		      r_symndx = toc_symndx;
12684 		      rel->r_addend = toc_addend;
12685 		    }
12686 		  r_type = R_PPC64_TPREL16_HA;
12687 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12688 		  if (offset != (bfd_vma) -1)
12689 		    {
12690 		      rel[1].r_info = ELF64_R_INFO (r_symndx,
12691 						    R_PPC64_TPREL16_LO);
12692 		      rel[1].r_offset = offset + d_offset;
12693 		      rel[1].r_addend = rel->r_addend;
12694 		    }
12695 		}
12696 	      bfd_put_32 (output_bfd, insn1,
12697 			  contents + rel->r_offset - d_offset);
12698 	      if (offset != (bfd_vma) -1)
12699 		{
12700 		  insn3 = bfd_get_32 (output_bfd,
12701 				      contents + offset + 4);
12702 		  if (insn3 == NOP
12703 		      || insn3 == CROR_151515 || insn3 == CROR_313131)
12704 		    {
12705 		      rel[1].r_offset += 4;
12706 		      bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12707 		      insn2 = NOP;
12708 		    }
12709 		  bfd_put_32 (output_bfd, insn2, contents + offset);
12710 		}
12711 	      if ((tls_mask & tls_gd) == 0
12712 		  && (tls_gd == 0 || toc_symndx != 0))
12713 		{
12714 		  /* We changed the symbol.  Start over in order
12715 		     to get h, sym, sec etc. right.  */
12716 		  rel--;
12717 		  continue;
12718 		}
12719 	    }
12720 	  break;
12721 
12722 	case R_PPC64_TLSGD:
12723 	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12724 	    {
12725 	      unsigned int insn2, insn3;
12726 	      bfd_vma offset = rel->r_offset;
12727 
12728 	      if ((tls_mask & TLS_TPRELGD) != 0)
12729 		{
12730 		  /* IE */
12731 		  r_type = R_PPC64_NONE;
12732 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
12733 		}
12734 	      else
12735 		{
12736 		  /* LE */
12737 		  if (toc_symndx != 0)
12738 		    {
12739 		      r_symndx = toc_symndx;
12740 		      rel->r_addend = toc_addend;
12741 		    }
12742 		  r_type = R_PPC64_TPREL16_LO;
12743 		  rel->r_offset = offset + d_offset;
12744 		  insn2 = 0x38630000;	/* addi 3,3,0 */
12745 		}
12746 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12747 	      /* Zap the reloc on the _tls_get_addr call too.  */
12748 	      BFD_ASSERT (offset == rel[1].r_offset);
12749 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12750 	      insn3 = bfd_get_32 (output_bfd,
12751 				  contents + offset + 4);
12752 	      if (insn3 == NOP
12753 		  || insn3 == CROR_151515 || insn3 == CROR_313131)
12754 		{
12755 		  rel->r_offset += 4;
12756 		  bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12757 		  insn2 = NOP;
12758 		}
12759 	      bfd_put_32 (output_bfd, insn2, contents + offset);
12760 	      if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0)
12761 		{
12762 		  rel--;
12763 		  continue;
12764 		}
12765 	    }
12766 	  break;
12767 
12768 	case R_PPC64_TLSLD:
12769 	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12770 	    {
12771 	      unsigned int insn2, insn3;
12772 	      bfd_vma offset = rel->r_offset;
12773 
12774 	      if (toc_symndx)
12775 		sec = local_sections[toc_symndx];
12776 	      for (r_symndx = 0;
12777 		   r_symndx < symtab_hdr->sh_info;
12778 		   r_symndx++)
12779 		if (local_sections[r_symndx] == sec)
12780 		  break;
12781 	      if (r_symndx >= symtab_hdr->sh_info)
12782 		r_symndx = STN_UNDEF;
12783 	      rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
12784 	      if (r_symndx != STN_UNDEF)
12785 		rel->r_addend -= (local_syms[r_symndx].st_value
12786 				  + sec->output_offset
12787 				  + sec->output_section->vma);
12788 
12789 	      r_type = R_PPC64_TPREL16_LO;
12790 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12791 	      rel->r_offset = offset + d_offset;
12792 	      /* Zap the reloc on the _tls_get_addr call too.  */
12793 	      BFD_ASSERT (offset == rel[1].r_offset);
12794 	      rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12795 	      insn2 = 0x38630000;	/* addi 3,3,0 */
12796 	      insn3 = bfd_get_32 (output_bfd,
12797 				  contents + offset + 4);
12798 	      if (insn3 == NOP
12799 		  || insn3 == CROR_151515 || insn3 == CROR_313131)
12800 		{
12801 		  rel->r_offset += 4;
12802 		  bfd_put_32 (output_bfd, insn2, contents + offset + 4);
12803 		  insn2 = NOP;
12804 		}
12805 	      bfd_put_32 (output_bfd, insn2, contents + offset);
12806 	      rel--;
12807 	      continue;
12808 	    }
12809 	  break;
12810 
12811 	case R_PPC64_DTPMOD64:
12812 	  if (rel + 1 < relend
12813 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
12814 	      && rel[1].r_offset == rel->r_offset + 8)
12815 	    {
12816 	      if ((tls_mask & TLS_GD) == 0)
12817 		{
12818 		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
12819 		  if ((tls_mask & TLS_TPRELGD) != 0)
12820 		    r_type = R_PPC64_TPREL64;
12821 		  else
12822 		    {
12823 		      bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
12824 		      r_type = R_PPC64_NONE;
12825 		    }
12826 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12827 		}
12828 	    }
12829 	  else
12830 	    {
12831 	      if ((tls_mask & TLS_LD) == 0)
12832 		{
12833 		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
12834 		  r_type = R_PPC64_NONE;
12835 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12836 		}
12837 	    }
12838 	  break;
12839 
12840 	case R_PPC64_TPREL64:
12841 	  if ((tls_mask & TLS_TPREL) == 0)
12842 	    {
12843 	      r_type = R_PPC64_NONE;
12844 	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12845 	    }
12846 	  break;
12847 	}
12848 
12849       /* Handle other relocations that tweak non-addend part of insn.  */
12850       insn = 0;
12851       max_br_offset = 1 << 25;
12852       addend = rel->r_addend;
12853       reloc_dest = DEST_NORMAL;
12854       switch (r_type)
12855 	{
12856 	default:
12857 	  break;
12858 
12859 	case R_PPC64_TOCSAVE:
12860 	  if (relocation + addend == (rel->r_offset
12861 				      + input_section->output_offset
12862 				      + input_section->output_section->vma)
12863 	      && tocsave_find (htab, NO_INSERT,
12864 			       &local_syms, rel, input_bfd))
12865 	    {
12866 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
12867 	      if (insn == NOP
12868 		  || insn == CROR_151515 || insn == CROR_313131)
12869 		bfd_put_32 (input_bfd, STD_R2_40R1,
12870 			    contents + rel->r_offset);
12871 	    }
12872 	  break;
12873 
12874 	  /* Branch taken prediction relocations.  */
12875 	case R_PPC64_ADDR14_BRTAKEN:
12876 	case R_PPC64_REL14_BRTAKEN:
12877 	  insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
12878 	  /* Fall thru.  */
12879 
12880 	  /* Branch not taken prediction relocations.  */
12881 	case R_PPC64_ADDR14_BRNTAKEN:
12882 	case R_PPC64_REL14_BRNTAKEN:
12883 	  insn |= bfd_get_32 (output_bfd,
12884 			      contents + rel->r_offset) & ~(0x01 << 21);
12885 	  /* Fall thru.  */
12886 
12887 	case R_PPC64_REL14:
12888 	  max_br_offset = 1 << 15;
12889 	  /* Fall thru.  */
12890 
12891 	case R_PPC64_REL24:
12892 	  /* Calls to functions with a different TOC, such as calls to
12893 	     shared objects, need to alter the TOC pointer.  This is
12894 	     done using a linkage stub.  A REL24 branching to these
12895 	     linkage stubs needs to be followed by a nop, as the nop
12896 	     will be replaced with an instruction to restore the TOC
12897 	     base pointer.  */
12898 	  fdh = h;
12899 	  if (h != NULL
12900 	      && h->oh != NULL
12901 	      && h->oh->is_func_descriptor)
12902 	    fdh = ppc_follow_link (h->oh);
12903 	  stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
12904 					   htab);
12905 	  if (stub_entry != NULL
12906 	      && (stub_entry->stub_type == ppc_stub_plt_call
12907 		  || stub_entry->stub_type == ppc_stub_plt_call_r2save
12908 		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
12909 		  || stub_entry->stub_type == ppc_stub_long_branch_r2off))
12910 	    {
12911 	      bfd_boolean can_plt_call = FALSE;
12912 
12913 	      if (rel->r_offset + 8 <= input_section->size)
12914 		{
12915 		  unsigned long nop;
12916 		  nop = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
12917 		  if (nop == NOP
12918 		      || nop == CROR_151515 || nop == CROR_313131)
12919 		    {
12920 		      if (h != NULL
12921 			  && (h == htab->tls_get_addr_fd
12922 			      || h == htab->tls_get_addr)
12923 			  && !htab->no_tls_get_addr_opt)
12924 			{
12925 			  /* Special stub used, leave nop alone.  */
12926 			}
12927 		      else
12928 			bfd_put_32 (input_bfd, LD_R2_40R1,
12929 				    contents + rel->r_offset + 4);
12930 		      can_plt_call = TRUE;
12931 		    }
12932 		}
12933 
12934 	      if (!can_plt_call)
12935 		{
12936 		  if (stub_entry->stub_type == ppc_stub_plt_call
12937 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
12938 		    {
12939 		      /* If this is a plain branch rather than a branch
12940 			 and link, don't require a nop.  However, don't
12941 			 allow tail calls in a shared library as they
12942 			 will result in r2 being corrupted.  */
12943 		      unsigned long br;
12944 		      br = bfd_get_32 (input_bfd, contents + rel->r_offset);
12945 		      if (info->executable && (br & 1) == 0)
12946 			can_plt_call = TRUE;
12947 		      else
12948 			stub_entry = NULL;
12949 		    }
12950 		  else if (h != NULL
12951 			   && strcmp (h->elf.root.root.string,
12952 				      ".__libc_start_main") == 0)
12953 		    {
12954 		      /* Allow crt1 branch to go via a toc adjusting stub.  */
12955 		      can_plt_call = TRUE;
12956 		    }
12957 		  else
12958 		    {
12959 		      info->callbacks->einfo
12960 			(_("%P: %H: call to `%T' lacks nop, can't restore toc; "
12961 			   "recompile with -fPIC"),
12962 			   input_bfd, input_section, rel->r_offset, sym_name);
12963 
12964 		      bfd_set_error (bfd_error_bad_value);
12965 		      ret = FALSE;
12966 		    }
12967 		}
12968 
12969 	      if (can_plt_call
12970 		  && (stub_entry->stub_type == ppc_stub_plt_call
12971 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save))
12972 		unresolved_reloc = FALSE;
12973 	    }
12974 
12975 	  if ((stub_entry == NULL
12976 	       || stub_entry->stub_type == ppc_stub_long_branch
12977 	       || stub_entry->stub_type == ppc_stub_plt_branch)
12978 	      && get_opd_info (sec) != NULL)
12979 	    {
12980 	      /* The branch destination is the value of the opd entry. */
12981 	      bfd_vma off = (relocation + addend
12982 			     - sec->output_section->vma
12983 			     - sec->output_offset);
12984 	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
12985 	      if (dest != (bfd_vma) -1)
12986 		{
12987 		  relocation = dest;
12988 		  addend = 0;
12989 		  reloc_dest = DEST_OPD;
12990 		}
12991 	    }
12992 
12993 	  /* If the branch is out of reach we ought to have a long
12994 	     branch stub.  */
12995 	  from = (rel->r_offset
12996 		  + input_section->output_offset
12997 		  + input_section->output_section->vma);
12998 
12999 	  if (stub_entry != NULL
13000 	      && (stub_entry->stub_type == ppc_stub_long_branch
13001 		  || stub_entry->stub_type == ppc_stub_plt_branch)
13002 	      && (r_type == R_PPC64_ADDR14_BRTAKEN
13003 		  || r_type == R_PPC64_ADDR14_BRNTAKEN
13004 		  || (relocation + addend - from + max_br_offset
13005 		      < 2 * max_br_offset)))
13006 	    /* Don't use the stub if this branch is in range.  */
13007 	    stub_entry = NULL;
13008 
13009 	  if (stub_entry != NULL)
13010 	    {
13011 	      /* Munge up the value and addend so that we call the stub
13012 		 rather than the procedure directly.  */
13013 	      relocation = (stub_entry->stub_offset
13014 			    + stub_entry->stub_sec->output_offset
13015 			    + stub_entry->stub_sec->output_section->vma);
13016 	      addend = 0;
13017 	      reloc_dest = DEST_STUB;
13018 
13019  	      if ((stub_entry->stub_type == ppc_stub_plt_call
13020 		   || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13021 		  && (ALWAYS_EMIT_R2SAVE
13022 		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13023 		  && rel + 1 < relend
13024 		  && rel[1].r_offset == rel->r_offset + 4
13025 		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
13026 		relocation += 4;
13027 	    }
13028 
13029 	  if (insn != 0)
13030 	    {
13031 	      if (is_isa_v2)
13032 		{
13033 		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
13034 		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
13035 		     for branch on CTR insns (BO == 1a00t or 1a01t).  */
13036 		  if ((insn & (0x14 << 21)) == (0x04 << 21))
13037 		    insn |= 0x02 << 21;
13038 		  else if ((insn & (0x14 << 21)) == (0x10 << 21))
13039 		    insn |= 0x08 << 21;
13040 		  else
13041 		    break;
13042 		}
13043 	      else
13044 		{
13045 		  /* Invert 'y' bit if not the default.  */
13046 		  if ((bfd_signed_vma) (relocation + addend - from) < 0)
13047 		    insn ^= 0x01 << 21;
13048 		}
13049 
13050 	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
13051 	    }
13052 
13053 	  /* NOP out calls to undefined weak functions.
13054 	     We can thus call a weak function without first
13055 	     checking whether the function is defined.  */
13056 	  else if (h != NULL
13057 		   && h->elf.root.type == bfd_link_hash_undefweak
13058 		   && h->elf.dynindx == -1
13059 		   && r_type == R_PPC64_REL24
13060 		   && relocation == 0
13061 		   && addend == 0)
13062 	    {
13063 	      bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
13064 	      continue;
13065 	    }
13066 	  break;
13067 	}
13068 
13069       /* Set `addend'.  */
13070       tls_type = 0;
13071       switch (r_type)
13072 	{
13073 	default:
13074 	  info->callbacks->einfo
13075 	    (_("%P: %B: unknown relocation type %d for `%T'\n"),
13076 	     input_bfd, (int) r_type, sym_name);
13077 
13078 	  bfd_set_error (bfd_error_bad_value);
13079 	  ret = FALSE;
13080 	  continue;
13081 
13082 	case R_PPC64_NONE:
13083 	case R_PPC64_TLS:
13084 	case R_PPC64_TLSGD:
13085 	case R_PPC64_TLSLD:
13086 	case R_PPC64_TOCSAVE:
13087 	case R_PPC64_GNU_VTINHERIT:
13088 	case R_PPC64_GNU_VTENTRY:
13089 	  continue;
13090 
13091 	  /* GOT16 relocations.  Like an ADDR16 using the symbol's
13092 	     address in the GOT as relocation value instead of the
13093 	     symbol's value itself.  Also, create a GOT entry for the
13094 	     symbol and put the symbol value there.  */
13095 	case R_PPC64_GOT_TLSGD16:
13096 	case R_PPC64_GOT_TLSGD16_LO:
13097 	case R_PPC64_GOT_TLSGD16_HI:
13098 	case R_PPC64_GOT_TLSGD16_HA:
13099 	  tls_type = TLS_TLS | TLS_GD;
13100 	  goto dogot;
13101 
13102 	case R_PPC64_GOT_TLSLD16:
13103 	case R_PPC64_GOT_TLSLD16_LO:
13104 	case R_PPC64_GOT_TLSLD16_HI:
13105 	case R_PPC64_GOT_TLSLD16_HA:
13106 	  tls_type = TLS_TLS | TLS_LD;
13107 	  goto dogot;
13108 
13109 	case R_PPC64_GOT_TPREL16_DS:
13110 	case R_PPC64_GOT_TPREL16_LO_DS:
13111 	case R_PPC64_GOT_TPREL16_HI:
13112 	case R_PPC64_GOT_TPREL16_HA:
13113 	  tls_type = TLS_TLS | TLS_TPREL;
13114 	  goto dogot;
13115 
13116 	case R_PPC64_GOT_DTPREL16_DS:
13117 	case R_PPC64_GOT_DTPREL16_LO_DS:
13118 	case R_PPC64_GOT_DTPREL16_HI:
13119 	case R_PPC64_GOT_DTPREL16_HA:
13120 	  tls_type = TLS_TLS | TLS_DTPREL;
13121 	  goto dogot;
13122 
13123 	case R_PPC64_GOT16:
13124 	case R_PPC64_GOT16_LO:
13125 	case R_PPC64_GOT16_HI:
13126 	case R_PPC64_GOT16_HA:
13127 	case R_PPC64_GOT16_DS:
13128 	case R_PPC64_GOT16_LO_DS:
13129 	dogot:
13130 	  {
13131 	    /* Relocation is to the entry for this symbol in the global
13132 	       offset table.  */
13133 	    asection *got;
13134 	    bfd_vma *offp;
13135 	    bfd_vma off;
13136 	    unsigned long indx = 0;
13137 	    struct got_entry *ent;
13138 
13139 	    if (tls_type == (TLS_TLS | TLS_LD)
13140 		&& (h == NULL
13141 		    || !h->elf.def_dynamic))
13142 	      ent = ppc64_tlsld_got (input_bfd);
13143 	    else
13144 	      {
13145 
13146 		if (h != NULL)
13147 		  {
13148 		    bfd_boolean dyn = htab->elf.dynamic_sections_created;
13149 		    if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
13150 							  &h->elf)
13151 			|| (info->shared
13152 			    && SYMBOL_CALLS_LOCAL (info, &h->elf)))
13153 		      /* This is actually a static link, or it is a
13154 			 -Bsymbolic link and the symbol is defined
13155 			 locally, or the symbol was forced to be local
13156 			 because of a version file.  */
13157 		      ;
13158 		    else
13159 		      {
13160 			BFD_ASSERT (h->elf.dynindx != -1);
13161 			indx = h->elf.dynindx;
13162 			unresolved_reloc = FALSE;
13163 		      }
13164 		    ent = h->elf.got.glist;
13165 		  }
13166 		else
13167 		  {
13168 		    if (local_got_ents == NULL)
13169 		      abort ();
13170 		    ent = local_got_ents[r_symndx];
13171 		  }
13172 
13173 		for (; ent != NULL; ent = ent->next)
13174 		  if (ent->addend == orig_rel.r_addend
13175 		      && ent->owner == input_bfd
13176 		      && ent->tls_type == tls_type)
13177 		    break;
13178 	      }
13179 
13180 	    if (ent == NULL)
13181 	      abort ();
13182 	    if (ent->is_indirect)
13183 	      ent = ent->got.ent;
13184 	    offp = &ent->got.offset;
13185 	    got = ppc64_elf_tdata (ent->owner)->got;
13186 	    if (got == NULL)
13187 	      abort ();
13188 
13189 	    /* The offset must always be a multiple of 8.  We use the
13190 	       least significant bit to record whether we have already
13191 	       processed this entry.  */
13192 	    off = *offp;
13193 	    if ((off & 1) != 0)
13194 	      off &= ~1;
13195 	    else
13196 	      {
13197 		/* Generate relocs for the dynamic linker, except in
13198 		   the case of TLSLD where we'll use one entry per
13199 		   module.  */
13200 		asection *relgot;
13201 		bfd_boolean ifunc;
13202 
13203 		*offp = off | 1;
13204 		relgot = NULL;
13205 		ifunc = (h != NULL
13206 			 ? h->elf.type == STT_GNU_IFUNC
13207 			 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
13208 		if ((info->shared || indx != 0)
13209 		    && (h == NULL
13210 			|| (tls_type == (TLS_TLS | TLS_LD)
13211 			    && !h->elf.def_dynamic)
13212 			|| ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13213 			|| h->elf.root.type != bfd_link_hash_undefweak))
13214 		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
13215 		else if (ifunc)
13216 		  relgot = htab->reliplt;
13217 		if (relgot != NULL)
13218 		  {
13219 		    outrel.r_offset = (got->output_section->vma
13220 				       + got->output_offset
13221 				       + off);
13222 		    outrel.r_addend = addend;
13223 		    if (tls_type & (TLS_LD | TLS_GD))
13224 		      {
13225 			outrel.r_addend = 0;
13226 			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
13227 			if (tls_type == (TLS_TLS | TLS_GD))
13228 			  {
13229 			    loc = relgot->contents;
13230 			    loc += (relgot->reloc_count++
13231 				    * sizeof (Elf64_External_Rela));
13232 			    bfd_elf64_swap_reloca_out (output_bfd,
13233 						       &outrel, loc);
13234 			    outrel.r_offset += 8;
13235 			    outrel.r_addend = addend;
13236 			    outrel.r_info
13237 			      = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13238 			  }
13239 		      }
13240 		    else if (tls_type == (TLS_TLS | TLS_DTPREL))
13241 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13242 		    else if (tls_type == (TLS_TLS | TLS_TPREL))
13243 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
13244 		    else if (indx != 0)
13245 		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
13246 		    else
13247 		      {
13248 			if (ifunc)
13249 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13250 			else
13251 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13252 
13253 			/* Write the .got section contents for the sake
13254 			   of prelink.  */
13255 			loc = got->contents + off;
13256 			bfd_put_64 (output_bfd, outrel.r_addend + relocation,
13257 				    loc);
13258 		      }
13259 
13260 		    if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
13261 		      {
13262 			outrel.r_addend += relocation;
13263 			if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
13264 			  outrel.r_addend -= htab->elf.tls_sec->vma;
13265 		      }
13266 		    loc = relgot->contents;
13267 		    loc += (relgot->reloc_count++
13268 			    * sizeof (Elf64_External_Rela));
13269 		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
13270 		  }
13271 
13272 		/* Init the .got section contents here if we're not
13273 		   emitting a reloc.  */
13274 		else
13275 		  {
13276 		    relocation += addend;
13277 		    if (tls_type == (TLS_TLS | TLS_LD))
13278 		      relocation = 1;
13279 		    else if (tls_type != 0)
13280 		      {
13281 			relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
13282 			if (tls_type == (TLS_TLS | TLS_TPREL))
13283 			  relocation += DTP_OFFSET - TP_OFFSET;
13284 
13285 			if (tls_type == (TLS_TLS | TLS_GD))
13286 			  {
13287 			    bfd_put_64 (output_bfd, relocation,
13288 					got->contents + off + 8);
13289 			    relocation = 1;
13290 			  }
13291 		      }
13292 
13293 		    bfd_put_64 (output_bfd, relocation,
13294 				got->contents + off);
13295 		  }
13296 	      }
13297 
13298 	    if (off >= (bfd_vma) -2)
13299 	      abort ();
13300 
13301 	    relocation = got->output_section->vma + got->output_offset + off;
13302 	    addend = -(TOCstart + htab->stub_group[input_section->id].toc_off);
13303 	  }
13304 	  break;
13305 
13306 	case R_PPC64_PLT16_HA:
13307 	case R_PPC64_PLT16_HI:
13308 	case R_PPC64_PLT16_LO:
13309 	case R_PPC64_PLT32:
13310 	case R_PPC64_PLT64:
13311 	  /* Relocation is to the entry for this symbol in the
13312 	     procedure linkage table.  */
13313 
13314 	  /* Resolve a PLT reloc against a local symbol directly,
13315 	     without using the procedure linkage table.  */
13316 	  if (h == NULL)
13317 	    break;
13318 
13319 	  /* It's possible that we didn't make a PLT entry for this
13320 	     symbol.  This happens when statically linking PIC code,
13321 	     or when using -Bsymbolic.  Go find a match if there is a
13322 	     PLT entry.  */
13323 	  if (htab->plt != NULL)
13324 	    {
13325 	      struct plt_entry *ent;
13326 	      for (ent = h->elf.plt.plist; ent != NULL; ent = ent->next)
13327 		if (ent->addend == orig_rel.r_addend
13328 		    && ent->plt.offset != (bfd_vma) -1)
13329 		  {
13330 		    relocation = (htab->plt->output_section->vma
13331 				  + htab->plt->output_offset
13332 				  + ent->plt.offset);
13333 		    unresolved_reloc = FALSE;
13334 		  }
13335 	    }
13336 	  break;
13337 
13338 	case R_PPC64_TOC:
13339 	  /* Relocation value is TOC base.  */
13340 	  relocation = TOCstart;
13341 	  if (r_symndx == STN_UNDEF)
13342 	    relocation += htab->stub_group[input_section->id].toc_off;
13343 	  else if (unresolved_reloc)
13344 	    ;
13345 	  else if (sec != NULL && sec->id <= htab->top_id)
13346 	    relocation += htab->stub_group[sec->id].toc_off;
13347 	  else
13348 	    unresolved_reloc = TRUE;
13349 	  goto dodyn;
13350 
13351 	  /* TOC16 relocs.  We want the offset relative to the TOC base,
13352 	     which is the address of the start of the TOC plus 0x8000.
13353 	     The TOC consists of sections .got, .toc, .tocbss, and .plt,
13354 	     in this order.  */
13355 	case R_PPC64_TOC16:
13356 	case R_PPC64_TOC16_LO:
13357 	case R_PPC64_TOC16_HI:
13358 	case R_PPC64_TOC16_DS:
13359 	case R_PPC64_TOC16_LO_DS:
13360 	case R_PPC64_TOC16_HA:
13361 	  addend -= TOCstart + htab->stub_group[input_section->id].toc_off;
13362 	  break;
13363 
13364 	  /* Relocate against the beginning of the section.  */
13365 	case R_PPC64_SECTOFF:
13366 	case R_PPC64_SECTOFF_LO:
13367 	case R_PPC64_SECTOFF_HI:
13368 	case R_PPC64_SECTOFF_DS:
13369 	case R_PPC64_SECTOFF_LO_DS:
13370 	case R_PPC64_SECTOFF_HA:
13371 	  if (sec != NULL)
13372 	    addend -= sec->output_section->vma;
13373 	  break;
13374 
13375 	case R_PPC64_REL16:
13376 	case R_PPC64_REL16_LO:
13377 	case R_PPC64_REL16_HI:
13378 	case R_PPC64_REL16_HA:
13379 	  break;
13380 
13381 	case R_PPC64_REL14:
13382 	case R_PPC64_REL14_BRNTAKEN:
13383 	case R_PPC64_REL14_BRTAKEN:
13384 	case R_PPC64_REL24:
13385 	  break;
13386 
13387 	case R_PPC64_TPREL16:
13388 	case R_PPC64_TPREL16_LO:
13389 	case R_PPC64_TPREL16_HI:
13390 	case R_PPC64_TPREL16_HA:
13391 	case R_PPC64_TPREL16_DS:
13392 	case R_PPC64_TPREL16_LO_DS:
13393 	case R_PPC64_TPREL16_HIGHER:
13394 	case R_PPC64_TPREL16_HIGHERA:
13395 	case R_PPC64_TPREL16_HIGHEST:
13396 	case R_PPC64_TPREL16_HIGHESTA:
13397 	  if (h != NULL
13398 	      && h->elf.root.type == bfd_link_hash_undefweak
13399 	      && h->elf.dynindx == -1)
13400 	    {
13401 	      /* Make this relocation against an undefined weak symbol
13402 		 resolve to zero.  This is really just a tweak, since
13403 		 code using weak externs ought to check that they are
13404 		 defined before using them.  */
13405 	      bfd_byte *p = contents + rel->r_offset - d_offset;
13406 
13407 	      insn = bfd_get_32 (output_bfd, p);
13408 	      insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
13409 	      if (insn != 0)
13410 		bfd_put_32 (output_bfd, insn, p);
13411 	      break;
13412 	    }
13413 	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13414 	  if (info->shared)
13415 	    /* The TPREL16 relocs shouldn't really be used in shared
13416 	       libs as they will result in DT_TEXTREL being set, but
13417 	       support them anyway.  */
13418 	    goto dodyn;
13419 	  break;
13420 
13421 	case R_PPC64_DTPREL16:
13422 	case R_PPC64_DTPREL16_LO:
13423 	case R_PPC64_DTPREL16_HI:
13424 	case R_PPC64_DTPREL16_HA:
13425 	case R_PPC64_DTPREL16_DS:
13426 	case R_PPC64_DTPREL16_LO_DS:
13427 	case R_PPC64_DTPREL16_HIGHER:
13428 	case R_PPC64_DTPREL16_HIGHERA:
13429 	case R_PPC64_DTPREL16_HIGHEST:
13430 	case R_PPC64_DTPREL16_HIGHESTA:
13431 	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13432 	  break;
13433 
13434 	case R_PPC64_DTPMOD64:
13435 	  relocation = 1;
13436 	  addend = 0;
13437 	  goto dodyn;
13438 
13439 	case R_PPC64_TPREL64:
13440 	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13441 	  goto dodyn;
13442 
13443 	case R_PPC64_DTPREL64:
13444 	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13445 	  /* Fall thru */
13446 
13447 	  /* Relocations that may need to be propagated if this is a
13448 	     dynamic object.  */
13449 	case R_PPC64_REL30:
13450 	case R_PPC64_REL32:
13451 	case R_PPC64_REL64:
13452 	case R_PPC64_ADDR14:
13453 	case R_PPC64_ADDR14_BRNTAKEN:
13454 	case R_PPC64_ADDR14_BRTAKEN:
13455 	case R_PPC64_ADDR16:
13456 	case R_PPC64_ADDR16_DS:
13457 	case R_PPC64_ADDR16_HA:
13458 	case R_PPC64_ADDR16_HI:
13459 	case R_PPC64_ADDR16_HIGHER:
13460 	case R_PPC64_ADDR16_HIGHERA:
13461 	case R_PPC64_ADDR16_HIGHEST:
13462 	case R_PPC64_ADDR16_HIGHESTA:
13463 	case R_PPC64_ADDR16_LO:
13464 	case R_PPC64_ADDR16_LO_DS:
13465 	case R_PPC64_ADDR24:
13466 	case R_PPC64_ADDR32:
13467 	case R_PPC64_ADDR64:
13468 	case R_PPC64_UADDR16:
13469 	case R_PPC64_UADDR32:
13470 	case R_PPC64_UADDR64:
13471 	dodyn:
13472 	  if ((input_section->flags & SEC_ALLOC) == 0)
13473 	    break;
13474 
13475 	  if (NO_OPD_RELOCS && is_opd)
13476 	    break;
13477 
13478 	  if ((info->shared
13479 	       && (h == NULL
13480 		   || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13481 		   || h->elf.root.type != bfd_link_hash_undefweak)
13482 	       && (must_be_dyn_reloc (info, r_type)
13483 		   || !SYMBOL_CALLS_LOCAL (info, &h->elf)))
13484 	      || (ELIMINATE_COPY_RELOCS
13485 		  && !info->shared
13486 		  && h != NULL
13487 		  && h->elf.dynindx != -1
13488 		  && !h->elf.non_got_ref
13489 		  && !h->elf.def_regular)
13490 	      || (!info->shared
13491 		  && (h != NULL
13492 		      ? h->elf.type == STT_GNU_IFUNC
13493 		      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
13494 	    {
13495 	      bfd_boolean skip, relocate;
13496 	      asection *sreloc;
13497 	      bfd_vma out_off;
13498 
13499 	      /* When generating a dynamic object, these relocations
13500 		 are copied into the output file to be resolved at run
13501 		 time.  */
13502 
13503 	      skip = FALSE;
13504 	      relocate = FALSE;
13505 
13506 	      out_off = _bfd_elf_section_offset (output_bfd, info,
13507 						 input_section, rel->r_offset);
13508 	      if (out_off == (bfd_vma) -1)
13509 		skip = TRUE;
13510 	      else if (out_off == (bfd_vma) -2)
13511 		skip = TRUE, relocate = TRUE;
13512 	      out_off += (input_section->output_section->vma
13513 			  + input_section->output_offset);
13514 	      outrel.r_offset = out_off;
13515 	      outrel.r_addend = rel->r_addend;
13516 
13517 	      /* Optimize unaligned reloc use.  */
13518 	      if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
13519 		  || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
13520 		r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
13521 	      else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
13522 		       || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
13523 		r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
13524 	      else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
13525 		       || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
13526 		r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
13527 
13528 	      if (skip)
13529 		memset (&outrel, 0, sizeof outrel);
13530 	      else if (!SYMBOL_CALLS_LOCAL (info, &h->elf)
13531 		       && !is_opd
13532 		       && r_type != R_PPC64_TOC)
13533 		{
13534 		  BFD_ASSERT (h->elf.dynindx != -1);
13535 		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
13536 		}
13537 	      else
13538 		{
13539 		  /* This symbol is local, or marked to become local,
13540 		     or this is an opd section reloc which must point
13541 		     at a local function.  */
13542 		  outrel.r_addend += relocation;
13543 		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
13544 		    {
13545 		      if (is_opd && h != NULL)
13546 			{
13547 			  /* Lie about opd entries.  This case occurs
13548 			     when building shared libraries and we
13549 			     reference a function in another shared
13550 			     lib.  The same thing happens for a weak
13551 			     definition in an application that's
13552 			     overridden by a strong definition in a
13553 			     shared lib.  (I believe this is a generic
13554 			     bug in binutils handling of weak syms.)
13555 			     In these cases we won't use the opd
13556 			     entry in this lib.  */
13557 			  unresolved_reloc = FALSE;
13558 			}
13559 		      if (!is_opd
13560 			  && r_type == R_PPC64_ADDR64
13561 			  && (h != NULL
13562 			      ? h->elf.type == STT_GNU_IFUNC
13563 			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
13564 			outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13565 		      else
13566 			{
13567 			  outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13568 
13569 			  /* We need to relocate .opd contents for ld.so.
13570 			     Prelink also wants simple and consistent rules
13571 			     for relocs.  This make all RELATIVE relocs have
13572 			     *r_offset equal to r_addend.  */
13573 			  relocate = TRUE;
13574 			}
13575 		    }
13576 		  else
13577 		    {
13578 		      long indx = 0;
13579 
13580 		      if (h != NULL
13581 			  ? h->elf.type == STT_GNU_IFUNC
13582 			  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13583 			{
13584 			  info->callbacks->einfo
13585 			    (_("%P: %H: %s for indirect "
13586 			       "function `%T' unsupported\n"),
13587 			     input_bfd, input_section, rel->r_offset,
13588 			     ppc64_elf_howto_table[r_type]->name,
13589 			     sym_name);
13590 			  ret = FALSE;
13591 			}
13592 		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
13593 			;
13594 		      else if (sec == NULL || sec->owner == NULL)
13595 			{
13596 			  bfd_set_error (bfd_error_bad_value);
13597 			  return FALSE;
13598 			}
13599 		      else
13600 			{
13601 			  asection *osec;
13602 
13603 			  osec = sec->output_section;
13604 			  indx = elf_section_data (osec)->dynindx;
13605 
13606 			  if (indx == 0)
13607 			    {
13608 			      if ((osec->flags & SEC_READONLY) == 0
13609 				  && htab->elf.data_index_section != NULL)
13610 				osec = htab->elf.data_index_section;
13611 			      else
13612 				osec = htab->elf.text_index_section;
13613 			      indx = elf_section_data (osec)->dynindx;
13614 			    }
13615 			  BFD_ASSERT (indx != 0);
13616 
13617 			  /* We are turning this relocation into one
13618 			     against a section symbol, so subtract out
13619 			     the output section's address but not the
13620 			     offset of the input section in the output
13621 			     section.  */
13622 			  outrel.r_addend -= osec->vma;
13623 			}
13624 
13625 		      outrel.r_info = ELF64_R_INFO (indx, r_type);
13626 		    }
13627 		}
13628 
13629 	      sreloc = elf_section_data (input_section)->sreloc;
13630 	      if (!htab->elf.dynamic_sections_created)
13631 		sreloc = htab->reliplt;
13632 	      if (sreloc == NULL)
13633 		abort ();
13634 
13635 	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
13636 		  >= sreloc->size)
13637 		abort ();
13638 	      loc = sreloc->contents;
13639 	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
13640 	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
13641 
13642 	      /* If this reloc is against an external symbol, it will
13643 		 be computed at runtime, so there's no need to do
13644 		 anything now.  However, for the sake of prelink ensure
13645 		 that the section contents are a known value.  */
13646 	      if (! relocate)
13647 		{
13648 		  unresolved_reloc = FALSE;
13649 		  /* The value chosen here is quite arbitrary as ld.so
13650 		     ignores section contents except for the special
13651 		     case of .opd where the contents might be accessed
13652 		     before relocation.  Choose zero, as that won't
13653 		     cause reloc overflow.  */
13654 		  relocation = 0;
13655 		  addend = 0;
13656 		  /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
13657 		     to improve backward compatibility with older
13658 		     versions of ld.  */
13659 		  if (r_type == R_PPC64_ADDR64)
13660 		    addend = outrel.r_addend;
13661 		  /* Adjust pc_relative relocs to have zero in *r_offset.  */
13662 		  else if (ppc64_elf_howto_table[r_type]->pc_relative)
13663 		    addend = (input_section->output_section->vma
13664 			      + input_section->output_offset
13665 			      + rel->r_offset);
13666 		}
13667 	    }
13668 	  break;
13669 
13670 	case R_PPC64_COPY:
13671 	case R_PPC64_GLOB_DAT:
13672 	case R_PPC64_JMP_SLOT:
13673 	case R_PPC64_JMP_IREL:
13674 	case R_PPC64_RELATIVE:
13675 	  /* We shouldn't ever see these dynamic relocs in relocatable
13676 	     files.  */
13677 	  /* Fall through.  */
13678 
13679 	case R_PPC64_PLTGOT16:
13680 	case R_PPC64_PLTGOT16_DS:
13681 	case R_PPC64_PLTGOT16_HA:
13682 	case R_PPC64_PLTGOT16_HI:
13683 	case R_PPC64_PLTGOT16_LO:
13684 	case R_PPC64_PLTGOT16_LO_DS:
13685 	case R_PPC64_PLTREL32:
13686 	case R_PPC64_PLTREL64:
13687 	  /* These ones haven't been implemented yet.  */
13688 
13689 	  info->callbacks->einfo
13690 	    (_("%P: %B: %s is not supported for `%T'\n"),
13691 	     input_bfd,
13692 	     ppc64_elf_howto_table[r_type]->name, sym_name);
13693 
13694 	  bfd_set_error (bfd_error_invalid_operation);
13695 	  ret = FALSE;
13696 	  continue;
13697 	}
13698 
13699       /* Multi-instruction sequences that access the TOC can be
13700 	 optimized, eg. addis ra,r2,0; addi rb,ra,x;
13701 	 to             nop;           addi rb,r2,x;  */
13702       switch (r_type)
13703 	{
13704 	default:
13705 	  break;
13706 
13707 	case R_PPC64_GOT_TLSLD16_HI:
13708 	case R_PPC64_GOT_TLSGD16_HI:
13709 	case R_PPC64_GOT_TPREL16_HI:
13710 	case R_PPC64_GOT_DTPREL16_HI:
13711 	case R_PPC64_GOT16_HI:
13712 	case R_PPC64_TOC16_HI:
13713 	  /* These relocs would only be useful if building up an
13714 	     offset to later add to r2, perhaps in an indexed
13715 	     addressing mode instruction.  Don't try to optimize.
13716 	     Unfortunately, the possibility of someone building up an
13717 	     offset like this or even with the HA relocs, means that
13718 	     we need to check the high insn when optimizing the low
13719 	     insn.  */
13720 	  break;
13721 
13722 	case R_PPC64_GOT_TLSLD16_HA:
13723 	case R_PPC64_GOT_TLSGD16_HA:
13724 	case R_PPC64_GOT_TPREL16_HA:
13725 	case R_PPC64_GOT_DTPREL16_HA:
13726 	case R_PPC64_GOT16_HA:
13727 	case R_PPC64_TOC16_HA:
13728 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
13729 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
13730 	    {
13731 	      bfd_byte *p = contents + (rel->r_offset & ~3);
13732 	      bfd_put_32 (input_bfd, NOP, p);
13733 	    }
13734 	  break;
13735 
13736 	case R_PPC64_GOT_TLSLD16_LO:
13737 	case R_PPC64_GOT_TLSGD16_LO:
13738 	case R_PPC64_GOT_TPREL16_LO_DS:
13739 	case R_PPC64_GOT_DTPREL16_LO_DS:
13740 	case R_PPC64_GOT16_LO:
13741 	case R_PPC64_GOT16_LO_DS:
13742 	case R_PPC64_TOC16_LO:
13743 	case R_PPC64_TOC16_LO_DS:
13744 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
13745 	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
13746 	    {
13747 	      bfd_byte *p = contents + (rel->r_offset & ~3);
13748 	      insn = bfd_get_32 (input_bfd, p);
13749 	      if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
13750 		{
13751 		  /* Transform addic to addi when we change reg.  */
13752 		  insn &= ~((0x3f << 26) | (0x1f << 16));
13753 		  insn |= (14u << 26) | (2 << 16);
13754 		}
13755 	      else
13756 		{
13757 		  insn &= ~(0x1f << 16);
13758 		  insn |= 2 << 16;
13759 		}
13760 	      bfd_put_32 (input_bfd, insn, p);
13761 	    }
13762 	  break;
13763 	}
13764 
13765       /* Do any further special processing.  */
13766       switch (r_type)
13767 	{
13768 	default:
13769 	  break;
13770 
13771 	case R_PPC64_ADDR16_HA:
13772 	case R_PPC64_REL16_HA:
13773 	case R_PPC64_ADDR16_HIGHERA:
13774 	case R_PPC64_ADDR16_HIGHESTA:
13775 	case R_PPC64_TOC16_HA:
13776 	case R_PPC64_SECTOFF_HA:
13777 	case R_PPC64_TPREL16_HA:
13778 	case R_PPC64_DTPREL16_HA:
13779 	case R_PPC64_TPREL16_HIGHER:
13780 	case R_PPC64_TPREL16_HIGHERA:
13781 	case R_PPC64_TPREL16_HIGHEST:
13782 	case R_PPC64_TPREL16_HIGHESTA:
13783 	case R_PPC64_DTPREL16_HIGHER:
13784 	case R_PPC64_DTPREL16_HIGHERA:
13785 	case R_PPC64_DTPREL16_HIGHEST:
13786 	case R_PPC64_DTPREL16_HIGHESTA:
13787 	  /* It's just possible that this symbol is a weak symbol
13788 	     that's not actually defined anywhere. In that case,
13789 	     'sec' would be NULL, and we should leave the symbol
13790 	     alone (it will be set to zero elsewhere in the link).  */
13791 	  if (sec == NULL)
13792 	    break;
13793 	  /* Fall thru */
13794 
13795 	case R_PPC64_GOT16_HA:
13796 	case R_PPC64_PLTGOT16_HA:
13797 	case R_PPC64_PLT16_HA:
13798 	case R_PPC64_GOT_TLSGD16_HA:
13799 	case R_PPC64_GOT_TLSLD16_HA:
13800 	case R_PPC64_GOT_TPREL16_HA:
13801 	case R_PPC64_GOT_DTPREL16_HA:
13802 	  /* Add 0x10000 if sign bit in 0:15 is set.
13803 	     Bits 0:15 are not used.  */
13804 	  addend += 0x8000;
13805 	  break;
13806 
13807 	case R_PPC64_ADDR16_DS:
13808 	case R_PPC64_ADDR16_LO_DS:
13809 	case R_PPC64_GOT16_DS:
13810 	case R_PPC64_GOT16_LO_DS:
13811 	case R_PPC64_PLT16_LO_DS:
13812 	case R_PPC64_SECTOFF_DS:
13813 	case R_PPC64_SECTOFF_LO_DS:
13814 	case R_PPC64_TOC16_DS:
13815 	case R_PPC64_TOC16_LO_DS:
13816 	case R_PPC64_PLTGOT16_DS:
13817 	case R_PPC64_PLTGOT16_LO_DS:
13818 	case R_PPC64_GOT_TPREL16_DS:
13819 	case R_PPC64_GOT_TPREL16_LO_DS:
13820 	case R_PPC64_GOT_DTPREL16_DS:
13821 	case R_PPC64_GOT_DTPREL16_LO_DS:
13822 	case R_PPC64_TPREL16_DS:
13823 	case R_PPC64_TPREL16_LO_DS:
13824 	case R_PPC64_DTPREL16_DS:
13825 	case R_PPC64_DTPREL16_LO_DS:
13826 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
13827 	  mask = 3;
13828 	  /* If this reloc is against an lq insn, then the value must be
13829 	     a multiple of 16.  This is somewhat of a hack, but the
13830 	     "correct" way to do this by defining _DQ forms of all the
13831 	     _DS relocs bloats all reloc switches in this file.  It
13832 	     doesn't seem to make much sense to use any of these relocs
13833 	     in data, so testing the insn should be safe.  */
13834 	  if ((insn & (0x3f << 26)) == (56u << 26))
13835 	    mask = 15;
13836 	  if (((relocation + addend) & mask) != 0)
13837 	    {
13838 	      info->callbacks->einfo
13839 		(_("%P: %H: error: %s not a multiple of %u\n"),
13840 		 input_bfd, input_section, rel->r_offset,
13841 		 ppc64_elf_howto_table[r_type]->name,
13842 		 mask + 1);
13843 	      bfd_set_error (bfd_error_bad_value);
13844 	      ret = FALSE;
13845 	      continue;
13846 	    }
13847 	  break;
13848 	}
13849 
13850       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
13851 	 because such sections are not SEC_ALLOC and thus ld.so will
13852 	 not process them.  */
13853       if (unresolved_reloc
13854 	  && !((input_section->flags & SEC_DEBUGGING) != 0
13855 	       && h->elf.def_dynamic)
13856 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
13857 				      rel->r_offset) != (bfd_vma) -1)
13858 	{
13859 	  info->callbacks->einfo
13860 	    (_("%P: %H: unresolvable %s against `%T'\n"),
13861 	     input_bfd, input_section, rel->r_offset,
13862 	     ppc64_elf_howto_table[(int) r_type]->name,
13863 	     h->elf.root.root.string);
13864 	  ret = FALSE;
13865 	}
13866 
13867       r = _bfd_final_link_relocate (ppc64_elf_howto_table[(int) r_type],
13868 				    input_bfd,
13869 				    input_section,
13870 				    contents,
13871 				    rel->r_offset,
13872 				    relocation,
13873 				    addend);
13874 
13875       if (r != bfd_reloc_ok)
13876 	{
13877 	  char *more_info = NULL;
13878 	  const char *reloc_name = ppc64_elf_howto_table[r_type]->name;
13879 
13880 	  if (reloc_dest != DEST_NORMAL)
13881 	    {
13882 	      more_info = bfd_malloc (strlen (reloc_name) + 8);
13883 	      if (more_info != NULL)
13884 		{
13885 		  strcpy (more_info, reloc_name);
13886 		  strcat (more_info, (reloc_dest == DEST_OPD
13887 				      ? " (OPD)" : " (stub)"));
13888 		  reloc_name = more_info;
13889 		}
13890 	    }
13891 
13892 	  if (r == bfd_reloc_overflow)
13893 	    {
13894 	      if (warned)
13895 		continue;
13896 	      if (h != NULL
13897 		  && h->elf.root.type == bfd_link_hash_undefweak
13898 		  && ppc64_elf_howto_table[r_type]->pc_relative)
13899 		{
13900 		  /* Assume this is a call protected by other code that
13901 		     detects the symbol is undefined.  If this is the case,
13902 		     we can safely ignore the overflow.  If not, the
13903 		     program is hosed anyway, and a little warning isn't
13904 		     going to help.  */
13905 
13906 		  continue;
13907 		}
13908 
13909 	      if (!((*info->callbacks->reloc_overflow)
13910 		    (info, &h->elf.root, sym_name,
13911 		     reloc_name, orig_rel.r_addend,
13912 		     input_bfd, input_section, rel->r_offset)))
13913 		return FALSE;
13914 	    }
13915 	  else
13916 	    {
13917 	      info->callbacks->einfo
13918 		(_("%P: %H: %s against `%T': error %d\n"),
13919 		 input_bfd, input_section, rel->r_offset,
13920 		 reloc_name, sym_name, (int) r);
13921 	      ret = FALSE;
13922 	    }
13923 	  if (more_info != NULL)
13924 	    free (more_info);
13925 	}
13926     }
13927 
13928   /* If we're emitting relocations, then shortly after this function
13929      returns, reloc offsets and addends for this section will be
13930      adjusted.  Worse, reloc symbol indices will be for the output
13931      file rather than the input.  Save a copy of the relocs for
13932      opd_entry_value.  */
13933   if (is_opd && (info->emitrelocations || info->relocatable))
13934     {
13935       bfd_size_type amt;
13936       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
13937       rel = bfd_alloc (input_bfd, amt);
13938       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd_relocs == NULL);
13939       ppc64_elf_tdata (input_bfd)->opd_relocs = rel;
13940       if (rel == NULL)
13941 	return FALSE;
13942       memcpy (rel, relocs, amt);
13943     }
13944   return ret;
13945 }
13946 
13947 /* Adjust the value of any local symbols in opd sections.  */
13948 
13949 static int
13950 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
13951 			      const char *name ATTRIBUTE_UNUSED,
13952 			      Elf_Internal_Sym *elfsym,
13953 			      asection *input_sec,
13954 			      struct elf_link_hash_entry *h)
13955 {
13956   struct _opd_sec_data *opd;
13957   long adjust;
13958   bfd_vma value;
13959 
13960   if (h != NULL)
13961     return 1;
13962 
13963   opd = get_opd_info (input_sec);
13964   if (opd == NULL || opd->adjust == NULL)
13965     return 1;
13966 
13967   value = elfsym->st_value - input_sec->output_offset;
13968   if (!info->relocatable)
13969     value -= input_sec->output_section->vma;
13970 
13971   adjust = opd->adjust[value / 8];
13972   if (adjust == -1)
13973     return 2;
13974 
13975   elfsym->st_value += adjust;
13976   return 1;
13977 }
13978 
13979 /* Finish up dynamic symbol handling.  We set the contents of various
13980    dynamic sections here.  */
13981 
13982 static bfd_boolean
13983 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
13984 				 struct bfd_link_info *info,
13985 				 struct elf_link_hash_entry *h,
13986 				 Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
13987 {
13988   struct ppc_link_hash_table *htab;
13989   struct plt_entry *ent;
13990   Elf_Internal_Rela rela;
13991   bfd_byte *loc;
13992 
13993   htab = ppc_hash_table (info);
13994   if (htab == NULL)
13995     return FALSE;
13996 
13997   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13998     if (ent->plt.offset != (bfd_vma) -1)
13999       {
14000 	/* This symbol has an entry in the procedure linkage
14001 	   table.  Set it up.  */
14002 	if (!htab->elf.dynamic_sections_created
14003 	    || h->dynindx == -1)
14004 	  {
14005 	    BFD_ASSERT (h->type == STT_GNU_IFUNC
14006 			&& h->def_regular
14007 			&& (h->root.type == bfd_link_hash_defined
14008 			    || h->root.type == bfd_link_hash_defweak));
14009 	    rela.r_offset = (htab->iplt->output_section->vma
14010 			     + htab->iplt->output_offset
14011 			     + ent->plt.offset);
14012 	    rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14013 	    rela.r_addend = (h->root.u.def.value
14014 			     + h->root.u.def.section->output_offset
14015 			     + h->root.u.def.section->output_section->vma
14016 			     + ent->addend);
14017 	    loc = (htab->reliplt->contents
14018 		   + (htab->reliplt->reloc_count++
14019 		      * sizeof (Elf64_External_Rela)));
14020 	  }
14021 	else
14022 	  {
14023 	    rela.r_offset = (htab->plt->output_section->vma
14024 			     + htab->plt->output_offset
14025 			     + ent->plt.offset);
14026 	    rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
14027 	    rela.r_addend = ent->addend;
14028 	    loc = (htab->relplt->contents
14029 		   + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE)
14030 		      / (PLT_ENTRY_SIZE / sizeof (Elf64_External_Rela))));
14031 	  }
14032 	bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14033       }
14034 
14035   if (h->needs_copy)
14036     {
14037       /* This symbol needs a copy reloc.  Set it up.  */
14038 
14039       if (h->dynindx == -1
14040 	  || (h->root.type != bfd_link_hash_defined
14041 	      && h->root.type != bfd_link_hash_defweak)
14042 	  || htab->relbss == NULL)
14043 	abort ();
14044 
14045       rela.r_offset = (h->root.u.def.value
14046 		       + h->root.u.def.section->output_section->vma
14047 		       + h->root.u.def.section->output_offset);
14048       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
14049       rela.r_addend = 0;
14050       loc = htab->relbss->contents;
14051       loc += htab->relbss->reloc_count++ * sizeof (Elf64_External_Rela);
14052       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14053     }
14054 
14055   return TRUE;
14056 }
14057 
14058 /* Used to decide how to sort relocs in an optimal manner for the
14059    dynamic linker, before writing them out.  */
14060 
14061 static enum elf_reloc_type_class
14062 ppc64_elf_reloc_type_class (const Elf_Internal_Rela *rela)
14063 {
14064   enum elf_ppc64_reloc_type r_type;
14065 
14066   r_type = ELF64_R_TYPE (rela->r_info);
14067   switch (r_type)
14068     {
14069     case R_PPC64_RELATIVE:
14070       return reloc_class_relative;
14071     case R_PPC64_JMP_SLOT:
14072       return reloc_class_plt;
14073     case R_PPC64_COPY:
14074       return reloc_class_copy;
14075     default:
14076       return reloc_class_normal;
14077     }
14078 }
14079 
14080 /* Finish up the dynamic sections.  */
14081 
14082 static bfd_boolean
14083 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
14084 				   struct bfd_link_info *info)
14085 {
14086   struct ppc_link_hash_table *htab;
14087   bfd *dynobj;
14088   asection *sdyn;
14089 
14090   htab = ppc_hash_table (info);
14091   if (htab == NULL)
14092     return FALSE;
14093 
14094   dynobj = htab->elf.dynobj;
14095   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
14096 
14097   if (htab->elf.dynamic_sections_created)
14098     {
14099       Elf64_External_Dyn *dyncon, *dynconend;
14100 
14101       if (sdyn == NULL || htab->got == NULL)
14102 	abort ();
14103 
14104       dyncon = (Elf64_External_Dyn *) sdyn->contents;
14105       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
14106       for (; dyncon < dynconend; dyncon++)
14107 	{
14108 	  Elf_Internal_Dyn dyn;
14109 	  asection *s;
14110 
14111 	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
14112 
14113 	  switch (dyn.d_tag)
14114 	    {
14115 	    default:
14116 	      continue;
14117 
14118 	    case DT_PPC64_GLINK:
14119 	      s = htab->glink;
14120 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14121 	      /* We stupidly defined DT_PPC64_GLINK to be the start
14122 		 of glink rather than the first entry point, which is
14123 		 what ld.so needs, and now have a bigger stub to
14124 		 support automatic multiple TOCs.  */
14125 	      dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 32;
14126 	      break;
14127 
14128 	    case DT_PPC64_OPD:
14129 	      s = bfd_get_section_by_name (output_bfd, ".opd");
14130 	      if (s == NULL)
14131 		continue;
14132 	      dyn.d_un.d_ptr = s->vma;
14133 	      break;
14134 
14135 	    case DT_PPC64_OPDSZ:
14136 	      s = bfd_get_section_by_name (output_bfd, ".opd");
14137 	      if (s == NULL)
14138 		continue;
14139 	      dyn.d_un.d_val = s->size;
14140 	      break;
14141 
14142 	    case DT_PLTGOT:
14143 	      s = htab->plt;
14144 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14145 	      break;
14146 
14147 	    case DT_JMPREL:
14148 	      s = htab->relplt;
14149 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14150 	      break;
14151 
14152 	    case DT_PLTRELSZ:
14153 	      dyn.d_un.d_val = htab->relplt->size;
14154 	      break;
14155 
14156 	    case DT_RELASZ:
14157 	      /* Don't count procedure linkage table relocs in the
14158 		 overall reloc count.  */
14159 	      s = htab->relplt;
14160 	      if (s == NULL)
14161 		continue;
14162 	      dyn.d_un.d_val -= s->size;
14163 	      break;
14164 
14165 	    case DT_RELA:
14166 	      /* We may not be using the standard ELF linker script.
14167 		 If .rela.plt is the first .rela section, we adjust
14168 		 DT_RELA to not include it.  */
14169 	      s = htab->relplt;
14170 	      if (s == NULL)
14171 		continue;
14172 	      if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset)
14173 		continue;
14174 	      dyn.d_un.d_ptr += s->size;
14175 	      break;
14176 	    }
14177 
14178 	  bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
14179 	}
14180     }
14181 
14182   if (htab->got != NULL && htab->got->size != 0)
14183     {
14184       /* Fill in the first entry in the global offset table.
14185 	 We use it to hold the link-time TOCbase.  */
14186       bfd_put_64 (output_bfd,
14187 		  elf_gp (output_bfd) + TOC_BASE_OFF,
14188 		  htab->got->contents);
14189 
14190       /* Set .got entry size.  */
14191       elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 8;
14192     }
14193 
14194   if (htab->plt != NULL && htab->plt->size != 0)
14195     {
14196       /* Set .plt entry size.  */
14197       elf_section_data (htab->plt->output_section)->this_hdr.sh_entsize
14198 	= PLT_ENTRY_SIZE;
14199     }
14200 
14201   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
14202      brlt ourselves if emitrelocations.  */
14203   if (htab->brlt != NULL
14204       && htab->brlt->reloc_count != 0
14205       && !_bfd_elf_link_output_relocs (output_bfd,
14206 				       htab->brlt,
14207 				       elf_section_data (htab->brlt)->rela.hdr,
14208 				       elf_section_data (htab->brlt)->relocs,
14209 				       NULL))
14210     return FALSE;
14211 
14212   if (htab->glink != NULL
14213       && htab->glink->reloc_count != 0
14214       && !_bfd_elf_link_output_relocs (output_bfd,
14215 				       htab->glink,
14216 				       elf_section_data (htab->glink)->rela.hdr,
14217 				       elf_section_data (htab->glink)->relocs,
14218 				       NULL))
14219     return FALSE;
14220 
14221 
14222   if (htab->glink_eh_frame != NULL
14223       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
14224       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
14225 					   htab->glink_eh_frame,
14226 					   htab->glink_eh_frame->contents))
14227     return FALSE;
14228 
14229   /* We need to handle writing out multiple GOT sections ourselves,
14230      since we didn't add them to DYNOBJ.  We know dynobj is the first
14231      bfd.  */
14232   while ((dynobj = dynobj->link_next) != NULL)
14233     {
14234       asection *s;
14235 
14236       if (!is_ppc64_elf (dynobj))
14237 	continue;
14238 
14239       s = ppc64_elf_tdata (dynobj)->got;
14240       if (s != NULL
14241 	  && s->size != 0
14242 	  && s->output_section != bfd_abs_section_ptr
14243 	  && !bfd_set_section_contents (output_bfd, s->output_section,
14244 					s->contents, s->output_offset,
14245 					s->size))
14246 	return FALSE;
14247       s = ppc64_elf_tdata (dynobj)->relgot;
14248       if (s != NULL
14249 	  && s->size != 0
14250 	  && s->output_section != bfd_abs_section_ptr
14251 	  && !bfd_set_section_contents (output_bfd, s->output_section,
14252 					s->contents, s->output_offset,
14253 					s->size))
14254 	return FALSE;
14255     }
14256 
14257   return TRUE;
14258 }
14259 
14260 #include "elf64-target.h"
14261 
14262 /* FreeBSD support */
14263 
14264 #undef  TARGET_LITTLE_SYM
14265 #undef  TARGET_LITTLE_NAME
14266 
14267 #undef  TARGET_BIG_SYM
14268 #define TARGET_BIG_SYM	bfd_elf64_powerpc_freebsd_vec
14269 #undef  TARGET_BIG_NAME
14270 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
14271 
14272 #undef  ELF_OSABI
14273 #define	ELF_OSABI       ELFOSABI_FREEBSD
14274 
14275 #undef  elf64_bed
14276 #define elf64_bed	elf64_powerpc_fbsd_bed
14277 
14278 #include "elf64-target.h"
14279 
14280