PR22431, powerpc64 ld segfault when .plt discarded
[external/binutils.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright (C) 1999-2017 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 static bfd_reloc_status_type ppc64_elf_ha_reloc
39   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
40 static bfd_reloc_status_type ppc64_elf_branch_reloc
41   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
42 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
43   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
44 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
45   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
46 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
47   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
48 static bfd_reloc_status_type ppc64_elf_toc_reloc
49   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
50 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
51   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
52 static bfd_reloc_status_type ppc64_elf_toc64_reloc
53   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
54 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
55   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
56 static bfd_vma opd_entry_value
57   (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
58
59 #define TARGET_LITTLE_SYM       powerpc_elf64_le_vec
60 #define TARGET_LITTLE_NAME      "elf64-powerpcle"
61 #define TARGET_BIG_SYM          powerpc_elf64_vec
62 #define TARGET_BIG_NAME         "elf64-powerpc"
63 #define ELF_ARCH                bfd_arch_powerpc
64 #define ELF_TARGET_ID           PPC64_ELF_DATA
65 #define ELF_MACHINE_CODE        EM_PPC64
66 #define ELF_MAXPAGESIZE         0x10000
67 #define ELF_COMMONPAGESIZE      0x10000
68 #define elf_info_to_howto       ppc64_elf_info_to_howto
69
70 #define elf_backend_want_got_sym 0
71 #define elf_backend_want_plt_sym 0
72 #define elf_backend_plt_alignment 3
73 #define elf_backend_plt_not_loaded 1
74 #define elf_backend_got_header_size 8
75 #define elf_backend_want_dynrelro 1
76 #define elf_backend_can_gc_sections 1
77 #define elf_backend_can_refcount 1
78 #define elf_backend_rela_normal 1
79 #define elf_backend_dtrel_excludes_plt 1
80 #define elf_backend_default_execstack 0
81
82 #define bfd_elf64_mkobject                    ppc64_elf_mkobject
83 #define bfd_elf64_bfd_reloc_type_lookup       ppc64_elf_reloc_type_lookup
84 #define bfd_elf64_bfd_reloc_name_lookup       ppc64_elf_reloc_name_lookup
85 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
86 #define bfd_elf64_bfd_print_private_bfd_data  ppc64_elf_print_private_bfd_data
87 #define bfd_elf64_new_section_hook            ppc64_elf_new_section_hook
88 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
89 #define bfd_elf64_get_synthetic_symtab        ppc64_elf_get_synthetic_symtab
90 #define bfd_elf64_bfd_link_just_syms          ppc64_elf_link_just_syms
91 #define bfd_elf64_bfd_gc_sections             ppc64_elf_gc_sections
92
93 #define elf_backend_object_p                  ppc64_elf_object_p
94 #define elf_backend_grok_prstatus             ppc64_elf_grok_prstatus
95 #define elf_backend_grok_psinfo               ppc64_elf_grok_psinfo
96 #define elf_backend_write_core_note           ppc64_elf_write_core_note
97 #define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
98 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
99 #define elf_backend_add_symbol_hook           ppc64_elf_add_symbol_hook
100 #define elf_backend_check_directives          ppc64_elf_before_check_relocs
101 #define elf_backend_notice_as_needed          ppc64_elf_notice_as_needed
102 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
103 #define elf_backend_check_relocs              ppc64_elf_check_relocs
104 #define elf_backend_relocs_compatible         _bfd_elf_relocs_compatible
105 #define elf_backend_gc_keep                   ppc64_elf_gc_keep
106 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
107 #define elf_backend_gc_mark_hook              ppc64_elf_gc_mark_hook
108 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
109 #define elf_backend_hide_symbol               ppc64_elf_hide_symbol
110 #define elf_backend_maybe_function_sym        ppc64_elf_maybe_function_sym
111 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
112 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
113 #define elf_backend_hash_symbol               ppc64_elf_hash_symbol
114 #define elf_backend_init_index_section        _bfd_elf_init_2_index_sections
115 #define elf_backend_action_discarded          ppc64_elf_action_discarded
116 #define elf_backend_relocate_section          ppc64_elf_relocate_section
117 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
118 #define elf_backend_reloc_type_class          ppc64_elf_reloc_type_class
119 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
120 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
121 #define elf_backend_special_sections          ppc64_elf_special_sections
122 #define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
123 #define elf_backend_merge_symbol              ppc64_elf_merge_symbol
124 #define elf_backend_get_reloc_section         bfd_get_section_by_name
125
126 /* The name of the dynamic interpreter.  This is put in the .interp
127    section.  */
128 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
129
130 /* The size in bytes of an entry in the procedure linkage table.  */
131 #define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
132
133 /* The initial size of the plt reserved for the dynamic linker.  */
134 #define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
135
136 /* Offsets to some stack save slots.  */
137 #define STK_LR 16
138 #define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
139 /* This one is dodgy.  ELFv2 does not have a linker word, so use the
140    CR save slot.  Used only by optimised __tls_get_addr call stub,
141    relying on __tls_get_addr_opt not saving CR..  */
142 #define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
143
144 /* TOC base pointers offset from start of TOC.  */
145 #define TOC_BASE_OFF    0x8000
146 /* TOC base alignment.  */
147 #define TOC_BASE_ALIGN  256
148
149 /* Offset of tp and dtp pointers from start of TLS block.  */
150 #define TP_OFFSET       0x7000
151 #define DTP_OFFSET      0x8000
152
153 /* .plt call stub instructions.  The normal stub is like this, but
154    sometimes the .plt entry crosses a 64k boundary and we need to
155    insert an addi to adjust r11.  */
156 #define STD_R2_0R1      0xf8410000      /* std   %r2,0+40(%r1)       */
157 #define ADDIS_R11_R2    0x3d620000      /* addis %r11,%r2,xxx@ha     */
158 #define LD_R12_0R11     0xe98b0000      /* ld    %r12,xxx+0@l(%r11)  */
159 #define MTCTR_R12       0x7d8903a6      /* mtctr %r12                */
160 #define LD_R2_0R11      0xe84b0000      /* ld    %r2,xxx+8@l(%r11)   */
161 #define LD_R11_0R11     0xe96b0000      /* ld    %r11,xxx+16@l(%r11) */
162 #define BCTR            0x4e800420      /* bctr                      */
163
164 #define ADDI_R11_R11    0x396b0000      /* addi %r11,%r11,off@l  */
165 #define ADDIS_R2_R2     0x3c420000      /* addis %r2,%r2,off@ha  */
166 #define ADDI_R2_R2      0x38420000      /* addi  %r2,%r2,off@l   */
167
168 #define XOR_R2_R12_R12  0x7d826278      /* xor   %r2,%r12,%r12   */
169 #define ADD_R11_R11_R2  0x7d6b1214      /* add   %r11,%r11,%r2   */
170 #define XOR_R11_R12_R12 0x7d8b6278      /* xor   %r11,%r12,%r12  */
171 #define ADD_R2_R2_R11   0x7c425a14      /* add   %r2,%r2,%r11    */
172 #define CMPLDI_R2_0     0x28220000      /* cmpldi %r2,0          */
173 #define BNECTR          0x4ca20420      /* bnectr+               */
174 #define BNECTR_P4       0x4ce20420      /* bnectr+               */
175
176 #define LD_R12_0R2      0xe9820000      /* ld    %r12,xxx+0(%r2) */
177 #define LD_R11_0R2      0xe9620000      /* ld    %r11,xxx+0(%r2) */
178 #define LD_R2_0R2       0xe8420000      /* ld    %r2,xxx+0(%r2)  */
179
180 #define LD_R2_0R1       0xe8410000      /* ld    %r2,0(%r1)      */
181 #define LD_R2_0R12      0xe84c0000      /* ld    %r2,0(%r12)     */
182 #define ADD_R2_R2_R12   0x7c426214      /* add   %r2,%r2,%r12    */
183
184 #define LIS_R2          0x3c400000      /* lis %r2,xxx@ha         */
185 #define ADDIS_R2_R12    0x3c4c0000      /* addis %r2,%r12,xxx@ha  */
186 #define ADDIS_R12_R2    0x3d820000      /* addis %r12,%r2,xxx@ha  */
187 #define ADDIS_R12_R12   0x3d8c0000      /* addis %r12,%r12,xxx@ha */
188 #define LD_R12_0R12     0xe98c0000      /* ld    %r12,xxx@l(%r12) */
189
190 /* glink call stub instructions.  We enter with the index in R0.  */
191 #define GLINK_CALL_STUB_SIZE (16*4)
192                                         /* 0:                           */
193                                         /*  .quad plt0-1f               */
194                                         /* __glink:                     */
195 #define MFLR_R12        0x7d8802a6      /*  mflr %12                    */
196 #define BCL_20_31       0x429f0005      /*  bcl 20,31,1f                */
197                                         /* 1:                           */
198 #define MFLR_R11        0x7d6802a6      /*  mflr %11                    */
199                                         /*  ld %2,(0b-1b)(%11)          */
200 #define MTLR_R12        0x7d8803a6      /*  mtlr %12                    */
201 #define ADD_R11_R2_R11  0x7d625a14      /*  add %11,%2,%11              */
202                                         /*  ld %12,0(%11)               */
203                                         /*  ld %2,8(%11)                */
204                                         /*  mtctr %12                   */
205                                         /*  ld %11,16(%11)              */
206                                         /*  bctr                        */
207 #define MFLR_R0         0x7c0802a6      /*  mflr %r0                    */
208 #define MTLR_R0         0x7c0803a6      /*  mtlr %r0                    */
209 #define SUB_R12_R12_R11 0x7d8b6050      /*  subf %r12,%r11,%r12         */
210 #define ADDI_R0_R12     0x380c0000      /*  addi %r0,%r12,0             */
211 #define SRDI_R0_R0_2    0x7800f082      /*  rldicl %r0,%r0,62,2         */
212
213 /* Pad with this.  */
214 #define NOP             0x60000000
215
216 /* Some other nops.  */
217 #define CROR_151515     0x4def7b82
218 #define CROR_313131     0x4ffffb82
219
220 /* .glink entries for the first 32k functions are two instructions.  */
221 #define LI_R0_0         0x38000000      /* li    %r0,0          */
222 #define B_DOT           0x48000000      /* b     .              */
223
224 /* After that, we need two instructions to load the index, followed by
225    a branch.  */
226 #define LIS_R0_0        0x3c000000      /* lis   %r0,0          */
227 #define ORI_R0_R0_0     0x60000000      /* ori   %r0,%r0,0      */
228
229 /* Instructions used by the save and restore reg functions.  */
230 #define STD_R0_0R1      0xf8010000      /* std   %r0,0(%r1)     */
231 #define STD_R0_0R12     0xf80c0000      /* std   %r0,0(%r12)    */
232 #define LD_R0_0R1       0xe8010000      /* ld    %r0,0(%r1)     */
233 #define LD_R0_0R12      0xe80c0000      /* ld    %r0,0(%r12)    */
234 #define STFD_FR0_0R1    0xd8010000      /* stfd  %fr0,0(%r1)    */
235 #define LFD_FR0_0R1     0xc8010000      /* lfd   %fr0,0(%r1)    */
236 #define LI_R12_0        0x39800000      /* li    %r12,0         */
237 #define STVX_VR0_R12_R0 0x7c0c01ce      /* stvx  %v0,%r12,%r0   */
238 #define LVX_VR0_R12_R0  0x7c0c00ce      /* lvx   %v0,%r12,%r0   */
239 #define MTLR_R0         0x7c0803a6      /* mtlr  %r0            */
240 #define BLR             0x4e800020      /* blr                  */
241
242 /* Since .opd is an array of descriptors and each entry will end up
243    with identical R_PPC64_RELATIVE relocs, there is really no need to
244    propagate .opd relocs;  The dynamic linker should be taught to
245    relocate .opd without reloc entries.  */
246 #ifndef NO_OPD_RELOCS
247 #define NO_OPD_RELOCS 0
248 #endif
249
250 #ifndef ARRAY_SIZE
251 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
252 #endif
253
254 static inline int
255 abiversion (bfd *abfd)
256 {
257   return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
258 }
259
260 static inline void
261 set_abiversion (bfd *abfd, int ver)
262 {
263   elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
264   elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
265 }
266 \f
267 #define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
268
269 /* Relocation HOWTO's.  */
270 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
271
272 static reloc_howto_type ppc64_elf_howto_raw[] = {
273   /* This reloc does nothing.  */
274   HOWTO (R_PPC64_NONE,          /* type */
275          0,                     /* rightshift */
276          3,                     /* size (0 = byte, 1 = short, 2 = long) */
277          0,                     /* bitsize */
278          FALSE,                 /* pc_relative */
279          0,                     /* bitpos */
280          complain_overflow_dont, /* complain_on_overflow */
281          bfd_elf_generic_reloc, /* special_function */
282          "R_PPC64_NONE",        /* name */
283          FALSE,                 /* partial_inplace */
284          0,                     /* src_mask */
285          0,                     /* dst_mask */
286          FALSE),                /* pcrel_offset */
287
288   /* A standard 32 bit relocation.  */
289   HOWTO (R_PPC64_ADDR32,        /* type */
290          0,                     /* rightshift */
291          2,                     /* size (0 = byte, 1 = short, 2 = long) */
292          32,                    /* bitsize */
293          FALSE,                 /* pc_relative */
294          0,                     /* bitpos */
295          complain_overflow_bitfield, /* complain_on_overflow */
296          bfd_elf_generic_reloc, /* special_function */
297          "R_PPC64_ADDR32",      /* name */
298          FALSE,                 /* partial_inplace */
299          0,                     /* src_mask */
300          0xffffffff,            /* dst_mask */
301          FALSE),                /* pcrel_offset */
302
303   /* An absolute 26 bit branch; the lower two bits must be zero.
304      FIXME: we don't check that, we just clear them.  */
305   HOWTO (R_PPC64_ADDR24,        /* type */
306          0,                     /* rightshift */
307          2,                     /* size (0 = byte, 1 = short, 2 = long) */
308          26,                    /* bitsize */
309          FALSE,                 /* pc_relative */
310          0,                     /* bitpos */
311          complain_overflow_bitfield, /* complain_on_overflow */
312          bfd_elf_generic_reloc, /* special_function */
313          "R_PPC64_ADDR24",      /* name */
314          FALSE,                 /* partial_inplace */
315          0,                     /* src_mask */
316          0x03fffffc,            /* dst_mask */
317          FALSE),                /* pcrel_offset */
318
319   /* A standard 16 bit relocation.  */
320   HOWTO (R_PPC64_ADDR16,        /* type */
321          0,                     /* rightshift */
322          1,                     /* size (0 = byte, 1 = short, 2 = long) */
323          16,                    /* bitsize */
324          FALSE,                 /* pc_relative */
325          0,                     /* bitpos */
326          complain_overflow_bitfield, /* complain_on_overflow */
327          bfd_elf_generic_reloc, /* special_function */
328          "R_PPC64_ADDR16",      /* name */
329          FALSE,                 /* partial_inplace */
330          0,                     /* src_mask */
331          0xffff,                /* dst_mask */
332          FALSE),                /* pcrel_offset */
333
334   /* A 16 bit relocation without overflow.  */
335   HOWTO (R_PPC64_ADDR16_LO,     /* type */
336          0,                     /* rightshift */
337          1,                     /* size (0 = byte, 1 = short, 2 = long) */
338          16,                    /* bitsize */
339          FALSE,                 /* pc_relative */
340          0,                     /* bitpos */
341          complain_overflow_dont,/* complain_on_overflow */
342          bfd_elf_generic_reloc, /* special_function */
343          "R_PPC64_ADDR16_LO",   /* name */
344          FALSE,                 /* partial_inplace */
345          0,                     /* src_mask */
346          0xffff,                /* dst_mask */
347          FALSE),                /* pcrel_offset */
348
349   /* Bits 16-31 of an address.  */
350   HOWTO (R_PPC64_ADDR16_HI,     /* type */
351          16,                    /* rightshift */
352          1,                     /* size (0 = byte, 1 = short, 2 = long) */
353          16,                    /* bitsize */
354          FALSE,                 /* pc_relative */
355          0,                     /* bitpos */
356          complain_overflow_signed, /* complain_on_overflow */
357          bfd_elf_generic_reloc, /* special_function */
358          "R_PPC64_ADDR16_HI",   /* name */
359          FALSE,                 /* partial_inplace */
360          0,                     /* src_mask */
361          0xffff,                /* dst_mask */
362          FALSE),                /* pcrel_offset */
363
364   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
365      bits, treated as a signed number, is negative.  */
366   HOWTO (R_PPC64_ADDR16_HA,     /* type */
367          16,                    /* rightshift */
368          1,                     /* size (0 = byte, 1 = short, 2 = long) */
369          16,                    /* bitsize */
370          FALSE,                 /* pc_relative */
371          0,                     /* bitpos */
372          complain_overflow_signed, /* complain_on_overflow */
373          ppc64_elf_ha_reloc,    /* special_function */
374          "R_PPC64_ADDR16_HA",   /* name */
375          FALSE,                 /* partial_inplace */
376          0,                     /* src_mask */
377          0xffff,                /* dst_mask */
378          FALSE),                /* pcrel_offset */
379
380   /* An absolute 16 bit branch; the lower two bits must be zero.
381      FIXME: we don't check that, we just clear them.  */
382   HOWTO (R_PPC64_ADDR14,        /* type */
383          0,                     /* rightshift */
384          2,                     /* size (0 = byte, 1 = short, 2 = long) */
385          16,                    /* bitsize */
386          FALSE,                 /* pc_relative */
387          0,                     /* bitpos */
388          complain_overflow_signed, /* complain_on_overflow */
389          ppc64_elf_branch_reloc, /* special_function */
390          "R_PPC64_ADDR14",      /* name */
391          FALSE,                 /* partial_inplace */
392          0,                     /* src_mask */
393          0x0000fffc,            /* dst_mask */
394          FALSE),                /* pcrel_offset */
395
396   /* An absolute 16 bit branch, for which bit 10 should be set to
397      indicate that the branch is expected to be taken.  The lower two
398      bits must be zero.  */
399   HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
400          0,                     /* rightshift */
401          2,                     /* size (0 = byte, 1 = short, 2 = long) */
402          16,                    /* bitsize */
403          FALSE,                 /* pc_relative */
404          0,                     /* bitpos */
405          complain_overflow_signed, /* complain_on_overflow */
406          ppc64_elf_brtaken_reloc, /* special_function */
407          "R_PPC64_ADDR14_BRTAKEN",/* name */
408          FALSE,                 /* partial_inplace */
409          0,                     /* src_mask */
410          0x0000fffc,            /* dst_mask */
411          FALSE),                /* pcrel_offset */
412
413   /* An absolute 16 bit branch, for which bit 10 should be set to
414      indicate that the branch is not expected to be taken.  The lower
415      two bits must be zero.  */
416   HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
417          0,                     /* rightshift */
418          2,                     /* size (0 = byte, 1 = short, 2 = long) */
419          16,                    /* bitsize */
420          FALSE,                 /* pc_relative */
421          0,                     /* bitpos */
422          complain_overflow_signed, /* complain_on_overflow */
423          ppc64_elf_brtaken_reloc, /* special_function */
424          "R_PPC64_ADDR14_BRNTAKEN",/* name */
425          FALSE,                 /* partial_inplace */
426          0,                     /* src_mask */
427          0x0000fffc,            /* dst_mask */
428          FALSE),                /* pcrel_offset */
429
430   /* A relative 26 bit branch; the lower two bits must be zero.  */
431   HOWTO (R_PPC64_REL24,         /* type */
432          0,                     /* rightshift */
433          2,                     /* size (0 = byte, 1 = short, 2 = long) */
434          26,                    /* bitsize */
435          TRUE,                  /* pc_relative */
436          0,                     /* bitpos */
437          complain_overflow_signed, /* complain_on_overflow */
438          ppc64_elf_branch_reloc, /* special_function */
439          "R_PPC64_REL24",       /* name */
440          FALSE,                 /* partial_inplace */
441          0,                     /* src_mask */
442          0x03fffffc,            /* dst_mask */
443          TRUE),                 /* pcrel_offset */
444
445   /* A relative 16 bit branch; the lower two bits must be zero.  */
446   HOWTO (R_PPC64_REL14,         /* type */
447          0,                     /* rightshift */
448          2,                     /* size (0 = byte, 1 = short, 2 = long) */
449          16,                    /* bitsize */
450          TRUE,                  /* pc_relative */
451          0,                     /* bitpos */
452          complain_overflow_signed, /* complain_on_overflow */
453          ppc64_elf_branch_reloc, /* special_function */
454          "R_PPC64_REL14",       /* name */
455          FALSE,                 /* partial_inplace */
456          0,                     /* src_mask */
457          0x0000fffc,            /* dst_mask */
458          TRUE),                 /* pcrel_offset */
459
460   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
461      the branch is expected to be taken.  The lower two bits must be
462      zero.  */
463   HOWTO (R_PPC64_REL14_BRTAKEN, /* type */
464          0,                     /* rightshift */
465          2,                     /* size (0 = byte, 1 = short, 2 = long) */
466          16,                    /* bitsize */
467          TRUE,                  /* pc_relative */
468          0,                     /* bitpos */
469          complain_overflow_signed, /* complain_on_overflow */
470          ppc64_elf_brtaken_reloc, /* special_function */
471          "R_PPC64_REL14_BRTAKEN", /* name */
472          FALSE,                 /* partial_inplace */
473          0,                     /* src_mask */
474          0x0000fffc,            /* dst_mask */
475          TRUE),                 /* pcrel_offset */
476
477   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
478      the branch is not expected to be taken.  The lower two bits must
479      be zero.  */
480   HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
481          0,                     /* rightshift */
482          2,                     /* size (0 = byte, 1 = short, 2 = long) */
483          16,                    /* bitsize */
484          TRUE,                  /* pc_relative */
485          0,                     /* bitpos */
486          complain_overflow_signed, /* complain_on_overflow */
487          ppc64_elf_brtaken_reloc, /* special_function */
488          "R_PPC64_REL14_BRNTAKEN",/* name */
489          FALSE,                 /* partial_inplace */
490          0,                     /* src_mask */
491          0x0000fffc,            /* dst_mask */
492          TRUE),                 /* pcrel_offset */
493
494   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
495      symbol.  */
496   HOWTO (R_PPC64_GOT16,         /* type */
497          0,                     /* rightshift */
498          1,                     /* size (0 = byte, 1 = short, 2 = long) */
499          16,                    /* bitsize */
500          FALSE,                 /* pc_relative */
501          0,                     /* bitpos */
502          complain_overflow_signed, /* complain_on_overflow */
503          ppc64_elf_unhandled_reloc, /* special_function */
504          "R_PPC64_GOT16",       /* name */
505          FALSE,                 /* partial_inplace */
506          0,                     /* src_mask */
507          0xffff,                /* dst_mask */
508          FALSE),                /* pcrel_offset */
509
510   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
511      the symbol.  */
512   HOWTO (R_PPC64_GOT16_LO,      /* type */
513          0,                     /* rightshift */
514          1,                     /* size (0 = byte, 1 = short, 2 = long) */
515          16,                    /* bitsize */
516          FALSE,                 /* pc_relative */
517          0,                     /* bitpos */
518          complain_overflow_dont, /* complain_on_overflow */
519          ppc64_elf_unhandled_reloc, /* special_function */
520          "R_PPC64_GOT16_LO",    /* name */
521          FALSE,                 /* partial_inplace */
522          0,                     /* src_mask */
523          0xffff,                /* dst_mask */
524          FALSE),                /* pcrel_offset */
525
526   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
527      the symbol.  */
528   HOWTO (R_PPC64_GOT16_HI,      /* type */
529          16,                    /* rightshift */
530          1,                     /* size (0 = byte, 1 = short, 2 = long) */
531          16,                    /* bitsize */
532          FALSE,                 /* pc_relative */
533          0,                     /* bitpos */
534          complain_overflow_signed,/* complain_on_overflow */
535          ppc64_elf_unhandled_reloc, /* special_function */
536          "R_PPC64_GOT16_HI",    /* name */
537          FALSE,                 /* partial_inplace */
538          0,                     /* src_mask */
539          0xffff,                /* dst_mask */
540          FALSE),                /* pcrel_offset */
541
542   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
543      the symbol.  */
544   HOWTO (R_PPC64_GOT16_HA,      /* type */
545          16,                    /* rightshift */
546          1,                     /* size (0 = byte, 1 = short, 2 = long) */
547          16,                    /* bitsize */
548          FALSE,                 /* pc_relative */
549          0,                     /* bitpos */
550          complain_overflow_signed,/* complain_on_overflow */
551          ppc64_elf_unhandled_reloc, /* special_function */
552          "R_PPC64_GOT16_HA",    /* name */
553          FALSE,                 /* partial_inplace */
554          0,                     /* src_mask */
555          0xffff,                /* dst_mask */
556          FALSE),                /* pcrel_offset */
557
558   /* This is used only by the dynamic linker.  The symbol should exist
559      both in the object being run and in some shared library.  The
560      dynamic linker copies the data addressed by the symbol from the
561      shared library into the object, because the object being
562      run has to have the data at some particular address.  */
563   HOWTO (R_PPC64_COPY,          /* type */
564          0,                     /* rightshift */
565          0,                     /* this one is variable size */
566          0,                     /* bitsize */
567          FALSE,                 /* pc_relative */
568          0,                     /* bitpos */
569          complain_overflow_dont, /* complain_on_overflow */
570          ppc64_elf_unhandled_reloc, /* special_function */
571          "R_PPC64_COPY",        /* name */
572          FALSE,                 /* partial_inplace */
573          0,                     /* src_mask */
574          0,                     /* dst_mask */
575          FALSE),                /* pcrel_offset */
576
577   /* Like R_PPC64_ADDR64, but used when setting global offset table
578      entries.  */
579   HOWTO (R_PPC64_GLOB_DAT,      /* type */
580          0,                     /* rightshift */
581          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
582          64,                    /* bitsize */
583          FALSE,                 /* pc_relative */
584          0,                     /* bitpos */
585          complain_overflow_dont, /* complain_on_overflow */
586          ppc64_elf_unhandled_reloc,  /* special_function */
587          "R_PPC64_GLOB_DAT",    /* name */
588          FALSE,                 /* partial_inplace */
589          0,                     /* src_mask */
590          ONES (64),             /* dst_mask */
591          FALSE),                /* pcrel_offset */
592
593   /* Created by the link editor.  Marks a procedure linkage table
594      entry for a symbol.  */
595   HOWTO (R_PPC64_JMP_SLOT,      /* type */
596          0,                     /* rightshift */
597          0,                     /* size (0 = byte, 1 = short, 2 = long) */
598          0,                     /* bitsize */
599          FALSE,                 /* pc_relative */
600          0,                     /* bitpos */
601          complain_overflow_dont, /* complain_on_overflow */
602          ppc64_elf_unhandled_reloc, /* special_function */
603          "R_PPC64_JMP_SLOT",    /* name */
604          FALSE,                 /* partial_inplace */
605          0,                     /* src_mask */
606          0,                     /* dst_mask */
607          FALSE),                /* pcrel_offset */
608
609   /* Used only by the dynamic linker.  When the object is run, this
610      doubleword64 is set to the load address of the object, plus the
611      addend.  */
612   HOWTO (R_PPC64_RELATIVE,      /* type */
613          0,                     /* rightshift */
614          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
615          64,                    /* bitsize */
616          FALSE,                 /* pc_relative */
617          0,                     /* bitpos */
618          complain_overflow_dont, /* complain_on_overflow */
619          bfd_elf_generic_reloc, /* special_function */
620          "R_PPC64_RELATIVE",    /* name */
621          FALSE,                 /* partial_inplace */
622          0,                     /* src_mask */
623          ONES (64),             /* dst_mask */
624          FALSE),                /* pcrel_offset */
625
626   /* Like R_PPC64_ADDR32, but may be unaligned.  */
627   HOWTO (R_PPC64_UADDR32,       /* type */
628          0,                     /* rightshift */
629          2,                     /* size (0 = byte, 1 = short, 2 = long) */
630          32,                    /* bitsize */
631          FALSE,                 /* pc_relative */
632          0,                     /* bitpos */
633          complain_overflow_bitfield, /* complain_on_overflow */
634          bfd_elf_generic_reloc, /* special_function */
635          "R_PPC64_UADDR32",     /* name */
636          FALSE,                 /* partial_inplace */
637          0,                     /* src_mask */
638          0xffffffff,            /* dst_mask */
639          FALSE),                /* pcrel_offset */
640
641   /* Like R_PPC64_ADDR16, but may be unaligned.  */
642   HOWTO (R_PPC64_UADDR16,       /* type */
643          0,                     /* rightshift */
644          1,                     /* size (0 = byte, 1 = short, 2 = long) */
645          16,                    /* bitsize */
646          FALSE,                 /* pc_relative */
647          0,                     /* bitpos */
648          complain_overflow_bitfield, /* complain_on_overflow */
649          bfd_elf_generic_reloc, /* special_function */
650          "R_PPC64_UADDR16",     /* name */
651          FALSE,                 /* partial_inplace */
652          0,                     /* src_mask */
653          0xffff,                /* dst_mask */
654          FALSE),                /* pcrel_offset */
655
656   /* 32-bit PC relative.  */
657   HOWTO (R_PPC64_REL32,         /* type */
658          0,                     /* rightshift */
659          2,                     /* size (0 = byte, 1 = short, 2 = long) */
660          32,                    /* bitsize */
661          TRUE,                  /* pc_relative */
662          0,                     /* bitpos */
663          complain_overflow_signed, /* complain_on_overflow */
664          bfd_elf_generic_reloc, /* special_function */
665          "R_PPC64_REL32",       /* name */
666          FALSE,                 /* partial_inplace */
667          0,                     /* src_mask */
668          0xffffffff,            /* dst_mask */
669          TRUE),                 /* pcrel_offset */
670
671   /* 32-bit relocation to the symbol's procedure linkage table.  */
672   HOWTO (R_PPC64_PLT32,         /* type */
673          0,                     /* rightshift */
674          2,                     /* size (0 = byte, 1 = short, 2 = long) */
675          32,                    /* bitsize */
676          FALSE,                 /* pc_relative */
677          0,                     /* bitpos */
678          complain_overflow_bitfield, /* complain_on_overflow */
679          ppc64_elf_unhandled_reloc, /* special_function */
680          "R_PPC64_PLT32",       /* name */
681          FALSE,                 /* partial_inplace */
682          0,                     /* src_mask */
683          0xffffffff,            /* dst_mask */
684          FALSE),                /* pcrel_offset */
685
686   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
687      FIXME: R_PPC64_PLTREL32 not supported.  */
688   HOWTO (R_PPC64_PLTREL32,      /* type */
689          0,                     /* rightshift */
690          2,                     /* size (0 = byte, 1 = short, 2 = long) */
691          32,                    /* bitsize */
692          TRUE,                  /* pc_relative */
693          0,                     /* bitpos */
694          complain_overflow_signed, /* complain_on_overflow */
695          ppc64_elf_unhandled_reloc, /* special_function */
696          "R_PPC64_PLTREL32",    /* name */
697          FALSE,                 /* partial_inplace */
698          0,                     /* src_mask */
699          0xffffffff,            /* dst_mask */
700          TRUE),                 /* pcrel_offset */
701
702   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
703      the symbol.  */
704   HOWTO (R_PPC64_PLT16_LO,      /* type */
705          0,                     /* rightshift */
706          1,                     /* size (0 = byte, 1 = short, 2 = long) */
707          16,                    /* bitsize */
708          FALSE,                 /* pc_relative */
709          0,                     /* bitpos */
710          complain_overflow_dont, /* complain_on_overflow */
711          ppc64_elf_unhandled_reloc, /* special_function */
712          "R_PPC64_PLT16_LO",    /* name */
713          FALSE,                 /* partial_inplace */
714          0,                     /* src_mask */
715          0xffff,                /* dst_mask */
716          FALSE),                /* pcrel_offset */
717
718   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
719      the symbol.  */
720   HOWTO (R_PPC64_PLT16_HI,      /* type */
721          16,                    /* rightshift */
722          1,                     /* size (0 = byte, 1 = short, 2 = long) */
723          16,                    /* bitsize */
724          FALSE,                 /* pc_relative */
725          0,                     /* bitpos */
726          complain_overflow_signed, /* complain_on_overflow */
727          ppc64_elf_unhandled_reloc, /* special_function */
728          "R_PPC64_PLT16_HI",    /* name */
729          FALSE,                 /* partial_inplace */
730          0,                     /* src_mask */
731          0xffff,                /* dst_mask */
732          FALSE),                /* pcrel_offset */
733
734   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
735      the symbol.  */
736   HOWTO (R_PPC64_PLT16_HA,      /* type */
737          16,                    /* rightshift */
738          1,                     /* size (0 = byte, 1 = short, 2 = long) */
739          16,                    /* bitsize */
740          FALSE,                 /* pc_relative */
741          0,                     /* bitpos */
742          complain_overflow_signed, /* complain_on_overflow */
743          ppc64_elf_unhandled_reloc, /* special_function */
744          "R_PPC64_PLT16_HA",    /* name */
745          FALSE,                 /* partial_inplace */
746          0,                     /* src_mask */
747          0xffff,                /* dst_mask */
748          FALSE),                /* pcrel_offset */
749
750   /* 16-bit section relative relocation.  */
751   HOWTO (R_PPC64_SECTOFF,       /* type */
752          0,                     /* rightshift */
753          1,                     /* size (0 = byte, 1 = short, 2 = long) */
754          16,                    /* bitsize */
755          FALSE,                 /* pc_relative */
756          0,                     /* bitpos */
757          complain_overflow_signed, /* complain_on_overflow */
758          ppc64_elf_sectoff_reloc, /* special_function */
759          "R_PPC64_SECTOFF",     /* name */
760          FALSE,                 /* partial_inplace */
761          0,                     /* src_mask */
762          0xffff,                /* dst_mask */
763          FALSE),                /* pcrel_offset */
764
765   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
766   HOWTO (R_PPC64_SECTOFF_LO,    /* type */
767          0,                     /* rightshift */
768          1,                     /* size (0 = byte, 1 = short, 2 = long) */
769          16,                    /* bitsize */
770          FALSE,                 /* pc_relative */
771          0,                     /* bitpos */
772          complain_overflow_dont, /* complain_on_overflow */
773          ppc64_elf_sectoff_reloc, /* special_function */
774          "R_PPC64_SECTOFF_LO",  /* name */
775          FALSE,                 /* partial_inplace */
776          0,                     /* src_mask */
777          0xffff,                /* dst_mask */
778          FALSE),                /* pcrel_offset */
779
780   /* 16-bit upper half section relative relocation.  */
781   HOWTO (R_PPC64_SECTOFF_HI,    /* type */
782          16,                    /* rightshift */
783          1,                     /* size (0 = byte, 1 = short, 2 = long) */
784          16,                    /* bitsize */
785          FALSE,                 /* pc_relative */
786          0,                     /* bitpos */
787          complain_overflow_signed, /* complain_on_overflow */
788          ppc64_elf_sectoff_reloc, /* special_function */
789          "R_PPC64_SECTOFF_HI",  /* name */
790          FALSE,                 /* partial_inplace */
791          0,                     /* src_mask */
792          0xffff,                /* dst_mask */
793          FALSE),                /* pcrel_offset */
794
795   /* 16-bit upper half adjusted section relative relocation.  */
796   HOWTO (R_PPC64_SECTOFF_HA,    /* type */
797          16,                    /* rightshift */
798          1,                     /* size (0 = byte, 1 = short, 2 = long) */
799          16,                    /* bitsize */
800          FALSE,                 /* pc_relative */
801          0,                     /* bitpos */
802          complain_overflow_signed, /* complain_on_overflow */
803          ppc64_elf_sectoff_ha_reloc, /* special_function */
804          "R_PPC64_SECTOFF_HA",  /* name */
805          FALSE,                 /* partial_inplace */
806          0,                     /* src_mask */
807          0xffff,                /* dst_mask */
808          FALSE),                /* pcrel_offset */
809
810   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
811   HOWTO (R_PPC64_REL30,         /* type */
812          2,                     /* rightshift */
813          2,                     /* size (0 = byte, 1 = short, 2 = long) */
814          30,                    /* bitsize */
815          TRUE,                  /* pc_relative */
816          0,                     /* bitpos */
817          complain_overflow_dont, /* complain_on_overflow */
818          bfd_elf_generic_reloc, /* special_function */
819          "R_PPC64_REL30",       /* name */
820          FALSE,                 /* partial_inplace */
821          0,                     /* src_mask */
822          0xfffffffc,            /* dst_mask */
823          TRUE),                 /* pcrel_offset */
824
825   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
826
827   /* A standard 64-bit relocation.  */
828   HOWTO (R_PPC64_ADDR64,        /* type */
829          0,                     /* rightshift */
830          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
831          64,                    /* bitsize */
832          FALSE,                 /* pc_relative */
833          0,                     /* bitpos */
834          complain_overflow_dont, /* complain_on_overflow */
835          bfd_elf_generic_reloc, /* special_function */
836          "R_PPC64_ADDR64",      /* name */
837          FALSE,                 /* partial_inplace */
838          0,                     /* src_mask */
839          ONES (64),             /* dst_mask */
840          FALSE),                /* pcrel_offset */
841
842   /* The bits 32-47 of an address.  */
843   HOWTO (R_PPC64_ADDR16_HIGHER, /* type */
844          32,                    /* rightshift */
845          1,                     /* size (0 = byte, 1 = short, 2 = long) */
846          16,                    /* bitsize */
847          FALSE,                 /* pc_relative */
848          0,                     /* bitpos */
849          complain_overflow_dont, /* complain_on_overflow */
850          bfd_elf_generic_reloc, /* special_function */
851          "R_PPC64_ADDR16_HIGHER", /* name */
852          FALSE,                 /* partial_inplace */
853          0,                     /* src_mask */
854          0xffff,                /* dst_mask */
855          FALSE),                /* pcrel_offset */
856
857   /* The bits 32-47 of an address, plus 1 if the contents of the low
858      16 bits, treated as a signed number, is negative.  */
859   HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
860          32,                    /* rightshift */
861          1,                     /* size (0 = byte, 1 = short, 2 = long) */
862          16,                    /* bitsize */
863          FALSE,                 /* pc_relative */
864          0,                     /* bitpos */
865          complain_overflow_dont, /* complain_on_overflow */
866          ppc64_elf_ha_reloc,    /* special_function */
867          "R_PPC64_ADDR16_HIGHERA", /* name */
868          FALSE,                 /* partial_inplace */
869          0,                     /* src_mask */
870          0xffff,                /* dst_mask */
871          FALSE),                /* pcrel_offset */
872
873   /* The bits 48-63 of an address.  */
874   HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
875          48,                    /* rightshift */
876          1,                     /* size (0 = byte, 1 = short, 2 = long) */
877          16,                    /* bitsize */
878          FALSE,                 /* pc_relative */
879          0,                     /* bitpos */
880          complain_overflow_dont, /* complain_on_overflow */
881          bfd_elf_generic_reloc, /* special_function */
882          "R_PPC64_ADDR16_HIGHEST", /* name */
883          FALSE,                 /* partial_inplace */
884          0,                     /* src_mask */
885          0xffff,                /* dst_mask */
886          FALSE),                /* pcrel_offset */
887
888   /* The bits 48-63 of an address, plus 1 if the contents of the low
889      16 bits, treated as a signed number, is negative.  */
890   HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
891          48,                    /* rightshift */
892          1,                     /* size (0 = byte, 1 = short, 2 = long) */
893          16,                    /* bitsize */
894          FALSE,                 /* pc_relative */
895          0,                     /* bitpos */
896          complain_overflow_dont, /* complain_on_overflow */
897          ppc64_elf_ha_reloc,    /* special_function */
898          "R_PPC64_ADDR16_HIGHESTA", /* name */
899          FALSE,                 /* partial_inplace */
900          0,                     /* src_mask */
901          0xffff,                /* dst_mask */
902          FALSE),                /* pcrel_offset */
903
904   /* Like ADDR64, but may be unaligned.  */
905   HOWTO (R_PPC64_UADDR64,       /* type */
906          0,                     /* rightshift */
907          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
908          64,                    /* bitsize */
909          FALSE,                 /* pc_relative */
910          0,                     /* bitpos */
911          complain_overflow_dont, /* complain_on_overflow */
912          bfd_elf_generic_reloc, /* special_function */
913          "R_PPC64_UADDR64",     /* name */
914          FALSE,                 /* partial_inplace */
915          0,                     /* src_mask */
916          ONES (64),             /* dst_mask */
917          FALSE),                /* pcrel_offset */
918
919   /* 64-bit relative relocation.  */
920   HOWTO (R_PPC64_REL64,         /* type */
921          0,                     /* rightshift */
922          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
923          64,                    /* bitsize */
924          TRUE,                  /* pc_relative */
925          0,                     /* bitpos */
926          complain_overflow_dont, /* complain_on_overflow */
927          bfd_elf_generic_reloc, /* special_function */
928          "R_PPC64_REL64",       /* name */
929          FALSE,                 /* partial_inplace */
930          0,                     /* src_mask */
931          ONES (64),             /* dst_mask */
932          TRUE),                 /* pcrel_offset */
933
934   /* 64-bit relocation to the symbol's procedure linkage table.  */
935   HOWTO (R_PPC64_PLT64,         /* type */
936          0,                     /* rightshift */
937          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
938          64,                    /* bitsize */
939          FALSE,                 /* pc_relative */
940          0,                     /* bitpos */
941          complain_overflow_dont, /* complain_on_overflow */
942          ppc64_elf_unhandled_reloc, /* special_function */
943          "R_PPC64_PLT64",       /* name */
944          FALSE,                 /* partial_inplace */
945          0,                     /* src_mask */
946          ONES (64),             /* dst_mask */
947          FALSE),                /* pcrel_offset */
948
949   /* 64-bit PC relative relocation to the symbol's procedure linkage
950      table.  */
951   /* FIXME: R_PPC64_PLTREL64 not supported.  */
952   HOWTO (R_PPC64_PLTREL64,      /* type */
953          0,                     /* rightshift */
954          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
955          64,                    /* bitsize */
956          TRUE,                  /* pc_relative */
957          0,                     /* bitpos */
958          complain_overflow_dont, /* complain_on_overflow */
959          ppc64_elf_unhandled_reloc, /* special_function */
960          "R_PPC64_PLTREL64",    /* name */
961          FALSE,                 /* partial_inplace */
962          0,                     /* src_mask */
963          ONES (64),             /* dst_mask */
964          TRUE),                 /* pcrel_offset */
965
966   /* 16 bit TOC-relative relocation.  */
967
968   /* R_PPC64_TOC16        47       half16*      S + A - .TOC.  */
969   HOWTO (R_PPC64_TOC16,         /* type */
970          0,                     /* rightshift */
971          1,                     /* size (0 = byte, 1 = short, 2 = long) */
972          16,                    /* bitsize */
973          FALSE,                 /* pc_relative */
974          0,                     /* bitpos */
975          complain_overflow_signed, /* complain_on_overflow */
976          ppc64_elf_toc_reloc,   /* special_function */
977          "R_PPC64_TOC16",       /* name */
978          FALSE,                 /* partial_inplace */
979          0,                     /* src_mask */
980          0xffff,                /* dst_mask */
981          FALSE),                /* pcrel_offset */
982
983   /* 16 bit TOC-relative relocation without overflow.  */
984
985   /* R_PPC64_TOC16_LO     48       half16        #lo (S + A - .TOC.)  */
986   HOWTO (R_PPC64_TOC16_LO,      /* type */
987          0,                     /* rightshift */
988          1,                     /* size (0 = byte, 1 = short, 2 = long) */
989          16,                    /* bitsize */
990          FALSE,                 /* pc_relative */
991          0,                     /* bitpos */
992          complain_overflow_dont, /* complain_on_overflow */
993          ppc64_elf_toc_reloc,   /* special_function */
994          "R_PPC64_TOC16_LO",    /* name */
995          FALSE,                 /* partial_inplace */
996          0,                     /* src_mask */
997          0xffff,                /* dst_mask */
998          FALSE),                /* pcrel_offset */
999
1000   /* 16 bit TOC-relative relocation, high 16 bits.  */
1001
1002   /* R_PPC64_TOC16_HI     49       half16        #hi (S + A - .TOC.)  */
1003   HOWTO (R_PPC64_TOC16_HI,      /* type */
1004          16,                    /* rightshift */
1005          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1006          16,                    /* bitsize */
1007          FALSE,                 /* pc_relative */
1008          0,                     /* bitpos */
1009          complain_overflow_signed, /* complain_on_overflow */
1010          ppc64_elf_toc_reloc,   /* special_function */
1011          "R_PPC64_TOC16_HI",    /* name */
1012          FALSE,                 /* partial_inplace */
1013          0,                     /* src_mask */
1014          0xffff,                /* dst_mask */
1015          FALSE),                /* pcrel_offset */
1016
1017   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
1018      contents of the low 16 bits, treated as a signed number, is
1019      negative.  */
1020
1021   /* R_PPC64_TOC16_HA     50       half16        #ha (S + A - .TOC.)  */
1022   HOWTO (R_PPC64_TOC16_HA,      /* type */
1023          16,                    /* rightshift */
1024          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1025          16,                    /* bitsize */
1026          FALSE,                 /* pc_relative */
1027          0,                     /* bitpos */
1028          complain_overflow_signed, /* complain_on_overflow */
1029          ppc64_elf_toc_ha_reloc, /* special_function */
1030          "R_PPC64_TOC16_HA",    /* name */
1031          FALSE,                 /* partial_inplace */
1032          0,                     /* src_mask */
1033          0xffff,                /* dst_mask */
1034          FALSE),                /* pcrel_offset */
1035
1036   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
1037
1038   /* R_PPC64_TOC                  51       doubleword64  .TOC.  */
1039   HOWTO (R_PPC64_TOC,           /* type */
1040          0,                     /* rightshift */
1041          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1042          64,                    /* bitsize */
1043          FALSE,                 /* pc_relative */
1044          0,                     /* bitpos */
1045          complain_overflow_dont, /* complain_on_overflow */
1046          ppc64_elf_toc64_reloc, /* special_function */
1047          "R_PPC64_TOC",         /* name */
1048          FALSE,                 /* partial_inplace */
1049          0,                     /* src_mask */
1050          ONES (64),             /* dst_mask */
1051          FALSE),                /* pcrel_offset */
1052
1053   /* Like R_PPC64_GOT16, but also informs the link editor that the
1054      value to relocate may (!) refer to a PLT entry which the link
1055      editor (a) may replace with the symbol value.  If the link editor
1056      is unable to fully resolve the symbol, it may (b) create a PLT
1057      entry and store the address to the new PLT entry in the GOT.
1058      This permits lazy resolution of function symbols at run time.
1059      The link editor may also skip all of this and just (c) emit a
1060      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
1061   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
1062     HOWTO (R_PPC64_PLTGOT16,    /* type */
1063          0,                     /* rightshift */
1064          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1065          16,                    /* bitsize */
1066          FALSE,                 /* pc_relative */
1067          0,                     /* bitpos */
1068          complain_overflow_signed, /* complain_on_overflow */
1069          ppc64_elf_unhandled_reloc, /* special_function */
1070          "R_PPC64_PLTGOT16",    /* name */
1071          FALSE,                 /* partial_inplace */
1072          0,                     /* src_mask */
1073          0xffff,                /* dst_mask */
1074          FALSE),                /* pcrel_offset */
1075
1076   /* Like R_PPC64_PLTGOT16, but without overflow.  */
1077   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1078   HOWTO (R_PPC64_PLTGOT16_LO,   /* type */
1079          0,                     /* rightshift */
1080          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1081          16,                    /* bitsize */
1082          FALSE,                 /* pc_relative */
1083          0,                     /* bitpos */
1084          complain_overflow_dont, /* complain_on_overflow */
1085          ppc64_elf_unhandled_reloc, /* special_function */
1086          "R_PPC64_PLTGOT16_LO", /* name */
1087          FALSE,                 /* partial_inplace */
1088          0,                     /* src_mask */
1089          0xffff,                /* dst_mask */
1090          FALSE),                /* pcrel_offset */
1091
1092   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
1093   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
1094   HOWTO (R_PPC64_PLTGOT16_HI,   /* type */
1095          16,                    /* rightshift */
1096          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1097          16,                    /* bitsize */
1098          FALSE,                 /* pc_relative */
1099          0,                     /* bitpos */
1100          complain_overflow_signed, /* complain_on_overflow */
1101          ppc64_elf_unhandled_reloc, /* special_function */
1102          "R_PPC64_PLTGOT16_HI", /* name */
1103          FALSE,                 /* partial_inplace */
1104          0,                     /* src_mask */
1105          0xffff,                /* dst_mask */
1106          FALSE),                /* pcrel_offset */
1107
1108   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
1109      1 if the contents of the low 16 bits, treated as a signed number,
1110      is negative.  */
1111   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
1112   HOWTO (R_PPC64_PLTGOT16_HA,   /* type */
1113          16,                    /* rightshift */
1114          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1115          16,                    /* bitsize */
1116          FALSE,                 /* pc_relative */
1117          0,                     /* bitpos */
1118          complain_overflow_signed, /* complain_on_overflow */
1119          ppc64_elf_unhandled_reloc, /* special_function */
1120          "R_PPC64_PLTGOT16_HA", /* name */
1121          FALSE,                 /* partial_inplace */
1122          0,                     /* src_mask */
1123          0xffff,                /* dst_mask */
1124          FALSE),                /* pcrel_offset */
1125
1126   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
1127   HOWTO (R_PPC64_ADDR16_DS,     /* type */
1128          0,                     /* rightshift */
1129          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1130          16,                    /* bitsize */
1131          FALSE,                 /* pc_relative */
1132          0,                     /* bitpos */
1133          complain_overflow_signed, /* complain_on_overflow */
1134          bfd_elf_generic_reloc, /* special_function */
1135          "R_PPC64_ADDR16_DS",   /* name */
1136          FALSE,                 /* partial_inplace */
1137          0,                     /* src_mask */
1138          0xfffc,                /* dst_mask */
1139          FALSE),                /* pcrel_offset */
1140
1141   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
1142   HOWTO (R_PPC64_ADDR16_LO_DS,  /* type */
1143          0,                     /* rightshift */
1144          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1145          16,                    /* bitsize */
1146          FALSE,                 /* pc_relative */
1147          0,                     /* bitpos */
1148          complain_overflow_dont,/* complain_on_overflow */
1149          bfd_elf_generic_reloc, /* special_function */
1150          "R_PPC64_ADDR16_LO_DS",/* name */
1151          FALSE,                 /* partial_inplace */
1152          0,                     /* src_mask */
1153          0xfffc,                /* dst_mask */
1154          FALSE),                /* pcrel_offset */
1155
1156   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
1157   HOWTO (R_PPC64_GOT16_DS,      /* type */
1158          0,                     /* rightshift */
1159          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1160          16,                    /* bitsize */
1161          FALSE,                 /* pc_relative */
1162          0,                     /* bitpos */
1163          complain_overflow_signed, /* complain_on_overflow */
1164          ppc64_elf_unhandled_reloc, /* special_function */
1165          "R_PPC64_GOT16_DS",    /* name */
1166          FALSE,                 /* partial_inplace */
1167          0,                     /* src_mask */
1168          0xfffc,                /* dst_mask */
1169          FALSE),                /* pcrel_offset */
1170
1171   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
1172   HOWTO (R_PPC64_GOT16_LO_DS,   /* type */
1173          0,                     /* rightshift */
1174          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1175          16,                    /* bitsize */
1176          FALSE,                 /* pc_relative */
1177          0,                     /* bitpos */
1178          complain_overflow_dont, /* complain_on_overflow */
1179          ppc64_elf_unhandled_reloc, /* special_function */
1180          "R_PPC64_GOT16_LO_DS", /* name */
1181          FALSE,                 /* partial_inplace */
1182          0,                     /* src_mask */
1183          0xfffc,                /* dst_mask */
1184          FALSE),                /* pcrel_offset */
1185
1186   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
1187   HOWTO (R_PPC64_PLT16_LO_DS,   /* type */
1188          0,                     /* rightshift */
1189          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1190          16,                    /* bitsize */
1191          FALSE,                 /* pc_relative */
1192          0,                     /* bitpos */
1193          complain_overflow_dont, /* complain_on_overflow */
1194          ppc64_elf_unhandled_reloc, /* special_function */
1195          "R_PPC64_PLT16_LO_DS", /* name */
1196          FALSE,                 /* partial_inplace */
1197          0,                     /* src_mask */
1198          0xfffc,                /* dst_mask */
1199          FALSE),                /* pcrel_offset */
1200
1201   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
1202   HOWTO (R_PPC64_SECTOFF_DS,    /* type */
1203          0,                     /* rightshift */
1204          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1205          16,                    /* bitsize */
1206          FALSE,                 /* pc_relative */
1207          0,                     /* bitpos */
1208          complain_overflow_signed, /* complain_on_overflow */
1209          ppc64_elf_sectoff_reloc, /* special_function */
1210          "R_PPC64_SECTOFF_DS",  /* name */
1211          FALSE,                 /* partial_inplace */
1212          0,                     /* src_mask */
1213          0xfffc,                /* dst_mask */
1214          FALSE),                /* pcrel_offset */
1215
1216   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
1217   HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
1218          0,                     /* rightshift */
1219          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1220          16,                    /* bitsize */
1221          FALSE,                 /* pc_relative */
1222          0,                     /* bitpos */
1223          complain_overflow_dont, /* complain_on_overflow */
1224          ppc64_elf_sectoff_reloc, /* special_function */
1225          "R_PPC64_SECTOFF_LO_DS",/* name */
1226          FALSE,                 /* partial_inplace */
1227          0,                     /* src_mask */
1228          0xfffc,                /* dst_mask */
1229          FALSE),                /* pcrel_offset */
1230
1231   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
1232   HOWTO (R_PPC64_TOC16_DS,      /* type */
1233          0,                     /* rightshift */
1234          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1235          16,                    /* bitsize */
1236          FALSE,                 /* pc_relative */
1237          0,                     /* bitpos */
1238          complain_overflow_signed, /* complain_on_overflow */
1239          ppc64_elf_toc_reloc,   /* special_function */
1240          "R_PPC64_TOC16_DS",    /* name */
1241          FALSE,                 /* partial_inplace */
1242          0,                     /* src_mask */
1243          0xfffc,                /* dst_mask */
1244          FALSE),                /* pcrel_offset */
1245
1246   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
1247   HOWTO (R_PPC64_TOC16_LO_DS,   /* type */
1248          0,                     /* rightshift */
1249          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1250          16,                    /* bitsize */
1251          FALSE,                 /* pc_relative */
1252          0,                     /* bitpos */
1253          complain_overflow_dont, /* complain_on_overflow */
1254          ppc64_elf_toc_reloc,   /* special_function */
1255          "R_PPC64_TOC16_LO_DS", /* name */
1256          FALSE,                 /* partial_inplace */
1257          0,                     /* src_mask */
1258          0xfffc,                /* dst_mask */
1259          FALSE),                /* pcrel_offset */
1260
1261   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
1262   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
1263   HOWTO (R_PPC64_PLTGOT16_DS,   /* type */
1264          0,                     /* rightshift */
1265          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1266          16,                    /* bitsize */
1267          FALSE,                 /* pc_relative */
1268          0,                     /* bitpos */
1269          complain_overflow_signed, /* complain_on_overflow */
1270          ppc64_elf_unhandled_reloc, /* special_function */
1271          "R_PPC64_PLTGOT16_DS", /* name */
1272          FALSE,                 /* partial_inplace */
1273          0,                     /* src_mask */
1274          0xfffc,                /* dst_mask */
1275          FALSE),                /* pcrel_offset */
1276
1277   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
1278   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1279   HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
1280          0,                     /* rightshift */
1281          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1282          16,                    /* bitsize */
1283          FALSE,                 /* pc_relative */
1284          0,                     /* bitpos */
1285          complain_overflow_dont, /* complain_on_overflow */
1286          ppc64_elf_unhandled_reloc, /* special_function */
1287          "R_PPC64_PLTGOT16_LO_DS",/* name */
1288          FALSE,                 /* partial_inplace */
1289          0,                     /* src_mask */
1290          0xfffc,                /* dst_mask */
1291          FALSE),                /* pcrel_offset */
1292
1293   /* Marker relocs for TLS.  */
1294   HOWTO (R_PPC64_TLS,
1295          0,                     /* rightshift */
1296          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1297          32,                    /* bitsize */
1298          FALSE,                 /* pc_relative */
1299          0,                     /* bitpos */
1300          complain_overflow_dont, /* complain_on_overflow */
1301          bfd_elf_generic_reloc, /* special_function */
1302          "R_PPC64_TLS",         /* name */
1303          FALSE,                 /* partial_inplace */
1304          0,                     /* src_mask */
1305          0,                     /* dst_mask */
1306          FALSE),                /* pcrel_offset */
1307
1308   HOWTO (R_PPC64_TLSGD,
1309          0,                     /* rightshift */
1310          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1311          32,                    /* bitsize */
1312          FALSE,                 /* pc_relative */
1313          0,                     /* bitpos */
1314          complain_overflow_dont, /* complain_on_overflow */
1315          bfd_elf_generic_reloc, /* special_function */
1316          "R_PPC64_TLSGD",       /* name */
1317          FALSE,                 /* partial_inplace */
1318          0,                     /* src_mask */
1319          0,                     /* dst_mask */
1320          FALSE),                /* pcrel_offset */
1321
1322   HOWTO (R_PPC64_TLSLD,
1323          0,                     /* rightshift */
1324          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1325          32,                    /* bitsize */
1326          FALSE,                 /* pc_relative */
1327          0,                     /* bitpos */
1328          complain_overflow_dont, /* complain_on_overflow */
1329          bfd_elf_generic_reloc, /* special_function */
1330          "R_PPC64_TLSLD",       /* name */
1331          FALSE,                 /* partial_inplace */
1332          0,                     /* src_mask */
1333          0,                     /* dst_mask */
1334          FALSE),                /* pcrel_offset */
1335
1336   HOWTO (R_PPC64_TOCSAVE,
1337          0,                     /* rightshift */
1338          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1339          32,                    /* bitsize */
1340          FALSE,                 /* pc_relative */
1341          0,                     /* bitpos */
1342          complain_overflow_dont, /* complain_on_overflow */
1343          bfd_elf_generic_reloc, /* special_function */
1344          "R_PPC64_TOCSAVE",     /* name */
1345          FALSE,                 /* partial_inplace */
1346          0,                     /* src_mask */
1347          0,                     /* dst_mask */
1348          FALSE),                /* pcrel_offset */
1349
1350   /* Computes the load module index of the load module that contains the
1351      definition of its TLS sym.  */
1352   HOWTO (R_PPC64_DTPMOD64,
1353          0,                     /* rightshift */
1354          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1355          64,                    /* bitsize */
1356          FALSE,                 /* pc_relative */
1357          0,                     /* bitpos */
1358          complain_overflow_dont, /* complain_on_overflow */
1359          ppc64_elf_unhandled_reloc, /* special_function */
1360          "R_PPC64_DTPMOD64",    /* name */
1361          FALSE,                 /* partial_inplace */
1362          0,                     /* src_mask */
1363          ONES (64),             /* dst_mask */
1364          FALSE),                /* pcrel_offset */
1365
1366   /* Computes a dtv-relative displacement, the difference between the value
1367      of sym+add and the base address of the thread-local storage block that
1368      contains the definition of sym, minus 0x8000.  */
1369   HOWTO (R_PPC64_DTPREL64,
1370          0,                     /* rightshift */
1371          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1372          64,                    /* bitsize */
1373          FALSE,                 /* pc_relative */
1374          0,                     /* bitpos */
1375          complain_overflow_dont, /* complain_on_overflow */
1376          ppc64_elf_unhandled_reloc, /* special_function */
1377          "R_PPC64_DTPREL64",    /* name */
1378          FALSE,                 /* partial_inplace */
1379          0,                     /* src_mask */
1380          ONES (64),             /* dst_mask */
1381          FALSE),                /* pcrel_offset */
1382
1383   /* A 16 bit dtprel reloc.  */
1384   HOWTO (R_PPC64_DTPREL16,
1385          0,                     /* rightshift */
1386          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1387          16,                    /* bitsize */
1388          FALSE,                 /* pc_relative */
1389          0,                     /* bitpos */
1390          complain_overflow_signed, /* complain_on_overflow */
1391          ppc64_elf_unhandled_reloc, /* special_function */
1392          "R_PPC64_DTPREL16",    /* name */
1393          FALSE,                 /* partial_inplace */
1394          0,                     /* src_mask */
1395          0xffff,                /* dst_mask */
1396          FALSE),                /* pcrel_offset */
1397
1398   /* Like DTPREL16, but no overflow.  */
1399   HOWTO (R_PPC64_DTPREL16_LO,
1400          0,                     /* rightshift */
1401          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1402          16,                    /* bitsize */
1403          FALSE,                 /* pc_relative */
1404          0,                     /* bitpos */
1405          complain_overflow_dont, /* complain_on_overflow */
1406          ppc64_elf_unhandled_reloc, /* special_function */
1407          "R_PPC64_DTPREL16_LO", /* name */
1408          FALSE,                 /* partial_inplace */
1409          0,                     /* src_mask */
1410          0xffff,                /* dst_mask */
1411          FALSE),                /* pcrel_offset */
1412
1413   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
1414   HOWTO (R_PPC64_DTPREL16_HI,
1415          16,                    /* rightshift */
1416          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1417          16,                    /* bitsize */
1418          FALSE,                 /* pc_relative */
1419          0,                     /* bitpos */
1420          complain_overflow_signed, /* complain_on_overflow */
1421          ppc64_elf_unhandled_reloc, /* special_function */
1422          "R_PPC64_DTPREL16_HI", /* name */
1423          FALSE,                 /* partial_inplace */
1424          0,                     /* src_mask */
1425          0xffff,                /* dst_mask */
1426          FALSE),                /* pcrel_offset */
1427
1428   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
1429   HOWTO (R_PPC64_DTPREL16_HA,
1430          16,                    /* rightshift */
1431          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1432          16,                    /* bitsize */
1433          FALSE,                 /* pc_relative */
1434          0,                     /* bitpos */
1435          complain_overflow_signed, /* complain_on_overflow */
1436          ppc64_elf_unhandled_reloc, /* special_function */
1437          "R_PPC64_DTPREL16_HA", /* name */
1438          FALSE,                 /* partial_inplace */
1439          0,                     /* src_mask */
1440          0xffff,                /* dst_mask */
1441          FALSE),                /* pcrel_offset */
1442
1443   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
1444   HOWTO (R_PPC64_DTPREL16_HIGHER,
1445          32,                    /* rightshift */
1446          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1447          16,                    /* bitsize */
1448          FALSE,                 /* pc_relative */
1449          0,                     /* bitpos */
1450          complain_overflow_dont, /* complain_on_overflow */
1451          ppc64_elf_unhandled_reloc, /* special_function */
1452          "R_PPC64_DTPREL16_HIGHER", /* name */
1453          FALSE,                 /* partial_inplace */
1454          0,                     /* src_mask */
1455          0xffff,                /* dst_mask */
1456          FALSE),                /* pcrel_offset */
1457
1458   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
1459   HOWTO (R_PPC64_DTPREL16_HIGHERA,
1460          32,                    /* rightshift */
1461          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1462          16,                    /* bitsize */
1463          FALSE,                 /* pc_relative */
1464          0,                     /* bitpos */
1465          complain_overflow_dont, /* complain_on_overflow */
1466          ppc64_elf_unhandled_reloc, /* special_function */
1467          "R_PPC64_DTPREL16_HIGHERA", /* name */
1468          FALSE,                 /* partial_inplace */
1469          0,                     /* src_mask */
1470          0xffff,                /* dst_mask */
1471          FALSE),                /* pcrel_offset */
1472
1473   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
1474   HOWTO (R_PPC64_DTPREL16_HIGHEST,
1475          48,                    /* rightshift */
1476          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1477          16,                    /* bitsize */
1478          FALSE,                 /* pc_relative */
1479          0,                     /* bitpos */
1480          complain_overflow_dont, /* complain_on_overflow */
1481          ppc64_elf_unhandled_reloc, /* special_function */
1482          "R_PPC64_DTPREL16_HIGHEST", /* name */
1483          FALSE,                 /* partial_inplace */
1484          0,                     /* src_mask */
1485          0xffff,                /* dst_mask */
1486          FALSE),                /* pcrel_offset */
1487
1488   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
1489   HOWTO (R_PPC64_DTPREL16_HIGHESTA,
1490          48,                    /* rightshift */
1491          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1492          16,                    /* bitsize */
1493          FALSE,                 /* pc_relative */
1494          0,                     /* bitpos */
1495          complain_overflow_dont, /* complain_on_overflow */
1496          ppc64_elf_unhandled_reloc, /* special_function */
1497          "R_PPC64_DTPREL16_HIGHESTA", /* name */
1498          FALSE,                 /* partial_inplace */
1499          0,                     /* src_mask */
1500          0xffff,                /* dst_mask */
1501          FALSE),                /* pcrel_offset */
1502
1503   /* Like DTPREL16, but for insns with a DS field.  */
1504   HOWTO (R_PPC64_DTPREL16_DS,
1505          0,                     /* rightshift */
1506          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1507          16,                    /* bitsize */
1508          FALSE,                 /* pc_relative */
1509          0,                     /* bitpos */
1510          complain_overflow_signed, /* complain_on_overflow */
1511          ppc64_elf_unhandled_reloc, /* special_function */
1512          "R_PPC64_DTPREL16_DS", /* name */
1513          FALSE,                 /* partial_inplace */
1514          0,                     /* src_mask */
1515          0xfffc,                /* dst_mask */
1516          FALSE),                /* pcrel_offset */
1517
1518   /* Like DTPREL16_DS, but no overflow.  */
1519   HOWTO (R_PPC64_DTPREL16_LO_DS,
1520          0,                     /* rightshift */
1521          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1522          16,                    /* bitsize */
1523          FALSE,                 /* pc_relative */
1524          0,                     /* bitpos */
1525          complain_overflow_dont, /* complain_on_overflow */
1526          ppc64_elf_unhandled_reloc, /* special_function */
1527          "R_PPC64_DTPREL16_LO_DS", /* name */
1528          FALSE,                 /* partial_inplace */
1529          0,                     /* src_mask */
1530          0xfffc,                /* dst_mask */
1531          FALSE),                /* pcrel_offset */
1532
1533   /* Computes a tp-relative displacement, the difference between the value of
1534      sym+add and the value of the thread pointer (r13).  */
1535   HOWTO (R_PPC64_TPREL64,
1536          0,                     /* rightshift */
1537          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1538          64,                    /* bitsize */
1539          FALSE,                 /* pc_relative */
1540          0,                     /* bitpos */
1541          complain_overflow_dont, /* complain_on_overflow */
1542          ppc64_elf_unhandled_reloc, /* special_function */
1543          "R_PPC64_TPREL64",     /* name */
1544          FALSE,                 /* partial_inplace */
1545          0,                     /* src_mask */
1546          ONES (64),             /* dst_mask */
1547          FALSE),                /* pcrel_offset */
1548
1549   /* A 16 bit tprel reloc.  */
1550   HOWTO (R_PPC64_TPREL16,
1551          0,                     /* rightshift */
1552          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1553          16,                    /* bitsize */
1554          FALSE,                 /* pc_relative */
1555          0,                     /* bitpos */
1556          complain_overflow_signed, /* complain_on_overflow */
1557          ppc64_elf_unhandled_reloc, /* special_function */
1558          "R_PPC64_TPREL16",     /* name */
1559          FALSE,                 /* partial_inplace */
1560          0,                     /* src_mask */
1561          0xffff,                /* dst_mask */
1562          FALSE),                /* pcrel_offset */
1563
1564   /* Like TPREL16, but no overflow.  */
1565   HOWTO (R_PPC64_TPREL16_LO,
1566          0,                     /* rightshift */
1567          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1568          16,                    /* bitsize */
1569          FALSE,                 /* pc_relative */
1570          0,                     /* bitpos */
1571          complain_overflow_dont, /* complain_on_overflow */
1572          ppc64_elf_unhandled_reloc, /* special_function */
1573          "R_PPC64_TPREL16_LO",  /* name */
1574          FALSE,                 /* partial_inplace */
1575          0,                     /* src_mask */
1576          0xffff,                /* dst_mask */
1577          FALSE),                /* pcrel_offset */
1578
1579   /* Like TPREL16_LO, but next higher group of 16 bits.  */
1580   HOWTO (R_PPC64_TPREL16_HI,
1581          16,                    /* rightshift */
1582          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1583          16,                    /* bitsize */
1584          FALSE,                 /* pc_relative */
1585          0,                     /* bitpos */
1586          complain_overflow_signed, /* complain_on_overflow */
1587          ppc64_elf_unhandled_reloc, /* special_function */
1588          "R_PPC64_TPREL16_HI",  /* name */
1589          FALSE,                 /* partial_inplace */
1590          0,                     /* src_mask */
1591          0xffff,                /* dst_mask */
1592          FALSE),                /* pcrel_offset */
1593
1594   /* Like TPREL16_HI, but adjust for low 16 bits.  */
1595   HOWTO (R_PPC64_TPREL16_HA,
1596          16,                    /* rightshift */
1597          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1598          16,                    /* bitsize */
1599          FALSE,                 /* pc_relative */
1600          0,                     /* bitpos */
1601          complain_overflow_signed, /* complain_on_overflow */
1602          ppc64_elf_unhandled_reloc, /* special_function */
1603          "R_PPC64_TPREL16_HA",  /* name */
1604          FALSE,                 /* partial_inplace */
1605          0,                     /* src_mask */
1606          0xffff,                /* dst_mask */
1607          FALSE),                /* pcrel_offset */
1608
1609   /* Like TPREL16_HI, but next higher group of 16 bits.  */
1610   HOWTO (R_PPC64_TPREL16_HIGHER,
1611          32,                    /* rightshift */
1612          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1613          16,                    /* bitsize */
1614          FALSE,                 /* pc_relative */
1615          0,                     /* bitpos */
1616          complain_overflow_dont, /* complain_on_overflow */
1617          ppc64_elf_unhandled_reloc, /* special_function */
1618          "R_PPC64_TPREL16_HIGHER",      /* name */
1619          FALSE,                 /* partial_inplace */
1620          0,                     /* src_mask */
1621          0xffff,                /* dst_mask */
1622          FALSE),                /* pcrel_offset */
1623
1624   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
1625   HOWTO (R_PPC64_TPREL16_HIGHERA,
1626          32,                    /* rightshift */
1627          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1628          16,                    /* bitsize */
1629          FALSE,                 /* pc_relative */
1630          0,                     /* bitpos */
1631          complain_overflow_dont, /* complain_on_overflow */
1632          ppc64_elf_unhandled_reloc, /* special_function */
1633          "R_PPC64_TPREL16_HIGHERA", /* name */
1634          FALSE,                 /* partial_inplace */
1635          0,                     /* src_mask */
1636          0xffff,                /* dst_mask */
1637          FALSE),                /* pcrel_offset */
1638
1639   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
1640   HOWTO (R_PPC64_TPREL16_HIGHEST,
1641          48,                    /* rightshift */
1642          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1643          16,                    /* bitsize */
1644          FALSE,                 /* pc_relative */
1645          0,                     /* bitpos */
1646          complain_overflow_dont, /* complain_on_overflow */
1647          ppc64_elf_unhandled_reloc, /* special_function */
1648          "R_PPC64_TPREL16_HIGHEST", /* name */
1649          FALSE,                 /* partial_inplace */
1650          0,                     /* src_mask */
1651          0xffff,                /* dst_mask */
1652          FALSE),                /* pcrel_offset */
1653
1654   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
1655   HOWTO (R_PPC64_TPREL16_HIGHESTA,
1656          48,                    /* rightshift */
1657          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1658          16,                    /* bitsize */
1659          FALSE,                 /* pc_relative */
1660          0,                     /* bitpos */
1661          complain_overflow_dont, /* complain_on_overflow */
1662          ppc64_elf_unhandled_reloc, /* special_function */
1663          "R_PPC64_TPREL16_HIGHESTA", /* name */
1664          FALSE,                 /* partial_inplace */
1665          0,                     /* src_mask */
1666          0xffff,                /* dst_mask */
1667          FALSE),                /* pcrel_offset */
1668
1669   /* Like TPREL16, but for insns with a DS field.  */
1670   HOWTO (R_PPC64_TPREL16_DS,
1671          0,                     /* rightshift */
1672          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1673          16,                    /* bitsize */
1674          FALSE,                 /* pc_relative */
1675          0,                     /* bitpos */
1676          complain_overflow_signed, /* complain_on_overflow */
1677          ppc64_elf_unhandled_reloc, /* special_function */
1678          "R_PPC64_TPREL16_DS",  /* name */
1679          FALSE,                 /* partial_inplace */
1680          0,                     /* src_mask */
1681          0xfffc,                /* dst_mask */
1682          FALSE),                /* pcrel_offset */
1683
1684   /* Like TPREL16_DS, but no overflow.  */
1685   HOWTO (R_PPC64_TPREL16_LO_DS,
1686          0,                     /* rightshift */
1687          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1688          16,                    /* bitsize */
1689          FALSE,                 /* pc_relative */
1690          0,                     /* bitpos */
1691          complain_overflow_dont, /* complain_on_overflow */
1692          ppc64_elf_unhandled_reloc, /* special_function */
1693          "R_PPC64_TPREL16_LO_DS", /* name */
1694          FALSE,                 /* partial_inplace */
1695          0,                     /* src_mask */
1696          0xfffc,                /* dst_mask */
1697          FALSE),                /* pcrel_offset */
1698
1699   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1700      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
1701      to the first entry relative to the TOC base (r2).  */
1702   HOWTO (R_PPC64_GOT_TLSGD16,
1703          0,                     /* rightshift */
1704          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1705          16,                    /* bitsize */
1706          FALSE,                 /* pc_relative */
1707          0,                     /* bitpos */
1708          complain_overflow_signed, /* complain_on_overflow */
1709          ppc64_elf_unhandled_reloc, /* special_function */
1710          "R_PPC64_GOT_TLSGD16", /* name */
1711          FALSE,                 /* partial_inplace */
1712          0,                     /* src_mask */
1713          0xffff,                /* dst_mask */
1714          FALSE),                /* pcrel_offset */
1715
1716   /* Like GOT_TLSGD16, but no overflow.  */
1717   HOWTO (R_PPC64_GOT_TLSGD16_LO,
1718          0,                     /* rightshift */
1719          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1720          16,                    /* bitsize */
1721          FALSE,                 /* pc_relative */
1722          0,                     /* bitpos */
1723          complain_overflow_dont, /* complain_on_overflow */
1724          ppc64_elf_unhandled_reloc, /* special_function */
1725          "R_PPC64_GOT_TLSGD16_LO", /* name */
1726          FALSE,                 /* partial_inplace */
1727          0,                     /* src_mask */
1728          0xffff,                /* dst_mask */
1729          FALSE),                /* pcrel_offset */
1730
1731   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
1732   HOWTO (R_PPC64_GOT_TLSGD16_HI,
1733          16,                    /* rightshift */
1734          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1735          16,                    /* bitsize */
1736          FALSE,                 /* pc_relative */
1737          0,                     /* bitpos */
1738          complain_overflow_signed, /* complain_on_overflow */
1739          ppc64_elf_unhandled_reloc, /* special_function */
1740          "R_PPC64_GOT_TLSGD16_HI", /* name */
1741          FALSE,                 /* partial_inplace */
1742          0,                     /* src_mask */
1743          0xffff,                /* dst_mask */
1744          FALSE),                /* pcrel_offset */
1745
1746   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
1747   HOWTO (R_PPC64_GOT_TLSGD16_HA,
1748          16,                    /* rightshift */
1749          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1750          16,                    /* bitsize */
1751          FALSE,                 /* pc_relative */
1752          0,                     /* bitpos */
1753          complain_overflow_signed, /* complain_on_overflow */
1754          ppc64_elf_unhandled_reloc, /* special_function */
1755          "R_PPC64_GOT_TLSGD16_HA", /* name */
1756          FALSE,                 /* partial_inplace */
1757          0,                     /* src_mask */
1758          0xffff,                /* dst_mask */
1759          FALSE),                /* pcrel_offset */
1760
1761   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1762      with values (sym+add)@dtpmod and zero, and computes the offset to the
1763      first entry relative to the TOC base (r2).  */
1764   HOWTO (R_PPC64_GOT_TLSLD16,
1765          0,                     /* rightshift */
1766          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1767          16,                    /* bitsize */
1768          FALSE,                 /* pc_relative */
1769          0,                     /* bitpos */
1770          complain_overflow_signed, /* complain_on_overflow */
1771          ppc64_elf_unhandled_reloc, /* special_function */
1772          "R_PPC64_GOT_TLSLD16", /* name */
1773          FALSE,                 /* partial_inplace */
1774          0,                     /* src_mask */
1775          0xffff,                /* dst_mask */
1776          FALSE),                /* pcrel_offset */
1777
1778   /* Like GOT_TLSLD16, but no overflow.  */
1779   HOWTO (R_PPC64_GOT_TLSLD16_LO,
1780          0,                     /* rightshift */
1781          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1782          16,                    /* bitsize */
1783          FALSE,                 /* pc_relative */
1784          0,                     /* bitpos */
1785          complain_overflow_dont, /* complain_on_overflow */
1786          ppc64_elf_unhandled_reloc, /* special_function */
1787          "R_PPC64_GOT_TLSLD16_LO", /* name */
1788          FALSE,                 /* partial_inplace */
1789          0,                     /* src_mask */
1790          0xffff,                /* dst_mask */
1791          FALSE),                /* pcrel_offset */
1792
1793   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
1794   HOWTO (R_PPC64_GOT_TLSLD16_HI,
1795          16,                    /* rightshift */
1796          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1797          16,                    /* bitsize */
1798          FALSE,                 /* pc_relative */
1799          0,                     /* bitpos */
1800          complain_overflow_signed, /* complain_on_overflow */
1801          ppc64_elf_unhandled_reloc, /* special_function */
1802          "R_PPC64_GOT_TLSLD16_HI", /* name */
1803          FALSE,                 /* partial_inplace */
1804          0,                     /* src_mask */
1805          0xffff,                /* dst_mask */
1806          FALSE),                /* pcrel_offset */
1807
1808   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
1809   HOWTO (R_PPC64_GOT_TLSLD16_HA,
1810          16,                    /* rightshift */
1811          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1812          16,                    /* bitsize */
1813          FALSE,                 /* pc_relative */
1814          0,                     /* bitpos */
1815          complain_overflow_signed, /* complain_on_overflow */
1816          ppc64_elf_unhandled_reloc, /* special_function */
1817          "R_PPC64_GOT_TLSLD16_HA", /* name */
1818          FALSE,                 /* partial_inplace */
1819          0,                     /* src_mask */
1820          0xffff,                /* dst_mask */
1821          FALSE),                /* pcrel_offset */
1822
1823   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
1824      the offset to the entry relative to the TOC base (r2).  */
1825   HOWTO (R_PPC64_GOT_DTPREL16_DS,
1826          0,                     /* rightshift */
1827          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1828          16,                    /* bitsize */
1829          FALSE,                 /* pc_relative */
1830          0,                     /* bitpos */
1831          complain_overflow_signed, /* complain_on_overflow */
1832          ppc64_elf_unhandled_reloc, /* special_function */
1833          "R_PPC64_GOT_DTPREL16_DS", /* name */
1834          FALSE,                 /* partial_inplace */
1835          0,                     /* src_mask */
1836          0xfffc,                /* dst_mask */
1837          FALSE),                /* pcrel_offset */
1838
1839   /* Like GOT_DTPREL16_DS, but no overflow.  */
1840   HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
1841          0,                     /* rightshift */
1842          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1843          16,                    /* bitsize */
1844          FALSE,                 /* pc_relative */
1845          0,                     /* bitpos */
1846          complain_overflow_dont, /* complain_on_overflow */
1847          ppc64_elf_unhandled_reloc, /* special_function */
1848          "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
1849          FALSE,                 /* partial_inplace */
1850          0,                     /* src_mask */
1851          0xfffc,                /* dst_mask */
1852          FALSE),                /* pcrel_offset */
1853
1854   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
1855   HOWTO (R_PPC64_GOT_DTPREL16_HI,
1856          16,                    /* rightshift */
1857          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1858          16,                    /* bitsize */
1859          FALSE,                 /* pc_relative */
1860          0,                     /* bitpos */
1861          complain_overflow_signed, /* complain_on_overflow */
1862          ppc64_elf_unhandled_reloc, /* special_function */
1863          "R_PPC64_GOT_DTPREL16_HI", /* name */
1864          FALSE,                 /* partial_inplace */
1865          0,                     /* src_mask */
1866          0xffff,                /* dst_mask */
1867          FALSE),                /* pcrel_offset */
1868
1869   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
1870   HOWTO (R_PPC64_GOT_DTPREL16_HA,
1871          16,                    /* rightshift */
1872          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1873          16,                    /* bitsize */
1874          FALSE,                 /* pc_relative */
1875          0,                     /* bitpos */
1876          complain_overflow_signed, /* complain_on_overflow */
1877          ppc64_elf_unhandled_reloc, /* special_function */
1878          "R_PPC64_GOT_DTPREL16_HA", /* name */
1879          FALSE,                 /* partial_inplace */
1880          0,                     /* src_mask */
1881          0xffff,                /* dst_mask */
1882          FALSE),                /* pcrel_offset */
1883
1884   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
1885      offset to the entry relative to the TOC base (r2).  */
1886   HOWTO (R_PPC64_GOT_TPREL16_DS,
1887          0,                     /* rightshift */
1888          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1889          16,                    /* bitsize */
1890          FALSE,                 /* pc_relative */
1891          0,                     /* bitpos */
1892          complain_overflow_signed, /* complain_on_overflow */
1893          ppc64_elf_unhandled_reloc, /* special_function */
1894          "R_PPC64_GOT_TPREL16_DS", /* name */
1895          FALSE,                 /* partial_inplace */
1896          0,                     /* src_mask */
1897          0xfffc,                /* dst_mask */
1898          FALSE),                /* pcrel_offset */
1899
1900   /* Like GOT_TPREL16_DS, but no overflow.  */
1901   HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
1902          0,                     /* rightshift */
1903          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1904          16,                    /* bitsize */
1905          FALSE,                 /* pc_relative */
1906          0,                     /* bitpos */
1907          complain_overflow_dont, /* complain_on_overflow */
1908          ppc64_elf_unhandled_reloc, /* special_function */
1909          "R_PPC64_GOT_TPREL16_LO_DS", /* name */
1910          FALSE,                 /* partial_inplace */
1911          0,                     /* src_mask */
1912          0xfffc,                /* dst_mask */
1913          FALSE),                /* pcrel_offset */
1914
1915   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
1916   HOWTO (R_PPC64_GOT_TPREL16_HI,
1917          16,                    /* rightshift */
1918          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1919          16,                    /* bitsize */
1920          FALSE,                 /* pc_relative */
1921          0,                     /* bitpos */
1922          complain_overflow_signed, /* complain_on_overflow */
1923          ppc64_elf_unhandled_reloc, /* special_function */
1924          "R_PPC64_GOT_TPREL16_HI", /* name */
1925          FALSE,                 /* partial_inplace */
1926          0,                     /* src_mask */
1927          0xffff,                /* dst_mask */
1928          FALSE),                /* pcrel_offset */
1929
1930   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
1931   HOWTO (R_PPC64_GOT_TPREL16_HA,
1932          16,                    /* rightshift */
1933          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1934          16,                    /* bitsize */
1935          FALSE,                 /* pc_relative */
1936          0,                     /* bitpos */
1937          complain_overflow_signed, /* complain_on_overflow */
1938          ppc64_elf_unhandled_reloc, /* special_function */
1939          "R_PPC64_GOT_TPREL16_HA", /* name */
1940          FALSE,                 /* partial_inplace */
1941          0,                     /* src_mask */
1942          0xffff,                /* dst_mask */
1943          FALSE),                /* pcrel_offset */
1944
1945   HOWTO (R_PPC64_JMP_IREL,      /* type */
1946          0,                     /* rightshift */
1947          0,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1948          0,                     /* bitsize */
1949          FALSE,                 /* pc_relative */
1950          0,                     /* bitpos */
1951          complain_overflow_dont, /* complain_on_overflow */
1952          ppc64_elf_unhandled_reloc, /* special_function */
1953          "R_PPC64_JMP_IREL",    /* name */
1954          FALSE,                 /* partial_inplace */
1955          0,                     /* src_mask */
1956          0,                     /* dst_mask */
1957          FALSE),                /* pcrel_offset */
1958
1959   HOWTO (R_PPC64_IRELATIVE,     /* type */
1960          0,                     /* rightshift */
1961          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1962          64,                    /* bitsize */
1963          FALSE,                 /* pc_relative */
1964          0,                     /* bitpos */
1965          complain_overflow_dont, /* complain_on_overflow */
1966          bfd_elf_generic_reloc, /* special_function */
1967          "R_PPC64_IRELATIVE",   /* name */
1968          FALSE,                 /* partial_inplace */
1969          0,                     /* src_mask */
1970          ONES (64),             /* dst_mask */
1971          FALSE),                /* pcrel_offset */
1972
1973   /* A 16 bit relative relocation.  */
1974   HOWTO (R_PPC64_REL16,         /* type */
1975          0,                     /* rightshift */
1976          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1977          16,                    /* bitsize */
1978          TRUE,                  /* pc_relative */
1979          0,                     /* bitpos */
1980          complain_overflow_signed, /* complain_on_overflow */
1981          bfd_elf_generic_reloc, /* special_function */
1982          "R_PPC64_REL16",       /* name */
1983          FALSE,                 /* partial_inplace */
1984          0,                     /* src_mask */
1985          0xffff,                /* dst_mask */
1986          TRUE),                 /* pcrel_offset */
1987
1988   /* A 16 bit relative relocation without overflow.  */
1989   HOWTO (R_PPC64_REL16_LO,      /* type */
1990          0,                     /* rightshift */
1991          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1992          16,                    /* bitsize */
1993          TRUE,                  /* pc_relative */
1994          0,                     /* bitpos */
1995          complain_overflow_dont,/* complain_on_overflow */
1996          bfd_elf_generic_reloc, /* special_function */
1997          "R_PPC64_REL16_LO",    /* name */
1998          FALSE,                 /* partial_inplace */
1999          0,                     /* src_mask */
2000          0xffff,                /* dst_mask */
2001          TRUE),                 /* pcrel_offset */
2002
2003   /* The high order 16 bits of a relative address.  */
2004   HOWTO (R_PPC64_REL16_HI,      /* type */
2005          16,                    /* rightshift */
2006          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2007          16,                    /* bitsize */
2008          TRUE,                  /* pc_relative */
2009          0,                     /* bitpos */
2010          complain_overflow_signed, /* complain_on_overflow */
2011          bfd_elf_generic_reloc, /* special_function */
2012          "R_PPC64_REL16_HI",    /* name */
2013          FALSE,                 /* partial_inplace */
2014          0,                     /* src_mask */
2015          0xffff,                /* dst_mask */
2016          TRUE),                 /* pcrel_offset */
2017
2018   /* The high order 16 bits of a relative address, plus 1 if the contents of
2019      the low 16 bits, treated as a signed number, is negative.  */
2020   HOWTO (R_PPC64_REL16_HA,      /* type */
2021          16,                    /* rightshift */
2022          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2023          16,                    /* bitsize */
2024          TRUE,                  /* pc_relative */
2025          0,                     /* bitpos */
2026          complain_overflow_signed, /* complain_on_overflow */
2027          ppc64_elf_ha_reloc,    /* special_function */
2028          "R_PPC64_REL16_HA",    /* name */
2029          FALSE,                 /* partial_inplace */
2030          0,                     /* src_mask */
2031          0xffff,                /* dst_mask */
2032          TRUE),                 /* pcrel_offset */
2033
2034   /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
2035   HOWTO (R_PPC64_REL16DX_HA,    /* type */
2036          16,                    /* rightshift */
2037          2,                     /* size (0 = byte, 1 = short, 2 = long) */
2038          16,                    /* bitsize */
2039          TRUE,                  /* pc_relative */
2040          0,                     /* bitpos */
2041          complain_overflow_signed, /* complain_on_overflow */
2042          ppc64_elf_ha_reloc,    /* special_function */
2043          "R_PPC64_REL16DX_HA",  /* name */
2044          FALSE,                 /* partial_inplace */
2045          0,                     /* src_mask */
2046          0x1fffc1,              /* dst_mask */
2047          TRUE),                 /* pcrel_offset */
2048
2049   /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
2050   HOWTO (R_PPC64_16DX_HA,       /* type */
2051          16,                    /* rightshift */
2052          2,                     /* size (0 = byte, 1 = short, 2 = long) */
2053          16,                    /* bitsize */
2054          FALSE,                 /* pc_relative */
2055          0,                     /* bitpos */
2056          complain_overflow_signed, /* complain_on_overflow */
2057          ppc64_elf_ha_reloc,    /* special_function */
2058          "R_PPC64_16DX_HA",     /* name */
2059          FALSE,                 /* partial_inplace */
2060          0,                     /* src_mask */
2061          0x1fffc1,              /* dst_mask */
2062          FALSE),                /* pcrel_offset */
2063
2064   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
2065   HOWTO (R_PPC64_ADDR16_HIGH,   /* type */
2066          16,                    /* rightshift */
2067          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2068          16,                    /* bitsize */
2069          FALSE,                 /* pc_relative */
2070          0,                     /* bitpos */
2071          complain_overflow_dont, /* complain_on_overflow */
2072          bfd_elf_generic_reloc, /* special_function */
2073          "R_PPC64_ADDR16_HIGH", /* name */
2074          FALSE,                 /* partial_inplace */
2075          0,                     /* src_mask */
2076          0xffff,                /* dst_mask */
2077          FALSE),                /* pcrel_offset */
2078
2079   /* Like R_PPC64_ADDR16_HA, but no overflow.  */
2080   HOWTO (R_PPC64_ADDR16_HIGHA,  /* type */
2081          16,                    /* rightshift */
2082          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2083          16,                    /* bitsize */
2084          FALSE,                 /* pc_relative */
2085          0,                     /* bitpos */
2086          complain_overflow_dont, /* complain_on_overflow */
2087          ppc64_elf_ha_reloc,    /* special_function */
2088          "R_PPC64_ADDR16_HIGHA",        /* name */
2089          FALSE,                 /* partial_inplace */
2090          0,                     /* src_mask */
2091          0xffff,                /* dst_mask */
2092          FALSE),                /* pcrel_offset */
2093
2094   /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
2095   HOWTO (R_PPC64_DTPREL16_HIGH,
2096          16,                    /* rightshift */
2097          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2098          16,                    /* bitsize */
2099          FALSE,                 /* pc_relative */
2100          0,                     /* bitpos */
2101          complain_overflow_dont, /* complain_on_overflow */
2102          ppc64_elf_unhandled_reloc, /* special_function */
2103          "R_PPC64_DTPREL16_HIGH", /* name */
2104          FALSE,                 /* partial_inplace */
2105          0,                     /* src_mask */
2106          0xffff,                /* dst_mask */
2107          FALSE),                /* pcrel_offset */
2108
2109   /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
2110   HOWTO (R_PPC64_DTPREL16_HIGHA,
2111          16,                    /* rightshift */
2112          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2113          16,                    /* bitsize */
2114          FALSE,                 /* pc_relative */
2115          0,                     /* bitpos */
2116          complain_overflow_dont, /* complain_on_overflow */
2117          ppc64_elf_unhandled_reloc, /* special_function */
2118          "R_PPC64_DTPREL16_HIGHA", /* name */
2119          FALSE,                 /* partial_inplace */
2120          0,                     /* src_mask */
2121          0xffff,                /* dst_mask */
2122          FALSE),                /* pcrel_offset */
2123
2124   /* Like R_PPC64_TPREL16_HI, but no overflow.  */
2125   HOWTO (R_PPC64_TPREL16_HIGH,
2126          16,                    /* rightshift */
2127          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2128          16,                    /* bitsize */
2129          FALSE,                 /* pc_relative */
2130          0,                     /* bitpos */
2131          complain_overflow_dont, /* complain_on_overflow */
2132          ppc64_elf_unhandled_reloc, /* special_function */
2133          "R_PPC64_TPREL16_HIGH",        /* name */
2134          FALSE,                 /* partial_inplace */
2135          0,                     /* src_mask */
2136          0xffff,                /* dst_mask */
2137          FALSE),                /* pcrel_offset */
2138
2139   /* Like R_PPC64_TPREL16_HA, but no overflow.  */
2140   HOWTO (R_PPC64_TPREL16_HIGHA,
2141          16,                    /* rightshift */
2142          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2143          16,                    /* bitsize */
2144          FALSE,                 /* pc_relative */
2145          0,                     /* bitpos */
2146          complain_overflow_dont, /* complain_on_overflow */
2147          ppc64_elf_unhandled_reloc, /* special_function */
2148          "R_PPC64_TPREL16_HIGHA",       /* name */
2149          FALSE,                 /* partial_inplace */
2150          0,                     /* src_mask */
2151          0xffff,                /* dst_mask */
2152          FALSE),                /* pcrel_offset */
2153
2154   /* Marker reloc on ELFv2 large-model function entry.  */
2155   HOWTO (R_PPC64_ENTRY,
2156          0,                     /* rightshift */
2157          2,                     /* size (0 = byte, 1 = short, 2 = long) */
2158          32,                    /* bitsize */
2159          FALSE,                 /* pc_relative */
2160          0,                     /* bitpos */
2161          complain_overflow_dont, /* complain_on_overflow */
2162          bfd_elf_generic_reloc, /* special_function */
2163          "R_PPC64_ENTRY",       /* name */
2164          FALSE,                 /* partial_inplace */
2165          0,                     /* src_mask */
2166          0,                     /* dst_mask */
2167          FALSE),                /* pcrel_offset */
2168
2169   /* Like ADDR64, but use local entry point of function.  */
2170   HOWTO (R_PPC64_ADDR64_LOCAL,  /* type */
2171          0,                     /* rightshift */
2172          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
2173          64,                    /* bitsize */
2174          FALSE,                 /* pc_relative */
2175          0,                     /* bitpos */
2176          complain_overflow_dont, /* complain_on_overflow */
2177          bfd_elf_generic_reloc, /* special_function */
2178          "R_PPC64_ADDR64_LOCAL", /* name */
2179          FALSE,                 /* partial_inplace */
2180          0,                     /* src_mask */
2181          ONES (64),             /* dst_mask */
2182          FALSE),                /* pcrel_offset */
2183
2184   /* GNU extension to record C++ vtable hierarchy.  */
2185   HOWTO (R_PPC64_GNU_VTINHERIT, /* type */
2186          0,                     /* rightshift */
2187          0,                     /* size (0 = byte, 1 = short, 2 = long) */
2188          0,                     /* bitsize */
2189          FALSE,                 /* pc_relative */
2190          0,                     /* bitpos */
2191          complain_overflow_dont, /* complain_on_overflow */
2192          NULL,                  /* special_function */
2193          "R_PPC64_GNU_VTINHERIT", /* name */
2194          FALSE,                 /* partial_inplace */
2195          0,                     /* src_mask */
2196          0,                     /* dst_mask */
2197          FALSE),                /* pcrel_offset */
2198
2199   /* GNU extension to record C++ vtable member usage.  */
2200   HOWTO (R_PPC64_GNU_VTENTRY,   /* type */
2201          0,                     /* rightshift */
2202          0,                     /* size (0 = byte, 1 = short, 2 = long) */
2203          0,                     /* bitsize */
2204          FALSE,                 /* pc_relative */
2205          0,                     /* bitpos */
2206          complain_overflow_dont, /* complain_on_overflow */
2207          NULL,                  /* special_function */
2208          "R_PPC64_GNU_VTENTRY", /* name */
2209          FALSE,                 /* partial_inplace */
2210          0,                     /* src_mask */
2211          0,                     /* dst_mask */
2212          FALSE),                /* pcrel_offset */
2213 };
2214
2215 \f
2216 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
2217    be done.  */
2218
2219 static void
2220 ppc_howto_init (void)
2221 {
2222   unsigned int i, type;
2223
2224   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
2225     {
2226       type = ppc64_elf_howto_raw[i].type;
2227       BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
2228       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
2229     }
2230 }
2231
2232 static reloc_howto_type *
2233 ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2234                              bfd_reloc_code_real_type code)
2235 {
2236   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
2237
2238   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2239     /* Initialize howto table if needed.  */
2240     ppc_howto_init ();
2241
2242   switch (code)
2243     {
2244     default:
2245       return NULL;
2246
2247     case BFD_RELOC_NONE:                        r = R_PPC64_NONE;
2248       break;
2249     case BFD_RELOC_32:                          r = R_PPC64_ADDR32;
2250       break;
2251     case BFD_RELOC_PPC_BA26:                    r = R_PPC64_ADDR24;
2252       break;
2253     case BFD_RELOC_16:                          r = R_PPC64_ADDR16;
2254       break;
2255     case BFD_RELOC_LO16:                        r = R_PPC64_ADDR16_LO;
2256       break;
2257     case BFD_RELOC_HI16:                        r = R_PPC64_ADDR16_HI;
2258       break;
2259     case BFD_RELOC_PPC64_ADDR16_HIGH:           r = R_PPC64_ADDR16_HIGH;
2260       break;
2261     case BFD_RELOC_HI16_S:                      r = R_PPC64_ADDR16_HA;
2262       break;
2263     case BFD_RELOC_PPC64_ADDR16_HIGHA:          r = R_PPC64_ADDR16_HIGHA;
2264       break;
2265     case BFD_RELOC_PPC_BA16:                    r = R_PPC64_ADDR14;
2266       break;
2267     case BFD_RELOC_PPC_BA16_BRTAKEN:            r = R_PPC64_ADDR14_BRTAKEN;
2268       break;
2269     case BFD_RELOC_PPC_BA16_BRNTAKEN:           r = R_PPC64_ADDR14_BRNTAKEN;
2270       break;
2271     case BFD_RELOC_PPC_B26:                     r = R_PPC64_REL24;
2272       break;
2273     case BFD_RELOC_PPC_B16:                     r = R_PPC64_REL14;
2274       break;
2275     case BFD_RELOC_PPC_B16_BRTAKEN:             r = R_PPC64_REL14_BRTAKEN;
2276       break;
2277     case BFD_RELOC_PPC_B16_BRNTAKEN:            r = R_PPC64_REL14_BRNTAKEN;
2278       break;
2279     case BFD_RELOC_16_GOTOFF:                   r = R_PPC64_GOT16;
2280       break;
2281     case BFD_RELOC_LO16_GOTOFF:                 r = R_PPC64_GOT16_LO;
2282       break;
2283     case BFD_RELOC_HI16_GOTOFF:                 r = R_PPC64_GOT16_HI;
2284       break;
2285     case BFD_RELOC_HI16_S_GOTOFF:               r = R_PPC64_GOT16_HA;
2286       break;
2287     case BFD_RELOC_PPC_COPY:                    r = R_PPC64_COPY;
2288       break;
2289     case BFD_RELOC_PPC_GLOB_DAT:                r = R_PPC64_GLOB_DAT;
2290       break;
2291     case BFD_RELOC_32_PCREL:                    r = R_PPC64_REL32;
2292       break;
2293     case BFD_RELOC_32_PLTOFF:                   r = R_PPC64_PLT32;
2294       break;
2295     case BFD_RELOC_32_PLT_PCREL:                r = R_PPC64_PLTREL32;
2296       break;
2297     case BFD_RELOC_LO16_PLTOFF:                 r = R_PPC64_PLT16_LO;
2298       break;
2299     case BFD_RELOC_HI16_PLTOFF:                 r = R_PPC64_PLT16_HI;
2300       break;
2301     case BFD_RELOC_HI16_S_PLTOFF:               r = R_PPC64_PLT16_HA;
2302       break;
2303     case BFD_RELOC_16_BASEREL:                  r = R_PPC64_SECTOFF;
2304       break;
2305     case BFD_RELOC_LO16_BASEREL:                r = R_PPC64_SECTOFF_LO;
2306       break;
2307     case BFD_RELOC_HI16_BASEREL:                r = R_PPC64_SECTOFF_HI;
2308       break;
2309     case BFD_RELOC_HI16_S_BASEREL:              r = R_PPC64_SECTOFF_HA;
2310       break;
2311     case BFD_RELOC_CTOR:                        r = R_PPC64_ADDR64;
2312       break;
2313     case BFD_RELOC_64:                          r = R_PPC64_ADDR64;
2314       break;
2315     case BFD_RELOC_PPC64_HIGHER:                r = R_PPC64_ADDR16_HIGHER;
2316       break;
2317     case BFD_RELOC_PPC64_HIGHER_S:              r = R_PPC64_ADDR16_HIGHERA;
2318       break;
2319     case BFD_RELOC_PPC64_HIGHEST:               r = R_PPC64_ADDR16_HIGHEST;
2320       break;
2321     case BFD_RELOC_PPC64_HIGHEST_S:             r = R_PPC64_ADDR16_HIGHESTA;
2322       break;
2323     case BFD_RELOC_64_PCREL:                    r = R_PPC64_REL64;
2324       break;
2325     case BFD_RELOC_64_PLTOFF:                   r = R_PPC64_PLT64;
2326       break;
2327     case BFD_RELOC_64_PLT_PCREL:                r = R_PPC64_PLTREL64;
2328       break;
2329     case BFD_RELOC_PPC_TOC16:                   r = R_PPC64_TOC16;
2330       break;
2331     case BFD_RELOC_PPC64_TOC16_LO:              r = R_PPC64_TOC16_LO;
2332       break;
2333     case BFD_RELOC_PPC64_TOC16_HI:              r = R_PPC64_TOC16_HI;
2334       break;
2335     case BFD_RELOC_PPC64_TOC16_HA:              r = R_PPC64_TOC16_HA;
2336       break;
2337     case BFD_RELOC_PPC64_TOC:                   r = R_PPC64_TOC;
2338       break;
2339     case BFD_RELOC_PPC64_PLTGOT16:              r = R_PPC64_PLTGOT16;
2340       break;
2341     case BFD_RELOC_PPC64_PLTGOT16_LO:           r = R_PPC64_PLTGOT16_LO;
2342       break;
2343     case BFD_RELOC_PPC64_PLTGOT16_HI:           r = R_PPC64_PLTGOT16_HI;
2344       break;
2345     case BFD_RELOC_PPC64_PLTGOT16_HA:           r = R_PPC64_PLTGOT16_HA;
2346       break;
2347     case BFD_RELOC_PPC64_ADDR16_DS:             r = R_PPC64_ADDR16_DS;
2348       break;
2349     case BFD_RELOC_PPC64_ADDR16_LO_DS:          r = R_PPC64_ADDR16_LO_DS;
2350       break;
2351     case BFD_RELOC_PPC64_GOT16_DS:              r = R_PPC64_GOT16_DS;
2352       break;
2353     case BFD_RELOC_PPC64_GOT16_LO_DS:           r = R_PPC64_GOT16_LO_DS;
2354       break;
2355     case BFD_RELOC_PPC64_PLT16_LO_DS:           r = R_PPC64_PLT16_LO_DS;
2356       break;
2357     case BFD_RELOC_PPC64_SECTOFF_DS:            r = R_PPC64_SECTOFF_DS;
2358       break;
2359     case BFD_RELOC_PPC64_SECTOFF_LO_DS:         r = R_PPC64_SECTOFF_LO_DS;
2360       break;
2361     case BFD_RELOC_PPC64_TOC16_DS:              r = R_PPC64_TOC16_DS;
2362       break;
2363     case BFD_RELOC_PPC64_TOC16_LO_DS:           r = R_PPC64_TOC16_LO_DS;
2364       break;
2365     case BFD_RELOC_PPC64_PLTGOT16_DS:           r = R_PPC64_PLTGOT16_DS;
2366       break;
2367     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:        r = R_PPC64_PLTGOT16_LO_DS;
2368       break;
2369     case BFD_RELOC_PPC_TLS:                     r = R_PPC64_TLS;
2370       break;
2371     case BFD_RELOC_PPC_TLSGD:                   r = R_PPC64_TLSGD;
2372       break;
2373     case BFD_RELOC_PPC_TLSLD:                   r = R_PPC64_TLSLD;
2374       break;
2375     case BFD_RELOC_PPC_DTPMOD:                  r = R_PPC64_DTPMOD64;
2376       break;
2377     case BFD_RELOC_PPC_TPREL16:                 r = R_PPC64_TPREL16;
2378       break;
2379     case BFD_RELOC_PPC_TPREL16_LO:              r = R_PPC64_TPREL16_LO;
2380       break;
2381     case BFD_RELOC_PPC_TPREL16_HI:              r = R_PPC64_TPREL16_HI;
2382       break;
2383     case BFD_RELOC_PPC64_TPREL16_HIGH:          r = R_PPC64_TPREL16_HIGH;
2384       break;
2385     case BFD_RELOC_PPC_TPREL16_HA:              r = R_PPC64_TPREL16_HA;
2386       break;
2387     case BFD_RELOC_PPC64_TPREL16_HIGHA:         r = R_PPC64_TPREL16_HIGHA;
2388       break;
2389     case BFD_RELOC_PPC_TPREL:                   r = R_PPC64_TPREL64;
2390       break;
2391     case BFD_RELOC_PPC_DTPREL16:                r = R_PPC64_DTPREL16;
2392       break;
2393     case BFD_RELOC_PPC_DTPREL16_LO:             r = R_PPC64_DTPREL16_LO;
2394       break;
2395     case BFD_RELOC_PPC_DTPREL16_HI:             r = R_PPC64_DTPREL16_HI;
2396       break;
2397     case BFD_RELOC_PPC64_DTPREL16_HIGH:         r = R_PPC64_DTPREL16_HIGH;
2398       break;
2399     case BFD_RELOC_PPC_DTPREL16_HA:             r = R_PPC64_DTPREL16_HA;
2400       break;
2401     case BFD_RELOC_PPC64_DTPREL16_HIGHA:        r = R_PPC64_DTPREL16_HIGHA;
2402       break;
2403     case BFD_RELOC_PPC_DTPREL:                  r = R_PPC64_DTPREL64;
2404       break;
2405     case BFD_RELOC_PPC_GOT_TLSGD16:             r = R_PPC64_GOT_TLSGD16;
2406       break;
2407     case BFD_RELOC_PPC_GOT_TLSGD16_LO:          r = R_PPC64_GOT_TLSGD16_LO;
2408       break;
2409     case BFD_RELOC_PPC_GOT_TLSGD16_HI:          r = R_PPC64_GOT_TLSGD16_HI;
2410       break;
2411     case BFD_RELOC_PPC_GOT_TLSGD16_HA:          r = R_PPC64_GOT_TLSGD16_HA;
2412       break;
2413     case BFD_RELOC_PPC_GOT_TLSLD16:             r = R_PPC64_GOT_TLSLD16;
2414       break;
2415     case BFD_RELOC_PPC_GOT_TLSLD16_LO:          r = R_PPC64_GOT_TLSLD16_LO;
2416       break;
2417     case BFD_RELOC_PPC_GOT_TLSLD16_HI:          r = R_PPC64_GOT_TLSLD16_HI;
2418       break;
2419     case BFD_RELOC_PPC_GOT_TLSLD16_HA:          r = R_PPC64_GOT_TLSLD16_HA;
2420       break;
2421     case BFD_RELOC_PPC_GOT_TPREL16:             r = R_PPC64_GOT_TPREL16_DS;
2422       break;
2423     case BFD_RELOC_PPC_GOT_TPREL16_LO:          r = R_PPC64_GOT_TPREL16_LO_DS;
2424       break;
2425     case BFD_RELOC_PPC_GOT_TPREL16_HI:          r = R_PPC64_GOT_TPREL16_HI;
2426       break;
2427     case BFD_RELOC_PPC_GOT_TPREL16_HA:          r = R_PPC64_GOT_TPREL16_HA;
2428       break;
2429     case BFD_RELOC_PPC_GOT_DTPREL16:            r = R_PPC64_GOT_DTPREL16_DS;
2430       break;
2431     case BFD_RELOC_PPC_GOT_DTPREL16_LO:         r = R_PPC64_GOT_DTPREL16_LO_DS;
2432       break;
2433     case BFD_RELOC_PPC_GOT_DTPREL16_HI:         r = R_PPC64_GOT_DTPREL16_HI;
2434       break;
2435     case BFD_RELOC_PPC_GOT_DTPREL16_HA:         r = R_PPC64_GOT_DTPREL16_HA;
2436       break;
2437     case BFD_RELOC_PPC64_TPREL16_DS:            r = R_PPC64_TPREL16_DS;
2438       break;
2439     case BFD_RELOC_PPC64_TPREL16_LO_DS:         r = R_PPC64_TPREL16_LO_DS;
2440       break;
2441     case BFD_RELOC_PPC64_TPREL16_HIGHER:        r = R_PPC64_TPREL16_HIGHER;
2442       break;
2443     case BFD_RELOC_PPC64_TPREL16_HIGHERA:       r = R_PPC64_TPREL16_HIGHERA;
2444       break;
2445     case BFD_RELOC_PPC64_TPREL16_HIGHEST:       r = R_PPC64_TPREL16_HIGHEST;
2446       break;
2447     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:      r = R_PPC64_TPREL16_HIGHESTA;
2448       break;
2449     case BFD_RELOC_PPC64_DTPREL16_DS:           r = R_PPC64_DTPREL16_DS;
2450       break;
2451     case BFD_RELOC_PPC64_DTPREL16_LO_DS:        r = R_PPC64_DTPREL16_LO_DS;
2452       break;
2453     case BFD_RELOC_PPC64_DTPREL16_HIGHER:       r = R_PPC64_DTPREL16_HIGHER;
2454       break;
2455     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:      r = R_PPC64_DTPREL16_HIGHERA;
2456       break;
2457     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:      r = R_PPC64_DTPREL16_HIGHEST;
2458       break;
2459     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     r = R_PPC64_DTPREL16_HIGHESTA;
2460       break;
2461     case BFD_RELOC_16_PCREL:                    r = R_PPC64_REL16;
2462       break;
2463     case BFD_RELOC_LO16_PCREL:                  r = R_PPC64_REL16_LO;
2464       break;
2465     case BFD_RELOC_HI16_PCREL:                  r = R_PPC64_REL16_HI;
2466       break;
2467     case BFD_RELOC_HI16_S_PCREL:                r = R_PPC64_REL16_HA;
2468       break;
2469     case BFD_RELOC_PPC_16DX_HA:                 r = R_PPC64_16DX_HA;
2470       break;
2471     case BFD_RELOC_PPC_REL16DX_HA:              r = R_PPC64_REL16DX_HA;
2472       break;
2473     case BFD_RELOC_PPC64_ENTRY:                 r = R_PPC64_ENTRY;
2474       break;
2475     case BFD_RELOC_PPC64_ADDR64_LOCAL:          r = R_PPC64_ADDR64_LOCAL;
2476       break;
2477     case BFD_RELOC_VTABLE_INHERIT:              r = R_PPC64_GNU_VTINHERIT;
2478       break;
2479     case BFD_RELOC_VTABLE_ENTRY:                r = R_PPC64_GNU_VTENTRY;
2480       break;
2481     }
2482
2483   return ppc64_elf_howto_table[r];
2484 };
2485
2486 static reloc_howto_type *
2487 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2488                              const char *r_name)
2489 {
2490   unsigned int i;
2491
2492   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
2493     if (ppc64_elf_howto_raw[i].name != NULL
2494         && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
2495       return &ppc64_elf_howto_raw[i];
2496
2497   return NULL;
2498 }
2499
2500 /* Set the howto pointer for a PowerPC ELF reloc.  */
2501
2502 static void
2503 ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
2504                          Elf_Internal_Rela *dst)
2505 {
2506   unsigned int type;
2507
2508   /* Initialize howto table if needed.  */
2509   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2510     ppc_howto_init ();
2511
2512   type = ELF64_R_TYPE (dst->r_info);
2513   if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
2514     {
2515       /* xgettext:c-format */
2516       _bfd_error_handler (_("%B: invalid relocation type %d"),
2517                           abfd, (int) type);
2518       type = R_PPC64_NONE;
2519     }
2520   cache_ptr->howto = ppc64_elf_howto_table[type];
2521 }
2522
2523 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
2524
2525 static bfd_reloc_status_type
2526 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2527                     void *data, asection *input_section,
2528                     bfd *output_bfd, char **error_message)
2529 {
2530   enum elf_ppc64_reloc_type r_type;
2531   long insn;
2532   bfd_size_type octets;
2533   bfd_vma value;
2534
2535   /* If this is a relocatable link (output_bfd test tells us), just
2536      call the generic function.  Any adjustment will be done at final
2537      link time.  */
2538   if (output_bfd != NULL)
2539     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2540                                   input_section, output_bfd, error_message);
2541
2542   /* Adjust the addend for sign extension of the low 16 bits.
2543      We won't actually be using the low 16 bits, so trashing them
2544      doesn't matter.  */
2545   reloc_entry->addend += 0x8000;
2546   r_type = reloc_entry->howto->type;
2547   if (r_type != R_PPC64_REL16DX_HA)
2548     return bfd_reloc_continue;
2549
2550   value = 0;
2551   if (!bfd_is_com_section (symbol->section))
2552     value = symbol->value;
2553   value += (reloc_entry->addend
2554             + symbol->section->output_offset
2555             + symbol->section->output_section->vma);
2556   value -= (reloc_entry->address
2557             + input_section->output_offset
2558             + input_section->output_section->vma);
2559   value = (bfd_signed_vma) value >> 16;
2560
2561   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2562   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2563   insn &= ~0x1fffc1;
2564   insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
2565   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2566   if (value + 0x8000 > 0xffff)
2567     return bfd_reloc_overflow;
2568   return bfd_reloc_ok;
2569 }
2570
2571 static bfd_reloc_status_type
2572 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2573                         void *data, asection *input_section,
2574                         bfd *output_bfd, char **error_message)
2575 {
2576   if (output_bfd != NULL)
2577     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2578                                   input_section, output_bfd, error_message);
2579
2580   if (strcmp (symbol->section->name, ".opd") == 0
2581       && (symbol->section->owner->flags & DYNAMIC) == 0)
2582     {
2583       bfd_vma dest = opd_entry_value (symbol->section,
2584                                       symbol->value + reloc_entry->addend,
2585                                       NULL, NULL, FALSE);
2586       if (dest != (bfd_vma) -1)
2587         reloc_entry->addend = dest - (symbol->value
2588                                       + symbol->section->output_section->vma
2589                                       + symbol->section->output_offset);
2590     }
2591   else
2592     {
2593       elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
2594
2595       if (symbol->section->owner != abfd
2596           && symbol->section->owner != NULL
2597           && abiversion (symbol->section->owner) >= 2)
2598         {
2599           unsigned int i;
2600
2601           for (i = 0; i < symbol->section->owner->symcount; ++i)
2602             {
2603               asymbol *symdef = symbol->section->owner->outsymbols[i];
2604
2605               if (strcmp (symdef->name, symbol->name) == 0)
2606                 {
2607                   elfsym = (elf_symbol_type *) symdef;
2608                   break;
2609                 }
2610             }
2611         }
2612       reloc_entry->addend
2613         += PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
2614     }
2615   return bfd_reloc_continue;
2616 }
2617
2618 static bfd_reloc_status_type
2619 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2620                          void *data, asection *input_section,
2621                          bfd *output_bfd, char **error_message)
2622 {
2623   long insn;
2624   enum elf_ppc64_reloc_type r_type;
2625   bfd_size_type octets;
2626   /* Assume 'at' branch hints.  */
2627   bfd_boolean is_isa_v2 = TRUE;
2628
2629   /* If this is a relocatable link (output_bfd test tells us), just
2630      call the generic function.  Any adjustment will be done at final
2631      link time.  */
2632   if (output_bfd != NULL)
2633     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2634                                   input_section, output_bfd, error_message);
2635
2636   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2637   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2638   insn &= ~(0x01 << 21);
2639   r_type = reloc_entry->howto->type;
2640   if (r_type == R_PPC64_ADDR14_BRTAKEN
2641       || r_type == R_PPC64_REL14_BRTAKEN)
2642     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
2643
2644   if (is_isa_v2)
2645     {
2646       /* Set 'a' bit.  This is 0b00010 in BO field for branch
2647          on CR(BI) insns (BO == 001at or 011at), and 0b01000
2648          for branch on CTR insns (BO == 1a00t or 1a01t).  */
2649       if ((insn & (0x14 << 21)) == (0x04 << 21))
2650         insn |= 0x02 << 21;
2651       else if ((insn & (0x14 << 21)) == (0x10 << 21))
2652         insn |= 0x08 << 21;
2653       else
2654         goto out;
2655     }
2656   else
2657     {
2658       bfd_vma target = 0;
2659       bfd_vma from;
2660
2661       if (!bfd_is_com_section (symbol->section))
2662         target = symbol->value;
2663       target += symbol->section->output_section->vma;
2664       target += symbol->section->output_offset;
2665       target += reloc_entry->addend;
2666
2667       from = (reloc_entry->address
2668               + input_section->output_offset
2669               + input_section->output_section->vma);
2670
2671       /* Invert 'y' bit if not the default.  */
2672       if ((bfd_signed_vma) (target - from) < 0)
2673         insn ^= 0x01 << 21;
2674     }
2675   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2676  out:
2677   return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
2678                                  input_section, output_bfd, error_message);
2679 }
2680
2681 static bfd_reloc_status_type
2682 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2683                          void *data, asection *input_section,
2684                          bfd *output_bfd, char **error_message)
2685 {
2686   /* If this is a relocatable link (output_bfd test tells us), just
2687      call the generic function.  Any adjustment will be done at final
2688      link time.  */
2689   if (output_bfd != NULL)
2690     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2691                                   input_section, output_bfd, error_message);
2692
2693   /* Subtract the symbol section base address.  */
2694   reloc_entry->addend -= symbol->section->output_section->vma;
2695   return bfd_reloc_continue;
2696 }
2697
2698 static bfd_reloc_status_type
2699 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2700                             void *data, asection *input_section,
2701                             bfd *output_bfd, char **error_message)
2702 {
2703   /* If this is a relocatable link (output_bfd test tells us), just
2704      call the generic function.  Any adjustment will be done at final
2705      link time.  */
2706   if (output_bfd != NULL)
2707     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2708                                   input_section, output_bfd, error_message);
2709
2710   /* Subtract the symbol section base address.  */
2711   reloc_entry->addend -= symbol->section->output_section->vma;
2712
2713   /* Adjust the addend for sign extension of the low 16 bits.  */
2714   reloc_entry->addend += 0x8000;
2715   return bfd_reloc_continue;
2716 }
2717
2718 static bfd_reloc_status_type
2719 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2720                      void *data, asection *input_section,
2721                      bfd *output_bfd, char **error_message)
2722 {
2723   bfd_vma TOCstart;
2724
2725   /* If this is a relocatable link (output_bfd test tells us), just
2726      call the generic function.  Any adjustment will be done at final
2727      link time.  */
2728   if (output_bfd != NULL)
2729     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2730                                   input_section, output_bfd, error_message);
2731
2732   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2733   if (TOCstart == 0)
2734     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2735
2736   /* Subtract the TOC base address.  */
2737   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2738   return bfd_reloc_continue;
2739 }
2740
2741 static bfd_reloc_status_type
2742 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2743                         void *data, asection *input_section,
2744                         bfd *output_bfd, char **error_message)
2745 {
2746   bfd_vma TOCstart;
2747
2748   /* If this is a relocatable link (output_bfd test tells us), just
2749      call the generic function.  Any adjustment will be done at final
2750      link time.  */
2751   if (output_bfd != NULL)
2752     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2753                                   input_section, output_bfd, error_message);
2754
2755   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2756   if (TOCstart == 0)
2757     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2758
2759   /* Subtract the TOC base address.  */
2760   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2761
2762   /* Adjust the addend for sign extension of the low 16 bits.  */
2763   reloc_entry->addend += 0x8000;
2764   return bfd_reloc_continue;
2765 }
2766
2767 static bfd_reloc_status_type
2768 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2769                        void *data, asection *input_section,
2770                        bfd *output_bfd, char **error_message)
2771 {
2772   bfd_vma TOCstart;
2773   bfd_size_type octets;
2774
2775   /* If this is a relocatable link (output_bfd test tells us), just
2776      call the generic function.  Any adjustment will be done at final
2777      link time.  */
2778   if (output_bfd != NULL)
2779     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2780                                   input_section, output_bfd, error_message);
2781
2782   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2783   if (TOCstart == 0)
2784     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2785
2786   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2787   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
2788   return bfd_reloc_ok;
2789 }
2790
2791 static bfd_reloc_status_type
2792 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2793                            void *data, asection *input_section,
2794                            bfd *output_bfd, char **error_message)
2795 {
2796   /* If this is a relocatable link (output_bfd test tells us), just
2797      call the generic function.  Any adjustment will be done at final
2798      link time.  */
2799   if (output_bfd != NULL)
2800     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2801                                   input_section, output_bfd, error_message);
2802
2803   if (error_message != NULL)
2804     {
2805       static char buf[60];
2806       sprintf (buf, "generic linker can't handle %s",
2807                reloc_entry->howto->name);
2808       *error_message = buf;
2809     }
2810   return bfd_reloc_dangerous;
2811 }
2812
2813 /* Track GOT entries needed for a given symbol.  We might need more
2814    than one got entry per symbol.  */
2815 struct got_entry
2816 {
2817   struct got_entry *next;
2818
2819   /* The symbol addend that we'll be placing in the GOT.  */
2820   bfd_vma addend;
2821
2822   /* Unlike other ELF targets, we use separate GOT entries for the same
2823      symbol referenced from different input files.  This is to support
2824      automatic multiple TOC/GOT sections, where the TOC base can vary
2825      from one input file to another.  After partitioning into TOC groups
2826      we merge entries within the group.
2827
2828      Point to the BFD owning this GOT entry.  */
2829   bfd *owner;
2830
2831   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
2832      TLS_TPREL or TLS_DTPREL for tls entries.  */
2833   unsigned char tls_type;
2834
2835   /* Non-zero if got.ent points to real entry.  */
2836   unsigned char is_indirect;
2837
2838   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
2839   union
2840     {
2841       bfd_signed_vma refcount;
2842       bfd_vma offset;
2843       struct got_entry *ent;
2844     } got;
2845 };
2846
2847 /* The same for PLT.  */
2848 struct plt_entry
2849 {
2850   struct plt_entry *next;
2851
2852   bfd_vma addend;
2853
2854   union
2855     {
2856       bfd_signed_vma refcount;
2857       bfd_vma offset;
2858     } plt;
2859 };
2860
2861 struct ppc64_elf_obj_tdata
2862 {
2863   struct elf_obj_tdata elf;
2864
2865   /* Shortcuts to dynamic linker sections.  */
2866   asection *got;
2867   asection *relgot;
2868
2869   /* Used during garbage collection.  We attach global symbols defined
2870      on removed .opd entries to this section so that the sym is removed.  */
2871   asection *deleted_section;
2872
2873   /* TLS local dynamic got entry handling.  Support for multiple GOT
2874      sections means we potentially need one of these for each input bfd.  */
2875   struct got_entry tlsld_got;
2876
2877   union {
2878     /* A copy of relocs before they are modified for --emit-relocs.  */
2879     Elf_Internal_Rela *relocs;
2880
2881     /* Section contents.  */
2882     bfd_byte *contents;
2883   } opd;
2884
2885   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
2886      the reloc to be in the range -32768 to 32767.  */
2887   unsigned int has_small_toc_reloc : 1;
2888
2889   /* Set if toc/got ha relocs detected not using r2, or lo reloc
2890      instruction not one we handle.  */
2891   unsigned int unexpected_toc_insn : 1;
2892 };
2893
2894 #define ppc64_elf_tdata(bfd) \
2895   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
2896
2897 #define ppc64_tlsld_got(bfd) \
2898   (&ppc64_elf_tdata (bfd)->tlsld_got)
2899
2900 #define is_ppc64_elf(bfd) \
2901   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
2902    && elf_object_id (bfd) == PPC64_ELF_DATA)
2903
2904 /* Override the generic function because we store some extras.  */
2905
2906 static bfd_boolean
2907 ppc64_elf_mkobject (bfd *abfd)
2908 {
2909   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
2910                                   PPC64_ELF_DATA);
2911 }
2912
2913 /* Fix bad default arch selected for a 64 bit input bfd when the
2914    default is 32 bit.  Also select arch based on apuinfo.  */
2915
2916 static bfd_boolean
2917 ppc64_elf_object_p (bfd *abfd)
2918 {
2919   if (!abfd->arch_info->the_default)
2920     return TRUE;
2921
2922   if (abfd->arch_info->bits_per_word == 32)
2923     {
2924       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
2925
2926       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
2927         {
2928           /* Relies on arch after 32 bit default being 64 bit default.  */
2929           abfd->arch_info = abfd->arch_info->next;
2930           BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
2931         }
2932     }
2933   return _bfd_elf_ppc_set_arch (abfd);
2934 }
2935
2936 /* Support for core dump NOTE sections.  */
2937
2938 static bfd_boolean
2939 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
2940 {
2941   size_t offset, size;
2942
2943   if (note->descsz != 504)
2944     return FALSE;
2945
2946   /* pr_cursig */
2947   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
2948
2949   /* pr_pid */
2950   elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
2951
2952   /* pr_reg */
2953   offset = 112;
2954   size = 384;
2955
2956   /* Make a ".reg/999" section.  */
2957   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
2958                                           size, note->descpos + offset);
2959 }
2960
2961 static bfd_boolean
2962 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
2963 {
2964   if (note->descsz != 136)
2965     return FALSE;
2966
2967   elf_tdata (abfd)->core->pid
2968     = bfd_get_32 (abfd, note->descdata + 24);
2969   elf_tdata (abfd)->core->program
2970     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
2971   elf_tdata (abfd)->core->command
2972     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
2973
2974   return TRUE;
2975 }
2976
2977 static char *
2978 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
2979                            ...)
2980 {
2981   switch (note_type)
2982     {
2983     default:
2984       return NULL;
2985
2986     case NT_PRPSINFO:
2987       {
2988         char data[136];
2989         va_list ap;
2990
2991         va_start (ap, note_type);
2992         memset (data, 0, sizeof (data));
2993         strncpy (data + 40, va_arg (ap, const char *), 16);
2994         strncpy (data + 56, va_arg (ap, const char *), 80);
2995         va_end (ap);
2996         return elfcore_write_note (abfd, buf, bufsiz,
2997                                    "CORE", note_type, data, sizeof (data));
2998       }
2999
3000     case NT_PRSTATUS:
3001       {
3002         char data[504];
3003         va_list ap;
3004         long pid;
3005         int cursig;
3006         const void *greg;
3007
3008         va_start (ap, note_type);
3009         memset (data, 0, 112);
3010         pid = va_arg (ap, long);
3011         bfd_put_32 (abfd, pid, data + 32);
3012         cursig = va_arg (ap, int);
3013         bfd_put_16 (abfd, cursig, data + 12);
3014         greg = va_arg (ap, const void *);
3015         memcpy (data + 112, greg, 384);
3016         memset (data + 496, 0, 8);
3017         va_end (ap);
3018         return elfcore_write_note (abfd, buf, bufsiz,
3019                                    "CORE", note_type, data, sizeof (data));
3020       }
3021     }
3022 }
3023
3024 /* Add extra PPC sections.  */
3025
3026 static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
3027 {
3028   { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
3029   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
3030   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3031   { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3032   { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3033   { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
3034   { NULL,                     0,  0, 0,            0 }
3035 };
3036
3037 enum _ppc64_sec_type {
3038   sec_normal = 0,
3039   sec_opd = 1,
3040   sec_toc = 2
3041 };
3042
3043 struct _ppc64_elf_section_data
3044 {
3045   struct bfd_elf_section_data elf;
3046
3047   union
3048   {
3049     /* An array with one entry for each opd function descriptor,
3050        and some spares since opd entries may be either 16 or 24 bytes.  */
3051 #define OPD_NDX(OFF) ((OFF) >> 4)
3052     struct _opd_sec_data
3053     {
3054       /* Points to the function code section for local opd entries.  */
3055       asection **func_sec;
3056
3057       /* After editing .opd, adjust references to opd local syms.  */
3058       long *adjust;
3059     } opd;
3060
3061     /* An array for toc sections, indexed by offset/8.  */
3062     struct _toc_sec_data
3063     {
3064       /* Specifies the relocation symbol index used at a given toc offset.  */
3065       unsigned *symndx;
3066
3067       /* And the relocation addend.  */
3068       bfd_vma *add;
3069     } toc;
3070   } u;
3071
3072   enum _ppc64_sec_type sec_type:2;
3073
3074   /* Flag set when small branches are detected.  Used to
3075      select suitable defaults for the stub group size.  */
3076   unsigned int has_14bit_branch:1;
3077 };
3078
3079 #define ppc64_elf_section_data(sec) \
3080   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
3081
3082 static bfd_boolean
3083 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
3084 {
3085   if (!sec->used_by_bfd)
3086     {
3087       struct _ppc64_elf_section_data *sdata;
3088       bfd_size_type amt = sizeof (*sdata);
3089
3090       sdata = bfd_zalloc (abfd, amt);
3091       if (sdata == NULL)
3092         return FALSE;
3093       sec->used_by_bfd = sdata;
3094     }
3095
3096   return _bfd_elf_new_section_hook (abfd, sec);
3097 }
3098
3099 static struct _opd_sec_data *
3100 get_opd_info (asection * sec)
3101 {
3102   if (sec != NULL
3103       && ppc64_elf_section_data (sec) != NULL
3104       && ppc64_elf_section_data (sec)->sec_type == sec_opd)
3105     return &ppc64_elf_section_data (sec)->u.opd;
3106   return NULL;
3107 }
3108 \f
3109 /* Parameters for the qsort hook.  */
3110 static bfd_boolean synthetic_relocatable;
3111 static asection *synthetic_opd;
3112
3113 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
3114
3115 static int
3116 compare_symbols (const void *ap, const void *bp)
3117 {
3118   const asymbol *a = * (const asymbol **) ap;
3119   const asymbol *b = * (const asymbol **) bp;
3120
3121   /* Section symbols first.  */
3122   if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
3123     return -1;
3124   if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
3125     return 1;
3126
3127   /* then .opd symbols.  */
3128   if (synthetic_opd != NULL)
3129     {
3130       if (strcmp (a->section->name, ".opd") == 0
3131           && strcmp (b->section->name, ".opd") != 0)
3132         return -1;
3133       if (strcmp (a->section->name, ".opd") != 0
3134           && strcmp (b->section->name, ".opd") == 0)
3135         return 1;
3136     }
3137
3138   /* then other code symbols.  */
3139   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3140       == (SEC_CODE | SEC_ALLOC)
3141       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3142          != (SEC_CODE | SEC_ALLOC))
3143     return -1;
3144
3145   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3146       != (SEC_CODE | SEC_ALLOC)
3147       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3148          == (SEC_CODE | SEC_ALLOC))
3149     return 1;
3150
3151   if (synthetic_relocatable)
3152     {
3153       if (a->section->id < b->section->id)
3154         return -1;
3155
3156       if (a->section->id > b->section->id)
3157         return 1;
3158     }
3159
3160   if (a->value + a->section->vma < b->value + b->section->vma)
3161     return -1;
3162
3163   if (a->value + a->section->vma > b->value + b->section->vma)
3164     return 1;
3165
3166   /* For syms with the same value, prefer strong dynamic global function
3167      syms over other syms.  */
3168   if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
3169     return -1;
3170
3171   if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
3172     return 1;
3173
3174   if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
3175     return -1;
3176
3177   if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
3178     return 1;
3179
3180   if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
3181     return -1;
3182
3183   if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
3184     return 1;
3185
3186   if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
3187     return -1;
3188
3189   if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
3190     return 1;
3191
3192   return a > b;
3193 }
3194
3195 /* Search SYMS for a symbol of the given VALUE.  */
3196
3197 static asymbol *
3198 sym_exists_at (asymbol **syms, long lo, long hi, unsigned int id, bfd_vma value)
3199 {
3200   long mid;
3201
3202   if (id == (unsigned) -1)
3203     {
3204       while (lo < hi)
3205         {
3206           mid = (lo + hi) >> 1;
3207           if (syms[mid]->value + syms[mid]->section->vma < value)
3208             lo = mid + 1;
3209           else if (syms[mid]->value + syms[mid]->section->vma > value)
3210             hi = mid;
3211           else
3212             return syms[mid];
3213         }
3214     }
3215   else
3216     {
3217       while (lo < hi)
3218         {
3219           mid = (lo + hi) >> 1;
3220           if (syms[mid]->section->id < id)
3221             lo = mid + 1;
3222           else if (syms[mid]->section->id > id)
3223             hi = mid;
3224           else if (syms[mid]->value < value)
3225             lo = mid + 1;
3226           else if (syms[mid]->value > value)
3227             hi = mid;
3228           else
3229             return syms[mid];
3230         }
3231     }
3232   return NULL;
3233 }
3234
3235 static bfd_boolean
3236 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
3237 {
3238   bfd_vma vma = *(bfd_vma *) ptr;
3239   return ((section->flags & SEC_ALLOC) != 0
3240           && section->vma <= vma
3241           && vma < section->vma + section->size);
3242 }
3243
3244 /* Create synthetic symbols, effectively restoring "dot-symbol" function
3245    entry syms.  Also generate @plt symbols for the glink branch table.
3246    Returns count of synthetic symbols in RET or -1 on error.  */
3247
3248 static long
3249 ppc64_elf_get_synthetic_symtab (bfd *abfd,
3250                                 long static_count, asymbol **static_syms,
3251                                 long dyn_count, asymbol **dyn_syms,
3252                                 asymbol **ret)
3253 {
3254   asymbol *s;
3255   long i;
3256   long count;
3257   char *names;
3258   long symcount, codesecsym, codesecsymend, secsymend, opdsymend;
3259   asection *opd = NULL;
3260   bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
3261   asymbol **syms;
3262   int abi = abiversion (abfd);
3263
3264   *ret = NULL;
3265
3266   if (abi < 2)
3267     {
3268       opd = bfd_get_section_by_name (abfd, ".opd");
3269       if (opd == NULL && abi == 1)
3270         return 0;
3271     }
3272
3273   syms = NULL;
3274   codesecsym = 0;
3275   codesecsymend = 0;
3276   secsymend = 0;
3277   opdsymend = 0;
3278   symcount = 0;
3279   if (opd != NULL)
3280     {
3281       symcount = static_count;
3282       if (!relocatable)
3283         symcount += dyn_count;
3284       if (symcount == 0)
3285         return 0;
3286
3287       syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
3288       if (syms == NULL)
3289         return -1;
3290
3291       if (!relocatable && static_count != 0 && dyn_count != 0)
3292         {
3293           /* Use both symbol tables.  */
3294           memcpy (syms, static_syms, static_count * sizeof (*syms));
3295           memcpy (syms + static_count, dyn_syms,
3296                   (dyn_count + 1) * sizeof (*syms));
3297         }
3298       else if (!relocatable && static_count == 0)
3299         memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
3300       else
3301         memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
3302
3303       synthetic_relocatable = relocatable;
3304       synthetic_opd = opd;
3305       qsort (syms, symcount, sizeof (*syms), compare_symbols);
3306
3307       if (!relocatable && symcount > 1)
3308         {
3309           long j;
3310           /* Trim duplicate syms, since we may have merged the normal and
3311              dynamic symbols.  Actually, we only care about syms that have
3312              different values, so trim any with the same value.  */
3313           for (i = 1, j = 1; i < symcount; ++i)
3314             if (syms[i - 1]->value + syms[i - 1]->section->vma
3315                 != syms[i]->value + syms[i]->section->vma)
3316               syms[j++] = syms[i];
3317           symcount = j;
3318         }
3319
3320       i = 0;
3321       /* Note that here and in compare_symbols we can't compare opd and
3322          sym->section directly.  With separate debug info files, the
3323          symbols will be extracted from the debug file while abfd passed
3324          to this function is the real binary.  */
3325       if (opd != NULL && strcmp (syms[i]->section->name, ".opd") == 0)
3326         ++i;
3327       codesecsym = i;
3328
3329       for (; i < symcount; ++i)
3330         if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC
3331                                          | SEC_THREAD_LOCAL))
3332              != (SEC_CODE | SEC_ALLOC))
3333             || (syms[i]->flags & BSF_SECTION_SYM) == 0)
3334           break;
3335       codesecsymend = i;
3336
3337       for (; i < symcount; ++i)
3338         if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
3339           break;
3340       secsymend = i;
3341
3342       for (; i < symcount; ++i)
3343         if (strcmp (syms[i]->section->name, ".opd") != 0)
3344           break;
3345       opdsymend = i;
3346
3347       for (; i < symcount; ++i)
3348         if ((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3349             != (SEC_CODE | SEC_ALLOC))
3350           break;
3351       symcount = i;
3352     }
3353   count = 0;
3354
3355   if (relocatable)
3356     {
3357       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3358       arelent *r;
3359       size_t size;
3360       long relcount;
3361
3362       if (opdsymend == secsymend)
3363         goto done;
3364
3365       slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3366       relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
3367       if (relcount == 0)
3368         goto done;
3369
3370       if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
3371         {
3372           count = -1;
3373           goto done;
3374         }
3375
3376       size = 0;
3377       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3378         {
3379           asymbol *sym;
3380
3381           while (r < opd->relocation + relcount
3382                  && r->address < syms[i]->value + opd->vma)
3383             ++r;
3384
3385           if (r == opd->relocation + relcount)
3386             break;
3387
3388           if (r->address != syms[i]->value + opd->vma)
3389             continue;
3390
3391           if (r->howto->type != R_PPC64_ADDR64)
3392             continue;
3393
3394           sym = *r->sym_ptr_ptr;
3395           if (!sym_exists_at (syms, opdsymend, symcount,
3396                               sym->section->id, sym->value + r->addend))
3397             {
3398               ++count;
3399               size += sizeof (asymbol);
3400               size += strlen (syms[i]->name) + 2;
3401             }
3402         }
3403
3404       if (size == 0)
3405         goto done;
3406       s = *ret = bfd_malloc (size);
3407       if (s == NULL)
3408         {
3409           count = -1;
3410           goto done;
3411         }
3412
3413       names = (char *) (s + count);
3414
3415       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3416         {
3417           asymbol *sym;
3418
3419           while (r < opd->relocation + relcount
3420                  && r->address < syms[i]->value + opd->vma)
3421             ++r;
3422
3423           if (r == opd->relocation + relcount)
3424             break;
3425
3426           if (r->address != syms[i]->value + opd->vma)
3427             continue;
3428
3429           if (r->howto->type != R_PPC64_ADDR64)
3430             continue;
3431
3432           sym = *r->sym_ptr_ptr;
3433           if (!sym_exists_at (syms, opdsymend, symcount,
3434                               sym->section->id, sym->value + r->addend))
3435             {
3436               size_t len;
3437
3438               *s = *syms[i];
3439               s->flags |= BSF_SYNTHETIC;
3440               s->section = sym->section;
3441               s->value = sym->value + r->addend;
3442               s->name = names;
3443               *names++ = '.';
3444               len = strlen (syms[i]->name);
3445               memcpy (names, syms[i]->name, len + 1);
3446               names += len + 1;
3447               /* Have udata.p point back to the original symbol this
3448                  synthetic symbol was derived from.  */
3449               s->udata.p = syms[i];
3450               s++;
3451             }
3452         }
3453     }
3454   else
3455     {
3456       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3457       bfd_byte *contents = NULL;
3458       size_t size;
3459       long plt_count = 0;
3460       bfd_vma glink_vma = 0, resolv_vma = 0;
3461       asection *dynamic, *glink = NULL, *relplt = NULL;
3462       arelent *p;
3463
3464       if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
3465         {
3466         free_contents_and_exit_err:
3467           count = -1;
3468         free_contents_and_exit:
3469           if (contents)
3470             free (contents);
3471           goto done;
3472         }
3473
3474       size = 0;
3475       for (i = secsymend; i < opdsymend; ++i)
3476         {
3477           bfd_vma ent;
3478
3479           /* Ignore bogus symbols.  */
3480           if (syms[i]->value > opd->size - 8)
3481             continue;
3482
3483           ent = bfd_get_64 (abfd, contents + syms[i]->value);
3484           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3485             {
3486               ++count;
3487               size += sizeof (asymbol);
3488               size += strlen (syms[i]->name) + 2;
3489             }
3490         }
3491
3492       /* Get start of .glink stubs from DT_PPC64_GLINK.  */
3493       if (dyn_count != 0
3494           && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
3495         {
3496           bfd_byte *dynbuf, *extdyn, *extdynend;
3497           size_t extdynsize;
3498           void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
3499
3500           if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
3501             goto free_contents_and_exit_err;
3502
3503           extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
3504           swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
3505
3506           extdyn = dynbuf;
3507           extdynend = extdyn + dynamic->size;
3508           for (; extdyn < extdynend; extdyn += extdynsize)
3509             {
3510               Elf_Internal_Dyn dyn;
3511               (*swap_dyn_in) (abfd, extdyn, &dyn);
3512
3513               if (dyn.d_tag == DT_NULL)
3514                 break;
3515
3516               if (dyn.d_tag == DT_PPC64_GLINK)
3517                 {
3518                   /* The first glink stub starts at offset 32; see
3519                      comment in ppc64_elf_finish_dynamic_sections. */
3520                   glink_vma = dyn.d_un.d_val + GLINK_CALL_STUB_SIZE - 8 * 4;
3521                   /* The .glink section usually does not survive the final
3522                      link; search for the section (usually .text) where the
3523                      glink stubs now reside.  */
3524                   glink = bfd_sections_find_if (abfd, section_covers_vma,
3525                                                 &glink_vma);
3526                   break;
3527                 }
3528             }
3529
3530           free (dynbuf);
3531         }
3532
3533       if (glink != NULL)
3534         {
3535           /* Determine __glink trampoline by reading the relative branch
3536              from the first glink stub.  */
3537           bfd_byte buf[4];
3538           unsigned int off = 0;
3539
3540           while (bfd_get_section_contents (abfd, glink, buf,
3541                                            glink_vma + off - glink->vma, 4))
3542             {
3543               unsigned int insn = bfd_get_32 (abfd, buf);
3544               insn ^= B_DOT;
3545               if ((insn & ~0x3fffffc) == 0)
3546                 {
3547                   resolv_vma = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
3548                   break;
3549                 }
3550               off += 4;
3551               if (off > 4)
3552                 break;
3553             }
3554
3555           if (resolv_vma)
3556             size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
3557
3558           relplt = bfd_get_section_by_name (abfd, ".rela.plt");
3559           if (relplt != NULL)
3560             {
3561               slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3562               if (! (*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
3563                 goto free_contents_and_exit_err;
3564
3565               plt_count = relplt->size / sizeof (Elf64_External_Rela);
3566               size += plt_count * sizeof (asymbol);
3567
3568               p = relplt->relocation;
3569               for (i = 0; i < plt_count; i++, p++)
3570                 {
3571                   size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
3572                   if (p->addend != 0)
3573                     size += sizeof ("+0x") - 1 + 16;
3574                 }
3575             }
3576         }
3577
3578       if (size == 0)
3579         goto free_contents_and_exit;
3580       s = *ret = bfd_malloc (size);
3581       if (s == NULL)
3582         goto free_contents_and_exit_err;
3583
3584       names = (char *) (s + count + plt_count + (resolv_vma != 0));
3585
3586       for (i = secsymend; i < opdsymend; ++i)
3587         {
3588           bfd_vma ent;
3589
3590           if (syms[i]->value > opd->size - 8)
3591             continue;
3592
3593           ent = bfd_get_64 (abfd, contents + syms[i]->value);
3594           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3595             {
3596               long lo, hi;
3597               size_t len;
3598               asection *sec = abfd->sections;
3599
3600               *s = *syms[i];
3601               lo = codesecsym;
3602               hi = codesecsymend;
3603               while (lo < hi)
3604                 {
3605                   long mid = (lo + hi) >> 1;
3606                   if (syms[mid]->section->vma < ent)
3607                     lo = mid + 1;
3608                   else if (syms[mid]->section->vma > ent)
3609                     hi = mid;
3610                   else
3611                     {
3612                       sec = syms[mid]->section;
3613                       break;
3614                     }
3615                 }
3616
3617               if (lo >= hi && lo > codesecsym)
3618                 sec = syms[lo - 1]->section;
3619
3620               for (; sec != NULL; sec = sec->next)
3621                 {
3622                   if (sec->vma > ent)
3623                     break;
3624                   /* SEC_LOAD may not be set if SEC is from a separate debug
3625                      info file.  */
3626                   if ((sec->flags & SEC_ALLOC) == 0)
3627                     break;
3628                   if ((sec->flags & SEC_CODE) != 0)
3629                     s->section = sec;
3630                 }
3631               s->flags |= BSF_SYNTHETIC;
3632               s->value = ent - s->section->vma;
3633               s->name = names;
3634               *names++ = '.';
3635               len = strlen (syms[i]->name);
3636               memcpy (names, syms[i]->name, len + 1);
3637               names += len + 1;
3638               /* Have udata.p point back to the original symbol this
3639                  synthetic symbol was derived from.  */
3640               s->udata.p = syms[i];
3641               s++;
3642             }
3643         }
3644       free (contents);
3645
3646       if (glink != NULL && relplt != NULL)
3647         {
3648           if (resolv_vma)
3649             {
3650               /* Add a symbol for the main glink trampoline.  */
3651               memset (s, 0, sizeof *s);
3652               s->the_bfd = abfd;
3653               s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
3654               s->section = glink;
3655               s->value = resolv_vma - glink->vma;
3656               s->name = names;
3657               memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve"));
3658               names += sizeof ("__glink_PLTresolve");
3659               s++;
3660               count++;
3661             }
3662
3663           /* FIXME: It would be very much nicer to put sym@plt on the
3664              stub rather than on the glink branch table entry.  The
3665              objdump disassembler would then use a sensible symbol
3666              name on plt calls.  The difficulty in doing so is
3667              a) finding the stubs, and,
3668              b) matching stubs against plt entries, and,
3669              c) there can be multiple stubs for a given plt entry.
3670
3671              Solving (a) could be done by code scanning, but older
3672              ppc64 binaries used different stubs to current code.
3673              (b) is the tricky one since you need to known the toc
3674              pointer for at least one function that uses a pic stub to
3675              be able to calculate the plt address referenced.
3676              (c) means gdb would need to set multiple breakpoints (or
3677              find the glink branch itself) when setting breakpoints
3678              for pending shared library loads.  */
3679           p = relplt->relocation;
3680           for (i = 0; i < plt_count; i++, p++)
3681             {
3682               size_t len;
3683
3684               *s = **p->sym_ptr_ptr;
3685               /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
3686                  we are defining a symbol, ensure one of them is set.  */
3687               if ((s->flags & BSF_LOCAL) == 0)
3688                 s->flags |= BSF_GLOBAL;
3689               s->flags |= BSF_SYNTHETIC;
3690               s->section = glink;
3691               s->value = glink_vma - glink->vma;
3692               s->name = names;
3693               s->udata.p = NULL;
3694               len = strlen ((*p->sym_ptr_ptr)->name);
3695               memcpy (names, (*p->sym_ptr_ptr)->name, len);
3696               names += len;
3697               if (p->addend != 0)
3698                 {
3699                   memcpy (names, "+0x", sizeof ("+0x") - 1);
3700                   names += sizeof ("+0x") - 1;
3701                   bfd_sprintf_vma (abfd, names, p->addend);
3702                   names += strlen (names);
3703                 }
3704               memcpy (names, "@plt", sizeof ("@plt"));
3705               names += sizeof ("@plt");
3706               s++;
3707               if (abi < 2)
3708                 {
3709                   glink_vma += 8;
3710                   if (i >= 0x8000)
3711                     glink_vma += 4;
3712                 }
3713               else
3714                 glink_vma += 4;
3715             }
3716           count += plt_count;
3717         }
3718     }
3719
3720  done:
3721   free (syms);
3722   return count;
3723 }
3724 \f
3725 /* The following functions are specific to the ELF linker, while
3726    functions above are used generally.  Those named ppc64_elf_* are
3727    called by the main ELF linker code.  They appear in this file more
3728    or less in the order in which they are called.  eg.
3729    ppc64_elf_check_relocs is called early in the link process,
3730    ppc64_elf_finish_dynamic_sections is one of the last functions
3731    called.
3732
3733    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
3734    functions have both a function code symbol and a function descriptor
3735    symbol.  A call to foo in a relocatable object file looks like:
3736
3737    .            .text
3738    .    x:
3739    .            bl      .foo
3740    .            nop
3741
3742    The function definition in another object file might be:
3743
3744    .            .section .opd
3745    .    foo:    .quad   .foo
3746    .            .quad   .TOC.@tocbase
3747    .            .quad   0
3748    .
3749    .            .text
3750    .    .foo:   blr
3751
3752    When the linker resolves the call during a static link, the branch
3753    unsurprisingly just goes to .foo and the .opd information is unused.
3754    If the function definition is in a shared library, things are a little
3755    different:  The call goes via a plt call stub, the opd information gets
3756    copied to the plt, and the linker patches the nop.
3757
3758    .    x:
3759    .            bl      .foo_stub
3760    .            ld      2,40(1)
3761    .
3762    .
3763    .    .foo_stub:
3764    .            std     2,40(1)                 # in practice, the call stub
3765    .            addis   11,2,Lfoo@toc@ha        # is slightly optimized, but
3766    .            addi    11,11,Lfoo@toc@l        # this is the general idea
3767    .            ld      12,0(11)
3768    .            ld      2,8(11)
3769    .            mtctr   12
3770    .            ld      11,16(11)
3771    .            bctr
3772    .
3773    .            .section .plt
3774    .    Lfoo:   reloc (R_PPC64_JMP_SLOT, foo)
3775
3776    The "reloc ()" notation is supposed to indicate that the linker emits
3777    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
3778    copying.
3779
3780    What are the difficulties here?  Well, firstly, the relocations
3781    examined by the linker in check_relocs are against the function code
3782    sym .foo, while the dynamic relocation in the plt is emitted against
3783    the function descriptor symbol, foo.  Somewhere along the line, we need
3784    to carefully copy dynamic link information from one symbol to the other.
3785    Secondly, the generic part of the elf linker will make .foo a dynamic
3786    symbol as is normal for most other backends.  We need foo dynamic
3787    instead, at least for an application final link.  However, when
3788    creating a shared library containing foo, we need to have both symbols
3789    dynamic so that references to .foo are satisfied during the early
3790    stages of linking.  Otherwise the linker might decide to pull in a
3791    definition from some other object, eg. a static library.
3792
3793    Update: As of August 2004, we support a new convention.  Function
3794    calls may use the function descriptor symbol, ie. "bl foo".  This
3795    behaves exactly as "bl .foo".  */
3796
3797 /* Of those relocs that might be copied as dynamic relocs, this
3798    function selects those that must be copied when linking a shared
3799    library or PIE, even when the symbol is local.  */
3800
3801 static int
3802 must_be_dyn_reloc (struct bfd_link_info *info,
3803                    enum elf_ppc64_reloc_type r_type)
3804 {
3805   switch (r_type)
3806     {
3807     default:
3808       /* Only relative relocs can be resolved when the object load
3809          address isn't fixed.  DTPREL64 is excluded because the
3810          dynamic linker needs to differentiate global dynamic from
3811          local dynamic __tls_index pairs when PPC64_OPT_TLS is set.  */
3812       return 1;
3813
3814     case R_PPC64_REL32:
3815     case R_PPC64_REL64:
3816     case R_PPC64_REL30:
3817       return 0;
3818
3819     case R_PPC64_TPREL16:
3820     case R_PPC64_TPREL16_LO:
3821     case R_PPC64_TPREL16_HI:
3822     case R_PPC64_TPREL16_HA:
3823     case R_PPC64_TPREL16_DS:
3824     case R_PPC64_TPREL16_LO_DS:
3825     case R_PPC64_TPREL16_HIGH:
3826     case R_PPC64_TPREL16_HIGHA:
3827     case R_PPC64_TPREL16_HIGHER:
3828     case R_PPC64_TPREL16_HIGHERA:
3829     case R_PPC64_TPREL16_HIGHEST:
3830     case R_PPC64_TPREL16_HIGHESTA:
3831     case R_PPC64_TPREL64:
3832       /* These relocations are relative but in a shared library the
3833          linker doesn't know the thread pointer base.  */
3834       return bfd_link_dll (info);
3835     }
3836 }
3837
3838 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
3839    copying dynamic variables from a shared lib into an app's dynbss
3840    section, and instead use a dynamic relocation to point into the
3841    shared lib.  With code that gcc generates, it's vital that this be
3842    enabled;  In the PowerPC64 ABI, the address of a function is actually
3843    the address of a function descriptor, which resides in the .opd
3844    section.  gcc uses the descriptor directly rather than going via the
3845    GOT as some other ABI's do, which means that initialized function
3846    pointers must reference the descriptor.  Thus, a function pointer
3847    initialized to the address of a function in a shared library will
3848    either require a copy reloc, or a dynamic reloc.  Using a copy reloc
3849    redefines the function descriptor symbol to point to the copy.  This
3850    presents a problem as a plt entry for that function is also
3851    initialized from the function descriptor symbol and the copy reloc
3852    may not be initialized first.  */
3853 #define ELIMINATE_COPY_RELOCS 1
3854
3855 /* Section name for stubs is the associated section name plus this
3856    string.  */
3857 #define STUB_SUFFIX ".stub"
3858
3859 /* Linker stubs.
3860    ppc_stub_long_branch:
3861    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
3862    destination, but a 24 bit branch in a stub section will reach.
3863    .    b       dest
3864
3865    ppc_stub_plt_branch:
3866    Similar to the above, but a 24 bit branch in the stub section won't
3867    reach its destination.
3868    .    addis   %r11,%r2,xxx@toc@ha
3869    .    ld      %r12,xxx@toc@l(%r11)
3870    .    mtctr   %r12
3871    .    bctr
3872
3873    ppc_stub_plt_call:
3874    Used to call a function in a shared library.  If it so happens that
3875    the plt entry referenced crosses a 64k boundary, then an extra
3876    "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
3877    .    std     %r2,40(%r1)
3878    .    addis   %r11,%r2,xxx@toc@ha
3879    .    ld      %r12,xxx+0@toc@l(%r11)
3880    .    mtctr   %r12
3881    .    ld      %r2,xxx+8@toc@l(%r11)
3882    .    ld      %r11,xxx+16@toc@l(%r11)
3883    .    bctr
3884
3885    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
3886    code to adjust the value and save r2 to support multiple toc sections.
3887    A ppc_stub_long_branch with an r2 offset looks like:
3888    .    std     %r2,40(%r1)
3889    .    addis   %r2,%r2,off@ha
3890    .    addi    %r2,%r2,off@l
3891    .    b       dest
3892
3893    A ppc_stub_plt_branch with an r2 offset looks like:
3894    .    std     %r2,40(%r1)
3895    .    addis   %r11,%r2,xxx@toc@ha
3896    .    ld      %r12,xxx@toc@l(%r11)
3897    .    addis   %r2,%r2,off@ha
3898    .    addi    %r2,%r2,off@l
3899    .    mtctr   %r12
3900    .    bctr
3901
3902    In cases where the "addis" instruction would add zero, the "addis" is
3903    omitted and following instructions modified slightly in some cases.
3904 */
3905
3906 enum ppc_stub_type {
3907   ppc_stub_none,
3908   ppc_stub_long_branch,
3909   ppc_stub_long_branch_r2off,
3910   ppc_stub_plt_branch,
3911   ppc_stub_plt_branch_r2off,
3912   ppc_stub_plt_call,
3913   ppc_stub_plt_call_r2save,
3914   ppc_stub_global_entry,
3915   ppc_stub_save_res
3916 };
3917
3918 /* Information on stub grouping.  */
3919 struct map_stub
3920 {
3921   /* The stub section.  */
3922   asection *stub_sec;
3923   /* This is the section to which stubs in the group will be attached.  */
3924   asection *link_sec;
3925   /* Next group.  */
3926   struct map_stub *next;
3927   /* Whether to emit a copy of register save/restore functions in this
3928      group.  */
3929   int needs_save_res;
3930   /* The offset of the __tls_get_addr_opt plt stub bctrl in this group,
3931      or -1u if no such stub with bctrl exists.  */
3932   unsigned int tls_get_addr_opt_bctrl;
3933 };
3934
3935 struct ppc_stub_hash_entry {
3936
3937   /* Base hash table entry structure.  */
3938   struct bfd_hash_entry root;
3939
3940   enum ppc_stub_type stub_type;
3941
3942   /* Group information.  */
3943   struct map_stub *group;
3944
3945   /* Offset within stub_sec of the beginning of this stub.  */
3946   bfd_vma stub_offset;
3947
3948   /* Given the symbol's value and its section we can determine its final
3949      value when building the stubs (so the stub knows where to jump.  */
3950   bfd_vma target_value;
3951   asection *target_section;
3952
3953   /* The symbol table entry, if any, that this was derived from.  */
3954   struct ppc_link_hash_entry *h;
3955   struct plt_entry *plt_ent;
3956
3957   /* Symbol st_other.  */
3958   unsigned char other;
3959 };
3960
3961 struct ppc_branch_hash_entry {
3962
3963   /* Base hash table entry structure.  */
3964   struct bfd_hash_entry root;
3965
3966   /* Offset within branch lookup table.  */
3967   unsigned int offset;
3968
3969   /* Generation marker.  */
3970   unsigned int iter;
3971 };
3972
3973 /* Used to track dynamic relocations for local symbols.  */
3974 struct ppc_dyn_relocs
3975 {
3976   struct ppc_dyn_relocs *next;
3977
3978   /* The input section of the reloc.  */
3979   asection *sec;
3980
3981   /* Total number of relocs copied for the input section.  */
3982   unsigned int count : 31;
3983
3984   /* Whether this entry is for STT_GNU_IFUNC symbols.  */
3985   unsigned int ifunc : 1;
3986 };
3987
3988 struct ppc_link_hash_entry
3989 {
3990   struct elf_link_hash_entry elf;
3991
3992   union {
3993     /* A pointer to the most recently used stub hash entry against this
3994        symbol.  */
3995     struct ppc_stub_hash_entry *stub_cache;
3996
3997     /* A pointer to the next symbol starting with a '.'  */
3998     struct ppc_link_hash_entry *next_dot_sym;
3999   } u;
4000
4001   /* Track dynamic relocs copied for this symbol.  */
4002   struct elf_dyn_relocs *dyn_relocs;
4003
4004   /* Chain of aliases referring to a weakdef.  */
4005   struct ppc_link_hash_entry *weakref;
4006
4007   /* Link between function code and descriptor symbols.  */
4008   struct ppc_link_hash_entry *oh;
4009
4010   /* Flag function code and descriptor symbols.  */
4011   unsigned int is_func:1;
4012   unsigned int is_func_descriptor:1;
4013   unsigned int fake:1;
4014
4015   /* Whether global opd/toc sym has been adjusted or not.
4016      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
4017      should be set for all globals defined in any opd/toc section.  */
4018   unsigned int adjust_done:1;
4019
4020   /* Set if this is an out-of-line register save/restore function,
4021      with non-standard calling convention.  */
4022   unsigned int save_res:1;
4023
4024   /* Set if a duplicate symbol with non-zero localentry is detected,
4025      even when the duplicate symbol does not provide a definition.  */
4026   unsigned int non_zero_localentry:1;
4027
4028   /* Contexts in which symbol is used in the GOT (or TOC).
4029      TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
4030      corresponding relocs are encountered during check_relocs.
4031      tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
4032      indicate the corresponding GOT entry type is not needed.
4033      tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
4034      a TPREL one.  We use a separate flag rather than setting TPREL
4035      just for convenience in distinguishing the two cases.  */
4036 #define TLS_GD           1      /* GD reloc. */
4037 #define TLS_LD           2      /* LD reloc. */
4038 #define TLS_TPREL        4      /* TPREL reloc, => IE. */
4039 #define TLS_DTPREL       8      /* DTPREL reloc, => LD. */
4040 #define TLS_TLS         16      /* Any TLS reloc.  */
4041 #define TLS_EXPLICIT    32      /* Marks TOC section TLS relocs. */
4042 #define TLS_TPRELGD     64      /* TPREL reloc resulting from GD->IE. */
4043 #define PLT_IFUNC      128      /* STT_GNU_IFUNC.  */
4044   unsigned char tls_mask;
4045 };
4046
4047 /* ppc64 ELF linker hash table.  */
4048
4049 struct ppc_link_hash_table
4050 {
4051   struct elf_link_hash_table elf;
4052
4053   /* The stub hash table.  */
4054   struct bfd_hash_table stub_hash_table;
4055
4056   /* Another hash table for plt_branch stubs.  */
4057   struct bfd_hash_table branch_hash_table;
4058
4059   /* Hash table for function prologue tocsave.  */
4060   htab_t tocsave_htab;
4061
4062   /* Various options and other info passed from the linker.  */
4063   struct ppc64_elf_params *params;
4064
4065   /* The size of sec_info below.  */
4066   unsigned int sec_info_arr_size;
4067
4068   /* Per-section array of extra section info.  Done this way rather
4069      than as part of ppc64_elf_section_data so we have the info for
4070      non-ppc64 sections.  */
4071   struct
4072   {
4073     /* Along with elf_gp, specifies the TOC pointer used by this section.  */
4074     bfd_vma toc_off;
4075
4076     union
4077     {
4078       /* The section group that this section belongs to.  */
4079       struct map_stub *group;
4080       /* A temp section list pointer.  */
4081       asection *list;
4082     } u;
4083   } *sec_info;
4084
4085   /* Linked list of groups.  */
4086   struct map_stub *group;
4087
4088   /* Temp used when calculating TOC pointers.  */
4089   bfd_vma toc_curr;
4090   bfd *toc_bfd;
4091   asection *toc_first_sec;
4092
4093   /* Used when adding symbols.  */
4094   struct ppc_link_hash_entry *dot_syms;
4095
4096   /* Shortcuts to get to dynamic linker sections.  */
4097   asection *glink;
4098   asection *sfpr;
4099   asection *brlt;
4100   asection *relbrlt;
4101   asection *glink_eh_frame;
4102
4103   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
4104   struct ppc_link_hash_entry *tls_get_addr;
4105   struct ppc_link_hash_entry *tls_get_addr_fd;
4106
4107   /* The size of reliplt used by got entry relocs.  */
4108   bfd_size_type got_reli_size;
4109
4110   /* Statistics.  */
4111   unsigned long stub_count[ppc_stub_global_entry];
4112
4113   /* Number of stubs against global syms.  */
4114   unsigned long stub_globals;
4115
4116   /* Set if we're linking code with function descriptors.  */
4117   unsigned int opd_abi:1;
4118
4119   /* Support for multiple toc sections.  */
4120   unsigned int do_multi_toc:1;
4121   unsigned int multi_toc_needed:1;
4122   unsigned int second_toc_pass:1;
4123   unsigned int do_toc_opt:1;
4124
4125   /* Set if tls optimization is enabled.  */
4126   unsigned int do_tls_opt:1;
4127
4128   /* Set on error.  */
4129   unsigned int stub_error:1;
4130
4131   /* Whether func_desc_adjust needs to be run over symbols.  */
4132   unsigned int need_func_desc_adj:1;
4133
4134   /* Whether there exist local gnu indirect function resolvers,
4135      referenced by dynamic relocations.  */
4136   unsigned int local_ifunc_resolver:1;
4137   unsigned int maybe_local_ifunc_resolver:1;
4138
4139   /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
4140   unsigned int has_plt_localentry0:1;
4141
4142   /* Incremented every time we size stubs.  */
4143   unsigned int stub_iteration;
4144
4145   /* Small local sym cache.  */
4146   struct sym_cache sym_cache;
4147 };
4148
4149 /* Rename some of the generic section flags to better document how they
4150    are used here.  */
4151
4152 /* Nonzero if this section has TLS related relocations.  */
4153 #define has_tls_reloc sec_flg0
4154
4155 /* Nonzero if this section has a call to __tls_get_addr.  */
4156 #define has_tls_get_addr_call sec_flg1
4157
4158 /* Nonzero if this section has any toc or got relocs.  */
4159 #define has_toc_reloc sec_flg2
4160
4161 /* Nonzero if this section has a call to another section that uses
4162    the toc or got.  */
4163 #define makes_toc_func_call sec_flg3
4164
4165 /* Recursion protection when determining above flag.  */
4166 #define call_check_in_progress sec_flg4
4167 #define call_check_done sec_flg5
4168
4169 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
4170
4171 #define ppc_hash_table(p) \
4172   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
4173   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
4174
4175 #define ppc_stub_hash_lookup(table, string, create, copy) \
4176   ((struct ppc_stub_hash_entry *) \
4177    bfd_hash_lookup ((table), (string), (create), (copy)))
4178
4179 #define ppc_branch_hash_lookup(table, string, create, copy) \
4180   ((struct ppc_branch_hash_entry *) \
4181    bfd_hash_lookup ((table), (string), (create), (copy)))
4182
4183 /* Create an entry in the stub hash table.  */
4184
4185 static struct bfd_hash_entry *
4186 stub_hash_newfunc (struct bfd_hash_entry *entry,
4187                    struct bfd_hash_table *table,
4188                    const char *string)
4189 {
4190   /* Allocate the structure if it has not already been allocated by a
4191      subclass.  */
4192   if (entry == NULL)
4193     {
4194       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
4195       if (entry == NULL)
4196         return entry;
4197     }
4198
4199   /* Call the allocation method of the superclass.  */
4200   entry = bfd_hash_newfunc (entry, table, string);
4201   if (entry != NULL)
4202     {
4203       struct ppc_stub_hash_entry *eh;
4204
4205       /* Initialize the local fields.  */
4206       eh = (struct ppc_stub_hash_entry *) entry;
4207       eh->stub_type = ppc_stub_none;
4208       eh->group = NULL;
4209       eh->stub_offset = 0;
4210       eh->target_value = 0;
4211       eh->target_section = NULL;
4212       eh->h = NULL;
4213       eh->plt_ent = NULL;
4214       eh->other = 0;
4215     }
4216
4217   return entry;
4218 }
4219
4220 /* Create an entry in the branch hash table.  */
4221
4222 static struct bfd_hash_entry *
4223 branch_hash_newfunc (struct bfd_hash_entry *entry,
4224                      struct bfd_hash_table *table,
4225                      const char *string)
4226 {
4227   /* Allocate the structure if it has not already been allocated by a
4228      subclass.  */
4229   if (entry == NULL)
4230     {
4231       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
4232       if (entry == NULL)
4233         return entry;
4234     }
4235
4236   /* Call the allocation method of the superclass.  */
4237   entry = bfd_hash_newfunc (entry, table, string);
4238   if (entry != NULL)
4239     {
4240       struct ppc_branch_hash_entry *eh;
4241
4242       /* Initialize the local fields.  */
4243       eh = (struct ppc_branch_hash_entry *) entry;
4244       eh->offset = 0;
4245       eh->iter = 0;
4246     }
4247
4248   return entry;
4249 }
4250
4251 /* Create an entry in a ppc64 ELF linker hash table.  */
4252
4253 static struct bfd_hash_entry *
4254 link_hash_newfunc (struct bfd_hash_entry *entry,
4255                    struct bfd_hash_table *table,
4256                    const char *string)
4257 {
4258   /* Allocate the structure if it has not already been allocated by a
4259      subclass.  */
4260   if (entry == NULL)
4261     {
4262       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
4263       if (entry == NULL)
4264         return entry;
4265     }
4266
4267   /* Call the allocation method of the superclass.  */
4268   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
4269   if (entry != NULL)
4270     {
4271       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
4272
4273       memset (&eh->u.stub_cache, 0,
4274               (sizeof (struct ppc_link_hash_entry)
4275                - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
4276
4277       /* When making function calls, old ABI code references function entry
4278          points (dot symbols), while new ABI code references the function
4279          descriptor symbol.  We need to make any combination of reference and
4280          definition work together, without breaking archive linking.
4281
4282          For a defined function "foo" and an undefined call to "bar":
4283          An old object defines "foo" and ".foo", references ".bar" (possibly
4284          "bar" too).
4285          A new object defines "foo" and references "bar".
4286
4287          A new object thus has no problem with its undefined symbols being
4288          satisfied by definitions in an old object.  On the other hand, the
4289          old object won't have ".bar" satisfied by a new object.
4290
4291          Keep a list of newly added dot-symbols.  */
4292
4293       if (string[0] == '.')
4294         {
4295           struct ppc_link_hash_table *htab;
4296
4297           htab = (struct ppc_link_hash_table *) table;
4298           eh->u.next_dot_sym = htab->dot_syms;
4299           htab->dot_syms = eh;
4300         }
4301     }
4302
4303   return entry;
4304 }
4305
4306 struct tocsave_entry {
4307   asection *sec;
4308   bfd_vma offset;
4309 };
4310
4311 static hashval_t
4312 tocsave_htab_hash (const void *p)
4313 {
4314   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
4315   return ((bfd_vma) (intptr_t) e->sec ^ e->offset) >> 3;
4316 }
4317
4318 static int
4319 tocsave_htab_eq (const void *p1, const void *p2)
4320 {
4321   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
4322   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
4323   return e1->sec == e2->sec && e1->offset == e2->offset;
4324 }
4325
4326 /* Destroy a ppc64 ELF linker hash table.  */
4327
4328 static void
4329 ppc64_elf_link_hash_table_free (bfd *obfd)
4330 {
4331   struct ppc_link_hash_table *htab;
4332
4333   htab = (struct ppc_link_hash_table *) obfd->link.hash;
4334   if (htab->tocsave_htab)
4335     htab_delete (htab->tocsave_htab);
4336   bfd_hash_table_free (&htab->branch_hash_table);
4337   bfd_hash_table_free (&htab->stub_hash_table);
4338   _bfd_elf_link_hash_table_free (obfd);
4339 }
4340
4341 /* Create a ppc64 ELF linker hash table.  */
4342
4343 static struct bfd_link_hash_table *
4344 ppc64_elf_link_hash_table_create (bfd *abfd)
4345 {
4346   struct ppc_link_hash_table *htab;
4347   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
4348
4349   htab = bfd_zmalloc (amt);
4350   if (htab == NULL)
4351     return NULL;
4352
4353   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
4354                                       sizeof (struct ppc_link_hash_entry),
4355                                       PPC64_ELF_DATA))
4356     {
4357       free (htab);
4358       return NULL;
4359     }
4360
4361   /* Init the stub hash table too.  */
4362   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
4363                             sizeof (struct ppc_stub_hash_entry)))
4364     {
4365       _bfd_elf_link_hash_table_free (abfd);
4366       return NULL;
4367     }
4368
4369   /* And the branch hash table.  */
4370   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
4371                             sizeof (struct ppc_branch_hash_entry)))
4372     {
4373       bfd_hash_table_free (&htab->stub_hash_table);
4374       _bfd_elf_link_hash_table_free (abfd);
4375       return NULL;
4376     }
4377
4378   htab->tocsave_htab = htab_try_create (1024,
4379                                         tocsave_htab_hash,
4380                                         tocsave_htab_eq,
4381                                         NULL);
4382   if (htab->tocsave_htab == NULL)
4383     {
4384       ppc64_elf_link_hash_table_free (abfd);
4385       return NULL;
4386     }
4387   htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
4388
4389   /* Initializing two fields of the union is just cosmetic.  We really
4390      only care about glist, but when compiled on a 32-bit host the
4391      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
4392      debugger inspection of these fields look nicer.  */
4393   htab->elf.init_got_refcount.refcount = 0;
4394   htab->elf.init_got_refcount.glist = NULL;
4395   htab->elf.init_plt_refcount.refcount = 0;
4396   htab->elf.init_plt_refcount.glist = NULL;
4397   htab->elf.init_got_offset.offset = 0;
4398   htab->elf.init_got_offset.glist = NULL;
4399   htab->elf.init_plt_offset.offset = 0;
4400   htab->elf.init_plt_offset.glist = NULL;
4401
4402   return &htab->elf.root;
4403 }
4404
4405 /* Create sections for linker generated code.  */
4406
4407 static bfd_boolean
4408 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
4409 {
4410   struct ppc_link_hash_table *htab;
4411   flagword flags;
4412
4413   htab = ppc_hash_table (info);
4414
4415   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
4416            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4417   if (htab->params->save_restore_funcs)
4418     {
4419       /* Create .sfpr for code to save and restore fp regs.  */
4420       htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
4421                                                        flags);
4422       if (htab->sfpr == NULL
4423           || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
4424         return FALSE;
4425     }
4426
4427   if (bfd_link_relocatable (info))
4428     return TRUE;
4429
4430   /* Create .glink for lazy dynamic linking support.  */
4431   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
4432                                                     flags);
4433   if (htab->glink == NULL
4434       || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
4435     return FALSE;
4436
4437   if (!info->no_ld_generated_unwind_info)
4438     {
4439       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
4440                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4441       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
4442                                                                  ".eh_frame",
4443                                                                  flags);
4444       if (htab->glink_eh_frame == NULL
4445           || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
4446         return FALSE;
4447     }
4448
4449   flags = SEC_ALLOC | SEC_LINKER_CREATED;
4450   htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
4451   if (htab->elf.iplt == NULL
4452       || ! bfd_set_section_alignment (dynobj, htab->elf.iplt, 3))
4453     return FALSE;
4454
4455   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4456            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4457   htab->elf.irelplt
4458     = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
4459   if (htab->elf.irelplt == NULL
4460       || ! bfd_set_section_alignment (dynobj, htab->elf.irelplt, 3))
4461     return FALSE;
4462
4463   /* Create branch lookup table for plt_branch stubs.  */
4464   flags = (SEC_ALLOC | SEC_LOAD
4465            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4466   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
4467                                                    flags);
4468   if (htab->brlt == NULL
4469       || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
4470     return FALSE;
4471
4472   if (!bfd_link_pic (info))
4473     return TRUE;
4474
4475   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4476            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4477   htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
4478                                                       ".rela.branch_lt",
4479                                                       flags);
4480   if (htab->relbrlt == NULL
4481       || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
4482     return FALSE;
4483
4484   return TRUE;
4485 }
4486
4487 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
4488
4489 bfd_boolean
4490 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
4491                          struct ppc64_elf_params *params)
4492 {
4493   struct ppc_link_hash_table *htab;
4494
4495   elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
4496
4497 /* Always hook our dynamic sections into the first bfd, which is the
4498    linker created stub bfd.  This ensures that the GOT header is at
4499    the start of the output TOC section.  */
4500   htab = ppc_hash_table (info);
4501   htab->elf.dynobj = params->stub_bfd;
4502   htab->params = params;
4503
4504   return create_linkage_sections (htab->elf.dynobj, info);
4505 }
4506
4507 /* Build a name for an entry in the stub hash table.  */
4508
4509 static char *
4510 ppc_stub_name (const asection *input_section,
4511                const asection *sym_sec,
4512                const struct ppc_link_hash_entry *h,
4513                const Elf_Internal_Rela *rel)
4514 {
4515   char *stub_name;
4516   ssize_t len;
4517
4518   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
4519      offsets from a sym as a branch target?  In fact, we could
4520      probably assume the addend is always zero.  */
4521   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
4522
4523   if (h)
4524     {
4525       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
4526       stub_name = bfd_malloc (len);
4527       if (stub_name == NULL)
4528         return stub_name;
4529
4530       len = sprintf (stub_name, "%08x.%s+%x",
4531                      input_section->id & 0xffffffff,
4532                      h->elf.root.root.string,
4533                      (int) rel->r_addend & 0xffffffff);
4534     }
4535   else
4536     {
4537       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
4538       stub_name = bfd_malloc (len);
4539       if (stub_name == NULL)
4540         return stub_name;
4541
4542       len = sprintf (stub_name, "%08x.%x:%x+%x",
4543                      input_section->id & 0xffffffff,
4544                      sym_sec->id & 0xffffffff,
4545                      (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
4546                      (int) rel->r_addend & 0xffffffff);
4547     }
4548   if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
4549     stub_name[len - 2] = 0;
4550   return stub_name;
4551 }
4552
4553 /* Look up an entry in the stub hash.  Stub entries are cached because
4554    creating the stub name takes a bit of time.  */
4555
4556 static struct ppc_stub_hash_entry *
4557 ppc_get_stub_entry (const asection *input_section,
4558                     const asection *sym_sec,
4559                     struct ppc_link_hash_entry *h,
4560                     const Elf_Internal_Rela *rel,
4561                     struct ppc_link_hash_table *htab)
4562 {
4563   struct ppc_stub_hash_entry *stub_entry;
4564   struct map_stub *group;
4565
4566   /* If this input section is part of a group of sections sharing one
4567      stub section, then use the id of the first section in the group.
4568      Stub names need to include a section id, as there may well be
4569      more than one stub used to reach say, printf, and we need to
4570      distinguish between them.  */
4571   group = htab->sec_info[input_section->id].u.group;
4572   if (group == NULL)
4573     return NULL;
4574
4575   if (h != NULL && h->u.stub_cache != NULL
4576       && h->u.stub_cache->h == h
4577       && h->u.stub_cache->group == group)
4578     {
4579       stub_entry = h->u.stub_cache;
4580     }
4581   else
4582     {
4583       char *stub_name;
4584
4585       stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
4586       if (stub_name == NULL)
4587         return NULL;
4588
4589       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
4590                                          stub_name, FALSE, FALSE);
4591       if (h != NULL)
4592         h->u.stub_cache = stub_entry;
4593
4594       free (stub_name);
4595     }
4596
4597   return stub_entry;
4598 }
4599
4600 /* Add a new stub entry to the stub hash.  Not all fields of the new
4601    stub entry are initialised.  */
4602
4603 static struct ppc_stub_hash_entry *
4604 ppc_add_stub (const char *stub_name,
4605               asection *section,
4606               struct bfd_link_info *info)
4607 {
4608   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4609   struct map_stub *group;
4610   asection *link_sec;
4611   asection *stub_sec;
4612   struct ppc_stub_hash_entry *stub_entry;
4613
4614   group = htab->sec_info[section->id].u.group;
4615   link_sec = group->link_sec;
4616   stub_sec = group->stub_sec;
4617   if (stub_sec == NULL)
4618     {
4619       size_t namelen;
4620       bfd_size_type len;
4621       char *s_name;
4622
4623       namelen = strlen (link_sec->name);
4624       len = namelen + sizeof (STUB_SUFFIX);
4625       s_name = bfd_alloc (htab->params->stub_bfd, len);
4626       if (s_name == NULL)
4627         return NULL;
4628
4629       memcpy (s_name, link_sec->name, namelen);
4630       memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
4631       stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
4632       if (stub_sec == NULL)
4633         return NULL;
4634       group->stub_sec = stub_sec;
4635     }
4636
4637   /* Enter this entry into the linker stub hash table.  */
4638   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
4639                                      TRUE, FALSE);
4640   if (stub_entry == NULL)
4641     {
4642       /* xgettext:c-format */
4643       info->callbacks->einfo (_("%P: %B: cannot create stub entry %s\n"),
4644                               section->owner, stub_name);
4645       return NULL;
4646     }
4647
4648   stub_entry->group = group;
4649   stub_entry->stub_offset = 0;
4650   return stub_entry;
4651 }
4652
4653 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
4654    not already done.  */
4655
4656 static bfd_boolean
4657 create_got_section (bfd *abfd, struct bfd_link_info *info)
4658 {
4659   asection *got, *relgot;
4660   flagword flags;
4661   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4662
4663   if (!is_ppc64_elf (abfd))
4664     return FALSE;
4665   if (htab == NULL)
4666     return FALSE;
4667
4668   if (!htab->elf.sgot
4669       && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
4670     return FALSE;
4671
4672   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4673            | SEC_LINKER_CREATED);
4674
4675   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4676   if (!got
4677       || !bfd_set_section_alignment (abfd, got, 3))
4678     return FALSE;
4679
4680   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
4681                                                flags | SEC_READONLY);
4682   if (!relgot
4683       || ! bfd_set_section_alignment (abfd, relgot, 3))
4684     return FALSE;
4685
4686   ppc64_elf_tdata (abfd)->got = got;
4687   ppc64_elf_tdata (abfd)->relgot = relgot;
4688   return TRUE;
4689 }
4690
4691 /* Follow indirect and warning symbol links.  */
4692
4693 static inline struct bfd_link_hash_entry *
4694 follow_link (struct bfd_link_hash_entry *h)
4695 {
4696   while (h->type == bfd_link_hash_indirect
4697          || h->type == bfd_link_hash_warning)
4698     h = h->u.i.link;
4699   return h;
4700 }
4701
4702 static inline struct elf_link_hash_entry *
4703 elf_follow_link (struct elf_link_hash_entry *h)
4704 {
4705   return (struct elf_link_hash_entry *) follow_link (&h->root);
4706 }
4707
4708 static inline struct ppc_link_hash_entry *
4709 ppc_follow_link (struct ppc_link_hash_entry *h)
4710 {
4711   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
4712 }
4713
4714 /* Merge PLT info on FROM with that on TO.  */
4715
4716 static void
4717 move_plt_plist (struct ppc_link_hash_entry *from,
4718                 struct ppc_link_hash_entry *to)
4719 {
4720   if (from->elf.plt.plist != NULL)
4721     {
4722       if (to->elf.plt.plist != NULL)
4723         {
4724           struct plt_entry **entp;
4725           struct plt_entry *ent;
4726
4727           for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
4728             {
4729               struct plt_entry *dent;
4730
4731               for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
4732                 if (dent->addend == ent->addend)
4733                   {
4734                     dent->plt.refcount += ent->plt.refcount;
4735                     *entp = ent->next;
4736                     break;
4737                   }
4738               if (dent == NULL)
4739                 entp = &ent->next;
4740             }
4741           *entp = to->elf.plt.plist;
4742         }
4743
4744       to->elf.plt.plist = from->elf.plt.plist;
4745       from->elf.plt.plist = NULL;
4746     }
4747 }
4748
4749 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
4750
4751 static void
4752 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
4753                                 struct elf_link_hash_entry *dir,
4754                                 struct elf_link_hash_entry *ind)
4755 {
4756   struct ppc_link_hash_entry *edir, *eind;
4757
4758   edir = (struct ppc_link_hash_entry *) dir;
4759   eind = (struct ppc_link_hash_entry *) ind;
4760
4761   edir->is_func |= eind->is_func;
4762   edir->is_func_descriptor |= eind->is_func_descriptor;
4763   edir->tls_mask |= eind->tls_mask;
4764   if (eind->oh != NULL)
4765     edir->oh = ppc_follow_link (eind->oh);
4766
4767   /* If called to transfer flags for a weakdef during processing
4768      of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
4769      We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
4770   if (!(ELIMINATE_COPY_RELOCS
4771         && eind->elf.root.type != bfd_link_hash_indirect
4772         && edir->elf.dynamic_adjusted))
4773     edir->elf.non_got_ref |= eind->elf.non_got_ref;
4774
4775   if (edir->elf.versioned != versioned_hidden)
4776     edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
4777   edir->elf.ref_regular |= eind->elf.ref_regular;
4778   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
4779   edir->elf.needs_plt |= eind->elf.needs_plt;
4780   edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
4781
4782   /* If we were called to copy over info for a weak sym, don't copy
4783      dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
4784      in order to simplify readonly_dynrelocs and save a field in the
4785      symbol hash entry, but that means dyn_relocs can't be used in any
4786      tests about a specific symbol, or affect other symbol flags which
4787      are then tested.
4788      Chain weakdefs so we can get from the weakdef back to an alias.
4789      The list is circular so that we don't need to use u.weakdef as
4790      well as this list to look at all aliases.  */
4791   if (eind->elf.root.type != bfd_link_hash_indirect)
4792     {
4793       struct ppc_link_hash_entry *cur, *add, *next;
4794
4795       add = eind;
4796       do
4797         {
4798           cur = edir->weakref;
4799           if (cur != NULL)
4800             {
4801               do
4802                 {
4803                   /* We can be called twice for the same symbols.
4804                      Don't make multiple loops.  */
4805                   if (cur == add)
4806                     return;
4807                   cur = cur->weakref;
4808                 } while (cur != edir);
4809             }
4810           next = add->weakref;
4811           if (cur != add)
4812             {
4813               add->weakref = edir->weakref != NULL ? edir->weakref : edir;
4814               edir->weakref = add;
4815             }
4816           add = next;
4817         } while (add != NULL && add != eind);
4818       return;
4819     }
4820
4821   /* Copy over any dynamic relocs we may have on the indirect sym.  */
4822   if (eind->dyn_relocs != NULL)
4823     {
4824       if (edir->dyn_relocs != NULL)
4825         {
4826           struct elf_dyn_relocs **pp;
4827           struct elf_dyn_relocs *p;
4828
4829           /* Add reloc counts against the indirect sym to the direct sym
4830              list.  Merge any entries against the same section.  */
4831           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
4832             {
4833               struct elf_dyn_relocs *q;
4834
4835               for (q = edir->dyn_relocs; q != NULL; q = q->next)
4836                 if (q->sec == p->sec)
4837                   {
4838                     q->pc_count += p->pc_count;
4839                     q->count += p->count;
4840                     *pp = p->next;
4841                     break;
4842                   }
4843               if (q == NULL)
4844                 pp = &p->next;
4845             }
4846           *pp = edir->dyn_relocs;
4847         }
4848
4849       edir->dyn_relocs = eind->dyn_relocs;
4850       eind->dyn_relocs = NULL;
4851     }
4852
4853   /* Copy over got entries that we may have already seen to the
4854      symbol which just became indirect.  */
4855   if (eind->elf.got.glist != NULL)
4856     {
4857       if (edir->elf.got.glist != NULL)
4858         {
4859           struct got_entry **entp;
4860           struct got_entry *ent;
4861
4862           for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
4863             {
4864               struct got_entry *dent;
4865
4866               for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
4867                 if (dent->addend == ent->addend
4868                     && dent->owner == ent->owner
4869                     && dent->tls_type == ent->tls_type)
4870                   {
4871                     dent->got.refcount += ent->got.refcount;
4872                     *entp = ent->next;
4873                     break;
4874                   }
4875               if (dent == NULL)
4876                 entp = &ent->next;
4877             }
4878           *entp = edir->elf.got.glist;
4879         }
4880
4881       edir->elf.got.glist = eind->elf.got.glist;
4882       eind->elf.got.glist = NULL;
4883     }
4884
4885   /* And plt entries.  */
4886   move_plt_plist (eind, edir);
4887
4888   if (eind->elf.dynindx != -1)
4889     {
4890       if (edir->elf.dynindx != -1)
4891         _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4892                                 edir->elf.dynstr_index);
4893       edir->elf.dynindx = eind->elf.dynindx;
4894       edir->elf.dynstr_index = eind->elf.dynstr_index;
4895       eind->elf.dynindx = -1;
4896       eind->elf.dynstr_index = 0;
4897     }
4898 }
4899
4900 /* Find the function descriptor hash entry from the given function code
4901    hash entry FH.  Link the entries via their OH fields.  */
4902
4903 static struct ppc_link_hash_entry *
4904 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4905 {
4906   struct ppc_link_hash_entry *fdh = fh->oh;
4907
4908   if (fdh == NULL)
4909     {
4910       const char *fd_name = fh->elf.root.root.string + 1;
4911
4912       fdh = (struct ppc_link_hash_entry *)
4913         elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
4914       if (fdh == NULL)
4915         return fdh;
4916
4917       fdh->is_func_descriptor = 1;
4918       fdh->oh = fh;
4919       fh->is_func = 1;
4920       fh->oh = fdh;
4921     }
4922
4923   fdh = ppc_follow_link (fdh);
4924   fdh->is_func_descriptor = 1;
4925   fdh->oh = fh;
4926   return fdh;
4927 }
4928
4929 /* Make a fake function descriptor sym for the undefined code sym FH.  */
4930
4931 static struct ppc_link_hash_entry *
4932 make_fdh (struct bfd_link_info *info,
4933           struct ppc_link_hash_entry *fh)
4934 {
4935   bfd *abfd = fh->elf.root.u.undef.abfd;
4936   struct bfd_link_hash_entry *bh = NULL;
4937   struct ppc_link_hash_entry *fdh;
4938   flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
4939                     ? BSF_WEAK
4940                     : BSF_GLOBAL);
4941
4942   if (!_bfd_generic_link_add_one_symbol (info, abfd,
4943                                          fh->elf.root.root.string + 1,
4944                                          flags, bfd_und_section_ptr, 0,
4945                                          NULL, FALSE, FALSE, &bh))
4946     return NULL;
4947
4948   fdh = (struct ppc_link_hash_entry *) bh;
4949   fdh->elf.non_elf = 0;
4950   fdh->fake = 1;
4951   fdh->is_func_descriptor = 1;
4952   fdh->oh = fh;
4953   fh->is_func = 1;
4954   fh->oh = fdh;
4955   return fdh;
4956 }
4957
4958 /* Fix function descriptor symbols defined in .opd sections to be
4959    function type.  */
4960
4961 static bfd_boolean
4962 ppc64_elf_add_symbol_hook (bfd *ibfd,
4963                            struct bfd_link_info *info,
4964                            Elf_Internal_Sym *isym,
4965                            const char **name,
4966                            flagword *flags ATTRIBUTE_UNUSED,
4967                            asection **sec,
4968                            bfd_vma *value)
4969 {
4970   if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4971       && (ibfd->flags & DYNAMIC) == 0
4972       && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour)
4973     elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc;
4974
4975   if (*sec != NULL
4976       && strcmp ((*sec)->name, ".opd") == 0)
4977     {
4978       asection *code_sec;
4979
4980       if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
4981             || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
4982         isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4983
4984       /* If the symbol is a function defined in .opd, and the function
4985          code is in a discarded group, let it appear to be undefined.  */
4986       if (!bfd_link_relocatable (info)
4987           && (*sec)->reloc_count != 0
4988           && opd_entry_value (*sec, *value, &code_sec, NULL,
4989                               FALSE) != (bfd_vma) -1
4990           && discarded_section (code_sec))
4991         {
4992           *sec = bfd_und_section_ptr;
4993           isym->st_shndx = SHN_UNDEF;
4994         }
4995     }
4996   else if (*sec != NULL
4997            && strcmp ((*sec)->name, ".toc") == 0
4998            && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
4999     {
5000       struct ppc_link_hash_table *htab = ppc_hash_table (info);
5001       if (htab != NULL)
5002         htab->params->object_in_toc = 1;
5003     }
5004
5005   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
5006     {
5007       if (abiversion (ibfd) == 0)
5008         set_abiversion (ibfd, 2);
5009       else if (abiversion (ibfd) == 1)
5010         {
5011           info->callbacks->einfo (_("%P: symbol '%s' has invalid st_other"
5012                                     " for ABI version 1\n"), name);
5013           bfd_set_error (bfd_error_bad_value);
5014           return FALSE;
5015         }
5016     }
5017
5018   return TRUE;
5019 }
5020
5021 /* Merge non-visibility st_other attributes: local entry point.  */
5022
5023 static void
5024 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
5025                                   const Elf_Internal_Sym *isym,
5026                                   bfd_boolean definition,
5027                                   bfd_boolean dynamic)
5028 {
5029   if (definition && (!dynamic || !h->def_regular))
5030     h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
5031                 | ELF_ST_VISIBILITY (h->other));
5032 }
5033
5034 /* Hook called on merging a symbol.  We use this to clear "fake" since
5035    we now have a real symbol.  */
5036
5037 static bfd_boolean
5038 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
5039                         const Elf_Internal_Sym *isym,
5040                         asection **psec ATTRIBUTE_UNUSED,
5041                         bfd_boolean newdef ATTRIBUTE_UNUSED,
5042                         bfd_boolean olddef ATTRIBUTE_UNUSED,
5043                         bfd *oldbfd ATTRIBUTE_UNUSED,
5044                         const asection *oldsec ATTRIBUTE_UNUSED)
5045 {
5046   ((struct ppc_link_hash_entry *) h)->fake = 0;
5047   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
5048     ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1;
5049   return TRUE;
5050 }
5051
5052 /* This function makes an old ABI object reference to ".bar" cause the
5053    inclusion of a new ABI object archive that defines "bar".
5054    NAME is a symbol defined in an archive.  Return a symbol in the hash
5055    table that might be satisfied by the archive symbols.  */
5056
5057 static struct elf_link_hash_entry *
5058 ppc64_elf_archive_symbol_lookup (bfd *abfd,
5059                                  struct bfd_link_info *info,
5060                                  const char *name)
5061 {
5062   struct elf_link_hash_entry *h;
5063   char *dot_name;
5064   size_t len;
5065
5066   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
5067   if (h != NULL
5068       /* Don't return this sym if it is a fake function descriptor
5069          created by add_symbol_adjust.  */
5070       && !((struct ppc_link_hash_entry *) h)->fake)
5071     return h;
5072
5073   if (name[0] == '.')
5074     return h;
5075
5076   len = strlen (name);
5077   dot_name = bfd_alloc (abfd, len + 2);
5078   if (dot_name == NULL)
5079     return (struct elf_link_hash_entry *) 0 - 1;
5080   dot_name[0] = '.';
5081   memcpy (dot_name + 1, name, len + 1);
5082   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
5083   bfd_release (abfd, dot_name);
5084   return h;
5085 }
5086
5087 /* This function satisfies all old ABI object references to ".bar" if a
5088    new ABI object defines "bar".  Well, at least, undefined dot symbols
5089    are made weak.  This stops later archive searches from including an
5090    object if we already have a function descriptor definition.  It also
5091    prevents the linker complaining about undefined symbols.
5092    We also check and correct mismatched symbol visibility here.  The
5093    most restrictive visibility of the function descriptor and the
5094    function entry symbol is used.  */
5095
5096 static bfd_boolean
5097 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
5098 {
5099   struct ppc_link_hash_table *htab;
5100   struct ppc_link_hash_entry *fdh;
5101
5102   if (eh->elf.root.type == bfd_link_hash_warning)
5103     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
5104
5105   if (eh->elf.root.type == bfd_link_hash_indirect)
5106     return TRUE;
5107
5108   if (eh->elf.root.root.string[0] != '.')
5109     abort ();
5110
5111   htab = ppc_hash_table (info);
5112   if (htab == NULL)
5113     return FALSE;
5114
5115   fdh = lookup_fdh (eh, htab);
5116   if (fdh == NULL
5117       && !bfd_link_relocatable (info)
5118       && (eh->elf.root.type == bfd_link_hash_undefined
5119           || eh->elf.root.type == bfd_link_hash_undefweak)
5120       && eh->elf.ref_regular)
5121     {
5122       /* Make an undefined function descriptor sym, in order to
5123          pull in an --as-needed shared lib.  Archives are handled
5124          elsewhere.  */
5125       fdh = make_fdh (info, eh);
5126       if (fdh == NULL)
5127         return FALSE;
5128     }
5129
5130   if (fdh != NULL)
5131     {
5132       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
5133       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
5134
5135       /* Make both descriptor and entry symbol have the most
5136          constraining visibility of either symbol.  */
5137       if (entry_vis < descr_vis)
5138         fdh->elf.other += entry_vis - descr_vis;
5139       else if (entry_vis > descr_vis)
5140         eh->elf.other += descr_vis - entry_vis;
5141
5142       /* Propagate reference flags from entry symbol to function
5143          descriptor symbol.  */
5144       fdh->elf.root.non_ir_ref_regular |= eh->elf.root.non_ir_ref_regular;
5145       fdh->elf.root.non_ir_ref_dynamic |= eh->elf.root.non_ir_ref_dynamic;
5146       fdh->elf.ref_regular |= eh->elf.ref_regular;
5147       fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
5148
5149       if (!fdh->elf.forced_local
5150           && fdh->elf.dynindx == -1
5151           && fdh->elf.versioned != versioned_hidden
5152           && (bfd_link_dll (info)
5153               || fdh->elf.def_dynamic
5154               || fdh->elf.ref_dynamic)
5155           && (eh->elf.ref_regular
5156               || eh->elf.def_regular))
5157         {
5158           if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
5159             return FALSE;
5160         }
5161     }
5162
5163   return TRUE;
5164 }
5165
5166 /* Set up opd section info and abiversion for IBFD, and process list
5167    of dot-symbols we made in link_hash_newfunc.  */
5168
5169 static bfd_boolean
5170 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
5171 {
5172   struct ppc_link_hash_table *htab;
5173   struct ppc_link_hash_entry **p, *eh;
5174   asection *opd = bfd_get_section_by_name (ibfd, ".opd");
5175
5176   if (opd != NULL && opd->size != 0)
5177     {
5178       BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
5179       ppc64_elf_section_data (opd)->sec_type = sec_opd;
5180
5181       if (abiversion (ibfd) == 0)
5182         set_abiversion (ibfd, 1);
5183       else if (abiversion (ibfd) >= 2)
5184         {
5185           /* xgettext:c-format */
5186           info->callbacks->einfo (_("%P: %B .opd not allowed in ABI"
5187                                     " version %d\n"),
5188                                   ibfd, abiversion (ibfd));
5189           bfd_set_error (bfd_error_bad_value);
5190           return FALSE;
5191         }
5192     }
5193
5194   if (is_ppc64_elf (info->output_bfd))
5195     {
5196       /* For input files without an explicit abiversion in e_flags
5197          we should have flagged any with symbol st_other bits set
5198          as ELFv1 and above flagged those with .opd as ELFv2.
5199          Set the output abiversion if not yet set, and for any input
5200          still ambiguous, take its abiversion from the output.
5201          Differences in ABI are reported later.  */
5202       if (abiversion (info->output_bfd) == 0)
5203         set_abiversion (info->output_bfd, abiversion (ibfd));
5204       else if (abiversion (ibfd) == 0)
5205         set_abiversion (ibfd, abiversion (info->output_bfd));
5206     }
5207
5208   htab = ppc_hash_table (info);
5209   if (htab == NULL)
5210     return TRUE;
5211
5212   if (opd != NULL && opd->size != 0
5213       && (ibfd->flags & DYNAMIC) == 0
5214       && (opd->flags & SEC_RELOC) != 0
5215       && opd->reloc_count != 0
5216       && !bfd_is_abs_section (opd->output_section)
5217       && info->gc_sections)
5218     {
5219       /* Garbage collection needs some extra help with .opd sections.
5220          We don't want to necessarily keep everything referenced by
5221          relocs in .opd, as that would keep all functions.  Instead,
5222          if we reference an .opd symbol (a function descriptor), we
5223          want to keep the function code symbol's section.  This is
5224          easy for global symbols, but for local syms we need to keep
5225          information about the associated function section.  */
5226       bfd_size_type amt;
5227       asection **opd_sym_map;
5228       Elf_Internal_Shdr *symtab_hdr;
5229       Elf_Internal_Rela *relocs, *rel_end, *rel;
5230
5231       amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
5232       opd_sym_map = bfd_zalloc (ibfd, amt);
5233       if (opd_sym_map == NULL)
5234         return FALSE;
5235       ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
5236       relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
5237                                           info->keep_memory);
5238       if (relocs == NULL)
5239         return FALSE;
5240       symtab_hdr = &elf_symtab_hdr (ibfd);
5241       rel_end = relocs + opd->reloc_count - 1;
5242       for (rel = relocs; rel < rel_end; rel++)
5243         {
5244           enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
5245           unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
5246
5247           if (r_type == R_PPC64_ADDR64
5248               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC
5249               && r_symndx < symtab_hdr->sh_info)
5250             {
5251               Elf_Internal_Sym *isym;
5252               asection *s;
5253
5254               isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
5255               if (isym == NULL)
5256                 {
5257                   if (elf_section_data (opd)->relocs != relocs)
5258                     free (relocs);
5259                   return FALSE;
5260                 }
5261
5262               s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
5263               if (s != NULL && s != opd)
5264                 opd_sym_map[OPD_NDX (rel->r_offset)] = s;
5265             }
5266         }
5267       if (elf_section_data (opd)->relocs != relocs)
5268         free (relocs);
5269     }
5270
5271   p = &htab->dot_syms;
5272   while ((eh = *p) != NULL)
5273     {
5274       *p = NULL;
5275       if (&eh->elf == htab->elf.hgot)
5276         ;
5277       else if (htab->elf.hgot == NULL
5278                && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
5279         htab->elf.hgot = &eh->elf;
5280       else if (abiversion (ibfd) <= 1)
5281         {
5282           htab->need_func_desc_adj = 1;
5283           if (!add_symbol_adjust (eh, info))
5284             return FALSE;
5285         }
5286       p = &eh->u.next_dot_sym;
5287     }
5288   return TRUE;
5289 }
5290
5291 /* Undo hash table changes when an --as-needed input file is determined
5292    not to be needed.  */
5293
5294 static bfd_boolean
5295 ppc64_elf_notice_as_needed (bfd *ibfd,
5296                             struct bfd_link_info *info,
5297                             enum notice_asneeded_action act)
5298 {
5299   if (act == notice_not_needed)
5300     {
5301       struct ppc_link_hash_table *htab = ppc_hash_table (info);
5302
5303       if (htab == NULL)
5304         return FALSE;
5305
5306       htab->dot_syms = NULL;
5307     }
5308   return _bfd_elf_notice_as_needed (ibfd, info, act);
5309 }
5310
5311 /* If --just-symbols against a final linked binary, then assume we need
5312    toc adjusting stubs when calling functions defined there.  */
5313
5314 static void
5315 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
5316 {
5317   if ((sec->flags & SEC_CODE) != 0
5318       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
5319       && is_ppc64_elf (sec->owner))
5320     {
5321       if (abiversion (sec->owner) >= 2
5322           || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
5323         sec->has_toc_reloc = 1;
5324     }
5325   _bfd_elf_link_just_syms (sec, info);
5326 }
5327
5328 static struct plt_entry **
5329 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
5330                        unsigned long r_symndx, bfd_vma r_addend, int tls_type)
5331 {
5332   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
5333   struct plt_entry **local_plt;
5334   unsigned char *local_got_tls_masks;
5335
5336   if (local_got_ents == NULL)
5337     {
5338       bfd_size_type size = symtab_hdr->sh_info;
5339
5340       size *= (sizeof (*local_got_ents)
5341                + sizeof (*local_plt)
5342                + sizeof (*local_got_tls_masks));
5343       local_got_ents = bfd_zalloc (abfd, size);
5344       if (local_got_ents == NULL)
5345         return NULL;
5346       elf_local_got_ents (abfd) = local_got_ents;
5347     }
5348
5349   if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0)
5350     {
5351       struct got_entry *ent;
5352
5353       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
5354         if (ent->addend == r_addend
5355             && ent->owner == abfd
5356             && ent->tls_type == tls_type)
5357           break;
5358       if (ent == NULL)
5359         {
5360           bfd_size_type amt = sizeof (*ent);
5361           ent = bfd_alloc (abfd, amt);
5362           if (ent == NULL)
5363             return FALSE;
5364           ent->next = local_got_ents[r_symndx];
5365           ent->addend = r_addend;
5366           ent->owner = abfd;
5367           ent->tls_type = tls_type;
5368           ent->is_indirect = FALSE;
5369           ent->got.refcount = 0;
5370           local_got_ents[r_symndx] = ent;
5371         }
5372       ent->got.refcount += 1;
5373     }
5374
5375   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
5376   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
5377   local_got_tls_masks[r_symndx] |= tls_type;
5378
5379   return local_plt + r_symndx;
5380 }
5381
5382 static bfd_boolean
5383 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
5384 {
5385   struct plt_entry *ent;
5386
5387   for (ent = *plist; ent != NULL; ent = ent->next)
5388     if (ent->addend == addend)
5389       break;
5390   if (ent == NULL)
5391     {
5392       bfd_size_type amt = sizeof (*ent);
5393       ent = bfd_alloc (abfd, amt);
5394       if (ent == NULL)
5395         return FALSE;
5396       ent->next = *plist;
5397       ent->addend = addend;
5398       ent->plt.refcount = 0;
5399       *plist = ent;
5400     }
5401   ent->plt.refcount += 1;
5402   return TRUE;
5403 }
5404
5405 static bfd_boolean
5406 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
5407 {
5408   return (r_type == R_PPC64_REL24
5409           || r_type == R_PPC64_REL14
5410           || r_type == R_PPC64_REL14_BRTAKEN
5411           || r_type == R_PPC64_REL14_BRNTAKEN
5412           || r_type == R_PPC64_ADDR24
5413           || r_type == R_PPC64_ADDR14
5414           || r_type == R_PPC64_ADDR14_BRTAKEN
5415           || r_type == R_PPC64_ADDR14_BRNTAKEN);
5416 }
5417
5418 /* Look through the relocs for a section during the first phase, and
5419    calculate needed space in the global offset table, procedure
5420    linkage table, and dynamic reloc sections.  */
5421
5422 static bfd_boolean
5423 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
5424                         asection *sec, const Elf_Internal_Rela *relocs)
5425 {
5426   struct ppc_link_hash_table *htab;
5427   Elf_Internal_Shdr *symtab_hdr;
5428   struct elf_link_hash_entry **sym_hashes;
5429   const Elf_Internal_Rela *rel;
5430   const Elf_Internal_Rela *rel_end;
5431   asection *sreloc;
5432   struct elf_link_hash_entry *tga, *dottga;
5433   bfd_boolean is_opd;
5434
5435   if (bfd_link_relocatable (info))
5436     return TRUE;
5437
5438   /* Don't do anything special with non-loaded, non-alloced sections.
5439      In particular, any relocs in such sections should not affect GOT
5440      and PLT reference counting (ie. we don't allow them to create GOT
5441      or PLT entries), there's no possibility or desire to optimize TLS
5442      relocs, and there's not much point in propagating relocs to shared
5443      libs that the dynamic linker won't relocate.  */
5444   if ((sec->flags & SEC_ALLOC) == 0)
5445     return TRUE;
5446
5447   BFD_ASSERT (is_ppc64_elf (abfd));
5448
5449   htab = ppc_hash_table (info);
5450   if (htab == NULL)
5451     return FALSE;
5452
5453   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
5454                               FALSE, FALSE, TRUE);
5455   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
5456                                  FALSE, FALSE, TRUE);
5457   symtab_hdr = &elf_symtab_hdr (abfd);
5458   sym_hashes = elf_sym_hashes (abfd);
5459   sreloc = NULL;
5460   is_opd = ppc64_elf_section_data (sec)->sec_type == sec_opd;
5461   rel_end = relocs + sec->reloc_count;
5462   for (rel = relocs; rel < rel_end; rel++)
5463     {
5464       unsigned long r_symndx;
5465       struct elf_link_hash_entry *h;
5466       enum elf_ppc64_reloc_type r_type;
5467       int tls_type;
5468       struct _ppc64_elf_section_data *ppc64_sec;
5469       struct plt_entry **ifunc, **plt_list;
5470
5471       r_symndx = ELF64_R_SYM (rel->r_info);
5472       if (r_symndx < symtab_hdr->sh_info)
5473         h = NULL;
5474       else
5475         {
5476           struct ppc_link_hash_entry *eh;
5477
5478           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5479           h = elf_follow_link (h);
5480           eh = (struct ppc_link_hash_entry *) h;
5481
5482           /* PR15323, ref flags aren't set for references in the same
5483              object.  */
5484           h->root.non_ir_ref_regular = 1;
5485           if (eh->is_func && eh->oh != NULL)
5486             eh->oh->elf.root.non_ir_ref_regular = 1;
5487
5488           if (h == htab->elf.hgot)
5489             sec->has_toc_reloc = 1;
5490         }
5491
5492       tls_type = 0;
5493       ifunc = NULL;
5494       if (h != NULL)
5495         {
5496           if (h->type == STT_GNU_IFUNC)
5497             {
5498               h->needs_plt = 1;
5499               ifunc = &h->plt.plist;
5500             }
5501         }
5502       else
5503         {
5504           Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5505                                                           abfd, r_symndx);
5506           if (isym == NULL)
5507             return FALSE;
5508
5509           if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
5510             {
5511               ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
5512                                              rel->r_addend, PLT_IFUNC);
5513               if (ifunc == NULL)
5514                 return FALSE;
5515             }
5516         }
5517
5518       r_type = ELF64_R_TYPE (rel->r_info);
5519       switch (r_type)
5520         {
5521         case R_PPC64_TLSGD:
5522         case R_PPC64_TLSLD:
5523           /* These special tls relocs tie a call to __tls_get_addr with
5524              its parameter symbol.  */
5525           break;
5526
5527         case R_PPC64_GOT_TLSLD16:
5528         case R_PPC64_GOT_TLSLD16_LO:
5529         case R_PPC64_GOT_TLSLD16_HI:
5530         case R_PPC64_GOT_TLSLD16_HA:
5531           tls_type = TLS_TLS | TLS_LD;
5532           goto dogottls;
5533
5534         case R_PPC64_GOT_TLSGD16:
5535         case R_PPC64_GOT_TLSGD16_LO:
5536         case R_PPC64_GOT_TLSGD16_HI:
5537         case R_PPC64_GOT_TLSGD16_HA:
5538           tls_type = TLS_TLS | TLS_GD;
5539           goto dogottls;
5540
5541         case R_PPC64_GOT_TPREL16_DS:
5542         case R_PPC64_GOT_TPREL16_LO_DS:
5543         case R_PPC64_GOT_TPREL16_HI:
5544         case R_PPC64_GOT_TPREL16_HA:
5545           if (bfd_link_dll (info))
5546             info->flags |= DF_STATIC_TLS;
5547           tls_type = TLS_TLS | TLS_TPREL;
5548           goto dogottls;
5549
5550         case R_PPC64_GOT_DTPREL16_DS:
5551         case R_PPC64_GOT_DTPREL16_LO_DS:
5552         case R_PPC64_GOT_DTPREL16_HI:
5553         case R_PPC64_GOT_DTPREL16_HA:
5554           tls_type = TLS_TLS | TLS_DTPREL;
5555         dogottls:
5556           sec->has_tls_reloc = 1;
5557           /* Fall through */
5558
5559         case R_PPC64_GOT16:
5560         case R_PPC64_GOT16_DS:
5561         case R_PPC64_GOT16_HA:
5562         case R_PPC64_GOT16_HI:
5563         case R_PPC64_GOT16_LO:
5564         case R_PPC64_GOT16_LO_DS:
5565           /* This symbol requires a global offset table entry.  */
5566           sec->has_toc_reloc = 1;
5567           if (r_type == R_PPC64_GOT_TLSLD16
5568               || r_type == R_PPC64_GOT_TLSGD16
5569               || r_type == R_PPC64_GOT_TPREL16_DS
5570               || r_type == R_PPC64_GOT_DTPREL16_DS
5571               || r_type == R_PPC64_GOT16
5572               || r_type == R_PPC64_GOT16_DS)
5573             {
5574               htab->do_multi_toc = 1;
5575               ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5576             }
5577
5578           if (ppc64_elf_tdata (abfd)->got == NULL
5579               && !create_got_section (abfd, info))
5580             return FALSE;
5581
5582           if (h != NULL)
5583             {
5584               struct ppc_link_hash_entry *eh;
5585               struct got_entry *ent;
5586
5587               eh = (struct ppc_link_hash_entry *) h;
5588               for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
5589                 if (ent->addend == rel->r_addend
5590                     && ent->owner == abfd
5591                     && ent->tls_type == tls_type)
5592                   break;
5593               if (ent == NULL)
5594                 {
5595                   bfd_size_type amt = sizeof (*ent);
5596                   ent = bfd_alloc (abfd, amt);
5597                   if (ent == NULL)
5598                     return FALSE;
5599                   ent->next = eh->elf.got.glist;
5600                   ent->addend = rel->r_addend;
5601                   ent->owner = abfd;
5602                   ent->tls_type = tls_type;
5603                   ent->is_indirect = FALSE;
5604                   ent->got.refcount = 0;
5605                   eh->elf.got.glist = ent;
5606                 }
5607               ent->got.refcount += 1;
5608               eh->tls_mask |= tls_type;
5609             }
5610           else
5611             /* This is a global offset table entry for a local symbol.  */
5612             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5613                                         rel->r_addend, tls_type))
5614               return FALSE;
5615
5616           /* We may also need a plt entry if the symbol turns out to be
5617              an ifunc.  */
5618           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
5619             {
5620               if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5621                 return FALSE;
5622             }
5623           break;
5624
5625         case R_PPC64_PLT16_HA:
5626         case R_PPC64_PLT16_HI:
5627         case R_PPC64_PLT16_LO:
5628         case R_PPC64_PLT32:
5629         case R_PPC64_PLT64:
5630           /* This symbol requires a procedure linkage table entry.  */
5631           plt_list = ifunc;
5632           if (h != NULL)
5633             {
5634               h->needs_plt = 1;
5635               if (h->root.root.string[0] == '.'
5636                   && h->root.root.string[1] != '\0')
5637                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
5638               plt_list = &h->plt.plist;
5639             }
5640           if (plt_list == NULL)
5641             {
5642               /* It does not make sense to have a procedure linkage
5643                  table entry for a non-ifunc local symbol.  */
5644               info->callbacks->einfo
5645                 /* xgettext:c-format */
5646                 (_("%H: %s reloc against local symbol\n"),
5647                  abfd, sec, rel->r_offset,
5648                  ppc64_elf_howto_table[r_type]->name);
5649               bfd_set_error (bfd_error_bad_value);
5650               return FALSE;
5651             }
5652           if (!update_plt_info (abfd, plt_list, rel->r_addend))
5653             return FALSE;
5654           break;
5655
5656           /* The following relocations don't need to propagate the
5657              relocation if linking a shared object since they are
5658              section relative.  */
5659         case R_PPC64_SECTOFF:
5660         case R_PPC64_SECTOFF_LO:
5661         case R_PPC64_SECTOFF_HI:
5662         case R_PPC64_SECTOFF_HA:
5663         case R_PPC64_SECTOFF_DS:
5664         case R_PPC64_SECTOFF_LO_DS:
5665         case R_PPC64_DTPREL16:
5666         case R_PPC64_DTPREL16_LO:
5667         case R_PPC64_DTPREL16_HI:
5668         case R_PPC64_DTPREL16_HA:
5669         case R_PPC64_DTPREL16_DS:
5670         case R_PPC64_DTPREL16_LO_DS:
5671         case R_PPC64_DTPREL16_HIGH:
5672         case R_PPC64_DTPREL16_HIGHA:
5673         case R_PPC64_DTPREL16_HIGHER:
5674         case R_PPC64_DTPREL16_HIGHERA:
5675         case R_PPC64_DTPREL16_HIGHEST:
5676         case R_PPC64_DTPREL16_HIGHESTA:
5677           break;
5678
5679           /* Nor do these.  */
5680         case R_PPC64_REL16:
5681         case R_PPC64_REL16_LO:
5682         case R_PPC64_REL16_HI:
5683         case R_PPC64_REL16_HA:
5684         case R_PPC64_REL16DX_HA:
5685           break;
5686
5687           /* Not supported as a dynamic relocation.  */
5688         case R_PPC64_ADDR64_LOCAL:
5689           if (bfd_link_pic (info))
5690             {
5691               if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
5692                 ppc_howto_init ();
5693               /* xgettext:c-format */
5694               info->callbacks->einfo (_("%H: %s reloc unsupported "
5695                                         "in shared libraries and PIEs.\n"),
5696                                       abfd, sec, rel->r_offset,
5697                                       ppc64_elf_howto_table[r_type]->name);
5698               bfd_set_error (bfd_error_bad_value);
5699               return FALSE;
5700             }
5701           break;
5702
5703         case R_PPC64_TOC16:
5704         case R_PPC64_TOC16_DS:
5705           htab->do_multi_toc = 1;
5706           ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5707           /* Fall through.  */
5708         case R_PPC64_TOC16_LO:
5709         case R_PPC64_TOC16_HI:
5710         case R_PPC64_TOC16_HA:
5711         case R_PPC64_TOC16_LO_DS:
5712           sec->has_toc_reloc = 1;
5713           break;
5714
5715           /* Marker reloc.  */
5716         case R_PPC64_ENTRY:
5717           break;
5718
5719           /* This relocation describes the C++ object vtable hierarchy.
5720              Reconstruct it for later use during GC.  */
5721         case R_PPC64_GNU_VTINHERIT:
5722           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5723             return FALSE;
5724           break;
5725
5726           /* This relocation describes which C++ vtable entries are actually
5727              used.  Record for later use during GC.  */
5728         case R_PPC64_GNU_VTENTRY:
5729           BFD_ASSERT (h != NULL);
5730           if (h != NULL
5731               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
5732             return FALSE;
5733           break;
5734
5735         case R_PPC64_REL14:
5736         case R_PPC64_REL14_BRTAKEN:
5737         case R_PPC64_REL14_BRNTAKEN:
5738           {
5739             asection *dest = NULL;
5740
5741             /* Heuristic: If jumping outside our section, chances are
5742                we are going to need a stub.  */
5743             if (h != NULL)
5744               {
5745                 /* If the sym is weak it may be overridden later, so
5746                    don't assume we know where a weak sym lives.  */
5747                 if (h->root.type == bfd_link_hash_defined)
5748                   dest = h->root.u.def.section;
5749               }
5750             else
5751               {
5752                 Elf_Internal_Sym *isym;
5753
5754                 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5755                                               abfd, r_symndx);
5756                 if (isym == NULL)
5757                   return FALSE;
5758
5759                 dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
5760               }
5761
5762             if (dest != sec)
5763               ppc64_elf_section_data (sec)->has_14bit_branch = 1;
5764           }
5765           /* Fall through.  */
5766
5767         case R_PPC64_REL24:
5768           plt_list = ifunc;
5769           if (h != NULL)
5770             {
5771               h->needs_plt = 1;
5772               if (h->root.root.string[0] == '.'
5773                   && h->root.root.string[1] != '\0')
5774                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
5775
5776               if (h == tga || h == dottga)
5777                 {
5778                   sec->has_tls_reloc = 1;
5779                   if (rel != relocs
5780                       && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
5781                           || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
5782                     /* We have a new-style __tls_get_addr call with
5783                        a marker reloc.  */
5784                     ;
5785                   else
5786                     /* Mark this section as having an old-style call.  */
5787                     sec->has_tls_get_addr_call = 1;
5788                 }
5789               plt_list = &h->plt.plist;
5790             }
5791
5792           /* We may need a .plt entry if the function this reloc
5793              refers to is in a shared lib.  */
5794           if (plt_list
5795               && !update_plt_info (abfd, plt_list, rel->r_addend))
5796             return FALSE;
5797           break;
5798
5799         case R_PPC64_ADDR14:
5800         case R_PPC64_ADDR14_BRNTAKEN:
5801         case R_PPC64_ADDR14_BRTAKEN:
5802         case R_PPC64_ADDR24:
5803           goto dodyn;
5804
5805         case R_PPC64_TPREL64:
5806           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
5807           if (bfd_link_dll (info))
5808             info->flags |= DF_STATIC_TLS;
5809           goto dotlstoc;
5810
5811         case R_PPC64_DTPMOD64:
5812           if (rel + 1 < rel_end
5813               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
5814               && rel[1].r_offset == rel->r_offset + 8)
5815             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
5816           else
5817             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
5818           goto dotlstoc;
5819
5820         case R_PPC64_DTPREL64:
5821           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
5822           if (rel != relocs
5823               && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
5824               && rel[-1].r_offset == rel->r_offset - 8)
5825             /* This is the second reloc of a dtpmod, dtprel pair.
5826                Don't mark with TLS_DTPREL.  */
5827             goto dodyn;
5828
5829         dotlstoc:
5830           sec->has_tls_reloc = 1;
5831           if (h != NULL)
5832             {
5833               struct ppc_link_hash_entry *eh;
5834               eh = (struct ppc_link_hash_entry *) h;
5835               eh->tls_mask |= tls_type;
5836             }
5837           else
5838             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5839                                         rel->r_addend, tls_type))
5840               return FALSE;
5841
5842           ppc64_sec = ppc64_elf_section_data (sec);
5843           if (ppc64_sec->sec_type != sec_toc)
5844             {
5845               bfd_size_type amt;
5846
5847               /* One extra to simplify get_tls_mask.  */
5848               amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5849               ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5850               if (ppc64_sec->u.toc.symndx == NULL)
5851                 return FALSE;
5852               amt = sec->size * sizeof (bfd_vma) / 8;
5853               ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5854               if (ppc64_sec->u.toc.add == NULL)
5855                 return FALSE;
5856               BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5857               ppc64_sec->sec_type = sec_toc;
5858             }
5859           BFD_ASSERT (rel->r_offset % 8 == 0);
5860           ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5861           ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5862
5863           /* Mark the second slot of a GD or LD entry.
5864              -1 to indicate GD and -2 to indicate LD.  */
5865           if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5866             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5867           else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5868             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5869           goto dodyn;
5870
5871         case R_PPC64_TPREL16:
5872         case R_PPC64_TPREL16_LO:
5873         case R_PPC64_TPREL16_HI:
5874         case R_PPC64_TPREL16_HA:
5875         case R_PPC64_TPREL16_DS:
5876         case R_PPC64_TPREL16_LO_DS:
5877         case R_PPC64_TPREL16_HIGH:
5878         case R_PPC64_TPREL16_HIGHA:
5879         case R_PPC64_TPREL16_HIGHER:
5880         case R_PPC64_TPREL16_HIGHERA:
5881         case R_PPC64_TPREL16_HIGHEST:
5882         case R_PPC64_TPREL16_HIGHESTA:
5883           if (bfd_link_dll (info))
5884             info->flags |= DF_STATIC_TLS;
5885           goto dodyn;
5886
5887         case R_PPC64_ADDR64:
5888           if (is_opd
5889               && rel + 1 < rel_end
5890               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5891             {
5892               if (h != NULL)
5893                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
5894             }
5895           /* Fall through.  */
5896
5897         case R_PPC64_ADDR16:
5898         case R_PPC64_ADDR16_DS:
5899         case R_PPC64_ADDR16_HA:
5900         case R_PPC64_ADDR16_HI:
5901         case R_PPC64_ADDR16_HIGH:
5902         case R_PPC64_ADDR16_HIGHA:
5903         case R_PPC64_ADDR16_HIGHER:
5904         case R_PPC64_ADDR16_HIGHERA:
5905         case R_PPC64_ADDR16_HIGHEST:
5906         case R_PPC64_ADDR16_HIGHESTA:
5907         case R_PPC64_ADDR16_LO:
5908         case R_PPC64_ADDR16_LO_DS:
5909           if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
5910               && rel->r_addend == 0)
5911             {
5912               /* We may need a .plt entry if this reloc refers to a
5913                  function in a shared lib.  */
5914               if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5915                 return FALSE;
5916               h->pointer_equality_needed = 1;
5917             }
5918           /* Fall through.  */
5919
5920         case R_PPC64_REL30:
5921         case R_PPC64_REL32:
5922         case R_PPC64_REL64:
5923         case R_PPC64_ADDR32:
5924         case R_PPC64_UADDR16:
5925         case R_PPC64_UADDR32:
5926         case R_PPC64_UADDR64:
5927         case R_PPC64_TOC:
5928           if (h != NULL && !bfd_link_pic (info))
5929             /* We may need a copy reloc.  */
5930             h->non_got_ref = 1;
5931
5932           /* Don't propagate .opd relocs.  */
5933           if (NO_OPD_RELOCS && is_opd)
5934             break;
5935
5936           /* If we are creating a shared library, and this is a reloc
5937              against a global symbol, or a non PC relative reloc
5938              against a local symbol, then we need to copy the reloc
5939              into the shared library.  However, if we are linking with
5940              -Bsymbolic, we do not need to copy a reloc against a
5941              global symbol which is defined in an object we are
5942              including in the link (i.e., DEF_REGULAR is set).  At
5943              this point we have not seen all the input files, so it is
5944              possible that DEF_REGULAR is not set now but will be set
5945              later (it is never cleared).  In case of a weak definition,
5946              DEF_REGULAR may be cleared later by a strong definition in
5947              a shared library.  We account for that possibility below by
5948              storing information in the dyn_relocs field of the hash
5949              table entry.  A similar situation occurs when creating
5950              shared libraries and symbol visibility changes render the
5951              symbol local.
5952
5953              If on the other hand, we are creating an executable, we
5954              may need to keep relocations for symbols satisfied by a
5955              dynamic library if we manage to avoid copy relocs for the
5956              symbol.  */
5957         dodyn:
5958           if ((bfd_link_pic (info)
5959                && (must_be_dyn_reloc (info, r_type)
5960                    || (h != NULL
5961                        && (!SYMBOLIC_BIND (info, h)
5962                            || h->root.type == bfd_link_hash_defweak
5963                            || !h->def_regular))))
5964               || (ELIMINATE_COPY_RELOCS
5965                   && !bfd_link_pic (info)
5966                   && h != NULL
5967                   && (h->root.type == bfd_link_hash_defweak
5968                       || !h->def_regular))
5969               || (!bfd_link_pic (info)
5970                   && ifunc != NULL))
5971             {
5972               /* We must copy these reloc types into the output file.
5973                  Create a reloc section in dynobj and make room for
5974                  this reloc.  */
5975               if (sreloc == NULL)
5976                 {
5977                   sreloc = _bfd_elf_make_dynamic_reloc_section
5978                     (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5979
5980                   if (sreloc == NULL)
5981                     return FALSE;
5982                 }
5983
5984               /* If this is a global symbol, we count the number of
5985                  relocations we need for this symbol.  */
5986               if (h != NULL)
5987                 {
5988                   struct elf_dyn_relocs *p;
5989                   struct elf_dyn_relocs **head;
5990
5991                   head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5992                   p = *head;
5993                   if (p == NULL || p->sec != sec)
5994                     {
5995                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5996                       if (p == NULL)
5997                         return FALSE;
5998                       p->next = *head;
5999                       *head = p;
6000                       p->sec = sec;
6001                       p->count = 0;
6002                       p->pc_count = 0;
6003                     }
6004                   p->count += 1;
6005                   if (!must_be_dyn_reloc (info, r_type))
6006                     p->pc_count += 1;
6007                 }
6008               else
6009                 {
6010                   /* Track dynamic relocs needed for local syms too.
6011                      We really need local syms available to do this
6012                      easily.  Oh well.  */
6013                   struct ppc_dyn_relocs *p;
6014                   struct ppc_dyn_relocs **head;
6015                   bfd_boolean is_ifunc;
6016                   asection *s;
6017                   void *vpp;
6018                   Elf_Internal_Sym *isym;
6019
6020                   isym = bfd_sym_from_r_symndx (&htab->sym_cache,
6021                                                 abfd, r_symndx);
6022                   if (isym == NULL)
6023                     return FALSE;
6024
6025                   s = bfd_section_from_elf_index (abfd, isym->st_shndx);
6026                   if (s == NULL)
6027                     s = sec;
6028
6029                   vpp = &elf_section_data (s)->local_dynrel;
6030                   head = (struct ppc_dyn_relocs **) vpp;
6031                   is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
6032                   p = *head;
6033                   if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
6034                     p = p->next;
6035                   if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
6036                     {
6037                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
6038                       if (p == NULL)
6039                         return FALSE;
6040                       p->next = *head;
6041                       *head = p;
6042                       p->sec = sec;
6043                       p->ifunc = is_ifunc;
6044                       p->count = 0;
6045                     }
6046                   p->count += 1;
6047                 }
6048             }
6049           break;
6050
6051         default:
6052           break;
6053         }
6054     }
6055
6056   return TRUE;
6057 }
6058
6059 /* Merge backend specific data from an object file to the output
6060    object file when linking.  */
6061
6062 static bfd_boolean
6063 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
6064 {
6065   bfd *obfd = info->output_bfd;
6066   unsigned long iflags, oflags;
6067
6068   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
6069     return TRUE;
6070
6071   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
6072     return TRUE;
6073
6074   if (!_bfd_generic_verify_endian_match (ibfd, info))
6075     return FALSE;
6076
6077   iflags = elf_elfheader (ibfd)->e_flags;
6078   oflags = elf_elfheader (obfd)->e_flags;
6079
6080   if (iflags & ~EF_PPC64_ABI)
6081     {
6082       _bfd_error_handler
6083         /* xgettext:c-format */
6084         (_("%B uses unknown e_flags 0x%lx"), ibfd, iflags);
6085       bfd_set_error (bfd_error_bad_value);
6086       return FALSE;
6087     }
6088   else if (iflags != oflags && iflags != 0)
6089     {
6090       _bfd_error_handler
6091         /* xgettext:c-format */
6092         (_("%B: ABI version %ld is not compatible with ABI version %ld output"),
6093          ibfd, iflags, oflags);
6094       bfd_set_error (bfd_error_bad_value);
6095       return FALSE;
6096     }
6097
6098   _bfd_elf_ppc_merge_fp_attributes (ibfd, info);
6099
6100   /* Merge Tag_compatibility attributes and any common GNU ones.  */
6101   _bfd_elf_merge_object_attributes (ibfd, info);
6102
6103   return TRUE;
6104 }
6105
6106 static bfd_boolean
6107 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
6108 {
6109   /* Print normal ELF private data.  */
6110   _bfd_elf_print_private_bfd_data (abfd, ptr);
6111
6112   if (elf_elfheader (abfd)->e_flags != 0)
6113     {
6114       FILE *file = ptr;
6115
6116       fprintf (file, _("private flags = 0x%lx:"),
6117                elf_elfheader (abfd)->e_flags);
6118
6119       if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
6120         fprintf (file, _(" [abiv%ld]"),
6121                  elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
6122       fputc ('\n', file);
6123     }
6124
6125   return TRUE;
6126 }
6127
6128 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
6129    of the code entry point, and its section, which must be in the same
6130    object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
6131
6132 static bfd_vma
6133 opd_entry_value (asection *opd_sec,
6134                  bfd_vma offset,
6135                  asection **code_sec,
6136                  bfd_vma *code_off,
6137                  bfd_boolean in_code_sec)
6138 {
6139   bfd *opd_bfd = opd_sec->owner;
6140   Elf_Internal_Rela *relocs;
6141   Elf_Internal_Rela *lo, *hi, *look;
6142   bfd_vma val;
6143
6144   /* No relocs implies we are linking a --just-symbols object, or looking
6145      at a final linked executable with addr2line or somesuch.  */
6146   if (opd_sec->reloc_count == 0)
6147     {
6148       bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
6149
6150       if (contents == NULL)
6151         {
6152           if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
6153             return (bfd_vma) -1;
6154           ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
6155         }
6156
6157       /* PR 17512: file: 64b9dfbb.  */
6158       if (offset + 7 >= opd_sec->size || offset + 7 < offset)
6159         return (bfd_vma) -1;
6160
6161       val = bfd_get_64 (opd_bfd, contents + offset);
6162       if (code_sec != NULL)
6163         {
6164           asection *sec, *likely = NULL;
6165
6166           if (in_code_sec)
6167             {
6168               sec = *code_sec;
6169               if (sec->vma <= val
6170                   && val < sec->vma + sec->size)
6171                 likely = sec;
6172               else
6173                 val = -1;
6174             }
6175           else
6176             for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
6177               if (sec->vma <= val
6178                   && (sec->flags & SEC_LOAD) != 0
6179                   && (sec->flags & SEC_ALLOC) != 0)
6180                 likely = sec;
6181           if (likely != NULL)
6182             {
6183               *code_sec = likely;
6184               if (code_off != NULL)
6185                 *code_off = val - likely->vma;
6186             }
6187         }
6188       return val;
6189     }
6190
6191   BFD_ASSERT (is_ppc64_elf (opd_bfd));
6192
6193   relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
6194   if (relocs == NULL)
6195     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
6196   /* PR 17512: file: df8e1fd6.  */
6197   if (relocs == NULL)
6198     return (bfd_vma) -1;
6199
6200   /* Go find the opd reloc at the sym address.  */
6201   lo = relocs;
6202   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
6203   val = (bfd_vma) -1;
6204   while (lo < hi)
6205     {
6206       look = lo + (hi - lo) / 2;
6207       if (look->r_offset < offset)
6208         lo = look + 1;
6209       else if (look->r_offset > offset)
6210         hi = look;
6211       else
6212         {
6213           Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
6214
6215           if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
6216               && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
6217             {
6218               unsigned long symndx = ELF64_R_SYM (look->r_info);
6219               asection *sec = NULL;
6220
6221               if (symndx >= symtab_hdr->sh_info
6222                   && elf_sym_hashes (opd_bfd) != NULL)
6223                 {
6224                   struct elf_link_hash_entry **sym_hashes;
6225                   struct elf_link_hash_entry *rh;
6226
6227                   sym_hashes = elf_sym_hashes (opd_bfd);
6228                   rh = sym_hashes[symndx - symtab_hdr->sh_info];
6229                   if (rh != NULL)
6230                     {
6231                       rh = elf_follow_link (rh);
6232                       if (rh->root.type != bfd_link_hash_defined
6233                           && rh->root.type != bfd_link_hash_defweak)
6234                         break;
6235                       if (rh->root.u.def.section->owner == opd_bfd)
6236                         {
6237                           val = rh->root.u.def.value;
6238                           sec = rh->root.u.def.section;
6239                         }
6240                     }
6241                 }
6242
6243               if (sec == NULL)
6244                 {
6245                   Elf_Internal_Sym *sym;
6246
6247                   if (symndx < symtab_hdr->sh_info)
6248                     {
6249                       sym = (Elf_Internal_Sym *) symtab_hdr->contents;
6250                       if (sym == NULL)
6251                         {
6252                           size_t symcnt = symtab_hdr->sh_info;
6253                           sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
6254                                                       symcnt, 0,
6255                                                       NULL, NULL, NULL);
6256                           if (sym == NULL)
6257                             break;
6258                           symtab_hdr->contents = (bfd_byte *) sym;
6259                         }
6260                       sym += symndx;
6261                     }
6262                   else
6263                     {
6264                       sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
6265                                                   1, symndx,
6266                                                   NULL, NULL, NULL);
6267                       if (sym == NULL)
6268                         break;
6269                     }
6270                   sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
6271                   if (sec == NULL)
6272                     break;
6273                   BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
6274                   val = sym->st_value;
6275                 }
6276
6277               val += look->r_addend;
6278               if (code_off != NULL)
6279                 *code_off = val;
6280               if (code_sec != NULL)
6281                 {
6282                   if (in_code_sec && *code_sec != sec)
6283                     return -1;
6284                   else
6285                     *code_sec = sec;
6286                 }
6287               if (sec->output_section != NULL)
6288                 val += sec->output_section->vma + sec->output_offset;
6289             }
6290           break;
6291         }
6292     }
6293
6294   return val;
6295 }
6296
6297 /* If the ELF symbol SYM might be a function in SEC, return the
6298    function size and set *CODE_OFF to the function's entry point,
6299    otherwise return zero.  */
6300
6301 static bfd_size_type
6302 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
6303                               bfd_vma *code_off)
6304 {
6305   bfd_size_type size;
6306
6307   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
6308                      | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
6309     return 0;
6310
6311   size = 0;
6312   if (!(sym->flags & BSF_SYNTHETIC))
6313     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
6314
6315   if (strcmp (sym->section->name, ".opd") == 0)
6316     {
6317       struct _opd_sec_data *opd = get_opd_info (sym->section);
6318       bfd_vma symval = sym->value;
6319
6320       if (opd != NULL
6321           && opd->adjust != NULL
6322           && elf_section_data (sym->section)->relocs != NULL)
6323         {
6324           /* opd_entry_value will use cached relocs that have been
6325              adjusted, but with raw symbols.  That means both local
6326              and global symbols need adjusting.  */
6327           long adjust = opd->adjust[OPD_NDX (symval)];
6328           if (adjust == -1)
6329             return 0;
6330           symval += adjust;
6331         }
6332
6333       if (opd_entry_value (sym->section, symval,
6334                            &sec, code_off, TRUE) == (bfd_vma) -1)
6335         return 0;
6336       /* An old ABI binary with dot-syms has a size of 24 on the .opd
6337          symbol.  This size has nothing to do with the code size of the
6338          function, which is what we're supposed to return, but the
6339          code size isn't available without looking up the dot-sym.
6340          However, doing that would be a waste of time particularly
6341          since elf_find_function will look at the dot-sym anyway.
6342          Now, elf_find_function will keep the largest size of any
6343          function sym found at the code address of interest, so return
6344          1 here to avoid it incorrectly caching a larger function size
6345          for a small function.  This does mean we return the wrong
6346          size for a new-ABI function of size 24, but all that does is
6347          disable caching for such functions.  */
6348       if (size == 24)
6349         size = 1;
6350     }
6351   else
6352     {
6353       if (sym->section != sec)
6354         return 0;
6355       *code_off = sym->value;
6356     }
6357   if (size == 0)
6358     size = 1;
6359   return size;
6360 }
6361
6362 /* Return true if symbol is a strong function defined in an ELFv2
6363    object with st_other localentry bits of zero, ie. its local entry
6364    point coincides with its global entry point.  */
6365
6366 static bfd_boolean
6367 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
6368 {
6369   return (h != NULL
6370           && h->type == STT_FUNC
6371           && h->root.type == bfd_link_hash_defined
6372           && (STO_PPC64_LOCAL_MASK & h->other) == 0
6373           && !((struct ppc_link_hash_entry *) h)->non_zero_localentry
6374           && is_ppc64_elf (h->root.u.def.section->owner)
6375           && abiversion (h->root.u.def.section->owner) >= 2);
6376 }
6377
6378 /* Return true if symbol is defined in a regular object file.  */
6379
6380 static bfd_boolean
6381 is_static_defined (struct elf_link_hash_entry *h)
6382 {
6383   return ((h->root.type == bfd_link_hash_defined
6384            || h->root.type == bfd_link_hash_defweak)
6385           && h->root.u.def.section != NULL
6386           && h->root.u.def.section->output_section != NULL);
6387 }
6388
6389 /* If FDH is a function descriptor symbol, return the associated code
6390    entry symbol if it is defined.  Return NULL otherwise.  */
6391
6392 static struct ppc_link_hash_entry *
6393 defined_code_entry (struct ppc_link_hash_entry *fdh)
6394 {
6395   if (fdh->is_func_descriptor)
6396     {
6397       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
6398       if (fh->elf.root.type == bfd_link_hash_defined
6399           || fh->elf.root.type == bfd_link_hash_defweak)
6400         return fh;
6401     }
6402   return NULL;
6403 }
6404
6405 /* If FH is a function code entry symbol, return the associated
6406    function descriptor symbol if it is defined.  Return NULL otherwise.  */
6407
6408 static struct ppc_link_hash_entry *
6409 defined_func_desc (struct ppc_link_hash_entry *fh)
6410 {
6411   if (fh->oh != NULL
6412       && fh->oh->is_func_descriptor)
6413     {
6414       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
6415       if (fdh->elf.root.type == bfd_link_hash_defined
6416           || fdh->elf.root.type == bfd_link_hash_defweak)
6417         return fdh;
6418     }
6419   return NULL;
6420 }
6421
6422 static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
6423
6424 /* Garbage collect sections, after first dealing with dot-symbols.  */
6425
6426 static bfd_boolean
6427 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
6428 {
6429   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6430
6431   if (htab != NULL && htab->need_func_desc_adj)
6432     {
6433       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6434       htab->need_func_desc_adj = 0;
6435     }
6436   return bfd_elf_gc_sections (abfd, info);
6437 }
6438
6439 /* Mark all our entry sym sections, both opd and code section.  */
6440
6441 static void
6442 ppc64_elf_gc_keep (struct bfd_link_info *info)
6443 {
6444   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6445   struct bfd_sym_chain *sym;
6446
6447   if (htab == NULL)
6448     return;
6449
6450   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
6451     {
6452       struct ppc_link_hash_entry *eh, *fh;
6453       asection *sec;
6454
6455       eh = (struct ppc_link_hash_entry *)
6456         elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
6457       if (eh == NULL)
6458         continue;
6459       if (eh->elf.root.type != bfd_link_hash_defined
6460           && eh->elf.root.type != bfd_link_hash_defweak)
6461         continue;
6462
6463       fh = defined_code_entry (eh);
6464       if (fh != NULL)
6465         {
6466           sec = fh->elf.root.u.def.section;
6467           sec->flags |= SEC_KEEP;
6468         }
6469       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6470                && opd_entry_value (eh->elf.root.u.def.section,
6471                                    eh->elf.root.u.def.value,
6472                                    &sec, NULL, FALSE) != (bfd_vma) -1)
6473         sec->flags |= SEC_KEEP;
6474
6475       sec = eh->elf.root.u.def.section;
6476       sec->flags |= SEC_KEEP;
6477     }
6478 }
6479
6480 /* Mark sections containing dynamically referenced symbols.  When
6481    building shared libraries, we must assume that any visible symbol is
6482    referenced.  */
6483
6484 static bfd_boolean
6485 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
6486 {
6487   struct bfd_link_info *info = (struct bfd_link_info *) inf;
6488   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
6489   struct ppc_link_hash_entry *fdh;
6490   struct bfd_elf_dynamic_list *d = info->dynamic_list;
6491
6492   /* Dynamic linking info is on the func descriptor sym.  */
6493   fdh = defined_func_desc (eh);
6494   if (fdh != NULL)
6495     eh = fdh;
6496
6497   if ((eh->elf.root.type == bfd_link_hash_defined
6498        || eh->elf.root.type == bfd_link_hash_defweak)
6499       && (eh->elf.ref_dynamic
6500           || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
6501               && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
6502               && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
6503               && (!bfd_link_executable (info)
6504                   || info->gc_keep_exported
6505                   || info->export_dynamic
6506                   || (eh->elf.dynamic
6507                       && d != NULL
6508                       && (*d->match) (&d->head, NULL, eh->elf.root.root.string)))
6509               && (eh->elf.versioned >= versioned
6510                   || !bfd_hide_sym_by_version (info->version_info,
6511                                                eh->elf.root.root.string)))))
6512     {
6513       asection *code_sec;
6514       struct ppc_link_hash_entry *fh;
6515
6516       eh->elf.root.u.def.section->flags |= SEC_KEEP;
6517
6518       /* Function descriptor syms cause the associated
6519          function code sym section to be marked.  */
6520       fh = defined_code_entry (eh);
6521       if (fh != NULL)
6522         {
6523           code_sec = fh->elf.root.u.def.section;
6524           code_sec->flags |= SEC_KEEP;
6525         }
6526       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6527                && opd_entry_value (eh->elf.root.u.def.section,
6528                                    eh->elf.root.u.def.value,
6529                                    &code_sec, NULL, FALSE) != (bfd_vma) -1)
6530         code_sec->flags |= SEC_KEEP;
6531     }
6532
6533   return TRUE;
6534 }
6535
6536 /* Return the section that should be marked against GC for a given
6537    relocation.  */
6538
6539 static asection *
6540 ppc64_elf_gc_mark_hook (asection *sec,
6541                         struct bfd_link_info *info,
6542                         Elf_Internal_Rela *rel,
6543                         struct elf_link_hash_entry *h,
6544                         Elf_Internal_Sym *sym)
6545 {
6546   asection *rsec;
6547
6548   /* Syms return NULL if we're marking .opd, so we avoid marking all
6549      function sections, as all functions are referenced in .opd.  */
6550   rsec = NULL;
6551   if (get_opd_info (sec) != NULL)
6552     return rsec;
6553
6554   if (h != NULL)
6555     {
6556       enum elf_ppc64_reloc_type r_type;
6557       struct ppc_link_hash_entry *eh, *fh, *fdh;
6558
6559       r_type = ELF64_R_TYPE (rel->r_info);
6560       switch (r_type)
6561         {
6562         case R_PPC64_GNU_VTINHERIT:
6563         case R_PPC64_GNU_VTENTRY:
6564           break;
6565
6566         default:
6567           switch (h->root.type)
6568             {
6569             case bfd_link_hash_defined:
6570             case bfd_link_hash_defweak:
6571               eh = (struct ppc_link_hash_entry *) h;
6572               fdh = defined_func_desc (eh);
6573               if (fdh != NULL)
6574                 {
6575                   /* -mcall-aixdesc code references the dot-symbol on
6576                      a call reloc.  Mark the function descriptor too
6577                      against garbage collection.  */
6578                   fdh->elf.mark = 1;
6579                   if (fdh->elf.u.weakdef != NULL)
6580                     fdh->elf.u.weakdef->mark = 1;
6581                   eh = fdh;
6582                 }
6583
6584               /* Function descriptor syms cause the associated
6585                  function code sym section to be marked.  */
6586               fh = defined_code_entry (eh);
6587               if (fh != NULL)
6588                 {
6589                   /* They also mark their opd section.  */
6590                   eh->elf.root.u.def.section->gc_mark = 1;
6591
6592                   rsec = fh->elf.root.u.def.section;
6593                 }
6594               else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6595                        && opd_entry_value (eh->elf.root.u.def.section,
6596                                            eh->elf.root.u.def.value,
6597                                            &rsec, NULL, FALSE) != (bfd_vma) -1)
6598                 eh->elf.root.u.def.section->gc_mark = 1;
6599               else
6600                 rsec = h->root.u.def.section;
6601               break;
6602
6603             case bfd_link_hash_common:
6604               rsec = h->root.u.c.p->section;
6605               break;
6606
6607             default:
6608               return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
6609             }
6610         }
6611     }
6612   else
6613     {
6614       struct _opd_sec_data *opd;
6615
6616       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
6617       opd = get_opd_info (rsec);
6618       if (opd != NULL && opd->func_sec != NULL)
6619         {
6620           rsec->gc_mark = 1;
6621
6622           rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
6623         }
6624     }
6625
6626   return rsec;
6627 }
6628
6629 /* The maximum size of .sfpr.  */
6630 #define SFPR_MAX (218*4)
6631
6632 struct sfpr_def_parms
6633 {
6634   const char name[12];
6635   unsigned char lo, hi;
6636   bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
6637   bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
6638 };
6639
6640 /* Auto-generate _save*, _rest* functions in .sfpr.
6641    If STUB_SEC is non-null, define alias symbols in STUB_SEC
6642    instead.  */
6643
6644 static bfd_boolean
6645 sfpr_define (struct bfd_link_info *info,
6646              const struct sfpr_def_parms *parm,
6647              asection *stub_sec)
6648 {
6649   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6650   unsigned int i;
6651   size_t len = strlen (parm->name);
6652   bfd_boolean writing = FALSE;
6653   char sym[16];
6654
6655   if (htab == NULL)
6656     return FALSE;
6657
6658   memcpy (sym, parm->name, len);
6659   sym[len + 2] = 0;
6660
6661   for (i = parm->lo; i <= parm->hi; i++)
6662     {
6663       struct ppc_link_hash_entry *h;
6664
6665       sym[len + 0] = i / 10 + '0';
6666       sym[len + 1] = i % 10 + '0';
6667       h = (struct ppc_link_hash_entry *)
6668         elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE);
6669       if (stub_sec != NULL)
6670         {
6671           if (h != NULL
6672               && h->elf.root.type == bfd_link_hash_defined
6673               && h->elf.root.u.def.section == htab->sfpr)
6674             {
6675               struct elf_link_hash_entry *s;
6676               char buf[32];
6677               sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
6678               s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
6679               if (s == NULL)
6680                 return FALSE;
6681               if (s->root.type == bfd_link_hash_new
6682                   || (s->root.type = bfd_link_hash_defined
6683                       && s->root.u.def.section == stub_sec))
6684                 {
6685                   s->root.type = bfd_link_hash_defined;
6686                   s->root.u.def.section = stub_sec;
6687                   s->root.u.def.value = (stub_sec->size
6688                                          + h->elf.root.u.def.value);
6689                   s->ref_regular = 1;
6690                   s->def_regular = 1;
6691                   s->ref_regular_nonweak = 1;
6692                   s->forced_local = 1;
6693                   s->non_elf = 0;
6694                   s->root.linker_def = 1;
6695                 }
6696             }
6697           continue;
6698         }
6699       if (h != NULL)
6700         {
6701           h->save_res = 1;
6702           if (!h->elf.def_regular)
6703             {
6704               h->elf.root.type = bfd_link_hash_defined;
6705               h->elf.root.u.def.section = htab->sfpr;
6706               h->elf.root.u.def.value = htab->sfpr->size;
6707               h->elf.type = STT_FUNC;
6708               h->elf.def_regular = 1;
6709               h->elf.non_elf = 0;
6710               _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
6711               writing = TRUE;
6712               if (htab->sfpr->contents == NULL)
6713                 {
6714                   htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
6715                   if (htab->sfpr->contents == NULL)
6716                     return FALSE;
6717                 }
6718             }
6719         }
6720       if (writing)
6721         {
6722           bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
6723           if (i != parm->hi)
6724             p = (*parm->write_ent) (htab->elf.dynobj, p, i);
6725           else
6726             p = (*parm->write_tail) (htab->elf.dynobj, p, i);
6727           htab->sfpr->size = p - htab->sfpr->contents;
6728         }
6729     }
6730
6731   return TRUE;
6732 }
6733
6734 static bfd_byte *
6735 savegpr0 (bfd *abfd, bfd_byte *p, int r)
6736 {
6737   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6738   return p + 4;
6739 }
6740
6741 static bfd_byte *
6742 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
6743 {
6744   p = savegpr0 (abfd, p, r);
6745   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
6746   p = p + 4;
6747   bfd_put_32 (abfd, BLR, p);
6748   return p + 4;
6749 }
6750
6751 static bfd_byte *
6752 restgpr0 (bfd *abfd, bfd_byte *p, int r)
6753 {
6754   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6755   return p + 4;
6756 }
6757
6758 static bfd_byte *
6759 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
6760 {
6761   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
6762   p = p + 4;
6763   p = restgpr0 (abfd, p, r);
6764   bfd_put_32 (abfd, MTLR_R0, p);
6765   p = p + 4;
6766   if (r == 29)
6767     {
6768       p = restgpr0 (abfd, p, 30);
6769       p = restgpr0 (abfd, p, 31);
6770     }
6771   bfd_put_32 (abfd, BLR, p);
6772   return p + 4;
6773 }
6774
6775 static bfd_byte *
6776 savegpr1 (bfd *abfd, bfd_byte *p, int r)
6777 {
6778   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6779   return p + 4;
6780 }
6781
6782 static bfd_byte *
6783 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
6784 {
6785   p = savegpr1 (abfd, p, r);
6786   bfd_put_32 (abfd, BLR, p);
6787   return p + 4;
6788 }
6789
6790 static bfd_byte *
6791 restgpr1 (bfd *abfd, bfd_byte *p, int r)
6792 {
6793   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6794   return p + 4;
6795 }
6796
6797 static bfd_byte *
6798 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
6799 {
6800   p = restgpr1 (abfd, p, r);
6801   bfd_put_32 (abfd, BLR, p);
6802   return p + 4;
6803 }
6804
6805 static bfd_byte *
6806 savefpr (bfd *abfd, bfd_byte *p, int r)
6807 {
6808   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6809   return p + 4;
6810 }
6811
6812 static bfd_byte *
6813 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6814 {
6815   p = savefpr (abfd, p, r);
6816   bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
6817   p = p + 4;
6818   bfd_put_32 (abfd, BLR, p);
6819   return p + 4;
6820 }
6821
6822 static bfd_byte *
6823 restfpr (bfd *abfd, bfd_byte *p, int r)
6824 {
6825   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6826   return p + 4;
6827 }
6828
6829 static bfd_byte *
6830 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6831 {
6832   bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
6833   p = p + 4;
6834   p = restfpr (abfd, p, r);
6835   bfd_put_32 (abfd, MTLR_R0, p);
6836   p = p + 4;
6837   if (r == 29)
6838     {
6839       p = restfpr (abfd, p, 30);
6840       p = restfpr (abfd, p, 31);
6841     }
6842   bfd_put_32 (abfd, BLR, p);
6843   return p + 4;
6844 }
6845
6846 static bfd_byte *
6847 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6848 {
6849   p = savefpr (abfd, p, r);
6850   bfd_put_32 (abfd, BLR, p);
6851   return p + 4;
6852 }
6853
6854 static bfd_byte *
6855 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6856 {
6857   p = restfpr (abfd, p, r);
6858   bfd_put_32 (abfd, BLR, p);
6859   return p + 4;
6860 }
6861
6862 static bfd_byte *
6863 savevr (bfd *abfd, bfd_byte *p, int r)
6864 {
6865   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6866   p = p + 4;
6867   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6868   return p + 4;
6869 }
6870
6871 static bfd_byte *
6872 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6873 {
6874   p = savevr (abfd, p, r);
6875   bfd_put_32 (abfd, BLR, p);
6876   return p + 4;
6877 }
6878
6879 static bfd_byte *
6880 restvr (bfd *abfd, bfd_byte *p, int r)
6881 {
6882   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6883   p = p + 4;
6884   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6885   return p + 4;
6886 }
6887
6888 static bfd_byte *
6889 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6890 {
6891   p = restvr (abfd, p, r);
6892   bfd_put_32 (abfd, BLR, p);
6893   return p + 4;
6894 }
6895
6896 /* Called via elf_link_hash_traverse to transfer dynamic linking
6897    information on function code symbol entries to their corresponding
6898    function descriptor symbol entries.  */
6899
6900 static bfd_boolean
6901 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6902 {
6903   struct bfd_link_info *info;
6904   struct ppc_link_hash_table *htab;
6905   struct ppc_link_hash_entry *fh;
6906   struct ppc_link_hash_entry *fdh;
6907   bfd_boolean force_local;
6908
6909   fh = (struct ppc_link_hash_entry *) h;
6910   if (fh->elf.root.type == bfd_link_hash_indirect)
6911     return TRUE;
6912
6913   if (!fh->is_func)
6914     return TRUE;
6915
6916   if (fh->elf.root.root.string[0] != '.'
6917       || fh->elf.root.root.string[1] == '\0')
6918     return TRUE;
6919
6920   info = inf;
6921   htab = ppc_hash_table (info);
6922   if (htab == NULL)
6923     return FALSE;
6924
6925   /* Find the corresponding function descriptor symbol.  */
6926   fdh = lookup_fdh (fh, htab);
6927
6928   /* Resolve undefined references to dot-symbols as the value
6929      in the function descriptor, if we have one in a regular object.
6930      This is to satisfy cases like ".quad .foo".  Calls to functions
6931      in dynamic objects are handled elsewhere.  */
6932   if ((fh->elf.root.type == bfd_link_hash_undefined
6933        || fh->elf.root.type == bfd_link_hash_undefweak)
6934       && (fdh->elf.root.type == bfd_link_hash_defined
6935           || fdh->elf.root.type == bfd_link_hash_defweak)
6936       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6937       && opd_entry_value (fdh->elf.root.u.def.section,
6938                           fdh->elf.root.u.def.value,
6939                           &fh->elf.root.u.def.section,
6940                           &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6941     {
6942       fh->elf.root.type = fdh->elf.root.type;
6943       fh->elf.forced_local = 1;
6944       fh->elf.def_regular = fdh->elf.def_regular;
6945       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6946     }
6947
6948   if (!fh->elf.dynamic)
6949     {
6950       struct plt_entry *ent;
6951
6952       for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6953         if (ent->plt.refcount > 0)
6954           break;
6955       if (ent == NULL)
6956         return TRUE;
6957     }
6958
6959   /* Create a descriptor as undefined if necessary.  */
6960   if (fdh == NULL
6961       && !bfd_link_executable (info)
6962       && (fh->elf.root.type == bfd_link_hash_undefined
6963           || fh->elf.root.type == bfd_link_hash_undefweak))
6964     {
6965       fdh = make_fdh (info, fh);
6966       if (fdh == NULL)
6967         return FALSE;
6968     }
6969
6970   /* We can't support overriding of symbols on a fake descriptor.  */
6971   if (fdh != NULL
6972       && fdh->fake
6973       && (fh->elf.root.type == bfd_link_hash_defined
6974           || fh->elf.root.type == bfd_link_hash_defweak))
6975     _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6976
6977   /* Transfer dynamic linking information to the function descriptor.  */
6978   if (fdh != NULL)
6979     {
6980       fdh->elf.ref_regular |= fh->elf.ref_regular;
6981       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6982       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6983       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6984       fdh->elf.dynamic |= fh->elf.dynamic;
6985       fdh->elf.needs_plt |= (fh->elf.needs_plt
6986                              || fh->elf.type == STT_FUNC
6987                              || fh->elf.type == STT_GNU_IFUNC);
6988       move_plt_plist (fh, fdh);
6989
6990       if (!fdh->elf.forced_local
6991           && fh->elf.dynindx != -1)
6992         if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6993           return FALSE;
6994     }
6995
6996   /* Now that the info is on the function descriptor, clear the
6997      function code sym info.  Any function code syms for which we
6998      don't have a definition in a regular file, we force local.
6999      This prevents a shared library from exporting syms that have
7000      been imported from another library.  Function code syms that
7001      are really in the library we must leave global to prevent the
7002      linker dragging in a definition from a static library.  */
7003   force_local = (!fh->elf.def_regular
7004                  || fdh == NULL
7005                  || !fdh->elf.def_regular
7006                  || fdh->elf.forced_local);
7007   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
7008
7009   return TRUE;
7010 }
7011
7012 static const struct sfpr_def_parms save_res_funcs[] =
7013   {
7014     { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
7015     { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
7016     { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
7017     { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
7018     { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
7019     { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
7020     { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
7021     { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
7022     { "._savef", 14, 31, savefpr, savefpr1_tail },
7023     { "._restf", 14, 31, restfpr, restfpr1_tail },
7024     { "_savevr_", 20, 31, savevr, savevr_tail },
7025     { "_restvr_", 20, 31, restvr, restvr_tail }
7026   };
7027
7028 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
7029    this hook to a) provide some gcc support functions, and b) transfer
7030    dynamic linking information gathered so far on function code symbol
7031    entries, to their corresponding function descriptor symbol entries.  */
7032
7033 static bfd_boolean
7034 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
7035                             struct bfd_link_info *info)
7036 {
7037   struct ppc_link_hash_table *htab;
7038
7039   htab = ppc_hash_table (info);
7040   if (htab == NULL)
7041     return FALSE;
7042
7043   /* Provide any missing _save* and _rest* functions.  */
7044   if (htab->sfpr != NULL)
7045     {
7046       unsigned int i;
7047
7048       htab->sfpr->size = 0;
7049       for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
7050         if (!sfpr_define (info, &save_res_funcs[i], NULL))
7051           return FALSE;
7052       if (htab->sfpr->size == 0)
7053         htab->sfpr->flags |= SEC_EXCLUDE;
7054     }
7055
7056   if (bfd_link_relocatable (info))
7057     return TRUE;
7058
7059   if (htab->elf.hgot != NULL)
7060     {
7061       _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
7062       /* Make .TOC. defined so as to prevent it being made dynamic.
7063          The wrong value here is fixed later in ppc64_elf_set_toc.  */
7064       if (!htab->elf.hgot->def_regular
7065           || htab->elf.hgot->root.type != bfd_link_hash_defined)
7066         {
7067           htab->elf.hgot->root.type = bfd_link_hash_defined;
7068           htab->elf.hgot->root.u.def.value = 0;
7069           htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
7070           htab->elf.hgot->def_regular = 1;
7071           htab->elf.hgot->root.linker_def = 1;
7072         }
7073       htab->elf.hgot->type = STT_OBJECT;
7074       htab->elf.hgot->other = ((htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1))
7075                                | STV_HIDDEN);
7076     }
7077
7078   if (htab->need_func_desc_adj)
7079     {
7080       elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
7081       htab->need_func_desc_adj = 0;
7082     }
7083
7084   return TRUE;
7085 }
7086
7087 /* Find dynamic relocs for H that apply to read-only sections.  */
7088
7089 static asection *
7090 readonly_dynrelocs (struct elf_link_hash_entry *h)
7091 {
7092   struct ppc_link_hash_entry *eh;
7093   struct elf_dyn_relocs *p;
7094
7095   eh = (struct ppc_link_hash_entry *) h;
7096   for (p = eh->dyn_relocs; p != NULL; p = p->next)
7097     {
7098       asection *s = p->sec->output_section;
7099
7100       if (s != NULL && (s->flags & SEC_READONLY) != 0)
7101         return p->sec;
7102     }
7103   return NULL;
7104 }
7105
7106 /* Return true if we have dynamic relocs against H or any of its weak
7107    aliases, that apply to read-only sections.  */
7108
7109 static bfd_boolean
7110 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
7111 {
7112   struct ppc_link_hash_entry *eh;
7113
7114   eh = (struct ppc_link_hash_entry *) h;
7115   do
7116     {
7117       if (readonly_dynrelocs (&eh->elf))
7118         return TRUE;
7119       eh = eh->weakref;
7120     } while (eh != NULL && &eh->elf != h);
7121
7122   return FALSE;
7123 }
7124
7125 /* Return whether EH has pc-relative dynamic relocs.  */
7126
7127 static bfd_boolean
7128 pc_dynrelocs (struct ppc_link_hash_entry *eh)
7129 {
7130   struct elf_dyn_relocs *p;
7131
7132   for (p = eh->dyn_relocs; p != NULL; p = p->next)
7133     if (p->pc_count != 0)
7134       return TRUE;
7135   return FALSE;
7136 }
7137
7138 /* Return true if a global entry stub will be created for H.  Valid
7139    for ELFv2 before plt entries have been allocated.  */
7140
7141 static bfd_boolean
7142 global_entry_stub (struct elf_link_hash_entry *h)
7143 {
7144   struct plt_entry *pent;
7145
7146   if (!h->pointer_equality_needed
7147       || h->def_regular)
7148     return FALSE;
7149
7150   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
7151     if (pent->plt.refcount > 0
7152         && pent->addend == 0)
7153       return TRUE;
7154
7155   return FALSE;
7156 }
7157
7158 /* Adjust a symbol defined by a dynamic object and referenced by a
7159    regular object.  The current definition is in some section of the
7160    dynamic object, but we're not including those sections.  We have to
7161    change the definition to something the rest of the link can
7162    understand.  */
7163
7164 static bfd_boolean
7165 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
7166                                  struct elf_link_hash_entry *h)
7167 {
7168   struct ppc_link_hash_table *htab;
7169   asection *s, *srel;
7170
7171   htab = ppc_hash_table (info);
7172   if (htab == NULL)
7173     return FALSE;
7174
7175   /* Deal with function syms.  */
7176   if (h->type == STT_FUNC
7177       || h->type == STT_GNU_IFUNC
7178       || h->needs_plt)
7179     {
7180       bfd_boolean local = (((struct ppc_link_hash_entry *) h)->save_res
7181                            || SYMBOL_CALLS_LOCAL (info, h)
7182                            || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
7183       /* Discard dyn_relocs when non-pic if we've decided that a
7184          function symbol is local and not an ifunc.  We keep dynamic
7185          relocs for ifuncs when local rather than always emitting a
7186          plt call stub for them and defining the symbol on the call
7187          stub.  We can't do that for ELFv1 anyway (a function symbol
7188          is defined on a descriptor, not code) and it can be faster at
7189          run-time due to not needing to bounce through a stub.  The
7190          dyn_relocs for ifuncs will be applied even in a static
7191          executable.  */
7192       if (!bfd_link_pic (info)
7193           && h->type != STT_GNU_IFUNC
7194           && local)
7195         ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
7196
7197       /* Clear procedure linkage table information for any symbol that
7198          won't need a .plt entry.  */
7199       struct plt_entry *ent;
7200       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
7201         if (ent->plt.refcount > 0)
7202           break;
7203       if (ent == NULL
7204           || (h->type != STT_GNU_IFUNC && local))
7205         {
7206           h->plt.plist = NULL;
7207           h->needs_plt = 0;
7208           h->pointer_equality_needed = 0;
7209         }
7210       else if (abiversion (info->output_bfd) >= 2)
7211         {
7212           /* Taking a function's address in a read/write section
7213              doesn't require us to define the function symbol in the
7214              executable on a global entry stub.  A dynamic reloc can
7215              be used instead.  The reason we prefer a few more dynamic
7216              relocs is that calling via a global entry stub costs a
7217              few more instructions, and pointer_equality_needed causes
7218              extra work in ld.so when resolving these symbols.  */
7219           if (global_entry_stub (h))
7220             {
7221               if (!alias_readonly_dynrelocs (h))
7222                 {
7223                   h->pointer_equality_needed = 0;
7224                   /* If we haven't seen a branch reloc then we don't need
7225                      a plt entry.  */
7226                   if (!h->needs_plt)
7227                     h->plt.plist = NULL;
7228                 }
7229               else if (!bfd_link_pic (info))
7230                 /* We are going to be defining the function symbol on the
7231                    plt stub, so no dyn_relocs needed when non-pic.  */
7232                 ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
7233             }
7234
7235           /* ELFv2 function symbols can't have copy relocs.  */
7236           return TRUE;
7237         }
7238       else if (!h->needs_plt
7239                && !alias_readonly_dynrelocs (h))
7240         {
7241           /* If we haven't seen a branch reloc then we don't need a
7242              plt entry.  */
7243           h->plt.plist = NULL;
7244           h->pointer_equality_needed = 0;
7245           return TRUE;
7246         }
7247     }
7248   else
7249     h->plt.plist = NULL;
7250
7251   /* If this is a weak symbol, and there is a real definition, the
7252      processor independent code will have arranged for us to see the
7253      real definition first, and we can just use the same value.  */
7254   if (h->u.weakdef != NULL)
7255     {
7256       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
7257                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
7258       h->root.u.def.section = h->u.weakdef->root.u.def.section;
7259       h->root.u.def.value = h->u.weakdef->root.u.def.value;
7260       if (ELIMINATE_COPY_RELOCS)
7261         h->non_got_ref = h->u.weakdef->non_got_ref;
7262       return TRUE;
7263     }
7264
7265   /* If we are creating a shared library, we must presume that the
7266      only references to the symbol are via the global offset table.
7267      For such cases we need not do anything here; the relocations will
7268      be handled correctly by relocate_section.  */
7269   if (bfd_link_pic (info))
7270     return TRUE;
7271
7272   /* If there are no references to this symbol that do not use the
7273      GOT, we don't need to generate a copy reloc.  */
7274   if (!h->non_got_ref)
7275     return TRUE;
7276
7277   /* Don't generate a copy reloc for symbols defined in the executable.  */
7278   if (!h->def_dynamic || !h->ref_regular || h->def_regular
7279
7280       /* If -z nocopyreloc was given, don't generate them either.  */
7281       || info->nocopyreloc
7282
7283       /* If we didn't find any dynamic relocs in read-only sections, then
7284          we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
7285       || (ELIMINATE_COPY_RELOCS && !alias_readonly_dynrelocs (h))
7286
7287       /* Protected variables do not work with .dynbss.  The copy in
7288          .dynbss won't be used by the shared library with the protected
7289          definition for the variable.  Text relocations are preferable
7290          to an incorrect program.  */
7291       || h->protected_def)
7292     return TRUE;
7293
7294   if (h->plt.plist != NULL)
7295     {
7296       /* We should never get here, but unfortunately there are versions
7297          of gcc out there that improperly (for this ABI) put initialized
7298          function pointers, vtable refs and suchlike in read-only
7299          sections.  Allow them to proceed, but warn that this might
7300          break at runtime.  */
7301       info->callbacks->einfo
7302         (_("%P: copy reloc against `%T' requires lazy plt linking; "
7303            "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
7304          h->root.root.string);
7305     }
7306
7307   /* This is a reference to a symbol defined by a dynamic object which
7308      is not a function.  */
7309
7310   /* We must allocate the symbol in our .dynbss section, which will
7311      become part of the .bss section of the executable.  There will be
7312      an entry for this symbol in the .dynsym section.  The dynamic
7313      object will contain position independent code, so all references
7314      from the dynamic object to this symbol will go through the global
7315      offset table.  The dynamic linker will use the .dynsym entry to
7316      determine the address it must put in the global offset table, so
7317      both the dynamic object and the regular object will refer to the
7318      same memory location for the variable.  */
7319
7320   /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
7321      to copy the initial value out of the dynamic object and into the
7322      runtime process image.  We need to remember the offset into the
7323      .rela.bss section we are going to use.  */
7324   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
7325     {
7326       s = htab->elf.sdynrelro;
7327       srel = htab->elf.sreldynrelro;
7328     }
7329   else
7330     {
7331       s = htab->elf.sdynbss;
7332       srel = htab->elf.srelbss;
7333     }
7334   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
7335     {
7336       srel->size += sizeof (Elf64_External_Rela);
7337       h->needs_copy = 1;
7338     }
7339
7340   /* We no longer want dyn_relocs.  */
7341   ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
7342   return _bfd_elf_adjust_dynamic_copy (info, h, s);
7343 }
7344
7345 /* If given a function descriptor symbol, hide both the function code
7346    sym and the descriptor.  */
7347 static void
7348 ppc64_elf_hide_symbol (struct bfd_link_info *info,
7349                        struct elf_link_hash_entry *h,
7350                        bfd_boolean force_local)
7351 {
7352   struct ppc_link_hash_entry *eh;
7353   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
7354
7355   eh = (struct ppc_link_hash_entry *) h;
7356   if (eh->is_func_descriptor)
7357     {
7358       struct ppc_link_hash_entry *fh = eh->oh;
7359
7360       if (fh == NULL)
7361         {
7362           const char *p, *q;
7363           struct elf_link_hash_table *htab = elf_hash_table (info);
7364           char save;
7365
7366           /* We aren't supposed to use alloca in BFD because on
7367              systems which do not have alloca the version in libiberty
7368              calls xmalloc, which might cause the program to crash
7369              when it runs out of memory.  This function doesn't have a
7370              return status, so there's no way to gracefully return an
7371              error.  So cheat.  We know that string[-1] can be safely
7372              accessed;  It's either a string in an ELF string table,
7373              or allocated in an objalloc structure.  */
7374
7375           p = eh->elf.root.root.string - 1;
7376           save = *p;
7377           *(char *) p = '.';
7378           fh = (struct ppc_link_hash_entry *)
7379             elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
7380           *(char *) p = save;
7381
7382           /* Unfortunately, if it so happens that the string we were
7383              looking for was allocated immediately before this string,
7384              then we overwrote the string terminator.  That's the only
7385              reason the lookup should fail.  */
7386           if (fh == NULL)
7387             {
7388               q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
7389               while (q >= eh->elf.root.root.string && *q == *p)
7390                 --q, --p;
7391               if (q < eh->elf.root.root.string && *p == '.')
7392                 fh = (struct ppc_link_hash_entry *)
7393                   elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
7394             }
7395           if (fh != NULL)
7396             {
7397               eh->oh = fh;
7398               fh->oh = eh;
7399             }
7400         }
7401       if (fh != NULL)
7402         _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
7403     }
7404 }
7405
7406 static bfd_boolean
7407 get_sym_h (struct elf_link_hash_entry **hp,
7408            Elf_Internal_Sym **symp,
7409            asection **symsecp,
7410            unsigned char **tls_maskp,
7411            Elf_Internal_Sym **locsymsp,
7412            unsigned long r_symndx,
7413            bfd *ibfd)
7414 {
7415   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7416
7417   if (r_symndx >= symtab_hdr->sh_info)
7418     {
7419       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7420       struct elf_link_hash_entry *h;
7421
7422       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7423       h = elf_follow_link (h);
7424
7425       if (hp != NULL)
7426         *hp = h;
7427
7428       if (symp != NULL)
7429         *symp = NULL;
7430
7431       if (symsecp != NULL)
7432         {
7433           asection *symsec = NULL;
7434           if (h->root.type == bfd_link_hash_defined
7435               || h->root.type == bfd_link_hash_defweak)
7436             symsec = h->root.u.def.section;
7437           *symsecp = symsec;
7438         }
7439
7440       if (tls_maskp != NULL)
7441         {
7442           struct ppc_link_hash_entry *eh;
7443
7444           eh = (struct ppc_link_hash_entry *) h;
7445           *tls_maskp = &eh->tls_mask;
7446         }
7447     }
7448   else
7449     {
7450       Elf_Internal_Sym *sym;
7451       Elf_Internal_Sym *locsyms = *locsymsp;
7452
7453       if (locsyms == NULL)
7454         {
7455           locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
7456           if (locsyms == NULL)
7457             locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
7458                                             symtab_hdr->sh_info,
7459                                             0, NULL, NULL, NULL);
7460           if (locsyms == NULL)
7461             return FALSE;
7462           *locsymsp = locsyms;
7463         }
7464       sym = locsyms + r_symndx;
7465
7466       if (hp != NULL)
7467         *hp = NULL;
7468
7469       if (symp != NULL)
7470         *symp = sym;
7471
7472       if (symsecp != NULL)
7473         *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
7474
7475       if (tls_maskp != NULL)
7476         {
7477           struct got_entry **lgot_ents;
7478           unsigned char *tls_mask;
7479
7480           tls_mask = NULL;
7481           lgot_ents = elf_local_got_ents (ibfd);
7482           if (lgot_ents != NULL)
7483             {
7484               struct plt_entry **local_plt = (struct plt_entry **)
7485                 (lgot_ents + symtab_hdr->sh_info);
7486               unsigned char *lgot_masks = (unsigned char *)
7487                 (local_plt + symtab_hdr->sh_info);
7488               tls_mask = &lgot_masks[r_symndx];
7489             }
7490           *tls_maskp = tls_mask;
7491         }
7492     }
7493   return TRUE;
7494 }
7495
7496 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
7497    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
7498    type suitable for optimization, and 1 otherwise.  */
7499
7500 static int
7501 get_tls_mask (unsigned char **tls_maskp,
7502               unsigned long *toc_symndx,
7503               bfd_vma *toc_addend,
7504               Elf_Internal_Sym **locsymsp,
7505               const Elf_Internal_Rela *rel,
7506               bfd *ibfd)
7507 {
7508   unsigned long r_symndx;
7509   int next_r;
7510   struct elf_link_hash_entry *h;
7511   Elf_Internal_Sym *sym;
7512   asection *sec;
7513   bfd_vma off;
7514
7515   r_symndx = ELF64_R_SYM (rel->r_info);
7516   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
7517     return 0;
7518
7519   if ((*tls_maskp != NULL && **tls_maskp != 0)
7520       || sec == NULL
7521       || ppc64_elf_section_data (sec) == NULL
7522       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
7523     return 1;
7524
7525   /* Look inside a TOC section too.  */
7526   if (h != NULL)
7527     {
7528       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
7529       off = h->root.u.def.value;
7530     }
7531   else
7532     off = sym->st_value;
7533   off += rel->r_addend;
7534   BFD_ASSERT (off % 8 == 0);
7535   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
7536   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
7537   if (toc_symndx != NULL)
7538     *toc_symndx = r_symndx;
7539   if (toc_addend != NULL)
7540     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
7541   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
7542     return 0;
7543   if ((h == NULL || is_static_defined (h))
7544       && (next_r == -1 || next_r == -2))
7545     return 1 - next_r;
7546   return 1;
7547 }
7548
7549 /* Find (or create) an entry in the tocsave hash table.  */
7550
7551 static struct tocsave_entry *
7552 tocsave_find (struct ppc_link_hash_table *htab,
7553               enum insert_option insert,
7554               Elf_Internal_Sym **local_syms,
7555               const Elf_Internal_Rela *irela,
7556               bfd *ibfd)
7557 {
7558   unsigned long r_indx;
7559   struct elf_link_hash_entry *h;
7560   Elf_Internal_Sym *sym;
7561   struct tocsave_entry ent, *p;
7562   hashval_t hash;
7563   struct tocsave_entry **slot;
7564
7565   r_indx = ELF64_R_SYM (irela->r_info);
7566   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
7567     return NULL;
7568   if (ent.sec == NULL || ent.sec->output_section == NULL)
7569     {
7570       _bfd_error_handler
7571         (_("%B: undefined symbol on R_PPC64_TOCSAVE relocation"), ibfd);
7572       return NULL;
7573     }
7574
7575   if (h != NULL)
7576     ent.offset = h->root.u.def.value;
7577   else
7578     ent.offset = sym->st_value;
7579   ent.offset += irela->r_addend;
7580
7581   hash = tocsave_htab_hash (&ent);
7582   slot = ((struct tocsave_entry **)
7583           htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
7584   if (slot == NULL)
7585     return NULL;
7586
7587   if (*slot == NULL)
7588     {
7589       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
7590       if (p == NULL)
7591         return NULL;
7592       *p = ent;
7593       *slot = p;
7594     }
7595   return *slot;
7596 }
7597
7598 /* Adjust all global syms defined in opd sections.  In gcc generated
7599    code for the old ABI, these will already have been done.  */
7600
7601 static bfd_boolean
7602 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
7603 {
7604   struct ppc_link_hash_entry *eh;
7605   asection *sym_sec;
7606   struct _opd_sec_data *opd;
7607
7608   if (h->root.type == bfd_link_hash_indirect)
7609     return TRUE;
7610
7611   if (h->root.type != bfd_link_hash_defined
7612       && h->root.type != bfd_link_hash_defweak)
7613     return TRUE;
7614
7615   eh = (struct ppc_link_hash_entry *) h;
7616   if (eh->adjust_done)
7617     return TRUE;
7618
7619   sym_sec = eh->elf.root.u.def.section;
7620   opd = get_opd_info (sym_sec);
7621   if (opd != NULL && opd->adjust != NULL)
7622     {
7623       long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
7624       if (adjust == -1)
7625         {
7626           /* This entry has been deleted.  */
7627           asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
7628           if (dsec == NULL)
7629             {
7630               for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
7631                 if (discarded_section (dsec))
7632                   {
7633                     ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
7634                     break;
7635                   }
7636             }
7637           eh->elf.root.u.def.value = 0;
7638           eh->elf.root.u.def.section = dsec;
7639         }
7640       else
7641         eh->elf.root.u.def.value += adjust;
7642       eh->adjust_done = 1;
7643     }
7644   return TRUE;
7645 }
7646
7647 /* Handles decrementing dynamic reloc counts for the reloc specified by
7648    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
7649    have already been determined.  */
7650
7651 static bfd_boolean
7652 dec_dynrel_count (bfd_vma r_info,
7653                   asection *sec,
7654                   struct bfd_link_info *info,
7655                   Elf_Internal_Sym **local_syms,
7656                   struct elf_link_hash_entry *h,
7657                   Elf_Internal_Sym *sym)
7658 {
7659   enum elf_ppc64_reloc_type r_type;
7660   asection *sym_sec = NULL;
7661
7662   /* Can this reloc be dynamic?  This switch, and later tests here
7663      should be kept in sync with the code in check_relocs.  */
7664   r_type = ELF64_R_TYPE (r_info);
7665   switch (r_type)
7666     {
7667     default:
7668       return TRUE;
7669
7670     case R_PPC64_TPREL16:
7671     case R_PPC64_TPREL16_LO:
7672     case R_PPC64_TPREL16_HI:
7673     case R_PPC64_TPREL16_HA:
7674     case R_PPC64_TPREL16_DS:
7675     case R_PPC64_TPREL16_LO_DS:
7676     case R_PPC64_TPREL16_HIGH:
7677     case R_PPC64_TPREL16_HIGHA:
7678     case R_PPC64_TPREL16_HIGHER:
7679     case R_PPC64_TPREL16_HIGHERA:
7680     case R_PPC64_TPREL16_HIGHEST:
7681     case R_PPC64_TPREL16_HIGHESTA:
7682     case R_PPC64_TPREL64:
7683     case R_PPC64_DTPMOD64:
7684     case R_PPC64_DTPREL64:
7685     case R_PPC64_ADDR64:
7686     case R_PPC64_REL30:
7687     case R_PPC64_REL32:
7688     case R_PPC64_REL64:
7689     case R_PPC64_ADDR14:
7690     case R_PPC64_ADDR14_BRNTAKEN:
7691     case R_PPC64_ADDR14_BRTAKEN:
7692     case R_PPC64_ADDR16:
7693     case R_PPC64_ADDR16_DS:
7694     case R_PPC64_ADDR16_HA:
7695     case R_PPC64_ADDR16_HI:
7696     case R_PPC64_ADDR16_HIGH:
7697     case R_PPC64_ADDR16_HIGHA:
7698     case R_PPC64_ADDR16_HIGHER:
7699     case R_PPC64_ADDR16_HIGHERA:
7700     case R_PPC64_ADDR16_HIGHEST:
7701     case R_PPC64_ADDR16_HIGHESTA:
7702     case R_PPC64_ADDR16_LO:
7703     case R_PPC64_ADDR16_LO_DS:
7704     case R_PPC64_ADDR24:
7705     case R_PPC64_ADDR32:
7706     case R_PPC64_UADDR16:
7707     case R_PPC64_UADDR32:
7708     case R_PPC64_UADDR64:
7709     case R_PPC64_TOC:
7710       break;
7711     }
7712
7713   if (local_syms != NULL)
7714     {
7715       unsigned long r_symndx;
7716       bfd *ibfd = sec->owner;
7717
7718       r_symndx = ELF64_R_SYM (r_info);
7719       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7720         return FALSE;
7721     }
7722
7723   if ((bfd_link_pic (info)
7724        && (must_be_dyn_reloc (info, r_type)
7725            || (h != NULL
7726                && (!SYMBOLIC_BIND (info, h)
7727                    || h->root.type == bfd_link_hash_defweak
7728                    || !h->def_regular))))
7729       || (ELIMINATE_COPY_RELOCS
7730           && !bfd_link_pic (info)
7731           && h != NULL
7732           && (h->root.type == bfd_link_hash_defweak
7733               || !h->def_regular)))
7734     ;
7735   else
7736     return TRUE;
7737
7738   if (h != NULL)
7739     {
7740       struct elf_dyn_relocs *p;
7741       struct elf_dyn_relocs **pp;
7742       pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
7743
7744       /* elf_gc_sweep may have already removed all dyn relocs associated
7745          with local syms for a given section.  Also, symbol flags are
7746          changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7747          report a dynreloc miscount.  */
7748       if (*pp == NULL && info->gc_sections)
7749         return TRUE;
7750
7751       while ((p = *pp) != NULL)
7752         {
7753           if (p->sec == sec)
7754             {
7755               if (!must_be_dyn_reloc (info, r_type))
7756                 p->pc_count -= 1;
7757               p->count -= 1;
7758               if (p->count == 0)
7759                 *pp = p->next;
7760               return TRUE;
7761             }
7762           pp = &p->next;
7763         }
7764     }
7765   else
7766     {
7767       struct ppc_dyn_relocs *p;
7768       struct ppc_dyn_relocs **pp;
7769       void *vpp;
7770       bfd_boolean is_ifunc;
7771
7772       if (local_syms == NULL)
7773         sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7774       if (sym_sec == NULL)
7775         sym_sec = sec;
7776
7777       vpp = &elf_section_data (sym_sec)->local_dynrel;
7778       pp = (struct ppc_dyn_relocs **) vpp;
7779
7780       if (*pp == NULL && info->gc_sections)
7781         return TRUE;
7782
7783       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
7784       while ((p = *pp) != NULL)
7785         {
7786           if (p->sec == sec && p->ifunc == is_ifunc)
7787             {
7788               p->count -= 1;
7789               if (p->count == 0)
7790                 *pp = p->next;
7791               return TRUE;
7792             }
7793           pp = &p->next;
7794         }
7795     }
7796
7797   /* xgettext:c-format */
7798   info->callbacks->einfo (_("%P: dynreloc miscount for %B, section %A\n"),
7799                           sec->owner, sec);
7800   bfd_set_error (bfd_error_bad_value);
7801   return FALSE;
7802 }
7803
7804 /* Remove unused Official Procedure Descriptor entries.  Currently we
7805    only remove those associated with functions in discarded link-once
7806    sections, or weakly defined functions that have been overridden.  It
7807    would be possible to remove many more entries for statically linked
7808    applications.  */
7809
7810 bfd_boolean
7811 ppc64_elf_edit_opd (struct bfd_link_info *info)
7812 {
7813   bfd *ibfd;
7814   bfd_boolean some_edited = FALSE;
7815   asection *need_pad = NULL;
7816   struct ppc_link_hash_table *htab;
7817
7818   htab = ppc_hash_table (info);
7819   if (htab == NULL)
7820     return FALSE;
7821
7822   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7823     {
7824       asection *sec;
7825       Elf_Internal_Rela *relstart, *rel, *relend;
7826       Elf_Internal_Shdr *symtab_hdr;
7827       Elf_Internal_Sym *local_syms;
7828       struct _opd_sec_data *opd;
7829       bfd_boolean need_edit, add_aux_fields, broken;
7830       bfd_size_type cnt_16b = 0;
7831
7832       if (!is_ppc64_elf (ibfd))
7833         continue;
7834
7835       sec = bfd_get_section_by_name (ibfd, ".opd");
7836       if (sec == NULL || sec->size == 0)
7837         continue;
7838
7839       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7840         continue;
7841
7842       if (sec->output_section == bfd_abs_section_ptr)
7843         continue;
7844
7845       /* Look through the section relocs.  */
7846       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7847         continue;
7848
7849       local_syms = NULL;
7850       symtab_hdr = &elf_symtab_hdr (ibfd);
7851
7852       /* Read the relocations.  */
7853       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7854                                             info->keep_memory);
7855       if (relstart == NULL)
7856         return FALSE;
7857
7858       /* First run through the relocs to check they are sane, and to
7859          determine whether we need to edit this opd section.  */
7860       need_edit = FALSE;
7861       broken = FALSE;
7862       need_pad = sec;
7863       relend = relstart + sec->reloc_count;
7864       for (rel = relstart; rel < relend; )
7865         {
7866           enum elf_ppc64_reloc_type r_type;
7867           unsigned long r_symndx;
7868           asection *sym_sec;
7869           struct elf_link_hash_entry *h;
7870           Elf_Internal_Sym *sym;
7871           bfd_vma offset;
7872
7873           /* .opd contains an array of 16 or 24 byte entries.  We're
7874              only interested in the reloc pointing to a function entry
7875              point.  */
7876           offset = rel->r_offset;
7877           if (rel + 1 == relend
7878               || rel[1].r_offset != offset + 8)
7879             {
7880               /* If someone messes with .opd alignment then after a
7881                  "ld -r" we might have padding in the middle of .opd.
7882                  Also, there's nothing to prevent someone putting
7883                  something silly in .opd with the assembler.  No .opd
7884                  optimization for them!  */
7885             broken_opd:
7886               _bfd_error_handler
7887                 (_("%B: .opd is not a regular array of opd entries"), ibfd);
7888               broken = TRUE;
7889               break;
7890             }
7891
7892           if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7893               || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7894             {
7895               _bfd_error_handler
7896                 /* xgettext:c-format */
7897                 (_("%B: unexpected reloc type %u in .opd section"),
7898                  ibfd, r_type);
7899               broken = TRUE;
7900               break;
7901             }
7902
7903           r_symndx = ELF64_R_SYM (rel->r_info);
7904           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7905                           r_symndx, ibfd))
7906             goto error_ret;
7907
7908           if (sym_sec == NULL || sym_sec->owner == NULL)
7909             {
7910               const char *sym_name;
7911               if (h != NULL)
7912                 sym_name = h->root.root.string;
7913               else
7914                 sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7915                                              sym_sec);
7916
7917               _bfd_error_handler
7918                 /* xgettext:c-format */
7919                 (_("%B: undefined sym `%s' in .opd section"),
7920                  ibfd, sym_name);
7921               broken = TRUE;
7922               break;
7923             }
7924
7925           /* opd entries are always for functions defined in the
7926              current input bfd.  If the symbol isn't defined in the
7927              input bfd, then we won't be using the function in this
7928              bfd;  It must be defined in a linkonce section in another
7929              bfd, or is weak.  It's also possible that we are
7930              discarding the function due to a linker script /DISCARD/,
7931              which we test for via the output_section.  */
7932           if (sym_sec->owner != ibfd
7933               || sym_sec->output_section == bfd_abs_section_ptr)
7934             need_edit = TRUE;
7935
7936           rel += 2;
7937           if (rel + 1 == relend
7938               || (rel + 2 < relend
7939                   && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
7940             ++rel;
7941
7942           if (rel == relend)
7943             {
7944               if (sec->size == offset + 24)
7945                 {
7946                   need_pad = NULL;
7947                   break;
7948                 }
7949               if (sec->size == offset + 16)
7950                 {
7951                   cnt_16b++;
7952                   break;
7953                 }
7954               goto broken_opd;
7955             }
7956           else if (rel + 1 < relend
7957                    && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7958                    && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7959             {
7960               if (rel[0].r_offset == offset + 16)
7961                 cnt_16b++;
7962               else if (rel[0].r_offset != offset + 24)
7963                 goto broken_opd;
7964             }
7965           else
7966             goto broken_opd;
7967         }
7968
7969       add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
7970
7971       if (!broken && (need_edit || add_aux_fields))
7972         {
7973           Elf_Internal_Rela *write_rel;
7974           Elf_Internal_Shdr *rel_hdr;
7975           bfd_byte *rptr, *wptr;
7976           bfd_byte *new_contents;
7977           bfd_size_type amt;
7978
7979           new_contents = NULL;
7980           amt = OPD_NDX (sec->size) * sizeof (long);
7981           opd = &ppc64_elf_section_data (sec)->u.opd;
7982           opd->adjust = bfd_zalloc (sec->owner, amt);
7983           if (opd->adjust == NULL)
7984             return FALSE;
7985
7986           /* This seems a waste of time as input .opd sections are all
7987              zeros as generated by gcc, but I suppose there's no reason
7988              this will always be so.  We might start putting something in
7989              the third word of .opd entries.  */
7990           if ((sec->flags & SEC_IN_MEMORY) == 0)
7991             {
7992               bfd_byte *loc;
7993               if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7994                 {
7995                   if (loc != NULL)
7996                     free (loc);
7997                 error_ret:
7998                   if (local_syms != NULL
7999                       && symtab_hdr->contents != (unsigned char *) local_syms)
8000                     free (local_syms);
8001                   if (elf_section_data (sec)->relocs != relstart)
8002                     free (relstart);
8003                   return FALSE;
8004                 }
8005               sec->contents = loc;
8006               sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
8007             }
8008
8009           elf_section_data (sec)->relocs = relstart;
8010
8011           new_contents = sec->contents;
8012           if (add_aux_fields)
8013             {
8014               new_contents = bfd_malloc (sec->size + cnt_16b * 8);
8015               if (new_contents == NULL)
8016                 return FALSE;
8017               need_pad = NULL;
8018             }
8019           wptr = new_contents;
8020           rptr = sec->contents;
8021           write_rel = relstart;
8022           for (rel = relstart; rel < relend; )
8023             {
8024               unsigned long r_symndx;
8025               asection *sym_sec;
8026               struct elf_link_hash_entry *h;
8027               struct ppc_link_hash_entry *fdh = NULL;
8028               Elf_Internal_Sym *sym;
8029               long opd_ent_size;
8030               Elf_Internal_Rela *next_rel;
8031               bfd_boolean skip;
8032
8033               r_symndx = ELF64_R_SYM (rel->r_info);
8034               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8035                               r_symndx, ibfd))
8036                 goto error_ret;
8037
8038               next_rel = rel + 2;
8039               if (next_rel + 1 == relend
8040                   || (next_rel + 2 < relend
8041                       && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
8042                 ++next_rel;
8043
8044               /* See if the .opd entry is full 24 byte or
8045                  16 byte (with fd_aux entry overlapped with next
8046                  fd_func).  */
8047               opd_ent_size = 24;
8048               if (next_rel == relend)
8049                 {
8050                   if (sec->size == rel->r_offset + 16)
8051                     opd_ent_size = 16;
8052                 }
8053               else if (next_rel->r_offset == rel->r_offset + 16)
8054                 opd_ent_size = 16;
8055
8056               if (h != NULL
8057                   && h->root.root.string[0] == '.')
8058                 {
8059                   fdh = ((struct ppc_link_hash_entry *) h)->oh;
8060                   if (fdh != NULL)
8061                     {
8062                       fdh = ppc_follow_link (fdh);
8063                       if (fdh->elf.root.type != bfd_link_hash_defined
8064                           && fdh->elf.root.type != bfd_link_hash_defweak)
8065                         fdh = NULL;
8066                     }
8067                 }
8068
8069               skip = (sym_sec->owner != ibfd
8070                       || sym_sec->output_section == bfd_abs_section_ptr);
8071               if (skip)
8072                 {
8073                   if (fdh != NULL && sym_sec->owner == ibfd)
8074                     {
8075                       /* Arrange for the function descriptor sym
8076                          to be dropped.  */
8077                       fdh->elf.root.u.def.value = 0;
8078                       fdh->elf.root.u.def.section = sym_sec;
8079                     }
8080                   opd->adjust[OPD_NDX (rel->r_offset)] = -1;
8081
8082                   if (NO_OPD_RELOCS || bfd_link_relocatable (info))
8083                     rel = next_rel;
8084                   else
8085                     while (1)
8086                       {
8087                         if (!dec_dynrel_count (rel->r_info, sec, info,
8088                                                NULL, h, sym))
8089                           goto error_ret;
8090
8091                         if (++rel == next_rel)
8092                           break;
8093
8094                         r_symndx = ELF64_R_SYM (rel->r_info);
8095                         if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8096                                         r_symndx, ibfd))
8097                           goto error_ret;
8098                       }
8099                 }
8100               else
8101                 {
8102                   /* We'll be keeping this opd entry.  */
8103                   long adjust;
8104
8105                   if (fdh != NULL)
8106                     {
8107                       /* Redefine the function descriptor symbol to
8108                          this location in the opd section.  It is
8109                          necessary to update the value here rather
8110                          than using an array of adjustments as we do
8111                          for local symbols, because various places
8112                          in the generic ELF code use the value
8113                          stored in u.def.value.  */
8114                       fdh->elf.root.u.def.value = wptr - new_contents;
8115                       fdh->adjust_done = 1;
8116                     }
8117
8118                   /* Local syms are a bit tricky.  We could
8119                      tweak them as they can be cached, but
8120                      we'd need to look through the local syms
8121                      for the function descriptor sym which we
8122                      don't have at the moment.  So keep an
8123                      array of adjustments.  */
8124                   adjust = (wptr - new_contents) - (rptr - sec->contents);
8125                   opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
8126
8127                   if (wptr != rptr)
8128                     memcpy (wptr, rptr, opd_ent_size);
8129                   wptr += opd_ent_size;
8130                   if (add_aux_fields && opd_ent_size == 16)
8131                     {
8132                       memset (wptr, '\0', 8);
8133                       wptr += 8;
8134                     }
8135
8136                   /* We need to adjust any reloc offsets to point to the
8137                      new opd entries.  */
8138                   for ( ; rel != next_rel; ++rel)
8139                     {
8140                       rel->r_offset += adjust;
8141                       if (write_rel != rel)
8142                         memcpy (write_rel, rel, sizeof (*rel));
8143                       ++write_rel;
8144                     }
8145                 }
8146
8147               rptr += opd_ent_size;
8148             }
8149
8150           sec->size = wptr - new_contents;
8151           sec->reloc_count = write_rel - relstart;
8152           if (add_aux_fields)
8153             {
8154               free (sec->contents);
8155               sec->contents = new_contents;
8156             }
8157
8158           /* Fudge the header size too, as this is used later in
8159              elf_bfd_final_link if we are emitting relocs.  */
8160           rel_hdr = _bfd_elf_single_rel_hdr (sec);
8161           rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
8162           some_edited = TRUE;
8163         }
8164       else if (elf_section_data (sec)->relocs != relstart)
8165         free (relstart);
8166
8167       if (local_syms != NULL
8168           && symtab_hdr->contents != (unsigned char *) local_syms)
8169         {
8170           if (!info->keep_memory)
8171             free (local_syms);
8172           else
8173             symtab_hdr->contents = (unsigned char *) local_syms;
8174         }
8175     }
8176
8177   if (some_edited)
8178     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
8179
8180   /* If we are doing a final link and the last .opd entry is just 16 byte
8181      long, add a 8 byte padding after it.  */
8182   if (need_pad != NULL && !bfd_link_relocatable (info))
8183     {
8184       bfd_byte *p;
8185
8186       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
8187         {
8188           BFD_ASSERT (need_pad->size > 0);
8189
8190           p = bfd_malloc (need_pad->size + 8);
8191           if (p == NULL)
8192             return FALSE;
8193
8194           if (! bfd_get_section_contents (need_pad->owner, need_pad,
8195                                           p, 0, need_pad->size))
8196             return FALSE;
8197
8198           need_pad->contents = p;
8199           need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
8200         }
8201       else
8202         {
8203           p = bfd_realloc (need_pad->contents, need_pad->size + 8);
8204           if (p == NULL)
8205             return FALSE;
8206
8207           need_pad->contents = p;
8208         }
8209
8210       memset (need_pad->contents + need_pad->size, 0, 8);
8211       need_pad->size += 8;
8212     }
8213
8214   return TRUE;
8215 }
8216
8217 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
8218
8219 asection *
8220 ppc64_elf_tls_setup (struct bfd_link_info *info)
8221 {
8222   struct ppc_link_hash_table *htab;
8223
8224   htab = ppc_hash_table (info);
8225   if (htab == NULL)
8226     return NULL;
8227
8228   if (abiversion (info->output_bfd) == 1)
8229     htab->opd_abi = 1;
8230
8231   if (htab->params->no_multi_toc)
8232     htab->do_multi_toc = 0;
8233   else if (!htab->do_multi_toc)
8234     htab->params->no_multi_toc = 1;
8235
8236   /* Default to --no-plt-localentry, as this option can cause problems
8237      with symbol interposition.  For example, glibc libpthread.so and
8238      libc.so duplicate many pthread symbols, with a fallback
8239      implementation in libc.so.  In some cases the fallback does more
8240      work than the pthread implementation.  __pthread_condattr_destroy
8241      is one such symbol: the libpthread.so implementation is
8242      localentry:0 while the libc.so implementation is localentry:8.
8243      An app that "cleverly" uses dlopen to only load necessary
8244      libraries at runtime may omit loading libpthread.so when not
8245      running multi-threaded, which then results in the libc.so
8246      fallback symbols being used and ld.so complaining.  Now there
8247      are workarounds in ld (see non_zero_localentry) to detect the
8248      pthread situation, but that may not be the only case where
8249      --plt-localentry can cause trouble.  */
8250   if (htab->params->plt_localentry0 < 0)
8251     htab->params->plt_localentry0 = 0;
8252   if (htab->params->plt_localentry0
8253       && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
8254                                FALSE, FALSE, FALSE) == NULL)
8255     info->callbacks->einfo
8256       (_("%P: warning: --plt-localentry is especially dangerous without "
8257          "ld.so support to detect ABI violations.\n"));
8258
8259   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
8260                         elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
8261                                               FALSE, FALSE, TRUE));
8262   /* Move dynamic linking info to the function descriptor sym.  */
8263   if (htab->tls_get_addr != NULL)
8264     func_desc_adjust (&htab->tls_get_addr->elf, info);
8265   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
8266                            elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
8267                                                  FALSE, FALSE, TRUE));
8268   if (htab->params->tls_get_addr_opt)
8269     {
8270       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
8271
8272       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
8273                                   FALSE, FALSE, TRUE);
8274       if (opt != NULL)
8275         func_desc_adjust (opt, info);
8276       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
8277                                      FALSE, FALSE, TRUE);
8278       if (opt_fd != NULL
8279           && (opt_fd->root.type == bfd_link_hash_defined
8280               || opt_fd->root.type == bfd_link_hash_defweak))
8281         {
8282           /* If glibc supports an optimized __tls_get_addr call stub,
8283              signalled by the presence of __tls_get_addr_opt, and we'll
8284              be calling __tls_get_addr via a plt call stub, then
8285              make __tls_get_addr point to __tls_get_addr_opt.  */
8286           tga_fd = &htab->tls_get_addr_fd->elf;
8287           if (htab->elf.dynamic_sections_created
8288               && tga_fd != NULL
8289               && (tga_fd->type == STT_FUNC
8290                   || tga_fd->needs_plt)
8291               && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
8292                    || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))
8293             {
8294               struct plt_entry *ent;
8295
8296               for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
8297                 if (ent->plt.refcount > 0)
8298                   break;
8299               if (ent != NULL)
8300                 {
8301                   tga_fd->root.type = bfd_link_hash_indirect;
8302                   tga_fd->root.u.i.link = &opt_fd->root;
8303                   ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
8304                   opt_fd->mark = 1;
8305                   if (opt_fd->dynindx != -1)
8306                     {
8307                       /* Use __tls_get_addr_opt in dynamic relocations.  */
8308                       opt_fd->dynindx = -1;
8309                       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
8310                                               opt_fd->dynstr_index);
8311                       if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
8312                         return NULL;
8313                     }
8314                   htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd;
8315                   tga = &htab->tls_get_addr->elf;
8316                   if (opt != NULL && tga != NULL)
8317                     {
8318                       tga->root.type = bfd_link_hash_indirect;
8319                       tga->root.u.i.link = &opt->root;
8320                       ppc64_elf_copy_indirect_symbol (info, opt, tga);
8321                       opt->mark = 1;
8322                       _bfd_elf_link_hash_hide_symbol (info, opt,
8323                                                       tga->forced_local);
8324                       htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
8325                     }
8326                   htab->tls_get_addr_fd->oh = htab->tls_get_addr;
8327                   htab->tls_get_addr_fd->is_func_descriptor = 1;
8328                   if (htab->tls_get_addr != NULL)
8329                     {
8330                       htab->tls_get_addr->oh = htab->tls_get_addr_fd;
8331                       htab->tls_get_addr->is_func = 1;
8332                     }
8333                 }
8334             }
8335         }
8336       else if (htab->params->tls_get_addr_opt < 0)
8337         htab->params->tls_get_addr_opt = 0;
8338     }
8339   return _bfd_elf_tls_setup (info->output_bfd, info);
8340 }
8341
8342 /* Return TRUE iff REL is a branch reloc with a global symbol matching
8343    HASH1 or HASH2.  */
8344
8345 static bfd_boolean
8346 branch_reloc_hash_match (const bfd *ibfd,
8347                          const Elf_Internal_Rela *rel,
8348                          const struct ppc_link_hash_entry *hash1,
8349                          const struct ppc_link_hash_entry *hash2)
8350 {
8351   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
8352   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
8353   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
8354
8355   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
8356     {
8357       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
8358       struct elf_link_hash_entry *h;
8359
8360       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
8361       h = elf_follow_link (h);
8362       if (h == &hash1->elf || h == &hash2->elf)
8363         return TRUE;
8364     }
8365   return FALSE;
8366 }
8367
8368 /* Run through all the TLS relocs looking for optimization
8369    opportunities.  The linker has been hacked (see ppc64elf.em) to do
8370    a preliminary section layout so that we know the TLS segment
8371    offsets.  We can't optimize earlier because some optimizations need
8372    to know the tp offset, and we need to optimize before allocating
8373    dynamic relocations.  */
8374
8375 bfd_boolean
8376 ppc64_elf_tls_optimize (struct bfd_link_info *info)
8377 {
8378   bfd *ibfd;
8379   asection *sec;
8380   struct ppc_link_hash_table *htab;
8381   unsigned char *toc_ref;
8382   int pass;
8383
8384   if (!bfd_link_executable (info))
8385     return TRUE;
8386
8387   htab = ppc_hash_table (info);
8388   if (htab == NULL)
8389     return FALSE;
8390
8391   /* Make two passes over the relocs.  On the first pass, mark toc
8392      entries involved with tls relocs, and check that tls relocs
8393      involved in setting up a tls_get_addr call are indeed followed by
8394      such a call.  If they are not, we can't do any tls optimization.
8395      On the second pass twiddle tls_mask flags to notify
8396      relocate_section that optimization can be done, and adjust got
8397      and plt refcounts.  */
8398   toc_ref = NULL;
8399   for (pass = 0; pass < 2; ++pass)
8400     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8401       {
8402         Elf_Internal_Sym *locsyms = NULL;
8403         asection *toc = bfd_get_section_by_name (ibfd, ".toc");
8404
8405         for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8406           if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
8407             {
8408               Elf_Internal_Rela *relstart, *rel, *relend;
8409               bfd_boolean found_tls_get_addr_arg = 0;
8410
8411               /* Read the relocations.  */
8412               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8413                                                     info->keep_memory);
8414               if (relstart == NULL)
8415                 {
8416                   free (toc_ref);
8417                   return FALSE;
8418                 }
8419
8420               relend = relstart + sec->reloc_count;
8421               for (rel = relstart; rel < relend; rel++)
8422                 {
8423                   enum elf_ppc64_reloc_type r_type;
8424                   unsigned long r_symndx;
8425                   struct elf_link_hash_entry *h;
8426                   Elf_Internal_Sym *sym;
8427                   asection *sym_sec;
8428                   unsigned char *tls_mask;
8429                   unsigned char tls_set, tls_clear, tls_type = 0;
8430                   bfd_vma value;
8431                   bfd_boolean ok_tprel, is_local;
8432                   long toc_ref_index = 0;
8433                   int expecting_tls_get_addr = 0;
8434                   bfd_boolean ret = FALSE;
8435
8436                   r_symndx = ELF64_R_SYM (rel->r_info);
8437                   if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
8438                                   r_symndx, ibfd))
8439                     {
8440                     err_free_rel:
8441                       if (elf_section_data (sec)->relocs != relstart)
8442                         free (relstart);
8443                       if (toc_ref != NULL)
8444                         free (toc_ref);
8445                       if (locsyms != NULL
8446                           && (elf_symtab_hdr (ibfd).contents
8447                               != (unsigned char *) locsyms))
8448                         free (locsyms);
8449                       return ret;
8450                     }
8451
8452                   if (h != NULL)
8453                     {
8454                       if (h->root.type == bfd_link_hash_defined
8455                           || h->root.type == bfd_link_hash_defweak)
8456                         value = h->root.u.def.value;
8457                       else if (h->root.type == bfd_link_hash_undefweak)
8458                         value = 0;
8459                       else
8460                         {
8461                           found_tls_get_addr_arg = 0;
8462                           continue;
8463                         }
8464                     }
8465                   else
8466                     /* Symbols referenced by TLS relocs must be of type
8467                        STT_TLS.  So no need for .opd local sym adjust.  */
8468                     value = sym->st_value;
8469
8470                   ok_tprel = FALSE;
8471                   is_local = FALSE;
8472                   if (h == NULL
8473                       || !h->def_dynamic)
8474                     {
8475                       is_local = TRUE;
8476                       if (h != NULL
8477                           && h->root.type == bfd_link_hash_undefweak)
8478                         ok_tprel = TRUE;
8479                       else if (sym_sec != NULL
8480                                && sym_sec->output_section != NULL)
8481                         {
8482                           value += sym_sec->output_offset;
8483                           value += sym_sec->output_section->vma;
8484                           value -= htab->elf.tls_sec->vma;
8485                           ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
8486                                       < (bfd_vma) 1 << 32);
8487                         }
8488                     }
8489
8490                   r_type = ELF64_R_TYPE (rel->r_info);
8491                   /* If this section has old-style __tls_get_addr calls
8492                      without marker relocs, then check that each
8493                      __tls_get_addr call reloc is preceded by a reloc
8494                      that conceivably belongs to the __tls_get_addr arg
8495                      setup insn.  If we don't find matching arg setup
8496                      relocs, don't do any tls optimization.  */
8497                   if (pass == 0
8498                       && sec->has_tls_get_addr_call
8499                       && h != NULL
8500                       && (h == &htab->tls_get_addr->elf
8501                           || h == &htab->tls_get_addr_fd->elf)
8502                       && !found_tls_get_addr_arg
8503                       && is_branch_reloc (r_type))
8504                     {
8505                       info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
8506                                                 "TLS optimization disabled\n"),
8507                                               ibfd, sec, rel->r_offset);
8508                       ret = TRUE;
8509                       goto err_free_rel;
8510                     }
8511
8512                   found_tls_get_addr_arg = 0;
8513                   switch (r_type)
8514                     {
8515                     case R_PPC64_GOT_TLSLD16:
8516                     case R_PPC64_GOT_TLSLD16_LO:
8517                       expecting_tls_get_addr = 1;
8518                       found_tls_get_addr_arg = 1;
8519                       /* Fall through.  */
8520
8521                     case R_PPC64_GOT_TLSLD16_HI:
8522                     case R_PPC64_GOT_TLSLD16_HA:
8523                       /* These relocs should never be against a symbol
8524                          defined in a shared lib.  Leave them alone if
8525                          that turns out to be the case.  */
8526                       if (!is_local)
8527                         continue;
8528
8529                       /* LD -> LE */
8530                       tls_set = 0;
8531                       tls_clear = TLS_LD;
8532                       tls_type = TLS_TLS | TLS_LD;
8533                       break;
8534
8535                     case R_PPC64_GOT_TLSGD16:
8536                     case R_PPC64_GOT_TLSGD16_LO:
8537                       expecting_tls_get_addr = 1;
8538                       found_tls_get_addr_arg = 1;
8539                       /* Fall through. */
8540
8541                     case R_PPC64_GOT_TLSGD16_HI:
8542                     case R_PPC64_GOT_TLSGD16_HA:
8543                       if (ok_tprel)
8544                         /* GD -> LE */
8545                         tls_set = 0;
8546                       else
8547                         /* GD -> IE */
8548                         tls_set = TLS_TLS | TLS_TPRELGD;
8549                       tls_clear = TLS_GD;
8550                       tls_type = TLS_TLS | TLS_GD;
8551                       break;
8552
8553                     case R_PPC64_GOT_TPREL16_DS:
8554                     case R_PPC64_GOT_TPREL16_LO_DS:
8555                     case R_PPC64_GOT_TPREL16_HI:
8556                     case R_PPC64_GOT_TPREL16_HA:
8557                       if (ok_tprel)
8558                         {
8559                           /* IE -> LE */
8560                           tls_set = 0;
8561                           tls_clear = TLS_TPREL;
8562                           tls_type = TLS_TLS | TLS_TPREL;
8563                           break;
8564                         }
8565                       continue;
8566
8567                     case R_PPC64_TLSGD:
8568                     case R_PPC64_TLSLD:
8569                       found_tls_get_addr_arg = 1;
8570                       /* Fall through.  */
8571
8572                     case R_PPC64_TLS:
8573                     case R_PPC64_TOC16:
8574                     case R_PPC64_TOC16_LO:
8575                       if (sym_sec == NULL || sym_sec != toc)
8576                         continue;
8577
8578                       /* Mark this toc entry as referenced by a TLS
8579                          code sequence.  We can do that now in the
8580                          case of R_PPC64_TLS, and after checking for
8581                          tls_get_addr for the TOC16 relocs.  */
8582                       if (toc_ref == NULL)
8583                         toc_ref = bfd_zmalloc (toc->output_section->rawsize / 8);
8584                       if (toc_ref == NULL)
8585                         goto err_free_rel;
8586
8587                       if (h != NULL)
8588                         value = h->root.u.def.value;
8589                       else
8590                         value = sym->st_value;
8591                       value += rel->r_addend;
8592                       if (value % 8 != 0)
8593                         continue;
8594                       BFD_ASSERT (value < toc->size
8595                                   && toc->output_offset % 8 == 0);
8596                       toc_ref_index = (value + toc->output_offset) / 8;
8597                       if (r_type == R_PPC64_TLS
8598                           || r_type == R_PPC64_TLSGD
8599                           || r_type == R_PPC64_TLSLD)
8600                         {
8601                           toc_ref[toc_ref_index] = 1;
8602                           continue;
8603                         }
8604
8605                       if (pass != 0 && toc_ref[toc_ref_index] == 0)
8606                         continue;
8607
8608                       tls_set = 0;
8609                       tls_clear = 0;
8610                       expecting_tls_get_addr = 2;
8611                       break;
8612
8613                     case R_PPC64_TPREL64:
8614                       if (pass == 0
8615                           || sec != toc
8616                           || toc_ref == NULL
8617                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8618                         continue;
8619                       if (ok_tprel)
8620                         {
8621                           /* IE -> LE */
8622                           tls_set = TLS_EXPLICIT;
8623                           tls_clear = TLS_TPREL;
8624                           break;
8625                         }
8626                       continue;
8627
8628                     case R_PPC64_DTPMOD64:
8629                       if (pass == 0
8630                           || sec != toc
8631                           || toc_ref == NULL
8632                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8633                         continue;
8634                       if (rel + 1 < relend
8635                           && (rel[1].r_info
8636                               == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8637                           && rel[1].r_offset == rel->r_offset + 8)
8638                         {
8639                           if (ok_tprel)
8640                             /* GD -> LE */
8641                             tls_set = TLS_EXPLICIT | TLS_GD;
8642                           else
8643                             /* GD -> IE */
8644                             tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
8645                           tls_clear = TLS_GD;
8646                         }
8647                       else
8648                         {
8649                           if (!is_local)
8650                             continue;
8651
8652                           /* LD -> LE */
8653                           tls_set = TLS_EXPLICIT;
8654                           tls_clear = TLS_LD;
8655                         }
8656                       break;
8657
8658                     default:
8659                       continue;
8660                     }
8661
8662                   if (pass == 0)
8663                     {
8664                       if (!expecting_tls_get_addr
8665                           || !sec->has_tls_get_addr_call)
8666                         continue;
8667
8668                       if (rel + 1 < relend
8669                           && branch_reloc_hash_match (ibfd, rel + 1,
8670                                                       htab->tls_get_addr,
8671                                                       htab->tls_get_addr_fd))
8672                         {
8673                           if (expecting_tls_get_addr == 2)
8674                             {
8675                               /* Check for toc tls entries.  */
8676                               unsigned char *toc_tls;
8677                               int retval;
8678
8679                               retval = get_tls_mask (&toc_tls, NULL, NULL,
8680                                                      &locsyms,
8681                                                      rel, ibfd);
8682                               if (retval == 0)
8683                                 goto err_free_rel;
8684                               if (toc_tls != NULL)
8685                                 {
8686                                   if ((*toc_tls & (TLS_GD | TLS_LD)) != 0)
8687                                     found_tls_get_addr_arg = 1;
8688                                   if (retval > 1)
8689                                     toc_ref[toc_ref_index] = 1;
8690                                 }
8691                             }
8692                           continue;
8693                         }
8694
8695                       if (expecting_tls_get_addr != 1)
8696                         continue;
8697
8698                       /* Uh oh, we didn't find the expected call.  We
8699                          could just mark this symbol to exclude it
8700                          from tls optimization but it's safer to skip
8701                          the entire optimization.  */
8702                       /* xgettext:c-format */
8703                       info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8704                                                 "TLS optimization disabled\n"),
8705                                               ibfd, sec, rel->r_offset);
8706                       ret = TRUE;
8707                       goto err_free_rel;
8708                     }
8709
8710                   if (expecting_tls_get_addr && htab->tls_get_addr != NULL)
8711                     {
8712                       struct plt_entry *ent;
8713                       for (ent = htab->tls_get_addr->elf.plt.plist;
8714                            ent != NULL;
8715                            ent = ent->next)
8716                         if (ent->addend == 0)
8717                           {
8718                             if (ent->plt.refcount > 0)
8719                               {
8720                                 ent->plt.refcount -= 1;
8721                                 expecting_tls_get_addr = 0;
8722                               }
8723                             break;
8724                           }
8725                     }
8726
8727                   if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL)
8728                     {
8729                       struct plt_entry *ent;
8730                       for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8731                            ent != NULL;
8732                            ent = ent->next)
8733                         if (ent->addend == 0)
8734                           {
8735                             if (ent->plt.refcount > 0)
8736                               ent->plt.refcount -= 1;
8737                             break;
8738                           }
8739                     }
8740
8741                   if (tls_clear == 0)
8742                     continue;
8743
8744                   if ((tls_set & TLS_EXPLICIT) == 0)
8745                     {
8746                       struct got_entry *ent;
8747
8748                       /* Adjust got entry for this reloc.  */
8749                       if (h != NULL)
8750                         ent = h->got.glist;
8751                       else
8752                         ent = elf_local_got_ents (ibfd)[r_symndx];
8753
8754                       for (; ent != NULL; ent = ent->next)
8755                         if (ent->addend == rel->r_addend
8756                             && ent->owner == ibfd
8757                             && ent->tls_type == tls_type)
8758                           break;
8759                       if (ent == NULL)
8760                         abort ();
8761
8762                       if (tls_set == 0)
8763                         {
8764                           /* We managed to get rid of a got entry.  */
8765                           if (ent->got.refcount > 0)
8766                             ent->got.refcount -= 1;
8767                         }
8768                     }
8769                   else
8770                     {
8771                       /* If we got rid of a DTPMOD/DTPREL reloc pair then
8772                          we'll lose one or two dyn relocs.  */
8773                       if (!dec_dynrel_count (rel->r_info, sec, info,
8774                                              NULL, h, sym))
8775                         return FALSE;
8776
8777                       if (tls_set == (TLS_EXPLICIT | TLS_GD))
8778                         {
8779                           if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8780                                                  NULL, h, sym))
8781                             return FALSE;
8782                         }
8783                     }
8784
8785                   *tls_mask |= tls_set;
8786                   *tls_mask &= ~tls_clear;
8787                 }
8788
8789               if (elf_section_data (sec)->relocs != relstart)
8790                 free (relstart);
8791             }
8792
8793         if (locsyms != NULL
8794             && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8795           {
8796             if (!info->keep_memory)
8797               free (locsyms);
8798             else
8799               elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8800           }
8801       }
8802
8803   if (toc_ref != NULL)
8804     free (toc_ref);
8805   htab->do_tls_opt = 1;
8806   return TRUE;
8807 }
8808
8809 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8810    the values of any global symbols in a toc section that has been
8811    edited.  Globals in toc sections should be a rarity, so this function
8812    sets a flag if any are found in toc sections other than the one just
8813    edited, so that further hash table traversals can be avoided.  */
8814
8815 struct adjust_toc_info
8816 {
8817   asection *toc;
8818   unsigned long *skip;
8819   bfd_boolean global_toc_syms;
8820 };
8821
8822 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8823
8824 static bfd_boolean
8825 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8826 {
8827   struct ppc_link_hash_entry *eh;
8828   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8829   unsigned long i;
8830
8831   if (h->root.type != bfd_link_hash_defined
8832       && h->root.type != bfd_link_hash_defweak)
8833     return TRUE;
8834
8835   eh = (struct ppc_link_hash_entry *) h;
8836   if (eh->adjust_done)
8837     return TRUE;
8838
8839   if (eh->elf.root.u.def.section == toc_inf->toc)
8840     {
8841       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8842         i = toc_inf->toc->rawsize >> 3;
8843       else
8844         i = eh->elf.root.u.def.value >> 3;
8845
8846       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8847         {
8848           _bfd_error_handler
8849             (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8850           do
8851             ++i;
8852           while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8853           eh->elf.root.u.def.value = (bfd_vma) i << 3;
8854         }
8855
8856       eh->elf.root.u.def.value -= toc_inf->skip[i];
8857       eh->adjust_done = 1;
8858     }
8859   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8860     toc_inf->global_toc_syms = TRUE;
8861
8862   return TRUE;
8863 }
8864
8865 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
8866    on a _LO variety toc/got reloc.  */
8867
8868 static bfd_boolean
8869 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
8870 {
8871   return ((insn & (0x3f << 26)) == 12u << 26 /* addic */
8872           || (insn & (0x3f << 26)) == 14u << 26 /* addi */
8873           || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
8874           || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
8875           || (insn & (0x3f << 26)) == 36u << 26 /* stw */
8876           || (insn & (0x3f << 26)) == 38u << 26 /* stb */
8877           || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
8878           || (insn & (0x3f << 26)) == 42u << 26 /* lha */
8879           || (insn & (0x3f << 26)) == 44u << 26 /* sth */
8880           || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
8881           || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
8882           || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
8883           || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
8884           || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
8885           || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
8886           || (insn & (0x3f << 26)) == 56u << 26 /* lq,lfq */
8887           || ((insn & (0x3f << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
8888               /* Exclude lfqu by testing reloc.  If relocs are ever
8889                  defined for the reduced D field in psq_lu then those
8890                  will need testing too.  */
8891               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8892           || ((insn & (0x3f << 26)) == 58u << 26 /* ld,lwa */
8893               && (insn & 1) == 0)
8894           || (insn & (0x3f << 26)) == 60u << 26 /* stfq */
8895           || ((insn & (0x3f << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
8896               /* Exclude stfqu.  psq_stu as above for psq_lu.  */
8897               && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
8898           || ((insn & (0x3f << 26)) == 62u << 26 /* std,stq */
8899               && (insn & 1) == 0));
8900 }
8901
8902 /* Examine all relocs referencing .toc sections in order to remove
8903    unused .toc entries.  */
8904
8905 bfd_boolean
8906 ppc64_elf_edit_toc (struct bfd_link_info *info)
8907 {
8908   bfd *ibfd;
8909   struct adjust_toc_info toc_inf;
8910   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8911
8912   htab->do_toc_opt = 1;
8913   toc_inf.global_toc_syms = TRUE;
8914   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
8915     {
8916       asection *toc, *sec;
8917       Elf_Internal_Shdr *symtab_hdr;
8918       Elf_Internal_Sym *local_syms;
8919       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8920       unsigned long *skip, *drop;
8921       unsigned char *used;
8922       unsigned char *keep, last, some_unused;
8923
8924       if (!is_ppc64_elf (ibfd))
8925         continue;
8926
8927       toc = bfd_get_section_by_name (ibfd, ".toc");
8928       if (toc == NULL
8929           || toc->size == 0
8930           || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8931           || discarded_section (toc))
8932         continue;
8933
8934       toc_relocs = NULL;
8935       local_syms = NULL;
8936       symtab_hdr = &elf_symtab_hdr (ibfd);
8937
8938       /* Look at sections dropped from the final link.  */
8939       skip = NULL;
8940       relstart = NULL;
8941       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8942         {
8943           if (sec->reloc_count == 0
8944               || !discarded_section (sec)
8945               || get_opd_info (sec)
8946               || (sec->flags & SEC_ALLOC) == 0
8947               || (sec->flags & SEC_DEBUGGING) != 0)
8948             continue;
8949
8950           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8951           if (relstart == NULL)
8952             goto error_ret;
8953
8954           /* Run through the relocs to see which toc entries might be
8955              unused.  */
8956           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8957             {
8958               enum elf_ppc64_reloc_type r_type;
8959               unsigned long r_symndx;
8960               asection *sym_sec;
8961               struct elf_link_hash_entry *h;
8962               Elf_Internal_Sym *sym;
8963               bfd_vma val;
8964
8965               r_type = ELF64_R_TYPE (rel->r_info);
8966               switch (r_type)
8967                 {
8968                 default:
8969                   continue;
8970
8971                 case R_PPC64_TOC16:
8972                 case R_PPC64_TOC16_LO:
8973                 case R_PPC64_TOC16_HI:
8974                 case R_PPC64_TOC16_HA:
8975                 case R_PPC64_TOC16_DS:
8976                 case R_PPC64_TOC16_LO_DS:
8977                   break;
8978                 }
8979
8980               r_symndx = ELF64_R_SYM (rel->r_info);
8981               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8982                               r_symndx, ibfd))
8983                 goto error_ret;
8984
8985               if (sym_sec != toc)
8986                 continue;
8987
8988               if (h != NULL)
8989                 val = h->root.u.def.value;
8990               else
8991                 val = sym->st_value;
8992               val += rel->r_addend;
8993
8994               if (val >= toc->size)
8995                 continue;
8996
8997               /* Anything in the toc ought to be aligned to 8 bytes.
8998                  If not, don't mark as unused.  */
8999               if (val & 7)
9000                 continue;
9001
9002               if (skip == NULL)
9003                 {
9004                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
9005                   if (skip == NULL)
9006                     goto error_ret;
9007                 }
9008
9009               skip[val >> 3] = ref_from_discarded;
9010             }
9011
9012           if (elf_section_data (sec)->relocs != relstart)
9013             free (relstart);
9014         }
9015
9016       /* For largetoc loads of address constants, we can convert
9017          .  addis rx,2,addr@got@ha
9018          .  ld ry,addr@got@l(rx)
9019          to
9020          .  addis rx,2,addr@toc@ha
9021          .  addi ry,rx,addr@toc@l
9022          when addr is within 2G of the toc pointer.  This then means
9023          that the word storing "addr" in the toc is no longer needed.  */
9024
9025       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
9026           && toc->output_section->rawsize < (bfd_vma) 1 << 31
9027           && toc->reloc_count != 0)
9028         {
9029           /* Read toc relocs.  */
9030           toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9031                                                   info->keep_memory);
9032           if (toc_relocs == NULL)
9033             goto error_ret;
9034
9035           for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9036             {
9037               enum elf_ppc64_reloc_type r_type;
9038               unsigned long r_symndx;
9039               asection *sym_sec;
9040               struct elf_link_hash_entry *h;
9041               Elf_Internal_Sym *sym;
9042               bfd_vma val, addr;
9043
9044               r_type = ELF64_R_TYPE (rel->r_info);
9045               if (r_type != R_PPC64_ADDR64)
9046                 continue;
9047
9048               r_symndx = ELF64_R_SYM (rel->r_info);
9049               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9050                               r_symndx, ibfd))
9051                 goto error_ret;
9052
9053               if (sym_sec == NULL
9054                   || sym_sec->output_section == NULL
9055                   || discarded_section (sym_sec))
9056                 continue;
9057
9058               if (!SYMBOL_REFERENCES_LOCAL (info, h))
9059                 continue;
9060
9061               if (h != NULL)
9062                 {
9063                   if (h->type == STT_GNU_IFUNC)
9064                     continue;
9065                   val = h->root.u.def.value;
9066                 }
9067               else
9068                 {
9069                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
9070                     continue;
9071                   val = sym->st_value;
9072                 }
9073               val += rel->r_addend;
9074               val += sym_sec->output_section->vma + sym_sec->output_offset;
9075
9076               /* We don't yet know the exact toc pointer value, but we
9077                  know it will be somewhere in the toc section.  Don't
9078                  optimize if the difference from any possible toc
9079                  pointer is outside [ff..f80008000, 7fff7fff].  */
9080               addr = toc->output_section->vma + TOC_BASE_OFF;
9081               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
9082                 continue;
9083
9084               addr = toc->output_section->vma + toc->output_section->rawsize;
9085               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
9086                 continue;
9087
9088               if (skip == NULL)
9089                 {
9090                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
9091                   if (skip == NULL)
9092                     goto error_ret;
9093                 }
9094
9095               skip[rel->r_offset >> 3]
9096                 |= can_optimize | ((rel - toc_relocs) << 2);
9097             }
9098         }
9099
9100       if (skip == NULL)
9101         continue;
9102
9103       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
9104       if (used == NULL)
9105         {
9106         error_ret:
9107           if (local_syms != NULL
9108               && symtab_hdr->contents != (unsigned char *) local_syms)
9109             free (local_syms);
9110           if (sec != NULL
9111               && relstart != NULL
9112               && elf_section_data (sec)->relocs != relstart)
9113             free (relstart);
9114           if (toc_relocs != NULL
9115               && elf_section_data (toc)->relocs != toc_relocs)
9116             free (toc_relocs);
9117           if (skip != NULL)
9118             free (skip);
9119           return FALSE;
9120         }
9121
9122       /* Now check all kept sections that might reference the toc.
9123          Check the toc itself last.  */
9124       for (sec = (ibfd->sections == toc && toc->next ? toc->next
9125                   : ibfd->sections);
9126            sec != NULL;
9127            sec = (sec == toc ? NULL
9128                   : sec->next == NULL ? toc
9129                   : sec->next == toc && toc->next ? toc->next
9130                   : sec->next))
9131         {
9132           int repeat;
9133
9134           if (sec->reloc_count == 0
9135               || discarded_section (sec)
9136               || get_opd_info (sec)
9137               || (sec->flags & SEC_ALLOC) == 0
9138               || (sec->flags & SEC_DEBUGGING) != 0)
9139             continue;
9140
9141           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9142                                                 info->keep_memory);
9143           if (relstart == NULL)
9144             {
9145               free (used);
9146               goto error_ret;
9147             }
9148
9149           /* Mark toc entries referenced as used.  */
9150           do
9151             {
9152               repeat = 0;
9153               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9154                 {
9155                   enum elf_ppc64_reloc_type r_type;
9156                   unsigned long r_symndx;
9157                   asection *sym_sec;
9158                   struct elf_link_hash_entry *h;
9159                   Elf_Internal_Sym *sym;
9160                   bfd_vma val;
9161                   enum {no_check, check_lo, check_ha} insn_check;
9162
9163                   r_type = ELF64_R_TYPE (rel->r_info);
9164                   switch (r_type)
9165                     {
9166                     default:
9167                       insn_check = no_check;
9168                       break;
9169
9170                     case R_PPC64_GOT_TLSLD16_HA:
9171                     case R_PPC64_GOT_TLSGD16_HA:
9172                     case R_PPC64_GOT_TPREL16_HA:
9173                     case R_PPC64_GOT_DTPREL16_HA:
9174                     case R_PPC64_GOT16_HA:
9175                     case R_PPC64_TOC16_HA:
9176                       insn_check = check_ha;
9177                       break;
9178
9179                     case R_PPC64_GOT_TLSLD16_LO:
9180                     case R_PPC64_GOT_TLSGD16_LO:
9181                     case R_PPC64_GOT_TPREL16_LO_DS:
9182                     case R_PPC64_GOT_DTPREL16_LO_DS:
9183                     case R_PPC64_GOT16_LO:
9184                     case R_PPC64_GOT16_LO_DS:
9185                     case R_PPC64_TOC16_LO:
9186                     case R_PPC64_TOC16_LO_DS:
9187                       insn_check = check_lo;
9188                       break;
9189                     }
9190
9191                   if (insn_check != no_check)
9192                     {
9193                       bfd_vma off = rel->r_offset & ~3;
9194                       unsigned char buf[4];
9195                       unsigned int insn;
9196
9197                       if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
9198                         {
9199                           free (used);
9200                           goto error_ret;
9201                         }
9202                       insn = bfd_get_32 (ibfd, buf);
9203                       if (insn_check == check_lo
9204                           ? !ok_lo_toc_insn (insn, r_type)
9205                           : ((insn & ((0x3f << 26) | 0x1f << 16))
9206                              != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
9207                         {
9208                           char str[12];
9209
9210                           ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
9211                           sprintf (str, "%#08x", insn);
9212                           info->callbacks->einfo
9213                             /* xgettext:c-format */
9214                             (_("%H: toc optimization is not supported for"
9215                                " %s instruction.\n"),
9216                              ibfd, sec, rel->r_offset & ~3, str);
9217                         }
9218                     }
9219
9220                   switch (r_type)
9221                     {
9222                     case R_PPC64_TOC16:
9223                     case R_PPC64_TOC16_LO:
9224                     case R_PPC64_TOC16_HI:
9225                     case R_PPC64_TOC16_HA:
9226                     case R_PPC64_TOC16_DS:
9227                     case R_PPC64_TOC16_LO_DS:
9228                       /* In case we're taking addresses of toc entries.  */
9229                     case R_PPC64_ADDR64:
9230                       break;
9231
9232                     default:
9233                       continue;
9234                     }
9235
9236                   r_symndx = ELF64_R_SYM (rel->r_info);
9237                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9238                                   r_symndx, ibfd))
9239                     {
9240                       free (used);
9241                       goto error_ret;
9242                     }
9243
9244                   if (sym_sec != toc)
9245                     continue;
9246
9247                   if (h != NULL)
9248                     val = h->root.u.def.value;
9249                   else
9250                     val = sym->st_value;
9251                   val += rel->r_addend;
9252
9253                   if (val >= toc->size)
9254                     continue;
9255
9256                   if ((skip[val >> 3] & can_optimize) != 0)
9257                     {
9258                       bfd_vma off;
9259                       unsigned char opc;
9260
9261                       switch (r_type)
9262                         {
9263                         case R_PPC64_TOC16_HA:
9264                           break;
9265
9266                         case R_PPC64_TOC16_LO_DS:
9267                           off = rel->r_offset;
9268                           off += (bfd_big_endian (ibfd) ? -2 : 3);
9269                           if (!bfd_get_section_contents (ibfd, sec, &opc,
9270                                                          off, 1))
9271                             {
9272                               free (used);
9273                               goto error_ret;
9274                             }
9275                           if ((opc & (0x3f << 2)) == (58u << 2))
9276                             break;
9277                           /* Fall through.  */
9278
9279                         default:
9280                           /* Wrong sort of reloc, or not a ld.  We may
9281                              as well clear ref_from_discarded too.  */
9282                           skip[val >> 3] = 0;
9283                         }
9284                     }
9285
9286                   if (sec != toc)
9287                     used[val >> 3] = 1;
9288                   /* For the toc section, we only mark as used if this
9289                      entry itself isn't unused.  */
9290                   else if ((used[rel->r_offset >> 3]
9291                             || !(skip[rel->r_offset >> 3] & ref_from_discarded))
9292                            && !used[val >> 3])
9293                     {
9294                       /* Do all the relocs again, to catch reference
9295                          chains.  */
9296                       repeat = 1;
9297                       used[val >> 3] = 1;
9298                     }
9299                 }
9300             }
9301           while (repeat);
9302
9303           if (elf_section_data (sec)->relocs != relstart)
9304             free (relstart);
9305         }
9306
9307       /* Merge the used and skip arrays.  Assume that TOC
9308          doublewords not appearing as either used or unused belong
9309          to an entry more than one doubleword in size.  */
9310       for (drop = skip, keep = used, last = 0, some_unused = 0;
9311            drop < skip + (toc->size + 7) / 8;
9312            ++drop, ++keep)
9313         {
9314           if (*keep)
9315             {
9316               *drop &= ~ref_from_discarded;
9317               if ((*drop & can_optimize) != 0)
9318                 some_unused = 1;
9319               last = 0;
9320             }
9321           else if ((*drop & ref_from_discarded) != 0)
9322             {
9323               some_unused = 1;
9324               last = ref_from_discarded;
9325             }
9326           else
9327             *drop = last;
9328         }
9329
9330       free (used);
9331
9332       if (some_unused)
9333         {
9334           bfd_byte *contents, *src;
9335           unsigned long off;
9336           Elf_Internal_Sym *sym;
9337           bfd_boolean local_toc_syms = FALSE;
9338
9339           /* Shuffle the toc contents, and at the same time convert the
9340              skip array from booleans into offsets.  */
9341           if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
9342             goto error_ret;
9343
9344           elf_section_data (toc)->this_hdr.contents = contents;
9345
9346           for (src = contents, off = 0, drop = skip;
9347                src < contents + toc->size;
9348                src += 8, ++drop)
9349             {
9350               if ((*drop & (can_optimize | ref_from_discarded)) != 0)
9351                 off += 8;
9352               else if (off != 0)
9353                 {
9354                   *drop = off;
9355                   memcpy (src - off, src, 8);
9356                 }
9357             }
9358           *drop = off;
9359           toc->rawsize = toc->size;
9360           toc->size = src - contents - off;
9361
9362           /* Adjust addends for relocs against the toc section sym,
9363              and optimize any accesses we can.  */
9364           for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9365             {
9366               if (sec->reloc_count == 0
9367                   || discarded_section (sec))
9368                 continue;
9369
9370               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
9371                                                     info->keep_memory);
9372               if (relstart == NULL)
9373                 goto error_ret;
9374
9375               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
9376                 {
9377                   enum elf_ppc64_reloc_type r_type;
9378                   unsigned long r_symndx;
9379                   asection *sym_sec;
9380                   struct elf_link_hash_entry *h;
9381                   bfd_vma val;
9382
9383                   r_type = ELF64_R_TYPE (rel->r_info);
9384                   switch (r_type)
9385                     {
9386                     default:
9387                       continue;
9388
9389                     case R_PPC64_TOC16:
9390                     case R_PPC64_TOC16_LO:
9391                     case R_PPC64_TOC16_HI:
9392                     case R_PPC64_TOC16_HA:
9393                     case R_PPC64_TOC16_DS:
9394                     case R_PPC64_TOC16_LO_DS:
9395                     case R_PPC64_ADDR64:
9396                       break;
9397                     }
9398
9399                   r_symndx = ELF64_R_SYM (rel->r_info);
9400                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
9401                                   r_symndx, ibfd))
9402                     goto error_ret;
9403
9404                   if (sym_sec != toc)
9405                     continue;
9406
9407                   if (h != NULL)
9408                     val = h->root.u.def.value;
9409                   else
9410                     {
9411                       val = sym->st_value;
9412                       if (val != 0)
9413                         local_toc_syms = TRUE;
9414                     }
9415
9416                   val += rel->r_addend;
9417
9418                   if (val > toc->rawsize)
9419                     val = toc->rawsize;
9420                   else if ((skip[val >> 3] & ref_from_discarded) != 0)
9421                     continue;
9422                   else if ((skip[val >> 3] & can_optimize) != 0)
9423                     {
9424                       Elf_Internal_Rela *tocrel
9425                         = toc_relocs + (skip[val >> 3] >> 2);
9426                       unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
9427
9428                       switch (r_type)
9429                         {
9430                         case R_PPC64_TOC16_HA:
9431                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
9432                           break;
9433
9434                         case R_PPC64_TOC16_LO_DS:
9435                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
9436                           break;
9437
9438                         default:
9439                           if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
9440                             ppc_howto_init ();
9441                           info->callbacks->einfo
9442                             /* xgettext:c-format */
9443                             (_("%H: %s references "
9444                                "optimized away TOC entry\n"),
9445                              ibfd, sec, rel->r_offset,
9446                              ppc64_elf_howto_table[r_type]->name);
9447                           bfd_set_error (bfd_error_bad_value);
9448                           goto error_ret;
9449                         }
9450                       rel->r_addend = tocrel->r_addend;
9451                       elf_section_data (sec)->relocs = relstart;
9452                       continue;
9453                     }
9454
9455                   if (h != NULL || sym->st_value != 0)
9456                     continue;
9457
9458                   rel->r_addend -= skip[val >> 3];
9459                   elf_section_data (sec)->relocs = relstart;
9460                 }
9461
9462               if (elf_section_data (sec)->relocs != relstart)
9463                 free (relstart);
9464             }
9465
9466           /* We shouldn't have local or global symbols defined in the TOC,
9467              but handle them anyway.  */
9468           if (local_syms != NULL)
9469             for (sym = local_syms;
9470                  sym < local_syms + symtab_hdr->sh_info;
9471                  ++sym)
9472               if (sym->st_value != 0
9473                   && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
9474                 {
9475                   unsigned long i;
9476
9477                   if (sym->st_value > toc->rawsize)
9478                     i = toc->rawsize >> 3;
9479                   else
9480                     i = sym->st_value >> 3;
9481
9482                   if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
9483                     {
9484                       if (local_toc_syms)
9485                         _bfd_error_handler
9486                           (_("%s defined on removed toc entry"),
9487                            bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
9488                       do
9489                         ++i;
9490                       while ((skip[i] & (ref_from_discarded | can_optimize)));
9491                       sym->st_value = (bfd_vma) i << 3;
9492                     }
9493
9494                   sym->st_value -= skip[i];
9495                   symtab_hdr->contents = (unsigned char *) local_syms;
9496                 }
9497
9498           /* Adjust any global syms defined in this toc input section.  */
9499           if (toc_inf.global_toc_syms)
9500             {
9501               toc_inf.toc = toc;
9502               toc_inf.skip = skip;
9503               toc_inf.global_toc_syms = FALSE;
9504               elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
9505                                       &toc_inf);
9506             }
9507
9508           if (toc->reloc_count != 0)
9509             {
9510               Elf_Internal_Shdr *rel_hdr;
9511               Elf_Internal_Rela *wrel;
9512               bfd_size_type sz;
9513
9514               /* Remove unused toc relocs, and adjust those we keep.  */
9515               if (toc_relocs == NULL)
9516                 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9517                                                         info->keep_memory);
9518               if (toc_relocs == NULL)
9519                 goto error_ret;
9520
9521               wrel = toc_relocs;
9522               for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9523                 if ((skip[rel->r_offset >> 3]
9524                      & (ref_from_discarded | can_optimize)) == 0)
9525                   {
9526                     wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9527                     wrel->r_info = rel->r_info;
9528                     wrel->r_addend = rel->r_addend;
9529                     ++wrel;
9530                   }
9531                 else if (!dec_dynrel_count (rel->r_info, toc, info,
9532                                             &local_syms, NULL, NULL))
9533                   goto error_ret;
9534
9535               elf_section_data (toc)->relocs = toc_relocs;
9536               toc->reloc_count = wrel - toc_relocs;
9537               rel_hdr = _bfd_elf_single_rel_hdr (toc);
9538               sz = rel_hdr->sh_entsize;
9539               rel_hdr->sh_size = toc->reloc_count * sz;
9540             }
9541         }
9542       else if (toc_relocs != NULL
9543                && elf_section_data (toc)->relocs != toc_relocs)
9544         free (toc_relocs);
9545
9546       if (local_syms != NULL
9547           && symtab_hdr->contents != (unsigned char *) local_syms)
9548         {
9549           if (!info->keep_memory)
9550             free (local_syms);
9551           else
9552             symtab_hdr->contents = (unsigned char *) local_syms;
9553         }
9554       free (skip);
9555     }
9556
9557   return TRUE;
9558 }
9559
9560 /* Return true iff input section I references the TOC using
9561    instructions limited to +/-32k offsets.  */
9562
9563 bfd_boolean
9564 ppc64_elf_has_small_toc_reloc (asection *i)
9565 {
9566   return (is_ppc64_elf (i->owner)
9567           && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9568 }
9569
9570 /* Allocate space for one GOT entry.  */
9571
9572 static void
9573 allocate_got (struct elf_link_hash_entry *h,
9574               struct bfd_link_info *info,
9575               struct got_entry *gent)
9576 {
9577   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9578   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
9579   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9580                  ? 16 : 8);
9581   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9582                   ? 2 : 1) * sizeof (Elf64_External_Rela);
9583   asection *got = ppc64_elf_tdata (gent->owner)->got;
9584
9585   gent->got.offset = got->size;
9586   got->size += entsize;
9587
9588   if (h->type == STT_GNU_IFUNC)
9589     {
9590       htab->elf.irelplt->size += rentsize;
9591       htab->got_reli_size += rentsize;
9592     }
9593   else if (((bfd_link_pic (info)
9594              && !((gent->tls_type & TLS_TPREL) != 0
9595                   && bfd_link_executable (info)
9596                   && SYMBOL_REFERENCES_LOCAL (info, h)))
9597             || (htab->elf.dynamic_sections_created
9598                 && h->dynindx != -1
9599                 && !SYMBOL_REFERENCES_LOCAL (info, h)))
9600            && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9601     {
9602       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9603       relgot->size += rentsize;
9604     }
9605 }
9606
9607 /* This function merges got entries in the same toc group.  */
9608
9609 static void
9610 merge_got_entries (struct got_entry **pent)
9611 {
9612   struct got_entry *ent, *ent2;
9613
9614   for (ent = *pent; ent != NULL; ent = ent->next)
9615     if (!ent->is_indirect)
9616       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9617         if (!ent2->is_indirect
9618             && ent2->addend == ent->addend
9619             && ent2->tls_type == ent->tls_type
9620             && elf_gp (ent2->owner) == elf_gp (ent->owner))
9621           {
9622             ent2->is_indirect = TRUE;
9623             ent2->got.ent = ent;
9624           }
9625 }
9626
9627 /* If H is undefined, make it dynamic if that makes sense.  */
9628
9629 static bfd_boolean
9630 ensure_undef_dynamic (struct bfd_link_info *info,
9631                       struct elf_link_hash_entry *h)
9632 {
9633   struct elf_link_hash_table *htab = elf_hash_table (info);
9634
9635   if (htab->dynamic_sections_created
9636       && ((info->dynamic_undefined_weak != 0
9637            && h->root.type == bfd_link_hash_undefweak)
9638           || h->root.type == bfd_link_hash_undefined)
9639       && h->dynindx == -1
9640       && !h->forced_local
9641       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
9642     return bfd_elf_link_record_dynamic_symbol (info, h);
9643   return TRUE;
9644 }
9645
9646 /* Allocate space in .plt, .got and associated reloc sections for
9647    dynamic relocs.  */
9648
9649 static bfd_boolean
9650 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9651 {
9652   struct bfd_link_info *info;
9653   struct ppc_link_hash_table *htab;
9654   asection *s;
9655   struct ppc_link_hash_entry *eh;
9656   struct got_entry **pgent, *gent;
9657
9658   if (h->root.type == bfd_link_hash_indirect)
9659     return TRUE;
9660
9661   info = (struct bfd_link_info *) inf;
9662   htab = ppc_hash_table (info);
9663   if (htab == NULL)
9664     return FALSE;
9665
9666   eh = (struct ppc_link_hash_entry *) h;
9667   /* Run through the TLS GD got entries first if we're changing them
9668      to TPREL.  */
9669   if ((eh->tls_mask & TLS_TPRELGD) != 0)
9670     for (gent = h->got.glist; gent != NULL; gent = gent->next)
9671       if (gent->got.refcount > 0
9672           && (gent->tls_type & TLS_GD) != 0)
9673         {
9674           /* This was a GD entry that has been converted to TPREL.  If
9675              there happens to be a TPREL entry we can use that one.  */
9676           struct got_entry *ent;
9677           for (ent = h->got.glist; ent != NULL; ent = ent->next)
9678             if (ent->got.refcount > 0
9679                 && (ent->tls_type & TLS_TPREL) != 0
9680                 && ent->addend == gent->addend
9681                 && ent->owner == gent->owner)
9682               {
9683                 gent->got.refcount = 0;
9684                 break;
9685               }
9686
9687           /* If not, then we'll be using our own TPREL entry.  */
9688           if (gent->got.refcount != 0)
9689             gent->tls_type = TLS_TLS | TLS_TPREL;
9690         }
9691
9692   /* Remove any list entry that won't generate a word in the GOT before
9693      we call merge_got_entries.  Otherwise we risk merging to empty
9694      entries.  */
9695   pgent = &h->got.glist;
9696   while ((gent = *pgent) != NULL)
9697     if (gent->got.refcount > 0)
9698       {
9699         if ((gent->tls_type & TLS_LD) != 0
9700             && !h->def_dynamic)
9701           {
9702             ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9703             *pgent = gent->next;
9704           }
9705         else
9706           pgent = &gent->next;
9707       }
9708     else
9709       *pgent = gent->next;
9710
9711   if (!htab->do_multi_toc)
9712     merge_got_entries (&h->got.glist);
9713
9714   for (gent = h->got.glist; gent != NULL; gent = gent->next)
9715     if (!gent->is_indirect)
9716       {
9717         /* Make sure this symbol is output as a dynamic symbol.  */
9718         if (!ensure_undef_dynamic (info, h))
9719           return FALSE;
9720
9721         if (!is_ppc64_elf (gent->owner))
9722           abort ();
9723
9724         allocate_got (h, info, gent);
9725       }
9726
9727   /* If no dynamic sections we can't have dynamic relocs, except for
9728      IFUNCs which are handled even in static executables.  */
9729   if (!htab->elf.dynamic_sections_created
9730       && h->type != STT_GNU_IFUNC)
9731     eh->dyn_relocs = NULL;
9732
9733   /* Discard relocs on undefined symbols that must be local.  */
9734   else if (h->root.type == bfd_link_hash_undefined
9735            && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9736     eh->dyn_relocs = NULL;
9737
9738   /* Also discard relocs on undefined weak syms with non-default
9739      visibility, or when dynamic_undefined_weak says so.  */
9740   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9741     eh->dyn_relocs = NULL;
9742
9743   if (eh->dyn_relocs != NULL)
9744     {
9745       struct elf_dyn_relocs *p, **pp;
9746
9747       /* In the shared -Bsymbolic case, discard space allocated for
9748          dynamic pc-relative relocs against symbols which turn out to
9749          be defined in regular objects.  For the normal shared case,
9750          discard space for relocs that have become local due to symbol
9751          visibility changes.  */
9752
9753       if (bfd_link_pic (info))
9754         {
9755           /* Relocs that use pc_count are those that appear on a call
9756              insn, or certain REL relocs (see must_be_dyn_reloc) that
9757              can be generated via assembly.  We want calls to
9758              protected symbols to resolve directly to the function
9759              rather than going via the plt.  If people want function
9760              pointer comparisons to work as expected then they should
9761              avoid writing weird assembly.  */
9762           if (SYMBOL_CALLS_LOCAL (info, h))
9763             {
9764               for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9765                 {
9766                   p->count -= p->pc_count;
9767                   p->pc_count = 0;
9768                   if (p->count == 0)
9769                     *pp = p->next;
9770                   else
9771                     pp = &p->next;
9772                 }
9773             }
9774
9775           if (eh->dyn_relocs != NULL)
9776             {
9777               /* Make sure this symbol is output as a dynamic symbol.  */
9778               if (!ensure_undef_dynamic (info, h))
9779                 return FALSE;
9780             }
9781         }
9782       else if (ELIMINATE_COPY_RELOCS && h->type != STT_GNU_IFUNC)
9783         {
9784           /* For the non-pic case, discard space for relocs against
9785              symbols which turn out to need copy relocs or are not
9786              dynamic.  */
9787           if (h->dynamic_adjusted
9788               && !h->def_regular
9789               && !ELF_COMMON_DEF_P (h))
9790             {
9791               /* Make sure this symbol is output as a dynamic symbol.  */
9792               if (!ensure_undef_dynamic (info, h))
9793                 return FALSE;
9794
9795               if (h->dynindx == -1)
9796                 eh->dyn_relocs = NULL;
9797             }
9798           else
9799             eh->dyn_relocs = NULL;
9800         }
9801
9802       /* Finally, allocate space.  */
9803       for (p = eh->dyn_relocs; p != NULL; p = p->next)
9804         {
9805           asection *sreloc = elf_section_data (p->sec)->sreloc;
9806           if (eh->elf.type == STT_GNU_IFUNC)
9807             sreloc = htab->elf.irelplt;
9808           sreloc->size += p->count * sizeof (Elf64_External_Rela);
9809         }
9810     }
9811
9812   if ((htab->elf.dynamic_sections_created
9813        && h->dynindx != -1)
9814       || h->type == STT_GNU_IFUNC)
9815     {
9816       struct plt_entry *pent;
9817       bfd_boolean doneone = FALSE;
9818       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9819         if (pent->plt.refcount > 0)
9820           {
9821             if (!htab->elf.dynamic_sections_created
9822                 || h->dynindx == -1)
9823               {
9824                 s = htab->elf.iplt;
9825                 pent->plt.offset = s->size;
9826                 s->size += PLT_ENTRY_SIZE (htab);
9827                 s = htab->elf.irelplt;
9828               }
9829             else
9830               {
9831                 /* If this is the first .plt entry, make room for the special
9832                    first entry.  */
9833                 s = htab->elf.splt;
9834                 if (s->size == 0)
9835                   s->size += PLT_INITIAL_ENTRY_SIZE (htab);
9836
9837                 pent->plt.offset = s->size;
9838
9839                 /* Make room for this entry.  */
9840                 s->size += PLT_ENTRY_SIZE (htab);
9841
9842                 /* Make room for the .glink code.  */
9843                 s = htab->glink;
9844                 if (s->size == 0)
9845                   s->size += GLINK_CALL_STUB_SIZE;
9846                 if (htab->opd_abi)
9847                   {
9848                     /* We need bigger stubs past index 32767.  */
9849                     if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
9850                       s->size += 4;
9851                     s->size += 2*4;
9852                   }
9853                 else
9854                   s->size += 4;
9855
9856                 /* We also need to make an entry in the .rela.plt section.  */
9857                 s = htab->elf.srelplt;
9858               }
9859             s->size += sizeof (Elf64_External_Rela);
9860             doneone = TRUE;
9861           }
9862         else
9863           pent->plt.offset = (bfd_vma) -1;
9864       if (!doneone)
9865         {
9866           h->plt.plist = NULL;
9867           h->needs_plt = 0;
9868         }
9869     }
9870   else
9871     {
9872       h->plt.plist = NULL;
9873       h->needs_plt = 0;
9874     }
9875
9876   return TRUE;
9877 }
9878
9879 /* Called via elf_link_hash_traverse from ppc64_elf_size_dynamic_sections
9880    to set up space for global entry stubs.  These are put in glink,
9881    after the branch table.  */
9882
9883 static bfd_boolean
9884 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
9885 {
9886   struct bfd_link_info *info;
9887   struct ppc_link_hash_table *htab;
9888   struct plt_entry *pent;
9889   asection *s;
9890
9891   if (h->root.type == bfd_link_hash_indirect)
9892     return TRUE;
9893
9894   if (!h->pointer_equality_needed)
9895     return TRUE;
9896
9897   if (h->def_regular)
9898     return TRUE;
9899
9900   info = inf;
9901   htab = ppc_hash_table (info);
9902   if (htab == NULL)
9903     return FALSE;
9904
9905   s = htab->glink;
9906   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9907     if (pent->plt.offset != (bfd_vma) -1
9908         && pent->addend == 0)
9909       {
9910         /* For ELFv2, if this symbol is not defined in a regular file
9911            and we are not generating a shared library or pie, then we
9912            need to define the symbol in the executable on a call stub.
9913            This is to avoid text relocations.  */
9914         s->size = (s->size + 15) & -16;
9915         h->root.type = bfd_link_hash_defined;
9916         h->root.u.def.section = s;
9917         h->root.u.def.value = s->size;
9918         s->size += 16;
9919         break;
9920       }
9921   return TRUE;
9922 }
9923
9924 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
9925    read-only sections.  */
9926
9927 static bfd_boolean
9928 maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
9929 {
9930   asection *sec;
9931
9932   if (h->root.type == bfd_link_hash_indirect)
9933     return TRUE;
9934
9935   sec = readonly_dynrelocs (h);
9936   if (sec != NULL)
9937     {
9938       struct bfd_link_info *info = (struct bfd_link_info *) inf;
9939
9940       info->flags |= DF_TEXTREL;
9941       info->callbacks->minfo
9942         (_("%B: dynamic relocation in read-only section `%A'\n"),
9943          sec->owner, sec);
9944
9945       /* Not an error, just cut short the traversal.  */
9946       return FALSE;
9947     }
9948   return TRUE;
9949 }
9950
9951 /* Set the sizes of the dynamic sections.  */
9952
9953 static bfd_boolean
9954 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9955                                  struct bfd_link_info *info)
9956 {
9957   struct ppc_link_hash_table *htab;
9958   bfd *dynobj;
9959   asection *s;
9960   bfd_boolean relocs;
9961   bfd *ibfd;
9962   struct got_entry *first_tlsld;
9963
9964   htab = ppc_hash_table (info);
9965   if (htab == NULL)
9966     return FALSE;
9967
9968   dynobj = htab->elf.dynobj;
9969   if (dynobj == NULL)
9970     abort ();
9971
9972   if (htab->elf.dynamic_sections_created)
9973     {
9974       /* Set the contents of the .interp section to the interpreter.  */
9975       if (bfd_link_executable (info) && !info->nointerp)
9976         {
9977           s = bfd_get_linker_section (dynobj, ".interp");
9978           if (s == NULL)
9979             abort ();
9980           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9981           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9982         }
9983     }
9984
9985   /* Set up .got offsets for local syms, and space for local dynamic
9986      relocs.  */
9987   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
9988     {
9989       struct got_entry **lgot_ents;
9990       struct got_entry **end_lgot_ents;
9991       struct plt_entry **local_plt;
9992       struct plt_entry **end_local_plt;
9993       unsigned char *lgot_masks;
9994       bfd_size_type locsymcount;
9995       Elf_Internal_Shdr *symtab_hdr;
9996
9997       if (!is_ppc64_elf (ibfd))
9998         continue;
9999
10000       for (s = ibfd->sections; s != NULL; s = s->next)
10001         {
10002           struct ppc_dyn_relocs *p;
10003
10004           for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
10005             {
10006               if (!bfd_is_abs_section (p->sec)
10007                   && bfd_is_abs_section (p->sec->output_section))
10008                 {
10009                   /* Input section has been discarded, either because
10010                      it is a copy of a linkonce section or due to
10011                      linker script /DISCARD/, so we'll be discarding
10012                      the relocs too.  */
10013                 }
10014               else if (p->count != 0)
10015                 {
10016                   asection *srel = elf_section_data (p->sec)->sreloc;
10017                   if (p->ifunc)
10018                     srel = htab->elf.irelplt;
10019                   srel->size += p->count * sizeof (Elf64_External_Rela);
10020                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
10021                     info->flags |= DF_TEXTREL;
10022                 }
10023             }
10024         }
10025
10026       lgot_ents = elf_local_got_ents (ibfd);
10027       if (!lgot_ents)
10028         continue;
10029
10030       symtab_hdr = &elf_symtab_hdr (ibfd);
10031       locsymcount = symtab_hdr->sh_info;
10032       end_lgot_ents = lgot_ents + locsymcount;
10033       local_plt = (struct plt_entry **) end_lgot_ents;
10034       end_local_plt = local_plt + locsymcount;
10035       lgot_masks = (unsigned char *) end_local_plt;
10036       s = ppc64_elf_tdata (ibfd)->got;
10037       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
10038         {
10039           struct got_entry **pent, *ent;
10040
10041           pent = lgot_ents;
10042           while ((ent = *pent) != NULL)
10043             if (ent->got.refcount > 0)
10044               {
10045                 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
10046                   {
10047                     ppc64_tlsld_got (ibfd)->got.refcount += 1;
10048                     *pent = ent->next;
10049                   }
10050                 else
10051                   {
10052                     unsigned int ent_size = 8;
10053                     unsigned int rel_size = sizeof (Elf64_External_Rela);
10054
10055                     ent->got.offset = s->size;
10056                     if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
10057                       {
10058                         ent_size *= 2;
10059                         rel_size *= 2;
10060                       }
10061                     s->size += ent_size;
10062                     if ((*lgot_masks & PLT_IFUNC) != 0)
10063                       {
10064                         htab->elf.irelplt->size += rel_size;
10065                         htab->got_reli_size += rel_size;
10066                       }
10067                     else if (bfd_link_pic (info)
10068                              && !((ent->tls_type & TLS_TPREL) != 0
10069                                   && bfd_link_executable (info)))
10070                       {
10071                         asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10072                         srel->size += rel_size;
10073                       }
10074                     pent = &ent->next;
10075                   }
10076               }
10077             else
10078               *pent = ent->next;
10079         }
10080
10081       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
10082       for (; local_plt < end_local_plt; ++local_plt)
10083         {
10084           struct plt_entry *ent;
10085
10086           for (ent = *local_plt; ent != NULL; ent = ent->next)
10087             if (ent->plt.refcount > 0)
10088               {
10089                 s = htab->elf.iplt;
10090                 ent->plt.offset = s->size;
10091                 s->size += PLT_ENTRY_SIZE (htab);
10092
10093                 htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
10094               }
10095             else
10096               ent->plt.offset = (bfd_vma) -1;
10097         }
10098     }
10099
10100   /* Allocate global sym .plt and .got entries, and space for global
10101      sym dynamic relocs.  */
10102   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
10103   /* Stash the end of glink branch table.  */
10104   if (htab->glink != NULL)
10105     htab->glink->rawsize = htab->glink->size;
10106
10107   if (!htab->opd_abi && !bfd_link_pic (info))
10108     elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info);
10109
10110   first_tlsld = NULL;
10111   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10112     {
10113       struct got_entry *ent;
10114
10115       if (!is_ppc64_elf (ibfd))
10116         continue;
10117
10118       ent = ppc64_tlsld_got (ibfd);
10119       if (ent->got.refcount > 0)
10120         {
10121           if (!htab->do_multi_toc && first_tlsld != NULL)
10122             {
10123               ent->is_indirect = TRUE;
10124               ent->got.ent = first_tlsld;
10125             }
10126           else
10127             {
10128               if (first_tlsld == NULL)
10129                 first_tlsld = ent;
10130               s = ppc64_elf_tdata (ibfd)->got;
10131               ent->got.offset = s->size;
10132               ent->owner = ibfd;
10133               s->size += 16;
10134               if (bfd_link_pic (info))
10135                 {
10136                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
10137                   srel->size += sizeof (Elf64_External_Rela);
10138                 }
10139             }
10140         }
10141       else
10142         ent->got.offset = (bfd_vma) -1;
10143     }
10144
10145   /* We now have determined the sizes of the various dynamic sections.
10146      Allocate memory for them.  */
10147   relocs = FALSE;
10148   for (s = dynobj->sections; s != NULL; s = s->next)
10149     {
10150       if ((s->flags & SEC_LINKER_CREATED) == 0)
10151         continue;
10152
10153       if (s == htab->brlt || s == htab->relbrlt)
10154         /* These haven't been allocated yet;  don't strip.  */
10155         continue;
10156       else if (s == htab->elf.sgot
10157                || s == htab->elf.splt
10158                || s == htab->elf.iplt
10159                || s == htab->glink
10160                || s == htab->elf.sdynbss
10161                || s == htab->elf.sdynrelro)
10162         {
10163           /* Strip this section if we don't need it; see the
10164              comment below.  */
10165         }
10166       else if (s == htab->glink_eh_frame)
10167         {
10168           if (!bfd_is_abs_section (s->output_section))
10169             /* Not sized yet.  */
10170             continue;
10171         }
10172       else if (CONST_STRNEQ (s->name, ".rela"))
10173         {
10174           if (s->size != 0)
10175             {
10176               if (s != htab->elf.srelplt)
10177                 relocs = TRUE;
10178
10179               /* We use the reloc_count field as a counter if we need
10180                  to copy relocs into the output file.  */
10181               s->reloc_count = 0;
10182             }
10183         }
10184       else
10185         {
10186           /* It's not one of our sections, so don't allocate space.  */
10187           continue;
10188         }
10189
10190       if (s->size == 0)
10191         {
10192           /* If we don't need this section, strip it from the
10193              output file.  This is mostly to handle .rela.bss and
10194              .rela.plt.  We must create both sections in
10195              create_dynamic_sections, because they must be created
10196              before the linker maps input sections to output
10197              sections.  The linker does that before
10198              adjust_dynamic_symbol is called, and it is that
10199              function which decides whether anything needs to go
10200              into these sections.  */
10201           s->flags |= SEC_EXCLUDE;
10202           continue;
10203         }
10204
10205       if (bfd_is_abs_section (s->output_section))
10206         _bfd_error_handler (_("warning: discarding dynamic section %s"),
10207                             s->name);
10208
10209       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10210         continue;
10211
10212       /* Allocate memory for the section contents.  We use bfd_zalloc
10213          here in case unused entries are not reclaimed before the
10214          section's contents are written out.  This should not happen,
10215          but this way if it does we get a R_PPC64_NONE reloc in .rela
10216          sections instead of garbage.
10217          We also rely on the section contents being zero when writing
10218          the GOT and .dynrelro.  */
10219       s->contents = bfd_zalloc (dynobj, s->size);
10220       if (s->contents == NULL)
10221         return FALSE;
10222     }
10223
10224   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
10225     {
10226       if (!is_ppc64_elf (ibfd))
10227         continue;
10228
10229       s = ppc64_elf_tdata (ibfd)->got;
10230       if (s != NULL && s != htab->elf.sgot)
10231         {
10232           if (s->size == 0)
10233             s->flags |= SEC_EXCLUDE;
10234           else
10235             {
10236               s->contents = bfd_zalloc (ibfd, s->size);
10237               if (s->contents == NULL)
10238                 return FALSE;
10239             }
10240         }
10241       s = ppc64_elf_tdata (ibfd)->relgot;
10242       if (s != NULL)
10243         {
10244           if (s->size == 0)
10245             s->flags |= SEC_EXCLUDE;
10246           else
10247             {
10248               s->contents = bfd_zalloc (ibfd, s->size);
10249               if (s->contents == NULL)
10250                 return FALSE;
10251               relocs = TRUE;
10252               s->reloc_count = 0;
10253             }
10254         }
10255     }
10256
10257   if (htab->elf.dynamic_sections_created)
10258     {
10259       bfd_boolean tls_opt;
10260
10261       /* Add some entries to the .dynamic section.  We fill in the
10262          values later, in ppc64_elf_finish_dynamic_sections, but we
10263          must add the entries now so that we get the correct size for
10264          the .dynamic section.  The DT_DEBUG entry is filled in by the
10265          dynamic linker and used by the debugger.  */
10266 #define add_dynamic_entry(TAG, VAL) \
10267   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
10268
10269       if (bfd_link_executable (info))
10270         {
10271           if (!add_dynamic_entry (DT_DEBUG, 0))
10272             return FALSE;
10273         }
10274
10275       if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
10276         {
10277           if (!add_dynamic_entry (DT_PLTGOT, 0)
10278               || !add_dynamic_entry (DT_PLTRELSZ, 0)
10279               || !add_dynamic_entry (DT_PLTREL, DT_RELA)
10280               || !add_dynamic_entry (DT_JMPREL, 0)
10281               || !add_dynamic_entry (DT_PPC64_GLINK, 0))
10282             return FALSE;
10283         }
10284
10285       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
10286         {
10287           if (!add_dynamic_entry (DT_PPC64_OPD, 0)
10288               || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
10289             return FALSE;
10290         }
10291
10292       tls_opt = (htab->params->tls_get_addr_opt
10293                  && htab->tls_get_addr_fd != NULL
10294                  && htab->tls_get_addr_fd->elf.plt.plist != NULL);
10295       if (tls_opt || !htab->opd_abi)
10296         {
10297           if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
10298             return FALSE;
10299         }
10300
10301       if (relocs)
10302         {
10303           if (!add_dynamic_entry (DT_RELA, 0)
10304               || !add_dynamic_entry (DT_RELASZ, 0)
10305               || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
10306             return FALSE;
10307
10308           /* If any dynamic relocs apply to a read-only section,
10309              then we need a DT_TEXTREL entry.  */
10310           if ((info->flags & DF_TEXTREL) == 0)
10311             elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
10312
10313           if ((info->flags & DF_TEXTREL) != 0)
10314             {
10315               if (!add_dynamic_entry (DT_TEXTREL, 0))
10316                 return FALSE;
10317             }
10318         }
10319     }
10320 #undef add_dynamic_entry
10321
10322   return TRUE;
10323 }
10324
10325 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
10326
10327 static bfd_boolean
10328 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
10329 {
10330   if (h->plt.plist != NULL
10331       && !h->def_regular
10332       && !h->pointer_equality_needed)
10333     return FALSE;
10334
10335   return _bfd_elf_hash_symbol (h);
10336 }
10337
10338 /* Determine the type of stub needed, if any, for a call.  */
10339
10340 static inline enum ppc_stub_type
10341 ppc_type_of_stub (asection *input_sec,
10342                   const Elf_Internal_Rela *rel,
10343                   struct ppc_link_hash_entry **hash,
10344                   struct plt_entry **plt_ent,
10345                   bfd_vma destination,
10346                   unsigned long local_off)
10347 {
10348   struct ppc_link_hash_entry *h = *hash;
10349   bfd_vma location;
10350   bfd_vma branch_offset;
10351   bfd_vma max_branch_offset;
10352   enum elf_ppc64_reloc_type r_type;
10353
10354   if (h != NULL)
10355     {
10356       struct plt_entry *ent;
10357       struct ppc_link_hash_entry *fdh = h;
10358       if (h->oh != NULL
10359           && h->oh->is_func_descriptor)
10360         {
10361           fdh = ppc_follow_link (h->oh);
10362           *hash = fdh;
10363         }
10364
10365       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
10366         if (ent->addend == rel->r_addend
10367             && ent->plt.offset != (bfd_vma) -1)
10368           {
10369             *plt_ent = ent;
10370             return ppc_stub_plt_call;
10371           }
10372
10373       /* Here, we know we don't have a plt entry.  If we don't have a
10374          either a defined function descriptor or a defined entry symbol
10375          in a regular object file, then it is pointless trying to make
10376          any other type of stub.  */
10377       if (!is_static_defined (&fdh->elf)
10378           && !is_static_defined (&h->elf))
10379         return ppc_stub_none;
10380     }
10381   else if (elf_local_got_ents (input_sec->owner) != NULL)
10382     {
10383       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
10384       struct plt_entry **local_plt = (struct plt_entry **)
10385         elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
10386       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
10387
10388       if (local_plt[r_symndx] != NULL)
10389         {
10390           struct plt_entry *ent;
10391
10392           for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
10393             if (ent->addend == rel->r_addend
10394                 && ent->plt.offset != (bfd_vma) -1)
10395               {
10396                 *plt_ent = ent;
10397                 return ppc_stub_plt_call;
10398               }
10399         }
10400     }
10401
10402   /* Determine where the call point is.  */
10403   location = (input_sec->output_offset
10404               + input_sec->output_section->vma
10405               + rel->r_offset);
10406
10407   branch_offset = destination - location;
10408   r_type = ELF64_R_TYPE (rel->r_info);
10409
10410   /* Determine if a long branch stub is needed.  */
10411   max_branch_offset = 1 << 25;
10412   if (r_type != R_PPC64_REL24)
10413     max_branch_offset = 1 << 15;
10414
10415   if (branch_offset + max_branch_offset >= 2 * max_branch_offset - local_off)
10416     /* We need a stub.  Figure out whether a long_branch or plt_branch
10417        is needed later.  */
10418     return ppc_stub_long_branch;
10419
10420   return ppc_stub_none;
10421 }
10422
10423 /* With power7 weakly ordered memory model, it is possible for ld.so
10424    to update a plt entry in one thread and have another thread see a
10425    stale zero toc entry.  To avoid this we need some sort of acquire
10426    barrier in the call stub.  One solution is to make the load of the
10427    toc word seem to appear to depend on the load of the function entry
10428    word.  Another solution is to test for r2 being zero, and branch to
10429    the appropriate glink entry if so.
10430
10431    .    fake dep barrier        compare
10432    .    ld 12,xxx(2)            ld 12,xxx(2)
10433    .    mtctr 12                mtctr 12
10434    .    xor 11,12,12            ld 2,xxx+8(2)
10435    .    add 2,2,11              cmpldi 2,0
10436    .    ld 2,xxx+8(2)           bnectr+
10437    .    bctr                    b <glink_entry>
10438
10439    The solution involving the compare turns out to be faster, so
10440    that's what we use unless the branch won't reach.  */
10441
10442 #define ALWAYS_USE_FAKE_DEP 0
10443 #define ALWAYS_EMIT_R2SAVE 0
10444
10445 #define PPC_LO(v) ((v) & 0xffff)
10446 #define PPC_HI(v) (((v) >> 16) & 0xffff)
10447 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
10448
10449 static inline unsigned int
10450 plt_stub_size (struct ppc_link_hash_table *htab,
10451                struct ppc_stub_hash_entry *stub_entry,
10452                bfd_vma off)
10453 {
10454   unsigned size = 12;
10455
10456   if (ALWAYS_EMIT_R2SAVE
10457       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10458     size += 4;
10459   if (PPC_HA (off) != 0)
10460     size += 4;
10461   if (htab->opd_abi)
10462     {
10463       size += 4;
10464       if (htab->params->plt_static_chain)
10465         size += 4;
10466       if (htab->params->plt_thread_safe
10467           && htab->elf.dynamic_sections_created
10468           && stub_entry->h != NULL
10469           && stub_entry->h->elf.dynindx != -1)
10470         size += 8;
10471       if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
10472         size += 4;
10473     }
10474   if (stub_entry->h != NULL
10475       && (stub_entry->h == htab->tls_get_addr_fd
10476           || stub_entry->h == htab->tls_get_addr)
10477       && htab->params->tls_get_addr_opt)
10478     {
10479       size += 7 * 4;
10480       if (ALWAYS_EMIT_R2SAVE
10481           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10482         size += 6 * 4;
10483     }
10484   return size;
10485 }
10486
10487 /* Depending on the sign of plt_stub_align:
10488    If positive, return the padding to align to a 2**plt_stub_align
10489    boundary.
10490    If negative, if this stub would cross fewer 2**plt_stub_align
10491    boundaries if we align, then return the padding needed to do so.  */
10492
10493 static inline unsigned int
10494 plt_stub_pad (struct ppc_link_hash_table *htab,
10495               struct ppc_stub_hash_entry *stub_entry,
10496               bfd_vma plt_off)
10497 {
10498   int stub_align;
10499   unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
10500   bfd_vma stub_off = stub_entry->group->stub_sec->size;
10501
10502   if (htab->params->plt_stub_align >= 0)
10503     {
10504       stub_align = 1 << htab->params->plt_stub_align;
10505       if ((stub_off & (stub_align - 1)) != 0)
10506         return stub_align - (stub_off & (stub_align - 1));
10507       return 0;
10508     }
10509
10510   stub_align = 1 << -htab->params->plt_stub_align;
10511   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
10512       > ((stub_size - 1) & -stub_align))
10513     return stub_align - (stub_off & (stub_align - 1));
10514   return 0;
10515 }
10516
10517 /* Build a .plt call stub.  */
10518
10519 static inline bfd_byte *
10520 build_plt_stub (struct ppc_link_hash_table *htab,
10521                 struct ppc_stub_hash_entry *stub_entry,
10522                 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10523 {
10524   bfd *obfd = htab->params->stub_bfd;
10525   bfd_boolean plt_load_toc = htab->opd_abi;
10526   bfd_boolean plt_static_chain = htab->params->plt_static_chain;
10527   bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
10528                                  && htab->elf.dynamic_sections_created
10529                                  && stub_entry->h != NULL
10530                                  && stub_entry->h->elf.dynindx != -1);
10531   bfd_boolean use_fake_dep = plt_thread_safe;
10532   bfd_vma cmp_branch_off = 0;
10533
10534   if (!ALWAYS_USE_FAKE_DEP
10535       && plt_load_toc
10536       && plt_thread_safe
10537       && !((stub_entry->h == htab->tls_get_addr_fd
10538             || stub_entry->h == htab->tls_get_addr)
10539            && htab->params->tls_get_addr_opt))
10540     {
10541       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
10542       bfd_vma pltindex = ((pltoff - PLT_INITIAL_ENTRY_SIZE (htab))
10543                           / PLT_ENTRY_SIZE (htab));
10544       bfd_vma glinkoff = GLINK_CALL_STUB_SIZE + pltindex * 8;
10545       bfd_vma to, from;
10546
10547       if (pltindex > 32768)
10548         glinkoff += (pltindex - 32768) * 4;
10549       to = (glinkoff
10550             + htab->glink->output_offset
10551             + htab->glink->output_section->vma);
10552       from = (p - stub_entry->group->stub_sec->contents
10553               + 4 * (ALWAYS_EMIT_R2SAVE
10554                      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10555               + 4 * (PPC_HA (offset) != 0)
10556               + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
10557                      != PPC_HA (offset))
10558               + 4 * (plt_static_chain != 0)
10559               + 20
10560               + stub_entry->group->stub_sec->output_offset
10561               + stub_entry->group->stub_sec->output_section->vma);
10562       cmp_branch_off = to - from;
10563       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
10564     }
10565
10566   if (PPC_HA (offset) != 0)
10567     {
10568       if (r != NULL)
10569         {
10570           if (ALWAYS_EMIT_R2SAVE
10571               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10572             r[0].r_offset += 4;
10573           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10574           r[1].r_offset = r[0].r_offset + 4;
10575           r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10576           r[1].r_addend = r[0].r_addend;
10577           if (plt_load_toc)
10578             {
10579               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10580                 {
10581                   r[2].r_offset = r[1].r_offset + 4;
10582                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10583                   r[2].r_addend = r[0].r_addend;
10584                 }
10585               else
10586                 {
10587                   r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10588                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10589                   r[2].r_addend = r[0].r_addend + 8;
10590                   if (plt_static_chain)
10591                     {
10592                       r[3].r_offset = r[2].r_offset + 4;
10593                       r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10594                       r[3].r_addend = r[0].r_addend + 16;
10595                     }
10596                 }
10597             }
10598         }
10599       if (ALWAYS_EMIT_R2SAVE
10600           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10601         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
10602       if (plt_load_toc)
10603         {
10604           bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p), p += 4;
10605           bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),  p += 4;
10606         }
10607       else
10608         {
10609           bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4;
10610           bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (offset), p),  p += 4;
10611         }
10612       if (plt_load_toc
10613           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10614         {
10615           bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p), p += 4;
10616           offset = 0;
10617         }
10618       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10619       if (plt_load_toc)
10620         {
10621           if (use_fake_dep)
10622             {
10623               bfd_put_32 (obfd, XOR_R2_R12_R12, p),             p += 4;
10624               bfd_put_32 (obfd, ADD_R11_R11_R2, p),             p += 4;
10625             }
10626           bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p), p += 4;
10627           if (plt_static_chain)
10628             bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
10629         }
10630     }
10631   else
10632     {
10633       if (r != NULL)
10634         {
10635           if (ALWAYS_EMIT_R2SAVE
10636               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10637             r[0].r_offset += 4;
10638           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10639           if (plt_load_toc)
10640             {
10641               if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10642                 {
10643                   r[1].r_offset = r[0].r_offset + 4;
10644                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
10645                   r[1].r_addend = r[0].r_addend;
10646                 }
10647               else
10648                 {
10649                   r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
10650                   r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10651                   r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
10652                   if (plt_static_chain)
10653                     {
10654                       r[2].r_offset = r[1].r_offset + 4;
10655                       r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10656                       r[2].r_addend = r[0].r_addend + 8;
10657                     }
10658                 }
10659             }
10660         }
10661       if (ALWAYS_EMIT_R2SAVE
10662           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10663         bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),      p += 4;
10664       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),       p += 4;
10665       if (plt_load_toc
10666           && PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10667         {
10668           bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),   p += 4;
10669           offset = 0;
10670         }
10671       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10672       if (plt_load_toc)
10673         {
10674           if (use_fake_dep)
10675             {
10676               bfd_put_32 (obfd, XOR_R11_R12_R12, p),            p += 4;
10677               bfd_put_32 (obfd, ADD_R2_R2_R11, p),              p += 4;
10678             }
10679           if (plt_static_chain)
10680             bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
10681           bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p), p += 4;
10682         }
10683     }
10684   if (plt_load_toc && plt_thread_safe && !use_fake_dep)
10685     {
10686       bfd_put_32 (obfd, CMPLDI_R2_0, p),                        p += 4;
10687       bfd_put_32 (obfd, BNECTR_P4, p),                          p += 4;
10688       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
10689     }
10690   else
10691     bfd_put_32 (obfd, BCTR, p),                                 p += 4;
10692   return p;
10693 }
10694
10695 /* Build a special .plt call stub for __tls_get_addr.  */
10696
10697 #define LD_R11_0R3      0xe9630000
10698 #define LD_R12_0R3      0xe9830000
10699 #define MR_R0_R3        0x7c601b78
10700 #define CMPDI_R11_0     0x2c2b0000
10701 #define ADD_R3_R12_R13  0x7c6c6a14
10702 #define BEQLR           0x4d820020
10703 #define MR_R3_R0        0x7c030378
10704 #define STD_R11_0R1     0xf9610000
10705 #define BCTRL           0x4e800421
10706 #define LD_R11_0R1      0xe9610000
10707 #define MTLR_R11        0x7d6803a6
10708
10709 static inline bfd_byte *
10710 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
10711                          struct ppc_stub_hash_entry *stub_entry,
10712                          bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10713 {
10714   bfd *obfd = htab->params->stub_bfd;
10715
10716   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),         p += 4;
10717   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),         p += 4;
10718   bfd_put_32 (obfd, MR_R0_R3, p),               p += 4;
10719   bfd_put_32 (obfd, CMPDI_R11_0, p),            p += 4;
10720   bfd_put_32 (obfd, ADD_R3_R12_R13, p),         p += 4;
10721   bfd_put_32 (obfd, BEQLR, p),                  p += 4;
10722   bfd_put_32 (obfd, MR_R3_R0, p),               p += 4;
10723   if (r != NULL)
10724     r[0].r_offset += 7 * 4;
10725   if (!ALWAYS_EMIT_R2SAVE
10726       && stub_entry->stub_type != ppc_stub_plt_call_r2save)
10727     return build_plt_stub (htab, stub_entry, p, offset, r);
10728
10729   bfd_put_32 (obfd, MFLR_R11, p),               p += 4;
10730   bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10731
10732   if (r != NULL)
10733     r[0].r_offset += 2 * 4;
10734   p = build_plt_stub (htab, stub_entry, p, offset, r);
10735   bfd_put_32 (obfd, BCTRL, p - 4);
10736
10737   bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p),     p += 4;
10738   bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p), p += 4;
10739   bfd_put_32 (obfd, MTLR_R11, p),               p += 4;
10740   bfd_put_32 (obfd, BLR, p),                    p += 4;
10741
10742   return p;
10743 }
10744
10745 static Elf_Internal_Rela *
10746 get_relocs (asection *sec, int count)
10747 {
10748   Elf_Internal_Rela *relocs;
10749   struct bfd_elf_section_data *elfsec_data;
10750
10751   elfsec_data = elf_section_data (sec);
10752   relocs = elfsec_data->relocs;
10753   if (relocs == NULL)
10754     {
10755       bfd_size_type relsize;
10756       relsize = sec->reloc_count * sizeof (*relocs);
10757       relocs = bfd_alloc (sec->owner, relsize);
10758       if (relocs == NULL)
10759         return NULL;
10760       elfsec_data->relocs = relocs;
10761       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
10762                                           sizeof (Elf_Internal_Shdr));
10763       if (elfsec_data->rela.hdr == NULL)
10764         return NULL;
10765       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
10766                                         * sizeof (Elf64_External_Rela));
10767       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
10768       sec->reloc_count = 0;
10769     }
10770   relocs += sec->reloc_count;
10771   sec->reloc_count += count;
10772   return relocs;
10773 }
10774
10775 static bfd_vma
10776 get_r2off (struct bfd_link_info *info,
10777            struct ppc_stub_hash_entry *stub_entry)
10778 {
10779   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10780   bfd_vma r2off = htab->sec_info[stub_entry->target_section->id].toc_off;
10781
10782   if (r2off == 0)
10783     {
10784       /* Support linking -R objects.  Get the toc pointer from the
10785          opd entry.  */
10786       char buf[8];
10787       if (!htab->opd_abi)
10788         return r2off;
10789       asection *opd = stub_entry->h->elf.root.u.def.section;
10790       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
10791
10792       if (strcmp (opd->name, ".opd") != 0
10793           || opd->reloc_count != 0)
10794         {
10795           info->callbacks->einfo (_("%P: cannot find opd entry toc for `%T'\n"),
10796                                   stub_entry->h->elf.root.root.string);
10797           bfd_set_error (bfd_error_bad_value);
10798           return (bfd_vma) -1;
10799         }
10800       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
10801         return (bfd_vma) -1;
10802       r2off = bfd_get_64 (opd->owner, buf);
10803       r2off -= elf_gp (info->output_bfd);
10804     }
10805   r2off -= htab->sec_info[stub_entry->group->link_sec->id].toc_off;
10806   return r2off;
10807 }
10808
10809 static bfd_boolean
10810 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10811 {
10812   struct ppc_stub_hash_entry *stub_entry;
10813   struct ppc_branch_hash_entry *br_entry;
10814   struct bfd_link_info *info;
10815   struct ppc_link_hash_table *htab;
10816   bfd_byte *loc;
10817   bfd_byte *p;
10818   bfd_vma dest, off;
10819   int size;
10820   Elf_Internal_Rela *r;
10821   asection *plt;
10822
10823   /* Massage our args to the form they really have.  */
10824   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10825   info = in_arg;
10826
10827   htab = ppc_hash_table (info);
10828   if (htab == NULL)
10829     return FALSE;
10830
10831   /* Make a note of the offset within the stubs for this entry.  */
10832   stub_entry->stub_offset = stub_entry->group->stub_sec->size;
10833   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
10834
10835   htab->stub_count[stub_entry->stub_type - 1] += 1;
10836   switch (stub_entry->stub_type)
10837     {
10838     case ppc_stub_long_branch:
10839     case ppc_stub_long_branch_r2off:
10840       /* Branches are relative.  This is where we are going to.  */
10841       dest = (stub_entry->target_value
10842               + stub_entry->target_section->output_offset
10843               + stub_entry->target_section->output_section->vma);
10844       dest += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
10845       off = dest;
10846
10847       /* And this is where we are coming from.  */
10848       off -= (stub_entry->stub_offset
10849               + stub_entry->group->stub_sec->output_offset
10850               + stub_entry->group->stub_sec->output_section->vma);
10851
10852       size = 4;
10853       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10854         {
10855           bfd_vma r2off = get_r2off (info, stub_entry);
10856
10857           if (r2off == (bfd_vma) -1)
10858             {
10859               htab->stub_error = TRUE;
10860               return FALSE;
10861             }
10862           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), loc);
10863           loc += 4;
10864           size = 8;
10865           if (PPC_HA (r2off) != 0)
10866             {
10867               bfd_put_32 (htab->params->stub_bfd,
10868                           ADDIS_R2_R2 | PPC_HA (r2off), loc);
10869               loc += 4;
10870               size += 4;
10871             }
10872           if (PPC_LO (r2off) != 0)
10873             {
10874               bfd_put_32 (htab->params->stub_bfd,
10875                           ADDI_R2_R2 | PPC_LO (r2off), loc);
10876               loc += 4;
10877               size += 4;
10878             }
10879           off -= size - 4;
10880         }
10881       bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
10882
10883       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
10884         {
10885           info->callbacks->einfo
10886             (_("%P: long branch stub `%s' offset overflow\n"),
10887              stub_entry->root.string);
10888           htab->stub_error = TRUE;
10889           return FALSE;
10890         }
10891
10892       if (info->emitrelocations)
10893         {
10894           r = get_relocs (stub_entry->group->stub_sec, 1);
10895           if (r == NULL)
10896             return FALSE;
10897           r->r_offset = loc - stub_entry->group->stub_sec->contents;
10898           r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
10899           r->r_addend = dest;
10900           if (stub_entry->h != NULL)
10901             {
10902               struct elf_link_hash_entry **hashes;
10903               unsigned long symndx;
10904               struct ppc_link_hash_entry *h;
10905
10906               hashes = elf_sym_hashes (htab->params->stub_bfd);
10907               if (hashes == NULL)
10908                 {
10909                   bfd_size_type hsize;
10910
10911                   hsize = (htab->stub_globals + 1) * sizeof (*hashes);
10912                   hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
10913                   if (hashes == NULL)
10914                     return FALSE;
10915                   elf_sym_hashes (htab->params->stub_bfd) = hashes;
10916                   htab->stub_globals = 1;
10917                 }
10918               symndx = htab->stub_globals++;
10919               h = stub_entry->h;
10920               hashes[symndx] = &h->elf;
10921               r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24);
10922               if (h->oh != NULL && h->oh->is_func)
10923                 h = ppc_follow_link (h->oh);
10924               if (h->elf.root.u.def.section != stub_entry->target_section)
10925                 /* H is an opd symbol.  The addend must be zero.  */
10926                 r->r_addend = 0;
10927               else
10928                 {
10929                   off = (h->elf.root.u.def.value
10930                          + h->elf.root.u.def.section->output_offset
10931                          + h->elf.root.u.def.section->output_section->vma);
10932                   r->r_addend -= off;
10933                 }
10934             }
10935         }
10936       break;
10937
10938     case ppc_stub_plt_branch:
10939     case ppc_stub_plt_branch_r2off:
10940       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10941                                          stub_entry->root.string + 9,
10942                                          FALSE, FALSE);
10943       if (br_entry == NULL)
10944         {
10945           info->callbacks->einfo (_("%P: can't find branch stub `%s'\n"),
10946                                   stub_entry->root.string);
10947           htab->stub_error = TRUE;
10948           return FALSE;
10949         }
10950
10951       dest = (stub_entry->target_value
10952               + stub_entry->target_section->output_offset
10953               + stub_entry->target_section->output_section->vma);
10954       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10955         dest += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
10956
10957       bfd_put_64 (htab->brlt->owner, dest,
10958                   htab->brlt->contents + br_entry->offset);
10959
10960       if (br_entry->iter == htab->stub_iteration)
10961         {
10962           br_entry->iter = 0;
10963
10964           if (htab->relbrlt != NULL)
10965             {
10966               /* Create a reloc for the branch lookup table entry.  */
10967               Elf_Internal_Rela rela;
10968               bfd_byte *rl;
10969
10970               rela.r_offset = (br_entry->offset
10971                                + htab->brlt->output_offset
10972                                + htab->brlt->output_section->vma);
10973               rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10974               rela.r_addend = dest;
10975
10976               rl = htab->relbrlt->contents;
10977               rl += (htab->relbrlt->reloc_count++
10978                      * sizeof (Elf64_External_Rela));
10979               bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
10980             }
10981           else if (info->emitrelocations)
10982             {
10983               r = get_relocs (htab->brlt, 1);
10984               if (r == NULL)
10985                 return FALSE;
10986               /* brlt, being SEC_LINKER_CREATED does not go through the
10987                  normal reloc processing.  Symbols and offsets are not
10988                  translated from input file to output file form, so
10989                  set up the offset per the output file.  */
10990               r->r_offset = (br_entry->offset
10991                              + htab->brlt->output_offset
10992                              + htab->brlt->output_section->vma);
10993               r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10994               r->r_addend = dest;
10995             }
10996         }
10997
10998       dest = (br_entry->offset
10999               + htab->brlt->output_offset
11000               + htab->brlt->output_section->vma);
11001
11002       off = (dest
11003              - elf_gp (info->output_bfd)
11004              - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11005
11006       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11007         {
11008           info->callbacks->einfo
11009             (_("%P: linkage table error against `%T'\n"),
11010              stub_entry->root.string);
11011           bfd_set_error (bfd_error_bad_value);
11012           htab->stub_error = TRUE;
11013           return FALSE;
11014         }
11015
11016       if (info->emitrelocations)
11017         {
11018           r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
11019           if (r == NULL)
11020             return FALSE;
11021           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11022           if (bfd_big_endian (info->output_bfd))
11023             r[0].r_offset += 2;
11024           if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
11025             r[0].r_offset += 4;
11026           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
11027           r[0].r_addend = dest;
11028           if (PPC_HA (off) != 0)
11029             {
11030               r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
11031               r[1].r_offset = r[0].r_offset + 4;
11032               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
11033               r[1].r_addend = r[0].r_addend;
11034             }
11035         }
11036
11037       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11038         {
11039           if (PPC_HA (off) != 0)
11040             {
11041               size = 16;
11042               bfd_put_32 (htab->params->stub_bfd,
11043                           ADDIS_R12_R2 | PPC_HA (off), loc);
11044               loc += 4;
11045               bfd_put_32 (htab->params->stub_bfd,
11046                           LD_R12_0R12 | PPC_LO (off), loc);
11047             }
11048           else
11049             {
11050               size = 12;
11051               bfd_put_32 (htab->params->stub_bfd,
11052                           LD_R12_0R2 | PPC_LO (off), loc);
11053             }
11054         }
11055       else
11056         {
11057           bfd_vma r2off = get_r2off (info, stub_entry);
11058
11059           if (r2off == (bfd_vma) -1)
11060             {
11061               htab->stub_error = TRUE;
11062               return FALSE;
11063             }
11064
11065           bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), loc);
11066           loc += 4;
11067           size = 16;
11068           if (PPC_HA (off) != 0)
11069             {
11070               size += 4;
11071               bfd_put_32 (htab->params->stub_bfd,
11072                           ADDIS_R12_R2 | PPC_HA (off), loc);
11073               loc += 4;
11074               bfd_put_32 (htab->params->stub_bfd,
11075                           LD_R12_0R12 | PPC_LO (off), loc);
11076             }
11077           else
11078             bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), loc);
11079
11080           if (PPC_HA (r2off) != 0)
11081             {
11082               size += 4;
11083               loc += 4;
11084               bfd_put_32 (htab->params->stub_bfd,
11085                           ADDIS_R2_R2 | PPC_HA (r2off), loc);
11086             }
11087           if (PPC_LO (r2off) != 0)
11088             {
11089               size += 4;
11090               loc += 4;
11091               bfd_put_32 (htab->params->stub_bfd,
11092                           ADDI_R2_R2 | PPC_LO (r2off), loc);
11093             }
11094         }
11095       loc += 4;
11096       bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, loc);
11097       loc += 4;
11098       bfd_put_32 (htab->params->stub_bfd, BCTR, loc);
11099       break;
11100
11101     case ppc_stub_plt_call:
11102     case ppc_stub_plt_call_r2save:
11103       if (stub_entry->h != NULL
11104           && stub_entry->h->is_func_descriptor
11105           && stub_entry->h->oh != NULL)
11106         {
11107           struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
11108
11109           /* If the old-ABI "dot-symbol" is undefined make it weak so
11110              we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.  */
11111           if (fh->elf.root.type == bfd_link_hash_undefined
11112               && (stub_entry->h->elf.root.type == bfd_link_hash_defined
11113                   || stub_entry->h->elf.root.type == bfd_link_hash_defweak))
11114             fh->elf.root.type = bfd_link_hash_undefweak;
11115         }
11116
11117       /* Now build the stub.  */
11118       dest = stub_entry->plt_ent->plt.offset & ~1;
11119       if (dest >= (bfd_vma) -2)
11120         abort ();
11121
11122       plt = htab->elf.splt;
11123       if (!htab->elf.dynamic_sections_created
11124           || stub_entry->h == NULL
11125           || stub_entry->h->elf.dynindx == -1)
11126         plt = htab->elf.iplt;
11127
11128       dest += plt->output_offset + plt->output_section->vma;
11129
11130       if (stub_entry->h == NULL
11131           && (stub_entry->plt_ent->plt.offset & 1) == 0)
11132         {
11133           Elf_Internal_Rela rela;
11134           bfd_byte *rl;
11135
11136           rela.r_offset = dest;
11137           if (htab->opd_abi)
11138             rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
11139           else
11140             rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
11141           rela.r_addend = (stub_entry->target_value
11142                            + stub_entry->target_section->output_offset
11143                            + stub_entry->target_section->output_section->vma);
11144
11145           rl = (htab->elf.irelplt->contents
11146                 + (htab->elf.irelplt->reloc_count++
11147                    * sizeof (Elf64_External_Rela)));
11148           bfd_elf64_swap_reloca_out (info->output_bfd, &rela, rl);
11149           stub_entry->plt_ent->plt.offset |= 1;
11150           htab->local_ifunc_resolver = 1;
11151         }
11152
11153       off = (dest
11154              - elf_gp (info->output_bfd)
11155              - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11156
11157       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
11158         {
11159           info->callbacks->einfo
11160             /* xgettext:c-format */
11161             (_("%P: linkage table error against `%T'\n"),
11162              stub_entry->h != NULL
11163              ? stub_entry->h->elf.root.root.string
11164              : "<local sym>");
11165           bfd_set_error (bfd_error_bad_value);
11166           htab->stub_error = TRUE;
11167           return FALSE;
11168         }
11169
11170       if (htab->params->plt_stub_align != 0)
11171         {
11172           unsigned pad = plt_stub_pad (htab, stub_entry, off);
11173
11174           stub_entry->group->stub_sec->size += pad;
11175           stub_entry->stub_offset = stub_entry->group->stub_sec->size;
11176           loc += pad;
11177         }
11178
11179       r = NULL;
11180       if (info->emitrelocations)
11181         {
11182           r = get_relocs (stub_entry->group->stub_sec,
11183                           ((PPC_HA (off) != 0)
11184                            + (htab->opd_abi
11185                               ? 2 + (htab->params->plt_static_chain
11186                                      && PPC_HA (off + 16) == PPC_HA (off))
11187                               : 1)));
11188           if (r == NULL)
11189             return FALSE;
11190           r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
11191           if (bfd_big_endian (info->output_bfd))
11192             r[0].r_offset += 2;
11193           r[0].r_addend = dest;
11194         }
11195       if (stub_entry->h != NULL
11196           && (stub_entry->h == htab->tls_get_addr_fd
11197               || stub_entry->h == htab->tls_get_addr)
11198           && htab->params->tls_get_addr_opt)
11199         p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
11200       else
11201         p = build_plt_stub (htab, stub_entry, loc, off, r);
11202       size = p - loc;
11203       break;
11204
11205     case ppc_stub_save_res:
11206       return TRUE;
11207
11208     default:
11209       BFD_FAIL ();
11210       return FALSE;
11211     }
11212
11213   stub_entry->group->stub_sec->size += size;
11214
11215   if (htab->params->emit_stub_syms)
11216     {
11217       struct elf_link_hash_entry *h;
11218       size_t len1, len2;
11219       char *name;
11220       const char *const stub_str[] = { "long_branch",
11221                                        "long_branch_r2off",
11222                                        "plt_branch",
11223                                        "plt_branch_r2off",
11224                                        "plt_call",
11225                                        "plt_call" };
11226
11227       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
11228       len2 = strlen (stub_entry->root.string);
11229       name = bfd_malloc (len1 + len2 + 2);
11230       if (name == NULL)
11231         return FALSE;
11232       memcpy (name, stub_entry->root.string, 9);
11233       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
11234       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
11235       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
11236       if (h == NULL)
11237         return FALSE;
11238       if (h->root.type == bfd_link_hash_new)
11239         {
11240           h->root.type = bfd_link_hash_defined;
11241           h->root.u.def.section = stub_entry->group->stub_sec;
11242           h->root.u.def.value = stub_entry->stub_offset;
11243           h->ref_regular = 1;
11244           h->def_regular = 1;
11245           h->ref_regular_nonweak = 1;
11246           h->forced_local = 1;
11247           h->non_elf = 0;
11248           h->root.linker_def = 1;
11249         }
11250     }
11251
11252   return TRUE;
11253 }
11254
11255 /* As above, but don't actually build the stub.  Just bump offset so
11256    we know stub section sizes, and select plt_branch stubs where
11257    long_branch stubs won't do.  */
11258
11259 static bfd_boolean
11260 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
11261 {
11262   struct ppc_stub_hash_entry *stub_entry;
11263   struct bfd_link_info *info;
11264   struct ppc_link_hash_table *htab;
11265   bfd_vma off;
11266   int size;
11267
11268   /* Massage our args to the form they really have.  */
11269   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
11270   info = in_arg;
11271
11272   htab = ppc_hash_table (info);
11273   if (htab == NULL)
11274     return FALSE;
11275
11276   if (stub_entry->h != NULL
11277       && stub_entry->h->save_res
11278       && stub_entry->h->elf.root.type == bfd_link_hash_defined
11279       && stub_entry->h->elf.root.u.def.section == htab->sfpr)
11280     {
11281       /* Don't make stubs to out-of-line register save/restore
11282          functions.  Instead, emit copies of the functions.  */
11283       stub_entry->group->needs_save_res = 1;
11284       stub_entry->stub_type = ppc_stub_save_res;
11285       return TRUE;
11286     }
11287
11288   if (stub_entry->stub_type == ppc_stub_plt_call
11289       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
11290     {
11291       asection *plt;
11292       off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
11293       if (off >= (bfd_vma) -2)
11294         abort ();
11295       plt = htab->elf.splt;
11296       if (!htab->elf.dynamic_sections_created
11297           || stub_entry->h == NULL
11298           || stub_entry->h->elf.dynindx == -1)
11299         plt = htab->elf.iplt;
11300       off += (plt->output_offset
11301               + plt->output_section->vma
11302               - elf_gp (info->output_bfd)
11303               - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11304
11305       size = plt_stub_size (htab, stub_entry, off);
11306       if (stub_entry->h != NULL
11307           && (stub_entry->h == htab->tls_get_addr_fd
11308               || stub_entry->h == htab->tls_get_addr)
11309           && htab->params->tls_get_addr_opt
11310           && (ALWAYS_EMIT_R2SAVE
11311               || stub_entry->stub_type == ppc_stub_plt_call_r2save))
11312         stub_entry->group->tls_get_addr_opt_bctrl
11313           = stub_entry->group->stub_sec->size + size - 5 * 4;
11314
11315       if (htab->params->plt_stub_align)
11316         size += plt_stub_pad (htab, stub_entry, off);
11317       if (info->emitrelocations)
11318         {
11319           stub_entry->group->stub_sec->reloc_count
11320             += ((PPC_HA (off) != 0)
11321                 + (htab->opd_abi
11322                    ? 2 + (htab->params->plt_static_chain
11323                           && PPC_HA (off + 16) == PPC_HA (off))
11324                    : 1));
11325           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11326         }
11327     }
11328   else
11329     {
11330       /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
11331          variants.  */
11332       bfd_vma r2off = 0;
11333       bfd_vma local_off = 0;
11334
11335       off = (stub_entry->target_value
11336              + stub_entry->target_section->output_offset
11337              + stub_entry->target_section->output_section->vma);
11338       off -= (stub_entry->group->stub_sec->size
11339               + stub_entry->group->stub_sec->output_offset
11340               + stub_entry->group->stub_sec->output_section->vma);
11341
11342       /* Reset the stub type from the plt variant in case we now
11343          can reach with a shorter stub.  */
11344       if (stub_entry->stub_type >= ppc_stub_plt_branch)
11345         stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
11346
11347       size = 4;
11348       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
11349         {
11350           r2off = get_r2off (info, stub_entry);
11351           if (r2off == (bfd_vma) -1)
11352             {
11353               htab->stub_error = TRUE;
11354               return FALSE;
11355             }
11356           size = 8;
11357           if (PPC_HA (r2off) != 0)
11358             size += 4;
11359           if (PPC_LO (r2off) != 0)
11360             size += 4;
11361           off -= size - 4;
11362         }
11363
11364       local_off = PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
11365
11366       /* If the branch offset if too big, use a ppc_stub_plt_branch.
11367          Do the same for -R objects without function descriptors.  */
11368       if (off + (1 << 25) >= (bfd_vma) (1 << 26) - local_off
11369           || (stub_entry->stub_type == ppc_stub_long_branch_r2off
11370               && r2off == 0
11371               && htab->sec_info[stub_entry->target_section->id].toc_off == 0))
11372         {
11373           struct ppc_branch_hash_entry *br_entry;
11374
11375           br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
11376                                              stub_entry->root.string + 9,
11377                                              TRUE, FALSE);
11378           if (br_entry == NULL)
11379             {
11380               info->callbacks->einfo (_("%P: can't build branch stub `%s'\n"),
11381                                       stub_entry->root.string);
11382               htab->stub_error = TRUE;
11383               return FALSE;
11384             }
11385
11386           if (br_entry->iter != htab->stub_iteration)
11387             {
11388               br_entry->iter = htab->stub_iteration;
11389               br_entry->offset = htab->brlt->size;
11390               htab->brlt->size += 8;
11391
11392               if (htab->relbrlt != NULL)
11393                 htab->relbrlt->size += sizeof (Elf64_External_Rela);
11394               else if (info->emitrelocations)
11395                 {
11396                   htab->brlt->reloc_count += 1;
11397                   htab->brlt->flags |= SEC_RELOC;
11398                 }
11399             }
11400
11401           stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
11402           off = (br_entry->offset
11403                  + htab->brlt->output_offset
11404                  + htab->brlt->output_section->vma
11405                  - elf_gp (info->output_bfd)
11406                  - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
11407
11408           if (info->emitrelocations)
11409             {
11410               stub_entry->group->stub_sec->reloc_count
11411                 += 1 + (PPC_HA (off) != 0);
11412               stub_entry->group->stub_sec->flags |= SEC_RELOC;
11413             }
11414
11415           if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
11416             {
11417               size = 12;
11418               if (PPC_HA (off) != 0)
11419                 size = 16;
11420             }
11421           else
11422             {
11423               size = 16;
11424               if (PPC_HA (off) != 0)
11425                 size += 4;
11426
11427               if (PPC_HA (r2off) != 0)
11428                 size += 4;
11429               if (PPC_LO (r2off) != 0)
11430                 size += 4;
11431             }
11432         }
11433       else if (info->emitrelocations)
11434         {
11435           stub_entry->group->stub_sec->reloc_count += 1;
11436           stub_entry->group->stub_sec->flags |= SEC_RELOC;
11437         }
11438     }
11439
11440   stub_entry->group->stub_sec->size += size;
11441   return TRUE;
11442 }
11443
11444 /* Set up various things so that we can make a list of input sections
11445    for each output section included in the link.  Returns -1 on error,
11446    0 when no stubs will be needed, and 1 on success.  */
11447
11448 int
11449 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
11450 {
11451   unsigned int id;
11452   bfd_size_type amt;
11453   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11454
11455   if (htab == NULL)
11456     return -1;
11457
11458   htab->sec_info_arr_size = bfd_get_next_section_id ();
11459   amt = sizeof (*htab->sec_info) * (htab->sec_info_arr_size);
11460   htab->sec_info = bfd_zmalloc (amt);
11461   if (htab->sec_info == NULL)
11462     return -1;
11463
11464   /* Set toc_off for com, und, abs and ind sections.  */
11465   for (id = 0; id < 3; id++)
11466     htab->sec_info[id].toc_off = TOC_BASE_OFF;
11467
11468   return 1;
11469 }
11470
11471 /* Set up for first pass at multitoc partitioning.  */
11472
11473 void
11474 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
11475 {
11476   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11477
11478   htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
11479   htab->toc_bfd = NULL;
11480   htab->toc_first_sec = NULL;
11481 }
11482
11483 /* The linker repeatedly calls this function for each TOC input section
11484    and linker generated GOT section.  Group input bfds such that the toc
11485    within a group is less than 64k in size.  */
11486
11487 bfd_boolean
11488 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
11489 {
11490   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11491   bfd_vma addr, off, limit;
11492
11493   if (htab == NULL)
11494     return FALSE;
11495
11496   if (!htab->second_toc_pass)
11497     {
11498       /* Keep track of the first .toc or .got section for this input bfd.  */
11499       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
11500
11501       if (new_bfd)
11502         {
11503           htab->toc_bfd = isec->owner;
11504           htab->toc_first_sec = isec;
11505         }
11506
11507       addr = isec->output_offset + isec->output_section->vma;
11508       off = addr - htab->toc_curr;
11509       limit = 0x80008000;
11510       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
11511         limit = 0x10000;
11512       if (off + isec->size > limit)
11513         {
11514           addr = (htab->toc_first_sec->output_offset
11515                   + htab->toc_first_sec->output_section->vma);
11516           htab->toc_curr = addr;
11517           htab->toc_curr &= -TOC_BASE_ALIGN;
11518         }
11519
11520       /* toc_curr is the base address of this toc group.  Set elf_gp
11521          for the input section to be the offset relative to the
11522          output toc base plus 0x8000.  Making the input elf_gp an
11523          offset allows us to move the toc as a whole without
11524          recalculating input elf_gp.  */
11525       off = htab->toc_curr - elf_gp (info->output_bfd);
11526       off += TOC_BASE_OFF;
11527
11528       /* Die if someone uses a linker script that doesn't keep input
11529          file .toc and .got together.  */
11530       if (new_bfd
11531           && elf_gp (isec->owner) != 0
11532           && elf_gp (isec->owner) != off)
11533         return FALSE;
11534
11535       elf_gp (isec->owner) = off;
11536       return TRUE;
11537     }
11538
11539   /* During the second pass toc_first_sec points to the start of
11540      a toc group, and toc_curr is used to track the old elf_gp.
11541      We use toc_bfd to ensure we only look at each bfd once.  */
11542   if (htab->toc_bfd == isec->owner)
11543     return TRUE;
11544   htab->toc_bfd = isec->owner;
11545
11546   if (htab->toc_first_sec == NULL
11547       || htab->toc_curr != elf_gp (isec->owner))
11548     {
11549       htab->toc_curr = elf_gp (isec->owner);
11550       htab->toc_first_sec = isec;
11551     }
11552   addr = (htab->toc_first_sec->output_offset
11553           + htab->toc_first_sec->output_section->vma);
11554   off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
11555   elf_gp (isec->owner) = off;
11556
11557   return TRUE;
11558 }
11559
11560 /* Called via elf_link_hash_traverse to merge GOT entries for global
11561    symbol H.  */
11562
11563 static bfd_boolean
11564 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
11565 {
11566   if (h->root.type == bfd_link_hash_indirect)
11567     return TRUE;
11568
11569   merge_got_entries (&h->got.glist);
11570
11571   return TRUE;
11572 }
11573
11574 /* Called via elf_link_hash_traverse to allocate GOT entries for global
11575    symbol H.  */
11576
11577 static bfd_boolean
11578 reallocate_got (struct elf_link_hash_entry *h, void *inf)
11579 {
11580   struct got_entry *gent;
11581
11582   if (h->root.type == bfd_link_hash_indirect)
11583     return TRUE;
11584
11585   for (gent = h->got.glist; gent != NULL; gent = gent->next)
11586     if (!gent->is_indirect)
11587       allocate_got (h, (struct bfd_link_info *) inf, gent);
11588   return TRUE;
11589 }
11590
11591 /* Called on the first multitoc pass after the last call to
11592    ppc64_elf_next_toc_section.  This function removes duplicate GOT
11593    entries.  */
11594
11595 bfd_boolean
11596 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
11597 {
11598   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11599   struct bfd *ibfd, *ibfd2;
11600   bfd_boolean done_something;
11601
11602   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
11603
11604   if (!htab->do_multi_toc)
11605     return FALSE;
11606
11607   /* Merge global sym got entries within a toc group.  */
11608   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
11609
11610   /* And tlsld_got.  */
11611   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11612     {
11613       struct got_entry *ent, *ent2;
11614
11615       if (!is_ppc64_elf (ibfd))
11616         continue;
11617
11618       ent = ppc64_tlsld_got (ibfd);
11619       if (!ent->is_indirect
11620           && ent->got.offset != (bfd_vma) -1)
11621         {
11622           for (ibfd2 = ibfd->link.next; ibfd2 != NULL; ibfd2 = ibfd2->link.next)
11623             {
11624               if (!is_ppc64_elf (ibfd2))
11625                 continue;
11626
11627               ent2 = ppc64_tlsld_got (ibfd2);
11628               if (!ent2->is_indirect
11629                   && ent2->got.offset != (bfd_vma) -1
11630                   && elf_gp (ibfd2) == elf_gp (ibfd))
11631                 {
11632                   ent2->is_indirect = TRUE;
11633                   ent2->got.ent = ent;
11634                 }
11635             }
11636         }
11637     }
11638
11639   /* Zap sizes of got sections.  */
11640   htab->elf.irelplt->rawsize = htab->elf.irelplt->size;
11641   htab->elf.irelplt->size -= htab->got_reli_size;
11642   htab->got_reli_size = 0;
11643
11644   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11645     {
11646       asection *got, *relgot;
11647
11648       if (!is_ppc64_elf (ibfd))
11649         continue;
11650
11651       got = ppc64_elf_tdata (ibfd)->got;
11652       if (got != NULL)
11653         {
11654           got->rawsize = got->size;
11655           got->size = 0;
11656           relgot = ppc64_elf_tdata (ibfd)->relgot;
11657           relgot->rawsize = relgot->size;
11658           relgot->size = 0;
11659         }
11660     }
11661
11662   /* Now reallocate the got, local syms first.  We don't need to
11663      allocate section contents again since we never increase size.  */
11664   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11665     {
11666       struct got_entry **lgot_ents;
11667       struct got_entry **end_lgot_ents;
11668       struct plt_entry **local_plt;
11669       struct plt_entry **end_local_plt;
11670       unsigned char *lgot_masks;
11671       bfd_size_type locsymcount;
11672       Elf_Internal_Shdr *symtab_hdr;
11673       asection *s;
11674
11675       if (!is_ppc64_elf (ibfd))
11676         continue;
11677
11678       lgot_ents = elf_local_got_ents (ibfd);
11679       if (!lgot_ents)
11680         continue;
11681
11682       symtab_hdr = &elf_symtab_hdr (ibfd);
11683       locsymcount = symtab_hdr->sh_info;
11684       end_lgot_ents = lgot_ents + locsymcount;
11685       local_plt = (struct plt_entry **) end_lgot_ents;
11686       end_local_plt = local_plt + locsymcount;
11687       lgot_masks = (unsigned char *) end_local_plt;
11688       s = ppc64_elf_tdata (ibfd)->got;
11689       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
11690         {
11691           struct got_entry *ent;
11692
11693           for (ent = *lgot_ents; ent != NULL; ent = ent->next)
11694             {
11695               unsigned int ent_size = 8;
11696               unsigned int rel_size = sizeof (Elf64_External_Rela);
11697
11698               ent->got.offset = s->size;
11699               if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
11700                 {
11701                   ent_size *= 2;
11702                   rel_size *= 2;
11703                 }
11704               s->size += ent_size;
11705               if ((*lgot_masks & PLT_IFUNC) != 0)
11706                 {
11707                   htab->elf.irelplt->size += rel_size;
11708                   htab->got_reli_size += rel_size;
11709                 }
11710               else if (bfd_link_pic (info))
11711                 {
11712                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
11713                   srel->size += rel_size;
11714                 }
11715             }
11716         }
11717     }
11718
11719   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
11720
11721   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11722     {
11723       struct got_entry *ent;
11724
11725       if (!is_ppc64_elf (ibfd))
11726         continue;
11727
11728       ent = ppc64_tlsld_got (ibfd);
11729       if (!ent->is_indirect
11730           && ent->got.offset != (bfd_vma) -1)
11731         {
11732           asection *s = ppc64_elf_tdata (ibfd)->got;
11733           ent->got.offset = s->size;
11734           s->size += 16;
11735           if (bfd_link_pic (info))
11736             {
11737               asection *srel = ppc64_elf_tdata (ibfd)->relgot;
11738               srel->size += sizeof (Elf64_External_Rela);
11739             }
11740         }
11741     }
11742
11743   done_something = htab->elf.irelplt->rawsize != htab->elf.irelplt->size;
11744   if (!done_something)
11745     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11746       {
11747         asection *got;
11748
11749         if (!is_ppc64_elf (ibfd))
11750           continue;
11751
11752         got = ppc64_elf_tdata (ibfd)->got;
11753         if (got != NULL)
11754           {
11755             done_something = got->rawsize != got->size;
11756             if (done_something)
11757               break;
11758           }
11759       }
11760
11761   if (done_something)
11762     (*htab->params->layout_sections_again) ();
11763
11764   /* Set up for second pass over toc sections to recalculate elf_gp
11765      on input sections.  */
11766   htab->toc_bfd = NULL;
11767   htab->toc_first_sec = NULL;
11768   htab->second_toc_pass = TRUE;
11769   return done_something;
11770 }
11771
11772 /* Called after second pass of multitoc partitioning.  */
11773
11774 void
11775 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
11776 {
11777   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11778
11779   /* After the second pass, toc_curr tracks the TOC offset used
11780      for code sections below in ppc64_elf_next_input_section.  */
11781   htab->toc_curr = TOC_BASE_OFF;
11782 }
11783
11784 /* No toc references were found in ISEC.  If the code in ISEC makes no
11785    calls, then there's no need to use toc adjusting stubs when branching
11786    into ISEC.  Actually, indirect calls from ISEC are OK as they will
11787    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
11788    needed, and 2 if a cyclical call-graph was found but no other reason
11789    for a stub was detected.  If called from the top level, a return of
11790    2 means the same as a return of 0.  */
11791
11792 static int
11793 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
11794 {
11795   int ret;
11796
11797   /* Mark this section as checked.  */
11798   isec->call_check_done = 1;
11799
11800   /* We know none of our code bearing sections will need toc stubs.  */
11801   if ((isec->flags & SEC_LINKER_CREATED) != 0)
11802     return 0;
11803
11804   if (isec->size == 0)
11805     return 0;
11806
11807   if (isec->output_section == NULL)
11808     return 0;
11809
11810   ret = 0;
11811   if (isec->reloc_count != 0)
11812     {
11813       Elf_Internal_Rela *relstart, *rel;
11814       Elf_Internal_Sym *local_syms;
11815       struct ppc_link_hash_table *htab;
11816
11817       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
11818                                             info->keep_memory);
11819       if (relstart == NULL)
11820         return -1;
11821
11822       /* Look for branches to outside of this section.  */
11823       local_syms = NULL;
11824       htab = ppc_hash_table (info);
11825       if (htab == NULL)
11826         return -1;
11827
11828       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
11829         {
11830           enum elf_ppc64_reloc_type r_type;
11831           unsigned long r_symndx;
11832           struct elf_link_hash_entry *h;
11833           struct ppc_link_hash_entry *eh;
11834           Elf_Internal_Sym *sym;
11835           asection *sym_sec;
11836           struct _opd_sec_data *opd;
11837           bfd_vma sym_value;
11838           bfd_vma dest;
11839
11840           r_type = ELF64_R_TYPE (rel->r_info);
11841           if (r_type != R_PPC64_REL24
11842               && r_type != R_PPC64_REL14
11843               && r_type != R_PPC64_REL14_BRTAKEN
11844               && r_type != R_PPC64_REL14_BRNTAKEN)
11845             continue;
11846
11847           r_symndx = ELF64_R_SYM (rel->r_info);
11848           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
11849                           isec->owner))
11850             {
11851               ret = -1;
11852               break;
11853             }
11854
11855           /* Calls to dynamic lib functions go through a plt call stub
11856              that uses r2.  */
11857           eh = (struct ppc_link_hash_entry *) h;
11858           if (eh != NULL
11859               && (eh->elf.plt.plist != NULL
11860                   || (eh->oh != NULL
11861                       && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
11862             {
11863               ret = 1;
11864               break;
11865             }
11866
11867           if (sym_sec == NULL)
11868             /* Ignore other undefined symbols.  */
11869             continue;
11870
11871           /* Assume branches to other sections not included in the
11872              link need stubs too, to cover -R and absolute syms.  */
11873           if (sym_sec->output_section == NULL)
11874             {
11875               ret = 1;
11876               break;
11877             }
11878
11879           if (h == NULL)
11880             sym_value = sym->st_value;
11881           else
11882             {
11883               if (h->root.type != bfd_link_hash_defined
11884                   && h->root.type != bfd_link_hash_defweak)
11885                 abort ();
11886               sym_value = h->root.u.def.value;
11887             }
11888           sym_value += rel->r_addend;
11889
11890           /* If this branch reloc uses an opd sym, find the code section.  */
11891           opd = get_opd_info (sym_sec);
11892           if (opd != NULL)
11893             {
11894               if (h == NULL && opd->adjust != NULL)
11895                 {
11896                   long adjust;
11897
11898                   adjust = opd->adjust[OPD_NDX (sym_value)];
11899                   if (adjust == -1)
11900                     /* Assume deleted functions won't ever be called.  */
11901                     continue;
11902                   sym_value += adjust;
11903                 }
11904
11905               dest = opd_entry_value (sym_sec, sym_value,
11906                                       &sym_sec, NULL, FALSE);
11907               if (dest == (bfd_vma) -1)
11908                 continue;
11909             }
11910           else
11911             dest = (sym_value
11912                     + sym_sec->output_offset
11913                     + sym_sec->output_section->vma);
11914
11915           /* Ignore branch to self.  */
11916           if (sym_sec == isec)
11917             continue;
11918
11919           /* If the called function uses the toc, we need a stub.  */
11920           if (sym_sec->has_toc_reloc
11921               || sym_sec->makes_toc_func_call)
11922             {
11923               ret = 1;
11924               break;
11925             }
11926
11927           /* Assume any branch that needs a long branch stub might in fact
11928              need a plt_branch stub.  A plt_branch stub uses r2.  */
11929           else if (dest - (isec->output_offset
11930                            + isec->output_section->vma
11931                            + rel->r_offset) + (1 << 25)
11932                    >= (2u << 25) - PPC64_LOCAL_ENTRY_OFFSET (h
11933                                                              ? h->other
11934                                                              : sym->st_other))
11935             {
11936               ret = 1;
11937               break;
11938             }
11939
11940           /* If calling back to a section in the process of being
11941              tested, we can't say for sure that no toc adjusting stubs
11942              are needed, so don't return zero.  */
11943           else if (sym_sec->call_check_in_progress)
11944             ret = 2;
11945
11946           /* Branches to another section that itself doesn't have any TOC
11947              references are OK.  Recursively call ourselves to check.  */
11948           else if (!sym_sec->call_check_done)
11949             {
11950               int recur;
11951
11952               /* Mark current section as indeterminate, so that other
11953                  sections that call back to current won't be marked as
11954                  known.  */
11955               isec->call_check_in_progress = 1;
11956               recur = toc_adjusting_stub_needed (info, sym_sec);
11957               isec->call_check_in_progress = 0;
11958
11959               if (recur != 0)
11960                 {
11961                   ret = recur;
11962                   if (recur != 2)
11963                     break;
11964                 }
11965             }
11966         }
11967
11968       if (local_syms != NULL
11969           && (elf_symtab_hdr (isec->owner).contents
11970               != (unsigned char *) local_syms))
11971         free (local_syms);
11972       if (elf_section_data (isec)->relocs != relstart)
11973         free (relstart);
11974     }
11975
11976   if ((ret & 1) == 0
11977       && isec->map_head.s != NULL
11978       && (strcmp (isec->output_section->name, ".init") == 0
11979           || strcmp (isec->output_section->name, ".fini") == 0))
11980     {
11981       if (isec->map_head.s->has_toc_reloc
11982           || isec->map_head.s->makes_toc_func_call)
11983         ret = 1;
11984       else if (!isec->map_head.s->call_check_done)
11985         {
11986           int recur;
11987           isec->call_check_in_progress = 1;
11988           recur = toc_adjusting_stub_needed (info, isec->map_head.s);
11989           isec->call_check_in_progress = 0;
11990           if (recur != 0)
11991             ret = recur;
11992         }
11993     }
11994
11995   if (ret == 1)
11996     isec->makes_toc_func_call = 1;
11997
11998   return ret;
11999 }
12000
12001 /* The linker repeatedly calls this function for each input section,
12002    in the order that input sections are linked into output sections.
12003    Build lists of input sections to determine groupings between which
12004    we may insert linker stubs.  */
12005
12006 bfd_boolean
12007 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
12008 {
12009   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12010
12011   if (htab == NULL)
12012     return FALSE;
12013
12014   if ((isec->output_section->flags & SEC_CODE) != 0
12015       && isec->output_section->id < htab->sec_info_arr_size)
12016     {
12017       /* This happens to make the list in reverse order,
12018          which is what we want.  */
12019       htab->sec_info[isec->id].u.list
12020         = htab->sec_info[isec->output_section->id].u.list;
12021       htab->sec_info[isec->output_section->id].u.list = isec;
12022     }
12023
12024   if (htab->multi_toc_needed)
12025     {
12026       /* Analyse sections that aren't already flagged as needing a
12027          valid toc pointer.  Exclude .fixup for the linux kernel.
12028          .fixup contains branches, but only back to the function that
12029          hit an exception.  */
12030       if (!(isec->has_toc_reloc
12031             || (isec->flags & SEC_CODE) == 0
12032             || strcmp (isec->name, ".fixup") == 0
12033             || isec->call_check_done))
12034         {
12035           if (toc_adjusting_stub_needed (info, isec) < 0)
12036             return FALSE;
12037         }
12038       /* Make all sections use the TOC assigned for this object file.
12039          This will be wrong for pasted sections;  We fix that in
12040          check_pasted_section().  */
12041       if (elf_gp (isec->owner) != 0)
12042         htab->toc_curr = elf_gp (isec->owner);
12043     }
12044
12045   htab->sec_info[isec->id].toc_off = htab->toc_curr;
12046   return TRUE;
12047 }
12048
12049 /* Check that all .init and .fini sections use the same toc, if they
12050    have toc relocs.  */
12051
12052 static bfd_boolean
12053 check_pasted_section (struct bfd_link_info *info, const char *name)
12054 {
12055   asection *o = bfd_get_section_by_name (info->output_bfd, name);
12056
12057   if (o != NULL)
12058     {
12059       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12060       bfd_vma toc_off = 0;
12061       asection *i;
12062
12063       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12064         if (i->has_toc_reloc)
12065           {
12066             if (toc_off == 0)
12067               toc_off = htab->sec_info[i->id].toc_off;
12068             else if (toc_off != htab->sec_info[i->id].toc_off)
12069               return FALSE;
12070           }
12071
12072       if (toc_off == 0)
12073         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12074           if (i->makes_toc_func_call)
12075             {
12076               toc_off = htab->sec_info[i->id].toc_off;
12077               break;
12078             }
12079
12080       /* Make sure the whole pasted function uses the same toc offset.  */
12081       if (toc_off != 0)
12082         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12083           htab->sec_info[i->id].toc_off = toc_off;
12084     }
12085   return TRUE;
12086 }
12087
12088 bfd_boolean
12089 ppc64_elf_check_init_fini (struct bfd_link_info *info)
12090 {
12091   return (check_pasted_section (info, ".init")
12092           & check_pasted_section (info, ".fini"));
12093 }
12094
12095 /* See whether we can group stub sections together.  Grouping stub
12096    sections may result in fewer stubs.  More importantly, we need to
12097    put all .init* and .fini* stubs at the beginning of the .init or
12098    .fini output sections respectively, because glibc splits the
12099    _init and _fini functions into multiple parts.  Putting a stub in
12100    the middle of a function is not a good idea.  */
12101
12102 static bfd_boolean
12103 group_sections (struct bfd_link_info *info,
12104                 bfd_size_type stub_group_size,
12105                 bfd_boolean stubs_always_before_branch)
12106 {
12107   struct ppc_link_hash_table *htab;
12108   asection *osec;
12109   bfd_boolean suppress_size_errors;
12110
12111   htab = ppc_hash_table (info);
12112   if (htab == NULL)
12113     return FALSE;
12114
12115   suppress_size_errors = FALSE;
12116   if (stub_group_size == 1)
12117     {
12118       /* Default values.  */
12119       if (stubs_always_before_branch)
12120         stub_group_size = 0x1e00000;
12121       else
12122         stub_group_size = 0x1c00000;
12123       suppress_size_errors = TRUE;
12124     }
12125
12126   for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
12127     {
12128       asection *tail;
12129
12130       if (osec->id >= htab->sec_info_arr_size)
12131         continue;
12132
12133       tail = htab->sec_info[osec->id].u.list;
12134       while (tail != NULL)
12135         {
12136           asection *curr;
12137           asection *prev;
12138           bfd_size_type total;
12139           bfd_boolean big_sec;
12140           bfd_vma curr_toc;
12141           struct map_stub *group;
12142           bfd_size_type group_size;
12143
12144           curr = tail;
12145           total = tail->size;
12146           group_size = (ppc64_elf_section_data (tail) != NULL
12147                         && ppc64_elf_section_data (tail)->has_14bit_branch
12148                         ? stub_group_size >> 10 : stub_group_size);
12149
12150           big_sec = total > group_size;
12151           if (big_sec && !suppress_size_errors)
12152             /* xgettext:c-format */
12153             _bfd_error_handler (_("%B section %A exceeds stub group size"),
12154                                 tail->owner, tail);
12155           curr_toc = htab->sec_info[tail->id].toc_off;
12156
12157           while ((prev = htab->sec_info[curr->id].u.list) != NULL
12158                  && ((total += curr->output_offset - prev->output_offset)
12159                      < (ppc64_elf_section_data (prev) != NULL
12160                         && ppc64_elf_section_data (prev)->has_14bit_branch
12161                         ? (group_size = stub_group_size >> 10) : group_size))
12162                  && htab->sec_info[prev->id].toc_off == curr_toc)
12163             curr = prev;
12164
12165           /* OK, the size from the start of CURR to the end is less
12166              than group_size and thus can be handled by one stub
12167              section.  (or the tail section is itself larger than
12168              group_size, in which case we may be toast.)  We should
12169              really be keeping track of the total size of stubs added
12170              here, as stubs contribute to the final output section
12171              size.  That's a little tricky, and this way will only
12172              break if stubs added make the total size more than 2^25,
12173              ie. for the default stub_group_size, if stubs total more
12174              than 2097152 bytes, or nearly 75000 plt call stubs.  */
12175           group = bfd_alloc (curr->owner, sizeof (*group));
12176           if (group == NULL)
12177             return FALSE;
12178           group->link_sec = curr;
12179           group->stub_sec = NULL;
12180           group->needs_save_res = 0;
12181           group->tls_get_addr_opt_bctrl = -1u;
12182           group->next = htab->group;
12183           htab->group = group;
12184           do
12185             {
12186               prev = htab->sec_info[tail->id].u.list;
12187               /* Set up this stub group.  */
12188               htab->sec_info[tail->id].u.group = group;
12189             }
12190           while (tail != curr && (tail = prev) != NULL);
12191
12192           /* But wait, there's more!  Input sections up to group_size
12193              bytes before the stub section can be handled by it too.
12194              Don't do this if we have a really large section after the
12195              stubs, as adding more stubs increases the chance that
12196              branches may not reach into the stub section.  */
12197           if (!stubs_always_before_branch && !big_sec)
12198             {
12199               total = 0;
12200               while (prev != NULL
12201                      && ((total += tail->output_offset - prev->output_offset)
12202                          < (ppc64_elf_section_data (prev) != NULL
12203                             && ppc64_elf_section_data (prev)->has_14bit_branch
12204                             ? (group_size = stub_group_size >> 10) : group_size))
12205                      && htab->sec_info[prev->id].toc_off == curr_toc)
12206                 {
12207                   tail = prev;
12208                   prev = htab->sec_info[tail->id].u.list;
12209                   htab->sec_info[tail->id].u.group = group;
12210                 }
12211             }
12212           tail = prev;
12213         }
12214     }
12215   return TRUE;
12216 }
12217
12218 static const unsigned char glink_eh_frame_cie[] =
12219 {
12220   0, 0, 0, 16,                          /* length.  */
12221   0, 0, 0, 0,                           /* id.  */
12222   1,                                    /* CIE version.  */
12223   'z', 'R', 0,                          /* Augmentation string.  */
12224   4,                                    /* Code alignment.  */
12225   0x78,                                 /* Data alignment.  */
12226   65,                                   /* RA reg.  */
12227   1,                                    /* Augmentation size.  */
12228   DW_EH_PE_pcrel | DW_EH_PE_sdata4,     /* FDE encoding.  */
12229   DW_CFA_def_cfa, 1, 0                  /* def_cfa: r1 offset 0.  */
12230 };
12231
12232 static size_t
12233 stub_eh_frame_size (struct map_stub *group, size_t align)
12234 {
12235   size_t this_size = 17;
12236   if (group->tls_get_addr_opt_bctrl != -1u)
12237     {
12238       unsigned int to_bctrl = group->tls_get_addr_opt_bctrl / 4;
12239       if (to_bctrl < 64)
12240         this_size += 1;
12241       else if (to_bctrl < 256)
12242         this_size += 2;
12243       else if (to_bctrl < 65536)
12244         this_size += 3;
12245       else
12246         this_size += 5;
12247       this_size += 6;
12248     }
12249   this_size = (this_size + align - 1) & -align;
12250   return this_size;
12251 }
12252
12253 /* Stripping output sections is normally done before dynamic section
12254    symbols have been allocated.  This function is called later, and
12255    handles cases like htab->brlt which is mapped to its own output
12256    section.  */
12257
12258 static void
12259 maybe_strip_output (struct bfd_link_info *info, asection *isec)
12260 {
12261   if (isec->size == 0
12262       && isec->output_section->size == 0
12263       && !(isec->output_section->flags & SEC_KEEP)
12264       && !bfd_section_removed_from_list (info->output_bfd,
12265                                          isec->output_section)
12266       && elf_section_data (isec->output_section)->dynindx == 0)
12267     {
12268       isec->output_section->flags |= SEC_EXCLUDE;
12269       bfd_section_list_remove (info->output_bfd, isec->output_section);
12270       info->output_bfd->section_count--;
12271     }
12272 }
12273
12274 /* Determine and set the size of the stub section for a final link.
12275
12276    The basic idea here is to examine all the relocations looking for
12277    PC-relative calls to a target that is unreachable with a "bl"
12278    instruction.  */
12279
12280 bfd_boolean
12281 ppc64_elf_size_stubs (struct bfd_link_info *info)
12282 {
12283   bfd_size_type stub_group_size;
12284   bfd_boolean stubs_always_before_branch;
12285   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12286
12287   if (htab == NULL)
12288     return FALSE;
12289
12290   if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
12291     htab->params->plt_thread_safe = 1;
12292   if (!htab->opd_abi)
12293     htab->params->plt_thread_safe = 0;
12294   else if (htab->params->plt_thread_safe == -1)
12295     {
12296       static const char *const thread_starter[] =
12297         {
12298           "pthread_create",
12299           /* libstdc++ */
12300           "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
12301           /* librt */
12302           "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
12303           "mq_notify", "create_timer",
12304           /* libanl */
12305           "getaddrinfo_a",
12306           /* libgomp */
12307           "GOMP_parallel",
12308           "GOMP_parallel_start",
12309           "GOMP_parallel_loop_static",
12310           "GOMP_parallel_loop_static_start",
12311           "GOMP_parallel_loop_dynamic",
12312           "GOMP_parallel_loop_dynamic_start",
12313           "GOMP_parallel_loop_guided",
12314           "GOMP_parallel_loop_guided_start",
12315           "GOMP_parallel_loop_runtime",
12316           "GOMP_parallel_loop_runtime_start",
12317           "GOMP_parallel_sections",
12318           "GOMP_parallel_sections_start",
12319           /* libgo */
12320           "__go_go",
12321         };
12322       unsigned i;
12323
12324       for (i = 0; i < ARRAY_SIZE (thread_starter); i++)
12325         {
12326           struct elf_link_hash_entry *h;
12327           h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
12328                                     FALSE, FALSE, TRUE);
12329           htab->params->plt_thread_safe = h != NULL && h->ref_regular;
12330           if (htab->params->plt_thread_safe)
12331             break;
12332         }
12333     }
12334   stubs_always_before_branch = htab->params->group_size < 0;
12335   if (htab->params->group_size < 0)
12336     stub_group_size = -htab->params->group_size;
12337   else
12338     stub_group_size = htab->params->group_size;
12339
12340   if (!group_sections (info, stub_group_size, stubs_always_before_branch))
12341     return FALSE;
12342
12343 #define STUB_SHRINK_ITER 20
12344   /* Loop until no stubs added.  After iteration 20 of this loop we may
12345      exit on a stub section shrinking.  This is to break out of a
12346      pathological case where adding stubs on one iteration decreases
12347      section gaps (perhaps due to alignment), which then requires
12348      fewer or smaller stubs on the next iteration.  */
12349
12350   while (1)
12351     {
12352       bfd *input_bfd;
12353       unsigned int bfd_indx;
12354       struct map_stub *group;
12355
12356       htab->stub_iteration += 1;
12357
12358       for (input_bfd = info->input_bfds, bfd_indx = 0;
12359            input_bfd != NULL;
12360            input_bfd = input_bfd->link.next, bfd_indx++)
12361         {
12362           Elf_Internal_Shdr *symtab_hdr;
12363           asection *section;
12364           Elf_Internal_Sym *local_syms = NULL;
12365
12366           if (!is_ppc64_elf (input_bfd))
12367             continue;
12368
12369           /* We'll need the symbol table in a second.  */
12370           symtab_hdr = &elf_symtab_hdr (input_bfd);
12371           if (symtab_hdr->sh_info == 0)
12372             continue;
12373
12374           /* Walk over each section attached to the input bfd.  */
12375           for (section = input_bfd->sections;
12376                section != NULL;
12377                section = section->next)
12378             {
12379               Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
12380
12381               /* If there aren't any relocs, then there's nothing more
12382                  to do.  */
12383               if ((section->flags & SEC_RELOC) == 0
12384                   || (section->flags & SEC_ALLOC) == 0
12385                   || (section->flags & SEC_LOAD) == 0
12386                   || (section->flags & SEC_CODE) == 0
12387                   || section->reloc_count == 0)
12388                 continue;
12389
12390               /* If this section is a link-once section that will be
12391                  discarded, then don't create any stubs.  */
12392               if (section->output_section == NULL
12393                   || section->output_section->owner != info->output_bfd)
12394                 continue;
12395
12396               /* Get the relocs.  */
12397               internal_relocs
12398                 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
12399                                              info->keep_memory);
12400               if (internal_relocs == NULL)
12401                 goto error_ret_free_local;
12402
12403               /* Now examine each relocation.  */
12404               irela = internal_relocs;
12405               irelaend = irela + section->reloc_count;
12406               for (; irela < irelaend; irela++)
12407                 {
12408                   enum elf_ppc64_reloc_type r_type;
12409                   unsigned int r_indx;
12410                   enum ppc_stub_type stub_type;
12411                   struct ppc_stub_hash_entry *stub_entry;
12412                   asection *sym_sec, *code_sec;
12413                   bfd_vma sym_value, code_value;
12414                   bfd_vma destination;
12415                   unsigned long local_off;
12416                   bfd_boolean ok_dest;
12417                   struct ppc_link_hash_entry *hash;
12418                   struct ppc_link_hash_entry *fdh;
12419                   struct elf_link_hash_entry *h;
12420                   Elf_Internal_Sym *sym;
12421                   char *stub_name;
12422                   const asection *id_sec;
12423                   struct _opd_sec_data *opd;
12424                   struct plt_entry *plt_ent;
12425
12426                   r_type = ELF64_R_TYPE (irela->r_info);
12427                   r_indx = ELF64_R_SYM (irela->r_info);
12428
12429                   if (r_type >= R_PPC64_max)
12430                     {
12431                       bfd_set_error (bfd_error_bad_value);
12432                       goto error_ret_free_internal;
12433                     }
12434
12435                   /* Only look for stubs on branch instructions.  */
12436                   if (r_type != R_PPC64_REL24
12437                       && r_type != R_PPC64_REL14
12438                       && r_type != R_PPC64_REL14_BRTAKEN
12439                       && r_type != R_PPC64_REL14_BRNTAKEN)
12440                     continue;
12441
12442                   /* Now determine the call target, its name, value,
12443                      section.  */
12444                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
12445                                   r_indx, input_bfd))
12446                     goto error_ret_free_internal;
12447                   hash = (struct ppc_link_hash_entry *) h;
12448
12449                   ok_dest = FALSE;
12450                   fdh = NULL;
12451                   sym_value = 0;
12452                   if (hash == NULL)
12453                     {
12454                       sym_value = sym->st_value;
12455                       if (sym_sec != NULL
12456                           && sym_sec->output_section != NULL)
12457                         ok_dest = TRUE;
12458                     }
12459                   else if (hash->elf.root.type == bfd_link_hash_defined
12460                            || hash->elf.root.type == bfd_link_hash_defweak)
12461                     {
12462                       sym_value = hash->elf.root.u.def.value;
12463                       if (sym_sec->output_section != NULL)
12464                         ok_dest = TRUE;
12465                     }
12466                   else if (hash->elf.root.type == bfd_link_hash_undefweak
12467                            || hash->elf.root.type == bfd_link_hash_undefined)
12468                     {
12469                       /* Recognise an old ABI func code entry sym, and
12470                          use the func descriptor sym instead if it is
12471                          defined.  */
12472                       if (hash->elf.root.root.string[0] == '.'
12473                           && hash->oh != NULL)
12474                         {
12475                           fdh = ppc_follow_link (hash->oh);
12476                           if (fdh->elf.root.type == bfd_link_hash_defined
12477                               || fdh->elf.root.type == bfd_link_hash_defweak)
12478                             {
12479                               sym_sec = fdh->elf.root.u.def.section;
12480                               sym_value = fdh->elf.root.u.def.value;
12481                               if (sym_sec->output_section != NULL)
12482                                 ok_dest = TRUE;
12483                             }
12484                           else
12485                             fdh = NULL;
12486                         }
12487                     }
12488                   else
12489                     {
12490                       bfd_set_error (bfd_error_bad_value);
12491                       goto error_ret_free_internal;
12492                     }
12493
12494                   destination = 0;
12495                   local_off = 0;
12496                   if (ok_dest)
12497                     {
12498                       sym_value += irela->r_addend;
12499                       destination = (sym_value
12500                                      + sym_sec->output_offset
12501                                      + sym_sec->output_section->vma);
12502                       local_off = PPC64_LOCAL_ENTRY_OFFSET (hash
12503                                                             ? hash->elf.other
12504                                                             : sym->st_other);
12505                     }
12506
12507                   code_sec = sym_sec;
12508                   code_value = sym_value;
12509                   opd = get_opd_info (sym_sec);
12510                   if (opd != NULL)
12511                     {
12512                       bfd_vma dest;
12513
12514                       if (hash == NULL && opd->adjust != NULL)
12515                         {
12516                           long adjust = opd->adjust[OPD_NDX (sym_value)];
12517                           if (adjust == -1)
12518                             continue;
12519                           code_value += adjust;
12520                           sym_value += adjust;
12521                         }
12522                       dest = opd_entry_value (sym_sec, sym_value,
12523                                               &code_sec, &code_value, FALSE);
12524                       if (dest != (bfd_vma) -1)
12525                         {
12526                           destination = dest;
12527                           if (fdh != NULL)
12528                             {
12529                               /* Fixup old ABI sym to point at code
12530                                  entry.  */
12531                               hash->elf.root.type = bfd_link_hash_defweak;
12532                               hash->elf.root.u.def.section = code_sec;
12533                               hash->elf.root.u.def.value = code_value;
12534                             }
12535                         }
12536                     }
12537
12538                   /* Determine what (if any) linker stub is needed.  */
12539                   plt_ent = NULL;
12540                   stub_type = ppc_type_of_stub (section, irela, &hash,
12541                                                 &plt_ent, destination,
12542                                                 local_off);
12543
12544                   if (stub_type != ppc_stub_plt_call)
12545                     {
12546                       /* Check whether we need a TOC adjusting stub.
12547                          Since the linker pastes together pieces from
12548                          different object files when creating the
12549                          _init and _fini functions, it may be that a
12550                          call to what looks like a local sym is in
12551                          fact a call needing a TOC adjustment.  */
12552                       if (code_sec != NULL
12553                           && code_sec->output_section != NULL
12554                           && (htab->sec_info[code_sec->id].toc_off
12555                               != htab->sec_info[section->id].toc_off)
12556                           && (code_sec->has_toc_reloc
12557                               || code_sec->makes_toc_func_call))
12558                         stub_type = ppc_stub_long_branch_r2off;
12559                     }
12560
12561                   if (stub_type == ppc_stub_none)
12562                     continue;
12563
12564                   /* __tls_get_addr calls might be eliminated.  */
12565                   if (stub_type != ppc_stub_plt_call
12566                       && hash != NULL
12567                       && (hash == htab->tls_get_addr
12568                           || hash == htab->tls_get_addr_fd)
12569                       && section->has_tls_reloc
12570                       && irela != internal_relocs)
12571                     {
12572                       /* Get tls info.  */
12573                       unsigned char *tls_mask;
12574
12575                       if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
12576                                          irela - 1, input_bfd))
12577                         goto error_ret_free_internal;
12578                       if (*tls_mask != 0)
12579                         continue;
12580                     }
12581
12582                   if (stub_type == ppc_stub_plt_call)
12583                     {
12584                       if (!htab->opd_abi
12585                           && htab->params->plt_localentry0 != 0
12586                           && is_elfv2_localentry0 (&hash->elf))
12587                         htab->has_plt_localentry0 = 1;
12588                       else if (irela + 1 < irelaend
12589                                && irela[1].r_offset == irela->r_offset + 4
12590                                && (ELF64_R_TYPE (irela[1].r_info)
12591                                    == R_PPC64_TOCSAVE))
12592                         {
12593                           if (!tocsave_find (htab, INSERT,
12594                                              &local_syms, irela + 1, input_bfd))
12595                             goto error_ret_free_internal;
12596                         }
12597                       else
12598                         stub_type = ppc_stub_plt_call_r2save;
12599                     }
12600
12601                   /* Support for grouping stub sections.  */
12602                   id_sec = htab->sec_info[section->id].u.group->link_sec;
12603
12604                   /* Get the name of this stub.  */
12605                   stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
12606                   if (!stub_name)
12607                     goto error_ret_free_internal;
12608
12609                   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
12610                                                      stub_name, FALSE, FALSE);
12611                   if (stub_entry != NULL)
12612                     {
12613                       /* The proper stub has already been created.  */
12614                       free (stub_name);
12615                       if (stub_type == ppc_stub_plt_call_r2save)
12616                         stub_entry->stub_type = stub_type;
12617                       continue;
12618                     }
12619
12620                   stub_entry = ppc_add_stub (stub_name, section, info);
12621                   if (stub_entry == NULL)
12622                     {
12623                       free (stub_name);
12624                     error_ret_free_internal:
12625                       if (elf_section_data (section)->relocs == NULL)
12626                         free (internal_relocs);
12627                     error_ret_free_local:
12628                       if (local_syms != NULL
12629                           && (symtab_hdr->contents
12630                               != (unsigned char *) local_syms))
12631                         free (local_syms);
12632                       return FALSE;
12633                     }
12634
12635                   stub_entry->stub_type = stub_type;
12636                   if (stub_type != ppc_stub_plt_call
12637                       && stub_type != ppc_stub_plt_call_r2save)
12638                     {
12639                       stub_entry->target_value = code_value;
12640                       stub_entry->target_section = code_sec;
12641                     }
12642                   else
12643                     {
12644                       stub_entry->target_value = sym_value;
12645                       stub_entry->target_section = sym_sec;
12646                     }
12647                   stub_entry->h = hash;
12648                   stub_entry->plt_ent = plt_ent;
12649                   stub_entry->other = hash ? hash->elf.other : sym->st_other;
12650
12651                   if (stub_entry->h != NULL)
12652                     htab->stub_globals += 1;
12653                 }
12654
12655               /* We're done with the internal relocs, free them.  */
12656               if (elf_section_data (section)->relocs != internal_relocs)
12657                 free (internal_relocs);
12658             }
12659
12660           if (local_syms != NULL
12661               && symtab_hdr->contents != (unsigned char *) local_syms)
12662             {
12663               if (!info->keep_memory)
12664                 free (local_syms);
12665               else
12666                 symtab_hdr->contents = (unsigned char *) local_syms;
12667             }
12668         }
12669
12670       /* We may have added some stubs.  Find out the new size of the
12671          stub sections.  */
12672       for (group = htab->group; group != NULL; group = group->next)
12673         if (group->stub_sec != NULL)
12674           {
12675             asection *stub_sec = group->stub_sec;
12676
12677             if (htab->stub_iteration <= STUB_SHRINK_ITER
12678                 || stub_sec->rawsize < stub_sec->size)
12679               /* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
12680               stub_sec->rawsize = stub_sec->size;
12681             stub_sec->size = 0;
12682             stub_sec->reloc_count = 0;
12683             stub_sec->flags &= ~SEC_RELOC;
12684           }
12685
12686       htab->brlt->size = 0;
12687       htab->brlt->reloc_count = 0;
12688       htab->brlt->flags &= ~SEC_RELOC;
12689       if (htab->relbrlt != NULL)
12690         htab->relbrlt->size = 0;
12691
12692       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
12693
12694       for (group = htab->group; group != NULL; group = group->next)
12695         if (group->needs_save_res)
12696           group->stub_sec->size += htab->sfpr->size;
12697
12698       if (info->emitrelocations
12699           && htab->glink != NULL && htab->glink->size != 0)
12700         {
12701           htab->glink->reloc_count = 1;
12702           htab->glink->flags |= SEC_RELOC;
12703         }
12704
12705       if (htab->glink_eh_frame != NULL
12706           && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
12707           && htab->glink_eh_frame->output_section->size > 8)
12708         {
12709           size_t size = 0, align = 4;
12710
12711           for (group = htab->group; group != NULL; group = group->next)
12712             if (group->stub_sec != NULL)
12713               size += stub_eh_frame_size (group, align);
12714           if (htab->glink != NULL && htab->glink->size != 0)
12715             size += (24 + align - 1) & -align;
12716           if (size != 0)
12717             size += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
12718           align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
12719           size = (size + align - 1) & -align;
12720           htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
12721           htab->glink_eh_frame->size = size;
12722         }
12723
12724       if (htab->params->plt_stub_align != 0)
12725         for (group = htab->group; group != NULL; group = group->next)
12726           if (group->stub_sec != NULL)
12727             group->stub_sec->size = ((group->stub_sec->size
12728                                       + (1 << htab->params->plt_stub_align) - 1)
12729                                      & -(1 << htab->params->plt_stub_align));
12730
12731       for (group = htab->group; group != NULL; group = group->next)
12732         if (group->stub_sec != NULL
12733             && group->stub_sec->rawsize != group->stub_sec->size
12734             && (htab->stub_iteration <= STUB_SHRINK_ITER
12735                 || group->stub_sec->rawsize < group->stub_sec->size))
12736           break;
12737
12738       if (group == NULL
12739           && (htab->glink_eh_frame == NULL
12740               || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
12741         break;
12742
12743       /* Ask the linker to do its stuff.  */
12744       (*htab->params->layout_sections_again) ();
12745     }
12746
12747   if (htab->glink_eh_frame != NULL
12748       && htab->glink_eh_frame->size != 0)
12749     {
12750       bfd_vma val;
12751       bfd_byte *p, *last_fde;
12752       size_t last_fde_len, size, align, pad;
12753       struct map_stub *group;
12754
12755       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
12756       if (p == NULL)
12757         return FALSE;
12758       htab->glink_eh_frame->contents = p;
12759       last_fde = p;
12760       align = 4;
12761
12762       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
12763       /* CIE length (rewrite in case little-endian).  */
12764       last_fde_len = ((sizeof (glink_eh_frame_cie) + align - 1) & -align) - 4;
12765       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
12766       p += last_fde_len + 4;
12767
12768       for (group = htab->group; group != NULL; group = group->next)
12769         if (group->stub_sec != NULL)
12770           {
12771             last_fde = p;
12772             last_fde_len = stub_eh_frame_size (group, align) - 4;
12773             /* FDE length.  */
12774             bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
12775             p += 4;
12776             /* CIE pointer.  */
12777             val = p - htab->glink_eh_frame->contents;
12778             bfd_put_32 (htab->elf.dynobj, val, p);
12779             p += 4;
12780             /* Offset to stub section, written later.  */
12781             p += 4;
12782             /* stub section size.  */
12783             bfd_put_32 (htab->elf.dynobj, group->stub_sec->size, p);
12784             p += 4;
12785             /* Augmentation.  */
12786             p += 1;
12787             if (group->tls_get_addr_opt_bctrl != -1u)
12788               {
12789                 unsigned int to_bctrl = group->tls_get_addr_opt_bctrl / 4;
12790
12791                 /* This FDE needs more than just the default.
12792                    Describe __tls_get_addr_opt stub LR.  */
12793                 if (to_bctrl < 64)
12794                   *p++ = DW_CFA_advance_loc + to_bctrl;
12795                 else if (to_bctrl < 256)
12796                   {
12797                     *p++ = DW_CFA_advance_loc1;
12798                     *p++ = to_bctrl;
12799                   }
12800                 else if (to_bctrl < 65536)
12801                   {
12802                     *p++ = DW_CFA_advance_loc2;
12803                     bfd_put_16 (htab->elf.dynobj, to_bctrl, p);
12804                     p += 2;
12805                   }
12806                 else
12807                   {
12808                     *p++ = DW_CFA_advance_loc4;
12809                     bfd_put_32 (htab->elf.dynobj, to_bctrl, p);
12810                     p += 4;
12811                   }
12812                 *p++ = DW_CFA_offset_extended_sf;
12813                 *p++ = 65;
12814                 *p++ = -(STK_LINKER (htab) / 8) & 0x7f;
12815                 *p++ = DW_CFA_advance_loc + 4;
12816                 *p++ = DW_CFA_restore_extended;
12817                 *p++ = 65;
12818               }
12819             /* Pad.  */
12820             p = last_fde + last_fde_len + 4;
12821           }
12822       if (htab->glink != NULL && htab->glink->size != 0)
12823         {
12824           last_fde = p;
12825           last_fde_len = ((24 + align - 1) & -align) - 4;
12826           /* FDE length.  */
12827           bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
12828           p += 4;
12829           /* CIE pointer.  */
12830           val = p - htab->glink_eh_frame->contents;
12831           bfd_put_32 (htab->elf.dynobj, val, p);
12832           p += 4;
12833           /* Offset to .glink, written later.  */
12834           p += 4;
12835           /* .glink size.  */
12836           bfd_put_32 (htab->elf.dynobj, htab->glink->size - 8, p);
12837           p += 4;
12838           /* Augmentation.  */
12839           p += 1;
12840
12841           *p++ = DW_CFA_advance_loc + 1;
12842           *p++ = DW_CFA_register;
12843           *p++ = 65;
12844           *p++ = htab->opd_abi ? 12 : 0;
12845           *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
12846           *p++ = DW_CFA_restore_extended;
12847           *p++ = 65;
12848           p += ((24 + align - 1) & -align) - 24;
12849         }
12850       /* Subsume any padding into the last FDE if user .eh_frame
12851          sections are aligned more than glink_eh_frame.  Otherwise any
12852          zero padding will be seen as a terminator.  */
12853       align = 1ul << htab->glink_eh_frame->output_section->alignment_power;
12854       size = p - htab->glink_eh_frame->contents;
12855       pad = ((size + align - 1) & -align) - size;
12856       htab->glink_eh_frame->size = size + pad;
12857       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
12858     }
12859
12860   maybe_strip_output (info, htab->brlt);
12861   if (htab->glink_eh_frame != NULL)
12862     maybe_strip_output (info, htab->glink_eh_frame);
12863
12864   return TRUE;
12865 }
12866
12867 /* Called after we have determined section placement.  If sections
12868    move, we'll be called again.  Provide a value for TOCstart.  */
12869
12870 bfd_vma
12871 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
12872 {
12873   asection *s;
12874   bfd_vma TOCstart, adjust;
12875
12876   if (info != NULL)
12877     {
12878       struct elf_link_hash_entry *h;
12879       struct elf_link_hash_table *htab = elf_hash_table (info);
12880
12881       if (is_elf_hash_table (htab)
12882           && htab->hgot != NULL)
12883         h = htab->hgot;
12884       else
12885         {
12886           h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
12887           if (is_elf_hash_table (htab))
12888             htab->hgot = h;
12889         }
12890       if (h != NULL
12891           && h->root.type == bfd_link_hash_defined
12892           && !h->root.linker_def
12893           && (!is_elf_hash_table (htab)
12894               || h->def_regular))
12895         {
12896           TOCstart = (h->root.u.def.value - TOC_BASE_OFF
12897                       + h->root.u.def.section->output_offset
12898                       + h->root.u.def.section->output_section->vma);
12899           _bfd_set_gp_value (obfd, TOCstart);
12900           return TOCstart;
12901         }
12902     }
12903
12904   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
12905      order.  The TOC starts where the first of these sections starts.  */
12906   s = bfd_get_section_by_name (obfd, ".got");
12907   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12908     s = bfd_get_section_by_name (obfd, ".toc");
12909   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12910     s = bfd_get_section_by_name (obfd, ".tocbss");
12911   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12912     s = bfd_get_section_by_name (obfd, ".plt");
12913   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12914     {
12915       /* This may happen for
12916          o  references to TOC base (SYM@toc / TOC[tc0]) without a
12917          .toc directive
12918          o  bad linker script
12919          o --gc-sections and empty TOC sections
12920
12921          FIXME: Warn user?  */
12922
12923       /* Look for a likely section.  We probably won't even be
12924          using TOCstart.  */
12925       for (s = obfd->sections; s != NULL; s = s->next)
12926         if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
12927                          | SEC_EXCLUDE))
12928             == (SEC_ALLOC | SEC_SMALL_DATA))
12929           break;
12930       if (s == NULL)
12931         for (s = obfd->sections; s != NULL; s = s->next)
12932           if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
12933               == (SEC_ALLOC | SEC_SMALL_DATA))
12934             break;
12935       if (s == NULL)
12936         for (s = obfd->sections; s != NULL; s = s->next)
12937           if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
12938               == SEC_ALLOC)
12939             break;
12940       if (s == NULL)
12941         for (s = obfd->sections; s != NULL; s = s->next)
12942           if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
12943             break;
12944     }
12945
12946   TOCstart = 0;
12947   if (s != NULL)
12948     TOCstart = s->output_section->vma + s->output_offset;
12949
12950   /* Force alignment.  */
12951   adjust = TOCstart & (TOC_BASE_ALIGN - 1);
12952   TOCstart -= adjust;
12953   _bfd_set_gp_value (obfd, TOCstart);
12954
12955   if (info != NULL && s != NULL)
12956     {
12957       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12958
12959       if (htab != NULL)
12960         {
12961           if (htab->elf.hgot != NULL)
12962             {
12963               htab->elf.hgot->root.u.def.value = TOC_BASE_OFF - adjust;
12964               htab->elf.hgot->root.u.def.section = s;
12965             }
12966         }
12967       else
12968         {
12969           struct bfd_link_hash_entry *bh = NULL;
12970           _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
12971                                             s, TOC_BASE_OFF - adjust,
12972                                             NULL, FALSE, FALSE, &bh);
12973         }
12974     }
12975   return TOCstart;
12976 }
12977
12978 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
12979    write out any global entry stubs.  */
12980
12981 static bfd_boolean
12982 build_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
12983 {
12984   struct bfd_link_info *info;
12985   struct ppc_link_hash_table *htab;
12986   struct plt_entry *pent;
12987   asection *s;
12988
12989   if (h->root.type == bfd_link_hash_indirect)
12990     return TRUE;
12991
12992   if (!h->pointer_equality_needed)
12993     return TRUE;
12994
12995   if (h->def_regular)
12996     return TRUE;
12997
12998   info = inf;
12999   htab = ppc_hash_table (info);
13000   if (htab == NULL)
13001     return FALSE;
13002
13003   s = htab->glink;
13004   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
13005     if (pent->plt.offset != (bfd_vma) -1
13006         && pent->addend == 0)
13007       {
13008         bfd_byte *p;
13009         asection *plt;
13010         bfd_vma off;
13011
13012         p = s->contents + h->root.u.def.value;
13013         plt = htab->elf.splt;
13014         if (!htab->elf.dynamic_sections_created
13015             || h->dynindx == -1)
13016           plt = htab->elf.iplt;
13017         off = pent->plt.offset + plt->output_offset + plt->output_section->vma;
13018         off -= h->root.u.def.value + s->output_offset + s->output_section->vma;
13019
13020         if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
13021           {
13022             info->callbacks->einfo
13023               (_("%P: linkage table error against `%T'\n"),
13024                h->root.root.string);
13025             bfd_set_error (bfd_error_bad_value);
13026             htab->stub_error = TRUE;
13027           }
13028
13029         htab->stub_count[ppc_stub_global_entry - 1] += 1;
13030         if (htab->params->emit_stub_syms)
13031           {
13032             size_t len = strlen (h->root.root.string);
13033             char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
13034
13035             if (name == NULL)
13036               return FALSE;
13037
13038             sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
13039             h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
13040             if (h == NULL)
13041               return FALSE;
13042             if (h->root.type == bfd_link_hash_new)
13043               {
13044                 h->root.type = bfd_link_hash_defined;
13045                 h->root.u.def.section = s;
13046                 h->root.u.def.value = p - s->contents;
13047                 h->ref_regular = 1;
13048                 h->def_regular = 1;
13049                 h->ref_regular_nonweak = 1;
13050                 h->forced_local = 1;
13051                 h->non_elf = 0;
13052                 h->root.linker_def = 1;
13053               }
13054           }
13055
13056         if (PPC_HA (off) != 0)
13057           {
13058             bfd_put_32 (s->owner, ADDIS_R12_R12 | PPC_HA (off), p);
13059             p += 4;
13060           }
13061         bfd_put_32 (s->owner, LD_R12_0R12 | PPC_LO (off), p);
13062         p += 4;
13063         bfd_put_32 (s->owner, MTCTR_R12, p);
13064         p += 4;
13065         bfd_put_32 (s->owner, BCTR, p);
13066         break;
13067       }
13068   return TRUE;
13069 }
13070
13071 /* Build all the stubs associated with the current output file.
13072    The stubs are kept in a hash table attached to the main linker
13073    hash table.  This function is called via gldelf64ppc_finish.  */
13074
13075 bfd_boolean
13076 ppc64_elf_build_stubs (struct bfd_link_info *info,
13077                        char **stats)
13078 {
13079   struct ppc_link_hash_table *htab = ppc_hash_table (info);
13080   struct map_stub *group;
13081   asection *stub_sec;
13082   bfd_byte *p;
13083   int stub_sec_count = 0;
13084
13085   if (htab == NULL)
13086     return FALSE;
13087
13088   /* Allocate memory to hold the linker stubs.  */
13089   for (group = htab->group; group != NULL; group = group->next)
13090     if ((stub_sec = group->stub_sec) != NULL
13091         && stub_sec->size != 0)
13092       {
13093         stub_sec->contents = bfd_zalloc (htab->params->stub_bfd, stub_sec->size);
13094         if (stub_sec->contents == NULL)
13095           return FALSE;
13096         stub_sec->size = 0;
13097       }
13098
13099   if (htab->glink != NULL && htab->glink->size != 0)
13100     {
13101       unsigned int indx;
13102       bfd_vma plt0;
13103
13104       /* Build the .glink plt call stub.  */
13105       if (htab->params->emit_stub_syms)
13106         {
13107           struct elf_link_hash_entry *h;
13108           h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
13109                                     TRUE, FALSE, FALSE);
13110           if (h == NULL)
13111             return FALSE;
13112           if (h->root.type == bfd_link_hash_new)
13113             {
13114               h->root.type = bfd_link_hash_defined;
13115               h->root.u.def.section = htab->glink;
13116               h->root.u.def.value = 8;
13117               h->ref_regular = 1;
13118               h->def_regular = 1;
13119               h->ref_regular_nonweak = 1;
13120               h->forced_local = 1;
13121               h->non_elf = 0;
13122               h->root.linker_def = 1;
13123             }
13124         }
13125       plt0 = (htab->elf.splt->output_section->vma
13126               + htab->elf.splt->output_offset
13127               - 16);
13128       if (info->emitrelocations)
13129         {
13130           Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
13131           if (r == NULL)
13132             return FALSE;
13133           r->r_offset = (htab->glink->output_offset
13134                          + htab->glink->output_section->vma);
13135           r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
13136           r->r_addend = plt0;
13137         }
13138       p = htab->glink->contents;
13139       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
13140       bfd_put_64 (htab->glink->owner, plt0, p);
13141       p += 8;
13142       if (htab->opd_abi)
13143         {
13144           bfd_put_32 (htab->glink->owner, MFLR_R12, p);
13145           p += 4;
13146           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13147           p += 4;
13148           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13149           p += 4;
13150           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13151           p += 4;
13152           bfd_put_32 (htab->glink->owner, MTLR_R12, p);
13153           p += 4;
13154           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13155           p += 4;
13156           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13157           p += 4;
13158           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
13159           p += 4;
13160           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13161           p += 4;
13162           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
13163           p += 4;
13164         }
13165       else
13166         {
13167           bfd_put_32 (htab->glink->owner, MFLR_R0, p);
13168           p += 4;
13169           bfd_put_32 (htab->glink->owner, BCL_20_31, p);
13170           p += 4;
13171           bfd_put_32 (htab->glink->owner, MFLR_R11, p);
13172           p += 4;
13173           bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
13174           p += 4;
13175           bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
13176           p += 4;
13177           bfd_put_32 (htab->glink->owner, MTLR_R0, p);
13178           p += 4;
13179           bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
13180           p += 4;
13181           bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
13182           p += 4;
13183           bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
13184           p += 4;
13185           bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
13186           p += 4;
13187           bfd_put_32 (htab->glink->owner, SRDI_R0_R0_2, p);
13188           p += 4;
13189           bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
13190           p += 4;
13191           bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
13192           p += 4;
13193         }
13194       bfd_put_32 (htab->glink->owner, BCTR, p);
13195       p += 4;
13196       while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
13197         {
13198           bfd_put_32 (htab->glink->owner, NOP, p);
13199           p += 4;
13200         }
13201
13202       /* Build the .glink lazy link call stubs.  */
13203       indx = 0;
13204       while (p < htab->glink->contents + htab->glink->rawsize)
13205         {
13206           if (htab->opd_abi)
13207             {
13208               if (indx < 0x8000)
13209                 {
13210                   bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
13211                   p += 4;
13212                 }
13213               else
13214                 {
13215                   bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
13216                   p += 4;
13217                   bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx),
13218                               p);
13219                   p += 4;
13220                 }
13221             }
13222           bfd_put_32 (htab->glink->owner,
13223                       B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
13224           indx++;
13225           p += 4;
13226         }
13227
13228       /* Build .glink global entry stubs.  */
13229       if (htab->glink->size > htab->glink->rawsize)
13230         elf_link_hash_traverse (&htab->elf, build_global_entry_stubs, info);
13231     }
13232
13233   if (htab->brlt != NULL && htab->brlt->size != 0)
13234     {
13235       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
13236                                          htab->brlt->size);
13237       if (htab->brlt->contents == NULL)
13238         return FALSE;
13239     }
13240   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
13241     {
13242       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
13243                                             htab->relbrlt->size);
13244       if (htab->relbrlt->contents == NULL)
13245         return FALSE;
13246     }
13247
13248   /* Build the stubs as directed by the stub hash table.  */
13249   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
13250
13251   for (group = htab->group; group != NULL; group = group->next)
13252     if (group->needs_save_res)
13253       {
13254         stub_sec = group->stub_sec;
13255         memcpy (stub_sec->contents + stub_sec->size, htab->sfpr->contents,
13256                 htab->sfpr->size);
13257         if (htab->params->emit_stub_syms)
13258           {
13259             unsigned int i;
13260
13261             for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
13262               if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
13263                 return FALSE;
13264           }
13265         stub_sec->size += htab->sfpr->size;
13266       }
13267
13268   if (htab->relbrlt != NULL)
13269     htab->relbrlt->reloc_count = 0;
13270
13271   if (htab->params->plt_stub_align != 0)
13272     for (group = htab->group; group != NULL; group = group->next)
13273       if ((stub_sec = group->stub_sec) != NULL)
13274         stub_sec->size = ((stub_sec->size
13275                            + (1 << htab->params->plt_stub_align) - 1)
13276                           & -(1 << htab->params->plt_stub_align));
13277
13278   for (group = htab->group; group != NULL; group = group->next)
13279     if ((stub_sec = group->stub_sec) != NULL)
13280       {
13281         stub_sec_count += 1;
13282         if (stub_sec->rawsize != stub_sec->size
13283             && (htab->stub_iteration <= STUB_SHRINK_ITER
13284                 || stub_sec->rawsize < stub_sec->size))
13285           break;
13286       }
13287
13288   if (group != NULL)
13289     {
13290       htab->stub_error = TRUE;
13291       info->callbacks->einfo (_("%P: stubs don't match calculated size\n"));
13292     }
13293
13294   if (htab->stub_error)
13295     return FALSE;
13296
13297   if (stats != NULL)
13298     {
13299       size_t len;
13300       *stats = bfd_malloc (500);
13301       if (*stats == NULL)
13302         return FALSE;
13303
13304       len = sprintf (*stats,
13305                      ngettext ("linker stubs in %u group\n",
13306                                "linker stubs in %u groups\n",
13307                                stub_sec_count),
13308                      stub_sec_count);
13309       sprintf (*stats + len, _("  branch       %lu\n"
13310                                "  toc adjust   %lu\n"
13311                                "  long branch  %lu\n"
13312                                "  long toc adj %lu\n"
13313                                "  plt call     %lu\n"
13314                                "  plt call toc %lu\n"
13315                                "  global entry %lu"),
13316                htab->stub_count[ppc_stub_long_branch - 1],
13317                htab->stub_count[ppc_stub_long_branch_r2off - 1],
13318                htab->stub_count[ppc_stub_plt_branch - 1],
13319                htab->stub_count[ppc_stub_plt_branch_r2off - 1],
13320                htab->stub_count[ppc_stub_plt_call - 1],
13321                htab->stub_count[ppc_stub_plt_call_r2save - 1],
13322                htab->stub_count[ppc_stub_global_entry - 1]);
13323     }
13324   return TRUE;
13325 }
13326
13327 /* What to do when ld finds relocations against symbols defined in
13328    discarded sections.  */
13329
13330 static unsigned int
13331 ppc64_elf_action_discarded (asection *sec)
13332 {
13333   if (strcmp (".opd", sec->name) == 0)
13334     return 0;
13335
13336   if (strcmp (".toc", sec->name) == 0)
13337     return 0;
13338
13339   if (strcmp (".toc1", sec->name) == 0)
13340     return 0;
13341
13342   return _bfd_elf_default_action_discarded (sec);
13343 }
13344
13345 /* The RELOCATE_SECTION function is called by the ELF backend linker
13346    to handle the relocations for a section.
13347
13348    The relocs are always passed as Rela structures; if the section
13349    actually uses Rel structures, the r_addend field will always be
13350    zero.
13351
13352    This function is responsible for adjust the section contents as
13353    necessary, and (if using Rela relocs and generating a
13354    relocatable output file) adjusting the reloc addend as
13355    necessary.
13356
13357    This function does not have to worry about setting the reloc
13358    address or the reloc symbol index.
13359
13360    LOCAL_SYMS is a pointer to the swapped in local symbols.
13361
13362    LOCAL_SECTIONS is an array giving the section in the input file
13363    corresponding to the st_shndx field of each local symbol.
13364
13365    The global hash table entry for the global symbols can be found
13366    via elf_sym_hashes (input_bfd).
13367
13368    When generating relocatable output, this function must handle
13369    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
13370    going to be the section symbol corresponding to the output
13371    section, which means that the addend must be adjusted
13372    accordingly.  */
13373
13374 static bfd_boolean
13375 ppc64_elf_relocate_section (bfd *output_bfd,
13376                             struct bfd_link_info *info,
13377                             bfd *input_bfd,
13378                             asection *input_section,
13379                             bfd_byte *contents,
13380                             Elf_Internal_Rela *relocs,
13381                             Elf_Internal_Sym *local_syms,
13382                             asection **local_sections)
13383 {
13384   struct ppc_link_hash_table *htab;
13385   Elf_Internal_Shdr *symtab_hdr;
13386   struct elf_link_hash_entry **sym_hashes;
13387   Elf_Internal_Rela *rel;
13388   Elf_Internal_Rela *wrel;
13389   Elf_Internal_Rela *relend;
13390   Elf_Internal_Rela outrel;
13391   bfd_byte *loc;
13392   struct got_entry **local_got_ents;
13393   bfd_vma TOCstart;
13394   bfd_boolean ret = TRUE;
13395   bfd_boolean is_opd;
13396   /* Assume 'at' branch hints.  */
13397   bfd_boolean is_isa_v2 = TRUE;
13398   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
13399
13400   /* Initialize howto table if needed.  */
13401   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
13402     ppc_howto_init ();
13403
13404   htab = ppc_hash_table (info);
13405   if (htab == NULL)
13406     return FALSE;
13407
13408   /* Don't relocate stub sections.  */
13409   if (input_section->owner == htab->params->stub_bfd)
13410     return TRUE;
13411
13412   BFD_ASSERT (is_ppc64_elf (input_bfd));
13413
13414   local_got_ents = elf_local_got_ents (input_bfd);
13415   TOCstart = elf_gp (output_bfd);
13416   symtab_hdr = &elf_symtab_hdr (input_bfd);
13417   sym_hashes = elf_sym_hashes (input_bfd);
13418   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
13419
13420   rel = wrel = relocs;
13421   relend = relocs + input_section->reloc_count;
13422   for (; rel < relend; wrel++, rel++)
13423     {
13424       enum elf_ppc64_reloc_type r_type;
13425       bfd_vma addend;
13426       bfd_reloc_status_type r;
13427       Elf_Internal_Sym *sym;
13428       asection *sec;
13429       struct elf_link_hash_entry *h_elf;
13430       struct ppc_link_hash_entry *h;
13431       struct ppc_link_hash_entry *fdh;
13432       const char *sym_name;
13433       unsigned long r_symndx, toc_symndx;
13434       bfd_vma toc_addend;
13435       unsigned char tls_mask, tls_gd, tls_type;
13436       unsigned char sym_type;
13437       bfd_vma relocation;
13438       bfd_boolean unresolved_reloc;
13439       bfd_boolean warned;
13440       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
13441       unsigned int insn;
13442       unsigned int mask;
13443       struct ppc_stub_hash_entry *stub_entry;
13444       bfd_vma max_br_offset;
13445       bfd_vma from;
13446       Elf_Internal_Rela orig_rel;
13447       reloc_howto_type *howto;
13448       struct reloc_howto_struct alt_howto;
13449
13450     again:
13451       orig_rel = *rel;
13452
13453       r_type = ELF64_R_TYPE (rel->r_info);
13454       r_symndx = ELF64_R_SYM (rel->r_info);
13455
13456       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
13457          symbol of the previous ADDR64 reloc.  The symbol gives us the
13458          proper TOC base to use.  */
13459       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
13460           && wrel != relocs
13461           && ELF64_R_TYPE (wrel[-1].r_info) == R_PPC64_ADDR64
13462           && is_opd)
13463         r_symndx = ELF64_R_SYM (wrel[-1].r_info);
13464
13465       sym = NULL;
13466       sec = NULL;
13467       h_elf = NULL;
13468       sym_name = NULL;
13469       unresolved_reloc = FALSE;
13470       warned = FALSE;
13471
13472       if (r_symndx < symtab_hdr->sh_info)
13473         {
13474           /* It's a local symbol.  */
13475           struct _opd_sec_data *opd;
13476
13477           sym = local_syms + r_symndx;
13478           sec = local_sections[r_symndx];
13479           sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
13480           sym_type = ELF64_ST_TYPE (sym->st_info);
13481           relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
13482           opd = get_opd_info (sec);
13483           if (opd != NULL && opd->adjust != NULL)
13484             {
13485               long adjust = opd->adjust[OPD_NDX (sym->st_value
13486                                                  + rel->r_addend)];
13487               if (adjust == -1)
13488                 relocation = 0;
13489               else
13490                 {
13491                   /* If this is a relocation against the opd section sym
13492                      and we have edited .opd, adjust the reloc addend so
13493                      that ld -r and ld --emit-relocs output is correct.
13494                      If it is a reloc against some other .opd symbol,
13495                      then the symbol value will be adjusted later.  */
13496                   if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
13497                     rel->r_addend += adjust;
13498                   else
13499                     relocation += adjust;
13500                 }
13501             }
13502         }
13503       else
13504         {
13505           bfd_boolean ignored;
13506
13507           RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
13508                                    r_symndx, symtab_hdr, sym_hashes,
13509                                    h_elf, sec, relocation,
13510                                    unresolved_reloc, warned, ignored);
13511           sym_name = h_elf->root.root.string;
13512           sym_type = h_elf->type;
13513           if (sec != NULL
13514               && sec->owner == output_bfd
13515               && strcmp (sec->name, ".opd") == 0)
13516             {
13517               /* This is a symbol defined in a linker script.  All
13518                  such are defined in output sections, even those
13519                  defined by simple assignment from a symbol defined in
13520                  an input section.  Transfer the symbol to an
13521                  appropriate input .opd section, so that a branch to
13522                  this symbol will be mapped to the location specified
13523                  by the opd entry.  */
13524               struct bfd_link_order *lo;
13525               for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
13526                 if (lo->type == bfd_indirect_link_order)
13527                   {
13528                     asection *isec = lo->u.indirect.section;
13529                     if (h_elf->root.u.def.value >= isec->output_offset
13530                         && h_elf->root.u.def.value < (isec->output_offset
13531                                                       + isec->size))
13532                       {
13533                         h_elf->root.u.def.value -= isec->output_offset;
13534                         h_elf->root.u.def.section = isec;
13535                         sec = isec;
13536                         break;
13537                       }
13538                   }
13539             }
13540         }
13541       h = (struct ppc_link_hash_entry *) h_elf;
13542
13543       if (sec != NULL && discarded_section (sec))
13544         {
13545           _bfd_clear_contents (ppc64_elf_howto_table[r_type],
13546                                input_bfd, input_section,
13547                                contents + rel->r_offset);
13548           wrel->r_offset = rel->r_offset;
13549           wrel->r_info = 0;
13550           wrel->r_addend = 0;
13551
13552           /* For ld -r, remove relocations in debug sections against
13553              symbols defined in discarded sections.  Not done for
13554              non-debug to preserve relocs in .eh_frame which the
13555              eh_frame editing code expects to be present.  */
13556           if (bfd_link_relocatable (info)
13557               && (input_section->flags & SEC_DEBUGGING))
13558             wrel--;
13559
13560           continue;
13561         }
13562
13563       if (bfd_link_relocatable (info))
13564         goto copy_reloc;
13565
13566       if (h != NULL && &h->elf == htab->elf.hgot)
13567         {
13568           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
13569           sec = bfd_abs_section_ptr;
13570           unresolved_reloc = FALSE;
13571         }
13572
13573       /* TLS optimizations.  Replace instruction sequences and relocs
13574          based on information we collected in tls_optimize.  We edit
13575          RELOCS so that --emit-relocs will output something sensible
13576          for the final instruction stream.  */
13577       tls_mask = 0;
13578       tls_gd = 0;
13579       toc_symndx = 0;
13580       if (h != NULL)
13581         tls_mask = h->tls_mask;
13582       else if (local_got_ents != NULL)
13583         {
13584           struct plt_entry **local_plt = (struct plt_entry **)
13585             (local_got_ents + symtab_hdr->sh_info);
13586           unsigned char *lgot_masks = (unsigned char *)
13587             (local_plt + symtab_hdr->sh_info);
13588           tls_mask = lgot_masks[r_symndx];
13589         }
13590       if (tls_mask == 0
13591           && (r_type == R_PPC64_TLS
13592               || r_type == R_PPC64_TLSGD
13593               || r_type == R_PPC64_TLSLD))
13594         {
13595           /* Check for toc tls entries.  */
13596           unsigned char *toc_tls;
13597
13598           if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
13599                              &local_syms, rel, input_bfd))
13600             return FALSE;
13601
13602           if (toc_tls)
13603             tls_mask = *toc_tls;
13604         }
13605
13606       /* Check that tls relocs are used with tls syms, and non-tls
13607          relocs are used with non-tls syms.  */
13608       if (r_symndx != STN_UNDEF
13609           && r_type != R_PPC64_NONE
13610           && (h == NULL
13611               || h->elf.root.type == bfd_link_hash_defined
13612               || h->elf.root.type == bfd_link_hash_defweak)
13613           && (IS_PPC64_TLS_RELOC (r_type)
13614               != (sym_type == STT_TLS
13615                   || (sym_type == STT_SECTION
13616                       && (sec->flags & SEC_THREAD_LOCAL) != 0))))
13617         {
13618           if (tls_mask != 0
13619               && (r_type == R_PPC64_TLS
13620                   || r_type == R_PPC64_TLSGD
13621                   || r_type == R_PPC64_TLSLD))
13622             /* R_PPC64_TLS is OK against a symbol in the TOC.  */
13623             ;
13624           else
13625             info->callbacks->einfo
13626               (!IS_PPC64_TLS_RELOC (r_type)
13627                /* xgettext:c-format */
13628                ? _("%H: %s used with TLS symbol `%T'\n")
13629                /* xgettext:c-format */
13630                : _("%H: %s used with non-TLS symbol `%T'\n"),
13631                input_bfd, input_section, rel->r_offset,
13632                ppc64_elf_howto_table[r_type]->name,
13633                sym_name);
13634         }
13635
13636       /* Ensure reloc mapping code below stays sane.  */
13637       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
13638           || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
13639           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
13640           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
13641           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
13642           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
13643           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
13644           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
13645           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
13646           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
13647         abort ();
13648
13649       switch (r_type)
13650         {
13651         default:
13652           break;
13653
13654         case R_PPC64_LO_DS_OPT:
13655           insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
13656           if ((insn & (0x3f << 26)) != 58u << 26)
13657             abort ();
13658           insn += (14u << 26) - (58u << 26);
13659           bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
13660           r_type = R_PPC64_TOC16_LO;
13661           rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13662           break;
13663
13664         case R_PPC64_TOC16:
13665         case R_PPC64_TOC16_LO:
13666         case R_PPC64_TOC16_DS:
13667         case R_PPC64_TOC16_LO_DS:
13668           {
13669             /* Check for toc tls entries.  */
13670             unsigned char *toc_tls;
13671             int retval;
13672
13673             retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
13674                                    &local_syms, rel, input_bfd);
13675             if (retval == 0)
13676               return FALSE;
13677
13678             if (toc_tls)
13679               {
13680                 tls_mask = *toc_tls;
13681                 if (r_type == R_PPC64_TOC16_DS
13682                     || r_type == R_PPC64_TOC16_LO_DS)
13683                   {
13684                     if (tls_mask != 0
13685                         && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
13686                       goto toctprel;
13687                   }
13688                 else
13689                   {
13690                     /* If we found a GD reloc pair, then we might be
13691                        doing a GD->IE transition.  */
13692                     if (retval == 2)
13693                       {
13694                         tls_gd = TLS_TPRELGD;
13695                         if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
13696                           goto tls_ldgd_opt;
13697                       }
13698                     else if (retval == 3)
13699                       {
13700                         if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
13701                           goto tls_ldgd_opt;
13702                       }
13703                   }
13704               }
13705           }
13706           break;
13707
13708         case R_PPC64_GOT_TPREL16_HI:
13709         case R_PPC64_GOT_TPREL16_HA:
13710           if (tls_mask != 0
13711               && (tls_mask & TLS_TPREL) == 0)
13712             {
13713               rel->r_offset -= d_offset;
13714               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
13715               r_type = R_PPC64_NONE;
13716               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13717             }
13718           break;
13719
13720         case R_PPC64_GOT_TPREL16_DS:
13721         case R_PPC64_GOT_TPREL16_LO_DS:
13722           if (tls_mask != 0
13723               && (tls_mask & TLS_TPREL) == 0)
13724             {
13725             toctprel:
13726               insn = bfd_get_32 (input_bfd,
13727                                  contents + rel->r_offset - d_offset);
13728               insn &= 31 << 21;
13729               insn |= 0x3c0d0000;       /* addis 0,13,0 */
13730               bfd_put_32 (input_bfd, insn,
13731                           contents + rel->r_offset - d_offset);
13732               r_type = R_PPC64_TPREL16_HA;
13733               if (toc_symndx != 0)
13734                 {
13735                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
13736                   rel->r_addend = toc_addend;
13737                   /* We changed the symbol.  Start over in order to
13738                      get h, sym, sec etc. right.  */
13739                   goto again;
13740                 }
13741               else
13742                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13743             }
13744           break;
13745
13746         case R_PPC64_TLS:
13747           if (tls_mask != 0
13748               && (tls_mask & TLS_TPREL) == 0)
13749             {
13750               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
13751               insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
13752               if (insn == 0)
13753                 abort ();
13754               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
13755               /* Was PPC64_TLS which sits on insn boundary, now
13756                  PPC64_TPREL16_LO which is at low-order half-word.  */
13757               rel->r_offset += d_offset;
13758               r_type = R_PPC64_TPREL16_LO;
13759               if (toc_symndx != 0)
13760                 {
13761                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
13762                   rel->r_addend = toc_addend;
13763                   /* We changed the symbol.  Start over in order to
13764                      get h, sym, sec etc. right.  */
13765                   goto again;
13766                 }
13767               else
13768                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13769             }
13770           break;
13771
13772         case R_PPC64_GOT_TLSGD16_HI:
13773         case R_PPC64_GOT_TLSGD16_HA:
13774           tls_gd = TLS_TPRELGD;
13775           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
13776             goto tls_gdld_hi;
13777           break;
13778
13779         case R_PPC64_GOT_TLSLD16_HI:
13780         case R_PPC64_GOT_TLSLD16_HA:
13781           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
13782             {
13783             tls_gdld_hi:
13784               if ((tls_mask & tls_gd) != 0)
13785                 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
13786                           + R_PPC64_GOT_TPREL16_DS);
13787               else
13788                 {
13789                   rel->r_offset -= d_offset;
13790                   bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
13791                   r_type = R_PPC64_NONE;
13792                 }
13793               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13794             }
13795           break;
13796
13797         case R_PPC64_GOT_TLSGD16:
13798         case R_PPC64_GOT_TLSGD16_LO:
13799           tls_gd = TLS_TPRELGD;
13800           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
13801             goto tls_ldgd_opt;
13802           break;
13803
13804         case R_PPC64_GOT_TLSLD16:
13805         case R_PPC64_GOT_TLSLD16_LO:
13806           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
13807             {
13808               unsigned int insn1, insn2;
13809               bfd_vma offset;
13810
13811             tls_ldgd_opt:
13812               offset = (bfd_vma) -1;
13813               /* If not using the newer R_PPC64_TLSGD/LD to mark
13814                  __tls_get_addr calls, we must trust that the call
13815                  stays with its arg setup insns, ie. that the next
13816                  reloc is the __tls_get_addr call associated with
13817                  the current reloc.  Edit both insns.  */
13818               if (input_section->has_tls_get_addr_call
13819                   && rel + 1 < relend
13820                   && branch_reloc_hash_match (input_bfd, rel + 1,
13821                                               htab->tls_get_addr,
13822                                               htab->tls_get_addr_fd))
13823                 offset = rel[1].r_offset;
13824               /* We read the low GOT_TLS (or TOC16) insn because we
13825                  need to keep the destination reg.  It may be
13826                  something other than the usual r3, and moved to r3
13827                  before the call by intervening code.  */
13828               insn1 = bfd_get_32 (input_bfd,
13829                                   contents + rel->r_offset - d_offset);
13830               if ((tls_mask & tls_gd) != 0)
13831                 {
13832                   /* IE */
13833                   insn1 &= (0x1f << 21) | (0x1f << 16);
13834                   insn1 |= 58 << 26;    /* ld */
13835                   insn2 = 0x7c636a14;   /* add 3,3,13 */
13836                   if (offset != (bfd_vma) -1)
13837                     rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
13838                   if ((tls_mask & TLS_EXPLICIT) == 0)
13839                     r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
13840                               + R_PPC64_GOT_TPREL16_DS);
13841                   else
13842                     r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
13843                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13844                 }
13845               else
13846                 {
13847                   /* LE */
13848                   insn1 &= 0x1f << 21;
13849                   insn1 |= 0x3c0d0000;  /* addis r,13,0 */
13850                   insn2 = 0x38630000;   /* addi 3,3,0 */
13851                   if (tls_gd == 0)
13852                     {
13853                       /* Was an LD reloc.  */
13854                       if (toc_symndx)
13855                         sec = local_sections[toc_symndx];
13856                       for (r_symndx = 0;
13857                            r_symndx < symtab_hdr->sh_info;
13858                            r_symndx++)
13859                         if (local_sections[r_symndx] == sec)
13860                           break;
13861                       if (r_symndx >= symtab_hdr->sh_info)
13862                         r_symndx = STN_UNDEF;
13863                       rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
13864                       if (r_symndx != STN_UNDEF)
13865                         rel->r_addend -= (local_syms[r_symndx].st_value
13866                                           + sec->output_offset
13867                                           + sec->output_section->vma);
13868                     }
13869                   else if (toc_symndx != 0)
13870                     {
13871                       r_symndx = toc_symndx;
13872                       rel->r_addend = toc_addend;
13873                     }
13874                   r_type = R_PPC64_TPREL16_HA;
13875                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13876                   if (offset != (bfd_vma) -1)
13877                     {
13878                       rel[1].r_info = ELF64_R_INFO (r_symndx,
13879                                                     R_PPC64_TPREL16_LO);
13880                       rel[1].r_offset = offset + d_offset;
13881                       rel[1].r_addend = rel->r_addend;
13882                     }
13883                 }
13884               bfd_put_32 (input_bfd, insn1,
13885                           contents + rel->r_offset - d_offset);
13886               if (offset != (bfd_vma) -1)
13887                 bfd_put_32 (input_bfd, insn2, contents + offset);
13888               if ((tls_mask & tls_gd) == 0
13889                   && (tls_gd == 0 || toc_symndx != 0))
13890                 {
13891                   /* We changed the symbol.  Start over in order
13892                      to get h, sym, sec etc. right.  */
13893                   goto again;
13894                 }
13895             }
13896           break;
13897
13898         case R_PPC64_TLSGD:
13899           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
13900             {
13901               unsigned int insn2;
13902               bfd_vma offset = rel->r_offset;
13903
13904               if ((tls_mask & TLS_TPRELGD) != 0)
13905                 {
13906                   /* IE */
13907                   r_type = R_PPC64_NONE;
13908                   insn2 = 0x7c636a14;   /* add 3,3,13 */
13909                 }
13910               else
13911                 {
13912                   /* LE */
13913                   if (toc_symndx != 0)
13914                     {
13915                       r_symndx = toc_symndx;
13916                       rel->r_addend = toc_addend;
13917                     }
13918                   r_type = R_PPC64_TPREL16_LO;
13919                   rel->r_offset = offset + d_offset;
13920                   insn2 = 0x38630000;   /* addi 3,3,0 */
13921                 }
13922               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13923               /* Zap the reloc on the _tls_get_addr call too.  */
13924               BFD_ASSERT (offset == rel[1].r_offset);
13925               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
13926               bfd_put_32 (input_bfd, insn2, contents + offset);
13927               if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0)
13928                 goto again;
13929             }
13930           break;
13931
13932         case R_PPC64_TLSLD:
13933           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
13934             {
13935               unsigned int insn2;
13936               bfd_vma offset = rel->r_offset;
13937
13938               if (toc_symndx)
13939                 sec = local_sections[toc_symndx];
13940               for (r_symndx = 0;
13941                    r_symndx < symtab_hdr->sh_info;
13942                    r_symndx++)
13943                 if (local_sections[r_symndx] == sec)
13944                   break;
13945               if (r_symndx >= symtab_hdr->sh_info)
13946                 r_symndx = STN_UNDEF;
13947               rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
13948               if (r_symndx != STN_UNDEF)
13949                 rel->r_addend -= (local_syms[r_symndx].st_value
13950                                   + sec->output_offset
13951                                   + sec->output_section->vma);
13952
13953               r_type = R_PPC64_TPREL16_LO;
13954               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13955               rel->r_offset = offset + d_offset;
13956               /* Zap the reloc on the _tls_get_addr call too.  */
13957               BFD_ASSERT (offset == rel[1].r_offset);
13958               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
13959               insn2 = 0x38630000;       /* addi 3,3,0 */
13960               bfd_put_32 (input_bfd, insn2, contents + offset);
13961               goto again;
13962             }
13963           break;
13964
13965         case R_PPC64_DTPMOD64:
13966           if (rel + 1 < relend
13967               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
13968               && rel[1].r_offset == rel->r_offset + 8)
13969             {
13970               if ((tls_mask & TLS_GD) == 0)
13971                 {
13972                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
13973                   if ((tls_mask & TLS_TPRELGD) != 0)
13974                     r_type = R_PPC64_TPREL64;
13975                   else
13976                     {
13977                       bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
13978                       r_type = R_PPC64_NONE;
13979                     }
13980                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13981                 }
13982             }
13983           else
13984             {
13985               if ((tls_mask & TLS_LD) == 0)
13986                 {
13987                   bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
13988                   r_type = R_PPC64_NONE;
13989                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13990                 }
13991             }
13992           break;
13993
13994         case R_PPC64_TPREL64:
13995           if ((tls_mask & TLS_TPREL) == 0)
13996             {
13997               r_type = R_PPC64_NONE;
13998               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13999             }
14000           break;
14001
14002         case R_PPC64_ENTRY:
14003           relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
14004           if (!bfd_link_pic (info)
14005               && !info->traditional_format
14006               && relocation + 0x80008000 <= 0xffffffff)
14007             {
14008               unsigned int insn1, insn2;
14009
14010               insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
14011               insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14012               if ((insn1 & ~0xfffc) == LD_R2_0R12
14013                   && insn2 == ADD_R2_R2_R12)
14014                 {
14015                   bfd_put_32 (input_bfd,
14016                               LIS_R2 + PPC_HA (relocation),
14017                               contents + rel->r_offset);
14018                   bfd_put_32 (input_bfd,
14019                               ADDI_R2_R2 + PPC_LO (relocation),
14020                               contents + rel->r_offset + 4);
14021                 }
14022             }
14023           else
14024             {
14025               relocation -= (rel->r_offset
14026                              + input_section->output_offset
14027                              + input_section->output_section->vma);
14028               if (relocation + 0x80008000 <= 0xffffffff)
14029                 {
14030                   unsigned int insn1, insn2;
14031
14032                   insn1 = bfd_get_32 (input_bfd, contents + rel->r_offset);
14033                   insn2 = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
14034                   if ((insn1 & ~0xfffc) == LD_R2_0R12
14035                       && insn2 == ADD_R2_R2_R12)
14036                     {
14037                       bfd_put_32 (input_bfd,
14038                                   ADDIS_R2_R12 + PPC_HA (relocation),
14039                                   contents + rel->r_offset);
14040                       bfd_put_32 (input_bfd,
14041                                   ADDI_R2_R2 + PPC_LO (relocation),
14042                                   contents + rel->r_offset + 4);
14043                     }
14044                 }
14045             }
14046           break;
14047
14048         case R_PPC64_REL16_HA:
14049           /* If we are generating a non-PIC executable, edit
14050              .  0:      addis 2,12,.TOC.-0b@ha
14051              .          addi 2,2,.TOC.-0b@l
14052              used by ELFv2 global entry points to set up r2, to
14053              .          lis 2,.TOC.@ha
14054              .          addi 2,2,.TOC.@l
14055              if .TOC. is in range.  */
14056           if (!bfd_link_pic (info)
14057               && !info->traditional_format
14058               && !htab->opd_abi
14059               && rel->r_addend == d_offset
14060               && h != NULL && &h->elf == htab->elf.hgot
14061               && rel + 1 < relend
14062               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
14063               && rel[1].r_offset == rel->r_offset + 4
14064               && rel[1].r_addend == rel->r_addend + 4
14065               && relocation + 0x80008000 <= 0xffffffff)
14066             {
14067               unsigned int insn1, insn2;
14068               bfd_vma offset = rel->r_offset - d_offset;
14069               insn1 = bfd_get_32 (input_bfd, contents + offset);
14070               insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
14071               if ((insn1 & 0xffff0000) == ADDIS_R2_R12
14072                   && (insn2 & 0xffff0000) == ADDI_R2_R2)
14073                 {
14074                   r_type = R_PPC64_ADDR16_HA;
14075                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
14076                   rel->r_addend -= d_offset;
14077                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_ADDR16_LO);
14078                   rel[1].r_addend -= d_offset + 4;
14079                   bfd_put_32 (input_bfd, LIS_R2, contents + offset);
14080                 }
14081             }
14082           break;
14083         }
14084
14085       /* Handle other relocations that tweak non-addend part of insn.  */
14086       insn = 0;
14087       max_br_offset = 1 << 25;
14088       addend = rel->r_addend;
14089       reloc_dest = DEST_NORMAL;
14090       switch (r_type)
14091         {
14092         default:
14093           break;
14094
14095         case R_PPC64_TOCSAVE:
14096           if (relocation + addend == (rel->r_offset
14097                                       + input_section->output_offset
14098                                       + input_section->output_section->vma)
14099               && tocsave_find (htab, NO_INSERT,
14100                                &local_syms, rel, input_bfd))
14101             {
14102               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
14103               if (insn == NOP
14104                   || insn == CROR_151515 || insn == CROR_313131)
14105                 bfd_put_32 (input_bfd,
14106                             STD_R2_0R1 + STK_TOC (htab),
14107                             contents + rel->r_offset);
14108             }
14109           break;
14110
14111           /* Branch taken prediction relocations.  */
14112         case R_PPC64_ADDR14_BRTAKEN:
14113         case R_PPC64_REL14_BRTAKEN:
14114           insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
14115           /* Fall through.  */
14116
14117           /* Branch not taken prediction relocations.  */
14118         case R_PPC64_ADDR14_BRNTAKEN:
14119         case R_PPC64_REL14_BRNTAKEN:
14120           insn |= bfd_get_32 (input_bfd,
14121                               contents + rel->r_offset) & ~(0x01 << 21);
14122           /* Fall through.  */
14123
14124         case R_PPC64_REL14:
14125           max_br_offset = 1 << 15;
14126           /* Fall through.  */
14127
14128         case R_PPC64_REL24:
14129           /* Calls to functions with a different TOC, such as calls to
14130              shared objects, need to alter the TOC pointer.  This is
14131              done using a linkage stub.  A REL24 branching to these
14132              linkage stubs needs to be followed by a nop, as the nop
14133              will be replaced with an instruction to restore the TOC
14134              base pointer.  */
14135           fdh = h;
14136           if (h != NULL
14137               && h->oh != NULL
14138               && h->oh->is_func_descriptor)
14139             fdh = ppc_follow_link (h->oh);
14140           stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
14141                                            htab);
14142           if (stub_entry != NULL
14143               && (stub_entry->stub_type == ppc_stub_plt_call
14144                   || stub_entry->stub_type == ppc_stub_plt_call_r2save
14145                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
14146                   || stub_entry->stub_type == ppc_stub_long_branch_r2off))
14147             {
14148               bfd_boolean can_plt_call = FALSE;
14149
14150               if (stub_entry->stub_type == ppc_stub_plt_call
14151                   && !htab->opd_abi
14152                   && htab->params->plt_localentry0 != 0
14153                   && is_elfv2_localentry0 (&h->elf))
14154                 {
14155                   /* The function doesn't use or change r2.  */
14156                   can_plt_call = TRUE;
14157                 }
14158
14159               /* All of these stubs may modify r2, so there must be a
14160                  branch and link followed by a nop.  The nop is
14161                  replaced by an insn to restore r2.  */
14162               else if (rel->r_offset + 8 <= input_section->size)
14163                 {
14164                   unsigned long br;
14165
14166                   br = bfd_get_32 (input_bfd,
14167                                    contents + rel->r_offset);
14168                   if ((br & 1) != 0)
14169                     {
14170                       unsigned long nop;
14171
14172                       nop = bfd_get_32 (input_bfd,
14173                                         contents + rel->r_offset + 4);
14174                       if (nop == NOP
14175                           || nop == CROR_151515 || nop == CROR_313131)
14176                         {
14177                           if (h != NULL
14178                               && (h == htab->tls_get_addr_fd
14179                                   || h == htab->tls_get_addr)
14180                               && htab->params->tls_get_addr_opt)
14181                             {
14182                               /* Special stub used, leave nop alone.  */
14183                             }
14184                           else
14185                             bfd_put_32 (input_bfd,
14186                                         LD_R2_0R1 + STK_TOC (htab),
14187                                         contents + rel->r_offset + 4);
14188                           can_plt_call = TRUE;
14189                         }
14190                     }
14191                 }
14192
14193               if (!can_plt_call && h != NULL)
14194                 {
14195                   const char *name = h->elf.root.root.string;
14196
14197                   if (*name == '.')
14198                     ++name;
14199
14200                   if (strncmp (name, "__libc_start_main", 17) == 0
14201                       && (name[17] == 0 || name[17] == '@'))
14202                     {
14203                       /* Allow crt1 branch to go via a toc adjusting
14204                          stub.  Other calls that never return could do
14205                          the same, if we could detect such.  */
14206                       can_plt_call = TRUE;
14207                     }
14208                 }
14209
14210               if (!can_plt_call)
14211                 {
14212                   /* g++ as of 20130507 emits self-calls without a
14213                      following nop.  This is arguably wrong since we
14214                      have conflicting information.  On the one hand a
14215                      global symbol and on the other a local call
14216                      sequence, but don't error for this special case.
14217                      It isn't possible to cheaply verify we have
14218                      exactly such a call.  Allow all calls to the same
14219                      section.  */
14220                   asection *code_sec = sec;
14221
14222                   if (get_opd_info (sec) != NULL)
14223                     {
14224                       bfd_vma off = (relocation + addend
14225                                      - sec->output_section->vma
14226                                      - sec->output_offset);
14227
14228                       opd_entry_value (sec, off, &code_sec, NULL, FALSE);
14229                     }
14230                   if (code_sec == input_section)
14231                     can_plt_call = TRUE;
14232                 }
14233
14234               if (!can_plt_call)
14235                 {
14236                   if (stub_entry->stub_type == ppc_stub_plt_call
14237                       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
14238                     info->callbacks->einfo
14239                       /* xgettext:c-format */
14240                       (_("%H: call to `%T' lacks nop, can't restore toc; "
14241                          "recompile with -fPIC\n"),
14242                        input_bfd, input_section, rel->r_offset, sym_name);
14243                   else
14244                     info->callbacks->einfo
14245                       /* xgettext:c-format */
14246                       (_("%H: call to `%T' lacks nop, can't restore toc; "
14247                          "(-mcmodel=small toc adjust stub)\n"),
14248                        input_bfd, input_section, rel->r_offset, sym_name);
14249
14250                   bfd_set_error (bfd_error_bad_value);
14251                   ret = FALSE;
14252                 }
14253
14254               if (can_plt_call
14255                   && (stub_entry->stub_type == ppc_stub_plt_call
14256                       || stub_entry->stub_type == ppc_stub_plt_call_r2save))
14257                 unresolved_reloc = FALSE;
14258             }
14259
14260           if ((stub_entry == NULL
14261                || stub_entry->stub_type == ppc_stub_long_branch
14262                || stub_entry->stub_type == ppc_stub_plt_branch)
14263               && get_opd_info (sec) != NULL)
14264             {
14265               /* The branch destination is the value of the opd entry. */
14266               bfd_vma off = (relocation + addend
14267                              - sec->output_section->vma
14268                              - sec->output_offset);
14269               bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
14270               if (dest != (bfd_vma) -1)
14271                 {
14272                   relocation = dest;
14273                   addend = 0;
14274                   reloc_dest = DEST_OPD;
14275                 }
14276             }
14277
14278           /* If the branch is out of reach we ought to have a long
14279              branch stub.  */
14280           from = (rel->r_offset
14281                   + input_section->output_offset
14282                   + input_section->output_section->vma);
14283
14284           relocation += PPC64_LOCAL_ENTRY_OFFSET (fdh
14285                                                   ? fdh->elf.other
14286                                                   : sym->st_other);
14287
14288           if (stub_entry != NULL
14289               && (stub_entry->stub_type == ppc_stub_long_branch
14290                   || stub_entry->stub_type == ppc_stub_plt_branch)
14291               && (r_type == R_PPC64_ADDR14_BRTAKEN
14292                   || r_type == R_PPC64_ADDR14_BRNTAKEN
14293                   || (relocation + addend - from + max_br_offset
14294                       < 2 * max_br_offset)))
14295             /* Don't use the stub if this branch is in range.  */
14296             stub_entry = NULL;
14297
14298           if (stub_entry != NULL)
14299             {
14300               /* Munge up the value and addend so that we call the stub
14301                  rather than the procedure directly.  */
14302               asection *stub_sec = stub_entry->group->stub_sec;
14303
14304               if (stub_entry->stub_type == ppc_stub_save_res)
14305                 relocation += (stub_sec->output_offset
14306                                + stub_sec->output_section->vma
14307                                + stub_sec->size - htab->sfpr->size
14308                                - htab->sfpr->output_offset
14309                                - htab->sfpr->output_section->vma);
14310               else
14311                 relocation = (stub_entry->stub_offset
14312                               + stub_sec->output_offset
14313                               + stub_sec->output_section->vma);
14314               addend = 0;
14315               reloc_dest = DEST_STUB;
14316
14317               if ((stub_entry->stub_type == ppc_stub_plt_call
14318                    || stub_entry->stub_type == ppc_stub_plt_call_r2save)
14319                   && (ALWAYS_EMIT_R2SAVE
14320                       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
14321                   && rel + 1 < relend
14322                   && rel[1].r_offset == rel->r_offset + 4
14323                   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
14324                 relocation += 4;
14325             }
14326
14327           if (insn != 0)
14328             {
14329               if (is_isa_v2)
14330                 {
14331                   /* Set 'a' bit.  This is 0b00010 in BO field for branch
14332                      on CR(BI) insns (BO == 001at or 011at), and 0b01000
14333                      for branch on CTR insns (BO == 1a00t or 1a01t).  */
14334                   if ((insn & (0x14 << 21)) == (0x04 << 21))
14335                     insn |= 0x02 << 21;
14336                   else if ((insn & (0x14 << 21)) == (0x10 << 21))
14337                     insn |= 0x08 << 21;
14338                   else
14339                     break;
14340                 }
14341               else
14342                 {
14343                   /* Invert 'y' bit if not the default.  */
14344                   if ((bfd_signed_vma) (relocation + addend - from) < 0)
14345                     insn ^= 0x01 << 21;
14346                 }
14347
14348               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
14349             }
14350
14351           /* NOP out calls to undefined weak functions.
14352              We can thus call a weak function without first
14353              checking whether the function is defined.  */
14354           else if (h != NULL
14355                    && h->elf.root.type == bfd_link_hash_undefweak
14356                    && h->elf.dynindx == -1
14357                    && r_type == R_PPC64_REL24
14358                    && relocation == 0
14359                    && addend == 0)
14360             {
14361               bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
14362               goto copy_reloc;
14363             }
14364           break;
14365         }
14366
14367       /* Set `addend'.  */
14368       tls_type = 0;
14369       switch (r_type)
14370         {
14371         default:
14372           info->callbacks->einfo
14373             /* xgettext:c-format */
14374             (_("%P: %B: unknown relocation type %d for `%T'\n"),
14375              input_bfd, (int) r_type, sym_name);
14376
14377           bfd_set_error (bfd_error_bad_value);
14378           ret = FALSE;
14379           goto copy_reloc;
14380
14381         case R_PPC64_NONE:
14382         case R_PPC64_TLS:
14383         case R_PPC64_TLSGD:
14384         case R_PPC64_TLSLD:
14385         case R_PPC64_TOCSAVE:
14386         case R_PPC64_GNU_VTINHERIT:
14387         case R_PPC64_GNU_VTENTRY:
14388         case R_PPC64_ENTRY:
14389           goto copy_reloc;
14390
14391           /* GOT16 relocations.  Like an ADDR16 using the symbol's
14392              address in the GOT as relocation value instead of the
14393              symbol's value itself.  Also, create a GOT entry for the
14394              symbol and put the symbol value there.  */
14395         case R_PPC64_GOT_TLSGD16:
14396         case R_PPC64_GOT_TLSGD16_LO:
14397         case R_PPC64_GOT_TLSGD16_HI:
14398         case R_PPC64_GOT_TLSGD16_HA:
14399           tls_type = TLS_TLS | TLS_GD;
14400           goto dogot;
14401
14402         case R_PPC64_GOT_TLSLD16:
14403         case R_PPC64_GOT_TLSLD16_LO:
14404         case R_PPC64_GOT_TLSLD16_HI:
14405         case R_PPC64_GOT_TLSLD16_HA:
14406           tls_type = TLS_TLS | TLS_LD;
14407           goto dogot;
14408
14409         case R_PPC64_GOT_TPREL16_DS:
14410         case R_PPC64_GOT_TPREL16_LO_DS:
14411         case R_PPC64_GOT_TPREL16_HI:
14412         case R_PPC64_GOT_TPREL16_HA:
14413           tls_type = TLS_TLS | TLS_TPREL;
14414           goto dogot;
14415
14416         case R_PPC64_GOT_DTPREL16_DS:
14417         case R_PPC64_GOT_DTPREL16_LO_DS:
14418         case R_PPC64_GOT_DTPREL16_HI:
14419         case R_PPC64_GOT_DTPREL16_HA:
14420           tls_type = TLS_TLS | TLS_DTPREL;
14421           goto dogot;
14422
14423         case R_PPC64_GOT16:
14424         case R_PPC64_GOT16_LO:
14425         case R_PPC64_GOT16_HI:
14426         case R_PPC64_GOT16_HA:
14427         case R_PPC64_GOT16_DS:
14428         case R_PPC64_GOT16_LO_DS:
14429         dogot:
14430           {
14431             /* Relocation is to the entry for this symbol in the global
14432                offset table.  */
14433             asection *got;
14434             bfd_vma *offp;
14435             bfd_vma off;
14436             unsigned long indx = 0;
14437             struct got_entry *ent;
14438
14439             if (tls_type == (TLS_TLS | TLS_LD)
14440                 && (h == NULL
14441                     || !h->elf.def_dynamic))
14442               ent = ppc64_tlsld_got (input_bfd);
14443             else
14444               {
14445                 if (h != NULL)
14446                   {
14447                     if (!htab->elf.dynamic_sections_created
14448                         || h->elf.dynindx == -1
14449                         || SYMBOL_REFERENCES_LOCAL (info, &h->elf)
14450                         || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
14451                       /* This is actually a static link, or it is a
14452                          -Bsymbolic link and the symbol is defined
14453                          locally, or the symbol was forced to be local
14454                          because of a version file.  */
14455                       ;
14456                     else
14457                       {
14458                         indx = h->elf.dynindx;
14459                         unresolved_reloc = FALSE;
14460                       }
14461                     ent = h->elf.got.glist;
14462                   }
14463                 else
14464                   {
14465                     if (local_got_ents == NULL)
14466                       abort ();
14467                     ent = local_got_ents[r_symndx];
14468                   }
14469
14470                 for (; ent != NULL; ent = ent->next)
14471                   if (ent->addend == orig_rel.r_addend
14472                       && ent->owner == input_bfd
14473                       && ent->tls_type == tls_type)
14474                     break;
14475               }
14476
14477             if (ent == NULL)
14478               abort ();
14479             if (ent->is_indirect)
14480               ent = ent->got.ent;
14481             offp = &ent->got.offset;
14482             got = ppc64_elf_tdata (ent->owner)->got;
14483             if (got == NULL)
14484               abort ();
14485
14486             /* The offset must always be a multiple of 8.  We use the
14487                least significant bit to record whether we have already
14488                processed this entry.  */
14489             off = *offp;
14490             if ((off & 1) != 0)
14491               off &= ~1;
14492             else
14493               {
14494                 /* Generate relocs for the dynamic linker, except in
14495                    the case of TLSLD where we'll use one entry per
14496                    module.  */
14497                 asection *relgot;
14498                 bfd_boolean ifunc;
14499
14500                 *offp = off | 1;
14501                 relgot = NULL;
14502                 ifunc = (h != NULL
14503                          ? h->elf.type == STT_GNU_IFUNC
14504                          : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
14505                 if (ifunc)
14506                   {
14507                     relgot = htab->elf.irelplt;
14508                     if (indx == 0)
14509                       htab->local_ifunc_resolver = 1;
14510                     else if (is_static_defined (&h->elf))
14511                       htab->maybe_local_ifunc_resolver = 1;
14512                   }
14513                 else if (indx != 0
14514                          || (bfd_link_pic (info)
14515                              && (h == NULL
14516                                  || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf)
14517                                  || (tls_type == (TLS_TLS | TLS_LD)
14518                                      && !h->elf.def_dynamic))
14519                              && !(tls_type == (TLS_TLS | TLS_TPREL)
14520                                   && bfd_link_executable (info)
14521                                   && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
14522                   relgot = ppc64_elf_tdata (ent->owner)->relgot;
14523                 if (relgot != NULL)
14524                   {
14525                     outrel.r_offset = (got->output_section->vma
14526                                        + got->output_offset
14527                                        + off);
14528                     outrel.r_addend = addend;
14529                     if (tls_type & (TLS_LD | TLS_GD))
14530                       {
14531                         outrel.r_addend = 0;
14532                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
14533                         if (tls_type == (TLS_TLS | TLS_GD))
14534                           {
14535                             loc = relgot->contents;
14536                             loc += (relgot->reloc_count++
14537                                     * sizeof (Elf64_External_Rela));
14538                             bfd_elf64_swap_reloca_out (output_bfd,
14539                                                        &outrel, loc);
14540                             outrel.r_offset += 8;
14541                             outrel.r_addend = addend;
14542                             outrel.r_info
14543                               = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
14544                           }
14545                       }
14546                     else if (tls_type == (TLS_TLS | TLS_DTPREL))
14547                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
14548                     else if (tls_type == (TLS_TLS | TLS_TPREL))
14549                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
14550                     else if (indx != 0)
14551                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
14552                     else
14553                       {
14554                         if (ifunc)
14555                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14556                         else
14557                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
14558
14559                         /* Write the .got section contents for the sake
14560                            of prelink.  */
14561                         loc = got->contents + off;
14562                         bfd_put_64 (output_bfd, outrel.r_addend + relocation,
14563                                     loc);
14564                       }
14565
14566                     if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
14567                       {
14568                         outrel.r_addend += relocation;
14569                         if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
14570                           {
14571                             if (htab->elf.tls_sec == NULL)
14572                               outrel.r_addend = 0;
14573                             else
14574                               outrel.r_addend -= htab->elf.tls_sec->vma;
14575                           }
14576                       }
14577                     loc = relgot->contents;
14578                     loc += (relgot->reloc_count++
14579                             * sizeof (Elf64_External_Rela));
14580                     bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
14581                   }
14582
14583                 /* Init the .got section contents here if we're not
14584                    emitting a reloc.  */
14585                 else
14586                   {
14587                     relocation += addend;
14588                     if (tls_type != 0)
14589                       {
14590                         if (htab->elf.tls_sec == NULL)
14591                           relocation = 0;
14592                         else
14593                           {
14594                             if (tls_type & TLS_LD)
14595                               relocation = 0;
14596                             else
14597                               relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
14598                             if (tls_type & TLS_TPREL)
14599                               relocation += DTP_OFFSET - TP_OFFSET;
14600                           }
14601
14602                         if (tls_type & (TLS_GD | TLS_LD))
14603                           {
14604                             bfd_put_64 (output_bfd, relocation,
14605                                         got->contents + off + 8);
14606                             relocation = 1;
14607                           }
14608                       }
14609                     bfd_put_64 (output_bfd, relocation,
14610                                 got->contents + off);
14611                   }
14612               }
14613
14614             if (off >= (bfd_vma) -2)
14615               abort ();
14616
14617             relocation = got->output_section->vma + got->output_offset + off;
14618             addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
14619           }
14620           break;
14621
14622         case R_PPC64_PLT16_HA:
14623         case R_PPC64_PLT16_HI:
14624         case R_PPC64_PLT16_LO:
14625         case R_PPC64_PLT32:
14626         case R_PPC64_PLT64:
14627           /* Relocation is to the entry for this symbol in the
14628              procedure linkage table.  */
14629           {
14630             struct plt_entry **plt_list = NULL;
14631             if (h != NULL)
14632               plt_list = &h->elf.plt.plist;
14633             else if (local_got_ents != NULL)
14634               {
14635                 struct plt_entry **local_plt = (struct plt_entry **)
14636                   (local_got_ents + symtab_hdr->sh_info);
14637                 unsigned char *local_got_tls_masks = (unsigned char *)
14638                   (local_plt + symtab_hdr->sh_info);
14639                 if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0)
14640                   plt_list = local_plt + r_symndx;
14641               }
14642             if (plt_list)
14643               {
14644                 struct plt_entry *ent;
14645
14646                 for (ent = *plt_list; ent != NULL; ent = ent->next)
14647                   if (ent->plt.offset != (bfd_vma) -1
14648                       && ent->addend == orig_rel.r_addend)
14649                     {
14650                       asection *plt;
14651
14652                       plt = htab->elf.splt;
14653                       if (!htab->elf.dynamic_sections_created
14654                           || h == NULL
14655                           || h->elf.dynindx == -1)
14656                         plt = htab->elf.iplt;
14657                       relocation = (plt->output_section->vma
14658                                     + plt->output_offset
14659                                     + ent->plt.offset);
14660                       addend = 0;
14661                       unresolved_reloc = FALSE;
14662                       break;
14663                     }
14664               }
14665           }
14666           break;
14667
14668         case R_PPC64_TOC:
14669           /* Relocation value is TOC base.  */
14670           relocation = TOCstart;
14671           if (r_symndx == STN_UNDEF)
14672             relocation += htab->sec_info[input_section->id].toc_off;
14673           else if (unresolved_reloc)
14674             ;
14675           else if (sec != NULL && sec->id < htab->sec_info_arr_size)
14676             relocation += htab->sec_info[sec->id].toc_off;
14677           else
14678             unresolved_reloc = TRUE;
14679           goto dodyn;
14680
14681           /* TOC16 relocs.  We want the offset relative to the TOC base,
14682              which is the address of the start of the TOC plus 0x8000.
14683              The TOC consists of sections .got, .toc, .tocbss, and .plt,
14684              in this order.  */
14685         case R_PPC64_TOC16:
14686         case R_PPC64_TOC16_LO:
14687         case R_PPC64_TOC16_HI:
14688         case R_PPC64_TOC16_DS:
14689         case R_PPC64_TOC16_LO_DS:
14690         case R_PPC64_TOC16_HA:
14691           addend -= TOCstart + htab->sec_info[input_section->id].toc_off;
14692           break;
14693
14694           /* Relocate against the beginning of the section.  */
14695         case R_PPC64_SECTOFF:
14696         case R_PPC64_SECTOFF_LO:
14697         case R_PPC64_SECTOFF_HI:
14698         case R_PPC64_SECTOFF_DS:
14699         case R_PPC64_SECTOFF_LO_DS:
14700         case R_PPC64_SECTOFF_HA:
14701           if (sec != NULL)
14702             addend -= sec->output_section->vma;
14703           break;
14704
14705         case R_PPC64_REL16:
14706         case R_PPC64_REL16_LO:
14707         case R_PPC64_REL16_HI:
14708         case R_PPC64_REL16_HA:
14709         case R_PPC64_REL16DX_HA:
14710           break;
14711
14712         case R_PPC64_REL14:
14713         case R_PPC64_REL14_BRNTAKEN:
14714         case R_PPC64_REL14_BRTAKEN:
14715         case R_PPC64_REL24:
14716           break;
14717
14718         case R_PPC64_TPREL16:
14719         case R_PPC64_TPREL16_LO:
14720         case R_PPC64_TPREL16_HI:
14721         case R_PPC64_TPREL16_HA:
14722         case R_PPC64_TPREL16_DS:
14723         case R_PPC64_TPREL16_LO_DS:
14724         case R_PPC64_TPREL16_HIGH:
14725         case R_PPC64_TPREL16_HIGHA:
14726         case R_PPC64_TPREL16_HIGHER:
14727         case R_PPC64_TPREL16_HIGHERA:
14728         case R_PPC64_TPREL16_HIGHEST:
14729         case R_PPC64_TPREL16_HIGHESTA:
14730           if (h != NULL
14731               && h->elf.root.type == bfd_link_hash_undefweak
14732               && h->elf.dynindx == -1)
14733             {
14734               /* Make this relocation against an undefined weak symbol
14735                  resolve to zero.  This is really just a tweak, since
14736                  code using weak externs ought to check that they are
14737                  defined before using them.  */
14738               bfd_byte *p = contents + rel->r_offset - d_offset;
14739
14740               insn = bfd_get_32 (input_bfd, p);
14741               insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
14742               if (insn != 0)
14743                 bfd_put_32 (input_bfd, insn, p);
14744               break;
14745             }
14746           if (htab->elf.tls_sec != NULL)
14747             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
14748           /* The TPREL16 relocs shouldn't really be used in shared
14749              libs or with non-local symbols as that will result in
14750              DT_TEXTREL being set, but support them anyway.  */
14751           goto dodyn;
14752
14753         case R_PPC64_DTPREL16:
14754         case R_PPC64_DTPREL16_LO:
14755         case R_PPC64_DTPREL16_HI:
14756         case R_PPC64_DTPREL16_HA:
14757         case R_PPC64_DTPREL16_DS:
14758         case R_PPC64_DTPREL16_LO_DS:
14759         case R_PPC64_DTPREL16_HIGH:
14760         case R_PPC64_DTPREL16_HIGHA:
14761         case R_PPC64_DTPREL16_HIGHER:
14762         case R_PPC64_DTPREL16_HIGHERA:
14763         case R_PPC64_DTPREL16_HIGHEST:
14764         case R_PPC64_DTPREL16_HIGHESTA:
14765           if (htab->elf.tls_sec != NULL)
14766             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
14767           break;
14768
14769         case R_PPC64_ADDR64_LOCAL:
14770           addend += PPC64_LOCAL_ENTRY_OFFSET (h != NULL
14771                                               ? h->elf.other
14772                                               : sym->st_other);
14773           break;
14774
14775         case R_PPC64_DTPMOD64:
14776           relocation = 1;
14777           addend = 0;
14778           goto dodyn;
14779
14780         case R_PPC64_TPREL64:
14781           if (htab->elf.tls_sec != NULL)
14782             addend -= htab->elf.tls_sec->vma + TP_OFFSET;
14783           goto dodyn;
14784
14785         case R_PPC64_DTPREL64:
14786           if (htab->elf.tls_sec != NULL)
14787             addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
14788           /* Fall through.  */
14789
14790           /* Relocations that may need to be propagated if this is a
14791              dynamic object.  */
14792         case R_PPC64_REL30:
14793         case R_PPC64_REL32:
14794         case R_PPC64_REL64:
14795         case R_PPC64_ADDR14:
14796         case R_PPC64_ADDR14_BRNTAKEN:
14797         case R_PPC64_ADDR14_BRTAKEN:
14798         case R_PPC64_ADDR16:
14799         case R_PPC64_ADDR16_DS:
14800         case R_PPC64_ADDR16_HA:
14801         case R_PPC64_ADDR16_HI:
14802         case R_PPC64_ADDR16_HIGH:
14803         case R_PPC64_ADDR16_HIGHA:
14804         case R_PPC64_ADDR16_HIGHER:
14805         case R_PPC64_ADDR16_HIGHERA:
14806         case R_PPC64_ADDR16_HIGHEST:
14807         case R_PPC64_ADDR16_HIGHESTA:
14808         case R_PPC64_ADDR16_LO:
14809         case R_PPC64_ADDR16_LO_DS:
14810         case R_PPC64_ADDR24:
14811         case R_PPC64_ADDR32:
14812         case R_PPC64_ADDR64:
14813         case R_PPC64_UADDR16:
14814         case R_PPC64_UADDR32:
14815         case R_PPC64_UADDR64:
14816         dodyn:
14817           if ((input_section->flags & SEC_ALLOC) == 0)
14818             break;
14819
14820           if (NO_OPD_RELOCS && is_opd)
14821             break;
14822
14823           if (bfd_link_pic (info)
14824               ? ((h == NULL
14825                   || h->dyn_relocs != NULL)
14826                  && ((h != NULL && pc_dynrelocs (h))
14827                      || must_be_dyn_reloc (info, r_type)))
14828               : (h != NULL
14829                  ? h->dyn_relocs != NULL
14830                  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
14831             {
14832               bfd_boolean skip, relocate;
14833               asection *sreloc;
14834               bfd_vma out_off;
14835               long indx = 0;
14836
14837               /* When generating a dynamic object, these relocations
14838                  are copied into the output file to be resolved at run
14839                  time.  */
14840
14841               skip = FALSE;
14842               relocate = FALSE;
14843
14844               out_off = _bfd_elf_section_offset (output_bfd, info,
14845                                                  input_section, rel->r_offset);
14846               if (out_off == (bfd_vma) -1)
14847                 skip = TRUE;
14848               else if (out_off == (bfd_vma) -2)
14849                 skip = TRUE, relocate = TRUE;
14850               out_off += (input_section->output_section->vma
14851                           + input_section->output_offset);
14852               outrel.r_offset = out_off;
14853               outrel.r_addend = rel->r_addend;
14854
14855               /* Optimize unaligned reloc use.  */
14856               if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
14857                   || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
14858                 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
14859               else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
14860                        || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
14861                 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
14862               else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
14863                        || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
14864                 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
14865
14866               if (skip)
14867                 memset (&outrel, 0, sizeof outrel);
14868               else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
14869                        && !is_opd
14870                        && r_type != R_PPC64_TOC)
14871                 {
14872                   indx = h->elf.dynindx;
14873                   BFD_ASSERT (indx != -1);
14874                   outrel.r_info = ELF64_R_INFO (indx, r_type);
14875                 }
14876               else
14877                 {
14878                   /* This symbol is local, or marked to become local,
14879                      or this is an opd section reloc which must point
14880                      at a local function.  */
14881                   outrel.r_addend += relocation;
14882                   if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
14883                     {
14884                       if (is_opd && h != NULL)
14885                         {
14886                           /* Lie about opd entries.  This case occurs
14887                              when building shared libraries and we
14888                              reference a function in another shared
14889                              lib.  The same thing happens for a weak
14890                              definition in an application that's
14891                              overridden by a strong definition in a
14892                              shared lib.  (I believe this is a generic
14893                              bug in binutils handling of weak syms.)
14894                              In these cases we won't use the opd
14895                              entry in this lib.  */
14896                           unresolved_reloc = FALSE;
14897                         }
14898                       if (!is_opd
14899                           && r_type == R_PPC64_ADDR64
14900                           && (h != NULL
14901                               ? h->elf.type == STT_GNU_IFUNC
14902                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
14903                         outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14904                       else
14905                         {
14906                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
14907
14908                           /* We need to relocate .opd contents for ld.so.
14909                              Prelink also wants simple and consistent rules
14910                              for relocs.  This make all RELATIVE relocs have
14911                              *r_offset equal to r_addend.  */
14912                           relocate = TRUE;
14913                         }
14914                     }
14915                   else
14916                     {
14917                       if (h != NULL
14918                           ? h->elf.type == STT_GNU_IFUNC
14919                           : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14920                         {
14921                           info->callbacks->einfo
14922                             /* xgettext:c-format */
14923                             (_("%H: %s for indirect "
14924                                "function `%T' unsupported\n"),
14925                              input_bfd, input_section, rel->r_offset,
14926                              ppc64_elf_howto_table[r_type]->name,
14927                              sym_name);
14928                           ret = FALSE;
14929                         }
14930                       else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
14931                         ;
14932                       else if (sec == NULL || sec->owner == NULL)
14933                         {
14934                           bfd_set_error (bfd_error_bad_value);
14935                           return FALSE;
14936                         }
14937                       else
14938                         {
14939                           asection *osec;
14940
14941                           osec = sec->output_section;
14942                           indx = elf_section_data (osec)->dynindx;
14943
14944                           if (indx == 0)
14945                             {
14946                               if ((osec->flags & SEC_READONLY) == 0
14947                                   && htab->elf.data_index_section != NULL)
14948                                 osec = htab->elf.data_index_section;
14949                               else
14950                                 osec = htab->elf.text_index_section;
14951                               indx = elf_section_data (osec)->dynindx;
14952                             }
14953                           BFD_ASSERT (indx != 0);
14954
14955                           /* We are turning this relocation into one
14956                              against a section symbol, so subtract out
14957                              the output section's address but not the
14958                              offset of the input section in the output
14959                              section.  */
14960                           outrel.r_addend -= osec->vma;
14961                         }
14962
14963                       outrel.r_info = ELF64_R_INFO (indx, r_type);
14964                     }
14965                 }
14966
14967               sreloc = elf_section_data (input_section)->sreloc;
14968               if (h != NULL
14969                   ? h->elf.type == STT_GNU_IFUNC
14970                   : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14971                 {
14972                   sreloc = htab->elf.irelplt;
14973                   if (indx == 0)
14974                     htab->local_ifunc_resolver = 1;
14975                   else if (is_static_defined (&h->elf))
14976                     htab->maybe_local_ifunc_resolver = 1;
14977                 }
14978               if (sreloc == NULL)
14979                 abort ();
14980
14981               if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
14982                   >= sreloc->size)
14983                 abort ();
14984               loc = sreloc->contents;
14985               loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
14986               bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
14987
14988               /* If this reloc is against an external symbol, it will
14989                  be computed at runtime, so there's no need to do
14990                  anything now.  However, for the sake of prelink ensure
14991                  that the section contents are a known value.  */
14992               if (! relocate)
14993                 {
14994                   unresolved_reloc = FALSE;
14995                   /* The value chosen here is quite arbitrary as ld.so
14996                      ignores section contents except for the special
14997                      case of .opd where the contents might be accessed
14998                      before relocation.  Choose zero, as that won't
14999                      cause reloc overflow.  */
15000                   relocation = 0;
15001                   addend = 0;
15002                   /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
15003                      to improve backward compatibility with older
15004                      versions of ld.  */
15005                   if (r_type == R_PPC64_ADDR64)
15006                     addend = outrel.r_addend;
15007                   /* Adjust pc_relative relocs to have zero in *r_offset.  */
15008                   else if (ppc64_elf_howto_table[r_type]->pc_relative)
15009                     addend = outrel.r_offset;
15010                 }
15011             }
15012           break;
15013
15014         case R_PPC64_COPY:
15015         case R_PPC64_GLOB_DAT:
15016         case R_PPC64_JMP_SLOT:
15017         case R_PPC64_JMP_IREL:
15018         case R_PPC64_RELATIVE:
15019           /* We shouldn't ever see these dynamic relocs in relocatable
15020              files.  */
15021           /* Fall through.  */
15022
15023         case R_PPC64_PLTGOT16:
15024         case R_PPC64_PLTGOT16_DS:
15025         case R_PPC64_PLTGOT16_HA:
15026         case R_PPC64_PLTGOT16_HI:
15027         case R_PPC64_PLTGOT16_LO:
15028         case R_PPC64_PLTGOT16_LO_DS:
15029         case R_PPC64_PLTREL32:
15030         case R_PPC64_PLTREL64:
15031           /* These ones haven't been implemented yet.  */
15032
15033           info->callbacks->einfo
15034             /* xgettext:c-format */
15035             (_("%P: %B: %s is not supported for `%T'\n"),
15036              input_bfd,
15037              ppc64_elf_howto_table[r_type]->name, sym_name);
15038
15039           bfd_set_error (bfd_error_invalid_operation);
15040           ret = FALSE;
15041           goto copy_reloc;
15042         }
15043
15044       /* Multi-instruction sequences that access the TOC can be
15045          optimized, eg. addis ra,r2,0; addi rb,ra,x;
15046          to             nop;           addi rb,r2,x;  */
15047       howto = ppc64_elf_howto_table[(int) r_type];
15048       switch (r_type)
15049         {
15050         default:
15051           break;
15052
15053         case R_PPC64_GOT_TLSLD16_HI:
15054         case R_PPC64_GOT_TLSGD16_HI:
15055         case R_PPC64_GOT_TPREL16_HI:
15056         case R_PPC64_GOT_DTPREL16_HI:
15057         case R_PPC64_GOT16_HI:
15058         case R_PPC64_TOC16_HI:
15059           /* These relocs would only be useful if building up an
15060              offset to later add to r2, perhaps in an indexed
15061              addressing mode instruction.  Don't try to optimize.
15062              Unfortunately, the possibility of someone building up an
15063              offset like this or even with the HA relocs, means that
15064              we need to check the high insn when optimizing the low
15065              insn.  */
15066           break;
15067
15068         case R_PPC64_GOT_TLSLD16_HA:
15069         case R_PPC64_GOT_TLSGD16_HA:
15070         case R_PPC64_GOT_TPREL16_HA:
15071         case R_PPC64_GOT_DTPREL16_HA:
15072         case R_PPC64_GOT16_HA:
15073         case R_PPC64_TOC16_HA:
15074           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
15075               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
15076             {
15077               bfd_byte *p = contents + (rel->r_offset & ~3);
15078               bfd_put_32 (input_bfd, NOP, p);
15079             }
15080           break;
15081
15082         case R_PPC64_GOT_TLSLD16_LO:
15083         case R_PPC64_GOT_TLSGD16_LO:
15084         case R_PPC64_GOT_TPREL16_LO_DS:
15085         case R_PPC64_GOT_DTPREL16_LO_DS:
15086         case R_PPC64_GOT16_LO:
15087         case R_PPC64_GOT16_LO_DS:
15088         case R_PPC64_TOC16_LO:
15089         case R_PPC64_TOC16_LO_DS:
15090           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
15091               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
15092             {
15093               bfd_byte *p = contents + (rel->r_offset & ~3);
15094               insn = bfd_get_32 (input_bfd, p);
15095               if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
15096                 {
15097                   /* Transform addic to addi when we change reg.  */
15098                   insn &= ~((0x3f << 26) | (0x1f << 16));
15099                   insn |= (14u << 26) | (2 << 16);
15100                 }
15101               else
15102                 {
15103                   insn &= ~(0x1f << 16);
15104                   insn |= 2 << 16;
15105                 }
15106               bfd_put_32 (input_bfd, insn, p);
15107             }
15108           break;
15109
15110         case R_PPC64_TPREL16_HA:
15111           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
15112             {
15113               bfd_byte *p = contents + (rel->r_offset & ~3);
15114               insn = bfd_get_32 (input_bfd, p);
15115               if ((insn & ((0x3f << 26) | 0x1f << 16))
15116                   != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
15117                 /* xgettext:c-format */
15118                 info->callbacks->minfo
15119                   (_("%H: warning: %s unexpected insn %#x.\n"),
15120                    input_bfd, input_section, rel->r_offset, howto->name, insn);
15121               else
15122                 bfd_put_32 (input_bfd, NOP, p);
15123             }
15124           break;
15125
15126         case R_PPC64_TPREL16_LO:
15127         case R_PPC64_TPREL16_LO_DS:
15128           if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
15129             {
15130               bfd_byte *p = contents + (rel->r_offset & ~3);
15131               insn = bfd_get_32 (input_bfd, p);
15132               insn &= ~(0x1f << 16);
15133               insn |= 13 << 16;
15134               bfd_put_32 (input_bfd, insn, p);
15135             }
15136           break;
15137         }
15138
15139       /* Do any further special processing.  */
15140       switch (r_type)
15141         {
15142         default:
15143           break;
15144
15145         case R_PPC64_REL16_HA:
15146         case R_PPC64_REL16DX_HA:
15147         case R_PPC64_ADDR16_HA:
15148         case R_PPC64_ADDR16_HIGHA:
15149         case R_PPC64_ADDR16_HIGHERA:
15150         case R_PPC64_ADDR16_HIGHESTA:
15151         case R_PPC64_TOC16_HA:
15152         case R_PPC64_SECTOFF_HA:
15153         case R_PPC64_TPREL16_HA:
15154         case R_PPC64_TPREL16_HIGHA:
15155         case R_PPC64_TPREL16_HIGHERA:
15156         case R_PPC64_TPREL16_HIGHESTA:
15157         case R_PPC64_DTPREL16_HA:
15158         case R_PPC64_DTPREL16_HIGHA:
15159         case R_PPC64_DTPREL16_HIGHERA:
15160         case R_PPC64_DTPREL16_HIGHESTA:
15161           /* It's just possible that this symbol is a weak symbol
15162              that's not actually defined anywhere. In that case,
15163              'sec' would be NULL, and we should leave the symbol
15164              alone (it will be set to zero elsewhere in the link).  */
15165           if (sec == NULL)
15166             break;
15167           /* Fall through.  */
15168
15169         case R_PPC64_GOT16_HA:
15170         case R_PPC64_PLTGOT16_HA:
15171         case R_PPC64_PLT16_HA:
15172         case R_PPC64_GOT_TLSGD16_HA:
15173         case R_PPC64_GOT_TLSLD16_HA:
15174         case R_PPC64_GOT_TPREL16_HA:
15175         case R_PPC64_GOT_DTPREL16_HA:
15176           /* Add 0x10000 if sign bit in 0:15 is set.
15177              Bits 0:15 are not used.  */
15178           addend += 0x8000;
15179           break;
15180
15181         case R_PPC64_ADDR16_DS:
15182         case R_PPC64_ADDR16_LO_DS:
15183         case R_PPC64_GOT16_DS:
15184         case R_PPC64_GOT16_LO_DS:
15185         case R_PPC64_PLT16_LO_DS:
15186         case R_PPC64_SECTOFF_DS:
15187         case R_PPC64_SECTOFF_LO_DS:
15188         case R_PPC64_TOC16_DS:
15189         case R_PPC64_TOC16_LO_DS:
15190         case R_PPC64_PLTGOT16_DS:
15191         case R_PPC64_PLTGOT16_LO_DS:
15192         case R_PPC64_GOT_TPREL16_DS:
15193         case R_PPC64_GOT_TPREL16_LO_DS:
15194         case R_PPC64_GOT_DTPREL16_DS:
15195         case R_PPC64_GOT_DTPREL16_LO_DS:
15196         case R_PPC64_TPREL16_DS:
15197         case R_PPC64_TPREL16_LO_DS:
15198         case R_PPC64_DTPREL16_DS:
15199         case R_PPC64_DTPREL16_LO_DS:
15200           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15201           mask = 3;
15202           /* If this reloc is against an lq, lxv, or stxv insn, then
15203              the value must be a multiple of 16.  This is somewhat of
15204              a hack, but the "correct" way to do this by defining _DQ
15205              forms of all the _DS relocs bloats all reloc switches in
15206              this file.  It doesn't make much sense to use these
15207              relocs in data, so testing the insn should be safe.  */
15208           if ((insn & (0x3f << 26)) == (56u << 26)
15209               || ((insn & (0x3f << 26)) == (61u << 26) && (insn & 3) == 1))
15210             mask = 15;
15211           relocation += addend;
15212           addend = insn & (mask ^ 3);
15213           if ((relocation & mask) != 0)
15214             {
15215               relocation ^= relocation & mask;
15216               info->callbacks->einfo
15217                 /* xgettext:c-format */
15218                 (_("%H: error: %s not a multiple of %u\n"),
15219                  input_bfd, input_section, rel->r_offset,
15220                  howto->name,
15221                  mask + 1);
15222               bfd_set_error (bfd_error_bad_value);
15223               ret = FALSE;
15224               goto copy_reloc;
15225             }
15226           break;
15227         }
15228
15229       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
15230          because such sections are not SEC_ALLOC and thus ld.so will
15231          not process them.  */
15232       if (unresolved_reloc
15233           && !((input_section->flags & SEC_DEBUGGING) != 0
15234                && h->elf.def_dynamic)
15235           && _bfd_elf_section_offset (output_bfd, info, input_section,
15236                                       rel->r_offset) != (bfd_vma) -1)
15237         {
15238           info->callbacks->einfo
15239             /* xgettext:c-format */
15240             (_("%H: unresolvable %s against `%T'\n"),
15241              input_bfd, input_section, rel->r_offset,
15242              howto->name,
15243              h->elf.root.root.string);
15244           ret = FALSE;
15245         }
15246
15247       /* 16-bit fields in insns mostly have signed values, but a
15248          few insns have 16-bit unsigned values.  Really, we should
15249          have different reloc types.  */
15250       if (howto->complain_on_overflow != complain_overflow_dont
15251           && howto->dst_mask == 0xffff
15252           && (input_section->flags & SEC_CODE) != 0)
15253         {
15254           enum complain_overflow complain = complain_overflow_signed;
15255
15256           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
15257           if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */)
15258             complain = complain_overflow_bitfield;
15259           else if (howto->rightshift == 0
15260                    ? ((insn & (0x3f << 26)) == 28u << 26 /* andi */
15261                       || (insn & (0x3f << 26)) == 24u << 26 /* ori */
15262                       || (insn & (0x3f << 26)) == 26u << 26 /* xori */)
15263                    : ((insn & (0x3f << 26)) == 29u << 26 /* andis */
15264                       || (insn & (0x3f << 26)) == 25u << 26 /* oris */
15265                       || (insn & (0x3f << 26)) == 27u << 26 /* xoris */))
15266             complain = complain_overflow_unsigned;
15267           if (howto->complain_on_overflow != complain)
15268             {
15269               alt_howto = *howto;
15270               alt_howto.complain_on_overflow = complain;
15271               howto = &alt_howto;
15272             }
15273         }
15274
15275       if (r_type == R_PPC64_REL16DX_HA)
15276         {
15277           /* Split field reloc isn't handled by _bfd_final_link_relocate.  */
15278           if (rel->r_offset + 4 > input_section->size)
15279             r = bfd_reloc_outofrange;
15280           else
15281             {
15282               relocation += addend;
15283               relocation -= (rel->r_offset
15284                              + input_section->output_offset
15285                              + input_section->output_section->vma);
15286               relocation = (bfd_signed_vma) relocation >> 16;
15287               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
15288               insn &= ~0x1fffc1;
15289               insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
15290               bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
15291               r = bfd_reloc_ok;
15292               if (relocation + 0x8000 > 0xffff)
15293                 r = bfd_reloc_overflow;
15294             }
15295         }
15296       else
15297         r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
15298                                       rel->r_offset, relocation, addend);
15299
15300       if (r != bfd_reloc_ok)
15301         {
15302           char *more_info = NULL;
15303           const char *reloc_name = howto->name;
15304
15305           if (reloc_dest != DEST_NORMAL)
15306             {
15307               more_info = bfd_malloc (strlen (reloc_name) + 8);
15308               if (more_info != NULL)
15309                 {
15310                   strcpy (more_info, reloc_name);
15311                   strcat (more_info, (reloc_dest == DEST_OPD
15312                                       ? " (OPD)" : " (stub)"));
15313                   reloc_name = more_info;
15314                 }
15315             }
15316
15317           if (r == bfd_reloc_overflow)
15318             {
15319               /* On code like "if (foo) foo();" don't report overflow
15320                  on a branch to zero when foo is undefined.  */
15321               if (!warned
15322                   && (reloc_dest == DEST_STUB
15323                       || !(h != NULL
15324                            && (h->elf.root.type == bfd_link_hash_undefweak
15325                                || h->elf.root.type == bfd_link_hash_undefined)
15326                            && is_branch_reloc (r_type))))
15327                 info->callbacks->reloc_overflow (info, &h->elf.root,
15328                                                  sym_name, reloc_name,
15329                                                  orig_rel.r_addend,
15330                                                  input_bfd, input_section,
15331                                                  rel->r_offset);
15332             }
15333           else
15334             {
15335               info->callbacks->einfo
15336                 /* xgettext:c-format */
15337                 (_("%H: %s against `%T': error %d\n"),
15338                  input_bfd, input_section, rel->r_offset,
15339                  reloc_name, sym_name, (int) r);
15340               ret = FALSE;
15341             }
15342           if (more_info != NULL)
15343             free (more_info);
15344         }
15345     copy_reloc:
15346       if (wrel != rel)
15347         *wrel = *rel;
15348     }
15349
15350   if (wrel != rel)
15351     {
15352       Elf_Internal_Shdr *rel_hdr;
15353       size_t deleted = rel - wrel;
15354
15355       rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section);
15356       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
15357       if (rel_hdr->sh_size == 0)
15358         {
15359           /* It is too late to remove an empty reloc section.  Leave
15360              one NONE reloc.
15361              ??? What is wrong with an empty section???  */
15362           rel_hdr->sh_size = rel_hdr->sh_entsize;
15363           deleted -= 1;
15364         }
15365       rel_hdr = _bfd_elf_single_rel_hdr (input_section);
15366       rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted;
15367       input_section->reloc_count -= deleted;
15368     }
15369
15370   /* If we're emitting relocations, then shortly after this function
15371      returns, reloc offsets and addends for this section will be
15372      adjusted.  Worse, reloc symbol indices will be for the output
15373      file rather than the input.  Save a copy of the relocs for
15374      opd_entry_value.  */
15375   if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
15376     {
15377       bfd_size_type amt;
15378       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
15379       rel = bfd_alloc (input_bfd, amt);
15380       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
15381       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
15382       if (rel == NULL)
15383         return FALSE;
15384       memcpy (rel, relocs, amt);
15385     }
15386   return ret;
15387 }
15388
15389 /* Adjust the value of any local symbols in opd sections.  */
15390
15391 static int
15392 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
15393                               const char *name ATTRIBUTE_UNUSED,
15394                               Elf_Internal_Sym *elfsym,
15395                               asection *input_sec,
15396                               struct elf_link_hash_entry *h)
15397 {
15398   struct _opd_sec_data *opd;
15399   long adjust;
15400   bfd_vma value;
15401
15402   if (h != NULL)
15403     return 1;
15404
15405   opd = get_opd_info (input_sec);
15406   if (opd == NULL || opd->adjust == NULL)
15407     return 1;
15408
15409   value = elfsym->st_value - input_sec->output_offset;
15410   if (!bfd_link_relocatable (info))
15411     value -= input_sec->output_section->vma;
15412
15413   adjust = opd->adjust[OPD_NDX (value)];
15414   if (adjust == -1)
15415     return 2;
15416
15417   elfsym->st_value += adjust;
15418   return 1;
15419 }
15420
15421 /* Finish up dynamic symbol handling.  We set the contents of various
15422    dynamic sections here.  */
15423
15424 static bfd_boolean
15425 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
15426                                  struct bfd_link_info *info,
15427                                  struct elf_link_hash_entry *h,
15428                                  Elf_Internal_Sym *sym)
15429 {
15430   struct ppc_link_hash_table *htab;
15431   struct plt_entry *ent;
15432   Elf_Internal_Rela rela;
15433   bfd_byte *loc;
15434
15435   htab = ppc_hash_table (info);
15436   if (htab == NULL)
15437     return FALSE;
15438
15439   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
15440     if (ent->plt.offset != (bfd_vma) -1)
15441       {
15442         /* This symbol has an entry in the procedure linkage
15443            table.  Set it up.  */
15444         if (!htab->elf.dynamic_sections_created
15445             || h->dynindx == -1)
15446           {
15447             BFD_ASSERT (h->type == STT_GNU_IFUNC
15448                         && h->def_regular
15449                         && (h->root.type == bfd_link_hash_defined
15450                             || h->root.type == bfd_link_hash_defweak));
15451             rela.r_offset = (htab->elf.iplt->output_section->vma
15452                              + htab->elf.iplt->output_offset
15453                              + ent->plt.offset);
15454             if (htab->opd_abi)
15455               rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
15456             else
15457               rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
15458             rela.r_addend = (h->root.u.def.value
15459                              + h->root.u.def.section->output_offset
15460                              + h->root.u.def.section->output_section->vma
15461                              + ent->addend);
15462             loc = (htab->elf.irelplt->contents
15463                    + (htab->elf.irelplt->reloc_count++
15464                       * sizeof (Elf64_External_Rela)));
15465             htab->local_ifunc_resolver = 1;
15466           }
15467         else
15468           {
15469             rela.r_offset = (htab->elf.splt->output_section->vma
15470                              + htab->elf.splt->output_offset
15471                              + ent->plt.offset);
15472             rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
15473             rela.r_addend = ent->addend;
15474             loc = (htab->elf.srelplt->contents
15475                    + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
15476                       / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
15477             if (h->type == STT_GNU_IFUNC && is_static_defined (h))
15478               htab->maybe_local_ifunc_resolver = 1;
15479           }
15480         bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
15481
15482         if (!htab->opd_abi)
15483           {
15484             if (!h->def_regular)
15485               {
15486                 /* Mark the symbol as undefined, rather than as
15487                    defined in glink.  Leave the value if there were
15488                    any relocations where pointer equality matters
15489                    (this is a clue for the dynamic linker, to make
15490                    function pointer comparisons work between an
15491                    application and shared library), otherwise set it
15492                    to zero.  */
15493                 sym->st_shndx = SHN_UNDEF;
15494                 if (!h->pointer_equality_needed)
15495                   sym->st_value = 0;
15496                 else if (!h->ref_regular_nonweak)
15497                   {
15498                     /* This breaks function pointer comparisons, but
15499                        that is better than breaking tests for a NULL
15500                        function pointer.  */
15501                     sym->st_value = 0;
15502                   }
15503               }
15504           }
15505       }
15506
15507   if (h->needs_copy)
15508     {
15509       /* This symbol needs a copy reloc.  Set it up.  */
15510       asection *srel;
15511
15512       if (h->dynindx == -1
15513           || (h->root.type != bfd_link_hash_defined
15514               && h->root.type != bfd_link_hash_defweak)
15515           || htab->elf.srelbss == NULL
15516           || htab->elf.sreldynrelro == NULL)
15517         abort ();
15518
15519       rela.r_offset = (h->root.u.def.value
15520                        + h->root.u.def.section->output_section->vma
15521                        + h->root.u.def.section->output_offset);
15522       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
15523       rela.r_addend = 0;
15524       if (h->root.u.def.section == htab->elf.sdynrelro)
15525         srel = htab->elf.sreldynrelro;
15526       else
15527         srel = htab->elf.srelbss;
15528       loc = srel->contents;
15529       loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
15530       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
15531     }
15532
15533   return TRUE;
15534 }
15535
15536 /* Used to decide how to sort relocs in an optimal manner for the
15537    dynamic linker, before writing them out.  */
15538
15539 static enum elf_reloc_type_class
15540 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
15541                             const asection *rel_sec,
15542                             const Elf_Internal_Rela *rela)
15543 {
15544   enum elf_ppc64_reloc_type r_type;
15545   struct ppc_link_hash_table *htab = ppc_hash_table (info);
15546
15547   if (rel_sec == htab->elf.irelplt)
15548     return reloc_class_ifunc;
15549
15550   r_type = ELF64_R_TYPE (rela->r_info);
15551   switch (r_type)
15552     {
15553     case R_PPC64_RELATIVE:
15554       return reloc_class_relative;
15555     case R_PPC64_JMP_SLOT:
15556       return reloc_class_plt;
15557     case R_PPC64_COPY:
15558       return reloc_class_copy;
15559     default:
15560       return reloc_class_normal;
15561     }
15562 }
15563
15564 /* Finish up the dynamic sections.  */
15565
15566 static bfd_boolean
15567 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
15568                                    struct bfd_link_info *info)
15569 {
15570   struct ppc_link_hash_table *htab;
15571   bfd *dynobj;
15572   asection *sdyn;
15573
15574   htab = ppc_hash_table (info);
15575   if (htab == NULL)
15576     return FALSE;
15577
15578   dynobj = htab->elf.dynobj;
15579   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
15580
15581   if (htab->elf.dynamic_sections_created)
15582     {
15583       Elf64_External_Dyn *dyncon, *dynconend;
15584
15585       if (sdyn == NULL || htab->elf.sgot == NULL)
15586         abort ();
15587
15588       dyncon = (Elf64_External_Dyn *) sdyn->contents;
15589       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
15590       for (; dyncon < dynconend; dyncon++)
15591         {
15592           Elf_Internal_Dyn dyn;
15593           asection *s;
15594
15595           bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
15596
15597           switch (dyn.d_tag)
15598             {
15599             default:
15600               continue;
15601
15602             case DT_PPC64_GLINK:
15603               s = htab->glink;
15604               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
15605               /* We stupidly defined DT_PPC64_GLINK to be the start
15606                  of glink rather than the first entry point, which is
15607                  what ld.so needs, and now have a bigger stub to
15608                  support automatic multiple TOCs.  */
15609               dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 8 * 4;
15610               break;
15611
15612             case DT_PPC64_OPD:
15613               s = bfd_get_section_by_name (output_bfd, ".opd");
15614               if (s == NULL)
15615                 continue;
15616               dyn.d_un.d_ptr = s->vma;
15617               break;
15618
15619             case DT_PPC64_OPT:
15620               if (htab->do_multi_toc && htab->multi_toc_needed)
15621                 dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
15622               if (htab->has_plt_localentry0)
15623                 dyn.d_un.d_val |= PPC64_OPT_LOCALENTRY;
15624               break;
15625
15626             case DT_PPC64_OPDSZ:
15627               s = bfd_get_section_by_name (output_bfd, ".opd");
15628               if (s == NULL)
15629                 continue;
15630               dyn.d_un.d_val = s->size;
15631               break;
15632
15633             case DT_PLTGOT:
15634               s = htab->elf.splt;
15635               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
15636               break;
15637
15638             case DT_JMPREL:
15639               s = htab->elf.srelplt;
15640               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
15641               break;
15642
15643             case DT_PLTRELSZ:
15644               dyn.d_un.d_val = htab->elf.srelplt->size;
15645               break;
15646
15647             case DT_TEXTREL:
15648               if (htab->local_ifunc_resolver)
15649                 info->callbacks->einfo
15650                   (_("%X%P: text relocations and GNU indirect "
15651                      "functions will result in a segfault at runtime\n"));
15652               else if (htab->maybe_local_ifunc_resolver)
15653                 info->callbacks->einfo
15654                   (_("%P: warning: text relocations and GNU indirect "
15655                      "functions may result in a segfault at runtime\n"));
15656               continue;
15657             }
15658
15659           bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
15660         }
15661     }
15662
15663   if (htab->elf.sgot != NULL && htab->elf.sgot->size != 0
15664       && htab->elf.sgot->output_section != bfd_abs_section_ptr)
15665     {
15666       /* Fill in the first entry in the global offset table.
15667          We use it to hold the link-time TOCbase.  */
15668       bfd_put_64 (output_bfd,
15669                   elf_gp (output_bfd) + TOC_BASE_OFF,
15670                   htab->elf.sgot->contents);
15671
15672       /* Set .got entry size.  */
15673       elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 8;
15674     }
15675
15676   if (htab->elf.splt != NULL && htab->elf.splt->size != 0
15677       && htab->elf.splt->output_section != bfd_abs_section_ptr)
15678     {
15679       /* Set .plt entry size.  */
15680       elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize
15681         = PLT_ENTRY_SIZE (htab);
15682     }
15683
15684   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
15685      brlt ourselves if emitrelocations.  */
15686   if (htab->brlt != NULL
15687       && htab->brlt->reloc_count != 0
15688       && !_bfd_elf_link_output_relocs (output_bfd,
15689                                        htab->brlt,
15690                                        elf_section_data (htab->brlt)->rela.hdr,
15691                                        elf_section_data (htab->brlt)->relocs,
15692                                        NULL))
15693     return FALSE;
15694
15695   if (htab->glink != NULL
15696       && htab->glink->reloc_count != 0
15697       && !_bfd_elf_link_output_relocs (output_bfd,
15698                                        htab->glink,
15699                                        elf_section_data (htab->glink)->rela.hdr,
15700                                        elf_section_data (htab->glink)->relocs,
15701                                        NULL))
15702     return FALSE;
15703
15704   if (htab->glink_eh_frame != NULL
15705       && htab->glink_eh_frame->size != 0)
15706     {
15707       bfd_vma val;
15708       bfd_byte *p;
15709       struct map_stub *group;
15710       size_t align = 4;
15711
15712       p = htab->glink_eh_frame->contents;
15713       p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
15714
15715       for (group = htab->group; group != NULL; group = group->next)
15716         if (group->stub_sec != NULL)
15717           {
15718             /* Offset to stub section.  */
15719             val = (group->stub_sec->output_section->vma
15720                    + group->stub_sec->output_offset);
15721             val -= (htab->glink_eh_frame->output_section->vma
15722                     + htab->glink_eh_frame->output_offset
15723                     + (p + 8 - htab->glink_eh_frame->contents));
15724             if (val + 0x80000000 > 0xffffffff)
15725               {
15726                 info->callbacks->einfo
15727                   (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
15728                    group->stub_sec->name);
15729                 return FALSE;
15730               }
15731             bfd_put_32 (dynobj, val, p + 8);
15732             p += stub_eh_frame_size (group, align);
15733           }
15734       if (htab->glink != NULL && htab->glink->size != 0)
15735         {
15736           /* Offset to .glink.  */
15737           val = (htab->glink->output_section->vma
15738                  + htab->glink->output_offset
15739                  + 8);
15740           val -= (htab->glink_eh_frame->output_section->vma
15741                   + htab->glink_eh_frame->output_offset
15742                   + (p + 8 - htab->glink_eh_frame->contents));
15743           if (val + 0x80000000 > 0xffffffff)
15744             {
15745               info->callbacks->einfo
15746                 (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
15747                  htab->glink->name);
15748               return FALSE;
15749             }
15750           bfd_put_32 (dynobj, val, p + 8);
15751           p += (24 + align - 1) & -align;
15752         }
15753
15754       if (htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
15755           && !_bfd_elf_write_section_eh_frame (output_bfd, info,
15756                                                htab->glink_eh_frame,
15757                                                htab->glink_eh_frame->contents))
15758         return FALSE;
15759     }
15760
15761   /* We need to handle writing out multiple GOT sections ourselves,
15762      since we didn't add them to DYNOBJ.  We know dynobj is the first
15763      bfd.  */
15764   while ((dynobj = dynobj->link.next) != NULL)
15765     {
15766       asection *s;
15767
15768       if (!is_ppc64_elf (dynobj))
15769         continue;
15770
15771       s = ppc64_elf_tdata (dynobj)->got;
15772       if (s != NULL
15773           && s->size != 0
15774           && s->output_section != bfd_abs_section_ptr
15775           && !bfd_set_section_contents (output_bfd, s->output_section,
15776                                         s->contents, s->output_offset,
15777                                         s->size))
15778         return FALSE;
15779       s = ppc64_elf_tdata (dynobj)->relgot;
15780       if (s != NULL
15781           && s->size != 0
15782           && s->output_section != bfd_abs_section_ptr
15783           && !bfd_set_section_contents (output_bfd, s->output_section,
15784                                         s->contents, s->output_offset,
15785                                         s->size))
15786         return FALSE;
15787     }
15788
15789   return TRUE;
15790 }
15791
15792 #include "elf64-target.h"
15793
15794 /* FreeBSD support */
15795
15796 #undef  TARGET_LITTLE_SYM
15797 #undef  TARGET_LITTLE_NAME
15798
15799 #undef  TARGET_BIG_SYM
15800 #define TARGET_BIG_SYM  powerpc_elf64_fbsd_vec
15801 #undef  TARGET_BIG_NAME
15802 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
15803
15804 #undef  ELF_OSABI
15805 #define ELF_OSABI       ELFOSABI_FREEBSD
15806
15807 #undef  elf64_bed
15808 #define elf64_bed       elf64_powerpc_fbsd_bed
15809
15810 #include "elf64-target.h"