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