1/* PowerPC64-specific support for 64-bit ELF.
2   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3   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 <amodra@bigpond.net.au>
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
38static bfd_reloc_status_type ppc64_elf_ha_reloc
39  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
40static bfd_reloc_status_type ppc64_elf_branch_reloc
41  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
42static bfd_reloc_status_type ppc64_elf_brtaken_reloc
43  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
44static bfd_reloc_status_type ppc64_elf_sectoff_reloc
45  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
46static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
47  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
48static bfd_reloc_status_type ppc64_elf_toc_reloc
49  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
50static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
51  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
52static bfd_reloc_status_type ppc64_elf_toc64_reloc
53  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
54static bfd_reloc_status_type ppc64_elf_unhandled_reloc
55  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
56static bfd_vma opd_entry_value
57  (asection *, bfd_vma, asection **, bfd_vma *);
58
59#define TARGET_LITTLE_SYM	bfd_elf64_powerpcle_vec
60#define TARGET_LITTLE_NAME	"elf64-powerpcle"
61#define TARGET_BIG_SYM		bfd_elf64_powerpc_vec
62#define TARGET_BIG_NAME		"elf64-powerpc"
63#define ELF_ARCH		bfd_arch_powerpc
64#define ELF_MACHINE_CODE	EM_PPC64
65#define ELF_MAXPAGESIZE		0x10000
66#define ELF_COMMONPAGESIZE	0x1000
67#define elf_info_to_howto	ppc64_elf_info_to_howto
68
69#define elf_backend_want_got_sym 0
70#define elf_backend_want_plt_sym 0
71#define elf_backend_plt_alignment 3
72#define elf_backend_plt_not_loaded 1
73#define elf_backend_got_header_size 8
74#define elf_backend_can_gc_sections 1
75#define elf_backend_can_refcount 1
76#define elf_backend_rela_normal 1
77#define elf_backend_default_execstack 0
78
79#define bfd_elf64_mkobject		      ppc64_elf_mkobject
80#define bfd_elf64_bfd_reloc_type_lookup	      ppc64_elf_reloc_type_lookup
81#define bfd_elf64_bfd_reloc_name_lookup ppc64_elf_reloc_name_lookup
82#define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
83#define bfd_elf64_new_section_hook	      ppc64_elf_new_section_hook
84#define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
85#define bfd_elf64_bfd_link_hash_table_free    ppc64_elf_link_hash_table_free
86#define bfd_elf64_get_synthetic_symtab	      ppc64_elf_get_synthetic_symtab
87
88#define elf_backend_object_p		      ppc64_elf_object_p
89#define elf_backend_grok_prstatus	      ppc64_elf_grok_prstatus
90#define elf_backend_grok_psinfo		      ppc64_elf_grok_psinfo
91#define elf_backend_write_core_note	      ppc64_elf_write_core_note
92#define elf_backend_create_dynamic_sections   ppc64_elf_create_dynamic_sections
93#define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
94#define elf_backend_add_symbol_hook	      ppc64_elf_add_symbol_hook
95#define elf_backend_check_directives	      ppc64_elf_check_directives
96#define elf_backend_as_needed_cleanup	      ppc64_elf_as_needed_cleanup
97#define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
98#define elf_backend_check_relocs	      ppc64_elf_check_relocs
99#define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
100#define elf_backend_gc_mark_hook	      ppc64_elf_gc_mark_hook
101#define elf_backend_gc_sweep_hook	      ppc64_elf_gc_sweep_hook
102#define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
103#define elf_backend_hide_symbol		      ppc64_elf_hide_symbol
104#define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
105#define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
106#define elf_backend_init_index_section	      _bfd_elf_init_2_index_sections
107#define elf_backend_action_discarded	      ppc64_elf_action_discarded
108#define elf_backend_relocate_section	      ppc64_elf_relocate_section
109#define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
110#define elf_backend_reloc_type_class	      ppc64_elf_reloc_type_class
111#define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
112#define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
113#define elf_backend_special_sections	      ppc64_elf_special_sections
114
115/* The name of the dynamic interpreter.  This is put in the .interp
116   section.  */
117#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
118
119/* The size in bytes of an entry in the procedure linkage table.  */
120#define PLT_ENTRY_SIZE 24
121
122/* The initial size of the plt reserved for the dynamic linker.  */
123#define PLT_INITIAL_ENTRY_SIZE PLT_ENTRY_SIZE
124
125/* TOC base pointers offset from start of TOC.  */
126#define TOC_BASE_OFF	0x8000
127
128/* Offset of tp and dtp pointers from start of TLS block.  */
129#define TP_OFFSET	0x7000
130#define DTP_OFFSET	0x8000
131
132/* .plt call stub instructions.  The normal stub is like this, but
133   sometimes the .plt entry crosses a 64k boundary and we need to
134   insert an addi to adjust r12.  */
135#define PLT_CALL_STUB_SIZE (7*4)
136#define ADDIS_R12_R2	0x3d820000	/* addis %r12,%r2,xxx@ha     */
137#define STD_R2_40R1	0xf8410028	/* std	 %r2,40(%r1)	     */
138#define LD_R11_0R12	0xe96c0000	/* ld	 %r11,xxx+0@l(%r12)  */
139#define MTCTR_R11	0x7d6903a6	/* mtctr %r11		     */
140#define LD_R2_0R12	0xe84c0000	/* ld	 %r2,xxx+8@l(%r12)   */
141					/* ld	 %r11,xxx+16@l(%r12) */
142#define BCTR		0x4e800420	/* bctr			     */
143
144
145#define ADDIS_R12_R12	0x3d8c0000	/* addis %r12,%r12,off@ha  */
146#define ADDI_R12_R12	0x398c0000	/* addi %r12,%r12,off@l  */
147#define ADDIS_R2_R2	0x3c420000	/* addis %r2,%r2,off@ha  */
148#define ADDI_R2_R2	0x38420000	/* addi  %r2,%r2,off@l   */
149
150#define LD_R11_0R2	0xe9620000	/* ld	 %r11,xxx+0(%r2) */
151#define LD_R2_0R2	0xe8420000	/* ld	 %r2,xxx+0(%r2)  */
152
153#define LD_R2_40R1	0xe8410028	/* ld    %r2,40(%r1)     */
154
155/* glink call stub instructions.  We enter with the index in R0.  */
156#define GLINK_CALL_STUB_SIZE (16*4)
157					/* 0:				*/
158					/*  .quad plt0-1f		*/
159					/* __glink:			*/
160#define MFLR_R12	0x7d8802a6	/*  mflr %12			*/
161#define BCL_20_31	0x429f0005	/*  bcl 20,31,1f		*/
162					/* 1:				*/
163#define MFLR_R11	0x7d6802a6	/*  mflr %11			*/
164#define LD_R2_M16R11	0xe84bfff0	/*  ld %2,(0b-1b)(%11)		*/
165#define MTLR_R12	0x7d8803a6	/*  mtlr %12			*/
166#define ADD_R12_R2_R11	0x7d825a14	/*  add %12,%2,%11		*/
167					/*  ld %11,0(%12)		*/
168					/*  ld %2,8(%12)		*/
169					/*  mtctr %11			*/
170					/*  ld %11,16(%12)		*/
171					/*  bctr			*/
172
173/* Pad with this.  */
174#define NOP		0x60000000
175
176/* Some other nops.  */
177#define CROR_151515	0x4def7b82
178#define CROR_313131	0x4ffffb82
179
180/* .glink entries for the first 32k functions are two instructions.  */
181#define LI_R0_0		0x38000000	/* li    %r0,0		*/
182#define B_DOT		0x48000000	/* b     .		*/
183
184/* After that, we need two instructions to load the index, followed by
185   a branch.  */
186#define LIS_R0_0	0x3c000000	/* lis   %r0,0		*/
187#define ORI_R0_R0_0	0x60000000	/* ori	 %r0,%r0,0	*/
188
189/* Instructions used by the save and restore reg functions.  */
190#define STD_R0_0R1	0xf8010000	/* std   %r0,0(%r1)	*/
191#define STD_R0_0R12	0xf80c0000	/* std   %r0,0(%r12)	*/
192#define LD_R0_0R1	0xe8010000	/* ld    %r0,0(%r1)	*/
193#define LD_R0_0R12	0xe80c0000	/* ld    %r0,0(%r12)	*/
194#define STFD_FR0_0R1	0xd8010000	/* stfd  %fr0,0(%r1)	*/
195#define LFD_FR0_0R1	0xc8010000	/* lfd   %fr0,0(%r1)	*/
196#define LI_R12_0	0x39800000	/* li    %r12,0		*/
197#define STVX_VR0_R12_R0	0x7c0c01ce	/* stvx  %v0,%r12,%r0	*/
198#define LVX_VR0_R12_R0	0x7c0c00ce	/* lvx   %v0,%r12,%r0	*/
199#define MTLR_R0		0x7c0803a6	/* mtlr  %r0		*/
200#define BLR		0x4e800020	/* blr			*/
201
202/* Since .opd is an array of descriptors and each entry will end up
203   with identical R_PPC64_RELATIVE relocs, there is really no need to
204   propagate .opd relocs;  The dynamic linker should be taught to
205   relocate .opd without reloc entries.  */
206#ifndef NO_OPD_RELOCS
207#define NO_OPD_RELOCS 0
208#endif
209
210#define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
211
212/* Relocation HOWTO's.  */
213static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
214
215static reloc_howto_type ppc64_elf_howto_raw[] = {
216  /* This reloc does nothing.  */
217  HOWTO (R_PPC64_NONE,		/* type */
218	 0,			/* rightshift */
219	 2,			/* size (0 = byte, 1 = short, 2 = long) */
220	 32,			/* bitsize */
221	 FALSE,			/* pc_relative */
222	 0,			/* bitpos */
223	 complain_overflow_dont, /* complain_on_overflow */
224	 bfd_elf_generic_reloc,	/* special_function */
225	 "R_PPC64_NONE",	/* name */
226	 FALSE,			/* partial_inplace */
227	 0,			/* src_mask */
228	 0,			/* dst_mask */
229	 FALSE),		/* pcrel_offset */
230
231  /* A standard 32 bit relocation.  */
232  HOWTO (R_PPC64_ADDR32,	/* type */
233	 0,			/* rightshift */
234	 2,			/* size (0 = byte, 1 = short, 2 = long) */
235	 32,			/* bitsize */
236	 FALSE,			/* pc_relative */
237	 0,			/* bitpos */
238	 complain_overflow_bitfield, /* complain_on_overflow */
239	 bfd_elf_generic_reloc,	/* special_function */
240	 "R_PPC64_ADDR32",	/* name */
241	 FALSE,			/* partial_inplace */
242	 0,			/* src_mask */
243	 0xffffffff,		/* dst_mask */
244	 FALSE),		/* pcrel_offset */
245
246  /* An absolute 26 bit branch; the lower two bits must be zero.
247     FIXME: we don't check that, we just clear them.  */
248  HOWTO (R_PPC64_ADDR24,	/* type */
249	 0,			/* rightshift */
250	 2,			/* size (0 = byte, 1 = short, 2 = long) */
251	 26,			/* bitsize */
252	 FALSE,			/* pc_relative */
253	 0,			/* bitpos */
254	 complain_overflow_bitfield, /* complain_on_overflow */
255	 bfd_elf_generic_reloc,	/* special_function */
256	 "R_PPC64_ADDR24",	/* name */
257	 FALSE,			/* partial_inplace */
258	 0,			/* src_mask */
259	 0x03fffffc,		/* dst_mask */
260	 FALSE),		/* pcrel_offset */
261
262  /* A standard 16 bit relocation.  */
263  HOWTO (R_PPC64_ADDR16,	/* type */
264	 0,			/* rightshift */
265	 1,			/* size (0 = byte, 1 = short, 2 = long) */
266	 16,			/* bitsize */
267	 FALSE,			/* pc_relative */
268	 0,			/* bitpos */
269	 complain_overflow_bitfield, /* complain_on_overflow */
270	 bfd_elf_generic_reloc,	/* special_function */
271	 "R_PPC64_ADDR16",	/* name */
272	 FALSE,			/* partial_inplace */
273	 0,			/* src_mask */
274	 0xffff,		/* dst_mask */
275	 FALSE),		/* pcrel_offset */
276
277  /* A 16 bit relocation without overflow.  */
278  HOWTO (R_PPC64_ADDR16_LO,	/* type */
279	 0,			/* rightshift */
280	 1,			/* size (0 = byte, 1 = short, 2 = long) */
281	 16,			/* bitsize */
282	 FALSE,			/* pc_relative */
283	 0,			/* bitpos */
284	 complain_overflow_dont,/* complain_on_overflow */
285	 bfd_elf_generic_reloc,	/* special_function */
286	 "R_PPC64_ADDR16_LO",	/* name */
287	 FALSE,			/* partial_inplace */
288	 0,			/* src_mask */
289	 0xffff,		/* dst_mask */
290	 FALSE),		/* pcrel_offset */
291
292  /* Bits 16-31 of an address.  */
293  HOWTO (R_PPC64_ADDR16_HI,	/* type */
294	 16,			/* rightshift */
295	 1,			/* size (0 = byte, 1 = short, 2 = long) */
296	 16,			/* bitsize */
297	 FALSE,			/* pc_relative */
298	 0,			/* bitpos */
299	 complain_overflow_dont, /* complain_on_overflow */
300	 bfd_elf_generic_reloc,	/* special_function */
301	 "R_PPC64_ADDR16_HI",	/* name */
302	 FALSE,			/* partial_inplace */
303	 0,			/* src_mask */
304	 0xffff,		/* dst_mask */
305	 FALSE),		/* pcrel_offset */
306
307  /* Bits 16-31 of an address, plus 1 if the contents of the low 16
308     bits, treated as a signed number, is negative.  */
309  HOWTO (R_PPC64_ADDR16_HA,	/* type */
310	 16,			/* rightshift */
311	 1,			/* size (0 = byte, 1 = short, 2 = long) */
312	 16,			/* bitsize */
313	 FALSE,			/* pc_relative */
314	 0,			/* bitpos */
315	 complain_overflow_dont, /* complain_on_overflow */
316	 ppc64_elf_ha_reloc,	/* special_function */
317	 "R_PPC64_ADDR16_HA",	/* name */
318	 FALSE,			/* partial_inplace */
319	 0,			/* src_mask */
320	 0xffff,		/* dst_mask */
321	 FALSE),		/* pcrel_offset */
322
323  /* An absolute 16 bit branch; the lower two bits must be zero.
324     FIXME: we don't check that, we just clear them.  */
325  HOWTO (R_PPC64_ADDR14,	/* type */
326	 0,			/* rightshift */
327	 2,			/* size (0 = byte, 1 = short, 2 = long) */
328	 16,			/* bitsize */
329	 FALSE,			/* pc_relative */
330	 0,			/* bitpos */
331	 complain_overflow_bitfield, /* complain_on_overflow */
332	 ppc64_elf_branch_reloc, /* special_function */
333	 "R_PPC64_ADDR14",	/* name */
334	 FALSE,			/* partial_inplace */
335	 0,			/* src_mask */
336	 0x0000fffc,		/* dst_mask */
337	 FALSE),		/* pcrel_offset */
338
339  /* An absolute 16 bit branch, for which bit 10 should be set to
340     indicate that the branch is expected to be taken.  The lower two
341     bits must be zero.  */
342  HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
343	 0,			/* rightshift */
344	 2,			/* size (0 = byte, 1 = short, 2 = long) */
345	 16,			/* bitsize */
346	 FALSE,			/* pc_relative */
347	 0,			/* bitpos */
348	 complain_overflow_bitfield, /* complain_on_overflow */
349	 ppc64_elf_brtaken_reloc, /* special_function */
350	 "R_PPC64_ADDR14_BRTAKEN",/* name */
351	 FALSE,			/* partial_inplace */
352	 0,			/* src_mask */
353	 0x0000fffc,		/* dst_mask */
354	 FALSE),		/* pcrel_offset */
355
356  /* An absolute 16 bit branch, for which bit 10 should be set to
357     indicate that the branch is not expected to be taken.  The lower
358     two bits must be zero.  */
359  HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
360	 0,			/* rightshift */
361	 2,			/* size (0 = byte, 1 = short, 2 = long) */
362	 16,			/* bitsize */
363	 FALSE,			/* pc_relative */
364	 0,			/* bitpos */
365	 complain_overflow_bitfield, /* complain_on_overflow */
366	 ppc64_elf_brtaken_reloc, /* special_function */
367	 "R_PPC64_ADDR14_BRNTAKEN",/* name */
368	 FALSE,			/* partial_inplace */
369	 0,			/* src_mask */
370	 0x0000fffc,		/* dst_mask */
371	 FALSE),		/* pcrel_offset */
372
373  /* A relative 26 bit branch; the lower two bits must be zero.  */
374  HOWTO (R_PPC64_REL24,		/* type */
375	 0,			/* rightshift */
376	 2,			/* size (0 = byte, 1 = short, 2 = long) */
377	 26,			/* bitsize */
378	 TRUE,			/* pc_relative */
379	 0,			/* bitpos */
380	 complain_overflow_signed, /* complain_on_overflow */
381	 ppc64_elf_branch_reloc, /* special_function */
382	 "R_PPC64_REL24",	/* name */
383	 FALSE,			/* partial_inplace */
384	 0,			/* src_mask */
385	 0x03fffffc,		/* dst_mask */
386	 TRUE),			/* pcrel_offset */
387
388  /* A relative 16 bit branch; the lower two bits must be zero.  */
389  HOWTO (R_PPC64_REL14,		/* type */
390	 0,			/* rightshift */
391	 2,			/* size (0 = byte, 1 = short, 2 = long) */
392	 16,			/* bitsize */
393	 TRUE,			/* pc_relative */
394	 0,			/* bitpos */
395	 complain_overflow_signed, /* complain_on_overflow */
396	 ppc64_elf_branch_reloc, /* special_function */
397	 "R_PPC64_REL14",	/* name */
398	 FALSE,			/* partial_inplace */
399	 0,			/* src_mask */
400	 0x0000fffc,		/* dst_mask */
401	 TRUE),			/* pcrel_offset */
402
403  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
404     the branch is expected to be taken.  The lower two bits must be
405     zero.  */
406  HOWTO (R_PPC64_REL14_BRTAKEN,	/* type */
407	 0,			/* rightshift */
408	 2,			/* size (0 = byte, 1 = short, 2 = long) */
409	 16,			/* bitsize */
410	 TRUE,			/* pc_relative */
411	 0,			/* bitpos */
412	 complain_overflow_signed, /* complain_on_overflow */
413	 ppc64_elf_brtaken_reloc, /* special_function */
414	 "R_PPC64_REL14_BRTAKEN", /* name */
415	 FALSE,			/* partial_inplace */
416	 0,			/* src_mask */
417	 0x0000fffc,		/* dst_mask */
418	 TRUE),			/* pcrel_offset */
419
420  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
421     the branch is not expected to be taken.  The lower two bits must
422     be zero.  */
423  HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
424	 0,			/* rightshift */
425	 2,			/* size (0 = byte, 1 = short, 2 = long) */
426	 16,			/* bitsize */
427	 TRUE,			/* pc_relative */
428	 0,			/* bitpos */
429	 complain_overflow_signed, /* complain_on_overflow */
430	 ppc64_elf_brtaken_reloc, /* special_function */
431	 "R_PPC64_REL14_BRNTAKEN",/* name */
432	 FALSE,			/* partial_inplace */
433	 0,			/* src_mask */
434	 0x0000fffc,		/* dst_mask */
435	 TRUE),			/* pcrel_offset */
436
437  /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
438     symbol.  */
439  HOWTO (R_PPC64_GOT16,		/* type */
440	 0,			/* rightshift */
441	 1,			/* size (0 = byte, 1 = short, 2 = long) */
442	 16,			/* bitsize */
443	 FALSE,			/* pc_relative */
444	 0,			/* bitpos */
445	 complain_overflow_signed, /* complain_on_overflow */
446	 ppc64_elf_unhandled_reloc, /* special_function */
447	 "R_PPC64_GOT16",	/* name */
448	 FALSE,			/* partial_inplace */
449	 0,			/* src_mask */
450	 0xffff,		/* dst_mask */
451	 FALSE),		/* pcrel_offset */
452
453  /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
454     the symbol.  */
455  HOWTO (R_PPC64_GOT16_LO,	/* type */
456	 0,			/* rightshift */
457	 1,			/* size (0 = byte, 1 = short, 2 = long) */
458	 16,			/* bitsize */
459	 FALSE,			/* pc_relative */
460	 0,			/* bitpos */
461	 complain_overflow_dont, /* complain_on_overflow */
462	 ppc64_elf_unhandled_reloc, /* special_function */
463	 "R_PPC64_GOT16_LO",	/* name */
464	 FALSE,			/* partial_inplace */
465	 0,			/* src_mask */
466	 0xffff,		/* dst_mask */
467	 FALSE),		/* pcrel_offset */
468
469  /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
470     the symbol.  */
471  HOWTO (R_PPC64_GOT16_HI,	/* type */
472	 16,			/* rightshift */
473	 1,			/* size (0 = byte, 1 = short, 2 = long) */
474	 16,			/* bitsize */
475	 FALSE,			/* pc_relative */
476	 0,			/* bitpos */
477	 complain_overflow_dont,/* complain_on_overflow */
478	 ppc64_elf_unhandled_reloc, /* special_function */
479	 "R_PPC64_GOT16_HI",	/* name */
480	 FALSE,			/* partial_inplace */
481	 0,			/* src_mask */
482	 0xffff,		/* dst_mask */
483	 FALSE),		/* pcrel_offset */
484
485  /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
486     the symbol.  */
487  HOWTO (R_PPC64_GOT16_HA,	/* type */
488	 16,			/* rightshift */
489	 1,			/* size (0 = byte, 1 = short, 2 = long) */
490	 16,			/* bitsize */
491	 FALSE,			/* pc_relative */
492	 0,			/* bitpos */
493	 complain_overflow_dont,/* complain_on_overflow */
494	 ppc64_elf_unhandled_reloc, /* special_function */
495	 "R_PPC64_GOT16_HA",	/* name */
496	 FALSE,			/* partial_inplace */
497	 0,			/* src_mask */
498	 0xffff,		/* dst_mask */
499	 FALSE),		/* pcrel_offset */
500
501  /* This is used only by the dynamic linker.  The symbol should exist
502     both in the object being run and in some shared library.  The
503     dynamic linker copies the data addressed by the symbol from the
504     shared library into the object, because the object being
505     run has to have the data at some particular address.  */
506  HOWTO (R_PPC64_COPY,		/* type */
507	 0,			/* rightshift */
508	 0,			/* this one is variable size */
509	 0,			/* bitsize */
510	 FALSE,			/* pc_relative */
511	 0,			/* bitpos */
512	 complain_overflow_dont, /* complain_on_overflow */
513	 ppc64_elf_unhandled_reloc, /* special_function */
514	 "R_PPC64_COPY",	/* name */
515	 FALSE,			/* partial_inplace */
516	 0,			/* src_mask */
517	 0,			/* dst_mask */
518	 FALSE),		/* pcrel_offset */
519
520  /* Like R_PPC64_ADDR64, but used when setting global offset table
521     entries.  */
522  HOWTO (R_PPC64_GLOB_DAT,	/* type */
523	 0,			/* rightshift */
524	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
525	 64,			/* bitsize */
526	 FALSE,			/* pc_relative */
527	 0,			/* bitpos */
528	 complain_overflow_dont, /* complain_on_overflow */
529	 ppc64_elf_unhandled_reloc,  /* special_function */
530	 "R_PPC64_GLOB_DAT",	/* name */
531	 FALSE,			/* partial_inplace */
532	 0,			/* src_mask */
533	 ONES (64),		/* dst_mask */
534	 FALSE),		/* pcrel_offset */
535
536  /* Created by the link editor.  Marks a procedure linkage table
537     entry for a symbol.  */
538  HOWTO (R_PPC64_JMP_SLOT,	/* type */
539	 0,			/* rightshift */
540	 0,			/* size (0 = byte, 1 = short, 2 = long) */
541	 0,			/* bitsize */
542	 FALSE,			/* pc_relative */
543	 0,			/* bitpos */
544	 complain_overflow_dont, /* complain_on_overflow */
545	 ppc64_elf_unhandled_reloc, /* special_function */
546	 "R_PPC64_JMP_SLOT",	/* name */
547	 FALSE,			/* partial_inplace */
548	 0,			/* src_mask */
549	 0,			/* dst_mask */
550	 FALSE),		/* pcrel_offset */
551
552  /* Used only by the dynamic linker.  When the object is run, this
553     doubleword64 is set to the load address of the object, plus the
554     addend.  */
555  HOWTO (R_PPC64_RELATIVE,	/* type */
556	 0,			/* rightshift */
557	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
558	 64,			/* bitsize */
559	 FALSE,			/* pc_relative */
560	 0,			/* bitpos */
561	 complain_overflow_dont, /* complain_on_overflow */
562	 bfd_elf_generic_reloc,	/* special_function */
563	 "R_PPC64_RELATIVE",	/* name */
564	 FALSE,			/* partial_inplace */
565	 0,			/* src_mask */
566	 ONES (64),		/* dst_mask */
567	 FALSE),		/* pcrel_offset */
568
569  /* Like R_PPC64_ADDR32, but may be unaligned.  */
570  HOWTO (R_PPC64_UADDR32,	/* type */
571	 0,			/* rightshift */
572	 2,			/* size (0 = byte, 1 = short, 2 = long) */
573	 32,			/* bitsize */
574	 FALSE,			/* pc_relative */
575	 0,			/* bitpos */
576	 complain_overflow_bitfield, /* complain_on_overflow */
577	 bfd_elf_generic_reloc,	/* special_function */
578	 "R_PPC64_UADDR32",	/* name */
579	 FALSE,			/* partial_inplace */
580	 0,			/* src_mask */
581	 0xffffffff,		/* dst_mask */
582	 FALSE),		/* pcrel_offset */
583
584  /* Like R_PPC64_ADDR16, but may be unaligned.  */
585  HOWTO (R_PPC64_UADDR16,	/* type */
586	 0,			/* rightshift */
587	 1,			/* size (0 = byte, 1 = short, 2 = long) */
588	 16,			/* bitsize */
589	 FALSE,			/* pc_relative */
590	 0,			/* bitpos */
591	 complain_overflow_bitfield, /* complain_on_overflow */
592	 bfd_elf_generic_reloc,	/* special_function */
593	 "R_PPC64_UADDR16",	/* name */
594	 FALSE,			/* partial_inplace */
595	 0,			/* src_mask */
596	 0xffff,		/* dst_mask */
597	 FALSE),		/* pcrel_offset */
598
599  /* 32-bit PC relative.  */
600  HOWTO (R_PPC64_REL32,		/* type */
601	 0,			/* rightshift */
602	 2,			/* size (0 = byte, 1 = short, 2 = long) */
603	 32,			/* bitsize */
604	 TRUE,			/* pc_relative */
605	 0,			/* bitpos */
606	 /* FIXME: Verify.  Was complain_overflow_bitfield.  */
607	 complain_overflow_signed, /* complain_on_overflow */
608	 bfd_elf_generic_reloc,	/* special_function */
609	 "R_PPC64_REL32",	/* name */
610	 FALSE,			/* partial_inplace */
611	 0,			/* src_mask */
612	 0xffffffff,		/* dst_mask */
613	 TRUE),			/* pcrel_offset */
614
615  /* 32-bit relocation to the symbol's procedure linkage table.  */
616  HOWTO (R_PPC64_PLT32,		/* type */
617	 0,			/* rightshift */
618	 2,			/* size (0 = byte, 1 = short, 2 = long) */
619	 32,			/* bitsize */
620	 FALSE,			/* pc_relative */
621	 0,			/* bitpos */
622	 complain_overflow_bitfield, /* complain_on_overflow */
623	 ppc64_elf_unhandled_reloc, /* special_function */
624	 "R_PPC64_PLT32",	/* name */
625	 FALSE,			/* partial_inplace */
626	 0,			/* src_mask */
627	 0xffffffff,		/* dst_mask */
628	 FALSE),		/* pcrel_offset */
629
630  /* 32-bit PC relative relocation to the symbol's procedure linkage table.
631     FIXME: R_PPC64_PLTREL32 not supported.  */
632  HOWTO (R_PPC64_PLTREL32,	/* type */
633	 0,			/* rightshift */
634	 2,			/* size (0 = byte, 1 = short, 2 = long) */
635	 32,			/* bitsize */
636	 TRUE,			/* pc_relative */
637	 0,			/* bitpos */
638	 complain_overflow_signed, /* complain_on_overflow */
639	 bfd_elf_generic_reloc,	/* special_function */
640	 "R_PPC64_PLTREL32",	/* name */
641	 FALSE,			/* partial_inplace */
642	 0,			/* src_mask */
643	 0xffffffff,		/* dst_mask */
644	 TRUE),			/* pcrel_offset */
645
646  /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
647     the symbol.  */
648  HOWTO (R_PPC64_PLT16_LO,	/* type */
649	 0,			/* rightshift */
650	 1,			/* size (0 = byte, 1 = short, 2 = long) */
651	 16,			/* bitsize */
652	 FALSE,			/* pc_relative */
653	 0,			/* bitpos */
654	 complain_overflow_dont, /* complain_on_overflow */
655	 ppc64_elf_unhandled_reloc, /* special_function */
656	 "R_PPC64_PLT16_LO",	/* name */
657	 FALSE,			/* partial_inplace */
658	 0,			/* src_mask */
659	 0xffff,		/* dst_mask */
660	 FALSE),		/* pcrel_offset */
661
662  /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
663     the symbol.  */
664  HOWTO (R_PPC64_PLT16_HI,	/* type */
665	 16,			/* rightshift */
666	 1,			/* size (0 = byte, 1 = short, 2 = long) */
667	 16,			/* bitsize */
668	 FALSE,			/* pc_relative */
669	 0,			/* bitpos */
670	 complain_overflow_dont, /* complain_on_overflow */
671	 ppc64_elf_unhandled_reloc, /* special_function */
672	 "R_PPC64_PLT16_HI",	/* name */
673	 FALSE,			/* partial_inplace */
674	 0,			/* src_mask */
675	 0xffff,		/* dst_mask */
676	 FALSE),		/* pcrel_offset */
677
678  /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
679     the symbol.  */
680  HOWTO (R_PPC64_PLT16_HA,	/* type */
681	 16,			/* rightshift */
682	 1,			/* size (0 = byte, 1 = short, 2 = long) */
683	 16,			/* bitsize */
684	 FALSE,			/* pc_relative */
685	 0,			/* bitpos */
686	 complain_overflow_dont, /* complain_on_overflow */
687	 ppc64_elf_unhandled_reloc, /* special_function */
688	 "R_PPC64_PLT16_HA",	/* name */
689	 FALSE,			/* partial_inplace */
690	 0,			/* src_mask */
691	 0xffff,		/* dst_mask */
692	 FALSE),		/* pcrel_offset */
693
694  /* 16-bit section relative relocation.  */
695  HOWTO (R_PPC64_SECTOFF,	/* type */
696	 0,			/* rightshift */
697	 1,			/* size (0 = byte, 1 = short, 2 = long) */
698	 16,			/* bitsize */
699	 FALSE,			/* pc_relative */
700	 0,			/* bitpos */
701	 complain_overflow_bitfield, /* complain_on_overflow */
702	 ppc64_elf_sectoff_reloc, /* special_function */
703	 "R_PPC64_SECTOFF",	/* name */
704	 FALSE,			/* partial_inplace */
705	 0,			/* src_mask */
706	 0xffff,		/* dst_mask */
707	 FALSE),		/* pcrel_offset */
708
709  /* Like R_PPC64_SECTOFF, but no overflow warning.  */
710  HOWTO (R_PPC64_SECTOFF_LO,	/* type */
711	 0,			/* rightshift */
712	 1,			/* size (0 = byte, 1 = short, 2 = long) */
713	 16,			/* bitsize */
714	 FALSE,			/* pc_relative */
715	 0,			/* bitpos */
716	 complain_overflow_dont, /* complain_on_overflow */
717	 ppc64_elf_sectoff_reloc, /* special_function */
718	 "R_PPC64_SECTOFF_LO",	/* name */
719	 FALSE,			/* partial_inplace */
720	 0,			/* src_mask */
721	 0xffff,		/* dst_mask */
722	 FALSE),		/* pcrel_offset */
723
724  /* 16-bit upper half section relative relocation.  */
725  HOWTO (R_PPC64_SECTOFF_HI,	/* type */
726	 16,			/* rightshift */
727	 1,			/* size (0 = byte, 1 = short, 2 = long) */
728	 16,			/* bitsize */
729	 FALSE,			/* pc_relative */
730	 0,			/* bitpos */
731	 complain_overflow_dont, /* complain_on_overflow */
732	 ppc64_elf_sectoff_reloc, /* special_function */
733	 "R_PPC64_SECTOFF_HI",	/* name */
734	 FALSE,			/* partial_inplace */
735	 0,			/* src_mask */
736	 0xffff,		/* dst_mask */
737	 FALSE),		/* pcrel_offset */
738
739  /* 16-bit upper half adjusted section relative relocation.  */
740  HOWTO (R_PPC64_SECTOFF_HA,	/* type */
741	 16,			/* rightshift */
742	 1,			/* size (0 = byte, 1 = short, 2 = long) */
743	 16,			/* bitsize */
744	 FALSE,			/* pc_relative */
745	 0,			/* bitpos */
746	 complain_overflow_dont, /* complain_on_overflow */
747	 ppc64_elf_sectoff_ha_reloc, /* special_function */
748	 "R_PPC64_SECTOFF_HA",	/* name */
749	 FALSE,			/* partial_inplace */
750	 0,			/* src_mask */
751	 0xffff,		/* dst_mask */
752	 FALSE),		/* pcrel_offset */
753
754  /* Like R_PPC64_REL24 without touching the two least significant bits.  */
755  HOWTO (R_PPC64_REL30,		/* type */
756	 2,			/* rightshift */
757	 2,			/* size (0 = byte, 1 = short, 2 = long) */
758	 30,			/* bitsize */
759	 TRUE,			/* pc_relative */
760	 0,			/* bitpos */
761	 complain_overflow_dont, /* complain_on_overflow */
762	 bfd_elf_generic_reloc, /* special_function */
763	 "R_PPC64_REL30",	/* name */
764	 FALSE,			/* partial_inplace */
765	 0,			/* src_mask */
766	 0xfffffffc,		/* dst_mask */
767	 TRUE),			/* pcrel_offset */
768
769  /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
770
771  /* A standard 64-bit relocation.  */
772  HOWTO (R_PPC64_ADDR64,	/* type */
773	 0,			/* rightshift */
774	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
775	 64,			/* bitsize */
776	 FALSE,			/* pc_relative */
777	 0,			/* bitpos */
778	 complain_overflow_dont, /* complain_on_overflow */
779	 bfd_elf_generic_reloc,	/* special_function */
780	 "R_PPC64_ADDR64",	/* name */
781	 FALSE,			/* partial_inplace */
782	 0,			/* src_mask */
783	 ONES (64),		/* dst_mask */
784	 FALSE),		/* pcrel_offset */
785
786  /* The bits 32-47 of an address.  */
787  HOWTO (R_PPC64_ADDR16_HIGHER,	/* type */
788	 32,			/* rightshift */
789	 1,			/* size (0 = byte, 1 = short, 2 = long) */
790	 16,			/* bitsize */
791	 FALSE,			/* pc_relative */
792	 0,			/* bitpos */
793	 complain_overflow_dont, /* complain_on_overflow */
794	 bfd_elf_generic_reloc,	/* special_function */
795	 "R_PPC64_ADDR16_HIGHER", /* name */
796	 FALSE,			/* partial_inplace */
797	 0,			/* src_mask */
798	 0xffff,		/* dst_mask */
799	 FALSE),		/* pcrel_offset */
800
801  /* The bits 32-47 of an address, plus 1 if the contents of the low
802     16 bits, treated as a signed number, is negative.  */
803  HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
804	 32,			/* rightshift */
805	 1,			/* size (0 = byte, 1 = short, 2 = long) */
806	 16,			/* bitsize */
807	 FALSE,			/* pc_relative */
808	 0,			/* bitpos */
809	 complain_overflow_dont, /* complain_on_overflow */
810	 ppc64_elf_ha_reloc,	/* special_function */
811	 "R_PPC64_ADDR16_HIGHERA", /* name */
812	 FALSE,			/* partial_inplace */
813	 0,			/* src_mask */
814	 0xffff,		/* dst_mask */
815	 FALSE),		/* pcrel_offset */
816
817  /* The bits 48-63 of an address.  */
818  HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
819	 48,			/* rightshift */
820	 1,			/* size (0 = byte, 1 = short, 2 = long) */
821	 16,			/* bitsize */
822	 FALSE,			/* pc_relative */
823	 0,			/* bitpos */
824	 complain_overflow_dont, /* complain_on_overflow */
825	 bfd_elf_generic_reloc,	/* special_function */
826	 "R_PPC64_ADDR16_HIGHEST", /* name */
827	 FALSE,			/* partial_inplace */
828	 0,			/* src_mask */
829	 0xffff,		/* dst_mask */
830	 FALSE),		/* pcrel_offset */
831
832  /* The bits 48-63 of an address, plus 1 if the contents of the low
833     16 bits, treated as a signed number, is negative.  */
834  HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
835	 48,			/* rightshift */
836	 1,			/* size (0 = byte, 1 = short, 2 = long) */
837	 16,			/* bitsize */
838	 FALSE,			/* pc_relative */
839	 0,			/* bitpos */
840	 complain_overflow_dont, /* complain_on_overflow */
841	 ppc64_elf_ha_reloc,	/* special_function */
842	 "R_PPC64_ADDR16_HIGHESTA", /* name */
843	 FALSE,			/* partial_inplace */
844	 0,			/* src_mask */
845	 0xffff,		/* dst_mask */
846	 FALSE),		/* pcrel_offset */
847
848  /* Like ADDR64, but may be unaligned.  */
849  HOWTO (R_PPC64_UADDR64,	/* type */
850	 0,			/* rightshift */
851	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
852	 64,			/* bitsize */
853	 FALSE,			/* pc_relative */
854	 0,			/* bitpos */
855	 complain_overflow_dont, /* complain_on_overflow */
856	 bfd_elf_generic_reloc,	/* special_function */
857	 "R_PPC64_UADDR64",	/* name */
858	 FALSE,			/* partial_inplace */
859	 0,			/* src_mask */
860	 ONES (64),		/* dst_mask */
861	 FALSE),		/* pcrel_offset */
862
863  /* 64-bit relative relocation.  */
864  HOWTO (R_PPC64_REL64,		/* type */
865	 0,			/* rightshift */
866	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
867	 64,			/* bitsize */
868	 TRUE,			/* pc_relative */
869	 0,			/* bitpos */
870	 complain_overflow_dont, /* complain_on_overflow */
871	 bfd_elf_generic_reloc,	/* special_function */
872	 "R_PPC64_REL64",	/* name */
873	 FALSE,			/* partial_inplace */
874	 0,			/* src_mask */
875	 ONES (64),		/* dst_mask */
876	 TRUE),			/* pcrel_offset */
877
878  /* 64-bit relocation to the symbol's procedure linkage table.  */
879  HOWTO (R_PPC64_PLT64,		/* type */
880	 0,			/* rightshift */
881	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
882	 64,			/* bitsize */
883	 FALSE,			/* pc_relative */
884	 0,			/* bitpos */
885	 complain_overflow_dont, /* complain_on_overflow */
886	 ppc64_elf_unhandled_reloc, /* special_function */
887	 "R_PPC64_PLT64",	/* name */
888	 FALSE,			/* partial_inplace */
889	 0,			/* src_mask */
890	 ONES (64),		/* dst_mask */
891	 FALSE),		/* pcrel_offset */
892
893  /* 64-bit PC relative relocation to the symbol's procedure linkage
894     table.  */
895  /* FIXME: R_PPC64_PLTREL64 not supported.  */
896  HOWTO (R_PPC64_PLTREL64,	/* type */
897	 0,			/* rightshift */
898	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
899	 64,			/* bitsize */
900	 TRUE,			/* pc_relative */
901	 0,			/* bitpos */
902	 complain_overflow_dont, /* complain_on_overflow */
903	 ppc64_elf_unhandled_reloc, /* special_function */
904	 "R_PPC64_PLTREL64",	/* name */
905	 FALSE,			/* partial_inplace */
906	 0,			/* src_mask */
907	 ONES (64),		/* dst_mask */
908	 TRUE),			/* pcrel_offset */
909
910  /* 16 bit TOC-relative relocation.  */
911
912  /* R_PPC64_TOC16	  47	   half16*	S + A - .TOC.  */
913  HOWTO (R_PPC64_TOC16,		/* type */
914	 0,			/* rightshift */
915	 1,			/* size (0 = byte, 1 = short, 2 = long) */
916	 16,			/* bitsize */
917	 FALSE,			/* pc_relative */
918	 0,			/* bitpos */
919	 complain_overflow_signed, /* complain_on_overflow */
920	 ppc64_elf_toc_reloc,	/* special_function */
921	 "R_PPC64_TOC16",	/* name */
922	 FALSE,			/* partial_inplace */
923	 0,			/* src_mask */
924	 0xffff,		/* dst_mask */
925	 FALSE),		/* pcrel_offset */
926
927  /* 16 bit TOC-relative relocation without overflow.  */
928
929  /* R_PPC64_TOC16_LO	  48	   half16	 #lo (S + A - .TOC.)  */
930  HOWTO (R_PPC64_TOC16_LO,	/* type */
931	 0,			/* rightshift */
932	 1,			/* size (0 = byte, 1 = short, 2 = long) */
933	 16,			/* bitsize */
934	 FALSE,			/* pc_relative */
935	 0,			/* bitpos */
936	 complain_overflow_dont, /* complain_on_overflow */
937	 ppc64_elf_toc_reloc,	/* special_function */
938	 "R_PPC64_TOC16_LO",	/* name */
939	 FALSE,			/* partial_inplace */
940	 0,			/* src_mask */
941	 0xffff,		/* dst_mask */
942	 FALSE),		/* pcrel_offset */
943
944  /* 16 bit TOC-relative relocation, high 16 bits.  */
945
946  /* R_PPC64_TOC16_HI	  49	   half16	 #hi (S + A - .TOC.)  */
947  HOWTO (R_PPC64_TOC16_HI,	/* type */
948	 16,			/* rightshift */
949	 1,			/* size (0 = byte, 1 = short, 2 = long) */
950	 16,			/* bitsize */
951	 FALSE,			/* pc_relative */
952	 0,			/* bitpos */
953	 complain_overflow_dont, /* complain_on_overflow */
954	 ppc64_elf_toc_reloc,	/* special_function */
955	 "R_PPC64_TOC16_HI",	/* name */
956	 FALSE,			/* partial_inplace */
957	 0,			/* src_mask */
958	 0xffff,		/* dst_mask */
959	 FALSE),		/* pcrel_offset */
960
961  /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
962     contents of the low 16 bits, treated as a signed number, is
963     negative.  */
964
965  /* R_PPC64_TOC16_HA	  50	   half16	 #ha (S + A - .TOC.)  */
966  HOWTO (R_PPC64_TOC16_HA,	/* type */
967	 16,			/* rightshift */
968	 1,			/* size (0 = byte, 1 = short, 2 = long) */
969	 16,			/* bitsize */
970	 FALSE,			/* pc_relative */
971	 0,			/* bitpos */
972	 complain_overflow_dont, /* complain_on_overflow */
973	 ppc64_elf_toc_ha_reloc, /* special_function */
974	 "R_PPC64_TOC16_HA",	/* name */
975	 FALSE,			/* partial_inplace */
976	 0,			/* src_mask */
977	 0xffff,		/* dst_mask */
978	 FALSE),		/* pcrel_offset */
979
980  /* 64-bit relocation; insert value of TOC base (.TOC.).  */
981
982  /* R_PPC64_TOC		  51	   doubleword64	 .TOC.  */
983  HOWTO (R_PPC64_TOC,		/* type */
984	 0,			/* rightshift */
985	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
986	 64,			/* bitsize */
987	 FALSE,			/* pc_relative */
988	 0,			/* bitpos */
989	 complain_overflow_bitfield, /* complain_on_overflow */
990	 ppc64_elf_toc64_reloc,	/* special_function */
991	 "R_PPC64_TOC",		/* name */
992	 FALSE,			/* partial_inplace */
993	 0,			/* src_mask */
994	 ONES (64),		/* dst_mask */
995	 FALSE),		/* pcrel_offset */
996
997  /* Like R_PPC64_GOT16, but also informs the link editor that the
998     value to relocate may (!) refer to a PLT entry which the link
999     editor (a) may replace with the symbol value.  If the link editor
1000     is unable to fully resolve the symbol, it may (b) create a PLT
1001     entry and store the address to the new PLT entry in the GOT.
1002     This permits lazy resolution of function symbols at run time.
1003     The link editor may also skip all of this and just (c) emit a
1004     R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
1005  /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
1006    HOWTO (R_PPC64_PLTGOT16,	/* type */
1007	 0,			/* rightshift */
1008	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1009	 16,			/* bitsize */
1010	 FALSE,			/* pc_relative */
1011	 0,			/* bitpos */
1012	 complain_overflow_signed, /* complain_on_overflow */
1013	 ppc64_elf_unhandled_reloc, /* special_function */
1014	 "R_PPC64_PLTGOT16",	/* name */
1015	 FALSE,			/* partial_inplace */
1016	 0,			/* src_mask */
1017	 0xffff,		/* dst_mask */
1018	 FALSE),		/* pcrel_offset */
1019
1020  /* Like R_PPC64_PLTGOT16, but without overflow.  */
1021  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1022  HOWTO (R_PPC64_PLTGOT16_LO,	/* type */
1023	 0,			/* rightshift */
1024	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1025	 16,			/* bitsize */
1026	 FALSE,			/* pc_relative */
1027	 0,			/* bitpos */
1028	 complain_overflow_dont, /* complain_on_overflow */
1029	 ppc64_elf_unhandled_reloc, /* special_function */
1030	 "R_PPC64_PLTGOT16_LO",	/* name */
1031	 FALSE,			/* partial_inplace */
1032	 0,			/* src_mask */
1033	 0xffff,		/* dst_mask */
1034	 FALSE),		/* pcrel_offset */
1035
1036  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
1037  /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
1038  HOWTO (R_PPC64_PLTGOT16_HI,	/* type */
1039	 16,			/* rightshift */
1040	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1041	 16,			/* bitsize */
1042	 FALSE,			/* pc_relative */
1043	 0,			/* bitpos */
1044	 complain_overflow_dont, /* complain_on_overflow */
1045	 ppc64_elf_unhandled_reloc, /* special_function */
1046	 "R_PPC64_PLTGOT16_HI",	/* name */
1047	 FALSE,			/* partial_inplace */
1048	 0,			/* src_mask */
1049	 0xffff,		/* dst_mask */
1050	 FALSE),		/* pcrel_offset */
1051
1052  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
1053     1 if the contents of the low 16 bits, treated as a signed number,
1054     is negative.  */
1055  /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
1056  HOWTO (R_PPC64_PLTGOT16_HA,	/* type */
1057	 16,			/* rightshift */
1058	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1059	 16,			/* bitsize */
1060	 FALSE,			/* pc_relative */
1061	 0,			/* bitpos */
1062	 complain_overflow_dont,/* complain_on_overflow */
1063	 ppc64_elf_unhandled_reloc, /* special_function */
1064	 "R_PPC64_PLTGOT16_HA",	/* name */
1065	 FALSE,			/* partial_inplace */
1066	 0,			/* src_mask */
1067	 0xffff,		/* dst_mask */
1068	 FALSE),		/* pcrel_offset */
1069
1070  /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
1071  HOWTO (R_PPC64_ADDR16_DS,	/* type */
1072	 0,			/* rightshift */
1073	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1074	 16,			/* bitsize */
1075	 FALSE,			/* pc_relative */
1076	 0,			/* bitpos */
1077	 complain_overflow_bitfield, /* complain_on_overflow */
1078	 bfd_elf_generic_reloc,	/* special_function */
1079	 "R_PPC64_ADDR16_DS",	/* name */
1080	 FALSE,			/* partial_inplace */
1081	 0,			/* src_mask */
1082	 0xfffc,		/* dst_mask */
1083	 FALSE),		/* pcrel_offset */
1084
1085  /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
1086  HOWTO (R_PPC64_ADDR16_LO_DS,	/* type */
1087	 0,			/* rightshift */
1088	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1089	 16,			/* bitsize */
1090	 FALSE,			/* pc_relative */
1091	 0,			/* bitpos */
1092	 complain_overflow_dont,/* complain_on_overflow */
1093	 bfd_elf_generic_reloc,	/* special_function */
1094	 "R_PPC64_ADDR16_LO_DS",/* name */
1095	 FALSE,			/* partial_inplace */
1096	 0,			/* src_mask */
1097	 0xfffc,		/* dst_mask */
1098	 FALSE),		/* pcrel_offset */
1099
1100  /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
1101  HOWTO (R_PPC64_GOT16_DS,	/* type */
1102	 0,			/* rightshift */
1103	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1104	 16,			/* bitsize */
1105	 FALSE,			/* pc_relative */
1106	 0,			/* bitpos */
1107	 complain_overflow_signed, /* complain_on_overflow */
1108	 ppc64_elf_unhandled_reloc, /* special_function */
1109	 "R_PPC64_GOT16_DS",	/* name */
1110	 FALSE,			/* partial_inplace */
1111	 0,			/* src_mask */
1112	 0xfffc,		/* dst_mask */
1113	 FALSE),		/* pcrel_offset */
1114
1115  /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
1116  HOWTO (R_PPC64_GOT16_LO_DS,	/* type */
1117	 0,			/* rightshift */
1118	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1119	 16,			/* bitsize */
1120	 FALSE,			/* pc_relative */
1121	 0,			/* bitpos */
1122	 complain_overflow_dont, /* complain_on_overflow */
1123	 ppc64_elf_unhandled_reloc, /* special_function */
1124	 "R_PPC64_GOT16_LO_DS",	/* name */
1125	 FALSE,			/* partial_inplace */
1126	 0,			/* src_mask */
1127	 0xfffc,		/* dst_mask */
1128	 FALSE),		/* pcrel_offset */
1129
1130  /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
1131  HOWTO (R_PPC64_PLT16_LO_DS,	/* type */
1132	 0,			/* rightshift */
1133	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1134	 16,			/* bitsize */
1135	 FALSE,			/* pc_relative */
1136	 0,			/* bitpos */
1137	 complain_overflow_dont, /* complain_on_overflow */
1138	 ppc64_elf_unhandled_reloc, /* special_function */
1139	 "R_PPC64_PLT16_LO_DS",	/* name */
1140	 FALSE,			/* partial_inplace */
1141	 0,			/* src_mask */
1142	 0xfffc,		/* dst_mask */
1143	 FALSE),		/* pcrel_offset */
1144
1145  /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
1146  HOWTO (R_PPC64_SECTOFF_DS,	/* type */
1147	 0,			/* rightshift */
1148	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1149	 16,			/* bitsize */
1150	 FALSE,			/* pc_relative */
1151	 0,			/* bitpos */
1152	 complain_overflow_bitfield, /* complain_on_overflow */
1153	 ppc64_elf_sectoff_reloc, /* special_function */
1154	 "R_PPC64_SECTOFF_DS",	/* name */
1155	 FALSE,			/* partial_inplace */
1156	 0,			/* src_mask */
1157	 0xfffc,		/* dst_mask */
1158	 FALSE),		/* pcrel_offset */
1159
1160  /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
1161  HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
1162	 0,			/* rightshift */
1163	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1164	 16,			/* bitsize */
1165	 FALSE,			/* pc_relative */
1166	 0,			/* bitpos */
1167	 complain_overflow_dont, /* complain_on_overflow */
1168	 ppc64_elf_sectoff_reloc, /* special_function */
1169	 "R_PPC64_SECTOFF_LO_DS",/* name */
1170	 FALSE,			/* partial_inplace */
1171	 0,			/* src_mask */
1172	 0xfffc,		/* dst_mask */
1173	 FALSE),		/* pcrel_offset */
1174
1175  /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
1176  HOWTO (R_PPC64_TOC16_DS,	/* type */
1177	 0,			/* rightshift */
1178	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1179	 16,			/* bitsize */
1180	 FALSE,			/* pc_relative */
1181	 0,			/* bitpos */
1182	 complain_overflow_signed, /* complain_on_overflow */
1183	 ppc64_elf_toc_reloc,	/* special_function */
1184	 "R_PPC64_TOC16_DS",	/* name */
1185	 FALSE,			/* partial_inplace */
1186	 0,			/* src_mask */
1187	 0xfffc,		/* dst_mask */
1188	 FALSE),		/* pcrel_offset */
1189
1190  /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
1191  HOWTO (R_PPC64_TOC16_LO_DS,	/* type */
1192	 0,			/* rightshift */
1193	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1194	 16,			/* bitsize */
1195	 FALSE,			/* pc_relative */
1196	 0,			/* bitpos */
1197	 complain_overflow_dont, /* complain_on_overflow */
1198	 ppc64_elf_toc_reloc,	/* special_function */
1199	 "R_PPC64_TOC16_LO_DS",	/* name */
1200	 FALSE,			/* partial_inplace */
1201	 0,			/* src_mask */
1202	 0xfffc,		/* dst_mask */
1203	 FALSE),		/* pcrel_offset */
1204
1205  /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
1206  /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
1207  HOWTO (R_PPC64_PLTGOT16_DS,	/* type */
1208	 0,			/* rightshift */
1209	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1210	 16,			/* bitsize */
1211	 FALSE,			/* pc_relative */
1212	 0,			/* bitpos */
1213	 complain_overflow_signed, /* complain_on_overflow */
1214	 ppc64_elf_unhandled_reloc, /* special_function */
1215	 "R_PPC64_PLTGOT16_DS",	/* name */
1216	 FALSE,			/* partial_inplace */
1217	 0,			/* src_mask */
1218	 0xfffc,		/* dst_mask */
1219	 FALSE),		/* pcrel_offset */
1220
1221  /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
1222  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1223  HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
1224	 0,			/* rightshift */
1225	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1226	 16,			/* bitsize */
1227	 FALSE,			/* pc_relative */
1228	 0,			/* bitpos */
1229	 complain_overflow_dont, /* complain_on_overflow */
1230	 ppc64_elf_unhandled_reloc, /* special_function */
1231	 "R_PPC64_PLTGOT16_LO_DS",/* name */
1232	 FALSE,			/* partial_inplace */
1233	 0,			/* src_mask */
1234	 0xfffc,		/* dst_mask */
1235	 FALSE),		/* pcrel_offset */
1236
1237  /* Marker reloc for TLS.  */
1238  HOWTO (R_PPC64_TLS,
1239	 0,			/* rightshift */
1240	 2,			/* size (0 = byte, 1 = short, 2 = long) */
1241	 32,			/* bitsize */
1242	 FALSE,			/* pc_relative */
1243	 0,			/* bitpos */
1244	 complain_overflow_dont, /* complain_on_overflow */
1245	 bfd_elf_generic_reloc,	/* special_function */
1246	 "R_PPC64_TLS",		/* name */
1247	 FALSE,			/* partial_inplace */
1248	 0,			/* src_mask */
1249	 0,			/* dst_mask */
1250	 FALSE),		/* pcrel_offset */
1251
1252  /* Computes the load module index of the load module that contains the
1253     definition of its TLS sym.  */
1254  HOWTO (R_PPC64_DTPMOD64,
1255	 0,			/* rightshift */
1256	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1257	 64,			/* bitsize */
1258	 FALSE,			/* pc_relative */
1259	 0,			/* bitpos */
1260	 complain_overflow_dont, /* complain_on_overflow */
1261	 ppc64_elf_unhandled_reloc, /* special_function */
1262	 "R_PPC64_DTPMOD64",	/* name */
1263	 FALSE,			/* partial_inplace */
1264	 0,			/* src_mask */
1265	 ONES (64),		/* dst_mask */
1266	 FALSE),		/* pcrel_offset */
1267
1268  /* Computes a dtv-relative displacement, the difference between the value
1269     of sym+add and the base address of the thread-local storage block that
1270     contains the definition of sym, minus 0x8000.  */
1271  HOWTO (R_PPC64_DTPREL64,
1272	 0,			/* rightshift */
1273	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1274	 64,			/* bitsize */
1275	 FALSE,			/* pc_relative */
1276	 0,			/* bitpos */
1277	 complain_overflow_dont, /* complain_on_overflow */
1278	 ppc64_elf_unhandled_reloc, /* special_function */
1279	 "R_PPC64_DTPREL64",	/* name */
1280	 FALSE,			/* partial_inplace */
1281	 0,			/* src_mask */
1282	 ONES (64),		/* dst_mask */
1283	 FALSE),		/* pcrel_offset */
1284
1285  /* A 16 bit dtprel reloc.  */
1286  HOWTO (R_PPC64_DTPREL16,
1287	 0,			/* rightshift */
1288	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1289	 16,			/* bitsize */
1290	 FALSE,			/* pc_relative */
1291	 0,			/* bitpos */
1292	 complain_overflow_signed, /* complain_on_overflow */
1293	 ppc64_elf_unhandled_reloc, /* special_function */
1294	 "R_PPC64_DTPREL16",	/* name */
1295	 FALSE,			/* partial_inplace */
1296	 0,			/* src_mask */
1297	 0xffff,		/* dst_mask */
1298	 FALSE),		/* pcrel_offset */
1299
1300  /* Like DTPREL16, but no overflow.  */
1301  HOWTO (R_PPC64_DTPREL16_LO,
1302	 0,			/* rightshift */
1303	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1304	 16,			/* bitsize */
1305	 FALSE,			/* pc_relative */
1306	 0,			/* bitpos */
1307	 complain_overflow_dont, /* complain_on_overflow */
1308	 ppc64_elf_unhandled_reloc, /* special_function */
1309	 "R_PPC64_DTPREL16_LO",	/* name */
1310	 FALSE,			/* partial_inplace */
1311	 0,			/* src_mask */
1312	 0xffff,		/* dst_mask */
1313	 FALSE),		/* pcrel_offset */
1314
1315  /* Like DTPREL16_LO, but next higher group of 16 bits.  */
1316  HOWTO (R_PPC64_DTPREL16_HI,
1317	 16,			/* rightshift */
1318	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1319	 16,			/* bitsize */
1320	 FALSE,			/* pc_relative */
1321	 0,			/* bitpos */
1322	 complain_overflow_dont, /* complain_on_overflow */
1323	 ppc64_elf_unhandled_reloc, /* special_function */
1324	 "R_PPC64_DTPREL16_HI",	/* name */
1325	 FALSE,			/* partial_inplace */
1326	 0,			/* src_mask */
1327	 0xffff,		/* dst_mask */
1328	 FALSE),		/* pcrel_offset */
1329
1330  /* Like DTPREL16_HI, but adjust for low 16 bits.  */
1331  HOWTO (R_PPC64_DTPREL16_HA,
1332	 16,			/* rightshift */
1333	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1334	 16,			/* bitsize */
1335	 FALSE,			/* pc_relative */
1336	 0,			/* bitpos */
1337	 complain_overflow_dont, /* complain_on_overflow */
1338	 ppc64_elf_unhandled_reloc, /* special_function */
1339	 "R_PPC64_DTPREL16_HA",	/* name */
1340	 FALSE,			/* partial_inplace */
1341	 0,			/* src_mask */
1342	 0xffff,		/* dst_mask */
1343	 FALSE),		/* pcrel_offset */
1344
1345  /* Like DTPREL16_HI, but next higher group of 16 bits.  */
1346  HOWTO (R_PPC64_DTPREL16_HIGHER,
1347	 32,			/* rightshift */
1348	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1349	 16,			/* bitsize */
1350	 FALSE,			/* pc_relative */
1351	 0,			/* bitpos */
1352	 complain_overflow_dont, /* complain_on_overflow */
1353	 ppc64_elf_unhandled_reloc, /* special_function */
1354	 "R_PPC64_DTPREL16_HIGHER", /* name */
1355	 FALSE,			/* partial_inplace */
1356	 0,			/* src_mask */
1357	 0xffff,		/* dst_mask */
1358	 FALSE),		/* pcrel_offset */
1359
1360  /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
1361  HOWTO (R_PPC64_DTPREL16_HIGHERA,
1362	 32,			/* rightshift */
1363	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1364	 16,			/* bitsize */
1365	 FALSE,			/* pc_relative */
1366	 0,			/* bitpos */
1367	 complain_overflow_dont, /* complain_on_overflow */
1368	 ppc64_elf_unhandled_reloc, /* special_function */
1369	 "R_PPC64_DTPREL16_HIGHERA", /* name */
1370	 FALSE,			/* partial_inplace */
1371	 0,			/* src_mask */
1372	 0xffff,		/* dst_mask */
1373	 FALSE),		/* pcrel_offset */
1374
1375  /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
1376  HOWTO (R_PPC64_DTPREL16_HIGHEST,
1377	 48,			/* rightshift */
1378	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1379	 16,			/* bitsize */
1380	 FALSE,			/* pc_relative */
1381	 0,			/* bitpos */
1382	 complain_overflow_dont, /* complain_on_overflow */
1383	 ppc64_elf_unhandled_reloc, /* special_function */
1384	 "R_PPC64_DTPREL16_HIGHEST", /* name */
1385	 FALSE,			/* partial_inplace */
1386	 0,			/* src_mask */
1387	 0xffff,		/* dst_mask */
1388	 FALSE),		/* pcrel_offset */
1389
1390  /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
1391  HOWTO (R_PPC64_DTPREL16_HIGHESTA,
1392	 48,			/* rightshift */
1393	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1394	 16,			/* bitsize */
1395	 FALSE,			/* pc_relative */
1396	 0,			/* bitpos */
1397	 complain_overflow_dont, /* complain_on_overflow */
1398	 ppc64_elf_unhandled_reloc, /* special_function */
1399	 "R_PPC64_DTPREL16_HIGHESTA", /* name */
1400	 FALSE,			/* partial_inplace */
1401	 0,			/* src_mask */
1402	 0xffff,		/* dst_mask */
1403	 FALSE),		/* pcrel_offset */
1404
1405  /* Like DTPREL16, but for insns with a DS field.  */
1406  HOWTO (R_PPC64_DTPREL16_DS,
1407	 0,			/* rightshift */
1408	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1409	 16,			/* bitsize */
1410	 FALSE,			/* pc_relative */
1411	 0,			/* bitpos */
1412	 complain_overflow_signed, /* complain_on_overflow */
1413	 ppc64_elf_unhandled_reloc, /* special_function */
1414	 "R_PPC64_DTPREL16_DS",	/* name */
1415	 FALSE,			/* partial_inplace */
1416	 0,			/* src_mask */
1417	 0xfffc,		/* dst_mask */
1418	 FALSE),		/* pcrel_offset */
1419
1420  /* Like DTPREL16_DS, but no overflow.  */
1421  HOWTO (R_PPC64_DTPREL16_LO_DS,
1422	 0,			/* rightshift */
1423	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1424	 16,			/* bitsize */
1425	 FALSE,			/* pc_relative */
1426	 0,			/* bitpos */
1427	 complain_overflow_dont, /* complain_on_overflow */
1428	 ppc64_elf_unhandled_reloc, /* special_function */
1429	 "R_PPC64_DTPREL16_LO_DS", /* name */
1430	 FALSE,			/* partial_inplace */
1431	 0,			/* src_mask */
1432	 0xfffc,		/* dst_mask */
1433	 FALSE),		/* pcrel_offset */
1434
1435  /* Computes a tp-relative displacement, the difference between the value of
1436     sym+add and the value of the thread pointer (r13).  */
1437  HOWTO (R_PPC64_TPREL64,
1438	 0,			/* rightshift */
1439	 4,			/* size (0 = byte, 1 = short, 2 = long) */
1440	 64,			/* bitsize */
1441	 FALSE,			/* pc_relative */
1442	 0,			/* bitpos */
1443	 complain_overflow_dont, /* complain_on_overflow */
1444	 ppc64_elf_unhandled_reloc, /* special_function */
1445	 "R_PPC64_TPREL64",	/* name */
1446	 FALSE,			/* partial_inplace */
1447	 0,			/* src_mask */
1448	 ONES (64),		/* dst_mask */
1449	 FALSE),		/* pcrel_offset */
1450
1451  /* A 16 bit tprel reloc.  */
1452  HOWTO (R_PPC64_TPREL16,
1453	 0,			/* rightshift */
1454	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1455	 16,			/* bitsize */
1456	 FALSE,			/* pc_relative */
1457	 0,			/* bitpos */
1458	 complain_overflow_signed, /* complain_on_overflow */
1459	 ppc64_elf_unhandled_reloc, /* special_function */
1460	 "R_PPC64_TPREL16",	/* name */
1461	 FALSE,			/* partial_inplace */
1462	 0,			/* src_mask */
1463	 0xffff,		/* dst_mask */
1464	 FALSE),		/* pcrel_offset */
1465
1466  /* Like TPREL16, but no overflow.  */
1467  HOWTO (R_PPC64_TPREL16_LO,
1468	 0,			/* rightshift */
1469	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1470	 16,			/* bitsize */
1471	 FALSE,			/* pc_relative */
1472	 0,			/* bitpos */
1473	 complain_overflow_dont, /* complain_on_overflow */
1474	 ppc64_elf_unhandled_reloc, /* special_function */
1475	 "R_PPC64_TPREL16_LO",	/* name */
1476	 FALSE,			/* partial_inplace */
1477	 0,			/* src_mask */
1478	 0xffff,		/* dst_mask */
1479	 FALSE),		/* pcrel_offset */
1480
1481  /* Like TPREL16_LO, but next higher group of 16 bits.  */
1482  HOWTO (R_PPC64_TPREL16_HI,
1483	 16,			/* rightshift */
1484	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1485	 16,			/* bitsize */
1486	 FALSE,			/* pc_relative */
1487	 0,			/* bitpos */
1488	 complain_overflow_dont, /* complain_on_overflow */
1489	 ppc64_elf_unhandled_reloc, /* special_function */
1490	 "R_PPC64_TPREL16_HI",	/* name */
1491	 FALSE,			/* partial_inplace */
1492	 0,			/* src_mask */
1493	 0xffff,		/* dst_mask */
1494	 FALSE),		/* pcrel_offset */
1495
1496  /* Like TPREL16_HI, but adjust for low 16 bits.  */
1497  HOWTO (R_PPC64_TPREL16_HA,
1498	 16,			/* rightshift */
1499	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1500	 16,			/* bitsize */
1501	 FALSE,			/* pc_relative */
1502	 0,			/* bitpos */
1503	 complain_overflow_dont, /* complain_on_overflow */
1504	 ppc64_elf_unhandled_reloc, /* special_function */
1505	 "R_PPC64_TPREL16_HA",	/* name */
1506	 FALSE,			/* partial_inplace */
1507	 0,			/* src_mask */
1508	 0xffff,		/* dst_mask */
1509	 FALSE),		/* pcrel_offset */
1510
1511  /* Like TPREL16_HI, but next higher group of 16 bits.  */
1512  HOWTO (R_PPC64_TPREL16_HIGHER,
1513	 32,			/* rightshift */
1514	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1515	 16,			/* bitsize */
1516	 FALSE,			/* pc_relative */
1517	 0,			/* bitpos */
1518	 complain_overflow_dont, /* complain_on_overflow */
1519	 ppc64_elf_unhandled_reloc, /* special_function */
1520	 "R_PPC64_TPREL16_HIGHER",	/* name */
1521	 FALSE,			/* partial_inplace */
1522	 0,			/* src_mask */
1523	 0xffff,		/* dst_mask */
1524	 FALSE),		/* pcrel_offset */
1525
1526  /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
1527  HOWTO (R_PPC64_TPREL16_HIGHERA,
1528	 32,			/* rightshift */
1529	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1530	 16,			/* bitsize */
1531	 FALSE,			/* pc_relative */
1532	 0,			/* bitpos */
1533	 complain_overflow_dont, /* complain_on_overflow */
1534	 ppc64_elf_unhandled_reloc, /* special_function */
1535	 "R_PPC64_TPREL16_HIGHERA", /* name */
1536	 FALSE,			/* partial_inplace */
1537	 0,			/* src_mask */
1538	 0xffff,		/* dst_mask */
1539	 FALSE),		/* pcrel_offset */
1540
1541  /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
1542  HOWTO (R_PPC64_TPREL16_HIGHEST,
1543	 48,			/* rightshift */
1544	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1545	 16,			/* bitsize */
1546	 FALSE,			/* pc_relative */
1547	 0,			/* bitpos */
1548	 complain_overflow_dont, /* complain_on_overflow */
1549	 ppc64_elf_unhandled_reloc, /* special_function */
1550	 "R_PPC64_TPREL16_HIGHEST", /* name */
1551	 FALSE,			/* partial_inplace */
1552	 0,			/* src_mask */
1553	 0xffff,		/* dst_mask */
1554	 FALSE),		/* pcrel_offset */
1555
1556  /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
1557  HOWTO (R_PPC64_TPREL16_HIGHESTA,
1558	 48,			/* rightshift */
1559	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1560	 16,			/* bitsize */
1561	 FALSE,			/* pc_relative */
1562	 0,			/* bitpos */
1563	 complain_overflow_dont, /* complain_on_overflow */
1564	 ppc64_elf_unhandled_reloc, /* special_function */
1565	 "R_PPC64_TPREL16_HIGHESTA", /* name */
1566	 FALSE,			/* partial_inplace */
1567	 0,			/* src_mask */
1568	 0xffff,		/* dst_mask */
1569	 FALSE),		/* pcrel_offset */
1570
1571  /* Like TPREL16, but for insns with a DS field.  */
1572  HOWTO (R_PPC64_TPREL16_DS,
1573	 0,			/* rightshift */
1574	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1575	 16,			/* bitsize */
1576	 FALSE,			/* pc_relative */
1577	 0,			/* bitpos */
1578	 complain_overflow_signed, /* complain_on_overflow */
1579	 ppc64_elf_unhandled_reloc, /* special_function */
1580	 "R_PPC64_TPREL16_DS",	/* name */
1581	 FALSE,			/* partial_inplace */
1582	 0,			/* src_mask */
1583	 0xfffc,		/* dst_mask */
1584	 FALSE),		/* pcrel_offset */
1585
1586  /* Like TPREL16_DS, but no overflow.  */
1587  HOWTO (R_PPC64_TPREL16_LO_DS,
1588	 0,			/* rightshift */
1589	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1590	 16,			/* bitsize */
1591	 FALSE,			/* pc_relative */
1592	 0,			/* bitpos */
1593	 complain_overflow_dont, /* complain_on_overflow */
1594	 ppc64_elf_unhandled_reloc, /* special_function */
1595	 "R_PPC64_TPREL16_LO_DS", /* name */
1596	 FALSE,			/* partial_inplace */
1597	 0,			/* src_mask */
1598	 0xfffc,		/* dst_mask */
1599	 FALSE),		/* pcrel_offset */
1600
1601  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1602     with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
1603     to the first entry relative to the TOC base (r2).  */
1604  HOWTO (R_PPC64_GOT_TLSGD16,
1605	 0,			/* rightshift */
1606	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1607	 16,			/* bitsize */
1608	 FALSE,			/* pc_relative */
1609	 0,			/* bitpos */
1610	 complain_overflow_signed, /* complain_on_overflow */
1611	 ppc64_elf_unhandled_reloc, /* special_function */
1612	 "R_PPC64_GOT_TLSGD16",	/* name */
1613	 FALSE,			/* partial_inplace */
1614	 0,			/* src_mask */
1615	 0xffff,		/* dst_mask */
1616	 FALSE),		/* pcrel_offset */
1617
1618  /* Like GOT_TLSGD16, but no overflow.  */
1619  HOWTO (R_PPC64_GOT_TLSGD16_LO,
1620	 0,			/* rightshift */
1621	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1622	 16,			/* bitsize */
1623	 FALSE,			/* pc_relative */
1624	 0,			/* bitpos */
1625	 complain_overflow_dont, /* complain_on_overflow */
1626	 ppc64_elf_unhandled_reloc, /* special_function */
1627	 "R_PPC64_GOT_TLSGD16_LO", /* name */
1628	 FALSE,			/* partial_inplace */
1629	 0,			/* src_mask */
1630	 0xffff,		/* dst_mask */
1631	 FALSE),		/* pcrel_offset */
1632
1633  /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
1634  HOWTO (R_PPC64_GOT_TLSGD16_HI,
1635	 16,			/* rightshift */
1636	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1637	 16,			/* bitsize */
1638	 FALSE,			/* pc_relative */
1639	 0,			/* bitpos */
1640	 complain_overflow_dont, /* complain_on_overflow */
1641	 ppc64_elf_unhandled_reloc, /* special_function */
1642	 "R_PPC64_GOT_TLSGD16_HI", /* name */
1643	 FALSE,			/* partial_inplace */
1644	 0,			/* src_mask */
1645	 0xffff,		/* dst_mask */
1646	 FALSE),		/* pcrel_offset */
1647
1648  /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
1649  HOWTO (R_PPC64_GOT_TLSGD16_HA,
1650	 16,			/* rightshift */
1651	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1652	 16,			/* bitsize */
1653	 FALSE,			/* pc_relative */
1654	 0,			/* bitpos */
1655	 complain_overflow_dont, /* complain_on_overflow */
1656	 ppc64_elf_unhandled_reloc, /* special_function */
1657	 "R_PPC64_GOT_TLSGD16_HA", /* name */
1658	 FALSE,			/* partial_inplace */
1659	 0,			/* src_mask */
1660	 0xffff,		/* dst_mask */
1661	 FALSE),		/* pcrel_offset */
1662
1663  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1664     with values (sym+add)@dtpmod and zero, and computes the offset to the
1665     first entry relative to the TOC base (r2).  */
1666  HOWTO (R_PPC64_GOT_TLSLD16,
1667	 0,			/* rightshift */
1668	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1669	 16,			/* bitsize */
1670	 FALSE,			/* pc_relative */
1671	 0,			/* bitpos */
1672	 complain_overflow_signed, /* complain_on_overflow */
1673	 ppc64_elf_unhandled_reloc, /* special_function */
1674	 "R_PPC64_GOT_TLSLD16",	/* name */
1675	 FALSE,			/* partial_inplace */
1676	 0,			/* src_mask */
1677	 0xffff,		/* dst_mask */
1678	 FALSE),		/* pcrel_offset */
1679
1680  /* Like GOT_TLSLD16, but no overflow.  */
1681  HOWTO (R_PPC64_GOT_TLSLD16_LO,
1682	 0,			/* rightshift */
1683	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1684	 16,			/* bitsize */
1685	 FALSE,			/* pc_relative */
1686	 0,			/* bitpos */
1687	 complain_overflow_dont, /* complain_on_overflow */
1688	 ppc64_elf_unhandled_reloc, /* special_function */
1689	 "R_PPC64_GOT_TLSLD16_LO", /* name */
1690	 FALSE,			/* partial_inplace */
1691	 0,			/* src_mask */
1692	 0xffff,		/* dst_mask */
1693	 FALSE),		/* pcrel_offset */
1694
1695  /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
1696  HOWTO (R_PPC64_GOT_TLSLD16_HI,
1697	 16,			/* rightshift */
1698	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1699	 16,			/* bitsize */
1700	 FALSE,			/* pc_relative */
1701	 0,			/* bitpos */
1702	 complain_overflow_dont, /* complain_on_overflow */
1703	 ppc64_elf_unhandled_reloc, /* special_function */
1704	 "R_PPC64_GOT_TLSLD16_HI", /* name */
1705	 FALSE,			/* partial_inplace */
1706	 0,			/* src_mask */
1707	 0xffff,		/* dst_mask */
1708	 FALSE),		/* pcrel_offset */
1709
1710  /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
1711  HOWTO (R_PPC64_GOT_TLSLD16_HA,
1712	 16,			/* rightshift */
1713	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1714	 16,			/* bitsize */
1715	 FALSE,			/* pc_relative */
1716	 0,			/* bitpos */
1717	 complain_overflow_dont, /* complain_on_overflow */
1718	 ppc64_elf_unhandled_reloc, /* special_function */
1719	 "R_PPC64_GOT_TLSLD16_HA", /* name */
1720	 FALSE,			/* partial_inplace */
1721	 0,			/* src_mask */
1722	 0xffff,		/* dst_mask */
1723	 FALSE),		/* pcrel_offset */
1724
1725  /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
1726     the offset to the entry relative to the TOC base (r2).  */
1727  HOWTO (R_PPC64_GOT_DTPREL16_DS,
1728	 0,			/* rightshift */
1729	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1730	 16,			/* bitsize */
1731	 FALSE,			/* pc_relative */
1732	 0,			/* bitpos */
1733	 complain_overflow_signed, /* complain_on_overflow */
1734	 ppc64_elf_unhandled_reloc, /* special_function */
1735	 "R_PPC64_GOT_DTPREL16_DS", /* name */
1736	 FALSE,			/* partial_inplace */
1737	 0,			/* src_mask */
1738	 0xfffc,		/* dst_mask */
1739	 FALSE),		/* pcrel_offset */
1740
1741  /* Like GOT_DTPREL16_DS, but no overflow.  */
1742  HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
1743	 0,			/* rightshift */
1744	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1745	 16,			/* bitsize */
1746	 FALSE,			/* pc_relative */
1747	 0,			/* bitpos */
1748	 complain_overflow_dont, /* complain_on_overflow */
1749	 ppc64_elf_unhandled_reloc, /* special_function */
1750	 "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
1751	 FALSE,			/* partial_inplace */
1752	 0,			/* src_mask */
1753	 0xfffc,		/* dst_mask */
1754	 FALSE),		/* pcrel_offset */
1755
1756  /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
1757  HOWTO (R_PPC64_GOT_DTPREL16_HI,
1758	 16,			/* rightshift */
1759	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1760	 16,			/* bitsize */
1761	 FALSE,			/* pc_relative */
1762	 0,			/* bitpos */
1763	 complain_overflow_dont, /* complain_on_overflow */
1764	 ppc64_elf_unhandled_reloc, /* special_function */
1765	 "R_PPC64_GOT_DTPREL16_HI", /* name */
1766	 FALSE,			/* partial_inplace */
1767	 0,			/* src_mask */
1768	 0xffff,		/* dst_mask */
1769	 FALSE),		/* pcrel_offset */
1770
1771  /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
1772  HOWTO (R_PPC64_GOT_DTPREL16_HA,
1773	 16,			/* rightshift */
1774	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1775	 16,			/* bitsize */
1776	 FALSE,			/* pc_relative */
1777	 0,			/* bitpos */
1778	 complain_overflow_dont, /* complain_on_overflow */
1779	 ppc64_elf_unhandled_reloc, /* special_function */
1780	 "R_PPC64_GOT_DTPREL16_HA", /* name */
1781	 FALSE,			/* partial_inplace */
1782	 0,			/* src_mask */
1783	 0xffff,		/* dst_mask */
1784	 FALSE),		/* pcrel_offset */
1785
1786  /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
1787     offset to the entry relative to the TOC base (r2).  */
1788  HOWTO (R_PPC64_GOT_TPREL16_DS,
1789	 0,			/* rightshift */
1790	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1791	 16,			/* bitsize */
1792	 FALSE,			/* pc_relative */
1793	 0,			/* bitpos */
1794	 complain_overflow_signed, /* complain_on_overflow */
1795	 ppc64_elf_unhandled_reloc, /* special_function */
1796	 "R_PPC64_GOT_TPREL16_DS", /* name */
1797	 FALSE,			/* partial_inplace */
1798	 0,			/* src_mask */
1799	 0xfffc,		/* dst_mask */
1800	 FALSE),		/* pcrel_offset */
1801
1802  /* Like GOT_TPREL16_DS, but no overflow.  */
1803  HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
1804	 0,			/* rightshift */
1805	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1806	 16,			/* bitsize */
1807	 FALSE,			/* pc_relative */
1808	 0,			/* bitpos */
1809	 complain_overflow_dont, /* complain_on_overflow */
1810	 ppc64_elf_unhandled_reloc, /* special_function */
1811	 "R_PPC64_GOT_TPREL16_LO_DS", /* name */
1812	 FALSE,			/* partial_inplace */
1813	 0,			/* src_mask */
1814	 0xfffc,		/* dst_mask */
1815	 FALSE),		/* pcrel_offset */
1816
1817  /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
1818  HOWTO (R_PPC64_GOT_TPREL16_HI,
1819	 16,			/* rightshift */
1820	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1821	 16,			/* bitsize */
1822	 FALSE,			/* pc_relative */
1823	 0,			/* bitpos */
1824	 complain_overflow_dont, /* complain_on_overflow */
1825	 ppc64_elf_unhandled_reloc, /* special_function */
1826	 "R_PPC64_GOT_TPREL16_HI", /* name */
1827	 FALSE,			/* partial_inplace */
1828	 0,			/* src_mask */
1829	 0xffff,		/* dst_mask */
1830	 FALSE),		/* pcrel_offset */
1831
1832  /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
1833  HOWTO (R_PPC64_GOT_TPREL16_HA,
1834	 16,			/* rightshift */
1835	 1,			/* size (0 = byte, 1 = short, 2 = long) */
1836	 16,			/* bitsize */
1837	 FALSE,			/* pc_relative */
1838	 0,			/* bitpos */
1839	 complain_overflow_dont, /* complain_on_overflow */
1840	 ppc64_elf_unhandled_reloc, /* special_function */
1841	 "R_PPC64_GOT_TPREL16_HA", /* name */
1842	 FALSE,			/* partial_inplace */
1843	 0,			/* src_mask */
1844	 0xffff,		/* dst_mask */
1845	 FALSE),		/* pcrel_offset */
1846
1847  /* GNU extension to record C++ vtable hierarchy.  */
1848  HOWTO (R_PPC64_GNU_VTINHERIT,	/* type */
1849	 0,			/* rightshift */
1850	 0,			/* size (0 = byte, 1 = short, 2 = long) */
1851	 0,			/* bitsize */
1852	 FALSE,			/* pc_relative */
1853	 0,			/* bitpos */
1854	 complain_overflow_dont, /* complain_on_overflow */
1855	 NULL,			/* special_function */
1856	 "R_PPC64_GNU_VTINHERIT", /* name */
1857	 FALSE,			/* partial_inplace */
1858	 0,			/* src_mask */
1859	 0,			/* dst_mask */
1860	 FALSE),		/* pcrel_offset */
1861
1862  /* GNU extension to record C++ vtable member usage.  */
1863  HOWTO (R_PPC64_GNU_VTENTRY,	/* type */
1864	 0,			/* rightshift */
1865	 0,			/* size (0 = byte, 1 = short, 2 = long) */
1866	 0,			/* bitsize */
1867	 FALSE,			/* pc_relative */
1868	 0,			/* bitpos */
1869	 complain_overflow_dont, /* complain_on_overflow */
1870	 NULL,			/* special_function */
1871	 "R_PPC64_GNU_VTENTRY",	/* name */
1872	 FALSE,			/* partial_inplace */
1873	 0,			/* src_mask */
1874	 0,			/* dst_mask */
1875	 FALSE),		/* pcrel_offset */
1876};
1877
1878
1879/* Initialize the ppc64_elf_howto_table, so that linear accesses can
1880   be done.  */
1881
1882static void
1883ppc_howto_init (void)
1884{
1885  unsigned int i, type;
1886
1887  for (i = 0;
1888       i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
1889       i++)
1890    {
1891      type = ppc64_elf_howto_raw[i].type;
1892      BFD_ASSERT (type < (sizeof (ppc64_elf_howto_table)
1893			  / sizeof (ppc64_elf_howto_table[0])));
1894      ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
1895    }
1896}
1897
1898static reloc_howto_type *
1899ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
1900			     bfd_reloc_code_real_type code)
1901{
1902  enum elf_ppc64_reloc_type r = R_PPC64_NONE;
1903
1904  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1905    /* Initialize howto table if needed.  */
1906    ppc_howto_init ();
1907
1908  switch (code)
1909    {
1910    default:
1911      return NULL;
1912
1913    case BFD_RELOC_NONE:			r = R_PPC64_NONE;
1914      break;
1915    case BFD_RELOC_32:				r = R_PPC64_ADDR32;
1916      break;
1917    case BFD_RELOC_PPC_BA26:			r = R_PPC64_ADDR24;
1918      break;
1919    case BFD_RELOC_16:				r = R_PPC64_ADDR16;
1920      break;
1921    case BFD_RELOC_LO16:			r = R_PPC64_ADDR16_LO;
1922      break;
1923    case BFD_RELOC_HI16:			r = R_PPC64_ADDR16_HI;
1924      break;
1925    case BFD_RELOC_HI16_S:			r = R_PPC64_ADDR16_HA;
1926      break;
1927    case BFD_RELOC_PPC_BA16:			r = R_PPC64_ADDR14;
1928      break;
1929    case BFD_RELOC_PPC_BA16_BRTAKEN:		r = R_PPC64_ADDR14_BRTAKEN;
1930      break;
1931    case BFD_RELOC_PPC_BA16_BRNTAKEN:		r = R_PPC64_ADDR14_BRNTAKEN;
1932      break;
1933    case BFD_RELOC_PPC_B26:			r = R_PPC64_REL24;
1934      break;
1935    case BFD_RELOC_PPC_B16:			r = R_PPC64_REL14;
1936      break;
1937    case BFD_RELOC_PPC_B16_BRTAKEN:		r = R_PPC64_REL14_BRTAKEN;
1938      break;
1939    case BFD_RELOC_PPC_B16_BRNTAKEN:		r = R_PPC64_REL14_BRNTAKEN;
1940      break;
1941    case BFD_RELOC_16_GOTOFF:			r = R_PPC64_GOT16;
1942      break;
1943    case BFD_RELOC_LO16_GOTOFF:			r = R_PPC64_GOT16_LO;
1944      break;
1945    case BFD_RELOC_HI16_GOTOFF:			r = R_PPC64_GOT16_HI;
1946      break;
1947    case BFD_RELOC_HI16_S_GOTOFF:		r = R_PPC64_GOT16_HA;
1948      break;
1949    case BFD_RELOC_PPC_COPY:			r = R_PPC64_COPY;
1950      break;
1951    case BFD_RELOC_PPC_GLOB_DAT:		r = R_PPC64_GLOB_DAT;
1952      break;
1953    case BFD_RELOC_32_PCREL:			r = R_PPC64_REL32;
1954      break;
1955    case BFD_RELOC_32_PLTOFF:			r = R_PPC64_PLT32;
1956      break;
1957    case BFD_RELOC_32_PLT_PCREL:		r = R_PPC64_PLTREL32;
1958      break;
1959    case BFD_RELOC_LO16_PLTOFF:			r = R_PPC64_PLT16_LO;
1960      break;
1961    case BFD_RELOC_HI16_PLTOFF:			r = R_PPC64_PLT16_HI;
1962      break;
1963    case BFD_RELOC_HI16_S_PLTOFF:		r = R_PPC64_PLT16_HA;
1964      break;
1965    case BFD_RELOC_16_BASEREL:			r = R_PPC64_SECTOFF;
1966      break;
1967    case BFD_RELOC_LO16_BASEREL:		r = R_PPC64_SECTOFF_LO;
1968      break;
1969    case BFD_RELOC_HI16_BASEREL:		r = R_PPC64_SECTOFF_HI;
1970      break;
1971    case BFD_RELOC_HI16_S_BASEREL:		r = R_PPC64_SECTOFF_HA;
1972      break;
1973    case BFD_RELOC_CTOR:			r = R_PPC64_ADDR64;
1974      break;
1975    case BFD_RELOC_64:				r = R_PPC64_ADDR64;
1976      break;
1977    case BFD_RELOC_PPC64_HIGHER:		r = R_PPC64_ADDR16_HIGHER;
1978      break;
1979    case BFD_RELOC_PPC64_HIGHER_S:		r = R_PPC64_ADDR16_HIGHERA;
1980      break;
1981    case BFD_RELOC_PPC64_HIGHEST:		r = R_PPC64_ADDR16_HIGHEST;
1982      break;
1983    case BFD_RELOC_PPC64_HIGHEST_S:		r = R_PPC64_ADDR16_HIGHESTA;
1984      break;
1985    case BFD_RELOC_64_PCREL:			r = R_PPC64_REL64;
1986      break;
1987    case BFD_RELOC_64_PLTOFF:			r = R_PPC64_PLT64;
1988      break;
1989    case BFD_RELOC_64_PLT_PCREL:		r = R_PPC64_PLTREL64;
1990      break;
1991    case BFD_RELOC_PPC_TOC16:			r = R_PPC64_TOC16;
1992      break;
1993    case BFD_RELOC_PPC64_TOC16_LO:		r = R_PPC64_TOC16_LO;
1994      break;
1995    case BFD_RELOC_PPC64_TOC16_HI:		r = R_PPC64_TOC16_HI;
1996      break;
1997    case BFD_RELOC_PPC64_TOC16_HA:		r = R_PPC64_TOC16_HA;
1998      break;
1999    case BFD_RELOC_PPC64_TOC:			r = R_PPC64_TOC;
2000      break;
2001    case BFD_RELOC_PPC64_PLTGOT16:		r = R_PPC64_PLTGOT16;
2002      break;
2003    case BFD_RELOC_PPC64_PLTGOT16_LO:		r = R_PPC64_PLTGOT16_LO;
2004      break;
2005    case BFD_RELOC_PPC64_PLTGOT16_HI:		r = R_PPC64_PLTGOT16_HI;
2006      break;
2007    case BFD_RELOC_PPC64_PLTGOT16_HA:		r = R_PPC64_PLTGOT16_HA;
2008      break;
2009    case BFD_RELOC_PPC64_ADDR16_DS:		r = R_PPC64_ADDR16_DS;
2010      break;
2011    case BFD_RELOC_PPC64_ADDR16_LO_DS:		r = R_PPC64_ADDR16_LO_DS;
2012      break;
2013    case BFD_RELOC_PPC64_GOT16_DS:		r = R_PPC64_GOT16_DS;
2014      break;
2015    case BFD_RELOC_PPC64_GOT16_LO_DS:		r = R_PPC64_GOT16_LO_DS;
2016      break;
2017    case BFD_RELOC_PPC64_PLT16_LO_DS:		r = R_PPC64_PLT16_LO_DS;
2018      break;
2019    case BFD_RELOC_PPC64_SECTOFF_DS:		r = R_PPC64_SECTOFF_DS;
2020      break;
2021    case BFD_RELOC_PPC64_SECTOFF_LO_DS:		r = R_PPC64_SECTOFF_LO_DS;
2022      break;
2023    case BFD_RELOC_PPC64_TOC16_DS:		r = R_PPC64_TOC16_DS;
2024      break;
2025    case BFD_RELOC_PPC64_TOC16_LO_DS:		r = R_PPC64_TOC16_LO_DS;
2026      break;
2027    case BFD_RELOC_PPC64_PLTGOT16_DS:		r = R_PPC64_PLTGOT16_DS;
2028      break;
2029    case BFD_RELOC_PPC64_PLTGOT16_LO_DS:	r = R_PPC64_PLTGOT16_LO_DS;
2030      break;
2031    case BFD_RELOC_PPC_TLS:			r = R_PPC64_TLS;
2032      break;
2033    case BFD_RELOC_PPC_DTPMOD:			r = R_PPC64_DTPMOD64;
2034      break;
2035    case BFD_RELOC_PPC_TPREL16:			r = R_PPC64_TPREL16;
2036      break;
2037    case BFD_RELOC_PPC_TPREL16_LO:		r = R_PPC64_TPREL16_LO;
2038      break;
2039    case BFD_RELOC_PPC_TPREL16_HI:		r = R_PPC64_TPREL16_HI;
2040      break;
2041    case BFD_RELOC_PPC_TPREL16_HA:		r = R_PPC64_TPREL16_HA;
2042      break;
2043    case BFD_RELOC_PPC_TPREL:			r = R_PPC64_TPREL64;
2044      break;
2045    case BFD_RELOC_PPC_DTPREL16:		r = R_PPC64_DTPREL16;
2046      break;
2047    case BFD_RELOC_PPC_DTPREL16_LO:		r = R_PPC64_DTPREL16_LO;
2048      break;
2049    case BFD_RELOC_PPC_DTPREL16_HI:		r = R_PPC64_DTPREL16_HI;
2050      break;
2051    case BFD_RELOC_PPC_DTPREL16_HA:		r = R_PPC64_DTPREL16_HA;
2052      break;
2053    case BFD_RELOC_PPC_DTPREL:			r = R_PPC64_DTPREL64;
2054      break;
2055    case BFD_RELOC_PPC_GOT_TLSGD16:		r = R_PPC64_GOT_TLSGD16;
2056      break;
2057    case BFD_RELOC_PPC_GOT_TLSGD16_LO:		r = R_PPC64_GOT_TLSGD16_LO;
2058      break;
2059    case BFD_RELOC_PPC_GOT_TLSGD16_HI:		r = R_PPC64_GOT_TLSGD16_HI;
2060      break;
2061    case BFD_RELOC_PPC_GOT_TLSGD16_HA:		r = R_PPC64_GOT_TLSGD16_HA;
2062      break;
2063    case BFD_RELOC_PPC_GOT_TLSLD16:		r = R_PPC64_GOT_TLSLD16;
2064      break;
2065    case BFD_RELOC_PPC_GOT_TLSLD16_LO:		r = R_PPC64_GOT_TLSLD16_LO;
2066      break;
2067    case BFD_RELOC_PPC_GOT_TLSLD16_HI:		r = R_PPC64_GOT_TLSLD16_HI;
2068      break;
2069    case BFD_RELOC_PPC_GOT_TLSLD16_HA:		r = R_PPC64_GOT_TLSLD16_HA;
2070      break;
2071    case BFD_RELOC_PPC_GOT_TPREL16:		r = R_PPC64_GOT_TPREL16_DS;
2072      break;
2073    case BFD_RELOC_PPC_GOT_TPREL16_LO:		r = R_PPC64_GOT_TPREL16_LO_DS;
2074      break;
2075    case BFD_RELOC_PPC_GOT_TPREL16_HI:		r = R_PPC64_GOT_TPREL16_HI;
2076      break;
2077    case BFD_RELOC_PPC_GOT_TPREL16_HA:		r = R_PPC64_GOT_TPREL16_HA;
2078      break;
2079    case BFD_RELOC_PPC_GOT_DTPREL16:		r = R_PPC64_GOT_DTPREL16_DS;
2080      break;
2081    case BFD_RELOC_PPC_GOT_DTPREL16_LO:		r = R_PPC64_GOT_DTPREL16_LO_DS;
2082      break;
2083    case BFD_RELOC_PPC_GOT_DTPREL16_HI:		r = R_PPC64_GOT_DTPREL16_HI;
2084      break;
2085    case BFD_RELOC_PPC_GOT_DTPREL16_HA:		r = R_PPC64_GOT_DTPREL16_HA;
2086      break;
2087    case BFD_RELOC_PPC64_TPREL16_DS:		r = R_PPC64_TPREL16_DS;
2088      break;
2089    case BFD_RELOC_PPC64_TPREL16_LO_DS:		r = R_PPC64_TPREL16_LO_DS;
2090      break;
2091    case BFD_RELOC_PPC64_TPREL16_HIGHER:	r = R_PPC64_TPREL16_HIGHER;
2092      break;
2093    case BFD_RELOC_PPC64_TPREL16_HIGHERA:	r = R_PPC64_TPREL16_HIGHERA;
2094      break;
2095    case BFD_RELOC_PPC64_TPREL16_HIGHEST:	r = R_PPC64_TPREL16_HIGHEST;
2096      break;
2097    case BFD_RELOC_PPC64_TPREL16_HIGHESTA:	r = R_PPC64_TPREL16_HIGHESTA;
2098      break;
2099    case BFD_RELOC_PPC64_DTPREL16_DS:		r = R_PPC64_DTPREL16_DS;
2100      break;
2101    case BFD_RELOC_PPC64_DTPREL16_LO_DS:	r = R_PPC64_DTPREL16_LO_DS;
2102      break;
2103    case BFD_RELOC_PPC64_DTPREL16_HIGHER:	r = R_PPC64_DTPREL16_HIGHER;
2104      break;
2105    case BFD_RELOC_PPC64_DTPREL16_HIGHERA:	r = R_PPC64_DTPREL16_HIGHERA;
2106      break;
2107    case BFD_RELOC_PPC64_DTPREL16_HIGHEST:	r = R_PPC64_DTPREL16_HIGHEST;
2108      break;
2109    case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:	r = R_PPC64_DTPREL16_HIGHESTA;
2110      break;
2111    case BFD_RELOC_VTABLE_INHERIT:		r = R_PPC64_GNU_VTINHERIT;
2112      break;
2113    case BFD_RELOC_VTABLE_ENTRY:		r = R_PPC64_GNU_VTENTRY;
2114      break;
2115    }
2116
2117  return ppc64_elf_howto_table[r];
2118};
2119
2120static reloc_howto_type *
2121ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2122			     const char *r_name)
2123{
2124  unsigned int i;
2125
2126  for (i = 0;
2127       i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
2128       i++)
2129    if (ppc64_elf_howto_raw[i].name != NULL
2130	&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
2131      return &ppc64_elf_howto_raw[i];
2132
2133  return NULL;
2134}
2135
2136/* Set the howto pointer for a PowerPC ELF reloc.  */
2137
2138static void
2139ppc64_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
2140			 Elf_Internal_Rela *dst)
2141{
2142  unsigned int type;
2143
2144  /* Initialize howto table if needed.  */
2145  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2146    ppc_howto_init ();
2147
2148  type = ELF64_R_TYPE (dst->r_info);
2149  if (type >= (sizeof (ppc64_elf_howto_table)
2150	       / sizeof (ppc64_elf_howto_table[0])))
2151    {
2152      (*_bfd_error_handler) (_("%B: invalid relocation type %d"),
2153			     abfd, (int) type);
2154      type = R_PPC64_NONE;
2155    }
2156  cache_ptr->howto = ppc64_elf_howto_table[type];
2157}
2158
2159/* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
2160
2161static bfd_reloc_status_type
2162ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2163		    void *data, asection *input_section,
2164		    bfd *output_bfd, char **error_message)
2165{
2166  /* If this is a relocatable link (output_bfd test tells us), just
2167     call the generic function.  Any adjustment will be done at final
2168     link time.  */
2169  if (output_bfd != NULL)
2170    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2171				  input_section, output_bfd, error_message);
2172
2173  /* Adjust the addend for sign extension of the low 16 bits.
2174     We won't actually be using the low 16 bits, so trashing them
2175     doesn't matter.  */
2176  reloc_entry->addend += 0x8000;
2177  return bfd_reloc_continue;
2178}
2179
2180static bfd_reloc_status_type
2181ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2182			void *data, asection *input_section,
2183			bfd *output_bfd, char **error_message)
2184{
2185  if (output_bfd != NULL)
2186    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2187				  input_section, output_bfd, error_message);
2188
2189  if (strcmp (symbol->section->name, ".opd") == 0
2190      && (symbol->section->owner->flags & DYNAMIC) == 0)
2191    {
2192      bfd_vma dest = opd_entry_value (symbol->section,
2193				      symbol->value + reloc_entry->addend,
2194				      NULL, NULL);
2195      if (dest != (bfd_vma) -1)
2196	reloc_entry->addend = dest - (symbol->value
2197				      + symbol->section->output_section->vma
2198				      + symbol->section->output_offset);
2199    }
2200  return bfd_reloc_continue;
2201}
2202
2203static bfd_reloc_status_type
2204ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2205			 void *data, asection *input_section,
2206			 bfd *output_bfd, char **error_message)
2207{
2208  long insn;
2209  enum elf_ppc64_reloc_type r_type;
2210  bfd_size_type octets;
2211  /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
2212  bfd_boolean is_power4 = FALSE;
2213
2214  /* If this is a relocatable link (output_bfd test tells us), just
2215     call the generic function.  Any adjustment will be done at final
2216     link time.  */
2217  if (output_bfd != NULL)
2218    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2219				  input_section, output_bfd, error_message);
2220
2221  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2222  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2223  insn &= ~(0x01 << 21);
2224  r_type = reloc_entry->howto->type;
2225  if (r_type == R_PPC64_ADDR14_BRTAKEN
2226      || r_type == R_PPC64_REL14_BRTAKEN)
2227    insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
2228
2229  if (is_power4)
2230    {
2231      /* Set 'a' bit.  This is 0b00010 in BO field for branch
2232	 on CR(BI) insns (BO == 001at or 011at), and 0b01000
2233	 for branch on CTR insns (BO == 1a00t or 1a01t).  */
2234      if ((insn & (0x14 << 21)) == (0x04 << 21))
2235	insn |= 0x02 << 21;
2236      else if ((insn & (0x14 << 21)) == (0x10 << 21))
2237	insn |= 0x08 << 21;
2238      else
2239	goto out;
2240    }
2241  else
2242    {
2243      bfd_vma target = 0;
2244      bfd_vma from;
2245
2246      if (!bfd_is_com_section (symbol->section))
2247	target = symbol->value;
2248      target += symbol->section->output_section->vma;
2249      target += symbol->section->output_offset;
2250      target += reloc_entry->addend;
2251
2252      from = (reloc_entry->address
2253	      + input_section->output_offset
2254	      + input_section->output_section->vma);
2255
2256      /* Invert 'y' bit if not the default.  */
2257      if ((bfd_signed_vma) (target - from) < 0)
2258	insn ^= 0x01 << 21;
2259    }
2260  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2261 out:
2262  return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
2263				 input_section, output_bfd, error_message);
2264}
2265
2266static bfd_reloc_status_type
2267ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2268			 void *data, asection *input_section,
2269			 bfd *output_bfd, char **error_message)
2270{
2271  /* If this is a relocatable link (output_bfd test tells us), just
2272     call the generic function.  Any adjustment will be done at final
2273     link time.  */
2274  if (output_bfd != NULL)
2275    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2276				  input_section, output_bfd, error_message);
2277
2278  /* Subtract the symbol section base address.  */
2279  reloc_entry->addend -= symbol->section->output_section->vma;
2280  return bfd_reloc_continue;
2281}
2282
2283static bfd_reloc_status_type
2284ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2285			    void *data, asection *input_section,
2286			    bfd *output_bfd, char **error_message)
2287{
2288  /* If this is a relocatable link (output_bfd test tells us), just
2289     call the generic function.  Any adjustment will be done at final
2290     link time.  */
2291  if (output_bfd != NULL)
2292    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2293				  input_section, output_bfd, error_message);
2294
2295  /* Subtract the symbol section base address.  */
2296  reloc_entry->addend -= symbol->section->output_section->vma;
2297
2298  /* Adjust the addend for sign extension of the low 16 bits.  */
2299  reloc_entry->addend += 0x8000;
2300  return bfd_reloc_continue;
2301}
2302
2303static bfd_reloc_status_type
2304ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2305		     void *data, asection *input_section,
2306		     bfd *output_bfd, char **error_message)
2307{
2308  bfd_vma TOCstart;
2309
2310  /* If this is a relocatable link (output_bfd test tells us), just
2311     call the generic function.  Any adjustment will be done at final
2312     link time.  */
2313  if (output_bfd != NULL)
2314    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2315				  input_section, output_bfd, error_message);
2316
2317  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2318  if (TOCstart == 0)
2319    TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2320
2321  /* Subtract the TOC base address.  */
2322  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2323  return bfd_reloc_continue;
2324}
2325
2326static bfd_reloc_status_type
2327ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2328			void *data, asection *input_section,
2329			bfd *output_bfd, char **error_message)
2330{
2331  bfd_vma TOCstart;
2332
2333  /* If this is a relocatable link (output_bfd test tells us), just
2334     call the generic function.  Any adjustment will be done at final
2335     link time.  */
2336  if (output_bfd != NULL)
2337    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2338				  input_section, output_bfd, error_message);
2339
2340  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2341  if (TOCstart == 0)
2342    TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2343
2344  /* Subtract the TOC base address.  */
2345  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2346
2347  /* Adjust the addend for sign extension of the low 16 bits.  */
2348  reloc_entry->addend += 0x8000;
2349  return bfd_reloc_continue;
2350}
2351
2352static bfd_reloc_status_type
2353ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2354		       void *data, asection *input_section,
2355		       bfd *output_bfd, char **error_message)
2356{
2357  bfd_vma TOCstart;
2358  bfd_size_type octets;
2359
2360  /* If this is a relocatable link (output_bfd test tells us), just
2361     call the generic function.  Any adjustment will be done at final
2362     link time.  */
2363  if (output_bfd != NULL)
2364    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2365				  input_section, output_bfd, error_message);
2366
2367  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2368  if (TOCstart == 0)
2369    TOCstart = ppc64_elf_toc (input_section->output_section->owner);
2370
2371  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2372  bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
2373  return bfd_reloc_ok;
2374}
2375
2376static bfd_reloc_status_type
2377ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2378			   void *data, asection *input_section,
2379			   bfd *output_bfd, char **error_message)
2380{
2381  /* If this is a relocatable link (output_bfd test tells us), just
2382     call the generic function.  Any adjustment will be done at final
2383     link time.  */
2384  if (output_bfd != NULL)
2385    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2386				  input_section, output_bfd, error_message);
2387
2388  if (error_message != NULL)
2389    {
2390      static char buf[60];
2391      sprintf (buf, "generic linker can't handle %s",
2392	       reloc_entry->howto->name);
2393      *error_message = buf;
2394    }
2395  return bfd_reloc_dangerous;
2396}
2397
2398struct ppc64_elf_obj_tdata
2399{
2400  struct elf_obj_tdata elf;
2401
2402  /* Shortcuts to dynamic linker sections.  */
2403  asection *got;
2404  asection *relgot;
2405
2406  /* Used during garbage collection.  We attach global symbols defined
2407     on removed .opd entries to this section so that the sym is removed.  */
2408  asection *deleted_section;
2409
2410  /* TLS local dynamic got entry handling.  Suppose for multiple GOT
2411     sections means we potentially need one of these for each input bfd.  */
2412  union {
2413    bfd_signed_vma refcount;
2414    bfd_vma offset;
2415  } tlsld_got;
2416
2417  /* A copy of relocs before they are modified for --emit-relocs.  */
2418  Elf_Internal_Rela *opd_relocs;
2419};
2420
2421#define ppc64_elf_tdata(bfd) \
2422  ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
2423
2424#define ppc64_tlsld_got(bfd) \
2425  (&ppc64_elf_tdata (bfd)->tlsld_got)
2426
2427/* Override the generic function because we store some extras.  */
2428
2429static bfd_boolean
2430ppc64_elf_mkobject (bfd *abfd)
2431{
2432  if (abfd->tdata.any == NULL)
2433    {
2434      bfd_size_type amt = sizeof (struct ppc64_elf_obj_tdata);
2435      abfd->tdata.any = bfd_zalloc (abfd, amt);
2436      if (abfd->tdata.any == NULL)
2437	return FALSE;
2438    }
2439  return bfd_elf_mkobject (abfd);
2440}
2441
2442/* Return 1 if target is one of ours.  */
2443
2444static bfd_boolean
2445is_ppc64_elf_target (const struct bfd_target *targ)
2446{
2447  extern const bfd_target bfd_elf64_powerpc_vec;
2448  extern const bfd_target bfd_elf64_powerpcle_vec;
2449
2450  return targ == &bfd_elf64_powerpc_vec || targ == &bfd_elf64_powerpcle_vec;
2451}
2452
2453/* Fix bad default arch selected for a 64 bit input bfd when the
2454   default is 32 bit.  */
2455
2456static bfd_boolean
2457ppc64_elf_object_p (bfd *abfd)
2458{
2459  if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32)
2460    {
2461      Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
2462
2463      if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
2464	{
2465	  /* Relies on arch after 32 bit default being 64 bit default.  */
2466	  abfd->arch_info = abfd->arch_info->next;
2467	  BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
2468	}
2469    }
2470  return TRUE;
2471}
2472
2473/* Support for core dump NOTE sections.  */
2474
2475static bfd_boolean
2476ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
2477{
2478  size_t offset, size;
2479
2480  if (note->descsz != 504)
2481    return FALSE;
2482
2483  /* pr_cursig */
2484  elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
2485
2486  /* pr_pid */
2487  elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32);
2488
2489  /* pr_reg */
2490  offset = 112;
2491  size = 384;
2492
2493  /* Make a ".reg/999" section.  */
2494  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
2495					  size, note->descpos + offset);
2496}
2497
2498static bfd_boolean
2499ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
2500{
2501  if (note->descsz != 136)
2502    return FALSE;
2503
2504  elf_tdata (abfd)->core_program
2505    = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
2506  elf_tdata (abfd)->core_command
2507    = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
2508
2509  return TRUE;
2510}
2511
2512static char *
2513ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
2514			   ...)
2515{
2516  switch (note_type)
2517    {
2518    default:
2519      return NULL;
2520
2521    case NT_PRPSINFO:
2522      {
2523	char data[136];
2524	va_list ap;
2525
2526	va_start (ap, note_type);
2527	memset (data, 0, 40);
2528	strncpy (data + 40, va_arg (ap, const char *), 16);
2529	strncpy (data + 56, va_arg (ap, const char *), 80);
2530	va_end (ap);
2531	return elfcore_write_note (abfd, buf, bufsiz,
2532				   "CORE", note_type, data, sizeof (data));
2533      }
2534
2535    case NT_PRSTATUS:
2536      {
2537	char data[504];
2538	va_list ap;
2539	long pid;
2540	int cursig;
2541	const void *greg;
2542
2543	va_start (ap, note_type);
2544	memset (data, 0, 112);
2545	pid = va_arg (ap, long);
2546	bfd_put_32 (abfd, pid, data + 32);
2547	cursig = va_arg (ap, int);
2548	bfd_put_16 (abfd, cursig, data + 12);
2549	greg = va_arg (ap, const void *);
2550	memcpy (data + 112, greg, 384);
2551	memset (data + 496, 0, 8);
2552	va_end (ap);
2553	return elfcore_write_note (abfd, buf, bufsiz,
2554				   "CORE", note_type, data, sizeof (data));
2555      }
2556    }
2557}
2558
2559/* Merge backend specific data from an object file to the output
2560   object file when linking.  */
2561
2562static bfd_boolean
2563ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
2564{
2565  /* Check if we have the same endianess.  */
2566  if (ibfd->xvec->byteorder != obfd->xvec->byteorder
2567      && ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN
2568      && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
2569    {
2570      const char *msg;
2571
2572      if (bfd_big_endian (ibfd))
2573	msg = _("%B: compiled for a big endian system "
2574		"and target is little endian");
2575      else
2576	msg = _("%B: compiled for a little endian system "
2577		"and target is big endian");
2578
2579      (*_bfd_error_handler) (msg, ibfd);
2580
2581      bfd_set_error (bfd_error_wrong_format);
2582      return FALSE;
2583    }
2584
2585  return TRUE;
2586}
2587
2588/* Add extra PPC sections.  */
2589
2590static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
2591{
2592  { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
2593  { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2594  { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2595  { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2596  { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2597  { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2598  { NULL,                     0,  0, 0,            0 }
2599};
2600
2601enum _ppc64_sec_type {
2602  sec_normal = 0,
2603  sec_opd = 1,
2604  sec_toc = 2
2605};
2606
2607struct _ppc64_elf_section_data
2608{
2609  struct bfd_elf_section_data elf;
2610
2611  /* An array with one entry for each opd function descriptor.  */
2612  union
2613  {
2614    /* Points to the function code section for local opd entries.  */
2615    asection **opd_func_sec;
2616    /* After editing .opd, adjust references to opd local syms.  */
2617    long *opd_adjust;
2618
2619    /* An array for toc sections, indexed by offset/8.
2620       Specifies the relocation symbol index used at a given toc offset.  */
2621    unsigned *t_symndx;
2622  } u;
2623
2624  enum _ppc64_sec_type sec_type:2;
2625
2626  /* Flag set when small branches are detected.  Used to
2627     select suitable defaults for the stub group size.  */
2628  unsigned int has_14bit_branch:1;
2629};
2630
2631#define ppc64_elf_section_data(sec) \
2632  ((struct _ppc64_elf_section_data *) elf_section_data (sec))
2633
2634static bfd_boolean
2635ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
2636{
2637  if (!sec->used_by_bfd)
2638    {
2639      struct _ppc64_elf_section_data *sdata;
2640      bfd_size_type amt = sizeof (*sdata);
2641
2642      sdata = bfd_zalloc (abfd, amt);
2643      if (sdata == NULL)
2644	return FALSE;
2645      sec->used_by_bfd = sdata;
2646    }
2647
2648  return _bfd_elf_new_section_hook (abfd, sec);
2649}
2650
2651static void *
2652get_opd_info (asection * sec)
2653{
2654  if (sec != NULL
2655      && ppc64_elf_section_data (sec) != NULL
2656      && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2657    return ppc64_elf_section_data (sec)->u.opd_adjust;
2658  return NULL;
2659}
2660
2661/* Parameters for the qsort hook.  */
2662static asection *synthetic_opd;
2663static bfd_boolean synthetic_relocatable;
2664
2665/* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
2666
2667static int
2668compare_symbols (const void *ap, const void *bp)
2669{
2670  const asymbol *a = * (const asymbol **) ap;
2671  const asymbol *b = * (const asymbol **) bp;
2672
2673  /* Section symbols first.  */
2674  if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2675    return -1;
2676  if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2677    return 1;
2678
2679  /* then .opd symbols.  */
2680  if (a->section == synthetic_opd && b->section != synthetic_opd)
2681    return -1;
2682  if (a->section != synthetic_opd && b->section == synthetic_opd)
2683    return 1;
2684
2685  /* then other code symbols.  */
2686  if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2687      == (SEC_CODE | SEC_ALLOC)
2688      && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2689	 != (SEC_CODE | SEC_ALLOC))
2690    return -1;
2691
2692  if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2693      != (SEC_CODE | SEC_ALLOC)
2694      && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2695	 == (SEC_CODE | SEC_ALLOC))
2696    return 1;
2697
2698  if (synthetic_relocatable)
2699    {
2700      if (a->section->id < b->section->id)
2701	return -1;
2702
2703      if (a->section->id > b->section->id)
2704	return 1;
2705    }
2706
2707  if (a->value + a->section->vma < b->value + b->section->vma)
2708    return -1;
2709
2710  if (a->value + a->section->vma > b->value + b->section->vma)
2711    return 1;
2712
2713  /* For syms with the same value, prefer strong dynamic global function
2714     syms over other syms.  */
2715  if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2716    return -1;
2717
2718  if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2719    return 1;
2720
2721  if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2722    return -1;
2723
2724  if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2725    return 1;
2726
2727  if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2728    return -1;
2729
2730  if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2731    return 1;
2732
2733  if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2734    return -1;
2735
2736  if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2737    return 1;
2738
2739  return 0;
2740}
2741
2742/* Search SYMS for a symbol of the given VALUE.  */
2743
2744static asymbol *
2745sym_exists_at (asymbol **syms, long lo, long hi, int id, bfd_vma value)
2746{
2747  long mid;
2748
2749  if (id == -1)
2750    {
2751      while (lo < hi)
2752	{
2753	  mid = (lo + hi) >> 1;
2754	  if (syms[mid]->value + syms[mid]->section->vma < value)
2755	    lo = mid + 1;
2756	  else if (syms[mid]->value + syms[mid]->section->vma > value)
2757	    hi = mid;
2758	  else
2759	    return syms[mid];
2760	}
2761    }
2762  else
2763    {
2764      while (lo < hi)
2765	{
2766	  mid = (lo + hi) >> 1;
2767	  if (syms[mid]->section->id < id)
2768	    lo = mid + 1;
2769	  else if (syms[mid]->section->id > id)
2770	    hi = mid;
2771	  else if (syms[mid]->value < value)
2772	    lo = mid + 1;
2773	  else if (syms[mid]->value > value)
2774	    hi = mid;
2775	  else
2776	    return syms[mid];
2777	}
2778    }
2779  return NULL;
2780}
2781
2782/* Create synthetic symbols, effectively restoring "dot-symbol" function
2783   entry syms.  */
2784
2785static long
2786ppc64_elf_get_synthetic_symtab (bfd *abfd,
2787				long static_count, asymbol **static_syms,
2788				long dyn_count, asymbol **dyn_syms,
2789				asymbol **ret)
2790{
2791  asymbol *s;
2792  long i;
2793  long count;
2794  char *names;
2795  long symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2796  asection *opd;
2797  bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2798  asymbol **syms;
2799
2800  *ret = NULL;
2801
2802  opd = bfd_get_section_by_name (abfd, ".opd");
2803  if (opd == NULL)
2804    return 0;
2805
2806  symcount = static_count;
2807  if (!relocatable)
2808    symcount += dyn_count;
2809  if (symcount == 0)
2810    return 0;
2811
2812  syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
2813  if (syms == NULL)
2814    return -1;
2815
2816  if (!relocatable && static_count != 0 && dyn_count != 0)
2817    {
2818      /* Use both symbol tables.  */
2819      memcpy (syms, static_syms, static_count * sizeof (*syms));
2820      memcpy (syms + static_count, dyn_syms, (dyn_count + 1) * sizeof (*syms));
2821    }
2822  else if (!relocatable && static_count == 0)
2823    memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
2824  else
2825    memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
2826
2827  synthetic_opd = opd;
2828  synthetic_relocatable = relocatable;
2829  qsort (syms, symcount, sizeof (*syms), compare_symbols);
2830
2831  if (!relocatable && symcount > 1)
2832    {
2833      long j;
2834      /* Trim duplicate syms, since we may have merged the normal and
2835	 dynamic symbols.  Actually, we only care about syms that have
2836	 different values, so trim any with the same value.  */
2837      for (i = 1, j = 1; i < symcount; ++i)
2838	if (syms[i - 1]->value + syms[i - 1]->section->vma
2839	    != syms[i]->value + syms[i]->section->vma)
2840	  syms[j++] = syms[i];
2841      symcount = j;
2842    }
2843
2844  i = 0;
2845  if (syms[i]->section == opd)
2846    ++i;
2847  codesecsym = i;
2848
2849  for (; i < symcount; ++i)
2850    if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2851	 != (SEC_CODE | SEC_ALLOC))
2852	|| (syms[i]->flags & BSF_SECTION_SYM) == 0)
2853      break;
2854  codesecsymend = i;
2855
2856  for (; i < symcount; ++i)
2857    if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
2858      break;
2859  secsymend = i;
2860
2861  for (; i < symcount; ++i)
2862    if (syms[i]->section != opd)
2863      break;
2864  opdsymend = i;
2865
2866  for (; i < symcount; ++i)
2867    if ((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2868	!= (SEC_CODE | SEC_ALLOC))
2869      break;
2870  symcount = i;
2871
2872  count = 0;
2873  if (opdsymend == secsymend)
2874    goto done;
2875
2876  if (relocatable)
2877    {
2878      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2879      arelent *r;
2880      size_t size;
2881      long relcount;
2882
2883      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2884      relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
2885      if (relcount == 0)
2886	goto done;
2887
2888      if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
2889	{
2890	  count = -1;
2891	  goto done;
2892	}
2893
2894      size = 0;
2895      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2896	{
2897	  asymbol *sym;
2898
2899	  while (r < opd->relocation + relcount
2900		 && r->address < syms[i]->value + opd->vma)
2901	    ++r;
2902
2903	  if (r == opd->relocation + relcount)
2904	    break;
2905
2906	  if (r->address != syms[i]->value + opd->vma)
2907	    continue;
2908
2909	  if (r->howto->type != R_PPC64_ADDR64)
2910	    continue;
2911
2912	  sym = *r->sym_ptr_ptr;
2913	  if (!sym_exists_at (syms, opdsymend, symcount,
2914			      sym->section->id, sym->value + r->addend))
2915	    {
2916	      ++count;
2917	      size += sizeof (asymbol);
2918	      size += strlen (syms[i]->name) + 2;
2919	    }
2920	}
2921
2922      s = *ret = bfd_malloc (size);
2923      if (s == NULL)
2924	{
2925	  count = -1;
2926	  goto done;
2927	}
2928
2929      names = (char *) (s + count);
2930
2931      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2932	{
2933	  asymbol *sym;
2934
2935	  while (r < opd->relocation + relcount
2936		 && r->address < syms[i]->value + opd->vma)
2937	    ++r;
2938
2939	  if (r == opd->relocation + relcount)
2940	    break;
2941
2942	  if (r->address != syms[i]->value + opd->vma)
2943	    continue;
2944
2945	  if (r->howto->type != R_PPC64_ADDR64)
2946	    continue;
2947
2948	  sym = *r->sym_ptr_ptr;
2949	  if (!sym_exists_at (syms, opdsymend, symcount,
2950			      sym->section->id, sym->value + r->addend))
2951	    {
2952	      size_t len;
2953
2954	      *s = *syms[i];
2955	      s->section = sym->section;
2956	      s->value = sym->value + r->addend;
2957	      s->name = names;
2958	      *names++ = '.';
2959	      len = strlen (syms[i]->name);
2960	      memcpy (names, syms[i]->name, len + 1);
2961	      names += len + 1;
2962	      s++;
2963	    }
2964	}
2965    }
2966  else
2967    {
2968      bfd_byte *contents;
2969      size_t size;
2970
2971      if (!bfd_malloc_and_get_section (abfd, opd, &contents))
2972	{
2973	  if (contents)
2974	    {
2975	    free_contents_and_exit:
2976	      free (contents);
2977	    }
2978	  count = -1;
2979	  goto done;
2980	}
2981
2982      size = 0;
2983      for (i = secsymend; i < opdsymend; ++i)
2984	{
2985	  bfd_vma ent;
2986
2987	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
2988	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2989	    {
2990	      ++count;
2991	      size += sizeof (asymbol);
2992	      size += strlen (syms[i]->name) + 2;
2993	    }
2994	}
2995
2996      s = *ret = bfd_malloc (size);
2997      if (s == NULL)
2998	goto free_contents_and_exit;
2999
3000      names = (char *) (s + count);
3001
3002      for (i = secsymend; i < opdsymend; ++i)
3003	{
3004	  bfd_vma ent;
3005
3006	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
3007	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3008	    {
3009	      long lo, hi;
3010	      size_t len;
3011	      asection *sec = abfd->sections;
3012
3013	      *s = *syms[i];
3014	      lo = codesecsym;
3015	      hi = codesecsymend;
3016	      while (lo < hi)
3017		{
3018		  long mid = (lo + hi) >> 1;
3019		  if (syms[mid]->section->vma < ent)
3020		    lo = mid + 1;
3021		  else if (syms[mid]->section->vma > ent)
3022		    hi = mid;
3023		  else
3024		    {
3025		      sec = syms[mid]->section;
3026		      break;
3027		    }
3028		}
3029
3030	      if (lo >= hi && lo > codesecsym)
3031		sec = syms[lo - 1]->section;
3032
3033	      for (; sec != NULL; sec = sec->next)
3034		{
3035		  if (sec->vma > ent)
3036		    break;
3037		  if ((sec->flags & SEC_ALLOC) == 0
3038		      || (sec->flags & SEC_LOAD) == 0)
3039		    break;
3040		  if ((sec->flags & SEC_CODE) != 0)
3041		    s->section = sec;
3042		}
3043	      s->value = ent - s->section->vma;
3044	      s->name = names;
3045	      *names++ = '.';
3046	      len = strlen (syms[i]->name);
3047	      memcpy (names, syms[i]->name, len + 1);
3048	      names += len + 1;
3049	      s++;
3050	    }
3051	}
3052      free (contents);
3053    }
3054
3055 done:
3056  free (syms);
3057  return count;
3058}
3059
3060/* The following functions are specific to the ELF linker, while
3061   functions above are used generally.  Those named ppc64_elf_* are
3062   called by the main ELF linker code.  They appear in this file more
3063   or less in the order in which they are called.  eg.
3064   ppc64_elf_check_relocs is called early in the link process,
3065   ppc64_elf_finish_dynamic_sections is one of the last functions
3066   called.
3067
3068   PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
3069   functions have both a function code symbol and a function descriptor
3070   symbol.  A call to foo in a relocatable object file looks like:
3071
3072   .		.text
3073   .	x:
3074   .		bl	.foo
3075   .		nop
3076
3077   The function definition in another object file might be:
3078
3079   .		.section .opd
3080   .	foo:	.quad	.foo
3081   .		.quad	.TOC.@tocbase
3082   .		.quad	0
3083   .
3084   .		.text
3085   .	.foo:	blr
3086
3087   When the linker resolves the call during a static link, the branch
3088   unsurprisingly just goes to .foo and the .opd information is unused.
3089   If the function definition is in a shared library, things are a little
3090   different:  The call goes via a plt call stub, the opd information gets
3091   copied to the plt, and the linker patches the nop.
3092
3093   .	x:
3094   .		bl	.foo_stub
3095   .		ld	2,40(1)
3096   .
3097   .
3098   .	.foo_stub:
3099   .		addis	12,2,Lfoo@toc@ha	# in practice, the call stub
3100   .		addi	12,12,Lfoo@toc@l	# is slightly optimized, but
3101   .		std	2,40(1)			# this is the general idea
3102   .		ld	11,0(12)
3103   .		ld	2,8(12)
3104   .		mtctr	11
3105   .		ld	11,16(12)
3106   .		bctr
3107   .
3108   .		.section .plt
3109   .	Lfoo:	reloc (R_PPC64_JMP_SLOT, foo)
3110
3111   The "reloc ()" notation is supposed to indicate that the linker emits
3112   an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
3113   copying.
3114
3115   What are the difficulties here?  Well, firstly, the relocations
3116   examined by the linker in check_relocs are against the function code
3117   sym .foo, while the dynamic relocation in the plt is emitted against
3118   the function descriptor symbol, foo.  Somewhere along the line, we need
3119   to carefully copy dynamic link information from one symbol to the other.
3120   Secondly, the generic part of the elf linker will make .foo a dynamic
3121   symbol as is normal for most other backends.  We need foo dynamic
3122   instead, at least for an application final link.  However, when
3123   creating a shared library containing foo, we need to have both symbols
3124   dynamic so that references to .foo are satisfied during the early
3125   stages of linking.  Otherwise the linker might decide to pull in a
3126   definition from some other object, eg. a static library.
3127
3128   Update: As of August 2004, we support a new convention.  Function
3129   calls may use the function descriptor symbol, ie. "bl foo".  This
3130   behaves exactly as "bl .foo".  */
3131
3132/* The linker needs to keep track of the number of relocs that it
3133   decides to copy as dynamic relocs in check_relocs for each symbol.
3134   This is so that it can later discard them if they are found to be
3135   unnecessary.  We store the information in a field extending the
3136   regular ELF linker hash table.  */
3137
3138struct ppc_dyn_relocs
3139{
3140  struct ppc_dyn_relocs *next;
3141
3142  /* The input section of the reloc.  */
3143  asection *sec;
3144
3145  /* Total number of relocs copied for the input section.  */
3146  bfd_size_type count;
3147
3148  /* Number of pc-relative relocs copied for the input section.  */
3149  bfd_size_type pc_count;
3150};
3151
3152/* Track GOT entries needed for a given symbol.  We might need more
3153   than one got entry per symbol.  */
3154struct got_entry
3155{
3156  struct got_entry *next;
3157
3158  /* The symbol addend that we'll be placing in the GOT.  */
3159  bfd_vma addend;
3160
3161  /* Unlike other ELF targets, we use separate GOT entries for the same
3162     symbol referenced from different input files.  This is to support
3163     automatic multiple TOC/GOT sections, where the TOC base can vary
3164     from one input file to another.
3165
3166     Point to the BFD owning this GOT entry.  */
3167  bfd *owner;
3168
3169  /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
3170     TLS_TPREL or TLS_DTPREL for tls entries.  */
3171  char tls_type;
3172
3173  /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
3174  union
3175    {
3176      bfd_signed_vma refcount;
3177      bfd_vma offset;
3178    } got;
3179};
3180
3181/* The same for PLT.  */
3182struct plt_entry
3183{
3184  struct plt_entry *next;
3185
3186  bfd_vma addend;
3187
3188  union
3189    {
3190      bfd_signed_vma refcount;
3191      bfd_vma offset;
3192    } plt;
3193};
3194
3195/* Of those relocs that might be copied as dynamic relocs, this macro
3196   selects those that must be copied when linking a shared library,
3197   even when the symbol is local.  */
3198
3199#define MUST_BE_DYN_RELOC(RTYPE)		\
3200  ((RTYPE) != R_PPC64_REL32			\
3201   && (RTYPE) != R_PPC64_REL64			\
3202   && (RTYPE) != R_PPC64_REL30)
3203
3204/* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
3205   copying dynamic variables from a shared lib into an app's dynbss
3206   section, and instead use a dynamic relocation to point into the
3207   shared lib.  With code that gcc generates, it's vital that this be
3208   enabled;  In the PowerPC64 ABI, the address of a function is actually
3209   the address of a function descriptor, which resides in the .opd
3210   section.  gcc uses the descriptor directly rather than going via the
3211   GOT as some other ABI's do, which means that initialized function
3212   pointers must reference the descriptor.  Thus, a function pointer
3213   initialized to the address of a function in a shared library will
3214   either require a copy reloc, or a dynamic reloc.  Using a copy reloc
3215   redefines the function descriptor symbol to point to the copy.  This
3216   presents a problem as a plt entry for that function is also
3217   initialized from the function descriptor symbol and the copy reloc
3218   may not be initialized first.  */
3219#define ELIMINATE_COPY_RELOCS 1
3220
3221/* Section name for stubs is the associated section name plus this
3222   string.  */
3223#define STUB_SUFFIX ".stub"
3224
3225/* Linker stubs.
3226   ppc_stub_long_branch:
3227   Used when a 14 bit branch (or even a 24 bit branch) can't reach its
3228   destination, but a 24 bit branch in a stub section will reach.
3229   .	b	dest
3230
3231   ppc_stub_plt_branch:
3232   Similar to the above, but a 24 bit branch in the stub section won't
3233   reach its destination.
3234   .	addis	%r12,%r2,xxx@toc@ha
3235   .	ld	%r11,xxx@toc@l(%r12)
3236   .	mtctr	%r11
3237   .	bctr
3238
3239   ppc_stub_plt_call:
3240   Used to call a function in a shared library.  If it so happens that
3241   the plt entry referenced crosses a 64k boundary, then an extra
3242   "addi %r12,%r12,xxx@toc@l" will be inserted before the "mtctr".
3243   .	addis	%r12,%r2,xxx@toc@ha
3244   .	std	%r2,40(%r1)
3245   .	ld	%r11,xxx+0@toc@l(%r12)
3246   .	mtctr	%r11
3247   .	ld	%r2,xxx+8@toc@l(%r12)
3248   .	ld	%r11,xxx+16@toc@l(%r12)
3249   .	bctr
3250
3251   ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
3252   code to adjust the value and save r2 to support multiple toc sections.
3253   A ppc_stub_long_branch with an r2 offset looks like:
3254   .	std	%r2,40(%r1)
3255   .	addis	%r2,%r2,off@ha
3256   .	addi	%r2,%r2,off@l
3257   .	b	dest
3258
3259   A ppc_stub_plt_branch with an r2 offset looks like:
3260   .	std	%r2,40(%r1)
3261   .	addis	%r12,%r2,xxx@toc@ha
3262   .	ld	%r11,xxx@toc@l(%r12)
3263   .	addis	%r2,%r2,off@ha
3264   .	addi	%r2,%r2,off@l
3265   .	mtctr	%r11
3266   .	bctr
3267
3268   In cases where the "addis" instruction would add zero, the "addis" is
3269   omitted and following instructions modified slightly in some cases.
3270*/
3271
3272enum ppc_stub_type {
3273  ppc_stub_none,
3274  ppc_stub_long_branch,
3275  ppc_stub_long_branch_r2off,
3276  ppc_stub_plt_branch,
3277  ppc_stub_plt_branch_r2off,
3278  ppc_stub_plt_call
3279};
3280
3281struct ppc_stub_hash_entry {
3282
3283  /* Base hash table entry structure.  */
3284  struct bfd_hash_entry root;
3285
3286  enum ppc_stub_type stub_type;
3287
3288  /* The stub section.  */
3289  asection *stub_sec;
3290
3291  /* Offset within stub_sec of the beginning of this stub.  */
3292  bfd_vma stub_offset;
3293
3294  /* Given the symbol's value and its section we can determine its final
3295     value when building the stubs (so the stub knows where to jump.  */
3296  bfd_vma target_value;
3297  asection *target_section;
3298
3299  /* The symbol table entry, if any, that this was derived from.  */
3300  struct ppc_link_hash_entry *h;
3301
3302  /* And the reloc addend that this was derived from.  */
3303  bfd_vma addend;
3304
3305  /* Where this stub is being called from, or, in the case of combined
3306     stub sections, the first input section in the group.  */
3307  asection *id_sec;
3308};
3309
3310struct ppc_branch_hash_entry {
3311
3312  /* Base hash table entry structure.  */
3313  struct bfd_hash_entry root;
3314
3315  /* Offset within branch lookup table.  */
3316  unsigned int offset;
3317
3318  /* Generation marker.  */
3319  unsigned int iter;
3320};
3321
3322struct ppc_link_hash_entry
3323{
3324  struct elf_link_hash_entry elf;
3325
3326  union {
3327    /* A pointer to the most recently used stub hash entry against this
3328       symbol.  */
3329    struct ppc_stub_hash_entry *stub_cache;
3330
3331    /* A pointer to the next symbol starting with a '.'  */
3332    struct ppc_link_hash_entry *next_dot_sym;
3333  } u;
3334
3335  /* Track dynamic relocs copied for this symbol.  */
3336  struct ppc_dyn_relocs *dyn_relocs;
3337
3338  /* Link between function code and descriptor symbols.  */
3339  struct ppc_link_hash_entry *oh;
3340
3341  /* Flag function code and descriptor symbols.  */
3342  unsigned int is_func:1;
3343  unsigned int is_func_descriptor:1;
3344  unsigned int fake:1;
3345
3346  /* Whether global opd/toc sym has been adjusted or not.
3347     After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3348     should be set for all globals defined in any opd/toc section.  */
3349  unsigned int adjust_done:1;
3350
3351  /* Set if we twiddled this symbol to weak at some stage.  */
3352  unsigned int was_undefined:1;
3353
3354  /* Contexts in which symbol is used in the GOT (or TOC).
3355     TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
3356     corresponding relocs are encountered during check_relocs.
3357     tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
3358     indicate the corresponding GOT entry type is not needed.
3359     tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
3360     a TPREL one.  We use a separate flag rather than setting TPREL
3361     just for convenience in distinguishing the two cases.  */
3362#define TLS_GD		 1	/* GD reloc. */
3363#define TLS_LD		 2	/* LD reloc. */
3364#define TLS_TPREL	 4	/* TPREL reloc, => IE. */
3365#define TLS_DTPREL	 8	/* DTPREL reloc, => LD. */
3366#define TLS_TLS		16	/* Any TLS reloc.  */
3367#define TLS_EXPLICIT	32	/* Marks TOC section TLS relocs. */
3368#define TLS_TPRELGD	64	/* TPREL reloc resulting from GD->IE. */
3369  char tls_mask;
3370};
3371
3372/* ppc64 ELF linker hash table.  */
3373
3374struct ppc_link_hash_table
3375{
3376  struct elf_link_hash_table elf;
3377
3378  /* The stub hash table.  */
3379  struct bfd_hash_table stub_hash_table;
3380
3381  /* Another hash table for plt_branch stubs.  */
3382  struct bfd_hash_table branch_hash_table;
3383
3384  /* Linker stub bfd.  */
3385  bfd *stub_bfd;
3386
3387  /* Linker call-backs.  */
3388  asection * (*add_stub_section) (const char *, asection *);
3389  void (*layout_sections_again) (void);
3390
3391  /* Array to keep track of which stub sections have been created, and
3392     information on stub grouping.  */
3393  struct map_stub {
3394    /* This is the section to which stubs in the group will be attached.  */
3395    asection *link_sec;
3396    /* The stub section.  */
3397    asection *stub_sec;
3398    /* Along with elf_gp, specifies the TOC pointer used in this group.  */
3399    bfd_vma toc_off;
3400  } *stub_group;
3401
3402  /* Temp used when calculating TOC pointers.  */
3403  bfd_vma toc_curr;
3404
3405  /* Highest input section id.  */
3406  int top_id;
3407
3408  /* Highest output section index.  */
3409  int top_index;
3410
3411  /* Used when adding symbols.  */
3412  struct ppc_link_hash_entry *dot_syms;
3413
3414  /* List of input sections for each output section.  */
3415  asection **input_list;
3416
3417  /* Short-cuts to get to dynamic linker sections.  */
3418  asection *got;
3419  asection *plt;
3420  asection *relplt;
3421  asection *dynbss;
3422  asection *relbss;
3423  asection *glink;
3424  asection *sfpr;
3425  asection *brlt;
3426  asection *relbrlt;
3427
3428  /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3429  struct ppc_link_hash_entry *tls_get_addr;
3430  struct ppc_link_hash_entry *tls_get_addr_fd;
3431
3432  /* Statistics.  */
3433  unsigned long stub_count[ppc_stub_plt_call];
3434
3435  /* Number of stubs against global syms.  */
3436  unsigned long stub_globals;
3437
3438  /* Set if we should emit symbols for stubs.  */
3439  unsigned int emit_stub_syms:1;
3440
3441  /* Support for multiple toc sections.  */
3442  unsigned int no_multi_toc:1;
3443  unsigned int multi_toc_needed:1;
3444
3445  /* Set on error.  */
3446  unsigned int stub_error:1;
3447
3448  /* Temp used by ppc64_elf_check_directives.  */
3449  unsigned int twiddled_syms:1;
3450
3451  /* Incremented every time we size stubs.  */
3452  unsigned int stub_iteration;
3453
3454  /* Small local sym to section mapping cache.  */
3455  struct sym_sec_cache sym_sec;
3456};
3457
3458/* Rename some of the generic section flags to better document how they
3459   are used here.  */
3460#define has_toc_reloc has_gp_reloc
3461#define makes_toc_func_call need_finalize_relax
3462#define call_check_in_progress reloc_done
3463
3464/* Get the ppc64 ELF linker hash table from a link_info structure.  */
3465
3466#define ppc_hash_table(p) \
3467  ((struct ppc_link_hash_table *) ((p)->hash))
3468
3469#define ppc_stub_hash_lookup(table, string, create, copy) \
3470  ((struct ppc_stub_hash_entry *) \
3471   bfd_hash_lookup ((table), (string), (create), (copy)))
3472
3473#define ppc_branch_hash_lookup(table, string, create, copy) \
3474  ((struct ppc_branch_hash_entry *) \
3475   bfd_hash_lookup ((table), (string), (create), (copy)))
3476
3477/* Create an entry in the stub hash table.  */
3478
3479static struct bfd_hash_entry *
3480stub_hash_newfunc (struct bfd_hash_entry *entry,
3481		   struct bfd_hash_table *table,
3482		   const char *string)
3483{
3484  /* Allocate the structure if it has not already been allocated by a
3485     subclass.  */
3486  if (entry == NULL)
3487    {
3488      entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3489      if (entry == NULL)
3490	return entry;
3491    }
3492
3493  /* Call the allocation method of the superclass.  */
3494  entry = bfd_hash_newfunc (entry, table, string);
3495  if (entry != NULL)
3496    {
3497      struct ppc_stub_hash_entry *eh;
3498
3499      /* Initialize the local fields.  */
3500      eh = (struct ppc_stub_hash_entry *) entry;
3501      eh->stub_type = ppc_stub_none;
3502      eh->stub_sec = NULL;
3503      eh->stub_offset = 0;
3504      eh->target_value = 0;
3505      eh->target_section = NULL;
3506      eh->h = NULL;
3507      eh->id_sec = NULL;
3508    }
3509
3510  return entry;
3511}
3512
3513/* Create an entry in the branch hash table.  */
3514
3515static struct bfd_hash_entry *
3516branch_hash_newfunc (struct bfd_hash_entry *entry,
3517		     struct bfd_hash_table *table,
3518		     const char *string)
3519{
3520  /* Allocate the structure if it has not already been allocated by a
3521     subclass.  */
3522  if (entry == NULL)
3523    {
3524      entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3525      if (entry == NULL)
3526	return entry;
3527    }
3528
3529  /* Call the allocation method of the superclass.  */
3530  entry = bfd_hash_newfunc (entry, table, string);
3531  if (entry != NULL)
3532    {
3533      struct ppc_branch_hash_entry *eh;
3534
3535      /* Initialize the local fields.  */
3536      eh = (struct ppc_branch_hash_entry *) entry;
3537      eh->offset = 0;
3538      eh->iter = 0;
3539    }
3540
3541  return entry;
3542}
3543
3544/* Create an entry in a ppc64 ELF linker hash table.  */
3545
3546static struct bfd_hash_entry *
3547link_hash_newfunc (struct bfd_hash_entry *entry,
3548		   struct bfd_hash_table *table,
3549		   const char *string)
3550{
3551  /* Allocate the structure if it has not already been allocated by a
3552     subclass.  */
3553  if (entry == NULL)
3554    {
3555      entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3556      if (entry == NULL)
3557	return entry;
3558    }
3559
3560  /* Call the allocation method of the superclass.  */
3561  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3562  if (entry != NULL)
3563    {
3564      struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3565
3566      memset (&eh->u.stub_cache, 0,
3567	      (sizeof (struct ppc_link_hash_entry)
3568	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3569
3570      /* When making function calls, old ABI code references function entry
3571	 points (dot symbols), while new ABI code references the function
3572	 descriptor symbol.  We need to make any combination of reference and
3573	 definition work together, without breaking archive linking.
3574
3575	 For a defined function "foo" and an undefined call to "bar":
3576	 An old object defines "foo" and ".foo", references ".bar" (possibly
3577	 "bar" too).
3578	 A new object defines "foo" and references "bar".
3579
3580	 A new object thus has no problem with its undefined symbols being
3581	 satisfied by definitions in an old object.  On the other hand, the
3582	 old object won't have ".bar" satisfied by a new object.
3583
3584	 Keep a list of newly added dot-symbols.  */
3585
3586      if (string[0] == '.')
3587	{
3588	  struct ppc_link_hash_table *htab;
3589
3590	  htab = (struct ppc_link_hash_table *) table;
3591	  eh->u.next_dot_sym = htab->dot_syms;
3592	  htab->dot_syms = eh;
3593	}
3594    }
3595
3596  return entry;
3597}
3598
3599/* Create a ppc64 ELF linker hash table.  */
3600
3601static struct bfd_link_hash_table *
3602ppc64_elf_link_hash_table_create (bfd *abfd)
3603{
3604  struct ppc_link_hash_table *htab;
3605  bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3606
3607  htab = bfd_zmalloc (amt);
3608  if (htab == NULL)
3609    return NULL;
3610
3611  if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3612				      sizeof (struct ppc_link_hash_entry)))
3613    {
3614      free (htab);
3615      return NULL;
3616    }
3617
3618  /* Init the stub hash table too.  */
3619  if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3620			    sizeof (struct ppc_stub_hash_entry)))
3621    return NULL;
3622
3623  /* And the branch hash table.  */
3624  if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3625			    sizeof (struct ppc_branch_hash_entry)))
3626    return NULL;
3627
3628  /* Initializing two fields of the union is just cosmetic.  We really
3629     only care about glist, but when compiled on a 32-bit host the
3630     bfd_vma fields are larger.  Setting the bfd_vma to zero makes
3631     debugger inspection of these fields look nicer.  */
3632  htab->elf.init_got_refcount.refcount = 0;
3633  htab->elf.init_got_refcount.glist = NULL;
3634  htab->elf.init_plt_refcount.refcount = 0;
3635  htab->elf.init_plt_refcount.glist = NULL;
3636  htab->elf.init_got_offset.offset = 0;
3637  htab->elf.init_got_offset.glist = NULL;
3638  htab->elf.init_plt_offset.offset = 0;
3639  htab->elf.init_plt_offset.glist = NULL;
3640
3641  return &htab->elf.root;
3642}
3643
3644/* Free the derived linker hash table.  */
3645
3646static void
3647ppc64_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
3648{
3649  struct ppc_link_hash_table *ret = (struct ppc_link_hash_table *) hash;
3650
3651  bfd_hash_table_free (&ret->stub_hash_table);
3652  bfd_hash_table_free (&ret->branch_hash_table);
3653  _bfd_generic_link_hash_table_free (hash);
3654}
3655
3656/* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
3657
3658void
3659ppc64_elf_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
3660{
3661  struct ppc_link_hash_table *htab;
3662
3663  elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS64;
3664
3665/* Always hook our dynamic sections into the first bfd, which is the
3666   linker created stub bfd.  This ensures that the GOT header is at
3667   the start of the output TOC section.  */
3668  htab = ppc_hash_table (info);
3669  htab->stub_bfd = abfd;
3670  htab->elf.dynobj = abfd;
3671}
3672
3673/* Build a name for an entry in the stub hash table.  */
3674
3675static char *
3676ppc_stub_name (const asection *input_section,
3677	       const asection *sym_sec,
3678	       const struct ppc_link_hash_entry *h,
3679	       const Elf_Internal_Rela *rel)
3680{
3681  char *stub_name;
3682  bfd_size_type len;
3683
3684  /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3685     offsets from a sym as a branch target?  In fact, we could
3686     probably assume the addend is always zero.  */
3687  BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3688
3689  if (h)
3690    {
3691      len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3692      stub_name = bfd_malloc (len);
3693      if (stub_name == NULL)
3694	return stub_name;
3695
3696      sprintf (stub_name, "%08x.%s+%x",
3697	       input_section->id & 0xffffffff,
3698	       h->elf.root.root.string,
3699	       (int) rel->r_addend & 0xffffffff);
3700    }
3701  else
3702    {
3703      len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3704      stub_name = bfd_malloc (len);
3705      if (stub_name == NULL)
3706	return stub_name;
3707
3708      sprintf (stub_name, "%08x.%x:%x+%x",
3709	       input_section->id & 0xffffffff,
3710	       sym_sec->id & 0xffffffff,
3711	       (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3712	       (int) rel->r_addend & 0xffffffff);
3713    }
3714  if (stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3715    stub_name[len - 2] = 0;
3716  return stub_name;
3717}
3718
3719/* Look up an entry in the stub hash.  Stub entries are cached because
3720   creating the stub name takes a bit of time.  */
3721
3722static struct ppc_stub_hash_entry *
3723ppc_get_stub_entry (const asection *input_section,
3724		    const asection *sym_sec,
3725		    struct ppc_link_hash_entry *h,
3726		    const Elf_Internal_Rela *rel,
3727		    struct ppc_link_hash_table *htab)
3728{
3729  struct ppc_stub_hash_entry *stub_entry;
3730  const asection *id_sec;
3731
3732  /* If this input section is part of a group of sections sharing one
3733     stub section, then use the id of the first section in the group.
3734     Stub names need to include a section id, as there may well be
3735     more than one stub used to reach say, printf, and we need to
3736     distinguish between them.  */
3737  id_sec = htab->stub_group[input_section->id].link_sec;
3738
3739  if (h != NULL && h->u.stub_cache != NULL
3740      && h->u.stub_cache->h == h
3741      && h->u.stub_cache->id_sec == id_sec)
3742    {
3743      stub_entry = h->u.stub_cache;
3744    }
3745  else
3746    {
3747      char *stub_name;
3748
3749      stub_name = ppc_stub_name (id_sec, sym_sec, h, rel);
3750      if (stub_name == NULL)
3751	return NULL;
3752
3753      stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3754					 stub_name, FALSE, FALSE);
3755      if (h != NULL)
3756	h->u.stub_cache = stub_entry;
3757
3758      free (stub_name);
3759    }
3760
3761  return stub_entry;
3762}
3763
3764/* Add a new stub entry to the stub hash.  Not all fields of the new
3765   stub entry are initialised.  */
3766
3767static struct ppc_stub_hash_entry *
3768ppc_add_stub (const char *stub_name,
3769	      asection *section,
3770	      struct ppc_link_hash_table *htab)
3771{
3772  asection *link_sec;
3773  asection *stub_sec;
3774  struct ppc_stub_hash_entry *stub_entry;
3775
3776  link_sec = htab->stub_group[section->id].link_sec;
3777  stub_sec = htab->stub_group[section->id].stub_sec;
3778  if (stub_sec == NULL)
3779    {
3780      stub_sec = htab->stub_group[link_sec->id].stub_sec;
3781      if (stub_sec == NULL)
3782	{
3783	  size_t namelen;
3784	  bfd_size_type len;
3785	  char *s_name;
3786
3787	  namelen = strlen (link_sec->name);
3788	  len = namelen + sizeof (STUB_SUFFIX);
3789	  s_name = bfd_alloc (htab->stub_bfd, len);
3790	  if (s_name == NULL)
3791	    return NULL;
3792
3793	  memcpy (s_name, link_sec->name, namelen);
3794	  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3795	  stub_sec = (*htab->add_stub_section) (s_name, link_sec);
3796	  if (stub_sec == NULL)
3797	    return NULL;
3798	  htab->stub_group[link_sec->id].stub_sec = stub_sec;
3799	}
3800      htab->stub_group[section->id].stub_sec = stub_sec;
3801    }
3802
3803  /* Enter this entry into the linker stub hash table.  */
3804  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3805				     TRUE, FALSE);
3806  if (stub_entry == NULL)
3807    {
3808      (*_bfd_error_handler) (_("%B: cannot create stub entry %s"),
3809			     section->owner, stub_name);
3810      return NULL;
3811    }
3812
3813  stub_entry->stub_sec = stub_sec;
3814  stub_entry->stub_offset = 0;
3815  stub_entry->id_sec = link_sec;
3816  return stub_entry;
3817}
3818
3819/* Create sections for linker generated code.  */
3820
3821static bfd_boolean
3822create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3823{
3824  struct ppc_link_hash_table *htab;
3825  flagword flags;
3826
3827  htab = ppc_hash_table (info);
3828
3829  /* Create .sfpr for code to save and restore fp regs.  */
3830  flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3831	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3832  htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3833						   flags);
3834  if (htab->sfpr == NULL
3835      || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
3836    return FALSE;
3837
3838  /* Create .glink for lazy dynamic linking support.  */
3839  htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3840						    flags);
3841  if (htab->glink == NULL
3842      || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
3843    return FALSE;
3844
3845  /* Create branch lookup table for plt_branch stubs.  */
3846  flags = (SEC_ALLOC | SEC_LOAD
3847	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3848  htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3849						   flags);
3850  if (htab->brlt == NULL
3851      || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
3852    return FALSE;
3853
3854  if (!info->shared)
3855    return TRUE;
3856
3857  flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3858	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3859  htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
3860						      ".rela.branch_lt",
3861						      flags);
3862  if (!htab->relbrlt
3863      || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
3864    return FALSE;
3865
3866  return TRUE;
3867}
3868
3869/* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3870   not already done.  */
3871
3872static bfd_boolean
3873create_got_section (bfd *abfd, struct bfd_link_info *info)
3874{
3875  asection *got, *relgot;
3876  flagword flags;
3877  struct ppc_link_hash_table *htab = ppc_hash_table (info);
3878
3879  if (!htab->got)
3880    {
3881      if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
3882	return FALSE;
3883
3884      htab->got = bfd_get_section_by_name (htab->elf.dynobj, ".got");
3885      if (!htab->got)
3886	abort ();
3887    }
3888
3889  flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3890	   | SEC_LINKER_CREATED);
3891
3892  got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3893  if (!got
3894      || !bfd_set_section_alignment (abfd, got, 3))
3895    return FALSE;
3896
3897  relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3898					       flags | SEC_READONLY);
3899  if (!relgot
3900      || ! bfd_set_section_alignment (abfd, relgot, 3))
3901    return FALSE;
3902
3903  ppc64_elf_tdata (abfd)->got = got;
3904  ppc64_elf_tdata (abfd)->relgot = relgot;
3905  return TRUE;
3906}
3907
3908/* Create the dynamic sections, and set up shortcuts.  */
3909
3910static bfd_boolean
3911ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
3912{
3913  struct ppc_link_hash_table *htab;
3914
3915  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
3916    return FALSE;
3917
3918  htab = ppc_hash_table (info);
3919  if (!htab->got)
3920    htab->got = bfd_get_section_by_name (dynobj, ".got");
3921  htab->plt = bfd_get_section_by_name (dynobj, ".plt");
3922  htab->relplt = bfd_get_section_by_name (dynobj, ".rela.plt");
3923  htab->dynbss = bfd_get_section_by_name (dynobj, ".dynbss");
3924  if (!info->shared)
3925    htab->relbss = bfd_get_section_by_name (dynobj, ".rela.bss");
3926
3927  if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
3928      || (!info->shared && !htab->relbss))
3929    abort ();
3930
3931  return TRUE;
3932}
3933
3934/* Merge PLT info on FROM with that on TO.  */
3935
3936static void
3937move_plt_plist (struct ppc_link_hash_entry *from,
3938		struct ppc_link_hash_entry *to)
3939{
3940  if (from->elf.plt.plist != NULL)
3941    {
3942      if (to->elf.plt.plist != NULL)
3943	{
3944	  struct plt_entry **entp;
3945	  struct plt_entry *ent;
3946
3947	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3948	    {
3949	      struct plt_entry *dent;
3950
3951	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3952		if (dent->addend == ent->addend)
3953		  {
3954		    dent->plt.refcount += ent->plt.refcount;
3955		    *entp = ent->next;
3956		    break;
3957		  }
3958	      if (dent == NULL)
3959		entp = &ent->next;
3960	    }
3961	  *entp = to->elf.plt.plist;
3962	}
3963
3964      to->elf.plt.plist = from->elf.plt.plist;
3965      from->elf.plt.plist = NULL;
3966    }
3967}
3968
3969/* Copy the extra info we tack onto an elf_link_hash_entry.  */
3970
3971static void
3972ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3973				struct elf_link_hash_entry *dir,
3974				struct elf_link_hash_entry *ind)
3975{
3976  struct ppc_link_hash_entry *edir, *eind;
3977
3978  edir = (struct ppc_link_hash_entry *) dir;
3979  eind = (struct ppc_link_hash_entry *) ind;
3980
3981  /* Copy over any dynamic relocs we may have on the indirect sym.  */
3982  if (eind->dyn_relocs != NULL)
3983    {
3984      if (edir->dyn_relocs != NULL)
3985	{
3986	  struct ppc_dyn_relocs **pp;
3987	  struct ppc_dyn_relocs *p;
3988
3989	  /* Add reloc counts against the indirect sym to the direct sym
3990	     list.  Merge any entries against the same section.  */
3991	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3992	    {
3993	      struct ppc_dyn_relocs *q;
3994
3995	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
3996		if (q->sec == p->sec)
3997		  {
3998		    q->pc_count += p->pc_count;
3999		    q->count += p->count;
4000		    *pp = p->next;
4001		    break;
4002		  }
4003	      if (q == NULL)
4004		pp = &p->next;
4005	    }
4006	  *pp = edir->dyn_relocs;
4007	}
4008
4009      edir->dyn_relocs = eind->dyn_relocs;
4010      eind->dyn_relocs = NULL;
4011    }
4012
4013  edir->is_func |= eind->is_func;
4014  edir->is_func_descriptor |= eind->is_func_descriptor;
4015  edir->tls_mask |= eind->tls_mask;
4016
4017  /* If called to transfer flags for a weakdef during processing
4018     of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
4019     We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
4020  if (!(ELIMINATE_COPY_RELOCS
4021	&& eind->elf.root.type != bfd_link_hash_indirect
4022	&& edir->elf.dynamic_adjusted))
4023    edir->elf.non_got_ref |= eind->elf.non_got_ref;
4024
4025  edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
4026  edir->elf.ref_regular |= eind->elf.ref_regular;
4027  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
4028  edir->elf.needs_plt |= eind->elf.needs_plt;
4029
4030  /* If we were called to copy over info for a weak sym, that's all.  */
4031  if (eind->elf.root.type != bfd_link_hash_indirect)
4032    return;
4033
4034  /* Copy over got entries that we may have already seen to the
4035     symbol which just became indirect.  */
4036  if (eind->elf.got.glist != NULL)
4037    {
4038      if (edir->elf.got.glist != NULL)
4039	{
4040	  struct got_entry **entp;
4041	  struct got_entry *ent;
4042
4043	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
4044	    {
4045	      struct got_entry *dent;
4046
4047	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
4048		if (dent->addend == ent->addend
4049		    && dent->owner == ent->owner
4050		    && dent->tls_type == ent->tls_type)
4051		  {
4052		    dent->got.refcount += ent->got.refcount;
4053		    *entp = ent->next;
4054		    break;
4055		  }
4056	      if (dent == NULL)
4057		entp = &ent->next;
4058	    }
4059	  *entp = edir->elf.got.glist;
4060	}
4061
4062      edir->elf.got.glist = eind->elf.got.glist;
4063      eind->elf.got.glist = NULL;
4064    }
4065
4066  /* And plt entries.  */
4067  move_plt_plist (eind, edir);
4068
4069  if (eind->elf.dynindx != -1)
4070    {
4071      if (edir->elf.dynindx != -1)
4072	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4073				edir->elf.dynstr_index);
4074      edir->elf.dynindx = eind->elf.dynindx;
4075      edir->elf.dynstr_index = eind->elf.dynstr_index;
4076      eind->elf.dynindx = -1;
4077      eind->elf.dynstr_index = 0;
4078    }
4079}
4080
4081/* Find the function descriptor hash entry from the given function code
4082   hash entry FH.  Link the entries via their OH fields.  */
4083
4084static struct ppc_link_hash_entry *
4085get_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4086{
4087  struct ppc_link_hash_entry *fdh = fh->oh;
4088
4089  if (fdh == NULL)
4090    {
4091      const char *fd_name = fh->elf.root.root.string + 1;
4092
4093      fdh = (struct ppc_link_hash_entry *)
4094	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
4095      if (fdh != NULL)
4096	{
4097	  fdh->is_func_descriptor = 1;
4098	  fdh->oh = fh;
4099	  fh->is_func = 1;
4100	  fh->oh = fdh;
4101	}
4102    }
4103
4104  return fdh;
4105}
4106
4107/* Make a fake function descriptor sym for the code sym FH.  */
4108
4109static struct ppc_link_hash_entry *
4110make_fdh (struct bfd_link_info *info,
4111	  struct ppc_link_hash_entry *fh)
4112{
4113  bfd *abfd;
4114  asymbol *newsym;
4115  struct bfd_link_hash_entry *bh;
4116  struct ppc_link_hash_entry *fdh;
4117
4118  abfd = fh->elf.root.u.undef.abfd;
4119  newsym = bfd_make_empty_symbol (abfd);
4120  newsym->name = fh->elf.root.root.string + 1;
4121  newsym->section = bfd_und_section_ptr;
4122  newsym->value = 0;
4123  newsym->flags = BSF_WEAK;
4124
4125  bh = NULL;
4126  if (!_bfd_generic_link_add_one_symbol (info, abfd, newsym->name,
4127					 newsym->flags, newsym->section,
4128					 newsym->value, NULL, FALSE, FALSE,
4129					 &bh))
4130    return NULL;
4131
4132  fdh = (struct ppc_link_hash_entry *) bh;
4133  fdh->elf.non_elf = 0;
4134  fdh->fake = 1;
4135  fdh->is_func_descriptor = 1;
4136  fdh->oh = fh;
4137  fh->is_func = 1;
4138  fh->oh = fdh;
4139  return fdh;
4140}
4141
4142/* Fix function descriptor symbols defined in .opd sections to be
4143   function type.  */
4144
4145static bfd_boolean
4146ppc64_elf_add_symbol_hook (bfd *ibfd ATTRIBUTE_UNUSED,
4147			   struct bfd_link_info *info ATTRIBUTE_UNUSED,
4148			   Elf_Internal_Sym *isym,
4149			   const char **name ATTRIBUTE_UNUSED,
4150			   flagword *flags ATTRIBUTE_UNUSED,
4151			   asection **sec,
4152			   bfd_vma *value ATTRIBUTE_UNUSED)
4153{
4154  if (*sec != NULL
4155      && strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0)
4156    isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4157
4158  return TRUE;
4159}
4160
4161/* This function makes an old ABI object reference to ".bar" cause the
4162   inclusion of a new ABI object archive that defines "bar".
4163   NAME is a symbol defined in an archive.  Return a symbol in the hash
4164   table that might be satisfied by the archive symbols.  */
4165
4166static struct elf_link_hash_entry *
4167ppc64_elf_archive_symbol_lookup (bfd *abfd,
4168				 struct bfd_link_info *info,
4169				 const char *name)
4170{
4171  struct elf_link_hash_entry *h;
4172  char *dot_name;
4173  size_t len;
4174
4175  h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4176  if (h != NULL
4177      /* Don't return this sym if it is a fake function descriptor
4178	 created by add_symbol_adjust.  */
4179      && !(h->root.type == bfd_link_hash_undefweak
4180	   && ((struct ppc_link_hash_entry *) h)->fake))
4181    return h;
4182
4183  if (name[0] == '.')
4184    return h;
4185
4186  len = strlen (name);
4187  dot_name = bfd_alloc (abfd, len + 2);
4188  if (dot_name == NULL)
4189    return (struct elf_link_hash_entry *) 0 - 1;
4190  dot_name[0] = '.';
4191  memcpy (dot_name + 1, name, len + 1);
4192  h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4193  bfd_release (abfd, dot_name);
4194  return h;
4195}
4196
4197/* This function satisfies all old ABI object references to ".bar" if a
4198   new ABI object defines "bar".  Well, at least, undefined dot symbols
4199   are made weak.  This stops later archive searches from including an
4200   object if we already have a function descriptor definition.  It also
4201   prevents the linker complaining about undefined symbols.
4202   We also check and correct mismatched symbol visibility here.  The
4203   most restrictive visibility of the function descriptor and the
4204   function entry symbol is used.  */
4205
4206static bfd_boolean
4207add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4208{
4209  struct ppc_link_hash_table *htab;
4210  struct ppc_link_hash_entry *fdh;
4211
4212  if (eh->elf.root.type == bfd_link_hash_indirect)
4213    return TRUE;
4214
4215  if (eh->elf.root.type == bfd_link_hash_warning)
4216    eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4217
4218  if (eh->elf.root.root.string[0] != '.')
4219    abort ();
4220
4221  htab = ppc_hash_table (info);
4222  fdh = get_fdh (eh, htab);
4223  if (fdh == NULL
4224      && !info->relocatable
4225      && (eh->elf.root.type == bfd_link_hash_undefined
4226	  || eh->elf.root.type == bfd_link_hash_undefweak)
4227      && eh->elf.ref_regular)
4228    {
4229      /* Make an undefweak function descriptor sym, which is enough to
4230	 pull in an --as-needed shared lib, but won't cause link
4231	 errors.  Archives are handled elsewhere.  */
4232      fdh = make_fdh (info, eh);
4233      if (fdh == NULL)
4234	return FALSE;
4235      else
4236	fdh->elf.ref_regular = 1;
4237    }
4238  else if (fdh != NULL)
4239    {
4240      unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4241      unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4242      if (entry_vis < descr_vis)
4243	fdh->elf.other += entry_vis - descr_vis;
4244      else if (entry_vis > descr_vis)
4245	eh->elf.other += descr_vis - entry_vis;
4246
4247      if ((fdh->elf.root.type == bfd_link_hash_defined
4248	   || fdh->elf.root.type == bfd_link_hash_defweak)
4249	  && eh->elf.root.type == bfd_link_hash_undefined)
4250	{
4251	  eh->elf.root.type = bfd_link_hash_undefweak;
4252	  eh->was_undefined = 1;
4253	  htab->twiddled_syms = 1;
4254	}
4255    }
4256
4257  return TRUE;
4258}
4259
4260/* Process list of dot-symbols we made in link_hash_newfunc.  */
4261
4262static bfd_boolean
4263ppc64_elf_check_directives (bfd *ibfd, struct bfd_link_info *info)
4264{
4265  struct ppc_link_hash_table *htab;
4266  struct ppc_link_hash_entry **p, *eh;
4267
4268  htab = ppc_hash_table (info);
4269  if (!is_ppc64_elf_target (htab->elf.root.creator))
4270    return TRUE;
4271
4272  if (is_ppc64_elf_target (ibfd->xvec))
4273    {
4274      p = &htab->dot_syms;
4275      while ((eh = *p) != NULL)
4276	{
4277	  *p = NULL;
4278	  if (!add_symbol_adjust (eh, info))
4279	    return FALSE;
4280	  p = &eh->u.next_dot_sym;
4281	}
4282    }
4283
4284  /* Clear the list for non-ppc64 input files.  */
4285  p = &htab->dot_syms;
4286  while ((eh = *p) != NULL)
4287    {
4288      *p = NULL;
4289      p = &eh->u.next_dot_sym;
4290    }
4291
4292  /* We need to fix the undefs list for any syms we have twiddled to
4293     undef_weak.  */
4294  if (htab->twiddled_syms)
4295    {
4296      bfd_link_repair_undef_list (&htab->elf.root);
4297      htab->twiddled_syms = 0;
4298    }
4299  return TRUE;
4300}
4301
4302/* Undo hash table changes when an --as-needed input file is determined
4303   not to be needed.  */
4304
4305static bfd_boolean
4306ppc64_elf_as_needed_cleanup (bfd *ibfd ATTRIBUTE_UNUSED,
4307			     struct bfd_link_info *info)
4308{
4309  ppc_hash_table (info)->dot_syms = NULL;
4310  return TRUE;
4311}
4312
4313static bfd_boolean
4314update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4315		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4316{
4317  struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4318  char *local_got_tls_masks;
4319
4320  if (local_got_ents == NULL)
4321    {
4322      bfd_size_type size = symtab_hdr->sh_info;
4323
4324      size *= sizeof (*local_got_ents) + sizeof (*local_got_tls_masks);
4325      local_got_ents = bfd_zalloc (abfd, size);
4326      if (local_got_ents == NULL)
4327	return FALSE;
4328      elf_local_got_ents (abfd) = local_got_ents;
4329    }
4330
4331  if ((tls_type & TLS_EXPLICIT) == 0)
4332    {
4333      struct got_entry *ent;
4334
4335      for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4336	if (ent->addend == r_addend
4337	    && ent->owner == abfd
4338	    && ent->tls_type == tls_type)
4339	  break;
4340      if (ent == NULL)
4341	{
4342	  bfd_size_type amt = sizeof (*ent);
4343	  ent = bfd_alloc (abfd, amt);
4344	  if (ent == NULL)
4345	    return FALSE;
4346	  ent->next = local_got_ents[r_symndx];
4347	  ent->addend = r_addend;
4348	  ent->owner = abfd;
4349	  ent->tls_type = tls_type;
4350	  ent->got.refcount = 0;
4351	  local_got_ents[r_symndx] = ent;
4352	}
4353      ent->got.refcount += 1;
4354    }
4355
4356  local_got_tls_masks = (char *) (local_got_ents + symtab_hdr->sh_info);
4357  local_got_tls_masks[r_symndx] |= tls_type;
4358  return TRUE;
4359}
4360
4361static bfd_boolean
4362update_plt_info (bfd *abfd, struct ppc_link_hash_entry *eh, bfd_vma addend)
4363{
4364  struct plt_entry *ent;
4365
4366  for (ent = eh->elf.plt.plist; ent != NULL; ent = ent->next)
4367    if (ent->addend == addend)
4368      break;
4369  if (ent == NULL)
4370    {
4371      bfd_size_type amt = sizeof (*ent);
4372      ent = bfd_alloc (abfd, amt);
4373      if (ent == NULL)
4374	return FALSE;
4375      ent->next = eh->elf.plt.plist;
4376      ent->addend = addend;
4377      ent->plt.refcount = 0;
4378      eh->elf.plt.plist = ent;
4379    }
4380  ent->plt.refcount += 1;
4381  eh->elf.needs_plt = 1;
4382  if (eh->elf.root.root.string[0] == '.'
4383      && eh->elf.root.root.string[1] != '\0')
4384    eh->is_func = 1;
4385  return TRUE;
4386}
4387
4388/* Look through the relocs for a section during the first phase, and
4389   calculate needed space in the global offset table, procedure
4390   linkage table, and dynamic reloc sections.  */
4391
4392static bfd_boolean
4393ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4394			asection *sec, const Elf_Internal_Rela *relocs)
4395{
4396  struct ppc_link_hash_table *htab;
4397  Elf_Internal_Shdr *symtab_hdr;
4398  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
4399  const Elf_Internal_Rela *rel;
4400  const Elf_Internal_Rela *rel_end;
4401  asection *sreloc;
4402  asection **opd_sym_map;
4403
4404  if (info->relocatable)
4405    return TRUE;
4406
4407  /* Don't do anything special with non-loaded, non-alloced sections.
4408     In particular, any relocs in such sections should not affect GOT
4409     and PLT reference counting (ie. we don't allow them to create GOT
4410     or PLT entries), there's no possibility or desire to optimize TLS
4411     relocs, and there's not much point in propagating relocs to shared
4412     libs that the dynamic linker won't relocate.  */
4413  if ((sec->flags & SEC_ALLOC) == 0)
4414    return TRUE;
4415
4416  htab = ppc_hash_table (info);
4417  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4418
4419  sym_hashes = elf_sym_hashes (abfd);
4420  sym_hashes_end = (sym_hashes
4421		    + symtab_hdr->sh_size / sizeof (Elf64_External_Sym)
4422		    - symtab_hdr->sh_info);
4423
4424  sreloc = NULL;
4425  opd_sym_map = NULL;
4426  if (strcmp (bfd_get_section_name (abfd, sec), ".opd") == 0)
4427    {
4428      /* Garbage collection needs some extra help with .opd sections.
4429	 We don't want to necessarily keep everything referenced by
4430	 relocs in .opd, as that would keep all functions.  Instead,
4431	 if we reference an .opd symbol (a function descriptor), we
4432	 want to keep the function code symbol's section.  This is
4433	 easy for global symbols, but for local syms we need to keep
4434	 information about the associated function section.  Later, if
4435	 edit_opd deletes entries, we'll use this array to adjust
4436	 local syms in .opd.  */
4437      union opd_info {
4438	asection *func_section;
4439	long entry_adjust;
4440      };
4441      bfd_size_type amt;
4442
4443      amt = sec->size * sizeof (union opd_info) / 8;
4444      opd_sym_map = bfd_zalloc (abfd, amt);
4445      if (opd_sym_map == NULL)
4446	return FALSE;
4447      ppc64_elf_section_data (sec)->u.opd_func_sec = opd_sym_map;
4448      BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
4449      ppc64_elf_section_data (sec)->sec_type = sec_opd;
4450    }
4451
4452  if (htab->sfpr == NULL
4453      && !create_linkage_sections (htab->elf.dynobj, info))
4454    return FALSE;
4455
4456  rel_end = relocs + sec->reloc_count;
4457  for (rel = relocs; rel < rel_end; rel++)
4458    {
4459      unsigned long r_symndx;
4460      struct elf_link_hash_entry *h;
4461      enum elf_ppc64_reloc_type r_type;
4462      int tls_type = 0;
4463      struct _ppc64_elf_section_data *ppc64_sec;
4464
4465      r_symndx = ELF64_R_SYM (rel->r_info);
4466      if (r_symndx < symtab_hdr->sh_info)
4467	h = NULL;
4468      else
4469	{
4470	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4471	  while (h->root.type == bfd_link_hash_indirect
4472		 || h->root.type == bfd_link_hash_warning)
4473	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
4474	}
4475
4476      r_type = ELF64_R_TYPE (rel->r_info);
4477      switch (r_type)
4478	{
4479	case R_PPC64_GOT_TLSLD16:
4480	case R_PPC64_GOT_TLSLD16_LO:
4481	case R_PPC64_GOT_TLSLD16_HI:
4482	case R_PPC64_GOT_TLSLD16_HA:
4483	  ppc64_tlsld_got (abfd)->refcount += 1;
4484	  tls_type = TLS_TLS | TLS_LD;
4485	  goto dogottls;
4486
4487	case R_PPC64_GOT_TLSGD16:
4488	case R_PPC64_GOT_TLSGD16_LO:
4489	case R_PPC64_GOT_TLSGD16_HI:
4490	case R_PPC64_GOT_TLSGD16_HA:
4491	  tls_type = TLS_TLS | TLS_GD;
4492	  goto dogottls;
4493
4494	case R_PPC64_GOT_TPREL16_DS:
4495	case R_PPC64_GOT_TPREL16_LO_DS:
4496	case R_PPC64_GOT_TPREL16_HI:
4497	case R_PPC64_GOT_TPREL16_HA:
4498	  if (info->shared)
4499	    info->flags |= DF_STATIC_TLS;
4500	  tls_type = TLS_TLS | TLS_TPREL;
4501	  goto dogottls;
4502
4503	case R_PPC64_GOT_DTPREL16_DS:
4504	case R_PPC64_GOT_DTPREL16_LO_DS:
4505	case R_PPC64_GOT_DTPREL16_HI:
4506	case R_PPC64_GOT_DTPREL16_HA:
4507	  tls_type = TLS_TLS | TLS_DTPREL;
4508	dogottls:
4509	  sec->has_tls_reloc = 1;
4510	  /* Fall thru */
4511
4512	case R_PPC64_GOT16:
4513	case R_PPC64_GOT16_DS:
4514	case R_PPC64_GOT16_HA:
4515	case R_PPC64_GOT16_HI:
4516	case R_PPC64_GOT16_LO:
4517	case R_PPC64_GOT16_LO_DS:
4518	  /* This symbol requires a global offset table entry.  */
4519	  sec->has_toc_reloc = 1;
4520	  if (ppc64_elf_tdata (abfd)->got == NULL
4521	      && !create_got_section (abfd, info))
4522	    return FALSE;
4523
4524	  if (h != NULL)
4525	    {
4526	      struct ppc_link_hash_entry *eh;
4527	      struct got_entry *ent;
4528
4529	      eh = (struct ppc_link_hash_entry *) h;
4530	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4531		if (ent->addend == rel->r_addend
4532		    && ent->owner == abfd
4533		    && ent->tls_type == tls_type)
4534		  break;
4535	      if (ent == NULL)
4536		{
4537		  bfd_size_type amt = sizeof (*ent);
4538		  ent = bfd_alloc (abfd, amt);
4539		  if (ent == NULL)
4540		    return FALSE;
4541		  ent->next = eh->elf.got.glist;
4542		  ent->addend = rel->r_addend;
4543		  ent->owner = abfd;
4544		  ent->tls_type = tls_type;
4545		  ent->got.refcount = 0;
4546		  eh->elf.got.glist = ent;
4547		}
4548	      ent->got.refcount += 1;
4549	      eh->tls_mask |= tls_type;
4550	    }
4551	  else
4552	    /* This is a global offset table entry for a local symbol.  */
4553	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4554					rel->r_addend, tls_type))
4555	      return FALSE;
4556	  break;
4557
4558	case R_PPC64_PLT16_HA:
4559	case R_PPC64_PLT16_HI:
4560	case R_PPC64_PLT16_LO:
4561	case R_PPC64_PLT32:
4562	case R_PPC64_PLT64:
4563	  /* This symbol requires a procedure linkage table entry.  We
4564	     actually build the entry in adjust_dynamic_symbol,
4565	     because this might be a case of linking PIC code without
4566	     linking in any dynamic objects, in which case we don't
4567	     need to generate a procedure linkage table after all.  */
4568	  if (h == NULL)
4569	    {
4570	      /* It does not make sense to have a procedure linkage
4571		 table entry for a local symbol.  */
4572	      bfd_set_error (bfd_error_bad_value);
4573	      return FALSE;
4574	    }
4575	  else
4576	    if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h,
4577				  rel->r_addend))
4578	      return FALSE;
4579	  break;
4580
4581	  /* The following relocations don't need to propagate the
4582	     relocation if linking a shared object since they are
4583	     section relative.  */
4584	case R_PPC64_SECTOFF:
4585	case R_PPC64_SECTOFF_LO:
4586	case R_PPC64_SECTOFF_HI:
4587	case R_PPC64_SECTOFF_HA:
4588	case R_PPC64_SECTOFF_DS:
4589	case R_PPC64_SECTOFF_LO_DS:
4590	case R_PPC64_DTPREL16:
4591	case R_PPC64_DTPREL16_LO:
4592	case R_PPC64_DTPREL16_HI:
4593	case R_PPC64_DTPREL16_HA:
4594	case R_PPC64_DTPREL16_DS:
4595	case R_PPC64_DTPREL16_LO_DS:
4596	case R_PPC64_DTPREL16_HIGHER:
4597	case R_PPC64_DTPREL16_HIGHERA:
4598	case R_PPC64_DTPREL16_HIGHEST:
4599	case R_PPC64_DTPREL16_HIGHESTA:
4600	  break;
4601
4602	  /* Nor do these.  */
4603	case R_PPC64_TOC16:
4604	case R_PPC64_TOC16_LO:
4605	case R_PPC64_TOC16_HI:
4606	case R_PPC64_TOC16_HA:
4607	case R_PPC64_TOC16_DS:
4608	case R_PPC64_TOC16_LO_DS:
4609	  sec->has_toc_reloc = 1;
4610	  break;
4611
4612	  /* This relocation describes the C++ object vtable hierarchy.
4613	     Reconstruct it for later use during GC.  */
4614	case R_PPC64_GNU_VTINHERIT:
4615	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4616	    return FALSE;
4617	  break;
4618
4619	  /* This relocation describes which C++ vtable entries are actually
4620	     used.  Record for later use during GC.  */
4621	case R_PPC64_GNU_VTENTRY:
4622	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4623	    return FALSE;
4624	  break;
4625
4626	case R_PPC64_REL14:
4627	case R_PPC64_REL14_BRTAKEN:
4628	case R_PPC64_REL14_BRNTAKEN:
4629	  {
4630	    asection *dest = NULL;
4631
4632	    /* Heuristic: If jumping outside our section, chances are
4633	       we are going to need a stub.  */
4634	    if (h != NULL)
4635	      {
4636		/* If the sym is weak it may be overridden later, so
4637		   don't assume we know where a weak sym lives.  */
4638		if (h->root.type == bfd_link_hash_defined)
4639		  dest = h->root.u.def.section;
4640	      }
4641	    else
4642	      dest = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
4643						sec, r_symndx);
4644	    if (dest != sec)
4645	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4646	  }
4647	  /* Fall through.  */
4648
4649	case R_PPC64_REL24:
4650	  if (h != NULL)
4651	    {
4652	      /* We may need a .plt entry if the function this reloc
4653		 refers to is in a shared lib.  */
4654	      if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h,
4655				    rel->r_addend))
4656		return FALSE;
4657	      if (h == &htab->tls_get_addr->elf
4658		  || h == &htab->tls_get_addr_fd->elf)
4659		sec->has_tls_reloc = 1;
4660	      else if (htab->tls_get_addr == NULL
4661		       && CONST_STRNEQ (h->root.root.string, ".__tls_get_addr")
4662		       && (h->root.root.string[15] == 0
4663			   || h->root.root.string[15] == '@'))
4664		{
4665		  htab->tls_get_addr = (struct ppc_link_hash_entry *) h;
4666		  sec->has_tls_reloc = 1;
4667		}
4668	      else if (htab->tls_get_addr_fd == NULL
4669		       && CONST_STRNEQ (h->root.root.string, "__tls_get_addr")
4670		       && (h->root.root.string[14] == 0
4671			   || h->root.root.string[14] == '@'))
4672		{
4673		  htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) h;
4674		  sec->has_tls_reloc = 1;
4675		}
4676	    }
4677	  break;
4678
4679	case R_PPC64_TPREL64:
4680	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
4681	  if (info->shared)
4682	    info->flags |= DF_STATIC_TLS;
4683	  goto dotlstoc;
4684
4685	case R_PPC64_DTPMOD64:
4686	  if (rel + 1 < rel_end
4687	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
4688	      && rel[1].r_offset == rel->r_offset + 8)
4689	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
4690	  else
4691	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
4692	  goto dotlstoc;
4693
4694	case R_PPC64_DTPREL64:
4695	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
4696	  if (rel != relocs
4697	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
4698	      && rel[-1].r_offset == rel->r_offset - 8)
4699	    /* This is the second reloc of a dtpmod, dtprel pair.
4700	       Don't mark with TLS_DTPREL.  */
4701	    goto dodyn;
4702
4703	dotlstoc:
4704	  sec->has_tls_reloc = 1;
4705	  if (h != NULL)
4706	    {
4707	      struct ppc_link_hash_entry *eh;
4708	      eh = (struct ppc_link_hash_entry *) h;
4709	      eh->tls_mask |= tls_type;
4710	    }
4711	  else
4712	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4713					rel->r_addend, tls_type))
4714	      return FALSE;
4715
4716	  ppc64_sec = ppc64_elf_section_data (sec);
4717	  if (ppc64_sec->sec_type != sec_toc)
4718	    {
4719	      /* One extra to simplify get_tls_mask.  */
4720	      bfd_size_type amt = sec->size * sizeof (unsigned) / 8 + 1;
4721	      ppc64_sec->u.t_symndx = bfd_zalloc (abfd, amt);
4722	      if (ppc64_sec->u.t_symndx == NULL)
4723		return FALSE;
4724	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
4725	      ppc64_sec->sec_type = sec_toc;
4726	    }
4727	  BFD_ASSERT (rel->r_offset % 8 == 0);
4728	  ppc64_sec->u.t_symndx[rel->r_offset / 8] = r_symndx;
4729
4730	  /* Mark the second slot of a GD or LD entry.
4731	     -1 to indicate GD and -2 to indicate LD.  */
4732	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
4733	    ppc64_sec->u.t_symndx[rel->r_offset / 8 + 1] = -1;
4734	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
4735	    ppc64_sec->u.t_symndx[rel->r_offset / 8 + 1] = -2;
4736	  goto dodyn;
4737
4738	case R_PPC64_TPREL16:
4739	case R_PPC64_TPREL16_LO:
4740	case R_PPC64_TPREL16_HI:
4741	case R_PPC64_TPREL16_HA:
4742	case R_PPC64_TPREL16_DS:
4743	case R_PPC64_TPREL16_LO_DS:
4744	case R_PPC64_TPREL16_HIGHER:
4745	case R_PPC64_TPREL16_HIGHERA:
4746	case R_PPC64_TPREL16_HIGHEST:
4747	case R_PPC64_TPREL16_HIGHESTA:
4748	  if (info->shared)
4749	    {
4750	      info->flags |= DF_STATIC_TLS;
4751	      goto dodyn;
4752	    }
4753	  break;
4754
4755	case R_PPC64_ADDR64:
4756	  if (opd_sym_map != NULL
4757	      && rel + 1 < rel_end
4758	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
4759	    {
4760	      if (h != NULL)
4761		{
4762		  if (h->root.root.string[0] == '.'
4763		      && h->root.root.string[1] != 0
4764		      && get_fdh ((struct ppc_link_hash_entry *) h, htab))
4765		    ;
4766		  else
4767		    ((struct ppc_link_hash_entry *) h)->is_func = 1;
4768		}
4769	      else
4770		{
4771		  asection *s;
4772
4773		  s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, sec,
4774						 r_symndx);
4775		  if (s == NULL)
4776		    return FALSE;
4777		  else if (s != sec)
4778		    opd_sym_map[rel->r_offset / 8] = s;
4779		}
4780	    }
4781	  /* Fall through.  */
4782
4783	case R_PPC64_REL30:
4784	case R_PPC64_REL32:
4785	case R_PPC64_REL64:
4786	case R_PPC64_ADDR14:
4787	case R_PPC64_ADDR14_BRNTAKEN:
4788	case R_PPC64_ADDR14_BRTAKEN:
4789	case R_PPC64_ADDR16:
4790	case R_PPC64_ADDR16_DS:
4791	case R_PPC64_ADDR16_HA:
4792	case R_PPC64_ADDR16_HI:
4793	case R_PPC64_ADDR16_HIGHER:
4794	case R_PPC64_ADDR16_HIGHERA:
4795	case R_PPC64_ADDR16_HIGHEST:
4796	case R_PPC64_ADDR16_HIGHESTA:
4797	case R_PPC64_ADDR16_LO:
4798	case R_PPC64_ADDR16_LO_DS:
4799	case R_PPC64_ADDR24:
4800	case R_PPC64_ADDR32:
4801	case R_PPC64_UADDR16:
4802	case R_PPC64_UADDR32:
4803	case R_PPC64_UADDR64:
4804	case R_PPC64_TOC:
4805	  if (h != NULL && !info->shared)
4806	    /* We may need a copy reloc.  */
4807	    h->non_got_ref = 1;
4808
4809	  /* Don't propagate .opd relocs.  */
4810	  if (NO_OPD_RELOCS && opd_sym_map != NULL)
4811	    break;
4812
4813	  /* If we are creating a shared library, and this is a reloc
4814	     against a global symbol, or a non PC relative reloc
4815	     against a local symbol, then we need to copy the reloc
4816	     into the shared library.  However, if we are linking with
4817	     -Bsymbolic, we do not need to copy a reloc against a
4818	     global symbol which is defined in an object we are
4819	     including in the link (i.e., DEF_REGULAR is set).  At
4820	     this point we have not seen all the input files, so it is
4821	     possible that DEF_REGULAR is not set now but will be set
4822	     later (it is never cleared).  In case of a weak definition,
4823	     DEF_REGULAR may be cleared later by a strong definition in
4824	     a shared library.  We account for that possibility below by
4825	     storing information in the dyn_relocs field of the hash
4826	     table entry.  A similar situation occurs when creating
4827	     shared libraries and symbol visibility changes render the
4828	     symbol local.
4829
4830	     If on the other hand, we are creating an executable, we
4831	     may need to keep relocations for symbols satisfied by a
4832	     dynamic library if we manage to avoid copy relocs for the
4833	     symbol.  */
4834	dodyn:
4835	  if ((info->shared
4836	       && (MUST_BE_DYN_RELOC (r_type)
4837		   || (h != NULL
4838		       && (! info->symbolic
4839			   || h->root.type == bfd_link_hash_defweak
4840			   || !h->def_regular))))
4841	      || (ELIMINATE_COPY_RELOCS
4842		  && !info->shared
4843		  && h != NULL
4844		  && (h->root.type == bfd_link_hash_defweak
4845		      || !h->def_regular)))
4846	    {
4847	      struct ppc_dyn_relocs *p;
4848	      struct ppc_dyn_relocs **head;
4849
4850	      /* We must copy these reloc types into the output file.
4851		 Create a reloc section in dynobj and make room for
4852		 this reloc.  */
4853	      if (sreloc == NULL)
4854		{
4855		  const char *name;
4856		  bfd *dynobj;
4857
4858		  name = (bfd_elf_string_from_elf_section
4859			  (abfd,
4860			   elf_elfheader (abfd)->e_shstrndx,
4861			   elf_section_data (sec)->rel_hdr.sh_name));
4862		  if (name == NULL)
4863		    return FALSE;
4864
4865		  if (! CONST_STRNEQ (name, ".rela")
4866		      || strcmp (bfd_get_section_name (abfd, sec),
4867				 name + 5) != 0)
4868		    {
4869		      (*_bfd_error_handler)
4870			(_("%B: bad relocation section name `%s\'"),
4871			 abfd, name);
4872		      bfd_set_error (bfd_error_bad_value);
4873		    }
4874
4875		  dynobj = htab->elf.dynobj;
4876		  sreloc = bfd_get_section_by_name (dynobj, name);
4877		  if (sreloc == NULL)
4878		    {
4879		      flagword flags;
4880
4881		      flags = (SEC_HAS_CONTENTS | SEC_READONLY
4882			       | SEC_IN_MEMORY | SEC_LINKER_CREATED
4883			       | SEC_ALLOC | SEC_LOAD);
4884		      sreloc = bfd_make_section_with_flags (dynobj,
4885							    name,
4886							    flags);
4887		      if (sreloc == NULL
4888			  || ! bfd_set_section_alignment (dynobj, sreloc, 3))
4889			return FALSE;
4890		    }
4891		  elf_section_data (sec)->sreloc = sreloc;
4892		}
4893
4894	      /* If this is a global symbol, we count the number of
4895		 relocations we need for this symbol.  */
4896	      if (h != NULL)
4897		{
4898		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
4899		}
4900	      else
4901		{
4902		  /* Track dynamic relocs needed for local syms too.
4903		     We really need local syms available to do this
4904		     easily.  Oh well.  */
4905
4906		  asection *s;
4907		  void *vpp;
4908
4909		  s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
4910						 sec, r_symndx);
4911		  if (s == NULL)
4912		    return FALSE;
4913
4914		  vpp = &elf_section_data (s)->local_dynrel;
4915		  head = (struct ppc_dyn_relocs **) vpp;
4916		}
4917
4918	      p = *head;
4919	      if (p == NULL || p->sec != sec)
4920		{
4921		  p = bfd_alloc (htab->elf.dynobj, sizeof *p);
4922		  if (p == NULL)
4923		    return FALSE;
4924		  p->next = *head;
4925		  *head = p;
4926		  p->sec = sec;
4927		  p->count = 0;
4928		  p->pc_count = 0;
4929		}
4930
4931	      p->count += 1;
4932	      if (!MUST_BE_DYN_RELOC (r_type))
4933		p->pc_count += 1;
4934	    }
4935	  break;
4936
4937	default:
4938	  break;
4939	}
4940    }
4941
4942  return TRUE;
4943}
4944
4945/* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
4946   of the code entry point, and its section.  */
4947
4948static bfd_vma
4949opd_entry_value (asection *opd_sec,
4950		 bfd_vma offset,
4951		 asection **code_sec,
4952		 bfd_vma *code_off)
4953{
4954  bfd *opd_bfd = opd_sec->owner;
4955  Elf_Internal_Rela *relocs;
4956  Elf_Internal_Rela *lo, *hi, *look;
4957  bfd_vma val;
4958
4959  /* No relocs implies we are linking a --just-symbols object.  */
4960  if (opd_sec->reloc_count == 0)
4961    {
4962      bfd_vma val;
4963
4964      if (!bfd_get_section_contents (opd_bfd, opd_sec, &val, offset, 8))
4965	return (bfd_vma) -1;
4966
4967      if (code_sec != NULL)
4968	{
4969	  asection *sec, *likely = NULL;
4970	  for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
4971	    if (sec->vma <= val
4972		&& (sec->flags & SEC_LOAD) != 0
4973		&& (sec->flags & SEC_ALLOC) != 0)
4974	      likely = sec;
4975	  if (likely != NULL)
4976	    {
4977	      *code_sec = likely;
4978	      if (code_off != NULL)
4979		*code_off = val - likely->vma;
4980	    }
4981	}
4982      return val;
4983    }
4984
4985  relocs = ppc64_elf_tdata (opd_bfd)->opd_relocs;
4986  if (relocs == NULL)
4987    relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
4988
4989  /* Go find the opd reloc at the sym address.  */
4990  lo = relocs;
4991  BFD_ASSERT (lo != NULL);
4992  hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
4993  val = (bfd_vma) -1;
4994  while (lo < hi)
4995    {
4996      look = lo + (hi - lo) / 2;
4997      if (look->r_offset < offset)
4998	lo = look + 1;
4999      else if (look->r_offset > offset)
5000	hi = look;
5001      else
5002	{
5003	  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (opd_bfd)->symtab_hdr;
5004	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5005	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5006	    {
5007	      unsigned long symndx = ELF64_R_SYM (look->r_info);
5008	      asection *sec;
5009
5010	      if (symndx < symtab_hdr->sh_info)
5011		{
5012		  Elf_Internal_Sym *sym;
5013
5014		  sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5015		  if (sym == NULL)
5016		    {
5017		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5018						  symtab_hdr->sh_info,
5019						  0, NULL, NULL, NULL);
5020		      if (sym == NULL)
5021			break;
5022		      symtab_hdr->contents = (bfd_byte *) sym;
5023		    }
5024
5025		  sym += symndx;
5026		  val = sym->st_value;
5027		  sec = NULL;
5028		  if ((sym->st_shndx != SHN_UNDEF
5029		       && sym->st_shndx < SHN_LORESERVE)
5030		      || sym->st_shndx > SHN_HIRESERVE)
5031		    sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5032		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5033		}
5034	      else
5035		{
5036		  struct elf_link_hash_entry **sym_hashes;
5037		  struct elf_link_hash_entry *rh;
5038
5039		  sym_hashes = elf_sym_hashes (opd_bfd);
5040		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
5041		  while (rh->root.type == bfd_link_hash_indirect
5042			 || rh->root.type == bfd_link_hash_warning)
5043		    rh = ((struct elf_link_hash_entry *) rh->root.u.i.link);
5044		  BFD_ASSERT (rh->root.type == bfd_link_hash_defined
5045			      || rh->root.type == bfd_link_hash_defweak);
5046		  val = rh->root.u.def.value;
5047		  sec = rh->root.u.def.section;
5048		}
5049	      val += look->r_addend;
5050	      if (code_off != NULL)
5051		*code_off = val;
5052	      if (code_sec != NULL)
5053		*code_sec = sec;
5054	      if (sec != NULL && sec->output_section != NULL)
5055		val += sec->output_section->vma + sec->output_offset;
5056	    }
5057	  break;
5058	}
5059    }
5060
5061  return val;
5062}
5063
5064/* Mark sections containing dynamically referenced symbols.  When
5065   building shared libraries, we must assume that any visible symbol is
5066   referenced.  */
5067
5068static bfd_boolean
5069ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5070{
5071  struct bfd_link_info *info = (struct bfd_link_info *) inf;
5072  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
5073
5074  if (eh->elf.root.type == bfd_link_hash_warning)
5075    eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
5076
5077  /* Dynamic linking info is on the func descriptor sym.  */
5078  if (eh->oh != NULL
5079      && eh->oh->is_func_descriptor
5080      && (eh->oh->elf.root.type == bfd_link_hash_defined
5081	  || eh->oh->elf.root.type == bfd_link_hash_defweak))
5082    eh = eh->oh;
5083
5084  if ((eh->elf.root.type == bfd_link_hash_defined
5085       || eh->elf.root.type == bfd_link_hash_defweak)
5086      && (eh->elf.ref_dynamic
5087	  || (!info->executable
5088	      && eh->elf.def_regular
5089	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5090	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN)))
5091    {
5092      asection *code_sec;
5093
5094      eh->elf.root.u.def.section->flags |= SEC_KEEP;
5095
5096      /* Function descriptor syms cause the associated
5097	 function code sym section to be marked.  */
5098      if (eh->is_func_descriptor
5099	  && (eh->oh->elf.root.type == bfd_link_hash_defined
5100	      || eh->oh->elf.root.type == bfd_link_hash_defweak))
5101	eh->oh->elf.root.u.def.section->flags |= SEC_KEEP;
5102      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5103	       && opd_entry_value (eh->elf.root.u.def.section,
5104				   eh->elf.root.u.def.value,
5105				   &code_sec, NULL) != (bfd_vma) -1)
5106	code_sec->flags |= SEC_KEEP;
5107    }
5108
5109  return TRUE;
5110}
5111
5112/* Return the section that should be marked against GC for a given
5113   relocation.  */
5114
5115static asection *
5116ppc64_elf_gc_mark_hook (asection *sec,
5117			struct bfd_link_info *info,
5118			Elf_Internal_Rela *rel,
5119			struct elf_link_hash_entry *h,
5120			Elf_Internal_Sym *sym)
5121{
5122  asection *rsec;
5123
5124  /* First mark all our entry sym sections.  */
5125  if (info->gc_sym_list != NULL)
5126    {
5127      struct ppc_link_hash_table *htab = ppc_hash_table (info);
5128      struct bfd_sym_chain *sym = info->gc_sym_list;
5129
5130      info->gc_sym_list = NULL;
5131      for (; sym != NULL; sym = sym->next)
5132	{
5133	  struct ppc_link_hash_entry *eh;
5134
5135	  eh = (struct ppc_link_hash_entry *)
5136	    elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, FALSE);
5137	  if (eh == NULL)
5138	    continue;
5139	  if (eh->elf.root.type != bfd_link_hash_defined
5140	      && eh->elf.root.type != bfd_link_hash_defweak)
5141	    continue;
5142
5143	  if (eh->is_func_descriptor
5144	      && (eh->oh->elf.root.type == bfd_link_hash_defined
5145		  || eh->oh->elf.root.type == bfd_link_hash_defweak))
5146	    rsec = eh->oh->elf.root.u.def.section;
5147	  else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5148		   && opd_entry_value (eh->elf.root.u.def.section,
5149				       eh->elf.root.u.def.value,
5150				       &rsec, NULL) != (bfd_vma) -1)
5151	    ;
5152	  else
5153	    continue;
5154
5155	  if (!rsec->gc_mark)
5156	    _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook);
5157
5158	  rsec = eh->elf.root.u.def.section;
5159	  if (!rsec->gc_mark)
5160	    _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook);
5161	}
5162    }
5163
5164  /* Syms return NULL if we're marking .opd, so we avoid marking all
5165     function sections, as all functions are referenced in .opd.  */
5166  rsec = NULL;
5167  if (get_opd_info (sec) != NULL)
5168    return rsec;
5169
5170  if (h != NULL)
5171    {
5172      enum elf_ppc64_reloc_type r_type;
5173      struct ppc_link_hash_entry *eh;
5174
5175      r_type = ELF64_R_TYPE (rel->r_info);
5176      switch (r_type)
5177	{
5178	case R_PPC64_GNU_VTINHERIT:
5179	case R_PPC64_GNU_VTENTRY:
5180	  break;
5181
5182	default:
5183	  switch (h->root.type)
5184	    {
5185	    case bfd_link_hash_defined:
5186	    case bfd_link_hash_defweak:
5187	      eh = (struct ppc_link_hash_entry *) h;
5188	      if (eh->oh != NULL
5189		  && eh->oh->is_func_descriptor
5190		  && (eh->oh->elf.root.type == bfd_link_hash_defined
5191		      || eh->oh->elf.root.type == bfd_link_hash_defweak))
5192		eh = eh->oh;
5193
5194	      /* Function descriptor syms cause the associated
5195		 function code sym section to be marked.  */
5196	      if (eh->is_func_descriptor
5197		  && (eh->oh->elf.root.type == bfd_link_hash_defined
5198		      || eh->oh->elf.root.type == bfd_link_hash_defweak))
5199		{
5200		  /* They also mark their opd section.  */
5201		  if (!eh->elf.root.u.def.section->gc_mark)
5202		    _bfd_elf_gc_mark (info, eh->elf.root.u.def.section,
5203				      ppc64_elf_gc_mark_hook);
5204
5205		  rsec = eh->oh->elf.root.u.def.section;
5206		}
5207	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5208		       && opd_entry_value (eh->elf.root.u.def.section,
5209					   eh->elf.root.u.def.value,
5210					   &rsec, NULL) != (bfd_vma) -1)
5211		{
5212		  if (!eh->elf.root.u.def.section->gc_mark)
5213		    _bfd_elf_gc_mark (info, eh->elf.root.u.def.section,
5214				      ppc64_elf_gc_mark_hook);
5215		}
5216	      else
5217		rsec = h->root.u.def.section;
5218	      break;
5219
5220	    case bfd_link_hash_common:
5221	      rsec = h->root.u.c.p->section;
5222	      break;
5223
5224	    default:
5225	      break;
5226	    }
5227	}
5228    }
5229  else
5230    {
5231      asection **opd_sym_section;
5232
5233      rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5234      opd_sym_section = get_opd_info (rsec);
5235      if (opd_sym_section != NULL)
5236	{
5237	  if (!rsec->gc_mark)
5238	    _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook);
5239
5240	  rsec = opd_sym_section[(sym->st_value + rel->r_addend) / 8];
5241	}
5242    }
5243
5244  return rsec;
5245}
5246
5247/* Update the .got, .plt. and dynamic reloc reference counts for the
5248   section being removed.  */
5249
5250static bfd_boolean
5251ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
5252			 asection *sec, const Elf_Internal_Rela *relocs)
5253{
5254  struct ppc_link_hash_table *htab;
5255  Elf_Internal_Shdr *symtab_hdr;
5256  struct elf_link_hash_entry **sym_hashes;
5257  struct got_entry **local_got_ents;
5258  const Elf_Internal_Rela *rel, *relend;
5259
5260  if ((sec->flags & SEC_ALLOC) == 0)
5261    return TRUE;
5262
5263  elf_section_data (sec)->local_dynrel = NULL;
5264
5265  htab = ppc_hash_table (info);
5266  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5267  sym_hashes = elf_sym_hashes (abfd);
5268  local_got_ents = elf_local_got_ents (abfd);
5269
5270  relend = relocs + sec->reloc_count;
5271  for (rel = relocs; rel < relend; rel++)
5272    {
5273      unsigned long r_symndx;
5274      enum elf_ppc64_reloc_type r_type;
5275      struct elf_link_hash_entry *h = NULL;
5276      char tls_type = 0;
5277
5278      r_symndx = ELF64_R_SYM (rel->r_info);
5279      r_type = ELF64_R_TYPE (rel->r_info);
5280      if (r_symndx >= symtab_hdr->sh_info)
5281	{
5282	  struct ppc_link_hash_entry *eh;
5283	  struct ppc_dyn_relocs **pp;
5284	  struct ppc_dyn_relocs *p;
5285
5286	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5287	  while (h->root.type == bfd_link_hash_indirect
5288		 || h->root.type == bfd_link_hash_warning)
5289	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5290	  eh = (struct ppc_link_hash_entry *) h;
5291
5292	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
5293	    if (p->sec == sec)
5294	      {
5295		/* Everything must go for SEC.  */
5296		*pp = p->next;
5297		break;
5298	      }
5299	}
5300
5301      switch (r_type)
5302	{
5303	case R_PPC64_GOT_TLSLD16:
5304	case R_PPC64_GOT_TLSLD16_LO:
5305	case R_PPC64_GOT_TLSLD16_HI:
5306	case R_PPC64_GOT_TLSLD16_HA:
5307	  ppc64_tlsld_got (abfd)->refcount -= 1;
5308	  tls_type = TLS_TLS | TLS_LD;
5309	  goto dogot;
5310
5311	case R_PPC64_GOT_TLSGD16:
5312	case R_PPC64_GOT_TLSGD16_LO:
5313	case R_PPC64_GOT_TLSGD16_HI:
5314	case R_PPC64_GOT_TLSGD16_HA:
5315	  tls_type = TLS_TLS | TLS_GD;
5316	  goto dogot;
5317
5318	case R_PPC64_GOT_TPREL16_DS:
5319	case R_PPC64_GOT_TPREL16_LO_DS:
5320	case R_PPC64_GOT_TPREL16_HI:
5321	case R_PPC64_GOT_TPREL16_HA:
5322	  tls_type = TLS_TLS | TLS_TPREL;
5323	  goto dogot;
5324
5325	case R_PPC64_GOT_DTPREL16_DS:
5326	case R_PPC64_GOT_DTPREL16_LO_DS:
5327	case R_PPC64_GOT_DTPREL16_HI:
5328	case R_PPC64_GOT_DTPREL16_HA:
5329	  tls_type = TLS_TLS | TLS_DTPREL;
5330	  goto dogot;
5331
5332	case R_PPC64_GOT16:
5333	case R_PPC64_GOT16_DS:
5334	case R_PPC64_GOT16_HA:
5335	case R_PPC64_GOT16_HI:
5336	case R_PPC64_GOT16_LO:
5337	case R_PPC64_GOT16_LO_DS:
5338	dogot:
5339	  {
5340	    struct got_entry *ent;
5341
5342	    if (h != NULL)
5343	      ent = h->got.glist;
5344	    else
5345	      ent = local_got_ents[r_symndx];
5346
5347	    for (; ent != NULL; ent = ent->next)
5348	      if (ent->addend == rel->r_addend
5349		  && ent->owner == abfd
5350		  && ent->tls_type == tls_type)
5351		break;
5352	    if (ent == NULL)
5353	      abort ();
5354	    if (ent->got.refcount > 0)
5355	      ent->got.refcount -= 1;
5356	  }
5357	  break;
5358
5359	case R_PPC64_PLT16_HA:
5360	case R_PPC64_PLT16_HI:
5361	case R_PPC64_PLT16_LO:
5362	case R_PPC64_PLT32:
5363	case R_PPC64_PLT64:
5364	case R_PPC64_REL14:
5365	case R_PPC64_REL14_BRNTAKEN:
5366	case R_PPC64_REL14_BRTAKEN:
5367	case R_PPC64_REL24:
5368	  if (h != NULL)
5369	    {
5370	      struct plt_entry *ent;
5371
5372	      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
5373		if (ent->addend == rel->r_addend)
5374		  break;
5375	      if (ent == NULL)
5376		abort ();
5377	      if (ent->plt.refcount > 0)
5378		ent->plt.refcount -= 1;
5379	    }
5380	  break;
5381
5382	default:
5383	  break;
5384	}
5385    }
5386  return TRUE;
5387}
5388
5389/* The maximum size of .sfpr.  */
5390#define SFPR_MAX (218*4)
5391
5392struct sfpr_def_parms
5393{
5394  const char name[12];
5395  unsigned char lo, hi;
5396  bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
5397  bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
5398};
5399
5400/* Auto-generate _save*, _rest* functions in .sfpr.  */
5401
5402static unsigned int
5403sfpr_define (struct bfd_link_info *info, const struct sfpr_def_parms *parm)
5404{
5405  struct ppc_link_hash_table *htab = ppc_hash_table (info);
5406  unsigned int i;
5407  size_t len = strlen (parm->name);
5408  bfd_boolean writing = FALSE;
5409  char sym[16];
5410
5411  memcpy (sym, parm->name, len);
5412  sym[len + 2] = 0;
5413
5414  for (i = parm->lo; i <= parm->hi; i++)
5415    {
5416      struct elf_link_hash_entry *h;
5417
5418      sym[len + 0] = i / 10 + '0';
5419      sym[len + 1] = i % 10 + '0';
5420      h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
5421      if (h != NULL
5422	  && !h->def_regular)
5423	{
5424	  h->root.type = bfd_link_hash_defined;
5425	  h->root.u.def.section = htab->sfpr;
5426	  h->root.u.def.value = htab->sfpr->size;
5427	  h->type = STT_FUNC;
5428	  h->def_regular = 1;
5429	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
5430	  writing = TRUE;
5431	  if (htab->sfpr->contents == NULL)
5432	    {
5433	      htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5434	      if (htab->sfpr->contents == NULL)
5435		return FALSE;
5436	    }
5437	}
5438      if (writing)
5439	{
5440	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5441	  if (i != parm->hi)
5442	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5443	  else
5444	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5445	  htab->sfpr->size = p - htab->sfpr->contents;
5446	}
5447    }
5448
5449  return TRUE;
5450}
5451
5452static bfd_byte *
5453savegpr0 (bfd *abfd, bfd_byte *p, int r)
5454{
5455  bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5456  return p + 4;
5457}
5458
5459static bfd_byte *
5460savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5461{
5462  p = savegpr0 (abfd, p, r);
5463  bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
5464  p = p + 4;
5465  bfd_put_32 (abfd, BLR, p);
5466  return p + 4;
5467}
5468
5469static bfd_byte *
5470restgpr0 (bfd *abfd, bfd_byte *p, int r)
5471{
5472  bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5473  return p + 4;
5474}
5475
5476static bfd_byte *
5477restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5478{
5479  bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
5480  p = p + 4;
5481  p = restgpr0 (abfd, p, r);
5482  bfd_put_32 (abfd, MTLR_R0, p);
5483  p = p + 4;
5484  if (r == 29)
5485    {
5486      p = restgpr0 (abfd, p, 30);
5487      p = restgpr0 (abfd, p, 31);
5488    }
5489  bfd_put_32 (abfd, BLR, p);
5490  return p + 4;
5491}
5492
5493static bfd_byte *
5494savegpr1 (bfd *abfd, bfd_byte *p, int r)
5495{
5496  bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5497  return p + 4;
5498}
5499
5500static bfd_byte *
5501savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
5502{
5503  p = savegpr1 (abfd, p, r);
5504  bfd_put_32 (abfd, BLR, p);
5505  return p + 4;
5506}
5507
5508static bfd_byte *
5509restgpr1 (bfd *abfd, bfd_byte *p, int r)
5510{
5511  bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5512  return p + 4;
5513}
5514
5515static bfd_byte *
5516restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
5517{
5518  p = restgpr1 (abfd, p, r);
5519  bfd_put_32 (abfd, BLR, p);
5520  return p + 4;
5521}
5522
5523static bfd_byte *
5524savefpr (bfd *abfd, bfd_byte *p, int r)
5525{
5526  bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5527  return p + 4;
5528}
5529
5530static bfd_byte *
5531savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
5532{
5533  p = savefpr (abfd, p, r);
5534  bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
5535  p = p + 4;
5536  bfd_put_32 (abfd, BLR, p);
5537  return p + 4;
5538}
5539
5540static bfd_byte *
5541restfpr (bfd *abfd, bfd_byte *p, int r)
5542{
5543  bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5544  return p + 4;
5545}
5546
5547static bfd_byte *
5548restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
5549{
5550  bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
5551  p = p + 4;
5552  p = restfpr (abfd, p, r);
5553  bfd_put_32 (abfd, MTLR_R0, p);
5554  p = p + 4;
5555  if (r == 29)
5556    {
5557      p = restfpr (abfd, p, 30);
5558      p = restfpr (abfd, p, 31);
5559    }
5560  bfd_put_32 (abfd, BLR, p);
5561  return p + 4;
5562}
5563
5564static bfd_byte *
5565savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
5566{
5567  p = savefpr (abfd, p, r);
5568  bfd_put_32 (abfd, BLR, p);
5569  return p + 4;
5570}
5571
5572static bfd_byte *
5573restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
5574{
5575  p = restfpr (abfd, p, r);
5576  bfd_put_32 (abfd, BLR, p);
5577  return p + 4;
5578}
5579
5580static bfd_byte *
5581savevr (bfd *abfd, bfd_byte *p, int r)
5582{
5583  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
5584  p = p + 4;
5585  bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
5586  return p + 4;
5587}
5588
5589static bfd_byte *
5590savevr_tail (bfd *abfd, bfd_byte *p, int r)
5591{
5592  p = savevr (abfd, p, r);
5593  bfd_put_32 (abfd, BLR, p);
5594  return p + 4;
5595}
5596
5597static bfd_byte *
5598restvr (bfd *abfd, bfd_byte *p, int r)
5599{
5600  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
5601  p = p + 4;
5602  bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
5603  return p + 4;
5604}
5605
5606static bfd_byte *
5607restvr_tail (bfd *abfd, bfd_byte *p, int r)
5608{
5609  p = restvr (abfd, p, r);
5610  bfd_put_32 (abfd, BLR, p);
5611  return p + 4;
5612}
5613
5614/* Called via elf_link_hash_traverse to transfer dynamic linking
5615   information on function code symbol entries to their corresponding
5616   function descriptor symbol entries.  */
5617
5618static bfd_boolean
5619func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
5620{
5621  struct bfd_link_info *info;
5622  struct ppc_link_hash_table *htab;
5623  struct plt_entry *ent;
5624  struct ppc_link_hash_entry *fh;
5625  struct ppc_link_hash_entry *fdh;
5626  bfd_boolean force_local;
5627
5628  fh = (struct ppc_link_hash_entry *) h;
5629  if (fh->elf.root.type == bfd_link_hash_indirect)
5630    return TRUE;
5631
5632  if (fh->elf.root.type == bfd_link_hash_warning)
5633    fh = (struct ppc_link_hash_entry *) fh->elf.root.u.i.link;
5634
5635  info = inf;
5636  htab = ppc_hash_table (info);
5637
5638  /* Resolve undefined references to dot-symbols as the value
5639     in the function descriptor, if we have one in a regular object.
5640     This is to satisfy cases like ".quad .foo".  Calls to functions
5641     in dynamic objects are handled elsewhere.  */
5642  if (fh->elf.root.type == bfd_link_hash_undefweak
5643      && fh->was_undefined
5644      && (fh->oh->elf.root.type == bfd_link_hash_defined
5645	  || fh->oh->elf.root.type == bfd_link_hash_defweak)
5646      && get_opd_info (fh->oh->elf.root.u.def.section) != NULL
5647      && opd_entry_value (fh->oh->elf.root.u.def.section,
5648			  fh->oh->elf.root.u.def.value,
5649			  &fh->elf.root.u.def.section,
5650			  &fh->elf.root.u.def.value) != (bfd_vma) -1)
5651    {
5652      fh->elf.root.type = fh->oh->elf.root.type;
5653      fh->elf.forced_local = 1;
5654    }
5655
5656  /* If this is a function code symbol, transfer dynamic linking
5657     information to the function descriptor symbol.  */
5658  if (!fh->is_func)
5659    return TRUE;
5660
5661  for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
5662    if (ent->plt.refcount > 0)
5663      break;
5664  if (ent == NULL
5665      || fh->elf.root.root.string[0] != '.'
5666      || fh->elf.root.root.string[1] == '\0')
5667    return TRUE;
5668
5669  /* Find the corresponding function descriptor symbol.  Create it
5670     as undefined if necessary.  */
5671
5672  fdh = get_fdh (fh, htab);
5673  if (fdh != NULL)
5674    while (fdh->elf.root.type == bfd_link_hash_indirect
5675	   || fdh->elf.root.type == bfd_link_hash_warning)
5676      fdh = (struct ppc_link_hash_entry *) fdh->elf.root.u.i.link;
5677
5678  if (fdh == NULL
5679      && info->shared
5680      && (fh->elf.root.type == bfd_link_hash_undefined
5681	  || fh->elf.root.type == bfd_link_hash_undefweak))
5682    {
5683      fdh = make_fdh (info, fh);
5684      if (fdh == NULL)
5685	return FALSE;
5686    }
5687
5688  /* Fake function descriptors are made undefweak.  If the function
5689     code symbol is strong undefined, make the fake sym the same.
5690     If the function code symbol is defined, then force the fake
5691     descriptor local;  We can't support overriding of symbols in a
5692     shared library on a fake descriptor.  */
5693
5694  if (fdh != NULL
5695      && fdh->fake
5696      && fdh->elf.root.type == bfd_link_hash_undefweak)
5697    {
5698      if (fh->elf.root.type == bfd_link_hash_undefined)
5699	{
5700	  fdh->elf.root.type = bfd_link_hash_undefined;
5701	  bfd_link_add_undef (&htab->elf.root, &fdh->elf.root);
5702	}
5703      else if (fh->elf.root.type == bfd_link_hash_defined
5704	       || fh->elf.root.type == bfd_link_hash_defweak)
5705	{
5706	  _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
5707	}
5708    }
5709
5710  if (fdh != NULL
5711      && !fdh->elf.forced_local
5712      && (info->shared
5713	  || fdh->elf.def_dynamic
5714	  || fdh->elf.ref_dynamic
5715	  || (fdh->elf.root.type == bfd_link_hash_undefweak
5716	      && ELF_ST_VISIBILITY (fdh->elf.other) == STV_DEFAULT)))
5717    {
5718      if (fdh->elf.dynindx == -1)
5719	if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
5720	  return FALSE;
5721      fdh->elf.ref_regular |= fh->elf.ref_regular;
5722      fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
5723      fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
5724      fdh->elf.non_got_ref |= fh->elf.non_got_ref;
5725      if (ELF_ST_VISIBILITY (fh->elf.other) == STV_DEFAULT)
5726	{
5727	  move_plt_plist (fh, fdh);
5728	  fdh->elf.needs_plt = 1;
5729	}
5730      fdh->is_func_descriptor = 1;
5731      fdh->oh = fh;
5732      fh->oh = fdh;
5733    }
5734
5735  /* Now that the info is on the function descriptor, clear the
5736     function code sym info.  Any function code syms for which we
5737     don't have a definition in a regular file, we force local.
5738     This prevents a shared library from exporting syms that have
5739     been imported from another library.  Function code syms that
5740     are really in the library we must leave global to prevent the
5741     linker dragging in a definition from a static library.  */
5742  force_local = (!fh->elf.def_regular
5743		 || fdh == NULL
5744		 || !fdh->elf.def_regular
5745		 || fdh->elf.forced_local);
5746  _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
5747
5748  return TRUE;
5749}
5750
5751/* Called near the start of bfd_elf_size_dynamic_sections.  We use
5752   this hook to a) provide some gcc support functions, and b) transfer
5753   dynamic linking information gathered so far on function code symbol
5754   entries, to their corresponding function descriptor symbol entries.  */
5755
5756static bfd_boolean
5757ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
5758			    struct bfd_link_info *info)
5759{
5760  struct ppc_link_hash_table *htab;
5761  unsigned int i;
5762  const struct sfpr_def_parms funcs[] =
5763    {
5764      { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
5765      { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
5766      { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
5767      { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
5768      { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
5769      { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
5770      { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
5771      { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
5772      { "._savef", 14, 31, savefpr, savefpr1_tail },
5773      { "._restf", 14, 31, restfpr, restfpr1_tail },
5774      { "_savevr_", 20, 31, savevr, savevr_tail },
5775      { "_restvr_", 20, 31, restvr, restvr_tail }
5776    };
5777
5778  htab = ppc_hash_table (info);
5779  if (htab->sfpr == NULL)
5780    /* We don't have any relocs.  */
5781    return TRUE;
5782
5783  /* Provide any missing _save* and _rest* functions.  */
5784  htab->sfpr->size = 0;
5785  for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
5786    if (!sfpr_define (info, &funcs[i]))
5787      return FALSE;
5788
5789  elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5790
5791  if (htab->sfpr->size == 0)
5792    htab->sfpr->flags |= SEC_EXCLUDE;
5793
5794  return TRUE;
5795}
5796
5797/* Adjust a symbol defined by a dynamic object and referenced by a
5798   regular object.  The current definition is in some section of the
5799   dynamic object, but we're not including those sections.  We have to
5800   change the definition to something the rest of the link can
5801   understand.  */
5802
5803static bfd_boolean
5804ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
5805				 struct elf_link_hash_entry *h)
5806{
5807  struct ppc_link_hash_table *htab;
5808  asection *s;
5809
5810  htab = ppc_hash_table (info);
5811
5812  /* Deal with function syms.  */
5813  if (h->type == STT_FUNC
5814      || h->needs_plt)
5815    {
5816      /* Clear procedure linkage table information for any symbol that
5817	 won't need a .plt entry.  */
5818      struct plt_entry *ent;
5819      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
5820	if (ent->plt.refcount > 0)
5821	  break;
5822      if (ent == NULL
5823	  || SYMBOL_CALLS_LOCAL (info, h)
5824	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
5825	      && h->root.type == bfd_link_hash_undefweak))
5826	{
5827	  h->plt.plist = NULL;
5828	  h->needs_plt = 0;
5829	}
5830    }
5831  else
5832    h->plt.plist = NULL;
5833
5834  /* If this is a weak symbol, and there is a real definition, the
5835     processor independent code will have arranged for us to see the
5836     real definition first, and we can just use the same value.  */
5837  if (h->u.weakdef != NULL)
5838    {
5839      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
5840		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
5841      h->root.u.def.section = h->u.weakdef->root.u.def.section;
5842      h->root.u.def.value = h->u.weakdef->root.u.def.value;
5843      if (ELIMINATE_COPY_RELOCS)
5844	h->non_got_ref = h->u.weakdef->non_got_ref;
5845      return TRUE;
5846    }
5847
5848  /* If we are creating a shared library, we must presume that the
5849     only references to the symbol are via the global offset table.
5850     For such cases we need not do anything here; the relocations will
5851     be handled correctly by relocate_section.  */
5852  if (info->shared)
5853    return TRUE;
5854
5855  /* If there are no references to this symbol that do not use the
5856     GOT, we don't need to generate a copy reloc.  */
5857  if (!h->non_got_ref)
5858    return TRUE;
5859
5860  /* Don't generate a copy reloc for symbols defined in the executable.  */
5861  if (!h->def_dynamic || !h->ref_regular || h->def_regular)
5862    return TRUE;
5863
5864  if (ELIMINATE_COPY_RELOCS)
5865    {
5866      struct ppc_link_hash_entry * eh;
5867      struct ppc_dyn_relocs *p;
5868
5869      eh = (struct ppc_link_hash_entry *) h;
5870      for (p = eh->dyn_relocs; p != NULL; p = p->next)
5871	{
5872	  s = p->sec->output_section;
5873	  if (s != NULL && (s->flags & SEC_READONLY) != 0)
5874	    break;
5875	}
5876
5877      /* If we didn't find any dynamic relocs in read-only sections, then
5878	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
5879      if (p == NULL)
5880	{
5881	  h->non_got_ref = 0;
5882	  return TRUE;
5883	}
5884    }
5885
5886  if (h->plt.plist != NULL)
5887    {
5888      /* We should never get here, but unfortunately there are versions
5889	 of gcc out there that improperly (for this ABI) put initialized
5890	 function pointers, vtable refs and suchlike in read-only
5891	 sections.  Allow them to proceed, but warn that this might
5892	 break at runtime.  */
5893      (*_bfd_error_handler)
5894	(_("copy reloc against `%s' requires lazy plt linking; "
5895	   "avoid setting LD_BIND_NOW=1 or upgrade gcc"),
5896	 h->root.root.string);
5897    }
5898
5899  /* This is a reference to a symbol defined by a dynamic object which
5900     is not a function.  */
5901
5902  if (h->size == 0)
5903    {
5904      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
5905			     h->root.root.string);
5906      return TRUE;
5907    }
5908
5909  /* We must allocate the symbol in our .dynbss section, which will
5910     become part of the .bss section of the executable.  There will be
5911     an entry for this symbol in the .dynsym section.  The dynamic
5912     object will contain position independent code, so all references
5913     from the dynamic object to this symbol will go through the global
5914     offset table.  The dynamic linker will use the .dynsym entry to
5915     determine the address it must put in the global offset table, so
5916     both the dynamic object and the regular object will refer to the
5917     same memory location for the variable.  */
5918
5919  /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
5920     to copy the initial value out of the dynamic object and into the
5921     runtime process image.  We need to remember the offset into the
5922     .rela.bss section we are going to use.  */
5923  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
5924    {
5925      htab->relbss->size += sizeof (Elf64_External_Rela);
5926      h->needs_copy = 1;
5927    }
5928
5929  s = htab->dynbss;
5930
5931  return _bfd_elf_adjust_dynamic_copy (h, s);
5932}
5933
5934/* If given a function descriptor symbol, hide both the function code
5935   sym and the descriptor.  */
5936static void
5937ppc64_elf_hide_symbol (struct bfd_link_info *info,
5938		       struct elf_link_hash_entry *h,
5939		       bfd_boolean force_local)
5940{
5941  struct ppc_link_hash_entry *eh;
5942  _bfd_elf_link_hash_hide_symbol (info, h, force_local);
5943
5944  eh = (struct ppc_link_hash_entry *) h;
5945  if (eh->is_func_descriptor)
5946    {
5947      struct ppc_link_hash_entry *fh = eh->oh;
5948
5949      if (fh == NULL)
5950	{
5951	  const char *p, *q;
5952	  struct ppc_link_hash_table *htab;
5953	  char save;
5954
5955	  /* We aren't supposed to use alloca in BFD because on
5956	     systems which do not have alloca the version in libiberty
5957	     calls xmalloc, which might cause the program to crash
5958	     when it runs out of memory.  This function doesn't have a
5959	     return status, so there's no way to gracefully return an
5960	     error.  So cheat.  We know that string[-1] can be safely
5961	     accessed;  It's either a string in an ELF string table,
5962	     or allocated in an objalloc structure.  */
5963
5964	  p = eh->elf.root.root.string - 1;
5965	  save = *p;
5966	  *(char *) p = '.';
5967	  htab = ppc_hash_table (info);
5968	  fh = (struct ppc_link_hash_entry *)
5969	    elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
5970	  *(char *) p = save;
5971
5972	  /* Unfortunately, if it so happens that the string we were
5973	     looking for was allocated immediately before this string,
5974	     then we overwrote the string terminator.  That's the only
5975	     reason the lookup should fail.  */
5976	  if (fh == NULL)
5977	    {
5978	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
5979	      while (q >= eh->elf.root.root.string && *q == *p)
5980		--q, --p;
5981	      if (q < eh->elf.root.root.string && *p == '.')
5982		fh = (struct ppc_link_hash_entry *)
5983		  elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
5984	    }
5985	  if (fh != NULL)
5986	    {
5987	      eh->oh = fh;
5988	      fh->oh = eh;
5989	    }
5990	}
5991      if (fh != NULL)
5992	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
5993    }
5994}
5995
5996static bfd_boolean
5997get_sym_h (struct elf_link_hash_entry **hp,
5998	   Elf_Internal_Sym **symp,
5999	   asection **symsecp,
6000	   char **tls_maskp,
6001	   Elf_Internal_Sym **locsymsp,
6002	   unsigned long r_symndx,
6003	   bfd *ibfd)
6004{
6005  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
6006
6007  if (r_symndx >= symtab_hdr->sh_info)
6008    {
6009      struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6010      struct elf_link_hash_entry *h;
6011
6012      h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6013      while (h->root.type == bfd_link_hash_indirect
6014	     || h->root.type == bfd_link_hash_warning)
6015	h = (struct elf_link_hash_entry *) h->root.u.i.link;
6016
6017      if (hp != NULL)
6018	*hp = h;
6019
6020      if (symp != NULL)
6021	*symp = NULL;
6022
6023      if (symsecp != NULL)
6024	{
6025	  asection *symsec = NULL;
6026	  if (h->root.type == bfd_link_hash_defined
6027	      || h->root.type == bfd_link_hash_defweak)
6028	    symsec = h->root.u.def.section;
6029	  *symsecp = symsec;
6030	}
6031
6032      if (tls_maskp != NULL)
6033	{
6034	  struct ppc_link_hash_entry *eh;
6035
6036	  eh = (struct ppc_link_hash_entry *) h;
6037	  *tls_maskp = &eh->tls_mask;
6038	}
6039    }
6040  else
6041    {
6042      Elf_Internal_Sym *sym;
6043      Elf_Internal_Sym *locsyms = *locsymsp;
6044
6045      if (locsyms == NULL)
6046	{
6047	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6048	  if (locsyms == NULL)
6049	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6050					    symtab_hdr->sh_info,
6051					    0, NULL, NULL, NULL);
6052	  if (locsyms == NULL)
6053	    return FALSE;
6054	  *locsymsp = locsyms;
6055	}
6056      sym = locsyms + r_symndx;
6057
6058      if (hp != NULL)
6059	*hp = NULL;
6060
6061      if (symp != NULL)
6062	*symp = sym;
6063
6064      if (symsecp != NULL)
6065	{
6066	  asection *symsec = NULL;
6067	  if ((sym->st_shndx != SHN_UNDEF
6068	       && sym->st_shndx < SHN_LORESERVE)
6069	      || sym->st_shndx > SHN_HIRESERVE)
6070	    symsec = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6071	  *symsecp = symsec;
6072	}
6073
6074      if (tls_maskp != NULL)
6075	{
6076	  struct got_entry **lgot_ents;
6077	  char *tls_mask;
6078
6079	  tls_mask = NULL;
6080	  lgot_ents = elf_local_got_ents (ibfd);
6081	  if (lgot_ents != NULL)
6082	    {
6083	      char *lgot_masks = (char *) (lgot_ents + symtab_hdr->sh_info);
6084	      tls_mask = &lgot_masks[r_symndx];
6085	    }
6086	  *tls_maskp = tls_mask;
6087	}
6088    }
6089  return TRUE;
6090}
6091
6092/* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
6093   error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6094   type suitable for optimization, and 1 otherwise.  */
6095
6096static int
6097get_tls_mask (char **tls_maskp, unsigned long *toc_symndx,
6098	      Elf_Internal_Sym **locsymsp,
6099	      const Elf_Internal_Rela *rel, bfd *ibfd)
6100{
6101  unsigned long r_symndx;
6102  int next_r;
6103  struct elf_link_hash_entry *h;
6104  Elf_Internal_Sym *sym;
6105  asection *sec;
6106  bfd_vma off;
6107
6108  r_symndx = ELF64_R_SYM (rel->r_info);
6109  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6110    return 0;
6111
6112  if ((*tls_maskp != NULL && **tls_maskp != 0)
6113      || sec == NULL
6114      || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6115    return 1;
6116
6117  /* Look inside a TOC section too.  */
6118  if (h != NULL)
6119    {
6120      BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6121      off = h->root.u.def.value;
6122    }
6123  else
6124    off = sym->st_value;
6125  off += rel->r_addend;
6126  BFD_ASSERT (off % 8 == 0);
6127  r_symndx = ppc64_elf_section_data (sec)->u.t_symndx[off / 8];
6128  next_r = ppc64_elf_section_data (sec)->u.t_symndx[off / 8 + 1];
6129  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6130    return 0;
6131  if (toc_symndx != NULL)
6132    *toc_symndx = r_symndx;
6133  if ((h == NULL
6134       || ((h->root.type == bfd_link_hash_defined
6135	    || h->root.type == bfd_link_hash_defweak)
6136	   && !h->def_dynamic))
6137      && (next_r == -1 || next_r == -2))
6138    return 1 - next_r;
6139  return 1;
6140}
6141
6142/* Adjust all global syms defined in opd sections.  In gcc generated
6143   code for the old ABI, these will already have been done.  */
6144
6145static bfd_boolean
6146adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6147{
6148  struct ppc_link_hash_entry *eh;
6149  asection *sym_sec;
6150  long *opd_adjust;
6151
6152  if (h->root.type == bfd_link_hash_indirect)
6153    return TRUE;
6154
6155  if (h->root.type == bfd_link_hash_warning)
6156    h = (struct elf_link_hash_entry *) h->root.u.i.link;
6157
6158  if (h->root.type != bfd_link_hash_defined
6159      && h->root.type != bfd_link_hash_defweak)
6160    return TRUE;
6161
6162  eh = (struct ppc_link_hash_entry *) h;
6163  if (eh->adjust_done)
6164    return TRUE;
6165
6166  sym_sec = eh->elf.root.u.def.section;
6167  opd_adjust = get_opd_info (sym_sec);
6168  if (opd_adjust != NULL)
6169    {
6170      long adjust = opd_adjust[eh->elf.root.u.def.value / 8];
6171      if (adjust == -1)
6172	{
6173	  /* This entry has been deleted.  */
6174	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6175	  if (dsec == NULL)
6176	    {
6177	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6178		if (elf_discarded_section (dsec))
6179		  {
6180		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6181		    break;
6182		  }
6183	    }
6184	  eh->elf.root.u.def.value = 0;
6185	  eh->elf.root.u.def.section = dsec;
6186	}
6187      else
6188	eh->elf.root.u.def.value += adjust;
6189      eh->adjust_done = 1;
6190    }
6191  return TRUE;
6192}
6193
6194/* Handles decrementing dynamic reloc counts for the reloc specified by
6195   R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM_SEC
6196   have already been determined.  */
6197
6198static bfd_boolean
6199dec_dynrel_count (bfd_vma r_info,
6200		  asection *sec,
6201		  struct bfd_link_info *info,
6202		  Elf_Internal_Sym **local_syms,
6203		  struct elf_link_hash_entry *h,
6204		  asection *sym_sec)
6205{
6206  enum elf_ppc64_reloc_type r_type;
6207  struct ppc_dyn_relocs *p;
6208  struct ppc_dyn_relocs **pp;
6209
6210  /* Can this reloc be dynamic?  This switch, and later tests here
6211     should be kept in sync with the code in check_relocs.  */
6212  r_type = ELF64_R_TYPE (r_info);
6213  switch (r_type)
6214    {
6215    default:
6216      return TRUE;
6217
6218    case R_PPC64_TPREL16:
6219    case R_PPC64_TPREL16_LO:
6220    case R_PPC64_TPREL16_HI:
6221    case R_PPC64_TPREL16_HA:
6222    case R_PPC64_TPREL16_DS:
6223    case R_PPC64_TPREL16_LO_DS:
6224    case R_PPC64_TPREL16_HIGHER:
6225    case R_PPC64_TPREL16_HIGHERA:
6226    case R_PPC64_TPREL16_HIGHEST:
6227    case R_PPC64_TPREL16_HIGHESTA:
6228      if (!info->shared)
6229	return TRUE;
6230
6231    case R_PPC64_TPREL64:
6232    case R_PPC64_DTPMOD64:
6233    case R_PPC64_DTPREL64:
6234    case R_PPC64_ADDR64:
6235    case R_PPC64_REL30:
6236    case R_PPC64_REL32:
6237    case R_PPC64_REL64:
6238    case R_PPC64_ADDR14:
6239    case R_PPC64_ADDR14_BRNTAKEN:
6240    case R_PPC64_ADDR14_BRTAKEN:
6241    case R_PPC64_ADDR16:
6242    case R_PPC64_ADDR16_DS:
6243    case R_PPC64_ADDR16_HA:
6244    case R_PPC64_ADDR16_HI:
6245    case R_PPC64_ADDR16_HIGHER:
6246    case R_PPC64_ADDR16_HIGHERA:
6247    case R_PPC64_ADDR16_HIGHEST:
6248    case R_PPC64_ADDR16_HIGHESTA:
6249    case R_PPC64_ADDR16_LO:
6250    case R_PPC64_ADDR16_LO_DS:
6251    case R_PPC64_ADDR24:
6252    case R_PPC64_ADDR32:
6253    case R_PPC64_UADDR16:
6254    case R_PPC64_UADDR32:
6255    case R_PPC64_UADDR64:
6256    case R_PPC64_TOC:
6257      break;
6258    }
6259
6260  if (local_syms != NULL)
6261    {
6262      unsigned long r_symndx;
6263      Elf_Internal_Sym *sym;
6264      bfd *ibfd = sec->owner;
6265
6266      r_symndx = ELF64_R_SYM (r_info);
6267      if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
6268	return FALSE;
6269    }
6270
6271  if ((info->shared
6272       && (MUST_BE_DYN_RELOC (r_type)
6273	   || (h != NULL
6274	       && (!info->symbolic
6275		   || h->root.type == bfd_link_hash_defweak
6276		   || !h->def_regular))))
6277      || (ELIMINATE_COPY_RELOCS
6278	  && !info->shared
6279	  && h != NULL
6280	  && (h->root.type == bfd_link_hash_defweak
6281	      || !h->def_regular)))
6282    ;
6283  else
6284    return TRUE;
6285
6286  if (h != NULL)
6287    pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
6288  else
6289    {
6290      if (sym_sec != NULL)
6291	{
6292	  void *vpp = &elf_section_data (sym_sec)->local_dynrel;
6293	  pp = (struct ppc_dyn_relocs **) vpp;
6294	}
6295      else
6296	{
6297	  void *vpp = &elf_section_data (sec)->local_dynrel;
6298	  pp = (struct ppc_dyn_relocs **) vpp;
6299	}
6300
6301      /* elf_gc_sweep may have already removed all dyn relocs associated
6302	 with local syms for a given section.  Don't report a dynreloc
6303	 miscount.  */
6304      if (*pp == NULL)
6305	return TRUE;
6306    }
6307
6308  while ((p = *pp) != NULL)
6309    {
6310      if (p->sec == sec)
6311	{
6312	  if (!MUST_BE_DYN_RELOC (r_type))
6313	    p->pc_count -= 1;
6314	  p->count -= 1;
6315	  if (p->count == 0)
6316	    *pp = p->next;
6317	  return TRUE;
6318	}
6319      pp = &p->next;
6320    }
6321
6322  (*_bfd_error_handler) (_("dynreloc miscount for %B, section %A"),
6323			   sec->owner, sec);
6324  bfd_set_error (bfd_error_bad_value);
6325  return FALSE;
6326}
6327
6328/* Remove unused Official Procedure Descriptor entries.  Currently we
6329   only remove those associated with functions in discarded link-once
6330   sections, or weakly defined functions that have been overridden.  It
6331   would be possible to remove many more entries for statically linked
6332   applications.  */
6333
6334bfd_boolean
6335ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
6336		    bfd_boolean no_opd_opt,
6337		    bfd_boolean non_overlapping)
6338{
6339  bfd *ibfd;
6340  bfd_boolean some_edited = FALSE;
6341  asection *need_pad = NULL;
6342
6343  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
6344    {
6345      asection *sec;
6346      Elf_Internal_Rela *relstart, *rel, *relend;
6347      Elf_Internal_Shdr *symtab_hdr;
6348      Elf_Internal_Sym *local_syms;
6349      struct elf_link_hash_entry **sym_hashes;
6350      bfd_vma offset;
6351      bfd_size_type amt;
6352      long *opd_adjust;
6353      bfd_boolean need_edit, add_aux_fields;
6354      bfd_size_type cnt_16b = 0;
6355
6356      sec = bfd_get_section_by_name (ibfd, ".opd");
6357      if (sec == NULL || sec->size == 0)
6358	continue;
6359
6360      amt = sec->size * sizeof (long) / 8;
6361      opd_adjust = get_opd_info (sec);
6362      if (opd_adjust == NULL)
6363	{
6364	  /* check_relocs hasn't been called.  Must be a ld -r link
6365	     or --just-symbols object.   */
6366	  opd_adjust = bfd_alloc (obfd, amt);
6367	  if (opd_adjust == NULL)
6368	    return FALSE;
6369	  ppc64_elf_section_data (sec)->u.opd_adjust = opd_adjust;
6370	  BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
6371	  ppc64_elf_section_data (sec)->sec_type = sec_opd;
6372	}
6373      memset (opd_adjust, 0, amt);
6374
6375      if (no_opd_opt)
6376	continue;
6377
6378      if (sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
6379	continue;
6380
6381      if (sec->output_section == bfd_abs_section_ptr)
6382	continue;
6383
6384      /* Look through the section relocs.  */
6385      if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
6386	continue;
6387
6388      local_syms = NULL;
6389      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
6390      sym_hashes = elf_sym_hashes (ibfd);
6391
6392      /* Read the relocations.  */
6393      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
6394					    info->keep_memory);
6395      if (relstart == NULL)
6396	return FALSE;
6397
6398      /* First run through the relocs to check they are sane, and to
6399	 determine whether we need to edit this opd section.  */
6400      need_edit = FALSE;
6401      need_pad = sec;
6402      offset = 0;
6403      relend = relstart + sec->reloc_count;
6404      for (rel = relstart; rel < relend; )
6405	{
6406	  enum elf_ppc64_reloc_type r_type;
6407	  unsigned long r_symndx;
6408	  asection *sym_sec;
6409	  struct elf_link_hash_entry *h;
6410	  Elf_Internal_Sym *sym;
6411
6412	  /* .opd contains a regular array of 16 or 24 byte entries.  We're
6413	     only interested in the reloc pointing to a function entry
6414	     point.  */
6415	  if (rel->r_offset != offset
6416	      || rel + 1 >= relend
6417	      || (rel + 1)->r_offset != offset + 8)
6418	    {
6419	      /* If someone messes with .opd alignment then after a
6420		 "ld -r" we might have padding in the middle of .opd.
6421		 Also, there's nothing to prevent someone putting
6422		 something silly in .opd with the assembler.  No .opd
6423		 optimization for them!  */
6424	    broken_opd:
6425	      (*_bfd_error_handler)
6426		(_("%B: .opd is not a regular array of opd entries"), ibfd);
6427	      need_edit = FALSE;
6428	      break;
6429	    }
6430
6431	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
6432	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
6433	    {
6434	      (*_bfd_error_handler)
6435		(_("%B: unexpected reloc type %u in .opd section"),
6436		 ibfd, r_type);
6437	      need_edit = FALSE;
6438	      break;
6439	    }
6440
6441	  r_symndx = ELF64_R_SYM (rel->r_info);
6442	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
6443			  r_symndx, ibfd))
6444	    goto error_ret;
6445
6446	  if (sym_sec == NULL || sym_sec->owner == NULL)
6447	    {
6448	      const char *sym_name;
6449	      if (h != NULL)
6450		sym_name = h->root.root.string;
6451	      else
6452		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
6453					     sym_sec);
6454
6455	      (*_bfd_error_handler)
6456		(_("%B: undefined sym `%s' in .opd section"),
6457		 ibfd, sym_name);
6458	      need_edit = FALSE;
6459	      break;
6460	    }
6461
6462	  /* opd entries are always for functions defined in the
6463	     current input bfd.  If the symbol isn't defined in the
6464	     input bfd, then we won't be using the function in this
6465	     bfd;  It must be defined in a linkonce section in another
6466	     bfd, or is weak.  It's also possible that we are
6467	     discarding the function due to a linker script /DISCARD/,
6468	     which we test for via the output_section.  */
6469	  if (sym_sec->owner != ibfd
6470	      || sym_sec->output_section == bfd_abs_section_ptr)
6471	    need_edit = TRUE;
6472
6473	  rel += 2;
6474	  if (rel == relend
6475	      || (rel + 1 == relend && rel->r_offset == offset + 16))
6476	    {
6477	      if (sec->size == offset + 24)
6478		{
6479		  need_pad = NULL;
6480		  break;
6481		}
6482	      if (rel == relend && sec->size == offset + 16)
6483		{
6484		  cnt_16b++;
6485		  break;
6486		}
6487	      goto broken_opd;
6488	    }
6489
6490	  if (rel->r_offset == offset + 24)
6491	    offset += 24;
6492	  else if (rel->r_offset != offset + 16)
6493	    goto broken_opd;
6494	  else if (rel + 1 < relend
6495		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
6496		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
6497	    {
6498	      offset += 16;
6499	      cnt_16b++;
6500	    }
6501	  else if (rel + 2 < relend
6502		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_ADDR64
6503		   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC)
6504	    {
6505	      offset += 24;
6506	      rel += 1;
6507	    }
6508	  else
6509	    goto broken_opd;
6510	}
6511
6512      add_aux_fields = non_overlapping && cnt_16b > 0;
6513
6514      if (need_edit || add_aux_fields)
6515	{
6516	  Elf_Internal_Rela *write_rel;
6517	  bfd_byte *rptr, *wptr;
6518	  bfd_byte *new_contents = NULL;
6519	  bfd_boolean skip;
6520	  long opd_ent_size;
6521
6522	  /* This seems a waste of time as input .opd sections are all
6523	     zeros as generated by gcc, but I suppose there's no reason
6524	     this will always be so.  We might start putting something in
6525	     the third word of .opd entries.  */
6526	  if ((sec->flags & SEC_IN_MEMORY) == 0)
6527	    {
6528	      bfd_byte *loc;
6529	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
6530		{
6531		  if (loc != NULL)
6532		    free (loc);
6533		error_ret:
6534		  if (local_syms != NULL
6535		      && symtab_hdr->contents != (unsigned char *) local_syms)
6536		    free (local_syms);
6537		  if (elf_section_data (sec)->relocs != relstart)
6538		    free (relstart);
6539		  return FALSE;
6540		}
6541	      sec->contents = loc;
6542	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
6543	    }
6544
6545	  elf_section_data (sec)->relocs = relstart;
6546
6547	  new_contents = sec->contents;
6548	  if (add_aux_fields)
6549	    {
6550	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
6551	      if (new_contents == NULL)
6552		return FALSE;
6553	      need_pad = FALSE;
6554	    }
6555	  wptr = new_contents;
6556	  rptr = sec->contents;
6557
6558	  write_rel = relstart;
6559	  skip = FALSE;
6560	  offset = 0;
6561	  opd_ent_size = 0;
6562	  for (rel = relstart; rel < relend; rel++)
6563	    {
6564	      unsigned long r_symndx;
6565	      asection *sym_sec;
6566	      struct elf_link_hash_entry *h;
6567	      Elf_Internal_Sym *sym;
6568
6569	      r_symndx = ELF64_R_SYM (rel->r_info);
6570	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
6571			      r_symndx, ibfd))
6572		goto error_ret;
6573
6574	      if (rel->r_offset == offset)
6575		{
6576		  struct ppc_link_hash_entry *fdh = NULL;
6577
6578		  /* See if the .opd entry is full 24 byte or
6579		     16 byte (with fd_aux entry overlapped with next
6580		     fd_func).  */
6581		  opd_ent_size = 24;
6582		  if ((rel + 2 == relend && sec->size == offset + 16)
6583		      || (rel + 3 < relend
6584			  && rel[2].r_offset == offset + 16
6585			  && rel[3].r_offset == offset + 24
6586			  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_ADDR64
6587			  && ELF64_R_TYPE (rel[3].r_info) == R_PPC64_TOC))
6588		    opd_ent_size = 16;
6589
6590		  if (h != NULL
6591		      && h->root.root.string[0] == '.')
6592		    {
6593		      fdh = get_fdh ((struct ppc_link_hash_entry *) h,
6594				     ppc_hash_table (info));
6595		      if (fdh != NULL
6596			  && fdh->elf.root.type != bfd_link_hash_defined
6597			  && fdh->elf.root.type != bfd_link_hash_defweak)
6598			fdh = NULL;
6599		    }
6600
6601		  skip = (sym_sec->owner != ibfd
6602			  || sym_sec->output_section == bfd_abs_section_ptr);
6603		  if (skip)
6604		    {
6605		      if (fdh != NULL && sym_sec->owner == ibfd)
6606			{
6607			  /* Arrange for the function descriptor sym
6608			     to be dropped.  */
6609			  fdh->elf.root.u.def.value = 0;
6610			  fdh->elf.root.u.def.section = sym_sec;
6611			}
6612		      opd_adjust[rel->r_offset / 8] = -1;
6613		    }
6614		  else
6615		    {
6616		      /* We'll be keeping this opd entry.  */
6617
6618		      if (fdh != NULL)
6619			{
6620			  /* Redefine the function descriptor symbol to
6621			     this location in the opd section.  It is
6622			     necessary to update the value here rather
6623			     than using an array of adjustments as we do
6624			     for local symbols, because various places
6625			     in the generic ELF code use the value
6626			     stored in u.def.value.  */
6627			  fdh->elf.root.u.def.value = wptr - new_contents;
6628			  fdh->adjust_done = 1;
6629			}
6630
6631		      /* Local syms are a bit tricky.  We could
6632			 tweak them as they can be cached, but
6633			 we'd need to look through the local syms
6634			 for the function descriptor sym which we
6635			 don't have at the moment.  So keep an
6636			 array of adjustments.  */
6637		      opd_adjust[rel->r_offset / 8]
6638			= (wptr - new_contents) - (rptr - sec->contents);
6639
6640		      if (wptr != rptr)
6641			memcpy (wptr, rptr, opd_ent_size);
6642		      wptr += opd_ent_size;
6643		      if (add_aux_fields && opd_ent_size == 16)
6644			{
6645			  memset (wptr, '\0', 8);
6646			  wptr += 8;
6647			}
6648		    }
6649		  rptr += opd_ent_size;
6650		  offset += opd_ent_size;
6651		}
6652
6653	      if (skip)
6654		{
6655		  if (!NO_OPD_RELOCS
6656		      && !info->relocatable
6657		      && !dec_dynrel_count (rel->r_info, sec, info,
6658					    NULL, h, sym_sec))
6659		    goto error_ret;
6660		}
6661	      else
6662		{
6663		  /* We need to adjust any reloc offsets to point to the
6664		     new opd entries.  While we're at it, we may as well
6665		     remove redundant relocs.  */
6666		  rel->r_offset += opd_adjust[(offset - opd_ent_size) / 8];
6667		  if (write_rel != rel)
6668		    memcpy (write_rel, rel, sizeof (*rel));
6669		  ++write_rel;
6670		}
6671	    }
6672
6673	  sec->size = wptr - new_contents;
6674	  sec->reloc_count = write_rel - relstart;
6675	  if (add_aux_fields)
6676	    {
6677	      free (sec->contents);
6678	      sec->contents = new_contents;
6679	    }
6680
6681	  /* Fudge the header size too, as this is used later in
6682	     elf_bfd_final_link if we are emitting relocs.  */
6683	  elf_section_data (sec)->rel_hdr.sh_size
6684	    = sec->reloc_count * elf_section_data (sec)->rel_hdr.sh_entsize;
6685	  BFD_ASSERT (elf_section_data (sec)->rel_hdr2 == NULL);
6686	  some_edited = TRUE;
6687	}
6688      else if (elf_section_data (sec)->relocs != relstart)
6689	free (relstart);
6690
6691      if (local_syms != NULL
6692	  && symtab_hdr->contents != (unsigned char *) local_syms)
6693	{
6694	  if (!info->keep_memory)
6695	    free (local_syms);
6696	  else
6697	    symtab_hdr->contents = (unsigned char *) local_syms;
6698	}
6699    }
6700
6701  if (some_edited)
6702    elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
6703
6704  /* If we are doing a final link and the last .opd entry is just 16 byte
6705     long, add a 8 byte padding after it.  */
6706  if (need_pad != NULL && !info->relocatable)
6707    {
6708      bfd_byte *p;
6709
6710      if ((need_pad->flags & SEC_IN_MEMORY) == 0)
6711	{
6712	  BFD_ASSERT (need_pad->size > 0);
6713
6714	  p = bfd_malloc (need_pad->size + 8);
6715	  if (p == NULL)
6716	    return FALSE;
6717
6718	  if (! bfd_get_section_contents (need_pad->owner, need_pad,
6719					  p, 0, need_pad->size))
6720	    return FALSE;
6721
6722	  need_pad->contents = p;
6723	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
6724	}
6725      else
6726	{
6727	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
6728	  if (p == NULL)
6729	    return FALSE;
6730
6731	  need_pad->contents = p;
6732	}
6733
6734      memset (need_pad->contents + need_pad->size, 0, 8);
6735      need_pad->size += 8;
6736    }
6737
6738  return TRUE;
6739}
6740
6741/* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
6742
6743asection *
6744ppc64_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
6745{
6746  struct ppc_link_hash_table *htab;
6747
6748  htab = ppc_hash_table (info);
6749  if (htab->tls_get_addr != NULL)
6750    {
6751      struct ppc_link_hash_entry *h = htab->tls_get_addr;
6752
6753      while (h->elf.root.type == bfd_link_hash_indirect
6754	     || h->elf.root.type == bfd_link_hash_warning)
6755	h = (struct ppc_link_hash_entry *) h->elf.root.u.i.link;
6756
6757      htab->tls_get_addr = h;
6758
6759      if (htab->tls_get_addr_fd == NULL
6760	  && h->oh != NULL
6761	  && h->oh->is_func_descriptor
6762	  && (h->oh->elf.root.type == bfd_link_hash_defined
6763	      || h->oh->elf.root.type == bfd_link_hash_defweak))
6764	htab->tls_get_addr_fd = h->oh;
6765    }
6766
6767  if (htab->tls_get_addr_fd != NULL)
6768    {
6769      struct ppc_link_hash_entry *h = htab->tls_get_addr_fd;
6770
6771      while (h->elf.root.type == bfd_link_hash_indirect
6772	     || h->elf.root.type == bfd_link_hash_warning)
6773	h = (struct ppc_link_hash_entry *) h->elf.root.u.i.link;
6774
6775      htab->tls_get_addr_fd = h;
6776    }
6777
6778  return _bfd_elf_tls_setup (obfd, info);
6779}
6780
6781/* Run through all the TLS relocs looking for optimization
6782   opportunities.  The linker has been hacked (see ppc64elf.em) to do
6783   a preliminary section layout so that we know the TLS segment
6784   offsets.  We can't optimize earlier because some optimizations need
6785   to know the tp offset, and we need to optimize before allocating
6786   dynamic relocations.  */
6787
6788bfd_boolean
6789ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
6790{
6791  bfd *ibfd;
6792  asection *sec;
6793  struct ppc_link_hash_table *htab;
6794
6795  if (info->relocatable || info->shared)
6796    return TRUE;
6797
6798  htab = ppc_hash_table (info);
6799  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
6800    {
6801      Elf_Internal_Sym *locsyms = NULL;
6802      asection *toc = bfd_get_section_by_name (ibfd, ".toc");
6803      unsigned char *toc_ref = NULL;
6804
6805      /* Look at all the sections for this file, with TOC last.  */
6806      for (sec = (ibfd->sections == toc && toc && toc->next ? toc->next
6807		  : ibfd->sections);
6808	   sec != NULL;
6809	   sec = (sec == toc ? NULL
6810		  : sec->next == NULL ? toc
6811		  : sec->next == toc && toc->next ? toc->next
6812		  : sec->next))
6813	if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
6814	  {
6815	    Elf_Internal_Rela *relstart, *rel, *relend;
6816	    int expecting_tls_get_addr;
6817	    long toc_ref_index = 0;
6818
6819	    /* Read the relocations.  */
6820	    relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
6821						  info->keep_memory);
6822	    if (relstart == NULL)
6823	      return FALSE;
6824
6825	    expecting_tls_get_addr = 0;
6826	    relend = relstart + sec->reloc_count;
6827	    for (rel = relstart; rel < relend; rel++)
6828	      {
6829		enum elf_ppc64_reloc_type r_type;
6830		unsigned long r_symndx;
6831		struct elf_link_hash_entry *h;
6832		Elf_Internal_Sym *sym;
6833		asection *sym_sec;
6834		char *tls_mask;
6835		char tls_set, tls_clear, tls_type = 0;
6836		bfd_vma value;
6837		bfd_boolean ok_tprel, is_local;
6838
6839		r_symndx = ELF64_R_SYM (rel->r_info);
6840		if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
6841				r_symndx, ibfd))
6842		  {
6843		  err_free_rel:
6844		    if (elf_section_data (sec)->relocs != relstart)
6845		      free (relstart);
6846		    if (toc_ref != NULL)
6847		      free (toc_ref);
6848		    if (locsyms != NULL
6849			&& (elf_tdata (ibfd)->symtab_hdr.contents
6850			    != (unsigned char *) locsyms))
6851		      free (locsyms);
6852		    return FALSE;
6853		  }
6854
6855		if (h != NULL)
6856		  {
6857		    if (h->root.type != bfd_link_hash_defined
6858			&& h->root.type != bfd_link_hash_defweak)
6859		      continue;
6860		    value = h->root.u.def.value;
6861		  }
6862		else
6863		  /* Symbols referenced by TLS relocs must be of type
6864		     STT_TLS.  So no need for .opd local sym adjust.  */
6865		  value = sym->st_value;
6866
6867		ok_tprel = FALSE;
6868		is_local = FALSE;
6869		if (h == NULL
6870		    || !h->def_dynamic)
6871		  {
6872		    is_local = TRUE;
6873		    value += sym_sec->output_offset;
6874		    value += sym_sec->output_section->vma;
6875		    value -= htab->elf.tls_sec->vma;
6876		    ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
6877				< (bfd_vma) 1 << 32);
6878		  }
6879
6880		r_type = ELF64_R_TYPE (rel->r_info);
6881		switch (r_type)
6882		  {
6883		  case R_PPC64_GOT_TLSLD16:
6884		  case R_PPC64_GOT_TLSLD16_LO:
6885		  case R_PPC64_GOT_TLSLD16_HI:
6886		  case R_PPC64_GOT_TLSLD16_HA:
6887		    /* These relocs should never be against a symbol
6888		       defined in a shared lib.  Leave them alone if
6889		       that turns out to be the case.  */
6890		    ppc64_tlsld_got (ibfd)->refcount -= 1;
6891		    if (!is_local)
6892		      continue;
6893
6894		    /* LD -> LE */
6895		    tls_set = 0;
6896		    tls_clear = TLS_LD;
6897		    tls_type = TLS_TLS | TLS_LD;
6898		    expecting_tls_get_addr = 1;
6899		    break;
6900
6901		  case R_PPC64_GOT_TLSGD16:
6902		  case R_PPC64_GOT_TLSGD16_LO:
6903		  case R_PPC64_GOT_TLSGD16_HI:
6904		  case R_PPC64_GOT_TLSGD16_HA:
6905		    if (ok_tprel)
6906		      /* GD -> LE */
6907		      tls_set = 0;
6908		    else
6909		      /* GD -> IE */
6910		      tls_set = TLS_TLS | TLS_TPRELGD;
6911		    tls_clear = TLS_GD;
6912		    tls_type = TLS_TLS | TLS_GD;
6913		    expecting_tls_get_addr = 1;
6914		    break;
6915
6916		  case R_PPC64_GOT_TPREL16_DS:
6917		  case R_PPC64_GOT_TPREL16_LO_DS:
6918		  case R_PPC64_GOT_TPREL16_HI:
6919		  case R_PPC64_GOT_TPREL16_HA:
6920		    expecting_tls_get_addr = 0;
6921		    if (ok_tprel)
6922		      {
6923			/* IE -> LE */
6924			tls_set = 0;
6925			tls_clear = TLS_TPREL;
6926			tls_type = TLS_TLS | TLS_TPREL;
6927			break;
6928		      }
6929		    else
6930		      continue;
6931
6932		  case R_PPC64_REL14:
6933		  case R_PPC64_REL14_BRTAKEN:
6934		  case R_PPC64_REL14_BRNTAKEN:
6935		  case R_PPC64_REL24:
6936		    if (h != NULL
6937			&& (h == &htab->tls_get_addr->elf
6938			    || h == &htab->tls_get_addr_fd->elf))
6939		      {
6940			if (!expecting_tls_get_addr
6941			    && rel != relstart
6942			    && ((ELF64_R_TYPE (rel[-1].r_info)
6943				 == R_PPC64_TOC16)
6944				|| (ELF64_R_TYPE (rel[-1].r_info)
6945				    == R_PPC64_TOC16_LO)))
6946			  {
6947			    /* Check for toc tls entries.  */
6948			    char *toc_tls;
6949			    int retval;
6950
6951			    retval = get_tls_mask (&toc_tls, NULL, &locsyms,
6952						   rel - 1, ibfd);
6953			    if (retval == 0)
6954			      goto err_free_rel;
6955			    if (retval > 1 && toc_tls != NULL)
6956			      {
6957				expecting_tls_get_addr = 1;
6958				if (toc_ref != NULL)
6959				  toc_ref[toc_ref_index] = 1;
6960			      }
6961			  }
6962
6963			if (expecting_tls_get_addr)
6964			  {
6965			    struct plt_entry *ent;
6966			    for (ent = h->plt.plist; ent; ent = ent->next)
6967			      if (ent->addend == 0)
6968				{
6969				  if (ent->plt.refcount > 0)
6970				    ent->plt.refcount -= 1;
6971				  break;
6972				}
6973			  }
6974		      }
6975		    expecting_tls_get_addr = 0;
6976		    continue;
6977
6978		  case R_PPC64_TOC16:
6979		  case R_PPC64_TOC16_LO:
6980		  case R_PPC64_TLS:
6981		    expecting_tls_get_addr = 0;
6982		    if (sym_sec == toc && toc != NULL)
6983		      {
6984			/* Mark this toc entry as referenced by a TLS
6985			   code sequence.  We can do that now in the
6986			   case of R_PPC64_TLS, and after checking for
6987			   tls_get_addr for the TOC16 relocs.  */
6988			if (toc_ref == NULL)
6989			  {
6990			    toc_ref = bfd_zmalloc (toc->size / 8);
6991			    if (toc_ref == NULL)
6992			      goto err_free_rel;
6993			  }
6994			if (h != NULL)
6995			  value = h->root.u.def.value;
6996			else
6997			  value = sym->st_value;
6998			value += rel->r_addend;
6999			BFD_ASSERT (value < toc->size && value % 8 == 0);
7000			toc_ref_index = value / 8;
7001			if (r_type == R_PPC64_TLS)
7002			  toc_ref[toc_ref_index] = 1;
7003		      }
7004		    continue;
7005
7006		  case R_PPC64_TPREL64:
7007		    expecting_tls_get_addr = 0;
7008		    if (sec != toc
7009			|| toc_ref == NULL
7010			|| !toc_ref[rel->r_offset / 8])
7011		      continue;
7012		    if (ok_tprel)
7013		      {
7014			/* IE -> LE */
7015			tls_set = TLS_EXPLICIT;
7016			tls_clear = TLS_TPREL;
7017			break;
7018		      }
7019		    else
7020		      continue;
7021
7022		  case R_PPC64_DTPMOD64:
7023		    expecting_tls_get_addr = 0;
7024		    if (sec != toc
7025			|| toc_ref == NULL
7026			|| !toc_ref[rel->r_offset / 8])
7027		      continue;
7028		    if (rel + 1 < relend
7029			&& (rel[1].r_info
7030			    == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
7031			&& rel[1].r_offset == rel->r_offset + 8)
7032		      {
7033			if (ok_tprel)
7034			  /* GD -> LE */
7035			  tls_set = TLS_EXPLICIT | TLS_GD;
7036			else
7037			  /* GD -> IE */
7038			  tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
7039			tls_clear = TLS_GD;
7040		      }
7041		    else
7042		      {
7043			if (!is_local)
7044			  continue;
7045
7046			/* LD -> LE */
7047			tls_set = TLS_EXPLICIT;
7048			tls_clear = TLS_LD;
7049		      }
7050		    break;
7051
7052		  default:
7053		    expecting_tls_get_addr = 0;
7054		    continue;
7055		  }
7056
7057		if ((tls_set & TLS_EXPLICIT) == 0)
7058		  {
7059		    struct got_entry *ent;
7060
7061		    /* Adjust got entry for this reloc.  */
7062		    if (h != NULL)
7063		      ent = h->got.glist;
7064		    else
7065		      ent = elf_local_got_ents (ibfd)[r_symndx];
7066
7067		    for (; ent != NULL; ent = ent->next)
7068		      if (ent->addend == rel->r_addend
7069			  && ent->owner == ibfd
7070			  && ent->tls_type == tls_type)
7071			break;
7072		    if (ent == NULL)
7073		      abort ();
7074
7075		    if (tls_set == 0)
7076		      {
7077			/* We managed to get rid of a got entry.  */
7078			if (ent->got.refcount > 0)
7079			  ent->got.refcount -= 1;
7080		      }
7081		  }
7082		else
7083		  {
7084		    /* If we got rid of a DTPMOD/DTPREL reloc pair then
7085		       we'll lose one or two dyn relocs.  */
7086		    if (!dec_dynrel_count (rel->r_info, sec, info,
7087					   NULL, h, sym_sec))
7088		      return FALSE;
7089
7090		    if (tls_set == (TLS_EXPLICIT | TLS_GD))
7091		      {
7092			if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
7093					       NULL, h, sym_sec))
7094			  return FALSE;
7095		      }
7096		  }
7097
7098		*tls_mask |= tls_set;
7099		*tls_mask &= ~tls_clear;
7100	      }
7101
7102	    if (elf_section_data (sec)->relocs != relstart)
7103	      free (relstart);
7104	  }
7105
7106      if (toc_ref != NULL)
7107	free (toc_ref);
7108
7109      if (locsyms != NULL
7110	  && (elf_tdata (ibfd)->symtab_hdr.contents
7111	      != (unsigned char *) locsyms))
7112	{
7113	  if (!info->keep_memory)
7114	    free (locsyms);
7115	  else
7116	    elf_tdata (ibfd)->symtab_hdr.contents = (unsigned char *) locsyms;
7117	}
7118    }
7119  return TRUE;
7120}
7121
7122/* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
7123   the values of any global symbols in a toc section that has been
7124   edited.  Globals in toc sections should be a rarity, so this function
7125   sets a flag if any are found in toc sections other than the one just
7126   edited, so that futher hash table traversals can be avoided.  */
7127
7128struct adjust_toc_info
7129{
7130  asection *toc;
7131  unsigned long *skip;
7132  bfd_boolean global_toc_syms;
7133};
7134
7135static bfd_boolean
7136adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
7137{
7138  struct ppc_link_hash_entry *eh;
7139  struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
7140
7141  if (h->root.type == bfd_link_hash_indirect)
7142    return TRUE;
7143
7144  if (h->root.type == bfd_link_hash_warning)
7145    h = (struct elf_link_hash_entry *) h->root.u.i.link;
7146
7147  if (h->root.type != bfd_link_hash_defined
7148      && h->root.type != bfd_link_hash_defweak)
7149    return TRUE;
7150
7151  eh = (struct ppc_link_hash_entry *) h;
7152  if (eh->adjust_done)
7153    return TRUE;
7154
7155  if (eh->elf.root.u.def.section == toc_inf->toc)
7156    {
7157      unsigned long skip = toc_inf->skip[eh->elf.root.u.def.value >> 3];
7158      if (skip != (unsigned long) -1)
7159	eh->elf.root.u.def.value -= skip;
7160      else
7161	{
7162	  (*_bfd_error_handler)
7163	    (_("%s defined in removed toc entry"), eh->elf.root.root.string);
7164	  eh->elf.root.u.def.section = &bfd_abs_section;
7165	  eh->elf.root.u.def.value = 0;
7166	}
7167      eh->adjust_done = 1;
7168    }
7169  else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
7170    toc_inf->global_toc_syms = TRUE;
7171
7172  return TRUE;
7173}
7174
7175/* Examine all relocs referencing .toc sections in order to remove
7176   unused .toc entries.  */
7177
7178bfd_boolean
7179ppc64_elf_edit_toc (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
7180{
7181  bfd *ibfd;
7182  struct adjust_toc_info toc_inf;
7183
7184  toc_inf.global_toc_syms = TRUE;
7185  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7186    {
7187      asection *toc, *sec;
7188      Elf_Internal_Shdr *symtab_hdr;
7189      Elf_Internal_Sym *local_syms;
7190      struct elf_link_hash_entry **sym_hashes;
7191      Elf_Internal_Rela *relstart, *rel;
7192      unsigned long *skip, *drop;
7193      unsigned char *used;
7194      unsigned char *keep, last, some_unused;
7195
7196      toc = bfd_get_section_by_name (ibfd, ".toc");
7197      if (toc == NULL
7198	  || toc->size == 0
7199	  || toc->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
7200	  || elf_discarded_section (toc))
7201	continue;
7202
7203      local_syms = NULL;
7204      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
7205      sym_hashes = elf_sym_hashes (ibfd);
7206
7207      /* Look at sections dropped from the final link.  */
7208      skip = NULL;
7209      relstart = NULL;
7210      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7211	{
7212	  if (sec->reloc_count == 0
7213	      || !elf_discarded_section (sec)
7214	      || get_opd_info (sec)
7215	      || (sec->flags & SEC_ALLOC) == 0
7216	      || (sec->flags & SEC_DEBUGGING) != 0)
7217	    continue;
7218
7219	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
7220	  if (relstart == NULL)
7221	    goto error_ret;
7222
7223	  /* Run through the relocs to see which toc entries might be
7224	     unused.  */
7225	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
7226	    {
7227	      enum elf_ppc64_reloc_type r_type;
7228	      unsigned long r_symndx;
7229	      asection *sym_sec;
7230	      struct elf_link_hash_entry *h;
7231	      Elf_Internal_Sym *sym;
7232	      bfd_vma val;
7233
7234	      r_type = ELF64_R_TYPE (rel->r_info);
7235	      switch (r_type)
7236		{
7237		default:
7238		  continue;
7239
7240		case R_PPC64_TOC16:
7241		case R_PPC64_TOC16_LO:
7242		case R_PPC64_TOC16_HI:
7243		case R_PPC64_TOC16_HA:
7244		case R_PPC64_TOC16_DS:
7245		case R_PPC64_TOC16_LO_DS:
7246		  break;
7247		}
7248
7249	      r_symndx = ELF64_R_SYM (rel->r_info);
7250	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7251			      r_symndx, ibfd))
7252		goto error_ret;
7253
7254	      if (sym_sec != toc)
7255		continue;
7256
7257	      if (h != NULL)
7258		val = h->root.u.def.value;
7259	      else
7260		val = sym->st_value;
7261	      val += rel->r_addend;
7262
7263	      if (val >= toc->size)
7264		continue;
7265
7266	      /* Anything in the toc ought to be aligned to 8 bytes.
7267		 If not, don't mark as unused.  */
7268	      if (val & 7)
7269		continue;
7270
7271	      if (skip == NULL)
7272		{
7273		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 7) / 8);
7274		  if (skip == NULL)
7275		    goto error_ret;
7276		}
7277
7278	      skip[val >> 3] = 1;
7279	    }
7280
7281	  if (elf_section_data (sec)->relocs != relstart)
7282	    free (relstart);
7283	}
7284
7285      if (skip == NULL)
7286	continue;
7287
7288      used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
7289      if (used == NULL)
7290	{
7291	error_ret:
7292	  if (local_syms != NULL
7293	      && symtab_hdr->contents != (unsigned char *) local_syms)
7294	    free (local_syms);
7295	  if (sec != NULL
7296	      && relstart != NULL
7297	      && elf_section_data (sec)->relocs != relstart)
7298	    free (relstart);
7299	  if (skip != NULL)
7300	    free (skip);
7301	  return FALSE;
7302	}
7303
7304      /* Now check all kept sections that might reference the toc.
7305	 Check the toc itself last.  */
7306      for (sec = (ibfd->sections == toc && toc->next ? toc->next
7307		  : ibfd->sections);
7308	   sec != NULL;
7309	   sec = (sec == toc ? NULL
7310		  : sec->next == NULL ? toc
7311		  : sec->next == toc && toc->next ? toc->next
7312		  : sec->next))
7313	{
7314	  int repeat;
7315
7316	  if (sec->reloc_count == 0
7317	      || elf_discarded_section (sec)
7318	      || get_opd_info (sec)
7319	      || (sec->flags & SEC_ALLOC) == 0
7320	      || (sec->flags & SEC_DEBUGGING) != 0)
7321	    continue;
7322
7323	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, TRUE);
7324	  if (relstart == NULL)
7325	    goto error_ret;
7326
7327	  /* Mark toc entries referenced as used.  */
7328	  repeat = 0;
7329	  do
7330	    for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
7331	      {
7332		enum elf_ppc64_reloc_type r_type;
7333		unsigned long r_symndx;
7334		asection *sym_sec;
7335		struct elf_link_hash_entry *h;
7336		Elf_Internal_Sym *sym;
7337		bfd_vma val;
7338
7339		r_type = ELF64_R_TYPE (rel->r_info);
7340		switch (r_type)
7341		  {
7342		  case R_PPC64_TOC16:
7343		  case R_PPC64_TOC16_LO:
7344		  case R_PPC64_TOC16_HI:
7345		  case R_PPC64_TOC16_HA:
7346		  case R_PPC64_TOC16_DS:
7347		  case R_PPC64_TOC16_LO_DS:
7348		    /* In case we're taking addresses of toc entries.  */
7349		  case R_PPC64_ADDR64:
7350		    break;
7351
7352		  default:
7353		    continue;
7354		  }
7355
7356		r_symndx = ELF64_R_SYM (rel->r_info);
7357		if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7358				r_symndx, ibfd))
7359		  {
7360		    free (used);
7361		    goto error_ret;
7362		  }
7363
7364		if (sym_sec != toc)
7365		  continue;
7366
7367		if (h != NULL)
7368		  val = h->root.u.def.value;
7369		else
7370		  val = sym->st_value;
7371		val += rel->r_addend;
7372
7373		if (val >= toc->size)
7374		  continue;
7375
7376		/* For the toc section, we only mark as used if
7377		   this entry itself isn't unused.  */
7378		if (sec == toc
7379		    && !used[val >> 3]
7380		    && (used[rel->r_offset >> 3]
7381			|| !skip[rel->r_offset >> 3]))
7382		  /* Do all the relocs again, to catch reference
7383		     chains.  */
7384		  repeat = 1;
7385
7386		used[val >> 3] = 1;
7387	      }
7388	  while (repeat);
7389	}
7390
7391      /* Merge the used and skip arrays.  Assume that TOC
7392	 doublewords not appearing as either used or unused belong
7393	 to to an entry more than one doubleword in size.  */
7394      for (drop = skip, keep = used, last = 0, some_unused = 0;
7395	   drop < skip + (toc->size + 7) / 8;
7396	   ++drop, ++keep)
7397	{
7398	  if (*keep)
7399	    {
7400	      *drop = 0;
7401	      last = 0;
7402	    }
7403	  else if (*drop)
7404	    {
7405	      some_unused = 1;
7406	      last = 1;
7407	    }
7408	  else
7409	    *drop = last;
7410	}
7411
7412      free (used);
7413
7414      if (some_unused)
7415	{
7416	  bfd_byte *contents, *src;
7417	  unsigned long off;
7418
7419	  /* Shuffle the toc contents, and at the same time convert the
7420	     skip array from booleans into offsets.  */
7421	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
7422	    goto error_ret;
7423
7424	  elf_section_data (toc)->this_hdr.contents = contents;
7425
7426	  for (src = contents, off = 0, drop = skip;
7427	       src < contents + toc->size;
7428	       src += 8, ++drop)
7429	    {
7430	      if (*drop)
7431		{
7432		  *drop = (unsigned long) -1;
7433		  off += 8;
7434		}
7435	      else if (off != 0)
7436		{
7437		  *drop = off;
7438		  memcpy (src - off, src, 8);
7439		}
7440	    }
7441	  toc->rawsize = toc->size;
7442	  toc->size = src - contents - off;
7443
7444	  if (toc->reloc_count != 0)
7445	    {
7446	      Elf_Internal_Rela *wrel;
7447	      bfd_size_type sz;
7448
7449	      /* Read toc relocs.  */
7450	      relstart = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
7451						    TRUE);
7452	      if (relstart == NULL)
7453		goto error_ret;
7454
7455	      /* Remove unused toc relocs, and adjust those we keep.  */
7456	      wrel = relstart;
7457	      for (rel = relstart; rel < relstart + toc->reloc_count; ++rel)
7458		if (skip[rel->r_offset >> 3] != (unsigned long) -1)
7459		  {
7460		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
7461		    wrel->r_info = rel->r_info;
7462		    wrel->r_addend = rel->r_addend;
7463		    ++wrel;
7464		  }
7465		else if (!dec_dynrel_count (rel->r_info, toc, info,
7466					    &local_syms, NULL, NULL))
7467		  goto error_ret;
7468
7469	      toc->reloc_count = wrel - relstart;
7470	      sz = elf_section_data (toc)->rel_hdr.sh_entsize;
7471	      elf_section_data (toc)->rel_hdr.sh_size = toc->reloc_count * sz;
7472	      BFD_ASSERT (elf_section_data (toc)->rel_hdr2 == NULL);
7473	    }
7474
7475	  /* Adjust addends for relocs against the toc section sym.  */
7476	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7477	    {
7478	      if (sec->reloc_count == 0
7479		  || elf_discarded_section (sec))
7480		continue;
7481
7482	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7483						    TRUE);
7484	      if (relstart == NULL)
7485		goto error_ret;
7486
7487	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
7488		{
7489		  enum elf_ppc64_reloc_type r_type;
7490		  unsigned long r_symndx;
7491		  asection *sym_sec;
7492		  struct elf_link_hash_entry *h;
7493		  Elf_Internal_Sym *sym;
7494
7495		  r_type = ELF64_R_TYPE (rel->r_info);
7496		  switch (r_type)
7497		    {
7498		    default:
7499		      continue;
7500
7501		    case R_PPC64_TOC16:
7502		    case R_PPC64_TOC16_LO:
7503		    case R_PPC64_TOC16_HI:
7504		    case R_PPC64_TOC16_HA:
7505		    case R_PPC64_TOC16_DS:
7506		    case R_PPC64_TOC16_LO_DS:
7507		    case R_PPC64_ADDR64:
7508		      break;
7509		    }
7510
7511		  r_symndx = ELF64_R_SYM (rel->r_info);
7512		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7513				  r_symndx, ibfd))
7514		    goto error_ret;
7515
7516		  if (sym_sec != toc || h != NULL || sym->st_value != 0)
7517		    continue;
7518
7519		  rel->r_addend -= skip[rel->r_addend >> 3];
7520		}
7521	    }
7522
7523	  /* We shouldn't have local or global symbols defined in the TOC,
7524	     but handle them anyway.  */
7525	  if (local_syms != NULL)
7526	    {
7527	      Elf_Internal_Sym *sym;
7528
7529	      for (sym = local_syms;
7530		   sym < local_syms + symtab_hdr->sh_info;
7531		   ++sym)
7532		if (sym->st_shndx != SHN_UNDEF
7533		    && (sym->st_shndx < SHN_LORESERVE
7534			|| sym->st_shndx > SHN_HIRESERVE)
7535		    && sym->st_value != 0
7536		    && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
7537		  {
7538		    if (skip[sym->st_value >> 3] != (unsigned long) -1)
7539		      sym->st_value -= skip[sym->st_value >> 3];
7540		    else
7541		      {
7542			(*_bfd_error_handler)
7543			  (_("%s defined in removed toc entry"),
7544			   bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7545					     NULL));
7546			sym->st_value = 0;
7547			sym->st_shndx = SHN_ABS;
7548		      }
7549		    symtab_hdr->contents = (unsigned char *) local_syms;
7550		  }
7551	    }
7552
7553	  /* Finally, adjust any global syms defined in the toc.  */
7554	  if (toc_inf.global_toc_syms)
7555	    {
7556	      toc_inf.toc = toc;
7557	      toc_inf.skip = skip;
7558	      toc_inf.global_toc_syms = FALSE;
7559	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
7560				      &toc_inf);
7561	    }
7562	}
7563
7564      if (local_syms != NULL
7565	  && symtab_hdr->contents != (unsigned char *) local_syms)
7566	{
7567	  if (!info->keep_memory)
7568	    free (local_syms);
7569	  else
7570	    symtab_hdr->contents = (unsigned char *) local_syms;
7571	}
7572      free (skip);
7573    }
7574
7575  return TRUE;
7576}
7577
7578/* Allocate space in .plt, .got and associated reloc sections for
7579   dynamic relocs.  */
7580
7581static bfd_boolean
7582allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
7583{
7584  struct bfd_link_info *info;
7585  struct ppc_link_hash_table *htab;
7586  asection *s;
7587  struct ppc_link_hash_entry *eh;
7588  struct ppc_dyn_relocs *p;
7589  struct got_entry *gent;
7590
7591  if (h->root.type == bfd_link_hash_indirect)
7592    return TRUE;
7593
7594  if (h->root.type == bfd_link_hash_warning)
7595    h = (struct elf_link_hash_entry *) h->root.u.i.link;
7596
7597  info = (struct bfd_link_info *) inf;
7598  htab = ppc_hash_table (info);
7599
7600  if (htab->elf.dynamic_sections_created
7601      && h->dynindx != -1
7602      && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
7603    {
7604      struct plt_entry *pent;
7605      bfd_boolean doneone = FALSE;
7606      for (pent = h->plt.plist; pent != NULL; pent = pent->next)
7607	if (pent->plt.refcount > 0)
7608	  {
7609	    /* If this is the first .plt entry, make room for the special
7610	       first entry.  */
7611	    s = htab->plt;
7612	    if (s->size == 0)
7613	      s->size += PLT_INITIAL_ENTRY_SIZE;
7614
7615	    pent->plt.offset = s->size;
7616
7617	    /* Make room for this entry.  */
7618	    s->size += PLT_ENTRY_SIZE;
7619
7620	    /* Make room for the .glink code.  */
7621	    s = htab->glink;
7622	    if (s->size == 0)
7623	      s->size += GLINK_CALL_STUB_SIZE;
7624	    /* We need bigger stubs past index 32767.  */
7625	    if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
7626	      s->size += 4;
7627	    s->size += 2*4;
7628
7629	    /* We also need to make an entry in the .rela.plt section.  */
7630	    s = htab->relplt;
7631	    s->size += sizeof (Elf64_External_Rela);
7632	    doneone = TRUE;
7633	  }
7634	else
7635	  pent->plt.offset = (bfd_vma) -1;
7636      if (!doneone)
7637	{
7638	  h->plt.plist = NULL;
7639	  h->needs_plt = 0;
7640	}
7641    }
7642  else
7643    {
7644      h->plt.plist = NULL;
7645      h->needs_plt = 0;
7646    }
7647
7648  eh = (struct ppc_link_hash_entry *) h;
7649  /* Run through the TLS GD got entries first if we're changing them
7650     to TPREL.  */
7651  if ((eh->tls_mask & TLS_TPRELGD) != 0)
7652    for (gent = h->got.glist; gent != NULL; gent = gent->next)
7653      if (gent->got.refcount > 0
7654	  && (gent->tls_type & TLS_GD) != 0)
7655	{
7656	  /* This was a GD entry that has been converted to TPREL.  If
7657	     there happens to be a TPREL entry we can use that one.  */
7658	  struct got_entry *ent;
7659	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
7660	    if (ent->got.refcount > 0
7661		&& (ent->tls_type & TLS_TPREL) != 0
7662		&& ent->addend == gent->addend
7663		&& ent->owner == gent->owner)
7664	      {
7665		gent->got.refcount = 0;
7666		break;
7667	      }
7668
7669	  /* If not, then we'll be using our own TPREL entry.  */
7670	  if (gent->got.refcount != 0)
7671	    gent->tls_type = TLS_TLS | TLS_TPREL;
7672	}
7673
7674  for (gent = h->got.glist; gent != NULL; gent = gent->next)
7675    if (gent->got.refcount > 0)
7676      {
7677	bfd_boolean dyn;
7678
7679	/* Make sure this symbol is output as a dynamic symbol.
7680	   Undefined weak syms won't yet be marked as dynamic,
7681	   nor will all TLS symbols.  */
7682	if (h->dynindx == -1
7683	    && !h->forced_local)
7684	  {
7685	    if (! bfd_elf_link_record_dynamic_symbol (info, h))
7686	      return FALSE;
7687	  }
7688
7689	if ((gent->tls_type & TLS_LD) != 0
7690	    && !h->def_dynamic)
7691	  {
7692	    gent->got.offset = ppc64_tlsld_got (gent->owner)->offset;
7693	    continue;
7694	  }
7695
7696	s = ppc64_elf_tdata (gent->owner)->got;
7697	gent->got.offset = s->size;
7698	s->size
7699	  += (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)) ? 16 : 8;
7700	dyn = htab->elf.dynamic_sections_created;
7701	if ((info->shared
7702	     || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
7703	    && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
7704		|| h->root.type != bfd_link_hash_undefweak))
7705	  ppc64_elf_tdata (gent->owner)->relgot->size
7706	    += (gent->tls_type & eh->tls_mask & TLS_GD
7707		? 2 * sizeof (Elf64_External_Rela)
7708		: sizeof (Elf64_External_Rela));
7709      }
7710    else
7711      gent->got.offset = (bfd_vma) -1;
7712
7713  if (eh->dyn_relocs == NULL)
7714    return TRUE;
7715
7716  /* In the shared -Bsymbolic case, discard space allocated for
7717     dynamic pc-relative relocs against symbols which turn out to be
7718     defined in regular objects.  For the normal shared case, discard
7719     space for relocs that have become local due to symbol visibility
7720     changes.  */
7721
7722  if (info->shared)
7723    {
7724      /* Relocs that use pc_count are those that appear on a call insn,
7725	 or certain REL relocs (see MUST_BE_DYN_RELOC) that can be
7726	 generated via assembly.  We want calls to protected symbols to
7727	 resolve directly to the function rather than going via the plt.
7728	 If people want function pointer comparisons to work as expected
7729	 then they should avoid writing weird assembly.  */
7730      if (SYMBOL_CALLS_LOCAL (info, h))
7731	{
7732	  struct ppc_dyn_relocs **pp;
7733
7734	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
7735	    {
7736	      p->count -= p->pc_count;
7737	      p->pc_count = 0;
7738	      if (p->count == 0)
7739		*pp = p->next;
7740	      else
7741		pp = &p->next;
7742	    }
7743	}
7744
7745      /* Also discard relocs on undefined weak syms with non-default
7746	 visibility.  */
7747      if (eh->dyn_relocs != NULL
7748	  && h->root.type == bfd_link_hash_undefweak)
7749	{
7750	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
7751	    eh->dyn_relocs = NULL;
7752
7753	  /* Make sure this symbol is output as a dynamic symbol.
7754	     Undefined weak syms won't yet be marked as dynamic.  */
7755	  else if (h->dynindx == -1
7756		   && !h->forced_local)
7757	    {
7758	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
7759		return FALSE;
7760	    }
7761	}
7762    }
7763  else if (ELIMINATE_COPY_RELOCS)
7764    {
7765      /* For the non-shared case, discard space for relocs against
7766	 symbols which turn out to need copy relocs or are not
7767	 dynamic.  */
7768
7769      if (!h->non_got_ref
7770	  && h->def_dynamic
7771	  && !h->def_regular)
7772	{
7773	  /* Make sure this symbol is output as a dynamic symbol.
7774	     Undefined weak syms won't yet be marked as dynamic.  */
7775	  if (h->dynindx == -1
7776	      && !h->forced_local)
7777	    {
7778	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
7779		return FALSE;
7780	    }
7781
7782	  /* If that succeeded, we know we'll be keeping all the
7783	     relocs.  */
7784	  if (h->dynindx != -1)
7785	    goto keep;
7786	}
7787
7788      eh->dyn_relocs = NULL;
7789
7790    keep: ;
7791    }
7792
7793  /* Finally, allocate space.  */
7794  for (p = eh->dyn_relocs; p != NULL; p = p->next)
7795    {
7796      asection *sreloc = elf_section_data (p->sec)->sreloc;
7797      sreloc->size += p->count * sizeof (Elf64_External_Rela);
7798    }
7799
7800  return TRUE;
7801}
7802
7803/* Find any dynamic relocs that apply to read-only sections.  */
7804
7805static bfd_boolean
7806readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
7807{
7808  struct ppc_link_hash_entry *eh;
7809  struct ppc_dyn_relocs *p;
7810
7811  if (h->root.type == bfd_link_hash_warning)
7812    h = (struct elf_link_hash_entry *) h->root.u.i.link;
7813
7814  eh = (struct ppc_link_hash_entry *) h;
7815  for (p = eh->dyn_relocs; p != NULL; p = p->next)
7816    {
7817      asection *s = p->sec->output_section;
7818
7819      if (s != NULL && (s->flags & SEC_READONLY) != 0)
7820	{
7821	  struct bfd_link_info *info = inf;
7822
7823	  info->flags |= DF_TEXTREL;
7824
7825	  /* Not an error, just cut short the traversal.  */
7826	  return FALSE;
7827	}
7828    }
7829  return TRUE;
7830}
7831
7832/* Set the sizes of the dynamic sections.  */
7833
7834static bfd_boolean
7835ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
7836				 struct bfd_link_info *info)
7837{
7838  struct ppc_link_hash_table *htab;
7839  bfd *dynobj;
7840  asection *s;
7841  bfd_boolean relocs;
7842  bfd *ibfd;
7843
7844  htab = ppc_hash_table (info);
7845  dynobj = htab->elf.dynobj;
7846  if (dynobj == NULL)
7847    abort ();
7848
7849  if (htab->elf.dynamic_sections_created)
7850    {
7851      /* Set the contents of the .interp section to the interpreter.  */
7852      if (info->executable)
7853	{
7854	  s = bfd_get_section_by_name (dynobj, ".interp");
7855	  if (s == NULL)
7856	    abort ();
7857	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
7858	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
7859	}
7860    }
7861
7862  /* Set up .got offsets for local syms, and space for local dynamic
7863     relocs.  */
7864  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7865    {
7866      struct got_entry **lgot_ents;
7867      struct got_entry **end_lgot_ents;
7868      char *lgot_masks;
7869      bfd_size_type locsymcount;
7870      Elf_Internal_Shdr *symtab_hdr;
7871      asection *srel;
7872
7873      if (!is_ppc64_elf_target (ibfd->xvec))
7874	continue;
7875
7876      if (ppc64_tlsld_got (ibfd)->refcount > 0)
7877	{
7878	  s = ppc64_elf_tdata (ibfd)->got;
7879	  ppc64_tlsld_got (ibfd)->offset = s->size;
7880	  s->size += 16;
7881	  if (info->shared)
7882	    {
7883	      srel = ppc64_elf_tdata (ibfd)->relgot;
7884	      srel->size += sizeof (Elf64_External_Rela);
7885	    }
7886	}
7887      else
7888	ppc64_tlsld_got (ibfd)->offset = (bfd_vma) -1;
7889
7890      for (s = ibfd->sections; s != NULL; s = s->next)
7891	{
7892	  struct ppc_dyn_relocs *p;
7893
7894	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
7895	    {
7896	      if (!bfd_is_abs_section (p->sec)
7897		  && bfd_is_abs_section (p->sec->output_section))
7898		{
7899		  /* Input section has been discarded, either because
7900		     it is a copy of a linkonce section or due to
7901		     linker script /DISCARD/, so we'll be discarding
7902		     the relocs too.  */
7903		}
7904	      else if (p->count != 0)
7905		{
7906		  srel = elf_section_data (p->sec)->sreloc;
7907		  srel->size += p->count * sizeof (Elf64_External_Rela);
7908		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
7909		    info->flags |= DF_TEXTREL;
7910		}
7911	    }
7912	}
7913
7914      lgot_ents = elf_local_got_ents (ibfd);
7915      if (!lgot_ents)
7916	continue;
7917
7918      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
7919      locsymcount = symtab_hdr->sh_info;
7920      end_lgot_ents = lgot_ents + locsymcount;
7921      lgot_masks = (char *) end_lgot_ents;
7922      s = ppc64_elf_tdata (ibfd)->got;
7923      srel = ppc64_elf_tdata (ibfd)->relgot;
7924      for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
7925	{
7926	  struct got_entry *ent;
7927
7928	  for (ent = *lgot_ents; ent != NULL; ent = ent->next)
7929	    if (ent->got.refcount > 0)
7930	      {
7931		if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
7932		  {
7933		    if (ppc64_tlsld_got (ibfd)->offset == (bfd_vma) -1)
7934		      {
7935			ppc64_tlsld_got (ibfd)->offset = s->size;
7936			s->size += 16;
7937			if (info->shared)
7938			  srel->size += sizeof (Elf64_External_Rela);
7939		      }
7940		    ent->got.offset = ppc64_tlsld_got (ibfd)->offset;
7941		  }
7942		else
7943		  {
7944		    ent->got.offset = s->size;
7945		    if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
7946		      {
7947			s->size += 16;
7948			if (info->shared)
7949			  srel->size += 2 * sizeof (Elf64_External_Rela);
7950		      }
7951		    else
7952		      {
7953			s->size += 8;
7954			if (info->shared)
7955			  srel->size += sizeof (Elf64_External_Rela);
7956		      }
7957		  }
7958	      }
7959	    else
7960	      ent->got.offset = (bfd_vma) -1;
7961	}
7962    }
7963
7964  /* Allocate global sym .plt and .got entries, and space for global
7965     sym dynamic relocs.  */
7966  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
7967
7968  /* We now have determined the sizes of the various dynamic sections.
7969     Allocate memory for them.  */
7970  relocs = FALSE;
7971  for (s = dynobj->sections; s != NULL; s = s->next)
7972    {
7973      if ((s->flags & SEC_LINKER_CREATED) == 0)
7974	continue;
7975
7976      if (s == htab->brlt || s == htab->relbrlt)
7977	/* These haven't been allocated yet;  don't strip.  */
7978	continue;
7979      else if (s == htab->got
7980	       || s == htab->plt
7981	       || s == htab->glink
7982	       || s == htab->dynbss)
7983	{
7984	  /* Strip this section if we don't need it; see the
7985	     comment below.  */
7986	}
7987      else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
7988	{
7989	  if (s->size != 0)
7990	    {
7991	      if (s != htab->relplt)
7992		relocs = TRUE;
7993
7994	      /* We use the reloc_count field as a counter if we need
7995		 to copy relocs into the output file.  */
7996	      s->reloc_count = 0;
7997	    }
7998	}
7999      else
8000	{
8001	  /* It's not one of our sections, so don't allocate space.  */
8002	  continue;
8003	}
8004
8005      if (s->size == 0)
8006	{
8007	  /* If we don't need this section, strip it from the
8008	     output file.  This is mostly to handle .rela.bss and
8009	     .rela.plt.  We must create both sections in
8010	     create_dynamic_sections, because they must be created
8011	     before the linker maps input sections to output
8012	     sections.  The linker does that before
8013	     adjust_dynamic_symbol is called, and it is that
8014	     function which decides whether anything needs to go
8015	     into these sections.  */
8016	  s->flags |= SEC_EXCLUDE;
8017	  continue;
8018	}
8019
8020      if ((s->flags & SEC_HAS_CONTENTS) == 0)
8021	continue;
8022
8023      /* Allocate memory for the section contents.  We use bfd_zalloc
8024	 here in case unused entries are not reclaimed before the
8025	 section's contents are written out.  This should not happen,
8026	 but this way if it does we get a R_PPC64_NONE reloc in .rela
8027	 sections instead of garbage.
8028	 We also rely on the section contents being zero when writing
8029	 the GOT.  */
8030      s->contents = bfd_zalloc (dynobj, s->size);
8031      if (s->contents == NULL)
8032	return FALSE;
8033    }
8034
8035  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
8036    {
8037      if (!is_ppc64_elf_target (ibfd->xvec))
8038	continue;
8039
8040      s = ppc64_elf_tdata (ibfd)->got;
8041      if (s != NULL && s != htab->got)
8042	{
8043	  if (s->size == 0)
8044	    s->flags |= SEC_EXCLUDE;
8045	  else
8046	    {
8047	      s->contents = bfd_zalloc (ibfd, s->size);
8048	      if (s->contents == NULL)
8049		return FALSE;
8050	    }
8051	}
8052      s = ppc64_elf_tdata (ibfd)->relgot;
8053      if (s != NULL)
8054	{
8055	  if (s->size == 0)
8056	    s->flags |= SEC_EXCLUDE;
8057	  else
8058	    {
8059	      s->contents = bfd_zalloc (ibfd, s->size);
8060	      if (s->contents == NULL)
8061		return FALSE;
8062	      relocs = TRUE;
8063	      s->reloc_count = 0;
8064	    }
8065	}
8066    }
8067
8068  if (htab->elf.dynamic_sections_created)
8069    {
8070      /* Add some entries to the .dynamic section.  We fill in the
8071	 values later, in ppc64_elf_finish_dynamic_sections, but we
8072	 must add the entries now so that we get the correct size for
8073	 the .dynamic section.  The DT_DEBUG entry is filled in by the
8074	 dynamic linker and used by the debugger.  */
8075#define add_dynamic_entry(TAG, VAL) \
8076  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
8077
8078      if (info->executable)
8079	{
8080	  if (!add_dynamic_entry (DT_DEBUG, 0))
8081	    return FALSE;
8082	}
8083
8084      if (htab->plt != NULL && htab->plt->size != 0)
8085	{
8086	  if (!add_dynamic_entry (DT_PLTGOT, 0)
8087	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
8088	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
8089	      || !add_dynamic_entry (DT_JMPREL, 0)
8090	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
8091	    return FALSE;
8092	}
8093
8094      if (NO_OPD_RELOCS)
8095	{
8096	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
8097	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
8098	    return FALSE;
8099	}
8100
8101      if (relocs)
8102	{
8103	  if (!add_dynamic_entry (DT_RELA, 0)
8104	      || !add_dynamic_entry (DT_RELASZ, 0)
8105	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
8106	    return FALSE;
8107
8108	  /* If any dynamic relocs apply to a read-only section,
8109	     then we need a DT_TEXTREL entry.  */
8110	  if ((info->flags & DF_TEXTREL) == 0)
8111	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
8112
8113	  if ((info->flags & DF_TEXTREL) != 0)
8114	    {
8115	      if (!add_dynamic_entry (DT_TEXTREL, 0))
8116		return FALSE;
8117	    }
8118	}
8119    }
8120#undef add_dynamic_entry
8121
8122  return TRUE;
8123}
8124
8125/* Determine the type of stub needed, if any, for a call.  */
8126
8127static inline enum ppc_stub_type
8128ppc_type_of_stub (asection *input_sec,
8129		  const Elf_Internal_Rela *rel,
8130		  struct ppc_link_hash_entry **hash,
8131		  bfd_vma destination)
8132{
8133  struct ppc_link_hash_entry *h = *hash;
8134  bfd_vma location;
8135  bfd_vma branch_offset;
8136  bfd_vma max_branch_offset;
8137  enum elf_ppc64_reloc_type r_type;
8138
8139  if (h != NULL)
8140    {
8141      struct ppc_link_hash_entry *fdh = h;
8142      if (fdh->oh != NULL
8143	  && fdh->oh->is_func_descriptor)
8144	fdh = fdh->oh;
8145
8146      if (fdh->elf.dynindx != -1)
8147	{
8148	  struct plt_entry *ent;
8149
8150	  for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
8151	    if (ent->addend == rel->r_addend
8152		&& ent->plt.offset != (bfd_vma) -1)
8153	      {
8154		*hash = fdh;
8155		return ppc_stub_plt_call;
8156	      }
8157	}
8158
8159      /* Here, we know we don't have a plt entry.  If we don't have a
8160	 either a defined function descriptor or a defined entry symbol
8161	 in a regular object file, then it is pointless trying to make
8162	 any other type of stub.  */
8163      if (!((fdh->elf.root.type == bfd_link_hash_defined
8164	    || fdh->elf.root.type == bfd_link_hash_defweak)
8165	    && fdh->elf.root.u.def.section->output_section != NULL)
8166	  && !((h->elf.root.type == bfd_link_hash_defined
8167		|| h->elf.root.type == bfd_link_hash_defweak)
8168	       && h->elf.root.u.def.section->output_section != NULL))
8169	return ppc_stub_none;
8170    }
8171
8172  /* Determine where the call point is.  */
8173  location = (input_sec->output_offset
8174	      + input_sec->output_section->vma
8175	      + rel->r_offset);
8176
8177  branch_offset = destination - location;
8178  r_type = ELF64_R_TYPE (rel->r_info);
8179
8180  /* Determine if a long branch stub is needed.  */
8181  max_branch_offset = 1 << 25;
8182  if (r_type != R_PPC64_REL24)
8183    max_branch_offset = 1 << 15;
8184
8185  if (branch_offset + max_branch_offset >= 2 * max_branch_offset)
8186    /* We need a stub.  Figure out whether a long_branch or plt_branch
8187       is needed later.  */
8188    return ppc_stub_long_branch;
8189
8190  return ppc_stub_none;
8191}
8192
8193/* Build a .plt call stub.  */
8194
8195static inline bfd_byte *
8196build_plt_stub (bfd *obfd, bfd_byte *p, int offset)
8197{
8198#define PPC_LO(v) ((v) & 0xffff)
8199#define PPC_HI(v) (((v) >> 16) & 0xffff)
8200#define PPC_HA(v) PPC_HI ((v) + 0x8000)
8201
8202  if (PPC_HA (offset) != 0)
8203    {
8204      bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
8205      bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
8206      bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),	p += 4;
8207      if (PPC_HA (offset + 16) != PPC_HA (offset))
8208	{
8209	  bfd_put_32 (obfd, ADDI_R12_R12 | PPC_LO (offset), p),	p += 4;
8210	  offset = 0;
8211	}
8212      bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
8213      bfd_put_32 (obfd, LD_R2_0R12 | PPC_LO (offset + 8), p),	p += 4;
8214      bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset + 16), p),	p += 4;
8215      bfd_put_32 (obfd, BCTR, p),				p += 4;
8216    }
8217  else
8218    {
8219      bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
8220      bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset), p),	p += 4;
8221      if (PPC_HA (offset + 16) != PPC_HA (offset))
8222	{
8223	  bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),	p += 4;
8224	  offset = 0;
8225	}
8226      bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
8227      bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p),	p += 4;
8228      bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p),	p += 4;
8229      bfd_put_32 (obfd, BCTR, p),				p += 4;
8230    }
8231  return p;
8232}
8233
8234static bfd_boolean
8235ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
8236{
8237  struct ppc_stub_hash_entry *stub_entry;
8238  struct ppc_branch_hash_entry *br_entry;
8239  struct bfd_link_info *info;
8240  struct ppc_link_hash_table *htab;
8241  bfd_byte *loc;
8242  bfd_byte *p;
8243  unsigned int indx;
8244  struct plt_entry *ent;
8245  bfd_vma dest, off;
8246  int size;
8247
8248  /* Massage our args to the form they really have.  */
8249  stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
8250  info = in_arg;
8251
8252  htab = ppc_hash_table (info);
8253
8254  /* Make a note of the offset within the stubs for this entry.  */
8255  stub_entry->stub_offset = stub_entry->stub_sec->size;
8256  loc = stub_entry->stub_sec->contents + stub_entry->stub_offset;
8257
8258  htab->stub_count[stub_entry->stub_type - 1] += 1;
8259  switch (stub_entry->stub_type)
8260    {
8261    case ppc_stub_long_branch:
8262    case ppc_stub_long_branch_r2off:
8263      /* Branches are relative.  This is where we are going to.  */
8264      off = dest = (stub_entry->target_value
8265		    + stub_entry->target_section->output_offset
8266		    + stub_entry->target_section->output_section->vma);
8267
8268      /* And this is where we are coming from.  */
8269      off -= (stub_entry->stub_offset
8270	      + stub_entry->stub_sec->output_offset
8271	      + stub_entry->stub_sec->output_section->vma);
8272
8273      size = 4;
8274      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
8275	{
8276	  bfd_vma r2off;
8277
8278	  r2off = (htab->stub_group[stub_entry->target_section->id].toc_off
8279		   - htab->stub_group[stub_entry->id_sec->id].toc_off);
8280	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
8281	  loc += 4;
8282	  size = 12;
8283	  if (PPC_HA (r2off) != 0)
8284	    {
8285	      size = 16;
8286	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
8287	      loc += 4;
8288	    }
8289	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
8290	  loc += 4;
8291	  off -= size - 4;
8292	}
8293      bfd_put_32 (htab->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
8294
8295      if (off + (1 << 25) >= (bfd_vma) (1 << 26))
8296	{
8297	  (*_bfd_error_handler) (_("long branch stub `%s' offset overflow"),
8298				 stub_entry->root.string);
8299	  htab->stub_error = TRUE;
8300	  return FALSE;
8301	}
8302
8303      if (info->emitrelocations)
8304	{
8305	  Elf_Internal_Rela *relocs, *r;
8306	  struct bfd_elf_section_data *elfsec_data;
8307
8308	  elfsec_data = elf_section_data (stub_entry->stub_sec);
8309	  relocs = elfsec_data->relocs;
8310	  if (relocs == NULL)
8311	    {
8312	      bfd_size_type relsize;
8313	      relsize = stub_entry->stub_sec->reloc_count * sizeof (*relocs);
8314	      relocs = bfd_alloc (htab->stub_bfd, relsize);
8315	      if (relocs == NULL)
8316		return FALSE;
8317	      elfsec_data->relocs = relocs;
8318	      elfsec_data->rel_hdr.sh_size = relsize;
8319	      elfsec_data->rel_hdr.sh_entsize = 24;
8320	      stub_entry->stub_sec->reloc_count = 0;
8321	    }
8322	  r = relocs + stub_entry->stub_sec->reloc_count;
8323	  stub_entry->stub_sec->reloc_count += 1;
8324	  r->r_offset = loc - stub_entry->stub_sec->contents;
8325	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
8326	  r->r_addend = dest;
8327	  if (stub_entry->h != NULL)
8328	    {
8329	      struct elf_link_hash_entry **hashes;
8330	      unsigned long symndx;
8331	      struct ppc_link_hash_entry *h;
8332
8333	      hashes = elf_sym_hashes (htab->stub_bfd);
8334	      if (hashes == NULL)
8335		{
8336		  bfd_size_type hsize;
8337
8338		  hsize = (htab->stub_globals + 1) * sizeof (*hashes);
8339		  hashes = bfd_zalloc (htab->stub_bfd, hsize);
8340		  if (hashes == NULL)
8341		    return FALSE;
8342		  elf_sym_hashes (htab->stub_bfd) = hashes;
8343		  htab->stub_globals = 1;
8344		}
8345	      symndx = htab->stub_globals++;
8346	      h = stub_entry->h;
8347	      hashes[symndx] = &h->elf;
8348	      r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24);
8349	      if (h->oh != NULL && h->oh->is_func)
8350		h = h->oh;
8351	      if (h->elf.root.u.def.section != stub_entry->target_section)
8352		/* H is an opd symbol.  The addend must be zero.  */
8353		r->r_addend = 0;
8354	      else
8355		{
8356		  off = (h->elf.root.u.def.value
8357			 + h->elf.root.u.def.section->output_offset
8358			 + h->elf.root.u.def.section->output_section->vma);
8359		  r->r_addend -= off;
8360		}
8361	    }
8362	}
8363      break;
8364
8365    case ppc_stub_plt_branch:
8366    case ppc_stub_plt_branch_r2off:
8367      br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
8368					 stub_entry->root.string + 9,
8369					 FALSE, FALSE);
8370      if (br_entry == NULL)
8371	{
8372	  (*_bfd_error_handler) (_("can't find branch stub `%s'"),
8373				 stub_entry->root.string);
8374	  htab->stub_error = TRUE;
8375	  return FALSE;
8376	}
8377
8378      off = (stub_entry->target_value
8379	     + stub_entry->target_section->output_offset
8380	     + stub_entry->target_section->output_section->vma);
8381
8382      bfd_put_64 (htab->brlt->owner, off,
8383		  htab->brlt->contents + br_entry->offset);
8384
8385      if (htab->relbrlt != NULL)
8386	{
8387	  /* Create a reloc for the branch lookup table entry.  */
8388	  Elf_Internal_Rela rela;
8389	  bfd_byte *rl;
8390
8391	  rela.r_offset = (br_entry->offset
8392			   + htab->brlt->output_offset
8393			   + htab->brlt->output_section->vma);
8394	  rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
8395	  rela.r_addend = off;
8396
8397	  rl = htab->relbrlt->contents;
8398	  rl += htab->relbrlt->reloc_count++ * sizeof (Elf64_External_Rela);
8399	  bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
8400	}
8401      else if (info->emitrelocations)
8402	{
8403	  Elf_Internal_Rela *relocs, *r;
8404	  struct bfd_elf_section_data *elfsec_data;
8405
8406	  elfsec_data = elf_section_data (htab->brlt);
8407	  relocs = elfsec_data->relocs;
8408	  if (relocs == NULL)
8409	    {
8410	      bfd_size_type relsize;
8411	      relsize = htab->brlt->reloc_count * sizeof (*relocs);
8412	      relocs = bfd_alloc (htab->brlt->owner, relsize);
8413	      if (relocs == NULL)
8414		return FALSE;
8415	      elfsec_data->relocs = relocs;
8416	      elfsec_data->rel_hdr.sh_size = relsize;
8417	      elfsec_data->rel_hdr.sh_entsize = 24;
8418	      htab->brlt->reloc_count = 0;
8419	    }
8420	  r = relocs + htab->brlt->reloc_count;
8421	  htab->brlt->reloc_count += 1;
8422	  r->r_offset = (br_entry->offset
8423			 + htab->brlt->output_offset
8424			 + htab->brlt->output_section->vma);
8425	  r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
8426	  r->r_addend = off;
8427	}
8428
8429      off = (br_entry->offset
8430	     + htab->brlt->output_offset
8431	     + htab->brlt->output_section->vma
8432	     - elf_gp (htab->brlt->output_section->owner)
8433	     - htab->stub_group[stub_entry->id_sec->id].toc_off);
8434
8435      if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
8436	{
8437	  (*_bfd_error_handler)
8438	    (_("linkage table error against `%s'"),
8439	     stub_entry->root.string);
8440	  bfd_set_error (bfd_error_bad_value);
8441	  htab->stub_error = TRUE;
8442	  return FALSE;
8443	}
8444
8445      indx = off;
8446      if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
8447	{
8448	  if (PPC_HA (indx) != 0)
8449	    {
8450	      size = 16;
8451	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc);
8452	      loc += 4;
8453	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc);
8454	    }
8455	  else
8456	    {
8457	      size = 12;
8458	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (indx), loc);
8459	    }
8460	}
8461      else
8462	{
8463	  bfd_vma r2off;
8464
8465	  r2off = (htab->stub_group[stub_entry->target_section->id].toc_off
8466		   - htab->stub_group[stub_entry->id_sec->id].toc_off);
8467	  bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
8468	  loc += 4;
8469	  size = 20;
8470	  if (PPC_HA (indx) != 0)
8471	    {
8472	      size += 4;
8473	      bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc);
8474	      loc += 4;
8475	      bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc);
8476	      loc += 4;
8477	    }
8478	  else
8479	    {
8480	      bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (indx), loc);
8481	      loc += 4;
8482	    }
8483
8484	  if (PPC_HA (r2off) != 0)
8485	    {
8486	      size += 4;
8487	      bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
8488	      loc += 4;
8489	    }
8490	  bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
8491	}
8492      loc += 4;
8493      bfd_put_32 (htab->stub_bfd, MTCTR_R11, loc);
8494      loc += 4;
8495      bfd_put_32 (htab->stub_bfd, BCTR, loc);
8496      break;
8497
8498    case ppc_stub_plt_call:
8499      /* Do the best we can for shared libraries built without
8500	 exporting ".foo" for each "foo".  This can happen when symbol
8501	 versioning scripts strip all bar a subset of symbols.  */
8502      if (stub_entry->h->oh != NULL
8503	  && stub_entry->h->oh->elf.root.type != bfd_link_hash_defined
8504	  && stub_entry->h->oh->elf.root.type != bfd_link_hash_defweak)
8505	{
8506	  /* Point the symbol at the stub.  There may be multiple stubs,
8507	     we don't really care;  The main thing is to make this sym
8508	     defined somewhere.  Maybe defining the symbol in the stub
8509	     section is a silly idea.  If we didn't do this, htab->top_id
8510	     could disappear.  */
8511	  stub_entry->h->oh->elf.root.type = bfd_link_hash_defined;
8512	  stub_entry->h->oh->elf.root.u.def.section = stub_entry->stub_sec;
8513	  stub_entry->h->oh->elf.root.u.def.value = stub_entry->stub_offset;
8514	}
8515
8516      /* Now build the stub.  */
8517      off = (bfd_vma) -1;
8518      for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next)
8519	if (ent->addend == stub_entry->addend)
8520	  {
8521	    off = ent->plt.offset;
8522	    break;
8523	  }
8524      if (off >= (bfd_vma) -2)
8525	abort ();
8526
8527      off &= ~ (bfd_vma) 1;
8528      off += (htab->plt->output_offset
8529	      + htab->plt->output_section->vma
8530	      - elf_gp (htab->plt->output_section->owner)
8531	      - htab->stub_group[stub_entry->id_sec->id].toc_off);
8532
8533      if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
8534	{
8535	  (*_bfd_error_handler)
8536	    (_("linkage table error against `%s'"),
8537	     stub_entry->h->elf.root.root.string);
8538	  bfd_set_error (bfd_error_bad_value);
8539	  htab->stub_error = TRUE;
8540	  return FALSE;
8541	}
8542
8543      p = build_plt_stub (htab->stub_bfd, loc, off);
8544      size = p - loc;
8545      break;
8546
8547    default:
8548      BFD_FAIL ();
8549      return FALSE;
8550    }
8551
8552  stub_entry->stub_sec->size += size;
8553
8554  if (htab->emit_stub_syms)
8555    {
8556      struct elf_link_hash_entry *h;
8557      size_t len1, len2;
8558      char *name;
8559      const char *const stub_str[] = { "long_branch",
8560				       "long_branch_r2off",
8561				       "plt_branch",
8562				       "plt_branch_r2off",
8563				       "plt_call" };
8564
8565      len1 = strlen (stub_str[stub_entry->stub_type - 1]);
8566      len2 = strlen (stub_entry->root.string);
8567      name = bfd_malloc (len1 + len2 + 2);
8568      if (name == NULL)
8569	return FALSE;
8570      memcpy (name, stub_entry->root.string, 9);
8571      memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
8572      memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
8573      h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
8574      if (h == NULL)
8575	return FALSE;
8576      if (h->root.type == bfd_link_hash_new)
8577	{
8578	  h->root.type = bfd_link_hash_defined;
8579	  h->root.u.def.section = stub_entry->stub_sec;
8580	  h->root.u.def.value = stub_entry->stub_offset;
8581	  h->ref_regular = 1;
8582	  h->def_regular = 1;
8583	  h->ref_regular_nonweak = 1;
8584	  h->forced_local = 1;
8585	  h->non_elf = 0;
8586	}
8587    }
8588
8589  return TRUE;
8590}
8591
8592/* As above, but don't actually build the stub.  Just bump offset so
8593   we know stub section sizes, and select plt_branch stubs where
8594   long_branch stubs won't do.  */
8595
8596static bfd_boolean
8597ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
8598{
8599  struct ppc_stub_hash_entry *stub_entry;
8600  struct bfd_link_info *info;
8601  struct ppc_link_hash_table *htab;
8602  bfd_vma off;
8603  int size;
8604
8605  /* Massage our args to the form they really have.  */
8606  stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
8607  info = in_arg;
8608
8609  htab = ppc_hash_table (info);
8610
8611  if (stub_entry->stub_type == ppc_stub_plt_call)
8612    {
8613      struct plt_entry *ent;
8614      off = (bfd_vma) -1;
8615      for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next)
8616	if (ent->addend == stub_entry->addend)
8617	  {
8618	    off = ent->plt.offset & ~(bfd_vma) 1;
8619	    break;
8620	  }
8621      if (off >= (bfd_vma) -2)
8622	abort ();
8623      off += (htab->plt->output_offset
8624	      + htab->plt->output_section->vma
8625	      - elf_gp (htab->plt->output_section->owner)
8626	      - htab->stub_group[stub_entry->id_sec->id].toc_off);
8627
8628      size = PLT_CALL_STUB_SIZE;
8629      if (PPC_HA (off) == 0)
8630	size -= 4;
8631      if (PPC_HA (off + 16) != PPC_HA (off))
8632	size += 4;
8633    }
8634  else
8635    {
8636      /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
8637	 variants.  */
8638      bfd_vma r2off = 0;
8639
8640      off = (stub_entry->target_value
8641	     + stub_entry->target_section->output_offset
8642	     + stub_entry->target_section->output_section->vma);
8643      off -= (stub_entry->stub_sec->size
8644	      + stub_entry->stub_sec->output_offset
8645	      + stub_entry->stub_sec->output_section->vma);
8646
8647      /* Reset the stub type from the plt variant in case we now
8648	 can reach with a shorter stub.  */
8649      if (stub_entry->stub_type >= ppc_stub_plt_branch)
8650	stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
8651
8652      size = 4;
8653      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
8654	{
8655	  r2off = (htab->stub_group[stub_entry->target_section->id].toc_off
8656		   - htab->stub_group[stub_entry->id_sec->id].toc_off);
8657	  size = 12;
8658	  if (PPC_HA (r2off) != 0)
8659	    size = 16;
8660	  off -= size - 4;
8661	}
8662
8663      /* If the branch offset if too big, use a ppc_stub_plt_branch.  */
8664      if (off + (1 << 25) >= (bfd_vma) (1 << 26))
8665	{
8666	  struct ppc_branch_hash_entry *br_entry;
8667	  unsigned int indx;
8668
8669	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
8670					     stub_entry->root.string + 9,
8671					     TRUE, FALSE);
8672	  if (br_entry == NULL)
8673	    {
8674	      (*_bfd_error_handler) (_("can't build branch stub `%s'"),
8675				     stub_entry->root.string);
8676	      htab->stub_error = TRUE;
8677	      return FALSE;
8678	    }
8679
8680	  if (br_entry->iter != htab->stub_iteration)
8681	    {
8682	      br_entry->iter = htab->stub_iteration;
8683	      br_entry->offset = htab->brlt->size;
8684	      htab->brlt->size += 8;
8685
8686	      if (htab->relbrlt != NULL)
8687		htab->relbrlt->size += sizeof (Elf64_External_Rela);
8688	      else if (info->emitrelocations)
8689		{
8690		  htab->brlt->reloc_count += 1;
8691		  htab->brlt->flags |= SEC_RELOC;
8692		}
8693	    }
8694
8695	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
8696	  off = (br_entry->offset
8697		 + htab->brlt->output_offset
8698		 + htab->brlt->output_section->vma
8699		 - elf_gp (htab->brlt->output_section->owner)
8700		 - htab->stub_group[stub_entry->id_sec->id].toc_off);
8701
8702	  indx = off;
8703	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
8704	    {
8705	      size = 12;
8706	      if (PPC_HA (indx) != 0)
8707		size = 16;
8708	    }
8709	  else
8710	    {
8711	      size = 20;
8712	      if (PPC_HA (indx) != 0)
8713		size += 4;
8714
8715	      if (PPC_HA (r2off) != 0)
8716		size += 4;
8717	    }
8718	}
8719      else if (info->emitrelocations)
8720	{
8721	  stub_entry->stub_sec->reloc_count += 1;
8722	  stub_entry->stub_sec->flags |= SEC_RELOC;
8723	}
8724    }
8725
8726  stub_entry->stub_sec->size += size;
8727  return TRUE;
8728}
8729
8730/* Set up various things so that we can make a list of input sections
8731   for each output section included in the link.  Returns -1 on error,
8732   0 when no stubs will be needed, and 1 on success.  */
8733
8734int
8735ppc64_elf_setup_section_lists (bfd *output_bfd,
8736			       struct bfd_link_info *info,
8737			       int no_multi_toc)
8738{
8739  bfd *input_bfd;
8740  int top_id, top_index, id;
8741  asection *section;
8742  asection **input_list;
8743  bfd_size_type amt;
8744  struct ppc_link_hash_table *htab = ppc_hash_table (info);
8745
8746  htab->no_multi_toc = no_multi_toc;
8747
8748  if (htab->brlt == NULL)
8749    return 0;
8750
8751  /* Find the top input section id.  */
8752  for (input_bfd = info->input_bfds, top_id = 3;
8753       input_bfd != NULL;
8754       input_bfd = input_bfd->link_next)
8755    {
8756      for (section = input_bfd->sections;
8757	   section != NULL;
8758	   section = section->next)
8759	{
8760	  if (top_id < section->id)
8761	    top_id = section->id;
8762	}
8763    }
8764
8765  htab->top_id = top_id;
8766  amt = sizeof (struct map_stub) * (top_id + 1);
8767  htab->stub_group = bfd_zmalloc (amt);
8768  if (htab->stub_group == NULL)
8769    return -1;
8770
8771  /* Set toc_off for com, und, abs and ind sections.  */
8772  for (id = 0; id < 3; id++)
8773    htab->stub_group[id].toc_off = TOC_BASE_OFF;
8774
8775  elf_gp (output_bfd) = htab->toc_curr = ppc64_elf_toc (output_bfd);
8776
8777  /* We can't use output_bfd->section_count here to find the top output
8778     section index as some sections may have been removed, and
8779     strip_excluded_output_sections doesn't renumber the indices.  */
8780  for (section = output_bfd->sections, top_index = 0;
8781       section != NULL;
8782       section = section->next)
8783    {
8784      if (top_index < section->index)
8785	top_index = section->index;
8786    }
8787
8788  htab->top_index = top_index;
8789  amt = sizeof (asection *) * (top_index + 1);
8790  input_list = bfd_zmalloc (amt);
8791  htab->input_list = input_list;
8792  if (input_list == NULL)
8793    return -1;
8794
8795  return 1;
8796}
8797
8798/* The linker repeatedly calls this function for each TOC input section
8799   and linker generated GOT section.  Group input bfds such that the toc
8800   within a group is less than 64k in size.  Will break with cute linker
8801   scripts that play games with dot in the output toc section.  */
8802
8803void
8804ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
8805{
8806  struct ppc_link_hash_table *htab = ppc_hash_table (info);
8807
8808  if (!htab->no_multi_toc)
8809    {
8810      bfd_vma addr = isec->output_offset + isec->output_section->vma;
8811      bfd_vma off = addr - htab->toc_curr;
8812
8813      if (off + isec->size > 0x10000)
8814	htab->toc_curr = addr;
8815
8816      elf_gp (isec->owner) = (htab->toc_curr
8817			      - elf_gp (isec->output_section->owner)
8818			      + TOC_BASE_OFF);
8819    }
8820}
8821
8822/* Called after the last call to the above function.  */
8823
8824void
8825ppc64_elf_reinit_toc (bfd *output_bfd, struct bfd_link_info *info)
8826{
8827  struct ppc_link_hash_table *htab = ppc_hash_table (info);
8828
8829  htab->multi_toc_needed = htab->toc_curr != elf_gp (output_bfd);
8830
8831  /* toc_curr tracks the TOC offset used for code sections below in
8832     ppc64_elf_next_input_section.  Start off at 0x8000.  */
8833  htab->toc_curr = TOC_BASE_OFF;
8834}
8835
8836/* No toc references were found in ISEC.  If the code in ISEC makes no
8837   calls, then there's no need to use toc adjusting stubs when branching
8838   into ISEC.  Actually, indirect calls from ISEC are OK as they will
8839   load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
8840   needed, and 2 if a cyclical call-graph was found but no other reason
8841   for a stub was detected.  If called from the top level, a return of
8842   2 means the same as a return of 0.  */
8843
8844static int
8845toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
8846{
8847  Elf_Internal_Rela *relstart, *rel;
8848  Elf_Internal_Sym *local_syms;
8849  int ret;
8850  struct ppc_link_hash_table *htab;
8851
8852  /* We know none of our code bearing sections will need toc stubs.  */
8853  if ((isec->flags & SEC_LINKER_CREATED) != 0)
8854    return 0;
8855
8856  if (isec->size == 0)
8857    return 0;
8858
8859  if (isec->output_section == NULL)
8860    return 0;
8861
8862  /* Hack for linux kernel.  .fixup contains branches, but only back to
8863     the function that hit an exception.  */
8864  if (strcmp (isec->name, ".fixup") == 0)
8865    return 0;
8866
8867  if (isec->reloc_count == 0)
8868    return 0;
8869
8870  relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
8871					info->keep_memory);
8872  if (relstart == NULL)
8873    return -1;
8874
8875  /* Look for branches to outside of this section.  */
8876  local_syms = NULL;
8877  ret = 0;
8878  htab = ppc_hash_table (info);
8879  for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
8880    {
8881      enum elf_ppc64_reloc_type r_type;
8882      unsigned long r_symndx;
8883      struct elf_link_hash_entry *h;
8884      Elf_Internal_Sym *sym;
8885      asection *sym_sec;
8886      long *opd_adjust;
8887      bfd_vma sym_value;
8888      bfd_vma dest;
8889
8890      r_type = ELF64_R_TYPE (rel->r_info);
8891      if (r_type != R_PPC64_REL24
8892	  && r_type != R_PPC64_REL14
8893	  && r_type != R_PPC64_REL14_BRTAKEN
8894	  && r_type != R_PPC64_REL14_BRNTAKEN)
8895	continue;
8896
8897      r_symndx = ELF64_R_SYM (rel->r_info);
8898      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
8899		      isec->owner))
8900	{
8901	  ret = -1;
8902	  break;
8903	}
8904
8905      /* Calls to dynamic lib functions go through a plt call stub
8906	 that uses r2.  Branches to undefined symbols might be a call
8907	 using old-style dot symbols that can be satisfied by a plt
8908	 call into a new-style dynamic library.  */
8909      if (sym_sec == NULL)
8910	{
8911	  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
8912	  if (eh != NULL
8913	      && eh->oh != NULL
8914	      && eh->oh->elf.plt.plist != NULL)
8915	    {
8916	      ret = 1;
8917	      break;
8918	    }
8919
8920	  /* Ignore other undefined symbols.  */
8921	  continue;
8922	}
8923
8924      /* Assume branches to other sections not included in the link need
8925	 stubs too, to cover -R and absolute syms.  */
8926      if (sym_sec->output_section == NULL)
8927	{
8928	  ret = 1;
8929	  break;
8930	}
8931
8932      if (h == NULL)
8933	sym_value = sym->st_value;
8934      else
8935	{
8936	  if (h->root.type != bfd_link_hash_defined
8937	      && h->root.type != bfd_link_hash_defweak)
8938	    abort ();
8939	  sym_value = h->root.u.def.value;
8940	}
8941      sym_value += rel->r_addend;
8942
8943      /* If this branch reloc uses an opd sym, find the code section.  */
8944      opd_adjust = get_opd_info (sym_sec);
8945      if (opd_adjust != NULL)
8946	{
8947	  if (h == NULL)
8948	    {
8949	      long adjust;
8950
8951	      adjust = opd_adjust[sym->st_value / 8];
8952	      if (adjust == -1)
8953		/* Assume deleted functions won't ever be called.  */
8954		continue;
8955	      sym_value += adjust;
8956	    }
8957
8958	  dest = opd_entry_value (sym_sec, sym_value, &sym_sec, NULL);
8959	  if (dest == (bfd_vma) -1)
8960	    continue;
8961	}
8962      else
8963	dest = (sym_value
8964		+ sym_sec->output_offset
8965		+ sym_sec->output_section->vma);
8966
8967      /* Ignore branch to self.  */
8968      if (sym_sec == isec)
8969	continue;
8970
8971      /* If the called function uses the toc, we need a stub.  */
8972      if (sym_sec->has_toc_reloc
8973	  || sym_sec->makes_toc_func_call)
8974	{
8975	  ret = 1;
8976	  break;
8977	}
8978
8979      /* Assume any branch that needs a long branch stub might in fact
8980	 need a plt_branch stub.  A plt_branch stub uses r2.  */
8981      else if (dest - (isec->output_offset
8982		       + isec->output_section->vma
8983		       + rel->r_offset) + (1 << 25) >= (2 << 25))
8984	{
8985	  ret = 1;
8986	  break;
8987	}
8988
8989      /* If calling back to a section in the process of being tested, we
8990	 can't say for sure that no toc adjusting stubs are needed, so
8991	 don't return zero.  */
8992      else if (sym_sec->call_check_in_progress)
8993	ret = 2;
8994
8995      /* Branches to another section that itself doesn't have any TOC
8996	 references are OK.  Recursively call ourselves to check.  */
8997      else if (sym_sec->id <= htab->top_id
8998	       && htab->stub_group[sym_sec->id].toc_off == 0)
8999	{
9000	  int recur;
9001
9002	  /* Mark current section as indeterminate, so that other
9003	     sections that call back to current won't be marked as
9004	     known.  */
9005	  isec->call_check_in_progress = 1;
9006	  recur = toc_adjusting_stub_needed (info, sym_sec);
9007	  isec->call_check_in_progress = 0;
9008
9009	  if (recur < 0)
9010	    {
9011	      /* An error.  Exit.  */
9012	      ret = -1;
9013	      break;
9014	    }
9015	  else if (recur <= 1)
9016	    {
9017	      /* Known result.  Mark as checked and set section flag.  */
9018	      htab->stub_group[sym_sec->id].toc_off = 1;
9019	      if (recur != 0)
9020		{
9021		  sym_sec->makes_toc_func_call = 1;
9022		  ret = 1;
9023		  break;
9024		}
9025	    }
9026	  else
9027	    {
9028	      /* Unknown result.  Continue checking.  */
9029	      ret = 2;
9030	    }
9031	}
9032    }
9033
9034  if (local_syms != NULL
9035      && (elf_tdata (isec->owner)->symtab_hdr.contents
9036	  != (unsigned char *) local_syms))
9037    free (local_syms);
9038  if (elf_section_data (isec)->relocs != relstart)
9039    free (relstart);
9040
9041  return ret;
9042}
9043
9044/* The linker repeatedly calls this function for each input section,
9045   in the order that input sections are linked into output sections.
9046   Build lists of input sections to determine groupings between which
9047   we may insert linker stubs.  */
9048
9049bfd_boolean
9050ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
9051{
9052  struct ppc_link_hash_table *htab = ppc_hash_table (info);
9053
9054  if ((isec->output_section->flags & SEC_CODE) != 0
9055      && isec->output_section->index <= htab->top_index)
9056    {
9057      asection **list = htab->input_list + isec->output_section->index;
9058      /* Steal the link_sec pointer for our list.  */
9059#define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
9060      /* This happens to make the list in reverse order,
9061	 which is what we want.  */
9062      PREV_SEC (isec) = *list;
9063      *list = isec;
9064    }
9065
9066  if (htab->multi_toc_needed)
9067    {
9068      /* If a code section has a function that uses the TOC then we need
9069	 to use the right TOC (obviously).  Also, make sure that .opd gets
9070	 the correct TOC value for R_PPC64_TOC relocs that don't have or
9071	 can't find their function symbol (shouldn't ever happen now).  */
9072      if (isec->has_toc_reloc || (isec->flags & SEC_CODE) == 0)
9073	{
9074	  if (elf_gp (isec->owner) != 0)
9075	    htab->toc_curr = elf_gp (isec->owner);
9076	}
9077      else if (htab->stub_group[isec->id].toc_off == 0)
9078	{
9079	  int ret = toc_adjusting_stub_needed (info, isec);
9080	  if (ret < 0)
9081	    return FALSE;
9082	  else
9083	    isec->makes_toc_func_call = ret & 1;
9084	}
9085    }
9086
9087  /* Functions that don't use the TOC can belong in any TOC group.
9088     Use the last TOC base.  This happens to make _init and _fini
9089     pasting work.  */
9090  htab->stub_group[isec->id].toc_off = htab->toc_curr;
9091  return TRUE;
9092}
9093
9094/* See whether we can group stub sections together.  Grouping stub
9095   sections may result in fewer stubs.  More importantly, we need to
9096   put all .init* and .fini* stubs at the beginning of the .init or
9097   .fini output sections respectively, because glibc splits the
9098   _init and _fini functions into multiple parts.  Putting a stub in
9099   the middle of a function is not a good idea.  */
9100
9101static void
9102group_sections (struct ppc_link_hash_table *htab,
9103		bfd_size_type stub_group_size,
9104		bfd_boolean stubs_always_before_branch)
9105{
9106  asection **list;
9107  bfd_size_type stub14_group_size;
9108  bfd_boolean suppress_size_errors;
9109
9110  suppress_size_errors = FALSE;
9111  stub14_group_size = stub_group_size;
9112  if (stub_group_size == 1)
9113    {
9114      /* Default values.  */
9115      if (stubs_always_before_branch)
9116	{
9117	  stub_group_size = 0x1e00000;
9118	  stub14_group_size = 0x7800;
9119	}
9120      else
9121	{
9122	  stub_group_size = 0x1c00000;
9123	  stub14_group_size = 0x7000;
9124	}
9125      suppress_size_errors = TRUE;
9126    }
9127
9128  list = htab->input_list + htab->top_index;
9129  do
9130    {
9131      asection *tail = *list;
9132      while (tail != NULL)
9133	{
9134	  asection *curr;
9135	  asection *prev;
9136	  bfd_size_type total;
9137	  bfd_boolean big_sec;
9138	  bfd_vma curr_toc;
9139
9140	  curr = tail;
9141	  total = tail->size;
9142	  big_sec = total > (ppc64_elf_section_data (tail)->has_14bit_branch
9143			     ? stub14_group_size : stub_group_size);
9144	  if (big_sec && !suppress_size_errors)
9145	    (*_bfd_error_handler) (_("%B section %A exceeds stub group size"),
9146				     tail->owner, tail);
9147	  curr_toc = htab->stub_group[tail->id].toc_off;
9148
9149	  while ((prev = PREV_SEC (curr)) != NULL
9150		 && ((total += curr->output_offset - prev->output_offset)
9151		     < (ppc64_elf_section_data (prev)->has_14bit_branch
9152			? stub14_group_size : stub_group_size))
9153		 && htab->stub_group[prev->id].toc_off == curr_toc)
9154	    curr = prev;
9155
9156	  /* OK, the size from the start of CURR to the end is less
9157	     than stub_group_size and thus can be handled by one stub
9158	     section.  (or the tail section is itself larger than
9159	     stub_group_size, in which case we may be toast.)  We
9160	     should really be keeping track of the total size of stubs
9161	     added here, as stubs contribute to the final output
9162	     section size.  That's a little tricky, and this way will
9163	     only break if stubs added make the total size more than
9164	     2^25, ie. for the default stub_group_size, if stubs total
9165	     more than 2097152 bytes, or nearly 75000 plt call stubs.  */
9166	  do
9167	    {
9168	      prev = PREV_SEC (tail);
9169	      /* Set up this stub group.  */
9170	      htab->stub_group[tail->id].link_sec = curr;
9171	    }
9172	  while (tail != curr && (tail = prev) != NULL);
9173
9174	  /* But wait, there's more!  Input sections up to stub_group_size
9175	     bytes before the stub section can be handled by it too.
9176	     Don't do this if we have a really large section after the
9177	     stubs, as adding more stubs increases the chance that
9178	     branches may not reach into the stub section.  */
9179	  if (!stubs_always_before_branch && !big_sec)
9180	    {
9181	      total = 0;
9182	      while (prev != NULL
9183		     && ((total += tail->output_offset - prev->output_offset)
9184			 < (ppc64_elf_section_data (prev)->has_14bit_branch
9185			    ? stub14_group_size : stub_group_size))
9186		     && htab->stub_group[prev->id].toc_off == curr_toc)
9187		{
9188		  tail = prev;
9189		  prev = PREV_SEC (tail);
9190		  htab->stub_group[tail->id].link_sec = curr;
9191		}
9192	    }
9193	  tail = prev;
9194	}
9195    }
9196  while (list-- != htab->input_list);
9197  free (htab->input_list);
9198#undef PREV_SEC
9199}
9200
9201/* Determine and set the size of the stub section for a final link.
9202
9203   The basic idea here is to examine all the relocations looking for
9204   PC-relative calls to a target that is unreachable with a "bl"
9205   instruction.  */
9206
9207bfd_boolean
9208ppc64_elf_size_stubs (bfd *output_bfd,
9209		      struct bfd_link_info *info,
9210		      bfd_signed_vma group_size,
9211		      asection *(*add_stub_section) (const char *, asection *),
9212		      void (*layout_sections_again) (void))
9213{
9214  bfd_size_type stub_group_size;
9215  bfd_boolean stubs_always_before_branch;
9216  struct ppc_link_hash_table *htab = ppc_hash_table (info);
9217
9218  /* Stash our params away.  */
9219  htab->add_stub_section = add_stub_section;
9220  htab->layout_sections_again = layout_sections_again;
9221  stubs_always_before_branch = group_size < 0;
9222  if (group_size < 0)
9223    stub_group_size = -group_size;
9224  else
9225    stub_group_size = group_size;
9226
9227  group_sections (htab, stub_group_size, stubs_always_before_branch);
9228
9229  while (1)
9230    {
9231      bfd *input_bfd;
9232      unsigned int bfd_indx;
9233      asection *stub_sec;
9234
9235      htab->stub_iteration += 1;
9236
9237      for (input_bfd = info->input_bfds, bfd_indx = 0;
9238	   input_bfd != NULL;
9239	   input_bfd = input_bfd->link_next, bfd_indx++)
9240	{
9241	  Elf_Internal_Shdr *symtab_hdr;
9242	  asection *section;
9243	  Elf_Internal_Sym *local_syms = NULL;
9244
9245	  if (!is_ppc64_elf_target (input_bfd->xvec))
9246	    continue;
9247
9248	  /* We'll need the symbol table in a second.  */
9249	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9250	  if (symtab_hdr->sh_info == 0)
9251	    continue;
9252
9253	  /* Walk over each section attached to the input bfd.  */
9254	  for (section = input_bfd->sections;
9255	       section != NULL;
9256	       section = section->next)
9257	    {
9258	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
9259
9260	      /* If there aren't any relocs, then there's nothing more
9261		 to do.  */
9262	      if ((section->flags & SEC_RELOC) == 0
9263		  || (section->flags & SEC_ALLOC) == 0
9264		  || (section->flags & SEC_LOAD) == 0
9265		  || (section->flags & SEC_CODE) == 0
9266		  || section->reloc_count == 0)
9267		continue;
9268
9269	      /* If this section is a link-once section that will be
9270		 discarded, then don't create any stubs.  */
9271	      if (section->output_section == NULL
9272		  || section->output_section->owner != output_bfd)
9273		continue;
9274
9275	      /* Get the relocs.  */
9276	      internal_relocs
9277		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
9278					     info->keep_memory);
9279	      if (internal_relocs == NULL)
9280		goto error_ret_free_local;
9281
9282	      /* Now examine each relocation.  */
9283	      irela = internal_relocs;
9284	      irelaend = irela + section->reloc_count;
9285	      for (; irela < irelaend; irela++)
9286		{
9287		  enum elf_ppc64_reloc_type r_type;
9288		  unsigned int r_indx;
9289		  enum ppc_stub_type stub_type;
9290		  struct ppc_stub_hash_entry *stub_entry;
9291		  asection *sym_sec, *code_sec;
9292		  bfd_vma sym_value;
9293		  bfd_vma destination;
9294		  bfd_boolean ok_dest;
9295		  struct ppc_link_hash_entry *hash;
9296		  struct ppc_link_hash_entry *fdh;
9297		  struct elf_link_hash_entry *h;
9298		  Elf_Internal_Sym *sym;
9299		  char *stub_name;
9300		  const asection *id_sec;
9301		  long *opd_adjust;
9302
9303		  r_type = ELF64_R_TYPE (irela->r_info);
9304		  r_indx = ELF64_R_SYM (irela->r_info);
9305
9306		  if (r_type >= R_PPC64_max)
9307		    {
9308		      bfd_set_error (bfd_error_bad_value);
9309		      goto error_ret_free_internal;
9310		    }
9311
9312		  /* Only look for stubs on branch instructions.  */
9313		  if (r_type != R_PPC64_REL24
9314		      && r_type != R_PPC64_REL14
9315		      && r_type != R_PPC64_REL14_BRTAKEN
9316		      && r_type != R_PPC64_REL14_BRNTAKEN)
9317		    continue;
9318
9319		  /* Now determine the call target, its name, value,
9320		     section.  */
9321		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9322				  r_indx, input_bfd))
9323		    goto error_ret_free_internal;
9324		  hash = (struct ppc_link_hash_entry *) h;
9325
9326		  ok_dest = FALSE;
9327		  fdh = NULL;
9328		  sym_value = 0;
9329		  if (hash == NULL)
9330		    {
9331		      sym_value = sym->st_value;
9332		      ok_dest = TRUE;
9333		    }
9334		  else if (hash->elf.root.type == bfd_link_hash_defined
9335			   || hash->elf.root.type == bfd_link_hash_defweak)
9336		    {
9337		      sym_value = hash->elf.root.u.def.value;
9338		      if (sym_sec->output_section != NULL)
9339			ok_dest = TRUE;
9340		    }
9341		  else if (hash->elf.root.type == bfd_link_hash_undefweak
9342			   || hash->elf.root.type == bfd_link_hash_undefined)
9343		    {
9344		      /* Recognise an old ABI func code entry sym, and
9345			 use the func descriptor sym instead if it is
9346			 defined.  */
9347		      if (hash->elf.root.root.string[0] == '.'
9348			  && (fdh = get_fdh (hash, htab)) != NULL)
9349			{
9350			  if (fdh->elf.root.type == bfd_link_hash_defined
9351			      || fdh->elf.root.type == bfd_link_hash_defweak)
9352			    {
9353			      sym_sec = fdh->elf.root.u.def.section;
9354			      sym_value = fdh->elf.root.u.def.value;
9355			      if (sym_sec->output_section != NULL)
9356				ok_dest = TRUE;
9357			    }
9358			  else
9359			    fdh = NULL;
9360			}
9361		    }
9362		  else
9363		    {
9364		      bfd_set_error (bfd_error_bad_value);
9365		      goto error_ret_free_internal;
9366		    }
9367
9368		  destination = 0;
9369		  if (ok_dest)
9370		    {
9371		      sym_value += irela->r_addend;
9372		      destination = (sym_value
9373				     + sym_sec->output_offset
9374				     + sym_sec->output_section->vma);
9375		    }
9376
9377		  code_sec = sym_sec;
9378		  opd_adjust = get_opd_info (sym_sec);
9379		  if (opd_adjust != NULL)
9380		    {
9381		      bfd_vma dest;
9382
9383		      if (hash == NULL)
9384			{
9385			  long adjust = opd_adjust[sym_value / 8];
9386			  if (adjust == -1)
9387			    continue;
9388			  sym_value += adjust;
9389			}
9390		      dest = opd_entry_value (sym_sec, sym_value,
9391					      &code_sec, &sym_value);
9392		      if (dest != (bfd_vma) -1)
9393			{
9394			  destination = dest;
9395			  if (fdh != NULL)
9396			    {
9397			      /* Fixup old ABI sym to point at code
9398				 entry.  */
9399			      hash->elf.root.type = bfd_link_hash_defweak;
9400			      hash->elf.root.u.def.section = code_sec;
9401			      hash->elf.root.u.def.value = sym_value;
9402			    }
9403			}
9404		    }
9405
9406		  /* Determine what (if any) linker stub is needed.  */
9407		  stub_type = ppc_type_of_stub (section, irela, &hash,
9408						destination);
9409
9410		  if (stub_type != ppc_stub_plt_call)
9411		    {
9412		      /* Check whether we need a TOC adjusting stub.
9413			 Since the linker pastes together pieces from
9414			 different object files when creating the
9415			 _init and _fini functions, it may be that a
9416			 call to what looks like a local sym is in
9417			 fact a call needing a TOC adjustment.  */
9418		      if (code_sec != NULL
9419			  && code_sec->output_section != NULL
9420			  && (htab->stub_group[code_sec->id].toc_off
9421			      != htab->stub_group[section->id].toc_off)
9422			  && (code_sec->has_toc_reloc
9423			      || code_sec->makes_toc_func_call))
9424			stub_type = ppc_stub_long_branch_r2off;
9425		    }
9426
9427		  if (stub_type == ppc_stub_none)
9428		    continue;
9429
9430		  /* __tls_get_addr calls might be eliminated.  */
9431		  if (stub_type != ppc_stub_plt_call
9432		      && hash != NULL
9433		      && (hash == htab->tls_get_addr
9434			  || hash == htab->tls_get_addr_fd)
9435		      && section->has_tls_reloc
9436		      && irela != internal_relocs)
9437		    {
9438		      /* Get tls info.  */
9439		      char *tls_mask;
9440
9441		      if (!get_tls_mask (&tls_mask, NULL, &local_syms,
9442					 irela - 1, input_bfd))
9443			goto error_ret_free_internal;
9444		      if (*tls_mask != 0)
9445			continue;
9446		    }
9447
9448		  /* Support for grouping stub sections.  */
9449		  id_sec = htab->stub_group[section->id].link_sec;
9450
9451		  /* Get the name of this stub.  */
9452		  stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
9453		  if (!stub_name)
9454		    goto error_ret_free_internal;
9455
9456		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
9457						     stub_name, FALSE, FALSE);
9458		  if (stub_entry != NULL)
9459		    {
9460		      /* The proper stub has already been created.  */
9461		      free (stub_name);
9462		      continue;
9463		    }
9464
9465		  stub_entry = ppc_add_stub (stub_name, section, htab);
9466		  if (stub_entry == NULL)
9467		    {
9468		      free (stub_name);
9469		    error_ret_free_internal:
9470		      if (elf_section_data (section)->relocs == NULL)
9471			free (internal_relocs);
9472		    error_ret_free_local:
9473		      if (local_syms != NULL
9474			  && (symtab_hdr->contents
9475			      != (unsigned char *) local_syms))
9476			free (local_syms);
9477		      return FALSE;
9478		    }
9479
9480		  stub_entry->stub_type = stub_type;
9481		  stub_entry->target_value = sym_value;
9482		  stub_entry->target_section = code_sec;
9483		  stub_entry->h = hash;
9484		  stub_entry->addend = irela->r_addend;
9485
9486		  if (stub_entry->h != NULL)
9487		    htab->stub_globals += 1;
9488		}
9489
9490	      /* We're done with the internal relocs, free them.  */
9491	      if (elf_section_data (section)->relocs != internal_relocs)
9492		free (internal_relocs);
9493	    }
9494
9495	  if (local_syms != NULL
9496	      && symtab_hdr->contents != (unsigned char *) local_syms)
9497	    {
9498	      if (!info->keep_memory)
9499		free (local_syms);
9500	      else
9501		symtab_hdr->contents = (unsigned char *) local_syms;
9502	    }
9503	}
9504
9505      /* We may have added some stubs.  Find out the new size of the
9506	 stub sections.  */
9507      for (stub_sec = htab->stub_bfd->sections;
9508	   stub_sec != NULL;
9509	   stub_sec = stub_sec->next)
9510	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
9511	  {
9512	    stub_sec->rawsize = stub_sec->size;
9513	    stub_sec->size = 0;
9514	    stub_sec->reloc_count = 0;
9515	    stub_sec->flags &= ~SEC_RELOC;
9516	  }
9517
9518      htab->brlt->size = 0;
9519      htab->brlt->reloc_count = 0;
9520      htab->brlt->flags &= ~SEC_RELOC;
9521      if (htab->relbrlt != NULL)
9522	htab->relbrlt->size = 0;
9523
9524      bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
9525
9526      for (stub_sec = htab->stub_bfd->sections;
9527	   stub_sec != NULL;
9528	   stub_sec = stub_sec->next)
9529	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
9530	    && stub_sec->rawsize != stub_sec->size)
9531	  break;
9532
9533      /* Exit from this loop when no stubs have been added, and no stubs
9534	 have changed size.  */
9535      if (stub_sec == NULL)
9536	break;
9537
9538      /* Ask the linker to do its stuff.  */
9539      (*htab->layout_sections_again) ();
9540    }
9541
9542  /* It would be nice to strip htab->brlt from the output if the
9543     section is empty, but it's too late.  If we strip sections here,
9544     the dynamic symbol table is corrupted since the section symbol
9545     for the stripped section isn't written.  */
9546
9547  return TRUE;
9548}
9549
9550/* Called after we have determined section placement.  If sections
9551   move, we'll be called again.  Provide a value for TOCstart.  */
9552
9553bfd_vma
9554ppc64_elf_toc (bfd *obfd)
9555{
9556  asection *s;
9557  bfd_vma TOCstart;
9558
9559  /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
9560     order.  The TOC starts where the first of these sections starts.  */
9561  s = bfd_get_section_by_name (obfd, ".got");
9562  if (s == NULL)
9563    s = bfd_get_section_by_name (obfd, ".toc");
9564  if (s == NULL)
9565    s = bfd_get_section_by_name (obfd, ".tocbss");
9566  if (s == NULL)
9567    s = bfd_get_section_by_name (obfd, ".plt");
9568  if (s == NULL)
9569    {
9570      /* This may happen for
9571	 o  references to TOC base (SYM@toc / TOC[tc0]) without a
9572	 .toc directive
9573	 o  bad linker script
9574	 o --gc-sections and empty TOC sections
9575
9576	 FIXME: Warn user?  */
9577
9578      /* Look for a likely section.  We probably won't even be
9579	 using TOCstart.  */
9580      for (s = obfd->sections; s != NULL; s = s->next)
9581	if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY))
9582	    == (SEC_ALLOC | SEC_SMALL_DATA))
9583	  break;
9584      if (s == NULL)
9585	for (s = obfd->sections; s != NULL; s = s->next)
9586	  if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA))
9587	      == (SEC_ALLOC | SEC_SMALL_DATA))
9588	    break;
9589      if (s == NULL)
9590	for (s = obfd->sections; s != NULL; s = s->next)
9591	  if ((s->flags & (SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
9592	    break;
9593      if (s == NULL)
9594	for (s = obfd->sections; s != NULL; s = s->next)
9595	  if ((s->flags & SEC_ALLOC) == SEC_ALLOC)
9596	    break;
9597    }
9598
9599  TOCstart = 0;
9600  if (s != NULL)
9601    TOCstart = s->output_section->vma + s->output_offset;
9602
9603  return TOCstart;
9604}
9605
9606/* Build all the stubs associated with the current output file.
9607   The stubs are kept in a hash table attached to the main linker
9608   hash table.  This function is called via gldelf64ppc_finish.  */
9609
9610bfd_boolean
9611ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
9612		       struct bfd_link_info *info,
9613		       char **stats)
9614{
9615  struct ppc_link_hash_table *htab = ppc_hash_table (info);
9616  asection *stub_sec;
9617  bfd_byte *p;
9618  int stub_sec_count = 0;
9619
9620  htab->emit_stub_syms = emit_stub_syms;
9621
9622  /* Allocate memory to hold the linker stubs.  */
9623  for (stub_sec = htab->stub_bfd->sections;
9624       stub_sec != NULL;
9625       stub_sec = stub_sec->next)
9626    if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
9627	&& stub_sec->size != 0)
9628      {
9629	stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
9630	if (stub_sec->contents == NULL)
9631	  return FALSE;
9632	/* We want to check that built size is the same as calculated
9633	   size.  rawsize is a convenient location to use.  */
9634	stub_sec->rawsize = stub_sec->size;
9635	stub_sec->size = 0;
9636      }
9637
9638  if (htab->glink != NULL && htab->glink->size != 0)
9639    {
9640      unsigned int indx;
9641      bfd_vma plt0;
9642
9643      /* Build the .glink plt call stub.  */
9644      if (htab->emit_stub_syms)
9645	{
9646	  struct elf_link_hash_entry *h;
9647	  h = elf_link_hash_lookup (&htab->elf, "__glink", TRUE, FALSE, FALSE);
9648	  if (h == NULL)
9649	    return FALSE;
9650	  if (h->root.type == bfd_link_hash_new)
9651	    {
9652	      h->root.type = bfd_link_hash_defined;
9653	      h->root.u.def.section = htab->glink;
9654	      h->root.u.def.value = 8;
9655	      h->ref_regular = 1;
9656	      h->def_regular = 1;
9657	      h->ref_regular_nonweak = 1;
9658	      h->forced_local = 1;
9659	      h->non_elf = 0;
9660	    }
9661	}
9662      p = htab->glink->contents;
9663      plt0 = (htab->plt->output_section->vma
9664	      + htab->plt->output_offset
9665	      - (htab->glink->output_section->vma
9666		 + htab->glink->output_offset
9667		 + 16));
9668      bfd_put_64 (htab->glink->owner, plt0, p);
9669      p += 8;
9670      bfd_put_32 (htab->glink->owner, MFLR_R12, p);
9671      p += 4;
9672      bfd_put_32 (htab->glink->owner, BCL_20_31, p);
9673      p += 4;
9674      bfd_put_32 (htab->glink->owner, MFLR_R11, p);
9675      p += 4;
9676      bfd_put_32 (htab->glink->owner, LD_R2_M16R11, p);
9677      p += 4;
9678      bfd_put_32 (htab->glink->owner, MTLR_R12, p);
9679      p += 4;
9680      bfd_put_32 (htab->glink->owner, ADD_R12_R2_R11, p);
9681      p += 4;
9682      bfd_put_32 (htab->glink->owner, LD_R11_0R12, p);
9683      p += 4;
9684      bfd_put_32 (htab->glink->owner, LD_R2_0R12 | 8, p);
9685      p += 4;
9686      bfd_put_32 (htab->glink->owner, MTCTR_R11, p);
9687      p += 4;
9688      bfd_put_32 (htab->glink->owner, LD_R11_0R12 | 16, p);
9689      p += 4;
9690      bfd_put_32 (htab->glink->owner, BCTR, p);
9691      p += 4;
9692      while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
9693	{
9694	  bfd_put_32 (htab->glink->owner, NOP, p);
9695	  p += 4;
9696	}
9697
9698      /* Build the .glink lazy link call stubs.  */
9699      indx = 0;
9700      while (p < htab->glink->contents + htab->glink->size)
9701	{
9702	  if (indx < 0x8000)
9703	    {
9704	      bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
9705	      p += 4;
9706	    }
9707	  else
9708	    {
9709	      bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
9710	      p += 4;
9711	      bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx), p);
9712	      p += 4;
9713	    }
9714	  bfd_put_32 (htab->glink->owner,
9715		      B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
9716	  indx++;
9717	  p += 4;
9718	}
9719      htab->glink->rawsize = p - htab->glink->contents;
9720    }
9721
9722  if (htab->brlt->size != 0)
9723    {
9724      htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
9725					 htab->brlt->size);
9726      if (htab->brlt->contents == NULL)
9727	return FALSE;
9728    }
9729  if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
9730    {
9731      htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
9732					    htab->relbrlt->size);
9733      if (htab->relbrlt->contents == NULL)
9734	return FALSE;
9735    }
9736
9737  /* Build the stubs as directed by the stub hash table.  */
9738  bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
9739
9740  if (htab->relbrlt != NULL)
9741    htab->relbrlt->reloc_count = 0;
9742
9743  for (stub_sec = htab->stub_bfd->sections;
9744       stub_sec != NULL;
9745       stub_sec = stub_sec->next)
9746    if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
9747      {
9748	stub_sec_count += 1;
9749	if (stub_sec->rawsize != stub_sec->size)
9750	  break;
9751      }
9752
9753  if (stub_sec != NULL
9754      || htab->glink->rawsize != htab->glink->size)
9755    {
9756      htab->stub_error = TRUE;
9757      (*_bfd_error_handler) (_("stubs don't match calculated size"));
9758    }
9759
9760  if (htab->stub_error)
9761    return FALSE;
9762
9763  if (stats != NULL)
9764    {
9765      *stats = bfd_malloc (500);
9766      if (*stats == NULL)
9767	return FALSE;
9768
9769      sprintf (*stats, _("linker stubs in %u group%s\n"
9770			 "  branch       %lu\n"
9771			 "  toc adjust   %lu\n"
9772			 "  long branch  %lu\n"
9773			 "  long toc adj %lu\n"
9774			 "  plt call     %lu"),
9775	       stub_sec_count,
9776	       stub_sec_count == 1 ? "" : "s",
9777	       htab->stub_count[ppc_stub_long_branch - 1],
9778	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
9779	       htab->stub_count[ppc_stub_plt_branch - 1],
9780	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
9781	       htab->stub_count[ppc_stub_plt_call - 1]);
9782    }
9783  return TRUE;
9784}
9785
9786/* This function undoes the changes made by add_symbol_adjust.  */
9787
9788static bfd_boolean
9789undo_symbol_twiddle (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
9790{
9791  struct ppc_link_hash_entry *eh;
9792
9793  if (h->root.type == bfd_link_hash_indirect)
9794    return TRUE;
9795
9796  if (h->root.type == bfd_link_hash_warning)
9797    h = (struct elf_link_hash_entry *) h->root.u.i.link;
9798
9799  eh = (struct ppc_link_hash_entry *) h;
9800  if (eh->elf.root.type != bfd_link_hash_undefweak || !eh->was_undefined)
9801    return TRUE;
9802
9803  eh->elf.root.type = bfd_link_hash_undefined;
9804  return TRUE;
9805}
9806
9807void
9808ppc64_elf_restore_symbols (struct bfd_link_info *info)
9809{
9810  struct ppc_link_hash_table *htab = ppc_hash_table (info);
9811  elf_link_hash_traverse (&htab->elf, undo_symbol_twiddle, info);
9812}
9813
9814/* What to do when ld finds relocations against symbols defined in
9815   discarded sections.  */
9816
9817static unsigned int
9818ppc64_elf_action_discarded (asection *sec)
9819{
9820  if (strcmp (".opd", sec->name) == 0)
9821    return 0;
9822
9823  if (strcmp (".toc", sec->name) == 0)
9824    return 0;
9825
9826  if (strcmp (".toc1", sec->name) == 0)
9827    return 0;
9828
9829  return _bfd_elf_default_action_discarded (sec);
9830}
9831
9832/* The RELOCATE_SECTION function is called by the ELF backend linker
9833   to handle the relocations for a section.
9834
9835   The relocs are always passed as Rela structures; if the section
9836   actually uses Rel structures, the r_addend field will always be
9837   zero.
9838
9839   This function is responsible for adjust the section contents as
9840   necessary, and (if using Rela relocs and generating a
9841   relocatable output file) adjusting the reloc addend as
9842   necessary.
9843
9844   This function does not have to worry about setting the reloc
9845   address or the reloc symbol index.
9846
9847   LOCAL_SYMS is a pointer to the swapped in local symbols.
9848
9849   LOCAL_SECTIONS is an array giving the section in the input file
9850   corresponding to the st_shndx field of each local symbol.
9851
9852   The global hash table entry for the global symbols can be found
9853   via elf_sym_hashes (input_bfd).
9854
9855   When generating relocatable output, this function must handle
9856   STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
9857   going to be the section symbol corresponding to the output
9858   section, which means that the addend must be adjusted
9859   accordingly.  */
9860
9861static bfd_boolean
9862ppc64_elf_relocate_section (bfd *output_bfd,
9863			    struct bfd_link_info *info,
9864			    bfd *input_bfd,
9865			    asection *input_section,
9866			    bfd_byte *contents,
9867			    Elf_Internal_Rela *relocs,
9868			    Elf_Internal_Sym *local_syms,
9869			    asection **local_sections)
9870{
9871  struct ppc_link_hash_table *htab;
9872  Elf_Internal_Shdr *symtab_hdr;
9873  struct elf_link_hash_entry **sym_hashes;
9874  Elf_Internal_Rela *rel;
9875  Elf_Internal_Rela *relend;
9876  Elf_Internal_Rela outrel;
9877  bfd_byte *loc;
9878  struct got_entry **local_got_ents;
9879  bfd_vma TOCstart;
9880  bfd_boolean ret = TRUE;
9881  bfd_boolean is_opd;
9882  /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
9883  bfd_boolean is_power4 = FALSE;
9884  bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
9885
9886  /* Initialize howto table if needed.  */
9887  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
9888    ppc_howto_init ();
9889
9890  htab = ppc_hash_table (info);
9891
9892  /* Don't relocate stub sections.  */
9893  if (input_section->owner == htab->stub_bfd)
9894    return TRUE;
9895
9896  local_got_ents = elf_local_got_ents (input_bfd);
9897  TOCstart = elf_gp (output_bfd);
9898  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9899  sym_hashes = elf_sym_hashes (input_bfd);
9900  is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
9901
9902  rel = relocs;
9903  relend = relocs + input_section->reloc_count;
9904  for (; rel < relend; rel++)
9905    {
9906      enum elf_ppc64_reloc_type r_type;
9907      bfd_vma addend, orig_addend;
9908      bfd_reloc_status_type r;
9909      Elf_Internal_Sym *sym;
9910      asection *sec;
9911      struct elf_link_hash_entry *h_elf;
9912      struct ppc_link_hash_entry *h;
9913      struct ppc_link_hash_entry *fdh;
9914      const char *sym_name;
9915      unsigned long r_symndx, toc_symndx;
9916      char tls_mask, tls_gd, tls_type;
9917      char sym_type;
9918      bfd_vma relocation;
9919      bfd_boolean unresolved_reloc;
9920      bfd_boolean warned;
9921      unsigned long insn, mask;
9922      struct ppc_stub_hash_entry *stub_entry;
9923      bfd_vma max_br_offset;
9924      bfd_vma from;
9925
9926      r_type = ELF64_R_TYPE (rel->r_info);
9927      r_symndx = ELF64_R_SYM (rel->r_info);
9928
9929      /* For old style R_PPC64_TOC relocs with a zero symbol, use the
9930	 symbol of the previous ADDR64 reloc.  The symbol gives us the
9931	 proper TOC base to use.  */
9932      if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
9933	  && rel != relocs
9934	  && ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
9935	  && is_opd)
9936	r_symndx = ELF64_R_SYM (rel[-1].r_info);
9937
9938      sym = NULL;
9939      sec = NULL;
9940      h_elf = NULL;
9941      sym_name = NULL;
9942      unresolved_reloc = FALSE;
9943      warned = FALSE;
9944      orig_addend = rel->r_addend;
9945
9946      if (r_symndx < symtab_hdr->sh_info)
9947	{
9948	  /* It's a local symbol.  */
9949	  long *opd_adjust;
9950
9951	  sym = local_syms + r_symndx;
9952	  sec = local_sections[r_symndx];
9953	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
9954	  sym_type = ELF64_ST_TYPE (sym->st_info);
9955	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9956	  opd_adjust = get_opd_info (sec);
9957	  if (opd_adjust != NULL)
9958	    {
9959	      long adjust = opd_adjust[(sym->st_value + rel->r_addend) / 8];
9960	      if (adjust == -1)
9961		relocation = 0;
9962	      else
9963		{
9964		  /* If this is a relocation against the opd section sym
9965		     and we have edited .opd, adjust the reloc addend so
9966		     that ld -r and ld --emit-relocs output is correct.
9967		     If it is a reloc against some other .opd symbol,
9968		     then the symbol value will be adjusted later.  */
9969		  if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9970		    rel->r_addend += adjust;
9971		  else
9972		    relocation += adjust;
9973		}
9974	    }
9975	}
9976      else
9977	{
9978	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
9979				   r_symndx, symtab_hdr, sym_hashes,
9980				   h_elf, sec, relocation,
9981				   unresolved_reloc, warned);
9982	  sym_name = h_elf->root.root.string;
9983	  sym_type = h_elf->type;
9984	}
9985      h = (struct ppc_link_hash_entry *) h_elf;
9986
9987      if (sec != NULL && elf_discarded_section (sec))
9988	{
9989	  /* For relocs against symbols from removed linkonce sections,
9990	     or sections discarded by a linker script, we just want the
9991	     section contents zeroed.  Avoid any special processing.  */
9992	  _bfd_clear_contents (ppc64_elf_howto_table[r_type], input_bfd,
9993			       contents + rel->r_offset);
9994	  rel->r_info = 0;
9995	  rel->r_addend = 0;
9996	  continue;
9997	}
9998
9999      if (info->relocatable)
10000	continue;
10001
10002      /* TLS optimizations.  Replace instruction sequences and relocs
10003	 based on information we collected in tls_optimize.  We edit
10004	 RELOCS so that --emit-relocs will output something sensible
10005	 for the final instruction stream.  */
10006      tls_mask = 0;
10007      tls_gd = 0;
10008      toc_symndx = 0;
10009      if (IS_PPC64_TLS_RELOC (r_type))
10010	{
10011	  if (h != NULL)
10012	    tls_mask = h->tls_mask;
10013	  else if (local_got_ents != NULL)
10014	    {
10015	      char *lgot_masks;
10016	      lgot_masks = (char *) (local_got_ents + symtab_hdr->sh_info);
10017	      tls_mask = lgot_masks[r_symndx];
10018	    }
10019	  if (tls_mask == 0 && r_type == R_PPC64_TLS)
10020	    {
10021	      /* Check for toc tls entries.  */
10022	      char *toc_tls;
10023
10024	      if (!get_tls_mask (&toc_tls, &toc_symndx, &local_syms,
10025				 rel, input_bfd))
10026		return FALSE;
10027
10028	      if (toc_tls)
10029		tls_mask = *toc_tls;
10030	    }
10031	}
10032
10033      /* Check that tls relocs are used with tls syms, and non-tls
10034	 relocs are used with non-tls syms.  */
10035      if (r_symndx != 0
10036	  && r_type != R_PPC64_NONE
10037	  && (h == NULL
10038	      || h->elf.root.type == bfd_link_hash_defined
10039	      || h->elf.root.type == bfd_link_hash_defweak)
10040	  && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
10041	{
10042	  if (r_type == R_PPC64_TLS && tls_mask != 0)
10043	    /* R_PPC64_TLS is OK against a symbol in the TOC.  */
10044	    ;
10045	  else
10046	    (*_bfd_error_handler)
10047	      (sym_type == STT_TLS
10048	       ? _("%B(%A+0x%lx): %s used with TLS symbol %s")
10049	       : _("%B(%A+0x%lx): %s used with non-TLS symbol %s"),
10050	       input_bfd,
10051	       input_section,
10052	       (long) rel->r_offset,
10053	       ppc64_elf_howto_table[r_type]->name,
10054	       sym_name);
10055	}
10056
10057      /* Ensure reloc mapping code below stays sane.  */
10058      if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
10059	  || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
10060	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
10061	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
10062	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
10063	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
10064	  || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
10065	  || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
10066	  || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
10067	  || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
10068	abort ();
10069
10070      switch (r_type)
10071	{
10072	default:
10073	  break;
10074
10075	case R_PPC64_TOC16:
10076	case R_PPC64_TOC16_LO:
10077	case R_PPC64_TOC16_DS:
10078	case R_PPC64_TOC16_LO_DS:
10079	  {
10080	    /* Check for toc tls entries.  */
10081	    char *toc_tls;
10082	    int retval;
10083
10084	    retval = get_tls_mask (&toc_tls, &toc_symndx, &local_syms,
10085				   rel, input_bfd);
10086	    if (retval == 0)
10087	      return FALSE;
10088
10089	    if (toc_tls)
10090	      {
10091		tls_mask = *toc_tls;
10092		if (r_type == R_PPC64_TOC16_DS
10093		    || r_type == R_PPC64_TOC16_LO_DS)
10094		  {
10095		    if (tls_mask != 0
10096			&& (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
10097		      goto toctprel;
10098		  }
10099		else
10100		  {
10101		    /* If we found a GD reloc pair, then we might be
10102		       doing a GD->IE transition.  */
10103		    if (retval == 2)
10104		      {
10105			tls_gd = TLS_TPRELGD;
10106			if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
10107			  goto tls_get_addr_check;
10108		      }
10109		    else if (retval == 3)
10110		      {
10111			if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
10112			  goto tls_get_addr_check;
10113		      }
10114		  }
10115	      }
10116	  }
10117	  break;
10118
10119	case R_PPC64_GOT_TPREL16_DS:
10120	case R_PPC64_GOT_TPREL16_LO_DS:
10121	  if (tls_mask != 0
10122	      && (tls_mask & TLS_TPREL) == 0)
10123	    {
10124	    toctprel:
10125	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
10126	      insn &= 31 << 21;
10127	      insn |= 0x3c0d0000;	/* addis 0,13,0 */
10128	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
10129	      r_type = R_PPC64_TPREL16_HA;
10130	      if (toc_symndx != 0)
10131		{
10132		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
10133		  /* We changed the symbol.  Start over in order to
10134		     get h, sym, sec etc. right.  */
10135		  rel--;
10136		  continue;
10137		}
10138	      else
10139		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10140	    }
10141	  break;
10142
10143	case R_PPC64_TLS:
10144	  if (tls_mask != 0
10145	      && (tls_mask & TLS_TPREL) == 0)
10146	    {
10147	      bfd_vma rtra;
10148	      insn = bfd_get_32 (output_bfd, contents + rel->r_offset);
10149	      if ((insn & ((0x3f << 26) | (31 << 11)))
10150		  == ((31 << 26) | (13 << 11)))
10151		rtra = insn & ((1 << 26) - (1 << 16));
10152	      else if ((insn & ((0x3f << 26) | (31 << 16)))
10153		       == ((31 << 26) | (13 << 16)))
10154		rtra = (insn & (31 << 21)) | ((insn & (31 << 11)) << 5);
10155	      else
10156		abort ();
10157	      if ((insn & ((1 << 11) - (1 << 1))) == 266 << 1)
10158		/* add -> addi.  */
10159		insn = 14 << 26;
10160	      else if ((insn & (31 << 1)) == 23 << 1
10161		       && ((insn & (31 << 6)) < 14 << 6
10162			   || ((insn & (31 << 6)) >= 16 << 6
10163			       && (insn & (31 << 6)) < 24 << 6)))
10164		/* load and store indexed -> dform.  */
10165		insn = (32 | ((insn >> 6) & 31)) << 26;
10166	      else if ((insn & (31 << 1)) == 21 << 1
10167		       && (insn & (0x1a << 6)) == 0)
10168		/* ldx, ldux, stdx, stdux -> ld, ldu, std, stdu.  */
10169		insn = (((58 | ((insn >> 6) & 4)) << 26)
10170			| ((insn >> 6) & 1));
10171	      else if ((insn & (31 << 1)) == 21 << 1
10172		       && (insn & ((1 << 11) - (1 << 1))) == 341 << 1)
10173		/* lwax -> lwa.  */
10174		insn = (58 << 26) | 2;
10175	      else
10176		abort ();
10177	      insn |= rtra;
10178	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
10179	      /* Was PPC64_TLS which sits on insn boundary, now
10180		 PPC64_TPREL16_LO which is at low-order half-word.  */
10181	      rel->r_offset += d_offset;
10182	      r_type = R_PPC64_TPREL16_LO;
10183	      if (toc_symndx != 0)
10184		{
10185		  rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
10186		  /* We changed the symbol.  Start over in order to
10187		     get h, sym, sec etc. right.  */
10188		  rel--;
10189		  continue;
10190		}
10191	      else
10192		rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10193	    }
10194	  break;
10195
10196	case R_PPC64_GOT_TLSGD16_HI:
10197	case R_PPC64_GOT_TLSGD16_HA:
10198	  tls_gd = TLS_TPRELGD;
10199	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
10200	    goto tls_gdld_hi;
10201	  break;
10202
10203	case R_PPC64_GOT_TLSLD16_HI:
10204	case R_PPC64_GOT_TLSLD16_HA:
10205	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
10206	    {
10207	    tls_gdld_hi:
10208	      if ((tls_mask & tls_gd) != 0)
10209		r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
10210			  + R_PPC64_GOT_TPREL16_DS);
10211	      else
10212		{
10213		  bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
10214		  rel->r_offset -= d_offset;
10215		  r_type = R_PPC64_NONE;
10216		}
10217	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10218	    }
10219	  break;
10220
10221	case R_PPC64_GOT_TLSGD16:
10222	case R_PPC64_GOT_TLSGD16_LO:
10223	  tls_gd = TLS_TPRELGD;
10224	  if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
10225	    goto tls_get_addr_check;
10226	  break;
10227
10228	case R_PPC64_GOT_TLSLD16:
10229	case R_PPC64_GOT_TLSLD16_LO:
10230	  if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
10231	    {
10232	    tls_get_addr_check:
10233	      if (rel + 1 < relend)
10234		{
10235		  enum elf_ppc64_reloc_type r_type2;
10236		  unsigned long r_symndx2;
10237		  struct elf_link_hash_entry *h2;
10238		  bfd_vma insn1, insn2, insn3;
10239		  bfd_vma offset;
10240
10241		  /* The next instruction should be a call to
10242		     __tls_get_addr.  Peek at the reloc to be sure.  */
10243		  r_type2 = ELF64_R_TYPE (rel[1].r_info);
10244		  r_symndx2 = ELF64_R_SYM (rel[1].r_info);
10245		  if (r_symndx2 < symtab_hdr->sh_info
10246		      || (r_type2 != R_PPC64_REL14
10247			  && r_type2 != R_PPC64_REL14_BRTAKEN
10248			  && r_type2 != R_PPC64_REL14_BRNTAKEN
10249			  && r_type2 != R_PPC64_REL24))
10250		    break;
10251
10252		  h2 = sym_hashes[r_symndx2 - symtab_hdr->sh_info];
10253		  while (h2->root.type == bfd_link_hash_indirect
10254			 || h2->root.type == bfd_link_hash_warning)
10255		    h2 = (struct elf_link_hash_entry *) h2->root.u.i.link;
10256		  if (h2 == NULL || (h2 != &htab->tls_get_addr->elf
10257				     && h2 != &htab->tls_get_addr_fd->elf))
10258		    break;
10259
10260		  /* OK, it checks out.  Replace the call.  */
10261		  offset = rel[1].r_offset;
10262		  insn1 = bfd_get_32 (output_bfd,
10263				      contents + rel->r_offset - d_offset);
10264		  insn3 = bfd_get_32 (output_bfd,
10265				      contents + offset + 4);
10266		  if ((tls_mask & tls_gd) != 0)
10267		    {
10268		      /* IE */
10269		      insn1 &= (1 << 26) - (1 << 2);
10270		      insn1 |= 58 << 26;	/* ld */
10271		      insn2 = 0x7c636a14;	/* add 3,3,13 */
10272		      rel[1].r_info = ELF64_R_INFO (r_symndx2, R_PPC64_NONE);
10273		      if ((tls_mask & TLS_EXPLICIT) == 0)
10274			r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
10275				  + R_PPC64_GOT_TPREL16_DS);
10276		      else
10277			r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
10278		      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10279		    }
10280		  else
10281		    {
10282		      /* LE */
10283		      insn1 = 0x3c6d0000;	/* addis 3,13,0 */
10284		      insn2 = 0x38630000;	/* addi 3,3,0 */
10285		      if (tls_gd == 0)
10286			{
10287			  /* Was an LD reloc.  */
10288			  r_symndx = 0;
10289			  rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
10290			  rel[1].r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
10291			}
10292		      else if (toc_symndx != 0)
10293			r_symndx = toc_symndx;
10294		      r_type = R_PPC64_TPREL16_HA;
10295		      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10296		      rel[1].r_info = ELF64_R_INFO (r_symndx,
10297						    R_PPC64_TPREL16_LO);
10298		      rel[1].r_offset += d_offset;
10299		    }
10300		  if (insn3 == NOP
10301		      || insn3 == CROR_151515 || insn3 == CROR_313131)
10302		    {
10303		      insn3 = insn2;
10304		      insn2 = NOP;
10305		      rel[1].r_offset += 4;
10306		    }
10307		  bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - d_offset);
10308		  bfd_put_32 (output_bfd, insn2, contents + offset);
10309		  bfd_put_32 (output_bfd, insn3, contents + offset + 4);
10310		  if (tls_gd == 0 || toc_symndx != 0)
10311		    {
10312		      /* We changed the symbol.  Start over in order
10313			 to get h, sym, sec etc. right.  */
10314		      rel--;
10315		      continue;
10316		    }
10317		}
10318	    }
10319	  break;
10320
10321	case R_PPC64_DTPMOD64:
10322	  if (rel + 1 < relend
10323	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
10324	      && rel[1].r_offset == rel->r_offset + 8)
10325	    {
10326	      if ((tls_mask & TLS_GD) == 0)
10327		{
10328		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
10329		  if ((tls_mask & TLS_TPRELGD) != 0)
10330		    r_type = R_PPC64_TPREL64;
10331		  else
10332		    {
10333		      bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
10334		      r_type = R_PPC64_NONE;
10335		    }
10336		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10337		}
10338	    }
10339	  else
10340	    {
10341	      if ((tls_mask & TLS_LD) == 0)
10342		{
10343		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
10344		  r_type = R_PPC64_NONE;
10345		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10346		}
10347	    }
10348	  break;
10349
10350	case R_PPC64_TPREL64:
10351	  if ((tls_mask & TLS_TPREL) == 0)
10352	    {
10353	      r_type = R_PPC64_NONE;
10354	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
10355	    }
10356	  break;
10357	}
10358
10359      /* Handle other relocations that tweak non-addend part of insn.  */
10360      insn = 0;
10361      max_br_offset = 1 << 25;
10362      addend = rel->r_addend;
10363      switch (r_type)
10364	{
10365	default:
10366	  break;
10367
10368	  /* Branch taken prediction relocations.  */
10369	case R_PPC64_ADDR14_BRTAKEN:
10370	case R_PPC64_REL14_BRTAKEN:
10371	  insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
10372	  /* Fall thru.  */
10373
10374	  /* Branch not taken prediction relocations.  */
10375	case R_PPC64_ADDR14_BRNTAKEN:
10376	case R_PPC64_REL14_BRNTAKEN:
10377	  insn |= bfd_get_32 (output_bfd,
10378			      contents + rel->r_offset) & ~(0x01 << 21);
10379	  /* Fall thru.  */
10380
10381	case R_PPC64_REL14:
10382	  max_br_offset = 1 << 15;
10383	  /* Fall thru.  */
10384
10385	case R_PPC64_REL24:
10386	  /* Calls to functions with a different TOC, such as calls to
10387	     shared objects, need to alter the TOC pointer.  This is
10388	     done using a linkage stub.  A REL24 branching to these
10389	     linkage stubs needs to be followed by a nop, as the nop
10390	     will be replaced with an instruction to restore the TOC
10391	     base pointer.  */
10392	  stub_entry = NULL;
10393	  fdh = h;
10394	  if (((h != NULL
10395		&& (((fdh = h->oh) != NULL
10396		     && fdh->elf.plt.plist != NULL)
10397		    || (fdh = h)->elf.plt.plist != NULL))
10398	       || (sec != NULL
10399		   && sec->output_section != NULL
10400		   && sec->id <= htab->top_id
10401		   && (htab->stub_group[sec->id].toc_off
10402		       != htab->stub_group[input_section->id].toc_off)))
10403	      && (stub_entry = ppc_get_stub_entry (input_section, sec, fdh,
10404						   rel, htab)) != NULL
10405	      && (stub_entry->stub_type == ppc_stub_plt_call
10406		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
10407		  || stub_entry->stub_type == ppc_stub_long_branch_r2off))
10408	    {
10409	      bfd_boolean can_plt_call = FALSE;
10410
10411	      if (rel->r_offset + 8 <= input_section->size)
10412		{
10413		  unsigned long nop;
10414		  nop = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
10415		  if (nop == NOP
10416		      || nop == CROR_151515 || nop == CROR_313131)
10417		    {
10418		      bfd_put_32 (input_bfd, LD_R2_40R1,
10419				  contents + rel->r_offset + 4);
10420		      can_plt_call = TRUE;
10421		    }
10422		}
10423
10424	      if (!can_plt_call)
10425		{
10426		  if (stub_entry->stub_type == ppc_stub_plt_call)
10427		    {
10428		      /* If this is a plain branch rather than a branch
10429			 and link, don't require a nop.  However, don't
10430			 allow tail calls in a shared library as they
10431			 will result in r2 being corrupted.  */
10432		      unsigned long br;
10433		      br = bfd_get_32 (input_bfd, contents + rel->r_offset);
10434		      if (info->executable && (br & 1) == 0)
10435			can_plt_call = TRUE;
10436		      else
10437			stub_entry = NULL;
10438		    }
10439		  else if (h != NULL
10440			   && strcmp (h->elf.root.root.string,
10441				      ".__libc_start_main") == 0)
10442		    {
10443		      /* Allow crt1 branch to go via a toc adjusting stub.  */
10444		      can_plt_call = TRUE;
10445		    }
10446		  else
10447		    {
10448		      if (strcmp (input_section->output_section->name,
10449				  ".init") == 0
10450			  || strcmp (input_section->output_section->name,
10451				     ".fini") == 0)
10452			(*_bfd_error_handler)
10453			  (_("%B(%A+0x%lx): automatic multiple TOCs "
10454			     "not supported using your crt files; "
10455			     "recompile with -mminimal-toc or upgrade gcc"),
10456			   input_bfd,
10457			   input_section,
10458			   (long) rel->r_offset);
10459		      else
10460			(*_bfd_error_handler)
10461			  (_("%B(%A+0x%lx): sibling call optimization to `%s' "
10462			     "does not allow automatic multiple TOCs; "
10463			     "recompile with -mminimal-toc or "
10464			     "-fno-optimize-sibling-calls, "
10465			     "or make `%s' extern"),
10466			   input_bfd,
10467			   input_section,
10468			   (long) rel->r_offset,
10469			   sym_name,
10470			   sym_name);
10471		      bfd_set_error (bfd_error_bad_value);
10472		      ret = FALSE;
10473		    }
10474		}
10475
10476	      if (can_plt_call
10477		  && stub_entry->stub_type == ppc_stub_plt_call)
10478		unresolved_reloc = FALSE;
10479	    }
10480
10481	  if (stub_entry == NULL
10482	      && get_opd_info (sec) != NULL)
10483	    {
10484	      /* The branch destination is the value of the opd entry. */
10485	      bfd_vma off = (relocation + addend
10486			     - sec->output_section->vma
10487			     - sec->output_offset);
10488	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL);
10489	      if (dest != (bfd_vma) -1)
10490		{
10491		  relocation = dest;
10492		  addend = 0;
10493		}
10494	    }
10495
10496	  /* If the branch is out of reach we ought to have a long
10497	     branch stub.  */
10498	  from = (rel->r_offset
10499		  + input_section->output_offset
10500		  + input_section->output_section->vma);
10501
10502	  if (stub_entry == NULL
10503	      && (relocation + addend - from + max_br_offset
10504		  >= 2 * max_br_offset)
10505	      && r_type != R_PPC64_ADDR14_BRTAKEN
10506	      && r_type != R_PPC64_ADDR14_BRNTAKEN)
10507	    stub_entry = ppc_get_stub_entry (input_section, sec, h, rel,
10508					     htab);
10509
10510	  if (stub_entry != NULL)
10511	    {
10512	      /* Munge up the value and addend so that we call the stub
10513		 rather than the procedure directly.  */
10514	      relocation = (stub_entry->stub_offset
10515			    + stub_entry->stub_sec->output_offset
10516			    + stub_entry->stub_sec->output_section->vma);
10517	      addend = 0;
10518	    }
10519
10520	  if (insn != 0)
10521	    {
10522	      if (is_power4)
10523		{
10524		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
10525		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
10526		     for branch on CTR insns (BO == 1a00t or 1a01t).  */
10527		  if ((insn & (0x14 << 21)) == (0x04 << 21))
10528		    insn |= 0x02 << 21;
10529		  else if ((insn & (0x14 << 21)) == (0x10 << 21))
10530		    insn |= 0x08 << 21;
10531		  else
10532		    break;
10533		}
10534	      else
10535		{
10536		  /* Invert 'y' bit if not the default.  */
10537		  if ((bfd_signed_vma) (relocation + addend - from) < 0)
10538		    insn ^= 0x01 << 21;
10539		}
10540
10541	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
10542	    }
10543
10544	  /* NOP out calls to undefined weak functions.
10545	     We can thus call a weak function without first
10546	     checking whether the function is defined.  */
10547	  else if (h != NULL
10548		   && h->elf.root.type == bfd_link_hash_undefweak
10549		   && r_type == R_PPC64_REL24
10550		   && relocation == 0
10551		   && addend == 0)
10552	    {
10553	      bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
10554	      continue;
10555	    }
10556	  break;
10557	}
10558
10559      /* Set `addend'.  */
10560      tls_type = 0;
10561      switch (r_type)
10562	{
10563	default:
10564	  (*_bfd_error_handler)
10565	    (_("%B: unknown relocation type %d for symbol %s"),
10566	     input_bfd, (int) r_type, sym_name);
10567
10568	  bfd_set_error (bfd_error_bad_value);
10569	  ret = FALSE;
10570	  continue;
10571
10572	case R_PPC64_NONE:
10573	case R_PPC64_TLS:
10574	case R_PPC64_GNU_VTINHERIT:
10575	case R_PPC64_GNU_VTENTRY:
10576	  continue;
10577
10578	  /* GOT16 relocations.  Like an ADDR16 using the symbol's
10579	     address in the GOT as relocation value instead of the
10580	     symbol's value itself.  Also, create a GOT entry for the
10581	     symbol and put the symbol value there.  */
10582	case R_PPC64_GOT_TLSGD16:
10583	case R_PPC64_GOT_TLSGD16_LO:
10584	case R_PPC64_GOT_TLSGD16_HI:
10585	case R_PPC64_GOT_TLSGD16_HA:
10586	  tls_type = TLS_TLS | TLS_GD;
10587	  goto dogot;
10588
10589	case R_PPC64_GOT_TLSLD16:
10590	case R_PPC64_GOT_TLSLD16_LO:
10591	case R_PPC64_GOT_TLSLD16_HI:
10592	case R_PPC64_GOT_TLSLD16_HA:
10593	  tls_type = TLS_TLS | TLS_LD;
10594	  goto dogot;
10595
10596	case R_PPC64_GOT_TPREL16_DS:
10597	case R_PPC64_GOT_TPREL16_LO_DS:
10598	case R_PPC64_GOT_TPREL16_HI:
10599	case R_PPC64_GOT_TPREL16_HA:
10600	  tls_type = TLS_TLS | TLS_TPREL;
10601	  goto dogot;
10602
10603	case R_PPC64_GOT_DTPREL16_DS:
10604	case R_PPC64_GOT_DTPREL16_LO_DS:
10605	case R_PPC64_GOT_DTPREL16_HI:
10606	case R_PPC64_GOT_DTPREL16_HA:
10607	  tls_type = TLS_TLS | TLS_DTPREL;
10608	  goto dogot;
10609
10610	case R_PPC64_GOT16:
10611	case R_PPC64_GOT16_LO:
10612	case R_PPC64_GOT16_HI:
10613	case R_PPC64_GOT16_HA:
10614	case R_PPC64_GOT16_DS:
10615	case R_PPC64_GOT16_LO_DS:
10616	dogot:
10617	  {
10618	    /* Relocation is to the entry for this symbol in the global
10619	       offset table.  */
10620	    asection *got;
10621	    bfd_vma *offp;
10622	    bfd_vma off;
10623	    unsigned long indx = 0;
10624
10625	    if (tls_type == (TLS_TLS | TLS_LD)
10626		&& (h == NULL
10627		    || !h->elf.def_dynamic))
10628	      offp = &ppc64_tlsld_got (input_bfd)->offset;
10629	    else
10630	      {
10631		struct got_entry *ent;
10632
10633		if (h != NULL)
10634		  {
10635		    bfd_boolean dyn = htab->elf.dynamic_sections_created;
10636		    if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
10637							  &h->elf)
10638			|| (info->shared
10639			    && SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
10640		      /* This is actually a static link, or it is a
10641			 -Bsymbolic link and the symbol is defined
10642			 locally, or the symbol was forced to be local
10643			 because of a version file.  */
10644		      ;
10645		    else
10646		      {
10647			indx = h->elf.dynindx;
10648			unresolved_reloc = FALSE;
10649		      }
10650		    ent = h->elf.got.glist;
10651		  }
10652		else
10653		  {
10654		    if (local_got_ents == NULL)
10655		      abort ();
10656		    ent = local_got_ents[r_symndx];
10657		  }
10658
10659		for (; ent != NULL; ent = ent->next)
10660		  if (ent->addend == orig_addend
10661		      && ent->owner == input_bfd
10662		      && ent->tls_type == tls_type)
10663		    break;
10664		if (ent == NULL)
10665		  abort ();
10666		offp = &ent->got.offset;
10667	      }
10668
10669	    got = ppc64_elf_tdata (input_bfd)->got;
10670	    if (got == NULL)
10671	      abort ();
10672
10673	    /* The offset must always be a multiple of 8.  We use the
10674	       least significant bit to record whether we have already
10675	       processed this entry.  */
10676	    off = *offp;
10677	    if ((off & 1) != 0)
10678	      off &= ~1;
10679	    else
10680	      {
10681		/* Generate relocs for the dynamic linker, except in
10682		   the case of TLSLD where we'll use one entry per
10683		   module.  */
10684		asection *relgot = ppc64_elf_tdata (input_bfd)->relgot;
10685
10686		*offp = off | 1;
10687		if ((info->shared || indx != 0)
10688		    && (h == NULL
10689			|| ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
10690			|| h->elf.root.type != bfd_link_hash_undefweak))
10691		  {
10692		    outrel.r_offset = (got->output_section->vma
10693				       + got->output_offset
10694				       + off);
10695		    outrel.r_addend = addend;
10696		    if (tls_type & (TLS_LD | TLS_GD))
10697		      {
10698			outrel.r_addend = 0;
10699			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
10700			if (tls_type == (TLS_TLS | TLS_GD))
10701			  {
10702			    loc = relgot->contents;
10703			    loc += (relgot->reloc_count++
10704				    * sizeof (Elf64_External_Rela));
10705			    bfd_elf64_swap_reloca_out (output_bfd,
10706						       &outrel, loc);
10707			    outrel.r_offset += 8;
10708			    outrel.r_addend = addend;
10709			    outrel.r_info
10710			      = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
10711			  }
10712		      }
10713		    else if (tls_type == (TLS_TLS | TLS_DTPREL))
10714		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
10715		    else if (tls_type == (TLS_TLS | TLS_TPREL))
10716		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
10717		    else if (indx == 0)
10718		      {
10719			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_RELATIVE);
10720
10721			/* Write the .got section contents for the sake
10722			   of prelink.  */
10723			loc = got->contents + off;
10724			bfd_put_64 (output_bfd, outrel.r_addend + relocation,
10725				    loc);
10726		      }
10727		    else
10728		      outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
10729
10730		    if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
10731		      {
10732			outrel.r_addend += relocation;
10733			if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
10734			  outrel.r_addend -= htab->elf.tls_sec->vma;
10735		      }
10736		    loc = relgot->contents;
10737		    loc += (relgot->reloc_count++
10738			    * sizeof (Elf64_External_Rela));
10739		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
10740		  }
10741
10742		/* Init the .got section contents here if we're not
10743		   emitting a reloc.  */
10744		else
10745		  {
10746		    relocation += addend;
10747		    if (tls_type == (TLS_TLS | TLS_LD))
10748		      relocation = 1;
10749		    else if (tls_type != 0)
10750		      {
10751			relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
10752			if (tls_type == (TLS_TLS | TLS_TPREL))
10753			  relocation += DTP_OFFSET - TP_OFFSET;
10754
10755			if (tls_type == (TLS_TLS | TLS_GD))
10756			  {
10757			    bfd_put_64 (output_bfd, relocation,
10758					got->contents + off + 8);
10759			    relocation = 1;
10760			  }
10761		      }
10762
10763		    bfd_put_64 (output_bfd, relocation,
10764				got->contents + off);
10765		  }
10766	      }
10767
10768	    if (off >= (bfd_vma) -2)
10769	      abort ();
10770
10771	    relocation = got->output_offset + off;
10772
10773	    /* TOC base (r2) is TOC start plus 0x8000.  */
10774	    addend = -TOC_BASE_OFF;
10775	  }
10776	  break;
10777
10778	case R_PPC64_PLT16_HA:
10779	case R_PPC64_PLT16_HI:
10780	case R_PPC64_PLT16_LO:
10781	case R_PPC64_PLT32:
10782	case R_PPC64_PLT64:
10783	  /* Relocation is to the entry for this symbol in the
10784	     procedure linkage table.  */
10785
10786	  /* Resolve a PLT reloc against a local symbol directly,
10787	     without using the procedure linkage table.  */
10788	  if (h == NULL)
10789	    break;
10790
10791	  /* It's possible that we didn't make a PLT entry for this
10792	     symbol.  This happens when statically linking PIC code,
10793	     or when using -Bsymbolic.  Go find a match if there is a
10794	     PLT entry.  */
10795	  if (htab->plt != NULL)
10796	    {
10797	      struct plt_entry *ent;
10798	      for (ent = h->elf.plt.plist; ent != NULL; ent = ent->next)
10799		if (ent->addend == orig_addend
10800		    && ent->plt.offset != (bfd_vma) -1)
10801		  {
10802		    relocation = (htab->plt->output_section->vma
10803				  + htab->plt->output_offset
10804				  + ent->plt.offset);
10805		    unresolved_reloc = FALSE;
10806		  }
10807	    }
10808	  break;
10809
10810	case R_PPC64_TOC:
10811	  /* Relocation value is TOC base.  */
10812	  relocation = TOCstart;
10813	  if (r_symndx == 0)
10814	    relocation += htab->stub_group[input_section->id].toc_off;
10815	  else if (unresolved_reloc)
10816	    ;
10817	  else if (sec != NULL && sec->id <= htab->top_id)
10818	    relocation += htab->stub_group[sec->id].toc_off;
10819	  else
10820	    unresolved_reloc = TRUE;
10821	  goto dodyn;
10822
10823	  /* TOC16 relocs.  We want the offset relative to the TOC base,
10824	     which is the address of the start of the TOC plus 0x8000.
10825	     The TOC consists of sections .got, .toc, .tocbss, and .plt,
10826	     in this order.  */
10827	case R_PPC64_TOC16:
10828	case R_PPC64_TOC16_LO:
10829	case R_PPC64_TOC16_HI:
10830	case R_PPC64_TOC16_DS:
10831	case R_PPC64_TOC16_LO_DS:
10832	case R_PPC64_TOC16_HA:
10833	  addend -= TOCstart + htab->stub_group[input_section->id].toc_off;
10834	  break;
10835
10836	  /* Relocate against the beginning of the section.  */
10837	case R_PPC64_SECTOFF:
10838	case R_PPC64_SECTOFF_LO:
10839	case R_PPC64_SECTOFF_HI:
10840	case R_PPC64_SECTOFF_DS:
10841	case R_PPC64_SECTOFF_LO_DS:
10842	case R_PPC64_SECTOFF_HA:
10843	  if (sec != NULL)
10844	    addend -= sec->output_section->vma;
10845	  break;
10846
10847	case R_PPC64_REL14:
10848	case R_PPC64_REL14_BRNTAKEN:
10849	case R_PPC64_REL14_BRTAKEN:
10850	case R_PPC64_REL24:
10851	  break;
10852
10853	case R_PPC64_TPREL16:
10854	case R_PPC64_TPREL16_LO:
10855	case R_PPC64_TPREL16_HI:
10856	case R_PPC64_TPREL16_HA:
10857	case R_PPC64_TPREL16_DS:
10858	case R_PPC64_TPREL16_LO_DS:
10859	case R_PPC64_TPREL16_HIGHER:
10860	case R_PPC64_TPREL16_HIGHERA:
10861	case R_PPC64_TPREL16_HIGHEST:
10862	case R_PPC64_TPREL16_HIGHESTA:
10863	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
10864	  if (info->shared)
10865	    /* The TPREL16 relocs shouldn't really be used in shared
10866	       libs as they will result in DT_TEXTREL being set, but
10867	       support them anyway.  */
10868	    goto dodyn;
10869	  break;
10870
10871	case R_PPC64_DTPREL16:
10872	case R_PPC64_DTPREL16_LO:
10873	case R_PPC64_DTPREL16_HI:
10874	case R_PPC64_DTPREL16_HA:
10875	case R_PPC64_DTPREL16_DS:
10876	case R_PPC64_DTPREL16_LO_DS:
10877	case R_PPC64_DTPREL16_HIGHER:
10878	case R_PPC64_DTPREL16_HIGHERA:
10879	case R_PPC64_DTPREL16_HIGHEST:
10880	case R_PPC64_DTPREL16_HIGHESTA:
10881	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
10882	  break;
10883
10884	case R_PPC64_DTPMOD64:
10885	  relocation = 1;
10886	  addend = 0;
10887	  goto dodyn;
10888
10889	case R_PPC64_TPREL64:
10890	  addend -= htab->elf.tls_sec->vma + TP_OFFSET;
10891	  goto dodyn;
10892
10893	case R_PPC64_DTPREL64:
10894	  addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
10895	  /* Fall thru */
10896
10897	  /* Relocations that may need to be propagated if this is a
10898	     dynamic object.  */
10899	case R_PPC64_REL30:
10900	case R_PPC64_REL32:
10901	case R_PPC64_REL64:
10902	case R_PPC64_ADDR14:
10903	case R_PPC64_ADDR14_BRNTAKEN:
10904	case R_PPC64_ADDR14_BRTAKEN:
10905	case R_PPC64_ADDR16:
10906	case R_PPC64_ADDR16_DS:
10907	case R_PPC64_ADDR16_HA:
10908	case R_PPC64_ADDR16_HI:
10909	case R_PPC64_ADDR16_HIGHER:
10910	case R_PPC64_ADDR16_HIGHERA:
10911	case R_PPC64_ADDR16_HIGHEST:
10912	case R_PPC64_ADDR16_HIGHESTA:
10913	case R_PPC64_ADDR16_LO:
10914	case R_PPC64_ADDR16_LO_DS:
10915	case R_PPC64_ADDR24:
10916	case R_PPC64_ADDR32:
10917	case R_PPC64_ADDR64:
10918	case R_PPC64_UADDR16:
10919	case R_PPC64_UADDR32:
10920	case R_PPC64_UADDR64:
10921	dodyn:
10922	  if ((input_section->flags & SEC_ALLOC) == 0)
10923	    break;
10924
10925	  if (NO_OPD_RELOCS && is_opd)
10926	    break;
10927
10928	  if ((info->shared
10929	       && (h == NULL
10930		   || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
10931		   || h->elf.root.type != bfd_link_hash_undefweak)
10932	       && (MUST_BE_DYN_RELOC (r_type)
10933		   || !SYMBOL_CALLS_LOCAL (info, &h->elf)))
10934	      || (ELIMINATE_COPY_RELOCS
10935		  && !info->shared
10936		  && h != NULL
10937		  && h->elf.dynindx != -1
10938		  && !h->elf.non_got_ref
10939		  && h->elf.def_dynamic
10940		  && !h->elf.def_regular))
10941	    {
10942	      Elf_Internal_Rela outrel;
10943	      bfd_boolean skip, relocate;
10944	      asection *sreloc;
10945	      bfd_byte *loc;
10946	      bfd_vma out_off;
10947
10948	      /* When generating a dynamic object, these relocations
10949		 are copied into the output file to be resolved at run
10950		 time.  */
10951
10952	      skip = FALSE;
10953	      relocate = FALSE;
10954
10955	      out_off = _bfd_elf_section_offset (output_bfd, info,
10956						 input_section, rel->r_offset);
10957	      if (out_off == (bfd_vma) -1)
10958		skip = TRUE;
10959	      else if (out_off == (bfd_vma) -2)
10960		skip = TRUE, relocate = TRUE;
10961	      out_off += (input_section->output_section->vma
10962			  + input_section->output_offset);
10963	      outrel.r_offset = out_off;
10964	      outrel.r_addend = rel->r_addend;
10965
10966	      /* Optimize unaligned reloc use.  */
10967	      if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
10968		  || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
10969		r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
10970	      else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
10971		       || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
10972		r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
10973	      else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
10974		       || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
10975		r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
10976
10977	      if (skip)
10978		memset (&outrel, 0, sizeof outrel);
10979	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
10980		       && !is_opd
10981		       && r_type != R_PPC64_TOC)
10982		outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
10983	      else
10984		{
10985		  /* This symbol is local, or marked to become local,
10986		     or this is an opd section reloc which must point
10987		     at a local function.  */
10988		  outrel.r_addend += relocation;
10989		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
10990		    {
10991		      if (is_opd && h != NULL)
10992			{
10993			  /* Lie about opd entries.  This case occurs
10994			     when building shared libraries and we
10995			     reference a function in another shared
10996			     lib.  The same thing happens for a weak
10997			     definition in an application that's
10998			     overridden by a strong definition in a
10999			     shared lib.  (I believe this is a generic
11000			     bug in binutils handling of weak syms.)
11001			     In these cases we won't use the opd
11002			     entry in this lib.  */
11003			  unresolved_reloc = FALSE;
11004			}
11005		      outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11006
11007		      /* We need to relocate .opd contents for ld.so.
11008			 Prelink also wants simple and consistent rules
11009			 for relocs.  This make all RELATIVE relocs have
11010			 *r_offset equal to r_addend.  */
11011		      relocate = TRUE;
11012		    }
11013		  else
11014		    {
11015		      long indx = 0;
11016
11017		      if (bfd_is_abs_section (sec))
11018			;
11019		      else if (sec == NULL || sec->owner == NULL)
11020			{
11021			  bfd_set_error (bfd_error_bad_value);
11022			  return FALSE;
11023			}
11024		      else
11025			{
11026			  asection *osec;
11027
11028			  osec = sec->output_section;
11029			  indx = elf_section_data (osec)->dynindx;
11030
11031			  if (indx == 0)
11032			    {
11033			      if ((osec->flags & SEC_READONLY) == 0
11034				  && htab->elf.data_index_section != NULL)
11035				osec = htab->elf.data_index_section;
11036			      else
11037				osec = htab->elf.text_index_section;
11038			      indx = elf_section_data (osec)->dynindx;
11039			    }
11040			  BFD_ASSERT (indx != 0);
11041
11042			  /* We are turning this relocation into one
11043			     against a section symbol, so subtract out
11044			     the output section's address but not the
11045			     offset of the input section in the output
11046			     section.  */
11047			  outrel.r_addend -= osec->vma;
11048			}
11049
11050		      outrel.r_info = ELF64_R_INFO (indx, r_type);
11051		    }
11052		}
11053
11054	      sreloc = elf_section_data (input_section)->sreloc;
11055	      if (sreloc == NULL)
11056		abort ();
11057
11058	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
11059		  >= sreloc->size)
11060		abort ();
11061	      loc = sreloc->contents;
11062	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
11063	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
11064
11065	      /* If this reloc is against an external symbol, it will
11066		 be computed at runtime, so there's no need to do
11067		 anything now.  However, for the sake of prelink ensure
11068		 that the section contents are a known value.  */
11069	      if (! relocate)
11070		{
11071		  unresolved_reloc = FALSE;
11072		  /* The value chosen here is quite arbitrary as ld.so
11073		     ignores section contents except for the special
11074		     case of .opd where the contents might be accessed
11075		     before relocation.  Choose zero, as that won't
11076		     cause reloc overflow.  */
11077		  relocation = 0;
11078		  addend = 0;
11079		  /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
11080		     to improve backward compatibility with older
11081		     versions of ld.  */
11082		  if (r_type == R_PPC64_ADDR64)
11083		    addend = outrel.r_addend;
11084		  /* Adjust pc_relative relocs to have zero in *r_offset.  */
11085		  else if (ppc64_elf_howto_table[r_type]->pc_relative)
11086		    addend = (input_section->output_section->vma
11087			      + input_section->output_offset
11088			      + rel->r_offset);
11089		}
11090	    }
11091	  break;
11092
11093	case R_PPC64_COPY:
11094	case R_PPC64_GLOB_DAT:
11095	case R_PPC64_JMP_SLOT:
11096	case R_PPC64_RELATIVE:
11097	  /* We shouldn't ever see these dynamic relocs in relocatable
11098	     files.  */
11099	  /* Fall through.  */
11100
11101	case R_PPC64_PLTGOT16:
11102	case R_PPC64_PLTGOT16_DS:
11103	case R_PPC64_PLTGOT16_HA:
11104	case R_PPC64_PLTGOT16_HI:
11105	case R_PPC64_PLTGOT16_LO:
11106	case R_PPC64_PLTGOT16_LO_DS:
11107	case R_PPC64_PLTREL32:
11108	case R_PPC64_PLTREL64:
11109	  /* These ones haven't been implemented yet.  */
11110
11111	  (*_bfd_error_handler)
11112	    (_("%B: relocation %s is not supported for symbol %s."),
11113	     input_bfd,
11114	     ppc64_elf_howto_table[r_type]->name, sym_name);
11115
11116	  bfd_set_error (bfd_error_invalid_operation);
11117	  ret = FALSE;
11118	  continue;
11119	}
11120
11121      /* Do any further special processing.  */
11122      switch (r_type)
11123	{
11124	default:
11125	  break;
11126
11127	case R_PPC64_ADDR16_HA:
11128	case R_PPC64_ADDR16_HIGHERA:
11129	case R_PPC64_ADDR16_HIGHESTA:
11130	case R_PPC64_TOC16_HA:
11131	case R_PPC64_SECTOFF_HA:
11132	case R_PPC64_TPREL16_HA:
11133	case R_PPC64_DTPREL16_HA:
11134	case R_PPC64_TPREL16_HIGHER:
11135	case R_PPC64_TPREL16_HIGHERA:
11136	case R_PPC64_TPREL16_HIGHEST:
11137	case R_PPC64_TPREL16_HIGHESTA:
11138	case R_PPC64_DTPREL16_HIGHER:
11139	case R_PPC64_DTPREL16_HIGHERA:
11140	case R_PPC64_DTPREL16_HIGHEST:
11141	case R_PPC64_DTPREL16_HIGHESTA:
11142	  /* It's just possible that this symbol is a weak symbol
11143	     that's not actually defined anywhere. In that case,
11144	     'sec' would be NULL, and we should leave the symbol
11145	     alone (it will be set to zero elsewhere in the link).  */
11146	  if (sec == NULL)
11147	    break;
11148	  /* Fall thru */
11149
11150	case R_PPC64_GOT16_HA:
11151	case R_PPC64_PLTGOT16_HA:
11152	case R_PPC64_PLT16_HA:
11153	case R_PPC64_GOT_TLSGD16_HA:
11154	case R_PPC64_GOT_TLSLD16_HA:
11155	case R_PPC64_GOT_TPREL16_HA:
11156	case R_PPC64_GOT_DTPREL16_HA:
11157	  /* Add 0x10000 if sign bit in 0:15 is set.
11158	     Bits 0:15 are not used.  */
11159	  addend += 0x8000;
11160	  break;
11161
11162	case R_PPC64_ADDR16_DS:
11163	case R_PPC64_ADDR16_LO_DS:
11164	case R_PPC64_GOT16_DS:
11165	case R_PPC64_GOT16_LO_DS:
11166	case R_PPC64_PLT16_LO_DS:
11167	case R_PPC64_SECTOFF_DS:
11168	case R_PPC64_SECTOFF_LO_DS:
11169	case R_PPC64_TOC16_DS:
11170	case R_PPC64_TOC16_LO_DS:
11171	case R_PPC64_PLTGOT16_DS:
11172	case R_PPC64_PLTGOT16_LO_DS:
11173	case R_PPC64_GOT_TPREL16_DS:
11174	case R_PPC64_GOT_TPREL16_LO_DS:
11175	case R_PPC64_GOT_DTPREL16_DS:
11176	case R_PPC64_GOT_DTPREL16_LO_DS:
11177	case R_PPC64_TPREL16_DS:
11178	case R_PPC64_TPREL16_LO_DS:
11179	case R_PPC64_DTPREL16_DS:
11180	case R_PPC64_DTPREL16_LO_DS:
11181	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
11182	  mask = 3;
11183	  /* If this reloc is against an lq insn, then the value must be
11184	     a multiple of 16.  This is somewhat of a hack, but the
11185	     "correct" way to do this by defining _DQ forms of all the
11186	     _DS relocs bloats all reloc switches in this file.  It
11187	     doesn't seem to make much sense to use any of these relocs
11188	     in data, so testing the insn should be safe.  */
11189	  if ((insn & (0x3f << 26)) == (56u << 26))
11190	    mask = 15;
11191	  if (((relocation + addend) & mask) != 0)
11192	    {
11193	      (*_bfd_error_handler)
11194		(_("%B: error: relocation %s not a multiple of %d"),
11195		 input_bfd,
11196		 ppc64_elf_howto_table[r_type]->name,
11197		 mask + 1);
11198	      bfd_set_error (bfd_error_bad_value);
11199	      ret = FALSE;
11200	      continue;
11201	    }
11202	  break;
11203	}
11204
11205      /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
11206	 because such sections are not SEC_ALLOC and thus ld.so will
11207	 not process them.  */
11208      if (unresolved_reloc
11209	  && !((input_section->flags & SEC_DEBUGGING) != 0
11210	       && h->elf.def_dynamic))
11211	{
11212	  (*_bfd_error_handler)
11213	    (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
11214	     input_bfd,
11215	     input_section,
11216	     (long) rel->r_offset,
11217	     ppc64_elf_howto_table[(int) r_type]->name,
11218	     h->elf.root.root.string);
11219	  ret = FALSE;
11220	}
11221
11222      r = _bfd_final_link_relocate (ppc64_elf_howto_table[(int) r_type],
11223				    input_bfd,
11224				    input_section,
11225				    contents,
11226				    rel->r_offset,
11227				    relocation,
11228				    addend);
11229
11230      if (r != bfd_reloc_ok)
11231	{
11232	  if (sym_name == NULL)
11233	    sym_name = "(null)";
11234	  if (r == bfd_reloc_overflow)
11235	    {
11236	      if (warned)
11237		continue;
11238	      if (h != NULL
11239		  && h->elf.root.type == bfd_link_hash_undefweak
11240		  && ppc64_elf_howto_table[r_type]->pc_relative)
11241		{
11242		  /* Assume this is a call protected by other code that
11243		     detects the symbol is undefined.  If this is the case,
11244		     we can safely ignore the overflow.  If not, the
11245		     program is hosed anyway, and a little warning isn't
11246		     going to help.  */
11247
11248		  continue;
11249		}
11250
11251	      if (!((*info->callbacks->reloc_overflow)
11252		    (info, (h ? &h->elf.root : NULL), sym_name,
11253		     ppc64_elf_howto_table[r_type]->name,
11254		     orig_addend, input_bfd, input_section, rel->r_offset)))
11255		return FALSE;
11256	    }
11257	  else
11258	    {
11259	      (*_bfd_error_handler)
11260		(_("%B(%A+0x%lx): %s reloc against `%s': error %d"),
11261		 input_bfd,
11262		 input_section,
11263		 (long) rel->r_offset,
11264		 ppc64_elf_howto_table[r_type]->name,
11265		 sym_name,
11266		 (int) r);
11267	      ret = FALSE;
11268	    }
11269	}
11270    }
11271
11272  /* If we're emitting relocations, then shortly after this function
11273     returns, reloc offsets and addends for this section will be
11274     adjusted.  Worse, reloc symbol indices will be for the output
11275     file rather than the input.  Save a copy of the relocs for
11276     opd_entry_value.  */
11277  if (is_opd && (info->emitrelocations || info->relocatable))
11278    {
11279      bfd_size_type amt;
11280      amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
11281      rel = bfd_alloc (input_bfd, amt);
11282      BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd_relocs == NULL);
11283      ppc64_elf_tdata (input_bfd)->opd_relocs = rel;
11284      if (rel == NULL)
11285	return FALSE;
11286      memcpy (rel, relocs, amt);
11287    }
11288  return ret;
11289}
11290
11291/* Adjust the value of any local symbols in opd sections.  */
11292
11293static bfd_boolean
11294ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
11295			      const char *name ATTRIBUTE_UNUSED,
11296			      Elf_Internal_Sym *elfsym,
11297			      asection *input_sec,
11298			      struct elf_link_hash_entry *h)
11299{
11300  long *opd_adjust, adjust;
11301  bfd_vma value;
11302
11303  if (h != NULL)
11304    return TRUE;
11305
11306  opd_adjust = get_opd_info (input_sec);
11307  if (opd_adjust == NULL)
11308    return TRUE;
11309
11310  value = elfsym->st_value - input_sec->output_offset;
11311  if (!info->relocatable)
11312    value -= input_sec->output_section->vma;
11313
11314  adjust = opd_adjust[value / 8];
11315  if (adjust == -1)
11316    elfsym->st_value = 0;
11317  else
11318    elfsym->st_value += adjust;
11319  return TRUE;
11320}
11321
11322/* Finish up dynamic symbol handling.  We set the contents of various
11323   dynamic sections here.  */
11324
11325static bfd_boolean
11326ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
11327				 struct bfd_link_info *info,
11328				 struct elf_link_hash_entry *h,
11329				 Elf_Internal_Sym *sym)
11330{
11331  struct ppc_link_hash_table *htab;
11332  struct plt_entry *ent;
11333  Elf_Internal_Rela rela;
11334  bfd_byte *loc;
11335
11336  htab = ppc_hash_table (info);
11337
11338  for (ent = h->plt.plist; ent != NULL; ent = ent->next)
11339    if (ent->plt.offset != (bfd_vma) -1)
11340      {
11341	/* This symbol has an entry in the procedure linkage
11342	   table.  Set it up.  */
11343
11344	if (htab->plt == NULL
11345	    || htab->relplt == NULL
11346	    || htab->glink == NULL)
11347	  abort ();
11348
11349	/* Create a JMP_SLOT reloc to inform the dynamic linker to
11350	   fill in the PLT entry.  */
11351	rela.r_offset = (htab->plt->output_section->vma
11352			 + htab->plt->output_offset
11353			 + ent->plt.offset);
11354	rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
11355	rela.r_addend = ent->addend;
11356
11357	loc = htab->relplt->contents;
11358	loc += ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE
11359		* sizeof (Elf64_External_Rela));
11360	bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
11361      }
11362
11363  if (h->needs_copy)
11364    {
11365      Elf_Internal_Rela rela;
11366      bfd_byte *loc;
11367
11368      /* This symbol needs a copy reloc.  Set it up.  */
11369
11370      if (h->dynindx == -1
11371	  || (h->root.type != bfd_link_hash_defined
11372	      && h->root.type != bfd_link_hash_defweak)
11373	  || htab->relbss == NULL)
11374	abort ();
11375
11376      rela.r_offset = (h->root.u.def.value
11377		       + h->root.u.def.section->output_section->vma
11378		       + h->root.u.def.section->output_offset);
11379      rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
11380      rela.r_addend = 0;
11381      loc = htab->relbss->contents;
11382      loc += htab->relbss->reloc_count++ * sizeof (Elf64_External_Rela);
11383      bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
11384    }
11385
11386  /* Mark some specially defined symbols as absolute.  */
11387  if (strcmp (h->root.root.string, "_DYNAMIC") == 0)
11388    sym->st_shndx = SHN_ABS;
11389
11390  return TRUE;
11391}
11392
11393/* Used to decide how to sort relocs in an optimal manner for the
11394   dynamic linker, before writing them out.  */
11395
11396static enum elf_reloc_type_class
11397ppc64_elf_reloc_type_class (const Elf_Internal_Rela *rela)
11398{
11399  enum elf_ppc64_reloc_type r_type;
11400
11401  r_type = ELF64_R_TYPE (rela->r_info);
11402  switch (r_type)
11403    {
11404    case R_PPC64_RELATIVE:
11405      return reloc_class_relative;
11406    case R_PPC64_JMP_SLOT:
11407      return reloc_class_plt;
11408    case R_PPC64_COPY:
11409      return reloc_class_copy;
11410    default:
11411      return reloc_class_normal;
11412    }
11413}
11414
11415/* Finish up the dynamic sections.  */
11416
11417static bfd_boolean
11418ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
11419				   struct bfd_link_info *info)
11420{
11421  struct ppc_link_hash_table *htab;
11422  bfd *dynobj;
11423  asection *sdyn;
11424
11425  htab = ppc_hash_table (info);
11426  dynobj = htab->elf.dynobj;
11427  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
11428
11429  if (htab->elf.dynamic_sections_created)
11430    {
11431      Elf64_External_Dyn *dyncon, *dynconend;
11432
11433      if (sdyn == NULL || htab->got == NULL)
11434	abort ();
11435
11436      dyncon = (Elf64_External_Dyn *) sdyn->contents;
11437      dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
11438      for (; dyncon < dynconend; dyncon++)
11439	{
11440	  Elf_Internal_Dyn dyn;
11441	  asection *s;
11442
11443	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
11444
11445	  switch (dyn.d_tag)
11446	    {
11447	    default:
11448	      continue;
11449
11450	    case DT_PPC64_GLINK:
11451	      s = htab->glink;
11452	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11453	      /* We stupidly defined DT_PPC64_GLINK to be the start
11454		 of glink rather than the first entry point, which is
11455		 what ld.so needs, and now have a bigger stub to
11456		 support automatic multiple TOCs.  */
11457	      dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 32;
11458	      break;
11459
11460	    case DT_PPC64_OPD:
11461	      s = bfd_get_section_by_name (output_bfd, ".opd");
11462	      if (s == NULL)
11463		continue;
11464	      dyn.d_un.d_ptr = s->vma;
11465	      break;
11466
11467	    case DT_PPC64_OPDSZ:
11468	      s = bfd_get_section_by_name (output_bfd, ".opd");
11469	      if (s == NULL)
11470		continue;
11471	      dyn.d_un.d_val = s->size;
11472	      break;
11473
11474	    case DT_PLTGOT:
11475	      s = htab->plt;
11476	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11477	      break;
11478
11479	    case DT_JMPREL:
11480	      s = htab->relplt;
11481	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11482	      break;
11483
11484	    case DT_PLTRELSZ:
11485	      dyn.d_un.d_val = htab->relplt->size;
11486	      break;
11487
11488	    case DT_RELASZ:
11489	      /* Don't count procedure linkage table relocs in the
11490		 overall reloc count.  */
11491	      s = htab->relplt;
11492	      if (s == NULL)
11493		continue;
11494	      dyn.d_un.d_val -= s->size;
11495	      break;
11496
11497	    case DT_RELA:
11498	      /* We may not be using the standard ELF linker script.
11499		 If .rela.plt is the first .rela section, we adjust
11500		 DT_RELA to not include it.  */
11501	      s = htab->relplt;
11502	      if (s == NULL)
11503		continue;
11504	      if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset)
11505		continue;
11506	      dyn.d_un.d_ptr += s->size;
11507	      break;
11508	    }
11509
11510	  bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
11511	}
11512    }
11513
11514  if (htab->got != NULL && htab->got->size != 0)
11515    {
11516      /* Fill in the first entry in the global offset table.
11517	 We use it to hold the link-time TOCbase.  */
11518      bfd_put_64 (output_bfd,
11519		  elf_gp (output_bfd) + TOC_BASE_OFF,
11520		  htab->got->contents);
11521
11522      /* Set .got entry size.  */
11523      elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 8;
11524    }
11525
11526  if (htab->plt != NULL && htab->plt->size != 0)
11527    {
11528      /* Set .plt entry size.  */
11529      elf_section_data (htab->plt->output_section)->this_hdr.sh_entsize
11530	= PLT_ENTRY_SIZE;
11531    }
11532
11533  /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
11534     brlt ourselves if emitrelocations.  */
11535  if (htab->brlt != NULL
11536      && htab->brlt->reloc_count != 0
11537      && !_bfd_elf_link_output_relocs (output_bfd,
11538				       htab->brlt,
11539				       &elf_section_data (htab->brlt)->rel_hdr,
11540				       elf_section_data (htab->brlt)->relocs,
11541				       NULL))
11542    return FALSE;
11543
11544  /* We need to handle writing out multiple GOT sections ourselves,
11545     since we didn't add them to DYNOBJ.  We know dynobj is the first
11546     bfd.  */
11547  while ((dynobj = dynobj->link_next) != NULL)
11548    {
11549      asection *s;
11550
11551      if (!is_ppc64_elf_target (dynobj->xvec))
11552	continue;
11553
11554      s = ppc64_elf_tdata (dynobj)->got;
11555      if (s != NULL
11556	  && s->size != 0
11557	  && s->output_section != bfd_abs_section_ptr
11558	  && !bfd_set_section_contents (output_bfd, s->output_section,
11559					s->contents, s->output_offset,
11560					s->size))
11561	return FALSE;
11562      s = ppc64_elf_tdata (dynobj)->relgot;
11563      if (s != NULL
11564	  && s->size != 0
11565	  && s->output_section != bfd_abs_section_ptr
11566	  && !bfd_set_section_contents (output_bfd, s->output_section,
11567					s->contents, s->output_offset,
11568					s->size))
11569	return FALSE;
11570    }
11571
11572  return TRUE;
11573}
11574
11575#include "elf64-target.h"
11576