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