PowerPC64 ppc_elf_hash_entry, defined_sym_val, is_tls_get_addr
[binutils-gdb.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2 Copyright (C) 1999-2020 Free Software Foundation, Inc.
3 Written by Linus Nordberg, Swox AB <info@swox.com>,
4 based on elf32-ppc.c by Ian Lance Taylor.
5 Largely rewritten by Alan Modra.
6
7 This file is part of BFD, the Binary File Descriptor library.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
22
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 "sysdep.h"
29 #include <stdarg.h>
30 #include "bfd.h"
31 #include "bfdlink.h"
32 #include "libbfd.h"
33 #include "elf-bfd.h"
34 #include "elf/ppc64.h"
35 #include "elf64-ppc.h"
36 #include "dwarf2.h"
37
38 /* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */
39 #define OCTETS_PER_BYTE(ABFD, SEC) 1
40
41 static bfd_reloc_status_type ppc64_elf_ha_reloc
42 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
43 static bfd_reloc_status_type ppc64_elf_branch_reloc
44 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
45 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
46 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
48 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
50 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51 static bfd_reloc_status_type ppc64_elf_toc_reloc
52 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
54 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55 static bfd_reloc_status_type ppc64_elf_toc64_reloc
56 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57 static bfd_reloc_status_type ppc64_elf_prefix_reloc
58 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
59 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
60 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
61 static bfd_vma opd_entry_value
62 (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
63
64 #define TARGET_LITTLE_SYM powerpc_elf64_le_vec
65 #define TARGET_LITTLE_NAME "elf64-powerpcle"
66 #define TARGET_BIG_SYM powerpc_elf64_vec
67 #define TARGET_BIG_NAME "elf64-powerpc"
68 #define ELF_ARCH bfd_arch_powerpc
69 #define ELF_TARGET_ID PPC64_ELF_DATA
70 #define ELF_MACHINE_CODE EM_PPC64
71 #define ELF_MAXPAGESIZE 0x10000
72 #define ELF_COMMONPAGESIZE 0x1000
73 #define ELF_RELROPAGESIZE ELF_MAXPAGESIZE
74 #define elf_info_to_howto ppc64_elf_info_to_howto
75
76 #define elf_backend_want_got_sym 0
77 #define elf_backend_want_plt_sym 0
78 #define elf_backend_plt_alignment 3
79 #define elf_backend_plt_not_loaded 1
80 #define elf_backend_got_header_size 8
81 #define elf_backend_want_dynrelro 1
82 #define elf_backend_can_gc_sections 1
83 #define elf_backend_can_refcount 1
84 #define elf_backend_rela_normal 1
85 #define elf_backend_dtrel_excludes_plt 1
86 #define elf_backend_default_execstack 0
87
88 #define bfd_elf64_mkobject ppc64_elf_mkobject
89 #define bfd_elf64_bfd_reloc_type_lookup ppc64_elf_reloc_type_lookup
90 #define bfd_elf64_bfd_reloc_name_lookup ppc64_elf_reloc_name_lookup
91 #define bfd_elf64_bfd_merge_private_bfd_data ppc64_elf_merge_private_bfd_data
92 #define bfd_elf64_bfd_print_private_bfd_data ppc64_elf_print_private_bfd_data
93 #define bfd_elf64_new_section_hook ppc64_elf_new_section_hook
94 #define bfd_elf64_bfd_link_hash_table_create ppc64_elf_link_hash_table_create
95 #define bfd_elf64_get_synthetic_symtab ppc64_elf_get_synthetic_symtab
96 #define bfd_elf64_bfd_link_just_syms ppc64_elf_link_just_syms
97 #define bfd_elf64_bfd_gc_sections ppc64_elf_gc_sections
98
99 #define elf_backend_object_p ppc64_elf_object_p
100 #define elf_backend_grok_prstatus ppc64_elf_grok_prstatus
101 #define elf_backend_grok_psinfo ppc64_elf_grok_psinfo
102 #define elf_backend_write_core_note ppc64_elf_write_core_note
103 #define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections
104 #define elf_backend_copy_indirect_symbol ppc64_elf_copy_indirect_symbol
105 #define elf_backend_add_symbol_hook ppc64_elf_add_symbol_hook
106 #define elf_backend_check_directives ppc64_elf_before_check_relocs
107 #define elf_backend_notice_as_needed ppc64_elf_notice_as_needed
108 #define elf_backend_archive_symbol_lookup ppc64_elf_archive_symbol_lookup
109 #define elf_backend_check_relocs ppc64_elf_check_relocs
110 #define elf_backend_relocs_compatible _bfd_elf_relocs_compatible
111 #define elf_backend_gc_keep ppc64_elf_gc_keep
112 #define elf_backend_gc_mark_dynamic_ref ppc64_elf_gc_mark_dynamic_ref
113 #define elf_backend_gc_mark_hook ppc64_elf_gc_mark_hook
114 #define elf_backend_adjust_dynamic_symbol ppc64_elf_adjust_dynamic_symbol
115 #define elf_backend_hide_symbol ppc64_elf_hide_symbol
116 #define elf_backend_maybe_function_sym ppc64_elf_maybe_function_sym
117 #define elf_backend_always_size_sections ppc64_elf_func_desc_adjust
118 #define elf_backend_size_dynamic_sections ppc64_elf_size_dynamic_sections
119 #define elf_backend_hash_symbol ppc64_elf_hash_symbol
120 #define elf_backend_init_index_section _bfd_elf_init_2_index_sections
121 #define elf_backend_action_discarded ppc64_elf_action_discarded
122 #define elf_backend_relocate_section ppc64_elf_relocate_section
123 #define elf_backend_finish_dynamic_symbol ppc64_elf_finish_dynamic_symbol
124 #define elf_backend_reloc_type_class ppc64_elf_reloc_type_class
125 #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections
126 #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook
127 #define elf_backend_special_sections ppc64_elf_special_sections
128 #define elf_backend_merge_symbol_attribute ppc64_elf_merge_symbol_attribute
129 #define elf_backend_merge_symbol ppc64_elf_merge_symbol
130 #define elf_backend_get_reloc_section bfd_get_section_by_name
131
132 /* The name of the dynamic interpreter. This is put in the .interp
133 section. */
134 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
135
136 /* The size in bytes of an entry in the procedure linkage table. */
137 #define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
138 #define LOCAL_PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 16 : 8)
139
140 /* The initial size of the plt reserved for the dynamic linker. */
141 #define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
142
143 /* Offsets to some stack save slots. */
144 #define STK_LR 16
145 #define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
146 /* This one is dodgy. ELFv2 does not have a linker word, so use the
147 CR save slot. Used only by optimised __tls_get_addr call stub,
148 relying on __tls_get_addr_opt not saving CR.. */
149 #define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
150
151 /* TOC base pointers offset from start of TOC. */
152 #define TOC_BASE_OFF 0x8000
153 /* TOC base alignment. */
154 #define TOC_BASE_ALIGN 256
155
156 /* Offset of tp and dtp pointers from start of TLS block. */
157 #define TP_OFFSET 0x7000
158 #define DTP_OFFSET 0x8000
159
160 /* .plt call stub instructions. The normal stub is like this, but
161 sometimes the .plt entry crosses a 64k boundary and we need to
162 insert an addi to adjust r11. */
163 #define STD_R2_0R1 0xf8410000 /* std %r2,0+40(%r1) */
164 #define ADDIS_R11_R2 0x3d620000 /* addis %r11,%r2,xxx@ha */
165 #define LD_R12_0R11 0xe98b0000 /* ld %r12,xxx+0@l(%r11) */
166 #define MTCTR_R12 0x7d8903a6 /* mtctr %r12 */
167 #define LD_R2_0R11 0xe84b0000 /* ld %r2,xxx+8@l(%r11) */
168 #define LD_R11_0R11 0xe96b0000 /* ld %r11,xxx+16@l(%r11) */
169 #define BCTR 0x4e800420 /* bctr */
170
171 #define ADDI_R11_R11 0x396b0000 /* addi %r11,%r11,off@l */
172 #define ADDI_R12_R11 0x398b0000 /* addi %r12,%r11,off@l */
173 #define ADDI_R12_R12 0x398c0000 /* addi %r12,%r12,off@l */
174 #define ADDIS_R2_R2 0x3c420000 /* addis %r2,%r2,off@ha */
175 #define ADDI_R2_R2 0x38420000 /* addi %r2,%r2,off@l */
176
177 #define XOR_R2_R12_R12 0x7d826278 /* xor %r2,%r12,%r12 */
178 #define ADD_R11_R11_R2 0x7d6b1214 /* add %r11,%r11,%r2 */
179 #define XOR_R11_R12_R12 0x7d8b6278 /* xor %r11,%r12,%r12 */
180 #define ADD_R2_R2_R11 0x7c425a14 /* add %r2,%r2,%r11 */
181 #define CMPLDI_R2_0 0x28220000 /* cmpldi %r2,0 */
182 #define BNECTR 0x4ca20420 /* bnectr+ */
183 #define BNECTR_P4 0x4ce20420 /* bnectr+ */
184
185 #define LD_R12_0R2 0xe9820000 /* ld %r12,xxx+0(%r2) */
186 #define LD_R11_0R2 0xe9620000 /* ld %r11,xxx+0(%r2) */
187 #define LD_R2_0R2 0xe8420000 /* ld %r2,xxx+0(%r2) */
188
189 #define LD_R2_0R1 0xe8410000 /* ld %r2,0(%r1) */
190 #define LD_R2_0R12 0xe84c0000 /* ld %r2,0(%r12) */
191 #define ADD_R2_R2_R12 0x7c426214 /* add %r2,%r2,%r12 */
192
193 #define LI_R11_0 0x39600000 /* li %r11,0 */
194 #define LIS_R2 0x3c400000 /* lis %r2,xxx@ha */
195 #define LIS_R11 0x3d600000 /* lis %r11,xxx@ha */
196 #define LIS_R12 0x3d800000 /* lis %r12,xxx@ha */
197 #define ADDIS_R2_R12 0x3c4c0000 /* addis %r2,%r12,xxx@ha */
198 #define ADDIS_R12_R2 0x3d820000 /* addis %r12,%r2,xxx@ha */
199 #define ADDIS_R12_R11 0x3d8b0000 /* addis %r12,%r11,xxx@ha */
200 #define ADDIS_R12_R12 0x3d8c0000 /* addis %r12,%r12,xxx@ha */
201 #define ORIS_R12_R12_0 0x658c0000 /* oris %r12,%r12,xxx@hi */
202 #define ORI_R11_R11_0 0x616b0000 /* ori %r11,%r11,xxx@l */
203 #define ORI_R12_R12_0 0x618c0000 /* ori %r12,%r12,xxx@l */
204 #define LD_R12_0R12 0xe98c0000 /* ld %r12,xxx@l(%r12) */
205 #define SLDI_R11_R11_34 0x796b1746 /* sldi %r11,%r11,34 */
206 #define SLDI_R12_R12_32 0x799c07c6 /* sldi %r12,%r12,32 */
207 #define LDX_R12_R11_R12 0x7d8b602a /* ldx %r12,%r11,%r12 */
208 #define ADD_R12_R11_R12 0x7d8b6214 /* add %r12,%r11,%r12 */
209 #define PADDI_R12_PC 0x0610000039800000ULL
210 #define PLD_R12_PC 0x04100000e5800000ULL
211 #define PNOP 0x0700000000000000ULL
212
213 /* __glink_PLTresolve stub instructions. We enter with the index in R0. */
214 #define GLINK_PLTRESOLVE_SIZE(htab) \
215 (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
216 /* 0: */
217 /* .quad plt0-1f */
218 /* __glink: */
219 #define MFLR_R12 0x7d8802a6 /* mflr %12 */
220 #define BCL_20_31 0x429f0005 /* bcl 20,31,1f */
221 /* 1: */
222 #define MFLR_R11 0x7d6802a6 /* mflr %11 */
223 /* ld %2,(0b-1b)(%11) */
224 #define MTLR_R12 0x7d8803a6 /* mtlr %12 */
225 #define ADD_R11_R2_R11 0x7d625a14 /* add %11,%2,%11 */
226 /* ld %12,0(%11) */
227 /* ld %2,8(%11) */
228 /* mtctr %12 */
229 /* ld %11,16(%11) */
230 /* bctr */
231 #define MFLR_R0 0x7c0802a6 /* mflr %r0 */
232 #define MTLR_R0 0x7c0803a6 /* mtlr %r0 */
233 #define SUB_R12_R12_R11 0x7d8b6050 /* subf %r12,%r11,%r12 */
234 #define ADDI_R0_R12 0x380c0000 /* addi %r0,%r12,0 */
235 #define SRDI_R0_R0_2 0x7800f082 /* rldicl %r0,%r0,62,2 */
236
237 /* Pad with this. */
238 #define NOP 0x60000000
239
240 /* Some other nops. */
241 #define CROR_151515 0x4def7b82
242 #define CROR_313131 0x4ffffb82
243
244 /* .glink entries for the first 32k functions are two instructions. */
245 #define LI_R0_0 0x38000000 /* li %r0,0 */
246 #define B_DOT 0x48000000 /* b . */
247
248 /* After that, we need two instructions to load the index, followed by
249 a branch. */
250 #define LIS_R0_0 0x3c000000 /* lis %r0,0 */
251 #define ORI_R0_R0_0 0x60000000 /* ori %r0,%r0,0 */
252
253 /* Instructions used by the save and restore reg functions. */
254 #define STD_R0_0R1 0xf8010000 /* std %r0,0(%r1) */
255 #define STD_R0_0R12 0xf80c0000 /* std %r0,0(%r12) */
256 #define LD_R0_0R1 0xe8010000 /* ld %r0,0(%r1) */
257 #define LD_R0_0R12 0xe80c0000 /* ld %r0,0(%r12) */
258 #define STFD_FR0_0R1 0xd8010000 /* stfd %fr0,0(%r1) */
259 #define LFD_FR0_0R1 0xc8010000 /* lfd %fr0,0(%r1) */
260 #define LI_R12_0 0x39800000 /* li %r12,0 */
261 #define STVX_VR0_R12_R0 0x7c0c01ce /* stvx %v0,%r12,%r0 */
262 #define LVX_VR0_R12_R0 0x7c0c00ce /* lvx %v0,%r12,%r0 */
263 #define MTLR_R0 0x7c0803a6 /* mtlr %r0 */
264 #define BLR 0x4e800020 /* blr */
265
266 /* Since .opd is an array of descriptors and each entry will end up
267 with identical R_PPC64_RELATIVE relocs, there is really no need to
268 propagate .opd relocs; The dynamic linker should be taught to
269 relocate .opd without reloc entries. */
270 #ifndef NO_OPD_RELOCS
271 #define NO_OPD_RELOCS 0
272 #endif
273
274 #ifndef ARRAY_SIZE
275 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
276 #endif
277
278 static inline int
279 abiversion (bfd *abfd)
280 {
281 return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
282 }
283
284 static inline void
285 set_abiversion (bfd *abfd, int ver)
286 {
287 elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
288 elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
289 }
290 \f
291 /* Relocation HOWTO's. */
292 /* Like other ELF RELA targets that don't apply multiple
293 field-altering relocations to the same localation, src_mask is
294 always zero and pcrel_offset is the same as pc_relative.
295 PowerPC can always use a zero bitpos, even when the field is not at
296 the LSB. For example, a REL24 could use rightshift=2, bisize=24
297 and bitpos=2 which matches the ABI description, or as we do here,
298 rightshift=0, bitsize=26 and bitpos=0. */
299 #define HOW(type, size, bitsize, mask, rightshift, pc_relative, \
300 complain, special_func) \
301 HOWTO (type, rightshift, size, bitsize, pc_relative, 0, \
302 complain_overflow_ ## complain, special_func, \
303 #type, FALSE, 0, mask, pc_relative)
304
305 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
306
307 static reloc_howto_type ppc64_elf_howto_raw[] =
308 {
309 /* This reloc does nothing. */
310 HOW (R_PPC64_NONE, 3, 0, 0, 0, FALSE, dont,
311 bfd_elf_generic_reloc),
312
313 /* A standard 32 bit relocation. */
314 HOW (R_PPC64_ADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
315 bfd_elf_generic_reloc),
316
317 /* An absolute 26 bit branch; the lower two bits must be zero.
318 FIXME: we don't check that, we just clear them. */
319 HOW (R_PPC64_ADDR24, 2, 26, 0x03fffffc, 0, FALSE, bitfield,
320 bfd_elf_generic_reloc),
321
322 /* A standard 16 bit relocation. */
323 HOW (R_PPC64_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
324 bfd_elf_generic_reloc),
325
326 /* A 16 bit relocation without overflow. */
327 HOW (R_PPC64_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
328 bfd_elf_generic_reloc),
329
330 /* Bits 16-31 of an address. */
331 HOW (R_PPC64_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, signed,
332 bfd_elf_generic_reloc),
333
334 /* Bits 16-31 of an address, plus 1 if the contents of the low 16
335 bits, treated as a signed number, is negative. */
336 HOW (R_PPC64_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, signed,
337 ppc64_elf_ha_reloc),
338
339 /* An absolute 16 bit branch; the lower two bits must be zero.
340 FIXME: we don't check that, we just clear them. */
341 HOW (R_PPC64_ADDR14, 2, 16, 0x0000fffc, 0, FALSE, signed,
342 ppc64_elf_branch_reloc),
343
344 /* An absolute 16 bit branch, for which bit 10 should be set to
345 indicate that the branch is expected to be taken. The lower two
346 bits must be zero. */
347 HOW (R_PPC64_ADDR14_BRTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
348 ppc64_elf_brtaken_reloc),
349
350 /* An absolute 16 bit branch, for which bit 10 should be set to
351 indicate that the branch is not expected to be taken. The lower
352 two bits must be zero. */
353 HOW (R_PPC64_ADDR14_BRNTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
354 ppc64_elf_brtaken_reloc),
355
356 /* A relative 26 bit branch; the lower two bits must be zero. */
357 HOW (R_PPC64_REL24, 2, 26, 0x03fffffc, 0, TRUE, signed,
358 ppc64_elf_branch_reloc),
359
360 /* A variant of R_PPC64_REL24, used when r2 is not the toc pointer. */
361 HOW (R_PPC64_REL24_NOTOC, 2, 26, 0x03fffffc, 0, TRUE, signed,
362 ppc64_elf_branch_reloc),
363
364 /* A relative 16 bit branch; the lower two bits must be zero. */
365 HOW (R_PPC64_REL14, 2, 16, 0x0000fffc, 0, TRUE, signed,
366 ppc64_elf_branch_reloc),
367
368 /* A relative 16 bit branch. Bit 10 should be set to indicate that
369 the branch is expected to be taken. The lower two bits must be
370 zero. */
371 HOW (R_PPC64_REL14_BRTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
372 ppc64_elf_brtaken_reloc),
373
374 /* A relative 16 bit branch. Bit 10 should be set to indicate that
375 the branch is not expected to be taken. The lower two bits must
376 be zero. */
377 HOW (R_PPC64_REL14_BRNTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
378 ppc64_elf_brtaken_reloc),
379
380 /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
381 symbol. */
382 HOW (R_PPC64_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
383 ppc64_elf_unhandled_reloc),
384
385 /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
386 the symbol. */
387 HOW (R_PPC64_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
388 ppc64_elf_unhandled_reloc),
389
390 /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
391 the symbol. */
392 HOW (R_PPC64_GOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
393 ppc64_elf_unhandled_reloc),
394
395 /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
396 the symbol. */
397 HOW (R_PPC64_GOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
398 ppc64_elf_unhandled_reloc),
399
400 /* This is used only by the dynamic linker. The symbol should exist
401 both in the object being run and in some shared library. The
402 dynamic linker copies the data addressed by the symbol from the
403 shared library into the object, because the object being
404 run has to have the data at some particular address. */
405 HOW (R_PPC64_COPY, 0, 0, 0, 0, FALSE, dont,
406 ppc64_elf_unhandled_reloc),
407
408 /* Like R_PPC64_ADDR64, but used when setting global offset table
409 entries. */
410 HOW (R_PPC64_GLOB_DAT, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
411 ppc64_elf_unhandled_reloc),
412
413 /* Created by the link editor. Marks a procedure linkage table
414 entry for a symbol. */
415 HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, FALSE, dont,
416 ppc64_elf_unhandled_reloc),
417
418 /* Used only by the dynamic linker. When the object is run, this
419 doubleword64 is set to the load address of the object, plus the
420 addend. */
421 HOW (R_PPC64_RELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
422 bfd_elf_generic_reloc),
423
424 /* Like R_PPC64_ADDR32, but may be unaligned. */
425 HOW (R_PPC64_UADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
426 bfd_elf_generic_reloc),
427
428 /* Like R_PPC64_ADDR16, but may be unaligned. */
429 HOW (R_PPC64_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
430 bfd_elf_generic_reloc),
431
432 /* 32-bit PC relative. */
433 HOW (R_PPC64_REL32, 2, 32, 0xffffffff, 0, TRUE, signed,
434 bfd_elf_generic_reloc),
435
436 /* 32-bit relocation to the symbol's procedure linkage table. */
437 HOW (R_PPC64_PLT32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
438 ppc64_elf_unhandled_reloc),
439
440 /* 32-bit PC relative relocation to the symbol's procedure linkage table.
441 FIXME: R_PPC64_PLTREL32 not supported. */
442 HOW (R_PPC64_PLTREL32, 2, 32, 0xffffffff, 0, TRUE, signed,
443 ppc64_elf_unhandled_reloc),
444
445 /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
446 the symbol. */
447 HOW (R_PPC64_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
448 ppc64_elf_unhandled_reloc),
449
450 /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
451 the symbol. */
452 HOW (R_PPC64_PLT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
453 ppc64_elf_unhandled_reloc),
454
455 /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
456 the symbol. */
457 HOW (R_PPC64_PLT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
458 ppc64_elf_unhandled_reloc),
459
460 /* 16-bit section relative relocation. */
461 HOW (R_PPC64_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
462 ppc64_elf_sectoff_reloc),
463
464 /* Like R_PPC64_SECTOFF, but no overflow warning. */
465 HOW (R_PPC64_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
466 ppc64_elf_sectoff_reloc),
467
468 /* 16-bit upper half section relative relocation. */
469 HOW (R_PPC64_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, signed,
470 ppc64_elf_sectoff_reloc),
471
472 /* 16-bit upper half adjusted section relative relocation. */
473 HOW (R_PPC64_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, signed,
474 ppc64_elf_sectoff_ha_reloc),
475
476 /* Like R_PPC64_REL24 without touching the two least significant bits. */
477 HOW (R_PPC64_REL30, 2, 30, 0xfffffffc, 2, TRUE, dont,
478 bfd_elf_generic_reloc),
479
480 /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI. */
481
482 /* A standard 64-bit relocation. */
483 HOW (R_PPC64_ADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
484 bfd_elf_generic_reloc),
485
486 /* The bits 32-47 of an address. */
487 HOW (R_PPC64_ADDR16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
488 bfd_elf_generic_reloc),
489
490 /* The bits 32-47 of an address, plus 1 if the contents of the low
491 16 bits, treated as a signed number, is negative. */
492 HOW (R_PPC64_ADDR16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
493 ppc64_elf_ha_reloc),
494
495 /* The bits 48-63 of an address. */
496 HOW (R_PPC64_ADDR16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
497 bfd_elf_generic_reloc),
498
499 /* The bits 48-63 of an address, plus 1 if the contents of the low
500 16 bits, treated as a signed number, is negative. */
501 HOW (R_PPC64_ADDR16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
502 ppc64_elf_ha_reloc),
503
504 /* Like ADDR64, but may be unaligned. */
505 HOW (R_PPC64_UADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
506 bfd_elf_generic_reloc),
507
508 /* 64-bit relative relocation. */
509 HOW (R_PPC64_REL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
510 bfd_elf_generic_reloc),
511
512 /* 64-bit relocation to the symbol's procedure linkage table. */
513 HOW (R_PPC64_PLT64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
514 ppc64_elf_unhandled_reloc),
515
516 /* 64-bit PC relative relocation to the symbol's procedure linkage
517 table. */
518 /* FIXME: R_PPC64_PLTREL64 not supported. */
519 HOW (R_PPC64_PLTREL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
520 ppc64_elf_unhandled_reloc),
521
522 /* 16 bit TOC-relative relocation. */
523 /* R_PPC64_TOC16 47 half16* S + A - .TOC. */
524 HOW (R_PPC64_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
525 ppc64_elf_toc_reloc),
526
527 /* 16 bit TOC-relative relocation without overflow. */
528 /* R_PPC64_TOC16_LO 48 half16 #lo (S + A - .TOC.) */
529 HOW (R_PPC64_TOC16_LO, 1, 16, 0xffff, 0, FALSE, dont,
530 ppc64_elf_toc_reloc),
531
532 /* 16 bit TOC-relative relocation, high 16 bits. */
533 /* R_PPC64_TOC16_HI 49 half16 #hi (S + A - .TOC.) */
534 HOW (R_PPC64_TOC16_HI, 1, 16, 0xffff, 16, FALSE, signed,
535 ppc64_elf_toc_reloc),
536
537 /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
538 contents of the low 16 bits, treated as a signed number, is
539 negative. */
540 /* R_PPC64_TOC16_HA 50 half16 #ha (S + A - .TOC.) */
541 HOW (R_PPC64_TOC16_HA, 1, 16, 0xffff, 16, FALSE, signed,
542 ppc64_elf_toc_ha_reloc),
543
544 /* 64-bit relocation; insert value of TOC base (.TOC.). */
545 /* R_PPC64_TOC 51 doubleword64 .TOC. */
546 HOW (R_PPC64_TOC, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
547 ppc64_elf_toc64_reloc),
548
549 /* Like R_PPC64_GOT16, but also informs the link editor that the
550 value to relocate may (!) refer to a PLT entry which the link
551 editor (a) may replace with the symbol value. If the link editor
552 is unable to fully resolve the symbol, it may (b) create a PLT
553 entry and store the address to the new PLT entry in the GOT.
554 This permits lazy resolution of function symbols at run time.
555 The link editor may also skip all of this and just (c) emit a
556 R_PPC64_GLOB_DAT to tie the symbol to the GOT entry. */
557 /* FIXME: R_PPC64_PLTGOT16 not implemented. */
558 HOW (R_PPC64_PLTGOT16, 1, 16, 0xffff, 0, FALSE,signed,
559 ppc64_elf_unhandled_reloc),
560
561 /* Like R_PPC64_PLTGOT16, but without overflow. */
562 /* FIXME: R_PPC64_PLTGOT16_LO not implemented. */
563 HOW (R_PPC64_PLTGOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
564 ppc64_elf_unhandled_reloc),
565
566 /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address. */
567 /* FIXME: R_PPC64_PLTGOT16_HI not implemented. */
568 HOW (R_PPC64_PLTGOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
569 ppc64_elf_unhandled_reloc),
570
571 /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
572 1 if the contents of the low 16 bits, treated as a signed number,
573 is negative. */
574 /* FIXME: R_PPC64_PLTGOT16_HA not implemented. */
575 HOW (R_PPC64_PLTGOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
576 ppc64_elf_unhandled_reloc),
577
578 /* Like R_PPC64_ADDR16, but for instructions with a DS field. */
579 HOW (R_PPC64_ADDR16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
580 bfd_elf_generic_reloc),
581
582 /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field. */
583 HOW (R_PPC64_ADDR16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
584 bfd_elf_generic_reloc),
585
586 /* Like R_PPC64_GOT16, but for instructions with a DS field. */
587 HOW (R_PPC64_GOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
588 ppc64_elf_unhandled_reloc),
589
590 /* Like R_PPC64_GOT16_LO, but for instructions with a DS field. */
591 HOW (R_PPC64_GOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
592 ppc64_elf_unhandled_reloc),
593
594 /* Like R_PPC64_PLT16_LO, but for instructions with a DS field. */
595 HOW (R_PPC64_PLT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
596 ppc64_elf_unhandled_reloc),
597
598 /* Like R_PPC64_SECTOFF, but for instructions with a DS field. */
599 HOW (R_PPC64_SECTOFF_DS, 1, 16, 0xfffc, 0, FALSE, signed,
600 ppc64_elf_sectoff_reloc),
601
602 /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field. */
603 HOW (R_PPC64_SECTOFF_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
604 ppc64_elf_sectoff_reloc),
605
606 /* Like R_PPC64_TOC16, but for instructions with a DS field. */
607 HOW (R_PPC64_TOC16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
608 ppc64_elf_toc_reloc),
609
610 /* Like R_PPC64_TOC16_LO, but for instructions with a DS field. */
611 HOW (R_PPC64_TOC16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
612 ppc64_elf_toc_reloc),
613
614 /* Like R_PPC64_PLTGOT16, but for instructions with a DS field. */
615 /* FIXME: R_PPC64_PLTGOT16_DS not implemented. */
616 HOW (R_PPC64_PLTGOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
617 ppc64_elf_unhandled_reloc),
618
619 /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field. */
620 /* FIXME: R_PPC64_PLTGOT16_LO not implemented. */
621 HOW (R_PPC64_PLTGOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
622 ppc64_elf_unhandled_reloc),
623
624 /* Marker relocs for TLS. */
625 HOW (R_PPC64_TLS, 2, 32, 0, 0, FALSE, dont,
626 bfd_elf_generic_reloc),
627
628 HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
629 bfd_elf_generic_reloc),
630
631 HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
632 bfd_elf_generic_reloc),
633
634 /* Marker reloc for optimizing r2 save in prologue rather than on
635 each plt call stub. */
636 HOW (R_PPC64_TOCSAVE, 2, 32, 0, 0, FALSE, dont,
637 bfd_elf_generic_reloc),
638
639 /* Marker relocs on inline plt call instructions. */
640 HOW (R_PPC64_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
641 bfd_elf_generic_reloc),
642
643 HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
644 bfd_elf_generic_reloc),
645
646 /* Computes the load module index of the load module that contains the
647 definition of its TLS sym. */
648 HOW (R_PPC64_DTPMOD64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
649 ppc64_elf_unhandled_reloc),
650
651 /* Computes a dtv-relative displacement, the difference between the value
652 of sym+add and the base address of the thread-local storage block that
653 contains the definition of sym, minus 0x8000. */
654 HOW (R_PPC64_DTPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
655 ppc64_elf_unhandled_reloc),
656
657 /* A 16 bit dtprel reloc. */
658 HOW (R_PPC64_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
659 ppc64_elf_unhandled_reloc),
660
661 /* Like DTPREL16, but no overflow. */
662 HOW (R_PPC64_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
663 ppc64_elf_unhandled_reloc),
664
665 /* Like DTPREL16_LO, but next higher group of 16 bits. */
666 HOW (R_PPC64_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
667 ppc64_elf_unhandled_reloc),
668
669 /* Like DTPREL16_HI, but adjust for low 16 bits. */
670 HOW (R_PPC64_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
671 ppc64_elf_unhandled_reloc),
672
673 /* Like DTPREL16_HI, but next higher group of 16 bits. */
674 HOW (R_PPC64_DTPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
675 ppc64_elf_unhandled_reloc),
676
677 /* Like DTPREL16_HIGHER, but adjust for low 16 bits. */
678 HOW (R_PPC64_DTPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
679 ppc64_elf_unhandled_reloc),
680
681 /* Like DTPREL16_HIGHER, but next higher group of 16 bits. */
682 HOW (R_PPC64_DTPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
683 ppc64_elf_unhandled_reloc),
684
685 /* Like DTPREL16_HIGHEST, but adjust for low 16 bits. */
686 HOW (R_PPC64_DTPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
687 ppc64_elf_unhandled_reloc),
688
689 /* Like DTPREL16, but for insns with a DS field. */
690 HOW (R_PPC64_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
691 ppc64_elf_unhandled_reloc),
692
693 /* Like DTPREL16_DS, but no overflow. */
694 HOW (R_PPC64_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
695 ppc64_elf_unhandled_reloc),
696
697 /* Computes a tp-relative displacement, the difference between the value of
698 sym+add and the value of the thread pointer (r13). */
699 HOW (R_PPC64_TPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
700 ppc64_elf_unhandled_reloc),
701
702 /* A 16 bit tprel reloc. */
703 HOW (R_PPC64_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
704 ppc64_elf_unhandled_reloc),
705
706 /* Like TPREL16, but no overflow. */
707 HOW (R_PPC64_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
708 ppc64_elf_unhandled_reloc),
709
710 /* Like TPREL16_LO, but next higher group of 16 bits. */
711 HOW (R_PPC64_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
712 ppc64_elf_unhandled_reloc),
713
714 /* Like TPREL16_HI, but adjust for low 16 bits. */
715 HOW (R_PPC64_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
716 ppc64_elf_unhandled_reloc),
717
718 /* Like TPREL16_HI, but next higher group of 16 bits. */
719 HOW (R_PPC64_TPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
720 ppc64_elf_unhandled_reloc),
721
722 /* Like TPREL16_HIGHER, but adjust for low 16 bits. */
723 HOW (R_PPC64_TPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
724 ppc64_elf_unhandled_reloc),
725
726 /* Like TPREL16_HIGHER, but next higher group of 16 bits. */
727 HOW (R_PPC64_TPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
728 ppc64_elf_unhandled_reloc),
729
730 /* Like TPREL16_HIGHEST, but adjust for low 16 bits. */
731 HOW (R_PPC64_TPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
732 ppc64_elf_unhandled_reloc),
733
734 /* Like TPREL16, but for insns with a DS field. */
735 HOW (R_PPC64_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
736 ppc64_elf_unhandled_reloc),
737
738 /* Like TPREL16_DS, but no overflow. */
739 HOW (R_PPC64_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
740 ppc64_elf_unhandled_reloc),
741
742 /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
743 with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
744 to the first entry relative to the TOC base (r2). */
745 HOW (R_PPC64_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
746 ppc64_elf_unhandled_reloc),
747
748 /* Like GOT_TLSGD16, but no overflow. */
749 HOW (R_PPC64_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
750 ppc64_elf_unhandled_reloc),
751
752 /* Like GOT_TLSGD16_LO, but next higher group of 16 bits. */
753 HOW (R_PPC64_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
754 ppc64_elf_unhandled_reloc),
755
756 /* Like GOT_TLSGD16_HI, but adjust for low 16 bits. */
757 HOW (R_PPC64_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
758 ppc64_elf_unhandled_reloc),
759
760 /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
761 with values (sym+add)@dtpmod and zero, and computes the offset to the
762 first entry relative to the TOC base (r2). */
763 HOW (R_PPC64_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
764 ppc64_elf_unhandled_reloc),
765
766 /* Like GOT_TLSLD16, but no overflow. */
767 HOW (R_PPC64_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
768 ppc64_elf_unhandled_reloc),
769
770 /* Like GOT_TLSLD16_LO, but next higher group of 16 bits. */
771 HOW (R_PPC64_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
772 ppc64_elf_unhandled_reloc),
773
774 /* Like GOT_TLSLD16_HI, but adjust for low 16 bits. */
775 HOW (R_PPC64_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
776 ppc64_elf_unhandled_reloc),
777
778 /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
779 the offset to the entry relative to the TOC base (r2). */
780 HOW (R_PPC64_GOT_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
781 ppc64_elf_unhandled_reloc),
782
783 /* Like GOT_DTPREL16_DS, but no overflow. */
784 HOW (R_PPC64_GOT_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
785 ppc64_elf_unhandled_reloc),
786
787 /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits. */
788 HOW (R_PPC64_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
789 ppc64_elf_unhandled_reloc),
790
791 /* Like GOT_DTPREL16_HI, but adjust for low 16 bits. */
792 HOW (R_PPC64_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
793 ppc64_elf_unhandled_reloc),
794
795 /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
796 offset to the entry relative to the TOC base (r2). */
797 HOW (R_PPC64_GOT_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
798 ppc64_elf_unhandled_reloc),
799
800 /* Like GOT_TPREL16_DS, but no overflow. */
801 HOW (R_PPC64_GOT_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
802 ppc64_elf_unhandled_reloc),
803
804 /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits. */
805 HOW (R_PPC64_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
806 ppc64_elf_unhandled_reloc),
807
808 /* Like GOT_TPREL16_HI, but adjust for low 16 bits. */
809 HOW (R_PPC64_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
810 ppc64_elf_unhandled_reloc),
811
812 HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, FALSE, dont,
813 ppc64_elf_unhandled_reloc),
814
815 HOW (R_PPC64_IRELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
816 bfd_elf_generic_reloc),
817
818 /* A 16 bit relative relocation. */
819 HOW (R_PPC64_REL16, 1, 16, 0xffff, 0, TRUE, signed,
820 bfd_elf_generic_reloc),
821
822 /* A 16 bit relative relocation without overflow. */
823 HOW (R_PPC64_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
824 bfd_elf_generic_reloc),
825
826 /* The high order 16 bits of a relative address. */
827 HOW (R_PPC64_REL16_HI, 1, 16, 0xffff, 16, TRUE, signed,
828 bfd_elf_generic_reloc),
829
830 /* The high order 16 bits of a relative address, plus 1 if the contents of
831 the low 16 bits, treated as a signed number, is negative. */
832 HOW (R_PPC64_REL16_HA, 1, 16, 0xffff, 16, TRUE, signed,
833 ppc64_elf_ha_reloc),
834
835 HOW (R_PPC64_REL16_HIGH, 1, 16, 0xffff, 16, TRUE, dont,
836 bfd_elf_generic_reloc),
837
838 HOW (R_PPC64_REL16_HIGHA, 1, 16, 0xffff, 16, TRUE, dont,
839 ppc64_elf_ha_reloc),
840
841 HOW (R_PPC64_REL16_HIGHER, 1, 16, 0xffff, 32, TRUE, dont,
842 bfd_elf_generic_reloc),
843
844 HOW (R_PPC64_REL16_HIGHERA, 1, 16, 0xffff, 32, TRUE, dont,
845 ppc64_elf_ha_reloc),
846
847 HOW (R_PPC64_REL16_HIGHEST, 1, 16, 0xffff, 48, TRUE, dont,
848 bfd_elf_generic_reloc),
849
850 HOW (R_PPC64_REL16_HIGHESTA, 1, 16, 0xffff, 48, TRUE, dont,
851 ppc64_elf_ha_reloc),
852
853 /* Like R_PPC64_REL16_HA but for split field in addpcis. */
854 HOW (R_PPC64_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
855 ppc64_elf_ha_reloc),
856
857 /* A split-field reloc for addpcis, non-relative (gas internal use only). */
858 HOW (R_PPC64_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
859 ppc64_elf_ha_reloc),
860
861 /* Like R_PPC64_ADDR16_HI, but no overflow. */
862 HOW (R_PPC64_ADDR16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
863 bfd_elf_generic_reloc),
864
865 /* Like R_PPC64_ADDR16_HA, but no overflow. */
866 HOW (R_PPC64_ADDR16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
867 ppc64_elf_ha_reloc),
868
869 /* Like R_PPC64_DTPREL16_HI, but no overflow. */
870 HOW (R_PPC64_DTPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
871 ppc64_elf_unhandled_reloc),
872
873 /* Like R_PPC64_DTPREL16_HA, but no overflow. */
874 HOW (R_PPC64_DTPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
875 ppc64_elf_unhandled_reloc),
876
877 /* Like R_PPC64_TPREL16_HI, but no overflow. */
878 HOW (R_PPC64_TPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
879 ppc64_elf_unhandled_reloc),
880
881 /* Like R_PPC64_TPREL16_HA, but no overflow. */
882 HOW (R_PPC64_TPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
883 ppc64_elf_unhandled_reloc),
884
885 /* Marker reloc on ELFv2 large-model function entry. */
886 HOW (R_PPC64_ENTRY, 2, 32, 0, 0, FALSE, dont,
887 bfd_elf_generic_reloc),
888
889 /* Like ADDR64, but use local entry point of function. */
890 HOW (R_PPC64_ADDR64_LOCAL, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
891 bfd_elf_generic_reloc),
892
893 HOW (R_PPC64_PLTSEQ_NOTOC, 2, 32, 0, 0, FALSE, dont,
894 bfd_elf_generic_reloc),
895
896 HOW (R_PPC64_PLTCALL_NOTOC, 2, 32, 0, 0, FALSE, dont,
897 bfd_elf_generic_reloc),
898
899 HOW (R_PPC64_PCREL_OPT, 2, 32, 0, 0, FALSE, dont,
900 bfd_elf_generic_reloc),
901
902 HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
903 ppc64_elf_prefix_reloc),
904
905 HOW (R_PPC64_D34_LO, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, dont,
906 ppc64_elf_prefix_reloc),
907
908 HOW (R_PPC64_D34_HI30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
909 ppc64_elf_prefix_reloc),
910
911 HOW (R_PPC64_D34_HA30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
912 ppc64_elf_prefix_reloc),
913
914 HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
915 ppc64_elf_prefix_reloc),
916
917 HOW (R_PPC64_GOT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
918 ppc64_elf_unhandled_reloc),
919
920 HOW (R_PPC64_PLT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
921 ppc64_elf_unhandled_reloc),
922
923 HOW (R_PPC64_PLT_PCREL34_NOTOC, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
924 ppc64_elf_unhandled_reloc),
925
926 HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
927 ppc64_elf_unhandled_reloc),
928
929 HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
930 ppc64_elf_unhandled_reloc),
931
932 HOW (R_PPC64_GOT_TLSGD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
933 ppc64_elf_unhandled_reloc),
934
935 HOW (R_PPC64_GOT_TLSLD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
936 ppc64_elf_unhandled_reloc),
937
938 HOW (R_PPC64_GOT_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
939 ppc64_elf_unhandled_reloc),
940
941 HOW (R_PPC64_GOT_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
942 ppc64_elf_unhandled_reloc),
943
944 HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
945 bfd_elf_generic_reloc),
946
947 HOW (R_PPC64_ADDR16_HIGHERA34, 1, 16, 0xffff, 34, FALSE, dont,
948 ppc64_elf_ha_reloc),
949
950 HOW (R_PPC64_ADDR16_HIGHEST34, 1, 16, 0xffff, 50, FALSE, dont,
951 bfd_elf_generic_reloc),
952
953 HOW (R_PPC64_ADDR16_HIGHESTA34, 1, 16, 0xffff, 50, FALSE, dont,
954 ppc64_elf_ha_reloc),
955
956 HOW (R_PPC64_REL16_HIGHER34, 1, 16, 0xffff, 34, TRUE, dont,
957 bfd_elf_generic_reloc),
958
959 HOW (R_PPC64_REL16_HIGHERA34, 1, 16, 0xffff, 34, TRUE, dont,
960 ppc64_elf_ha_reloc),
961
962 HOW (R_PPC64_REL16_HIGHEST34, 1, 16, 0xffff, 50, TRUE, dont,
963 bfd_elf_generic_reloc),
964
965 HOW (R_PPC64_REL16_HIGHESTA34, 1, 16, 0xffff, 50, TRUE, dont,
966 ppc64_elf_ha_reloc),
967
968 HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
969 ppc64_elf_prefix_reloc),
970
971 HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
972 ppc64_elf_prefix_reloc),
973
974 /* GNU extension to record C++ vtable hierarchy. */
975 HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
976 NULL),
977
978 /* GNU extension to record C++ vtable member usage. */
979 HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
980 NULL),
981 };
982
983 \f
984 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
985 be done. */
986
987 static void
988 ppc_howto_init (void)
989 {
990 unsigned int i, type;
991
992 for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
993 {
994 type = ppc64_elf_howto_raw[i].type;
995 BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
996 ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
997 }
998 }
999
1000 static reloc_howto_type *
1001 ppc64_elf_reloc_type_lookup (bfd *abfd,
1002 bfd_reloc_code_real_type code)
1003 {
1004 enum elf_ppc64_reloc_type r = R_PPC64_NONE;
1005
1006 if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1007 /* Initialize howto table if needed. */
1008 ppc_howto_init ();
1009
1010 switch (code)
1011 {
1012 default:
1013 /* xgettext:c-format */
1014 _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd,
1015 (int) code);
1016 bfd_set_error (bfd_error_bad_value);
1017 return NULL;
1018
1019 case BFD_RELOC_NONE: r = R_PPC64_NONE;
1020 break;
1021 case BFD_RELOC_32: r = R_PPC64_ADDR32;
1022 break;
1023 case BFD_RELOC_PPC_BA26: r = R_PPC64_ADDR24;
1024 break;
1025 case BFD_RELOC_16: r = R_PPC64_ADDR16;
1026 break;
1027 case BFD_RELOC_LO16: r = R_PPC64_ADDR16_LO;
1028 break;
1029 case BFD_RELOC_HI16: r = R_PPC64_ADDR16_HI;
1030 break;
1031 case BFD_RELOC_PPC64_ADDR16_HIGH: r = R_PPC64_ADDR16_HIGH;
1032 break;
1033 case BFD_RELOC_HI16_S: r = R_PPC64_ADDR16_HA;
1034 break;
1035 case BFD_RELOC_PPC64_ADDR16_HIGHA: r = R_PPC64_ADDR16_HIGHA;
1036 break;
1037 case BFD_RELOC_PPC_BA16: r = R_PPC64_ADDR14;
1038 break;
1039 case BFD_RELOC_PPC_BA16_BRTAKEN: r = R_PPC64_ADDR14_BRTAKEN;
1040 break;
1041 case BFD_RELOC_PPC_BA16_BRNTAKEN: r = R_PPC64_ADDR14_BRNTAKEN;
1042 break;
1043 case BFD_RELOC_PPC_B26: r = R_PPC64_REL24;
1044 break;
1045 case BFD_RELOC_PPC64_REL24_NOTOC: r = R_PPC64_REL24_NOTOC;
1046 break;
1047 case BFD_RELOC_PPC_B16: r = R_PPC64_REL14;
1048 break;
1049 case BFD_RELOC_PPC_B16_BRTAKEN: r = R_PPC64_REL14_BRTAKEN;
1050 break;
1051 case BFD_RELOC_PPC_B16_BRNTAKEN: r = R_PPC64_REL14_BRNTAKEN;
1052 break;
1053 case BFD_RELOC_16_GOTOFF: r = R_PPC64_GOT16;
1054 break;
1055 case BFD_RELOC_LO16_GOTOFF: r = R_PPC64_GOT16_LO;
1056 break;
1057 case BFD_RELOC_HI16_GOTOFF: r = R_PPC64_GOT16_HI;
1058 break;
1059 case BFD_RELOC_HI16_S_GOTOFF: r = R_PPC64_GOT16_HA;
1060 break;
1061 case BFD_RELOC_PPC_COPY: r = R_PPC64_COPY;
1062 break;
1063 case BFD_RELOC_PPC_GLOB_DAT: r = R_PPC64_GLOB_DAT;
1064 break;
1065 case BFD_RELOC_32_PCREL: r = R_PPC64_REL32;
1066 break;
1067 case BFD_RELOC_32_PLTOFF: r = R_PPC64_PLT32;
1068 break;
1069 case BFD_RELOC_32_PLT_PCREL: r = R_PPC64_PLTREL32;
1070 break;
1071 case BFD_RELOC_LO16_PLTOFF: r = R_PPC64_PLT16_LO;
1072 break;
1073 case BFD_RELOC_HI16_PLTOFF: r = R_PPC64_PLT16_HI;
1074 break;
1075 case BFD_RELOC_HI16_S_PLTOFF: r = R_PPC64_PLT16_HA;
1076 break;
1077 case BFD_RELOC_16_BASEREL: r = R_PPC64_SECTOFF;
1078 break;
1079 case BFD_RELOC_LO16_BASEREL: r = R_PPC64_SECTOFF_LO;
1080 break;
1081 case BFD_RELOC_HI16_BASEREL: r = R_PPC64_SECTOFF_HI;
1082 break;
1083 case BFD_RELOC_HI16_S_BASEREL: r = R_PPC64_SECTOFF_HA;
1084 break;
1085 case BFD_RELOC_CTOR: r = R_PPC64_ADDR64;
1086 break;
1087 case BFD_RELOC_64: r = R_PPC64_ADDR64;
1088 break;
1089 case BFD_RELOC_PPC64_HIGHER: r = R_PPC64_ADDR16_HIGHER;
1090 break;
1091 case BFD_RELOC_PPC64_HIGHER_S: r = R_PPC64_ADDR16_HIGHERA;
1092 break;
1093 case BFD_RELOC_PPC64_HIGHEST: r = R_PPC64_ADDR16_HIGHEST;
1094 break;
1095 case BFD_RELOC_PPC64_HIGHEST_S: r = R_PPC64_ADDR16_HIGHESTA;
1096 break;
1097 case BFD_RELOC_64_PCREL: r = R_PPC64_REL64;
1098 break;
1099 case BFD_RELOC_64_PLTOFF: r = R_PPC64_PLT64;
1100 break;
1101 case BFD_RELOC_64_PLT_PCREL: r = R_PPC64_PLTREL64;
1102 break;
1103 case BFD_RELOC_PPC_TOC16: r = R_PPC64_TOC16;
1104 break;
1105 case BFD_RELOC_PPC64_TOC16_LO: r = R_PPC64_TOC16_LO;
1106 break;
1107 case BFD_RELOC_PPC64_TOC16_HI: r = R_PPC64_TOC16_HI;
1108 break;
1109 case BFD_RELOC_PPC64_TOC16_HA: r = R_PPC64_TOC16_HA;
1110 break;
1111 case BFD_RELOC_PPC64_TOC: r = R_PPC64_TOC;
1112 break;
1113 case BFD_RELOC_PPC64_PLTGOT16: r = R_PPC64_PLTGOT16;
1114 break;
1115 case BFD_RELOC_PPC64_PLTGOT16_LO: r = R_PPC64_PLTGOT16_LO;
1116 break;
1117 case BFD_RELOC_PPC64_PLTGOT16_HI: r = R_PPC64_PLTGOT16_HI;
1118 break;
1119 case BFD_RELOC_PPC64_PLTGOT16_HA: r = R_PPC64_PLTGOT16_HA;
1120 break;
1121 case BFD_RELOC_PPC64_ADDR16_DS: r = R_PPC64_ADDR16_DS;
1122 break;
1123 case BFD_RELOC_PPC64_ADDR16_LO_DS: r = R_PPC64_ADDR16_LO_DS;
1124 break;
1125 case BFD_RELOC_PPC64_GOT16_DS: r = R_PPC64_GOT16_DS;
1126 break;
1127 case BFD_RELOC_PPC64_GOT16_LO_DS: r = R_PPC64_GOT16_LO_DS;
1128 break;
1129 case BFD_RELOC_PPC64_PLT16_LO_DS: r = R_PPC64_PLT16_LO_DS;
1130 break;
1131 case BFD_RELOC_PPC64_SECTOFF_DS: r = R_PPC64_SECTOFF_DS;
1132 break;
1133 case BFD_RELOC_PPC64_SECTOFF_LO_DS: r = R_PPC64_SECTOFF_LO_DS;
1134 break;
1135 case BFD_RELOC_PPC64_TOC16_DS: r = R_PPC64_TOC16_DS;
1136 break;
1137 case BFD_RELOC_PPC64_TOC16_LO_DS: r = R_PPC64_TOC16_LO_DS;
1138 break;
1139 case BFD_RELOC_PPC64_PLTGOT16_DS: r = R_PPC64_PLTGOT16_DS;
1140 break;
1141 case BFD_RELOC_PPC64_PLTGOT16_LO_DS: r = R_PPC64_PLTGOT16_LO_DS;
1142 break;
1143 case BFD_RELOC_PPC64_TLS_PCREL:
1144 case BFD_RELOC_PPC_TLS: r = R_PPC64_TLS;
1145 break;
1146 case BFD_RELOC_PPC_TLSGD: r = R_PPC64_TLSGD;
1147 break;
1148 case BFD_RELOC_PPC_TLSLD: r = R_PPC64_TLSLD;
1149 break;
1150 case BFD_RELOC_PPC_DTPMOD: r = R_PPC64_DTPMOD64;
1151 break;
1152 case BFD_RELOC_PPC_TPREL16: r = R_PPC64_TPREL16;
1153 break;
1154 case BFD_RELOC_PPC_TPREL16_LO: r = R_PPC64_TPREL16_LO;
1155 break;
1156 case BFD_RELOC_PPC_TPREL16_HI: r = R_PPC64_TPREL16_HI;
1157 break;
1158 case BFD_RELOC_PPC64_TPREL16_HIGH: r = R_PPC64_TPREL16_HIGH;
1159 break;
1160 case BFD_RELOC_PPC_TPREL16_HA: r = R_PPC64_TPREL16_HA;
1161 break;
1162 case BFD_RELOC_PPC64_TPREL16_HIGHA: r = R_PPC64_TPREL16_HIGHA;
1163 break;
1164 case BFD_RELOC_PPC_TPREL: r = R_PPC64_TPREL64;
1165 break;
1166 case BFD_RELOC_PPC_DTPREL16: r = R_PPC64_DTPREL16;
1167 break;
1168 case BFD_RELOC_PPC_DTPREL16_LO: r = R_PPC64_DTPREL16_LO;
1169 break;
1170 case BFD_RELOC_PPC_DTPREL16_HI: r = R_PPC64_DTPREL16_HI;
1171 break;
1172 case BFD_RELOC_PPC64_DTPREL16_HIGH: r = R_PPC64_DTPREL16_HIGH;
1173 break;
1174 case BFD_RELOC_PPC_DTPREL16_HA: r = R_PPC64_DTPREL16_HA;
1175 break;
1176 case BFD_RELOC_PPC64_DTPREL16_HIGHA: r = R_PPC64_DTPREL16_HIGHA;
1177 break;
1178 case BFD_RELOC_PPC_DTPREL: r = R_PPC64_DTPREL64;
1179 break;
1180 case BFD_RELOC_PPC_GOT_TLSGD16: r = R_PPC64_GOT_TLSGD16;
1181 break;
1182 case BFD_RELOC_PPC_GOT_TLSGD16_LO: r = R_PPC64_GOT_TLSGD16_LO;
1183 break;
1184 case BFD_RELOC_PPC_GOT_TLSGD16_HI: r = R_PPC64_GOT_TLSGD16_HI;
1185 break;
1186 case BFD_RELOC_PPC_GOT_TLSGD16_HA: r = R_PPC64_GOT_TLSGD16_HA;
1187 break;
1188 case BFD_RELOC_PPC_GOT_TLSLD16: r = R_PPC64_GOT_TLSLD16;
1189 break;
1190 case BFD_RELOC_PPC_GOT_TLSLD16_LO: r = R_PPC64_GOT_TLSLD16_LO;
1191 break;
1192 case BFD_RELOC_PPC_GOT_TLSLD16_HI: r = R_PPC64_GOT_TLSLD16_HI;
1193 break;
1194 case BFD_RELOC_PPC_GOT_TLSLD16_HA: r = R_PPC64_GOT_TLSLD16_HA;
1195 break;
1196 case BFD_RELOC_PPC_GOT_TPREL16: r = R_PPC64_GOT_TPREL16_DS;
1197 break;
1198 case BFD_RELOC_PPC_GOT_TPREL16_LO: r = R_PPC64_GOT_TPREL16_LO_DS;
1199 break;
1200 case BFD_RELOC_PPC_GOT_TPREL16_HI: r = R_PPC64_GOT_TPREL16_HI;
1201 break;
1202 case BFD_RELOC_PPC_GOT_TPREL16_HA: r = R_PPC64_GOT_TPREL16_HA;
1203 break;
1204 case BFD_RELOC_PPC_GOT_DTPREL16: r = R_PPC64_GOT_DTPREL16_DS;
1205 break;
1206 case BFD_RELOC_PPC_GOT_DTPREL16_LO: r = R_PPC64_GOT_DTPREL16_LO_DS;
1207 break;
1208 case BFD_RELOC_PPC_GOT_DTPREL16_HI: r = R_PPC64_GOT_DTPREL16_HI;
1209 break;
1210 case BFD_RELOC_PPC_GOT_DTPREL16_HA: r = R_PPC64_GOT_DTPREL16_HA;
1211 break;
1212 case BFD_RELOC_PPC64_TPREL16_DS: r = R_PPC64_TPREL16_DS;
1213 break;
1214 case BFD_RELOC_PPC64_TPREL16_LO_DS: r = R_PPC64_TPREL16_LO_DS;
1215 break;
1216 case BFD_RELOC_PPC64_TPREL16_HIGHER: r = R_PPC64_TPREL16_HIGHER;
1217 break;
1218 case BFD_RELOC_PPC64_TPREL16_HIGHERA: r = R_PPC64_TPREL16_HIGHERA;
1219 break;
1220 case BFD_RELOC_PPC64_TPREL16_HIGHEST: r = R_PPC64_TPREL16_HIGHEST;
1221 break;
1222 case BFD_RELOC_PPC64_TPREL16_HIGHESTA: r = R_PPC64_TPREL16_HIGHESTA;
1223 break;
1224 case BFD_RELOC_PPC64_DTPREL16_DS: r = R_PPC64_DTPREL16_DS;
1225 break;
1226 case BFD_RELOC_PPC64_DTPREL16_LO_DS: r = R_PPC64_DTPREL16_LO_DS;
1227 break;
1228 case BFD_RELOC_PPC64_DTPREL16_HIGHER: r = R_PPC64_DTPREL16_HIGHER;
1229 break;
1230 case BFD_RELOC_PPC64_DTPREL16_HIGHERA: r = R_PPC64_DTPREL16_HIGHERA;
1231 break;
1232 case BFD_RELOC_PPC64_DTPREL16_HIGHEST: r = R_PPC64_DTPREL16_HIGHEST;
1233 break;
1234 case BFD_RELOC_PPC64_DTPREL16_HIGHESTA: r = R_PPC64_DTPREL16_HIGHESTA;
1235 break;
1236 case BFD_RELOC_16_PCREL: r = R_PPC64_REL16;
1237 break;
1238 case BFD_RELOC_LO16_PCREL: r = R_PPC64_REL16_LO;
1239 break;
1240 case BFD_RELOC_HI16_PCREL: r = R_PPC64_REL16_HI;
1241 break;
1242 case BFD_RELOC_HI16_S_PCREL: r = R_PPC64_REL16_HA;
1243 break;
1244 case BFD_RELOC_PPC64_REL16_HIGH: r = R_PPC64_REL16_HIGH;
1245 break;
1246 case BFD_RELOC_PPC64_REL16_HIGHA: r = R_PPC64_REL16_HIGHA;
1247 break;
1248 case BFD_RELOC_PPC64_REL16_HIGHER: r = R_PPC64_REL16_HIGHER;
1249 break;
1250 case BFD_RELOC_PPC64_REL16_HIGHERA: r = R_PPC64_REL16_HIGHERA;
1251 break;
1252 case BFD_RELOC_PPC64_REL16_HIGHEST: r = R_PPC64_REL16_HIGHEST;
1253 break;
1254 case BFD_RELOC_PPC64_REL16_HIGHESTA: r = R_PPC64_REL16_HIGHESTA;
1255 break;
1256 case BFD_RELOC_PPC_16DX_HA: r = R_PPC64_16DX_HA;
1257 break;
1258 case BFD_RELOC_PPC_REL16DX_HA: r = R_PPC64_REL16DX_HA;
1259 break;
1260 case BFD_RELOC_PPC64_ENTRY: r = R_PPC64_ENTRY;
1261 break;
1262 case BFD_RELOC_PPC64_ADDR64_LOCAL: r = R_PPC64_ADDR64_LOCAL;
1263 break;
1264 case BFD_RELOC_PPC64_D34: r = R_PPC64_D34;
1265 break;
1266 case BFD_RELOC_PPC64_D34_LO: r = R_PPC64_D34_LO;
1267 break;
1268 case BFD_RELOC_PPC64_D34_HI30: r = R_PPC64_D34_HI30;
1269 break;
1270 case BFD_RELOC_PPC64_D34_HA30: r = R_PPC64_D34_HA30;
1271 break;
1272 case BFD_RELOC_PPC64_PCREL34: r = R_PPC64_PCREL34;
1273 break;
1274 case BFD_RELOC_PPC64_GOT_PCREL34: r = R_PPC64_GOT_PCREL34;
1275 break;
1276 case BFD_RELOC_PPC64_PLT_PCREL34: r = R_PPC64_PLT_PCREL34;
1277 break;
1278 case BFD_RELOC_PPC64_TPREL34: r = R_PPC64_TPREL34;
1279 break;
1280 case BFD_RELOC_PPC64_DTPREL34: r = R_PPC64_DTPREL34;
1281 break;
1282 case BFD_RELOC_PPC64_GOT_TLSGD34: r = R_PPC64_GOT_TLSGD34;
1283 break;
1284 case BFD_RELOC_PPC64_GOT_TLSLD34: r = R_PPC64_GOT_TLSLD34;
1285 break;
1286 case BFD_RELOC_PPC64_GOT_TPREL34: r = R_PPC64_GOT_TPREL34;
1287 break;
1288 case BFD_RELOC_PPC64_GOT_DTPREL34: r = R_PPC64_GOT_DTPREL34;
1289 break;
1290 case BFD_RELOC_PPC64_ADDR16_HIGHER34: r = R_PPC64_ADDR16_HIGHER34;
1291 break;
1292 case BFD_RELOC_PPC64_ADDR16_HIGHERA34: r = R_PPC64_ADDR16_HIGHERA34;
1293 break;
1294 case BFD_RELOC_PPC64_ADDR16_HIGHEST34: r = R_PPC64_ADDR16_HIGHEST34;
1295 break;
1296 case BFD_RELOC_PPC64_ADDR16_HIGHESTA34: r = R_PPC64_ADDR16_HIGHESTA34;
1297 break;
1298 case BFD_RELOC_PPC64_REL16_HIGHER34: r = R_PPC64_REL16_HIGHER34;
1299 break;
1300 case BFD_RELOC_PPC64_REL16_HIGHERA34: r = R_PPC64_REL16_HIGHERA34;
1301 break;
1302 case BFD_RELOC_PPC64_REL16_HIGHEST34: r = R_PPC64_REL16_HIGHEST34;
1303 break;
1304 case BFD_RELOC_PPC64_REL16_HIGHESTA34: r = R_PPC64_REL16_HIGHESTA34;
1305 break;
1306 case BFD_RELOC_PPC64_D28: r = R_PPC64_D28;
1307 break;
1308 case BFD_RELOC_PPC64_PCREL28: r = R_PPC64_PCREL28;
1309 break;
1310 case BFD_RELOC_VTABLE_INHERIT: r = R_PPC64_GNU_VTINHERIT;
1311 break;
1312 case BFD_RELOC_VTABLE_ENTRY: r = R_PPC64_GNU_VTENTRY;
1313 break;
1314 }
1315
1316 return ppc64_elf_howto_table[r];
1317 };
1318
1319 static reloc_howto_type *
1320 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
1321 const char *r_name)
1322 {
1323 unsigned int i;
1324
1325 for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
1326 if (ppc64_elf_howto_raw[i].name != NULL
1327 && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
1328 return &ppc64_elf_howto_raw[i];
1329
1330 return NULL;
1331 }
1332
1333 /* Set the howto pointer for a PowerPC ELF reloc. */
1334
1335 static bfd_boolean
1336 ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
1337 Elf_Internal_Rela *dst)
1338 {
1339 unsigned int type;
1340
1341 /* Initialize howto table if needed. */
1342 if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
1343 ppc_howto_init ();
1344
1345 type = ELF64_R_TYPE (dst->r_info);
1346 if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
1347 {
1348 /* xgettext:c-format */
1349 _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1350 abfd, type);
1351 bfd_set_error (bfd_error_bad_value);
1352 return FALSE;
1353 }
1354 cache_ptr->howto = ppc64_elf_howto_table[type];
1355 if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
1356 {
1357 /* xgettext:c-format */
1358 _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
1359 abfd, type);
1360 bfd_set_error (bfd_error_bad_value);
1361 return FALSE;
1362 }
1363
1364 return TRUE;
1365 }
1366
1367 /* Handle the R_PPC64_ADDR16_HA and similar relocs. */
1368
1369 static bfd_reloc_status_type
1370 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1371 void *data, asection *input_section,
1372 bfd *output_bfd, char **error_message)
1373 {
1374 enum elf_ppc64_reloc_type r_type;
1375 long insn;
1376 bfd_size_type octets;
1377 bfd_vma value;
1378
1379 /* If this is a relocatable link (output_bfd test tells us), just
1380 call the generic function. Any adjustment will be done at final
1381 link time. */
1382 if (output_bfd != NULL)
1383 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1384 input_section, output_bfd, error_message);
1385
1386 /* Adjust the addend for sign extension of the low 16 (or 34) bits.
1387 We won't actually be using the low bits, so trashing them
1388 doesn't matter. */
1389 r_type = reloc_entry->howto->type;
1390 if (r_type == R_PPC64_ADDR16_HIGHERA34
1391 || r_type == R_PPC64_ADDR16_HIGHESTA34
1392 || r_type == R_PPC64_REL16_HIGHERA34
1393 || r_type == R_PPC64_REL16_HIGHESTA34)
1394 reloc_entry->addend += 1ULL << 33;
1395 else
1396 reloc_entry->addend += 1U << 15;
1397 if (r_type != R_PPC64_REL16DX_HA)
1398 return bfd_reloc_continue;
1399
1400 value = 0;
1401 if (!bfd_is_com_section (symbol->section))
1402 value = symbol->value;
1403 value += (reloc_entry->addend
1404 + symbol->section->output_offset
1405 + symbol->section->output_section->vma);
1406 value -= (reloc_entry->address
1407 + input_section->output_offset
1408 + input_section->output_section->vma);
1409 value = (bfd_signed_vma) value >> 16;
1410
1411 octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1412 insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1413 insn &= ~0x1fffc1;
1414 insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
1415 bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1416 if (value + 0x8000 > 0xffff)
1417 return bfd_reloc_overflow;
1418 return bfd_reloc_ok;
1419 }
1420
1421 static bfd_reloc_status_type
1422 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1423 void *data, asection *input_section,
1424 bfd *output_bfd, char **error_message)
1425 {
1426 if (output_bfd != NULL)
1427 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1428 input_section, output_bfd, error_message);
1429
1430 if (strcmp (symbol->section->name, ".opd") == 0
1431 && (symbol->section->owner->flags & DYNAMIC) == 0)
1432 {
1433 bfd_vma dest = opd_entry_value (symbol->section,
1434 symbol->value + reloc_entry->addend,
1435 NULL, NULL, FALSE);
1436 if (dest != (bfd_vma) -1)
1437 reloc_entry->addend = dest - (symbol->value
1438 + symbol->section->output_section->vma
1439 + symbol->section->output_offset);
1440 }
1441 else
1442 {
1443 elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
1444
1445 if (symbol->section->owner != abfd
1446 && symbol->section->owner != NULL
1447 && abiversion (symbol->section->owner) >= 2)
1448 {
1449 unsigned int i;
1450
1451 for (i = 0; i < symbol->section->owner->symcount; ++i)
1452 {
1453 asymbol *symdef = symbol->section->owner->outsymbols[i];
1454
1455 if (strcmp (symdef->name, symbol->name) == 0)
1456 {
1457 elfsym = (elf_symbol_type *) symdef;
1458 break;
1459 }
1460 }
1461 }
1462 reloc_entry->addend
1463 += PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
1464 }
1465 return bfd_reloc_continue;
1466 }
1467
1468 static bfd_reloc_status_type
1469 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1470 void *data, asection *input_section,
1471 bfd *output_bfd, char **error_message)
1472 {
1473 long insn;
1474 enum elf_ppc64_reloc_type r_type;
1475 bfd_size_type octets;
1476 /* Assume 'at' branch hints. */
1477 bfd_boolean is_isa_v2 = TRUE;
1478
1479 /* If this is a relocatable link (output_bfd test tells us), just
1480 call the generic function. Any adjustment will be done at final
1481 link time. */
1482 if (output_bfd != NULL)
1483 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1484 input_section, output_bfd, error_message);
1485
1486 octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1487 insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
1488 insn &= ~(0x01 << 21);
1489 r_type = reloc_entry->howto->type;
1490 if (r_type == R_PPC64_ADDR14_BRTAKEN
1491 || r_type == R_PPC64_REL14_BRTAKEN)
1492 insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field. */
1493
1494 if (is_isa_v2)
1495 {
1496 /* Set 'a' bit. This is 0b00010 in BO field for branch
1497 on CR(BI) insns (BO == 001at or 011at), and 0b01000
1498 for branch on CTR insns (BO == 1a00t or 1a01t). */
1499 if ((insn & (0x14 << 21)) == (0x04 << 21))
1500 insn |= 0x02 << 21;
1501 else if ((insn & (0x14 << 21)) == (0x10 << 21))
1502 insn |= 0x08 << 21;
1503 else
1504 goto out;
1505 }
1506 else
1507 {
1508 bfd_vma target = 0;
1509 bfd_vma from;
1510
1511 if (!bfd_is_com_section (symbol->section))
1512 target = symbol->value;
1513 target += symbol->section->output_section->vma;
1514 target += symbol->section->output_offset;
1515 target += reloc_entry->addend;
1516
1517 from = (reloc_entry->address
1518 + input_section->output_offset
1519 + input_section->output_section->vma);
1520
1521 /* Invert 'y' bit if not the default. */
1522 if ((bfd_signed_vma) (target - from) < 0)
1523 insn ^= 0x01 << 21;
1524 }
1525 bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
1526 out:
1527 return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
1528 input_section, output_bfd, error_message);
1529 }
1530
1531 static bfd_reloc_status_type
1532 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1533 void *data, asection *input_section,
1534 bfd *output_bfd, char **error_message)
1535 {
1536 /* If this is a relocatable link (output_bfd test tells us), just
1537 call the generic function. Any adjustment will be done at final
1538 link time. */
1539 if (output_bfd != NULL)
1540 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1541 input_section, output_bfd, error_message);
1542
1543 /* Subtract the symbol section base address. */
1544 reloc_entry->addend -= symbol->section->output_section->vma;
1545 return bfd_reloc_continue;
1546 }
1547
1548 static bfd_reloc_status_type
1549 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1550 void *data, asection *input_section,
1551 bfd *output_bfd, char **error_message)
1552 {
1553 /* If this is a relocatable link (output_bfd test tells us), just
1554 call the generic function. Any adjustment will be done at final
1555 link time. */
1556 if (output_bfd != NULL)
1557 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1558 input_section, output_bfd, error_message);
1559
1560 /* Subtract the symbol section base address. */
1561 reloc_entry->addend -= symbol->section->output_section->vma;
1562
1563 /* Adjust the addend for sign extension of the low 16 bits. */
1564 reloc_entry->addend += 0x8000;
1565 return bfd_reloc_continue;
1566 }
1567
1568 static bfd_reloc_status_type
1569 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1570 void *data, asection *input_section,
1571 bfd *output_bfd, char **error_message)
1572 {
1573 bfd_vma TOCstart;
1574
1575 /* If this is a relocatable link (output_bfd test tells us), just
1576 call the generic function. Any adjustment will be done at final
1577 link time. */
1578 if (output_bfd != NULL)
1579 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1580 input_section, output_bfd, error_message);
1581
1582 TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1583 if (TOCstart == 0)
1584 TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1585
1586 /* Subtract the TOC base address. */
1587 reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1588 return bfd_reloc_continue;
1589 }
1590
1591 static bfd_reloc_status_type
1592 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1593 void *data, asection *input_section,
1594 bfd *output_bfd, char **error_message)
1595 {
1596 bfd_vma TOCstart;
1597
1598 /* If this is a relocatable link (output_bfd test tells us), just
1599 call the generic function. Any adjustment will be done at final
1600 link time. */
1601 if (output_bfd != NULL)
1602 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1603 input_section, output_bfd, error_message);
1604
1605 TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1606 if (TOCstart == 0)
1607 TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1608
1609 /* Subtract the TOC base address. */
1610 reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
1611
1612 /* Adjust the addend for sign extension of the low 16 bits. */
1613 reloc_entry->addend += 0x8000;
1614 return bfd_reloc_continue;
1615 }
1616
1617 static bfd_reloc_status_type
1618 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1619 void *data, asection *input_section,
1620 bfd *output_bfd, char **error_message)
1621 {
1622 bfd_vma TOCstart;
1623 bfd_size_type octets;
1624
1625 /* If this is a relocatable link (output_bfd test tells us), just
1626 call the generic function. Any adjustment will be done at final
1627 link time. */
1628 if (output_bfd != NULL)
1629 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1630 input_section, output_bfd, error_message);
1631
1632 TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
1633 if (TOCstart == 0)
1634 TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
1635
1636 octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
1637 bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
1638 return bfd_reloc_ok;
1639 }
1640
1641 static bfd_reloc_status_type
1642 ppc64_elf_prefix_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1643 void *data, asection *input_section,
1644 bfd *output_bfd, char **error_message)
1645 {
1646 uint64_t insn;
1647 bfd_vma targ;
1648
1649 if (output_bfd != NULL)
1650 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1651 input_section, output_bfd, error_message);
1652
1653 insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1654 insn <<= 32;
1655 insn |= bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address + 4);
1656
1657 targ = (symbol->section->output_section->vma
1658 + symbol->section->output_offset
1659 + reloc_entry->addend);
1660 if (!bfd_is_com_section (symbol->section))
1661 targ += symbol->value;
1662 if (reloc_entry->howto->type == R_PPC64_D34_HA30)
1663 targ += 1ULL << 33;
1664 if (reloc_entry->howto->pc_relative)
1665 {
1666 bfd_vma from = (reloc_entry->address
1667 + input_section->output_offset
1668 + input_section->output_section->vma);
1669 targ -=from;
1670 }
1671 targ >>= reloc_entry->howto->rightshift;
1672 insn &= ~reloc_entry->howto->dst_mask;
1673 insn |= ((targ << 16) | (targ & 0xffff)) & reloc_entry->howto->dst_mask;
1674 bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + reloc_entry->address);
1675 bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address + 4);
1676 if (reloc_entry->howto->complain_on_overflow == complain_overflow_signed
1677 && (targ + (1ULL << (reloc_entry->howto->bitsize - 1))
1678 >= 1ULL << reloc_entry->howto->bitsize))
1679 return bfd_reloc_overflow;
1680 return bfd_reloc_ok;
1681 }
1682
1683 static bfd_reloc_status_type
1684 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
1685 void *data, asection *input_section,
1686 bfd *output_bfd, char **error_message)
1687 {
1688 /* If this is a relocatable link (output_bfd test tells us), just
1689 call the generic function. Any adjustment will be done at final
1690 link time. */
1691 if (output_bfd != NULL)
1692 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
1693 input_section, output_bfd, error_message);
1694
1695 if (error_message != NULL)
1696 {
1697 static char buf[60];
1698 sprintf (buf, "generic linker can't handle %s",
1699 reloc_entry->howto->name);
1700 *error_message = buf;
1701 }
1702 return bfd_reloc_dangerous;
1703 }
1704
1705 /* Track GOT entries needed for a given symbol. We might need more
1706 than one got entry per symbol. */
1707 struct got_entry
1708 {
1709 struct got_entry *next;
1710
1711 /* The symbol addend that we'll be placing in the GOT. */
1712 bfd_vma addend;
1713
1714 /* Unlike other ELF targets, we use separate GOT entries for the same
1715 symbol referenced from different input files. This is to support
1716 automatic multiple TOC/GOT sections, where the TOC base can vary
1717 from one input file to another. After partitioning into TOC groups
1718 we merge entries within the group.
1719
1720 Point to the BFD owning this GOT entry. */
1721 bfd *owner;
1722
1723 /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
1724 TLS_TPREL or TLS_DTPREL for tls entries. */
1725 unsigned char tls_type;
1726
1727 /* Non-zero if got.ent points to real entry. */
1728 unsigned char is_indirect;
1729
1730 /* Reference count until size_dynamic_sections, GOT offset thereafter. */
1731 union
1732 {
1733 bfd_signed_vma refcount;
1734 bfd_vma offset;
1735 struct got_entry *ent;
1736 } got;
1737 };
1738
1739 /* The same for PLT. */
1740 struct plt_entry
1741 {
1742 struct plt_entry *next;
1743
1744 bfd_vma addend;
1745
1746 union
1747 {
1748 bfd_signed_vma refcount;
1749 bfd_vma offset;
1750 } plt;
1751 };
1752
1753 struct ppc64_elf_obj_tdata
1754 {
1755 struct elf_obj_tdata elf;
1756
1757 /* Shortcuts to dynamic linker sections. */
1758 asection *got;
1759 asection *relgot;
1760
1761 /* Used during garbage collection. We attach global symbols defined
1762 on removed .opd entries to this section so that the sym is removed. */
1763 asection *deleted_section;
1764
1765 /* TLS local dynamic got entry handling. Support for multiple GOT
1766 sections means we potentially need one of these for each input bfd. */
1767 struct got_entry tlsld_got;
1768
1769 union
1770 {
1771 /* A copy of relocs before they are modified for --emit-relocs. */
1772 Elf_Internal_Rela *relocs;
1773
1774 /* Section contents. */
1775 bfd_byte *contents;
1776 } opd;
1777
1778 /* Nonzero if this bfd has small toc/got relocs, ie. that expect
1779 the reloc to be in the range -32768 to 32767. */
1780 unsigned int has_small_toc_reloc : 1;
1781
1782 /* Set if toc/got ha relocs detected not using r2, or lo reloc
1783 instruction not one we handle. */
1784 unsigned int unexpected_toc_insn : 1;
1785
1786 /* Set if PLT/GOT/TOC relocs that can be optimised are present in
1787 this file. */
1788 unsigned int has_optrel : 1;
1789 };
1790
1791 #define ppc64_elf_tdata(bfd) \
1792 ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
1793
1794 #define ppc64_tlsld_got(bfd) \
1795 (&ppc64_elf_tdata (bfd)->tlsld_got)
1796
1797 #define is_ppc64_elf(bfd) \
1798 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
1799 && elf_object_id (bfd) == PPC64_ELF_DATA)
1800
1801 /* Override the generic function because we store some extras. */
1802
1803 static bfd_boolean
1804 ppc64_elf_mkobject (bfd *abfd)
1805 {
1806 return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
1807 PPC64_ELF_DATA);
1808 }
1809
1810 /* Fix bad default arch selected for a 64 bit input bfd when the
1811 default is 32 bit. Also select arch based on apuinfo. */
1812
1813 static bfd_boolean
1814 ppc64_elf_object_p (bfd *abfd)
1815 {
1816 if (!abfd->arch_info->the_default)
1817 return TRUE;
1818
1819 if (abfd->arch_info->bits_per_word == 32)
1820 {
1821 Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
1822
1823 if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
1824 {
1825 /* Relies on arch after 32 bit default being 64 bit default. */
1826 abfd->arch_info = abfd->arch_info->next;
1827 BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
1828 }
1829 }
1830 return _bfd_elf_ppc_set_arch (abfd);
1831 }
1832
1833 /* Support for core dump NOTE sections. */
1834
1835 static bfd_boolean
1836 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
1837 {
1838 size_t offset, size;
1839
1840 if (note->descsz != 504)
1841 return FALSE;
1842
1843 /* pr_cursig */
1844 elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
1845
1846 /* pr_pid */
1847 elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
1848
1849 /* pr_reg */
1850 offset = 112;
1851 size = 384;
1852
1853 /* Make a ".reg/999" section. */
1854 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
1855 size, note->descpos + offset);
1856 }
1857
1858 static bfd_boolean
1859 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
1860 {
1861 if (note->descsz != 136)
1862 return FALSE;
1863
1864 elf_tdata (abfd)->core->pid
1865 = bfd_get_32 (abfd, note->descdata + 24);
1866 elf_tdata (abfd)->core->program
1867 = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
1868 elf_tdata (abfd)->core->command
1869 = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
1870
1871 return TRUE;
1872 }
1873
1874 static char *
1875 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
1876 ...)
1877 {
1878 switch (note_type)
1879 {
1880 default:
1881 return NULL;
1882
1883 case NT_PRPSINFO:
1884 {
1885 char data[136] ATTRIBUTE_NONSTRING;
1886 va_list ap;
1887
1888 va_start (ap, note_type);
1889 memset (data, 0, sizeof (data));
1890 strncpy (data + 40, va_arg (ap, const char *), 16);
1891 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1892 DIAGNOSTIC_PUSH;
1893 /* GCC 8.0 and 8.1 warn about 80 equals destination size with
1894 -Wstringop-truncation:
1895 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
1896 */
1897 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
1898 #endif
1899 strncpy (data + 56, va_arg (ap, const char *), 80);
1900 #if GCC_VERSION == 8000 || GCC_VERSION == 8001
1901 DIAGNOSTIC_POP;
1902 #endif
1903 va_end (ap);
1904 return elfcore_write_note (abfd, buf, bufsiz,
1905 "CORE", note_type, data, sizeof (data));
1906 }
1907
1908 case NT_PRSTATUS:
1909 {
1910 char data[504];
1911 va_list ap;
1912 long pid;
1913 int cursig;
1914 const void *greg;
1915
1916 va_start (ap, note_type);
1917 memset (data, 0, 112);
1918 pid = va_arg (ap, long);
1919 bfd_put_32 (abfd, pid, data + 32);
1920 cursig = va_arg (ap, int);
1921 bfd_put_16 (abfd, cursig, data + 12);
1922 greg = va_arg (ap, const void *);
1923 memcpy (data + 112, greg, 384);
1924 memset (data + 496, 0, 8);
1925 va_end (ap);
1926 return elfcore_write_note (abfd, buf, bufsiz,
1927 "CORE", note_type, data, sizeof (data));
1928 }
1929 }
1930 }
1931
1932 /* Add extra PPC sections. */
1933
1934 static const struct bfd_elf_special_section ppc64_elf_special_sections[] =
1935 {
1936 { STRING_COMMA_LEN (".plt"), 0, SHT_NOBITS, 0 },
1937 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
1938 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1939 { STRING_COMMA_LEN (".toc"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1940 { STRING_COMMA_LEN (".toc1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1941 { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
1942 { NULL, 0, 0, 0, 0 }
1943 };
1944
1945 enum _ppc64_sec_type {
1946 sec_normal = 0,
1947 sec_opd = 1,
1948 sec_toc = 2
1949 };
1950
1951 struct _ppc64_elf_section_data
1952 {
1953 struct bfd_elf_section_data elf;
1954
1955 union
1956 {
1957 /* An array with one entry for each opd function descriptor,
1958 and some spares since opd entries may be either 16 or 24 bytes. */
1959 #define OPD_NDX(OFF) ((OFF) >> 4)
1960 struct _opd_sec_data
1961 {
1962 /* Points to the function code section for local opd entries. */
1963 asection **func_sec;
1964
1965 /* After editing .opd, adjust references to opd local syms. */
1966 long *adjust;
1967 } opd;
1968
1969 /* An array for toc sections, indexed by offset/8. */
1970 struct _toc_sec_data
1971 {
1972 /* Specifies the relocation symbol index used at a given toc offset. */
1973 unsigned *symndx;
1974
1975 /* And the relocation addend. */
1976 bfd_vma *add;
1977 } toc;
1978 } u;
1979
1980 enum _ppc64_sec_type sec_type:2;
1981
1982 /* Flag set when small branches are detected. Used to
1983 select suitable defaults for the stub group size. */
1984 unsigned int has_14bit_branch:1;
1985
1986 /* Flag set when PLTCALL relocs are detected. */
1987 unsigned int has_pltcall:1;
1988
1989 /* Flag set when section has PLT/GOT/TOC relocations that can be
1990 optimised. */
1991 unsigned int has_optrel:1;
1992 };
1993
1994 #define ppc64_elf_section_data(sec) \
1995 ((struct _ppc64_elf_section_data *) elf_section_data (sec))
1996
1997 static bfd_boolean
1998 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
1999 {
2000 if (!sec->used_by_bfd)
2001 {
2002 struct _ppc64_elf_section_data *sdata;
2003 bfd_size_type amt = sizeof (*sdata);
2004
2005 sdata = bfd_zalloc (abfd, amt);
2006 if (sdata == NULL)
2007 return FALSE;
2008 sec->used_by_bfd = sdata;
2009 }
2010
2011 return _bfd_elf_new_section_hook (abfd, sec);
2012 }
2013
2014 static struct _opd_sec_data *
2015 get_opd_info (asection * sec)
2016 {
2017 if (sec != NULL
2018 && ppc64_elf_section_data (sec) != NULL
2019 && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2020 return &ppc64_elf_section_data (sec)->u.opd;
2021 return NULL;
2022 }
2023 \f
2024 /* Parameters for the qsort hook. */
2025 static bfd_boolean synthetic_relocatable;
2026 static asection *synthetic_opd;
2027
2028 /* qsort comparison function for ppc64_elf_get_synthetic_symtab. */
2029
2030 static int
2031 compare_symbols (const void *ap, const void *bp)
2032 {
2033 const asymbol *a = *(const asymbol **) ap;
2034 const asymbol *b = *(const asymbol **) bp;
2035
2036 /* Section symbols first. */
2037 if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2038 return -1;
2039 if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2040 return 1;
2041
2042 /* then .opd symbols. */
2043 if (synthetic_opd != NULL)
2044 {
2045 if (strcmp (a->section->name, ".opd") == 0
2046 && strcmp (b->section->name, ".opd") != 0)
2047 return -1;
2048 if (strcmp (a->section->name, ".opd") != 0
2049 && strcmp (b->section->name, ".opd") == 0)
2050 return 1;
2051 }
2052
2053 /* then other code symbols. */
2054 if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2055 == (SEC_CODE | SEC_ALLOC))
2056 && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2057 != (SEC_CODE | SEC_ALLOC)))
2058 return -1;
2059
2060 if (((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2061 != (SEC_CODE | SEC_ALLOC))
2062 && ((b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2063 == (SEC_CODE | SEC_ALLOC)))
2064 return 1;
2065
2066 if (synthetic_relocatable)
2067 {
2068 if (a->section->id < b->section->id)
2069 return -1;
2070
2071 if (a->section->id > b->section->id)
2072 return 1;
2073 }
2074
2075 if (a->value + a->section->vma < b->value + b->section->vma)
2076 return -1;
2077
2078 if (a->value + a->section->vma > b->value + b->section->vma)
2079 return 1;
2080
2081 /* For syms with the same value, prefer strong dynamic global function
2082 syms over other syms. */
2083 if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
2084 return -1;
2085
2086 if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
2087 return 1;
2088
2089 if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
2090 return -1;
2091
2092 if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
2093 return 1;
2094
2095 if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
2096 return -1;
2097
2098 if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
2099 return 1;
2100
2101 if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
2102 return -1;
2103
2104 if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
2105 return 1;
2106
2107 /* Finally, sort on where the symbol is in memory. The symbols will
2108 be in at most two malloc'd blocks, one for static syms, one for
2109 dynamic syms, and we distinguish the two blocks above by testing
2110 BSF_DYNAMIC. Since we are sorting the symbol pointers which were
2111 originally in the same order as the symbols (and we're not
2112 sorting the symbols themselves), this ensures a stable sort. */
2113 if (a < b)
2114 return -1;
2115 if (a > b)
2116 return 1;
2117 return 0;
2118 }
2119
2120 /* Search SYMS for a symbol of the given VALUE. */
2121
2122 static asymbol *
2123 sym_exists_at (asymbol **syms, size_t lo, size_t hi, unsigned int id,
2124 bfd_vma value)
2125 {
2126 size_t mid;
2127
2128 if (id == (unsigned) -1)
2129 {
2130 while (lo < hi)
2131 {
2132 mid = (lo + hi) >> 1;
2133 if (syms[mid]->value + syms[mid]->section->vma < value)
2134 lo = mid + 1;
2135 else if (syms[mid]->value + syms[mid]->section->vma > value)
2136 hi = mid;
2137 else
2138 return syms[mid];
2139 }
2140 }
2141 else
2142 {
2143 while (lo < hi)
2144 {
2145 mid = (lo + hi) >> 1;
2146 if (syms[mid]->section->id < id)
2147 lo = mid + 1;
2148 else if (syms[mid]->section->id > id)
2149 hi = mid;
2150 else if (syms[mid]->value < value)
2151 lo = mid + 1;
2152 else if (syms[mid]->value > value)
2153 hi = mid;
2154 else
2155 return syms[mid];
2156 }
2157 }
2158 return NULL;
2159 }
2160
2161 static bfd_boolean
2162 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
2163 {
2164 bfd_vma vma = *(bfd_vma *) ptr;
2165 return ((section->flags & SEC_ALLOC) != 0
2166 && section->vma <= vma
2167 && vma < section->vma + section->size);
2168 }
2169
2170 /* Create synthetic symbols, effectively restoring "dot-symbol" function
2171 entry syms. Also generate @plt symbols for the glink branch table.
2172 Returns count of synthetic symbols in RET or -1 on error. */
2173
2174 static long
2175 ppc64_elf_get_synthetic_symtab (bfd *abfd,
2176 long static_count, asymbol **static_syms,
2177 long dyn_count, asymbol **dyn_syms,
2178 asymbol **ret)
2179 {
2180 asymbol *s;
2181 size_t i, j, count;
2182 char *names;
2183 size_t symcount, codesecsym, codesecsymend, secsymend, opdsymend;
2184 asection *opd = NULL;
2185 bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2186 asymbol **syms;
2187 int abi = abiversion (abfd);
2188
2189 *ret = NULL;
2190
2191 if (abi < 2)
2192 {
2193 opd = bfd_get_section_by_name (abfd, ".opd");
2194 if (opd == NULL && abi == 1)
2195 return 0;
2196 }
2197
2198 syms = NULL;
2199 codesecsym = 0;
2200 codesecsymend = 0;
2201 secsymend = 0;
2202 opdsymend = 0;
2203 symcount = 0;
2204 if (opd != NULL)
2205 {
2206 symcount = static_count;
2207 if (!relocatable)
2208 symcount += dyn_count;
2209 if (symcount == 0)
2210 return 0;
2211
2212 syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
2213 if (syms == NULL)
2214 return -1;
2215
2216 if (!relocatable && static_count != 0 && dyn_count != 0)
2217 {
2218 /* Use both symbol tables. */
2219 memcpy (syms, static_syms, static_count * sizeof (*syms));
2220 memcpy (syms + static_count, dyn_syms,
2221 (dyn_count + 1) * sizeof (*syms));
2222 }
2223 else if (!relocatable && static_count == 0)
2224 memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
2225 else
2226 memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
2227
2228 /* Trim uninteresting symbols. Interesting symbols are section,
2229 function, and notype symbols. */
2230 for (i = 0, j = 0; i < symcount; ++i)
2231 if ((syms[i]->flags & (BSF_FILE | BSF_OBJECT | BSF_THREAD_LOCAL
2232 | BSF_RELC | BSF_SRELC)) == 0)
2233 syms[j++] = syms[i];
2234 symcount = j;
2235
2236 synthetic_relocatable = relocatable;
2237 synthetic_opd = opd;
2238 qsort (syms, symcount, sizeof (*syms), compare_symbols);
2239
2240 if (!relocatable && symcount > 1)
2241 {
2242 /* Trim duplicate syms, since we may have merged the normal
2243 and dynamic symbols. Actually, we only care about syms
2244 that have different values, so trim any with the same
2245 value. Don't consider ifunc and ifunc resolver symbols
2246 duplicates however, because GDB wants to know whether a
2247 text symbol is an ifunc resolver. */
2248 for (i = 1, j = 1; i < symcount; ++i)
2249 {
2250 const asymbol *s0 = syms[i - 1];
2251 const asymbol *s1 = syms[i];
2252
2253 if ((s0->value + s0->section->vma
2254 != s1->value + s1->section->vma)
2255 || ((s0->flags & BSF_GNU_INDIRECT_FUNCTION)
2256 != (s1->flags & BSF_GNU_INDIRECT_FUNCTION)))
2257 syms[j++] = syms[i];
2258 }
2259 symcount = j;
2260 }
2261
2262 i = 0;
2263 /* Note that here and in compare_symbols we can't compare opd and
2264 sym->section directly. With separate debug info files, the
2265 symbols will be extracted from the debug file while abfd passed
2266 to this function is the real binary. */
2267 if (strcmp (syms[i]->section->name, ".opd") == 0)
2268 ++i;
2269 codesecsym = i;
2270
2271 for (; i < symcount; ++i)
2272 if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC
2273 | SEC_THREAD_LOCAL))
2274 != (SEC_CODE | SEC_ALLOC))
2275 || (syms[i]->flags & BSF_SECTION_SYM) == 0)
2276 break;
2277 codesecsymend = i;
2278
2279 for (; i < symcount; ++i)
2280 if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
2281 break;
2282 secsymend = i;
2283
2284 for (; i < symcount; ++i)
2285 if (strcmp (syms[i]->section->name, ".opd") != 0)
2286 break;
2287 opdsymend = i;
2288
2289 for (; i < symcount; ++i)
2290 if (((syms[i]->section->flags
2291 & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL)))
2292 != (SEC_CODE | SEC_ALLOC))
2293 break;
2294 symcount = i;
2295 }
2296 count = 0;
2297
2298 if (relocatable)
2299 {
2300 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2301 arelent *r;
2302 size_t size;
2303 size_t relcount;
2304
2305 if (opdsymend == secsymend)
2306 goto done;
2307
2308 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2309 relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
2310 if (relcount == 0)
2311 goto done;
2312
2313 if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
2314 {
2315 count = -1;
2316 goto done;
2317 }
2318
2319 size = 0;
2320 for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2321 {
2322 asymbol *sym;
2323
2324 while (r < opd->relocation + relcount
2325 && r->address < syms[i]->value + opd->vma)
2326 ++r;
2327
2328 if (r == opd->relocation + relcount)
2329 break;
2330
2331 if (r->address != syms[i]->value + opd->vma)
2332 continue;
2333
2334 if (r->howto->type != R_PPC64_ADDR64)
2335 continue;
2336
2337 sym = *r->sym_ptr_ptr;
2338 if (!sym_exists_at (syms, opdsymend, symcount,
2339 sym->section->id, sym->value + r->addend))
2340 {
2341 ++count;
2342 size += sizeof (asymbol);
2343 size += strlen (syms[i]->name) + 2;
2344 }
2345 }
2346
2347 if (size == 0)
2348 goto done;
2349 s = *ret = bfd_malloc (size);
2350 if (s == NULL)
2351 {
2352 count = -1;
2353 goto done;
2354 }
2355
2356 names = (char *) (s + count);
2357
2358 for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
2359 {
2360 asymbol *sym;
2361
2362 while (r < opd->relocation + relcount
2363 && r->address < syms[i]->value + opd->vma)
2364 ++r;
2365
2366 if (r == opd->relocation + relcount)
2367 break;
2368
2369 if (r->address != syms[i]->value + opd->vma)
2370 continue;
2371
2372 if (r->howto->type != R_PPC64_ADDR64)
2373 continue;
2374
2375 sym = *r->sym_ptr_ptr;
2376 if (!sym_exists_at (syms, opdsymend, symcount,
2377 sym->section->id, sym->value + r->addend))
2378 {
2379 size_t len;
2380
2381 *s = *syms[i];
2382 s->flags |= BSF_SYNTHETIC;
2383 s->section = sym->section;
2384 s->value = sym->value + r->addend;
2385 s->name = names;
2386 *names++ = '.';
2387 len = strlen (syms[i]->name);
2388 memcpy (names, syms[i]->name, len + 1);
2389 names += len + 1;
2390 /* Have udata.p point back to the original symbol this
2391 synthetic symbol was derived from. */
2392 s->udata.p = syms[i];
2393 s++;
2394 }
2395 }
2396 }
2397 else
2398 {
2399 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
2400 bfd_byte *contents = NULL;
2401 size_t size;
2402 size_t plt_count = 0;
2403 bfd_vma glink_vma = 0, resolv_vma = 0;
2404 asection *dynamic, *glink = NULL, *relplt = NULL;
2405 arelent *p;
2406
2407 if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
2408 {
2409 free_contents_and_exit_err:
2410 count = -1;
2411 free_contents_and_exit:
2412 if (contents)
2413 free (contents);
2414 goto done;
2415 }
2416
2417 size = 0;
2418 for (i = secsymend; i < opdsymend; ++i)
2419 {
2420 bfd_vma ent;
2421
2422 /* Ignore bogus symbols. */
2423 if (syms[i]->value > opd->size - 8)
2424 continue;
2425
2426 ent = bfd_get_64 (abfd, contents + syms[i]->value);
2427 if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2428 {
2429 ++count;
2430 size += sizeof (asymbol);
2431 size += strlen (syms[i]->name) + 2;
2432 }
2433 }
2434
2435 /* Get start of .glink stubs from DT_PPC64_GLINK. */
2436 if (dyn_count != 0
2437 && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
2438 {
2439 bfd_byte *dynbuf, *extdyn, *extdynend;
2440 size_t extdynsize;
2441 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
2442
2443 if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
2444 goto free_contents_and_exit_err;
2445
2446 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
2447 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
2448
2449 extdyn = dynbuf;
2450 extdynend = extdyn + dynamic->size;
2451 for (; extdyn < extdynend; extdyn += extdynsize)
2452 {
2453 Elf_Internal_Dyn dyn;
2454 (*swap_dyn_in) (abfd, extdyn, &dyn);
2455
2456 if (dyn.d_tag == DT_NULL)
2457 break;
2458
2459 if (dyn.d_tag == DT_PPC64_GLINK)
2460 {
2461 /* The first glink stub starts at DT_PPC64_GLINK plus 32.
2462 See comment in ppc64_elf_finish_dynamic_sections. */
2463 glink_vma = dyn.d_un.d_val + 8 * 4;
2464 /* The .glink section usually does not survive the final
2465 link; search for the section (usually .text) where the
2466 glink stubs now reside. */
2467 glink = bfd_sections_find_if (abfd, section_covers_vma,
2468 &glink_vma);
2469 break;
2470 }
2471 }
2472
2473 free (dynbuf);
2474 }
2475
2476 if (glink != NULL)
2477 {
2478 /* Determine __glink trampoline by reading the relative branch
2479 from the first glink stub. */
2480 bfd_byte buf[4];
2481 unsigned int off = 0;
2482
2483 while (bfd_get_section_contents (abfd, glink, buf,
2484 glink_vma + off - glink->vma, 4))
2485 {
2486 unsigned int insn = bfd_get_32 (abfd, buf);
2487 insn ^= B_DOT;
2488 if ((insn & ~0x3fffffc) == 0)
2489 {
2490 resolv_vma
2491 = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
2492 break;
2493 }
2494 off += 4;
2495 if (off > 4)
2496 break;
2497 }
2498
2499 if (resolv_vma)
2500 size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
2501
2502 relplt = bfd_get_section_by_name (abfd, ".rela.plt");
2503 if (relplt != NULL)
2504 {
2505 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
2506 if (!(*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
2507 goto free_contents_and_exit_err;
2508
2509 plt_count = relplt->size / sizeof (Elf64_External_Rela);
2510 size += plt_count * sizeof (asymbol);
2511
2512 p = relplt->relocation;
2513 for (i = 0; i < plt_count; i++, p++)
2514 {
2515 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
2516 if (p->addend != 0)
2517 size += sizeof ("+0x") - 1 + 16;
2518 }
2519 }
2520 }
2521
2522 if (size == 0)
2523 goto free_contents_and_exit;
2524 s = *ret = bfd_malloc (size);
2525 if (s == NULL)
2526 goto free_contents_and_exit_err;
2527
2528 names = (char *) (s + count + plt_count + (resolv_vma != 0));
2529
2530 for (i = secsymend; i < opdsymend; ++i)
2531 {
2532 bfd_vma ent;
2533
2534 if (syms[i]->value > opd->size - 8)
2535 continue;
2536
2537 ent = bfd_get_64 (abfd, contents + syms[i]->value);
2538 if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
2539 {
2540 size_t lo, hi;
2541 size_t len;
2542 asection *sec = abfd->sections;
2543
2544 *s = *syms[i];
2545 lo = codesecsym;
2546 hi = codesecsymend;
2547 while (lo < hi)
2548 {
2549 size_t mid = (lo + hi) >> 1;
2550 if (syms[mid]->section->vma < ent)
2551 lo = mid + 1;
2552 else if (syms[mid]->section->vma > ent)
2553 hi = mid;
2554 else
2555 {
2556 sec = syms[mid]->section;
2557 break;
2558 }
2559 }
2560
2561 if (lo >= hi && lo > codesecsym)
2562 sec = syms[lo - 1]->section;
2563
2564 for (; sec != NULL; sec = sec->next)
2565 {
2566 if (sec->vma > ent)
2567 break;
2568 /* SEC_LOAD may not be set if SEC is from a separate debug
2569 info file. */
2570 if ((sec->flags & SEC_ALLOC) == 0)
2571 break;
2572 if ((sec->flags & SEC_CODE) != 0)
2573 s->section = sec;
2574 }
2575 s->flags |= BSF_SYNTHETIC;
2576 s->value = ent - s->section->vma;
2577 s->name = names;
2578 *names++ = '.';
2579 len = strlen (syms[i]->name);
2580 memcpy (names, syms[i]->name, len + 1);
2581 names += len + 1;
2582 /* Have udata.p point back to the original symbol this
2583 synthetic symbol was derived from. */
2584 s->udata.p = syms[i];
2585 s++;
2586 }
2587 }
2588 free (contents);
2589
2590 if (glink != NULL && relplt != NULL)
2591 {
2592 if (resolv_vma)
2593 {
2594 /* Add a symbol for the main glink trampoline. */
2595 memset (s, 0, sizeof *s);
2596 s->the_bfd = abfd;
2597 s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
2598 s->section = glink;
2599 s->value = resolv_vma - glink->vma;
2600 s->name = names;
2601 memcpy (names, "__glink_PLTresolve",
2602 sizeof ("__glink_PLTresolve"));
2603 names += sizeof ("__glink_PLTresolve");
2604 s++;
2605 count++;
2606 }
2607
2608 /* FIXME: It would be very much nicer to put sym@plt on the
2609 stub rather than on the glink branch table entry. The
2610 objdump disassembler would then use a sensible symbol
2611 name on plt calls. The difficulty in doing so is
2612 a) finding the stubs, and,
2613 b) matching stubs against plt entries, and,
2614 c) there can be multiple stubs for a given plt entry.
2615
2616 Solving (a) could be done by code scanning, but older
2617 ppc64 binaries used different stubs to current code.
2618 (b) is the tricky one since you need to known the toc
2619 pointer for at least one function that uses a pic stub to
2620 be able to calculate the plt address referenced.
2621 (c) means gdb would need to set multiple breakpoints (or
2622 find the glink branch itself) when setting breakpoints
2623 for pending shared library loads. */
2624 p = relplt->relocation;
2625 for (i = 0; i < plt_count; i++, p++)
2626 {
2627 size_t len;
2628
2629 *s = **p->sym_ptr_ptr;
2630 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
2631 we are defining a symbol, ensure one of them is set. */
2632 if ((s->flags & BSF_LOCAL) == 0)
2633 s->flags |= BSF_GLOBAL;
2634 s->flags |= BSF_SYNTHETIC;
2635 s->section = glink;
2636 s->value = glink_vma - glink->vma;
2637 s->name = names;
2638 s->udata.p = NULL;
2639 len = strlen ((*p->sym_ptr_ptr)->name);
2640 memcpy (names, (*p->sym_ptr_ptr)->name, len);
2641 names += len;
2642 if (p->addend != 0)
2643 {
2644 memcpy (names, "+0x", sizeof ("+0x") - 1);
2645 names += sizeof ("+0x") - 1;
2646 bfd_sprintf_vma (abfd, names, p->addend);
2647 names += strlen (names);
2648 }
2649 memcpy (names, "@plt", sizeof ("@plt"));
2650 names += sizeof ("@plt");
2651 s++;
2652 if (abi < 2)
2653 {
2654 glink_vma += 8;
2655 if (i >= 0x8000)
2656 glink_vma += 4;
2657 }
2658 else
2659 glink_vma += 4;
2660 }
2661 count += plt_count;
2662 }
2663 }
2664
2665 done:
2666 free (syms);
2667 return count;
2668 }
2669 \f
2670 /* The following functions are specific to the ELF linker, while
2671 functions above are used generally. Those named ppc64_elf_* are
2672 called by the main ELF linker code. They appear in this file more
2673 or less in the order in which they are called. eg.
2674 ppc64_elf_check_relocs is called early in the link process,
2675 ppc64_elf_finish_dynamic_sections is one of the last functions
2676 called.
2677
2678 PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
2679 functions have both a function code symbol and a function descriptor
2680 symbol. A call to foo in a relocatable object file looks like:
2681
2682 . .text
2683 . x:
2684 . bl .foo
2685 . nop
2686
2687 The function definition in another object file might be:
2688
2689 . .section .opd
2690 . foo: .quad .foo
2691 . .quad .TOC.@tocbase
2692 . .quad 0
2693 .
2694 . .text
2695 . .foo: blr
2696
2697 When the linker resolves the call during a static link, the branch
2698 unsurprisingly just goes to .foo and the .opd information is unused.
2699 If the function definition is in a shared library, things are a little
2700 different: The call goes via a plt call stub, the opd information gets
2701 copied to the plt, and the linker patches the nop.
2702
2703 . x:
2704 . bl .foo_stub
2705 . ld 2,40(1)
2706 .
2707 .
2708 . .foo_stub:
2709 . std 2,40(1) # in practice, the call stub
2710 . addis 11,2,Lfoo@toc@ha # is slightly optimized, but
2711 . addi 11,11,Lfoo@toc@l # this is the general idea
2712 . ld 12,0(11)
2713 . ld 2,8(11)
2714 . mtctr 12
2715 . ld 11,16(11)
2716 . bctr
2717 .
2718 . .section .plt
2719 . Lfoo: reloc (R_PPC64_JMP_SLOT, foo)
2720
2721 The "reloc ()" notation is supposed to indicate that the linker emits
2722 an R_PPC64_JMP_SLOT reloc against foo. The dynamic linker does the opd
2723 copying.
2724
2725 What are the difficulties here? Well, firstly, the relocations
2726 examined by the linker in check_relocs are against the function code
2727 sym .foo, while the dynamic relocation in the plt is emitted against
2728 the function descriptor symbol, foo. Somewhere along the line, we need
2729 to carefully copy dynamic link information from one symbol to the other.
2730 Secondly, the generic part of the elf linker will make .foo a dynamic
2731 symbol as is normal for most other backends. We need foo dynamic
2732 instead, at least for an application final link. However, when
2733 creating a shared library containing foo, we need to have both symbols
2734 dynamic so that references to .foo are satisfied during the early
2735 stages of linking. Otherwise the linker might decide to pull in a
2736 definition from some other object, eg. a static library.
2737
2738 Update: As of August 2004, we support a new convention. Function
2739 calls may use the function descriptor symbol, ie. "bl foo". This
2740 behaves exactly as "bl .foo". */
2741
2742 /* Of those relocs that might be copied as dynamic relocs, this
2743 function selects those that must be copied when linking a shared
2744 library or PIE, even when the symbol is local. */
2745
2746 static int
2747 must_be_dyn_reloc (struct bfd_link_info *info,
2748 enum elf_ppc64_reloc_type r_type)
2749 {
2750 switch (r_type)
2751 {
2752 default:
2753 /* Only relative relocs can be resolved when the object load
2754 address isn't fixed. DTPREL64 is excluded because the
2755 dynamic linker needs to differentiate global dynamic from
2756 local dynamic __tls_index pairs when PPC64_OPT_TLS is set. */
2757 return 1;
2758
2759 case R_PPC64_REL32:
2760 case R_PPC64_REL64:
2761 case R_PPC64_REL30:
2762 case R_PPC64_TOC16:
2763 case R_PPC64_TOC16_DS:
2764 case R_PPC64_TOC16_LO:
2765 case R_PPC64_TOC16_HI:
2766 case R_PPC64_TOC16_HA:
2767 case R_PPC64_TOC16_LO_DS:
2768 return 0;
2769
2770 case R_PPC64_TPREL16:
2771 case R_PPC64_TPREL16_LO:
2772 case R_PPC64_TPREL16_HI:
2773 case R_PPC64_TPREL16_HA:
2774 case R_PPC64_TPREL16_DS:
2775 case R_PPC64_TPREL16_LO_DS:
2776 case R_PPC64_TPREL16_HIGH:
2777 case R_PPC64_TPREL16_HIGHA:
2778 case R_PPC64_TPREL16_HIGHER:
2779 case R_PPC64_TPREL16_HIGHERA:
2780 case R_PPC64_TPREL16_HIGHEST:
2781 case R_PPC64_TPREL16_HIGHESTA:
2782 case R_PPC64_TPREL64:
2783 case R_PPC64_TPREL34:
2784 /* These relocations are relative but in a shared library the
2785 linker doesn't know the thread pointer base. */
2786 return bfd_link_dll (info);
2787 }
2788 }
2789
2790 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
2791 copying dynamic variables from a shared lib into an app's .dynbss
2792 section, and instead use a dynamic relocation to point into the
2793 shared lib. With code that gcc generates it is vital that this be
2794 enabled; In the PowerPC64 ELFv1 ABI the address of a function is
2795 actually the address of a function descriptor which resides in the
2796 .opd section. gcc uses the descriptor directly rather than going
2797 via the GOT as some other ABIs do, which means that initialized
2798 function pointers reference the descriptor. Thus, a function
2799 pointer initialized to the address of a function in a shared
2800 library will either require a .dynbss copy and a copy reloc, or a
2801 dynamic reloc. Using a .dynbss copy redefines the function
2802 descriptor symbol to point to the copy. This presents a problem as
2803 a PLT entry for that function is also initialized from the function
2804 descriptor symbol and the copy may not be initialized first. */
2805 #define ELIMINATE_COPY_RELOCS 1
2806
2807 /* Section name for stubs is the associated section name plus this
2808 string. */
2809 #define STUB_SUFFIX ".stub"
2810
2811 /* Linker stubs.
2812 ppc_stub_long_branch:
2813 Used when a 14 bit branch (or even a 24 bit branch) can't reach its
2814 destination, but a 24 bit branch in a stub section will reach.
2815 . b dest
2816
2817 ppc_stub_plt_branch:
2818 Similar to the above, but a 24 bit branch in the stub section won't
2819 reach its destination.
2820 . addis %r11,%r2,xxx@toc@ha
2821 . ld %r12,xxx@toc@l(%r11)
2822 . mtctr %r12
2823 . bctr
2824
2825 ppc_stub_plt_call:
2826 Used to call a function in a shared library. If it so happens that
2827 the plt entry referenced crosses a 64k boundary, then an extra
2828 "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
2829 ppc_stub_plt_call_r2save starts with "std %r2,40(%r1)".
2830 . addis %r11,%r2,xxx@toc@ha
2831 . ld %r12,xxx+0@toc@l(%r11)
2832 . mtctr %r12
2833 . ld %r2,xxx+8@toc@l(%r11)
2834 . ld %r11,xxx+16@toc@l(%r11)
2835 . bctr
2836
2837 ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
2838 code to adjust the value and save r2 to support multiple toc sections.
2839 A ppc_stub_long_branch with an r2 offset looks like:
2840 . std %r2,40(%r1)
2841 . addis %r2,%r2,off@ha
2842 . addi %r2,%r2,off@l
2843 . b dest
2844
2845 A ppc_stub_plt_branch with an r2 offset looks like:
2846 . std %r2,40(%r1)
2847 . addis %r11,%r2,xxx@toc@ha
2848 . ld %r12,xxx@toc@l(%r11)
2849 . addis %r2,%r2,off@ha
2850 . addi %r2,%r2,off@l
2851 . mtctr %r12
2852 . bctr
2853
2854 All of the above stubs are shown as their ELFv1 variants. ELFv2
2855 variants exist too, simpler for plt calls since a new toc pointer
2856 and static chain are not loaded by the stub. In addition, ELFv2
2857 has some more complex stubs to handle calls marked with NOTOC
2858 relocs from functions where r2 is not a valid toc pointer. These
2859 come in two flavours, the ones shown below, and _both variants that
2860 start with "std %r2,24(%r1)" to save r2 in the unlikely event that
2861 one call is from a function where r2 is used as the toc pointer but
2862 needs a toc adjusting stub for small-model multi-toc, and another
2863 call is from a function where r2 is not valid.
2864 ppc_stub_long_branch_notoc:
2865 . mflr %r12
2866 . bcl 20,31,1f
2867 . 1:
2868 . mflr %r11
2869 . mtlr %r12
2870 . addis %r12,%r11,dest-1b@ha
2871 . addi %r12,%r12,dest-1b@l
2872 . b dest
2873
2874 ppc_stub_plt_branch_notoc:
2875 . mflr %r12
2876 . bcl 20,31,1f
2877 . 1:
2878 . mflr %r11
2879 . mtlr %r12
2880 . lis %r12,xxx-1b@highest
2881 . ori %r12,%r12,xxx-1b@higher
2882 . sldi %r12,%r12,32
2883 . oris %r12,%r12,xxx-1b@high
2884 . ori %r12,%r12,xxx-1b@l
2885 . add %r12,%r11,%r12
2886 . mtctr %r12
2887 . bctr
2888
2889 ppc_stub_plt_call_notoc:
2890 . mflr %r12
2891 . bcl 20,31,1f
2892 . 1:
2893 . mflr %r11
2894 . mtlr %r12
2895 . lis %r12,xxx-1b@highest
2896 . ori %r12,%r12,xxx-1b@higher
2897 . sldi %r12,%r12,32
2898 . oris %r12,%r12,xxx-1b@high
2899 . ori %r12,%r12,xxx-1b@l
2900 . ldx %r12,%r11,%r12
2901 . mtctr %r12
2902 . bctr
2903
2904 There are also ELFv1 powerxx variants of these stubs.
2905 ppc_stub_long_branch_notoc:
2906 . pla %r12,dest@pcrel
2907 . b dest
2908 ppc_stub_plt_branch_notoc:
2909 . lis %r11,(dest-1f)@highesta34
2910 . ori %r11,%r11,(dest-1f)@highera34
2911 . sldi %r11,%r11,34
2912 . 1: pla %r12,dest@pcrel
2913 . add %r12,%r11,%r12
2914 . mtctr %r12
2915 . bctr
2916 ppc_stub_plt_call_notoc:
2917 . lis %r11,(xxx-1f)@highesta34
2918 . ori %r11,%r11,(xxx-1f)@highera34
2919 . sldi %r11,%r11,34
2920 . 1: pla %r12,xxx@pcrel
2921 . ldx %r12,%r11,%r12
2922 . mtctr %r12
2923 . bctr
2924
2925 In cases where the high instructions would add zero, they are
2926 omitted and following instructions modified in some cases.
2927 For example, a powerxx ppc_stub_plt_call_notoc might simplify down
2928 to
2929 . pld %r12,xxx@pcrel
2930 . mtctr %r12
2931 . bctr
2932
2933 For a given stub group (a set of sections all using the same toc
2934 pointer value) there will be just one stub type used for any
2935 particular function symbol. For example, if printf is called from
2936 code with the tocsave optimization (ie. r2 saved in function
2937 prologue) and therefore calls use a ppc_stub_plt_call linkage stub,
2938 and from other code without the tocsave optimization requiring a
2939 ppc_stub_plt_call_r2save linkage stub, a single stub of the latter
2940 type will be created. Calls with the tocsave optimization will
2941 enter this stub after the instruction saving r2. A similar
2942 situation exists when calls are marked with R_PPC64_REL24_NOTOC
2943 relocations. These require a ppc_stub_plt_call_notoc linkage stub
2944 to call an external function like printf. If other calls to printf
2945 require a ppc_stub_plt_call linkage stub then a single
2946 ppc_stub_plt_call_notoc linkage stub will be used for both types of
2947 call. If other calls to printf require a ppc_stub_plt_call_r2save
2948 linkage stub then a single ppc_stub_plt_call_both linkage stub will
2949 be created and calls not requiring r2 to be saved will enter the
2950 stub after the r2 save instruction. There is an analogous
2951 hierarchy of long branch and plt branch stubs for local call
2952 linkage. */
2953
2954 enum ppc_stub_type
2955 {
2956 ppc_stub_none,
2957 ppc_stub_long_branch,
2958 ppc_stub_long_branch_r2off,
2959 ppc_stub_long_branch_notoc,
2960 ppc_stub_long_branch_both, /* r2off and notoc variants both needed. */
2961 ppc_stub_plt_branch,
2962 ppc_stub_plt_branch_r2off,
2963 ppc_stub_plt_branch_notoc,
2964 ppc_stub_plt_branch_both,
2965 ppc_stub_plt_call,
2966 ppc_stub_plt_call_r2save,
2967 ppc_stub_plt_call_notoc,
2968 ppc_stub_plt_call_both,
2969 ppc_stub_global_entry,
2970 ppc_stub_save_res
2971 };
2972
2973 /* Information on stub grouping. */
2974 struct map_stub
2975 {
2976 /* The stub section. */
2977 asection *stub_sec;
2978 /* This is the section to which stubs in the group will be attached. */
2979 asection *link_sec;
2980 /* Next group. */
2981 struct map_stub *next;
2982 /* Whether to emit a copy of register save/restore functions in this
2983 group. */
2984 int needs_save_res;
2985 /* Current offset within stubs after the insn restoring lr in a
2986 _notoc or _both stub using bcl for pc-relative addressing, or
2987 after the insn restoring lr in a __tls_get_addr_opt plt stub. */
2988 unsigned int lr_restore;
2989 /* Accumulated size of EH info emitted to describe return address
2990 if stubs modify lr. Does not include 17 byte FDE header. */
2991 unsigned int eh_size;
2992 /* Offset in glink_eh_frame to the start of EH info for this group. */
2993 unsigned int eh_base;
2994 };
2995
2996 struct ppc_stub_hash_entry
2997 {
2998 /* Base hash table entry structure. */
2999 struct bfd_hash_entry root;
3000
3001 enum ppc_stub_type stub_type;
3002
3003 /* Group information. */
3004 struct map_stub *group;
3005
3006 /* Offset within stub_sec of the beginning of this stub. */
3007 bfd_vma stub_offset;
3008
3009 /* Given the symbol's value and its section we can determine its final
3010 value when building the stubs (so the stub knows where to jump. */
3011 bfd_vma target_value;
3012 asection *target_section;
3013
3014 /* The symbol table entry, if any, that this was derived from. */
3015 struct ppc_link_hash_entry *h;
3016 struct plt_entry *plt_ent;
3017
3018 /* Symbol type. */
3019 unsigned char symtype;
3020
3021 /* Symbol st_other. */
3022 unsigned char other;
3023 };
3024
3025 struct ppc_branch_hash_entry
3026 {
3027 /* Base hash table entry structure. */
3028 struct bfd_hash_entry root;
3029
3030 /* Offset within branch lookup table. */
3031 unsigned int offset;
3032
3033 /* Generation marker. */
3034 unsigned int iter;
3035 };
3036
3037 /* Used to track dynamic relocations for local symbols. */
3038 struct ppc_dyn_relocs
3039 {
3040 struct ppc_dyn_relocs *next;
3041
3042 /* The input section of the reloc. */
3043 asection *sec;
3044
3045 /* Total number of relocs copied for the input section. */
3046 unsigned int count : 31;
3047
3048 /* Whether this entry is for STT_GNU_IFUNC symbols. */
3049 unsigned int ifunc : 1;
3050 };
3051
3052 struct ppc_link_hash_entry
3053 {
3054 struct elf_link_hash_entry elf;
3055
3056 union
3057 {
3058 /* A pointer to the most recently used stub hash entry against this
3059 symbol. */
3060 struct ppc_stub_hash_entry *stub_cache;
3061
3062 /* A pointer to the next symbol starting with a '.' */
3063 struct ppc_link_hash_entry *next_dot_sym;
3064 } u;
3065
3066 /* Track dynamic relocs copied for this symbol. */
3067 struct elf_dyn_relocs *dyn_relocs;
3068
3069 /* Link between function code and descriptor symbols. */
3070 struct ppc_link_hash_entry *oh;
3071
3072 /* Flag function code and descriptor symbols. */
3073 unsigned int is_func:1;
3074 unsigned int is_func_descriptor:1;
3075 unsigned int fake:1;
3076
3077 /* Whether global opd/toc sym has been adjusted or not.
3078 After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3079 should be set for all globals defined in any opd/toc section. */
3080 unsigned int adjust_done:1;
3081
3082 /* Set if this is an out-of-line register save/restore function,
3083 with non-standard calling convention. */
3084 unsigned int save_res:1;
3085
3086 /* Set if a duplicate symbol with non-zero localentry is detected,
3087 even when the duplicate symbol does not provide a definition. */
3088 unsigned int non_zero_localentry:1;
3089
3090 /* Contexts in which symbol is used in the GOT (or TOC).
3091 Bits are or'd into the mask as the corresponding relocs are
3092 encountered during check_relocs, with TLS_TLS being set when any
3093 of the other TLS bits are set. tls_optimize clears bits when
3094 optimizing to indicate the corresponding GOT entry type is not
3095 needed. If set, TLS_TLS is never cleared. tls_optimize may also
3096 set TLS_GDIE when a GD reloc turns into an IE one.
3097 These flags are also kept for local symbols. */
3098 #define TLS_TLS 1 /* Any TLS reloc. */
3099 #define TLS_GD 2 /* GD reloc. */
3100 #define TLS_LD 4 /* LD reloc. */
3101 #define TLS_TPREL 8 /* TPREL reloc, => IE. */
3102 #define TLS_DTPREL 16 /* DTPREL reloc, => LD. */
3103 #define TLS_MARK 32 /* __tls_get_addr call marked. */
3104 #define TLS_GDIE 64 /* GOT TPREL reloc resulting from GD->IE. */
3105 #define TLS_EXPLICIT 256 /* TOC section TLS reloc, not stored. */
3106 unsigned char tls_mask;
3107
3108 /* The above field is also used to mark function symbols. In which
3109 case TLS_TLS will be 0. */
3110 #define PLT_IFUNC 2 /* STT_GNU_IFUNC. */
3111 #define PLT_KEEP 4 /* inline plt call requires plt entry. */
3112 #define NON_GOT 256 /* local symbol plt, not stored. */
3113 };
3114
3115 static inline struct ppc_link_hash_entry *
3116 ppc_elf_hash_entry (struct elf_link_hash_entry *ent)
3117 {
3118 return (struct ppc_link_hash_entry *) ent;
3119 }
3120
3121 /* ppc64 ELF linker hash table. */
3122
3123 struct ppc_link_hash_table
3124 {
3125 struct elf_link_hash_table elf;
3126
3127 /* The stub hash table. */
3128 struct bfd_hash_table stub_hash_table;
3129
3130 /* Another hash table for plt_branch stubs. */
3131 struct bfd_hash_table branch_hash_table;
3132
3133 /* Hash table for function prologue tocsave. */
3134 htab_t tocsave_htab;
3135
3136 /* Various options and other info passed from the linker. */
3137 struct ppc64_elf_params *params;
3138
3139 /* The size of sec_info below. */
3140 unsigned int sec_info_arr_size;
3141
3142 /* Per-section array of extra section info. Done this way rather
3143 than as part of ppc64_elf_section_data so we have the info for
3144 non-ppc64 sections. */
3145 struct
3146 {
3147 /* Along with elf_gp, specifies the TOC pointer used by this section. */
3148 bfd_vma toc_off;
3149
3150 union
3151 {
3152 /* The section group that this section belongs to. */
3153 struct map_stub *group;
3154 /* A temp section list pointer. */
3155 asection *list;
3156 } u;
3157 } *sec_info;
3158
3159 /* Linked list of groups. */
3160 struct map_stub *group;
3161
3162 /* Temp used when calculating TOC pointers. */
3163 bfd_vma toc_curr;
3164 bfd *toc_bfd;
3165 asection *toc_first_sec;
3166
3167 /* Used when adding symbols. */
3168 struct ppc_link_hash_entry *dot_syms;
3169
3170 /* Shortcuts to get to dynamic linker sections. */
3171 asection *glink;
3172 asection *global_entry;
3173 asection *sfpr;
3174 asection *pltlocal;
3175 asection *relpltlocal;
3176 asection *brlt;
3177 asection *relbrlt;
3178 asection *glink_eh_frame;
3179
3180 /* Shortcut to .__tls_get_addr and __tls_get_addr. */
3181 struct ppc_link_hash_entry *tls_get_addr;
3182 struct ppc_link_hash_entry *tls_get_addr_fd;
3183
3184 /* The size of reliplt used by got entry relocs. */
3185 bfd_size_type got_reli_size;
3186
3187 /* Statistics. */
3188 unsigned long stub_count[ppc_stub_global_entry];
3189
3190 /* Number of stubs against global syms. */
3191 unsigned long stub_globals;
3192
3193 /* Set if we're linking code with function descriptors. */
3194 unsigned int opd_abi:1;
3195
3196 /* Support for multiple toc sections. */
3197 unsigned int do_multi_toc:1;
3198 unsigned int multi_toc_needed:1;
3199 unsigned int second_toc_pass:1;
3200 unsigned int do_toc_opt:1;
3201
3202 /* Set if tls optimization is enabled. */
3203 unsigned int do_tls_opt:1;
3204
3205 /* Set if inline plt calls should be converted to direct calls. */
3206 unsigned int can_convert_all_inline_plt:1;
3207
3208 /* Set on error. */
3209 unsigned int stub_error:1;
3210
3211 /* Whether func_desc_adjust needs to be run over symbols. */
3212 unsigned int need_func_desc_adj:1;
3213
3214 /* Whether there exist local gnu indirect function resolvers,
3215 referenced by dynamic relocations. */
3216 unsigned int local_ifunc_resolver:1;
3217 unsigned int maybe_local_ifunc_resolver:1;
3218
3219 /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized. */
3220 unsigned int has_plt_localentry0:1;
3221
3222 /* Whether calls are made via the PLT from NOTOC functions. */
3223 unsigned int notoc_plt:1;
3224
3225 /* Whether to use powerxx instructions in linkage stubs. */
3226 unsigned int powerxx_stubs:1;
3227
3228 /* Incremented every time we size stubs. */
3229 unsigned int stub_iteration;
3230
3231 /* Small local sym cache. */
3232 struct sym_cache sym_cache;
3233 };
3234
3235 /* Rename some of the generic section flags to better document how they
3236 are used here. */
3237
3238 /* Nonzero if this section has TLS related relocations. */
3239 #define has_tls_reloc sec_flg0
3240
3241 /* Nonzero if this section has a call to __tls_get_addr lacking marker
3242 relocations. */
3243 #define nomark_tls_get_addr sec_flg1
3244
3245 /* Nonzero if this section has any toc or got relocs. */
3246 #define has_toc_reloc sec_flg2
3247
3248 /* Nonzero if this section has a call to another section that uses
3249 the toc or got. */
3250 #define makes_toc_func_call sec_flg3
3251
3252 /* Recursion protection when determining above flag. */
3253 #define call_check_in_progress sec_flg4
3254 #define call_check_done sec_flg5
3255
3256 /* Get the ppc64 ELF linker hash table from a link_info structure. */
3257
3258 #define ppc_hash_table(p) \
3259 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3260 == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3261
3262 #define ppc_stub_hash_lookup(table, string, create, copy) \
3263 ((struct ppc_stub_hash_entry *) \
3264 bfd_hash_lookup ((table), (string), (create), (copy)))
3265
3266 #define ppc_branch_hash_lookup(table, string, create, copy) \
3267 ((struct ppc_branch_hash_entry *) \
3268 bfd_hash_lookup ((table), (string), (create), (copy)))
3269
3270 /* Create an entry in the stub hash table. */
3271
3272 static struct bfd_hash_entry *
3273 stub_hash_newfunc (struct bfd_hash_entry *entry,
3274 struct bfd_hash_table *table,
3275 const char *string)
3276 {
3277 /* Allocate the structure if it has not already been allocated by a
3278 subclass. */
3279 if (entry == NULL)
3280 {
3281 entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3282 if (entry == NULL)
3283 return entry;
3284 }
3285
3286 /* Call the allocation method of the superclass. */
3287 entry = bfd_hash_newfunc (entry, table, string);
3288 if (entry != NULL)
3289 {
3290 struct ppc_stub_hash_entry *eh;
3291
3292 /* Initialize the local fields. */
3293 eh = (struct ppc_stub_hash_entry *) entry;
3294 eh->stub_type = ppc_stub_none;
3295 eh->group = NULL;
3296 eh->stub_offset = 0;
3297 eh->target_value = 0;
3298 eh->target_section = NULL;
3299 eh->h = NULL;
3300 eh->plt_ent = NULL;
3301 eh->other = 0;
3302 }
3303
3304 return entry;
3305 }
3306
3307 /* Create an entry in the branch hash table. */
3308
3309 static struct bfd_hash_entry *
3310 branch_hash_newfunc (struct bfd_hash_entry *entry,
3311 struct bfd_hash_table *table,
3312 const char *string)
3313 {
3314 /* Allocate the structure if it has not already been allocated by a
3315 subclass. */
3316 if (entry == NULL)
3317 {
3318 entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
3319 if (entry == NULL)
3320 return entry;
3321 }
3322
3323 /* Call the allocation method of the superclass. */
3324 entry = bfd_hash_newfunc (entry, table, string);
3325 if (entry != NULL)
3326 {
3327 struct ppc_branch_hash_entry *eh;
3328
3329 /* Initialize the local fields. */
3330 eh = (struct ppc_branch_hash_entry *) entry;
3331 eh->offset = 0;
3332 eh->iter = 0;
3333 }
3334
3335 return entry;
3336 }
3337
3338 /* Create an entry in a ppc64 ELF linker hash table. */
3339
3340 static struct bfd_hash_entry *
3341 link_hash_newfunc (struct bfd_hash_entry *entry,
3342 struct bfd_hash_table *table,
3343 const char *string)
3344 {
3345 /* Allocate the structure if it has not already been allocated by a
3346 subclass. */
3347 if (entry == NULL)
3348 {
3349 entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
3350 if (entry == NULL)
3351 return entry;
3352 }
3353
3354 /* Call the allocation method of the superclass. */
3355 entry = _bfd_elf_link_hash_newfunc (entry, table, string);
3356 if (entry != NULL)
3357 {
3358 struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
3359
3360 memset (&eh->u.stub_cache, 0,
3361 (sizeof (struct ppc_link_hash_entry)
3362 - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
3363
3364 /* When making function calls, old ABI code references function entry
3365 points (dot symbols), while new ABI code references the function
3366 descriptor symbol. We need to make any combination of reference and
3367 definition work together, without breaking archive linking.
3368
3369 For a defined function "foo" and an undefined call to "bar":
3370 An old object defines "foo" and ".foo", references ".bar" (possibly
3371 "bar" too).
3372 A new object defines "foo" and references "bar".
3373
3374 A new object thus has no problem with its undefined symbols being
3375 satisfied by definitions in an old object. On the other hand, the
3376 old object won't have ".bar" satisfied by a new object.
3377
3378 Keep a list of newly added dot-symbols. */
3379
3380 if (string[0] == '.')
3381 {
3382 struct ppc_link_hash_table *htab;
3383
3384 htab = (struct ppc_link_hash_table *) table;
3385 eh->u.next_dot_sym = htab->dot_syms;
3386 htab->dot_syms = eh;
3387 }
3388 }
3389
3390 return entry;
3391 }
3392
3393 struct tocsave_entry
3394 {
3395 asection *sec;
3396 bfd_vma offset;
3397 };
3398
3399 static hashval_t
3400 tocsave_htab_hash (const void *p)
3401 {
3402 const struct tocsave_entry *e = (const struct tocsave_entry *) p;
3403 return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
3404 }
3405
3406 static int
3407 tocsave_htab_eq (const void *p1, const void *p2)
3408 {
3409 const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
3410 const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
3411 return e1->sec == e2->sec && e1->offset == e2->offset;
3412 }
3413
3414 /* Destroy a ppc64 ELF linker hash table. */
3415
3416 static void
3417 ppc64_elf_link_hash_table_free (bfd *obfd)
3418 {
3419 struct ppc_link_hash_table *htab;
3420
3421 htab = (struct ppc_link_hash_table *) obfd->link.hash;
3422 if (htab->tocsave_htab)
3423 htab_delete (htab->tocsave_htab);
3424 bfd_hash_table_free (&htab->branch_hash_table);
3425 bfd_hash_table_free (&htab->stub_hash_table);
3426 _bfd_elf_link_hash_table_free (obfd);
3427 }
3428
3429 /* Create a ppc64 ELF linker hash table. */
3430
3431 static struct bfd_link_hash_table *
3432 ppc64_elf_link_hash_table_create (bfd *abfd)
3433 {
3434 struct ppc_link_hash_table *htab;
3435 bfd_size_type amt = sizeof (struct ppc_link_hash_table);
3436
3437 htab = bfd_zmalloc (amt);
3438 if (htab == NULL)
3439 return NULL;
3440
3441 if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
3442 sizeof (struct ppc_link_hash_entry),
3443 PPC64_ELF_DATA))
3444 {
3445 free (htab);
3446 return NULL;
3447 }
3448
3449 /* Init the stub hash table too. */
3450 if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
3451 sizeof (struct ppc_stub_hash_entry)))
3452 {
3453 _bfd_elf_link_hash_table_free (abfd);
3454 return NULL;
3455 }
3456
3457 /* And the branch hash table. */
3458 if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
3459 sizeof (struct ppc_branch_hash_entry)))
3460 {
3461 bfd_hash_table_free (&htab->stub_hash_table);
3462 _bfd_elf_link_hash_table_free (abfd);
3463 return NULL;
3464 }
3465
3466 htab->tocsave_htab = htab_try_create (1024,
3467 tocsave_htab_hash,
3468 tocsave_htab_eq,
3469 NULL);
3470 if (htab->tocsave_htab == NULL)
3471 {
3472 ppc64_elf_link_hash_table_free (abfd);
3473 return NULL;
3474 }
3475 htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
3476
3477 /* Initializing two fields of the union is just cosmetic. We really
3478 only care about glist, but when compiled on a 32-bit host the
3479 bfd_vma fields are larger. Setting the bfd_vma to zero makes
3480 debugger inspection of these fields look nicer. */
3481 htab->elf.init_got_refcount.refcount = 0;
3482 htab->elf.init_got_refcount.glist = NULL;
3483 htab->elf.init_plt_refcount.refcount = 0;
3484 htab->elf.init_plt_refcount.glist = NULL;
3485 htab->elf.init_got_offset.offset = 0;
3486 htab->elf.init_got_offset.glist = NULL;
3487 htab->elf.init_plt_offset.offset = 0;
3488 htab->elf.init_plt_offset.glist = NULL;
3489
3490 return &htab->elf.root;
3491 }
3492
3493 /* Create sections for linker generated code. */
3494
3495 static bfd_boolean
3496 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
3497 {
3498 struct ppc_link_hash_table *htab;
3499 flagword flags;
3500
3501 htab = ppc_hash_table (info);
3502
3503 flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
3504 | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3505 if (htab->params->save_restore_funcs)
3506 {
3507 /* Create .sfpr for code to save and restore fp regs. */
3508 htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
3509 flags);
3510 if (htab->sfpr == NULL
3511 || !bfd_set_section_alignment (htab->sfpr, 2))
3512 return FALSE;
3513 }
3514
3515 if (bfd_link_relocatable (info))
3516 return TRUE;
3517
3518 /* Create .glink for lazy dynamic linking support. */
3519 htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3520 flags);
3521 if (htab->glink == NULL
3522 || !bfd_set_section_alignment (htab->glink, 3))
3523 return FALSE;
3524
3525 /* The part of .glink used by global entry stubs, separate so that
3526 it can be aligned appropriately without affecting htab->glink. */
3527 htab->global_entry = bfd_make_section_anyway_with_flags (dynobj, ".glink",
3528 flags);
3529 if (htab->global_entry == NULL
3530 || !bfd_set_section_alignment (htab->global_entry, 2))
3531 return FALSE;
3532
3533 if (!info->no_ld_generated_unwind_info)
3534 {
3535 flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
3536 | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3537 htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
3538 ".eh_frame",
3539 flags);
3540 if (htab->glink_eh_frame == NULL
3541 || !bfd_set_section_alignment (htab->glink_eh_frame, 2))
3542 return FALSE;
3543 }
3544
3545 flags = SEC_ALLOC | SEC_LINKER_CREATED;
3546 htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
3547 if (htab->elf.iplt == NULL
3548 || !bfd_set_section_alignment (htab->elf.iplt, 3))
3549 return FALSE;
3550
3551 flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3552 | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3553 htab->elf.irelplt
3554 = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
3555 if (htab->elf.irelplt == NULL
3556 || !bfd_set_section_alignment (htab->elf.irelplt, 3))
3557 return FALSE;
3558
3559 /* Create branch lookup table for plt_branch stubs. */
3560 flags = (SEC_ALLOC | SEC_LOAD
3561 | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3562 htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3563 flags);
3564 if (htab->brlt == NULL
3565 || !bfd_set_section_alignment (htab->brlt, 3))
3566 return FALSE;
3567
3568 /* Local plt entries, put in .branch_lt but a separate section for
3569 convenience. */
3570 htab->pltlocal = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
3571 flags);
3572 if (htab->pltlocal == NULL
3573 || !bfd_set_section_alignment (htab->pltlocal, 3))
3574 return FALSE;
3575
3576 if (!bfd_link_pic (info))
3577 return TRUE;
3578
3579 flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
3580 | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3581 htab->relbrlt
3582 = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3583 if (htab->relbrlt == NULL
3584 || !bfd_set_section_alignment (htab->relbrlt, 3))
3585 return FALSE;
3586
3587 htab->relpltlocal
3588 = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
3589 if (htab->relpltlocal == NULL
3590 || !bfd_set_section_alignment (htab->relpltlocal, 3))
3591 return FALSE;
3592
3593 return TRUE;
3594 }
3595
3596 /* Satisfy the ELF linker by filling in some fields in our fake bfd. */
3597
3598 bfd_boolean
3599 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
3600 struct ppc64_elf_params *params)
3601 {
3602 struct ppc_link_hash_table *htab;
3603
3604 elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
3605
3606 /* Always hook our dynamic sections into the first bfd, which is the
3607 linker created stub bfd. This ensures that the GOT header is at
3608 the start of the output TOC section. */
3609 htab = ppc_hash_table (info);
3610 htab->elf.dynobj = params->stub_bfd;
3611 htab->params = params;
3612
3613 return create_linkage_sections (htab->elf.dynobj, info);
3614 }
3615
3616 /* Build a name for an entry in the stub hash table. */
3617
3618 static char *
3619 ppc_stub_name (const asection *input_section,
3620 const asection *sym_sec,
3621 const struct ppc_link_hash_entry *h,
3622 const Elf_Internal_Rela *rel)
3623 {
3624 char *stub_name;
3625 ssize_t len;
3626
3627 /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
3628 offsets from a sym as a branch target? In fact, we could
3629 probably assume the addend is always zero. */
3630 BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
3631
3632 if (h)
3633 {
3634 len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
3635 stub_name = bfd_malloc (len);
3636 if (stub_name == NULL)
3637 return stub_name;
3638
3639 len = sprintf (stub_name, "%08x.%s+%x",
3640 input_section->id & 0xffffffff,
3641 h->elf.root.root.string,
3642 (int) rel->r_addend & 0xffffffff);
3643 }
3644 else
3645 {
3646 len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
3647 stub_name = bfd_malloc (len);
3648 if (stub_name == NULL)
3649 return stub_name;
3650
3651 len = sprintf (stub_name, "%08x.%x:%x+%x",
3652 input_section->id & 0xffffffff,
3653 sym_sec->id & 0xffffffff,
3654 (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
3655 (int) rel->r_addend & 0xffffffff);
3656 }
3657 if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
3658 stub_name[len - 2] = 0;
3659 return stub_name;
3660 }
3661
3662 /* Look up an entry in the stub hash. Stub entries are cached because
3663 creating the stub name takes a bit of time. */
3664
3665 static struct ppc_stub_hash_entry *
3666 ppc_get_stub_entry (const asection *input_section,
3667 const asection *sym_sec,
3668 struct ppc_link_hash_entry *h,
3669 const Elf_Internal_Rela *rel,
3670 struct ppc_link_hash_table *htab)
3671 {
3672 struct ppc_stub_hash_entry *stub_entry;
3673 struct map_stub *group;
3674
3675 /* If this input section is part of a group of sections sharing one
3676 stub section, then use the id of the first section in the group.
3677 Stub names need to include a section id, as there may well be
3678 more than one stub used to reach say, printf, and we need to
3679 distinguish between them. */
3680 group = htab->sec_info[input_section->id].u.group;
3681 if (group == NULL)
3682 return NULL;
3683
3684 if (h != NULL && h->u.stub_cache != NULL
3685 && h->u.stub_cache->h == h
3686 && h->u.stub_cache->group == group)
3687 {
3688 stub_entry = h->u.stub_cache;
3689 }
3690 else
3691 {
3692 char *stub_name;
3693
3694 stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
3695 if (stub_name == NULL)
3696 return NULL;
3697
3698 stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
3699 stub_name, FALSE, FALSE);
3700 if (h != NULL)
3701 h->u.stub_cache = stub_entry;
3702
3703 free (stub_name);
3704 }
3705
3706 return stub_entry;
3707 }
3708
3709 /* Add a new stub entry to the stub hash. Not all fields of the new
3710 stub entry are initialised. */
3711
3712 static struct ppc_stub_hash_entry *
3713 ppc_add_stub (const char *stub_name,
3714 asection *section,
3715 struct bfd_link_info *info)
3716 {
3717 struct ppc_link_hash_table *htab = ppc_hash_table (info);
3718 struct map_stub *group;
3719 asection *link_sec;
3720 asection *stub_sec;
3721 struct ppc_stub_hash_entry *stub_entry;
3722
3723 group = htab->sec_info[section->id].u.group;
3724 link_sec = group->link_sec;
3725 stub_sec = group->stub_sec;
3726 if (stub_sec == NULL)
3727 {
3728 size_t namelen;
3729 bfd_size_type len;
3730 char *s_name;
3731
3732 namelen = strlen (link_sec->name);
3733 len = namelen + sizeof (STUB_SUFFIX);
3734 s_name = bfd_alloc (htab->params->stub_bfd, len);
3735 if (s_name == NULL)
3736 return NULL;
3737
3738 memcpy (s_name, link_sec->name, namelen);
3739 memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
3740 stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
3741 if (stub_sec == NULL)
3742 return NULL;
3743 group->stub_sec = stub_sec;
3744 }
3745
3746 /* Enter this entry into the linker stub hash table. */
3747 stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
3748 TRUE, FALSE);
3749 if (stub_entry == NULL)
3750 {
3751 /* xgettext:c-format */
3752 _bfd_error_handler (_("%pB: cannot create stub entry %s"),
3753 section->owner, stub_name);
3754 return NULL;
3755 }
3756
3757 stub_entry->group = group;
3758 stub_entry->stub_offset = 0;
3759 return stub_entry;
3760 }
3761
3762 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
3763 not already done. */
3764
3765 static bfd_boolean
3766 create_got_section (bfd *abfd, struct bfd_link_info *info)
3767 {
3768 asection *got, *relgot;
3769 flagword flags;
3770 struct ppc_link_hash_table *htab = ppc_hash_table (info);
3771
3772 if (!is_ppc64_elf (abfd))
3773 return FALSE;
3774 if (htab == NULL)
3775 return FALSE;
3776
3777 if (!htab->elf.sgot
3778 && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
3779 return FALSE;
3780
3781 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3782 | SEC_LINKER_CREATED);
3783
3784 got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
3785 if (!got
3786 || !bfd_set_section_alignment (got, 3))
3787 return FALSE;
3788
3789 relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
3790 flags | SEC_READONLY);
3791 if (!relgot
3792 || !bfd_set_section_alignment (relgot, 3))
3793 return FALSE;
3794
3795 ppc64_elf_tdata (abfd)->got = got;
3796 ppc64_elf_tdata (abfd)->relgot = relgot;
3797 return TRUE;
3798 }
3799
3800 /* Follow indirect and warning symbol links. */
3801
3802 static inline struct bfd_link_hash_entry *
3803 follow_link (struct bfd_link_hash_entry *h)
3804 {
3805 while (h->type == bfd_link_hash_indirect
3806 || h->type == bfd_link_hash_warning)
3807 h = h->u.i.link;
3808 return h;
3809 }
3810
3811 static inline struct elf_link_hash_entry *
3812 elf_follow_link (struct elf_link_hash_entry *h)
3813 {
3814 return (struct elf_link_hash_entry *) follow_link (&h->root);
3815 }
3816
3817 static inline struct ppc_link_hash_entry *
3818 ppc_follow_link (struct ppc_link_hash_entry *h)
3819 {
3820 return ppc_elf_hash_entry (elf_follow_link (&h->elf));
3821 }
3822
3823 /* Merge PLT info on FROM with that on TO. */
3824
3825 static void
3826 move_plt_plist (struct ppc_link_hash_entry *from,
3827 struct ppc_link_hash_entry *to)
3828 {
3829 if (from->elf.plt.plist != NULL)
3830 {
3831 if (to->elf.plt.plist != NULL)
3832 {
3833 struct plt_entry **entp;
3834 struct plt_entry *ent;
3835
3836 for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
3837 {
3838 struct plt_entry *dent;
3839
3840 for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
3841 if (dent->addend == ent->addend)
3842 {
3843 dent->plt.refcount += ent->plt.refcount;
3844 *entp = ent->next;
3845 break;
3846 }
3847 if (dent == NULL)
3848 entp = &ent->next;
3849 }
3850 *entp = to->elf.plt.plist;
3851 }
3852
3853 to->elf.plt.plist = from->elf.plt.plist;
3854 from->elf.plt.plist = NULL;
3855 }
3856 }
3857
3858 /* Copy the extra info we tack onto an elf_link_hash_entry. */
3859
3860 static void
3861 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
3862 struct elf_link_hash_entry *dir,
3863 struct elf_link_hash_entry *ind)
3864 {
3865 struct ppc_link_hash_entry *edir, *eind;
3866
3867 edir = ppc_elf_hash_entry (dir);
3868 eind = ppc_elf_hash_entry (ind);
3869
3870 edir->is_func |= eind->is_func;
3871 edir->is_func_descriptor |= eind->is_func_descriptor;
3872 edir->tls_mask |= eind->tls_mask;
3873 if (eind->oh != NULL)
3874 edir->oh = ppc_follow_link (eind->oh);
3875
3876 if (edir->elf.versioned != versioned_hidden)
3877 edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
3878 edir->elf.ref_regular |= eind->elf.ref_regular;
3879 edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
3880 edir->elf.non_got_ref |= eind->elf.non_got_ref;
3881 edir->elf.needs_plt |= eind->elf.needs_plt;
3882 edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
3883
3884 /* If we were called to copy over info for a weak sym, don't copy
3885 dyn_relocs, plt/got info, or dynindx. We used to copy dyn_relocs
3886 in order to simplify readonly_dynrelocs and save a field in the
3887 symbol hash entry, but that means dyn_relocs can't be used in any
3888 tests about a specific symbol, or affect other symbol flags which
3889 are then tested. */
3890 if (eind->elf.root.type != bfd_link_hash_indirect)
3891 return;
3892
3893 /* Copy over any dynamic relocs we may have on the indirect sym. */
3894 if (eind->dyn_relocs != NULL)
3895 {
3896 if (edir->dyn_relocs != NULL)
3897 {
3898 struct elf_dyn_relocs **pp;
3899 struct elf_dyn_relocs *p;
3900
3901 /* Add reloc counts against the indirect sym to the direct sym
3902 list. Merge any entries against the same section. */
3903 for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
3904 {
3905 struct elf_dyn_relocs *q;
3906
3907 for (q = edir->dyn_relocs; q != NULL; q = q->next)
3908 if (q->sec == p->sec)
3909 {
3910 q->pc_count += p->pc_count;
3911 q->count += p->count;
3912 *pp = p->next;
3913 break;
3914 }
3915 if (q == NULL)
3916 pp = &p->next;
3917 }
3918 *pp = edir->dyn_relocs;
3919 }
3920
3921 edir->dyn_relocs = eind->dyn_relocs;
3922 eind->dyn_relocs = NULL;
3923 }
3924
3925 /* Copy over got entries that we may have already seen to the
3926 symbol which just became indirect. */
3927 if (eind->elf.got.glist != NULL)
3928 {
3929 if (edir->elf.got.glist != NULL)
3930 {
3931 struct got_entry **entp;
3932 struct got_entry *ent;
3933
3934 for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
3935 {
3936 struct got_entry *dent;
3937
3938 for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
3939 if (dent->addend == ent->addend
3940 && dent->owner == ent->owner
3941 && dent->tls_type == ent->tls_type)
3942 {
3943 dent->got.refcount += ent->got.refcount;
3944 *entp = ent->next;
3945 break;
3946 }
3947 if (dent == NULL)
3948 entp = &ent->next;
3949 }
3950 *entp = edir->elf.got.glist;
3951 }
3952
3953 edir->elf.got.glist = eind->elf.got.glist;
3954 eind->elf.got.glist = NULL;
3955 }
3956
3957 /* And plt entries. */
3958 move_plt_plist (eind, edir);
3959
3960 if (eind->elf.dynindx != -1)
3961 {
3962 if (edir->elf.dynindx != -1)
3963 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
3964 edir->elf.dynstr_index);
3965 edir->elf.dynindx = eind->elf.dynindx;
3966 edir->elf.dynstr_index = eind->elf.dynstr_index;
3967 eind->elf.dynindx = -1;
3968 eind->elf.dynstr_index = 0;
3969 }
3970 }
3971
3972 /* Find the function descriptor hash entry from the given function code
3973 hash entry FH. Link the entries via their OH fields. */
3974
3975 static struct ppc_link_hash_entry *
3976 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
3977 {
3978 struct ppc_link_hash_entry *fdh = fh->oh;
3979
3980 if (fdh == NULL)
3981 {
3982 const char *fd_name = fh->elf.root.root.string + 1;
3983
3984 fdh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, fd_name,
3985 FALSE, FALSE, FALSE));
3986 if (fdh == NULL)
3987 return fdh;
3988
3989 fdh->is_func_descriptor = 1;
3990 fdh->oh = fh;
3991 fh->is_func = 1;
3992 fh->oh = fdh;
3993 }
3994
3995 fdh = ppc_follow_link (fdh);
3996 fdh->is_func_descriptor = 1;
3997 fdh->oh = fh;
3998 return fdh;
3999 }
4000
4001 /* Make a fake function descriptor sym for the undefined code sym FH. */
4002
4003 static struct ppc_link_hash_entry *
4004 make_fdh (struct bfd_link_info *info,
4005 struct ppc_link_hash_entry *fh)
4006 {
4007 bfd *abfd = fh->elf.root.u.undef.abfd;
4008 struct bfd_link_hash_entry *bh = NULL;
4009 struct ppc_link_hash_entry *fdh;
4010 flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
4011 ? BSF_WEAK
4012 : BSF_GLOBAL);
4013
4014 if (!_bfd_generic_link_add_one_symbol (info, abfd,
4015 fh->elf.root.root.string + 1,
4016 flags, bfd_und_section_ptr, 0,
4017 NULL, FALSE, FALSE, &bh))
4018 return NULL;
4019
4020 fdh = (struct ppc_link_hash_entry *) bh;
4021 fdh->elf.non_elf = 0;
4022 fdh->fake = 1;
4023 fdh->is_func_descriptor = 1;
4024 fdh->oh = fh;
4025 fh->is_func = 1;
4026 fh->oh = fdh;
4027 return fdh;
4028 }
4029
4030 /* Fix function descriptor symbols defined in .opd sections to be
4031 function type. */
4032
4033 static bfd_boolean
4034 ppc64_elf_add_symbol_hook (bfd *ibfd,
4035 struct bfd_link_info *info,
4036 Elf_Internal_Sym *isym,
4037 const char **name,
4038 flagword *flags ATTRIBUTE_UNUSED,
4039 asection **sec,
4040 bfd_vma *value)
4041 {
4042 if (*sec != NULL
4043 && strcmp ((*sec)->name, ".opd") == 0)
4044 {
4045 asection *code_sec;
4046
4047 if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4048 || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
4049 isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4050
4051 /* If the symbol is a function defined in .opd, and the function
4052 code is in a discarded group, let it appear to be undefined. */
4053 if (!bfd_link_relocatable (info)
4054 && (*sec)->reloc_count != 0
4055 && opd_entry_value (*sec, *value, &code_sec, NULL,
4056 FALSE) != (bfd_vma) -1
4057 && discarded_section (code_sec))
4058 {
4059 *sec = bfd_und_section_ptr;
4060 isym->st_shndx = SHN_UNDEF;
4061 }
4062 }
4063 else if (*sec != NULL
4064 && strcmp ((*sec)->name, ".toc") == 0
4065 && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4066 {
4067 struct ppc_link_hash_table *htab = ppc_hash_table (info);
4068 if (htab != NULL)
4069 htab->params->object_in_toc = 1;
4070 }
4071
4072 if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4073 {
4074 if (abiversion (ibfd) == 0)
4075 set_abiversion (ibfd, 2);
4076 else if (abiversion (ibfd) == 1)
4077 {
4078 _bfd_error_handler (_("symbol '%s' has invalid st_other"
4079 " for ABI version 1"), *name);
4080 bfd_set_error (bfd_error_bad_value);
4081 return FALSE;
4082 }
4083 }
4084
4085 return TRUE;
4086 }
4087
4088 /* Merge non-visibility st_other attributes: local entry point. */
4089
4090 static void
4091 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
4092 const Elf_Internal_Sym *isym,
4093 bfd_boolean definition,
4094 bfd_boolean dynamic)
4095 {
4096 if (definition && (!dynamic || !h->def_regular))
4097 h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
4098 | ELF_ST_VISIBILITY (h->other));
4099 }
4100
4101 /* Hook called on merging a symbol. We use this to clear "fake" since
4102 we now have a real symbol. */
4103
4104 static bfd_boolean
4105 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
4106 const Elf_Internal_Sym *isym,
4107 asection **psec ATTRIBUTE_UNUSED,
4108 bfd_boolean newdef ATTRIBUTE_UNUSED,
4109 bfd_boolean olddef ATTRIBUTE_UNUSED,
4110 bfd *oldbfd ATTRIBUTE_UNUSED,
4111 const asection *oldsec ATTRIBUTE_UNUSED)
4112 {
4113 ppc_elf_hash_entry (h)->fake = 0;
4114 if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
4115 ppc_elf_hash_entry (h)->non_zero_localentry = 1;
4116 return TRUE;
4117 }
4118
4119 /* This function makes an old ABI object reference to ".bar" cause the
4120 inclusion of a new ABI object archive that defines "bar".
4121 NAME is a symbol defined in an archive. Return a symbol in the hash
4122 table that might be satisfied by the archive symbols. */
4123
4124 static struct elf_link_hash_entry *
4125 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4126 struct bfd_link_info *info,
4127 const char *name)
4128 {
4129 struct elf_link_hash_entry *h;
4130 char *dot_name;
4131 size_t len;
4132
4133 h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4134 if (h != NULL
4135 /* Don't return this sym if it is a fake function descriptor
4136 created by add_symbol_adjust. */
4137 && !ppc_elf_hash_entry (h)->fake)
4138 return h;
4139
4140 if (name[0] == '.')
4141 return h;
4142
4143 len = strlen (name);
4144 dot_name = bfd_alloc (abfd, len + 2);
4145 if (dot_name == NULL)
4146 return (struct elf_link_hash_entry *) -1;
4147 dot_name[0] = '.';
4148 memcpy (dot_name + 1, name, len + 1);
4149 h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4150 bfd_release (abfd, dot_name);
4151 return h;
4152 }
4153
4154 /* This function satisfies all old ABI object references to ".bar" if a
4155 new ABI object defines "bar". Well, at least, undefined dot symbols
4156 are made weak. This stops later archive searches from including an
4157 object if we already have a function descriptor definition. It also
4158 prevents the linker complaining about undefined symbols.
4159 We also check and correct mismatched symbol visibility here. The
4160 most restrictive visibility of the function descriptor and the
4161 function entry symbol is used. */
4162
4163 static bfd_boolean
4164 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4165 {
4166 struct ppc_link_hash_table *htab;
4167 struct ppc_link_hash_entry *fdh;
4168
4169 if (eh->elf.root.type == bfd_link_hash_warning)
4170 eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4171
4172 if (eh->elf.root.type == bfd_link_hash_indirect)
4173 return TRUE;
4174
4175 if (eh->elf.root.root.string[0] != '.')
4176 abort ();
4177
4178 htab = ppc_hash_table (info);
4179 if (htab == NULL)
4180 return FALSE;
4181
4182 fdh = lookup_fdh (eh, htab);
4183 if (fdh == NULL
4184 && !bfd_link_relocatable (info)
4185 && (eh->elf.root.type == bfd_link_hash_undefined
4186 || eh->elf.root.type == bfd_link_hash_undefweak)
4187 && eh->elf.ref_regular)
4188 {
4189 /* Make an undefined function descriptor sym, in order to
4190 pull in an --as-needed shared lib. Archives are handled
4191 elsewhere. */
4192 fdh = make_fdh (info, eh);
4193 if (fdh == NULL)
4194 return FALSE;
4195 }
4196
4197 if (fdh != NULL)
4198 {
4199 unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4200 unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4201
4202 /* Make both descriptor and entry symbol have the most
4203 constraining visibility of either symbol. */
4204 if (entry_vis < descr_vis)
4205 fdh->elf.other += entry_vis - descr_vis;
4206 else if (entry_vis > descr_vis)
4207 eh->elf.other += descr_vis - entry_vis;
4208
4209 /* Propagate reference flags from entry symbol to function
4210 descriptor symbol. */
4211 fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
4212 fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
4213 fdh->elf.ref_regular |= eh->elf.ref_regular;
4214 fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
4215
4216 if (!fdh->elf.forced_local
4217 && fdh->elf.dynindx == -1
4218 && fdh->elf.versioned != versioned_hidden
4219 && (bfd_link_dll (info)
4220 || fdh->elf.def_dynamic
4221 || fdh->elf.ref_dynamic)
4222 && (eh->elf.ref_regular
4223 || eh->elf.def_regular))
4224 {
4225 if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
4226 return FALSE;
4227 }
4228 }
4229
4230 return TRUE;
4231 }
4232
4233 /* Set up opd section info and abiversion for IBFD, and process list
4234 of dot-symbols we made in link_hash_newfunc. */
4235
4236 static bfd_boolean
4237 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
4238 {
4239 struct ppc_link_hash_table *htab;
4240 struct ppc_link_hash_entry **p, *eh;
4241 asection *opd = bfd_get_section_by_name (ibfd, ".opd");
4242
4243 if (opd != NULL && opd->size != 0)
4244 {
4245 BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
4246 ppc64_elf_section_data (opd)->sec_type = sec_opd;
4247
4248 if (abiversion (ibfd) == 0)
4249 set_abiversion (ibfd, 1);
4250 else if (abiversion (ibfd) >= 2)
4251 {
4252 /* xgettext:c-format */
4253 _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
4254 ibfd, abiversion (ibfd));
4255 bfd_set_error (bfd_error_bad_value);
4256 return FALSE;
4257 }
4258 }
4259
4260 if (is_ppc64_elf (info->output_bfd))
4261 {
4262 /* For input files without an explicit abiversion in e_flags
4263 we should have flagged any with symbol st_other bits set
4264 as ELFv1 and above flagged those with .opd as ELFv2.
4265 Set the output abiversion if not yet set, and for any input
4266 still ambiguous, take its abiversion from the output.
4267 Differences in ABI are reported later. */
4268 if (abiversion (info->output_bfd) == 0)
4269 set_abiversion (info->output_bfd, abiversion (ibfd));
4270 else if (abiversion (ibfd) == 0)
4271 set_abiversion (ibfd, abiversion (info->output_bfd));
4272 }
4273
4274 htab = ppc_hash_table (info);
4275 if (htab == NULL)
4276 return TRUE;
4277
4278 if (opd != NULL && opd->size != 0
4279 && (ibfd->flags & DYNAMIC) == 0
4280 && (opd->flags & SEC_RELOC) != 0
4281 && opd->reloc_count != 0
4282 && !bfd_is_abs_section (opd->output_section)
4283 && info->gc_sections)
4284 {
4285 /* Garbage collection needs some extra help with .opd sections.
4286 We don't want to necessarily keep everything referenced by
4287 relocs in .opd, as that would keep all functions. Instead,
4288 if we reference an .opd symbol (a function descriptor), we
4289 want to keep the function code symbol's section. This is
4290 easy for global symbols, but for local syms we need to keep
4291 information about the associated function section. */
4292 bfd_size_type amt;
4293 asection **opd_sym_map;
4294 Elf_Internal_Shdr *symtab_hdr;
4295 Elf_Internal_Rela *relocs, *rel_end, *rel;
4296
4297 amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
4298 opd_sym_map = bfd_zalloc (ibfd, amt);
4299 if (opd_sym_map == NULL)
4300 return FALSE;
4301 ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
4302 relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
4303 info->keep_memory);
4304 if (relocs == NULL)
4305 return FALSE;
4306 symtab_hdr = &elf_symtab_hdr (ibfd);
4307 rel_end = relocs + opd->reloc_count - 1;
4308 for (rel = relocs; rel < rel_end; rel++)
4309 {
4310 enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
4311 unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
4312
4313 if (r_type == R_PPC64_ADDR64
4314 && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
4315 && r_symndx < symtab_hdr->sh_info)
4316 {
4317 Elf_Internal_Sym *isym;
4318 asection *s;
4319
4320 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
4321 if (isym == NULL)
4322 {
4323 if (elf_section_data (opd)->relocs != relocs)
4324 free (relocs);
4325 return FALSE;
4326 }
4327
4328 s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
4329 if (s != NULL && s != opd)
4330 opd_sym_map[OPD_NDX (rel->r_offset)] = s;
4331 }
4332 }
4333 if (elf_section_data (opd)->relocs != relocs)
4334 free (relocs);
4335 }
4336
4337 p = &htab->dot_syms;
4338 while ((eh = *p) != NULL)
4339 {
4340 *p = NULL;
4341 if (&eh->elf == htab->elf.hgot)
4342 ;
4343 else if (htab->elf.hgot == NULL
4344 && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4345 htab->elf.hgot = &eh->elf;
4346 else if (abiversion (ibfd) <= 1)
4347 {
4348 htab->need_func_desc_adj = 1;
4349 if (!add_symbol_adjust (eh, info))
4350 return FALSE;
4351 }
4352 p = &eh->u.next_dot_sym;
4353 }
4354 return TRUE;
4355 }
4356
4357 /* Undo hash table changes when an --as-needed input file is determined
4358 not to be needed. */
4359
4360 static bfd_boolean
4361 ppc64_elf_notice_as_needed (bfd *ibfd,
4362 struct bfd_link_info *info,
4363 enum notice_asneeded_action act)
4364 {
4365 if (act == notice_not_needed)
4366 {
4367 struct ppc_link_hash_table *htab = ppc_hash_table (info);
4368
4369 if (htab == NULL)
4370 return FALSE;
4371
4372 htab->dot_syms = NULL;
4373 }
4374 return _bfd_elf_notice_as_needed (ibfd, info, act);
4375 }
4376
4377 /* If --just-symbols against a final linked binary, then assume we need
4378 toc adjusting stubs when calling functions defined there. */
4379
4380 static void
4381 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4382 {
4383 if ((sec->flags & SEC_CODE) != 0
4384 && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4385 && is_ppc64_elf (sec->owner))
4386 {
4387 if (abiversion (sec->owner) >= 2
4388 || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4389 sec->has_toc_reloc = 1;
4390 }
4391 _bfd_elf_link_just_syms (sec, info);
4392 }
4393
4394 static struct plt_entry **
4395 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4396 unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4397 {
4398 struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4399 struct plt_entry **local_plt;
4400 unsigned char *local_got_tls_masks;
4401
4402 if (local_got_ents == NULL)
4403 {
4404 bfd_size_type size = symtab_hdr->sh_info;
4405
4406 size *= (sizeof (*local_got_ents)
4407 + sizeof (*local_plt)
4408 + sizeof (*local_got_tls_masks));
4409 local_got_ents = bfd_zalloc (abfd, size);
4410 if (local_got_ents == NULL)
4411 return NULL;
4412 elf_local_got_ents (abfd) = local_got_ents;
4413 }
4414
4415 if ((tls_type & (NON_GOT | TLS_EXPLICIT)) == 0)
4416 {
4417 struct got_entry *ent;
4418
4419 for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4420 if (ent->addend == r_addend
4421 && ent->owner == abfd
4422 && ent->tls_type == tls_type)
4423 break;
4424 if (ent == NULL)
4425 {
4426 bfd_size_type amt = sizeof (*ent);
4427 ent = bfd_alloc (abfd, amt);
4428 if (ent == NULL)
4429 return FALSE;
4430 ent->next = local_got_ents[r_symndx];
4431 ent->addend = r_addend;
4432 ent->owner = abfd;
4433 ent->tls_type = tls_type;
4434 ent->is_indirect = FALSE;
4435 ent->got.refcount = 0;
4436 local_got_ents[r_symndx] = ent;
4437 }
4438 ent->got.refcount += 1;
4439 }
4440
4441 local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
4442 local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
4443 local_got_tls_masks[r_symndx] |= tls_type & 0xff;
4444
4445 return local_plt + r_symndx;
4446 }
4447
4448 static bfd_boolean
4449 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
4450 {
4451 struct plt_entry *ent;
4452
4453 for (ent = *plist; ent != NULL; ent = ent->next)
4454 if (ent->addend == addend)
4455 break;
4456 if (ent == NULL)
4457 {
4458 bfd_size_type amt = sizeof (*ent);
4459 ent = bfd_alloc (abfd, amt);
4460 if (ent == NULL)
4461 return FALSE;
4462 ent->next = *plist;
4463 ent->addend = addend;
4464 ent->plt.refcount = 0;
4465 *plist = ent;
4466 }
4467 ent->plt.refcount += 1;
4468 return TRUE;
4469 }
4470
4471 static bfd_boolean
4472 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
4473 {
4474 return (r_type == R_PPC64_REL24
4475 || r_type == R_PPC64_REL24_NOTOC
4476 || r_type == R_PPC64_REL14
4477 || r_type == R_PPC64_REL14_BRTAKEN
4478 || r_type == R_PPC64_REL14_BRNTAKEN
4479 || r_type == R_PPC64_ADDR24
4480 || r_type == R_PPC64_ADDR14
4481 || r_type == R_PPC64_ADDR14_BRTAKEN
4482 || r_type == R_PPC64_ADDR14_BRNTAKEN
4483 || r_type == R_PPC64_PLTCALL
4484 || r_type == R_PPC64_PLTCALL_NOTOC);
4485 }
4486
4487 /* Relocs on inline plt call sequence insns prior to the call. */
4488
4489 static bfd_boolean
4490 is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
4491 {
4492 return (r_type == R_PPC64_PLT16_HA
4493 || r_type == R_PPC64_PLT16_HI
4494 || r_type == R_PPC64_PLT16_LO
4495 || r_type == R_PPC64_PLT16_LO_DS
4496 || r_type == R_PPC64_PLT_PCREL34
4497 || r_type == R_PPC64_PLT_PCREL34_NOTOC
4498 || r_type == R_PPC64_PLTSEQ
4499 || r_type == R_PPC64_PLTSEQ_NOTOC);
4500 }
4501
4502 /* Look through the relocs for a section during the first phase, and
4503 calculate needed space in the global offset table, procedure
4504 linkage table, and dynamic reloc sections. */
4505
4506 static bfd_boolean
4507 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
4508 asection *sec, const Elf_Internal_Rela *relocs)
4509 {
4510 struct ppc_link_hash_table *htab;
4511 Elf_Internal_Shdr *symtab_hdr;
4512 struct elf_link_hash_entry **sym_hashes;
4513 const Elf_Internal_Rela *rel;
4514 const Elf_Internal_Rela *rel_end;
4515 asection *sreloc;
4516 struct elf_link_hash_entry *tga, *dottga;
4517 bfd_boolean is_opd;
4518
4519 if (bfd_link_relocatable (info))
4520 return TRUE;
4521
4522 /* Don't do anything special with non-loaded, non-alloced sections.
4523 In particular, any relocs in such sections should not affect GOT
4524 and PLT reference counting (ie. we don't allow them to create GOT
4525 or PLT entries), there's no possibility or desire to optimize TLS
4526 relocs, and there's not much point in propagating relocs to shared
4527 libs that the dynamic linker won't relocate. */
4528 if ((sec->flags & SEC_ALLOC) == 0)
4529 return TRUE;
4530
4531 BFD_ASSERT (is_ppc64_elf (abfd));
4532
4533 htab = ppc_hash_table (info);
4534 if (htab == NULL)
4535 return FALSE;
4536
4537 tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
4538 FALSE, FALSE, TRUE);
4539 dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
4540 FALSE, FALSE, TRUE);
4541 symtab_hdr = &elf_symtab_hdr (abfd);
4542 sym_hashes = elf_sym_hashes (abfd);
4543 sreloc = NULL;
4544 is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
4545 rel_end = relocs + sec->reloc_count;
4546 for (rel = relocs; rel < rel_end; rel++)
4547 {
4548 unsigned long r_symndx;
4549 struct elf_link_hash_entry *h;
4550 enum elf_ppc64_reloc_type r_type;
4551 int tls_type;
4552 struct _ppc64_elf_section_data *ppc64_sec;
4553 struct plt_entry **ifunc, **plt_list;
4554
4555 r_symndx = ELF64_R_SYM (rel->r_info);
4556 if (r_symndx < symtab_hdr->sh_info)
4557 h = NULL;
4558 else
4559 {
4560 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
4561 h = elf_follow_link (h);
4562
4563 if (h == htab->elf.hgot)
4564 sec->has_toc_reloc = 1;
4565 }
4566
4567 r_type = ELF64_R_TYPE (rel->r_info);
4568 switch (r_type)
4569 {
4570 case R_PPC64_D34:
4571 case R_PPC64_D34_LO:
4572 case R_PPC64_D34_HI30:
4573 case R_PPC64_D34_HA30:
4574 case R_PPC64_D28:
4575 case R_PPC64_TPREL34:
4576 case R_PPC64_DTPREL34:
4577 case R_PPC64_PCREL34:
4578 case R_PPC64_GOT_PCREL34:
4579 case R_PPC64_GOT_TLSGD34:
4580 case R_PPC64_GOT_TLSLD34:
4581 case R_PPC64_GOT_TPREL34:
4582 case R_PPC64_GOT_DTPREL34:
4583 case R_PPC64_PLT_PCREL34:
4584 case R_PPC64_PLT_PCREL34_NOTOC:
4585 case R_PPC64_PCREL28:
4586 htab->powerxx_stubs = 1;
4587 break;
4588 default:
4589 break;
4590 }
4591
4592 switch (r_type)
4593 {
4594 case R_PPC64_PLT16_HA:
4595 case R_PPC64_GOT_TLSLD16_HA:
4596 case R_PPC64_GOT_TLSGD16_HA:
4597 case R_PPC64_GOT_TPREL16_HA:
4598 case R_PPC64_GOT_DTPREL16_HA:
4599 case R_PPC64_GOT16_HA:
4600 case R_PPC64_TOC16_HA:
4601 case R_PPC64_PLT16_LO:
4602 case R_PPC64_PLT16_LO_DS:
4603 case R_PPC64_GOT_TLSLD16_LO:
4604 case R_PPC64_GOT_TLSGD16_LO:
4605 case R_PPC64_GOT_TPREL16_LO_DS:
4606 case R_PPC64_GOT_DTPREL16_LO_DS:
4607 case R_PPC64_GOT16_LO:
4608 case R_PPC64_GOT16_LO_DS:
4609 case R_PPC64_TOC16_LO:
4610 case R_PPC64_TOC16_LO_DS:
4611 case R_PPC64_GOT_PCREL34:
4612 ppc64_elf_tdata (abfd)->has_optrel = 1;
4613 ppc64_elf_section_data (sec)->has_optrel = 1;
4614 break;
4615 default:
4616 break;
4617 }
4618
4619 ifunc = NULL;
4620 if (h != NULL)
4621 {
4622 if (h->type == STT_GNU_IFUNC)
4623 {
4624 h->needs_plt = 1;
4625 ifunc = &h->plt.plist;
4626 }
4627 }
4628 else
4629 {
4630 Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4631 abfd, r_symndx);
4632 if (isym == NULL)
4633 return FALSE;
4634
4635 if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4636 {
4637 ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4638 rel->r_addend,
4639 NON_GOT | PLT_IFUNC);
4640 if (ifunc == NULL)
4641 return FALSE;
4642 }
4643 }
4644
4645 tls_type = 0;
4646 switch (r_type)
4647 {
4648 case R_PPC64_TLSGD:
4649 case R_PPC64_TLSLD:
4650 /* These special tls relocs tie a call to __tls_get_addr with
4651 its parameter symbol. */
4652 if (h != NULL)
4653 ppc_elf_hash_entry (h)->tls_mask |= TLS_TLS | TLS_MARK;
4654 else
4655 if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4656 rel->r_addend,
4657 NON_GOT | TLS_TLS | TLS_MARK))
4658 return FALSE;
4659 sec->has_tls_reloc = 1;
4660 break;
4661
4662 case R_PPC64_GOT_TLSLD16:
4663 case R_PPC64_GOT_TLSLD16_LO:
4664 case R_PPC64_GOT_TLSLD16_HI:
4665 case R_PPC64_GOT_TLSLD16_HA:
4666 case R_PPC64_GOT_TLSLD34:
4667 tls_type = TLS_TLS | TLS_LD;
4668 goto dogottls;
4669
4670 case R_PPC64_GOT_TLSGD16:
4671 case R_PPC64_GOT_TLSGD16_LO:
4672 case R_PPC64_GOT_TLSGD16_HI:
4673 case R_PPC64_GOT_TLSGD16_HA:
4674 case R_PPC64_GOT_TLSGD34:
4675 tls_type = TLS_TLS | TLS_GD;
4676 goto dogottls;
4677
4678 case R_PPC64_GOT_TPREL16_DS:
4679 case R_PPC64_GOT_TPREL16_LO_DS:
4680 case R_PPC64_GOT_TPREL16_HI:
4681 case R_PPC64_GOT_TPREL16_HA:
4682 case R_PPC64_GOT_TPREL34:
4683 if (bfd_link_dll (info))
4684 info->flags |= DF_STATIC_TLS;
4685 tls_type = TLS_TLS | TLS_TPREL;
4686 goto dogottls;
4687
4688 case R_PPC64_GOT_DTPREL16_DS:
4689 case R_PPC64_GOT_DTPREL16_LO_DS:
4690 case R_PPC64_GOT_DTPREL16_HI:
4691 case R_PPC64_GOT_DTPREL16_HA:
4692 case R_PPC64_GOT_DTPREL34:
4693 tls_type = TLS_TLS | TLS_DTPREL;
4694 dogottls:
4695 sec->has_tls_reloc = 1;
4696 goto dogot;
4697
4698 case R_PPC64_GOT16:
4699 case R_PPC64_GOT16_LO:
4700 case R_PPC64_GOT16_HI:
4701 case R_PPC64_GOT16_HA:
4702 case R_PPC64_GOT16_DS:
4703 case R_PPC64_GOT16_LO_DS:
4704 case R_PPC64_GOT_PCREL34:
4705 dogot:
4706 /* This symbol requires a global offset table entry. */
4707 sec->has_toc_reloc = 1;
4708 if (r_type == R_PPC64_GOT_TLSLD16
4709 || r_type == R_PPC64_GOT_TLSGD16
4710 || r_type == R_PPC64_GOT_TPREL16_DS
4711 || r_type == R_PPC64_GOT_DTPREL16_DS
4712 || r_type == R_PPC64_GOT16
4713 || r_type == R_PPC64_GOT16_DS)
4714 {
4715 htab->do_multi_toc = 1;
4716 ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4717 }
4718
4719 if (ppc64_elf_tdata (abfd)->got == NULL
4720 && !create_got_section (abfd, info))
4721 return FALSE;
4722
4723 if (h != NULL)
4724 {
4725 struct ppc_link_hash_entry *eh;
4726 struct got_entry *ent;
4727
4728 eh = ppc_elf_hash_entry (h);
4729 for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
4730 if (ent->addend == rel->r_addend
4731 && ent->owner == abfd
4732 && ent->tls_type == tls_type)
4733 break;
4734 if (ent == NULL)
4735 {
4736 bfd_size_type amt = sizeof (*ent);
4737 ent = bfd_alloc (abfd, amt);
4738 if (ent == NULL)
4739 return FALSE;
4740 ent->next = eh->elf.got.glist;
4741 ent->addend = rel->r_addend;
4742 ent->owner = abfd;
4743 ent->tls_type = tls_type;
4744 ent->is_indirect = FALSE;
4745 ent->got.refcount = 0;
4746 eh->elf.got.glist = ent;
4747 }
4748 ent->got.refcount += 1;
4749 eh->tls_mask |= tls_type;
4750 }
4751 else
4752 /* This is a global offset table entry for a local symbol. */
4753 if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4754 rel->r_addend, tls_type))
4755 return FALSE;
4756
4757 /* We may also need a plt entry if the symbol turns out to be
4758 an ifunc. */
4759 if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
4760 {
4761 if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
4762 return FALSE;
4763 }
4764 break;
4765
4766 case R_PPC64_PLT16_HA:
4767 case R_PPC64_PLT16_HI:
4768 case R_PPC64_PLT16_LO:
4769 case R_PPC64_PLT16_LO_DS:
4770 case R_PPC64_PLT_PCREL34:
4771 case R_PPC64_PLT_PCREL34_NOTOC:
4772 case R_PPC64_PLT32:
4773 case R_PPC64_PLT64:
4774 /* This symbol requires a procedure linkage table entry. */
4775 plt_list = ifunc;
4776 if (h != NULL)
4777 {
4778 h->needs_plt = 1;
4779 if (h->root.root.string[0] == '.'
4780 && h->root.root.string[1] != '\0')
4781 ppc_elf_hash_entry (h)->is_func = 1;
4782 ppc_elf_hash_entry (h)->tls_mask |= PLT_KEEP;
4783 plt_list = &h->plt.plist;
4784 }
4785 if (plt_list == NULL)
4786 plt_list = update_local_sym_info (abfd, symtab_hdr, r_symndx,
4787 rel->r_addend,
4788 NON_GOT | PLT_KEEP);
4789 if (!update_plt_info (abfd, plt_list, rel->r_addend))
4790 return FALSE;
4791 break;
4792
4793 /* The following relocations don't need to propagate the
4794 relocation if linking a shared object since they are
4795 section relative. */
4796 case R_PPC64_SECTOFF:
4797 case R_PPC64_SECTOFF_LO:
4798 case R_PPC64_SECTOFF_HI:
4799 case R_PPC64_SECTOFF_HA:
4800 case R_PPC64_SECTOFF_DS:
4801 case R_PPC64_SECTOFF_LO_DS:
4802 case R_PPC64_DTPREL16:
4803 case R_PPC64_DTPREL16_LO:
4804 case R_PPC64_DTPREL16_HI:
4805 case R_PPC64_DTPREL16_HA:
4806 case R_PPC64_DTPREL16_DS:
4807 case R_PPC64_DTPREL16_LO_DS:
4808 case R_PPC64_DTPREL16_HIGH:
4809 case R_PPC64_DTPREL16_HIGHA:
4810 case R_PPC64_DTPREL16_HIGHER:
4811 case R_PPC64_DTPREL16_HIGHERA:
4812 case R_PPC64_DTPREL16_HIGHEST:
4813 case R_PPC64_DTPREL16_HIGHESTA:
4814 break;
4815
4816 /* Nor do these. */
4817 case R_PPC64_REL16:
4818 case R_PPC64_REL16_LO:
4819 case R_PPC64_REL16_HI:
4820 case R_PPC64_REL16_HA:
4821 case R_PPC64_REL16_HIGH:
4822 case R_PPC64_REL16_HIGHA:
4823 case R_PPC64_REL16_HIGHER:
4824 case R_PPC64_REL16_HIGHERA:
4825 case R_PPC64_REL16_HIGHEST:
4826 case R_PPC64_REL16_HIGHESTA:
4827 case R_PPC64_REL16_HIGHER34:
4828 case R_PPC64_REL16_HIGHERA34:
4829 case R_PPC64_REL16_HIGHEST34:
4830 case R_PPC64_REL16_HIGHESTA34:
4831 case R_PPC64_REL16DX_HA:
4832 break;
4833
4834 /* Not supported as a dynamic relocation. */
4835 case R_PPC64_ADDR64_LOCAL:
4836 if (bfd_link_pic (info))
4837 {
4838 if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
4839 ppc_howto_init ();
4840 /* xgettext:c-format */
4841 info->callbacks->einfo (_("%H: %s reloc unsupported "
4842 "in shared libraries and PIEs\n"),
4843 abfd, sec, rel->r_offset,
4844 ppc64_elf_howto_table[r_type]->name);
4845 bfd_set_error (bfd_error_bad_value);
4846 return FALSE;
4847 }
4848 break;
4849
4850 case R_PPC64_TOC16:
4851 case R_PPC64_TOC16_DS:
4852 htab->do_multi_toc = 1;
4853 ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
4854 /* Fall through. */
4855 case R_PPC64_TOC16_LO:
4856 case R_PPC64_TOC16_HI:
4857 case R_PPC64_TOC16_HA:
4858 case R_PPC64_TOC16_LO_DS:
4859 sec->has_toc_reloc = 1;
4860 if (h != NULL && bfd_link_executable (info))
4861 {
4862 /* We may need a copy reloc. */
4863 h->non_got_ref = 1;
4864 /* Strongly prefer a copy reloc over a dynamic reloc.
4865 glibc ld.so as of 2019-08 will error out if one of
4866 these relocations is emitted. */
4867 h->needs_copy = 1;
4868 goto dodyn;
4869 }
4870 break;
4871
4872 /* Marker reloc. */
4873 case R_PPC64_ENTRY:
4874 break;
4875
4876 /* This relocation describes the C++ object vtable hierarchy.
4877 Reconstruct it for later use during GC. */
4878 case R_PPC64_GNU_VTINHERIT:
4879 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
4880 return FALSE;
4881 break;
4882
4883 /* This relocation describes which C++ vtable entries are actually
4884 used. Record for later use during GC. */
4885 case R_PPC64_GNU_VTENTRY:
4886 if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
4887 return FALSE;
4888 break;
4889
4890 case R_PPC64_REL14:
4891 case R_PPC64_REL14_BRTAKEN:
4892 case R_PPC64_REL14_BRNTAKEN:
4893 {
4894 asection *dest = NULL;
4895
4896 /* Heuristic: If jumping outside our section, chances are
4897 we are going to need a stub. */
4898 if (h != NULL)
4899 {
4900 /* If the sym is weak it may be overridden later, so
4901 don't assume we know where a weak sym lives. */
4902 if (h->root.type == bfd_link_hash_defined)
4903 dest = h->root.u.def.section;
4904 }
4905 else
4906 {
4907 Elf_Internal_Sym *isym;
4908
4909 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
4910 abfd, r_symndx);
4911 if (isym == NULL)
4912 return FALSE;
4913
4914 dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
4915 }
4916
4917 if (dest != sec)
4918 ppc64_elf_section_data (sec)->has_14bit_branch = 1;
4919 }
4920 goto rel24;
4921
4922 case R_PPC64_PLTCALL:
4923 case R_PPC64_PLTCALL_NOTOC:
4924 ppc64_elf_section_data (sec)->has_pltcall = 1;
4925 /* Fall through. */
4926
4927 case R_PPC64_REL24:
4928 case R_PPC64_REL24_NOTOC:
4929 rel24:
4930 plt_list = ifunc;
4931 if (h != NULL)
4932 {
4933 h->needs_plt = 1;
4934 if (h->root.root.string[0] == '.'
4935 && h->root.root.string[1] != '\0')
4936 ppc_elf_hash_entry (h)->is_func = 1;
4937
4938 if (h == tga || h == dottga)
4939 {
4940 sec->has_tls_reloc = 1;
4941 if (rel != relocs
4942 && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
4943 || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
4944 /* We have a new-style __tls_get_addr call with
4945 a marker reloc. */
4946 ;
4947 else
4948 /* Mark this section as having an old-style call. */
4949 sec->nomark_tls_get_addr = 1;
4950 }
4951 plt_list = &h->plt.plist;
4952 }
4953
4954 /* We may need a .plt entry if the function this reloc
4955 refers to is in a shared lib. */
4956 if (plt_list
4957 && !update_plt_info (abfd, plt_list, rel->r_addend))
4958 return FALSE;
4959 break;
4960
4961 case R_PPC64_ADDR14:
4962 case R_PPC64_ADDR14_BRNTAKEN:
4963 case R_PPC64_ADDR14_BRTAKEN:
4964 case R_PPC64_ADDR24:
4965 goto dodyn;
4966
4967 case R_PPC64_TPREL64:
4968 tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
4969 if (bfd_link_dll (info))
4970 info->flags |= DF_STATIC_TLS;
4971 goto dotlstoc;
4972
4973 case R_PPC64_DTPMOD64:
4974 if (rel + 1 < rel_end
4975 && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
4976 && rel[1].r_offset == rel->r_offset + 8)
4977 tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
4978 else
4979 tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
4980 goto dotlstoc;
4981
4982 case R_PPC64_DTPREL64:
4983 tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
4984 if (rel != relocs
4985 && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
4986 && rel[-1].r_offset == rel->r_offset - 8)
4987 /* This is the second reloc of a dtpmod, dtprel pair.
4988 Don't mark with TLS_DTPREL. */
4989 goto dodyn;
4990
4991 dotlstoc:
4992 sec->has_tls_reloc = 1;
4993 if (h != NULL)
4994 ppc_elf_hash_entry (h)->tls_mask |= tls_type & 0xff;
4995 else
4996 if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
4997 rel->r_addend, tls_type))
4998 return FALSE;
4999
5000 ppc64_sec = ppc64_elf_section_data (sec);
5001 if (ppc64_sec->sec_type != sec_toc)
5002 {
5003 bfd_size_type amt;
5004
5005 /* One extra to simplify get_tls_mask. */
5006 amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5007 ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5008 if (ppc64_sec->u.toc.symndx == NULL)
5009 return FALSE;
5010 amt = sec->size * sizeof (bfd_vma) / 8;
5011 ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5012 if (ppc64_sec->u.toc.add == NULL)
5013 return FALSE;
5014 BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5015 ppc64_sec->sec_type = sec_toc;
5016 }
5017 BFD_ASSERT (rel->r_offset % 8 == 0);
5018 ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5019 ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5020
5021 /* Mark the second slot of a GD or LD entry.
5022 -1 to indicate GD and -2 to indicate LD. */
5023 if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5024 ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5025 else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5026 ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5027 goto dodyn;
5028
5029 case R_PPC64_TPREL16:
5030 case R_PPC64_TPREL16_LO:
5031 case R_PPC64_TPREL16_HI:
5032 case R_PPC64_TPREL16_HA:
5033 case R_PPC64_TPREL16_DS:
5034 case R_PPC64_TPREL16_LO_DS:
5035 case R_PPC64_TPREL16_HIGH:
5036 case R_PPC64_TPREL16_HIGHA:
5037 case R_PPC64_TPREL16_HIGHER:
5038 case R_PPC64_TPREL16_HIGHERA:
5039 case R_PPC64_TPREL16_HIGHEST:
5040 case R_PPC64_TPREL16_HIGHESTA:
5041 case R_PPC64_TPREL34:
5042 if (bfd_link_dll (info))
5043 info->flags |= DF_STATIC_TLS;
5044 goto dodyn;
5045
5046 case R_PPC64_ADDR64:
5047 if (is_opd
5048 && rel + 1 < rel_end
5049 && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5050 {
5051 if (h != NULL)
5052 ppc_elf_hash_entry (h)->is_func = 1;
5053 }
5054 /* Fall through. */
5055
5056 case R_PPC64_ADDR16:
5057 case R_PPC64_ADDR16_DS:
5058 case R_PPC64_ADDR16_HA:
5059 case R_PPC64_ADDR16_HI:
5060 case R_PPC64_ADDR16_HIGH:
5061 case R_PPC64_ADDR16_HIGHA:
5062 case R_PPC64_ADDR16_HIGHER:
5063 case R_PPC64_ADDR16_HIGHERA:
5064 case R_PPC64_ADDR16_HIGHEST:
5065 case R_PPC64_ADDR16_HIGHESTA:
5066 case R_PPC64_ADDR16_LO:
5067 case R_PPC64_ADDR16_LO_DS:
5068 case R_PPC64_D34:
5069 case R_PPC64_D34_LO:
5070 case R_PPC64_D34_HI30:
5071 case R_PPC64_D34_HA30:
5072 case R_PPC64_ADDR16_HIGHER34:
5073 case R_PPC64_ADDR16_HIGHERA34:
5074 case R_PPC64_ADDR16_HIGHEST34:
5075 case R_PPC64_ADDR16_HIGHESTA34:
5076 case R_PPC64_D28:
5077 if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
5078 && rel->r_addend == 0)
5079 {
5080 /* We may need a .plt entry if this reloc refers to a
5081 function in a shared lib. */
5082 if (!update_plt_info (abfd, &h->plt.plist, 0))
5083 return FALSE;
5084 h->pointer_equality_needed = 1;
5085 }
5086 /* Fall through. */
5087
5088 case R_PPC64_REL30:
5089 case R_PPC64_REL32:
5090 case R_PPC64_REL64:
5091 case R_PPC64_ADDR32:
5092 case R_PPC64_UADDR16:
5093 case R_PPC64_UADDR32:
5094 case R_PPC64_UADDR64:
5095 case R_PPC64_TOC:
5096 if (h != NULL && bfd_link_executable (info))
5097 /* We may need a copy reloc. */
5098 h->non_got_ref = 1;
5099
5100 /* Don't propagate .opd relocs. */
5101 if (NO_OPD_RELOCS && is_opd)
5102 break;
5103
5104 /* If we are creating a shared library, and this is a reloc
5105 against a global symbol, or a non PC relative reloc
5106 against a local symbol, then we need to copy the reloc
5107 into the shared library. However, if we are linking with
5108 -Bsymbolic, we do not need to copy a reloc against a
5109 global symbol which is defined in an object we are
5110 including in the link (i.e., DEF_REGULAR is set). At
5111 this point we have not seen all the input files, so it is
5112 possible that DEF_REGULAR is not set now but will be set
5113 later (it is never cleared). In case of a weak definition,
5114 DEF_REGULAR may be cleared later by a strong definition in
5115 a shared library. We account for that possibility below by
5116 storing information in the dyn_relocs field of the hash
5117 table entry. A similar situation occurs when creating
5118 shared libraries and symbol visibility changes render the
5119 symbol local.
5120
5121 If on the other hand, we are creating an executable, we
5122 may need to keep relocations for symbols satisfied by a
5123 dynamic library if we manage to avoid copy relocs for the
5124 symbol. */
5125 dodyn:
5126 if ((h != NULL
5127 && (h->root.type == bfd_link_hash_defweak
5128 || !h->def_regular))
5129 || (h != NULL
5130 && !bfd_link_executable (info)
5131 && !SYMBOLIC_BIND (info, h))
5132 || (bfd_link_pic (info)
5133 && must_be_dyn_reloc (info, r_type))
5134 || (!bfd_link_pic (info)
5135 && ifunc != NULL))
5136 {
5137 /* We must copy these reloc types into the output file.
5138 Create a reloc section in dynobj and make room for
5139 this reloc. */
5140 if (sreloc == NULL)
5141 {
5142 sreloc = _bfd_elf_make_dynamic_reloc_section
5143 (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5144
5145 if (sreloc == NULL)
5146 return FALSE;
5147 }
5148
5149 /* If this is a global symbol, we count the number of
5150 relocations we need for this symbol. */
5151 if (h != NULL)
5152 {
5153 struct elf_dyn_relocs *p;
5154 struct elf_dyn_relocs **head;
5155
5156 head = &ppc_elf_hash_entry (h)->dyn_relocs;
5157 p = *head;
5158 if (p == NULL || p->sec != sec)
5159 {
5160 p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5161 if (p == NULL)
5162 return FALSE;
5163 p->next = *head;
5164 *head = p;
5165 p->sec = sec;
5166 p->count = 0;
5167 p->pc_count = 0;
5168 }
5169 p->count += 1;
5170 if (!must_be_dyn_reloc (info, r_type))
5171 p->pc_count += 1;
5172 }
5173 else
5174 {
5175 /* Track dynamic relocs needed for local syms too.
5176 We really need local syms available to do this
5177 easily. Oh well. */
5178 struct ppc_dyn_relocs *p;
5179 struct ppc_dyn_relocs **head;
5180 bfd_boolean is_ifunc;
5181 asection *s;
5182 void *vpp;
5183 Elf_Internal_Sym *isym;
5184
5185 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5186 abfd, r_symndx);
5187 if (isym == NULL)
5188 return FALSE;
5189
5190 s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5191 if (s == NULL)
5192 s = sec;
5193
5194 vpp = &elf_section_data (s)->local_dynrel;
5195 head = (struct ppc_dyn_relocs **) vpp;
5196 is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5197 p = *head;
5198 if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5199 p = p->next;
5200 if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5201 {
5202 p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5203 if (p == NULL)
5204 return FALSE;
5205 p->next = *head;
5206 *head = p;
5207 p->sec = sec;
5208 p->ifunc = is_ifunc;
5209 p->count = 0;
5210 }
5211 p->count += 1;
5212 }
5213 }
5214 break;
5215
5216 default:
5217 break;
5218 }
5219 }
5220
5221 return TRUE;
5222 }
5223
5224 /* Merge backend specific data from an object file to the output
5225 object file when linking. */
5226
5227 static bfd_boolean
5228 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
5229 {
5230 bfd *obfd = info->output_bfd;
5231 unsigned long iflags, oflags;
5232
5233 if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5234 return TRUE;
5235
5236 if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5237 return TRUE;
5238
5239 if (!_bfd_generic_verify_endian_match (ibfd, info))
5240 return FALSE;
5241
5242 iflags = elf_elfheader (ibfd)->e_flags;
5243 oflags = elf_elfheader (obfd)->e_flags;
5244
5245 if (iflags & ~EF_PPC64_ABI)
5246 {
5247 _bfd_error_handler
5248 /* xgettext:c-format */
5249 (_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
5250 bfd_set_error (bfd_error_bad_value);
5251 return FALSE;
5252 }
5253 else if (iflags != oflags && iflags != 0)
5254 {
5255 _bfd_error_handler
5256 /* xgettext:c-format */
5257 (_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
5258 ibfd, iflags, oflags);
5259 bfd_set_error (bfd_error_bad_value);
5260 return FALSE;
5261 }
5262
5263 if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
5264 return FALSE;
5265
5266 /* Merge Tag_compatibility attributes and any common GNU ones. */
5267 return _bfd_elf_merge_object_attributes (ibfd, info);
5268 }
5269
5270 static bfd_boolean
5271 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5272 {
5273 /* Print normal ELF private data. */
5274 _bfd_elf_print_private_bfd_data (abfd, ptr);
5275
5276 if (elf_elfheader (abfd)->e_flags != 0)
5277 {
5278 FILE *file = ptr;
5279
5280 fprintf (file, _("private flags = 0x%lx:"),
5281 elf_elfheader (abfd)->e_flags);
5282
5283 if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5284 fprintf (file, _(" [abiv%ld]"),
5285 elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5286 fputc ('\n', file);
5287 }
5288
5289 return TRUE;
5290 }
5291
5292 /* OFFSET in OPD_SEC specifies a function descriptor. Return the address
5293 of the code entry point, and its section, which must be in the same
5294 object as OPD_SEC. Returns (bfd_vma) -1 on error. */
5295
5296 static bfd_vma
5297 opd_entry_value (asection *opd_sec,
5298 bfd_vma offset,
5299 asection **code_sec,
5300 bfd_vma *code_off,
5301 bfd_boolean in_code_sec)
5302 {
5303 bfd *opd_bfd = opd_sec->owner;
5304 Elf_Internal_Rela *relocs;
5305 Elf_Internal_Rela *lo, *hi, *look;
5306 bfd_vma val;
5307
5308 /* No relocs implies we are linking a --just-symbols object, or looking
5309 at a final linked executable with addr2line or somesuch. */
5310 if (opd_sec->reloc_count == 0)
5311 {
5312 bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5313
5314 if (contents == NULL)
5315 {
5316 if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5317 return (bfd_vma) -1;
5318 ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5319 }
5320
5321 /* PR 17512: file: 64b9dfbb. */
5322 if (offset + 7 >= opd_sec->size || offset + 7 < offset)
5323 return (bfd_vma) -1;
5324
5325 val = bfd_get_64 (opd_bfd, contents + offset);
5326 if (code_sec != NULL)
5327 {
5328 asection *sec, *likely = NULL;
5329
5330 if (in_code_sec)
5331 {
5332 sec = *code_sec;
5333 if (sec->vma <= val
5334 && val < sec->vma + sec->size)
5335 likely = sec;
5336 else
5337 val = -1;
5338 }
5339 else
5340 for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5341 if (sec->vma <= val
5342 && (sec->flags & SEC_LOAD) != 0
5343 && (sec->flags & SEC_ALLOC) != 0)
5344 likely = sec;
5345 if (likely != NULL)
5346 {
5347 *code_sec = likely;
5348 if (code_off != NULL)
5349 *code_off = val - likely->vma;
5350 }
5351 }
5352 return val;
5353 }
5354
5355 BFD_ASSERT (is_ppc64_elf (opd_bfd));
5356
5357 relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5358 if (relocs == NULL)
5359 relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5360 /* PR 17512: file: df8e1fd6. */
5361 if (relocs == NULL)
5362 return (bfd_vma) -1;
5363
5364 /* Go find the opd reloc at the sym address. */
5365 lo = relocs;
5366 hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5367 val = (bfd_vma) -1;
5368 while (lo < hi)
5369 {
5370 look = lo + (hi - lo) / 2;
5371 if (look->r_offset < offset)
5372 lo = look + 1;
5373 else if (look->r_offset > offset)
5374 hi = look;
5375 else
5376 {
5377 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5378
5379 if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5380 && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5381 {
5382 unsigned long symndx = ELF64_R_SYM (look->r_info);
5383 asection *sec = NULL;
5384
5385 if (symndx >= symtab_hdr->sh_info
5386 && elf_sym_hashes (opd_bfd) != NULL)
5387 {
5388 struct elf_link_hash_entry **sym_hashes;
5389 struct elf_link_hash_entry *rh;
5390
5391 sym_hashes = elf_sym_hashes (opd_bfd);
5392 rh = sym_hashes[symndx - symtab_hdr->sh_info];
5393 if (rh != NULL)
5394 {
5395 rh = elf_follow_link (rh);
5396 if (rh->root.type != bfd_link_hash_defined
5397 && rh->root.type != bfd_link_hash_defweak)
5398 break;
5399 if (rh->root.u.def.section->owner == opd_bfd)
5400 {
5401 val = rh->root.u.def.value;
5402 sec = rh->root.u.def.section;
5403 }
5404 }
5405 }
5406
5407 if (sec == NULL)
5408 {
5409 Elf_Internal_Sym *sym;
5410
5411 if (symndx < symtab_hdr->sh_info)
5412 {
5413 sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5414 if (sym == NULL)
5415 {
5416 size_t symcnt = symtab_hdr->sh_info;
5417 sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5418 symcnt, 0,
5419 NULL, NULL, NULL);
5420 if (sym == NULL)
5421 break;
5422 symtab_hdr->contents = (bfd_byte *) sym;
5423 }
5424 sym += symndx;
5425 }
5426 else
5427 {
5428 sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
5429 1, symndx,
5430 NULL, NULL, NULL);
5431 if (sym == NULL)
5432 break;
5433 }
5434 sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5435 if (sec == NULL)
5436 break;
5437 BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5438 val = sym->st_value;
5439 }
5440
5441 val += look->r_addend;
5442 if (code_off != NULL)
5443 *code_off = val;
5444 if (code_sec != NULL)
5445 {
5446 if (in_code_sec && *code_sec != sec)
5447 return -1;
5448 else
5449 *code_sec = sec;
5450 }
5451 if (sec->output_section != NULL)
5452 val += sec->output_section->vma + sec->output_offset;
5453 }
5454 break;
5455 }
5456 }
5457
5458 return val;
5459 }
5460
5461 /* If the ELF symbol SYM might be a function in SEC, return the
5462 function size and set *CODE_OFF to the function's entry point,
5463 otherwise return zero. */
5464
5465 static bfd_size_type
5466 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5467 bfd_vma *code_off)
5468 {
5469 bfd_size_type size;
5470
5471 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5472 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5473 return 0;
5474
5475 size = 0;
5476 if (!(sym->flags & BSF_SYNTHETIC))
5477 size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5478
5479 if (strcmp (sym->section->name, ".opd") == 0)
5480 {
5481 struct _opd_sec_data *opd = get_opd_info (sym->section);
5482 bfd_vma symval = sym->value;
5483
5484 if (opd != NULL
5485 && opd->adjust != NULL
5486 && elf_section_data (sym->section)->relocs != NULL)
5487 {
5488 /* opd_entry_value will use cached relocs that have been
5489 adjusted, but with raw symbols. That means both local
5490 and global symbols need adjusting. */
5491 long adjust = opd->adjust[OPD_NDX (symval)];
5492 if (adjust == -1)
5493 return 0;
5494 symval += adjust;
5495 }
5496
5497 if (opd_entry_value (sym->section, symval,
5498 &sec, code_off, TRUE) == (bfd_vma) -1)
5499 return 0;
5500 /* An old ABI binary with dot-syms has a size of 24 on the .opd
5501 symbol. This size has nothing to do with the code size of the
5502 function, which is what we're supposed to return, but the
5503 code size isn't available without looking up the dot-sym.
5504 However, doing that would be a waste of time particularly
5505 since elf_find_function will look at the dot-sym anyway.
5506 Now, elf_find_function will keep the largest size of any
5507 function sym found at the code address of interest, so return
5508 1 here to avoid it incorrectly caching a larger function size
5509 for a small function. This does mean we return the wrong
5510 size for a new-ABI function of size 24, but all that does is
5511 disable caching for such functions. */
5512 if (size == 24)
5513 size = 1;
5514 }
5515 else
5516 {
5517 if (sym->section != sec)
5518 return 0;
5519 *code_off = sym->value;
5520 }
5521 if (size == 0)
5522 size = 1;
5523 return size;
5524 }
5525
5526 /* Return true if symbol is a strong function defined in an ELFv2
5527 object with st_other localentry bits of zero, ie. its local entry
5528 point coincides with its global entry point. */
5529
5530 static bfd_boolean
5531 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
5532 {
5533 return (h != NULL
5534 && h->type == STT_FUNC
5535 && h->root.type == bfd_link_hash_defined
5536 && (STO_PPC64_LOCAL_MASK & h->other) == 0
5537 && !ppc_elf_hash_entry (h)->non_zero_localentry
5538 && is_ppc64_elf (h->root.u.def.section->owner)
5539 && abiversion (h->root.u.def.section->owner) >= 2);
5540 }
5541
5542 /* Return true if symbol is defined in a regular object file. */
5543
5544 static bfd_boolean
5545 is_static_defined (struct elf_link_hash_entry *h)
5546 {
5547 return ((h->root.type == bfd_link_hash_defined
5548 || h->root.type == bfd_link_hash_defweak)
5549 && h->root.u.def.section != NULL
5550 && h->root.u.def.section->output_section != NULL);
5551 }
5552
5553 /* If FDH is a function descriptor symbol, return the associated code
5554 entry symbol if it is defined. Return NULL otherwise. */
5555
5556 static struct ppc_link_hash_entry *
5557 defined_code_entry (struct ppc_link_hash_entry *fdh)
5558 {
5559 if (fdh->is_func_descriptor)
5560 {
5561 struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
5562 if (fh->elf.root.type == bfd_link_hash_defined
5563 || fh->elf.root.type == bfd_link_hash_defweak)
5564 return fh;
5565 }
5566 return NULL;
5567 }
5568
5569 /* If FH is a function code entry symbol, return the associated
5570 function descriptor symbol if it is defined. Return NULL otherwise. */
5571
5572 static struct ppc_link_hash_entry *
5573 defined_func_desc (struct ppc_link_hash_entry *fh)
5574 {
5575 if (fh->oh != NULL
5576 && fh->oh->is_func_descriptor)
5577 {
5578 struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
5579 if (fdh->elf.root.type == bfd_link_hash_defined
5580 || fdh->elf.root.type == bfd_link_hash_defweak)
5581 return fdh;
5582 }
5583 return NULL;
5584 }
5585
5586 /* Given H is a symbol that satisfies is_static_defined, return the
5587 value in the output file. */
5588
5589 static bfd_vma
5590 defined_sym_val (struct elf_link_hash_entry *h)
5591 {
5592 return (h->root.u.def.section->output_section->vma
5593 + h->root.u.def.section->output_offset
5594 + h->root.u.def.value);
5595 }
5596
5597 /* Return true if H matches __tls_get_addr or one of its variants. */
5598
5599 static bfd_boolean
5600 is_tls_get_addr (struct elf_link_hash_entry *h,
5601 struct ppc_link_hash_table *htab)
5602 {
5603 return (h == &htab->tls_get_addr_fd->elf
5604 || h == &htab->tls_get_addr->elf);
5605 }
5606
5607 static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
5608
5609 /* Garbage collect sections, after first dealing with dot-symbols. */
5610
5611 static bfd_boolean
5612 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5613 {
5614 struct ppc_link_hash_table *htab = ppc_hash_table (info);
5615
5616 if (htab != NULL && htab->need_func_desc_adj)
5617 {
5618 elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
5619 htab->need_func_desc_adj = 0;
5620 }
5621 return bfd_elf_gc_sections (abfd, info);
5622 }
5623
5624 /* Mark all our entry sym sections, both opd and code section. */
5625
5626 static void
5627 ppc64_elf_gc_keep (struct bfd_link_info *info)
5628 {
5629 struct ppc_link_hash_table *htab = ppc_hash_table (info);
5630 struct bfd_sym_chain *sym;
5631
5632 if (htab == NULL)
5633 return;
5634
5635 for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
5636 {
5637 struct ppc_link_hash_entry *eh, *fh;
5638 asection *sec;
5639
5640 eh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym->name,
5641 FALSE, FALSE, TRUE));
5642 if (eh == NULL)
5643 continue;
5644 if (eh->elf.root.type != bfd_link_hash_defined
5645 && eh->elf.root.type != bfd_link_hash_defweak)
5646 continue;
5647
5648 fh = defined_code_entry (eh);
5649 if (fh != NULL)
5650 {
5651 sec = fh->elf.root.u.def.section;
5652 sec->flags |= SEC_KEEP;
5653 }
5654 else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5655 && opd_entry_value (eh->elf.root.u.def.section,
5656 eh->elf.root.u.def.value,
5657 &sec, NULL, FALSE) != (bfd_vma) -1)
5658 sec->flags |= SEC_KEEP;
5659
5660 sec = eh->elf.root.u.def.section;
5661 sec->flags |= SEC_KEEP;
5662 }
5663 }
5664
5665 /* Mark sections containing dynamically referenced symbols. When
5666 building shared libraries, we must assume that any visible symbol is
5667 referenced. */
5668
5669 static bfd_boolean
5670 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
5671 {
5672 struct bfd_link_info *info = (struct bfd_link_info *) inf;
5673 struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
5674 struct ppc_link_hash_entry *fdh;
5675 struct bfd_elf_dynamic_list *d = info->dynamic_list;
5676
5677 /* Dynamic linking info is on the func descriptor sym. */
5678 fdh = defined_func_desc (eh);
5679 if (fdh != NULL)
5680 eh = fdh;
5681
5682 if ((eh->elf.root.type == bfd_link_hash_defined
5683 || eh->elf.root.type == bfd_link_hash_defweak)
5684 && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
5685 || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
5686 && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
5687 && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
5688 && (!bfd_link_executable (info)
5689 || info->gc_keep_exported
5690 || info->export_dynamic
5691 || (eh->elf.dynamic
5692 && d != NULL
5693 && (*d->match) (&d->head, NULL,
5694 eh->elf.root.root.string)))
5695 && (eh->elf.versioned >= versioned
5696 || !bfd_hide_sym_by_version (info->version_info,
5697 eh->elf.root.root.string)))))
5698 {
5699 asection *code_sec;
5700 struct ppc_link_hash_entry *fh;
5701
5702 eh->elf.root.u.def.section->flags |= SEC_KEEP;
5703
5704 /* Function descriptor syms cause the associated
5705 function code sym section to be marked. */
5706 fh = defined_code_entry (eh);
5707 if (fh != NULL)
5708 {
5709 code_sec = fh->elf.root.u.def.section;
5710 code_sec->flags |= SEC_KEEP;
5711 }
5712 else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5713 && opd_entry_value (eh->elf.root.u.def.section,
5714 eh->elf.root.u.def.value,
5715 &code_sec, NULL, FALSE) != (bfd_vma) -1)
5716 code_sec->flags |= SEC_KEEP;
5717 }
5718
5719 return TRUE;
5720 }
5721
5722 /* Return the section that should be marked against GC for a given
5723 relocation. */
5724
5725 static asection *
5726 ppc64_elf_gc_mark_hook (asection *sec,
5727 struct bfd_link_info *info,
5728 Elf_Internal_Rela *rel,
5729 struct elf_link_hash_entry *h,
5730 Elf_Internal_Sym *sym)
5731 {
5732 asection *rsec;
5733
5734 /* Syms return NULL if we're marking .opd, so we avoid marking all
5735 function sections, as all functions are referenced in .opd. */
5736 rsec = NULL;
5737 if (get_opd_info (sec) != NULL)
5738 return rsec;
5739
5740 if (h != NULL)
5741 {
5742 enum elf_ppc64_reloc_type r_type;
5743 struct ppc_link_hash_entry *eh, *fh, *fdh;
5744
5745 r_type = ELF64_R_TYPE (rel->r_info);
5746 switch (r_type)
5747 {
5748 case R_PPC64_GNU_VTINHERIT:
5749 case R_PPC64_GNU_VTENTRY:
5750 break;
5751
5752 default:
5753 switch (h->root.type)
5754 {
5755 case bfd_link_hash_defined:
5756 case bfd_link_hash_defweak:
5757 eh = ppc_elf_hash_entry (h);
5758 fdh = defined_func_desc (eh);
5759 if (fdh != NULL)
5760 {
5761 /* -mcall-aixdesc code references the dot-symbol on
5762 a call reloc. Mark the function descriptor too
5763 against garbage collection. */
5764 fdh->elf.mark = 1;
5765 if (fdh->elf.is_weakalias)
5766 weakdef (&fdh->elf)->mark = 1;
5767 eh = fdh;
5768 }
5769
5770 /* Function descriptor syms cause the associated
5771 function code sym section to be marked. */
5772 fh = defined_code_entry (eh);
5773 if (fh != NULL)
5774 {
5775 /* They also mark their opd section. */
5776 eh->elf.root.u.def.section->gc_mark = 1;
5777
5778 rsec = fh->elf.root.u.def.section;
5779 }
5780 else if (get_opd_info (eh->elf.root.u.def.section) != NULL
5781 && opd_entry_value (eh->elf.root.u.def.section,
5782 eh->elf.root.u.def.value,
5783 &rsec, NULL, FALSE) != (bfd_vma) -1)
5784 eh->elf.root.u.def.section->gc_mark = 1;
5785 else
5786 rsec = h->root.u.def.section;
5787 break;
5788
5789 case bfd_link_hash_common:
5790 rsec = h->root.u.c.p->section;
5791 break;
5792
5793 default:
5794 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
5795 }
5796 }
5797 }
5798 else
5799 {
5800 struct _opd_sec_data *opd;
5801
5802 rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
5803 opd = get_opd_info (rsec);
5804 if (opd != NULL && opd->func_sec != NULL)
5805 {
5806 rsec->gc_mark = 1;
5807
5808 rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
5809 }
5810 }
5811
5812 return rsec;
5813 }
5814
5815 /* The maximum size of .sfpr. */
5816 #define SFPR_MAX (218*4)
5817
5818 struct sfpr_def_parms
5819 {
5820 const char name[12];
5821 unsigned char lo, hi;
5822 bfd_byte *(*write_ent) (bfd *, bfd_byte *, int);
5823 bfd_byte *(*write_tail) (bfd *, bfd_byte *, int);
5824 };
5825
5826 /* Auto-generate _save*, _rest* functions in .sfpr.
5827 If STUB_SEC is non-null, define alias symbols in STUB_SEC
5828 instead. */
5829
5830 static bfd_boolean
5831 sfpr_define (struct bfd_link_info *info,
5832 const struct sfpr_def_parms *parm,
5833 asection *stub_sec)
5834 {
5835 struct ppc_link_hash_table *htab = ppc_hash_table (info);
5836 unsigned int i;
5837 size_t len = strlen (parm->name);
5838 bfd_boolean writing = FALSE;
5839 char sym[16];
5840
5841 if (htab == NULL)
5842 return FALSE;
5843
5844 memcpy (sym, parm->name, len);
5845 sym[len + 2] = 0;
5846
5847 for (i = parm->lo; i <= parm->hi; i++)
5848 {
5849 struct ppc_link_hash_entry *h;
5850
5851 sym[len + 0] = i / 10 + '0';
5852 sym[len + 1] = i % 10 + '0';
5853 h = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym,
5854 writing, TRUE, TRUE));
5855 if (stub_sec != NULL)
5856 {
5857 if (h != NULL
5858 && h->elf.root.type == bfd_link_hash_defined
5859 && h->elf.root.u.def.section == htab->sfpr)
5860 {
5861 struct elf_link_hash_entry *s;
5862 char buf[32];
5863 sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
5864 s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
5865 if (s == NULL)
5866 return FALSE;
5867 if (s->root.type == bfd_link_hash_new)
5868 {
5869 s->root.type = bfd_link_hash_defined;
5870 s->root.u.def.section = stub_sec;
5871 s->root.u.def.value = (stub_sec->size - htab->sfpr->size
5872 + h->elf.root.u.def.value);
5873 s->ref_regular = 1;
5874 s->def_regular = 1;
5875 s->ref_regular_nonweak = 1;
5876 s->forced_local = 1;
5877 s->non_elf = 0;
5878 s->root.linker_def = 1;
5879 }
5880 }
5881 continue;
5882 }
5883 if (h != NULL)
5884 {
5885 h->save_res = 1;
5886 if (!h->elf.def_regular)
5887 {
5888 h->elf.root.type = bfd_link_hash_defined;
5889 h->elf.root.u.def.section = htab->sfpr;
5890 h->elf.root.u.def.value = htab->sfpr->size;
5891 h->elf.type = STT_FUNC;
5892 h->elf.def_regular = 1;
5893 h->elf.non_elf = 0;
5894 _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
5895 writing = TRUE;
5896 if (htab->sfpr->contents == NULL)
5897 {
5898 htab->sfpr->contents
5899 = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
5900 if (htab->sfpr->contents == NULL)
5901 return FALSE;
5902 }
5903 }
5904 }
5905 if (writing)
5906 {
5907 bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
5908 if (i != parm->hi)
5909 p = (*parm->write_ent) (htab->elf.dynobj, p, i);
5910 else
5911 p = (*parm->write_tail) (htab->elf.dynobj, p, i);
5912 htab->sfpr->size = p - htab->sfpr->contents;
5913 }
5914 }
5915
5916 return TRUE;
5917 }
5918
5919 static bfd_byte *
5920 savegpr0 (bfd *abfd, bfd_byte *p, int r)
5921 {
5922 bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5923 return p + 4;
5924 }
5925
5926 static bfd_byte *
5927 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
5928 {
5929 p = savegpr0 (abfd, p, r);
5930 bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
5931 p = p + 4;
5932 bfd_put_32 (abfd, BLR, p);
5933 return p + 4;
5934 }
5935
5936 static bfd_byte *
5937 restgpr0 (bfd *abfd, bfd_byte *p, int r)
5938 {
5939 bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5940 return p + 4;
5941 }
5942
5943 static bfd_byte *
5944 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
5945 {
5946 bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
5947 p = p + 4;
5948 p = restgpr0 (abfd, p, r);
5949 bfd_put_32 (abfd, MTLR_R0, p);
5950 p = p + 4;
5951 if (r == 29)
5952 {
5953 p = restgpr0 (abfd, p, 30);
5954 p = restgpr0 (abfd, p, 31);
5955 }
5956 bfd_put_32 (abfd, BLR, p);
5957 return p + 4;
5958 }
5959
5960 static bfd_byte *
5961 savegpr1 (bfd *abfd, bfd_byte *p, int r)
5962 {
5963 bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5964 return p + 4;
5965 }
5966
5967 static bfd_byte *
5968 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
5969 {
5970 p = savegpr1 (abfd, p, r);
5971 bfd_put_32 (abfd, BLR, p);
5972 return p + 4;
5973 }
5974
5975 static bfd_byte *
5976 restgpr1 (bfd *abfd, bfd_byte *p, int r)
5977 {
5978 bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5979 return p + 4;
5980 }
5981
5982 static bfd_byte *
5983 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
5984 {
5985 p = restgpr1 (abfd, p, r);
5986 bfd_put_32 (abfd, BLR, p);
5987 return p + 4;
5988 }
5989
5990 static bfd_byte *
5991 savefpr (bfd *abfd, bfd_byte *p, int r)
5992 {
5993 bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
5994 return p + 4;
5995 }
5996
5997 static bfd_byte *
5998 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
5999 {
6000 p = savefpr (abfd, p, r);
6001 bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
6002 p = p + 4;
6003 bfd_put_32 (abfd, BLR, p);
6004 return p + 4;
6005 }
6006
6007 static bfd_byte *
6008 restfpr (bfd *abfd, bfd_byte *p, int r)
6009 {
6010 bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6011 return p + 4;
6012 }
6013
6014 static bfd_byte *
6015 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6016 {
6017 bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
6018 p = p + 4;
6019 p = restfpr (abfd, p, r);
6020 bfd_put_32 (abfd, MTLR_R0, p);
6021 p = p + 4;
6022 if (r == 29)
6023 {
6024 p = restfpr (abfd, p, 30);
6025 p = restfpr (abfd, p, 31);
6026 }
6027 bfd_put_32 (abfd, BLR, p);
6028 return p + 4;
6029 }
6030
6031 static bfd_byte *
6032 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6033 {
6034 p = savefpr (abfd, p, r);
6035 bfd_put_32 (abfd, BLR, p);
6036 return p + 4;
6037 }
6038
6039 static bfd_byte *
6040 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6041 {
6042 p = restfpr (abfd, p, r);
6043 bfd_put_32 (abfd, BLR, p);
6044 return p + 4;
6045 }
6046
6047 static bfd_byte *
6048 savevr (bfd *abfd, bfd_byte *p, int r)
6049 {
6050 bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6051 p = p + 4;
6052 bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6053 return p + 4;
6054 }
6055
6056 static bfd_byte *
6057 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6058 {
6059 p = savevr (abfd, p, r);
6060 bfd_put_32 (abfd, BLR, p);
6061 return p + 4;
6062 }
6063
6064 static bfd_byte *
6065 restvr (bfd *abfd, bfd_byte *p, int r)
6066 {
6067 bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6068 p = p + 4;
6069 bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6070 return p + 4;
6071 }
6072
6073 static bfd_byte *
6074 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6075 {
6076 p = restvr (abfd, p, r);
6077 bfd_put_32 (abfd, BLR, p);
6078 return p + 4;
6079 }
6080
6081 /* Called via elf_link_hash_traverse to transfer dynamic linking
6082 information on function code symbol entries to their corresponding
6083 function descriptor symbol entries. */
6084
6085 static bfd_boolean
6086 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6087 {
6088 struct bfd_link_info *info;
6089 struct ppc_link_hash_table *htab;
6090 struct ppc_link_hash_entry *fh;
6091 struct ppc_link_hash_entry *fdh;
6092 bfd_boolean force_local;
6093
6094 fh = ppc_elf_hash_entry (h);
6095 if (fh->elf.root.type == bfd_link_hash_indirect)
6096 return TRUE;
6097
6098 if (!fh->is_func)
6099 return TRUE;
6100
6101 if (fh->elf.root.root.string[0] != '.'
6102 || fh->elf.root.root.string[1] == '\0')
6103 return TRUE;
6104
6105 info = inf;
6106 htab = ppc_hash_table (info);
6107 if (htab == NULL)
6108 return FALSE;
6109
6110 /* Find the corresponding function descriptor symbol. */
6111 fdh = lookup_fdh (fh, htab);
6112
6113 /* Resolve undefined references to dot-symbols as the value
6114 in the function descriptor, if we have one in a regular object.
6115 This is to satisfy cases like ".quad .foo". Calls to functions
6116 in dynamic objects are handled elsewhere. */
6117 if ((fh->elf.root.type == bfd_link_hash_undefined
6118 || fh->elf.root.type == bfd_link_hash_undefweak)
6119 && (fdh->elf.root.type == bfd_link_hash_defined
6120 || fdh->elf.root.type == bfd_link_hash_defweak)
6121 && get_opd_info (fdh->elf.root.u.def.section) != NULL
6122 && opd_entry_value (fdh->elf.root.u.def.section,
6123 fdh->elf.root.u.def.value,
6124 &fh->elf.root.u.def.section,
6125 &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6126 {
6127 fh->elf.root.type = fdh->elf.root.type;
6128 fh->elf.forced_local = 1;
6129 fh->elf.def_regular = fdh->elf.def_regular;
6130 fh->elf.def_dynamic = fdh->elf.def_dynamic;
6131 }
6132
6133 if (!fh->elf.dynamic)
6134 {
6135 struct plt_entry *ent;
6136
6137 for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6138 if (ent->plt.refcount > 0)
6139 break;
6140 if (ent == NULL)
6141 return TRUE;
6142 }
6143
6144 /* Create a descriptor as undefined if necessary. */
6145 if (fdh == NULL
6146 && !bfd_link_executable (info)
6147 && (fh->elf.root.type == bfd_link_hash_undefined
6148 || fh->elf.root.type == bfd_link_hash_undefweak))
6149 {
6150 fdh = make_fdh (info, fh);
6151 if (fdh == NULL)
6152 return FALSE;
6153 }
6154
6155 /* We can't support overriding of symbols on a fake descriptor. */
6156 if (fdh != NULL
6157 && fdh->fake
6158 && (fh->elf.root.type == bfd_link_hash_defined
6159 || fh->elf.root.type == bfd_link_hash_defweak))
6160 _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6161
6162 /* Transfer dynamic linking information to the function descriptor. */
6163 if (fdh != NULL)
6164 {
6165 fdh->elf.ref_regular |= fh->elf.ref_regular;
6166 fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6167 fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6168 fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6169 fdh->elf.dynamic |= fh->elf.dynamic;
6170 fdh->elf.needs_plt |= (fh->elf.needs_plt
6171 || fh->elf.type == STT_FUNC
6172 || fh->elf.type == STT_GNU_IFUNC);
6173 move_plt_plist (fh, fdh);
6174
6175 if (!fdh->elf.forced_local
6176 && fh->elf.dynindx != -1)
6177 if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6178 return FALSE;
6179 }
6180
6181 /* Now that the info is on the function descriptor, clear the
6182 function code sym info. Any function code syms for which we
6183 don't have a definition in a regular file, we force local.
6184 This prevents a shared library from exporting syms that have
6185 been imported from another library. Function code syms that
6186 are really in the library we must leave global to prevent the
6187 linker dragging in a definition from a static library. */
6188 force_local = (!fh->elf.def_regular
6189 || fdh == NULL
6190 || !fdh->elf.def_regular
6191 || fdh->elf.forced_local);
6192 _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6193
6194 return TRUE;
6195 }
6196
6197 static const struct sfpr_def_parms save_res_funcs[] =
6198 {
6199 { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6200 { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6201 { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6202 { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6203 { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6204 { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6205 { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6206 { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6207 { "._savef", 14, 31, savefpr, savefpr1_tail },
6208 { "._restf", 14, 31, restfpr, restfpr1_tail },
6209 { "_savevr_", 20, 31, savevr, savevr_tail },
6210 { "_restvr_", 20, 31, restvr, restvr_tail }
6211 };
6212
6213 /* Called near the start of bfd_elf_size_dynamic_sections. We use
6214 this hook to a) provide some gcc support functions, and b) transfer
6215 dynamic linking information gathered so far on function code symbol
6216 entries, to their corresponding function descriptor symbol entries. */
6217
6218 static bfd_boolean
6219 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6220 struct bfd_link_info *info)
6221 {
6222 struct ppc_link_hash_table *htab;
6223
6224 htab = ppc_hash_table (info);
6225 if (htab == NULL)
6226 return FALSE;
6227
6228 /* Provide any missing _save* and _rest* functions. */
6229 if (htab->sfpr != NULL)
6230 {
6231 unsigned int i;
6232
6233 htab->sfpr->size = 0;
6234 for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
6235 if (!sfpr_define (info, &save_res_funcs[i], NULL))
6236 return FALSE;
6237 if (htab->sfpr->size == 0)
6238 htab->sfpr->flags |= SEC_EXCLUDE;
6239 }
6240
6241 if (bfd_link_relocatable (info))
6242 return TRUE;
6243
6244 if (htab->elf.hgot != NULL)
6245 {
6246 _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6247 /* Make .TOC. defined so as to prevent it being made dynamic.
6248 The wrong value here is fixed later in ppc64_elf_set_toc. */
6249 if (!htab->elf.hgot->def_regular
6250 || htab->elf.hgot->root.type != bfd_link_hash_defined)
6251 {
6252 htab->elf.hgot->root.type = bfd_link_hash_defined;
6253 htab->elf.hgot->root.u.def.value = 0;
6254 htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
6255 htab->elf.hgot->def_regular = 1;
6256 htab->elf.hgot->root.linker_def = 1;
6257 }
6258 htab->elf.hgot->type = STT_OBJECT;
6259 htab->elf.hgot->other
6260 = (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
6261 }
6262
6263 if (htab->need_func_desc_adj)
6264 {
6265 elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6266 htab->need_func_desc_adj = 0;
6267 }
6268
6269 return TRUE;
6270 }
6271
6272 /* Find dynamic relocs for H that apply to read-only sections. */
6273
6274 static asection *
6275 readonly_dynrelocs (struct elf_link_hash_entry *h)
6276 {
6277 struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
6278 struct elf_dyn_relocs *p;
6279
6280 for (p = eh->dyn_relocs; p != NULL; p = p->next)
6281 {
6282 asection *s = p->sec->output_section;
6283
6284 if (s != NULL && (s->flags & SEC_READONLY) != 0)
6285 return p->sec;
6286 }
6287 return NULL;
6288 }
6289
6290 /* Return true if we have dynamic relocs against H or any of its weak
6291 aliases, that apply to read-only sections. Cannot be used after
6292 size_dynamic_sections. */
6293
6294 static bfd_boolean
6295 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
6296 {
6297 struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
6298 do
6299 {
6300 if (readonly_dynrelocs (&eh->elf))
6301 return TRUE;
6302 eh = ppc_elf_hash_entry (eh->elf.u.alias);
6303 }
6304 while (eh != NULL && &eh->elf != h);
6305
6306 return FALSE;
6307 }
6308
6309 /* Return whether EH has pc-relative dynamic relocs. */
6310
6311 static bfd_boolean
6312 pc_dynrelocs (struct ppc_link_hash_entry *eh)
6313 {
6314 struct elf_dyn_relocs *p;
6315
6316 for (p = eh->dyn_relocs; p != NULL; p = p->next)
6317 if (p->pc_count != 0)
6318 return TRUE;
6319 return FALSE;
6320 }
6321
6322 /* Return true if a global entry stub will be created for H. Valid
6323 for ELFv2 before plt entries have been allocated. */
6324
6325 static bfd_boolean
6326 global_entry_stub (struct elf_link_hash_entry *h)
6327 {
6328 struct plt_entry *pent;
6329
6330 if (!h->pointer_equality_needed
6331 || h->def_regular)
6332 return FALSE;
6333
6334 for (pent = h->plt.plist; pent != NULL; pent = pent->next)
6335 if (pent->plt.refcount > 0
6336 && pent->addend == 0)
6337 return TRUE;
6338
6339 return FALSE;
6340 }
6341
6342 /* Adjust a symbol defined by a dynamic object and referenced by a
6343 regular object. The current definition is in some section of the
6344 dynamic object, but we're not including those sections. We have to
6345 change the definition to something the rest of the link can
6346 understand. */
6347
6348 static bfd_boolean
6349 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6350 struct elf_link_hash_entry *h)
6351 {
6352 struct ppc_link_hash_table *htab;
6353 asection *s, *srel;
6354
6355 htab = ppc_hash_table (info);
6356 if (htab == NULL)
6357 return FALSE;
6358
6359 /* Deal with function syms. */
6360 if (h->type == STT_FUNC
6361 || h->type == STT_GNU_IFUNC
6362 || h->needs_plt)
6363 {
6364 bfd_boolean local = (ppc_elf_hash_entry (h)->save_res
6365 || SYMBOL_CALLS_LOCAL (info, h)
6366 || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
6367 /* Discard dyn_relocs when non-pic if we've decided that a
6368 function symbol is local and not an ifunc. We keep dynamic
6369 relocs for ifuncs when local rather than always emitting a
6370 plt call stub for them and defining the symbol on the call
6371 stub. We can't do that for ELFv1 anyway (a function symbol
6372 is defined on a descriptor, not code) and it can be faster at
6373 run-time due to not needing to bounce through a stub. The
6374 dyn_relocs for ifuncs will be applied even in a static
6375 executable. */
6376 if (!bfd_link_pic (info)
6377 && h->type != STT_GNU_IFUNC
6378 && local)
6379 ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6380
6381 /* Clear procedure linkage table information for any symbol that
6382 won't need a .plt entry. */
6383 struct plt_entry *ent;
6384 for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6385 if (ent->plt.refcount > 0)
6386 break;
6387 if (ent == NULL
6388 || (h->type != STT_GNU_IFUNC
6389 && local
6390 && (htab->can_convert_all_inline_plt
6391 || (ppc_elf_hash_entry (h)->tls_mask
6392 & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
6393 {
6394 h->plt.plist = NULL;
6395 h->needs_plt = 0;
6396 h->pointer_equality_needed = 0;
6397 }
6398 else if (abiversion (info->output_bfd) >= 2)
6399 {
6400 /* Taking a function's address in a read/write section
6401 doesn't require us to define the function symbol in the
6402 executable on a global entry stub. A dynamic reloc can
6403 be used instead. The reason we prefer a few more dynamic
6404 relocs is that calling via a global entry stub costs a
6405 few more instructions, and pointer_equality_needed causes
6406 extra work in ld.so when resolving these symbols. */
6407 if (global_entry_stub (h))
6408 {
6409 if (!readonly_dynrelocs (h))
6410 {
6411 h->pointer_equality_needed = 0;
6412 /* If we haven't seen a branch reloc and the symbol
6413 isn't an ifunc then we don't need a plt entry. */
6414 if (!h->needs_plt)
6415 h->plt.plist = NULL;
6416 }
6417 else if (!bfd_link_pic (info))
6418 /* We are going to be defining the function symbol on the
6419 plt stub, so no dyn_relocs needed when non-pic. */
6420 ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6421 }
6422
6423 /* ELFv2 function symbols can't have copy relocs. */
6424 return TRUE;
6425 }
6426 else if (!h->needs_plt
6427 && !readonly_dynrelocs (h))
6428 {
6429 /* If we haven't seen a branch reloc and the symbol isn't an
6430 ifunc then we don't need a plt entry. */
6431 h->plt.plist = NULL;
6432 h->pointer_equality_needed = 0;
6433 return TRUE;
6434 }
6435 }
6436 else
6437 h->plt.plist = NULL;
6438
6439 /* If this is a weak symbol, and there is a real definition, the
6440 processor independent code will have arranged for us to see the
6441 real definition first, and we can just use the same value. */
6442 if (h->is_weakalias)
6443 {
6444 struct elf_link_hash_entry *def = weakdef (h);
6445 BFD_ASSERT (def->root.type == bfd_link_hash_defined);
6446 h->root.u.def.section = def->root.u.def.section;
6447 h->root.u.def.value = def->root.u.def.value;
6448 if (def->root.u.def.section == htab->elf.sdynbss
6449 || def->root.u.def.section == htab->elf.sdynrelro)
6450 ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6451 return TRUE;
6452 }
6453
6454 /* If we are creating a shared library, we must presume that the
6455 only references to the symbol are via the global offset table.
6456 For such cases we need not do anything here; the relocations will
6457 be handled correctly by relocate_section. */
6458 if (!bfd_link_executable (info))
6459 return TRUE;
6460
6461 /* If there are no references to this symbol that do not use the
6462 GOT, we don't need to generate a copy reloc. */
6463 if (!h->non_got_ref)
6464 return TRUE;
6465
6466 /* Don't generate a copy reloc for symbols defined in the executable. */
6467 if (!h->def_dynamic || !h->ref_regular || h->def_regular
6468
6469 /* If -z nocopyreloc was given, don't generate them either. */
6470 || info->nocopyreloc
6471
6472 /* If we don't find any dynamic relocs in read-only sections, then
6473 we'll be keeping the dynamic relocs and avoiding the copy reloc. */
6474 || (ELIMINATE_COPY_RELOCS
6475 && !h->needs_copy
6476 && !alias_readonly_dynrelocs (h))
6477
6478 /* Protected variables do not work with .dynbss. The copy in
6479 .dynbss won't be used by the shared library with the protected
6480 definition for the variable. Text relocations are preferable
6481 to an incorrect program. */
6482 || h->protected_def)
6483 return TRUE;
6484
6485 if (h->type == STT_FUNC
6486 || h->type == STT_GNU_IFUNC)
6487 {
6488 /* .dynbss copies of function symbols only work if we have
6489 ELFv1 dot-symbols. ELFv1 compilers since 2004 default to not
6490 use dot-symbols and set the function symbol size to the text
6491 size of the function rather than the size of the descriptor.
6492 That's wrong for copying a descriptor. */
6493 if (ppc_elf_hash_entry (h)->oh == NULL
6494 || !(h->size == 24 || h->size == 16))
6495 return TRUE;
6496
6497 /* We should never get here, but unfortunately there are old
6498 versions of gcc (circa gcc-3.2) that improperly for the
6499 ELFv1 ABI put initialized function pointers, vtable refs and
6500 suchlike in read-only sections. Allow them to proceed, but
6501 warn that this might break at runtime. */
6502 info->callbacks->einfo
6503 (_("%P: copy reloc against `%pT' requires lazy plt linking; "
6504 "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6505 h->root.root.string);
6506 }
6507
6508 /* This is a reference to a symbol defined by a dynamic object which
6509 is not a function. */
6510
6511 /* We must allocate the symbol in our .dynbss section, which will
6512 become part of the .bss section of the executable. There will be
6513 an entry for this symbol in the .dynsym section. The dynamic
6514 object will contain position independent code, so all references
6515 from the dynamic object to this symbol will go through the global
6516 offset table. The dynamic linker will use the .dynsym entry to
6517 determine the address it must put in the global offset table, so
6518 both the dynamic object and the regular object will refer to the
6519 same memory location for the variable. */
6520 if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
6521 {
6522 s = htab->elf.sdynrelro;
6523 srel = htab->elf.sreldynrelro;
6524 }
6525 else
6526 {
6527 s = htab->elf.sdynbss;
6528 srel = htab->elf.srelbss;
6529 }
6530 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6531 {
6532 /* We must generate a R_PPC64_COPY reloc to tell the dynamic
6533 linker to copy the initial value out of the dynamic object
6534 and into the runtime process image. */
6535 srel->size += sizeof (Elf64_External_Rela);
6536 h->needs_copy = 1;
6537 }
6538
6539 /* We no longer want dyn_relocs. */
6540 ppc_elf_hash_entry (h)->dyn_relocs = NULL;
6541 return _bfd_elf_adjust_dynamic_copy (info, h, s);
6542 }
6543
6544 /* If given a function descriptor symbol, hide both the function code
6545 sym and the descriptor. */
6546 static void
6547 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6548 struct elf_link_hash_entry *h,
6549 bfd_boolean force_local)
6550 {
6551 struct ppc_link_hash_entry *eh;
6552 _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6553
6554 if (ppc_hash_table (info) == NULL)
6555 return;
6556
6557 eh = ppc_elf_hash_entry (h);
6558 if (eh->is_func_descriptor)
6559 {
6560 struct ppc_link_hash_entry *fh = eh->oh;
6561
6562 if (fh == NULL)
6563 {
6564 const char *p, *q;
6565 struct elf_link_hash_table *htab = elf_hash_table (info);
6566 char save;
6567
6568 /* We aren't supposed to use alloca in BFD because on
6569 systems which do not have alloca the version in libiberty
6570 calls xmalloc, which might cause the program to crash
6571 when it runs out of memory. This function doesn't have a
6572 return status, so there's no way to gracefully return an
6573 error. So cheat. We know that string[-1] can be safely
6574 accessed; It's either a string in an ELF string table,
6575 or allocated in an objalloc structure. */
6576
6577 p = eh->elf.root.root.string - 1;
6578 save = *p;
6579 *(char *) p = '.';
6580 fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6581 FALSE, FALSE));
6582 *(char *) p = save;
6583
6584 /* Unfortunately, if it so happens that the string we were
6585 looking for was allocated immediately before this string,
6586 then we overwrote the string terminator. That's the only
6587 reason the lookup should fail. */
6588 if (fh == NULL)
6589 {
6590 q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6591 while (q >= eh->elf.root.root.string && *q == *p)
6592 --q, --p;
6593 if (q < eh->elf.root.root.string && *p == '.')
6594 fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE,
6595 FALSE, FALSE));
6596 }
6597 if (fh != NULL)
6598 {
6599 eh->oh = fh;
6600 fh->oh = eh;
6601 }
6602 }
6603 if (fh != NULL)
6604 _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6605 }
6606 }
6607
6608 static bfd_boolean
6609 get_sym_h (struct elf_link_hash_entry **hp,
6610 Elf_Internal_Sym **symp,
6611 asection **symsecp,
6612 unsigned char **tls_maskp,
6613 Elf_Internal_Sym **locsymsp,
6614 unsigned long r_symndx,
6615 bfd *ibfd)
6616 {
6617 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
6618
6619 if (r_symndx >= symtab_hdr->sh_info)
6620 {
6621 struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
6622 struct elf_link_hash_entry *h;
6623
6624 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6625 h = elf_follow_link (h);
6626
6627 if (hp != NULL)
6628 *hp = h;
6629
6630 if (symp != NULL)
6631 *symp = NULL;
6632
6633 if (symsecp != NULL)
6634 {
6635 asection *symsec = NULL;
6636 if (h->root.type == bfd_link_hash_defined
6637 || h->root.type == bfd_link_hash_defweak)
6638 symsec = h->root.u.def.section;
6639 *symsecp = symsec;
6640 }
6641
6642 if (tls_maskp != NULL)
6643 *tls_maskp = &ppc_elf_hash_entry (h)->tls_mask;
6644 }
6645 else
6646 {
6647 Elf_Internal_Sym *sym;
6648 Elf_Internal_Sym *locsyms = *locsymsp;
6649
6650 if (locsyms == NULL)
6651 {
6652 locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6653 if (locsyms == NULL)
6654 locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
6655 symtab_hdr->sh_info,
6656 0, NULL, NULL, NULL);
6657 if (locsyms == NULL)
6658 return FALSE;
6659 *locsymsp = locsyms;
6660 }
6661 sym = locsyms + r_symndx;
6662
6663 if (hp != NULL)
6664 *hp = NULL;
6665
6666 if (symp != NULL)
6667 *symp = sym;
6668
6669 if (symsecp != NULL)
6670 *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
6671
6672 if (tls_maskp != NULL)
6673 {
6674 struct got_entry **lgot_ents;
6675 unsigned char *tls_mask;
6676
6677 tls_mask = NULL;
6678 lgot_ents = elf_local_got_ents (ibfd);
6679 if (lgot_ents != NULL)
6680 {
6681 struct plt_entry **local_plt = (struct plt_entry **)
6682 (lgot_ents + symtab_hdr->sh_info);
6683 unsigned char *lgot_masks = (unsigned char *)
6684 (local_plt + symtab_hdr->sh_info);
6685 tls_mask = &lgot_masks[r_symndx];
6686 }
6687 *tls_maskp = tls_mask;
6688 }
6689 }
6690 return TRUE;
6691 }
6692
6693 /* Returns TLS_MASKP for the given REL symbol. Function return is 0 on
6694 error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
6695 type suitable for optimization, and 1 otherwise. */
6696
6697 static int
6698 get_tls_mask (unsigned char **tls_maskp,
6699 unsigned long *toc_symndx,
6700 bfd_vma *toc_addend,
6701 Elf_Internal_Sym **locsymsp,
6702 const Elf_Internal_Rela *rel,
6703 bfd *ibfd)
6704 {
6705 unsigned long r_symndx;
6706 int next_r;
6707 struct elf_link_hash_entry *h;
6708 Elf_Internal_Sym *sym;
6709 asection *sec;
6710 bfd_vma off;
6711
6712 r_symndx = ELF64_R_SYM (rel->r_info);
6713 if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6714 return 0;
6715
6716 if ((*tls_maskp != NULL
6717 && (**tls_maskp & TLS_TLS) != 0
6718 && **tls_maskp != (TLS_TLS | TLS_MARK))
6719 || sec == NULL
6720 || ppc64_elf_section_data (sec) == NULL
6721 || ppc64_elf_section_data (sec)->sec_type != sec_toc)
6722 return 1;
6723
6724 /* Look inside a TOC section too. */
6725 if (h != NULL)
6726 {
6727 BFD_ASSERT (h->root.type == bfd_link_hash_defined);
6728 off = h->root.u.def.value;
6729 }
6730 else
6731 off = sym->st_value;
6732 off += rel->r_addend;
6733 BFD_ASSERT (off % 8 == 0);
6734 r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
6735 next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
6736 if (toc_symndx != NULL)
6737 *toc_symndx = r_symndx;
6738 if (toc_addend != NULL)
6739 *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
6740 if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
6741 return 0;
6742 if ((h == NULL || is_static_defined (h))
6743 && (next_r == -1 || next_r == -2))
6744 return 1 - next_r;
6745 return 1;
6746 }
6747
6748 /* Find (or create) an entry in the tocsave hash table. */
6749
6750 static struct tocsave_entry *
6751 tocsave_find (struct ppc_link_hash_table *htab,
6752 enum insert_option insert,
6753 Elf_Internal_Sym **local_syms,
6754 const Elf_Internal_Rela *irela,
6755 bfd *ibfd)
6756 {
6757 unsigned long r_indx;
6758 struct elf_link_hash_entry *h;
6759 Elf_Internal_Sym *sym;
6760 struct tocsave_entry ent, *p;
6761 hashval_t hash;
6762 struct tocsave_entry **slot;
6763
6764 r_indx = ELF64_R_SYM (irela->r_info);
6765 if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
6766 return NULL;
6767 if (ent.sec == NULL || ent.sec->output_section == NULL)
6768 {
6769 _bfd_error_handler
6770 (_("%pB: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
6771 return NULL;
6772 }
6773
6774 if (h != NULL)
6775 ent.offset = h->root.u.def.value;
6776 else
6777 ent.offset = sym->st_value;
6778 ent.offset += irela->r_addend;
6779
6780 hash = tocsave_htab_hash (&ent);
6781 slot = ((struct tocsave_entry **)
6782 htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
6783 if (slot == NULL)
6784 return NULL;
6785
6786 if (*slot == NULL)
6787 {
6788 p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
6789 if (p == NULL)
6790 return NULL;
6791 *p = ent;
6792 *slot = p;
6793 }
6794 return *slot;
6795 }
6796
6797 /* Adjust all global syms defined in opd sections. In gcc generated
6798 code for the old ABI, these will already have been done. */
6799
6800 static bfd_boolean
6801 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
6802 {
6803 struct ppc_link_hash_entry *eh;
6804 asection *sym_sec;
6805 struct _opd_sec_data *opd;
6806
6807 if (h->root.type == bfd_link_hash_indirect)
6808 return TRUE;
6809
6810 if (h->root.type != bfd_link_hash_defined
6811 && h->root.type != bfd_link_hash_defweak)
6812 return TRUE;
6813
6814 eh = ppc_elf_hash_entry (h);
6815 if (eh->adjust_done)
6816 return TRUE;
6817
6818 sym_sec = eh->elf.root.u.def.section;
6819 opd = get_opd_info (sym_sec);
6820 if (opd != NULL && opd->adjust != NULL)
6821 {
6822 long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
6823 if (adjust == -1)
6824 {
6825 /* This entry has been deleted. */
6826 asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
6827 if (dsec == NULL)
6828 {
6829 for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
6830 if (discarded_section (dsec))
6831 {
6832 ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
6833 break;
6834 }
6835 }
6836 eh->elf.root.u.def.value = 0;
6837 eh->elf.root.u.def.section = dsec;
6838 }
6839 else
6840 eh->elf.root.u.def.value += adjust;
6841 eh->adjust_done = 1;
6842 }
6843 return TRUE;
6844 }
6845
6846 /* Handles decrementing dynamic reloc counts for the reloc specified by
6847 R_INFO in section SEC. If LOCAL_SYMS is NULL, then H and SYM
6848 have already been determined. */
6849
6850 static bfd_boolean
6851 dec_dynrel_count (bfd_vma r_info,
6852 asection *sec,
6853 struct bfd_link_info *info,
6854 Elf_Internal_Sym **local_syms,
6855 struct elf_link_hash_entry *h,
6856 Elf_Internal_Sym *sym)
6857 {
6858 enum elf_ppc64_reloc_type r_type;
6859 asection *sym_sec = NULL;
6860
6861 /* Can this reloc be dynamic? This switch, and later tests here
6862 should be kept in sync with the code in check_relocs. */
6863 r_type = ELF64_R_TYPE (r_info);
6864 switch (r_type)
6865 {
6866 default:
6867 return TRUE;
6868
6869 case R_PPC64_TOC16:
6870 case R_PPC64_TOC16_DS:
6871 case R_PPC64_TOC16_LO:
6872 case R_PPC64_TOC16_HI:
6873 case R_PPC64_TOC16_HA:
6874 case R_PPC64_TOC16_LO_DS:
6875 if (h == NULL)
6876 return TRUE;
6877 break;
6878
6879 case R_PPC64_TPREL16:
6880 case R_PPC64_TPREL16_LO:
6881 case R_PPC64_TPREL16_HI:
6882 case R_PPC64_TPREL16_HA:
6883 case R_PPC64_TPREL16_DS:
6884 case R_PPC64_TPREL16_LO_DS:
6885 case R_PPC64_TPREL16_HIGH:
6886 case R_PPC64_TPREL16_HIGHA:
6887 case R_PPC64_TPREL16_HIGHER:
6888 case R_PPC64_TPREL16_HIGHERA:
6889 case R_PPC64_TPREL16_HIGHEST:
6890 case R_PPC64_TPREL16_HIGHESTA:
6891 case R_PPC64_TPREL64:
6892 case R_PPC64_TPREL34:
6893 case R_PPC64_DTPMOD64:
6894 case R_PPC64_DTPREL64:
6895 case R_PPC64_ADDR64:
6896 case R_PPC64_REL30:
6897 case R_PPC64_REL32:
6898 case R_PPC64_REL64:
6899 case R_PPC64_ADDR14:
6900 case R_PPC64_ADDR14_BRNTAKEN:
6901 case R_PPC64_ADDR14_BRTAKEN:
6902 case R_PPC64_ADDR16:
6903 case R_PPC64_ADDR16_DS:
6904 case R_PPC64_ADDR16_HA:
6905 case R_PPC64_ADDR16_HI:
6906 case R_PPC64_ADDR16_HIGH:
6907 case R_PPC64_ADDR16_HIGHA:
6908 case R_PPC64_ADDR16_HIGHER:
6909 case R_PPC64_ADDR16_HIGHERA:
6910 case R_PPC64_ADDR16_HIGHEST:
6911 case R_PPC64_ADDR16_HIGHESTA:
6912 case R_PPC64_ADDR16_LO:
6913 case R_PPC64_ADDR16_LO_DS:
6914 case R_PPC64_ADDR24:
6915 case R_PPC64_ADDR32:
6916 case R_PPC64_UADDR16:
6917 case R_PPC64_UADDR32:
6918 case R_PPC64_UADDR64:
6919 case R_PPC64_TOC:
6920 case R_PPC64_D34:
6921 case R_PPC64_D34_LO:
6922 case R_PPC64_D34_HI30:
6923 case R_PPC64_D34_HA30:
6924 case R_PPC64_ADDR16_HIGHER34:
6925 case R_PPC64_ADDR16_HIGHERA34:
6926 case R_PPC64_ADDR16_HIGHEST34:
6927 case R_PPC64_ADDR16_HIGHESTA34:
6928 case R_PPC64_D28:
6929 break;
6930 }
6931
6932 if (local_syms != NULL)
6933 {
6934 unsigned long r_symndx;
6935 bfd *ibfd = sec->owner;
6936
6937 r_symndx = ELF64_R_SYM (r_info);
6938 if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
6939 return FALSE;
6940 }
6941
6942 if ((h != NULL
6943 && (h->root.type == bfd_link_hash_defweak
6944 || !h->def_regular))
6945 || (h != NULL
6946 && !bfd_link_executable (info)
6947 && !SYMBOLIC_BIND (info, h))
6948 || (bfd_link_pic (info)
6949 && must_be_dyn_reloc (info, r_type))
6950 || (!bfd_link_pic (info)
6951 && (h != NULL
6952 ? h->type == STT_GNU_IFUNC
6953 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
6954 ;
6955 else
6956 return TRUE;
6957
6958 if (h != NULL)
6959 {
6960 struct elf_dyn_relocs *p;
6961 struct elf_dyn_relocs **pp;
6962 pp = &ppc_elf_hash_entry (h)->dyn_relocs;
6963
6964 /* elf_gc_sweep may have already removed all dyn relocs associated
6965 with local syms for a given section. Also, symbol flags are
6966 changed by elf_gc_sweep_symbol, confusing the test above. Don't
6967 report a dynreloc miscount. */
6968 if (*pp == NULL && info->gc_sections)
6969 return TRUE;
6970
6971 while ((p = *pp) != NULL)
6972 {
6973 if (p->sec == sec)
6974 {
6975 if (!must_be_dyn_reloc (info, r_type))
6976 p->pc_count -= 1;
6977 p->count -= 1;
6978 if (p->count == 0)
6979 *pp = p->next;
6980 return TRUE;
6981 }
6982 pp = &p->next;
6983 }
6984 }
6985 else
6986 {
6987 struct ppc_dyn_relocs *p;
6988 struct ppc_dyn_relocs **pp;
6989 void *vpp;
6990 bfd_boolean is_ifunc;
6991
6992 if (local_syms == NULL)
6993 sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
6994 if (sym_sec == NULL)
6995 sym_sec = sec;
6996
6997 vpp = &elf_section_data (sym_sec)->local_dynrel;
6998 pp = (struct ppc_dyn_relocs **) vpp;
6999
7000 if (*pp == NULL && info->gc_sections)
7001 return TRUE;
7002
7003 is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
7004 while ((p = *pp) != NULL)
7005 {
7006 if (p->sec == sec && p->ifunc == is_ifunc)
7007 {
7008 p->count -= 1;
7009 if (p->count == 0)
7010 *pp = p->next;
7011 return TRUE;
7012 }
7013 pp = &p->next;
7014 }
7015 }
7016
7017 /* xgettext:c-format */
7018 _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
7019 sec->owner, sec);
7020 bfd_set_error (bfd_error_bad_value);
7021 return FALSE;
7022 }
7023
7024 /* Remove unused Official Procedure Descriptor entries. Currently we
7025 only remove those associated with functions in discarded link-once
7026 sections, or weakly defined functions that have been overridden. It
7027 would be possible to remove many more entries for statically linked
7028 applications. */
7029
7030 bfd_boolean
7031 ppc64_elf_edit_opd (struct bfd_link_info *info)
7032 {
7033 bfd *ibfd;
7034 bfd_boolean some_edited = FALSE;
7035 asection *need_pad = NULL;
7036 struct ppc_link_hash_table *htab;
7037
7038 htab = ppc_hash_table (info);
7039 if (htab == NULL)
7040 return FALSE;
7041
7042 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7043 {
7044 asection *sec;
7045 Elf_Internal_Rela *relstart, *rel, *relend;
7046 Elf_Internal_Shdr *symtab_hdr;
7047 Elf_Internal_Sym *local_syms;
7048 struct _opd_sec_data *opd;
7049 bfd_boolean need_edit, add_aux_fields, broken;
7050 bfd_size_type cnt_16b = 0;
7051
7052 if (!is_ppc64_elf (ibfd))
7053 continue;
7054
7055 sec = bfd_get_section_by_name (ibfd, ".opd");
7056 if (sec == NULL || sec->size == 0)
7057 continue;
7058
7059 if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7060 continue;
7061
7062 if (sec->output_section == bfd_abs_section_ptr)
7063 continue;
7064
7065 /* Look through the section relocs. */
7066 if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7067 continue;
7068
7069 local_syms = NULL;
7070 symtab_hdr = &elf_symtab_hdr (ibfd);
7071
7072 /* Read the relocations. */
7073 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7074 info->keep_memory);
7075 if (relstart == NULL)
7076 return FALSE;
7077
7078 /* First run through the relocs to check they are sane, and to
7079 determine whether we need to edit this opd section. */
7080 need_edit = FALSE;
7081 broken = FALSE;
7082 need_pad = sec;
7083 relend = relstart + sec->reloc_count;
7084 for (rel = relstart; rel < relend; )
7085 {
7086 enum elf_ppc64_reloc_type r_type;
7087 unsigned long r_symndx;
7088 asection *sym_sec;
7089 struct elf_link_hash_entry *h;
7090 Elf_Internal_Sym *sym;
7091 bfd_vma offset;
7092
7093 /* .opd contains an array of 16 or 24 byte entries. We're
7094 only interested in the reloc pointing to a function entry
7095 point. */
7096 offset = rel->r_offset;
7097 if (rel + 1 == relend
7098 || rel[1].r_offset != offset + 8)
7099 {
7100 /* If someone messes with .opd alignment then after a
7101 "ld -r" we might have padding in the middle of .opd.
7102 Also, there's nothing to prevent someone putting
7103 something silly in .opd with the assembler. No .opd
7104 optimization for them! */
7105 broken_opd:
7106 _bfd_error_handler
7107 (_("%pB: .opd is not a regular array of opd entries"), ibfd);
7108 broken = TRUE;
7109 break;
7110 }
7111
7112 if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7113 || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7114 {
7115 _bfd_error_handler
7116 /* xgettext:c-format */
7117 (_("%pB: unexpected reloc type %u in .opd section"),
7118 ibfd, r_type);
7119 broken = TRUE;
7120 break;
7121 }
7122
7123 r_symndx = ELF64_R_SYM (rel->r_info);
7124 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7125 r_symndx, ibfd))
7126 goto error_ret;
7127
7128 if (sym_sec == NULL || sym_sec->owner == NULL)
7129 {
7130 const char *sym_name;
7131 if (h != NULL)
7132 sym_name = h->root.root.string;
7133 else
7134 sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7135 sym_sec);
7136
7137 _bfd_error_handler
7138 /* xgettext:c-format */
7139 (_("%pB: undefined sym `%s' in .opd section"),
7140 ibfd, sym_name);
7141 broken = TRUE;
7142 break;
7143 }
7144
7145 /* opd entries are always for functions defined in the
7146 current input bfd. If the symbol isn't defined in the
7147 input bfd, then we won't be using the function in this
7148 bfd; It must be defined in a linkonce section in another
7149 bfd, or is weak. It's also possible that we are
7150 discarding the function due to a linker script /DISCARD/,
7151 which we test for via the output_section. */
7152 if (sym_sec->owner != ibfd
7153 || sym_sec->output_section == bfd_abs_section_ptr)
7154 need_edit = TRUE;
7155
7156 rel += 2;
7157 if (rel + 1 == relend
7158 || (rel + 2 < relend
7159 && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7160 ++rel;
7161
7162 if (rel == relend)
7163 {
7164 if (sec->size == offset + 24)
7165 {
7166 need_pad = NULL;
7167 break;
7168 }
7169 if (sec->size == offset + 16)
7170 {
7171 cnt_16b++;
7172 break;
7173 }
7174 goto broken_opd;
7175 }
7176 else if (rel + 1 < relend
7177 && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7178 && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7179 {
7180 if (rel[0].r_offset == offset + 16)
7181 cnt_16b++;
7182 else if (rel[0].r_offset != offset + 24)
7183 goto broken_opd;
7184 }
7185 else
7186 goto broken_opd;
7187 }
7188
7189 add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7190
7191 if (!broken && (need_edit || add_aux_fields))
7192 {
7193 Elf_Internal_Rela *write_rel;
7194 Elf_Internal_Shdr *rel_hdr;
7195 bfd_byte *rptr, *wptr;
7196 bfd_byte *new_contents;
7197 bfd_size_type amt;
7198
7199 new_contents = NULL;
7200 amt = OPD_NDX (sec->size) * sizeof (long);
7201 opd = &ppc64_elf_section_data (sec)->u.opd;
7202 opd->adjust = bfd_zalloc (sec->owner, amt);
7203 if (opd->adjust == NULL)
7204 return FALSE;
7205
7206 /* This seems a waste of time as input .opd sections are all
7207 zeros as generated by gcc, but I suppose there's no reason
7208 this will always be so. We might start putting something in
7209 the third word of .opd entries. */
7210 if ((sec->flags & SEC_IN_MEMORY) == 0)
7211 {
7212 bfd_byte *loc;
7213 if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7214 {
7215 if (loc != NULL)
7216 free (loc);
7217 error_ret:
7218 if (local_syms != NULL
7219 && symtab_hdr->contents != (unsigned char *) local_syms)
7220 free (local_syms);
7221 if (elf_section_data (sec)->relocs != relstart)
7222 free (relstart);
7223 return FALSE;
7224 }
7225 sec->contents = loc;
7226 sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7227 }
7228
7229 elf_section_data (sec)->relocs = relstart;
7230
7231 new_contents = sec->contents;
7232 if (add_aux_fields)
7233 {
7234 new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7235 if (new_contents == NULL)
7236 return FALSE;
7237 need_pad = NULL;
7238 }
7239 wptr = new_contents;
7240 rptr = sec->contents;
7241 write_rel = relstart;
7242 for (rel = relstart; rel < relend; )
7243 {
7244 unsigned long r_symndx;
7245 asection *sym_sec;
7246 struct elf_link_hash_entry *h;
7247 struct ppc_link_hash_entry *fdh = NULL;
7248 Elf_Internal_Sym *sym;
7249 long opd_ent_size;
7250 Elf_Internal_Rela *next_rel;
7251 bfd_boolean skip;
7252
7253 r_symndx = ELF64_R_SYM (rel->r_info);
7254 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7255 r_symndx, ibfd))
7256 goto error_ret;
7257
7258 next_rel = rel + 2;
7259 if (next_rel + 1 == relend
7260 || (next_rel + 2 < relend
7261 && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
7262 ++next_rel;
7263
7264 /* See if the .opd entry is full 24 byte or
7265 16 byte (with fd_aux entry overlapped with next
7266 fd_func). */
7267 opd_ent_size = 24;
7268 if (next_rel == relend)
7269 {
7270 if (sec->size == rel->r_offset + 16)
7271 opd_ent_size = 16;
7272 }
7273 else if (next_rel->r_offset == rel->r_offset + 16)
7274 opd_ent_size = 16;
7275
7276 if (h != NULL
7277 && h->root.root.string[0] == '.')
7278 {
7279 fdh = ppc_elf_hash_entry (h)->oh;
7280 if (fdh != NULL)
7281 {
7282 fdh = ppc_follow_link (fdh);
7283 if (fdh->elf.root.type != bfd_link_hash_defined
7284 && fdh->elf.root.type != bfd_link_hash_defweak)
7285 fdh = NULL;
7286 }
7287 }
7288
7289 skip = (sym_sec->owner != ibfd
7290 || sym_sec->output_section == bfd_abs_section_ptr);
7291 if (skip)
7292 {
7293 if (fdh != NULL && sym_sec->owner == ibfd)
7294 {
7295 /* Arrange for the function descriptor sym
7296 to be dropped. */
7297 fdh->elf.root.u.def.value = 0;
7298 fdh->elf.root.u.def.section = sym_sec;
7299 }
7300 opd->adjust[OPD_NDX (rel->r_offset)] = -1;
7301
7302 if (NO_OPD_RELOCS || bfd_link_relocatable (info))
7303 rel = next_rel;
7304 else
7305 while (1)
7306 {
7307 if (!dec_dynrel_count (rel->r_info, sec, info,
7308 NULL, h, sym))
7309 goto error_ret;
7310
7311 if (++rel == next_rel)
7312 break;
7313
7314 r_symndx = ELF64_R_SYM (rel->r_info);
7315 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7316 r_symndx, ibfd))
7317 goto error_ret;
7318 }
7319 }
7320 else
7321 {
7322 /* We'll be keeping this opd entry. */
7323 long adjust;
7324
7325 if (fdh != NULL)
7326 {
7327 /* Redefine the function descriptor symbol to
7328 this location in the opd section. It is
7329 necessary to update the value here rather
7330 than using an array of adjustments as we do
7331 for local symbols, because various places
7332 in the generic ELF code use the value
7333 stored in u.def.value. */
7334 fdh->elf.root.u.def.value = wptr - new_contents;
7335 fdh->adjust_done = 1;
7336 }
7337
7338 /* Local syms are a bit tricky. We could
7339 tweak them as they can be cached, but
7340 we'd need to look through the local syms
7341 for the function descriptor sym which we
7342 don't have at the moment. So keep an
7343 array of adjustments. */
7344 adjust = (wptr - new_contents) - (rptr - sec->contents);
7345 opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
7346
7347 if (wptr != rptr)
7348 memcpy (wptr, rptr, opd_ent_size);
7349 wptr += opd_ent_size;
7350 if (add_aux_fields && opd_ent_size == 16)
7351 {
7352 memset (wptr, '\0', 8);
7353 wptr += 8;
7354 }
7355
7356 /* We need to adjust any reloc offsets to point to the
7357 new opd entries. */
7358 for ( ; rel != next_rel; ++rel)
7359 {
7360 rel->r_offset += adjust;
7361 if (write_rel != rel)
7362 memcpy (write_rel, rel, sizeof (*rel));
7363 ++write_rel;
7364 }
7365 }
7366
7367 rptr += opd_ent_size;
7368 }
7369
7370 sec->size = wptr - new_contents;
7371 sec->reloc_count = write_rel - relstart;
7372 if (add_aux_fields)
7373 {
7374 free (sec->contents);
7375 sec->contents = new_contents;
7376 }
7377
7378 /* Fudge the header size too, as this is used later in
7379 elf_bfd_final_link if we are emitting relocs. */
7380 rel_hdr = _bfd_elf_single_rel_hdr (sec);
7381 rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7382 some_edited = TRUE;
7383 }
7384 else if (elf_section_data (sec)->relocs != relstart)
7385 free (relstart);
7386
7387 if (local_syms != NULL
7388 && symtab_hdr->contents != (unsigned char *) local_syms)
7389 {
7390 if (!info->keep_memory)
7391 free (local_syms);
7392 else
7393 symtab_hdr->contents = (unsigned char *) local_syms;
7394 }
7395 }
7396
7397 if (some_edited)
7398 elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7399
7400 /* If we are doing a final link and the last .opd entry is just 16 byte
7401 long, add a 8 byte padding after it. */
7402 if (need_pad != NULL && !bfd_link_relocatable (info))
7403 {
7404 bfd_byte *p;
7405
7406 if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7407 {
7408 BFD_ASSERT (need_pad->size > 0);
7409
7410 p = bfd_malloc (need_pad->size + 8);
7411 if (p == NULL)
7412 return FALSE;
7413
7414 if (!bfd_get_section_contents (need_pad->owner, need_pad,
7415 p, 0, need_pad->size))
7416 return FALSE;
7417
7418 need_pad->contents = p;
7419 need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7420 }
7421 else
7422 {
7423 p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7424 if (p == NULL)
7425 return FALSE;
7426
7427 need_pad->contents = p;
7428 }
7429
7430 memset (need_pad->contents + need_pad->size, 0, 8);
7431 need_pad->size += 8;
7432 }
7433
7434 return TRUE;
7435 }
7436
7437 /* Analyze inline PLT call relocations to see whether calls to locally
7438 defined functions can be converted to direct calls. */
7439
7440 bfd_boolean
7441 ppc64_elf_inline_plt (struct bfd_link_info *info)
7442 {
7443 struct ppc_link_hash_table *htab;
7444 bfd *ibfd;
7445 asection *sec;
7446 bfd_vma low_vma, high_vma, limit;
7447
7448 htab = ppc_hash_table (info);
7449 if (htab == NULL)
7450 return FALSE;
7451
7452 /* A bl insn can reach -0x2000000 to 0x1fffffc. The limit is
7453 reduced somewhat to cater for possible stubs that might be added
7454 between the call and its destination. */
7455 if (htab->params->group_size < 0)
7456 {
7457 limit = -htab->params->group_size;
7458 if (limit == 1)
7459 limit = 0x1e00000;
7460 }
7461 else
7462 {
7463 limit = htab->params->group_size;
7464 if (limit == 1)
7465 limit = 0x1c00000;
7466 }
7467
7468 low_vma = -1;
7469 high_vma = 0;
7470 for (sec = info->output_bfd->sections; sec != NULL; sec = sec->next)
7471 if ((sec->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE))
7472 {
7473 if (low_vma > sec->vma)
7474 low_vma = sec->vma;
7475 if (high_vma < sec->vma + sec->size)
7476 high_vma = sec->vma + sec->size;
7477 }
7478
7479 /* If a "bl" can reach anywhere in local code sections, then we can
7480 convert all inline PLT sequences to direct calls when the symbol
7481 is local. */
7482 if (high_vma - low_vma < limit)
7483 {
7484 htab->can_convert_all_inline_plt = 1;
7485 return TRUE;
7486 }
7487
7488 /* Otherwise, go looking through relocs for cases where a direct
7489 call won't reach. Mark the symbol on any such reloc to disable
7490 the optimization and keep the PLT entry as it seems likely that
7491 this will be better than creating trampolines. Note that this
7492 will disable the optimization for all inline PLT calls to a
7493 particular symbol, not just those that won't reach. The
7494 difficulty in doing a more precise optimization is that the
7495 linker needs to make a decision depending on whether a
7496 particular R_PPC64_PLTCALL insn can be turned into a direct
7497 call, for each of the R_PPC64_PLTSEQ and R_PPC64_PLT16* insns in
7498 the sequence, and there is nothing that ties those relocs
7499 together except their symbol. */
7500
7501 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7502 {
7503 Elf_Internal_Shdr *symtab_hdr;
7504 Elf_Internal_Sym *local_syms;
7505
7506 if (!is_ppc64_elf (ibfd))
7507 continue;
7508
7509 local_syms = NULL;
7510 symtab_hdr = &elf_symtab_hdr (ibfd);
7511
7512 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7513 if (ppc64_elf_section_data (sec)->has_pltcall
7514 && !bfd_is_abs_section (sec->output_section))
7515 {
7516 Elf_Internal_Rela *relstart, *rel, *relend;
7517
7518 /* Read the relocations. */
7519 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7520 info->keep_memory);
7521 if (relstart == NULL)
7522 return FALSE;
7523
7524 relend = relstart + sec->reloc_count;
7525 for (rel = relstart; rel < relend; )
7526 {
7527 enum elf_ppc64_reloc_type r_type;
7528 unsigned long r_symndx;
7529 asection *sym_sec;
7530 struct elf_link_hash_entry *h;
7531 Elf_Internal_Sym *sym;
7532 unsigned char *tls_maskp;
7533
7534 r_type = ELF64_R_TYPE (rel->r_info);
7535 if (r_type != R_PPC64_PLTCALL
7536 && r_type != R_PPC64_PLTCALL_NOTOC)
7537 continue;
7538
7539 r_symndx = ELF64_R_SYM (rel->r_info);
7540 if (!get_sym_h (&h, &sym, &sym_sec, &tls_maskp, &local_syms,
7541 r_symndx, ibfd))
7542 {
7543 if (elf_section_data (sec)->relocs != relstart)
7544 free (relstart);
7545 if (local_syms != NULL
7546 && symtab_hdr->contents != (bfd_byte *) local_syms)
7547 free (local_syms);
7548 return FALSE;
7549 }
7550
7551 if (sym_sec != NULL && sym_sec->output_section != NULL)
7552 {
7553 bfd_vma from, to;
7554 if (h != NULL)
7555 to = h->root.u.def.value;
7556 else
7557 to = sym->st_value;
7558 to += (rel->r_addend
7559 + sym_sec->output_offset
7560 + sym_sec->output_section->vma);
7561 from = (rel->r_offset
7562 + sec->output_offset
7563 + sec->output_section->vma);
7564 if (to - from + limit < 2 * limit
7565 && !(r_type == R_PPC64_PLTCALL_NOTOC
7566 && (((h ? h->other : sym->st_other)
7567 & STO_PPC64_LOCAL_MASK)
7568 > 1 << STO_PPC64_LOCAL_BIT)))
7569 *tls_maskp &= ~PLT_KEEP;
7570 }
7571 }
7572 if (elf_section_data (sec)->relocs != relstart)
7573 free (relstart);
7574 }
7575
7576 if (local_syms != NULL
7577 && symtab_hdr->contents != (unsigned char *) local_syms)
7578 {
7579 if (!info->keep_memory)
7580 free (local_syms);
7581 else
7582 symtab_hdr->contents = (unsigned char *) local_syms;
7583 }
7584 }
7585
7586 return TRUE;
7587 }
7588
7589 /* Set htab->tls_get_addr and call the generic ELF tls_setup function. */
7590
7591 asection *
7592 ppc64_elf_tls_setup (struct bfd_link_info *info)
7593 {
7594 struct ppc_link_hash_table *htab;
7595
7596 htab = ppc_hash_table (info);
7597 if (htab == NULL)
7598 return NULL;
7599
7600 if (abiversion (info->output_bfd) == 1)
7601 htab->opd_abi = 1;
7602
7603 if (htab->params->no_multi_toc)
7604 htab->do_multi_toc = 0;
7605 else if (!htab->do_multi_toc)
7606 htab->params->no_multi_toc = 1;
7607
7608 /* Default to --no-plt-localentry, as this option can cause problems
7609 with symbol interposition. For example, glibc libpthread.so and
7610 libc.so duplicate many pthread symbols, with a fallback
7611 implementation in libc.so. In some cases the fallback does more
7612 work than the pthread implementation. __pthread_condattr_destroy
7613 is one such symbol: the libpthread.so implementation is
7614 localentry:0 while the libc.so implementation is localentry:8.
7615 An app that "cleverly" uses dlopen to only load necessary
7616 libraries at runtime may omit loading libpthread.so when not
7617 running multi-threaded, which then results in the libc.so
7618 fallback symbols being used and ld.so complaining. Now there
7619 are workarounds in ld (see non_zero_localentry) to detect the
7620 pthread situation, but that may not be the only case where
7621 --plt-localentry can cause trouble. */
7622 if (htab->params->plt_localentry0 < 0)
7623 htab->params->plt_localentry0 = 0;
7624 if (htab->params->plt_localentry0
7625 && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
7626 FALSE, FALSE, FALSE) == NULL)
7627 _bfd_error_handler
7628 (_("warning: --plt-localentry is especially dangerous without "
7629 "ld.so support to detect ABI violations"));
7630
7631 htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7632 elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7633 FALSE, FALSE, TRUE));
7634 /* Move dynamic linking info to the function descriptor sym. */
7635 if (htab->tls_get_addr != NULL)
7636 func_desc_adjust (&htab->tls_get_addr->elf, info);
7637 htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7638 elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7639 FALSE, FALSE, TRUE));
7640 if (htab->params->tls_get_addr_opt)
7641 {
7642 struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7643
7644 opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7645 FALSE, FALSE, TRUE);
7646 if (opt != NULL)
7647 func_desc_adjust (opt, info);
7648 opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7649 FALSE, FALSE, TRUE);
7650 if (opt_fd != NULL
7651 && (opt_fd->root.type == bfd_link_hash_defined
7652 || opt_fd->root.type == bfd_link_hash_defweak))
7653 {
7654 /* If glibc supports an optimized __tls_get_addr call stub,
7655 signalled by the presence of __tls_get_addr_opt, and we'll
7656 be calling __tls_get_addr via a plt call stub, then
7657 make __tls_get_addr point to __tls_get_addr_opt. */
7658 tga_fd = &htab->tls_get_addr_fd->elf;
7659 if (htab->elf.dynamic_sections_created
7660 && tga_fd != NULL
7661 && (tga_fd->type == STT_FUNC
7662 || tga_fd->needs_plt)
7663 && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7664 || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))
7665 {
7666 struct plt_entry *ent;
7667
7668 for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7669 if (ent->plt.refcount > 0)
7670 break;
7671 if (ent != NULL)
7672 {
7673 tga_fd->root.type = bfd_link_hash_indirect;
7674 tga_fd->root.u.i.link = &opt_fd->root;
7675 ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7676 opt_fd->mark = 1;
7677 if (opt_fd->dynindx != -1)
7678 {
7679 /* Use __tls_get_addr_opt in dynamic relocations. */
7680 opt_fd->dynindx = -1;
7681 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7682 opt_fd->dynstr_index);
7683 if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7684 return NULL;
7685 }
7686 htab->tls_get_addr_fd = ppc_elf_hash_entry (opt_fd);
7687 tga = &htab->tls_get_addr->elf;
7688 if (opt != NULL && tga != NULL)
7689 {
7690 tga->root.type = bfd_link_hash_indirect;
7691 tga->root.u.i.link = &opt->root;
7692 ppc64_elf_copy_indirect_symbol (info, opt, tga);
7693 opt->mark = 1;
7694 _bfd_elf_link_hash_hide_symbol (info, opt,
7695 tga->forced_local);
7696 htab->tls_get_addr = ppc_elf_hash_entry (opt);
7697 }
7698 htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7699 htab->tls_get_addr_fd->is_func_descriptor = 1;
7700 if (htab->tls_get_addr != NULL)
7701 {
7702 htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7703 htab->tls_get_addr->is_func = 1;
7704 }
7705 }
7706 }
7707 }
7708 else if (htab->params->tls_get_addr_opt < 0)
7709 htab->params->tls_get_addr_opt = 0;
7710 }
7711 return _bfd_elf_tls_setup (info->output_bfd, info);
7712 }
7713
7714 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7715 HASH1 or HASH2. */
7716
7717 static bfd_boolean
7718 branch_reloc_hash_match (const bfd *ibfd,
7719 const Elf_Internal_Rela *rel,
7720 const struct ppc_link_hash_entry *hash1,
7721 const struct ppc_link_hash_entry *hash2)
7722 {
7723 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7724 enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7725 unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7726
7727 if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7728 {
7729 struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7730 struct elf_link_hash_entry *h;
7731
7732 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7733 h = elf_follow_link (h);
7734 if (h == &hash1->elf || h == &hash2->elf)
7735 return TRUE;
7736 }
7737 return FALSE;
7738 }
7739
7740 /* Run through all the TLS relocs looking for optimization
7741 opportunities. The linker has been hacked (see ppc64elf.em) to do
7742 a preliminary section layout so that we know the TLS segment
7743 offsets. We can't optimize earlier because some optimizations need
7744 to know the tp offset, and we need to optimize before allocating
7745 dynamic relocations. */
7746
7747 bfd_boolean
7748 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7749 {
7750 bfd *ibfd;
7751 asection *sec;
7752 struct ppc_link_hash_table *htab;
7753 unsigned char *toc_ref;
7754 int pass;
7755
7756 if (!bfd_link_executable (info))
7757 return TRUE;
7758
7759 htab = ppc_hash_table (info);
7760 if (htab == NULL)
7761 return FALSE;
7762
7763 /* Make two passes over the relocs. On the first pass, mark toc
7764 entries involved with tls relocs, and check that tls relocs
7765 involved in setting up a tls_get_addr call are indeed followed by
7766 such a call. If they are not, we can't do any tls optimization.
7767 On the second pass twiddle tls_mask flags to notify
7768 relocate_section that optimization can be done, and adjust got
7769 and plt refcounts. */
7770 toc_ref = NULL;
7771 for (pass = 0; pass < 2; ++pass)
7772 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7773 {
7774 Elf_Internal_Sym *locsyms = NULL;
7775 asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7776
7777 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7778 if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7779 {
7780 Elf_Internal_Rela *relstart, *rel, *relend;
7781 bfd_boolean found_tls_get_addr_arg = 0;
7782
7783 /* Read the relocations. */
7784 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7785 info->keep_memory);
7786 if (relstart == NULL)
7787 {
7788 free (toc_ref);
7789 return FALSE;
7790 }
7791
7792 relend = relstart + sec->reloc_count;
7793 for (rel = relstart; rel < relend; rel++)
7794 {
7795 enum elf_ppc64_reloc_type r_type;
7796 unsigned long r_symndx;
7797 struct elf_link_hash_entry *h;
7798 Elf_Internal_Sym *sym;
7799 asection *sym_sec;
7800 unsigned char *tls_mask;
7801 unsigned int tls_set, tls_clear, tls_type = 0;
7802 bfd_vma value;
7803 bfd_boolean ok_tprel, is_local;
7804 long toc_ref_index = 0;
7805 int expecting_tls_get_addr = 0;
7806 bfd_boolean ret = FALSE;
7807
7808 r_symndx = ELF64_R_SYM (rel->r_info);
7809 if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7810 r_symndx, ibfd))
7811 {
7812 err_free_rel:
7813 if (elf_section_data (sec)->relocs != relstart)
7814 free (relstart);
7815 if (toc_ref != NULL)
7816 free (toc_ref);
7817 if (locsyms != NULL
7818 && (elf_symtab_hdr (ibfd).contents
7819 != (unsigned char *) locsyms))
7820 free (locsyms);
7821 return ret;
7822 }
7823
7824 if (h != NULL)
7825 {
7826 if (h->root.type == bfd_link_hash_defined
7827 || h->root.type == bfd_link_hash_defweak)
7828 value = h->root.u.def.value;
7829 else if (h->root.type == bfd_link_hash_undefweak)
7830 value = 0;
7831 else
7832 {
7833 found_tls_get_addr_arg = 0;
7834 continue;
7835 }
7836 }
7837 else
7838 /* Symbols referenced by TLS relocs must be of type
7839 STT_TLS. So no need for .opd local sym adjust. */
7840 value = sym->st_value;
7841
7842 ok_tprel = FALSE;
7843 is_local = SYMBOL_REFERENCES_LOCAL (info, h);
7844 if (is_local)
7845 {
7846 if (h != NULL
7847 && h->root.type == bfd_link_hash_undefweak)
7848 ok_tprel = TRUE;
7849 else if (sym_sec != NULL
7850 && sym_sec->output_section != NULL)
7851 {
7852 value += sym_sec->output_offset;
7853 value += sym_sec->output_section->vma;
7854 value -= htab->elf.tls_sec->vma + TP_OFFSET;
7855 /* Note that even though the prefix insns
7856 allow a 1<<33 offset we use the same test
7857 as for addis;addi. There may be a mix of
7858 pcrel and non-pcrel code and the decision
7859 to optimise is per symbol, not per TLS
7860 sequence. */
7861 ok_tprel = value + 0x80008000ULL < 1ULL << 32;
7862 }
7863 }
7864
7865 r_type = ELF64_R_TYPE (rel->r_info);
7866 /* If this section has old-style __tls_get_addr calls
7867 without marker relocs, then check that each
7868 __tls_get_addr call reloc is preceded by a reloc
7869 that conceivably belongs to the __tls_get_addr arg
7870 setup insn. If we don't find matching arg setup
7871 relocs, don't do any tls optimization. */
7872 if (pass == 0
7873 && sec->nomark_tls_get_addr
7874 && h != NULL
7875 && is_tls_get_addr (h, htab)
7876 && !found_tls_get_addr_arg
7877 && is_branch_reloc (r_type))
7878 {
7879 info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
7880 "TLS optimization disabled\n"),
7881 ibfd, sec, rel->r_offset);
7882 ret = TRUE;
7883 goto err_free_rel;
7884 }
7885
7886 found_tls_get_addr_arg = 0;
7887 switch (r_type)
7888 {
7889 case R_PPC64_GOT_TLSLD16:
7890 case R_PPC64_GOT_TLSLD16_LO:
7891 case R_PPC64_GOT_TLSLD34:
7892 expecting_tls_get_addr = 1;
7893 found_tls_get_addr_arg = 1;
7894 /* Fall through. */
7895
7896 case R_PPC64_GOT_TLSLD16_HI:
7897 case R_PPC64_GOT_TLSLD16_HA:
7898 /* These relocs should never be against a symbol
7899 defined in a shared lib. Leave them alone if
7900 that turns out to be the case. */
7901 if (!is_local)
7902 continue;
7903
7904 /* LD -> LE */
7905 tls_set = 0;
7906 tls_clear = TLS_LD;
7907 tls_type = TLS_TLS | TLS_LD;
7908 break;
7909
7910 case R_PPC64_GOT_TLSGD16:
7911 case R_PPC64_GOT_TLSGD16_LO:
7912 case R_PPC64_GOT_TLSGD34:
7913 expecting_tls_get_addr = 1;
7914 found_tls_get_addr_arg = 1;
7915 /* Fall through. */
7916
7917 case R_PPC64_GOT_TLSGD16_HI:
7918 case R_PPC64_GOT_TLSGD16_HA:
7919 if (ok_tprel)
7920 /* GD -> LE */
7921 tls_set = 0;
7922 else
7923 /* GD -> IE */
7924 tls_set = TLS_TLS | TLS_GDIE;
7925 tls_clear = TLS_GD;
7926 tls_type = TLS_TLS | TLS_GD;
7927 break;
7928
7929 case R_PPC64_GOT_TPREL34:
7930 case R_PPC64_GOT_TPREL16_DS:
7931 case R_PPC64_GOT_TPREL16_LO_DS:
7932 case R_PPC64_GOT_TPREL16_HI:
7933 case R_PPC64_GOT_TPREL16_HA:
7934 if (ok_tprel)
7935 {
7936 /* IE -> LE */
7937 tls_set = 0;
7938 tls_clear = TLS_TPREL;
7939 tls_type = TLS_TLS | TLS_TPREL;
7940 break;
7941 }
7942 continue;
7943
7944 case R_PPC64_TLSLD:
7945 if (!is_local)
7946 continue;
7947 /* Fall through. */
7948 case R_PPC64_TLSGD:
7949 if (rel + 1 < relend
7950 && is_plt_seq_reloc (ELF64_R_TYPE (rel[1].r_info)))
7951 {
7952 if (pass != 0
7953 && (ELF64_R_TYPE (rel[1].r_info)
7954 != R_PPC64_PLTSEQ)
7955 && (ELF64_R_TYPE (rel[1].r_info)
7956 != R_PPC64_PLTSEQ_NOTOC))
7957 {
7958 r_symndx = ELF64_R_SYM (rel[1].r_info);
7959 if (!get_sym_h (&h, NULL, NULL, NULL, &locsyms,
7960 r_symndx, ibfd))
7961 goto err_free_rel;
7962 if (h != NULL)
7963 {
7964 struct plt_entry *ent = NULL;
7965
7966 for (ent = h->plt.plist;
7967 ent != NULL;
7968 ent = ent->next)
7969 if (ent->addend == rel[1].r_addend)
7970 break;
7971
7972 if (ent != NULL
7973 && ent->plt.refcount > 0)
7974 ent->plt.refcount -= 1;
7975 }
7976 }
7977 continue;
7978 }
7979 found_tls_get_addr_arg = 1;
7980 /* Fall through. */
7981
7982 case R_PPC64_TLS:
7983 case R_PPC64_TOC16:
7984 case R_PPC64_TOC16_LO:
7985 if (sym_sec == NULL || sym_sec != toc)
7986 continue;
7987
7988 /* Mark this toc entry as referenced by a TLS
7989 code sequence. We can do that now in the
7990 case of R_PPC64_TLS, and after checking for
7991 tls_get_addr for the TOC16 relocs. */
7992 if (toc_ref == NULL)
7993 toc_ref
7994 = bfd_zmalloc (toc->output_section->rawsize / 8);
7995 if (toc_ref == NULL)
7996 goto err_free_rel;
7997
7998 if (h != NULL)
7999 value = h->root.u.def.value;
8000 else
8001 value = sym->st_value;
8002 value += rel->r_addend;
8003 if (value % 8 != 0)
8004 continue;
8005 BFD_ASSERT (value < toc->size
8006 && toc->output_offset % 8 == 0);
8007 toc_ref_index = (value + toc->output_offset) / 8;
8008 if (r_type == R_PPC64_TLS
8009 || r_type == R_PPC64_TLSGD
8010 || r_type == R_PPC64_TLSLD)
8011 {
8012 toc_ref[toc_ref_index] = 1;
8013 continue;
8014 }
8015
8016 if (pass != 0 && toc_ref[toc_ref_index] == 0)
8017 continue;
8018
8019 tls_set = 0;
8020 tls_clear = 0;
8021 expecting_tls_get_addr = 2;
8022 break;
8023
8024 case R_PPC64_TPREL64:
8025 if (pass == 0
8026 || sec != toc
8027 || toc_ref == NULL
8028 || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8029 continue;
8030 if (ok_tprel)
8031 {
8032 /* IE -> LE */
8033 tls_set = TLS_EXPLICIT;
8034 tls_clear = TLS_TPREL;
8035 break;
8036 }
8037 continue;
8038
8039 case R_PPC64_DTPMOD64:
8040 if (pass == 0
8041 || sec != toc
8042 || toc_ref == NULL
8043 || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8044 continue;
8045 if (rel + 1 < relend
8046 && (rel[1].r_info
8047 == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8048 && rel[1].r_offset == rel->r_offset + 8)
8049 {
8050 if (ok_tprel)
8051 /* GD -> LE */
8052 tls_set = TLS_EXPLICIT | TLS_GD;
8053 else
8054 /* GD -> IE */
8055 tls_set = TLS_EXPLICIT | TLS_GD | TLS_GDIE;
8056 tls_clear = TLS_GD;
8057 }
8058 else
8059 {
8060 if (!is_local)
8061 continue;
8062
8063 /* LD -> LE */
8064 tls_set = TLS_EXPLICIT;
8065 tls_clear = TLS_LD;
8066 }
8067 break;
8068
8069 default:
8070 continue;
8071 }
8072
8073 if (pass == 0)
8074 {
8075 if (!expecting_tls_get_addr
8076 || !sec->nomark_tls_get_addr)
8077 continue;
8078
8079 if (rel + 1 < relend
8080 && branch_reloc_hash_match (ibfd, rel + 1,
8081 htab->tls_get_addr,
8082 htab->tls_get_addr_fd))
8083 {
8084 if (expecting_tls_get_addr == 2)
8085 {
8086 /* Check for toc tls entries. */
8087 unsigned char *toc_tls;
8088 int retval;
8089
8090 retval = get_tls_mask (&toc_tls, NULL, NULL,
8091 &locsyms,
8092 rel, ibfd);
8093 if (retval == 0)
8094 goto err_free_rel;
8095 if (toc_tls != NULL)
8096 {
8097 if ((*toc_tls & TLS_TLS) != 0
8098 && ((*toc_tls & (TLS_GD | TLS_LD)) != 0))
8099 found_tls_get_addr_arg = 1;
8100 if (retval > 1)
8101 toc_ref[toc_ref_index] = 1;
8102 }
8103 }
8104 continue;
8105 }
8106
8107 /* Uh oh, we didn't find the expected call. We
8108 could just mark this symbol to exclude it
8109 from tls optimization but it's safer to skip
8110 the entire optimization. */
8111 /* xgettext:c-format */
8112 info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8113 "TLS optimization disabled\n"),
8114 ibfd, sec, rel->r_offset);
8115 ret = TRUE;
8116 goto err_free_rel;
8117 }
8118
8119 /* If we don't have old-style __tls_get_addr calls
8120 without TLSGD/TLSLD marker relocs, and we haven't
8121 found a new-style __tls_get_addr call with a
8122 marker for this symbol, then we either have a
8123 broken object file or an -mlongcall style
8124 indirect call to __tls_get_addr without a marker.
8125 Disable optimization in this case. */
8126 if ((tls_clear & (TLS_GD | TLS_LD)) != 0
8127 && (tls_set & TLS_EXPLICIT) == 0
8128 && !sec->nomark_tls_get_addr
8129 && ((*tls_mask & (TLS_TLS | TLS_MARK))
8130 != (TLS_TLS | TLS_MARK)))
8131 continue;
8132
8133 if (expecting_tls_get_addr == 1 + !sec->nomark_tls_get_addr)
8134 {
8135 struct plt_entry *ent = NULL;
8136
8137 if (htab->tls_get_addr != NULL)
8138 for (ent = htab->tls_get_addr->elf.plt.plist;
8139 ent != NULL;
8140 ent = ent->next)
8141 if (ent->addend == 0)
8142 break;
8143
8144 if (ent == NULL && htab->tls_get_addr_fd != NULL)
8145 for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8146 ent != NULL;
8147 ent = ent->next)
8148 if (ent->addend == 0)
8149 break;
8150
8151 if (ent != NULL
8152 && ent->plt.refcount > 0)
8153 ent->plt.refcount -= 1;
8154 }
8155
8156 if (tls_clear == 0)
8157 continue;
8158
8159 if ((tls_set & TLS_EXPLICIT) == 0)
8160 {
8161 struct got_entry *ent;
8162
8163 /* Adjust got entry for this reloc. */
8164 if (h != NULL)
8165 ent = h->got.glist;
8166 else
8167 ent = elf_local_got_ents (ibfd)[r_symndx];
8168
8169 for (; ent != NULL; ent = ent->next)
8170 if (ent->addend == rel->r_addend
8171 && ent->owner == ibfd
8172 && ent->tls_type == tls_type)
8173 break;
8174 if (ent == NULL)
8175 abort ();
8176
8177 if (tls_set == 0)
8178 {
8179 /* We managed to get rid of a got entry. */
8180 if (ent->got.refcount > 0)
8181 ent->got.refcount -= 1;
8182 }
8183 }
8184 else
8185 {
8186 /* If we got rid of a DTPMOD/DTPREL reloc pair then
8187 we'll lose one or two dyn relocs. */
8188 if (!dec_dynrel_count (rel->r_info, sec, info,
8189 NULL, h, sym))
8190 return FALSE;
8191
8192 if (tls_set == (TLS_EXPLICIT | TLS_GD))
8193 {
8194 if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8195 NULL, h, sym))
8196 return FALSE;
8197 }
8198 }
8199
8200 *tls_mask |= tls_set & 0xff;
8201 *tls_mask &= ~tls_clear;
8202 }
8203
8204 if (elf_section_data (sec)->relocs != relstart)
8205 free (relstart);
8206 }
8207
8208 if (locsyms != NULL
8209 && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8210 {
8211 if (!info->keep_memory)
8212 free (locsyms);
8213 else
8214 elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8215 }
8216 }
8217
8218 if (toc_ref != NULL)
8219 free (toc_ref);
8220 htab->do_tls_opt = 1;
8221 return TRUE;
8222 }
8223
8224 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8225 the values of any global symbols in a toc section that has been
8226 edited. Globals in toc sections should be a rarity, so this function
8227 sets a flag if any are found in toc sections other than the one just
8228 edited, so that further hash table traversals can be avoided. */
8229
8230 struct adjust_toc_info
8231 {
8232 asection *toc;
8233 unsigned long *skip;
8234 bfd_boolean global_toc_syms;
8235 };
8236
8237 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8238
8239 static bfd_boolean
8240 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8241 {
8242 struct ppc_link_hash_entry *eh;
8243 struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8244 unsigned long i;
8245
8246 if (h->root.type != bfd_link_hash_defined
8247 && h->root.type != bfd_link_hash_defweak)
8248 return TRUE;
8249
8250 eh = ppc_elf_hash_entry (h);
8251 if (eh->adjust_done)
8252 return TRUE;
8253
8254 if (eh->elf.root.u.def.section == toc_inf->toc)
8255 {
8256 if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8257 i = toc_inf->toc->rawsize >> 3;
8258 else
8259 i = eh->elf.root.u.def.value >> 3;
8260
8261 if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8262 {
8263 _bfd_error_handler
8264 (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8265 do
8266 ++i;
8267 while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8268 eh->elf.root.u.def.value = (bfd_vma) i << 3;
8269 }
8270
8271 eh->elf.root.u.def.value -= toc_inf->skip[i];
8272 eh->adjust_done = 1;
8273 }
8274 else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8275 toc_inf->global_toc_syms = TRUE;
8276
8277 return TRUE;
8278 }
8279
8280 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8281 on a _LO variety toc/got reloc. */
8282
8283 static bfd_boolean
8284 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8285 {
8286 return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */
8287 || (insn & (0x3fu << 26)) == 14u << 26 /* addi */
8288 || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
8289 || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
8290 || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
8291 || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
8292 || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
8293 || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
8294 || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
8295 || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
8296 || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
8297 || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
8298 || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
8299 || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
8300 || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
8301 || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */
8302 || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8303 /* Exclude lfqu by testing reloc. If relocs are ever
8304 defined for the reduced D field in psq_lu then those
8305 will need testing too. */
8306 && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8307 || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */
8308 && (insn & 1) == 0)
8309 || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */
8310 || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8311 /* Exclude stfqu. psq_stu as above for psq_lu. */
8312 && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8313 || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */
8314 && (insn & 1) == 0));
8315 }
8316
8317 /* PCREL_OPT in one instance flags to the linker that a pair of insns:
8318 pld ra,symbol@got@pcrel
8319 load/store rt,off(ra)
8320 or
8321 pla ra,symbol@pcrel
8322 load/store rt,off(ra)
8323 may be translated to
8324 pload/pstore rt,symbol+off@pcrel
8325 nop.
8326 This function returns true if the optimization is possible, placing
8327 the prefix insn in *PINSN1, a NOP in *PINSN2 and the offset in *POFF.
8328
8329 On entry to this function, the linker has already determined that
8330 the pld can be replaced with pla: *PINSN1 is that pla insn,
8331 while *PINSN2 is the second instruction. */
8332
8333 static bfd_boolean
8334 xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2, bfd_signed_vma *poff)
8335 {
8336 uint64_t insn1 = *pinsn1;
8337 uint64_t insn2 = *pinsn2;
8338 bfd_signed_vma off;
8339
8340 if ((insn2 & (63ULL << 58)) == 1ULL << 58)
8341 {
8342 /* Check that regs match. */
8343 if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8344 return FALSE;
8345
8346 /* P8LS or PMLS form, non-pcrel. */
8347 if ((insn2 & (-1ULL << 50) & ~(1ULL << 56)) != (1ULL << 58))
8348 return FALSE;
8349
8350 *pinsn1 = (insn2 & ~(31 << 16) & ~0x3ffff0000ffffULL) | (1ULL << 52);
8351 *pinsn2 = PNOP;
8352 off = ((insn2 >> 16) & 0x3ffff0000ULL) | (insn2 & 0xffff);
8353 *poff = (off ^ 0x200000000ULL) - 0x200000000ULL;
8354 return TRUE;
8355 }
8356
8357 insn2 >>= 32;
8358
8359 /* Check that regs match. */
8360 if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
8361 return FALSE;
8362
8363 switch ((insn2 >> 26) & 63)
8364 {
8365 default:
8366 return FALSE;
8367
8368 case 32: /* lwz */
8369 case 34: /* lbz */
8370 case 36: /* stw */
8371 case 38: /* stb */
8372 case 40: /* lhz */
8373 case 42: /* lha */
8374 case 44: /* sth */
8375 case 48: /* lfs */
8376 case 50: /* lfd */
8377 case 52: /* stfs */
8378 case 54: /* stfd */
8379 /* These are the PMLS cases, where we just need to tack a prefix
8380 on the insn. */
8381 insn1 = ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
8382 | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8383 off = insn2 & 0xffff;
8384 break;
8385
8386 case 58: /* lwa, ld */
8387 if ((insn2 & 1) != 0)
8388 return FALSE;
8389 insn1 = ((1ULL << 58) | (1ULL << 52)
8390 | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
8391 | (insn2 & (31ULL << 21)));
8392 off = insn2 & 0xfffc;
8393 break;
8394
8395 case 57: /* lxsd, lxssp */
8396 if ((insn2 & 3) < 2)
8397 return FALSE;
8398 insn1 = ((1ULL << 58) | (1ULL << 52)
8399 | ((40ULL | (insn2 & 3)) << 26)
8400 | (insn2 & (31ULL << 21)));
8401 off = insn2 & 0xfffc;
8402 break;
8403
8404 case 61: /* stxsd, stxssp, lxv, stxv */
8405 if ((insn2 & 3) == 0)
8406 return FALSE;
8407 else if ((insn2 & 3) >= 2)
8408 {
8409 insn1 = ((1ULL << 58) | (1ULL << 52)
8410 | ((44ULL | (insn2 & 3)) << 26)
8411 | (insn2 & (31ULL << 21)));
8412 off = insn2 & 0xfffc;
8413 }
8414 else
8415 {
8416 insn1 = ((1ULL << 58) | (1ULL << 52)
8417 | ((50ULL | (insn2 & 4) | ((insn2 & 8) >> 3)) << 26)
8418 | (insn2 & (31ULL << 21)));
8419 off = insn2 & 0xfff0;
8420 }
8421 break;
8422
8423 case 56: /* lq */
8424 insn1 = ((1ULL << 58) | (1ULL << 52)
8425 | (insn2 & ((63ULL << 26) | (31ULL << 21))));
8426 off = insn2 & 0xffff;
8427 break;
8428
8429 case 62: /* std, stq */
8430 if ((insn2 & 1) != 0)
8431 return FALSE;
8432 insn1 = ((1ULL << 58) | (1ULL << 52)
8433 | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
8434 | (insn2 & (31ULL << 21)));
8435 off = insn2 & 0xfffc;
8436 break;
8437 }
8438
8439 *pinsn1 = insn1;
8440 *pinsn2 = (uint64_t) NOP << 32;
8441 *poff = (off ^ 0x8000) - 0x8000;
8442 return TRUE;
8443 }
8444
8445 /* Examine all relocs referencing .toc sections in order to remove
8446 unused .toc entries. */
8447
8448 bfd_boolean
8449 ppc64_elf_edit_toc (struct bfd_link_info *info)
8450 {
8451 bfd *ibfd;
8452 struct adjust_toc_info toc_inf;
8453 struct ppc_link_hash_table *htab = ppc_hash_table (info);
8454
8455 htab->do_toc_opt = 1;
8456 toc_inf.global_toc_syms = TRUE;
8457 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8458 {
8459 asection *toc, *sec;
8460 Elf_Internal_Shdr *symtab_hdr;
8461 Elf_Internal_Sym *local_syms;
8462 Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8463 unsigned long *skip, *drop;
8464 unsigned char *used;
8465 unsigned char *keep, last, some_unused;
8466
8467 if (!is_ppc64_elf (ibfd))
8468 continue;
8469
8470 toc = bfd_get_section_by_name (ibfd, ".toc");
8471 if (toc == NULL
8472 || toc->size == 0
8473 || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8474 || discarded_section (toc))
8475 continue;
8476
8477 toc_relocs = NULL;
8478 local_syms = NULL;
8479 symtab_hdr = &elf_symtab_hdr (ibfd);
8480
8481 /* Look at sections dropped from the final link. */
8482 skip = NULL;
8483 relstart = NULL;
8484 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8485 {
8486 if (sec->reloc_count == 0
8487 || !discarded_section (sec)
8488 || get_opd_info (sec)
8489 || (sec->flags & SEC_ALLOC) == 0
8490 || (sec->flags & SEC_DEBUGGING) != 0)
8491 continue;
8492
8493 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8494 if (relstart == NULL)
8495 goto error_ret;
8496
8497 /* Run through the relocs to see which toc entries might be
8498 unused. */
8499 for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8500 {
8501 enum elf_ppc64_reloc_type r_type;
8502 unsigned long r_symndx;
8503 asection *sym_sec;
8504 struct elf_link_hash_entry *h;
8505 Elf_Internal_Sym *sym;
8506 bfd_vma val;
8507
8508 r_type = ELF64_R_TYPE (rel->r_info);
8509 switch (r_type)
8510 {
8511 default:
8512 continue;
8513
8514 case R_PPC64_TOC16:
8515 case R_PPC64_TOC16_LO:
8516 case R_PPC64_TOC16_HI:
8517 case R_PPC64_TOC16_HA:
8518 case R_PPC64_TOC16_DS:
8519 case R_PPC64_TOC16_LO_DS:
8520 break;
8521 }
8522
8523 r_symndx = ELF64_R_SYM (rel->r_info);
8524 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8525 r_symndx, ibfd))
8526 goto error_ret;
8527
8528 if (sym_sec != toc)
8529 continue;
8530
8531 if (h != NULL)
8532 val = h->root.u.def.value;
8533 else
8534 val = sym->st_value;
8535 val += rel->r_addend;
8536
8537 if (val >= toc->size)
8538 continue;
8539
8540 /* Anything in the toc ought to be aligned to 8 bytes.
8541 If not, don't mark as unused. */
8542 if (val & 7)
8543 continue;
8544
8545 if (skip == NULL)
8546 {
8547 skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8548 if (skip == NULL)
8549 goto error_ret;
8550 }
8551
8552 skip[val >> 3] = ref_from_discarded;
8553 }
8554
8555 if (elf_section_data (sec)->relocs != relstart)
8556 free (relstart);
8557 }
8558
8559 /* For largetoc loads of address constants, we can convert
8560 . addis rx,2,addr@got@ha
8561 . ld ry,addr@got@l(rx)
8562 to
8563 . addis rx,2,addr@toc@ha
8564 . addi ry,rx,addr@toc@l
8565 when addr is within 2G of the toc pointer. This then means
8566 that the word storing "addr" in the toc is no longer needed. */
8567
8568 if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8569 && toc->output_section->rawsize < (bfd_vma) 1 << 31
8570 && toc->reloc_count != 0)
8571 {
8572 /* Read toc relocs. */
8573 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8574 info->keep_memory);
8575 if (toc_relocs == NULL)
8576 goto error_ret;
8577
8578 for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8579 {
8580 enum elf_ppc64_reloc_type r_type;
8581 unsigned long r_symndx;
8582 asection *sym_sec;
8583 struct elf_link_hash_entry *h;
8584 Elf_Internal_Sym *sym;
8585 bfd_vma val, addr;
8586
8587 r_type = ELF64_R_TYPE (rel->r_info);
8588 if (r_type != R_PPC64_ADDR64)
8589 continue;
8590
8591 r_symndx = ELF64_R_SYM (rel->r_info);
8592 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8593 r_symndx, ibfd))
8594 goto error_ret;
8595
8596 if (sym_sec == NULL
8597 || sym_sec->output_section == NULL
8598 || discarded_section (sym_sec))
8599 continue;
8600
8601 if (!SYMBOL_REFERENCES_LOCAL (info, h))
8602 continue;
8603
8604 if (h != NULL)
8605 {
8606 if (h->type == STT_GNU_IFUNC)
8607 continue;
8608 val = h->root.u.def.value;
8609 }
8610 else
8611 {
8612 if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8613 continue;
8614 val = sym->st_value;
8615 }
8616 val += rel->r_addend;
8617 val += sym_sec->output_section->vma + sym_sec->output_offset;
8618
8619 /* We don't yet know the exact toc pointer value, but we
8620 know it will be somewhere in the toc section. Don't
8621 optimize if the difference from any possible toc
8622 pointer is outside [ff..f80008000, 7fff7fff]. */
8623 addr = toc->output_section->vma + TOC_BASE_OFF;
8624 if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8625 continue;
8626
8627 addr = toc->output_section->vma + toc->output_section->rawsize;
8628 if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8629 continue;
8630
8631 if (skip == NULL)
8632 {
8633 skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8634 if (skip == NULL)
8635 goto error_ret;
8636 }
8637
8638 skip[rel->r_offset >> 3]
8639 |= can_optimize | ((rel - toc_relocs) << 2);
8640 }
8641 }
8642
8643 if (skip == NULL)
8644 continue;
8645
8646 used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8647 if (used == NULL)
8648 {
8649 error_ret:
8650 if (local_syms != NULL
8651 && symtab_hdr->contents != (unsigned char *) local_syms)
8652 free (local_syms);
8653 if (sec != NULL
8654 && relstart != NULL
8655 && elf_section_data (sec)->relocs != relstart)
8656 free (relstart);
8657 if (toc_relocs != NULL
8658 && elf_section_data (toc)->relocs != toc_relocs)
8659 free (toc_relocs);
8660 if (skip != NULL)
8661 free (skip);
8662 return FALSE;
8663 }
8664
8665 /* Now check all kept sections that might reference the toc.
8666 Check the toc itself last. */
8667 for (sec = (ibfd->sections == toc && toc->next ? toc->next
8668 : ibfd->sections);
8669 sec != NULL;
8670 sec = (sec == toc ? NULL
8671 : sec->next == NULL ? toc
8672 : sec->next == toc && toc->next ? toc->next
8673 : sec->next))
8674 {
8675 int repeat;
8676
8677 if (sec->reloc_count == 0
8678 || discarded_section (sec)
8679 || get_opd_info (sec)
8680 || (sec->flags & SEC_ALLOC) == 0
8681 || (sec->flags & SEC_DEBUGGING) != 0)
8682 continue;
8683
8684 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8685 info->keep_memory);
8686 if (relstart == NULL)
8687 {
8688 free (used);
8689 goto error_ret;
8690 }
8691
8692 /* Mark toc entries referenced as used. */
8693 do
8694 {
8695 repeat = 0;
8696 for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8697 {
8698 enum elf_ppc64_reloc_type r_type;
8699 unsigned long r_symndx;
8700 asection *sym_sec;
8701 struct elf_link_hash_entry *h;
8702 Elf_Internal_Sym *sym;
8703 bfd_vma val;
8704
8705 r_type = ELF64_R_TYPE (rel->r_info);
8706 switch (r_type)
8707 {
8708 case R_PPC64_TOC16:
8709 case R_PPC64_TOC16_LO:
8710 case R_PPC64_TOC16_HI:
8711 case R_PPC64_TOC16_HA:
8712 case R_PPC64_TOC16_DS:
8713 case R_PPC64_TOC16_LO_DS:
8714 /* In case we're taking addresses of toc entries. */
8715 case R_PPC64_ADDR64:
8716 break;
8717
8718 default:
8719 continue;
8720 }
8721
8722 r_symndx = ELF64_R_SYM (rel->r_info);
8723 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8724 r_symndx, ibfd))
8725 {
8726 free (used);
8727 goto error_ret;
8728 }
8729
8730 if (sym_sec != toc)
8731 continue;
8732
8733 if (h != NULL)
8734 val = h->root.u.def.value;
8735 else
8736 val = sym->st_value;
8737 val += rel->r_addend;
8738
8739 if (val >= toc->size)
8740 continue;
8741
8742 if ((skip[val >> 3] & can_optimize) != 0)
8743 {
8744 bfd_vma off;
8745 unsigned char opc;
8746
8747 switch (r_type)
8748 {
8749 case R_PPC64_TOC16_HA:
8750 break;
8751
8752 case R_PPC64_TOC16_LO_DS:
8753 off = rel->r_offset;
8754 off += (bfd_big_endian (ibfd) ? -2 : 3);
8755 if (!bfd_get_section_contents (ibfd, sec, &opc,
8756 off, 1))
8757 {
8758 free (used);
8759 goto error_ret;
8760 }
8761 if ((opc & (0x3f << 2)) == (58u << 2))
8762 break;
8763 /* Fall through. */
8764
8765 default:
8766 /* Wrong sort of reloc, or not a ld. We may
8767 as well clear ref_from_discarded too. */
8768 skip[val >> 3] = 0;
8769 }
8770 }
8771
8772 if (sec != toc)
8773 used[val >> 3] = 1;
8774 /* For the toc section, we only mark as used if this
8775 entry itself isn't unused. */
8776 else if ((used[rel->r_offset >> 3]
8777 || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8778 && !used[val >> 3])
8779 {
8780 /* Do all the relocs again, to catch reference
8781 chains. */
8782 repeat = 1;
8783 used[val >> 3] = 1;
8784 }
8785 }
8786 }
8787 while (repeat);
8788
8789 if (elf_section_data (sec)->relocs != relstart)
8790 free (relstart);
8791 }
8792
8793 /* Merge the used and skip arrays. Assume that TOC
8794 doublewords not appearing as either used or unused belong
8795 to an entry more than one doubleword in size. */
8796 for (drop = skip, keep = used, last = 0, some_unused = 0;
8797 drop < skip + (toc->size + 7) / 8;
8798 ++drop, ++keep)
8799 {
8800 if (*keep)
8801 {
8802 *drop &= ~ref_from_discarded;
8803 if ((*drop & can_optimize) != 0)
8804 some_unused = 1;
8805 last = 0;
8806 }
8807 else if ((*drop & ref_from_discarded) != 0)
8808 {
8809 some_unused = 1;
8810 last = ref_from_discarded;
8811 }
8812 else
8813 *drop = last;
8814 }
8815
8816 free (used);
8817
8818 if (some_unused)
8819 {
8820 bfd_byte *contents, *src;
8821 unsigned long off;
8822 Elf_Internal_Sym *sym;
8823 bfd_boolean local_toc_syms = FALSE;
8824
8825 /* Shuffle the toc contents, and at the same time convert the
8826 skip array from booleans into offsets. */
8827 if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8828 goto error_ret;
8829
8830 elf_section_data (toc)->this_hdr.contents = contents;
8831
8832 for (src = contents, off = 0, drop = skip;
8833 src < contents + toc->size;
8834 src += 8, ++drop)
8835 {
8836 if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8837 off += 8;
8838 else if (off != 0)
8839 {
8840 *drop = off;
8841 memcpy (src - off, src, 8);
8842 }
8843 }
8844 *drop = off;
8845 toc->rawsize = toc->size;
8846 toc->size = src - contents - off;
8847
8848 /* Adjust addends for relocs against the toc section sym,
8849 and optimize any accesses we can. */
8850 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8851 {
8852 if (sec->reloc_count == 0
8853 || discarded_section (sec))
8854 continue;
8855
8856 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8857 info->keep_memory);
8858 if (relstart == NULL)
8859 goto error_ret;
8860
8861 for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8862 {
8863 enum elf_ppc64_reloc_type r_type;
8864 unsigned long r_symndx;
8865 asection *sym_sec;
8866 struct elf_link_hash_entry *h;
8867 bfd_vma val;
8868
8869 r_type = ELF64_R_TYPE (rel->r_info);
8870 switch (r_type)
8871 {
8872 default:
8873 continue;
8874
8875 case R_PPC64_TOC16:
8876 case R_PPC64_TOC16_LO:
8877 case R_PPC64_TOC16_HI:
8878 case R_PPC64_TOC16_HA:
8879 case R_PPC64_TOC16_DS:
8880 case R_PPC64_TOC16_LO_DS:
8881 case R_PPC64_ADDR64:
8882 break;
8883 }
8884
8885 r_symndx = ELF64_R_SYM (rel->r_info);
8886 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8887 r_symndx, ibfd))
8888 goto error_ret;
8889
8890 if (sym_sec != toc)
8891 continue;
8892
8893 if (h != NULL)
8894 val = h->root.u.def.value;
8895 else
8896 {
8897 val = sym->st_value;
8898 if (val != 0)
8899 local_toc_syms = TRUE;
8900 }
8901
8902 val += rel->r_addend;
8903
8904 if (val > toc->rawsize)
8905 val = toc->rawsize;
8906 else if ((skip[val >> 3] & ref_from_discarded) != 0)
8907 continue;
8908 else if ((skip[val >> 3] & can_optimize) != 0)
8909 {
8910 Elf_Internal_Rela *tocrel
8911 = toc_relocs + (skip[val >> 3] >> 2);
8912 unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8913
8914 switch (r_type)
8915 {
8916 case R_PPC64_TOC16_HA:
8917 rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8918 break;
8919
8920 case R_PPC64_TOC16_LO_DS:
8921 rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8922 break;
8923
8924 default:
8925 if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8926 ppc_howto_init ();
8927 info->callbacks->einfo
8928 /* xgettext:c-format */
8929 (_("%H: %s references "
8930 "optimized away TOC entry\n"),
8931 ibfd, sec, rel->r_offset,
8932 ppc64_elf_howto_table[r_type]->name);
8933 bfd_set_error (bfd_error_bad_value);
8934 goto error_ret;
8935 }
8936 rel->r_addend = tocrel->r_addend;
8937 elf_section_data (sec)->relocs = relstart;
8938 continue;
8939 }
8940
8941 if (h != NULL || sym->st_value != 0)
8942 continue;
8943
8944 rel->r_addend -= skip[val >> 3];
8945 elf_section_data (sec)->relocs = relstart;
8946 }
8947
8948 if (elf_section_data (sec)->relocs != relstart)
8949 free (relstart);
8950 }
8951
8952 /* We shouldn't have local or global symbols defined in the TOC,
8953 but handle them anyway. */
8954 if (local_syms != NULL)
8955 for (sym = local_syms;
8956 sym < local_syms + symtab_hdr->sh_info;
8957 ++sym)
8958 if (sym->st_value != 0
8959 && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
8960 {
8961 unsigned long i;
8962
8963 if (sym->st_value > toc->rawsize)
8964 i = toc->rawsize >> 3;
8965 else
8966 i = sym->st_value >> 3;
8967
8968 if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
8969 {
8970 if (local_toc_syms)
8971 _bfd_error_handler
8972 (_("%s defined on removed toc entry"),
8973 bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
8974 do
8975 ++i;
8976 while ((skip[i] & (ref_from_discarded | can_optimize)));
8977 sym->st_value = (bfd_vma) i << 3;
8978 }
8979
8980 sym->st_value -= skip[i];
8981 symtab_hdr->contents = (unsigned char *) local_syms;
8982 }
8983
8984 /* Adjust any global syms defined in this toc input section. */
8985 if (toc_inf.global_toc_syms)
8986 {
8987 toc_inf.toc = toc;
8988 toc_inf.skip = skip;
8989 toc_inf.global_toc_syms = FALSE;
8990 elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
8991 &toc_inf);
8992 }
8993
8994 if (toc->reloc_count != 0)
8995 {
8996 Elf_Internal_Shdr *rel_hdr;
8997 Elf_Internal_Rela *wrel;
8998 bfd_size_type sz;
8999
9000 /* Remove unused toc relocs, and adjust those we keep. */
9001 if (toc_relocs == NULL)
9002 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9003 info->keep_memory);
9004 if (toc_relocs == NULL)
9005 goto error_ret;
9006
9007 wrel = toc_relocs;
9008 for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9009 if ((skip[rel->r_offset >> 3]
9010 & (ref_from_discarded | can_optimize)) == 0)
9011 {
9012 wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9013 wrel->r_info = rel->r_info;
9014 wrel->r_addend = rel->r_addend;
9015 ++wrel;
9016 }
9017 else if (!dec_dynrel_count (rel->r_info, toc, info,
9018 &local_syms, NULL, NULL))
9019 goto error_ret;
9020
9021 elf_section_data (toc)->relocs = toc_relocs;
9022 toc->reloc_count = wrel - toc_relocs;
9023 rel_hdr = _bfd_elf_single_rel_hdr (toc);
9024 sz = rel_hdr->sh_entsize;
9025 rel_hdr->sh_size = toc->reloc_count * sz;
9026 }
9027 }
9028 else if (toc_relocs != NULL
9029 && elf_section_data (toc)->relocs != toc_relocs)
9030 free (toc_relocs);
9031
9032 if (local_syms != NULL
9033 && symtab_hdr->contents != (unsigned char *) local_syms)
9034 {
9035 if (!info->keep_memory)
9036 free (local_syms);
9037 else
9038 symtab_hdr->contents = (unsigned char *) local_syms;
9039 }
9040 free (skip);
9041 }
9042
9043 /* Look for cases where we can change an indirect GOT access to
9044 a GOT relative or PC relative access, possibly reducing the
9045 number of GOT entries. */
9046 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9047 {
9048 asection *sec;
9049 Elf_Internal_Shdr *symtab_hdr;
9050 Elf_Internal_Sym *local_syms;
9051 Elf_Internal_Rela *relstart, *rel;
9052 bfd_vma got;
9053
9054 if (!is_ppc64_elf (ibfd))
9055 continue;
9056
9057 if (!ppc64_elf_tdata (ibfd)->has_optrel)
9058 continue;
9059
9060 sec = ppc64_elf_tdata (ibfd)->got;
9061 got = 0;
9062 if (sec != NULL)
9063 got = sec->output_section->vma + sec->output_offset + 0x8000;
9064
9065 local_syms = NULL;
9066 symtab_hdr = &elf_symtab_hdr (ibfd);
9067
9068 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9069 {
9070 if (sec->reloc_count == 0
9071 || !ppc64_elf_section_data (sec)->has_optrel
9072 || discarded_section (sec))
9073 continue;
9074
9075 relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9076 info->keep_memory);
9077 if (relstart == NULL)
9078 {
9079 got_error_ret:
9080 if (local_syms != NULL
9081 && symtab_hdr->contents != (unsigned char *) local_syms)
9082 free (local_syms);
9083 if (sec != NULL
9084 && relstart != NULL
9085 && elf_section_data (sec)->relocs != relstart)
9086 free (relstart);
9087 return FALSE;
9088 }
9089
9090 for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9091 {
9092 enum elf_ppc64_reloc_type r_type;
9093 unsigned long r_symndx;
9094 Elf_Internal_Sym *sym;
9095 asection *sym_sec;
9096 struct elf_link_hash_entry *h;
9097 struct got_entry *ent;
9098 bfd_vma val, pc;
9099 unsigned char buf[8];
9100 unsigned int insn;
9101 enum {no_check, check_lo, check_ha} insn_check;
9102
9103 r_type = ELF64_R_TYPE (rel->r_info);
9104 switch (r_type)
9105 {
9106 default:
9107 insn_check = no_check;
9108 break;
9109
9110 case R_PPC64_PLT16_HA:
9111 case R_PPC64_GOT_TLSLD16_HA:
9112 case R_PPC64_GOT_TLSGD16_HA:
9113 case R_PPC64_GOT_TPREL16_HA:
9114 case R_PPC64_GOT_DTPREL16_HA:
9115 case R_PPC64_GOT16_HA:
9116 case R_PPC64_TOC16_HA:
9117 insn_check = check_ha;
9118 break;
9119
9120 case R_PPC64_PLT16_LO:
9121 case R_PPC64_PLT16_LO_DS:
9122 case R_PPC64_GOT_TLSLD16_LO:
9123 case R_PPC64_GOT_TLSGD16_LO:
9124 case R_PPC64_GOT_TPREL16_LO_DS:
9125 case R_PPC64_GOT_DTPREL16_LO_DS:
9126 case R_PPC64_GOT16_LO:
9127 case R_PPC64_GOT16_LO_DS:
9128 case R_PPC64_TOC16_LO:
9129 case R_PPC64_TOC16_LO_DS:
9130 insn_check = check_lo;
9131 break;
9132 }
9133
9134 if (insn_check != no_check)
9135 {
9136 bfd_vma off = rel->r_offset & ~3;
9137
9138 if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
9139 goto got_error_ret;
9140
9141 insn = bfd_get_32 (ibfd, buf);
9142 if (insn_check == check_lo
9143 ? !ok_lo_toc_insn (insn, r_type)
9144 : ((insn & ((0x3fu << 26) | 0x1f << 16))
9145 != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9146 {
9147 char str[12];
9148
9149 ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
9150 sprintf (str, "%#08x", insn);
9151 info->callbacks->einfo
9152 /* xgettext:c-format */
9153 (_("%H: got/toc optimization is not supported for"
9154 " %s instruction\n"),
9155 ibfd, sec, rel->r_offset & ~3, str);
9156 continue;
9157 }
9158 }
9159
9160 switch (r_type)
9161 {
9162 /* Note that we don't delete GOT entries for
9163 R_PPC64_GOT16_DS since we'd need a lot more
9164 analysis. For starters, the preliminary layout is
9165 before the GOT, PLT, dynamic sections and stubs are
9166 laid out. Then we'd need to allow for changes in
9167 distance between sections caused by alignment. */
9168 default:
9169 continue;
9170
9171 case R_PPC64_GOT16_HA:
9172 case R_PPC64_GOT16_LO_DS:
9173 case R_PPC64_GOT_PCREL34:
9174 break;
9175 }
9176
9177 r_symndx = ELF64_R_SYM (rel->r_info);
9178 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9179 r_symndx, ibfd))
9180 goto got_error_ret;
9181
9182 if (sym_sec == NULL
9183 || sym_sec->output_section == NULL
9184 || discarded_section (sym_sec))
9185 continue;
9186
9187 if (!SYMBOL_REFERENCES_LOCAL (info, h))
9188 continue;
9189
9190 if (h != NULL)
9191 val = h->root.u.def.value;
9192 else
9193 val = sym->st_value;
9194 val += rel->r_addend;
9195 val += sym_sec->output_section->vma + sym_sec->output_offset;
9196
9197 /* Fudge factor to allow for the fact that the preliminary layout
9198 isn't exact. Reduce limits by this factor. */
9199 #define LIMIT_ADJUST(LIMIT) ((LIMIT) - (LIMIT) / 16)
9200
9201 switch (r_type)
9202 {
9203 default:
9204 continue;
9205
9206 case R_PPC64_GOT16_HA:
9207 if (val - got + LIMIT_ADJUST (0x80008000ULL)
9208 >= LIMIT_ADJUST (0x100000000ULL))
9209 continue;
9210
9211 if (!bfd_get_section_contents (ibfd, sec, buf,
9212 rel->r_offset & ~3, 4))
9213 goto got_error_ret;
9214 insn = bfd_get_32 (ibfd, buf);
9215 if (((insn & ((0x3fu << 26) | 0x1f << 16))
9216 != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9217 continue;
9218 break;
9219
9220 case R_PPC64_GOT16_LO_DS:
9221 if (val - got + LIMIT_ADJUST (0x80008000ULL)
9222 >= LIMIT_ADJUST (0x100000000ULL))
9223 continue;
9224 if (!bfd_get_section_contents (ibfd, sec, buf,
9225 rel->r_offset & ~3, 4))
9226 goto got_error_ret;
9227 insn = bfd_get_32 (ibfd, buf);
9228 if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */)
9229 continue;
9230 break;
9231
9232 case R_PPC64_GOT_PCREL34:
9233 pc = rel->r_offset;
9234 pc += sec->output_section->vma + sec->output_offset;
9235 if (val - pc + LIMIT_ADJUST (1ULL << 33)
9236 >= LIMIT_ADJUST (1ULL << 34))
9237 continue;
9238 if (!bfd_get_section_contents (ibfd, sec, buf,
9239 rel->r_offset & ~3, 8))
9240 goto got_error_ret;
9241 insn = bfd_get_32 (ibfd, buf);
9242 if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
9243 continue;
9244 insn = bfd_get_32 (ibfd, buf + 4);
9245 if ((insn & (0x3fu << 26)) != 57u << 26)
9246 continue;
9247 break;
9248 }
9249 #undef LIMIT_ADJUST
9250
9251 if (h != NULL)
9252 ent = h->got.glist;
9253 else
9254 {
9255 struct got_entry **local_got_ents = elf_local_got_ents (ibfd);
9256 ent = local_got_ents[r_symndx];
9257 }
9258 for (; ent != NULL; ent = ent->next)
9259 if (ent->addend == rel->r_addend
9260 && ent->owner == ibfd
9261 && ent->tls_type == 0)
9262 break;
9263 BFD_ASSERT (ent && ent->got.refcount > 0);
9264 ent->got.refcount -= 1;
9265 }
9266
9267 if (elf_section_data (sec)->relocs != relstart)
9268 free (relstart);
9269 }
9270
9271 if (local_syms != NULL
9272 && symtab_hdr->contents != (unsigned char *) local_syms)
9273 {
9274 if (!info->keep_memory)
9275 free (local_syms);
9276 else
9277 symtab_hdr->contents = (unsigned char *) local_syms;
9278 }
9279 }
9280
9281 return TRUE;
9282 }
9283
9284 /* Return true iff input section I references the TOC using
9285 instructions limited to +/-32k offsets. */
9286
9287 bfd_boolean
9288 ppc64_elf_has_small_toc_reloc (asection *i)
9289 {
9290 return (is_ppc64_elf (i->owner)
9291 && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9292 }
9293
9294 /* Allocate space for one GOT entry. */
9295
9296 static void
9297 allocate_got (struct elf_link_hash_entry *h,
9298 struct bfd_link_info *info,
9299 struct got_entry *gent)
9300 {
9301 struct ppc_link_hash_table *htab = ppc_hash_table (info);
9302 struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
9303 int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9304 ? 16 : 8);
9305 int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9306 ? 2 : 1) * sizeof (Elf64_External_Rela);
9307 asection *got = ppc64_elf_tdata (gent->owner)->got;
9308
9309 gent->got.offset = got->size;
9310 got->size += entsize;
9311
9312 if (h->type == STT_GNU_IFUNC)
9313 {
9314 htab->elf.irelplt->size += rentsize;
9315 htab->got_reli_size += rentsize;
9316 }
9317 else if (((bfd_link_pic (info)
9318 && !(gent->tls_type != 0
9319 && bfd_link_executable (info)
9320 && SYMBOL_REFERENCES_LOCAL (info, h)))
9321 || (htab->elf.dynamic_sections_created
9322 && h->dynindx != -1
9323 && !SYMBOL_REFERENCES_LOCAL (info, h)))
9324 && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9325 {
9326 asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9327 relgot->size += rentsize;
9328 }
9329 }
9330
9331 /* This function merges got entries in the same toc group. */
9332
9333 static void
9334 merge_got_entries (struct got_entry **pent)
9335 {
9336 struct got_entry *ent, *ent2;
9337
9338 for (ent = *pent; ent != NULL; ent = ent->next)
9339 if (!ent->is_indirect)
9340 for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9341 if (!ent2->is_indirect
9342 && ent2->addend == ent->addend
9343 && ent2->tls_type == ent->tls_type
9344 && elf_gp (ent2->owner) == elf_gp (ent->owner))
9345 {
9346 ent2->is_indirect = TRUE;
9347 ent2->got.ent = ent;
9348 }
9349 }
9350
9351 /* If H is undefined, make it dynamic if that makes sense. */
9352
9353 static bfd_boolean
9354 ensure_undef_dynamic (struct bfd_link_info *info,
9355 struct elf_link_hash_entry *h)
9356 {
9357 struct elf_link_hash_table *htab = elf_hash_table (info);
9358
9359 if (htab->dynamic_sections_created
9360 && ((info->dynamic_undefined_weak != 0
9361 && h->root.type == bfd_link_hash_undefweak)
9362 || h->root.type == bfd_link_hash_undefined)
9363 && h->dynindx == -1
9364 && !h->forced_local
9365 && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9366 return bfd_elf_link_record_dynamic_symbol (info, h);
9367 return TRUE;
9368 }
9369
9370 /* Allocate space in .plt, .got and associated reloc sections for
9371 dynamic relocs. */
9372
9373 static bfd_boolean
9374 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9375 {
9376 struct bfd_link_info *info;
9377 struct ppc_link_hash_table *htab;
9378 asection *s;
9379 struct ppc_link_hash_entry *eh;
9380 struct got_entry **pgent, *gent;
9381
9382 if (h->root.type == bfd_link_hash_indirect)
9383 return TRUE;
9384
9385 info = (struct bfd_link_info *) inf;
9386 htab = ppc_hash_table (info);
9387 if (htab == NULL)
9388 return FALSE;
9389
9390 eh = ppc_elf_hash_entry (h);
9391 /* Run through the TLS GD got entries first if we're changing them
9392 to TPREL. */
9393 if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE))
9394 for (gent = h->got.glist; gent != NULL; gent = gent->next)
9395 if (gent->got.refcount > 0
9396 && (gent->tls_type & TLS_GD) != 0)
9397 {
9398 /* This was a GD entry that has been converted to TPREL. If
9399 there happens to be a TPREL entry we can use that one. */
9400 struct got_entry *ent;
9401 for (ent = h->got.glist; ent != NULL; ent = ent->next)
9402 if (ent->got.refcount > 0
9403 && (ent->tls_type & TLS_TPREL) != 0
9404 && ent->addend == gent->addend
9405 && ent->owner == gent->owner)
9406 {
9407 gent->got.refcount = 0;
9408 break;
9409 }
9410
9411 /* If not, then we'll be using our own TPREL entry. */
9412 if (gent->got.refcount != 0)
9413 gent->tls_type = TLS_TLS | TLS_TPREL;
9414 }
9415
9416 /* Remove any list entry that won't generate a word in the GOT before
9417 we call merge_got_entries. Otherwise we risk merging to empty
9418 entries. */
9419 pgent = &h->got.glist;
9420 while ((gent = *pgent) != NULL)
9421 if (gent->got.refcount > 0)
9422 {
9423 if ((gent->tls_type & TLS_LD) != 0
9424 && SYMBOL_REFERENCES_LOCAL (info, h))
9425 {
9426 ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9427 *pgent = gent->next;
9428 }
9429 else
9430 pgent = &gent->next;
9431 }
9432 else
9433 *pgent = gent->next;
9434
9435 if (!htab->do_multi_toc)
9436 merge_got_entries (&h->got.glist);
9437
9438 for (gent = h->got.glist; gent != NULL; gent = gent->next)
9439 if (!gent->is_indirect)
9440 {
9441 /* Ensure we catch all the cases where this symbol should
9442 be made dynamic. */
9443 if (!ensure_undef_dynamic (info, h))
9444 return FALSE;
9445
9446 if (!is_ppc64_elf (gent->owner))
9447 abort ();
9448
9449 allocate_got (h, info, gent);
9450 }
9451
9452 /* If no dynamic sections we can't have dynamic relocs, except for
9453 IFUNCs which are handled even in static executables. */
9454 if (!htab->elf.dynamic_sections_created
9455 && h->type != STT_GNU_IFUNC)
9456 eh->dyn_relocs = NULL;
9457
9458 /* Discard relocs on undefined symbols that must be local. */
9459 else if (h->root.type == bfd_link_hash_undefined
9460 && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9461 eh->dyn_relocs = NULL;
9462
9463 /* Also discard relocs on undefined weak syms with non-default
9464 visibility, or when dynamic_undefined_weak says so. */
9465 else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9466 eh->dyn_relocs = NULL;
9467
9468 if (eh->dyn_relocs != NULL)
9469 {
9470 struct elf_dyn_relocs *p, **pp;
9471
9472 /* In the shared -Bsymbolic case, discard space allocated for
9473 dynamic pc-relative relocs against symbols which turn out to
9474 be defined in regular objects. For the normal shared case,
9475 discard space for relocs that have become local due to symbol
9476 visibility changes. */
9477 if (bfd_link_pic (info))
9478 {
9479 /* Relocs that use pc_count are those that appear on a call
9480 insn, or certain REL relocs (see must_be_dyn_reloc) that
9481 can be generated via assembly. We want calls to
9482 protected symbols to resolve directly to the function
9483 rather than going via the plt. If people want function
9484 pointer comparisons to work as expected then they should
9485 avoid writing weird assembly. */
9486 if (SYMBOL_CALLS_LOCAL (info, h))
9487 {
9488 for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9489 {
9490 p->count -= p->pc_count;
9491 p->pc_count = 0;
9492 if (p->count == 0)
9493 *pp = p->next;
9494 else
9495 pp = &p->next;
9496 }
9497 }
9498
9499 if (eh->dyn_relocs != NULL)
9500 {
9501 /* Ensure we catch all the cases where this symbol
9502 should be made dynamic. */
9503 if (!ensure_undef_dynamic (info, h))
9504 return FALSE;
9505 }
9506 }
9507
9508 /* For a fixed position executable, discard space for
9509 relocs against symbols which are not dynamic. */
9510 else if (h->type != STT_GNU_IFUNC)
9511 {
9512 if (h->dynamic_adjusted
9513 && !h->def_regular
9514 && !ELF_COMMON_DEF_P (h))
9515 {
9516 /* Ensure we catch all the cases where this symbol
9517 should be made dynamic. */
9518 if (!ensure_undef_dynamic (info, h))
9519 return FALSE;
9520
9521 /* But if that didn't work out, discard dynamic relocs. */
9522 if (h->dynindx == -1)
9523 eh->dyn_relocs = NULL;
9524 }
9525 else
9526 eh->dyn_relocs = NULL;
9527 }
9528
9529 /* Finally, allocate space. */
9530 for (p = eh->dyn_relocs; p != NULL; p = p->next)
9531 {
9532 asection *sreloc = elf_section_data (p->sec)->sreloc;
9533 if (eh->elf.type == STT_GNU_IFUNC)
9534 sreloc = htab->elf.irelplt;
9535 sreloc->size += p->count * sizeof (Elf64_External_Rela);
9536 }
9537 }
9538
9539 /* We might need a PLT entry when the symbol
9540 a) is dynamic, or
9541 b) is an ifunc, or
9542 c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
9543 d) has plt16 relocs and we are linking statically. */
9544 if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
9545 || h->type == STT_GNU_IFUNC
9546 || (h->needs_plt && h->dynamic_adjusted)
9547 || (h->needs_plt
9548 && h->def_regular
9549 && !htab->elf.dynamic_sections_created
9550 && !htab->can_convert_all_inline_plt
9551 && (ppc_elf_hash_entry (h)->tls_mask
9552 & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
9553 {
9554 struct plt_entry *pent;
9555 bfd_boolean doneone = FALSE;
9556 for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9557 if (pent->plt.refcount > 0)
9558 {
9559 if (!htab->elf.dynamic_sections_created
9560 || h->dynindx == -1)
9561 {
9562 if (h->type == STT_GNU_IFUNC)
9563 {
9564 s = htab->elf.iplt;
9565 pent->plt.offset = s->size;
9566 s->size += PLT_ENTRY_SIZE (htab);
9567 s = htab->elf.irelplt;
9568 }
9569 else
9570 {
9571 s = htab->pltlocal;
9572 pent->plt.offset = s->size;
9573 s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9574 s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
9575 }
9576 }
9577 else
9578 {
9579 /* If this is the first .plt entry, make room for the special
9580 first entry. */
9581 s = htab->elf.splt;
9582 if (s->size == 0)
9583 s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9584
9585 pent->plt.offset = s->size;
9586
9587 /* Make room for this entry. */
9588 s->size += PLT_ENTRY_SIZE (htab);
9589
9590 /* Make room for the .glink code. */
9591 s = htab->glink;
9592 if (s->size == 0)
9593 s->size += GLINK_PLTRESOLVE_SIZE (htab);
9594 if (htab->opd_abi)
9595 {
9596 /* We need bigger stubs past index 32767. */
9597 if (s->size >= GLINK_PLTRESOLVE_SIZE (htab) + 32768*2*4)
9598 s->size += 4;
9599 s->size += 2*4;
9600 }
9601 else
9602 s->size += 4;
9603
9604 /* We also need to make an entry in the .rela.plt section. */
9605 s = htab->elf.srelplt;
9606 }
9607 if (s != NULL)
9608 s->size += sizeof (Elf64_External_Rela);
9609 doneone = TRUE;
9610 }
9611 else
9612 pent->plt.offset = (bfd_vma) -1;
9613 if (!doneone)
9614 {
9615 h->plt.plist = NULL;
9616 h->needs_plt = 0;
9617 }
9618 }
9619 else
9620 {
9621 h->plt.plist = NULL;
9622 h->needs_plt = 0;
9623 }
9624
9625 return TRUE;
9626 }
9627
9628 #define PPC_LO(v) ((v) & 0xffff)
9629 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9630 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9631 #define D34(v) \
9632 ((((v) & 0x3ffff0000ULL) << 16) | (v & 0xffff))
9633 #define HA34(v) ((v + (1ULL << 33)) >> 34)
9634
9635 /* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9636 to set up space for global entry stubs. These are put in glink,
9637 after the branch table. */
9638
9639 static bfd_boolean
9640 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9641 {
9642 struct bfd_link_info *info;
9643 struct ppc_link_hash_table *htab;
9644 struct plt_entry *pent;
9645 asection *s, *plt;
9646
9647 if (h->root.type == bfd_link_hash_indirect)
9648 return TRUE;
9649
9650 if (!h->pointer_equality_needed)
9651 return TRUE;
9652
9653 if (h->def_regular)
9654 return TRUE;
9655
9656 info = inf;
9657 htab = ppc_hash_table (info);
9658 if (htab == NULL)
9659 return FALSE;
9660
9661 s = htab->global_entry;
9662 plt = htab->elf.splt;
9663 for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9664 if (pent->plt.offset != (bfd_vma) -1
9665 && pent->addend == 0)
9666 {
9667 /* For ELFv2, if this symbol is not defined in a regular file
9668 and we are not generating a shared library or pie, then we
9669 need to define the symbol in the executable on a call stub.
9670 This is to avoid text relocations. */
9671 bfd_vma off, stub_align, stub_off, stub_size;
9672 unsigned int align_power;
9673
9674 stub_size = 16;
9675 stub_off = s->size;
9676 if (htab->params->plt_stub_align >= 0)
9677 align_power = htab->params->plt_stub_align;
9678 else
9679 align_power = -htab->params->plt_stub_align;
9680 /* Setting section alignment is delayed until we know it is
9681 non-empty. Otherwise the .text output section will be
9682 aligned at least to plt_stub_align even when no global
9683 entry stubs are needed. */
9684 if (s->alignment_power < align_power)
9685 s->alignment_power = align_power;
9686 stub_align = (bfd_vma) 1 << align_power;
9687 if (htab->params->plt_stub_align >= 0
9688 || ((((stub_off + stub_size - 1) & -stub_align)
9689 - (stub_off & -stub_align))
9690 > ((stub_size - 1) & -stub_align)))
9691 stub_off = (stub_off + stub_align - 1) & -stub_align;
9692 off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
9693 off -= stub_off + s->output_offset + s->output_section->vma;
9694 /* Note that for --plt-stub-align negative we have a possible
9695 dependency between stub offset and size. Break that
9696 dependency by assuming the max stub size when calculating
9697 the stub offset. */
9698 if (PPC_HA (off) == 0)
9699 stub_size -= 4;
9700 h->root.type = bfd_link_hash_defined;
9701 h->root.u.def.section = s;
9702 h->root.u.def.value = stub_off;
9703 s->size = stub_off + stub_size;
9704 break;
9705 }
9706 return TRUE;
9707 }
9708
9709 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
9710 read-only sections. */
9711
9712 static bfd_boolean
9713 maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
9714 {
9715 asection *sec;
9716
9717 if (h->root.type == bfd_link_hash_indirect)
9718 return TRUE;
9719
9720 sec = readonly_dynrelocs (h);
9721 if (sec != NULL)
9722 {
9723 struct bfd_link_info *info = (struct bfd_link_info *) inf;
9724
9725 info->flags |= DF_TEXTREL;
9726 info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'"
9727 " in read-only section `%pA'\n"),
9728 sec->owner, h->root.root.string, sec);
9729
9730 /* Not an error, just cut short the traversal. */
9731 return FALSE;
9732 }
9733 return TRUE;
9734 }
9735
9736 /* Set the sizes of the dynamic sections. */
9737
9738 static bfd_boolean
9739 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9740 struct bfd_link_info *info)
9741 {
9742 struct ppc_link_hash_table *htab;
9743 bfd *dynobj;
9744 asection *s;
9745 bfd_boolean relocs;
9746 bfd *ibfd;
9747 struct got_entry *first_tlsld;
9748
9749 htab = ppc_hash_table (info);
9750 if (htab == NULL)
9751 return FALSE;
9752
9753 dynobj = htab->elf.dynobj;
9754 if (dynobj == NULL)
9755 abort ();
9756
9757 if (htab->elf.dynamic_sections_created)
9758 {
9759 /* Set the contents of the .interp section to the interpreter. */
9760 if (bfd_link_executable (info) && !info->nointerp)
9761 {
9762 s = bfd_get_linker_section (dynobj, ".interp");
9763 if (s == NULL)
9764 abort ();
9765 s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9766 s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9767 }
9768 }
9769
9770 /* Set up .got offsets for local syms, and space for local dynamic
9771 relocs. */
9772 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9773 {
9774 struct got_entry **lgot_ents;
9775 struct got_entry **end_lgot_ents;
9776 struct plt_entry **local_plt;
9777 struct plt_entry **end_local_plt;
9778 unsigned char *lgot_masks;
9779 bfd_size_type locsymcount;
9780 Elf_Internal_Shdr *symtab_hdr;
9781
9782 if (!is_ppc64_elf (ibfd))
9783 continue;
9784
9785 for (s = ibfd->sections; s != NULL; s = s->next)
9786 {
9787 struct ppc_dyn_relocs *p;
9788
9789 for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9790 {
9791 if (!bfd_is_abs_section (p->sec)
9792 && bfd_is_abs_section (p->sec->output_section))
9793 {
9794 /* Input section has been discarded, either because
9795 it is a copy of a linkonce section or due to
9796 linker script /DISCARD/, so we'll be discarding
9797 the relocs too. */
9798 }
9799 else if (p->count != 0)
9800 {
9801 asection *srel = elf_section_data (p->sec)->sreloc;
9802 if (p->ifunc)
9803 srel = htab->elf.irelplt;
9804 srel->size += p->count * sizeof (Elf64_External_Rela);
9805 if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9806 info->flags |= DF_TEXTREL;
9807 }
9808 }
9809 }
9810
9811 lgot_ents = elf_local_got_ents (ibfd);
9812 if (!lgot_ents)
9813 continue;
9814
9815 symtab_hdr = &elf_symtab_hdr (ibfd);
9816 locsymcount = symtab_hdr->sh_info;
9817 end_lgot_ents = lgot_ents + locsymcount;
9818 local_plt = (struct plt_entry **) end_lgot_ents;
9819 end_local_plt = local_plt + locsymcount;
9820 lgot_masks = (unsigned char *) end_local_plt;
9821 s = ppc64_elf_tdata (ibfd)->got;
9822 for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9823 {
9824 struct got_entry **pent, *ent;
9825
9826 pent = lgot_ents;
9827 while ((ent = *pent) != NULL)
9828 if (ent->got.refcount > 0)
9829 {
9830 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9831 {
9832 ppc64_tlsld_got (ibfd)->got.refcount += 1;
9833 *pent = ent->next;
9834 }
9835 else
9836 {
9837 unsigned int ent_size = 8;
9838 unsigned int rel_size = sizeof (Elf64_External_Rela);
9839
9840 ent->got.offset = s->size;
9841 if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9842 {
9843 ent_size *= 2;
9844 rel_size *= 2;
9845 }
9846 s->size += ent_size;
9847 if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9848 {
9849 htab->elf.irelplt->size += rel_size;
9850 htab->got_reli_size += rel_size;
9851 }
9852 else if (bfd_link_pic (info)
9853 && !(ent->tls_type != 0
9854 && bfd_link_executable (info)))
9855 {
9856 asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9857 srel->size += rel_size;
9858 }
9859 pent = &ent->next;
9860 }
9861 }
9862 else
9863 *pent = ent->next;
9864 }
9865
9866 /* Allocate space for plt calls to local syms. */
9867 lgot_masks = (unsigned char *) end_local_plt;
9868 for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
9869 {
9870 struct plt_entry *ent;
9871
9872 for (ent = *local_plt; ent != NULL; ent = ent->next)
9873 if (ent->plt.refcount > 0)
9874 {
9875 if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
9876 {
9877 s = htab->elf.iplt;
9878 ent->plt.offset = s->size;
9879 s->size += PLT_ENTRY_SIZE (htab);
9880 htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
9881 }
9882 else if (htab->can_convert_all_inline_plt
9883 || (*lgot_masks & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)
9884 ent->plt.offset = (bfd_vma) -1;
9885 else
9886 {
9887 s = htab->pltlocal;
9888 ent->plt.offset = s->size;
9889 s->size += LOCAL_PLT_ENTRY_SIZE (htab);
9890 if (bfd_link_pic (info))
9891 htab->relpltlocal->size += sizeof (Elf64_External_Rela);
9892 }
9893 }
9894 else
9895 ent->plt.offset = (bfd_vma) -1;
9896 }
9897 }
9898
9899 /* Allocate global sym .plt and .got entries, and space for global
9900 sym dynamic relocs. */
9901 elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9902
9903 if (!htab->opd_abi && !bfd_link_pic (info))
9904 elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
9905
9906 first_tlsld = NULL;
9907 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9908 {
9909 struct got_entry *ent;
9910
9911 if (!is_ppc64_elf (ibfd))
9912 continue;
9913
9914 ent = ppc64_tlsld_got (ibfd);
9915 if (ent->got.refcount > 0)
9916 {
9917 if (!htab->do_multi_toc && first_tlsld != NULL)
9918 {
9919 ent->is_indirect = TRUE;
9920 ent->got.ent = first_tlsld;
9921 }
9922 else
9923 {
9924 if (first_tlsld == NULL)
9925 first_tlsld = ent;
9926 s = ppc64_elf_tdata (ibfd)->got;
9927 ent->got.offset = s->size;
9928 ent->owner = ibfd;
9929 s->size += 16;
9930 if (bfd_link_dll (info))
9931 {
9932 asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9933 srel->size += sizeof (Elf64_External_Rela);
9934 }
9935 }
9936 }
9937 else
9938 ent->got.offset = (bfd_vma) -1;
9939 }
9940
9941 /* We now have determined the sizes of the various dynamic sections.
9942 Allocate memory for them. */
9943 relocs = FALSE;
9944 for (s = dynobj->sections; s != NULL; s = s->next)
9945 {
9946 if ((s->flags & SEC_LINKER_CREATED) == 0)
9947 continue;
9948
9949 if (s == htab->brlt || s == htab->relbrlt)
9950 /* These haven't been allocated yet; don't strip. */
9951 continue;
9952 else if (s == htab->elf.sgot
9953 || s == htab->elf.splt
9954 || s == htab->elf.iplt
9955 || s == htab->pltlocal
9956 || s == htab->glink
9957 || s == htab->global_entry
9958 || s == htab->elf.sdynbss
9959 || s == htab->elf.sdynrelro)
9960 {
9961 /* Strip this section if we don't need it; see the
9962 comment below. */
9963 }
9964 else if (s == htab->glink_eh_frame)
9965 {
9966 if (!bfd_is_abs_section (s->output_section))
9967 /* Not sized yet. */
9968 continue;
9969 }
9970 else if (CONST_STRNEQ (s->name, ".rela"))
9971 {
9972 if (s->size != 0)
9973 {
9974 if (s != htab->elf.srelplt)
9975 relocs = TRUE;
9976
9977 /* We use the reloc_count field as a counter if we need
9978 to copy relocs into the output file. */
9979 s->reloc_count = 0;
9980 }
9981 }
9982 else
9983 {
9984 /* It's not one of our sections, so don't allocate space. */
9985 continue;
9986 }
9987
9988 if (s->size == 0)
9989 {
9990 /* If we don't need this section, strip it from the
9991 output file. This is mostly to handle .rela.bss and
9992 .rela.plt. We must create both sections in
9993 create_dynamic_sections, because they must be created
9994 before the linker maps input sections to output
9995 sections. The linker does that before
9996 adjust_dynamic_symbol is called, and it is that
9997 function which decides whether anything needs to go
9998 into these sections. */
9999 s->flags |= SEC_EXCLUDE;
10000 continue;
10001 }
10002
10003 if (bfd_is_abs_section (s->output_section))
10004 _bfd_error_handler (_("warning: discarding dynamic section %s"),
10005 s->name);
10006
10007 if ((s->flags & SEC_HAS_CONTENTS) == 0)
10008 continue;
10009
10010 /* Allocate memory for the section contents. We use bfd_zalloc
10011 here in case unused entries are not reclaimed before the
10012 section's contents are written out. This should not happen,
10013 but this way if it does we get a R_PPC64_NONE reloc in .rela
10014 sections instead of garbage.
10015 We also rely on the section contents being zero when writing
10016 the GOT and .dynrelro. */
10017 s->contents = bfd_zalloc (dynobj, s->size);
10018 if (s->contents == NULL)
10019 return FALSE;
10020 }
10021
10022 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10023 {
10024 if (!is_ppc64_elf (ibfd))
10025 continue;
10026
10027 s = ppc64_elf_tdata (ibfd)->got;
10028 if (s != NULL && s != htab->elf.sgot)
10029 {
10030 if (s->size == 0)
10031 s->flags |= SEC_EXCLUDE;
10032 else
10033 {
10034 s->contents = bfd_zalloc (ibfd, s->size);
10035 if (s->contents == NULL)
10036 return FALSE;
10037 }
10038 }
10039 s = ppc64_elf_tdata (ibfd)->relgot;
10040 if (s != NULL)
10041 {
10042 if (s->size == 0)
10043 s->flags |= SEC_EXCLUDE;
10044 else
10045 {
10046 s->contents = bfd_zalloc (ibfd, s->size);
10047 if (s->contents == NULL)
10048 return FALSE;
10049 relocs = TRUE;
10050 s->reloc_count = 0;
10051 }
10052 }
10053 }
10054
10055 if (htab->elf.dynamic_sections_created)
10056 {
10057 bfd_boolean tls_opt;
10058
10059 /* Add some entries to the .dynamic section. We fill in the
10060 values later, in ppc64_elf_finish_dynamic_sections, but we
10061 must add the entries now so that we get the correct size for
10062 the .dynamic section. The DT_DEBUG entry is filled in by the
10063 dynamic linker and used by the debugger. */
10064 #define add_dynamic_entry(TAG, VAL) \
10065 _bfd_elf_add_dynamic_entry (info, TAG, VAL)
10066
10067 if (bfd_link_executable (info))
10068 {
10069 if (!add_dynamic_entry (DT_DEBUG, 0))
10070 return FALSE;
10071 }
10072
10073 if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
10074 {
10075 if (!add_dynamic_entry (DT_PLTGOT, 0)
10076 || !add_dynamic_entry (DT_PLTRELSZ, 0)
10077 || !add_dynamic_entry (DT_PLTREL, DT_RELA)
10078 || !add_dynamic_entry (DT_JMPREL, 0)
10079 || !add_dynamic_entry (DT_PPC64_GLINK, 0))
10080 return FALSE;
10081 }
10082
10083 if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
10084 {
10085 if (!add_dynamic_entry (DT_PPC64_OPD, 0)
10086 || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
10087 return FALSE;
10088 }
10089
10090 tls_opt = (htab->params->tls_get_addr_opt
10091 && htab->tls_get_addr_fd != NULL
10092 && htab->tls_get_addr_fd->elf.plt.plist != NULL);
10093 if (tls_opt || !htab->opd_abi)
10094 {
10095 if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
10096 return FALSE;
10097 }
10098
10099 if (relocs)
10100 {
10101 if (!add_dynamic_entry (DT_RELA, 0)
10102 || !add_dynamic_entry (DT_RELASZ, 0)
10103 || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
10104 return FALSE;
10105
10106 /* If any dynamic relocs apply to a read-only section,
10107 then we need a DT_TEXTREL entry. */
10108 if ((info->flags & DF_TEXTREL) == 0)
10109 elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
10110
10111 if ((info->flags & DF_TEXTREL) != 0)
10112 {
10113 if (!add_dynamic_entry (DT_TEXTREL, 0))
10114 return FALSE;
10115 }
10116 }
10117 }
10118 #undef add_dynamic_entry
10119
10120 return TRUE;
10121 }
10122
10123 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
10124
10125 static bfd_boolean
10126 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
10127 {
10128 if (h->plt.plist != NULL
10129 && !h->def_regular
10130 && !h->pointer_equality_needed)
10131 return FALSE;
10132
10133 return _bfd_elf_hash_symbol (h);
10134 }
10135
10136 /* Determine the type of stub needed, if any, for a call. */
10137
10138 static inline enum ppc_stub_type
10139 ppc_type_of_stub (asection *input_sec,
10140 const Elf_Internal_Rela *rel,
10141 struct ppc_link_hash_entry **hash,
10142 struct plt_entry **plt_ent,
10143 bfd_vma destination,
10144 unsigned long local_off)
10145 {
10146 struct ppc_link_hash_entry *h = *hash;
10147 bfd_vma location;
10148 bfd_vma branch_offset;
10149 bfd_vma max_branch_offset;
10150 enum elf_ppc64_reloc_type r_type;
10151
10152 if (h != NULL)
10153 {
10154 struct plt_entry *ent;
10155 struct ppc_link_hash_entry *fdh = h;
10156 if (h->oh != NULL
10157 && h->oh->is_func_descriptor)
10158 {
10159 fdh = ppc_follow_link (h->oh);
10160 *hash = fdh;
10161 }
10162
10163 for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10164 if (ent->addend == rel->r_addend
10165 && ent->plt.offset != (bfd_vma) -1)
10166 {
10167 *plt_ent = ent;
10168 return ppc_stub_plt_call;
10169 }
10170
10171 /* Here, we know we don't have a plt entry. If we don't have a
10172 either a defined function descriptor or a defined entry symbol
10173 in a regular object file, then it is pointless trying to make
10174 any other type of stub. */
10175 if (!is_static_defined (&fdh->elf)
10176 && !is_static_defined (&h->elf))
10177 return ppc_stub_none;
10178 }
10179 else if (elf_local_got_ents (input_sec->owner) != NULL)
10180 {
10181 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10182 struct plt_entry **local_plt = (struct plt_entry **)
10183 elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10184 unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10185
10186 if (local_plt[r_symndx] != NULL)
10187 {
10188 struct plt_entry *ent;
10189
10190 for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10191 if (ent->addend == rel->r_addend
10192 && ent->plt.offset != (bfd_vma) -1)
10193 {
10194 *plt_ent = ent;
10195 return ppc_stub_plt_call;
10196 }
10197 }
10198 }
10199
10200 /* Determine where the call point is. */
10201 location = (input_sec->output_offset
10202 + input_sec->output_section->vma
10203 + rel->r_offset);
10204
10205 branch_offset = destination - location;
10206 r_type = ELF64_R_TYPE (rel->r_info);
10207
10208 /* Determine if a long branch stub is needed. */
10209 max_branch_offset = 1 << 25;
10210 if (r_type == R_PPC64_REL14
10211 || r_type == R_PPC64_REL14_BRTAKEN
10212 || r_type == R_PPC64_REL14_BRNTAKEN)
10213 max_branch_offset = 1 << 15;
10214
10215 if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10216 /* We need a stub. Figure out whether a long_branch or plt_branch
10217 is needed later. */
10218 return ppc_stub_long_branch;
10219
10220 return ppc_stub_none;
10221 }
10222
10223 /* Gets the address of a label (1:) in r11 and builds an offset in r12,
10224 then adds it to r11 (LOAD false) or loads r12 from r11+r12 (LOAD true).
10225 . mflr %r12
10226 . bcl 20,31,1f
10227 .1: mflr %r11
10228 . mtlr %r12
10229 . lis %r12,xxx-1b@highest
10230 . ori %r12,%r12,xxx-1b@higher
10231 . sldi %r12,%r12,32
10232 . oris %r12,%r12,xxx-1b@high
10233 . ori %r12,%r12,xxx-1b@l
10234 . add/ldx %r12,%r11,%r12 */
10235
10236 static bfd_byte *
10237 build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
10238 {
10239 bfd_put_32 (abfd, MFLR_R12, p);
10240 p += 4;
10241 bfd_put_32 (abfd, BCL_20_31, p);
10242 p += 4;
10243 bfd_put_32 (abfd, MFLR_R11, p);
10244 p += 4;
10245 bfd_put_32 (abfd, MTLR_R12, p);
10246 p += 4;
10247 if (off + 0x8000 < 0x10000)
10248 {
10249 if (load)
10250 bfd_put_32 (abfd, LD_R12_0R11 + PPC_LO (off), p);
10251 else
10252 bfd_put_32 (abfd, ADDI_R12_R11 + PPC_LO (off), p);
10253 p += 4;
10254 }
10255 else if (off + 0x80008000ULL < 0x100000000ULL)
10256 {
10257 bfd_put_32 (abfd, ADDIS_R12_R11 + PPC_HA (off), p);
10258 p += 4;
10259 if (load)
10260 bfd_put_32 (abfd, LD_R12_0R12 + PPC_LO (off), p);
10261 else
10262 bfd_put_32 (abfd, ADDI_R12_R12 + PPC_LO (off), p);
10263 p += 4;
10264 }
10265 else
10266 {
10267 if (off + 0x800000000000ULL < 0x1000000000000ULL)
10268 {
10269 bfd_put_32 (abfd, LI_R12_0 + ((off >> 32) & 0xffff), p);
10270 p += 4;
10271 }
10272 else
10273 {
10274 bfd_put_32 (abfd, LIS_R12 + ((off >> 48) & 0xffff), p);
10275 p += 4;
10276 if (((off >> 32) & 0xffff) != 0)
10277 {
10278 bfd_put_32 (abfd, ORI_R12_R12_0 + ((off >> 32) & 0xffff), p);
10279 p += 4;
10280 }
10281 }
10282 if (((off >> 32) & 0xffffffffULL) != 0)
10283 {
10284 bfd_put_32 (abfd, SLDI_R12_R12_32, p);
10285 p += 4;
10286 }
10287 if (PPC_HI (off) != 0)
10288 {
10289 bfd_put_32 (abfd, ORIS_R12_R12_0 + PPC_HI (off), p);
10290 p += 4;
10291 }
10292 if (PPC_LO (off) != 0)
10293 {
10294 bfd_put_32 (abfd, ORI_R12_R12_0 + PPC_LO (off), p);
10295 p += 4;
10296 }
10297 if (load)
10298 bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10299 else
10300 bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10301 p += 4;
10302 }
10303 return p;
10304 }
10305
10306 static unsigned int
10307 size_offset (bfd_vma off)
10308 {
10309 unsigned int size;
10310 if (off + 0x8000 < 0x10000)
10311 size = 4;
10312 else if (off + 0x80008000ULL < 0x100000000ULL)
10313 size = 8;
10314 else
10315 {
10316 if (off + 0x800000000000ULL < 0x1000000000000ULL)
10317 size = 4;
10318 else
10319 {
10320 size = 4;
10321 if (((off >> 32) & 0xffff) != 0)
10322 size += 4;
10323 }
10324 if (((off >> 32) & 0xffffffffULL) != 0)
10325 size += 4;
10326 if (PPC_HI (off) != 0)
10327 size += 4;
10328 if (PPC_LO (off) != 0)
10329 size += 4;
10330 size += 4;
10331 }
10332 return size + 16;
10333 }
10334
10335 static unsigned int
10336 num_relocs_for_offset (bfd_vma off)
10337 {
10338 unsigned int num_rel;
10339 if (off + 0x8000 < 0x10000)
10340 num_rel = 1;
10341 else if (off + 0x80008000ULL < 0x100000000ULL)
10342 num_rel = 2;
10343 else
10344 {
10345 num_rel = 1;
10346 if (off + 0x800000000000ULL >= 0x1000000000000ULL
10347 && ((off >> 32) & 0xffff) != 0)
10348 num_rel += 1;
10349 if (PPC_HI (off) != 0)
10350 num_rel += 1;
10351 if (PPC_LO (off) != 0)
10352 num_rel += 1;
10353 }
10354 return num_rel;
10355 }
10356
10357 static Elf_Internal_Rela *
10358 emit_relocs_for_offset (struct bfd_link_info *info, Elf_Internal_Rela *r,
10359 bfd_vma roff, bfd_vma targ, bfd_vma off)
10360 {
10361 bfd_vma relative_targ = targ - (roff - 8);
10362 if (bfd_big_endian (info->output_bfd))
10363 roff += 2;
10364 r->r_offset = roff;
10365 r->r_addend = relative_targ + roff;
10366 if (off + 0x8000 < 0x10000)
10367 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16);
10368 else if (off + 0x80008000ULL < 0x100000000ULL)
10369 {
10370 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HA);
10371 ++r;
10372 roff += 4;
10373 r->r_offset = roff;
10374 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10375 r->r_addend = relative_targ + roff;
10376 }
10377 else
10378 {
10379 if (off + 0x800000000000ULL < 0x1000000000000ULL)
10380 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10381 else
10382 {
10383 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHEST);
10384 if (((off >> 32) & 0xffff) != 0)
10385 {
10386 ++r;
10387 roff += 4;
10388 r->r_offset = roff;
10389 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHER);
10390 r->r_addend = relative_targ + roff;
10391 }
10392 }
10393 if (((off >> 32) & 0xffffffffULL) != 0)
10394 roff += 4;
10395 if (PPC_HI (off) != 0)
10396 {
10397 ++r;
10398 roff += 4;
10399 r->r_offset = roff;
10400 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGH);
10401 r->r_addend = relative_targ + roff;
10402 }
10403 if (PPC_LO (off) != 0)
10404 {
10405 ++r;
10406 roff += 4;
10407 r->r_offset = roff;
10408 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_LO);
10409 r->r_addend = relative_targ + roff;
10410 }
10411 }
10412 return r;
10413 }
10414
10415 static bfd_byte *
10416 build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
10417 bfd_boolean load)
10418 {
10419 uint64_t insn;
10420 if (off - odd + (1ULL << 33) < 1ULL << 34)
10421 {
10422 off -= odd;
10423 if (odd)
10424 {
10425 bfd_put_32 (abfd, NOP, p);
10426 p += 4;
10427 }
10428 if (load)
10429 insn = PLD_R12_PC;
10430 else
10431 insn = PADDI_R12_PC;
10432 insn |= D34 (off);
10433 bfd_put_32 (abfd, insn >> 32, p);
10434 p += 4;
10435 bfd_put_32 (abfd, insn, p);
10436 }
10437 /* The minimum value for paddi is -0x200000000. The minimum value
10438 for li is -0x8000, which when shifted by 34 and added gives a
10439 minimum value of -0x2000200000000. The maximum value is
10440 0x1ffffffff+0x7fff<<34 which is 0x2000200000000-1. */
10441 else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10442 {
10443 off -= 8 - odd;
10444 bfd_put_32 (abfd, LI_R11_0 | (HA34 (off) & 0xffff), p);
10445 p += 4;
10446 if (!odd)
10447 {
10448 bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10449 p += 4;
10450 }
10451 insn = PADDI_R12_PC | D34 (off);
10452 bfd_put_32 (abfd, insn >> 32, p);
10453 p += 4;
10454 bfd_put_32 (abfd, insn, p);
10455 p += 4;
10456 if (odd)
10457 {
10458 bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10459 p += 4;
10460 }
10461 if (load)
10462 bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10463 else
10464 bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10465 }
10466 else
10467 {
10468 off -= odd + 8;
10469 bfd_put_32 (abfd, LIS_R11 | ((HA34 (off) >> 16) & 0x3fff), p);
10470 p += 4;
10471 bfd_put_32 (abfd, ORI_R11_R11_0 | (HA34 (off) & 0xffff), p);
10472 p += 4;
10473 if (odd)
10474 {
10475 bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10476 p += 4;
10477 }
10478 insn = PADDI_R12_PC | D34 (off);
10479 bfd_put_32 (abfd, insn >> 32, p);
10480 p += 4;
10481 bfd_put_32 (abfd, insn, p);
10482 p += 4;
10483 if (!odd)
10484 {
10485 bfd_put_32 (abfd, SLDI_R11_R11_34, p);
10486 p += 4;
10487 }
10488 if (load)
10489 bfd_put_32 (abfd, LDX_R12_R11_R12, p);
10490 else
10491 bfd_put_32 (abfd, ADD_R12_R11_R12, p);
10492 }
10493 p += 4;
10494 return p;
10495 }
10496
10497 static unsigned int
10498 size_powerxx_offset (bfd_vma off, int odd)
10499 {
10500 if (off - odd + (1ULL << 33) < 1ULL << 34)
10501 return odd + 8;
10502 else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10503 return 20;
10504 else
10505 return 24;
10506 }
10507
10508 static unsigned int
10509 num_relocs_for_powerxx_offset (bfd_vma off, int odd)
10510 {
10511 if (off - odd + (1ULL << 33) < 1ULL << 34)
10512 return 1;
10513 else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10514 return 2;
10515 else
10516 return 3;
10517 }
10518
10519 static Elf_Internal_Rela *
10520 emit_relocs_for_powerxx_offset (struct bfd_link_info *info,
10521 Elf_Internal_Rela *r, bfd_vma roff,
10522 bfd_vma targ, bfd_vma off, int odd)
10523 {
10524 if (off - odd + (1ULL << 33) < 1ULL << 34)
10525 roff += odd;
10526 else if (off - (8 - odd) + (0x20002ULL << 32) < 0x40004ULL << 32)
10527 {
10528 int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10529 r->r_offset = roff + d_offset;
10530 r->r_addend = targ + 8 - odd - d_offset;
10531 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10532 ++r;
10533 roff += 8 - odd;
10534 }
10535 else
10536 {
10537 int d_offset = bfd_big_endian (info->output_bfd) ? 2 : 0;
10538 r->r_offset = roff + d_offset;
10539 r->r_addend = targ + 8 + odd - d_offset;
10540 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHESTA34);
10541 ++r;
10542 roff += 4;
10543 r->r_offset = roff + d_offset;
10544 r->r_addend = targ + 4 + odd - d_offset;
10545 r->r_info = ELF64_R_INFO (0, R_PPC64_REL16_HIGHERA34);
10546 ++r;
10547 roff += 4 + odd;
10548 }
10549 r->r_offset = roff;
10550 r->r_addend = targ;
10551 r->r_info = ELF64_R_INFO (0, R_PPC64_PCREL34);
10552 return r;
10553 }
10554
10555 /* Emit .eh_frame opcode to advance pc by DELTA. */
10556
10557 static bfd_byte *
10558 eh_advance (bfd *abfd, bfd_byte *eh, unsigned int delta)
10559 {
10560 delta /= 4;
10561 if (delta < 64)
10562 *eh++ = DW_CFA_advance_loc + delta;
10563 else if (delta < 256)
10564 {
10565 *eh++ = DW_CFA_advance_loc1;
10566 *eh++ = delta;
10567 }
10568 else if (delta < 65536)
10569 {
10570 *eh++ = DW_CFA_advance_loc2;
10571 bfd_put_16 (abfd, delta, eh);
10572 eh += 2;
10573 }
10574 else
10575 {
10576 *eh++ = DW_CFA_advance_loc4;
10577 bfd_put_32 (abfd, delta, eh);
10578 eh += 4;
10579 }
10580 return eh;
10581 }
10582
10583 /* Size of required .eh_frame opcode to advance pc by DELTA. */
10584
10585 static unsigned int
10586 eh_advance_size (unsigned int delta)
10587 {
10588 if (delta < 64 * 4)
10589 /* DW_CFA_advance_loc+[1..63]. */
10590 return 1;
10591 if (delta < 256 * 4)
10592 /* DW_CFA_advance_loc1, byte. */
10593 return 2;
10594 if (delta < 65536 * 4)
10595 /* DW_CFA_advance_loc2, 2 bytes. */
10596 return 3;
10597 /* DW_CFA_advance_loc4, 4 bytes. */
10598 return 5;
10599 }
10600
10601 /* With power7 weakly ordered memory model, it is possible for ld.so
10602 to update a plt entry in one thread and have another thread see a
10603 stale zero toc entry. To avoid this we need some sort of acquire
10604 barrier in the call stub. One solution is to make the load of the
10605 toc word seem to appear to depend on the load of the function entry
10606 word. Another solution is to test for r2 being zero, and branch to
10607 the appropriate glink entry if so.
10608
10609 . fake dep barrier compare
10610 . ld 12,xxx(2) ld 12,xxx(2)
10611 . mtctr 12 mtctr 12
10612 . xor 11,12,12 ld 2,xxx+8(2)
10613 . add 2,2,11 cmpldi 2,0
10614 . ld 2,xxx+8(2) bnectr+
10615 . bctr b <glink_entry>
10616
10617 The solution involving the compare turns out to be faster, so
10618 that's what we use unless the branch won't reach. */
10619
10620 #define ALWAYS_USE_FAKE_DEP 0
10621 #define ALWAYS_EMIT_R2SAVE 0
10622
10623 static inline unsigned int
10624 plt_stub_size (struct ppc_link_hash_table *htab,
10625 struct ppc_stub_hash_entry *stub_entry,
10626 bfd_vma off)
10627 {
10628 unsigned size;
10629
10630 if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
10631 {
10632 if (htab->powerxx_stubs)
10633 {
10634 bfd_vma start = (stub_entry->stub_offset
10635 + stub_entry->group->stub_sec->output_offset
10636 + stub_entry->group->stub_sec->output_section->vma);
10637 if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10638 start += 4;
10639 size = 8 + size_powerxx_offset (off, start & 4);
10640 }
10641 else
10642 size = 8 + size_offset (off - 8);
10643 if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
10644 size += 4;
10645 return size;
10646 }
10647
10648 size = 12;
10649 if (ALWAYS_EMIT_R2SAVE
10650 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10651 size += 4;
10652 if (PPC_HA (off) != 0)
10653 size += 4;
10654 if (htab->opd_abi)
10655 {
10656 size += 4;
10657 if (htab->params->plt_static_chain)
10658 size += 4;
10659 if (htab->params->plt_thread_safe
10660 && htab->elf.dynamic_sections_created
10661 && stub_entry->h != NULL
10662 && stub_entry->h->elf.dynindx != -1)
10663 size += 8;
10664 if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10665 size += 4;
10666 }
10667 if (stub_entry->h != NULL
10668 && is_tls_get_addr (&stub_entry->h->elf, htab)
10669 && htab->params->tls_get_addr_opt)
10670 {
10671 size += 7 * 4;
10672 if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
10673 size += 6 * 4;
10674 }
10675 return size;
10676 }
10677
10678 /* Depending on the sign of plt_stub_align:
10679 If positive, return the padding to align to a 2**plt_stub_align
10680 boundary.
10681 If negative, if this stub would cross fewer 2**plt_stub_align
10682 boundaries if we align, then return the padding needed to do so. */
10683
10684 static inline unsigned int
10685 plt_stub_pad (struct ppc_link_hash_table *htab,
10686 struct ppc_stub_hash_entry *stub_entry,
10687 bfd_vma plt_off)
10688 {
10689 int stub_align;
10690 unsigned stub_size;
10691 bfd_vma stub_off = stub_entry->group->stub_sec->size;
10692
10693 if (htab->params->plt_stub_align >= 0)
10694 {
10695 stub_align = 1 << htab->params->plt_stub_align;
10696 if ((stub_off & (stub_align - 1)) != 0)
10697 return stub_align - (stub_off & (stub_align - 1));
10698 return 0;
10699 }
10700
10701 stub_align = 1 << -htab->params->plt_stub_align;
10702 stub_size = plt_stub_size (htab, stub_entry, plt_off);
10703 if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10704 > ((stub_size - 1) & -stub_align))
10705 return stub_align - (stub_off & (stub_align - 1));
10706 return 0;
10707 }
10708
10709 /* Build a .plt call stub. */
10710
10711 static inline bfd_byte *
10712 build_plt_stub (struct ppc_link_hash_table *htab,
10713 struct ppc_stub_hash_entry *stub_entry,
10714 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10715 {
10716 bfd *obfd = htab->params->stub_bfd;
10717 bfd_boolean plt_load_toc = htab->opd_abi;
10718 bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10719 bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10720 && htab->elf.dynamic_sections_created
10721 && stub_entry->h != NULL
10722 && stub_entry->h->elf.dynindx != -1);
10723 bfd_boolean use_fake_dep = plt_thread_safe;
10724 bfd_vma cmp_branch_off = 0;
10725
10726 if (!ALWAYS_USE_FAKE_DEP
10727 && plt_load_toc
10728 && plt_thread_safe
10729 && !(is_tls_get_addr (&stub_entry->h->elf, htab)
10730 && htab->params->tls_get_addr_opt))
10731 {
10732 bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10733 bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10734 / PLT_ENTRY_SIZE (htab));
10735 bfd_vma glinkoff = GLINK_PLTRESOLVE_SIZE (htab) + pltindex * 8;
10736 bfd_vma to, from;
10737
10738 if (pltindex > 32768)
10739 glinkoff += (pltindex - 32768) * 4;
10740 to = (glinkoff
10741 + htab->glink->output_offset
10742 + htab->glink->output_section->vma);
10743 from = (p - stub_entry->group->stub_sec->contents
10744 + 4 * (ALWAYS_EMIT_R2SAVE
10745 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10746 + 4 * (PPC_HA (offset) != 0)
10747 + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10748 != PPC_HA (offset))
10749 + 4 * (plt_static_chain != 0)
10750 + 20
10751 + stub_entry->group->stub_sec->output_offset
10752 + stub_entry->group->stub_sec->output_section->vma);
10753 cmp_branch_off = to - from;
10754 use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10755 }
10756
10757 if (PPC_HA (offset) != 0)
10758 {
10759 if (r != NULL)
10760 {
10761 if (ALWAYS_EMIT_R2SAVE
10762 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10763 r[0].r_offset += 4;
10764 r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10765 r[1].r_offset = r[0].r_offset + 4;
10766 r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10767 r[1].r_addend = r[0].r_addend;
10768 if (plt_load_toc)
10769 {
10770 if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10771 {
10772 r[2].r_offset = r[1].r_offset + 4;
10773 r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10774 r[2].r_addend = r[0].r_addend;
10775 }
10776 else
10777 {
10778 r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10779 r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10780 r[2].r_addend = r[0].r_addend + 8;
10781 if (plt_static_chain)
10782 {
10783 r[3].r_offset = r[2].r_offset + 4;
10784 r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10785 r[3].r_addend = r[0].r_addend + 16;
10786 }
10787 }
10788 }
10789 }
10790 if (ALWAYS_EMIT_R2SAVE
10791 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10792 bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p), p += 4;
10793 if (plt_load_toc)
10794 {
10795 bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p), p += 4;
10796 bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p), p += 4;
10797 }
10798 else
10799 {
10800 bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4;
10801 bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p), p += 4;
10802 }
10803 if (plt_load_toc
10804 && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10805 {
10806 bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p), p += 4;
10807 offset = 0;
10808 }
10809 bfd_put_32 (obfd, MTCTR_R12, p), p += 4;
10810 if (plt_load_toc)
10811 {
10812 if (use_fake_dep)
10813 {
10814 bfd_put_32 (obfd, XOR_R2_R12_R12, p), p += 4;
10815 bfd_put_32 (obfd, ADD_R11_R11_R2, p), p += 4;
10816 }
10817 bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
10818 if (plt_static_chain)
10819 bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
10820 }
10821 }
10822 else
10823 {
10824 if (r != NULL)
10825 {
10826 if (ALWAYS_EMIT_R2SAVE
10827 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10828 r[0].r_offset += 4;
10829 r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10830 if (plt_load_toc)
10831 {
10832 if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10833 {
10834 r[1].r_offset = r[0].r_offset + 4;
10835 r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
10836 r[1].r_addend = r[0].r_addend;
10837 }
10838 else
10839 {
10840 r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
10841 r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10842 r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
10843 if (plt_static_chain)
10844 {
10845 r[2].r_offset = r[1].r_offset + 4;
10846 r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10847 r[2].r_addend = r[0].r_addend + 8;
10848 }
10849 }
10850 }
10851 }
10852 if (ALWAYS_EMIT_R2SAVE
10853 || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10854 bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p), p += 4;
10855 bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p), p += 4;
10856 if (plt_load_toc
10857 && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10858 {
10859 bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p), p += 4;
10860 offset = 0;
10861 }
10862 bfd_put_32 (obfd, MTCTR_R12, p), p += 4;
10863 if (plt_load_toc)
10864 {
10865 if (use_fake_dep)
10866 {
10867 bfd_put_32 (obfd, XOR_R11_R12_R12, p), p += 4;
10868 bfd_put_32 (obfd, ADD_R2_R2_R11, p), p += 4;
10869 }
10870 if (plt_static_chain)
10871 bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
10872 bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
10873 }
10874 }
10875 if (plt_load_toc && plt_thread_safe && !use_fake_dep)
10876 {
10877 bfd_put_32 (obfd, CMPLDI_R2_0, p), p += 4;
10878 bfd_put_32 (obfd, BNECTR_P4, p), p += 4;
10879 bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
10880 }
10881 else
10882 bfd_put_32 (obfd, BCTR, p), p += 4;
10883 return p;
10884 }
10885
10886 /* Build a special .plt call stub for __tls_get_addr. */
10887
10888 #define LD_R11_0R3 0xe9630000
10889 #define LD_R12_0R3 0xe9830000
10890 #define MR_R0_R3 0x7c601b78
10891 #define CMPDI_R11_0 0x2c2b0000
10892 #define ADD_R3_R12_R13 0x7c6c6a14
10893 #define BEQLR 0x4d820020
10894 #define MR_R3_R0 0x7c030378
10895 #define STD_R11_0R1 0xf9610000
10896 #define BCTRL 0x4e800421
10897 #define LD_R11_0R1 0xe9610000
10898 #define MTLR_R11 0x7d6803a6
10899
10900 static inline bfd_byte *
10901 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
10902 struct ppc_stub_hash_entry *stub_entry,
10903 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10904 {
10905 bfd *obfd = htab->params->stub_bfd;
10906 bfd_byte *loc = p;
10907
10908 bfd_put_32 (obfd, LD_R11_0R3 + 0, p), p += 4;
10909 bfd_put_32 (obfd, LD_R12_0R3 + 8, p), p += 4;
10910 bfd_put_32 (obfd, MR_R0_R3, p), p += 4;
10911 bfd_put_32 (obfd, CMPDI_R11_0, p), p += 4;
10912 bfd_put_32 (obfd, ADD_R3_R12_R13, p), p += 4;
10913 bfd_put_32 (obfd, BEQLR, p), p += 4;
10914 bfd_put_32 (obfd, MR_R3_R0, p), p += 4;
10915 if (r != NULL)
10916 r[0].r_offset += 7 * 4;
10917 if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
10918 return build_plt_stub (htab, stub_entry, p, offset, r);
10919
10920 bfd_put_32 (obfd, MFLR_R11, p), p += 4;
10921 bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10922
10923 if (r != NULL)
10924 r[0].r_offset += 2 * 4;
10925 p = build_plt_stub (htab, stub_entry, p, offset, r);
10926 bfd_put_32 (obfd, BCTRL, p - 4);
10927
10928 bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p), p += 4;
10929 bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10930 bfd_put_32 (obfd, MTLR_R11, p), p += 4;
10931 bfd_put_32 (obfd, BLR, p), p += 4;
10932
10933 if (htab->glink_eh_frame != NULL
10934 && htab->glink_eh_frame->size != 0)
10935 {
10936 bfd_byte *base, *eh;
10937 unsigned int lr_used, delta;
10938
10939 base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
10940 eh = base + stub_entry->group->eh_size;
10941 lr_used = stub_entry->stub_offset + (p - 20 - loc);
10942 delta = lr_used - stub_entry->group->lr_restore;
10943 stub_entry->group->lr_restore = lr_used + 16;
10944 eh = eh_advance (htab->elf.dynobj, eh, delta);
10945 *eh++ = DW_CFA_offset_extended_sf;
10946 *eh++ = 65;
10947 *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
10948 *eh++ = DW_CFA_advance_loc + 4;
10949 *eh++ = DW_CFA_restore_extended;
10950 *eh++ = 65;
10951 stub_entry->group->eh_size = eh - base;
10952 }
10953 return p;
10954 }
10955
10956 static Elf_Internal_Rela *
10957 get_relocs (asection *sec, int count)
10958 {
10959 Elf_Internal_Rela *relocs;
10960 struct bfd_elf_section_data *elfsec_data;
10961
10962 elfsec_data = elf_section_data (sec);
10963 relocs = elfsec_data->relocs;
10964 if (relocs == NULL)
10965 {
10966 bfd_size_type relsize;
10967 relsize = sec->reloc_count * sizeof (*relocs);
10968 relocs = bfd_alloc (sec->owner, relsize);
10969 if (relocs == NULL)
10970 return NULL;
10971 elfsec_data->relocs = relocs;
10972 elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
10973 sizeof (Elf_Internal_Shdr));
10974 if (elfsec_data->rela.hdr == NULL)
10975 return NULL;
10976 elfsec_data->rela.hdr->sh_size = (sec->reloc_count
10977 * sizeof (Elf64_External_Rela));
10978 elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
10979 sec->reloc_count = 0;
10980 }
10981 relocs += sec->reloc_count;
10982 sec->reloc_count += count;
10983 return relocs;
10984 }
10985
10986 /* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
10987 forms, to the equivalent relocs against the global symbol given by
10988 STUB_ENTRY->H. */
10989
10990 static bfd_boolean
10991 use_global_in_relocs (struct ppc_link_hash_table *htab,
10992 struct ppc_stub_hash_entry *stub_entry,
10993 Elf_Internal_Rela *r, unsigned int num_rel)
10994 {
10995 struct elf_link_hash_entry **hashes;
10996 unsigned long symndx;
10997 struct ppc_link_hash_entry *h;
10998 bfd_vma symval;
10999
11000 /* Relocs are always against symbols in their own object file. Fake
11001 up global sym hashes for the stub bfd (which has no symbols). */
11002 hashes = elf_sym_hashes (htab->params->stub_bfd);
11003 if (hashes == NULL)
11004 {
11005 bfd_size_type hsize;
11006
11007 /* When called the first time, stub_globals will contain the
11008 total number of symbols seen during stub sizing. After
11009 allocating, stub_globals is used as an index to fill the
11010 hashes array. */
11011 hsize = (htab->stub_globals + 1) * sizeof (*hashes);
11012 hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
11013 if (hashes == NULL)
11014 return FALSE;
11015 elf_sym_hashes (htab->params->stub_bfd) = hashes;
11016 htab->stub_globals = 1;
11017 }
11018 symndx = htab->stub_globals++;
11019 h = stub_entry->h;
11020 hashes[symndx] = &h->elf;
11021 if (h->oh != NULL && h->oh->is_func)
11022 h = ppc_follow_link (h->oh);
11023 BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
11024 || h->elf.root.type == bfd_link_hash_defweak);
11025 symval = defined_sym_val (&h->elf);
11026 while (num_rel-- != 0)
11027 {
11028 r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
11029 if (h->elf.root.u.def.section != stub_entry->target_section)
11030 {
11031 /* H is an opd symbol. The addend must be zero, and the
11032 branch reloc is the only one we can convert. */
11033 r->r_addend = 0;
11034 break;
11035 }
11036 else
11037 r->r_addend -= symval;
11038 --r;
11039 }
11040 return TRUE;
11041 }
11042
11043 static bfd_vma
11044 get_r2off (struct bfd_link_info *info,
11045 struct ppc_stub_hash_entry *stub_entry)
11046 {
11047 struct ppc_link_hash_table *htab = ppc_hash_table (info);
11048 bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
11049
11050 if (r2off == 0)
11051 {
11052 /* Support linking -R objects. Get the toc pointer from the
11053 opd entry. */
11054 char buf[8];
11055 if (!htab->opd_abi)
11056 return r2off;
11057 asection *opd = stub_entry->h->elf.root.u.def.section;
11058 bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
11059
11060 if (strcmp (opd->name, ".opd") != 0
11061 || opd->reloc_count != 0)
11062 {
11063 info->callbacks->einfo
11064 (_("%P: cannot find opd entry toc for `%pT'\n"),
11065 stub_entry->h->elf.root.root.string);
11066 bfd_set_error (bfd_error_bad_value);
11067 return (bfd_vma) -1;
11068 }
11069 if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
11070 return (bfd_vma) -1;
11071 r2off = bfd_get_64 (opd->owner, buf);
11072 r2off -= elf_gp (info->output_bfd);
11073 }
11074 r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
11075 return r2off;
11076 }
11077
11078 static bfd_boolean
11079 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11080 {
11081 struct ppc_stub_hash_entry *stub_entry;
11082 struct ppc_branch_hash_entry *br_entry;
11083 struct bfd_link_info *info;
11084 struct ppc_link_hash_table *htab;
11085 bfd_byte *loc;
11086 bfd_byte *p, *relp;
11087 bfd_vma targ, off;
11088 Elf_Internal_Rela *r;
11089 asection *plt;
11090 int num_rel;
11091 int odd;
11092
11093 /* Massage our args to the form they really have. */
11094 stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11095 info = in_arg;
11096
11097 htab = ppc_hash_table (info);
11098 if (htab == NULL)
11099 return FALSE;
11100
11101 BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
11102 loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
11103
11104 htab->stub_count[stub_entry->stub_type - 1] += 1;
11105 switch (stub_entry->stub_type)
11106 {
11107 case ppc_stub_long_branch:
11108 case ppc_stub_long_branch_r2off:
11109 /* Branches are relative. This is where we are going to. */
11110 targ = (stub_entry->target_value
11111 + stub_entry->target_section->output_offset
11112 + stub_entry->target_section->output_section->vma);
11113 targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11114
11115 /* And this is where we are coming from. */
11116 off = (stub_entry->stub_offset
11117 + stub_entry->group->stub_sec->output_offset
11118 + stub_entry->group->stub_sec->output_section->vma);
11119 off = targ - off;
11120
11121 p = loc;
11122 if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11123 {
11124 bfd_vma r2off = get_r2off (info, stub_entry);
11125
11126 if (r2off == (bfd_vma) -1)
11127 {
11128 htab->stub_error = TRUE;
11129 return FALSE;
11130 }
11131 bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11132 p += 4;
11133 if (PPC_HA (r2off) != 0)
11134 {
11135 bfd_put_32 (htab->params->stub_bfd,
11136 ADDIS_R2_R2 | PPC_HA (r2off), p);
11137 p += 4;
11138 }
11139 if (PPC_LO (r2off) != 0)
11140 {
11141 bfd_put_32 (htab->params->stub_bfd,
11142 ADDI_R2_R2 | PPC_LO (r2off), p);
11143 p += 4;
11144 }
11145 off -= p - loc;
11146 }
11147 bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
11148 p += 4;
11149
11150 if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11151 {
11152 _bfd_error_handler
11153 (_("long branch stub `%s' offset overflow"),
11154 stub_entry->root.string);
11155 htab->stub_error = TRUE;
11156 return FALSE;
11157 }
11158
11159 if (info->emitrelocations)
11160 {
11161 r = get_relocs (stub_entry->group->stub_sec, 1);
11162 if (r == NULL)
11163 return FALSE;
11164 r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
11165 r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11166 r->r_addend = targ;
11167 if (stub_entry->h != NULL
11168 && !use_global_in_relocs (htab, stub_entry, r, 1))
11169 return FALSE;
11170 }
11171 break;
11172
11173 case ppc_stub_plt_branch:
11174 case ppc_stub_plt_branch_r2off:
11175 br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11176 stub_entry->root.string + 9,
11177 FALSE, FALSE);
11178 if (br_entry == NULL)
11179 {
11180 _bfd_error_handler (_("can't find branch stub `%s'"),
11181 stub_entry->root.string);
11182 htab->stub_error = TRUE;
11183 return FALSE;
11184 }
11185
11186 targ = (stub_entry->target_value
11187 + stub_entry->target_section->output_offset
11188 + stub_entry->target_section->output_section->vma);
11189 if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11190 targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11191
11192 bfd_put_64 (htab->brlt->owner, targ,
11193 htab->brlt->contents + br_entry->offset);
11194
11195 if (br_entry->iter == htab->stub_iteration)
11196 {
11197 br_entry->iter = 0;
11198
11199 if (htab->relbrlt != NULL)
11200 {
11201 /* Create a reloc for the branch lookup table entry. */
11202 Elf_Internal_Rela rela;
11203 bfd_byte *rl;
11204
11205 rela.r_offset = (br_entry->offset
11206 + htab->brlt->output_offset
11207 + htab->brlt->output_section->vma);
11208 rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11209 rela.r_addend = targ;
11210
11211 rl = htab->relbrlt->contents;
11212 rl += (htab->relbrlt->reloc_count++
11213 * sizeof (Elf64_External_Rela));
11214 bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
11215 }
11216 else if (info->emitrelocations)
11217 {
11218 r = get_relocs (htab->brlt, 1);
11219 if (r == NULL)
11220 return FALSE;
11221 /* brlt, being SEC_LINKER_CREATED does not go through the
11222 normal reloc processing. Symbols and offsets are not
11223 translated from input file to output file form, so
11224 set up the offset per the output file. */
11225 r->r_offset = (br_entry->offset
11226 + htab->brlt->output_offset
11227 + htab->brlt->output_section->vma);
11228 r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
11229 r->r_addend = targ;
11230 }
11231 }
11232
11233 targ = (br_entry->offset
11234 + htab->brlt->output_offset
11235 + htab->brlt->output_section->vma);
11236
11237 off = (elf_gp (info->output_bfd)
11238 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11239 off = targ - off;
11240
11241 if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11242 {
11243 info->callbacks->einfo
11244 (_("%P: linkage table error against `%pT'\n"),
11245 stub_entry->root.string);
11246 bfd_set_error (bfd_error_bad_value);
11247 htab->stub_error = TRUE;
11248 return FALSE;
11249 }
11250
11251 if (info->emitrelocations)
11252 {
11253 r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11254 if (r == NULL)
11255 return FALSE;
11256 r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11257 if (bfd_big_endian (info->output_bfd))
11258 r[0].r_offset += 2;
11259 if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11260 r[0].r_offset += 4;
11261 r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11262 r[0].r_addend = targ;
11263 if (PPC_HA (off) != 0)
11264 {
11265 r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11266 r[1].r_offset = r[0].r_offset + 4;
11267 r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11268 r[1].r_addend = r[0].r_addend;
11269 }
11270 }
11271
11272 p = loc;
11273 if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11274 {
11275 if (PPC_HA (off) != 0)
11276 {
11277 bfd_put_32 (htab->params->stub_bfd,
11278 ADDIS_R12_R2 | PPC_HA (off), p);
11279 p += 4;
11280 bfd_put_32 (htab->params->stub_bfd,
11281 LD_R12_0R12 | PPC_LO (off), p);
11282 }
11283 else
11284 bfd_put_32 (htab->params->stub_bfd,
11285 LD_R12_0R2 | PPC_LO (off), p);
11286 }
11287 else
11288 {
11289 bfd_vma r2off = get_r2off (info, stub_entry);
11290
11291 if (r2off == (bfd_vma) -1)
11292 {
11293 htab->stub_error = TRUE;
11294 return FALSE;
11295 }
11296
11297 bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11298 p += 4;
11299 if (PPC_HA (off) != 0)
11300 {
11301 bfd_put_32 (htab->params->stub_bfd,
11302 ADDIS_R12_R2 | PPC_HA (off), p);
11303 p += 4;
11304 bfd_put_32 (htab->params->stub_bfd,
11305 LD_R12_0R12 | PPC_LO (off), p);
11306 }
11307 else
11308 bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
11309
11310 if (PPC_HA (r2off) != 0)
11311 {
11312 p += 4;
11313 bfd_put_32 (htab->params->stub_bfd,
11314 ADDIS_R2_R2 | PPC_HA (r2off), p);
11315 }
11316 if (PPC_LO (r2off) != 0)
11317 {
11318 p += 4;
11319 bfd_put_32 (htab->params->stub_bfd,
11320 ADDI_R2_R2 | PPC_LO (r2off), p);
11321 }
11322 }
11323 p += 4;
11324 bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11325 p += 4;
11326 bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11327 p += 4;
11328 break;
11329
11330 case ppc_stub_long_branch_notoc:
11331 case ppc_stub_long_branch_both:
11332 case ppc_stub_plt_branch_notoc:
11333 case ppc_stub_plt_branch_both:
11334 case ppc_stub_plt_call_notoc:
11335 case ppc_stub_plt_call_both:
11336 p = loc;
11337 off = (stub_entry->stub_offset
11338 + stub_entry->group->stub_sec->output_offset
11339 + stub_entry->group->stub_sec->output_section->vma);
11340 if (stub_entry->stub_type == ppc_stub_long_branch_both
11341 || stub_entry->stub_type == ppc_stub_plt_branch_both
11342 || stub_entry->stub_type == ppc_stub_plt_call_both)
11343 {
11344 off += 4;
11345 bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
11346 p += 4;
11347 }
11348 if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
11349 {
11350 targ = stub_entry->plt_ent->plt.offset & ~1;
11351 if (targ >= (bfd_vma) -2)
11352 abort ();
11353
11354 plt = htab->elf.splt;
11355 if (!htab->elf.dynamic_sections_created
11356 || stub_entry->h == NULL
11357 || stub_entry->h->elf.dynindx == -1)
11358 {
11359 if (stub_entry->symtype == STT_GNU_IFUNC)
11360 plt = htab->elf.iplt;
11361 else
11362 plt = htab->pltlocal;
11363 }
11364 targ += plt->output_offset + plt->output_section->vma;
11365 }
11366 else
11367 targ = (stub_entry->target_value
11368 + stub_entry->target_section->output_offset
11369 + stub_entry->target_section->output_section->vma);
11370 odd = off & 4;
11371 off = targ - off;
11372
11373 relp = p;
11374 num_rel = 0;
11375 if (htab->powerxx_stubs)
11376 {
11377 bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
11378 p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
11379 }
11380 else
11381 {
11382 /* The notoc stubs calculate their target (either a PLT entry or
11383 the global entry point of a function) relative to the PC
11384 returned by the "bcl" two instructions past the start of the
11385 sequence emitted by build_offset. The offset is therefore 8
11386 less than calculated from the start of the sequence. */
11387 off -= 8;
11388 p = build_offset (htab->params->stub_bfd, p, off,
11389 stub_entry->stub_type >= ppc_stub_plt_call_notoc);
11390 }
11391
11392 if (stub_entry->stub_type <= ppc_stub_long_branch_both)
11393 {
11394 bfd_vma from;
11395 num_rel = 1;
11396 from = (stub_entry->stub_offset
11397 + stub_entry->group->stub_sec->output_offset
11398 + stub_entry->group->stub_sec->output_section->vma
11399 + (p - loc));
11400 bfd_put_32 (htab->params->stub_bfd,
11401 B_DOT | ((targ - from) & 0x3fffffc), p);
11402 }
11403 else
11404 {
11405 bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
11406 p += 4;
11407 bfd_put_32 (htab->params->stub_bfd, BCTR, p);
11408 }
11409 p += 4;
11410
11411 if (info->emitrelocations)
11412 {
11413 bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
11414 if (htab->powerxx_stubs)
11415 num_rel += num_relocs_for_powerxx_offset (off, odd);
11416 else
11417 {
11418 num_rel += num_relocs_for_offset (off);
11419 roff += 16;
11420 }
11421 r = get_relocs (stub_entry->group->stub_sec, num_rel);
11422 if (r == NULL)
11423 return FALSE;
11424 if (htab->powerxx_stubs)
11425 r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd);
11426 else
11427 r = emit_relocs_for_offset (info, r, roff, targ, off);
11428 if (stub_entry->stub_type == ppc_stub_long_branch_notoc
11429 || stub_entry->stub_type == ppc_stub_long_branch_both)
11430 {
11431 ++r;
11432 roff = p - 4 - stub_entry->group->stub_sec->contents;
11433 r->r_offset = roff;
11434 r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
11435 r->r_addend = targ;
11436 if (stub_entry->h != NULL
11437 && !use_global_in_relocs (htab, stub_entry, r, num_rel))
11438 return FALSE;
11439 }
11440 }
11441
11442 if (!htab->powerxx_stubs
11443 && htab->glink_eh_frame != NULL
11444 && htab->glink_eh_frame->size != 0)
11445 {
11446 bfd_byte *base, *eh;
11447 unsigned int lr_used, delta;
11448
11449 base = (htab->glink_eh_frame->contents
11450 + stub_entry->group->eh_base + 17);
11451 eh = base + stub_entry->group->eh_size;
11452 lr_used = stub_entry->stub_offset + 8;
11453 if (stub_entry->stub_type == ppc_stub_long_branch_both
11454 || stub_entry->stub_type == ppc_stub_plt_branch_both
11455 || stub_entry->stub_type == ppc_stub_plt_call_both)
11456 lr_used += 4;
11457 delta = lr_used - stub_entry->group->lr_restore;
11458 stub_entry->group->lr_restore = lr_used + 8;
11459 eh = eh_advance (htab->elf.dynobj, eh, delta);
11460 *eh++ = DW_CFA_register;
11461 *eh++ = 65;
11462 *eh++ = 12;
11463 *eh++ = DW_CFA_advance_loc + 2;
11464 *eh++ = DW_CFA_restore_extended;
11465 *eh++ = 65;
11466 stub_entry->group->eh_size = eh - base;
11467 }
11468 break;
11469
11470 case ppc_stub_plt_call:
11471 case ppc_stub_plt_call_r2save:
11472 if (stub_entry->h != NULL
11473 && stub_entry->h->is_func_descriptor
11474 && stub_entry->h->oh != NULL)
11475 {
11476 struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11477
11478 /* If the old-ABI "dot-symbol" is undefined make it weak so
11479 we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL. */
11480 if (fh->elf.root.type == bfd_link_hash_undefined
11481 && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11482 || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11483 fh->elf.root.type = bfd_link_hash_undefweak;
11484 }
11485
11486 /* Now build the stub. */
11487 targ = stub_entry->plt_ent->plt.offset & ~1;
11488 if (targ >= (bfd_vma) -2)
11489 abort ();
11490
11491 plt = htab->elf.splt;
11492 if (!htab->elf.dynamic_sections_created
11493 || stub_entry->h == NULL
11494 || stub_entry->h->elf.dynindx == -1)
11495 {
11496 if (stub_entry->symtype == STT_GNU_IFUNC)
11497 plt = htab->elf.iplt;
11498 else
11499 plt = htab->pltlocal;
11500 }
11501 targ += plt->output_offset + plt->output_section->vma;
11502
11503 off = (elf_gp (info->output_bfd)
11504 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11505 off = targ - off;
11506
11507 if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11508 {
11509 info->callbacks->einfo
11510 /* xgettext:c-format */
11511 (_("%P: linkage table error against `%pT'\n"),
11512 stub_entry->h != NULL
11513 ? stub_entry->h->elf.root.root.string
11514 : "<local sym>");
11515 bfd_set_error (bfd_error_bad_value);
11516 htab->stub_error = TRUE;
11517 return FALSE;
11518 }
11519
11520 r = NULL;
11521 if (info->emitrelocations)
11522 {
11523 r = get_relocs (stub_entry->group->stub_sec,
11524 ((PPC_HA (off) != 0)
11525 + (htab->opd_abi
11526 ? 2 + (htab->params->plt_static_chain
11527 && PPC_HA (off + 16) == PPC_HA (off))
11528 : 1)));
11529 if (r == NULL)
11530 return FALSE;
11531 r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11532 if (bfd_big_endian (info->output_bfd))
11533 r[0].r_offset += 2;
11534 r[0].r_addend = targ;
11535 }
11536 if (stub_entry->h != NULL
11537 && is_tls_get_addr (&stub_entry->h->elf, htab)
11538 && htab->params->tls_get_addr_opt)
11539 p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11540 else
11541 p = build_plt_stub (htab, stub_entry, loc, off, r);
11542 break;
11543
11544 case ppc_stub_save_res:
11545 return TRUE;
11546
11547 default:
11548 BFD_FAIL ();
11549 return FALSE;
11550 }
11551
11552 stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
11553
11554 if (htab->params->emit_stub_syms)
11555 {
11556 struct elf_link_hash_entry *h;
11557 size_t len1, len2;
11558 char *name;
11559 const char *const stub_str[] = { "long_branch",
11560 "long_branch",
11561 "long_branch",
11562 "long_branch",
11563 "plt_branch",
11564 "plt_branch",
11565 "plt_branch",
11566 "plt_branch",
11567 "plt_call",
11568 "plt_call",
11569 "plt_call",
11570 "plt_call" };
11571
11572 len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11573 len2 = strlen (stub_entry->root.string);
11574 name = bfd_malloc (len1 + len2 + 2);
11575 if (name == NULL)
11576 return FALSE;
11577 memcpy (name, stub_entry->root.string, 9);
11578 memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11579 memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11580 h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11581 if (h == NULL)
11582 return FALSE;
11583 if (h->root.type == bfd_link_hash_new)
11584 {
11585 h->root.type = bfd_link_hash_defined;
11586 h->root.u.def.section = stub_entry->group->stub_sec;
11587 h->root.u.def.value = stub_entry->stub_offset;
11588 h->ref_regular = 1;
11589 h->def_regular = 1;
11590 h->ref_regular_nonweak = 1;
11591 h->forced_local = 1;
11592 h->non_elf = 0;
11593 h->root.linker_def = 1;
11594 }
11595 }
11596
11597 return TRUE;
11598 }
11599
11600 /* As above, but don't actually build the stub. Just bump offset so
11601 we know stub section sizes, and select plt_branch stubs where
11602 long_branch stubs won't do. */
11603
11604 static bfd_boolean
11605 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11606 {
11607 struct ppc_stub_hash_entry *stub_entry;
11608 struct bfd_link_info *info;
11609 struct ppc_link_hash_table *htab;
11610 asection *plt;
11611 bfd_vma targ, off, r2off;
11612 unsigned int size, extra, lr_used, delta, odd;
11613
11614 /* Massage our args to the form they really have. */
11615 stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11616 info = in_arg;
11617
11618 htab = ppc_hash_table (info);
11619 if (htab == NULL)
11620 return FALSE;
11621
11622 /* Make a note of the offset within the stubs for this entry. */
11623 stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11624
11625 if (stub_entry->h != NULL
11626 && stub_entry->h->save_res
11627 && stub_entry->h->elf.root.type == bfd_link_hash_defined
11628 && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11629 {
11630 /* Don't make stubs to out-of-line register save/restore
11631 functions. Instead, emit copies of the functions. */
11632 stub_entry->group->needs_save_res = 1;
11633 stub_entry->stub_type = ppc_stub_save_res;
11634 return TRUE;
11635 }
11636
11637 switch (stub_entry->stub_type)
11638 {
11639 case ppc_stub_plt_branch:
11640 case ppc_stub_plt_branch_r2off:
11641 /* Reset the stub type from the plt branch variant in case we now
11642 can reach with a shorter stub. */
11643 stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11644 /* Fall through. */
11645 case ppc_stub_long_branch:
11646 case ppc_stub_long_branch_r2off:
11647 targ = (stub_entry->target_value
11648 + stub_entry->target_section->output_offset
11649 + stub_entry->target_section->output_section->vma);
11650 targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11651 off = (stub_entry->stub_offset
11652 + stub_entry->group->stub_sec->output_offset
11653 + stub_entry->group->stub_sec->output_section->vma);
11654
11655 size = 4;
11656 r2off = 0;
11657 if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11658 {
11659 r2off = get_r2off (info, stub_entry);
11660 if (r2off == (bfd_vma) -1)
11661 {
11662 htab->stub_error = TRUE;
11663 return FALSE;
11664 }
11665 size = 8;
11666 if (PPC_HA (r2off) != 0)
11667 size += 4;
11668 if (PPC_LO (r2off) != 0)
11669 size += 4;
11670 off += size - 4;
11671 }
11672 off = targ - off;
11673
11674 /* If the branch offset is too big, use a ppc_stub_plt_branch.
11675 Do the same for -R objects without function descriptors. */
11676 if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
11677 && r2off == 0
11678 && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
11679 || off + (1 << 25) >= (bfd_vma) (1 << 26))
11680 {
11681 struct ppc_branch_hash_entry *br_entry;
11682
11683 br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11684 stub_entry->root.string + 9,
11685 TRUE, FALSE);
11686 if (br_entry == NULL)
11687 {
11688 _bfd_error_handler (_("can't build branch stub `%s'"),
11689 stub_entry->root.string);
11690 htab->stub_error = TRUE;
11691 return FALSE;
11692 }
11693
11694 if (br_entry->iter != htab->stub_iteration)
11695 {
11696 br_entry->iter = htab->stub_iteration;
11697 br_entry->offset = htab->brlt->size;
11698 htab->brlt->size += 8;
11699
11700 if (htab->relbrlt != NULL)
11701 htab->relbrlt->size += sizeof (Elf64_External_Rela);
11702 else if (info->emitrelocations)
11703 {
11704 htab->brlt->reloc_count += 1;
11705 htab->brlt->flags |= SEC_RELOC;
11706 }
11707 }
11708
11709 targ = (br_entry->offset
11710 + htab->brlt->output_offset
11711 + htab->brlt->output_section->vma);
11712 off = (elf_gp (info->output_bfd)
11713 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11714 off = targ - off;
11715
11716 if (info->emitrelocations)
11717 {
11718 stub_entry->group->stub_sec->reloc_count
11719 += 1 + (PPC_HA (off) != 0);
11720 stub_entry->group->stub_sec->flags |= SEC_RELOC;
11721 }
11722
11723 stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
11724 if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11725 {
11726 size = 12;
11727 if (PPC_HA (off) != 0)
11728 size = 16;
11729 }
11730 else
11731 {
11732 size = 16;
11733 if (PPC_HA (off) != 0)
11734 size += 4;
11735
11736 if (PPC_HA (r2off) != 0)
11737 size += 4;
11738 if (PPC_LO (r2off) != 0)
11739 size += 4;
11740 }
11741 }
11742 else if (info->emitrelocations)
11743 {
11744 stub_entry->group->stub_sec->reloc_count += 1;
11745 stub_entry->group->stub_sec->flags |= SEC_RELOC;
11746 }
11747 break;
11748
11749 case ppc_stub_plt_branch_notoc:
11750 case ppc_stub_plt_branch_both:
11751 stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11752 /* Fall through. */
11753 case ppc_stub_long_branch_notoc:
11754 case ppc_stub_long_branch_both:
11755 off = (stub_entry->stub_offset
11756 + stub_entry->group->stub_sec->output_offset
11757 + stub_entry->group->stub_sec->output_section->vma);
11758 size = 0;
11759 if (stub_entry->stub_type == ppc_stub_long_branch_both)
11760 size = 4;
11761 off += size;
11762 targ = (stub_entry->target_value
11763 + stub_entry->target_section->output_offset
11764 + stub_entry->target_section->output_section->vma);
11765 odd = off & 4;
11766 off = targ - off;
11767
11768 if (info->emitrelocations)
11769 {
11770 unsigned int num_rel;
11771 if (htab->powerxx_stubs)
11772 num_rel = num_relocs_for_powerxx_offset (off, odd);
11773 else
11774 num_rel = num_relocs_for_offset (off - 8);
11775 stub_entry->group->stub_sec->reloc_count += num_rel;
11776 stub_entry->group->stub_sec->flags |= SEC_RELOC;
11777 }
11778
11779 if (htab->powerxx_stubs)
11780 extra = size_powerxx_offset (off, odd);
11781 else
11782 extra = size_offset (off - 8);
11783 /* Include branch insn plus those in the offset sequence. */
11784 size += 4 + extra;
11785 /* The branch insn is at the end, or "extra" bytes along. So
11786 its offset will be "extra" bytes less that that already
11787 calculated. */
11788 off -= extra;
11789
11790 if (!htab->powerxx_stubs)
11791 {
11792 /* After the bcl, lr has been modified so we need to emit
11793 .eh_frame info saying the return address is in r12. */
11794 lr_used = stub_entry->stub_offset + 8;
11795 if (stub_entry->stub_type == ppc_stub_long_branch_both)
11796 lr_used += 4;
11797 /* The eh_frame info will consist of a DW_CFA_advance_loc or
11798 variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11799 DW_CFA_restore_extended 65. */
11800 delta = lr_used - stub_entry->group->lr_restore;
11801 stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11802 stub_entry->group->lr_restore = lr_used + 8;
11803 }
11804
11805 /* If the branch can't reach, use a plt_branch. */
11806 if (off + (1 << 25) >= (bfd_vma) (1 << 26))
11807 {
11808 stub_entry->stub_type += (ppc_stub_plt_branch_notoc
11809 - ppc_stub_long_branch_notoc);
11810 size += 4;
11811 }
11812 else if (info->emitrelocations)
11813 stub_entry->group->stub_sec->reloc_count +=1;
11814 break;
11815
11816 case ppc_stub_plt_call_notoc:
11817 case ppc_stub_plt_call_both:
11818 off = (stub_entry->stub_offset
11819 + stub_entry->group->stub_sec->output_offset
11820 + stub_entry->group->stub_sec->output_section->vma);
11821 if (stub_entry->stub_type == ppc_stub_plt_call_both)
11822 off += 4;
11823 targ = stub_entry->plt_ent->plt.offset & ~1;
11824 if (targ >= (bfd_vma) -2)
11825 abort ();
11826
11827 plt = htab->elf.splt;
11828 if (!htab->elf.dynamic_sections_created
11829 || stub_entry->h == NULL
11830 || stub_entry->h->elf.dynindx == -1)
11831 {
11832 if (stub_entry->symtype == STT_GNU_IFUNC)
11833 plt = htab->elf.iplt;
11834 else
11835 plt = htab->pltlocal;
11836 }
11837 targ += plt->output_offset + plt->output_section->vma;
11838 odd = off & 4;
11839 off = targ - off;
11840
11841 if (htab->params->plt_stub_align != 0)
11842 {
11843 unsigned pad = plt_stub_pad (htab, stub_entry, off);
11844
11845 stub_entry->group->stub_sec->size += pad;
11846 stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11847 off -= pad;
11848 }
11849
11850 if (info->emitrelocations)
11851 {
11852 unsigned int num_rel;
11853 if (htab->powerxx_stubs)
11854 num_rel = num_relocs_for_powerxx_offset (off, odd);
11855 else
11856 num_rel = num_relocs_for_offset (off - 8);
11857 stub_entry->group->stub_sec->reloc_count += num_rel;
11858 stub_entry->group->stub_sec->flags |= SEC_RELOC;
11859 }
11860
11861 size = plt_stub_size (htab, stub_entry, off);
11862
11863 if (!htab->powerxx_stubs)
11864 {
11865 /* After the bcl, lr has been modified so we need to emit
11866 .eh_frame info saying the return address is in r12. */
11867 lr_used = stub_entry->stub_offset + 8;
11868 if (stub_entry->stub_type == ppc_stub_plt_call_both)
11869 lr_used += 4;
11870 /* The eh_frame info will consist of a DW_CFA_advance_loc or
11871 variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
11872 DW_CFA_restore_extended 65. */
11873 delta = lr_used - stub_entry->group->lr_restore;
11874 stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11875 stub_entry->group->lr_restore = lr_used + 8;
11876 }
11877 break;
11878
11879 case ppc_stub_plt_call:
11880 case ppc_stub_plt_call_r2save:
11881 targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
11882 if (targ >= (bfd_vma) -2)
11883 abort ();
11884 plt = htab->elf.splt;
11885 if (!htab->elf.dynamic_sections_created
11886 || stub_entry->h == NULL
11887 || stub_entry->h->elf.dynindx == -1)
11888 {
11889 if (stub_entry->symtype == STT_GNU_IFUNC)
11890 plt = htab->elf.iplt;
11891 else
11892 plt = htab->pltlocal;
11893 }
11894 targ += plt->output_offset + plt->output_section->vma;
11895
11896 off = (elf_gp (info->output_bfd)
11897 + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11898 off = targ - off;
11899
11900 if (htab->params->plt_stub_align != 0)
11901 {
11902 unsigned pad = plt_stub_pad (htab, stub_entry, off);
11903
11904 stub_entry->group->stub_sec->size += pad;
11905 stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11906 }
11907
11908 if (info->emitrelocations)
11909 {
11910 stub_entry->group->stub_sec->reloc_count
11911 += ((PPC_HA (off) != 0)
11912 + (htab->opd_abi
11913 ? 2 + (htab->params->plt_static_chain
11914 && PPC_HA (off + 16) == PPC_HA (off))
11915 : 1));
11916 stub_entry->group->stub_sec->flags |= SEC_RELOC;
11917 }
11918
11919 size = plt_stub_size (htab, stub_entry, off);
11920
11921 if (stub_entry->h != NULL
11922 && is_tls_get_addr (&stub_entry->h->elf, htab)
11923 && htab->params->tls_get_addr_opt
11924 && stub_entry->stub_type == ppc_stub_plt_call_r2save)
11925 {
11926 /* After the bctrl, lr has been modified so we need to
11927 emit .eh_frame info saying the return address is
11928 on the stack. In fact we put the EH info specifying
11929 that the return address is on the stack *at* the
11930 call rather than after it, because the EH info for a
11931 call needs to be specified by that point.
11932 See libgcc/unwind-dw2.c execute_cfa_program. */
11933 lr_used = stub_entry->stub_offset + size - 20;
11934 /* The eh_frame info will consist of a DW_CFA_advance_loc
11935 or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
11936 DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65. */
11937 delta = lr_used - stub_entry->group->lr_restore;
11938 stub_entry->group->eh_size += eh_advance_size (delta) + 6;
11939 stub_entry->group->lr_restore = size - 4;
11940 }
11941 break;
11942
11943 default:
11944 BFD_FAIL ();
11945 return FALSE;
11946 }
11947
11948 stub_entry->group->stub_sec->size += size;
11949 return TRUE;
11950 }
11951
11952 /* Set up various things so that we can make a list of input sections
11953 for each output section included in the link. Returns -1 on error,
11954 0 when no stubs will be needed, and 1 on success. */
11955
11956 int
11957 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
11958 {
11959 unsigned int id;
11960 bfd_size_type amt;
11961 struct ppc_link_hash_table *htab = ppc_hash_table (info);
11962
11963 if (htab == NULL)
11964 return -1;
11965
11966 htab->sec_info_arr_size = _bfd_section_id;
11967 amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
11968 htab->sec_info = bfd_zmalloc (amt);
11969 if (htab->sec_info == NULL)
11970 return -1;
11971
11972 /* Set toc_off for com, und, abs and ind sections. */
11973 for (id = 0; id < 3; id++)
11974 htab->sec_info[id].toc_off = TOC_BASE_OFF;
11975
11976 return 1;
11977 }
11978
11979 /* Set up for first pass at multitoc partitioning. */
11980
11981 void
11982 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
11983 {
11984 struct ppc_link_hash_table *htab = ppc_hash_table (info);
11985
11986 htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
11987 htab->toc_bfd = NULL;
11988 htab->toc_first_sec = NULL;
11989 }
11990
11991 /* The linker repeatedly calls this function for each TOC input section
11992 and linker generated GOT section. Group input bfds such that the toc
11993 within a group is less than 64k in size. */
11994
11995 bfd_boolean
11996 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
11997 {
11998 struct ppc_link_hash_table *htab = ppc_hash_table (info);
11999 bfd_vma addr, off, limit;
12000
12001 if (htab == NULL)
12002 return FALSE;
12003
12004 if (!htab->second_toc_pass)
12005 {
12006 /* Keep track of the first .toc or .got section for this input bfd. */
12007 bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
12008
12009 if (new_bfd)
12010 {
12011 htab->toc_bfd = isec->owner;
12012 htab->toc_first_sec = isec;
12013 }
12014
12015 addr = isec->output_offset + isec->output_section->vma;
12016 off = addr - htab->toc_curr;
12017 limit = 0x80008000;
12018 if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
12019 limit = 0x10000;
12020 if (off + isec->size > limit)
12021 {
12022 addr = (htab->toc_first_sec->output_offset
12023 + htab->toc_first_sec->output_section->vma);
12024 htab->toc_curr = addr;
12025 htab->toc_curr &= -TOC_BASE_ALIGN;
12026 }
12027
12028 /* toc_curr is the base address of this toc group. Set elf_gp
12029 for the input section to be the offset relative to the
12030 output toc base plus 0x8000. Making the input elf_gp an
12031 offset allows us to move the toc as a whole without
12032 recalculating input elf_gp. */
12033 off = htab->toc_curr - elf_gp (info->output_bfd);
12034 off += TOC_BASE_OFF;
12035
12036 /* Die if someone uses a linker script that doesn't keep input
12037 file .toc and .got together. */
12038 if (new_bfd
12039 && elf_gp (isec->owner) != 0
12040 && elf_gp (isec->owner) != off)
12041 return FALSE;
12042
12043 elf_gp (isec->owner) = off;
12044 return TRUE;
12045 }
12046
12047 /* During the second pass toc_first_sec points to the start of
12048 a toc group, and toc_curr is used to track the old elf_gp.
12049 We use toc_bfd to ensure we only look at each bfd once. */
12050 if (htab->toc_bfd == isec->owner)
12051 return TRUE;
12052 htab->toc_bfd = isec->owner;
12053
12054 if (htab->toc_first_sec == NULL
12055 || htab->toc_curr != elf_gp (isec->owner))
12056 {
12057 htab->toc_curr = elf_gp (isec->owner);
12058 htab->toc_first_sec = isec;
12059 }
12060 addr = (htab->toc_first_sec->output_offset
12061 + htab->toc_first_sec->output_section->vma);
12062 off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
12063 elf_gp (isec->owner) = off;
12064
12065 return TRUE;
12066 }
12067
12068 /* Called via elf_link_hash_traverse to merge GOT entries for global
12069 symbol H. */
12070
12071 static bfd_boolean
12072 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12073 {
12074 if (h->root.type == bfd_link_hash_indirect)
12075 return TRUE;
12076
12077 merge_got_entries (&h->got.glist);
12078
12079 return TRUE;
12080 }
12081
12082 /* Called via elf_link_hash_traverse to allocate GOT entries for global
12083 symbol H. */
12084
12085 static bfd_boolean
12086 reallocate_got (struct elf_link_hash_entry *h, void *inf)
12087 {
12088 struct got_entry *gent;
12089
12090 if (h->root.type == bfd_link_hash_indirect)
12091 return TRUE;
12092
12093 for (gent = h->got.glist; gent != NULL; gent = gent->next)
12094 if (!gent->is_indirect)
12095 allocate_got (h, (struct bfd_link_info *) inf, gent);
12096 return TRUE;
12097 }
12098
12099 /* Called on the first multitoc pass after the last call to
12100 ppc64_elf_next_toc_section. This function removes duplicate GOT
12101 entries. */
12102
12103 bfd_boolean
12104 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
12105 {
12106 struct ppc_link_hash_table *htab = ppc_hash_table (info);
12107 struct bfd *ibfd, *ibfd2;
12108 bfd_boolean done_something;
12109
12110 htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
12111
12112 if (!htab->do_multi_toc)
12113 return FALSE;
12114
12115 /* Merge global sym got entries within a toc group. */
12116 elf_link_hash_traverse (&htab->elf, merge_global_got, info);
12117
12118 /* And tlsld_got. */
12119 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12120 {
12121 struct got_entry *ent, *ent2;
12122
12123 if (!is_ppc64_elf (ibfd))
12124 continue;
12125
12126 ent = ppc64_tlsld_got (ibfd);
12127 if (!ent->is_indirect
12128 && ent->got.offset != (bfd_vma) -1)
12129 {
12130 for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
12131 {
12132 if (!is_ppc64_elf (ibfd2))
12133 continue;
12134
12135 ent2 = ppc64_tlsld_got (ibfd2);
12136 if (!ent2->is_indirect
12137 && ent2->got.offset != (bfd_vma) -1
12138 && elf_gp (ibfd2) == elf_gp (ibfd))
12139 {
12140 ent2->is_indirect = TRUE;
12141 ent2->got.ent = ent;
12142 }
12143 }
12144 }
12145 }
12146
12147 /* Zap sizes of got sections. */
12148 htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
12149 htab->elf.irelplt->size -= htab->got_reli_size;
12150 htab->got_reli_size = 0;
12151
12152 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12153 {
12154 asection *got, *relgot;
12155
12156 if (!is_ppc64_elf (ibfd))
12157 continue;
12158
12159 got = ppc64_elf_tdata (ibfd)->got;
12160 if (got != NULL)
12161 {
12162 got->rawsize = got->size;
12163 got->size = 0;
12164 relgot = ppc64_elf_tdata (ibfd)->relgot;
12165 relgot->rawsize = relgot->size;
12166 relgot->size = 0;
12167 }
12168 }
12169
12170 /* Now reallocate the got, local syms first. We don't need to
12171 allocate section contents again since we never increase size. */
12172 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12173 {
12174 struct got_entry **lgot_ents;
12175 struct got_entry **end_lgot_ents;
12176 struct plt_entry **local_plt;
12177 struct plt_entry **end_local_plt;
12178 unsigned char *lgot_masks;
12179 bfd_size_type locsymcount;
12180 Elf_Internal_Shdr *symtab_hdr;
12181 asection *s;
12182
12183 if (!is_ppc64_elf (ibfd))
12184 continue;
12185
12186 lgot_ents = elf_local_got_ents (ibfd);
12187 if (!lgot_ents)
12188 continue;
12189
12190 symtab_hdr = &elf_symtab_hdr (ibfd);
12191 locsymcount = symtab_hdr->sh_info;
12192 end_lgot_ents = lgot_ents + locsymcount;
12193 local_plt = (struct plt_entry **) end_lgot_ents;
12194 end_local_plt = local_plt + locsymcount;
12195 lgot_masks = (unsigned char *) end_local_plt;
12196 s = ppc64_elf_tdata (ibfd)->got;
12197 for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
12198 {
12199 struct got_entry *ent;
12200
12201 for (ent = *lgot_ents; ent != NULL; ent = ent->next)
12202 {
12203 unsigned int ent_size = 8;
12204 unsigned int rel_size = sizeof (Elf64_External_Rela);
12205
12206 ent->got.offset = s->size;
12207 if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
12208 {
12209 ent_size *= 2;
12210 rel_size *= 2;
12211 }
12212 s->size += ent_size;
12213 if ((*lgot_masks & (TLS_TLS | PLT_IFUNC)) == PLT_IFUNC)
12214 {
12215 htab->elf.irelplt->size += rel_size;
12216 htab->got_reli_size += rel_size;
12217 }
12218 else if (bfd_link_pic (info)
12219 && !(ent->tls_type != 0
12220 && bfd_link_executable (info)))
12221 {
12222 asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12223 srel->size += rel_size;
12224 }
12225 }
12226 }
12227 }
12228
12229 elf_link_hash_traverse (&htab->elf, reallocate_got, info);
12230
12231 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12232 {
12233 struct got_entry *ent;
12234
12235 if (!is_ppc64_elf (ibfd))
12236 continue;
12237
12238 ent = ppc64_tlsld_got (ibfd);
12239 if (!ent->is_indirect
12240 && ent->got.offset != (bfd_vma) -1)
12241 {
12242 asection *s = ppc64_elf_tdata (ibfd)->got;
12243 ent->got.offset = s->size;
12244 s->size += 16;
12245 if (bfd_link_dll (info))
12246 {
12247 asection *srel = ppc64_elf_tdata (ibfd)->relgot;
12248 srel->size += sizeof (Elf64_External_Rela);
12249 }
12250 }
12251 }
12252
12253 done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
12254 if (!done_something)
12255 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12256 {
12257 asection *got;
12258
12259 if (!is_ppc64_elf (ibfd))
12260 continue;
12261
12262 got = ppc64_elf_tdata (ibfd)->got;
12263 if (got != NULL)
12264 {
12265 done_something = got->rawsize != got->size;
12266 if (done_something)
12267 break;
12268 }
12269 }
12270
12271 if (done_something)
12272 (*htab->params->layout_sections_again) ();
12273
12274 /* Set up for second pass over toc sections to recalculate elf_gp
12275 on input sections. */
12276 htab->toc_bfd = NULL;
12277 htab->toc_first_sec = NULL;
12278 htab->second_toc_pass = TRUE;
12279 return done_something;
12280 }
12281
12282 /* Called after second pass of multitoc partitioning. */
12283
12284 void
12285 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
12286 {
12287 struct ppc_link_hash_table *htab = ppc_hash_table (info);
12288
12289 /* After the second pass, toc_curr tracks the TOC offset used
12290 for code sections below in ppc64_elf_next_input_section. */
12291 htab->toc_curr = TOC_BASE_OFF;
12292 }
12293
12294 /* No toc references were found in ISEC. If the code in ISEC makes no
12295 calls, then there's no need to use toc adjusting stubs when branching
12296 into ISEC. Actually, indirect calls from ISEC are OK as they will
12297 load r2. Returns -1 on error, 0 for no stub needed, 1 for stub
12298 needed, and 2 if a cyclical call-graph was found but no other reason
12299 for a stub was detected. If called from the top level, a return of
12300 2 means the same as a return of 0. */
12301
12302 static int
12303 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
12304 {
12305 int ret;
12306
12307 /* Mark this section as checked. */
12308 isec->call_check_done = 1;
12309
12310 /* We know none of our code bearing sections will need toc stubs. */
12311 if ((isec->flags & SEC_LINKER_CREATED) != 0)
12312 return 0;
12313
12314 if (isec->size == 0)
12315 return 0;
12316
12317 if (isec->output_section == NULL)
12318 return 0;
12319
12320 ret = 0;
12321 if (isec->reloc_count != 0)
12322 {
12323 Elf_Internal_Rela *relstart, *rel;
12324 Elf_Internal_Sym *local_syms;
12325 struct ppc_link_hash_table *htab;
12326
12327 relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
12328 info->keep_memory);
12329 if (relstart == NULL)
12330 return -1;
12331
12332 /* Look for branches to outside of this section. */
12333 local_syms = NULL;
12334 htab = ppc_hash_table (info);
12335 if (htab == NULL)
12336 return -1;
12337
12338 for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
12339 {
12340 enum elf_ppc64_reloc_type r_type;
12341 unsigned long r_symndx;
12342 struct elf_link_hash_entry *h;
12343 struct ppc_link_hash_entry *eh;
12344 Elf_Internal_Sym *sym;
12345 asection *sym_sec;
12346 struct _opd_sec_data *opd;
12347 bfd_vma sym_value;
12348 bfd_vma dest;
12349
12350 r_type = ELF64_R_TYPE (rel->r_info);
12351 if (r_type != R_PPC64_REL24
12352 && r_type != R_PPC64_REL24_NOTOC
12353 && r_type != R_PPC64_REL14
12354 && r_type != R_PPC64_REL14_BRTAKEN
12355 && r_type != R_PPC64_REL14_BRNTAKEN
12356 && r_type != R_PPC64_PLTCALL
12357 && r_type != R_PPC64_PLTCALL_NOTOC)
12358 continue;
12359
12360 r_symndx = ELF64_R_SYM (rel->r_info);
12361 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
12362 isec->owner))
12363 {
12364 ret = -1;
12365 break;
12366 }
12367
12368 /* Calls to dynamic lib functions go through a plt call stub
12369 that uses r2. */
12370 eh = ppc_elf_hash_entry (h);
12371 if (eh != NULL
12372 && (eh->elf.plt.plist != NULL
12373 || (eh->oh != NULL
12374 && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
12375 {
12376 ret = 1;
12377 break;
12378 }
12379
12380 if (sym_sec == NULL)
12381 /* Ignore other undefined symbols. */
12382 continue;
12383
12384 /* Assume branches to other sections not included in the
12385 link need stubs too, to cover -R and absolute syms. */
12386 if (sym_sec->output_section == NULL)
12387 {
12388 ret = 1;
12389 break;
12390 }
12391
12392 if (h == NULL)
12393 sym_value = sym->st_value;
12394 else
12395 {
12396 if (h->root.type != bfd_link_hash_defined
12397 && h->root.type != bfd_link_hash_defweak)
12398 abort ();
12399 sym_value = h->root.u.def.value;
12400 }
12401 sym_value += rel->r_addend;
12402
12403 /* If this branch reloc uses an opd sym, find the code section. */
12404 opd = get_opd_info (sym_sec);
12405 if (opd != NULL)
12406 {
12407 if (h == NULL && opd->adjust != NULL)
12408 {
12409 long adjust;
12410
12411 adjust = opd->adjust[OPD_NDX (sym_value)];
12412 if (adjust == -1)
12413 /* Assume deleted functions won't ever be called. */
12414 continue;
12415 sym_value += adjust;
12416 }
12417
12418 dest = opd_entry_value (sym_sec, sym_value,
12419 &sym_sec, NULL, FALSE);
12420 if (dest == (bfd_vma) -1)
12421 continue;
12422 }
12423 else
12424 dest = (sym_value
12425 + sym_sec->output_offset
12426 + sym_sec->output_section->vma);
12427
12428 /* Ignore branch to self. */
12429 if (sym_sec == isec)
12430 continue;
12431
12432 /* If the called function uses the toc, we need a stub. */
12433 if (sym_sec->has_toc_reloc
12434 || sym_sec->makes_toc_func_call)
12435 {
12436 ret = 1;
12437 break;
12438 }
12439
12440 /* Assume any branch that needs a long branch stub might in fact
12441 need a plt_branch stub. A plt_branch stub uses r2. */
12442 else if (dest - (isec->output_offset
12443 + isec->output_section->vma
12444 + rel->r_offset) + (1 << 25)
12445 >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
12446 ? h->other
12447 : sym->st_other))
12448 {
12449 ret = 1;
12450 break;
12451 }
12452
12453 /* If calling back to a section in the process of being
12454 tested, we can't say for sure that no toc adjusting stubs
12455 are needed, so don't return zero. */
12456 else if (sym_sec->call_check_in_progress)
12457 ret = 2;
12458
12459 /* Branches to another section that itself doesn't have any TOC
12460 references are OK. Recursively call ourselves to check. */
12461 else if (!sym_sec->call_check_done)
12462 {
12463 int recur;
12464
12465 /* Mark current section as indeterminate, so that other
12466 sections that call back to current won't be marked as
12467 known. */
12468 isec->call_check_in_progress = 1;
12469 recur = toc_adjusting_stub_needed (info, sym_sec);
12470 isec->call_check_in_progress = 0;
12471
12472 if (recur != 0)
12473 {
12474 ret = recur;
12475 if (recur != 2)
12476 break;
12477 }
12478 }
12479 }
12480
12481 if (local_syms != NULL
12482 && (elf_symtab_hdr (isec->owner).contents
12483 != (unsigned char *) local_syms))
12484 free (local_syms);
12485 if (elf_section_data (isec)->relocs != relstart)
12486 free (relstart);
12487 }
12488
12489 if ((ret & 1) == 0
12490 && isec->map_head.s != NULL
12491 && (strcmp (isec->output_section->name, ".init") == 0
12492 || strcmp (isec->output_section->name, ".fini") == 0))
12493 {
12494 if (isec->map_head.s->has_toc_reloc
12495 || isec->map_head.s->makes_toc_func_call)
12496 ret = 1;
12497 else if (!isec->map_head.s->call_check_done)
12498 {
12499 int recur;
12500 isec->call_check_in_progress = 1;
12501 recur = toc_adjusting_stub_needed (info, isec->map_head.s);
12502 isec->call_check_in_progress = 0;
12503 if (recur != 0)
12504 ret = recur;
12505 }
12506 }
12507
12508 if (ret == 1)
12509 isec->makes_toc_func_call = 1;
12510
12511 return ret;
12512 }
12513
12514 /* The linker repeatedly calls this function for each input section,
12515 in the order that input sections are linked into output sections.
12516 Build lists of input sections to determine groupings between which
12517 we may insert linker stubs. */
12518
12519 bfd_boolean
12520 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12521 {
12522 struct ppc_link_hash_table *htab = ppc_hash_table (info);
12523
12524 if (htab == NULL)
12525 return FALSE;
12526
12527 if ((isec->output_section->flags & SEC_CODE) != 0
12528 && isec->output_section->id < htab->sec_info_arr_size)
12529 {
12530 /* This happens to make the list in reverse order,
12531 which is what we want. */
12532 htab->sec_info[isec->id].u.list
12533 = htab->sec_info[isec->output_section->id].u.list;
12534 htab->sec_info[isec->output_section->id].u.list = isec;
12535 }
12536
12537 if (htab->multi_toc_needed)
12538 {
12539 /* Analyse sections that aren't already flagged as needing a
12540 valid toc pointer. Exclude .fixup for the linux kernel.
12541 .fixup contains branches, but only back to the function that
12542 hit an exception. */
12543 if (!(isec->has_toc_reloc
12544 || (isec->flags & SEC_CODE) == 0
12545 || strcmp (isec->name, ".fixup") == 0
12546 || isec->call_check_done))
12547 {
12548 if (toc_adjusting_stub_needed (info, isec) < 0)
12549 return FALSE;
12550 }
12551 /* Make all sections use the TOC assigned for this object file.
12552 This will be wrong for pasted sections; We fix that in
12553 check_pasted_section(). */
12554 if (elf_gp (isec->owner) != 0)
12555 htab->toc_curr = elf_gp (isec->owner);
12556 }
12557
12558 htab->sec_info[isec->id].toc_off = htab->toc_curr;
12559 return TRUE;
12560 }
12561
12562 /* Check that all .init and .fini sections use the same toc, if they
12563 have toc relocs. */
12564
12565 static bfd_boolean
12566 check_pasted_section (struct bfd_link_info *info, const char *name)
12567 {
12568 asection *o = bfd_get_section_by_name (info->output_bfd, name);
12569
12570 if (o != NULL)
12571 {
12572 struct ppc_link_hash_table *htab = ppc_hash_table (info);
12573 bfd_vma toc_off = 0;
12574 asection *i;
12575
12576 for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12577 if (i->has_toc_reloc)
12578 {
12579 if (toc_off == 0)
12580 toc_off = htab->sec_info[i->id].toc_off;
12581 else if (toc_off != htab->sec_info[i->id].toc_off)
12582 return FALSE;
12583 }
12584
12585 if (toc_off == 0)
12586 for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12587 if (i->makes_toc_func_call)
12588 {
12589 toc_off = htab->sec_info[i->id].toc_off;
12590 break;
12591 }
12592
12593 /* Make sure the whole pasted function uses the same toc offset. */
12594 if (toc_off != 0)
12595 for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12596 htab->sec_info[i->id].toc_off = toc_off;
12597 }
12598 return TRUE;
12599 }
12600
12601 bfd_boolean
12602 ppc64_elf_check_init_fini (struct bfd_link_info *info)
12603 {
12604 return (check_pasted_section (info, ".init")
12605 & check_pasted_section (info, ".fini"));
12606 }
12607
12608 /* See whether we can group stub sections together. Grouping stub
12609 sections may result in fewer stubs. More importantly, we need to
12610 put all .init* and .fini* stubs at the beginning of the .init or
12611 .fini output sections respectively, because glibc splits the
12612 _init and _fini functions into multiple parts. Putting a stub in
12613 the middle of a function is not a good idea. */
12614
12615 static bfd_boolean
12616 group_sections (struct bfd_link_info *info,
12617 bfd_size_type stub_group_size,
12618 bfd_boolean stubs_always_before_branch)
12619 {
12620 struct ppc_link_hash_table *htab;
12621 asection *osec;
12622 bfd_boolean suppress_size_errors;
12623
12624 htab = ppc_hash_table (info);
12625 if (htab == NULL)
12626 return FALSE;
12627
12628 suppress_size_errors = FALSE;
12629 if (stub_group_size == 1)
12630 {
12631 /* Default values. */
12632 if (stubs_always_before_branch)
12633 stub_group_size = 0x1e00000;
12634 else
12635 stub_group_size = 0x1c00000;
12636 suppress_size_errors = TRUE;
12637 }
12638
12639 for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12640 {
12641 asection *tail;
12642
12643 if (osec->id >= htab->sec_info_arr_size)
12644 continue;
12645
12646 tail = htab->sec_info[osec->id].u.list;
12647 while (tail != NULL)
12648 {
12649 asection *curr;
12650 asection *prev;
12651 bfd_size_type total;
12652 bfd_boolean big_sec;
12653 bfd_vma curr_toc;
12654 struct map_stub *group;
12655 bfd_size_type group_size;
12656
12657 curr = tail;
12658 total = tail->size;
12659 group_size = (ppc64_elf_section_data (tail) != NULL
12660 && ppc64_elf_section_data (tail)->has_14bit_branch
12661 ? stub_group_size >> 10 : stub_group_size);
12662
12663 big_sec = total > group_size;
12664 if (big_sec && !suppress_size_errors)
12665 /* xgettext:c-format */
12666 _bfd_error_handler (_("%pB section %pA exceeds stub group size"),
12667 tail->owner, tail);
12668 curr_toc = htab->sec_info[tail->id].toc_off;
12669
12670 while ((prev = htab->sec_info[curr->id].u.list) != NULL
12671 && ((total += curr->output_offset - prev->output_offset)
12672 < (ppc64_elf_section_data (prev) != NULL
12673 && ppc64_elf_section_data (prev)->has_14bit_branch
12674 ? (group_size = stub_group_size >> 10) : group_size))
12675 && htab->sec_info[prev->id].toc_off == curr_toc)
12676 curr = prev;
12677
12678 /* OK, the size from the start of CURR to the end is less
12679 than group_size and thus can be handled by one stub
12680 section. (or the tail section is itself larger than
12681 group_size, in which case we may be toast.) We should
12682 really be keeping track of the total size of stubs added
12683 here, as stubs contribute to the final output section
12684 size. That's a little tricky, and this way will only
12685 break if stubs added make the total size more than 2^25,
12686 ie. for the default stub_group_size, if stubs total more
12687 than 2097152 bytes, or nearly 75000 plt call stubs. */
12688 group = bfd_alloc (curr->owner, sizeof (*group));
12689 if (group == NULL)
12690 return FALSE;
12691 group->link_sec = curr;
12692 group->stub_sec = NULL;
12693 group->needs_save_res = 0;
12694 group->lr_restore = 0;
12695 group->eh_size = 0;
12696 group->eh_base = 0;
12697 group->next = htab->group;
12698 htab->group = group;
12699 do
12700 {
12701 prev = htab->sec_info[tail->id].u.list;
12702 /* Set up this stub group. */
12703 htab->sec_info[tail->id].u.group = group;
12704 }
12705 while (tail != curr && (tail = prev) != NULL);
12706
12707 /* But wait, there's more! Input sections up to group_size
12708 bytes before the stub section can be handled by it too.
12709 Don't do this if we have a really large section after the
12710 stubs, as adding more stubs increases the chance that
12711 branches may not reach into the stub section. */
12712 if (!stubs_always_before_branch && !big_sec)
12713 {
12714 total = 0;
12715 while (prev != NULL
12716 && ((total += tail->output_offset - prev->output_offset)
12717 < (ppc64_elf_section_data (prev) != NULL
12718 && ppc64_elf_section_data (prev)->has_14bit_branch
12719 ? (group_size = stub_group_size >> 10)
12720 : group_size))
12721 && htab->sec_info[prev->id].toc_off == curr_toc)
12722 {
12723 tail = prev;
12724 prev = htab->sec_info[tail->id].u.list;
12725 htab->sec_info[tail->id].u.group = group;
12726 }
12727 }
12728 tail = prev;
12729 }
12730 }
12731 return TRUE;
12732 }
12733
12734 static const unsigned char glink_eh_frame_cie[] =
12735 {
12736 0, 0, 0, 16, /* length. */
12737 0, 0, 0, 0, /* id. */
12738 1, /* CIE version. */
12739 'z', 'R', 0, /* Augmentation string. */
12740 4, /* Code alignment. */
12741 0x78, /* Data alignment. */
12742 65, /* RA reg. */
12743 1, /* Augmentation size. */
12744 DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding. */
12745 DW_CFA_def_cfa, 1, 0 /* def_cfa: r1 offset 0. */
12746 };
12747
12748 /* Stripping output sections is normally done before dynamic section
12749 symbols have been allocated. This function is called later, and
12750 handles cases like htab->brlt which is mapped to its own output
12751 section. */
12752
12753 static void
12754 maybe_strip_output (struct bfd_link_info *info, asection *isec)
12755 {
12756 if (isec->size == 0
12757 && isec->output_section->size == 0
12758 && !(isec->output_section->flags & SEC_KEEP)
12759 && !bfd_section_removed_from_list (info->output_bfd,
12760 isec->output_section)
12761 && elf_section_data (isec->output_section)->dynindx == 0)
12762 {
12763 isec->output_section->flags |= SEC_EXCLUDE;
12764 bfd_section_list_remove (info->output_bfd, isec->output_section);
12765 info->output_bfd->section_count--;
12766 }
12767 }
12768
12769 /* Determine and set the size of the stub section for a final link.
12770
12771 The basic idea here is to examine all the relocations looking for
12772 PC-relative calls to a target that is unreachable with a "bl"
12773 instruction. */
12774
12775 bfd_boolean
12776 ppc64_elf_size_stubs (struct bfd_link_info *info)
12777 {
12778 bfd_size_type stub_group_size;
12779 bfd_boolean stubs_always_before_branch;
12780 struct ppc_link_hash_table *htab = ppc_hash_table (info);
12781
12782 if (htab == NULL)
12783 return FALSE;
12784
12785 if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
12786 htab->params->plt_thread_safe = 1;
12787 if (!htab->opd_abi)
12788 htab->params->plt_thread_safe = 0;
12789 else if (htab->params->plt_thread_safe == -1)
12790 {
12791 static const char *const thread_starter[] =
12792 {
12793 "pthread_create",
12794 /* libstdc++ */
12795 "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
12796 /* librt */
12797 "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
12798 "mq_notify", "create_timer",
12799 /* libanl */
12800 "getaddrinfo_a",
12801 /* libgomp */
12802 "GOMP_parallel",
12803 "GOMP_parallel_start",
12804 "GOMP_parallel_loop_static",
12805 "GOMP_parallel_loop_static_start",
12806 "GOMP_parallel_loop_dynamic",
12807 "GOMP_parallel_loop_dynamic_start",
12808 "GOMP_parallel_loop_guided",
12809 "GOMP_parallel_loop_guided_start",
12810 "GOMP_parallel_loop_runtime",
12811 "GOMP_parallel_loop_runtime_start",
12812 "GOMP_parallel_sections",
12813 "GOMP_parallel_sections_start",
12814 /* libgo */
12815 "__go_go",
12816 };
12817 unsigned i;
12818
12819 for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
12820 {
12821 struct elf_link_hash_entry *h;
12822 h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
12823 FALSE, FALSE, TRUE);
12824 htab->params->plt_thread_safe = h != NULL && h->ref_regular;
12825 if (htab->params->plt_thread_safe)
12826 break;
12827 }
12828 }
12829 stubs_always_before_branch = htab->params->group_size < 0;
12830 if (htab->params->group_size < 0)
12831 stub_group_size = -htab->params->group_size;
12832 else
12833 stub_group_size = htab->params->group_size;
12834
12835 if (!group_sections (info, stub_group_size, stubs_always_before_branch))
12836 return FALSE;
12837
12838 #define STUB_SHRINK_ITER 20
12839 /* Loop until no stubs added. After iteration 20 of this loop we may
12840 exit on a stub section shrinking. This is to break out of a
12841 pathological case where adding stubs on one iteration decreases
12842 section gaps (perhaps due to alignment), which then requires
12843 fewer or smaller stubs on the next iteration. */
12844
12845 while (1)
12846 {
12847 bfd *input_bfd;
12848 unsigned int bfd_indx;
12849 struct map_stub *group;
12850
12851 htab->stub_iteration += 1;
12852
12853 for (input_bfd = info->input_bfds, bfd_indx = 0;
12854 input_bfd != NULL;
12855 input_bfd = input_bfd->link.next, bfd_indx++)
12856 {
12857 Elf_Internal_Shdr *symtab_hdr;
12858 asection *section;
12859 Elf_Internal_Sym *local_syms = NULL;
12860
12861 if (!is_ppc64_elf (input_bfd))
12862 continue;
12863
12864 /* We'll need the symbol table in a second. */
12865 symtab_hdr = &elf_symtab_hdr (input_bfd);
12866 if (symtab_hdr->sh_info == 0)
12867 continue;
12868
12869 /* Walk over each section attached to the input bfd. */
12870 for (section = input_bfd->sections;
12871 section != NULL;
12872 section = section->next)
12873 {
12874 Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
12875
12876 /* If there aren't any relocs, then there's nothing more
12877 to do. */
12878 if ((section->flags & SEC_RELOC) == 0
12879 || (section->flags & SEC_ALLOC) == 0
12880 || (section->flags & SEC_LOAD) == 0
12881 || (section->flags & SEC_CODE) == 0
12882 || section->reloc_count == 0)
12883 continue;
12884
12885 /* If this section is a link-once section that will be
12886 discarded, then don't create any stubs. */
12887 if (section->output_section == NULL
12888 || section->output_section->owner != info->output_bfd)
12889 continue;
12890
12891 /* Get the relocs. */
12892 internal_relocs
12893 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
12894 info->keep_memory);
12895 if (internal_relocs == NULL)
12896 goto error_ret_free_local;
12897
12898 /* Now examine each relocation. */
12899 irela = internal_relocs;
12900 irelaend = irela + section->reloc_count;
12901 for (; irela < irelaend; irela++)
12902 {
12903 enum elf_ppc64_reloc_type r_type;
12904 unsigned int r_indx;
12905 enum ppc_stub_type stub_type;
12906 struct ppc_stub_hash_entry *stub_entry;
12907 asection *sym_sec, *code_sec;
12908 bfd_vma sym_value, code_value;
12909 bfd_vma destination;
12910 unsigned long local_off;
12911 bfd_boolean ok_dest;
12912 struct ppc_link_hash_entry *hash;
12913 struct ppc_link_hash_entry *fdh;
12914 struct elf_link_hash_entry *h;
12915 Elf_Internal_Sym *sym;
12916 char *stub_name;
12917 const asection *id_sec;
12918 struct _opd_sec_data *opd;
12919 struct plt_entry *plt_ent;
12920
12921 r_type = ELF64_R_TYPE (irela->r_info);
12922 r_indx = ELF64_R_SYM (irela->r_info);
12923
12924 if (r_type >= R_PPC64_max)
12925 {
12926 bfd_set_error (bfd_error_bad_value);
12927 goto error_ret_free_internal;
12928 }
12929
12930 /* Only look for stubs on branch instructions. */
12931 if (r_type != R_PPC64_REL24
12932 && r_type != R_PPC64_REL24_NOTOC
12933 && r_type != R_PPC64_REL14
12934 && r_type != R_PPC64_REL14_BRTAKEN
12935 && r_type != R_PPC64_REL14_BRNTAKEN)
12936 continue;
12937
12938 /* Now determine the call target, its name, value,
12939 section. */
12940 if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
12941 r_indx, input_bfd))
12942 goto error_ret_free_internal;
12943 hash = ppc_elf_hash_entry (h);
12944
12945 ok_dest = FALSE;
12946 fdh = NULL;
12947 sym_value = 0;
12948 if (hash == NULL)
12949 {
12950 sym_value = sym->st_value;
12951 if (sym_sec != NULL
12952 && sym_sec->output_section != NULL)
12953 ok_dest = TRUE;
12954 }
12955 else if (hash->elf.root.type == bfd_link_hash_defined
12956 || hash->elf.root.type == bfd_link_hash_defweak)
12957 {
12958 sym_value = hash->elf.root.u.def.value;
12959 if (sym_sec->output_section != NULL)
12960 ok_dest = TRUE;
12961 }
12962 else if (hash->elf.root.type == bfd_link_hash_undefweak
12963 || hash->elf.root.type == bfd_link_hash_undefined)
12964 {
12965 /* Recognise an old ABI func code entry sym, and
12966 use the func descriptor sym instead if it is
12967 defined. */
12968 if (hash->elf.root.root.string[0] == '.'
12969 && hash->oh != NULL)
12970 {
12971 fdh = ppc_follow_link (hash->oh);
12972 if (fdh->elf.root.type == bfd_link_hash_defined
12973 || fdh->elf.root.type == bfd_link_hash_defweak)
12974 {
12975 sym_sec = fdh->elf.root.u.def.section;
12976 sym_value = fdh->elf.root.u.def.value;
12977 if (sym_sec->output_section != NULL)
12978 ok_dest = TRUE;
12979 }
12980 else
12981 fdh = NULL;
12982 }
12983 }
12984 else
12985 {
12986 bfd_set_error (bfd_error_bad_value);
12987 goto error_ret_free_internal;
12988 }
12989
12990 destination = 0;
12991 local_off = 0;
12992 if (ok_dest)
12993 {
12994 sym_value += irela->r_addend;
12995 destination = (sym_value
12996 + sym_sec->output_offset
12997 + sym_sec->output_section->vma);
12998 local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
12999 ? hash->elf.other
13000 : sym->st_other);
13001 }
13002
13003 code_sec = sym_sec;
13004 code_value = sym_value;
13005 opd = get_opd_info (sym_sec);
13006 if (opd != NULL)
13007 {
13008 bfd_vma dest;
13009
13010 if (hash == NULL && opd->adjust != NULL)
13011 {
13012 long adjust = opd->adjust[OPD_NDX (sym_value)];
13013 if (adjust == -1)
13014 continue;
13015 code_value += adjust;
13016 sym_value += adjust;
13017 }
13018 dest = opd_entry_value (sym_sec, sym_value,
13019 &code_sec, &code_value, FALSE);
13020 if (dest != (bfd_vma) -1)
13021 {
13022 destination = dest;
13023 if (fdh != NULL)
13024 {
13025 /* Fixup old ABI sym to point at code
13026 entry. */
13027 hash->elf.root.type = bfd_link_hash_defweak;
13028 hash->elf.root.u.def.section = code_sec;
13029 hash->elf.root.u.def.value = code_value;
13030 }
13031 }
13032 }
13033
13034 /* Determine what (if any) linker stub is needed. */
13035 plt_ent = NULL;
13036 stub_type = ppc_type_of_stub (section, irela, &hash,
13037 &plt_ent, destination,
13038 local_off);
13039
13040 if (r_type == R_PPC64_REL24_NOTOC)
13041 {
13042 if (stub_type == ppc_stub_plt_call)
13043 stub_type = ppc_stub_plt_call_notoc;
13044 else if (stub_type == ppc_stub_long_branch
13045 || (code_sec != NULL
13046 && code_sec->output_section != NULL
13047 && (((hash ? hash->elf.other : sym->st_other)
13048 & STO_PPC64_LOCAL_MASK)
13049 > 1 << STO_PPC64_LOCAL_BIT)))
13050 stub_type = ppc_stub_long_branch_notoc;
13051 }
13052 else if (stub_type != ppc_stub_plt_call)
13053 {
13054 /* Check whether we need a TOC adjusting stub.
13055 Since the linker pastes together pieces from
13056 different object files when creating the
13057 _init and _fini functions, it may be that a
13058 call to what looks like a local sym is in
13059 fact a call needing a TOC adjustment. */
13060 if ((code_sec != NULL
13061 && code_sec->output_section != NULL
13062 && (htab->sec_info[code_sec->id].toc_off
13063 != htab->sec_info[section->id].toc_off)
13064 && (code_sec->has_toc_reloc
13065 || code_sec->makes_toc_func_call))
13066 || (((hash ? hash->elf.other : sym->st_other)
13067 & STO_PPC64_LOCAL_MASK)
13068 == 1 << STO_PPC64_LOCAL_BIT))
13069 stub_type = ppc_stub_long_branch_r2off;
13070 }
13071
13072 if (stub_type == ppc_stub_none)
13073 continue;
13074
13075 /* __tls_get_addr calls might be eliminated. */
13076 if (stub_type != ppc_stub_plt_call
13077 && stub_type != ppc_stub_plt_call_notoc
13078 && hash != NULL
13079 && is_tls_get_addr (&hash->elf, htab)
13080 && section->has_tls_reloc
13081 && irela != internal_relocs)
13082 {
13083 /* Get tls info. */
13084 unsigned char *tls_mask;
13085
13086 if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
13087 irela - 1, input_bfd))
13088 goto error_ret_free_internal;
13089 if ((*tls_mask & TLS_TLS) != 0)
13090 continue;
13091 }
13092
13093 if (stub_type == ppc_stub_plt_call)
13094 {
13095 if (!htab->opd_abi
13096 && htab->params->plt_localentry0 != 0
13097 && is_elfv2_localentry0 (&hash->elf))
13098 htab->has_plt_localentry0 = 1;
13099 else if (irela + 1 < irelaend
13100 && irela[1].r_offset == irela->r_offset + 4
13101 && (ELF64_R_TYPE (irela[1].r_info)
13102 == R_PPC64_TOCSAVE))
13103 {
13104 if (!tocsave_find (htab, INSERT,
13105 &local_syms, irela + 1, input_bfd))
13106 goto error_ret_free_internal;
13107 }
13108 else
13109 stub_type = ppc_stub_plt_call_r2save;
13110 }
13111
13112 /* Support for grouping stub sections. */
13113 id_sec = htab->sec_info[section->id].u.group->link_sec;
13114
13115 /* Get the name of this stub. */
13116 stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
13117 if (!stub_name)
13118 goto error_ret_free_internal;
13119
13120 stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
13121 stub_name, FALSE, FALSE);
13122 if (stub_entry != NULL)
13123 {
13124 enum ppc_stub_type old_type;
13125 /* A stub has already been created, but it may
13126 not be the required type. We shouldn't be
13127 transitioning from plt_call to long_branch
13128 stubs or vice versa, but we might be
13129 upgrading from plt_call to plt_call_r2save or
13130 from long_branch to long_branch_r2off. */
13131 free (stub_name);
13132 old_type = stub_entry->stub_type;
13133 switch (old_type)
13134 {
13135 default:
13136 abort ();
13137
13138 case ppc_stub_save_res:
13139 continue;
13140
13141 case ppc_stub_plt_call:
13142 case ppc_stub_plt_call_r2save:
13143 case ppc_stub_plt_call_notoc:
13144 case ppc_stub_plt_call_both:
13145 if (stub_type == ppc_stub_plt_call)
13146 continue;
13147 else if (stub_type == ppc_stub_plt_call_r2save)
13148 {
13149 if (old_type == ppc_stub_plt_call_notoc)
13150 stub_type = ppc_stub_plt_call_both;
13151 }
13152 else if (stub_type == ppc_stub_plt_call_notoc)
13153 {
13154 if (old_type == ppc_stub_plt_call_r2save)
13155 stub_type = ppc_stub_plt_call_both;
13156 }
13157 else
13158 abort ();
13159 break;
13160
13161 case ppc_stub_plt_branch:
13162 case ppc_stub_plt_branch_r2off:
13163 case ppc_stub_plt_branch_notoc:
13164 case ppc_stub_plt_branch_both:
13165 old_type += (ppc_stub_long_branch
13166 - ppc_stub_plt_branch);
13167 /* Fall through. */
13168 case ppc_stub_long_branch:
13169 case ppc_stub_long_branch_r2off:
13170 case ppc_stub_long_branch_notoc:
13171 case ppc_stub_long_branch_both:
13172 if (stub_type == ppc_stub_long_branch)
13173 continue;
13174 else if (stub_type == ppc_stub_long_branch_r2off)
13175 {
13176 if (old_type == ppc_stub_long_branch_notoc)
13177 stub_type = ppc_stub_long_branch_both;
13178 }
13179 else if (stub_type == ppc_stub_long_branch_notoc)
13180 {
13181 if (old_type == ppc_stub_long_branch_r2off)
13182 stub_type = ppc_stub_long_branch_both;
13183 }
13184 else
13185 abort ();
13186 break;
13187 }
13188 if (old_type < stub_type)
13189 stub_entry->stub_type = stub_type;
13190 continue;
13191 }
13192
13193 stub_entry = ppc_add_stub (stub_name, section, info);
13194 if (stub_entry == NULL)
13195 {
13196 free (stub_name);
13197 error_ret_free_internal:
13198 if (elf_section_data (section)->relocs == NULL)
13199 free (internal_relocs);
13200 error_ret_free_local:
13201 if (local_syms != NULL
13202 && (symtab_hdr->contents
13203 != (unsigned char *) local_syms))
13204 free (local_syms);
13205 return FALSE;
13206 }
13207
13208 stub_entry->stub_type = stub_type;
13209 if (stub_type >= ppc_stub_plt_call
13210 && stub_type <= ppc_stub_plt_call_both)
13211 {
13212 stub_entry->target_value = sym_value;
13213 stub_entry->target_section = sym_sec;
13214 }
13215 else
13216 {
13217 stub_entry->target_value = code_value;
13218 stub_entry->target_section = code_sec;
13219 }
13220 stub_entry->h = hash;
13221 stub_entry->plt_ent = plt_ent;
13222 stub_entry->symtype
13223 = hash ? hash->elf.type : ELF_ST_TYPE (sym->st_info);
13224 stub_entry->other = hash ? hash->elf.other : sym->st_other;
13225
13226 if (hash != NULL
13227 && (hash->elf.root.type == bfd_link_hash_defined
13228 || hash->elf.root.type == bfd_link_hash_defweak))
13229 htab->stub_globals += 1;
13230 }
13231
13232 /* We're done with the internal relocs, free them. */
13233 if (elf_section_data (section)->relocs != internal_relocs)
13234 free (internal_relocs);
13235 }
13236
13237 if (local_syms != NULL
13238 && symtab_hdr->contents != (unsigned char *) local_syms)
13239 {
13240 if (!info->keep_memory)
13241 free (local_syms);
13242 else
13243 symtab_hdr->contents = (unsigned char *) local_syms;
13244 }
13245 }
13246
13247 /* We may have added some stubs. Find out the new size of the
13248 stub sections. */
13249 for (group = htab->group; group != NULL; group = group->next)
13250 {
13251 group->lr_restore = 0;
13252 group->eh_size = 0;
13253 if (group->stub_sec != NULL)
13254 {
13255 asection *stub_sec = group->stub_sec;
13256
13257 if (htab->stub_iteration <= STUB_SHRINK_ITER
13258 || stub_sec->rawsize < stub_sec->size)
13259 /* Past STUB_SHRINK_ITER, rawsize is the max size seen. */
13260 stub_sec->rawsize = stub_sec->size;
13261 stub_sec->size = 0;
13262 stub_sec->reloc_count = 0;
13263 stub_sec->flags &= ~SEC_RELOC;
13264 }
13265 }
13266
13267 if (htab->stub_iteration <= STUB_SHRINK_ITER
13268 || htab->brlt->rawsize < htab->brlt->size)
13269 htab->brlt->rawsize = htab->brlt->size;
13270 htab->brlt->size = 0;
13271 htab->brlt->reloc_count = 0;
13272 htab->brlt->flags &= ~SEC_RELOC;
13273 if (htab->relbrlt != NULL)
13274 htab->relbrlt->size = 0;
13275
13276 bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
13277
13278 for (group = htab->group; group != NULL; group = group->next)
13279 if (group->needs_save_res)
13280 group->stub_sec->size += htab->sfpr->size;
13281
13282 if (info->emitrelocations
13283 && htab->glink != NULL && htab->glink->size != 0)
13284 {
13285 htab->glink->reloc_count = 1;
13286 htab->glink->flags |= SEC_RELOC;
13287 }
13288
13289 if (htab->glink_eh_frame != NULL
13290 && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
13291 && htab->glink_eh_frame->output_section->size > 8)
13292 {
13293 size_t size = 0, align = 4;
13294
13295 for (group = htab->group; group != NULL; group = group->next)
13296 if (group->eh_size != 0)
13297 size += (group->eh_size + 17 + align - 1) & -align;
13298 if (htab->glink != NULL && htab->glink->size != 0)
13299 size += (24 + align - 1) & -align;
13300 if (size != 0)
13301 size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
13302 align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13303 size = (size + align - 1) & -align;
13304 htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
13305 htab->glink_eh_frame->size = size;
13306 }
13307
13308 if (htab->params->plt_stub_align != 0)
13309 for (group = htab->group; group != NULL; group = group->next)
13310 if (group->stub_sec != NULL)
13311 {
13312 int align = abs (htab->params->plt_stub_align);
13313 group->stub_sec->size
13314 = (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
13315 }
13316
13317 for (group = htab->group; group != NULL; group = group->next)
13318 if (group->stub_sec != NULL
13319 && group->stub_sec->rawsize != group->stub_sec->size
13320 && (htab->stub_iteration <= STUB_SHRINK_ITER
13321 || group->stub_sec->rawsize < group->stub_sec->size))
13322 break;
13323
13324 if (group == NULL
13325 && (htab->brlt->rawsize == htab->brlt->size
13326 || (htab->stub_iteration > STUB_SHRINK_ITER
13327 && htab->brlt->rawsize > htab->brlt->size))
13328 && (htab->glink_eh_frame == NULL
13329 || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
13330 break;
13331
13332 /* Ask the linker to do its stuff. */
13333 (*htab->params->layout_sections_again) ();
13334 }
13335
13336 if (htab->glink_eh_frame != NULL
13337 && htab->glink_eh_frame->size != 0)
13338 {
13339 bfd_vma val;
13340 bfd_byte *p, *last_fde;
13341 size_t last_fde_len, size, align, pad;
13342 struct map_stub *group;
13343
13344 /* It is necessary to at least have a rough outline of the
13345 linker generated CIEs and FDEs written before
13346 bfd_elf_discard_info is run, in order for these FDEs to be
13347 indexed in .eh_frame_hdr. */
13348 p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
13349 if (p == NULL)
13350 return FALSE;
13351 htab->glink_eh_frame->contents = p;
13352 last_fde = p;
13353 align = 4;
13354
13355 memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
13356 /* CIE length (rewrite in case little-endian). */
13357 last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
13358 bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13359 p += last_fde_len + 4;
13360
13361 for (group = htab->group; group != NULL; group = group->next)
13362 if (group->eh_size != 0)
13363 {
13364 group->eh_base = p - htab->glink_eh_frame->contents;
13365 last_fde = p;
13366 last_fde_len = ((group->eh_size + 17 + align - 1) & -align) - 4;
13367 /* FDE length. */
13368 bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13369 p += 4;
13370 /* CIE pointer. */
13371 val = p - htab->glink_eh_frame->contents;
13372 bfd_put_32 (htab->elf.dynobj, val, p);
13373 p += 4;
13374 /* Offset to stub section, written later. */
13375 p += 4;
13376 /* stub section size. */
13377 bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
13378 p += 4;
13379 /* Augmentation. */
13380 p += 1;
13381 /* Make sure we don't have all nops. This is enough for
13382 elf-eh-frame.c to detect the last non-nop opcode. */
13383 p[group->eh_size - 1] = DW_CFA_advance_loc + 1;
13384 p = last_fde + last_fde_len + 4;
13385 }
13386 if (htab->glink != NULL && htab->glink->size != 0)
13387 {
13388 last_fde = p;
13389 last_fde_len = ((24 + align - 1) & -align) - 4;
13390 /* FDE length. */
13391 bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
13392 p += 4;
13393 /* CIE pointer. */
13394 val = p - htab->glink_eh_frame->contents;
13395 bfd_put_32 (htab->elf.dynobj, val, p);
13396 p += 4;
13397 /* Offset to .glink, written later. */
13398 p += 4;
13399 /* .glink size. */
13400 bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
13401 p += 4;
13402 /* Augmentation. */
13403 p += 1;
13404
13405 *p++ = DW_CFA_advance_loc + 1;
13406 *p++ = DW_CFA_register;
13407 *p++ = 65;
13408 *p++ = htab->opd_abi ? 12 : 0;
13409 *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
13410 *p++ = DW_CFA_restore_extended;
13411 *p++ = 65;
13412 p += ((24 + align - 1) & -align) - 24;
13413 }
13414 /* Subsume any padding into the last FDE if user .eh_frame
13415 sections are aligned more than glink_eh_frame. Otherwise any
13416 zero padding will be seen as a terminator. */
13417 align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
13418 size = p - htab->glink_eh_frame->contents;
13419 pad = ((size + align - 1) & -align) - size;
13420 htab->glink_eh_frame->size = size + pad;
13421 bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
13422 }
13423
13424 maybe_strip_output (info, htab->brlt);
13425 if (htab->glink_eh_frame != NULL)
13426 maybe_strip_output (info, htab->glink_eh_frame);
13427
13428 return TRUE;
13429 }
13430
13431 /* Called after we have determined section placement. If sections
13432 move, we'll be called again. Provide a value for TOCstart. */
13433
13434 bfd_vma
13435 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
13436 {
13437 asection *s;
13438 bfd_vma TOCstart, adjust;
13439
13440 if (info != NULL)
13441 {
13442 struct elf_link_hash_entry *h;
13443 struct elf_link_hash_table *htab = elf_hash_table (info);
13444
13445 if (is_elf_hash_table (htab)
13446 && htab->hgot != NULL)
13447 h = htab->hgot;
13448 else
13449 {
13450 h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
13451 if (is_elf_hash_table (htab))
13452 htab->hgot = h;
13453 }
13454 if (h != NULL
13455 && h->root.type == bfd_link_hash_defined
13456 && !h->root.linker_def
13457 && (!is_elf_hash_table (htab)
13458 || h->def_regular))
13459 {
13460 TOCstart = defined_sym_val (h) - TOC_BASE_OFF;
13461 _bfd_set_gp_value (obfd, TOCstart);
13462 return TOCstart;
13463 }
13464 }
13465
13466 /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
13467 order. The TOC starts where the first of these sections starts. */
13468 s = bfd_get_section_by_name (obfd, ".got");
13469 if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13470 s = bfd_get_section_by_name (obfd, ".toc");
13471 if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13472 s = bfd_get_section_by_name (obfd, ".tocbss");
13473 if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13474 s = bfd_get_section_by_name (obfd, ".plt");
13475 if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
13476 {
13477 /* This may happen for
13478 o references to TOC base (SYM@toc / TOC[tc0]) without a
13479 .toc directive
13480 o bad linker script
13481 o --gc-sections and empty TOC sections
13482
13483 FIXME: Warn user? */
13484
13485 /* Look for a likely section. We probably won't even be
13486 using TOCstart. */
13487 for (s = obfd->sections; s != NULL; s = s->next)
13488 if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
13489 | SEC_EXCLUDE))
13490 == (SEC_ALLOC | SEC_SMALL_DATA))
13491 break;
13492 if (s == NULL)
13493 for (s = obfd->sections; s != NULL; s = s->next)
13494 if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
13495 == (SEC_ALLOC | SEC_SMALL_DATA))
13496 break;
13497 if (s == NULL)
13498 for (s = obfd->sections; s != NULL; s = s->next)
13499 if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
13500 == SEC_ALLOC)
13501 break;
13502 if (s == NULL)
13503 for (s = obfd->sections; s != NULL; s = s->next)
13504 if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
13505 break;
13506 }
13507
13508 TOCstart = 0;
13509 if (s != NULL)
13510 TOCstart = s->output_section->vma + s->output_offset;
13511
13512 /* Force alignment. */
13513 adjust = TOCstart & (TOC_BASE_ALIGN - 1);
13514 TOCstart -= adjust;
13515 _bfd_set_gp_value (obfd, TOCstart);
13516
13517 if (info != NULL && s != NULL)
13518 {
13519 struct ppc_link_hash_table *htab = ppc_hash_table (info);
13520
13521 if (htab != NULL)
13522 {
13523 if (htab->elf.hgot != NULL)
13524 {
13525 htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
13526 htab->elf.hgot->root.u.def.section = s;
13527 }
13528 }
13529 else
13530 {
13531 struct bfd_link_hash_entry *bh = NULL;
13532 _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
13533 s, TOC_BASE_OFF - adjust,
13534 NULL, FALSE, FALSE, &bh);
13535 }
13536 }
13537 return TOCstart;
13538 }
13539
13540 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
13541 write out any global entry stubs, and PLT relocations. */
13542
13543 static bfd_boolean
13544 build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
13545 {
13546 struct bfd_link_info *info;
13547 struct ppc_link_hash_table *htab;
13548 struct plt_entry *ent;
13549 asection *s;
13550
13551 if (h->root.type == bfd_link_hash_indirect)
13552 return TRUE;
13553
13554 info = inf;
13555 htab = ppc_hash_table (info);
13556 if (htab == NULL)
13557 return FALSE;
13558
13559 for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13560 if (ent->plt.offset != (bfd_vma) -1)
13561 {
13562 /* This symbol has an entry in the procedure linkage
13563 table. Set it up. */
13564 Elf_Internal_Rela rela;
13565 asection *plt, *relplt;
13566 bfd_byte *loc;
13567
13568 if (!htab->elf.dynamic_sections_created
13569 || h->dynindx == -1)
13570 {
13571 if (!(h->def_regular
13572 && (h->root.type == bfd_link_hash_defined
13573 || h->root.type == bfd_link_hash_defweak)))
13574 continue;
13575 if (h->type == STT_GNU_IFUNC)
13576 {
13577 plt = htab->elf.iplt;
13578 relplt = htab->elf.irelplt;
13579 htab->local_ifunc_resolver = 1;
13580 if (htab->opd_abi)
13581 rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13582 else
13583 rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13584 }
13585 else
13586 {
13587 plt = htab->pltlocal;
13588 if (bfd_link_pic (info))
13589 {
13590 relplt = htab->relpltlocal;
13591 if (htab->opd_abi)
13592 rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13593 else
13594 rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13595 }
13596 else
13597 relplt = NULL;
13598 }
13599 rela.r_addend = defined_sym_val (h) + ent->addend;
13600
13601 if (relplt == NULL)
13602 {
13603 loc = plt->contents + ent->plt.offset;
13604 bfd_put_64 (info->output_bfd, rela.r_addend, loc);
13605 if (htab->opd_abi)
13606 {
13607 bfd_vma toc = elf_gp (info->output_bfd);
13608 toc += htab->sec_info[h->root.u.def.section->id].toc_off;
13609 bfd_put_64 (info->output_bfd, toc, loc + 8);
13610 }
13611 }
13612 else
13613 {
13614 rela.r_offset = (plt->output_section->vma
13615 + plt->output_offset
13616 + ent->plt.offset);
13617 loc = relplt->contents + (relplt->reloc_count++
13618 * sizeof (Elf64_External_Rela));
13619 bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13620 }
13621 }
13622 else
13623 {
13624 rela.r_offset = (htab->elf.splt->output_section->vma
13625 + htab->elf.splt->output_offset
13626 + ent->plt.offset);
13627 rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
13628 rela.r_addend = ent->addend;
13629 loc = (htab->elf.srelplt->contents
13630 + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
13631 / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
13632 if (h->type == STT_GNU_IFUNC && is_static_defined (h))
13633 htab->maybe_local_ifunc_resolver = 1;
13634 bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13635 }
13636 }
13637
13638 if (!h->pointer_equality_needed)
13639 return TRUE;
13640
13641 if (h->def_regular)
13642 return TRUE;
13643
13644 s = htab->global_entry;
13645 if (s == NULL || s->size == 0)
13646 return TRUE;
13647
13648 for (ent = h->plt.plist; ent != NULL; ent = ent->next)
13649 if (ent->plt.offset != (bfd_vma) -1
13650 && ent->addend == 0)
13651 {
13652 bfd_byte *p;
13653 asection *plt;
13654 bfd_vma off;
13655
13656 p = s->contents + h->root.u.def.value;
13657 plt = htab->elf.splt;
13658 if (!htab->elf.dynamic_sections_created
13659 || h->dynindx == -1)
13660 {
13661 if (h->type == STT_GNU_IFUNC)
13662 plt = htab->elf.iplt;
13663 else
13664 plt = htab->pltlocal;
13665 }
13666 off = ent->plt.offset + plt->output_offset + plt->output_section->vma;
13667 off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
13668
13669 if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
13670 {
13671 info->callbacks->einfo
13672 (_("%P: linkage table error against `%pT'\n"),
13673 h->root.root.string);
13674 bfd_set_error (bfd_error_bad_value);
13675 htab->stub_error = TRUE;
13676 }
13677
13678 htab->stub_count[ppc_stub_global_entry - 1] += 1;
13679 if (htab->params->emit_stub_syms)
13680 {
13681 size_t len = strlen (h->root.root.string);
13682 char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
13683
13684 if (name == NULL)
13685 return FALSE;
13686
13687 sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
13688 h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
13689 if (h == NULL)
13690 return FALSE;
13691 if (h->root.type == bfd_link_hash_new)
13692 {
13693 h->root.type = bfd_link_hash_defined;
13694 h->root.u.def.section = s;
13695 h->root.u.def.value = p - s->contents;
13696 h->ref_regular = 1;
13697 h->def_regular = 1;
13698 h->ref_regular_nonweak = 1;
13699 h->forced_local = 1;
13700 h->non_elf = 0;
13701 h->root.linker_def = 1;
13702 }
13703 }
13704
13705 if (PPC_HA (off) != 0)
13706 {
13707 bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
13708 p += 4;
13709 }
13710 bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
13711 p += 4;
13712 bfd_put_32 (s->owner, MTCTR_R12, p);
13713 p += 4;
13714 bfd_put_32 (s->owner, BCTR, p);
13715 break;
13716 }
13717 return TRUE;
13718 }
13719
13720 /* Write PLT relocs for locals. */
13721
13722 static bfd_boolean
13723 write_plt_relocs_for_local_syms (struct bfd_link_info *info)
13724 {
13725 struct ppc_link_hash_table *htab = ppc_hash_table (info);
13726 bfd *ibfd;
13727
13728 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13729 {
13730 struct got_entry **lgot_ents, **end_lgot_ents;
13731 struct plt_entry **local_plt, **lplt, **end_local_plt;
13732 Elf_Internal_Shdr *symtab_hdr;
13733 bfd_size_type locsymcount;
13734 Elf_Internal_Sym *local_syms = NULL;
13735 struct plt_entry *ent;
13736
13737 if (!is_ppc64_elf (ibfd))
13738 continue;
13739
13740 lgot_ents = elf_local_got_ents (ibfd);
13741 if (!lgot_ents)
13742 continue;
13743
13744 symtab_hdr = &elf_symtab_hdr (ibfd);
13745 locsymcount = symtab_hdr->sh_info;
13746 end_lgot_ents = lgot_ents + locsymcount;
13747 local_plt = (struct plt_entry **) end_lgot_ents;
13748 end_local_plt = local_plt + locsymcount;
13749 for (lplt = local_plt; lplt < end_local_plt; ++lplt)
13750 for (ent = *lplt; ent != NULL; ent = ent->next)
13751 if (ent->plt.offset != (bfd_vma) -1)
13752 {
13753 Elf_Internal_Sym *sym;
13754 asection *sym_sec;
13755 asection *plt, *relplt;
13756 bfd_byte *loc;
13757 bfd_vma val;
13758
13759 if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
13760 lplt - local_plt, ibfd))
13761 {
13762 if (local_syms != NULL
13763 && symtab_hdr->contents != (unsigned char *) local_syms)
13764 free (local_syms);
13765 return FALSE;
13766 }
13767
13768 val = sym->st_value + ent->addend;
13769 if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
13770 val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
13771 if (sym_sec != NULL && sym_sec->output_section != NULL)
13772 val += sym_sec->output_offset + sym_sec->output_section->vma;
13773
13774 if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13775 {
13776 htab->local_ifunc_resolver = 1;
13777 plt = htab->elf.iplt;
13778 relplt = htab->elf.irelplt;
13779 }
13780 else
13781 {
13782 plt = htab->pltlocal;
13783 relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
13784 }
13785
13786 if (relplt == NULL)
13787 {
13788 loc = plt->contents + ent->plt.offset;
13789 bfd_put_64 (info->output_bfd, val, loc);
13790 if (htab->opd_abi)
13791 {
13792 bfd_vma toc = elf_gp (ibfd);
13793 bfd_put_64 (info->output_bfd, toc, loc + 8);
13794 }
13795 }
13796 else
13797 {
13798 Elf_Internal_Rela rela;
13799 rela.r_offset = (ent->plt.offset
13800 + plt->output_offset
13801 + plt->output_section->vma);
13802 if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13803 {
13804 if (htab->opd_abi)
13805 rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
13806 else
13807 rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13808 }
13809 else
13810 {
13811 if (htab->opd_abi)
13812 rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_SLOT);
13813 else
13814 rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13815 }
13816 rela.r_addend = val;
13817 loc = relplt->contents + (relplt->reloc_count++
13818 * sizeof (Elf64_External_Rela));
13819 bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
13820 }
13821 }
13822
13823 if (local_syms != NULL
13824 && symtab_hdr->contents != (unsigned char *) local_syms)
13825 {
13826 if (!info->keep_memory)
13827 free (local_syms);
13828 else
13829 symtab_hdr->contents = (unsigned char *) local_syms;
13830 }
13831 }
13832 return TRUE;
13833 }
13834
13835 /* Build all the stubs associated with the current output file.
13836 The stubs are kept in a hash table attached to the main linker
13837 hash table. This function is called via gldelf64ppc_finish. */
13838
13839 bfd_boolean
13840 ppc64_elf_build_stubs (struct bfd_link_info *info,
13841 char **stats)
13842 {
13843 struct ppc_link_hash_table *htab = ppc_hash_table (info);
13844 struct map_stub *group;
13845 asection *stub_sec;
13846 bfd_byte *p;
13847 int stub_sec_count = 0;
13848
13849 if (htab == NULL)
13850 return FALSE;
13851
13852 /* Allocate memory to hold the linker stubs. */
13853 for (group = htab->group; group != NULL; group = group->next)
13854 {
13855 group->eh_size = 0;
13856 group->lr_restore = 0;
13857 if ((stub_sec = group->stub_sec) != NULL
13858 && stub_sec->size != 0)
13859 {
13860 stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
13861 stub_sec->size);
13862 if (stub_sec->contents == NULL)
13863 return FALSE;
13864 stub_sec->size = 0;
13865 }
13866 }
13867
13868 if (htab->glink != NULL && htab->glink->size != 0)
13869 {
13870 unsigned int indx;
13871 bfd_vma plt0;
13872
13873 /* Build the .glink plt call stub. */
13874 if (htab->params->emit_stub_syms)
13875 {
13876 struct elf_link_hash_entry *h;
13877 h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
13878 TRUE, FALSE, FALSE);
13879 if (h == NULL)
13880 return FALSE;
13881 if (h->root.type == bfd_link_hash_new)
13882 {
13883 h->root.type = bfd_link_hash_defined;
13884 h->root.u.def.section = htab->glink;
13885 h->root.u.def.value = 8;
13886 h->ref_regular = 1;
13887 h->def_regular = 1;
13888 h->ref_regular_nonweak = 1;
13889 h->forced_local = 1;
13890 h->non_elf = 0;
13891 h->root.linker_def = 1;
13892 }
13893 }
13894 plt0 = (htab->elf.splt->output_section->vma
13895 + htab->elf.splt->output_offset
13896 - 16);
13897 if (info->emitrelocations)
13898 {
13899 Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
13900 if (r == NULL)
13901 return FALSE;
13902 r->r_offset = (htab->glink->output_offset
13903 + htab->glink->output_section->vma);
13904 r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
13905 r->r_addend = plt0;
13906 }
13907 p = htab->glink->contents;
13908 plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
13909 bfd_put_64 (htab->glink->owner, plt0, p);
13910 p += 8;
13911 if (htab->opd_abi)
13912 {
13913 bfd_put_32 (htab->glink->owner, MFLR_R12, p);
13914 p += 4;
13915 bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13916 p += 4;
13917 bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13918 p += 4;
13919 bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13920 p += 4;
13921 bfd_put_32 (htab->glink->owner, MTLR_R12, p);
13922 p += 4;
13923 bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13924 p += 4;
13925 bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13926 p += 4;
13927 bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
13928 p += 4;
13929 bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13930 p += 4;
13931 bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
13932 p += 4;
13933 }
13934 else
13935 {
13936 bfd_put_32 (htab->glink->owner, MFLR_R0, p);
13937 p += 4;
13938 bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13939 p += 4;
13940 bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13941 p += 4;
13942 bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
13943 p += 4;
13944 bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13945 p += 4;
13946 bfd_put_32 (htab->glink->owner, MTLR_R0, p);
13947 p += 4;
13948 bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
13949 p += 4;
13950 bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13951 p += 4;
13952 bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
13953 p += 4;
13954 bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13955 p += 4;
13956 bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
13957 p += 4;
13958 bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13959 p += 4;
13960 bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
13961 p += 4;
13962 }
13963 bfd_put_32 (htab->glink->owner, BCTR, p);
13964 p += 4;
13965 BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
13966
13967 /* Build the .glink lazy link call stubs. */
13968 indx = 0;
13969 while (p < htab->glink->contents + htab->glink->size)
13970 {
13971 if (htab->opd_abi)
13972 {
13973 if (indx < 0x8000)
13974 {
13975 bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
13976 p += 4;
13977 }
13978 else
13979 {
13980 bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
13981 p += 4;
13982 bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
13983 p);
13984 p += 4;
13985 }
13986 }
13987 bfd_put_32 (htab->glink->owner,
13988 B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
13989 indx++;
13990 p += 4;
13991 }
13992 }
13993
13994 /* Build .glink global entry stubs, and PLT relocs for globals. */
13995 elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
13996
13997 if (!write_plt_relocs_for_local_syms (info))
13998 return FALSE;
13999
14000 if (htab->brlt != NULL && htab->brlt->size != 0)
14001 {
14002 htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
14003 htab->brlt->size);
14004 if (htab->brlt->contents == NULL)
14005 return FALSE;
14006 }
14007 if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
14008 {
14009 htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
14010 htab->relbrlt->size);
14011 if (htab->relbrlt->contents == NULL)
14012 return FALSE;
14013 }
14014
14015 /* Build the stubs as directed by the stub hash table. */
14016 bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
14017
14018 for (group = htab->group; group != NULL; group = group->next)
14019 if (group->needs_save_res)
14020 group->stub_sec->size += htab->sfpr->size;
14021
14022 if (htab->relbrlt != NULL)
14023 htab->relbrlt->reloc_count = 0;
14024
14025 if (htab->params->plt_stub_align != 0)
14026 for (group = htab->group; group != NULL; group = group->next)
14027 if ((stub_sec = group->stub_sec) != NULL)
14028 {
14029 int align = abs (htab->params->plt_stub_align);
14030 stub_sec->size = (stub_sec->size + (1 << align) - 1) & -(1 << align);
14031 }
14032
14033 for (group = htab->group; group != NULL; group = group->next)
14034 if (group->needs_save_res)
14035 {
14036 stub_sec = group->stub_sec;
14037 memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
14038 htab->sfpr->contents, htab->sfpr->size);
14039 if (htab->params->emit_stub_syms)
14040 {
14041 unsigned int i;
14042
14043 for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
14044 if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
14045 return FALSE;
14046 }
14047 }
14048
14049 if (htab->glink_eh_frame != NULL
14050 && htab->glink_eh_frame->size != 0)
14051 {
14052 bfd_vma val;
14053 size_t align = 4;
14054
14055 p = htab->glink_eh_frame->contents;
14056 p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
14057
14058 for (group = htab->group; group != NULL; group = group->next)
14059 if (group->eh_size != 0)
14060 {
14061 /* Offset to stub section. */
14062 val = (group->stub_sec->output_section->vma
14063 + group->stub_sec->output_offset);
14064 val -= (htab->glink_eh_frame->output_section->vma
14065 + htab->glink_eh_frame->output_offset
14066 + (p + 8 - htab->glink_eh_frame->contents));
14067 if (val + 0x80000000 > 0xffffffff)
14068 {
14069 _bfd_error_handler
14070 (_("%s offset too large for .eh_frame sdata4 encoding"),
14071 group->stub_sec->name);
14072 return FALSE;
14073 }
14074 bfd_put_32 (htab->elf.dynobj, val, p + 8);
14075 p += (group->eh_size + 17 + 3) & -4;
14076 }
14077 if (htab->glink != NULL && htab->glink->size != 0)
14078 {
14079 /* Offset to .glink. */
14080 val = (htab->glink->output_section->vma
14081 + htab->glink->output_offset
14082 + 8);
14083 val -= (htab->glink_eh_frame->output_section->vma
14084 + htab->glink_eh_frame->output_offset
14085 + (p + 8 - htab->glink_eh_frame->contents));
14086 if (val + 0x80000000 > 0xffffffff)
14087 {
14088 _bfd_error_handler
14089 (_("%s offset too large for .eh_frame sdata4 encoding"),
14090 htab->glink->name);
14091 return FALSE;
14092 }
14093 bfd_put_32 (htab->elf.dynobj, val, p + 8);
14094 p += (24 + align - 1) & -align;
14095 }
14096 }
14097
14098 for (group = htab->group; group != NULL; group = group->next)
14099 if ((stub_sec = group->stub_sec) != NULL)
14100 {
14101 stub_sec_count += 1;
14102 if (stub_sec->rawsize != stub_sec->size
14103 && (htab->stub_iteration <= STUB_SHRINK_ITER
14104 || stub_sec->rawsize < stub_sec->size))
14105 break;
14106 }
14107
14108 if (group != NULL)
14109 {
14110 htab->stub_error = TRUE;
14111 _bfd_error_handler (_("stubs don't match calculated size"));
14112 }
14113
14114 if (htab->stub_error)
14115 return FALSE;
14116
14117 if (stats != NULL)
14118 {
14119 size_t len;
14120 *stats = bfd_malloc (500);
14121 if (*stats == NULL)
14122 return FALSE;
14123
14124 len = sprintf (*stats,
14125 ngettext ("linker stubs in %u group\n",
14126 "linker stubs in %u groups\n",
14127 stub_sec_count),
14128 stub_sec_count);
14129 sprintf (*stats + len, _(" branch %lu\n"
14130 " branch toc adj %lu\n"
14131 " branch notoc %lu\n"
14132 " branch both %lu\n"
14133 " long branch %lu\n"
14134 " long toc adj %lu\n"
14135 " long notoc %lu\n"
14136 " long both %lu\n"
14137 " plt call %lu\n"
14138 " plt call save %lu\n"
14139 " plt call notoc %lu\n"
14140 " plt call both %lu\n"
14141 " global entry %lu"),
14142 htab->stub_count[ppc_stub_long_branch - 1],
14143 htab->stub_count[ppc_stub_long_branch_r2off - 1],
14144 htab->stub_count[ppc_stub_long_branch_notoc - 1],
14145 htab->stub_count[ppc_stub_long_branch_both - 1],
14146 htab->stub_count[ppc_stub_plt_branch - 1],
14147 htab->stub_count[ppc_stub_plt_branch_r2off - 1],
14148 htab->stub_count[ppc_stub_plt_branch_notoc - 1],
14149 htab->stub_count[ppc_stub_plt_branch_both - 1],
14150 htab->stub_count[ppc_stub_plt_call - 1],
14151 htab->stub_count[ppc_stub_plt_call_r2save - 1],
14152 htab->stub_count[ppc_stub_plt_call_notoc - 1],
14153 htab->stub_count[ppc_stub_plt_call_both - 1],
14154 htab->stub_count[ppc_stub_global_entry - 1]);
14155 }
14156 return TRUE;
14157 }
14158
14159 /* What to do when ld finds relocations against symbols defined in
14160 discarded sections. */
14161
14162 static unsigned int
14163 ppc64_elf_action_discarded (asection *sec)
14164 {
14165 if (strcmp (".opd", sec->name) == 0)
14166 return 0;
14167
14168 if (strcmp (".toc", sec->name) == 0)
14169 return 0;
14170
14171 if (strcmp (".toc1", sec->name) == 0)
14172 return 0;
14173
14174 return _bfd_elf_default_action_discarded (sec);
14175 }
14176
14177 /* These are the dynamic relocations supported by glibc. */
14178
14179 static bfd_boolean
14180 ppc64_glibc_dynamic_reloc (enum elf_ppc64_reloc_type r_type)
14181 {
14182 switch (r_type)
14183 {
14184 case R_PPC64_RELATIVE:
14185 case R_PPC64_NONE:
14186 case R_PPC64_ADDR64:
14187 case R_PPC64_GLOB_DAT:
14188 case R_PPC64_IRELATIVE:
14189 case R_PPC64_JMP_IREL:
14190 case R_PPC64_JMP_SLOT:
14191 case R_PPC64_DTPMOD64:
14192 case R_PPC64_DTPREL64:
14193 case R_PPC64_TPREL64:
14194 case R_PPC64_TPREL16_LO_DS:
14195 case R_PPC64_TPREL16_DS:
14196 case R_PPC64_TPREL16:
14197 case R_PPC64_TPREL16_LO:
14198 case R_PPC64_TPREL16_HI:
14199 case R_PPC64_TPREL16_HIGH:
14200 case R_PPC64_TPREL16_HA:
14201 case R_PPC64_TPREL16_HIGHA:
14202 case R_PPC64_TPREL16_HIGHER:
14203 case R_PPC64_TPREL16_HIGHEST:
14204 case R_PPC64_TPREL16_HIGHERA:
14205 case R_PPC64_TPREL16_HIGHESTA:
14206 case R_PPC64_ADDR16_LO_DS:
14207 case R_PPC64_ADDR16_LO:
14208 case R_PPC64_ADDR16_HI:
14209 case R_PPC64_ADDR16_HIGH:
14210 case R_PPC64_ADDR16_HA:
14211 case R_PPC64_ADDR16_HIGHA:
14212 case R_PPC64_REL30:
14213 case R_PPC64_COPY:
14214 case R_PPC64_UADDR64:
14215 case R_PPC64_UADDR32:
14216 case R_PPC64_ADDR32:
14217 case R_PPC64_ADDR24:
14218 case R_PPC64_ADDR16:
14219 case R_PPC64_UADDR16:
14220 case R_PPC64_ADDR16_DS:
14221 case R_PPC64_ADDR16_HIGHER:
14222 case R_PPC64_ADDR16_HIGHEST:
14223 case R_PPC64_ADDR16_HIGHERA:
14224 case R_PPC64_ADDR16_HIGHESTA:
14225 case R_PPC64_ADDR14:
14226 case R_PPC64_ADDR14_BRTAKEN:
14227 case R_PPC64_ADDR14_BRNTAKEN:
14228 case R_PPC64_REL32:
14229 case R_PPC64_REL64:
14230 return TRUE;
14231
14232 default:
14233 return FALSE;
14234 }
14235 }
14236
14237 /* The RELOCATE_SECTION function is called by the ELF backend linker
14238 to handle the relocations for a section.
14239
14240 The relocs are always passed as Rela structures; if the section
14241 actually uses Rel structures, the r_addend field will always be
14242 zero.
14243
14244 This function is responsible for adjust the section contents as
14245 necessary, and (if using Rela relocs and generating a
14246 relocatable output file) adjusting the reloc addend as
14247 necessary.
14248
14249 This function does not have to worry about setting the reloc
14250 address or the reloc symbol index.
14251
14252 LOCAL_SYMS is a pointer to the swapped in local symbols.
14253
14254 LOCAL_SECTIONS is an array giving the section in the input file
14255 corresponding to the st_shndx field of each local symbol.
14256
14257 The global hash table entry for the global symbols can be found
14258 via elf_sym_hashes (input_bfd).
14259
14260 When generating relocatable output, this function must handle
14261 STB_LOCAL/STT_SECTION symbols specially. The output symbol is
14262 going to be the section symbol corresponding to the output
14263 section, which means that the addend must be adjusted
14264 accordingly. */
14265
14266 static bfd_boolean
14267 ppc64_elf_relocate_section (bfd *output_bfd,
14268 struct bfd_link_info *info,
14269 bfd *input_bfd,
14270 asection *input_section,
14271 bfd_byte *contents,
14272 Elf_Internal_Rela *relocs,
14273 Elf_Internal_Sym *local_syms,
14274 asection **local_sections)
14275 {
14276 struct ppc_link_hash_table *htab;
14277 Elf_Internal_Shdr *symtab_hdr;
14278 struct elf_link_hash_entry **sym_hashes;
14279 Elf_Internal_Rela *rel;
14280 Elf_Internal_Rela *wrel;
14281 Elf_Internal_Rela *relend;
14282 Elf_Internal_Rela outrel;
14283 bfd_byte *loc;
14284 struct got_entry **local_got_ents;
14285 bfd_vma TOCstart;
14286 bfd_boolean ret = TRUE;
14287 bfd_boolean is_opd;
14288 /* Assume 'at' branch hints. */
14289 bfd_boolean is_isa_v2 = TRUE;
14290 bfd_boolean warned_dynamic = FALSE;
14291 bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
14292
14293 /* Initialize howto table if needed. */
14294 if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
14295 ppc_howto_init ();
14296
14297 htab = ppc_hash_table (info);
14298 if (htab == NULL)
14299 return FALSE;
14300
14301 /* Don't relocate stub sections. */
14302 if (input_section->owner == htab->params->stub_bfd)
14303 return TRUE;
14304
14305 if (!is_ppc64_elf (input_bfd))
14306 {
14307 bfd_set_error (bfd_error_wrong_format);
14308 return FALSE;
14309 }
14310
14311 local_got_ents = elf_local_got_ents (input_bfd);
14312 TOCstart = elf_gp (output_bfd);
14313 symtab_hdr = &elf_symtab_hdr (input_bfd);
14314 sym_hashes = elf_sym_hashes (input_bfd);
14315 is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
14316
14317 rel = wrel = relocs;
14318 relend = relocs + input_section->reloc_count;
14319 for (; rel < relend; wrel++, rel++)
14320 {
14321 enum elf_ppc64_reloc_type r_type;
14322 bfd_vma addend;
14323 bfd_reloc_status_type r;
14324 Elf_Internal_Sym *sym;
14325 asection *sec;
14326 struct elf_link_hash_entry *h_elf;
14327 struct ppc_link_hash_entry *h;
14328 struct ppc_link_hash_entry *fdh;
14329 const char *sym_name;
14330 unsigned long r_symndx, toc_symndx;
14331 bfd_vma toc_addend;
14332 unsigned char tls_mask, tls_gd, tls_type;
14333 unsigned char sym_type;
14334 bfd_vma relocation;
14335 bfd_boolean unresolved_reloc, save_unresolved_reloc;
14336 bfd_boolean warned;
14337 enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
14338 unsigned int insn;
14339 unsigned int mask;
14340 struct ppc_stub_hash_entry *stub_entry;
14341 bfd_vma max_br_offset;
14342 bfd_vma from;
14343 Elf_Internal_Rela orig_rel;
14344 reloc_howto_type *howto;
14345 struct reloc_howto_struct alt_howto;
14346 uint64_t pinsn;
14347 bfd_vma offset;
14348
14349 again:
14350 orig_rel = *rel;
14351
14352 r_type = ELF64_R_TYPE (rel->r_info);
14353 r_symndx = ELF64_R_SYM (rel->r_info);
14354
14355 /* For old style R_PPC64_TOC relocs with a zero symbol, use the
14356 symbol of the previous ADDR64 reloc. The symbol gives us the
14357 proper TOC base to use. */
14358 if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
14359 && wrel != relocs
14360 && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
14361 && is_opd)
14362 r_symndx = ELF64_R_SYM (wrel[-1].r_info);
14363
14364 sym = NULL;
14365 sec = NULL;
14366 h_elf = NULL;
14367 sym_name = NULL;
14368 unresolved_reloc = FALSE;
14369 warned = FALSE;
14370
14371 if (r_symndx < symtab_hdr->sh_info)
14372 {
14373 /* It's a local symbol. */
14374 struct _opd_sec_data *opd;
14375
14376 sym = local_syms + r_symndx;
14377 sec = local_sections[r_symndx];
14378 sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
14379 sym_type = ELF64_ST_TYPE (sym->st_info);
14380 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
14381 opd = get_opd_info (sec);
14382 if (opd != NULL && opd->adjust != NULL)
14383 {
14384 long adjust = opd->adjust[OPD_NDX (sym->st_value
14385 + rel->r_addend)];
14386 if (adjust == -1)
14387 relocation = 0;
14388 else
14389 {
14390 /* If this is a relocation against the opd section sym
14391 and we have edited .opd, adjust the reloc addend so
14392 that ld -r and ld --emit-relocs output is correct.
14393 If it is a reloc against some other .opd symbol,
14394 then the symbol value will be adjusted later. */
14395 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
14396 rel->r_addend += adjust;
14397 else
14398 relocation += adjust;
14399 }
14400 }
14401 }
14402 else
14403 {
14404 bfd_boolean ignored;
14405
14406 RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
14407 r_symndx, symtab_hdr, sym_hashes,
14408 h_elf, sec, relocation,
14409 unresolved_reloc, warned, ignored);
14410 sym_name = h_elf->root.root.string;
14411 sym_type = h_elf->type;
14412 if (sec != NULL
14413 && sec->owner == output_bfd
14414 && strcmp (sec->name, ".opd") == 0)
14415 {
14416 /* This is a symbol defined in a linker script. All
14417 such are defined in output sections, even those
14418 defined by simple assignment from a symbol defined in
14419 an input section. Transfer the symbol to an
14420 appropriate input .opd section, so that a branch to
14421 this symbol will be mapped to the location specified
14422 by the opd entry. */
14423 struct bfd_link_order *lo;
14424 for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
14425 if (lo->type == bfd_indirect_link_order)
14426 {
14427 asection *isec = lo->u.indirect.section;
14428 if (h_elf->root.u.def.value >= isec->output_offset
14429 && h_elf->root.u.def.value < (isec->output_offset
14430 + isec->size))
14431 {
14432 h_elf->root.u.def.value -= isec->output_offset;
14433 h_elf->root.u.def.section = isec;
14434 sec = isec;
14435 break;
14436 }
14437 }
14438 }
14439 }
14440 h = ppc_elf_hash_entry (h_elf);
14441
14442 if (sec != NULL && discarded_section (sec))
14443 {
14444 _bfd_clear_contents (ppc64_elf_howto_table[r_type],
14445 input_bfd, input_section,
14446 contents, rel->r_offset);
14447 wrel->r_offset = rel->r_offset;
14448 wrel->r_info = 0;
14449 wrel->r_addend = 0;
14450
14451 /* For ld -r, remove relocations in debug sections against
14452 symbols defined in discarded sections. Not done for
14453 non-debug to preserve relocs in .eh_frame which the
14454 eh_frame editing code expects to be present. */
14455 if (bfd_link_relocatable (info)
14456 && (input_section->flags & SEC_DEBUGGING))
14457 wrel--;
14458
14459 continue;
14460 }
14461
14462 if (bfd_link_relocatable (info))
14463 goto copy_reloc;
14464
14465 if (h != NULL && &h->elf == htab->elf.hgot)
14466 {
14467 relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14468 sec = bfd_abs_section_ptr;
14469 unresolved_reloc = FALSE;
14470 }
14471
14472 /* TLS optimizations. Replace instruction sequences and relocs
14473 based on information we collected in tls_optimize. We edit
14474 RELOCS so that --emit-relocs will output something sensible
14475 for the final instruction stream. */
14476 tls_mask = 0;
14477 tls_gd = 0;
14478 toc_symndx = 0;
14479 if (h != NULL)
14480 tls_mask = h->tls_mask;
14481 else if (local_got_ents != NULL)
14482 {
14483 struct plt_entry **local_plt = (struct plt_entry **)
14484 (local_got_ents + symtab_hdr->sh_info);
14485 unsigned char *lgot_masks = (unsigned char *)
14486 (local_plt + symtab_hdr->sh_info);
14487 tls_mask = lgot_masks[r_symndx];
14488 }
14489 if (((tls_mask & TLS_TLS) == 0 || tls_mask == (TLS_TLS | TLS_MARK))
14490 && (r_type == R_PPC64_TLS
14491 || r_type == R_PPC64_TLSGD
14492 || r_type == R_PPC64_TLSLD))
14493 {
14494 /* Check for toc tls entries. */
14495 unsigned char *toc_tls;
14496
14497 if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14498 &local_syms, rel, input_bfd))
14499 return FALSE;
14500
14501 if (toc_tls)
14502 tls_mask = *toc_tls;
14503 }
14504
14505 /* Check that tls relocs are used with tls syms, and non-tls
14506 relocs are used with non-tls syms. */
14507 if (r_symndx != STN_UNDEF
14508 && r_type != R_PPC64_NONE
14509 && (h == NULL
14510 || h->elf.root.type == bfd_link_hash_defined
14511 || h->elf.root.type == bfd_link_hash_defweak)
14512 && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS))
14513 {
14514 if ((tls_mask & TLS_TLS) != 0
14515 && (r_type == R_PPC64_TLS
14516 || r_type == R_PPC64_TLSGD
14517 || r_type == R_PPC64_TLSLD))
14518 /* R_PPC64_TLS is OK against a symbol in the TOC. */
14519 ;
14520 else
14521 info->callbacks->einfo
14522 (!IS_PPC64_TLS_RELOC (r_type)
14523 /* xgettext:c-format */
14524 ? _("%H: %s used with TLS symbol `%pT'\n")
14525 /* xgettext:c-format */
14526 : _("%H: %s used with non-TLS symbol `%pT'\n"),
14527 input_bfd, input_section, rel->r_offset,
14528 ppc64_elf_howto_table[r_type]->name,
14529 sym_name);
14530 }
14531
14532 /* Ensure reloc mapping code below stays sane. */
14533 if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
14534 || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
14535 || (R_PPC64_GOT_TLSLD16 & 3) != (R_PPC64_GOT_TLSGD16 & 3)
14536 || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
14537 || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
14538 || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
14539 || (R_PPC64_GOT_TLSLD16 & 3) != (R_PPC64_GOT_TPREL16_DS & 3)
14540 || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
14541 || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
14542 || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
14543 abort ();
14544
14545 switch (r_type)
14546 {
14547 default:
14548 break;
14549
14550 case R_PPC64_LO_DS_OPT:
14551 insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
14552 if ((insn & (0x3fu << 26)) != 58u << 26)
14553 abort ();
14554 insn += (14u << 26) - (58u << 26);
14555 bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
14556 r_type = R_PPC64_TOC16_LO;
14557 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14558 break;
14559
14560 case R_PPC64_TOC16:
14561 case R_PPC64_TOC16_LO:
14562 case R_PPC64_TOC16_DS:
14563 case R_PPC64_TOC16_LO_DS:
14564 {
14565 /* Check for toc tls entries. */
14566 unsigned char *toc_tls;
14567 int retval;
14568
14569 retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
14570 &local_syms, rel, input_bfd);
14571 if (retval == 0)
14572 return FALSE;
14573
14574 if (toc_tls)
14575 {
14576 tls_mask = *toc_tls;
14577 if (r_type == R_PPC64_TOC16_DS
14578 || r_type == R_PPC64_TOC16_LO_DS)
14579 {
14580 if ((tls_mask & TLS_TLS) != 0
14581 && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
14582 goto toctprel;
14583 }
14584 else
14585 {
14586 /* If we found a GD reloc pair, then we might be
14587 doing a GD->IE transition. */
14588 if (retval == 2)
14589 {
14590 tls_gd = TLS_GDIE;
14591 if ((tls_mask & TLS_TLS) != 0
14592 && (tls_mask & TLS_GD) == 0)
14593 goto tls_ldgd_opt;
14594 }
14595 else if (retval == 3)
14596 {
14597 if ((tls_mask & TLS_TLS) != 0
14598 && (tls_mask & TLS_LD) == 0)
14599 goto tls_ldgd_opt;
14600 }
14601 }
14602 }
14603 }
14604 break;
14605
14606 case R_PPC64_GOT_TPREL16_HI:
14607 case R_PPC64_GOT_TPREL16_HA:
14608 if ((tls_mask & TLS_TLS) != 0
14609 && (tls_mask & TLS_TPREL) == 0)
14610 {
14611 rel->r_offset -= d_offset;
14612 bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14613 r_type = R_PPC64_NONE;
14614 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14615 }
14616 break;
14617
14618 case R_PPC64_GOT_TPREL16_DS:
14619 case R_PPC64_GOT_TPREL16_LO_DS:
14620 if ((tls_mask & TLS_TLS) != 0
14621 && (tls_mask & TLS_TPREL) == 0)
14622 {
14623 toctprel:
14624 insn = bfd_get_32 (input_bfd,
14625 contents + rel->r_offset - d_offset);
14626 insn &= 31 << 21;
14627 insn |= 0x3c0d0000; /* addis 0,13,0 */
14628 bfd_put_32 (input_bfd, insn,
14629 contents + rel->r_offset - d_offset);
14630 r_type = R_PPC64_TPREL16_HA;
14631 if (toc_symndx != 0)
14632 {
14633 rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14634 rel->r_addend = toc_addend;
14635 /* We changed the symbol. Start over in order to
14636 get h, sym, sec etc. right. */
14637 goto again;
14638 }
14639 else
14640 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14641 }
14642 break;
14643
14644 case R_PPC64_GOT_TPREL34:
14645 if ((tls_mask & TLS_TLS) != 0
14646 && (tls_mask & TLS_TPREL) == 0)
14647 {
14648 /* pld ra,sym@got@tprel@pcrel -> paddi ra,r13,sym@tprel */
14649 pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14650 pinsn <<= 32;
14651 pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14652 pinsn += ((2ULL << 56) + (-1ULL << 52)
14653 + (14ULL << 26) - (57ULL << 26) + (13ULL << 16));
14654 bfd_put_32 (input_bfd, pinsn >> 32,
14655 contents + rel->r_offset);
14656 bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14657 contents + rel->r_offset + 4);
14658 r_type = R_PPC64_TPREL34;
14659 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14660 }
14661 break;
14662
14663 case R_PPC64_TLS:
14664 if ((tls_mask & TLS_TLS) != 0
14665 && (tls_mask & TLS_TPREL) == 0)
14666 {
14667 insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
14668 insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
14669 if (insn == 0)
14670 break;
14671 if ((rel->r_offset & 3) == 0)
14672 {
14673 bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
14674 /* Was PPC64_TLS which sits on insn boundary, now
14675 PPC64_TPREL16_LO which is at low-order half-word. */
14676 rel->r_offset += d_offset;
14677 r_type = R_PPC64_TPREL16_LO;
14678 if (toc_symndx != 0)
14679 {
14680 rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
14681 rel->r_addend = toc_addend;
14682 /* We changed the symbol. Start over in order to
14683 get h, sym, sec etc. right. */
14684 goto again;
14685 }
14686 else
14687 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14688 }
14689 else if ((rel->r_offset & 3) == 1)
14690 {
14691 /* For pcrel IE to LE we already have the full
14692 offset and thus don't need an addi here. A nop
14693 or mr will do. */
14694 if ((insn & (0x3fu << 26)) == 14 << 26)
14695 {
14696 /* Extract regs from addi rt,ra,si. */
14697 unsigned int rt = (insn >> 21) & 0x1f;
14698 unsigned int ra = (insn >> 16) & 0x1f;
14699 if (rt == ra)
14700 insn = NOP;
14701 else
14702 {
14703 /* Build or ra,rs,rb with rb==rs, ie. mr ra,rs. */
14704 insn = (rt << 16) | (ra << 21) | (ra << 11);
14705 insn |= (31u << 26) | (444u << 1);
14706 }
14707 }
14708 bfd_put_32 (input_bfd, insn, contents + rel->r_offset - 1);
14709 }
14710 }
14711 break;
14712
14713 case R_PPC64_GOT_TLSGD16_HI:
14714 case R_PPC64_GOT_TLSGD16_HA:
14715 tls_gd = TLS_GDIE;
14716 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14717 goto tls_gdld_hi;
14718 break;
14719
14720 case R_PPC64_GOT_TLSLD16_HI:
14721 case R_PPC64_GOT_TLSLD16_HA:
14722 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14723 {
14724 tls_gdld_hi:
14725 if ((tls_mask & tls_gd) != 0)
14726 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
14727 + R_PPC64_GOT_TPREL16_DS);
14728 else
14729 {
14730 rel->r_offset -= d_offset;
14731 bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14732 r_type = R_PPC64_NONE;
14733 }
14734 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14735 }
14736 break;
14737
14738 case R_PPC64_GOT_TLSGD16:
14739 case R_PPC64_GOT_TLSGD16_LO:
14740 tls_gd = TLS_GDIE;
14741 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14742 goto tls_ldgd_opt;
14743 break;
14744
14745 case R_PPC64_GOT_TLSLD16:
14746 case R_PPC64_GOT_TLSLD16_LO:
14747 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14748 {
14749 unsigned int insn1, insn2;
14750
14751 tls_ldgd_opt:
14752 offset = (bfd_vma) -1;
14753 /* If not using the newer R_PPC64_TLSGD/LD to mark
14754 __tls_get_addr calls, we must trust that the call
14755 stays with its arg setup insns, ie. that the next
14756 reloc is the __tls_get_addr call associated with
14757 the current reloc. Edit both insns. */
14758 if (input_section->nomark_tls_get_addr
14759 && rel + 1 < relend
14760 && branch_reloc_hash_match (input_bfd, rel + 1,
14761 htab->tls_get_addr,
14762 htab->tls_get_addr_fd))
14763 offset = rel[1].r_offset;
14764 /* We read the low GOT_TLS (or TOC16) insn because we
14765 need to keep the destination reg. It may be
14766 something other than the usual r3, and moved to r3
14767 before the call by intervening code. */
14768 insn1 = bfd_get_32 (input_bfd,
14769 contents + rel->r_offset - d_offset);
14770 if ((tls_mask & tls_gd) != 0)
14771 {
14772 /* IE */
14773 insn1 &= (0x1f << 21) | (0x1f << 16);
14774 insn1 |= 58u << 26; /* ld */
14775 insn2 = 0x7c636a14; /* add 3,3,13 */
14776 if (offset != (bfd_vma) -1)
14777 rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14778 if (r_type == R_PPC64_TOC16
14779 || r_type == R_PPC64_TOC16_LO)
14780 r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
14781 else
14782 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 1)) & 1)
14783 + R_PPC64_GOT_TPREL16_DS);
14784 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14785 }
14786 else
14787 {
14788 /* LE */
14789 insn1 &= 0x1f << 21;
14790 insn1 |= 0x3c0d0000; /* addis r,13,0 */
14791 insn2 = 0x38630000; /* addi 3,3,0 */
14792 if (tls_gd == 0)
14793 {
14794 /* Was an LD reloc. */
14795 r_symndx = STN_UNDEF;
14796 rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14797 }
14798 else if (toc_symndx != 0)
14799 {
14800 r_symndx = toc_symndx;
14801 rel->r_addend = toc_addend;
14802 }
14803 r_type = R_PPC64_TPREL16_HA;
14804 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14805 if (offset != (bfd_vma) -1)
14806 {
14807 rel[1].r_info = ELF64_R_INFO (r_symndx,
14808 R_PPC64_TPREL16_LO);
14809 rel[1].r_offset = offset + d_offset;
14810 rel[1].r_addend = rel->r_addend;
14811 }
14812 }
14813 bfd_put_32 (input_bfd, insn1,
14814 contents + rel->r_offset - d_offset);
14815 if (offset != (bfd_vma) -1)
14816 {
14817 bfd_put_32 (input_bfd, insn2, contents + offset);
14818 if (offset + 8 <= input_section->size)
14819 {
14820 insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
14821 if (insn2 == LD_R2_0R1 + STK_TOC (htab))
14822 bfd_put_32 (input_bfd, NOP, contents + offset + 4);
14823 }
14824 }
14825 if ((tls_mask & tls_gd) == 0
14826 && (tls_gd == 0 || toc_symndx != 0))
14827 {
14828 /* We changed the symbol. Start over in order
14829 to get h, sym, sec etc. right. */
14830 goto again;
14831 }
14832 }
14833 break;
14834
14835 case R_PPC64_GOT_TLSGD34:
14836 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
14837 {
14838 pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14839 pinsn <<= 32;
14840 pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14841 if ((tls_mask & TLS_GDIE) != 0)
14842 {
14843 /* IE, pla -> pld */
14844 pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
14845 r_type = R_PPC64_GOT_TPREL34;
14846 }
14847 else
14848 {
14849 /* LE, pla pcrel -> paddi r13 */
14850 pinsn += (-1ULL << 52) + (13ULL << 16);
14851 r_type = R_PPC64_TPREL34;
14852 }
14853 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14854 bfd_put_32 (input_bfd, pinsn >> 32,
14855 contents + rel->r_offset);
14856 bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14857 contents + rel->r_offset + 4);
14858 }
14859 break;
14860
14861 case R_PPC64_GOT_TLSLD34:
14862 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
14863 {
14864 pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14865 pinsn <<= 32;
14866 pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14867 pinsn += (-1ULL << 52) + (13ULL << 16);
14868 bfd_put_32 (input_bfd, pinsn >> 32,
14869 contents + rel->r_offset);
14870 bfd_put_32 (input_bfd, pinsn & 0xffffffff,
14871 contents + rel->r_offset + 4);
14872 rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14873 r_symndx = STN_UNDEF;
14874 r_type = R_PPC64_TPREL34;
14875 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14876 goto again;
14877 }
14878 break;
14879
14880 case R_PPC64_TLSGD:
14881 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
14882 && rel + 1 < relend)
14883 {
14884 unsigned int insn2;
14885 enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14886
14887 offset = rel->r_offset;
14888 if (is_plt_seq_reloc (r_type1))
14889 {
14890 bfd_put_32 (output_bfd, NOP, contents + offset);
14891 if (r_type1 == R_PPC64_PLT_PCREL34
14892 || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14893 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14894 rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14895 break;
14896 }
14897
14898 if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14899 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14900
14901 if ((tls_mask & TLS_GDIE) != 0)
14902 {
14903 /* IE */
14904 r_type = R_PPC64_NONE;
14905 insn2 = 0x7c636a14; /* add 3,3,13 */
14906 }
14907 else
14908 {
14909 /* LE */
14910 if (toc_symndx != 0)
14911 {
14912 r_symndx = toc_symndx;
14913 rel->r_addend = toc_addend;
14914 }
14915 if (r_type1 == R_PPC64_REL24_NOTOC
14916 || r_type1 == R_PPC64_PLTCALL_NOTOC)
14917 {
14918 r_type = R_PPC64_NONE;
14919 insn2 = NOP;
14920 }
14921 else
14922 {
14923 rel->r_offset = offset + d_offset;
14924 r_type = R_PPC64_TPREL16_LO;
14925 insn2 = 0x38630000; /* addi 3,3,0 */
14926 }
14927 }
14928 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14929 /* Zap the reloc on the _tls_get_addr call too. */
14930 BFD_ASSERT (offset == rel[1].r_offset);
14931 rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14932 bfd_put_32 (input_bfd, insn2, contents + offset);
14933 if ((tls_mask & TLS_GDIE) == 0
14934 && toc_symndx != 0
14935 && r_type != R_PPC64_NONE)
14936 goto again;
14937 }
14938 break;
14939
14940 case R_PPC64_TLSLD:
14941 if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
14942 && rel + 1 < relend)
14943 {
14944 unsigned int insn2;
14945 enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
14946
14947 offset = rel->r_offset;
14948 if (is_plt_seq_reloc (r_type1))
14949 {
14950 bfd_put_32 (output_bfd, NOP, contents + offset);
14951 if (r_type1 == R_PPC64_PLT_PCREL34
14952 || r_type1 == R_PPC64_PLT_PCREL34_NOTOC)
14953 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14954 rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14955 break;
14956 }
14957
14958 if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
14959 bfd_put_32 (output_bfd, NOP, contents + offset + 4);
14960
14961 if (r_type1 == R_PPC64_REL24_NOTOC
14962 || r_type1 == R_PPC64_PLTCALL_NOTOC)
14963 {
14964 r_type = R_PPC64_NONE;
14965 insn2 = NOP;
14966 }
14967 else
14968 {
14969 rel->r_offset = offset + d_offset;
14970 r_symndx = STN_UNDEF;
14971 r_type = R_PPC64_TPREL16_LO;
14972 rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
14973 insn2 = 0x38630000; /* addi 3,3,0 */
14974 }
14975 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14976 /* Zap the reloc on the _tls_get_addr call too. */
14977 BFD_ASSERT (offset == rel[1].r_offset);
14978 rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
14979 bfd_put_32 (input_bfd, insn2, contents + offset);
14980 if (r_type != R_PPC64_NONE)
14981 goto again;
14982 }
14983 break;
14984
14985 case R_PPC64_DTPMOD64:
14986 if (rel + 1 < relend
14987 && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
14988 && rel[1].r_offset == rel->r_offset + 8)
14989 {
14990 if ((tls_mask & TLS_GD) == 0)
14991 {
14992 rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
14993 if ((tls_mask & TLS_GDIE) != 0)
14994 r_type = R_PPC64_TPREL64;
14995 else
14996 {
14997 bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
14998 r_type = R_PPC64_NONE;
14999 }
15000 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15001 }
15002 }
15003 else
15004 {
15005 if ((tls_mask & TLS_LD) == 0)
15006 {
15007 bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
15008 r_type = R_PPC64_NONE;
15009 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15010 }
15011 }
15012 break;
15013
15014 case R_PPC64_TPREL64:
15015 if ((tls_mask & TLS_TPREL) == 0)
15016 {
15017 r_type = R_PPC64_NONE;
15018 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15019 }
15020 break;
15021
15022 case R_PPC64_ENTRY:
15023 relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
15024 if (!bfd_link_pic (info)
15025 && !info->traditional_format
15026 && relocation + 0x80008000 <= 0xffffffff)
15027 {
15028 unsigned int insn1, insn2;
15029
15030 insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15031 insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15032 if ((insn1 & ~0xfffc) == LD_R2_0R12
15033 && insn2 == ADD_R2_R2_R12)
15034 {
15035 bfd_put_32 (input_bfd,
15036 LIS_R2 + PPC_HA (relocation),
15037 contents + rel->r_offset);
15038 bfd_put_32 (input_bfd,
15039 ADDI_R2_R2 + PPC_LO (relocation),
15040 contents + rel->r_offset + 4);
15041 }
15042 }
15043 else
15044 {
15045 relocation -= (rel->r_offset
15046 + input_section->output_offset
15047 + input_section->output_section->vma);
15048 if (relocation + 0x80008000 <= 0xffffffff)
15049 {
15050 unsigned int insn1, insn2;
15051
15052 insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
15053 insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
15054 if ((insn1 & ~0xfffc) == LD_R2_0R12
15055 && insn2 == ADD_R2_R2_R12)
15056 {
15057 bfd_put_32 (input_bfd,
15058 ADDIS_R2_R12 + PPC_HA (relocation),
15059 contents + rel->r_offset);
15060 bfd_put_32 (input_bfd,
15061 ADDI_R2_R2 + PPC_LO (relocation),
15062 contents + rel->r_offset + 4);
15063 }
15064 }
15065 }
15066 break;
15067
15068 case R_PPC64_REL16_HA:
15069 /* If we are generating a non-PIC executable, edit
15070 . 0: addis 2,12,.TOC.-0b@ha
15071 . addi 2,2,.TOC.-0b@l
15072 used by ELFv2 global entry points to set up r2, to
15073 . lis 2,.TOC.@ha
15074 . addi 2,2,.TOC.@l
15075 if .TOC. is in range. */
15076 if (!bfd_link_pic (info)
15077 && !info->traditional_format
15078 && !htab->opd_abi
15079 && rel->r_addend == d_offset
15080 && h != NULL && &h->elf == htab->elf.hgot
15081 && rel + 1 < relend
15082 && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
15083 && rel[1].r_offset == rel->r_offset + 4
15084 && rel[1].r_addend == rel->r_addend + 4
15085 && relocation + 0x80008000 <= 0xffffffff)
15086 {
15087 unsigned int insn1, insn2;
15088 offset = rel->r_offset - d_offset;
15089 insn1 = bfd_get_32 (input_bfd, contents + offset);
15090 insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
15091 if ((insn1 & 0xffff0000) == ADDIS_R2_R12
15092 && (insn2 & 0xffff0000) == ADDI_R2_R2)
15093 {
15094 r_type = R_PPC64_ADDR16_HA;
15095 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15096 rel->r_addend -= d_offset;
15097 rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
15098 rel[1].r_addend -= d_offset + 4;
15099 bfd_put_32 (input_bfd, LIS_R2, contents + offset);
15100 }
15101 }
15102 break;
15103 }
15104
15105 /* Handle other relocations that tweak non-addend part of insn. */
15106 insn = 0;
15107 max_br_offset = 1 << 25;
15108 addend = rel->r_addend;
15109 reloc_dest = DEST_NORMAL;
15110 switch (r_type)
15111 {
15112 default:
15113 break;
15114
15115 case R_PPC64_TOCSAVE:
15116 if (relocation + addend == (rel->r_offset
15117 + input_section->output_offset
15118 + input_section->output_section->vma)
15119 && tocsave_find (htab, NO_INSERT,
15120 &local_syms, rel, input_bfd))
15121 {
15122 insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15123 if (insn == NOP
15124 || insn == CROR_151515 || insn == CROR_313131)
15125 bfd_put_32 (input_bfd,
15126 STD_R2_0R1 + STK_TOC (htab),
15127 contents + rel->r_offset);
15128 }
15129 break;
15130
15131 /* Branch taken prediction relocations. */
15132 case R_PPC64_ADDR14_BRTAKEN:
15133 case R_PPC64_REL14_BRTAKEN:
15134 insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field. */
15135 /* Fall through. */
15136
15137 /* Branch not taken prediction relocations. */
15138 case R_PPC64_ADDR14_BRNTAKEN:
15139 case R_PPC64_REL14_BRNTAKEN:
15140 insn |= bfd_get_32 (input_bfd,
15141 contents + rel->r_offset) & ~(0x01 << 21);
15142 /* Fall through. */
15143
15144 case R_PPC64_REL14:
15145 max_br_offset = 1 << 15;
15146 /* Fall through. */
15147
15148 case R_PPC64_REL24:
15149 case R_PPC64_REL24_NOTOC:
15150 case R_PPC64_PLTCALL:
15151 case R_PPC64_PLTCALL_NOTOC:
15152 /* Calls to functions with a different TOC, such as calls to
15153 shared objects, need to alter the TOC pointer. This is
15154 done using a linkage stub. A REL24 branching to these
15155 linkage stubs needs to be followed by a nop, as the nop
15156 will be replaced with an instruction to restore the TOC
15157 base pointer. */
15158 fdh = h;
15159 if (h != NULL
15160 && h->oh != NULL
15161 && h->oh->is_func_descriptor)
15162 fdh = ppc_follow_link (h->oh);
15163 stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
15164 htab);
15165 if ((r_type == R_PPC64_PLTCALL
15166 || r_type == R_PPC64_PLTCALL_NOTOC)
15167 && stub_entry != NULL
15168 && stub_entry->stub_type >= ppc_stub_plt_call
15169 && stub_entry->stub_type <= ppc_stub_plt_call_both)
15170 stub_entry = NULL;
15171
15172 if (stub_entry != NULL
15173 && ((stub_entry->stub_type >= ppc_stub_plt_call
15174 && stub_entry->stub_type <= ppc_stub_plt_call_both)
15175 || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15176 || stub_entry->stub_type == ppc_stub_plt_branch_both
15177 || stub_entry->stub_type == ppc_stub_long_branch_r2off
15178 || stub_entry->stub_type == ppc_stub_long_branch_both))
15179 {
15180 bfd_boolean can_plt_call = FALSE;
15181
15182 if (stub_entry->stub_type == ppc_stub_plt_call
15183 && !htab->opd_abi
15184 && htab->params->plt_localentry0 != 0
15185 && is_elfv2_localentry0 (&h->elf))
15186 {
15187 /* The function doesn't use or change r2. */
15188 can_plt_call = TRUE;
15189 }
15190 else if (r_type == R_PPC64_REL24_NOTOC)
15191 {
15192 /* NOTOC calls don't need to restore r2. */
15193 can_plt_call = TRUE;
15194 }
15195
15196 /* All of these stubs may modify r2, so there must be a
15197 branch and link followed by a nop. The nop is
15198 replaced by an insn to restore r2. */
15199 else if (rel->r_offset + 8 <= input_section->size)
15200 {
15201 unsigned long br;
15202
15203 br = bfd_get_32 (input_bfd,
15204 contents + rel->r_offset);
15205 if ((br & 1) != 0)
15206 {
15207 unsigned long nop;
15208
15209 nop = bfd_get_32 (input_bfd,
15210 contents + rel->r_offset + 4);
15211 if (nop == LD_R2_0R1 + STK_TOC (htab))
15212 can_plt_call = TRUE;
15213 else if (nop == NOP
15214 || nop == CROR_151515
15215 || nop == CROR_313131)
15216 {
15217 if (h != NULL
15218 && is_tls_get_addr (&h->elf, htab)
15219 && htab->params->tls_get_addr_opt)
15220 {
15221 /* Special stub used, leave nop alone. */
15222 }
15223 else
15224 bfd_put_32 (input_bfd,
15225 LD_R2_0R1 + STK_TOC (htab),
15226 contents + rel->r_offset + 4);
15227 can_plt_call = TRUE;
15228 }
15229 }
15230 }
15231
15232 if (!can_plt_call && h != NULL)
15233 {
15234 const char *name = h->elf.root.root.string;
15235
15236 if (*name == '.')
15237 ++name;
15238
15239 if (strncmp (name, "__libc_start_main", 17) == 0
15240 && (name[17] == 0 || name[17] == '@'))
15241 {
15242 /* Allow crt1 branch to go via a toc adjusting
15243 stub. Other calls that never return could do
15244 the same, if we could detect such. */
15245 can_plt_call = TRUE;
15246 }
15247 }
15248
15249 if (!can_plt_call)
15250 {
15251 /* g++ as of 20130507 emits self-calls without a
15252 following nop. This is arguably wrong since we
15253 have conflicting information. On the one hand a
15254 global symbol and on the other a local call
15255 sequence, but don't error for this special case.
15256 It isn't possible to cheaply verify we have
15257 exactly such a call. Allow all calls to the same
15258 section. */
15259 asection *code_sec = sec;
15260
15261 if (get_opd_info (sec) != NULL)
15262 {
15263 bfd_vma off = (relocation + addend
15264 - sec->output_section->vma
15265 - sec->output_offset);
15266
15267 opd_entry_value (sec, off, &code_sec, NULL, FALSE);
15268 }
15269 if (code_sec == input_section)
15270 can_plt_call = TRUE;
15271 }
15272
15273 if (!can_plt_call)
15274 {
15275 if (stub_entry->stub_type >= ppc_stub_plt_call
15276 && stub_entry->stub_type <= ppc_stub_plt_call_both)
15277 info->callbacks->einfo
15278 /* xgettext:c-format */
15279 (_("%H: call to `%pT' lacks nop, can't restore toc; "
15280 "(plt call stub)\n"),
15281 input_bfd, input_section, rel->r_offset, sym_name);
15282 else
15283 info->callbacks->einfo
15284 /* xgettext:c-format */
15285 (_("%H: call to `%pT' lacks nop, can't restore toc; "
15286 "(toc save/adjust stub)\n"),
15287 input_bfd, input_section, rel->r_offset, sym_name);
15288
15289 bfd_set_error (bfd_error_bad_value);
15290 ret = FALSE;
15291 }
15292
15293 if (can_plt_call
15294 && stub_entry->stub_type >= ppc_stub_plt_call
15295 && stub_entry->stub_type <= ppc_stub_plt_call_both)
15296 unresolved_reloc = FALSE;
15297 }
15298
15299 if ((stub_entry == NULL
15300 || stub_entry->stub_type == ppc_stub_long_branch
15301 || stub_entry->stub_type == ppc_stub_plt_branch)
15302 && get_opd_info (sec) != NULL)
15303 {
15304 /* The branch destination is the value of the opd entry. */
15305 bfd_vma off = (relocation + addend
15306 - sec->output_section->vma
15307 - sec->output_offset);
15308 bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
15309 if (dest != (bfd_vma) -1)
15310 {
15311 relocation = dest;
15312 addend = 0;
15313 reloc_dest = DEST_OPD;
15314 }
15315 }
15316
15317 /* If the branch is out of reach we ought to have a long
15318 branch stub. */
15319 from = (rel->r_offset
15320 + input_section->output_offset
15321 + input_section->output_section->vma);
15322
15323 relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
15324 ? fdh->elf.other
15325 : sym->st_other);
15326
15327 if (stub_entry != NULL
15328 && (stub_entry->stub_type == ppc_stub_long_branch
15329 || stub_entry->stub_type == ppc_stub_plt_branch)
15330 && (r_type == R_PPC64_ADDR14_BRTAKEN
15331 || r_type == R_PPC64_ADDR14_BRNTAKEN
15332 || (relocation + addend - from + max_br_offset
15333 < 2 * max_br_offset)))
15334 /* Don't use the stub if this branch is in range. */
15335 stub_entry = NULL;
15336
15337 if (stub_entry != NULL
15338 && (stub_entry->stub_type == ppc_stub_long_branch_notoc
15339 || stub_entry->stub_type == ppc_stub_long_branch_both
15340 || stub_entry->stub_type == ppc_stub_plt_branch_notoc
15341 || stub_entry->stub_type == ppc_stub_plt_branch_both)
15342 && (r_type != R_PPC64_REL24_NOTOC
15343 || ((fdh ? fdh->elf.other : sym->st_other)
15344 & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
15345 && (relocation + addend - from + max_br_offset
15346 < 2 * max_br_offset))
15347 stub_entry = NULL;
15348
15349 if (stub_entry != NULL
15350 && (stub_entry->stub_type == ppc_stub_long_branch_r2off
15351 || stub_entry->stub_type == ppc_stub_long_branch_both
15352 || stub_entry->stub_type == ppc_stub_plt_branch_r2off
15353 || stub_entry->stub_type == ppc_stub_plt_branch_both)
15354 && r_type == R_PPC64_REL24_NOTOC
15355 && (relocation + addend - from + max_br_offset
15356 < 2 * max_br_offset))
15357 stub_entry = NULL;
15358
15359 if (stub_entry != NULL)
15360 {
15361 /* Munge up the value and addend so that we call the stub
15362 rather than the procedure directly. */
15363 asection *stub_sec = stub_entry->group->stub_sec;
15364
15365 if (stub_entry->stub_type == ppc_stub_save_res)
15366 relocation += (stub_sec->output_offset
15367 + stub_sec->output_section->vma
15368 + stub_sec->size - htab->sfpr->size
15369 - htab->sfpr->output_offset
15370 - htab->sfpr->output_section->vma);
15371 else
15372 relocation = (stub_entry->stub_offset
15373 + stub_sec->output_offset
15374 + stub_sec->output_section->vma);
15375 addend = 0;
15376 reloc_dest = DEST_STUB;
15377
15378 if (((stub_entry->stub_type == ppc_stub_plt_call
15379 && ALWAYS_EMIT_R2SAVE)
15380 || stub_entry->stub_type == ppc_stub_plt_call_r2save
15381 || stub_entry->stub_type == ppc_stub_plt_call_both)
15382 && !(h != NULL
15383 && is_tls_get_addr (&h->elf, htab)
15384 && htab->params->tls_get_addr_opt)
15385 && rel + 1 < relend
15386 && rel[1].r_offset == rel->r_offset + 4
15387 && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
15388 relocation += 4;
15389 else if ((stub_entry->stub_type == ppc_stub_long_branch_both
15390 || stub_entry->stub_type == ppc_stub_plt_branch_both
15391 || stub_entry->stub_type == ppc_stub_plt_call_both)
15392 && r_type == R_PPC64_REL24_NOTOC)
15393 relocation += 4;
15394
15395 if (r_type == R_PPC64_REL24_NOTOC
15396 && (stub_entry->stub_type == ppc_stub_plt_call_notoc
15397 || stub_entry->stub_type == ppc_stub_plt_call_both))
15398 htab->notoc_plt = 1;
15399 }
15400
15401 if (insn != 0)
15402 {
15403 if (is_isa_v2)
15404 {
15405 /* Set 'a' bit. This is 0b00010 in BO field for branch
15406 on CR(BI) insns (BO == 001at or 011at), and 0b01000
15407 for branch on CTR insns (BO == 1a00t or 1a01t). */
15408 if ((insn & (0x14 << 21)) == (0x04 << 21))
15409 insn |= 0x02 << 21;
15410 else if ((insn & (0x14 << 21)) == (0x10 << 21))
15411 insn |= 0x08 << 21;
15412 else
15413 break;
15414 }
15415 else
15416 {
15417 /* Invert 'y' bit if not the default. */
15418 if ((bfd_signed_vma) (relocation + addend - from) < 0)
15419 insn ^= 0x01 << 21;
15420 }
15421
15422 bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15423 }
15424
15425 /* NOP out calls to undefined weak functions.
15426 We can thus call a weak function without first
15427 checking whether the function is defined. */
15428 else if (h != NULL
15429 && h->elf.root.type == bfd_link_hash_undefweak
15430 && h->elf.dynindx == -1
15431 && (r_type == R_PPC64_REL24
15432 || r_type == R_PPC64_REL24_NOTOC)
15433 && relocation == 0
15434 && addend == 0)
15435 {
15436 bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
15437 goto copy_reloc;
15438 }
15439 break;
15440
15441 case R_PPC64_GOT16_DS:
15442 from = TOCstart + htab->sec_info[input_section->id].toc_off;
15443 if (relocation + addend - from + 0x8000 < 0x10000
15444 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15445 {
15446 insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15447 if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15448 {
15449 insn += (14u << 26) - (58u << 26);
15450 bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15451 r_type = R_PPC64_TOC16;
15452 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15453 }
15454 }
15455 break;
15456
15457 case R_PPC64_GOT16_LO_DS:
15458 case R_PPC64_GOT16_HA:
15459 from = TOCstart + htab->sec_info[input_section->id].toc_off;
15460 if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
15461 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15462 {
15463 insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15464 if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
15465 {
15466 insn += (14u << 26) - (58u << 26);
15467 bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
15468 r_type = R_PPC64_TOC16_LO;
15469 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15470 }
15471 else if ((insn & (0x3fu << 26)) == 15u << 26 /* addis */)
15472 {
15473 r_type = R_PPC64_TOC16_HA;
15474 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15475 }
15476 }
15477 break;
15478
15479 case R_PPC64_GOT_PCREL34:
15480 from = (rel->r_offset
15481 + input_section->output_section->vma
15482 + input_section->output_offset);
15483 if (relocation - from + (1ULL << 33) < 1ULL << 34
15484 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15485 {
15486 offset = rel->r_offset;
15487 pinsn = bfd_get_32 (input_bfd, contents + offset);
15488 pinsn <<= 32;
15489 pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15490 if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15491 == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
15492 {
15493 /* Replace with paddi. */
15494 pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
15495 r_type = R_PPC64_PCREL34;
15496 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
15497 bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
15498 bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
15499 goto pcrelopt;
15500 }
15501 }
15502 break;
15503
15504 case R_PPC64_PCREL34:
15505 if (SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15506 {
15507 offset = rel->r_offset;
15508 pinsn = bfd_get_32 (input_bfd, contents + offset);
15509 pinsn <<= 32;
15510 pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
15511 if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
15512 == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
15513 | (14ULL << 26) /* paddi */))
15514 {
15515 pcrelopt:
15516 if (rel + 1 < relend
15517 && rel[1].r_offset == offset
15518 && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT))
15519 {
15520 bfd_vma off2 = rel[1].r_addend;
15521 if (off2 == 0)
15522 /* zero means next insn. */
15523 off2 = 8;
15524 off2 += offset;
15525 if (off2 + 4 <= input_section->size)
15526 {
15527 uint64_t pinsn2;
15528 bfd_signed_vma addend_off;
15529 pinsn2 = bfd_get_32 (input_bfd, contents + off2);
15530 pinsn2 <<= 32;
15531 if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15532 {
15533 if (off2 + 8 > input_section->size)
15534 break;
15535 pinsn2 |= bfd_get_32 (input_bfd,
15536 contents + off2 + 4);
15537 }
15538 if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
15539 {
15540 addend += addend_off;
15541 rel->r_addend = addend;
15542 bfd_put_32 (input_bfd, pinsn >> 32,
15543 contents + offset);
15544 bfd_put_32 (input_bfd, pinsn,
15545 contents + offset + 4);
15546 bfd_put_32 (input_bfd, pinsn2 >> 32,
15547 contents + off2);
15548 if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
15549 bfd_put_32 (input_bfd, pinsn2,
15550 contents + off2 + 4);
15551 }
15552 }
15553 }
15554 }
15555 }
15556 break;
15557 }
15558
15559 tls_type = 0;
15560 save_unresolved_reloc = unresolved_reloc;
15561 switch (r_type)
15562 {
15563 default:
15564 /* xgettext:c-format */
15565 _bfd_error_handler (_("%pB: %s unsupported"),
15566 input_bfd, ppc64_elf_howto_table[r_type]->name);
15567
15568 bfd_set_error (bfd_error_bad_value);
15569 ret = FALSE;
15570 goto copy_reloc;
15571
15572 case R_PPC64_NONE:
15573 case R_PPC64_TLS:
15574 case R_PPC64_TLSGD:
15575 case R_PPC64_TLSLD:
15576 case R_PPC64_TOCSAVE:
15577 case R_PPC64_GNU_VTINHERIT:
15578 case R_PPC64_GNU_VTENTRY:
15579 case R_PPC64_ENTRY:
15580 case R_PPC64_PCREL_OPT:
15581 goto copy_reloc;
15582
15583 /* GOT16 relocations. Like an ADDR16 using the symbol's
15584 address in the GOT as relocation value instead of the
15585 symbol's value itself. Also, create a GOT entry for the
15586 symbol and put the symbol value there. */
15587 case R_PPC64_GOT_TLSGD16:
15588 case R_PPC64_GOT_TLSGD16_LO:
15589 case R_PPC64_GOT_TLSGD16_HI:
15590 case R_PPC64_GOT_TLSGD16_HA:
15591 case R_PPC64_GOT_TLSGD34:
15592 tls_type = TLS_TLS | TLS_GD;
15593 goto dogot;
15594
15595 case R_PPC64_GOT_TLSLD16:
15596 case R_PPC64_GOT_TLSLD16_LO:
15597 case R_PPC64_GOT_TLSLD16_HI:
15598 case R_PPC64_GOT_TLSLD16_HA:
15599 case R_PPC64_GOT_TLSLD34:
15600 tls_type = TLS_TLS | TLS_LD;
15601 goto dogot;
15602
15603 case R_PPC64_GOT_TPREL16_DS:
15604 case R_PPC64_GOT_TPREL16_LO_DS:
15605 case R_PPC64_GOT_TPREL16_HI:
15606 case R_PPC64_GOT_TPREL16_HA:
15607 case R_PPC64_GOT_TPREL34:
15608 tls_type = TLS_TLS | TLS_TPREL;
15609 goto dogot;
15610
15611 case R_PPC64_GOT_DTPREL16_DS:
15612 case R_PPC64_GOT_DTPREL16_LO_DS:
15613 case R_PPC64_GOT_DTPREL16_HI:
15614 case R_PPC64_GOT_DTPREL16_HA:
15615 case R_PPC64_GOT_DTPREL34:
15616 tls_type = TLS_TLS | TLS_DTPREL;
15617 goto dogot;
15618
15619 case R_PPC64_GOT16:
15620 case R_PPC64_GOT16_LO:
15621 case R_PPC64_GOT16_HI:
15622 case R_PPC64_GOT16_HA:
15623 case R_PPC64_GOT16_DS:
15624 case R_PPC64_GOT16_LO_DS:
15625 case R_PPC64_GOT_PCREL34:
15626 dogot:
15627 {
15628 /* Relocation is to the entry for this symbol in the global
15629 offset table. */
15630 asection *got;
15631 bfd_vma *offp;
15632 bfd_vma off;
15633 unsigned long indx = 0;
15634 struct got_entry *ent;
15635
15636 if (tls_type == (TLS_TLS | TLS_LD)
15637 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
15638 ent = ppc64_tlsld_got (input_bfd);
15639 else
15640 {
15641 if (h != NULL)
15642 {
15643 if (!htab->elf.dynamic_sections_created
15644 || h->elf.dynindx == -1
15645 || SYMBOL_REFERENCES_LOCAL (info, &h->elf)
15646 || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
15647 /* This is actually a static link, or it is a
15648 -Bsymbolic link and the symbol is defined
15649 locally, or the symbol was forced to be local
15650 because of a version file. */
15651 ;
15652 else
15653 {
15654 indx = h->elf.dynindx;
15655 unresolved_reloc = FALSE;
15656 }
15657 ent = h->elf.got.glist;
15658 }
15659 else
15660 {
15661 if (local_got_ents == NULL)
15662 abort ();
15663 ent = local_got_ents[r_symndx];
15664 }
15665
15666 for (; ent != NULL; ent = ent->next)
15667 if (ent->addend == orig_rel.r_addend
15668 && ent->owner == input_bfd
15669 && ent->tls_type == tls_type)
15670 break;
15671 }
15672
15673 if (ent == NULL)
15674 abort ();
15675 if (ent->is_indirect)
15676 ent = ent->got.ent;
15677 offp = &ent->got.offset;
15678 got = ppc64_elf_tdata (ent->owner)->got;
15679 if (got == NULL)
15680 abort ();
15681
15682 /* The offset must always be a multiple of 8. We use the
15683 least significant bit to record whether we have already
15684 processed this entry. */
15685 off = *offp;
15686 if ((off & 1) != 0)
15687 off &= ~1;
15688 else
15689 {
15690 /* Generate relocs for the dynamic linker, except in
15691 the case of TLSLD where we'll use one entry per
15692 module. */
15693 asection *relgot;
15694 bfd_boolean ifunc;
15695
15696 *offp = off | 1;
15697 relgot = NULL;
15698 ifunc = (h != NULL
15699 ? h->elf.type == STT_GNU_IFUNC
15700 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
15701 if (ifunc)
15702 {
15703 relgot = htab->elf.irelplt;
15704 if (indx == 0)
15705 htab->local_ifunc_resolver = 1;
15706 else if (is_static_defined (&h->elf))
15707 htab->maybe_local_ifunc_resolver = 1;
15708 }
15709 else if (indx != 0
15710 || (bfd_link_pic (info)
15711 && (h == NULL
15712 || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
15713 && !(tls_type != 0
15714 && bfd_link_executable (info)
15715 && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
15716 relgot = ppc64_elf_tdata (ent->owner)->relgot;
15717 if (relgot != NULL)
15718 {
15719 outrel.r_offset = (got->output_section->vma
15720 + got->output_offset
15721 + off);
15722 outrel.r_addend = orig_rel.r_addend;
15723 if (tls_type & (TLS_LD | TLS_GD))
15724 {
15725 outrel.r_addend = 0;
15726 outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
15727 if (tls_type == (TLS_TLS | TLS_GD))
15728 {
15729 loc = relgot->contents;
15730 loc += (relgot->reloc_count++
15731 * sizeof (Elf64_External_Rela));
15732 bfd_elf64_swap_reloca_out (output_bfd,
15733 &outrel, loc);
15734 outrel.r_offset += 8;
15735 outrel.r_addend = orig_rel.r_addend;
15736 outrel.r_info
15737 = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15738 }
15739 }
15740 else if (tls_type == (TLS_TLS | TLS_DTPREL))
15741 outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
15742 else if (tls_type == (TLS_TLS | TLS_TPREL))
15743 outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
15744 else if (indx != 0)
15745 outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
15746 else
15747 {
15748 if (ifunc)
15749 outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
15750 else
15751 outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
15752
15753 /* Write the .got section contents for the sake
15754 of prelink. */
15755 loc = got->contents + off;
15756 bfd_put_64 (output_bfd, outrel.r_addend + relocation,
15757 loc);
15758 }
15759
15760 if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
15761 {
15762 outrel.r_addend += relocation;
15763 if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
15764 {
15765 if (htab->elf.tls_sec == NULL)
15766 outrel.r_addend = 0;
15767 else
15768 outrel.r_addend -= htab->elf.tls_sec->vma;
15769 }
15770 }
15771 loc = relgot->contents;
15772 loc += (relgot->reloc_count++
15773 * sizeof (Elf64_External_Rela));
15774 bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
15775 }
15776
15777 /* Init the .got section contents here if we're not
15778 emitting a reloc. */
15779 else
15780 {
15781 relocation += orig_rel.r_addend;
15782 if (tls_type != 0)
15783 {
15784 if (htab->elf.tls_sec == NULL)
15785 relocation = 0;
15786 else
15787 {
15788 if (tls_type & TLS_LD)
15789 relocation = 0;
15790 else
15791 relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
15792 if (tls_type & TLS_TPREL)
15793 relocation += DTP_OFFSET - TP_OFFSET;
15794 }
15795
15796 if (tls_type & (TLS_GD | TLS_LD))
15797 {
15798 bfd_put_64 (output_bfd, relocation,
15799 got->contents + off + 8);
15800 relocation = 1;
15801 }
15802 }
15803 bfd_put_64 (output_bfd, relocation,
15804 got->contents + off);
15805 }
15806 }
15807
15808 if (off >= (bfd_vma) -2)
15809 abort ();
15810
15811 relocation = got->output_section->vma + got->output_offset + off;
15812 addend = 0;
15813 if (!(r_type == R_PPC64_GOT_PCREL34
15814 || r_type == R_PPC64_GOT_TLSGD34
15815 || r_type == R_PPC64_GOT_TLSLD34
15816 || r_type == R_PPC64_GOT_TPREL34
15817 || r_type == R_PPC64_GOT_DTPREL34))
15818 addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
15819 }
15820 break;
15821
15822 case R_PPC64_PLT16_HA:
15823 case R_PPC64_PLT16_HI:
15824 case R_PPC64_PLT16_LO:
15825 case R_PPC64_PLT16_LO_DS:
15826 case R_PPC64_PLT_PCREL34:
15827 case R_PPC64_PLT_PCREL34_NOTOC:
15828 case R_PPC64_PLT32:
15829 case R_PPC64_PLT64:
15830 case R_PPC64_PLTSEQ:
15831 case R_PPC64_PLTSEQ_NOTOC:
15832 case R_PPC64_PLTCALL:
15833 case R_PPC64_PLTCALL_NOTOC:
15834 /* Relocation is to the entry for this symbol in the
15835 procedure linkage table. */
15836 unresolved_reloc = TRUE;
15837 {
15838 struct plt_entry **plt_list = NULL;
15839 if (h != NULL)
15840 plt_list = &h->elf.plt.plist;
15841 else if (local_got_ents != NULL)
15842 {
15843 struct plt_entry **local_plt = (struct plt_entry **)
15844 (local_got_ents + symtab_hdr->sh_info);
15845 plt_list = local_plt + r_symndx;
15846 }
15847 if (plt_list)
15848 {
15849 struct plt_entry *ent;
15850
15851 for (ent = *plt_list; ent != NULL; ent = ent->next)
15852 if (ent->plt.offset != (bfd_vma) -1
15853 && ent->addend == orig_rel.r_addend)
15854 {
15855 asection *plt;
15856 bfd_vma got;
15857
15858 plt = htab->elf.splt;
15859 if (!htab->elf.dynamic_sections_created
15860 || h == NULL
15861 || h->elf.dynindx == -1)
15862 {
15863 if (h != NULL
15864 ? h->elf.type == STT_GNU_IFUNC
15865 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
15866 plt = htab->elf.iplt;
15867 else
15868 plt = htab->pltlocal;
15869 }
15870 relocation = (plt->output_section->vma
15871 + plt->output_offset
15872 + ent->plt.offset);
15873 if (r_type == R_PPC64_PLT16_HA
15874 || r_type == R_PPC64_PLT16_HI
15875 || r_type == R_PPC64_PLT16_LO
15876 || r_type == R_PPC64_PLT16_LO_DS)
15877 {
15878 got = (elf_gp (output_bfd)
15879 + htab->sec_info[input_section->id].toc_off);
15880 relocation -= got;
15881 }
15882 addend = 0;
15883 unresolved_reloc = FALSE;
15884 break;
15885 }
15886 }
15887 }
15888 break;
15889
15890 case R_PPC64_TOC:
15891 /* Relocation value is TOC base. */
15892 relocation = TOCstart;
15893 if (r_symndx == STN_UNDEF)
15894 relocation += htab->sec_info[input_section->id].toc_off;
15895 else if (unresolved_reloc)
15896 ;
15897 else if (sec != NULL && sec->id < htab->sec_info_arr_size)
15898 relocation += htab->sec_info[sec->id].toc_off;
15899 else
15900 unresolved_reloc = TRUE;
15901 goto dodyn;
15902
15903 /* TOC16 relocs. We want the offset relative to the TOC base,
15904 which is the address of the start of the TOC plus 0x8000.
15905 The TOC consists of sections .got, .toc, .tocbss, and .plt,
15906 in this order. */
15907 case R_PPC64_TOC16:
15908 case R_PPC64_TOC16_LO:
15909 case R_PPC64_TOC16_HI:
15910 case R_PPC64_TOC16_DS:
15911 case R_PPC64_TOC16_LO_DS:
15912 case R_PPC64_TOC16_HA:
15913 addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
15914 if (h != NULL)
15915 goto dodyn;
15916 break;
15917
15918 /* Relocate against the beginning of the section. */
15919 case R_PPC64_SECTOFF:
15920 case R_PPC64_SECTOFF_LO:
15921 case R_PPC64_SECTOFF_HI:
15922 case R_PPC64_SECTOFF_DS:
15923 case R_PPC64_SECTOFF_LO_DS:
15924 case R_PPC64_SECTOFF_HA:
15925 if (sec != NULL)
15926 addend -= sec->output_section->vma;
15927 break;
15928
15929 case R_PPC64_REL16:
15930 case R_PPC64_REL16_LO:
15931 case R_PPC64_REL16_HI:
15932 case R_PPC64_REL16_HA:
15933 case R_PPC64_REL16_HIGH:
15934 case R_PPC64_REL16_HIGHA:
15935 case R_PPC64_REL16_HIGHER:
15936 case R_PPC64_REL16_HIGHERA:
15937 case R_PPC64_REL16_HIGHEST:
15938 case R_PPC64_REL16_HIGHESTA:
15939 case R_PPC64_REL16_HIGHER34:
15940 case R_PPC64_REL16_HIGHERA34:
15941 case R_PPC64_REL16_HIGHEST34:
15942 case R_PPC64_REL16_HIGHESTA34:
15943 case R_PPC64_REL16DX_HA:
15944 case R_PPC64_REL14:
15945 case R_PPC64_REL14_BRNTAKEN:
15946 case R_PPC64_REL14_BRTAKEN:
15947 case R_PPC64_REL24:
15948 case R_PPC64_REL24_NOTOC:
15949 case R_PPC64_PCREL34:
15950 case R_PPC64_PCREL28:
15951 break;
15952
15953 case R_PPC64_TPREL16:
15954 case R_PPC64_TPREL16_LO:
15955 case R_PPC64_TPREL16_HI:
15956 case R_PPC64_TPREL16_HA:
15957 case R_PPC64_TPREL16_DS:
15958 case R_PPC64_TPREL16_LO_DS:
15959 case R_PPC64_TPREL16_HIGH:
15960 case R_PPC64_TPREL16_HIGHA:
15961 case R_PPC64_TPREL16_HIGHER:
15962 case R_PPC64_TPREL16_HIGHERA:
15963 case R_PPC64_TPREL16_HIGHEST:
15964 case R_PPC64_TPREL16_HIGHESTA:
15965 case R_PPC64_TPREL34:
15966 if (h != NULL
15967 && h->elf.root.type == bfd_link_hash_undefweak
15968 && h->elf.dynindx == -1)
15969 {
15970 /* Make this relocation against an undefined weak symbol
15971 resolve to zero. This is really just a tweak, since
15972 code using weak externs ought to check that they are
15973 defined before using them. */
15974 bfd_byte *p = contents + rel->r_offset - d_offset;
15975
15976 insn = bfd_get_32 (input_bfd, p);
15977 insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
15978 if (insn != 0)
15979 bfd_put_32 (input_bfd, insn, p);
15980 break;
15981 }
15982 if (htab->elf.tls_sec != NULL)
15983 addend -= htab->elf.tls_sec->vma + TP_OFFSET;
15984 /* The TPREL16 relocs shouldn't really be used in shared
15985 libs or with non-local symbols as that will result in
15986 DT_TEXTREL being set, but support them anyway. */
15987 goto dodyn;
15988
15989 case R_PPC64_DTPREL16:
15990 case R_PPC64_DTPREL16_LO:
15991 case R_PPC64_DTPREL16_HI:
15992 case R_PPC64_DTPREL16_HA:
15993 case R_PPC64_DTPREL16_DS:
15994 case R_PPC64_DTPREL16_LO_DS:
15995 case R_PPC64_DTPREL16_HIGH:
15996 case R_PPC64_DTPREL16_HIGHA:
15997 case R_PPC64_DTPREL16_HIGHER:
15998 case R_PPC64_DTPREL16_HIGHERA:
15999 case R_PPC64_DTPREL16_HIGHEST:
16000 case R_PPC64_DTPREL16_HIGHESTA:
16001 case R_PPC64_DTPREL34:
16002 if (htab->elf.tls_sec != NULL)
16003 addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16004 break;
16005
16006 case R_PPC64_ADDR64_LOCAL:
16007 addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
16008 ? h->elf.other
16009 : sym->st_other);
16010 break;
16011
16012 case R_PPC64_DTPMOD64:
16013 relocation = 1;
16014 addend = 0;
16015 goto dodyn;
16016
16017 case R_PPC64_TPREL64:
16018 if (htab->elf.tls_sec != NULL)
16019 addend -= htab->elf.tls_sec->vma + TP_OFFSET;
16020 goto dodyn;
16021
16022 case R_PPC64_DTPREL64:
16023 if (htab->elf.tls_sec != NULL)
16024 addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
16025 /* Fall through. */
16026
16027 /* Relocations that may need to be propagated if this is a
16028 dynamic object. */
16029 case R_PPC64_REL30:
16030 case R_PPC64_REL32:
16031 case R_PPC64_REL64:
16032 case R_PPC64_ADDR14:
16033 case R_PPC64_ADDR14_BRNTAKEN:
16034 case R_PPC64_ADDR14_BRTAKEN:
16035 case R_PPC64_ADDR16:
16036 case R_PPC64_ADDR16_DS:
16037 case R_PPC64_ADDR16_HA:
16038 case R_PPC64_ADDR16_HI:
16039 case R_PPC64_ADDR16_HIGH:
16040 case R_PPC64_ADDR16_HIGHA:
16041 case R_PPC64_ADDR16_HIGHER:
16042 case R_PPC64_ADDR16_HIGHERA:
16043 case R_PPC64_ADDR16_HIGHEST:
16044 case R_PPC64_ADDR16_HIGHESTA:
16045 case R_PPC64_ADDR16_LO:
16046 case R_PPC64_ADDR16_LO_DS:
16047 case R_PPC64_ADDR16_HIGHER34:
16048 case R_PPC64_ADDR16_HIGHERA34:
16049 case R_PPC64_ADDR16_HIGHEST34:
16050 case R_PPC64_ADDR16_HIGHESTA34:
16051 case R_PPC64_ADDR24:
16052 case R_PPC64_ADDR32:
16053 case R_PPC64_ADDR64:
16054 case R_PPC64_UADDR16:
16055 case R_PPC64_UADDR32:
16056 case R_PPC64_UADDR64:
16057 case R_PPC64_D34:
16058 case R_PPC64_D34_LO:
16059 case R_PPC64_D34_HI30:
16060 case R_PPC64_D34_HA30:
16061 case R_PPC64_D28:
16062 dodyn:
16063 if ((input_section->flags & SEC_ALLOC) == 0)
16064 break;
16065
16066 if (NO_OPD_RELOCS && is_opd)
16067 break;
16068
16069 if (bfd_link_pic (info)
16070 ? ((h == NULL
16071 || h->dyn_relocs != NULL)
16072 && ((h != NULL && pc_dynrelocs (h))
16073 || must_be_dyn_reloc (info, r_type)))
16074 : (h != NULL
16075 ? h->dyn_relocs != NULL
16076 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16077 {
16078 bfd_boolean skip, relocate;
16079 asection *sreloc;
16080 bfd_vma out_off;
16081 long indx = 0;
16082
16083 /* When generating a dynamic object, these relocations
16084 are copied into the output file to be resolved at run
16085 time. */
16086
16087 skip = FALSE;
16088 relocate = FALSE;
16089
16090 out_off = _bfd_elf_section_offset (output_bfd, info,
16091 input_section, rel->r_offset);
16092 if (out_off == (bfd_vma) -1)
16093 skip = TRUE;
16094 else if (out_off == (bfd_vma) -2)
16095 skip = TRUE, relocate = TRUE;
16096 out_off += (input_section->output_section->vma
16097 + input_section->output_offset);
16098 outrel.r_offset = out_off;
16099 outrel.r_addend = rel->r_addend;
16100
16101 /* Optimize unaligned reloc use. */
16102 if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
16103 || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
16104 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
16105 else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
16106 || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
16107 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
16108 else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
16109 || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
16110 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
16111
16112 if (skip)
16113 memset (&outrel, 0, sizeof outrel);
16114 else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
16115 && !is_opd
16116 && r_type != R_PPC64_TOC)
16117 {
16118 indx = h->elf.dynindx;
16119 BFD_ASSERT (indx != -1);
16120 outrel.r_info = ELF64_R_INFO (indx, r_type);
16121 }
16122 else
16123 {
16124 /* This symbol is local, or marked to become local,
16125 or this is an opd section reloc which must point
16126 at a local function. */
16127 outrel.r_addend += relocation;
16128 if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
16129 {
16130 if (is_opd && h != NULL)
16131 {
16132 /* Lie about opd entries. This case occurs
16133 when building shared libraries and we
16134 reference a function in another shared
16135 lib. The same thing happens for a weak
16136 definition in an application that's
16137 overridden by a strong definition in a
16138 shared lib. (I believe this is a generic
16139 bug in binutils handling of weak syms.)
16140 In these cases we won't use the opd
16141 entry in this lib. */
16142 unresolved_reloc = FALSE;
16143 }
16144 if (!is_opd
16145 && r_type == R_PPC64_ADDR64
16146 && (h != NULL
16147 ? h->elf.type == STT_GNU_IFUNC
16148 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
16149 outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
16150 else
16151 {
16152 outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
16153
16154 /* We need to relocate .opd contents for ld.so.
16155 Prelink also wants simple and consistent rules
16156 for relocs. This make all RELATIVE relocs have
16157 *r_offset equal to r_addend. */
16158 relocate = TRUE;
16159 }
16160 }
16161 else
16162 {
16163 if (h != NULL
16164 ? h->elf.type == STT_GNU_IFUNC
16165 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16166 {
16167 info->callbacks->einfo
16168 /* xgettext:c-format */
16169 (_("%H: %s for indirect "
16170 "function `%pT' unsupported\n"),
16171 input_bfd, input_section, rel->r_offset,
16172 ppc64_elf_howto_table[r_type]->name,
16173 sym_name);
16174 ret = FALSE;
16175 }
16176 else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
16177 ;
16178 else if (sec == NULL || sec->owner == NULL)
16179 {
16180 bfd_set_error (bfd_error_bad_value);
16181 return FALSE;
16182 }
16183 else
16184 {
16185 asection *osec = sec->output_section;
16186
16187 if ((osec->flags & SEC_THREAD_LOCAL) != 0)
16188 {
16189 /* TLS symbol values are relative to the
16190 TLS segment. Dynamic relocations for
16191 local TLS symbols therefore can't be
16192 reduced to a relocation against their
16193 section symbol because it holds the
16194 address of the section, not a value
16195 relative to the TLS segment. We could
16196 change the .tdata dynamic section symbol
16197 to be zero value but STN_UNDEF works
16198 and is used elsewhere, eg. for TPREL64
16199 GOT relocs against local TLS symbols. */
16200 osec = htab->elf.tls_sec;
16201 indx = 0;
16202 }
16203 else
16204 {
16205 indx = elf_section_data (osec)->dynindx;
16206 if (indx == 0)
16207 {
16208 if ((osec->flags & SEC_READONLY) == 0
16209 && htab->elf.data_index_section != NULL)
16210 osec = htab->elf.data_index_section;
16211 else
16212 osec = htab->elf.text_index_section;
16213 indx = elf_section_data (osec)->dynindx;
16214 }
16215 BFD_ASSERT (indx != 0);
16216 }
16217
16218 /* We are turning this relocation into one
16219 against a section symbol, so subtract out
16220 the output section's address but not the
16221 offset of the input section in the output
16222 section. */
16223 outrel.r_addend -= osec->vma;
16224 }
16225
16226 outrel.r_info = ELF64_R_INFO (indx, r_type);
16227 }
16228 }
16229
16230 sreloc = elf_section_data (input_section)->sreloc;
16231 if (h != NULL
16232 ? h->elf.type == STT_GNU_IFUNC
16233 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
16234 {
16235 sreloc = htab->elf.irelplt;
16236 if (indx == 0)
16237 htab->local_ifunc_resolver = 1;
16238 else if (is_static_defined (&h->elf))
16239 htab->maybe_local_ifunc_resolver = 1;
16240 }
16241 if (sreloc == NULL)
16242 abort ();
16243
16244 if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
16245 >= sreloc->size)
16246 abort ();
16247 loc = sreloc->contents;
16248 loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
16249 bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
16250
16251 if (!warned_dynamic
16252 && !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
16253 {
16254 info->callbacks->einfo
16255 /* xgettext:c-format */
16256 (_("%X%P: %pB: %s against %pT "
16257 "is not supported by glibc as a dynamic relocation\n"),
16258 input_bfd,
16259 ppc64_elf_howto_table[ELF64_R_TYPE (outrel.r_info)]->name,
16260 sym_name);
16261 warned_dynamic = TRUE;
16262 }
16263
16264 /* If this reloc is against an external symbol, it will
16265 be computed at runtime, so there's no need to do
16266 anything now. However, for the sake of prelink ensure
16267 that the section contents are a known value. */
16268 if (!relocate)
16269 {
16270 unresolved_reloc = FALSE;
16271 /* The value chosen here is quite arbitrary as ld.so
16272 ignores section contents except for the special
16273 case of .opd where the contents might be accessed
16274 before relocation. Choose zero, as that won't
16275 cause reloc overflow. */
16276 relocation = 0;
16277 addend = 0;
16278 /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
16279 to improve backward compatibility with older
16280 versions of ld. */
16281 if (r_type == R_PPC64_ADDR64)
16282 addend = outrel.r_addend;
16283 /* Adjust pc_relative relocs to have zero in *r_offset. */
16284 else if (ppc64_elf_howto_table[r_type]->pc_relative)
16285 addend = outrel.r_offset;
16286 }
16287 }
16288 break;
16289
16290 case R_PPC64_COPY:
16291 case R_PPC64_GLOB_DAT:
16292 case R_PPC64_JMP_SLOT:
16293 case R_PPC64_JMP_IREL:
16294 case R_PPC64_RELATIVE:
16295 /* We shouldn't ever see these dynamic relocs in relocatable
16296 files. */
16297 /* Fall through. */
16298
16299 case R_PPC64_PLTGOT16:
16300 case R_PPC64_PLTGOT16_DS:
16301 case R_PPC64_PLTGOT16_HA:
16302 case R_PPC64_PLTGOT16_HI:
16303 case R_PPC64_PLTGOT16_LO:
16304 case R_PPC64_PLTGOT16_LO_DS:
16305 case R_PPC64_PLTREL32:
16306 case R_PPC64_PLTREL64:
16307 /* These ones haven't been implemented yet. */
16308
16309 info->callbacks->einfo
16310 /* xgettext:c-format */
16311 (_("%P: %pB: %s is not supported for `%pT'\n"),
16312 input_bfd,
16313 ppc64_elf_howto_table[r_type]->name, sym_name);
16314
16315 bfd_set_error (bfd_error_invalid_operation);
16316 ret = FALSE;
16317 goto copy_reloc;
16318 }
16319
16320 /* Multi-instruction sequences that access the TOC can be
16321 optimized, eg. addis ra,r2,0; addi rb,ra,x;
16322 to nop; addi rb,r2,x; */
16323 switch (r_type)
16324 {
16325 default:
16326 break;
16327
16328 case R_PPC64_GOT_TLSLD16_HI:
16329 case R_PPC64_GOT_TLSGD16_HI:
16330 case R_PPC64_GOT_TPREL16_HI:
16331 case R_PPC64_GOT_DTPREL16_HI:
16332 case R_PPC64_GOT16_HI:
16333 case R_PPC64_TOC16_HI:
16334 /* These relocs would only be useful if building up an
16335 offset to later add to r2, perhaps in an indexed
16336 addressing mode instruction. Don't try to optimize.
16337 Unfortunately, the possibility of someone building up an
16338 offset like this or even with the HA relocs, means that
16339 we need to check the high insn when optimizing the low
16340 insn. */
16341 break;
16342
16343 case R_PPC64_PLTCALL_NOTOC:
16344 if (!unresolved_reloc)
16345 htab->notoc_plt = 1;
16346 /* Fall through. */
16347 case R_PPC64_PLTCALL:
16348 if (unresolved_reloc)
16349 {
16350 /* No plt entry. Make this into a direct call. */
16351 bfd_byte *p = contents + rel->r_offset;
16352 insn = bfd_get_32 (input_bfd, p);
16353 insn &= 1;
16354 bfd_put_32 (input_bfd, B_DOT | insn, p);
16355 if (r_type == R_PPC64_PLTCALL)
16356 bfd_put_32 (input_bfd, NOP, p + 4);
16357 unresolved_reloc = save_unresolved_reloc;
16358 r_type = R_PPC64_REL24;
16359 }
16360 break;
16361
16362 case R_PPC64_PLTSEQ_NOTOC:
16363 case R_PPC64_PLTSEQ:
16364 if (unresolved_reloc)
16365 {
16366 unresolved_reloc = FALSE;
16367 goto nop_it;
16368 }
16369 break;
16370
16371 case R_PPC64_PLT_PCREL34_NOTOC:
16372 if (!unresolved_reloc)
16373 htab->notoc_plt = 1;
16374 /* Fall through. */
16375 case R_PPC64_PLT_PCREL34:
16376 if (unresolved_reloc)
16377 {
16378 bfd_byte *p = contents + rel->r_offset;
16379 bfd_put_32 (input_bfd, PNOP >> 32, p);
16380 bfd_put_32 (input_bfd, PNOP, p + 4);
16381 unresolved_reloc = FALSE;
16382 goto copy_reloc;
16383 }
16384 break;
16385
16386 case R_PPC64_PLT16_HA:
16387 if (unresolved_reloc)
16388 {
16389 unresolved_reloc = FALSE;
16390 goto nop_it;
16391 }
16392 /* Fall through. */
16393 case R_PPC64_GOT_TLSLD16_HA:
16394 case R_PPC64_GOT_TLSGD16_HA:
16395 case R_PPC64_GOT_TPREL16_HA:
16396 case R_PPC64_GOT_DTPREL16_HA:
16397 case R_PPC64_GOT16_HA:
16398 case R_PPC64_TOC16_HA:
16399 if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16400 && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16401 {
16402 bfd_byte *p;
16403 nop_it:
16404 p = contents + (rel->r_offset & ~3);
16405 bfd_put_32 (input_bfd, NOP, p);
16406 goto copy_reloc;
16407 }
16408 break;
16409
16410 case R_PPC64_PLT16_LO:
16411 case R_PPC64_PLT16_LO_DS:
16412 if (unresolved_reloc)
16413 {
16414 unresolved_reloc = FALSE;
16415 goto nop_it;
16416 }
16417 /* Fall through. */
16418 case R_PPC64_GOT_TLSLD16_LO:
16419 case R_PPC64_GOT_TLSGD16_LO:
16420 case R_PPC64_GOT_TPREL16_LO_DS:
16421 case R_PPC64_GOT_DTPREL16_LO_DS:
16422 case R_PPC64_GOT16_LO:
16423 case R_PPC64_GOT16_LO_DS:
16424 case R_PPC64_TOC16_LO:
16425 case R_PPC64_TOC16_LO_DS:
16426 if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
16427 && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
16428 {
16429 bfd_byte *p = contents + (rel->r_offset & ~3);
16430 insn = bfd_get_32 (input_bfd, p);
16431 if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */)
16432 {
16433 /* Transform addic to addi when we change reg. */
16434 insn &= ~((0x3fu << 26) | (0x1f << 16));
16435 insn |= (14u << 26) | (2 << 16);
16436 }
16437 else
16438 {
16439 insn &= ~(0x1f << 16);
16440 insn |= 2 << 16;
16441 }
16442 bfd_put_32 (input_bfd, insn, p);
16443 }
16444 break;
16445
16446 case R_PPC64_TPREL16_HA:
16447 if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16448 {
16449 bfd_byte *p = contents + (rel->r_offset & ~3);
16450 insn = bfd_get_32 (input_bfd, p);
16451 if ((insn & ((0x3fu << 26) | 0x1f << 16))
16452 != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
16453 /* xgettext:c-format */
16454 info->callbacks->minfo
16455 (_("%H: warning: %s unexpected insn %#x.\n"),
16456 input_bfd, input_section, rel->r_offset,
16457 ppc64_elf_howto_table[r_type]->name, insn);
16458 else
16459 {
16460 bfd_put_32 (input_bfd, NOP, p);
16461 goto copy_reloc;
16462 }
16463 }
16464 break;
16465
16466 case R_PPC64_TPREL16_LO:
16467 case R_PPC64_TPREL16_LO_DS:
16468 if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
16469 {
16470 bfd_byte *p = contents + (rel->r_offset & ~3);
16471 insn = bfd_get_32 (input_bfd, p);
16472 insn &= ~(0x1f << 16);
16473 insn |= 13 << 16;
16474 bfd_put_32 (input_bfd, insn, p);
16475 }
16476 break;
16477 }
16478
16479 /* Do any further special processing. */
16480 switch (r_type)
16481 {
16482 default:
16483 break;
16484
16485 case R_PPC64_REL16_HA:
16486 case R_PPC64_REL16_HIGHA:
16487 case R_PPC64_REL16_HIGHERA:
16488 case R_PPC64_REL16_HIGHESTA:
16489 case R_PPC64_REL16DX_HA:
16490 case R_PPC64_ADDR16_HA:
16491 case R_PPC64_ADDR16_HIGHA:
16492 case R_PPC64_ADDR16_HIGHERA:
16493 case R_PPC64_ADDR16_HIGHESTA:
16494 case R_PPC64_TOC16_HA:
16495 case R_PPC64_SECTOFF_HA:
16496 case R_PPC64_TPREL16_HA:
16497 case R_PPC64_TPREL16_HIGHA:
16498 case R_PPC64_TPREL16_HIGHERA:
16499 case R_PPC64_TPREL16_HIGHESTA:
16500 case R_PPC64_DTPREL16_HA:
16501 case R_PPC64_DTPREL16_HIGHA:
16502 case R_PPC64_DTPREL16_HIGHERA:
16503 case R_PPC64_DTPREL16_HIGHESTA:
16504 /* It's just possible that this symbol is a weak symbol
16505 that's not actually defined anywhere. In that case,
16506 'sec' would be NULL, and we should leave the symbol
16507 alone (it will be set to zero elsewhere in the link). */
16508 if (sec == NULL)
16509 break;
16510 /* Fall through. */
16511
16512 case R_PPC64_GOT16_HA:
16513 case R_PPC64_PLTGOT16_HA:
16514 case R_PPC64_PLT16_HA:
16515 case R_PPC64_GOT_TLSGD16_HA:
16516 case R_PPC64_GOT_TLSLD16_HA:
16517 case R_PPC64_GOT_TPREL16_HA:
16518 case R_PPC64_GOT_DTPREL16_HA:
16519 /* Add 0x10000 if sign bit in 0:15 is set.
16520 Bits 0:15 are not used. */
16521 addend += 0x8000;
16522 break;
16523
16524 case R_PPC64_D34_HA30:
16525 case R_PPC64_ADDR16_HIGHERA34:
16526 case R_PPC64_ADDR16_HIGHESTA34:
16527 case R_PPC64_REL16_HIGHERA34:
16528 case R_PPC64_REL16_HIGHESTA34:
16529 if (sec != NULL)
16530 addend += 1ULL << 33;
16531 break;
16532
16533 case R_PPC64_ADDR16_DS:
16534 case R_PPC64_ADDR16_LO_DS:
16535 case R_PPC64_GOT16_DS:
16536 case R_PPC64_GOT16_LO_DS:
16537 case R_PPC64_PLT16_LO_DS:
16538 case R_PPC64_SECTOFF_DS:
16539 case R_PPC64_SECTOFF_LO_DS:
16540 case R_PPC64_TOC16_DS:
16541 case R_PPC64_TOC16_LO_DS:
16542 case R_PPC64_PLTGOT16_DS:
16543 case R_PPC64_PLTGOT16_LO_DS:
16544 case R_PPC64_GOT_TPREL16_DS:
16545 case R_PPC64_GOT_TPREL16_LO_DS:
16546 case R_PPC64_GOT_DTPREL16_DS:
16547 case R_PPC64_GOT_DTPREL16_LO_DS:
16548 case R_PPC64_TPREL16_DS:
16549 case R_PPC64_TPREL16_LO_DS:
16550 case R_PPC64_DTPREL16_DS:
16551 case R_PPC64_DTPREL16_LO_DS:
16552 insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16553 mask = 3;
16554 /* If this reloc is against an lq, lxv, or stxv insn, then
16555 the value must be a multiple of 16. This is somewhat of
16556 a hack, but the "correct" way to do this by defining _DQ
16557 forms of all the _DS relocs bloats all reloc switches in
16558 this file. It doesn't make much sense to use these
16559 relocs in data, so testing the insn should be safe. */
16560 if ((insn & (0x3fu << 26)) == (56u << 26)
16561 || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1))
16562 mask = 15;
16563 relocation += addend;
16564 addend = insn & (mask ^ 3);
16565 if ((relocation & mask) != 0)
16566 {
16567 relocation ^= relocation & mask;
16568 info->callbacks->einfo
16569 /* xgettext:c-format */
16570 (_("%H: error: %s not a multiple of %u\n"),
16571 input_bfd, input_section, rel->r_offset,
16572 ppc64_elf_howto_table[r_type]->name,
16573 mask + 1);
16574 bfd_set_error (bfd_error_bad_value);
16575 ret = FALSE;
16576 goto copy_reloc;
16577 }
16578 break;
16579 }
16580
16581 /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
16582 because such sections are not SEC_ALLOC and thus ld.so will
16583 not process them. */
16584 howto = ppc64_elf_howto_table[(int) r_type];
16585 if (unresolved_reloc
16586 && !((input_section->flags & SEC_DEBUGGING) != 0
16587 && h->elf.def_dynamic)
16588 && _bfd_elf_section_offset (output_bfd, info, input_section,
16589 rel->r_offset) != (bfd_vma) -1)
16590 {
16591 info->callbacks->einfo
16592 /* xgettext:c-format */
16593 (_("%H: unresolvable %s against `%pT'\n"),
16594 input_bfd, input_section, rel->r_offset,
16595 howto->name,
16596 h->elf.root.root.string);
16597 ret = FALSE;
16598 }
16599
16600 /* 16-bit fields in insns mostly have signed values, but a
16601 few insns have 16-bit unsigned values. Really, we should
16602 have different reloc types. */
16603 if (howto->complain_on_overflow != complain_overflow_dont
16604 && howto->dst_mask == 0xffff
16605 && (input_section->flags & SEC_CODE) != 0)
16606 {
16607 enum complain_overflow complain = complain_overflow_signed;
16608
16609 insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
16610 if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
16611 complain = complain_overflow_bitfield;
16612 else if (howto->rightshift == 0
16613 ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
16614 || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
16615 || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
16616 : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */
16617 || (insn & (0x3fu << 26)) == 25u << 26 /* oris */
16618 || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */))
16619 complain = complain_overflow_unsigned;
16620 if (howto->complain_on_overflow != complain)
16621 {
16622 alt_howto = *howto;
16623 alt_howto.complain_on_overflow = complain;
16624 howto = &alt_howto;
16625 }
16626 }
16627
16628 switch (r_type)
16629 {
16630 /* Split field relocs aren't handled by _bfd_final_link_relocate. */
16631 case R_PPC64_D34:
16632 case R_PPC64_D34_LO:
16633 case R_PPC64_D34_HI30:
16634 case R_PPC64_D34_HA30:
16635 case R_PPC64_PCREL34:
16636 case R_PPC64_GOT_PCREL34:
16637 case R_PPC64_TPREL34:
16638 case R_PPC64_DTPREL34:
16639 case R_PPC64_GOT_TLSGD34:
16640 case R_PPC64_GOT_TLSLD34:
16641 case R_PPC64_GOT_TPREL34:
16642 case R_PPC64_GOT_DTPREL34:
16643 case R_PPC64_PLT_PCREL34:
16644 case R_PPC64_PLT_PCREL34_NOTOC:
16645 case R_PPC64_D28:
16646 case R_PPC64_PCREL28:
16647 if (rel->r_offset + 8 > input_section->size)
16648 r = bfd_reloc_outofrange;
16649 else
16650 {
16651 relocation += addend;
16652 if (howto->pc_relative)
16653 relocation -= (rel->r_offset
16654 + input_section->output_offset
16655 + input_section->output_section->vma);
16656 relocation >>= howto->rightshift;
16657
16658 pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16659 pinsn <<= 32;
16660 pinsn |= bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
16661
16662 pinsn &= ~howto->dst_mask;
16663 pinsn |= (((relocation << 16) | (relocation & 0xffff))
16664 & howto->dst_mask);
16665 bfd_put_32 (input_bfd, pinsn >> 32, contents + rel->r_offset);
16666 bfd_put_32 (input_bfd, pinsn, contents + rel->r_offset + 4);
16667 r = bfd_reloc_ok;
16668 if (howto->complain_on_overflow == complain_overflow_signed
16669 && (relocation + (1ULL << (howto->bitsize - 1))
16670 >= 1ULL << howto->bitsize))
16671 r = bfd_reloc_overflow;
16672 }
16673 break;
16674
16675 case R_PPC64_REL16DX_HA:
16676 if (rel->r_offset + 4 > input_section->size)
16677 r = bfd_reloc_outofrange;
16678 else
16679 {
16680 relocation += addend;
16681 relocation -= (rel->r_offset
16682 + input_section->output_offset
16683 + input_section->output_section->vma);
16684 relocation = (bfd_signed_vma) relocation >> 16;
16685 insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
16686 insn &= ~0x1fffc1;
16687 insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
16688 bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
16689 r = bfd_reloc_ok;
16690 if (relocation + 0x8000 > 0xffff)
16691 r = bfd_reloc_overflow;
16692 }
16693 break;
16694
16695 default:
16696 r = _bfd_final_link_relocate (howto, input_bfd, input_section,
16697 contents, rel->r_offset,
16698 relocation, addend);
16699 }
16700
16701 if (r != bfd_reloc_ok)
16702 {
16703 char *more_info = NULL;
16704 const char *reloc_name = howto->name;
16705
16706 if (reloc_dest != DEST_NORMAL)
16707 {
16708 more_info = bfd_malloc (strlen (reloc_name) + 8);
16709 if (more_info != NULL)
16710 {
16711 strcpy (more_info, reloc_name);
16712 strcat (more_info, (reloc_dest == DEST_OPD
16713 ? " (OPD)" : " (stub)"));
16714 reloc_name = more_info;
16715 }
16716 }
16717
16718 if (r == bfd_reloc_overflow)
16719 {
16720 /* On code like "if (foo) foo();" don't report overflow
16721 on a branch to zero when foo is undefined. */
16722 if (!warned
16723 && (reloc_dest == DEST_STUB
16724 || !(h != NULL
16725 && (h->elf.root.type == bfd_link_hash_undefweak
16726 || h->elf.root.type == bfd_link_hash_undefined)
16727 && is_branch_reloc (r_type))))
16728 info->callbacks->reloc_overflow (info, &h->elf.root,
16729 sym_name, reloc_name,
16730 orig_rel.r_addend,
16731 input_bfd, input_section,
16732 rel->r_offset);
16733 }
16734 else
16735 {
16736 info->callbacks->einfo
16737 /* xgettext:c-format */
16738 (_("%H: %s against `%pT': error %d\n"),
16739 input_bfd, input_section, rel->r_offset,
16740 reloc_name, sym_name, (int) r);
16741 ret = FALSE;
16742 }
16743 if (more_info != NULL)
16744 free (more_info);
16745 }
16746 copy_reloc:
16747 if (wrel != rel)
16748 *wrel = *rel;
16749 }
16750
16751 if (wrel != rel)
16752 {
16753 Elf_Internal_Shdr *rel_hdr;
16754 size_t deleted = rel - wrel;
16755
16756 rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
16757 rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16758 if (rel_hdr->sh_size == 0)
16759 {
16760 /* It is too late to remove an empty reloc section. Leave
16761 one NONE reloc.
16762 ??? What is wrong with an empty section??? */
16763 rel_hdr->sh_size = rel_hdr->sh_entsize;
16764 deleted -= 1;
16765 }
16766 rel_hdr = _bfd_elf_single_rel_hdr (input_section);
16767 rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
16768 input_section->reloc_count -= deleted;
16769 }
16770
16771 /* If we're emitting relocations, then shortly after this function
16772 returns, reloc offsets and addends for this section will be
16773 adjusted. Worse, reloc symbol indices will be for the output
16774 file rather than the input. Save a copy of the relocs for
16775 opd_entry_value. */
16776 if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
16777 {
16778 bfd_size_type amt;
16779 amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
16780 rel = bfd_alloc (input_bfd, amt);
16781 BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
16782 ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
16783 if (rel == NULL)
16784 return FALSE;
16785 memcpy (rel, relocs, amt);
16786 }
16787 return ret;
16788 }
16789
16790 /* Adjust the value of any local symbols in opd sections. */
16791
16792 static int
16793 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
16794 const char *name ATTRIBUTE_UNUSED,
16795 Elf_Internal_Sym *elfsym,
16796 asection *input_sec,
16797 struct elf_link_hash_entry *h)
16798 {
16799 struct _opd_sec_data *opd;
16800 long adjust;
16801 bfd_vma value;
16802
16803 if (h != NULL)
16804 return 1;
16805
16806 opd = get_opd_info (input_sec);
16807 if (opd == NULL || opd->adjust == NULL)
16808 return 1;
16809
16810 value = elfsym->st_value - input_sec->output_offset;
16811 if (!bfd_link_relocatable (info))
16812 value -= input_sec->output_section->vma;
16813
16814 adjust = opd->adjust[OPD_NDX (value)];
16815 if (adjust == -1)
16816 return 2;
16817
16818 elfsym->st_value += adjust;
16819 return 1;
16820 }
16821
16822 /* Finish up dynamic symbol handling. We set the contents of various
16823 dynamic sections here. */
16824
16825 static bfd_boolean
16826 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
16827 struct bfd_link_info *info,
16828 struct elf_link_hash_entry *h,
16829 Elf_Internal_Sym *sym)
16830 {
16831 struct ppc_link_hash_table *htab;
16832 struct plt_entry *ent;
16833
16834 htab = ppc_hash_table (info);
16835 if (htab == NULL)
16836 return FALSE;
16837
16838 if (!htab->opd_abi && !h->def_regular)
16839 for (ent = h->plt.plist; ent != NULL; ent = ent->next)
16840 if (ent->plt.offset != (bfd_vma) -1)
16841 {
16842 /* Mark the symbol as undefined, rather than as
16843 defined in glink. Leave the value if there were
16844 any relocations where pointer equality matters
16845 (this is a clue for the dynamic linker, to make
16846 function pointer comparisons work between an
16847 application and shared library), otherwise set it
16848 to zero. */
16849 sym->st_shndx = SHN_UNDEF;
16850 if (!h->pointer_equality_needed)
16851 sym->st_value = 0;
16852 else if (!h->ref_regular_nonweak)
16853 {
16854 /* This breaks function pointer comparisons, but
16855 that is better than breaking tests for a NULL
16856 function pointer. */
16857 sym->st_value = 0;
16858 }
16859 break;
16860 }
16861
16862 if (h->needs_copy
16863 && (h->root.type == bfd_link_hash_defined
16864 || h->root.type == bfd_link_hash_defweak)
16865 && (h->root.u.def.section == htab->elf.sdynbss
16866 || h->root.u.def.section == htab->elf.sdynrelro))
16867 {
16868 /* This symbol needs a copy reloc. Set it up. */
16869 Elf_Internal_Rela rela;
16870 asection *srel;
16871 bfd_byte *loc;
16872
16873 if (h->dynindx == -1)
16874 abort ();
16875
16876 rela.r_offset = defined_sym_val (h);
16877 rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
16878 rela.r_addend = 0;
16879 if (h->root.u.def.section == htab->elf.sdynrelro)
16880 srel = htab->elf.sreldynrelro;
16881 else
16882 srel = htab->elf.srelbss;
16883 loc = srel->contents;
16884 loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
16885 bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
16886 }
16887
16888 return TRUE;
16889 }
16890
16891 /* Used to decide how to sort relocs in an optimal manner for the
16892 dynamic linker, before writing them out. */
16893
16894 static enum elf_reloc_type_class
16895 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
16896 const asection *rel_sec,
16897 const Elf_Internal_Rela *rela)
16898 {
16899 enum elf_ppc64_reloc_type r_type;
16900 struct ppc_link_hash_table *htab = ppc_hash_table (info);
16901
16902 if (rel_sec == htab->elf.irelplt)
16903 return reloc_class_ifunc;
16904
16905 r_type = ELF64_R_TYPE (rela->r_info);
16906 switch (r_type)
16907 {
16908 case R_PPC64_RELATIVE:
16909 return reloc_class_relative;
16910 case R_PPC64_JMP_SLOT:
16911 return reloc_class_plt;
16912 case R_PPC64_COPY:
16913 return reloc_class_copy;
16914 default:
16915 return reloc_class_normal;
16916 }
16917 }
16918
16919 /* Finish up the dynamic sections. */
16920
16921 static bfd_boolean
16922 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
16923 struct bfd_link_info *info)
16924 {
16925 struct ppc_link_hash_table *htab;
16926 bfd *dynobj;
16927 asection *sdyn;
16928
16929 htab = ppc_hash_table (info);
16930 if (htab == NULL)
16931 return FALSE;
16932
16933 dynobj = htab->elf.dynobj;
16934 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
16935
16936 if (htab->elf.dynamic_sections_created)
16937 {
16938 Elf64_External_Dyn *dyncon, *dynconend;
16939
16940 if (sdyn == NULL || htab->elf.sgot == NULL)
16941 abort ();
16942
16943 dyncon = (Elf64_External_Dyn *) sdyn->contents;
16944 dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
16945 for (; dyncon < dynconend; dyncon++)
16946 {
16947 Elf_Internal_Dyn dyn;
16948 asection *s;
16949
16950 bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
16951
16952 switch (dyn.d_tag)
16953 {
16954 default:
16955 continue;
16956
16957 case DT_PPC64_GLINK:
16958 s = htab->glink;
16959 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16960 /* We stupidly defined DT_PPC64_GLINK to be the start
16961 of glink rather than the first entry point, which is
16962 what ld.so needs, and now have a bigger stub to
16963 support automatic multiple TOCs. */
16964 dyn.d_un.d_ptr += GLINK_PLTRESOLVE_SIZE (htab) - 8 * 4;
16965 break;
16966
16967 case DT_PPC64_OPD:
16968 s = bfd_get_section_by_name (output_bfd, ".opd");
16969 if (s == NULL)
16970 continue;
16971 dyn.d_un.d_ptr = s->vma;
16972 break;
16973
16974 case DT_PPC64_OPT:
16975 if ((htab->do_multi_toc && htab->multi_toc_needed)
16976 || htab->notoc_plt)
16977 dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
16978 if (htab->has_plt_localentry0)
16979 dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
16980 break;
16981
16982 case DT_PPC64_OPDSZ:
16983 s = bfd_get_section_by_name (output_bfd, ".opd");
16984 if (s == NULL)
16985 continue;
16986 dyn.d_un.d_val = s->size;
16987 break;
16988
16989 case DT_PLTGOT:
16990 s = htab->elf.splt;
16991 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16992 break;
16993
16994 case DT_JMPREL:
16995 s = htab->elf.srelplt;
16996 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
16997 break;
16998
16999 case DT_PLTRELSZ:
17000 dyn.d_un.d_val = htab->elf.srelplt->size;
17001 break;
17002
17003 case DT_TEXTREL:
17004 if (htab->local_ifunc_resolver)
17005 info->callbacks->einfo
17006 (_("%X%P: text relocations and GNU indirect "
17007 "functions will result in a segfault at runtime\n"));
17008 else if (htab->maybe_local_ifunc_resolver)
17009 info->callbacks->einfo
17010 (_("%P: warning: text relocations and GNU indirect "
17011 "functions may result in a segfault at runtime\n"));
17012 continue;
17013 }
17014
17015 bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
17016 }
17017 }
17018
17019 if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
17020 && htab->elf.sgot->output_section != bfd_abs_section_ptr)
17021 {
17022 /* Fill in the first entry in the global offset table.
17023 We use it to hold the link-time TOCbase. */
17024 bfd_put_64 (output_bfd,
17025 elf_gp (output_bfd) + TOC_BASE_OFF,
17026 htab->elf.sgot->contents);
17027
17028 /* Set .got entry size. */
17029 elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
17030 = 8;
17031 }
17032
17033 if (htab->elf.splt != NULL && htab->elf.splt->size != 0
17034 && htab->elf.splt->output_section != bfd_abs_section_ptr)
17035 {
17036 /* Set .plt entry size. */
17037 elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
17038 = PLT_ENTRY_SIZE (htab);
17039 }
17040
17041 /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
17042 brlt ourselves if emitrelocations. */
17043 if (htab->brlt != NULL
17044 && htab->brlt->reloc_count != 0
17045 && !_bfd_elf_link_output_relocs (output_bfd,
17046 htab->brlt,
17047 elf_section_data (htab->brlt)->rela.hdr,
17048 elf_section_data (htab->brlt)->relocs,
17049 NULL))
17050 return FALSE;
17051
17052 if (htab->glink != NULL
17053 && htab->glink->reloc_count != 0
17054 && !_bfd_elf_link_output_relocs (output_bfd,
17055 htab->glink,
17056 elf_section_data (htab->glink)->rela.hdr,
17057 elf_section_data (htab->glink)->relocs,
17058 NULL))
17059 return FALSE;
17060
17061
17062 if (htab->glink_eh_frame != NULL
17063 && htab->glink_eh_frame->size != 0
17064 && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
17065 && !_bfd_elf_write_section_eh_frame (output_bfd, info,
17066 htab->glink_eh_frame,
17067 htab->glink_eh_frame->contents))
17068 return FALSE;
17069
17070 /* We need to handle writing out multiple GOT sections ourselves,
17071 since we didn't add them to DYNOBJ. We know dynobj is the first
17072 bfd. */
17073 while ((dynobj = dynobj->link.next) != NULL)
17074 {
17075 asection *s;
17076
17077 if (!is_ppc64_elf (dynobj))
17078 continue;
17079
17080 s = ppc64_elf_tdata (dynobj)->got;
17081 if (s != NULL
17082 && s->size != 0
17083 && s->output_section != bfd_abs_section_ptr
17084 && !bfd_set_section_contents (output_bfd, s->output_section,
17085 s->contents, s->output_offset,
17086 s->size))
17087 return FALSE;
17088 s = ppc64_elf_tdata (dynobj)->relgot;
17089 if (s != NULL
17090 && s->size != 0
17091 && s->output_section != bfd_abs_section_ptr
17092 && !bfd_set_section_contents (output_bfd, s->output_section,
17093 s->contents, s->output_offset,
17094 s->size))
17095 return FALSE;
17096 }
17097
17098 return TRUE;
17099 }
17100
17101 #include "elf64-target.h"
17102
17103 /* FreeBSD support */
17104
17105 #undef TARGET_LITTLE_SYM
17106 #undef TARGET_LITTLE_NAME
17107
17108 #undef TARGET_BIG_SYM
17109 #define TARGET_BIG_SYM powerpc_elf64_fbsd_vec
17110 #undef TARGET_BIG_NAME
17111 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
17112
17113 #undef ELF_OSABI
17114 #define ELF_OSABI ELFOSABI_FREEBSD
17115
17116 #undef elf64_bed
17117 #define elf64_bed elf64_powerpc_fbsd_bed
17118
17119 #include "elf64-target.h"